原生 spawn_agent 模型 ID 与 Gateway 无交集,且任务正文在兼容转换中被删
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: zym
**客户端版本**: 0.1.52
---
## 现象
Cindy 走折扣路由(`codex/*`)时,Codex 原生 `spawn_agent` 会同时出现两类独立故障:
1. 显式指定 Sol/Terra 时,子线程请求以无前缀模型名打到 Gateway,返回 403。
2. 子任务正文被放进 `encrypted_content` 后,兼容代理在发往非 ChatGPT 上游时把它删掉,模型只看到空的 `Payload:`。
此前把卡住、空消息、答非所问归因于 Luna 是错的。当前 `spawn_agent` 目录只有 Sol/Terra;省略 `model` 会继承父模型。主会话若是 `codex/gpt-5.6-sol`,所谓 Luna 子任务实际跑的是 Sol。Luna 从未被成功调用。
相关:#2678 记录了 Luna 继承与 403,但没有覆盖任务正文丢失。
## 复现步骤
1. 主会话使用 Cindy Gateway 折扣路由,例如 `codex/gpt-5.6-sol`。
2. 调用 `spawn_agent`,`model=gpt-5.6-sol` 或 `gpt-5.6-terra`,`fork_turns=none`,任务要求原样返回唯一识别码。
3. 再试 `model=codex/gpt-5.6-sol`。
4. 再试省略 `model` 并写 Luna 任务。
5. 对照 `fork_turns=all`,任务同样带唯一识别码。
## 期望行为
- 目录校验使用原生 slug(`gpt-5.6-sol`),HTTP 边界恢复折扣路由(`codex/gpt-5.6-sol`)。
- 普通 `agent_message` 的任务正文不得当不可用历史删除。
- 若 Luna 不在原生子代理目录,应明确失败,而不是静默跑成 Sol。
## 实际行为
模型 ID 两层无交集:
```
spawn_agent 只接受 gpt-5.6-sol / gpt-5.6-terra
Gateway 账号只允许 codex/*
交集为空
```
- 填原生 slug:子线程真实模型为 `gpt-5.6-sol` / `gpt-5.6-terra`,Gateway 403。
- 填 `codex/gpt-5.6-sol`:工具直接 Unknown model。
- 省略 model:继承父模型 `codex/gpt-5.6-sol`,并不是 Luna。
任务正文丢失:
原生 Codex 把任务放进 `agent_message.encrypted_content`,明文只有 `Message Type / Task name / Payload:`。当前安装包在发往非 ChatGPT 上游时会清掉所有 `encrypted_content`,模型实际看到空 Payload。
探针结果:
- `fork_turns=none`:子代理回答“未收到具体子任务内容”,识别码未出现。
- `fork_turns=all`:识别码仍未到达,模型只能根据继承的旧上下文继续写。
- 子代理回执同样走加密部分,主线程只看到空 `MESSAGE`。
## 复现频率
当前安装包上稳定复现。工作区已有未发布修复,但运行中的 Cindy 仍是旧逻辑。
## 已尝试
- 用唯一识别码对照 `fork_turns=none` / `all`,确认不是模型风格问题。
- 核对子线程真实模型字段,确认 Luna 从未启动。
- 工作区已改:进入 Multi-Agent V2 目录前剥掉 `codex/`,子线程 HTTP 请求时按父会话路由补回;兼容转换只处理真正的 compaction,不再清理普通 `agent_message`。
- 定向测试:`codex-subagent-config.test.ts` 10 项、`codexProxyHost.test.ts` 141 项通过。
- 未自行构建或替换正在运行的 Cindy。
## 建议验收
1. 安装含上述修复的构建并重启。
2. 新会话重跑唯一识别码探针,子代理应原样返回识别码。
3. 抓 HTTP 边界,确认 Sol/Terra 请求恢复为 `codex/*`。
4. 单独处理 Luna 未进入原生子代理目录的问题,避免再被误判为 Luna 能力问题。
---
**版本区域**: CN
**OS**: darwin arm64 (25.5.0)
**界面语言**: zh-CN
Contributor guide
Research direction
Start in the Multi-Agent V2 directory and inspect codex-subagent-config.test.ts and codexProxyHost.test.ts, which already cover the reported areas. Re-run those focused tests, then repeat the unique-identifier probe after installing the fix. Done means the subtask receives its identifier, the HTTP request uses the codex/* route, and ordinary agent_message content is preserved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- ai, backend-api-design
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100