Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
420 commits
Select commit Hold shift + click to select a range
b77d79c
Merge pull request #13365 from cli/wm-fix-skills-acceptance-tests
babakks May 7, 2026
cdda57e
Bump Go toolchain to 1.26.3
Copilot May 7, 2026
7cf93e7
Merge pull request #13367 from cli/copilot/bump-go-to-1-26-3
BagToad May 8, 2026
701492b
chore(deps): bump golang.org/x/sys from 0.43.0 to 0.44.0
dependabot[bot] May 8, 2026
8fb4f33
Fix triage-pull-requests skipping PRs that open as draft
BagToad May 8, 2026
9b505c3
Merge pull request #13383 from cli/kw/triage-fix-ready-for-review
babakks May 9, 2026
3d9f22c
fix(telemetry): use CREATE_NO_WINDOW to prevent tzutil console flash …
adehad May 9, 2026
d9fab03
add skill list command
tommaso-moro May 11, 2026
601dd34
fix(copilot): hint to run copilot directly when exec fails
babakks May 11, 2026
ae7bd54
fix(copilot): provide full path to copilot binary on exec error
babakks May 12, 2026
24c7b25
fix(copilot): update test assertion to match updated error message
Copilot May 12, 2026
fe996d3
Merge pull request #13393 from cli/babakks/improve-gh-copilot-error
babakks May 12, 2026
2733bfb
Merge pull request #13126 from sassdawe/patch-1
babakks May 12, 2026
30d596f
Merge pull request #13381 from cli/dependabot/go_modules/golang.org/x…
babakks May 12, 2026
965f63b
chore(deps): bump golang.org/x/term from 0.42.0 to 0.43.0
dependabot[bot] May 12, 2026
eeaa3da
Merge pull request #13396 from cli/dependabot/go_modules/golang.org/x…
babakks May 12, 2026
6b3421b
chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.81.0
dependabot[bot] May 12, 2026
b2e6abd
Merge pull request #13346 from cli/dependabot/go_modules/google.golan…
babakks May 12, 2026
dc5d392
chore(deps): bump golang.org/x/text from 0.36.0 to 0.37.0
dependabot[bot] May 12, 2026
ddf5106
Merge pull request #13397 from cli/dependabot/go_modules/golang.org/x…
babakks May 12, 2026
83bc3de
Update CODEOWNERS for skills directory ownership
williammartin May 13, 2026
b88de96
Merge pull request #13416 from cli/williammartin-patch-1
williammartin May 13, 2026
1e6bb88
Merge pull request #13353 from adehad/fix/telemetry-windows-console-f…
williammartin May 13, 2026
8c69492
Initial plan
Copilot Jan 29, 2026
f561003
Update bump-go.sh to handle missing toolchain directive
Copilot Jan 29, 2026
653ffc2
Improve version comparison to handle both X.Y.0 and X.Y.Z formats
Copilot Jan 29, 2026
209ef1d
Address code review comments
Copilot Jan 29, 2026
355f507
Rewrite script to use go mod edit instead of grep/sed
Copilot Jan 29, 2026
d2cc91b
Remove unnecessary null checks in jq output handling
Copilot Jan 29, 2026
e5f5427
Simplify bump-go.sh toolchain logic
williammartin May 13, 2026
3216f18
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 13, 2026
2b7e776
Merge pull request #12581 from cli/copilot/update-bump-go-script-resi…
williammartin May 13, 2026
712826a
chore(deps): bump golang.org/x/crypto from 0.50.0 to 0.51.0
dependabot[bot] May 13, 2026
216b7cf
fix linting
tommaso-moro May 13, 2026
1fac121
fix tests
tommaso-moro May 13, 2026
8bef879
docs: fix duplicated "of" in release-process-deep-dive
vip892766gma May 14, 2026
b99d73d
Merge pull request #13420 from cli/dependabot/go_modules/golang.org/x…
babakks May 14, 2026
5c437a8
Derive digest algorithm from ref length in release verify commands
bdehamer May 14, 2026
93e0a28
chore(deps): bump google.golang.org/grpc from 1.81.0 to 1.81.1
dependabot[bot] May 15, 2026
751ae57
Merge pull request #13436 from cli/dependabot/go_modules/google.golan…
babakks May 15, 2026
d9eb062
Assert digest prefix in release verify no-attestation tests
bdehamer May 15, 2026
f1c10e0
Merge pull request #13430 from bdehamer/fix-release-verify-digest-alg…
bdehamer May 15, 2026
084afb3
docs: drop --repo gh-cli from dnf install lines
c-tonneslan May 16, 2026
2a98757
fix test
tommaso-moro May 18, 2026
46c5aa7
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 18, 2026
81ed6d4
Merge pull request #13444 from c-tonneslan/docs/dnf-install-drop-repo…
babakks May 18, 2026
d69921c
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 18, 2026
00fc8c9
fix discovery support in nested dirs
tommaso-moro May 19, 2026
fb748cb
add logic to preview too
tommaso-moro May 19, 2026
5580875
skip prompting for skills without metadata when running gh skill upda…
tommaso-moro May 19, 2026
abac9a1
chore(deps): bump github.com/theupdateframework/go-tuf/v2
dependabot[bot] May 20, 2026
16a2034
fix warning message to make it clear
tommaso-moro May 20, 2026
3faf4e9
Remove third-party license debris
williammartin May 20, 2026
97d1cbd
add --all flag to install all skills in a repo
tommaso-moro May 20, 2026
dc246cd
Merge pull request #13470 from cli/wm-remove-third-party-debris
williammartin May 20, 2026
57480dd
Remove dependency on persistent token
williammartin May 20, 2026
2fb8566
Merge pull request #13474 from cli/wm-no-more-automation-token
williammartin May 20, 2026
6b5e3bc
Remove discussion workflow
williammartin May 20, 2026
0945982
Merge pull request #13476 from cli/wm-no-discuss-workflow
williammartin May 20, 2026
6bbaae0
chore(deps): bump goreleaser/goreleaser-action from 7.2.1 to 7.2.2 (#…
dependabot[bot] May 20, 2026
f311024
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 21, 2026
b49fc31
Stop bumping homebrew on release
williammartin May 21, 2026
69148fb
Potential fix for pull request finding
williammartin May 21, 2026
230498e
Potential fix for pull request finding
williammartin May 21, 2026
88b0c51
address bagtoad's feedback
tommaso-moro May 21, 2026
0a68614
Merge pull request #13479 from cli/wm-no-homebrew
williammartin May 21, 2026
48ef6eb
handle skills in skills/ folder when running list command, by marking…
tommaso-moro May 22, 2026
958c063
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 22, 2026
1bfcf1c
Merge pull request #13486 from cli/tommy/update-x-crypto
tommaso-moro May 22, 2026
a9026fd
Run govulncheck daily instead of weekly
williammartin May 22, 2026
386d72e
chore(deps): bump github.com/google/go-containerregistry
dependabot[bot] May 22, 2026
d4a57fe
Add 3 day dependabot cooldown period
williammartin May 22, 2026
4453f27
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 22, 2026
55662f4
Add 3 day dependabot cooldown period (#13488)
williammartin May 22, 2026
806c553
Merge pull request #13487 from cli/wm-more-vulncheck
williammartin May 22, 2026
01e0b8d
chore(deps): bump github/codeql-action from 4 to 4.35.5
dependabot[bot] May 22, 2026
8bd5696
Merge pull request #13489 from cli/dependabot/github_actions/github/c…
williammartin May 22, 2026
6bc74f8
Merge branch 'trunk' into tommy/skills-list
tommaso-moro May 22, 2026
ad99832
Merge branch 'trunk' into tommy/nested-dirs-bug-fix
tommaso-moro May 22, 2026
994024f
address copilot comments
tommaso-moro May 22, 2026
8a2feab
Merge branch 'trunk' into tommy/skill-install-all-flag
tommaso-moro May 22, 2026
94e3b1f
SHA pin first-party GitHub Actions
williammartin May 22, 2026
fb67170
address copilot comments, clarify text
tommaso-moro May 22, 2026
909cbd7
Merge pull request #13491 from cli/wm-sha-pin
williammartin May 22, 2026
e60f00e
Allow agents as application for secrets (#13421)
tenjaa May 22, 2026
87c8d19
Link to Accessibility category for community discussions instead of A…
mxie May 22, 2026
5a86bf2
Merge pull request #13425 from vip892766gma/docs/fix-duplicated-of-in…
BagToad May 22, 2026
d99c18c
Merge pull request #13462 from cli/dependabot/go_modules/github.com/t…
BagToad May 22, 2026
e53ff32
Merge pull request #13457 from cli/dependabot/go_modules/github.com/g…
BagToad May 22, 2026
be4ad7e
bump golang.org/x/net
BagToad May 22, 2026
d2006fe
Merge pull request #13510 from cli/bagtoad/bump-x-net-0-55-0
BagToad May 24, 2026
a5be6be
docs: note immutable releases starting v2.93.0
BagToad May 25, 2026
2cd93eb
chore(deps): bump github.com/gdamore/tcell/v2 from 2.13.9 to 2.13.10
dependabot[bot] May 25, 2026
34f71fe
chore(deps): bump golangci/golangci-lint-action from 9.2.0 to 9.2.1
dependabot[bot] May 25, 2026
9a593ce
Merge pull request #13518 from cli/kw/immutable-releases-readme
babakks May 26, 2026
a4ab187
support custom CLAUDE_CONFIG_DIR in install
tommaso-moro May 26, 2026
7a89b91
fix test
tommaso-moro May 26, 2026
e6dfcd3
fix: use separate http client for non-github hosts
babakks May 27, 2026
1f92732
Merge commit from fork
babakks May 27, 2026
98d91db
test(attestation): align integration tests with new external HTTP client
BagToad May 27, 2026
f96972c
Merge pull request #13536 from cli/bagtoad/kw-fix-attestation-integra…
BagToad May 27, 2026
ecdbd6f
Sanitize terminal control characters in skill list output
BagToad May 28, 2026
989ee0c
Stat SKILL.md before reading in skill list
BagToad May 28, 2026
ea42d46
Rename hosts field and helpers to agentHosts in skill list
BagToad May 28, 2026
69e6ecc
Use github-copilot agent ID in skill list tests and help text
BagToad May 28, 2026
f22ad8f
Merge pull request #13521 from cli/dependabot/github_actions/golangci…
niik May 29, 2026
9a2f330
Merge pull request #13520 from cli/dependabot/go_modules/github.com/g…
niik May 29, 2026
5cfb648
Merge pull request #13469 from cli/tommy/skill-update-all-fix
babakks Jun 1, 2026
51b7653
feat(discussion/client): add discussion client package
babakks Jun 1, 2026
d3a1538
feat(discussion/shared): add shared utilities for discussion commands
babakks Jun 1, 2026
8b73951
feat(discussion list): add discussion list command
babakks Jun 1, 2026
57008e7
feat(discussion view): add discussion view command
babakks Jun 1, 2026
7bd67a8
feat(discussion create): add discussion create command
babakks Jun 1, 2026
797effe
feat(discussion edit): add discussion edit command
babakks Jun 1, 2026
4d011e0
Merge branch 'trunk' into tommy/skills-list
tommaso-moro Jun 1, 2026
e6fa2fa
Merge pull request #13471 from cli/tommy/skill-install-all-flag
tommaso-moro Jun 1, 2026
b5e729c
Merge branch 'trunk' into tommy/skills-list
tommaso-moro Jun 1, 2026
678660b
address review comments
tommaso-moro Jun 1, 2026
7f88572
Merge pull request #13459 from cli/tommy/nested-dirs-bug-fix
babakks Jun 2, 2026
76576d2
chore(deps): bump github.com/mattn/go-colorable from 0.1.14 to 0.1.15
dependabot[bot] Jun 2, 2026
7381d1c
Bump Go to 1.26.4
web-flow Jun 3, 2026
46480af
Merge pull request #13578 from cli/bump-go-1.26.4
babakks Jun 3, 2026
20147bf
Merge pull request #13057 from cli/kw/issues-2.0
BagToad Jun 4, 2026
dc5d7c1
fix(discussion): various polish and small fixes
babakks Jun 4, 2026
0d93148
refactor(discussion): extract command-level consts for enums
babakks Jun 4, 2026
97b2296
refactor(discussion list): make pager call/error consistent with view…
babakks Jun 4, 2026
dcd3507
docs(discussion/client): add godoc to exported consts
babakks Jun 4, 2026
d6a089d
chore(discussion/client): fix formatting
babakks Jun 4, 2026
7ef9c54
Auto-install official extension stubs in CI (#13581)
BagToad Jun 4, 2026
0faf4b0
Clean up deferred issue update helper (#13584)
BagToad Jun 4, 2026
674e02a
Merge pull request #13418 from cli/tommy/skills-list
BagToad Jun 4, 2026
b102900
fix(discussion): handle partial failure on create/update label mutations
babakks Jun 5, 2026
6dcb0b0
docs(discussion view): improve long help text for clarity
babakks Jun 5, 2026
b8361f8
chore(deps): bump charm.land/bubbletea/v2 from 2.0.6 to 2.0.7
dependabot[bot] Jun 5, 2026
def924b
chore(deps): bump github/codeql-action from 4.36.0 to 4.36.1
dependabot[bot] Jun 5, 2026
8c582eb
chore(deps): bump actions/checkout from 6.0.2 to 6.0.3
dependabot[bot] Jun 5, 2026
db66865
Merge pull request #13597 from cli/dependabot/github_actions/actions/…
BagToad Jun 5, 2026
19ac156
Merge pull request #13596 from cli/dependabot/github_actions/github/c…
BagToad Jun 5, 2026
898d972
Merge pull request #13595 from cli/dependabot/go_modules/charm.land/b…
BagToad Jun 5, 2026
ea72240
Merge pull request #13572 from cli/dependabot/go_modules/github.com/m…
BagToad Jun 5, 2026
6b86763
feat(extension): alias `uninstall` to `remove`
BagToad Jun 5, 2026
5c9ec1c
Merge pull request #13599 from cli/bagtoad/kw-issue-13598-extension-u…
babakks Jun 5, 2026
fbd733e
refactor(discussion): add Cursor field and ExportData to DiscussionLi…
babakks Jun 5, 2026
e104885
refactor(discussion/client): precheck discussions enabled via getRepo…
babakks Jun 5, 2026
ca8e126
fix(discussion list): print "answered" instead of checkmark in non-tt…
babakks Jun 5, 2026
ada8583
test(discussion): add acceptance tests for discussion commands
babakks Jun 5, 2026
8ec0830
docs(acceptance): add new jq2env and jq-assert functions
babakks Jun 5, 2026
f147d02
test(discussion list): consolidate tests into table-driven format
babakks Jun 5, 2026
e61df07
Merge branch 'trunk' into feature/discussion
babakks Jun 5, 2026
c1f3c1a
fix(discussion): add missing repo flag override
babakks Jun 8, 2026
1a279ac
chore(deps): bump github/codeql-action from 4.36.1 to 4.36.2
dependabot[bot] Jun 8, 2026
da68cb8
Add terminal-mockup canvas extension for marketing screenshots (#13612)
BagToad Jun 8, 2026
9d413e7
test(discussion list): rename TestNewCmdList2 to TestNewCmdList
babakks Jun 9, 2026
e2d150d
fix(discussion): remove redundant error wrapping on ListCategories
babakks Jun 9, 2026
95fc89c
chore(discussion): remove unused HttpClient field from create and edit
babakks Jun 9, 2026
4166ecf
chore: apply formatting
babakks Jun 9, 2026
2618999
feat(discussion/client): add comment manipulation methods
babakks Jun 6, 2026
6f5e114
feat(discussion): add discussion comment command
babakks Jun 8, 2026
82ac0d7
refactor(acceptance): use discussion comment command instead of raw A…
babakks Jun 8, 2026
2629753
test(acceptance): add discussion comment acceptance test
babakks Jun 8, 2026
61a4476
test(discussion comment): add non-tty delete flag validation test case
babakks Jun 8, 2026
d026f8f
feat(discussion): support comment URLs in --replies and comment command
babakks Jun 8, 2026
6394ca8
test(acceptance): cover discussion comment URLs in comment and view t…
babakks Jun 8, 2026
bc7ed48
chore: fix formatting
babakks Jun 8, 2026
55928c9
refactor(discussion view): replace --replies flag with positional com…
babakks Jun 10, 2026
8747c69
refactor(discussion/client): take host instead of repo in GetComment
babakks Jun 10, 2026
869c044
test(acceptance): use positional comment argument in discussion view …
babakks Jun 10, 2026
8d2b059
fix(discussion view): error when --comments is used with a comment ar…
babakks Jun 10, 2026
42db02d
Merge pull request #13620 from cli/babakks/add-discussion-comment
babakks Jun 10, 2026
27aabfa
fix(discussion view): use color scheme method for success icon
babakks Jun 10, 2026
951d76e
refactor(discussion list): simplify no-results message and use succes…
babakks Jun 10, 2026
9f2da11
fix(discussion view): show comments and replies in chronological order
babakks Jun 10, 2026
06d2e34
docs(discussion list): clarify answered examples refer to Q&A discuss…
babakks Jun 10, 2026
5d77247
fix(discussion view): print only requested items in non-tty output
babakks Jun 10, 2026
d63ab8d
fix(discussion/shared): error on out-of-range discussion number in URL
babakks Jun 10, 2026
5e6a58b
test(acceptance): fix discussion comment acceptance tests
babakks Jun 10, 2026
616d929
chore(discussion/client): rename client files
babakks Jun 10, 2026
69855b7
fix(discussion comment): fix bug in requiring body/body-file in add/e…
babakks Jun 10, 2026
52e8e74
Merge pull request #13541 from cli/feature/discussion
babakks Jun 10, 2026
cac0ba1
Add gh discussion and Issues 2.0 reference to the `gh` skill, plus a …
BagToad Jun 10, 2026
9075b62
docs(discussion): polish help docs
babakks Jun 10, 2026
2ededc5
Potential fix for pull request finding
babakks Jun 10, 2026
57b9b20
Merge pull request #13632 from cli/babakks/fix-discussion-docs
babakks Jun 10, 2026
4343e40
test(skill): merge isolated test into table
babakks Jun 11, 2026
b5fec79
test(skill): fix test case name
babakks Jun 11, 2026
6e755df
chore(deps): bump golang.org/x/text from 0.37.0 to 0.38.0
dependabot[bot] Jun 12, 2026
412c5fa
Merge pull request #13523 from cli/tommy/skill-claude-config-dir-fix
tommaso-moro Jun 15, 2026
a834c67
Merge pull request #13640 from cli/dependabot/go_modules/golang.org/x…
babakks Jun 15, 2026
6f665ed
chore(deps): bump github.com/sigstore/sigstore-go from 1.1.4 to 1.2.1
dependabot[bot] Jun 15, 2026
49b18f5
chore(deps): bump charm.land/lipgloss/v2 from 2.0.3 to 2.0.4
dependabot[bot] Jun 15, 2026
f4cab89
Merge pull request #13663 from cli/dependabot/go_modules/charm.land/l…
babakks Jun 15, 2026
981f43b
chore(deps): bump golang.org/x/term from 0.43.0 to 0.44.0
dependabot[bot] Jun 15, 2026
1e449a2
Merge pull request #13661 from cli/dependabot/go_modules/golang.org/x…
babakks Jun 15, 2026
e66c2c4
Merge pull request #13619 from cli/dependabot/github_actions/github/c…
babakks Jun 15, 2026
54fa0c6
Merge pull request #13662 from cli/dependabot/go_modules/github.com/s…
babakks Jun 15, 2026
ec0fe28
chore(deps): bump golang.org/x/crypto from 0.52.0 to 0.53.0
dependabot[bot] Jun 15, 2026
f15dce8
Merge pull request #13641 from cli/dependabot/go_modules/golang.org/x…
babakks Jun 15, 2026
d05c71a
Make filtering by bot authors more discoverable (#13642)
BagToad Jun 16, 2026
b401862
Bump Go in devcontainer
spenserblack Jun 16, 2026
a6012ac
Merge pull request #13674 from spenserblack/devcontainer
BagToad Jun 16, 2026
733e35c
feat: add `repo read-file` and `repo read-dir` (#13580)
babakks Jun 17, 2026
01bcd47
fix(skills): stage updates in a temp dir and swap in-place (#13449)
SamMorrowDrums Jun 17, 2026
70bb306
feat(skills): list available skills when install runs non-interactive…
SamMorrowDrums Jun 17, 2026
cce391b
fix: show checks summary when all checks were cancelled
s3onghyun Jun 18, 2026
517dae6
fix(skills): install universal agent to ~/.agents/skills
toller892 Jun 18, 2026
32db186
Cover all printSummary branches in a table test
s3onghyun Jun 19, 2026
f4a29a3
docs: fix broken anchor link in release-process-deep-dive (#13688)
patrickwehbe Jun 19, 2026
0274077
Use int64 for GitHub database IDs (#13403)
williammartin Jun 19, 2026
23f83e6
Merge pull request #13679 from s3onghyun/fix-checks-cancelled-only
babakks Jun 22, 2026
2d57360
chore(deps): bump github.com/google/go-containerregistry
dependabot[bot] Jun 22, 2026
5d1d164
ci: pin GitHub Actions to commit SHAs
BagToad Jun 12, 2026
9ad0bcc
Merge pull request #13705 from BagToad/bagtoad/kw-pin-reusable-workfl…
babakks Jun 23, 2026
31625d8
chore(deps): bump github.com/microsoft/dev-tunnels from 0.1.19 to 0.1.27
dependabot[bot] Jun 23, 2026
cd68c69
Merge pull request #13681 from toller892/fix/universal-install-location
tommaso-moro Jun 24, 2026
cc7120e
chore(deps): bump actions/checkout from 6.0.3 to 7.0.0
dependabot[bot] Jun 24, 2026
dd26eb3
Add security disclosure guidance to AGENTS.md (#13720)
BagToad Jun 24, 2026
015e6cf
Merge pull request #13708 from cli/dependabot/go_modules/github.com/m…
babakks Jun 25, 2026
561d9f9
Detect additional third-party coding agents (#13722)
BagToad Jun 25, 2026
954ffc3
Fix flaky TestHuhPrompterMultiSelectWithSearchPersistence on slow arc…
pdostal Jun 25, 2026
751dc5e
fix(release): don't let a failed draft lookup mask a found release
BagToad Jun 24, 2026
f0a128a
feat(release): allow download without authentication
BagToad Jun 24, 2026
7b681a4
fix(cmdutil): honor DisableAuthCheck under repo-override parents
BagToad Jun 25, 2026
71fb4f5
Merge pull request #13723 from cli/bagtoad/disable-auth-check-release…
BagToad Jun 26, 2026
047f43e
Merge pull request #13703 from cli/dependabot/github_actions/actions/…
niik Jun 29, 2026
f2abd40
chore(deps): bump actions/setup-go from 6.4.0 to 6.5.0
dependabot[bot] Jun 29, 2026
a0c0773
Merge pull request #13702 from cli/dependabot/go_modules/github.com/g…
niik Jun 29, 2026
f843011
Merge pull request #13740 from cli/dependabot/github_actions/actions/…
niik Jun 29, 2026
ccaad40
chore(deps): bump actions/attest from 4.1.0 to 4.1.1
dependabot[bot] Jun 29, 2026
19201f3
Merge pull request #13754 from cli/dependabot/github_actions/actions/…
sergiou87 Jun 29, 2026
8a6b76d
docs(search): add examples for multiple qualifiers
happysnaker Jun 30, 2026
6ee1a91
docs(search): simplify raw qualifier examples
happysnaker Jun 30, 2026
2c76101
chore(deps): bump goreleaser/goreleaser-action from 7.2.2 to 7.2.3
dependabot[bot] Jun 30, 2026
b7195a5
Merge pull request #13759 from cli/dependabot/github_actions/goreleas…
babakks Jun 30, 2026
0afaf6f
docs(search): reword raw qualifier examples
happysnaker Jul 1, 2026
ff4e4a2
Merge pull request #13756 from happysnaker/docs-search-qualifier-exam…
babakks Jul 1, 2026
f4ce1d9
chore(deps): bump golangci/golangci-lint-action from 9.2.1 to 9.3.0
dependabot[bot] Jul 2, 2026
397876d
Merge pull request #13779 from cli/dependabot/github_actions/golangci…
sergiou87 Jul 2, 2026
326faaa
Support antigravity-cli and antigravity2.0 in gh skill (#13784)
Copilot Jul 2, 2026
f1d1121
fix(skills): honor --dir without agent prompt (#13766)
happysnaker Jul 2, 2026
fd8bbbd
docs: fix duplicated word in primer README (#13677)
s3onghyun Jul 2, 2026
5cb1b08
Clarify `--clone` boolean flag behaviour in `gh repo fork` help (#13786)
Copilot Jul 2, 2026
6dae307
docs: fix broken install command and link/grammar errors (#13690)
patrickwehbe Jul 2, 2026
74e7791
Fix concurrent map writes in codespace port forwarding (#13313)
williammartin Jul 2, 2026
b300f2e
Merge commit from fork
victoriamaciver Jul 2, 2026
9bd8c74
chore(deps): bump charm.land/lipgloss/v2 from 2.0.4 to 2.0.5
dependabot[bot] Jul 3, 2026
62f01e7
chore(deps): bump github.com/klauspost/compress from 1.18.6 to 1.19.0
dependabot[bot] Jul 3, 2026
cfa2cad
Merge pull request #13790 from cli/dependabot/go_modules/charm.land/l…
babakks Jul 3, 2026
4abc935
chore(deps): bump google.golang.org/grpc from 1.81.1 to 1.82.0
dependabot[bot] Jul 3, 2026
4e40c24
Merge pull request #13789 from cli/dependabot/go_modules/google.golan…
babakks Jul 3, 2026
27762fc
Merge pull request #13791 from cli/dependabot/go_modules/github.com/k…
sergiou87 Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"image": "mcr.microsoft.com/devcontainers/go:1.25",
"image": "mcr.microsoft.com/devcontainers/go:1.26",
"features": {
"ghcr.io/devcontainers/features/sshd:1": {}
},
Expand Down
21 changes: 12 additions & 9 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
* @cli/code-reviewers

pkg/cmd/codespace/ @cli/codespaces
internal/codespaces/ @cli/codespaces
pkg/cmd/codespace/ @cli/codespaces @cli/code-reviewers
internal/codespaces/ @cli/codespaces @cli/code-reviewers

# Limit Package Security team ownership to the attestation command package and related integration tests
pkg/cmd/attestation/ @cli/package-security
pkg/cmd/release/attestation/ @cli/package-security
pkg/cmd/release/verify/ @cli/package-security
pkg/cmd/release/verify-asset/ @cli/package-security
pkg/cmd/release/shared/ @cli/package-security
pkg/cmd/attestation/ @cli/package-security @cli/code-reviewers
pkg/cmd/release/attestation/ @cli/package-security @cli/code-reviewers
pkg/cmd/release/verify/ @cli/package-security @cli/code-reviewers
pkg/cmd/release/verify-asset/ @cli/package-security @cli/code-reviewers
pkg/cmd/release/shared/ @cli/package-security @cli/code-reviewers

test/integration/attestation-cmd @cli/package-security
test/integration/attestation-cmd @cli/package-security @cli/code-reviewers

pkg/cmd/attestation/verification/embed/tuf-repo.github.com/ @cli/tuf-root-reviewers
pkg/cmd/attestation/verification/embed/tuf-repo.github.com/ @cli/tuf-root-reviewers @cli/code-reviewers

pkg/cmd/skills/ @cli/skills @cli/code-reviewers
internal/skills/ @cli/skills @cli/code-reviewers
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ updates:
directory: "/"
schedule:
interval: "daily"
cooldown:
default-days: 3
ignore:
- dependency-name: "*"
update-types:
Expand All @@ -12,3 +14,5 @@ updates:
directory: "/"
schedule:
interval: "daily"
cooldown:
default-days: 3
51 changes: 51 additions & 0 deletions .github/extensions/terminal-mockup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Terminal mockup canvas

A [GitHub Copilot app](https://github.com/github/app) canvas extension
that renders mock-up `gh` output as VSCode-styled terminal screenshots. Built
for producing marketing imagery (blog posts, changelogs, social) where real
terminal recordings are impractical.

## Using it

Open the canvas from a Copilot app session. Pick a starting mockup from the
library dropdown, edit the content and toolbar options, and export a PNG via
the download button. Files download through the browser/runtime, which
typically lands them in the configured downloads directory.

The toolbar controls font, font size, width, window chrome (macOS or none),
backdrop (subtle blue glow / grid / none), and an "auto-style" toggle that
colorizes common `gh` patterns without requiring inline tags.

## Content markup

Content can be authored as raw ANSI escapes, or with a more readable bracket
syntax that the renderer maps to the VSCode Dark+ palette:

- Named colors: `[red]`, `[green]`, `[yellow]`, `[blue]`, `[magenta]`,
`[cyan]`, `[white]`, `[black]` (bright variants prefixed `br`, e.g.
`[brblue]`), plus `[muted]` for grayed-out text and `[link]` for blue
underlined link styling.
- Modifiers: `[bold]` (or `[b]`), `[italic]` (or `[i]`), `[underline]`
(or `[u]`), `[dim]`.
- Each tag closes with its matching `[/name]`, e.g. `[red]error[/red]`.

When auto-style is on, the renderer also colorizes PR/issue states, labels,
checkboxes, timestamps, and similar conventional output without explicit tags.

## Library

Mockups live in two locations:

- **Project library** at `./library/*.json`: committed to the repo, the
shared starting set.
- **User library** at `$COPILOT_HOME/extensions/terminal-mockup/artifacts/*.json`:
local-only, for personal experiments.

Saving a new mockup writes to the user library by default; renaming an
existing one preserves its scope. The dropdown shows both, prefixed by scope.

## Vendored dependencies

[`assets/html2canvas.min.js`](./assets/html2canvas.min.js) is the unmodified
[html2canvas](https://github.com/niklasvh/html2canvas) 1.4.1 distribution
(MIT). Used to rasterize the rendered DOM into a PNG in-browser.
258 changes: 258 additions & 0 deletions .github/extensions/terminal-mockup/assets/ansi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
// ANSI SGR + bracket markup tokenizer.
// Produces a flat array of styled segments: { text, classes }.
//
// Supports:
// - ANSI CSI SGR sequences: \x1b[<params>m (0, 1, 3, 4, 22, 23, 24, 30-37, 39, 90-97, 38;5;N, 38;2;R;G;B)
// - Bracket markup: [b]..[/b], [i]..[/i], [u]..[/u], [dim]..[/dim], [muted]..[/muted], [link]..[/link],
// [red] [green] [yellow] [blue] [magenta] [cyan] [white] [black]
// [brred] [brgreen] [bryellow] [brblue] [brmagenta] [brcyan] [brwhite] [brblack]
// - Plain text passthrough
//
// Bracket tags can nest. ANSI state machine handles standard SGR codes only;
// other CSI/OSC sequences are dropped silently.

const ANSI_FG = {
30: "black", 31: "red", 32: "green", 33: "yellow",
34: "blue", 35: "magenta", 36: "cyan", 37: "white",
90: "br-black", 91: "br-red", 92: "br-green", 93: "br-yellow",
94: "br-blue", 95: "br-magenta", 96: "br-cyan", 97: "br-white",
};

const COLOR_NAMES = new Set([
"red", "green", "yellow", "blue", "magenta", "cyan", "white", "black",
"brred", "brgreen", "bryellow", "brblue", "brmagenta", "brcyan", "brwhite", "brblack",
]);
const TAG_TO_FG = {
red: "red", green: "green", yellow: "yellow", blue: "blue",
magenta: "magenta", cyan: "cyan", white: "white", black: "black",
brred: "br-red", brgreen: "br-green", bryellow: "br-yellow", brblue: "br-blue",
brmagenta: "br-magenta", brcyan: "br-cyan", brwhite: "br-white", brblack: "br-black",
};

function classesFromState(state) {
const cls = [];
if (state.fg) cls.push(`fg-${state.fg}`);
if (state.bold) cls.push("bold");
if (state.italic) cls.push("italic");
if (state.underline) cls.push("underline");
if (state.dim) cls.push("dim");
return cls;
}

function emit(out, text, state) {
if (!text) return;
out.push({ text, classes: classesFromState(state) });
}

// Step 1: parse ANSI escape codes into a flat segment list, ignoring brackets.
function parseAnsi(input) {
const segments = [];
const state = { fg: null, bold: false, italic: false, underline: false, dim: false };
let buf = "";
let i = 0;
while (i < input.length) {
const ch = input.charCodeAt(i);
if (ch === 0x1b && input[i + 1] === "[") {
if (buf) { emit(segments, buf, state); buf = ""; }
// Find terminator
let j = i + 2;
while (j < input.length) {
const c = input.charCodeAt(j);
// CSI parameter bytes: 0x30-0x3f; intermediates: 0x20-0x2f; final: 0x40-0x7e
if (c >= 0x40 && c <= 0x7e) break;
j++;
}
const final = input[j];
const params = input.slice(i + 2, j);
if (final === "m") applySgr(state, params);
i = j + 1;
continue;
}
buf += input[i];
i++;
}
if (buf) emit(segments, buf, state);
return segments;
}

function applySgr(state, paramsStr) {
const tokens = paramsStr.split(";").map((t) => (t === "" ? 0 : Number(t)));
let i = 0;
while (i < tokens.length) {
const t = tokens[i];
if (t === 0) {
state.fg = null; state.bold = false; state.italic = false;
state.underline = false; state.dim = false;
} else if (t === 1) state.bold = true;
else if (t === 2) state.dim = true;
else if (t === 3) state.italic = true;
else if (t === 4) state.underline = true;
else if (t === 22) { state.bold = false; state.dim = false; }
else if (t === 23) state.italic = false;
else if (t === 24) state.underline = false;
else if (t === 39) state.fg = null;
else if (ANSI_FG[t]) state.fg = ANSI_FG[t];
else if (t === 38) {
const mode = tokens[i + 1];
if (mode === 5) {
state.fg = map256(tokens[i + 2]);
i += 2;
} else if (mode === 2) {
// Truecolor not mapped to a named slot; skip params and leave fg unchanged.
i += 4;
}
}
// ignore 40-49, 48 etc (we don't render backgrounds for now)
i++;
}
}

// Map 256-color cube to nearest named slot. Coarse but adequate.
function map256(n) {
if (n == null) return null;
if (n < 8) return ANSI_FG[30 + n] || null;
if (n < 16) return ANSI_FG[90 + (n - 8)] || null;
// Grayscale ramp (232 = near-black, 255 = near-white). The middle range
// is the "muted" gray that gh uses for footer URLs, bullet separators, etc.
if (n >= 232 && n <= 243) return "muted";
if (n >= 244 && n <= 250) return "br-black"; // softer gray
// Color cube fallback: no good mapping, let the default fg apply.
return null;
}
// Step 2: walk segments and split on bracket markup, updating per-segment classes.
function parseBrackets(segments) {
const out = [];
const stack = []; // each entry: array of class strings added by this tag
const tagRe = /\[(\/?)([a-zA-Z]+)\]/g;
for (const seg of segments) {
const text = seg.text;
let last = 0;
tagRe.lastIndex = 0;
let m;
const baseClasses = seg.classes.slice();
while ((m = tagRe.exec(text)) !== null) {
const before = text.slice(last, m.index);
if (before) out.push({ text: before, classes: mergeClasses(baseClasses, stack) });
const closing = m[1] === "/";
const tag = m[2].toLowerCase();
const added = tagToClasses(tag);
if (added.length === 0) {
// Not a recognized tag; treat as literal text.
out.push({ text: m[0], classes: mergeClasses(baseClasses, stack) });
} else if (closing) {
// Pop most recent matching frame.
for (let i = stack.length - 1; i >= 0; i--) {
if (stack[i].tag === tag) { stack.splice(i, 1); break; }
}
} else {
stack.push({ tag, classes: added });
}
last = m.index + m[0].length;
}
const tail = text.slice(last);
if (tail) out.push({ text: tail, classes: mergeClasses(baseClasses, stack) });
}
return out;
}

function tagToClasses(tag) {
if (tag === "b" || tag === "bold") return ["bold"];
if (tag === "i" || tag === "italic") return ["italic"];
if (tag === "u" || tag === "underline") return ["underline"];
if (tag === "dim") return ["dim"];
if (tag === "muted") return ["fg-muted"];
if (tag === "link") return ["fg-br-blue", "underline"];
if (COLOR_NAMES.has(tag)) return [`fg-${TAG_TO_FG[tag]}`];
return [];
}

function mergeClasses(base, stack) {
const set = new Set(base);
for (const frame of stack) {
for (const c of frame.classes) set.add(c);
}
return Array.from(set);
}

// Step 3: optional auto-styling for plain-looking segments.
// Operates only on segments that have no styling yet, to avoid clobbering
// user-specified colors. Splits on detected patterns and inserts styled spans.
function autoStyle(segments) {
const out = [];
for (const seg of segments) {
if (seg.classes.length > 0) {
out.push(seg);
continue;
}
autoStyleSegment(seg.text, out);
}
return out;
}

function autoStyleSegment(text, out) {
// Process line by line so we can detect $ prompts.
const lines = text.split(/(\n)/);
for (const line of lines) {
if (line === "\n") {
out.push({ text: "\n", classes: [] });
continue;
}
if (line === "") continue;
// Prompt line: leading `$ `
const promptMatch = line.match(/^(\s*)(\$)( )(.*)$/);
if (promptMatch) {
const [, leading, dollar, space, rest] = promptMatch;
if (leading) out.push({ text: leading, classes: [] });
out.push({ text: dollar, classes: ["fg-muted"] });
out.push({ text: space, classes: [] });
// Apply inline auto-stylers to the rest of the prompt line
autoStyleInline(rest, out);
continue;
}
autoStyleInline(line, out);
}
}

function autoStyleInline(text, out) {
// Detect URLs and color/dim them; detect standalone +N/-N tokens for diff stats; detect #NNN refs.
// Single regex with alternation; iterate over matches.
const re = /(https?:\/\/[^\s)>\]]+)|(?<![\w/-])([+-]\d+)(?![\w-])|(?<![\w/-])(#\d+)(?![\w-])/g;
let last = 0;
let m;
while ((m = re.exec(text)) !== null) {
if (m.index > last) out.push({ text: text.slice(last, m.index), classes: [] });
if (m[1]) {
out.push({ text: m[1], classes: ["fg-muted"] });
} else if (m[2]) {
const cls = m[2].startsWith("+") ? "fg-br-green" : "fg-br-red";
out.push({ text: m[2], classes: [cls] });
} else if (m[3]) {
out.push({ text: m[3], classes: ["fg-br-blue"] });
}
last = m.index + m[0].length;
}
if (last < text.length) out.push({ text: text.slice(last), classes: [] });
}

export function parse(input, { autoStyle: enableAuto = true } = {}) {
const ansiSegments = parseAnsi(input ?? "");
const bracketSegments = parseBrackets(ansiSegments);
return enableAuto ? autoStyle(bracketSegments) : bracketSegments;
}

export function renderToDom(target, input, opts) {
const segments = parse(input, opts);
target.replaceChildren();
const frag = document.createDocumentFragment();
for (const seg of segments) {
if (seg.classes.length === 0) {
frag.appendChild(document.createTextNode(seg.text));
} else {
const span = document.createElement("span");
span.className = seg.classes.join(" ");
span.textContent = seg.text;
frag.appendChild(span);
}
}
target.appendChild(frag);
}
Loading