现象
/dag-init 对自建 GitLab 实例的探测段把裸 curl 放在第一位:
Any other host → probe whether it is a self-hosted GitLab: curl -sSf https://<host>/api/v4/version (or glab api version against that host once authed)
按字面执行的 agent 必然先吃一次 401 才能反应过来——本次 git.ycgame.com 实弹握手中已真实发生(curl 401 → glab 认证通道兜住)。
根因
GET /api/v4/version 按 GitLab API 设计要求认证(官方文档明确 requires authenticated user,版本泄露对攻击者有价值)——健康实例对裸请求返回 401 是标准行为,不是实例故障。命令文本未编码这一事实,把主路径(认证调用)写成了或者备选项。
修复(提示词卫生)
改写 dag-init.txt 自建探测段,编码两个认知点:
- 401 是阳性证据:端点存在且返回 GitLab 形状的错误,恰好证明它是 GitLab——探针不得把 401 当失败
- 认证调用是主路径:判定为 GitLab 且鉴权通过后以
glab api version 复核
拟稿:
其他 host → 判定是否自建 GitLab。注意:GitLab 的 /api/v4/version 按设计要求认证,健康实例对裸请求返回 401——这是阳性证据(端点存在且在应答),不是失败。 判定序:curl -sSf https://<host>/api/v4/version;返回版本 JSON 或 401/GitLab 形状错误 → 判定为 GitLab;连接拒绝或非 GitLab 应答 → STOP unsupported platform。判定为 GitLab 后,鉴权通过时以 glab api version 复核。
验收
- dag-init.txt 探测段包含 401 语义说明与复核步骤
- 既有测试锚点更新(core command.test.ts 的 DagInitContent 断言)
- 后续 agent 按文本一次通过自建实例探测,不再消耗失败回合
证据
git.ycgame.com(内网自建实例)实弹记录:裸 curl → 401 insufficient auth;glab api 认证通道 → 全探针通过,握手成功写入 dag-init.json。
现象
/dag-init对自建 GitLab 实例的探测段把裸curl放在第一位:按字面执行的 agent 必然先吃一次 401 才能反应过来——本次
git.ycgame.com实弹握手中已真实发生(curl 401 → glab 认证通道兜住)。根因
GET /api/v4/version按 GitLab API 设计要求认证(官方文档明确 requires authenticated user,版本泄露对攻击者有价值)——健康实例对裸请求返回 401 是标准行为,不是实例故障。命令文本未编码这一事实,把主路径(认证调用)写成了或者备选项。修复(提示词卫生)
改写 dag-init.txt 自建探测段,编码两个认知点:
glab api version复核拟稿:
验收
证据
git.ycgame.com(内网自建实例)实弹记录:裸 curl → 401 insufficient auth;
glab api认证通道 → 全探针通过,握手成功写入 dag-init.json。