mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-10-25 10:04:32 +08:00
265 lines
10 KiB
Markdown
265 lines
10 KiB
Markdown
# Query Loop 主链
|
||
|
||
## 这份文档回答什么
|
||
|
||
本文件定义 Lime 当前运行时 `Query Loop` 的唯一主链,主要回答:
|
||
|
||
- 哪个入口才是当前回合提交的唯一开始点
|
||
- 请求在进入模型前,system prompt、工具策略、记忆、项目上下文、场景 metadata 是怎样被组装的
|
||
- runtime queue、tool runtime、流式执行、artifact 落盘、记忆沉淀、evidence 导出分别挂在哪一段
|
||
- 哪些旧路线图或专题文档只能作为下游实现说明,不能再反向充当 Query Loop 事实源
|
||
|
||
它是 **当前运行时主循环的工程入口文档**,不是通用架构总览,也不是单次专题路线图。
|
||
|
||
## 什么时候先读
|
||
|
||
遇到以下任一情况时,先读本文件:
|
||
|
||
- 调整 `agent_runtime_submit_turn`
|
||
- 调整 `agent_runtime_respond_action` 或 elicitation / ask 恢复路径
|
||
- 调整 turn 级 system prompt / metadata / provider routing / continuation
|
||
- 调整 runtime queue、流式执行、自动压缩或记忆预取
|
||
- 调整 `@` 命令、`/scene`、`service_scene_launch`、`*_skill_launch` 这类“提交前补 metadata”能力
|
||
- 调整 evidence / replay / review 与主回合执行的衔接
|
||
|
||
如果一个需求同时碰到“提交入口 + prompt/metadata 组装 + 工具执行 + 证据导出”里的两步以上,默认属于 Query Loop 改动。
|
||
|
||
## 固定主链
|
||
|
||
当前 Lime 的 Query Loop 统一按下面这条链理解:
|
||
|
||
`agent_runtime_submit_turn -> runtime_turn 归一化与组包 -> TurnInputEnvelope -> runtime_queue -> stream_reply_once -> timeline / artifact / memory -> thread_read / evidence / replay / review`
|
||
|
||
这条主链意味着:
|
||
|
||
1. **统一入口是 `agent_runtime_submit_turn`**
|
||
其他 `@` 命令、`/scene`、图片/素材/站点搜索等场景,只允许在提交前补 `request_metadata.harness.*`,不能绕开 submit turn 另建第二条执行链。
|
||
|
||
2. **`runtime_turn.rs` 是当前组包主边界**
|
||
Provider 解析、workspace 解析、execution profile、request tool policy、prompt augmentation、sandbox、preload、turn state 都在这里收口。
|
||
|
||
3. **`TurnInputEnvelope` 是当前 turn 输入快照**
|
||
它记录最终 system prompt、history source、provider routing、tool policy、continuation、turn context metadata,不允许下游再各自重组另一份“真实输入”。
|
||
|
||
4. **`runtime_queue.rs` 是当前排队执行边界**
|
||
queue/resume/promote/remove 统一走 runtime queue,不允许每个调用方自己维护另一套忙碌态与排队状态。
|
||
|
||
5. **工具面仍统一属于 `tool_runtime.rs`**
|
||
浏览器、workspace、search、service skill、subagent、social/image 等工具都从这里注册和裁剪,不允许在 Query Loop 外再长出第二套 registry 语义。
|
||
|
||
6. **证据链是主链的下游消费,不是旁路真相**
|
||
`thread_read / evidence / replay / review` 只能复用主回合产生的 runtime facts,不能反向定义 Query Loop 真相。
|
||
|
||
## 代码入口地图
|
||
|
||
### 1. 提交入口
|
||
|
||
- `src-tauri/src/commands/aster_agent_cmd/command_api/runtime_api.rs`
|
||
- `agent_runtime_submit_turn`
|
||
- `agent_runtime_interrupt_turn`
|
||
- `agent_runtime_compact_session`
|
||
- `agent_runtime_get_session`
|
||
- `agent_runtime_get_thread_read`
|
||
|
||
这里的固定规则:
|
||
|
||
- `agent_runtime_submit_turn` 是唯一提交入口
|
||
- `agent_runtime_respond_action` 这类恢复路径只能复用当前 turn context snapshot 组装,不能再旁路拼第二份 turn context 真相
|
||
- `get_session / get_thread_read` 负责消费稳定读模型,不负责重新解释提交逻辑
|
||
- `compact_session` 是主链内的上下文治理动作,不是独立聊天系统
|
||
|
||
### 2. turn 归一化与输入组装
|
||
|
||
- `src-tauri/src/commands/aster_agent_cmd/runtime_turn.rs`
|
||
- `src-tauri/crates/agent/src/turn_input_envelope.rs`
|
||
|
||
当前 `runtime_turn.rs` 负责的关键步骤:
|
||
|
||
1. 确保 agent、session store、runtime support tools 已准备好
|
||
2. 解析 provider config、workspace、session recent harness/runtime context
|
||
3. 归一化 `request.metadata`
|
||
4. 解析 `request_tool_policy` 与 `execution_profile`
|
||
5. 在 FullRuntime 下补 `*_skill_launch` / `service_scene_launch` metadata
|
||
6. 组装 prompt augmentation:
|
||
- runtime agents
|
||
- memory / turn prefetch
|
||
- web search
|
||
- request tool policy
|
||
- artifact
|
||
- 各类 skill launch
|
||
- team preference / auto continue / service skill preload
|
||
7. 生成 `TurnState`
|
||
8. 生成 `TurnInputEnvelope` 与 diagnostics snapshot
|
||
9. 初始化 runtime turn、发出 runtime status
|
||
10. 进入 tracker + stream 执行
|
||
|
||
`TurnInputEnvelope` 当前固定记录:
|
||
|
||
- session / workspace / project / thread / turn
|
||
- system prompt 来源与最终值
|
||
- prompt augmentation stages
|
||
- request tool policy snapshot
|
||
- provider routing snapshot
|
||
- provider continuation state
|
||
- effective user message
|
||
- turn output schema snapshot
|
||
- approval / sandbox policy
|
||
- turn context metadata
|
||
|
||
后续如果一个改动说不清应该落在 `runtime_turn.rs` 还是 `TurnInputEnvelope`,先判断它属于:
|
||
|
||
- **组包逻辑**:落 `runtime_turn.rs`
|
||
- **turn 输入快照字段**:落 `turn_input_envelope.rs`
|
||
|
||
### 3. queue 与恢复
|
||
|
||
- `src-tauri/crates/agent/src/runtime_queue.rs`
|
||
|
||
当前 queue 主链固定为:
|
||
|
||
- `submit_runtime_turn`
|
||
- `resume_runtime_queue_if_needed`
|
||
- `clear_runtime_queue`
|
||
- `list_runtime_queue_snapshots`
|
||
- `remove_runtime_queued_turn`
|
||
- `promote_runtime_queued_turn`
|
||
- `resume_persisted_runtime_queues_on_startup`
|
||
|
||
这里的固定规则:
|
||
|
||
- queue busy / enqueue / start-now 统一由 runtime queue service 决定
|
||
- 启动恢复、回合完成后的下一条接力,都复用同一套 queue service
|
||
- 不允许前端、命令层或业务专题自己重建另一套排队真相
|
||
|
||
### 4. 工具面与沙箱
|
||
|
||
- `src-tauri/src/commands/aster_agent_cmd/tool_runtime.rs`
|
||
|
||
当前这里负责:
|
||
|
||
- runtime support tools 注册
|
||
- fast chat 与 full runtime 的工具面裁剪
|
||
- workspace sandbox 权限注入
|
||
- browser / site / service skill / subagent / workspace / search 等工具面注册或下线
|
||
|
||
固定规则:
|
||
|
||
- Query Loop 不直接 new tool registry
|
||
- 所有工具面增删都先回到 `tool_runtime.rs`
|
||
- `request_tool_policy` 只能在这里影响实际工具可见面,不能在别处再复制一套“隐藏工具”逻辑
|
||
|
||
### 5. 流式执行与主回合副作用
|
||
|
||
- `src-tauri/src/commands/aster_agent_cmd/runtime_turn.rs`
|
||
|
||
主回合执行当前固定通过:
|
||
|
||
- `ExecutionTracker::with_run_custom(...)`
|
||
- `stream_reply_once(...)`
|
||
|
||
执行中的 current 副作用包括:
|
||
|
||
- runtime event -> timeline recorder
|
||
- artifact document persist / fallback
|
||
- runtime memory capture
|
||
- provider continuation state 更新
|
||
- runtime status / warning / preload 事件投影
|
||
|
||
如果一个功能想在“模型回复完成后”做收尾动作,应优先挂到这里,而不是在 UI 或单独 service 旁路触发。
|
||
|
||
### 6. 压缩、读模型与证据导出
|
||
|
||
当前 Query Loop 的下游消费统一挂在下面几处:
|
||
|
||
- `agent_runtime_compact_session`
|
||
- `agent_runtime_get_session`
|
||
- `agent_runtime_get_thread_read`
|
||
- `src-tauri/src/services/runtime_evidence_pack_service.rs`
|
||
- `src-tauri/src/services/runtime_replay_case_service.rs`
|
||
- `src-tauri/src/services/runtime_review_decision_service.rs`
|
||
|
||
固定规则:
|
||
|
||
- 自动压缩与手动压缩都属于同一 runtime 主链
|
||
- `thread_read` 是稳定读模型,不重新定义提交逻辑
|
||
- `evidence / replay / review` 必须消费 runtime facts,不允许自己拼第二份 Query Loop 真相
|
||
|
||
## 专项场景如何挂回主链
|
||
|
||
所有下列能力都只能视为 Query Loop 的“提交前 metadata / prompt 归一化扩展”,不能单独定义新的执行主链:
|
||
|
||
- `@配图` / `@封面` / `@视频` / `@播报` / `@素材`
|
||
- `@搜索` / `@深搜` / `@研报` / `@竞品`
|
||
- `@站点搜索` / `@读PDF` / `@总结` / `@翻译` / `@分析`
|
||
- `@转写` / `@链接解析` / `@抓取` / `@网页读取`
|
||
- `@排版` / `@网页` / `@PPT` / `@表单`
|
||
- `service_scene_launch`
|
||
|
||
它们当前的正确角色是:
|
||
|
||
1. 前端发送边界写入结构化 `request_metadata.harness.*`
|
||
2. `runtime_turn.rs` 在提交前归一化 metadata 与 prompt
|
||
3. Agent 首刀按系统提示走 skill / tool / service skill 主链
|
||
|
||
不允许回流成:
|
||
|
||
- 前端直建任务
|
||
- 前端直调云端 run
|
||
- viewer 自己推断执行状态
|
||
- 单个场景自己维护一套独立 queue / runtime / evidence
|
||
|
||
## current / compat / deprecated
|
||
|
||
### `current`
|
||
|
||
- `agent_runtime_submit_turn`
|
||
- `runtime_turn.rs`
|
||
- `TurnInputEnvelope`
|
||
- `runtime_queue.rs`
|
||
- `tool_runtime.rs`
|
||
- `agent_runtime_get_session / get_thread_read`
|
||
- `agent_runtime_compact_session`
|
||
- `src-tauri/src/commands/aster_agent_cmd/action_runtime.rs::agent_runtime_respond_action`
|
||
- `runtime_evidence_pack_service.rs`
|
||
- `runtime_replay_case_service.rs`
|
||
- `runtime_review_decision_service.rs`
|
||
|
||
### `compat`
|
||
|
||
- `docs/roadmap/lime-aster-codex-alignment-roadmap.md`
|
||
- `src-tauri/src/commands/persona_cmd.rs::generate_persona`
|
||
- `src-tauri/src/commands/theme_context_cmd.rs::aster_agent_theme_context_search`
|
||
|
||
这份历史档案与专用命令仍可保留各自职责,但不再承担 Query Loop 唯一事实源职责。
|
||
这两条命令属于专用一次性会话能力:允许显式拼自己的临时 `SessionConfig`,但不能参与 submit turn、runtime queue、turn context snapshot 或 evidence 真相定义。
|
||
当前命令层允许保留的原始执行面只剩这 3 处:`action_runtime` 属于 current 恢复链,`persona_cmd` 与 `theme_context_cmd` 属于受控 compat 一次性命令。
|
||
|
||
### `deprecated`
|
||
|
||
- 让任何 `@` 场景、slash scene 或 viewer 自己维护执行状态
|
||
- 在 UI、专题 service 或证据导出层重新拼装“真实模型输入”
|
||
- 绕开 `agent_runtime_submit_turn` 直接定义第二条主回合执行链
|
||
- 在 Tauri 命令层继续新增未分类的原始 `agent.reply(...)` / `stream_reply_with_policy(...)` 调用
|
||
|
||
## 最低验证要求
|
||
|
||
如果本轮改动涉及 Query Loop,至少按边界选择最贴近的验证:
|
||
|
||
- Rust 定向测试:
|
||
- `runtime_turn.rs`
|
||
- `turn_input_envelope.rs`
|
||
- `runtime_queue.rs`
|
||
- 相关 evidence / replay / review service
|
||
- `npm run governance:legacy-report`
|
||
- 文档改动额外跑 `npm run harness:doc-freshness`
|
||
|
||
如果还改了命令边界、MCP 注入、GUI 时间线或工具展示,再回看:
|
||
|
||
- `docs/aiprompts/commands.md`
|
||
- `docs/aiprompts/quality-workflow.md`
|
||
- `docs/aiprompts/harness-engine-governance.md`
|
||
|
||
## 一句话
|
||
|
||
> Lime 当前 Query Loop 的唯一主链,是 `agent_runtime_submit_turn` 驱动的 turn 组包、runtime queue、tool runtime、流式执行与 evidence 下游消费链;任何新能力都只能往这条链收敛,不能平行再长一套执行真相。
|