Files
cc-web/.planning/runtime-image-send/task_plan.md
2026-07-18 10:14:38 +08:00

91 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 任务计划:修复排队与运行中图片发送
## 目标
让图片附件能够随排队消息发送,并能够通过 Codex App 的 `turn/steer` 在运行中插入;附件在会话记录、失败回退和界面状态中保持一致,且不破坏现有纯文本路径。
## 当前阶段
阶段 8检查会话状态并安全重启服务。
## 阶段
### 阶段 1核对当前附件生命周期与现有改动边界
- [x] 梳理上传附件从前端到后端解析、持久化和 Codex App 输入的路径。
- [x] 核对工作树中重叠文件的既有改动,避免覆盖其他会话内容。
- **状态:** complete
### 阶段 2补充排队图片和运行中插入图片的失败回归测试
- [x] 覆盖队列保存并发送附件。
- [x] 覆盖运行中 `turn/steer` 接收 `localImage`
- [x] 覆盖 stale turn 回退为新 turn 时保留附件。
- **状态:** complete
### 阶段 3运行目标回归确认测试失败
- [x] 只运行相关回归,确认测试能捕获当前缺陷。
- **状态:** complete
### 阶段 4实现前端队列和运行中插入附件传递
- [x] 队列项保存附件快照并在出队时传给普通发送路径。
- [x] 运行中插入消息携带附件并正确清空 composer。
- **状态:** complete
### 阶段 5实现后端 turn/steer 附件解析持久化与回退
- [x] 复用现有附件解析与安全校验。
- [x] 持久化运行中插入消息的附件元数据。
- [x] `turn/steer` 和 stale turn 新轮回退均传递 `localImage`
- **状态:** complete
### 阶段 6运行目标回归和静态检查
- [x] 运行相关回归、语法检查和项目级快速验证。
- **状态:** complete
### 阶段 7审查差异并修正问题
- [x] 检查规范、跨层一致性、附件生命周期和用户既有改动保护。
- [x] 修正审查发现并重新验证。
- **状态:** complete
### 阶段 8检查会话状态并安全重启服务
- [ ] 查询除当前对话外的运行中会话。
- [ ] 仅在无其他运行中会话时重启 `ccweb` 并做健康检查。
- **状态:** in_progress
## 关键问题
1. 队列延迟期间附件记录是否仍能被后端安全解析?
2. `turn/steer` 失败转新 turn 时如何避免附件丢失或重复持久化?
3. 当前回归框架如何断言 `localImage` 已进入 app-server 请求?
## 决策记录
| 决策 | 原因 |
|------|------|
| 使用现有附件上传记录和 `codexAppInputFromMessage` | 避免引入第二套附件格式与安全边界 |
| 不切换共享 `.planning/.active_plan``.trellis/.current-task` | 当前工作树存在其他活跃任务,避免跨会话干扰 |
| 先补失败回归再实现 | 同时覆盖队列、steer 与 stale fallback 三条容易丢附件的路径 |
| 队列允许纯图片并显示附件摘要 | 与普通消息能力一致,同时让用户可验证图片仍在队列中 |
| 删除未发送队列项时清理其上传附件 | 避免无主附件占用存储直到 TTL 到期 |
| 新增 `runtime-image-send` 定向回归目标 | 在 60 秒预算内覆盖前端契约、成功 steer 与 stale fallback |
| steer 最多等待 2 秒获取 ready turn | 前端 running 状态可能早于 app-server 返回 turnId短等待避免图片/文本插入竞态误失败 |
| steer 持久化前重新加载 session | 避免启动 turn 仍持有的旧 session 快照覆盖刚插入的用户附件消息 |
## 错误记录
| 错误 | 次数 | 处理 |
|------|------|------|
| `.codex/agents/trellis-implement.toml``trellis-check.toml` 不存在 | 1 | 项目仅将这些代理定义为可选;改用标准协作子代理并在提示中显式注入任务、规范和边界 |
## 范围边界
- 只支持现有图片附件类型,不扩展任意文件附件。
- 不改变纯文本排队、slash 指令和笔记模式的既有语义。
- 不覆盖工作树中与本任务无关的主题、样式和其他功能改动。