Merge blocked
CI 证据补充(GitCode Actions,run 459):
- head SHA: a08c2d2ad512f11e2c416fa4bf9ae8cab9c0fbc2
- 状态: COMPLETED,PR mergeable_state.ci_state_passed = true
- Jobs: Lint / Secret Scan / Test / Build / Package 全部 COMPLETED
- run URL: https://gitcode.com/atomgit-cli/cli/actions/runs/a9583cf01e1345f88a3b40f2c7062bbd
本机预置失败的 TestInspectReportsInterruptedInstallLeftovers(Windows symlink 探针)在 CI Linux 环境通过,进一步确认其为本地环境预置问题,与本次改动无关。


[REQUEST CHANGES] ## 评审结论:request changes
- PR head:
a08c2d2ad512f11e2c416fa4bf9ae8cab9c0fbc2 - 本地验证:GitHub mirror CI run
41175813154全绿 - 结论:不建议合入。CI 通过说明工程质量没问题,但当前实现还没有满足 “支持
agc命令别名” 的功能目标。
P1:agc 没有随任何正式安装渠道提供
普通安装后没有 agc 命令;只有手动设置 GITCODE_CLI_COMMAND_NAME=agc,或者把二进制改名为 agc.exe,才会生效。
证据:
npm/package.json:33的bin只有gc/gitcodepyproject.toml:35的 console scripts 只有gc/gitcode.goreleaser.yaml:104只安装gc,并只创建gitcodesymlinknfpm-amd64.yaml:21/nfpm-arm64.yaml:21只安装gc/gitcodedocs/COMMANDS.md:31和pkg/cmd/root/root.go:169已经把agc当成可直接使用的命令推荐给用户
这造成两个问题:
- 用户安装后无法直接运行
agc - 文档和帮助文案却已经把它当成可直接使用的命令来推荐
推荐修复路径:把 agc 做成真实可用的安装命令
1. npm 渠道
需要同时改两处:
npm/package.json- 在
bin里新增:"agc": "bin/gc.js" - 保持
gc、gitcode不变
- 在
npm/lib/install.js- 目前 bootstrap 安装器只写
gc和gitcode - 需要新增
agc的安装逻辑,和gitcode一样指向同一个二进制 - Windows 下应生成
agc.exe - POSIX 下可以生成 symlink 或复制文件,但要和现有
gitcode的处理保持一致 - 安装摘要里的文案也应从 “Installed gc and gitcode” 改成三名
- 目前 bootstrap 安装器只写
自测建议:
npm pack --prefix npm
# 或直接本地安装
npm install -g ./npm
agc --version
gc --version
gitcode --version
验收标准:
agc --version、gc --version、gitcode --version三者都能直接运行agc doctor install --json里能看到agc的 PATH 解析结果- npm 安装器输出中不再只提双命令名
2. wheel / PyPI 渠道
修改 pyproject.toml:
- 在
[project.scripts]里新增:agc = "gc_cli.wrapper:main" - 保持
gc、gitcode不变
自测建议:
python -m build --wheel
pip install dist/*.whl
agc --version
gc --version
gitcode --version
验收标准:
- wheel 安装后
agc可直接执行 python -m gc_cli --help的命令名说明仍保持现有行为
3. goreleaser / DEB / RPM 渠道
需要同步以下文件:
.goreleaser.yaml- 目前只安装
gc并创建gitcodesymlink - 需要新增
agc的安装方式,建议与gitcode一致,使用 symlink
- 目前只安装
nfpm-amd64.yaml- 在
contents里新增agc目标
- 在
nfpm-arm64.yaml- 同上
示例方向:
- src: /usr/bin/gc
dst: /usr/bin/agc
自测建议:
go build -o gc ./cmd/gc
nfpm package -f nfpm-amd64.yaml -p deb
# 安装后检查
agc --version
验收标准:
- DEB/RPM 安装后
agc可直接执行 - 包内三个命令名等价
doctor install能识别agc
4. Homebrew 渠道
如果本 PR 声称支持正式别名,Homebrew 也应同步:
- 在 formula 中为
gc创建agcsymlink - 或至少说明 Homebrew 暂不提供
agc,并在 PR 描述里列为已知边界
自测建议:
brew install ./homebrew/gc.rb
agc --version
验收标准:
agc在 Homebrew 安装后可用,或明确列为暂不支持
可选修复路径:明确降级为 opt-in 命令名解析支持
如果你不想在本 PR 里改所有安装渠道,请把范围收窄,并做以下修改:
- PR 标题改成:
feat: support opt-in agc command-name resolution - PR 描述明确说明:
agc不会随安装器自动提供- 只在
GITCODE_CLI_COMMAND_NAME=agc或二进制改名为agc时生效
docs/COMMANDS.md和README.md中删除“推荐直接使用 agc”的表述npm/README.md说明:- 会安装
agc补全 - 但不会自动安装
agc命令
- 会安装
pkg/cmd/root/root.go的 Windows 提示中,把agc从直接推荐列表里移除,或注明 “if you enable it”
P2:doctor install 帮助文案未同步
pkg/cmd/doctor/install/install.go:52 仍写:
every gc or gitcode candidate
但实现已经扫描 gc / gitcode / agc 三个命令。
请同步更新为三名,例如:
every gc, gitcode, and agc candidate
P2:npm README 仍写“双命令名补全”
npm/README.md:40 仍写:
completions for both gc and gitcode
但实现已经安装 gc / gitcode / agc 三名补全。
请同步更新为三名,并说明:
- 会安装
agc补全 agc命令本身是否自动安装,取决于你选择的路径 A 或路径 B
P2:包元数据 homepage 未迁移
以下文件仍指向 gitcode.com,与 version 输出的 atomgit.com 不一致:
npm/package.json:7homepagebugs.url
pyproject.toml:39HomepageDocumentationRepositoryIssues
.goreleaser.yaml:100homepage
nfpm-amd64.yaml:15homepage
nfpm-arm64.yaml:15homepage
建议统一改为:
https://atomgit.com/atomgit-cli/cli
如果某些链接必须保留 gitcode.com(例如 API host),请在 PR 描述里逐条说明保留原因。
测试补充
建议至少补以下测试:
- npm 安装器测试
- 断言安装后存在
agc入口 - 断言安装摘要包含三名
- 断言安装后存在
- wheel 安装测试
- 断言
pyproject.toml的 scripts 包含agc
- 断言
- goreleaser/nfpm 配置测试或打包冒烟
- 断言
agc被安装
- 断言
- doctor install 测试
- help 文案包含
agc
- help 文案包含
后续验收清单
我们会按以下清单验收:
agc --version在目标安装渠道可直接运行doctor install --help/--json正确包含三名- npm README、docs、AGENTS 与实际行为一致
npm/package.json、pyproject.toml、.goreleaser.yaml、nfpm 的命令入口和 homepage 一致go test ./...go test -race ./...npm test --prefix npmpre-commit run --all-files- 镜像仓 CI 全绿
- PR 标题、描述和实际功能边界一致
结论
如果你选择“补齐安装入口”,请把 agc 做成正式命令,并同步所有安装渠道和文档。
如果你选择“降级为 opt-in”,请把 PR 标题、描述和文档改为明确的 opt-in 语义,避免用户误以为安装后可以直接输入 agc。


感谢详细的评审意见。已采纳推荐修复路径 A:把 agc 做成随所有正式安装渠道提供的真实命令(新 head 3194114,23 files,+1710/−52)。
P1:agc 安装入口(按渠道逐项修复)
npm 渠道
npm/package.jsonbin新增"agc": "bin/gc.js"(gc/gitcode 保持不变)- bootstrap 安装器(
npm/lib/install.js):新增bootstrapCommandFiles()纯函数,安装事务写入第三入口agc(Windows 为agc.exe,POSIX 与 gitcode 一致走同一别名迁移/事务/回滚路径),checksum 校验覆盖 agc;安装摘要改为 "Installed gc, gitcode, and agc to ...";中断安装残留扫描(LEFTOVER_PREFIXES)与 Windows PATH 遮蔽诊断(windowsPathShadowing)均补 agc - 冒烟:
npm pack产物package.json的 bin 为{"gc","gitcode","agc"} → bin/gc.js三入口
wheel / PyPI 渠道
pyproject.toml[project.scripts]新增agc = "gc_cli.wrapper:main"(行为与 gc/gitcode 入口一致)
goreleaser / Homebrew 渠道
.goreleaser.yamlbrews:bin.install_symlink "gc" => "agc",bash/zsh/fish 补全三命令名全装,test块断言agc versionhomebrew/gc.rb同步生成 DSL- 补全产物来源:
make completions现在用GITCODE_CLI_COMMAND_NAME={gitcode,agc}由 CLI 原生生成completions/{gitcode,agc}.{bash,zsh,fish}(6 个新文件入库,release archive 的completions/*自动包含);prepare-package-assets.sh由 sed 改写改为直接 stage(消除与 cobra 输出的漂移风险)
DEB / RPM 渠道
nfpm-amd64.yaml/nfpm-arm64.yaml:/usr/bin/agcsymlink + agc 命名补全(bash/zsh/fish)
P2 修复
doctor installhelp 文案改为 "every gc, gitcode, and agc candidate"npm/README.md:bootstrap 描述、Windows agc.exe、--target-dir、Uninstall 清单均更新为三命令名docs/COMMANDS.md/README.md:DEB/RPM/wheel/Homebrew 描述更新为三名等价npm/package.jsonhomepage/bugs.url → atomgit.com- 说明:
pyproject.tomlURLs、.goreleaser.yaml/nfpm 的 homepage 在中间提交(docs: migrate presentation references to atomgit.com,PR head 历史可见)已完成迁移,评审所列证据对应旧 head
查漏补缺(评审未点到的同类问题)
- Go 侧
transactionLeftoverPrefixes(doctor 的中断安装残留报告)与 npm 侧LEFTOVER_PREFIXES注释明确要求保持同步,但首轮只改了 npm 侧——本次两侧均已补 agc 前缀,并同步更新对应测试断言
测试补充
- npm:新增
bootstrapCommandFiles单元测试(posix/Windows 三入口断言);isTransactionLeftoverName断言扩展 agc 备份/临时文件 - doctor install:新增
TestInstallHelpMentionsAllCommandNames(help 含三命令名);TestInspectReportsInterruptedInstallLeftovers输入与断言补 agc 残留项 - 升级冒烟脚本
scripts/test-npm-install-upgrade.js:补全文件断言扩为 9 个(含 agc 三件,头部命令名锚定)
自测证据
go build+go test ./...:除TestInspectReportsInterruptedInstallLeftovers外全绿;该测试本机失败根因已定位为 Windows 环境怪癖(os.Symlink返回错误但符号链接实际被创建,报告比期望多 1 项),上轮 CI Linux 已通过该测试,本轮以 CI 结果为准node --test npm/test/install.test.js:新增断言全部通过;本机其余失败经git stash对照确认为沙箱拦截 symlink/临时目录所致,与改动无关(CI Linux 全量执行)- 真实命令验证:
gc doctor install --help输出三命令名;npm pack冒烟通过 - 未覆盖项:本机无 Python/nfpm/goreleaser,wheel/DEB/RPM 打包冒烟以 CI(package job 含 wheel 入口冒烟)为准
CI 结果出来后将在本 PR 补充证据。


CI 证据补充(GitCode Actions,run 473,对应评审修复 head 3194114):
- head SHA: 31941149b68cc184734171e44dff99927bea035c
- 状态: COMPLETED,PR mergeable_state.ci_state_passed = true
- Jobs: Lint / Secret Scan / Test / Build / Package 全部 COMPLETED
- Test job 含
Run npm wrapper tests(npm 侧新增 agc 断言全部通过)与Run Python unit tests - Package job 含
Generate completions(含本次新增的 gitcode/agc 补全生成)与Wheel entrypoint smoke test(pyproject scripts agc 入口冒烟通过)
- Test job 含
- run URL: https://atomgit.com/atomgit-cli/cli/actions/runs/ca6aac8c62d8417aad6dede268df1aa8
至此评审人验收清单中的 CI 项已在新 head 上全绿,等待复核。


本地真机验证补充(Windows x64,head 3194114,对应评审验收清单中 "agc 可在真实渠道运行" 项):
1. Go 侧别名机制
当前 HEAD 构建后,同一二进制改名为 agc.exe 直接运行:
> agc.exe version
agc version dev
commit: 31941149b68cc184734171e44dff99927bea035c-modified
built: 2026-10-31T08:09:24Z
https://atomgit.com/atomgit-cli/cli
exit: 0
命令名随可执行文件名正确解析,homepage 输出为 atomgit.com。
2. npm bootstrap 完整链路
将新构建放入 npm/bin/platforms/gc-windows-amd64.exe 模拟发布产物,执行 node npm\bin\gc.js install --target-dir <临时目录>:
- 安装摘要:
Installed gc, gitcode, and agc to <临时目录>(三命令名文案生效) - 产物:
gc.exe/gitcode.exe/agc.exe三入口 +.gitcode-install.json清单 + update helper - 三入口独立运行
version全部 exit 0,各自显示对应命令名(agc version/gitcode version/gc version)
3. doctor install 诊断
通过 agc.exe doctor install 验证:
Distribution: npm-bootstrap(bootstrap manifest 识别正常)- 安装目录前置 PATH 后,
gc/gitcode/agc三个候选均正确 selected 到该目录(agc 候选扫描生效) - 同目录还正确报告了既有 npm 全局前缀(
C:\nvm4w\nodejs\gitcode.cmd等)的遮蔽提示,符合预期诊断行为
验证环境隔离说明
- bootstrap 安装至
--target-dir临时目录,未触碰 npm 全局前缀;验证后官方 npm 全局安装(0.15.0)复核完好 - 安装器按设计写入的用户 PATH 注册表条目已在验证后移除并复核,无残留
npm/bin/platforms为 gitignore 的发布期产物路径,验证用二进制已删除,工作树干净
至此评审验收清单的 "agc --version 各渠道可跑"、"doctor help/json 三名"、"本地验证" 项均有真机证据;CI 证据见上条评论(run 473 全绿)。


变更内容
基于社区 issue(编号见文末 Closes 行)实现
agc命令别名支持,并将项目主页/仓库展示性链接从 gitcode.com 更新为 atomgit.com。核心机制
pkg/cmd/root/root.go:normalizedCommandName白名单新增agc,可通过GITCODE_CLI_COMMAND_NAME=agc或将二进制命名为agc/agc.exe启用;root help 的 Windows PowerShell 提示加入agc备选。pkg/cmd/version/version.go:文本与 JSON 输出的项目主页 URL 更新为https://atomgit.com/atomgit-cli/cli。诊断与分发
pkg/cmd/doctor/install/install.go:doctor install的命令候选扫描与文本输出新增agc条目。npm/lib/install.js:npm 安装器补全组合扩展为 3 shell × 3 命令名(bash/zsh/fish × gc/gitcode/agc),shadow 扫描同样覆盖agc。边界保留
api.gitcode.com、登录页 URL 等)保持不变——认证与 API 实际仍运行在 gitcode.com。gitcode/gc命令名行为完全不变。作者自检
agc指代 atomgit-cli 方便调用;同时项目仓库已迁移至 atomgit.com,展示性链接应随之更新。go test ./...除一项外全绿——pkg/cmd/doctor/install的 TestInspectReportsInterruptedInstallLeftovers 失败,经git stash在未修改代码上隔离复现同样失败,确认为 Windows 环境 symlink 探针预置失败,与本次改动无关。node --test npm/test/install.test.js78 pass / 5 skipped / 0 fail。go build -o ./gc.exe ./cmd/gc在 Windows(go 1.23.4,GOPROXY=goproxy.cn)成功,gofmt 检查通过。GITCODE_CLI_COMMAND_NAME=agc ./gc.exe version输出agc version dev且 URL 为 atomgit.com;② 二进制重命名为agc.exe直接运行输出agc version dev;③./gc.exe doctor install --json的 commands 含 agc 条目(本机 PATH 无 agc,candidates 为空数组,符合预期);④GITCODE_CLI_COMMAND_NAME=agc ./gc.exe completion bash生成 agc 命名补全(bash completion V2 for agc);⑤./gc.exe auth status回归正常,host 仍为 gitcode.com,符合功能性 host 保留边界。agc仅扩展命令名白名单;逐文件git add后复核 staged diff,无敏感信息。make lint、pre-commit 钩子与./scripts/regression-core.sh,以远端 CI 结果为准;③ doctor install 的 TestInspectReportsInterruptedInstallLeftovers 在本机 Windows 环境预置失败(未修改代码同样失败),待 CI 跨平台结果确认。Closes #631