mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-24 23:10:56 +08:00
7.1 KiB
7.1 KiB
Claude Code Agent Task Runtime 全面对齐计划
摘要
目标是把 Lime 的 agent 主链从“线程态 + 工具流 + 诊断信号”升级为对标 Claude Code 的“统一任务运行时”:
- 主会话、子 agent、等待输入、完成结算都统一映射为可见任务。
- 简单问题不再错误抬升为常驻
MAIN TASK面板,只在复杂、长链路、可跟踪任务里显示任务视图。 - 工具调用按批次聚合,必须产出中间过程结论,而不是只留下工具名。
token usage与prompt cache在任务完成态和消息态都保持可见。- E2E 与 GUI smoke 后续统一以“任务是否创建、推进、完成”为核心断言。
关键改动
1. Agent Task Runtime 投影
- 新增统一任务投影模型,先覆盖
main_session与subagent。 - 每次主会话回合都可以被投影成任务,但展示层增加“简单直答自动折叠”规则。
- 当前回合的任务标题、状态、阶段、等待原因、工具批次摘要、子任务统计统一从现有
thread_read / turns / items / messages / child_subagent_sessions归一投影。
2. 任务展示规则
- 仅在以下场景显示任务状态:
- 有工具批次或过程轨迹
- 有子任务
- 有排队 / 待补信息 / 等待确认
- 回合失败或中断
- 简单直接回答成功后默认折叠隐藏,不显示常驻
MAIN TASK。 - 复杂任务也不再插入聊天主区大卡片,改挂输入区底栏弱提示 pill。
- 任务状态 pill 保留:
- 主任务标题
- 当前状态
- 工具批次摘要
- 子任务数量
- 阻塞 / 排队信号
3. 工具批次与过程结论
- 复用现有工具批次聚合与工具过程摘要能力。
- 任务状态条优先展示批次级结论,例如:
- 已探索项目
- 已查看关键文件
- 已检查页面
- 当没有工具批次时,状态 pill 回退到等待原因、失败原因或当前阻塞摘要。
4. 回归与验收
- 前端单测覆盖:
- 简单直答完成后不显示任务状态条
- 工具批次会显示输入区顶部弱提示条
- 等待输入会显示等待态
- 聊天主区仍保留消息级
token usage与prompt cache摘要
- 后续 GUI / E2E 继续对齐:
- 打开真实项目后触发分析请求
- 断言复杂任务可见
- 断言简单直答不出现误报任务卡
当前进度
- 2026-04-14:创建执行计划文件。
- 2026-04-14:前端新增主任务投影工具与任务卡组件。
- 2026-04-14:先前尝试把主任务直接插入聊天主区,已确认不符合 Claude Code 的任务层级。
- 2026-04-14:主任务展示已回撤出聊天主区,并进一步收敛为输入区底栏弱提示 pill;完成态自动折叠。
- 2026-04-14:补充任务投影、输入区与消息列表的定向回归测试。
- 2026-04-14:定向
vitest已通过,覆盖“复杂任务完成后不继续占据聊天主区,token usage / Prompt Cache 仍由消息结算区承载”。 - 2026-04-14:定向
eslint已通过;verify:local仍被仓库现存无关问题阻塞,当前已知阻塞文件为src/components/agent/chat/utils/toolBatchGrouping.ts与src/components/memory/MemoryPage.tsx。 - 2026-04-14:
verify:gui-smoke已启动并推进到 headless Tauri 最终链接阶段,当前阻塞为首次临时CARGO_TARGET_DIR的 Rust/Tauri 大编译,尚未拿到http://127.0.0.1:3030/health就绪结果。 - 2026-04-14:
verify:gui-smoke最终通过,确认默认 workspace、browser runtime、site adapter catalog 与 agent service skill entry 主链未回退。 - 2026-04-14:浏览器 E2E 已验证复杂请求运行中只在输入区底栏显示状态 pill;完成后 pill 自动折叠消失,消息尾部继续显示
token usage与缓存统计。 - 2026-04-14:后端已落地“连续只读工具批次并发执行”,当前只对 Bash / PowerShell 的保守只读命令集启用并发,写操作与高风险命令继续串行。
- 2026-04-14:补齐路径预检,避免在分析本地项目时盲猜不存在路径。
- 2026-04-14:定位到
tauri:dev*脚本把CARGO_TARGET_DIR写死为target,会在 GUI 续测与 Rust 测试并行时放大构建锁竞争;现已改成“默认 target,但允许显式覆盖”。 - 2026-04-14:继续收口“任务分工建议”视觉层级,首页空态与普通输入栏统一改为轻量胶囊提示,不再用大横幅抢占输入区主视觉。
- 2026-04-14:按最新反馈去掉消息正文里的
阶段结论标题壳;新消息直接显示结论正文,旧历史通过前端统一清洗兼容去标题。 - 2026-04-14:继续追查 GUI 续测慢点,确认
run-tauri-dev.mjs/run-tauri-profile.mjs会把相对CARGO_TARGET_DIR传进tauri dev,在当前启动链下误写成src-tauri/src-tauri/target;现已改成仓库根绝对路径下的src-tauri/target,同时同步更新 README 说明。
本轮验证记录
已完成
npx vitest run "src/components/agent/chat/components/Inputbar/index.test.tsx" "src/components/agent/chat/components/MessageList.test.tsx" "src/components/agent/chat/utils/agentTaskRuntime.test.ts"npx eslint "src/components/agent/chat/components/Inputbar/index.tsx" "src/components/agent/chat/components/Inputbar/components/InputbarComposerSection.tsx" "src/components/agent/chat/components/MessageList.tsx" "src/components/agent/chat/workspace/useWorkspaceInputbarSceneRuntime.tsx" "src/components/agent/chat/utils/agentTaskRuntime.ts"
进行中
npm run verify:gui-smoke- 当前表现:前端壳
http://127.0.0.1:1420/可访问,但3030DevBridge 尚未监听,页面仍处于 mock/fallback 状态。 - 当前判断:阻塞源是 headless Tauri 首次完整构建与链接,不是任务 pill 回退或聊天主区重新渲染 task 卡片。
- 当前表现:前端壳
npm run tauri:dev:headless- 当前表现:真实页面发送按钮 disabled 的直接原因不是输入组件,而是
aster_agent_init因 DevBridge 不可达失败,页面落入 bridge cooldown / mock fallback。 - 当前判断:根因之一不是单纯构建锁,而是开发脚本传入的相对
CARGO_TARGET_DIR被tauri dev解析成src-tauri/src-tauri/target,造成双层 target 与冷编译;脚本已改成绝对路径,正在重新拉起真实 bridge 做二次验证。
- 当前表现:真实页面发送按钮 disabled 的直接原因不是输入组件,而是
已完成补充验收
- 真实浏览器会话中已验证:
- 复杂请求运行中,聊天主区展示的是消息与过程结论,不再插入大 task 面板
- 输入区底栏出现紧凑状态 pill,内容包含任务标题、状态与批次摘要
- 任务完成后状态 pill 自动折叠隐藏
- 消息结算区继续显示
68.0K tokens与缓存统计缓存 62.3K(读 62.3K / 写 0) - 本轮真实交互后控制台未新增 bridge/runtime 错误,仍只剩浏览器模式的 i18n warning
默认假设
- 本阶段优先修正产品感知与主路径可见性,不先重写底层
session/thread/turn/item存储结构。 - 媒体 / 插件任务暂不并入统一任务 runtime。
- 真正的后端
task event契约和thread_read.task_runs字段后续再补,当前先用前端投影收口主体验。