37 lines
3.0 KiB
Markdown
37 lines
3.0 KiB
Markdown
# Codex App 任务状态自动分类管道
|
||
|
||
## 目标
|
||
|
||
在不新增分类模型配置、不使用 Hook、不重载 MCP、也不依赖主模型主动调用工具的前提下,复用当前 Codex App 会话已经解析的模型 Provider 与认证方式,在“用户消息进入”和“主对话本轮完成”两个事件点执行无工具、严格结构化的动态看板分类,并以版本门禁安全更新任务列。
|
||
|
||
## 阶段
|
||
|
||
- [x] 1. 固定工作区并定位当前 Codex App Provider、消息入口、轮次完成与任务写入链路
|
||
- [x] 2. 写出分类提示词、严格输出、触发时机与失败保持的红灯契约
|
||
- [x] 3. 实现复用当前会话 Provider 的无工具结构化分类客户端
|
||
- [x] 4. 接入用户消息进入与主对话完成事件,加入串行队列和版本门禁
|
||
- [x] 5. 退役自动主链路中的任务 MCP 重载与主动上报依赖,保留必要兼容接口
|
||
- [x] 6. 运行专项、自动化集成、当前对话真实 Provider 请求和完整回归并修复真实失败
|
||
- [x] 7. 清理临时跟踪文件并交付配置兼容性、测试与残余风险
|
||
|
||
## 已确认产品契约
|
||
|
||
- 系统范围仅包含 Codex App,不为 Claude 或 Codex CLI 扩展任务分类。
|
||
- 动态看板列的 `id / label / prompt` 是唯一分类语义;禁止写死固定状态或用关键词、正则推断。
|
||
- 自动分类只在用户消息进入、Codex App 主轮次完成两个事件点发生;请求用户输入属于主轮次完成。
|
||
- 运行开始、运行停止、网络失败、人工中断均不自动改变任务列。
|
||
- 分类复用当前会话已解析的模型与 Provider;不增加模型、密钥、Base URL 或管理界面配置。
|
||
- cc-web 不读取或复制 Codex 登录令牌;只有当前 Provider 具备现有普通 API 认证时才发请求。
|
||
- 分类请求不提供工具、项目文件、cwd 或 MCP;只接受严格 JSON Schema 结果。
|
||
- 非标准 JSON、拒答、超时、非法列或版本变化时保持当前状态,不做文本修复或兜底猜测。
|
||
- `ccweb_task_update` 可作为人工/调试兼容接口,但不再承担自动分类主链路。
|
||
- 不修改生产 sessions/config/logs,不重启生产服务,不覆盖用户已有工作区修改。
|
||
|
||
## 错误记录
|
||
|
||
- 旧计划基于 Hook、动态任务 MCP 与模型主动调用,真实环境证明可靠性不足;本轮按用户确认的 Provider 直连分类方案整体替换。
|
||
- 红灯 1:service 单测退出 1,`classifier` actor source 被拒绝。
|
||
- 红灯 2:classifier 单测退出 1,`lib/task-board-classifier` 尚不存在。
|
||
- 红灯 3:真实集成中两次分类只留下一个版本增量;定位为轮次完成保存旧 session,覆盖了先完成的用户消息分类。`saveSession()` 现会保留磁盘上版本更高的 `taskTracking`。
|
||
- 红灯 4:当前 Provider 返回 SSE,且 `response.completed.output` 可能为空、文本只出现在 `response.output_text.done/delta`;旧解析会等待连接关闭或拿不到结果。现已支持 SSE 增量、完成事件立即返回和 60 秒绝对超时。
|