makecindy / makecindy/cindy

原生 spawn_agent 模型 ID 与 Gateway 无交集,且任务正文在兼容转换中被删

Open
#2,921 1 comment 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.