13 KiB
Lime AgentRuntime Profile 分阶段落地计划
状态:implementation-audited 更新时间:2026-05-12 作用:把 AgentRuntime Profile 从标准文档推进到 Lime current runtime、证据导出和 GUI 展示。 完成审计:见 ./completion-audit.md。本文件保留阶段计划与退出条件,实际落地证据以完成审计为准。
相邻标准边界同步纳入本计划:AgentContext 负责上下文 owner facts,AgentPolicy 负责策略/审批 owner facts,AgentEvidence 负责证据与 completeness owner facts,AgentUI 负责只读投影。详细合同见 ./adjacent-protocols.md。
1. 固定实施原则
- 先做主链闭环,再做全量事件族。
- 先补 correlation ids,再补漂亮展示。
- 先让 evidence/replay/review 读同源事实,再做 dashboard 聚合。
- 先保守收紧 Lime Profile schema,不收紧公开 schema。
- 每阶段都要有可运行的结构测试或 GUI smoke。
- 全球本地化必须在 presentation 层完成:profile facts 保持 stable value,AgentUI/Workspace/Evidence Markdown 通过 i18n key 或导出 locale 渲染。
2. 阶段总览
| 阶段 | 目标 | 关键产物 | 退出条件 |
|---|---|---|---|
| P0 | 文档与 profile 冻结 | 本 roadmap、PRD、架构图、AgentRuntime v0.4.0 Lime Profile | 团队对主链、owner、非目标无歧义 |
| P1 | Identity 与事件最小闭环 | runtimeId/sessionId/threadId/turnId/taskId/runId 贯穿 submit turn |
submit turn fixture 能映射真实 runtime |
| P2 | ThreadReadModel 与 Context 收口 | read model 消费 runtime events,不由 GUI 拼状态;Context refs 进入 read model | Workspace/Harness 只读 read model |
| P3 | Evidence 同源导出 | evidence/replay/review 消费同一 runtime facts,并保留 context/policy refs | evidence pack 含 runtime correlation spine |
| P4 | Task / routing / permission 扩展 | task retry、routing single candidate、tool approval / policy fixtures 落地 | 核心 fixtures 全部有实现测试 |
| P5 | 子代理 / job / remote channel | parent-child graph、channel resume、job item retry | 断线/重试/关闭可恢复可审计 |
| PX | 全球本地化守卫 | profile facts 与用户可见 presentation 分层 | 新增 UI 文案有 locale resources,profile fixture 不含 locale 文案状态值 |
3. P0:文档与 profile 冻结
已完成目标:
agentruntime标准项目新增 Lime AgentRuntime Profile。- Lime 主仓库新增
docs/roadmap/agentruntime/。 - 固定 current / compat / deprecated / dead 分类。
后续如果改 Profile,必须同步:
docs/roadmap/agentruntime/prd.mddocs/roadmap/agentruntime/architecture.mddocs/aiprompts/harness-engine-governance.md,仅当事实源规则改变时
4. P1:Identity 与事件最小闭环
目标:
- 任一
agent_runtime_submit_turn都能生成 AgentRuntime Profile 需要的核心关联键。
关键工作:
- 在 runtime turn 创建点统一生成或读取:
runtimeIdsessionIdthreadIdturnIdtaskId,如果该 turn 属于目标任务runId,如果该 task 有执行尝试
- 事件 envelope 统一携带:
eventIdtimestampsequenceschemaVersionpayload
- 输出最小事件:
turn.submittedturn.startedmodel.requestedmodel.completed或model.failedturn.completed或turn.failed
- AgentUI 对
schemaVersion = lime-profile-0.4.0的 dotted profile event 保持 stream 活跃且不告警,不把它转换成 UI-owned truth。 - AgentUI 对 profile event 的展示必须通过 i18n key 映射,不把
type/status/message原样当作用户可见主文案。
退出条件:
- 本地结构测试能用真实 runtime 输出构造
submit-turn-event.json等价 fixture。 - 无
session/thread/turn的 runtime 主路径事件不能进入 current read model。 - 前端未知事件控制器能识别 Lime Profile 事件为已知旁路事实,不污染用户可见 projection。
- AgentUI projection presentation mapper 支持用 key-based i18n 渲染 event type、phase/status、control、surface;Team Workbench、Harness、可靠性诊断和 Artifact timeline 这类 current projection 入口不得退回中文 fallback,不把 stable facts 翻译回写到 runtime/read model。
turn.submitted / model.failed / task.failed等 profile fixtures 的type/status/failureCategory在不同 locale 下保持不变。
5. P2:ThreadReadModel 与 Context 收口
目标:
- GUI 不再从散落状态推断 thread 状态。
- AgentContext facts 只以 refs/summary 进入 read model,不复制大上下文。
关键工作:
AgentRuntimeThreadReadModel增加或统一字段:statusprofileStatusactiveTurnIdturnspendingRequestsqueuedTurnsincidentstoolCallsmodelRoutinglimitStateevidenceSummarytelemetrySummarycontextSummarymissingContextcompactionSummarycontextRefs / policyRefs,只存 owner refs 或短 summary
- Workspace / Harness 只消费 read model。
- 旧 GUI 状态路径标记为
compat并只做映射。 - 现有
turn_context、context_trace、memory budget、context compaction metadata 收敛为context.*facts 或 read model summary。 - Context 侧必须保留 selected / omitted / budget / assembly / injection / compaction / missing context 的 owner refs;Runtime 不复制大 context payload。
退出条件:
- 主路径 GUI smoke 能展示 preparing/running/waiting_permission/completed/failed。
- 搜索不到新增 UI-only runtime truth builder。
context.resolved/context.compaction.*可 join 到session/thread/turn,且 omitted / missing context 不被静默丢弃。
6. P3:Evidence 同源导出
目标:
- evidence pack、replay、analysis、review 共享 runtime facts。
关键工作:
agent_runtime_export_evidence_pack加入 runtime correlation spine。agent_runtime_export_replay_case复用 evidence pack。- analysis handoff 和 review template 不再重建 observability summary。
- known gaps 只从适用信号覆盖表导出。
- evidence pack 引用 AgentContext source/selection refs 与 AgentPolicy decision/grant refs,不复制完整 owner payload。
退出条件:
- evidence fixture 包含
session/thread/turn/task/run/evidence/trace。 - replay/review/analysis 均能指向同一 evidence pack ref。
- completeness 按
runtime/telemetry/sources/claims/artifacts/verification/privacy/replay分类声明,缺失事实标为unknown/unavailable/not_collected等,不推断成功。
7. P4:Task / routing / permission 扩展
目标:
- 让 Profile 覆盖 Lime 当前最关键的复杂运行态。
- 让 AgentPolicy 的 allow/deny/ask/defer/escalate/waive/not_applicable/indeterminate 结果成为可测试 runtime facts。
关键工作:
- Task retry:
task.createdtask.attempt.startedtask.attempt.failedtask.retryingtask.completed / task.failed
- Routing single candidate:
task.profile.resolvedrouting.single_candidaterouting.not_possiblerouting.decidedcost.estimatedlimit.changed
- Tool approval:
permission.evaluatedaction.requiredaction.resolvedtool.startedtool.result / tool.failed- 真实 stream hook 以
RuntimeAgentEvent::ToolStart / ToolEnd为首选事实源,ItemStarted / ItemCompleted(ToolCall)只作同一执行流 fallback,并按toolCallId去重。
- Policy linkage:
policy.decision.createdowner refapprovalRequestIdpermissionGrantIdriskLevelreasonCodesobligations / constraints
退出条件:
tool-approval-action-required-event.json、task-retry-attempt-failed-event.json、routing-single-candidate-event.json、routing-not-possible-event.json、routing-decided-multi-candidate-event.json都有对应实现测试。runtime_tool_profile_should_follow_real_tool_start_and_end_once、runtime_tool_profile_should_fallback_to_item_tool_call_failure必须通过,证明 tool facts 已从 read-model 反推前移到真实执行事件 hook,且不会被 ToolStart/ItemStarted 双路重复写入。ask必须产生action.required,deny/indeterminate不能继续执行工具,defer/escalate不能被 UI 当作允许,allow/waive必须保留 obligations/constraints/scope refs。
8. P5:Subagent / Job / Remote Channel
目标:
- 把并行、后台和远程工作接入同一 profile。
关键工作:
subagent.spawned / subagent.status / subagent.completed / subagent.failed / subagent.closedjob.created / job.item.started / job.item.failed / job.completedchannel.connected / channel.disconnected / channel.resumed / snapshot.repaired- parent-child graph 写入 TaskSnapshot。
退出条件:
subagent-parent-child-event.json有对应实现测试,且 profile event 能回挂parentSessionId/parentThreadId/parentTaskId/createdFromTurnId。job-owner-run-event.json有对应实现测试,且 automation owner run 能输出job.created/job.status/job.item.started/job.item.failed/job.completed|job.failed。remote-channel-resume-event.json有对应实现测试,且 remote task owner run 能输出channel.connected/channel.disconnected/channel.resumed/snapshot.repaired。- 子代理失败能回挂 parent task。
- remote reconnect 后先读 snapshot,再补 replay 或标记 stale。
9. 测试计划
详细测试矩阵见 ./test-cases.md。本节只保留阶段级测试口径。
9.1 结构测试
- 校验 Lime Profile fixtures。
- 校验 runtime 输出事件 required ids。
- 校验 snapshot 必含 thread/task/evidence/routing/telemetry summary。
9.2 Contract 测试
- Tauri command、frontend gateway、catalog、mock 与 profile control plane 映射一致。
safeInvoke(...)/ Rust handler / command catalog / mocks 同步。
9.3 Replay 测试
- 从 runtime event stream 重建 ThreadReadModel。
- 从 ThreadReadModel + evidence pack 生成 review/replay。
9.4 GUI smoke
- submit turn。
- tool approval。
- failed tool / denied permission。
- routing single candidate 展示。
- evidence export 展示。
10. 风险与缓解
| 风险 | 等级 | 缓解 |
|---|---|---|
| 改动面扩散到所有 runtime 模块 | 高 | 每阶段只收一个主链切片。 |
| UI 状态短期双轨 | 高 | compat 只允许委托,并写退出条件。 |
| Profile schema 过早收紧 | 中 | public schema 宽松,Lime profile 只约束 current core。 |
| Evidence 与 GUI 迁移不同步 | 中 | evidence 先修事实,GUI 后读 read model。 |
| 子代理/job 复杂度过早进入 | 中 | P5 后置,P1-P4 先证明主链。 |
11. PX / Markdown 本地化收口
2026-05-12 补记:
- Evidence
summary.md保持 facts JSON 稳定,presentation copy 已按应用语言支持 zh-CN / zh-TW / en-US / ja-JP / ko-KR。 - Replay
grader.md已接RuntimeReplayMarkdownCopy,artifact title、主标题、读取顺序、评分原则、通过条件、阻塞检查和输出模板可按 locale 渲染。 - Analysis
analysis-brief.md与copyPrompt已接RuntimeAnalysisMarkdownCopy,外部分析标题、证据覆盖、读取顺序、文件分组、人工审核清单和关键摘录标题可按 locale 渲染。 - Review
review-decision.md已接RuntimeReviewMarkdownCopy,不再用标题替换后处理作为主方案,审核上下文、验证摘要、决策状态、风险、回归、后续动作等结构标题与核心标签由 locale copy 输出。 - Runtime facts、
runtime.json、analysis-context.json、review-decision.json的 schema key 与 stable value 不随 locale 改变;locale 只影响 Markdown / copy prompt presentation。
退出条件:
- Rust 定向测试覆盖 Evidence / Replay / Analysis / Review Markdown locale。
cargo check -p lime --lib不出现 presentation copy unused warning。- 未新增 Tauri command、前端 gateway、mock 或 request shape。
12. 实施后的下一刀
P1-P5/PX 的 current MVP 已按 ./completion-audit.md 完成审计。Evidence service 已先拆出 request telemetry、profile projection、completion audit / controlled GET evidence、modality contract、auxiliary runtime、verification / artifact validator、observability / signal coverage、known gaps、pack output renderer、Markdown locale copy、artifact index、JSON/path/tool helper 与单测 fixture 模块;后续不再从 P1 重走,而是优先收这些非阻塞弱项:
- 继续把 Replay / Analysis / Review Markdown 的正文段落、验证摘要和 review checklist 做细粒度 copy 化;当前已完成结构标题与核心标签 locale-aware。
- 把文档 fixture 名补成真实 JSON fixtures,或在测试用例文档中明确“结构测试等价覆盖”的映射表。
- 继续收敛超大测试 fixture,优先拆
runtime_evidence_pack_service_tests.rs的 artifact / telemetry / approval 场景 fixture builder。 - 用 Playwright 补一个最小 tool approval approve/deny 和 remote resume 产品级 E2E。