Files
proxycast/docs/exec-plans/upstream-runtime-alignment-progress.md
T
2026-04-15 02:09:45 +08:00

54 KiB
Raw Blame History

参考运行时主链对齐进度日志

2026-04-15

已完成

  • tests.rs 新增基础 Prompt 主链源码守卫,固定 runtime_turn 的 current 组装顺序:入口段必须保持 RuntimeAgents -> ExplicitLocalPathFocus -> FullRuntime/FastChat 分流build_full_runtime_system_prompt(...) 必须保持 Memory -> ... -> AutoContinue 的既定 augmentation 顺序,ServiceSkillLaunchPreload 只能在 FullRuntime 下作为尾部追加阶段
  • 同步把 service_skill_launch_preload 相关重复测试 fixture 收口为共享 helper,减少同一预执行样例在多条测试里重复内联,避免后续调整站点技能预执行 contract 时只改一半测试
  • 补最贴边界的定向校验:
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/Cargo.toml" runtime_turn_source_keeps --lib -- --nocapture 通过(3 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/Cargo.toml" service_skill_launch_preload --lib -- --nocapture 通过(3 passed

2026-04-14

已完成

  • 建立基础 Prompt current 文档 prompt-foundation.md,把 runtime_turn -> prompt_context / prompt services -> TurnInputEnvelope -> aster PromptManager / embedded prompts 固定为唯一基础 Prompt 事实源;同时明确 query-loop.md 负责提交主循环、本文负责 Prompt 主链,功能样板与历史工作台文档不再反向定义 system prompt 顺序
  • content-creator.md 明确回挂到 prompt-foundation.md,把“首条消息注入 systemPrompt”的旧工作台叙事降回归档背景说明,不再误导成当前基础 Prompt 入口
  • docs/aiprompts/README.mddocs/README.md 同步回挂到 prompt-foundation.md,后续改 system prompt / subagent prompt / plan prompt / prompt_context / augmentation 时有单一入口
  • 补文档新鲜度校验:npm run harness:doc-freshness 已通过(doc freshness: clean),确认新增的基础 Prompt 文档、入口回挂与路径引用没有漂移
  • MessageList.tsx 将运行状态线从输入区底栏迁到最后一条 assistant 消息尾部,统一承载 处理中 / 已完成、耗时、工具批次、输入输出 token 与 Prompt Cache 摘要,不再让状态提示霸占输入区主视觉;本轮继续补齐“完成态保留最后一批工具统计”,真实 GUI 已确认可见 已完成 · 00:20 · 工具 读 2 / 列 2 · 输入 11.4K / 输出 309
  • MessageList.test.tsx 补上“复杂任务完成后状态线应跟随最后一条 assistant 消息尾部”的稳定断言,并通过真实 GUI 复测确认运行态 footer 位于消息流内、显著高于输入框,不再回落到底部输入栏
  • 建立总计划 upstream-runtime-alignment-plan.md,固定六条主链作为唯一排期事实源
  • 建立 Query Loop current 文档 query-loop.md,把提交入口、turn 组包、queue、tool runtime、流式执行、压缩与 evidence 消费收口成单一主链
  • turn_input_envelope.rsruntime_turn.rs 收口一条 Query Loop current 旁路:TurnInputEnvelope 现会记录最终 turn output schema 与 workspace-derived turn context metadataSessionConfig 改为直接消费 envelope 提前固化的 turn context,不再在执行前再次拼装 artifact output schema / auto_compact 这一层真实输入
  • action_runtime.rs 继续收口 Query Loop 辅助恢复链:agent_runtime_respond_action 的 elicitation / ask 恢复路径现复用 runtime_turn 的 turn context snapshot helper,不再只单独注入 auto_compactartifact output schema 与 request metadata 也会走同一条 current turn context 边界
  • runtime_turn.rscompact_session 控制回合的最小 SessionConfig 边界编码为专用 helper,并补测试守卫:压缩控制回合只保留 thread_id / turn_id,真正的 conversation 替换与 summary cache 更新仍复用共享 perform_context_compaction(...) corememory-compaction.md 也已同步修正文档,避免继续误写成 agent.compact_session() 旁路
  • aster_agent.rspersona_cmd.rstheme_context_cmd.rs 完成剩余 SessionConfigBuilder 生产落点分类:generate_personaaster_agent_theme_context_search 现在统一复用“专用一次性会话” helper,显式声明它们不参与 Query Loop 的 submit turn / runtime queue / turn context snapshot 真相;零入口的旧 AsterAgentWrapper::send_message 聊天壳已删除,避免继续伪装成 current 主链
  • tests.rs 补上命令层 raw execution 源码扫描守卫:当前只允许 action_runtime.rspersona_cmd.rstheme_context_cmd.rs 三处保留原始 agent.reply(...) / stream_reply_with_policy(...),一旦 Tauri 命令层再长出第四条未分类旁路,测试会直接失败
  • query-loop.mdsrc-tauri/src/agent/README.md 回写命令层边界说明:agent_runtime_respond_action 明确属于 current 恢复链;generate_personaaster_agent_theme_context_search 明确属于受控 compat 一次性命令;README 的底层 agent.reply(...) 示例也已补充“不要在 Tauri 命令层继续新增 raw 执行旁路”的提醒
  • 建立 Task / Agent current 文档 task-agent-taxonomy.md,把 agent turn / subagent turn / automation job / scheduler tick / execution run 收口成单一 taxonomy
  • 建立 Remote runtime current 文档 remote-runtime.md,把 消息渠道 runtime / 浏览器连接器 / ChromeBridge / DevBridge / OpenClaw / telegram_remote 收口成单一 remote taxonomy
  • 建立 Memory / Compaction current 文档 memory-compaction.md,把 来源链 / working memory / durable memory / Team Memory / 会话压缩 / project memory sidecar 收口成单一 memory taxonomy
  • ExecutionTracker / subagent runtime / automation service / scheduler trigger 明确分类为 current / compat / deprecated / dead,其中 SchedulerService 退回 compat 触发壳,automation_jobs.payload.browser_session 明确为 dead
  • gateway_channel_* + browser connector / ChromeBridge 明确归到 remote current 主链,把 DevBridge / OpenClaw 降回 compat、telegram_remote_cmd 降回 deprecated
  • memory_runtime_* + unified_memory_* + agent_runtime_compact_session 明确归到 memory current 主链,把 project_memory_get 相关项目资料链降回 compat 附属层、memory_feedback_cmd 降回 deprecated、memory_search_cmd.rs.bak 标记为 dead
  • 将新 taxonomy 入口同步回 docs/README.mddocs/aiprompts/README.mddocs/aiprompts/overview.mdAGENTS.md,仓库导航不再继续把旧 heartbeat_service 叙事当成 current
  • 将 remote 入口同步回 docs/README.mddocs/aiprompts/README.mddocs/aiprompts/overview.mdAGENTS.md,仓库导航不再继续把 debug 桥或单通道 Telegram 入口误当成 remote 主线
  • 将 memory 入口同步回 docs/README.mddocs/aiprompts/README.mddocs/aiprompts/overview.mdAGENTS.md,仓库导航不再继续把项目资料聚合或旧 feedback 侧链误当成记忆 / 压缩主线
  • runtime_turn.rs 完成第二刀代码收口:把 run_start_metadataruntime_status_session_configbuild_session_config 的重复拼装下沉为 helper,继续缩短 Query Loop 主循环
  • runtime_turn.rs 完成第三刀代码收口:把流式执行成功后的 Artifact 自动落盘与记忆沉淀收口为统一 helper,消除主成功分支与降级成功分支的重复收尾逻辑
  • runtime_turn.rs 完成第四刀代码收口:把两处 stream_reply_once 的事件记录闭包收口为统一 helper,主分支与降级分支共享同一条事件记录路径
  • runtime_turn.rs 完成第五刀代码收口:把 RunFinishDecision 组装与 terminal result 收尾收口为统一 helper,主循环不再内联 success/error 两套终态处理
  • runtime_turn.rs 完成第六刀代码收口:把主执行分支与降级到 ReAct 的分支统一为“单次流式尝试” helper,消除 build_runtime_user_message(...)build_session_config()stream_reply_once(...) 与成功收尾逻辑的重复展开
  • runtime_turn.rs 完成第七刀代码收口:把 CodeOrchestrated 的扩展启用、失败降级与扩展清理统一为策略 helper,让 with_run_custom(...) 内只保留一次 Query Loop 执行入口
  • runtime_turn.rs 完成第八刀代码收口:把 runtime turn 初始化、status 投射与 service preload 事件收口为统一前奏 helper,主循环的前置准备阶段已压成单一语义块
  • runtime_turn.rs 完成第九刀代码收口:把 run_start_metadatatimeline_recorderruntime_status_session_config 与流式 session_config 构建状态统一为 execution context,主循环不再散落拼装这组前置状态
  • runtime_turn.rs 完成第十刀代码收口:把 run_observationrun_finish decision 与 terminal finalize 链路回收到 execution context,主循环不再手工拼接 tracked execution 与终态收尾
  • runtime_turn.rs 完成第十一刀代码收口:把 skill_tool_session_accesscancel_token 收口为统一 session scope,异常路径与正常路径共享同一套会话级清理边界
  • runtime_turn.rs 完成第十二刀代码收口:把 runtime_snapshot -> runtime_projection_snapshot -> turn_state -> turn_input_envelope 统一收口为 build_runtime_turn_artifacts(...) helper,主循环不再散落读取 snapshot、派生 thread/turn 和构建 turn 输入诊断
  • runtime_turn.rs 完成第十三刀代码收口:把 service_skill_preload -> prepared execution -> prelude/execute handoff 统一收口为 prepare_runtime_turn_execution(...)RuntimeTurnPreparedExecutionsubmit 主路径已进一步压成 prepare -> execute 两个清晰阶段
  • runtime_turn.rs 完成第十四刀代码收口:把 provider_continuation -> workspace sandbox apply -> tracker/session scope bootstrap 统一收口为 prepare_runtime_turn_submit_bootstrap(...),submit 主路径不再内联铺开这组前置副作用和运行期参数拼装
  • runtime_turn.rs 完成第十五刀代码收口:把 request.provider_config -> configure_provider/configure_provider_from_pool -> persist_session_provider_routing 统一收口为 apply_runtime_turn_provider_config(...),submit 主路径不再内联铺开 provider apply 分支
  • runtime_turn.rs 完成第十六刀代码收口:把 resolved_prompt -> prompt augmentation -> requested/effective strategy persist 统一收口为 prepare_runtime_turn_prompt_strategy(...),submit 主路径不再内联铺开 prompt/strategy 组装与持久化
  • runtime_turn.rs 完成第十七刀代码收口:把 tool surface metadata -> MCP warmup -> skill launch metadata normalize -> turn_input_builder seed 统一收口为 prepare_runtime_turn_request(...),submit 主路径不再内联铺开 request prepare 分支
  • runtime_turn.rs 完成第十八刀代码收口:把 runtime_chat_mode -> web_search/request_tool_policy -> execution_profile 统一收口为 prepare_runtime_turn_policy(...),submit 主路径不再内联铺开 policy resolve 逻辑
  • runtime_turn.rs 完成第十九刀代码收口:把 auto_continue -> workspace repair warning -> session_state_snapshot/working_dir update -> session_recent_runtime_context 统一收口为 prepare_runtime_turn_session(...)submit 主路径的 session 级前置准备已压成单一 helper,并顺手移除新增的 runtime_chat_mode 未使用 warning
  • runtime_turn.rs 完成第二十刀代码收口:把 session/policy/request/prompt_strategy -> provider apply/bootstrap 统一收口为 prepare_runtime_turn_submit_preparation(...)submit 主路径已从多段 helper 串联提升为单一 preflight 准备块
  • runtime_turn.rs 完成第二十一刀代码收口:把 sync_browser_assist_runtime_hint -> prepare_runtime_turn_execution -> agent guard -> emit_prelude_and_execute 统一收口为 execute_runtime_turn_submit(...)submit 主路径当前已压成 prepare -> scoped execute 两段主骨架
  • runtime_turn.rs 完成第二十二刀代码收口:把 provider_config resolve -> harness metadata normalize -> workspace resolve/turn id/runtime_config 统一收口为 prepare_runtime_turn_ingress_context(...),入口上下文边界不再散落在主路径中
  • runtime_turn.rs 完成第二十三刀代码收口:把 agent init/session_store check -> support tools register 统一收口为 prepare_runtime_turn_entry(...),主路径的运行时入口准备已形成独立阶段
  • runtime_turn.rs 完成第二十四刀代码收口:把 model_skill_tool_access derive -> with_runtime_turn_session_scope -> execute_runtime_turn_submit 统一收口为 execute_runtime_turn_with_session_scope(...),主路径不再拆包又重组 submit_preparation
  • runtime_turn.rs 完成第二十五刀代码收口:把 execute_aster_chat_request(...)entry -> ingress -> submit_preparation -> session_scope_execute 外层编排统一收口为 execute_runtime_turn_pipeline(...)M1 主路径现在只保留日志入口与单次 pipeline 调用
  • 为解除 runtime_turn 定向测试的编译阻塞,在 task_list_tools.rs 把两处 TeamSessionState / TeamMembershipState 的团队状态恢复改为复用现有 from_session(...) 包装,避免当前工作区里 trait 静态方法解析差异继续卡住主线校验
  • 完成最小 Rust 定向校验:cargo test --manifest-path "src-tauri/Cargo.toml" -p lime --lib commands::aster_agent_cmd::runtime_turn::tests:: -- --nocapture,结果为 35 passed
  • 在工作区存在其他 Cargo 并行任务时,补充使用独立 CARGO_TARGET_DIR=.codex-target-runtime-turn 重跑同一条 runtime_turn 定向测试,结果仍为 35 passed
  • 在完成第十六到第十九刀后,补充使用独立 CARGO_TARGET_DIR=.codex-target-runtime-turn-2 重跑同一条 runtime_turn 定向测试,结果更新为 37 passed;当前仅剩 workspace_tools.rs 的既有 format_output dead_code warning
  • 在完成第二十到第二十一刀后,再次使用独立 CARGO_TARGET_DIR=.codex-target-runtime-turn-2 重跑同一条 runtime_turn 定向测试,结果保持 37 passed;第 20-21 刀未引入新的 runtime_turn warning
  • 在完成第二十二到第二十四刀后,再次使用独立 CARGO_TARGET_DIR=.codex-target-runtime-turn-2 重跑同一条 runtime_turn 定向测试,结果仍为 37 passed;新增的 session_id 未使用 warning 已收掉,当前只剩 workspace_tools.rs 的既有 format_output dead_code warning
  • 在完成第二十五刀后,再次使用独立 CARGO_TARGET_DIR=.codex-target-runtime-turn-2 重跑同一条 runtime_turn 定向测试,结果仍为 37 passed;新增的 unused_mut warning 已收掉,当前只剩 workspace_tools.rs 的既有 format_output dead_code warning
  • 完成文档新鲜度校验:npm run harness:doc-freshness,结果为 clean
  • 将新入口回挂到 docs/README.mddocs/aiprompts/README.mddocs/exec-plans/README.md
  • 将 Query Loop 差距从“口头判断”改为可追踪状态,并更新技术债与总计划进度
  • 继续对齐参考运行时 src/tools current surface
    • plan_mode_tool.rsExitPlanMode 现已在 team teammate 场景通过 send_input 回调真实向 team lead 投递 plan_approval_request,输出补齐 awaitingLeaderApproval / requestId
    • task_list_tools.rsTaskList 现已对齐参考语义,自动从 blockedBy 里过滤已 completed 的 blocker,避免后续任务误判仍被阻塞
    • mod.rs 已把 agent control 的 send_input 回调注入 ExitPlanMode 注册路径,保持默认注册与 team tools 注册条件不回退
    • task_output_tool.rs 已继续向参考 TaskOutputTool 收口:task_type 改为 local_bash,移除 payload 中额外的 outputFile 字段,补齐 block=false -> not_readyblock=true + timeout -> timeout 的回归测试,并去掉空输出占位文案
    • task_stop_tool.rs 已改成参考 TaskStopTool 的结构化输出:成功返回 message / task_id / task_type / command JSONtask_type 改为 local_bashshell_id 仅作为兼容别名保留,非运行中任务改成与参考一致的错误语义
    • agent_control.rsSendMessage 已补 plan_approval_response 权限守卫:只有 team lead 可以发送 approve / reject,并补 teammate 被拒绝、lead 可发送的定向测试
    • task_list_tools.rs 已把 TaskCreate / TaskGet / TaskUpdate 的 Rust 反序列化层与 schema 一起收紧到 deny_unknown_fields / additionalProperties: false,避免多余字段在 current surface 下静默穿透
    • task_list_tools.rs 已把 team task board 的读写边界收口到 lead session:同一 team 下的 TaskCreate / TaskList / TaskGet / TaskUpdate 现在统一从 lead session 的 task_list.v1 快照读取并回写,跨不同 tool registry / 不同 teammate session 也能看到同一份共享任务板,不再依赖单个 agent 进程内的内存缓存
    • task_list_tools.rs 已把 TaskUpdateverificationNudgeNeeded 再向参考语义收紧:subagent / teammate 完成最后一个任务时不再误触发“主线程收尾验证提醒”,只保留在非 SubAgent session 的完成收尾场景下评估该提示
    • hooks/types.rshooks/loader.rstask_list_tools.rs 已把 TaskCreated / TaskCompleted 正式接入当前 hooks 体系:hook 载荷补齐 task_id / task_subject / task_description / teammate_name / team_nameTaskCreate 现在会在持久化后执行 TaskCreated hook 并在阻塞时回滚任务,TaskUpdate(status=completed) 会在真正完成前执行 TaskCompleted hook,并按参考语义返回 success=false
    • task_list_tools.rs 已把 TaskUpdate.owner 变更继续向参考 TaskUpdateTool 收口:当 owner 变更为当前 team 中可解析的成员时,会通过现有 UserMessageManager 给目标 session 追加一条 agent-only 的 task_assignment JSON 消息,替代参考仓库的 file-mailbox 路径,同时保持“同 owner 重复写入不重复通知”的语义
    • team_tools.rs 已把 TeamCreate / TeamDelete / ListPeers 的输入反序列化层统一收紧为 deny_unknown_fields,保持 team surface 与参考的严格对象语义一致
    • team_tools.rs 已继续向参考 TeamDeleteTool / ListPeers 收口:TeamDelete 改为只拦截“仍可达且仍活跃”的 non-lead 成员,idle teammate 不再误阻塞删除,并在成功清理 team 时同步清掉 reachable idle teammate 的 TeamMembershipStateListPeers 现会过滤缺失有效 membership 的 stale member,只暴露当前仍可直接通信的 peer
    • agent_control.rsSendMessage 现已继续向参考 SendMessageTool 收口:纯字符串消息缺少 summary 时会在 dispatch 前直接报 summary is required when message is a string,并补齐命名子 agent 路由场景的回归测试;shutdown_response 的 target / reject-reason 参数错误文案也已对齐参考英文语义
    • team_tools.rsTeamCreate 现已补齐参考默认值语义:未显式传 agent_type 时,team lead 成员默认记录为 team-lead,避免 ListPeers / team 状态里出现空 lead role
    • team_tools.rsTeamCreate / ListPeers 输出面已继续向参考收口:对外返回的 lead_agent_idpeers[].agent_id 改为稳定的 name@team display id,内部 team session / membership 仍保持当前 runtime 所需的真实 session id 路由,sendTo 继续作为消息发送主入口
    • team_tools.rsTeamCreate 已继续向参考 TeamCreateTool 收口:team_file_path 现改为稳定的 <config>/teams/<sanitize(team_name)>/config.json 形态,不再返回 session://... 伪路径
    • team_tools.rsTeamCreate 重名策略已从 name-2/name-3 递增后缀改成随机三段式 slug,行为更接近参考仓库的 generateWordSlug()
    • agent_control.rsSendMessage 已补齐当前 team display id 路由:当 to 传入 ListPeers 暴露的 name@team 标识时,会先规范化成当前 team 成员名再进入既有路由与权限校验,因此 team-lead@alpha 这类目标现在可用于普通消息和 shutdown_response
    • agent_control.rsAgent / SendMessage 已继续把 strict schema 收口到 Rust 反序列化层:AgentToolInputSendMessageToolInput 现已补上 deny_unknown_fields,多余字段会在 dispatch 前直接被拒绝,不再绕过 JSON schema 静默穿透
    • remote_trigger_tool.rsRemoteTrigger 也已补上 deny_unknown_fields,让 additionalProperties: false 与实际解析行为保持一致,并补齐未知字段回归测试
    • send_user_message_tool.rs 已继续向参考 BriefTool 的附件校验语义收口:输入反序列化改为 deny_unknown_fields,附件路径现支持 ~ 展开,缺失文件、权限拒绝和非 regular file 会分别返回与参考一致的细粒度错误文案,同时保留前端当前依赖的 "Message delivered to user." 摘要输出不回退
    • workflow_tool.rsconfig_tool.rspowershell_tool.rsworktree_tools.rscron_tools.rssleep_tool.rs 已完成同一批 strict-schema 收口:这些工具凡是 schema 已声明 additionalProperties: false 的 current surface,现已统一在 Rust 输入结构上补齐 deny_unknown_fields,避免多余字段继续从反序列化层静默穿透
    • config_tool.rs 已继续向参考 ConfigTool / supportedSettings.ts 收口:工具面从仅支持 modelpermissions.defaultMode 扩到当前参考仓库的全部非 feature-gated settingtheme / editorMode / verbose / preferredNotifChannel / autoCompactEnabled / autoMemoryEnabled / autoDreamEnabled / fileCheckpointingEnabled / showTurnDuration / terminalProgressBarEnabled / taskTrackingEnabled / alwaysThinkingEnabled / language / teammateMode),同时把布尔值字符串写入、枚举项校验和动态 description 统一收口到受控 setting 表
    • config_tool.rspermissions.defaultMode 已补齐当前 Lime runtime 别名语义:除参考当前可映射的 default / acceptEdits / auto 外,现也显式支持 approve / chat 两个 Lime 运行时模式,并对参考里的 plan / dontAsk 返回“当前 runtime 尚未实现”的结构化失败,避免继续把不等价模式静默映射错位
    • plan_mode_tool.rs 已重新确认 current 边界:ExitPlanMode 顶层输入仍刻意保持 additionalProperties: true,因此这轮不再把顶层反序列化收紧;只保留 allowedPrompts item 级 strict object,不让计划模式工具偏离当前 surface
    • ask.rs 已把 AskUserQuestion 继续向参考 strict object surface 收口:顶层 questions、question item、option item 的 schema 全部显式补齐 additionalProperties: falseRust 输入结构同步补上 deny_unknown_fields;同时把 AskOptionInput 改成手写反序列化,避免 untagged enum 吞掉 option 子项的未知字段错误,当前 extra 这类脏字段会稳定返回 unknown field 失败而不再被泛化成匹配失败
    • worktree_tools.rs 已把 EnterWorktree / ExitWorktree 的输出面继续向参考收口:EnterWorktree 成功消息补齐“退出 session 也会提示处理 worktree”的语义;ExitWorktree 的成功输出去掉当前 runtime 实际不会返回的 noop 字段,避免继续暴露参考 current surface 外的冗余字段
    • tool_search_tool.rs 已把 ToolSearch 的输入面继续向参考收口:Rust 输入结构补上 deny_unknown_fieldsschema 顶层补齐 additionalProperties: false;同时在“无命中结果”时补回参考 pending_mcp_servers 输出字段,并保留当前 Lime UI 仍在消费的 notes 字段不回退
    • extension_manager.rs 已补最小 pending 扩展状态:ExtensionManager 现在会在 add_extension(...) 连接期间维护一个排序后的 pending_extensions 集合,供 ToolSearch 在扩展尚未连上时暴露 pending_mcp_servers,同时对并发重复启用同名扩展做去重,避免重复连接
    • toolSearchResultSummary.tsToolSearchSummaryPanel.tsx 已完成 pending_mcp_servers 的最小前端兼容:summary parser 会识别后端新增字段,面板会在无命中但 MCP 仍在连接时显示“以下 MCP 服务仍在连接中”,避免这次 ToolSearch 对齐只停留在后端埋字段
    • agent.rs 已把两个测试 helper 的 CallToolRequestParam.name 显式改成 Cow::Owned(...),用于消除 lib test 编译时的 'static 推断歧义,避免它继续阻塞 tools 定向校验

