完善 AGC 对话流与工具调用,统一消息层级并新增文档预览 #375
Reference in New Issue
Block a user
Delete Branch "feat/chat-codex-ui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
概要
完善 AGC 对话面板、回合恢复与素材工具栏:对话按唯一回合流展示,过程信息与最终正文明确分层,同时补齐素材导出及文档/代码预览。
主要改动
1. 对话流与回合状态
2. 工具调用与输入区
pwsh / powershell -Command包装,仅展示命令正文;不改变执行参数与持久化原文。3. 当前 Agent / 策划 Agent 共用视觉层级
packages/shared的AgentMessageContent,不按 Agent 类型复制表现逻辑。4. 素材工具栏与文档预览
master 集成
origin/master(a4a030dfb),合并提交为d3c117de0。验证记录
已完成:
cargo check,编译通过;仍有 194 条编译警告。git diff --check。未执行 / 待验证:
文档同步
已同步对话工具调用方案、AGC 实施方案、文档预览里程碑与实施计划,以及共享组件使用约定。
- direct_tool_calls.rs:read_tool_call_lines 由 BufReader::lines() + let Ok(line) = line else { break } 改成按行读字节(read_until)+ 逐行 from_utf8 解码:非法 UTF-8 行只跳过该行并继续读后续行, 不再把这一行之后的所有记录一起丢掉;只有读 I/O 错误才停止读取 - 契约「单行损坏跳过该行继续」在"损坏行缺换行、与下一行黏成一行"时也成立:丢掉的只是黏连的那一行 - 新增单测:tool_call_read_skips_invalid_utf8_line(合法行 + 非法字节行 + 合法行 → 读回 2 条; 以及损坏行缺换行的黏连形态)新增 read_direct_codex_active_turn 只读命令:返回当前登记的 { clientTurnId, startedAt },供前端重进会话时接管正在跑的回合 DirectTaonierActiveInvocation 增加 started_at_ms 登记时刻,供只读探测与后续兜底释放判断这一轮的年龄 不改守卫互斥语义与 Drop 释放时机:探测既不进入也不抢占 把命令注册进 main.rs 的 invoke_handler 新增用例:登记中的回合能被只读探测看到、探测本身不占有不释放、Drop 之后回到 Nonecancel_direct_codex_turn 返回值改为 DirectTurnCancelView{outcome, message, clientTurnId},界面能区分"已发中断"与"守卫已被兜底释放" cancel_direct_codex_turn_at 在拿不到可中断的活句柄(执行进程已退出 / 从没进执行器)时释放本地守卫,返回可读原因;"正在跑的是另一轮"仍保持原拒绝语义,什么都不释放 新增 release_stale_direct_taonier_active_invocation:释放条件写进注释——登记存在、clientTurnId 一致、调用方已确认执行器没有活句柄、"从没进执行器"时登记年龄还要超过 60 秒启动窗口 DirectTaonierStaleGuardReason 给出两种兜底原因与可读文案;DirectCodexActiveTurnTable 增加 registered_client_turn_id,另一轮拒绝文案提成共用常量 把"已有另一条 Direct 客户端回合正在运行"补成可操作文案:可在输入盒点终止,或等它结束后再发送(不改错误分类与前缀语义) 新增用例:同项目第二次进入仍被拒、clientTurnId 不匹配不释放、启动窗口内不释放、老过窗口释放后可再次进入、原守卫 Drop 不影响后来登记的回合WIP: 对话面板对标 Codex(工具调用折叠块/输入盒能力/面板对齐)to 完善 AGC 对话流与工具调用,统一消息层级并新增文档预览