Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
298 commits
Select commit Hold shift + click to select a range
2fd2fcf
Merge pull request #13189 from cli/kw/skill-reviewers-codeowners
BagToad Apr 16, 2026
d88705e
Add @cli/code-reviewers to all CODEOWNERS rules
BagToad Apr 16, 2026
7ad1d7c
Suggest and install official extensions via stub commands
williammartin Apr 16, 2026
c805303
Merge pull request #13190 from cli/kw/codeowners-add-code-reviewers
BagToad Apr 16, 2026
9596f99
Add no em dash rule to AGENTS.md
williammartin Apr 16, 2026
abc2a50
Address PR review feedback
williammartin Apr 16, 2026
81afcd0
Merge pull request #13182 from cli/wm/first-party-extension-suggestions
williammartin Apr 16, 2026
1d59334
Replace em-dashes with regular dashes
BagToad Apr 16, 2026
b8d504c
Rename official extension files and types to stubs
BagToad Apr 16, 2026
32b8af1
Remove dispatch after install, install only
BagToad Apr 16, 2026
3265170
Merge pull request #13175 from cli/kw/first-party-extension-suggestions
BagToad Apr 16, 2026
de204f8
fix: apply review feedback — nil HttpClient, local dedup type
SamMorrowDrums Apr 16, 2026
d7961f1
Merge pull request #13185 from cli/sammorrowdrums/skills-post-merge-r…
SamMorrowDrums Apr 16, 2026
5ae5d1d
refactor: replace real git with run.CommandStubber in publish tests
Copilot Apr 16, 2026
bce04e3
Merge branch 'trunk' into sammorrowdrums/skills-replace-git-in-publis…
SamMorrowDrums Apr 16, 2026
c5c7d79
Update publish_test.go
SamMorrowDrums Apr 16, 2026
26d2302
Merge pull request #13188 from cli/sammorrowdrums/skills-replace-git-…
babakks Apr 16, 2026
18dc5e7
Add sampled command telemetry
williammartin Apr 14, 2026
d333093
remove misleading text
tommaso-moro Apr 17, 2026
bc9ba9b
Merge pull request #13203 from cli/tm/skills-search-fix
babakks Apr 17, 2026
3ed389d
Disable telemetry for GHES
williammartin Apr 15, 2026
17776ca
Apply review feedback
williammartin Apr 17, 2026
73f3900
Merge pull request #13191 from cli/wm/add-telemetry-to-cli
williammartin Apr 17, 2026
6709e31
Do not send telemetry for aliases
williammartin Apr 16, 2026
fd28f05
chore(deps): bump github.com/google/go-containerregistry
dependabot[bot] Apr 17, 2026
451d399
Merge pull request #13192 from cli/wm/no-alias-telemetry
williammartin Apr 17, 2026
998b621
Add skills specific telemetry
williammartin Apr 17, 2026
082f15a
Add support for installation in multiple agent hosts in `gh skills in…
tommaso-moro Apr 18, 2026
eaa0185
refactor: decouple hidden-dir filtering from discovery layer
SamMorrowDrums Apr 20, 2026
61a7865
Merge pull request #13213 from cli/sammorrowdrums/sm-allow-hidden-dir…
SamMorrowDrums Apr 20, 2026
78f1ad5
Include CI context in telemetry
williammartin Apr 17, 2026
43f9944
Merge pull request #13210 from cli/wm/record-ci
williammartin Apr 20, 2026
2e64043
fix(skills): stop publish --fix from publishing
SamMorrowDrums Apr 20, 2026
c703294
fix(skills): use canonical 'gh skill' not 'gh skills' alias
SamMorrowDrums Apr 20, 2026
f88a2a6
fix(skills): make --fix and --dry-run mutually exclusive, suppress pu…
SamMorrowDrums Apr 20, 2026
49d4747
Merge pull request #13237 from cli/sammorrowdrums/fix-skill-publish-f…
SamMorrowDrums Apr 20, 2026
a656271
Print `gh auth refresh` for 401 returns
333fred Mar 30, 2026
c139b17
Apply patch from code review feedback.
333fred Apr 20, 2026
9a368f4
feat(skills): support nested skills/ directories in discovery
SamMorrowDrums Apr 17, 2026
3378914
docs(skills): add gh and gh-skill agent skills
BagToad Apr 20, 2026
991e37d
use hyphen instead
BagToad Apr 20, 2026
01ca829
docs(skills): drop hand-copied naming rules from gh-skill
BagToad Apr 20, 2026
72884d9
backtick skill filename
BagToad Apr 20, 2026
65974f5
docs(skills): note --template collisions and single-string search
BagToad Apr 20, 2026
01e3450
fix totalCount guidance
BagToad Apr 20, 2026
74d3773
use the right json field names for skills
BagToad Apr 20, 2026
1160943
fix(skills): match skills by install name in preview command
SamMorrowDrums Apr 21, 2026
a67f4f7
Merge pull request #13235 from cli/sammorrowdrums/fix-skill-install-d…
SamMorrowDrums Apr 21, 2026
6fcc9c2
fix(skills): prioritize DisplayName/Name over InstallName match
SamMorrowDrums Apr 21, 2026
1b236f2
Merge pull request #13249 from cli/sammorrowdrums/fix-skill-install-p…
SamMorrowDrums Apr 21, 2026
c50fb79
Record official extension telemetry
williammartin Apr 17, 2026
e52070e
Merge pull request #13205 from cli/wm/record-official-extension-telem…
williammartin Apr 21, 2026
6b811db
Add telemetry command
williammartin Apr 21, 2026
571bb1c
Log when there is no telemetry
williammartin Apr 21, 2026
50f0f8f
feat(skills): detect re-published skills and offer upstream install
SamMorrowDrums Apr 20, 2026
fe90f9a
Add telemetry command (#13253)
williammartin Apr 21, 2026
ec4a3ed
fix(telemetry): lower bias in sample bucket calc
babakks Apr 21, 2026
0467ed4
test(telemetry): assert ANSI escape chars for color codes
babakks Apr 21, 2026
92e812b
Merge pull request #13236 from cli/sammorrowdrums/skill-install-upstr…
SamMorrowDrums Apr 21, 2026
3a6d4de
Merge pull request #13255 from cli/wm/log-no-events
williammartin Apr 21, 2026
90ef03e
Enable telemetry without env var
williammartin Apr 21, 2026
b5757ea
Merge pull request #13244 from cli/kw/agent-skills
babakks Apr 21, 2026
6fffc2e
Merge pull request #13254 from cli/wm/enable-telemetry
williammartin Apr 22, 2026
f52acd5
fix: yaml.github-actions.security.run-shell-injection.run-shell-injec…
orbisai0security Apr 22, 2026
6d98648
Merge pull request #13258 from orbisai0security/fix-shell-injection-d…
williammartin Apr 22, 2026
7095e2a
Fix SetSampleRate not updating sample_rate dimension
williammartin Apr 22, 2026
3ad2958
Merge pull request #13259 from cli/fix-sample-rate-dimension-sync
babakks Apr 22, 2026
63262dc
feat(skills): support GHEC with data residency hosts
SamMorrowDrums Apr 22, 2026
8498bdf
feat(skills): add --allow-hidden-dirs flag to preview command
Copilot Apr 22, 2026
2e93afc
Install skills flat by Name, not namespaced InstallName
Copilot Apr 22, 2026
d961de4
fix(skills): include --allow-hidden-dirs in preview hint from install
SamMorrowDrums Apr 23, 2026
9a3dc9f
Fix log terminal injection
williammartin Apr 23, 2026
c8e0139
Update acceptance/testdata/workflow/run-view-log-escape-sequences.txtar
williammartin Apr 23, 2026
a9d36fb
Merge pull request #13272 from cli/wm/fix-log-terminal-injection
williammartin Apr 23, 2026
abc0dc6
Merge pull request #13161 from cli/dependabot/go_modules/github.com/m…
williammartin Apr 23, 2026
7051e27
Merge pull request #13162 from cli/dependabot/go_modules/github.com/g…
williammartin Apr 23, 2026
3a0d495
Merge pull request #13163 from cli/dependabot/go_modules/charm.land/l…
williammartin Apr 23, 2026
47f379c
chore(deps): bump github.com/gdamore/tcell/v2 from 2.13.8 to 2.13.9
dependabot[bot] Apr 23, 2026
aba7c59
chore(deps): bump charm.land/bubbletea/v2 from 2.0.2 to 2.0.6
dependabot[bot] Apr 23, 2026
db23401
Merge pull request #13206 from cli/dependabot/go_modules/charm.land/b…
williammartin Apr 23, 2026
993d4bb
install_linux: correct typo in Homebrew copy
cassidyjames Apr 23, 2026
d13a185
Merge pull request #13273 from cassidyjames/patch-1
williammartin Apr 23, 2026
352a00e
Merge pull request #13241 from cli/dependabot/go_modules/github.com/g…
williammartin Apr 23, 2026
5a121bf
Merge pull request #13265 from SamMorrowDrums/sammorrowdrums/preview-…
SamMorrowDrums Apr 24, 2026
96b9af3
Merge pull request #13266 from cli/sammorrowdrums/fix-skill-install-f…
SamMorrowDrums Apr 24, 2026
2c1f5b2
Merge pull request #13264 from SamMorrowDrums/sammorrowdrums/skill-gh…
SamMorrowDrums Apr 24, 2026
de6a9eb
chore: fix zsh completion on debian
babakks Apr 24, 2026
ea7a245
Merge pull request #13274 from cli/babakks/fix-zsh-completion-on-debian
babakks Apr 24, 2026
dde46dc
Add "Resource not accessible" to ProjectsV2IgnorableError
maxbeizer Apr 24, 2026
e40c592
Update command.go
travellertales Apr 27, 2026
3c7c88c
Merge pull request #13296 from travellertales/patch-1
babakks Apr 27, 2026
ed31e2f
chore(deps): bump goreleaser/goreleaser-action from 7.0.0 to 7.2.1
dependabot[bot] Apr 27, 2026
0e3c499
chore(deps): bump github.com/mattn/go-isatty from 0.0.21 to 0.0.22
dependabot[bot] Apr 27, 2026
e41ec70
Merge pull request #13298 from cli/dependabot/go_modules/github.com/m…
babakks Apr 28, 2026
06ac7b6
Bump Go to 1.26.2
web-flow Apr 28, 2026
697f7f6
Merge pull request #13301 from cli/bump-go-1.26.2
williammartin Apr 28, 2026
6c470f6
Merge pull request #13281 from maxbeizer/fix/projects-v2-ignorable-error
williammartin Apr 28, 2026
bd4a06a
Merge pull request #13297 from cli/dependabot/github_actions/goreleas…
williammartin Apr 28, 2026
20e4d25
Add missing //go:build integration tag to verify_integration_test.go
pdostal Apr 28, 2026
6d6ea5f
Fix flaky Password test by increasing echo mode setup timeout
pdostal Apr 28, 2026
fae293f
Merge pull request #13303 from pdostal/fix/add-integration-build-tag
williammartin Apr 28, 2026
d762f9e
Merge pull request #13304 from pdostal/fix/accessible-prompter-passwo…
williammartin Apr 28, 2026
8b89c8b
Enable extended PR screening for external PRs
tidy-dev Apr 29, 2026
611b01f
Merge pull request #13312 from cli/enable-pr-screening
tidy-dev Apr 30, 2026
4ed7002
Switch from actions/attest-build-provenance to actions/attest
scop May 1, 2026
d8b8655
Grammar fixes
scop May 1, 2026
8ff70e6
Remove numberFieldOnly API shortcut
williammartin May 1, 2026
6dc432e
chore(deps): bump github.com/klauspost/compress from 1.18.5 to 1.18.6
dependabot[bot] May 1, 2026
50d6008
Merge pull request #13327 from cli/wm/fix-pr-view-number-only-optimiz…
babakks May 2, 2026
7c43919
Merge pull request #13068 from 333fred/print-refresh-for-401s
BagToad May 5, 2026
3c162a7
Merge pull request #13326 from scop/style/grammar
williammartin May 6, 2026
1caa3b7
Bump copilot telemetry sampling to 100%
williammartin May 7, 2026
acf2f73
Record accessibility state in telemetry
williammartin May 7, 2026
6176c3e
Merge pull request #13362 from cli/wm-copilot-sampling-100
williammartin May 7, 2026
2bc8862
Merge pull request #13363 from cli/wm-accessible-telemetry
williammartin May 7, 2026
9b457e8
Merge pull request #13328 from cli/dependabot/go_modules/github.com/k…
williammartin May 7, 2026
c48bc1a
Poll TTY echo mode instead of sleeping in password tests
pdostal Apr 28, 2026
9c4184d
Address review feedback on echo mode polling
pdostal Apr 28, 2026
a44721d
Add explicit build tags to platform-specific echo test files
williammartin May 7, 2026
b698aa7
Merge pull request #13305 from pdostal/fix/poll-tty-echo-mode-in-pass…
williammartin May 7, 2026
2297f1f
Merge pull request #13325 from scop/chore/actions-attest
williammartin May 7, 2026
f47e459
Fix skills acceptance tests
williammartin May 7, 2026
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
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
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
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
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
da68cb8
Add terminal-mockup canvas extension for marketing screenshots (#13612)
BagToad Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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