本轮补充校验

  • npx vitest run "src/components/agent/chat/components/MessageList.test.tsx" "src/components/agent/chat/components/AgentThreadTimeline.test.tsx"
  • cargo fmt --manifest-path "src-tauri/Cargo.toml" --all
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target-runtime-turn" cargo test --manifest-path "src-tauri/Cargo.toml" -p lime --lib commands::aster_agent_cmd::runtime_turn::tests:: -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target-runtime-turn-2" cargo test --manifest-path "src-tauri/Cargo.toml" -p lime --lib commands::aster_agent_cmd::runtime_turn::tests:: -- --nocapture
  • npm run harness:doc-freshness
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" plan_mode_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" task_list_tools::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" tools::tests::test_register --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" task_output_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" task_stop_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" agent_control::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" remote_trigger_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" team_tools::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" send_user_message_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" config_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" ask::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" tool_search_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" extension_manager::tests:: --lib -- --nocapture
  • npx vitest run "src/components/agent/chat/utils/toolSearchResultSummary.test.ts" "src/components/agent/chat/components/ToolSearchSummaryPanel.test.tsx"
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" worktree_tools::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" cron_tools::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" sleep_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" powershell_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" workflow_tool::tests:: --lib -- --nocapture
  • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" hooks::tests:: --lib -- --nocapture
  • 建立 State / History / Telemetry current 文档 state-history-telemetry.md,把 session / thread / turn / request / evidence / history 收口成单一状态地图
  • agent_sessions / agent_messages -> SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> handoff/evidence/replay/analysis/review -> history-record/trend/cleanup/dashboard -> HarnessStatusPanel / AgentThreadReliabilityPanel 明确归到 state/history/telemetry current 主链
  • lime-aster-codex-state-model-implementation-plan.mddocs/roadmap/reliability/*telemetry_cmd.rs 明确归到 compat,并把 cleanup 报表里残留的 requestTelemetry:unlinked 旧语义标记为 deprecated
  • 将 state/history/telemetry 入口同步回 docs/README.mddocs/aiprompts/README.mddocs/aiprompts/overview.mdAGENTS.md,仓库导航不再继续把旧状态模型方案或 reliability 计划当成 current 主线
  • 再次执行 npm run harness:doc-freshness 并通过(clean
  • 新增 docs/roadmap/reliability/README.md,把 reliability 目录补成明确的 compat 入口,不再让分阶段计划文件继续承担 current 导航职责
  • generated-slop-report-core.mjs 将旧 requestTelemetry:unlinked 语义折叠为 known_gap 兼容别名,并补定向测试守卫,避免 cleanup/dashboard 继续把旧历史样本当成现役 observability 状态
  • docs/roadmap/reliability/*.md 全部补上 compat 提示,正文开头统一先回挂 state-history-telemetry.md,避免专项正文继续被误读成 current 主入口
  • docs/roadmap/reliability/*.md 进一步压缩顶部导航:把重复的上位文档长列表统一收口为 README + current 主链 + PR 对应映射,减少专项正文重复解释
  • 将整组 docs/roadmap/reliability/* 进一步压缩为 compat 历史摘要档案:只保留落地结果、current 映射与延后增强项,重复的目标/问题/范围/实施清单正文统一回退到仓库历史
  • lime-aster-codex-state-model-implementation-plan.md 进一步压缩为 compat 历史摘要档案:只保留状态边界判断、current 映射与延后增强项,不再把它当 current 实施入口
  • lime-aster-codex-alignment-roadmap.md 收紧顶部导航:当前入口统一回挂到 query-loop.mdstate-history-telemetry.mdupstream-runtime-alignment-plan.md
  • lime-aster-codex-alignment-roadmap.md 进一步压缩为 compat 历史摘要档案:只保留阶段映射、历史判断与 current 回看入口,不再继续承载长篇阶段任务与验证流水
  • lime-conversation-execution-efficiency-roadmap.md 进一步压缩为 compat 历史摘要档案:只保留历史主题、current 映射与延后方向,不再继续承载运行时边界总入口职责
  • docs/roadmap/artifacts/* 中仍把旧执行效率路线图当 current 运行时依据的说明,统一改回 query-loop / task-agent-taxonomy / state-history-telemetry / upstream-runtime-alignment-plan
  • telemetry_cmd.rs 收紧命令注释:这些命令只暴露原始 RequestLog 与聚合统计,不负责定义 session/thread current 状态真相
  • 继续对齐 team / task tool surface
    • task_output_tool.rsblock 补齐参考仓库 semanticBoolean 兼容,允许模型把布尔值误写成字符串 "true" / "false" 时仍能按当前 TaskOutput 主链执行
    • tool_search_tool.rsTaskCreate / TaskGet / TaskList / TaskUpdate / TaskOutput / TaskStop / TeamCreate / TeamDelete / ListPeers 补齐参考仓库常见别名与意图词,减少 kill shellagent outputListPeersToolswarm peers 这类上游表述在 Lime 中搜不到当前工具的漂移
    • catalog.rs 补齐 KillShell -> TaskStopListPeersTool -> ListPeers 的 reference alias 规范化,避免参考仓库工具名在 Lime 运行时目录册中掉映射
    • agent_control.rsteam_tools.rs 显式收口 peer surface 差异:SendMessage 现会识别参考仓库 uds: / bridge: peer address,并返回“当前 Lime runtime 未实现 cross-session peer messaging”的结构化失败,不再误把这类 target 当作普通 agent_id 投递;ListPeers 描述同步明确当前只枚举 team 内可达 peers
    • base.rsregistry.rstask_list_tools.rstask_output_tool.rstask_stop_tool.rsteam_tools.rsagent_control.rs 补齐执行层 alias 兼容:ToolRegistry 现在会把 BashTool / ConfigTool / FileReadTool / FileWriteTool / FileEditTool / EnterPlanModeTool / ExitPlanModeTool / EnterWorktreeTool / ExitWorktreeTool / GlobTool / GrepTool / LSPTool / NotebookEditTool / PowerShellTool / BriefTool / SkillTool / SleepTool / WebFetchTool / WebSearchTool,以及 TaskCreateTool / TaskListTool / TaskGetTool / TaskUpdateTool / TaskOutputTool / AgentOutputTool / BashOutputTool / TaskStopTool / KillShell / SendMessageTool / SendInput / TeamCreateTool / TeamDeleteTool / ListPeersTool 真实解析到 current native tools,不再停留在“目录能搜到、运行时却找不到”的半对齐状态
  • 继续对齐 Config current surface
    • config_tool.rsclassifierPermissionsEnabled / voiceEnabled / remoteControlAtStartup / taskCompleteNotifEnabled / inputNeededNotifEnabled / agentPushNotifEnabled 纳入 ConfigTool 已知 setting 集合,不再继续落到 Unknown setting
    • 同时将上述 6 个 setting 明确收口为“已知上游表面,但当前 Lime runtime 未实现”的结构化失败,避免把分散存在的语音 / 通知 / autostart / remote 能力误绑定到错误配置键
    • 进一步收紧 config_tool.rsvoiceEnabled / remoteControlAtStartup unsupported 文案:前者明确卡在“缺少宿主 callback 同步全局语音快捷键副作用”,后者明确 Lime 当前只有 OS auto-launch,并不等同于上游 remote-control-at-startup 语义
    • config_tool.rsruntime_turn.rs 接上 voiceEnabled 宿主回调:当前 runtime turn 入口会用 Tauri 宿主的 get_voice_input_config / save_voice_input_config 回填 ConfigTool,因此 voiceEnabled 现在会真实读取/更新 experimental.voice_input.enabled,并同步触发全局语音快捷键注册/注销副作用;remoteControlAtStartup 仍保持 unsupported
  • 补执行边界校验:
    • npx vitest run "scripts/lib/generated-slop-report-core.test.ts" 通过(8 passed
    • npm run harness:cleanup-report:check 通过(ok
    • npm run harness:doc-freshness 通过(clean,含历史摘要压缩后的再次确认)
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" task_output_tool::tests:: --lib -- --nocapture 通过(11 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" tool_search_tool::tests:: --lib -- --nocapture 通过(25 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/Cargo.toml" test_tool_catalog_entry_normalizes_reference_js_tool_names_to_current_surface --lib -- --nocapture 通过(1 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" config_tool::tests:: --lib -- --nocapture 通过(14 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" test_registry_resolves_native_aliases_during_lookup_and_execution --lib -- --nocapture 通过(1 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" test_registry_unregister_clears_native_aliases --lib -- --nocapture 通过(1 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" test_register_default_tools --lib -- --nocapture 通过(1 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" test_registers_team_tools_when_spawn_and_send_callbacks_exist --lib -- --nocapture 通过(1 passed
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/Cargo.toml" test_normalize_workspace_tool_permission_behavior_auto_mode_allows_warning --lib -- --nocapture 通过(1 passed,确认主 crate 的 runtime_turn 编译链已带起)
    • env CARGO_TARGET_DIR="/Users/coso/Documents/dev/ai/aiclientproxy/lime/.codex-target" cargo test --manifest-path "src-tauri/crates/aster-rust/crates/aster/Cargo.toml" agent_control::tests:: --lib -- --nocapture 已启动重跑,但本轮未等到 aster test binary 重编译完成;后续需补跑以确认 uds: / bridge: 受控失败分支未回退现有 team / named child 路由

本轮继续补齐

  • 继续推进“应用层优先消费统一 runtime tool surface”:
    • inventory.rsruntime_api.rstypes.tscore.tsHarnessStatusPanel.tsx 已补统一 runtime_tools 视图后,本轮继续把前端 usage 从“只在工具库存面板里看四张表”往“主界面直接消费实际 runtime tool surface”推进
    • useWorkspaceHarnessInventoryRuntime.ts 现在会在主界面启用时预取工具库存,不再等 Harness 面板展开后才第一次拉取
    • 新增 runtimeToolAvailability.ts,把 runtime_tools 优先、registry_tools 兜底的真实 current surface 收口为 webSearch / subagent(team) / task 三组 capability 派生
    • useWorkspaceInputbarSceneRuntime.tsxAgentRuntimeStrip.tsxWorkspaceConversationScene.tsxEmptyState.tsxEmptyStateComposerPanel.tsx 已开始直接消费这份派生结果:Runtime strip 会显示实际 runtime tool surface 规模与 team/task gap,首页主输入区也会在用户开启 联网搜索 / 任务拆分 偏好但 runtime current tools 尚未接通时给出明确提示,不再把静态偏好误显示成“真实可用能力”
    • 本轮继续补齐测试与 smoke
    • 本轮已执行校验:
      • npm run smoke:agent-runtime-tool-surface 通过
      • npm run verify:gui-smoke 通过(已串联新的 smoke:agent-runtime-tool-surface
      • Playwright MCP 真实页面续测通过:首页在开发态 override 下可稳定出现 runtime tool surface 告警,且 toggle-web-search / toggle-subagent-mode 可直接驱动真实空态提示

当前判断

  • M0 统一排期事实源:已完成
  • M1 Query Loop 收口:已完成第二十五刀实现,并继续收口 TurnInputEnvelope -> SessionConfig 的 turn context snapshot 分叉、action_runtime 辅助恢复链的 turn context 旁路,以及 compact_session 控制回合的最小上下文边界;当前主路径已压成 execute_aster_chat_request -> execute_runtime_turn_pipeline -> entry/ingress/submit_preparation/session_scope_executeturn context 的 output schema / auto_compact / request metadata 也已进一步收紧到共享 snapshot helper
  • M2 Task / Agent taxonomy 收口:已完成 current taxonomy 文档、索引回挂与分类判断;当前长时执行入口统一按 agent turn / subagent turn / automation job 解释,ExecutionTracker 只作为统一执行摘要层,SchedulerService 只作为 compat 触发壳
  • M3 Remote runtime 收口:已完成 current remote 文档、索引回挂与分类判断;当前远程入口统一按 消息渠道 runtime + 浏览器连接器 / ChromeBridge 解释,DevBridgeOpenClaw 只作为 compat 支撑,telegram_remote_cmd 只作为 deprecated 单通道入口
  • M5 State / History / Telemetry 收口:已完成 current 状态地图、索引回挂与分类判断;当前状态链统一按 SessionDetail -> AgentRuntimeThreadReadModel -> RequestLog 关联键 -> export/history 解释,旧状态模型方案、reliability 计划、Aster/Codex 联合路线图、旧执行效率路线图与原始 request log 浏览面只作为 compat 附属层,其中 docs/roadmap/reliability/*lime-aster-codex-state-model-implementation-plan.mdlime-aster-codex-alignment-roadmap.mdlime-conversation-execution-efficiency-roadmap.md 已进一步压成历史摘要档案
  • M1 退出判断:已满足“不再需要横跳多份文档才能解释 Lime 主循环”的出口条件,后续默认不再继续微切 runtime_turn.rs
  • M2 退出判断:已满足“所有长时执行入口都能归到唯一 taxonomy”的出口条件,后续不再继续把 execution tracker、scheduler、subagent、automation 当作多条平级主线分别排期
  • M3 退出判断:已满足“remote 不再是多个并列产品旁路”的出口条件,后续只允许在 gateway_channel_*browser connector / ChromeBridge current ingress 上继续长能力
  • M4 退出判断:已满足“memory_runtime_*compact_session 不再被当成分散能力点看待”的出口条件;后续只允许在 memory_runtime_*unified_memory_*agent_runtime_compact_session current 边界继续长记忆 / 压缩能力
  • M5 退出判断:已满足“session / thread / turn / request / evidence / history 的读模型叙事收口”的出口条件;后续只允许在 SessionDetailAgentRuntimeThreadReadModelRequestLog 关联键与 agent_runtime_export_* current 边界继续长能力

下一刀

  • docs/roadmap/reliability/*lime-aster-codex-state-model-implementation-plan.mdlime-aster-codex-alignment-roadmap.mdlime-conversation-execution-efficiency-roadmap.md 的 compat 历史档案化已完成;当前又收口了 TurnInputEnvelope -> SessionConfig 的 turn context 分叉、action_runtime 辅助恢复链旁路,并显式化了 compact_session 控制回合的最小上下文边界;剩余散落在 persona_cmd / theme_context_cmd 的一次性临时会话配置也已收回专用 helper,零入口旧发送壳已删除,Tauri 命令层 raw execution 也已经固定为 3 处并补了源码扫描守卫。下一刀转向继续盘点 src-tauri/src 非命令层与 README/示例面是否还残留会误导实现者的原始执行旁路叙事
  • 后续若出现 runtime_turn 行为回退,再回到 M1 current 主路径做定点修复,而不是继续常态化微切