mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-01 15:30:52 +08:00
Release v1.103.0
This commit is contained in:
@@ -58,6 +58,7 @@ internal/exec-plans/*
|
||||
!internal/exec-plans/templates/
|
||||
!internal/exec-plans/templates/*.md
|
||||
!internal/exec-plans/README.md
|
||||
!internal/exec-plans/release-v*-plan.md
|
||||
!internal/exec-plans/claw-streaming-rendering-codex-refactor-plan.md
|
||||
!internal/exec-plans/claw-trace-system-implementation-plan.md
|
||||
!internal/exec-plans/devlime-codex-claude-alignment-gap-list.md
|
||||
|
||||
+22
-25
@@ -1,46 +1,43 @@
|
||||
## Lime v1.102.0
|
||||
## Lime v1.103.0
|
||||
|
||||
<sub>The Simplified Chinese release notes are the primary version. This English page is a companion for international readers.</sub>
|
||||
|
||||
### New Features
|
||||
|
||||
- Completed the real MCP server elicitation product chain: thread-scoped runtimes initiate forms through App Server reverse JSON-RPC, Electron forwards them unchanged, Renderer provides localized interaction in five languages, and response, remote resolution, and cancellation all close cleanly.
|
||||
- Added durable Agent graph, identity, and mailbox storage, then exposed six per-turn control tools to the current provider: `spawn_agent`, `list_agents`, `send_message`, `followup_task`, `interrupt_agent`, and `wait_agent`. QueueOnly / TriggerTurn, canonical Items, and delivery audit now share one persistence source.
|
||||
- Completed on-demand Multi-Agent recovery and terminal notifications: restarts hydrate only the exact target, child completion or failure reaches the parent through durable assistant Items and mailbox records, and `wait_agent` returns structured activity with steer-first semantics while projecting canonical Collab / SubAgent Items.
|
||||
- Changed the MCP Tool surface to a sampling-step snapshot that freezes definitions, allowlists, routes, connections, and timeouts. Resource and prompt operations now use exact `(server, uri/name)` identities to prevent cross-connection matches.
|
||||
- Added concurrent runtime MCP server startup and fault isolation: optional failures no longer remove healthy connections, while required failures preserve the previous generation and reject incomplete replacements.
|
||||
- Moved the Agent Workspace SubAgent experience fully onto the canonical child Thread family. Parent-child identity, seven runtime states, task statistics, navigation, and history recovery now read App Server `thread/list|read`, AgentGraph, and Thread identity.
|
||||
- Preserved the original Codex Item ID for imported completed Plans as the canonical item, revision, and source identity. Restarts retain a typed Plan lifecycle without degrading it into a tool event or synthesized identity.
|
||||
- Codex-imported User and Agent Messages now preserve source identity and source ordinals while emitting the complete canonical `item.started` / `item.completed` lifecycle. Turn completion no longer synthesizes Messages through a side path.
|
||||
- Migrated Managed Objective, Skills, Evidence, Tool Inventory, queued-turn, execution-strategy, stream-runtime, and thread-read consumers to their current owners, with guards preventing legacy root barrels and session rosters from returning.
|
||||
|
||||
### Fixes
|
||||
|
||||
- Fixed reverse JSON-RPC connection ownership, boot-scoped request IDs, abort cleanup, at-most-once responses, and resolved tombstones while keeping duplicate, late, disconnected, and unknown responses fail-closed.
|
||||
- Fixed MCP elicitation active-time timeout accounting, response `_meta`, form schema/number/enum semantics, and cancellation races so user wait time no longer consumes server execution timeouts.
|
||||
- Fixed Claw first-token and long tool-loop stability by moving first-turn policy ownership into App Server, removing the parallel Renderer fast-routing path, and entering real model synthesis after enough web evidence has been collected.
|
||||
- Fixed navigation when reopening the same interrupted Claw conversation from the New Task home screen. Explicit user intent now restores the current read model, composer, and follow-up sending instead of being blocked by a stale draft pause.
|
||||
- Fixed atomic persistence for media provider/model selection and removed legacy Agent runtime barrel dependencies from Sidebar, archived conversations, Automation, Skills, and Plugin history.
|
||||
- Fixed projection drift across approval session-cache events, canonical Thread identity, active/queued Turns, terminal history, and input restoration without creating duplicate pending Items or falling back to the old read model.
|
||||
- Fixed stable canonical timeline ordering for live and historical reasoning, Messages, and Plans by consistently using Item ordinals, and completed the EventLog-to-canonical-Thread history repair path.
|
||||
- Fixed SubAgent parent identity, child roster, and terminal-state visibility after cold start, paginated reads, and zero-child cases without falling back to legacy session detail.
|
||||
- Fixed Plugin runtime start/get/cancel, capability-dispatcher, and host-bridge fixtures that omitted the canonical `threadId`.
|
||||
- Fixed targeted Vitest and batch-list commands overwriting the default resume state, so local diagnostics no longer corrupt later resumed runs.
|
||||
|
||||
### Improvements and Refactors
|
||||
|
||||
- Split the MCP management control plane from the provider tool bridge. Canonical Tool Items are now the sole consumption contract for history, compaction, coding, Skills, MCP, browser, and artifact evidence.
|
||||
- Removed the old Agent session store, subagent sidecars, aggregate runtime, session query, execution-strategy compatibility layer, backend event stream, and default Playwright MCP seed, with guards preventing restoration.
|
||||
- Migrated Agent Chat, Automation, Skills, archived conversations, Sidebar, and Plugin history to their current owners while shrinking compatibility barrels, fast-response helpers, and the parallel pending-shell path.
|
||||
- Consolidated canonical Multi-Agent activity into `Started`, `Interacted`, and `Interrupted`. `list_agents` remains a regular Tool, while legacy V1 resume / close and historical activity variants no longer enter current producers.
|
||||
- Split large App Server event-store, projection-materializer, Agent-runtime, and GUI modules to preserve domain ownership and single-source-of-truth boundaries.
|
||||
- Physically removed Renderer Team formation, the Team runtime sidecar, raw SubAgent channels and parsers, legacy roster DTOs/state/normalizers, roster memory shadowing, and synthetic worker notifications. Historical compatibility remains read-only where required.
|
||||
- Consolidated canonical SubAgent activity into `Started`, `Interacted`, and `Interrupted`, keeping current six-tool names, lineage, and GUI status consistent end to end while excluding V1 aliases from current capability coverage.
|
||||
- Split App Server runtime value helpers, image-command event projection, and the RuntimeBackend execution adapter, tightening file-size and ownership guards without adding parallel facades.
|
||||
- Updated Agent Workspace, AgentUI, Project Thread, and SubAgent roadmaps so current documentation references only canonical Thread family, AgentGraph, and AgentUI projection facts.
|
||||
|
||||
### Tests and Quality
|
||||
|
||||
- Expanded App Server protocol/schema, Rust and TypeScript clients, Electron host, and Renderer contracts for server-originated requests, resolved notifications, MCP target identity, and elicitation forms.
|
||||
- Added targeted regressions for Agent graph/mailbox/control, restart-on-demand, terminal Results, concurrent waits, MCP routing/timeout/fault isolation, canonical projection, first-token flow control, and atomic media preferences.
|
||||
- Added real Electron Gate B, interrupted-conversation reentry and continuation, current-fixture, protocol-guard, and S1-S6 deletion evidence proving the production bridge does not fall back to mocks.
|
||||
- Covered user-visible MCP elicitation strings and GUI regressions across `zh-CN`, `zh-TW`, `en-US`, `ja-JP`, and `ko-KR`.
|
||||
- Expanded Rust and TypeScript regressions for canonical Messages, Plans, SubAgents, child Threads, session reads, and export metrics, together with App Server schema, generated-client, and Electron contract fixtures.
|
||||
- Added static guards for Agent runtime current owners, legacy surfaces, roadmaps, Electron IPC ordering, App Server file boundaries, and production sources.
|
||||
- Added real Electron GUI smoke, history-fixture, Claw cancel/continue, canonical-roster, and Inputbar/Task Rail recovery evidence while keeping five-language Agent Workspace strings and regressions synchronized.
|
||||
- Made the history-replay Electron oracle wait for the complete Reasoning summary, image attachments, and MCP tool row before asserting, eliminating race false positives from the transient “thinking” shell.
|
||||
- Improved smart Vitest targeted-state isolation so focused fixes can continue a large resumed suite without resetting completed batches.
|
||||
|
||||
### Documentation
|
||||
|
||||
- Updated architecture, command, and MCP documentation for reverse JSON-RPC, MCP runtime/control-plane ownership, Agent graph/mailbox, first-turn policy, and canonical projection boundaries.
|
||||
- Updated the refactor v2 execution plan and per-slice evidence with current / compat / deprecated / dead classification, validation results, and deletion exit criteria.
|
||||
- Updated the Refactor V2 central plan, architecture confirmations, and per-slice evidence for canonical child Threads, Agent Chat current owners, App Server module ownership, and deletion exit criteria.
|
||||
- Synchronized Agent Workspace, AgentUI, Project Thread, Skills, and SubAgent roadmaps, removing descriptions that treated legacy session rosters or the Team sidecar as current.
|
||||
|
||||
### Other
|
||||
|
||||
- Bumped version facts to `1.102.0` across the root app, CLI npm package, Rust workspace, `lime-rs/Cargo.lock`, and release notes.
|
||||
- Bumped version facts to `1.103.0` across the root app, CLI npm package, Rust workspace, `lime-rs/Cargo.lock`, and release notes.
|
||||
|
||||
**Full changes**: `v1.101.0` -> `v1.102.0`
|
||||
**Full changes**: `v1.102.0` -> `v1.103.0`
|
||||
|
||||
+22
-25
@@ -1,44 +1,41 @@
|
||||
## Lime v1.102.0
|
||||
## Lime v1.103.0
|
||||
|
||||
### 新功能
|
||||
|
||||
- 打通 MCP server elicitation 的真实产品链:thread-scoped runtime 通过 App Server reverse JSON-RPC 发起表单请求,Electron 原样转发,Renderer 提供五语言交互,并支持 response、远端 resolved 与取消收口。
|
||||
- 建立 durable Agent graph、identity 与 mailbox,并通过 per-turn gateway 向 current provider 提供 `spawn_agent`、`list_agents`、`send_message`、`followup_task`、`interrupt_agent`、`wait_agent` 六个控制工具;QueueOnly / TriggerTurn、canonical Item 和 delivered audit 共享同一持久化事实源。
|
||||
- 补齐 Multi-Agent 按需恢复与终态通知:restart 后只 hydrate exact target,child 完成或失败通过 durable assistant Item / mailbox 通知 parent,`wait_agent` 以 steer-first 语义返回结构化 activity,并投影 canonical Collab / SubAgent Item。
|
||||
- MCP Tool surface 改为 sampling-step snapshot,冻结 definition、allowlist、route、connection 与 timeout;资源和提示词读写使用精确 `(server, uri/name)` identity,避免跨连接误命中。
|
||||
- 为 runtime MCP server 增加并发启动与故障隔离:optional server 失败不影响健康连接,required server 失败保持旧 generation 并拒绝不完整 replacement。
|
||||
- Agent Workspace 的 SubAgent 视图全面切到 canonical child Thread family:父子关系、七态运行状态、任务统计、导航和历史恢复统一读取 App Server `thread/list|read`、AgentGraph 与 Thread identity。
|
||||
- Codex 导入的 completed Plan 以原始 Item ID 同时作为 canonical item、revision 和 source identity,重启后仍保持 typed Plan lifecycle,不再退化为工具事件或合成身份。
|
||||
- Codex 导入的 User / Agent Message 现在保留 source identity 与 source ordinal,并写入完整 canonical `item.started` / `item.completed` lifecycle;Turn 终态不再旁路合成消息。
|
||||
- Agent Chat 的 Managed Objective、Skills、Evidence、Tool Inventory、queued turn、execution strategy、stream runtime 与 thread read 消费面迁到各自 current owner,并增加禁止旧 root barrel 与 session roster 回流的边界守卫。
|
||||
|
||||
### 修复
|
||||
|
||||
- 修复 reverse JSON-RPC 的连接归属、boot-scoped request ID、abort cleanup、at-most-once response 与 resolved tombstone,重复、迟到、断连或未知响应继续 fail closed。
|
||||
- 修复 MCP elicitation 的 active-time timeout、响应 `_meta`、表单 schema/number/enum 语义与取消竞态,用户等待时间不再计入服务端执行超时。
|
||||
- 修复 Claw 首字与长工具循环稳定性:首轮响应策略统一归 App Server,移除 Renderer 快速路由双轨,并在已有联网证据后进入真实模型总结阶段。
|
||||
- 修复 Claw 中断会话从“新建任务”首页重新进入同一会话时的导航去重,显式用户意图现在可以恢复 current read model、输入框与后续发送,不再被 stale draft pause 拦截。
|
||||
- 修复媒体 provider/model 选择的原子持久化,以及侧边栏、归档会话、Automation、Skills 和 Plugin history 对旧 Agent runtime barrel 的依赖。
|
||||
- 修复 approval session-cache、canonical Thread identity、active/queued Turn、终态历史与输入恢复之间的投影偏差,避免生成重复 pending 项或回退旧 read model。
|
||||
- 修复 canonical timeline 在 live/history reasoning、Message 与 Plan 混排时的稳定顺序,统一使用 Item ordinal,并补齐 EventLog 到 canonical Thread 的历史修复路径。
|
||||
- 修复 SubAgent parent identity、child roster 与 terminal 状态在冷启动、分页读取和无 child 场景下的可见性,避免 Workspace 回退 legacy session detail。
|
||||
- 修复 Plugin runtime start/get/cancel、capability dispatcher 与 host bridge 测试夹具缺少 canonical `threadId` 的错误语义。
|
||||
- 修复定向 Vitest 与 batch 列表命令覆盖默认 resume state 的问题,局部诊断不再污染后续续跑事实源。
|
||||
|
||||
### 优化与重构
|
||||
|
||||
- MCP management control plane 与 provider tool bridge 分离;canonical Tool Item 成为 history、compaction、coding、Skills、MCP、browser 与 artifact evidence 的唯一消费合同。
|
||||
- 删除旧 Agent session store、subagent sidecar、aggregate runtime、session query、execution strategy compat、backend event stream 和默认 Playwright MCP seed,并补回流守卫。
|
||||
- Agent Chat、Automation、Skills、归档会话、Sidebar 与 Plugin history 迁到各自 current owner,继续收缩旧兼容 barrel、快速响应 helper 和 pending shell 双轨。
|
||||
- Multi-Agent canonical activity 收敛为 `Started` / `Interacted` / `Interrupted` 三类;`list_agents` 保持普通 Tool,旧 V1 resume / close 与历史 activity taxonomy 不再进入 current producer。
|
||||
- 拆分 App Server event store、projection materializer、Agent runtime 与 GUI 大文件,保持领域 owner 和单一事实源边界。
|
||||
- 物理删除 Renderer Team formation、Team runtime sidecar、raw SubAgent channel/status parser、legacy roster DTO/state/normalizer、memory shadow 与 synthetic worker notification;历史兼容只保留只读解码所需边界。
|
||||
- canonical SubAgent activity 收敛到 `Started`、`Interacted`、`Interrupted`,current 六工具名称、lineage 和 GUI 状态保持端到端一致,旧 V1 alias 不再计入 current capability。
|
||||
- 拆分 App Server runtime value helpers、image command event projection 与 RuntimeBackend execution adapter,收紧文件行数和 owner guard,不引入 facade 双轨。
|
||||
- 更新 Agent Workspace、AgentUI、Project Thread 与 SubAgent roadmap,使 current 文档只引用 canonical Thread family、AgentGraph 和 AgentUI projection。
|
||||
|
||||
### 测试与质量
|
||||
|
||||
- 扩展 App Server protocol/schema、Rust/TypeScript client、Electron host 与 Renderer contract,覆盖 server-originated request、resolved notification、MCP target identity 和 elicitation form。
|
||||
- 新增 Agent graph/mailbox/control、restart-on-demand、terminal Result、concurrent wait、MCP router/timeout/fault isolation、canonical projection、first-token flow control 与 atomic media preference 的定向回归。
|
||||
- 补充真实 Electron Gate B、Claw 中断后重入与继续会话、current fixture、协议守卫和 S1-S6 删除证据,验证生产 bridge 不回退 mock。
|
||||
- 用户可见的 MCP elicitation 文案与 GUI 回归覆盖 `zh-CN`、`zh-TW`、`en-US`、`ja-JP`、`ko-KR`。
|
||||
- 扩展 Rust/TypeScript canonical Message、Plan、SubAgent、child Thread、session read 与 export metrics 回归,并同步 App Server schema、generated client 与 Electron contract fixtures。
|
||||
- 增加 Agent runtime current owner、legacy surface、roadmap、Electron IPC ordering、App Server 文件边界和 production source 的静态守卫。
|
||||
- 补充真实 Electron GUI smoke、history fixture、Claw cancel/continue、canonical roster 与 Inputbar/Task Rail 恢复证据;五语言 Agent Workspace 文案与稳定回归保持同步。
|
||||
- history replay Electron oracle 等待 Reasoning summary、图片附件与 MCP tool row 的完整 DOM 后再断言,消除瞬态“思考中”节点导致的 E2E 竞态误报。
|
||||
- 改进 smart Vitest 的 targeted state isolation,支持在大候选集上定向修复后继续 resume,而不重置已完成批次。
|
||||
|
||||
### 文档
|
||||
|
||||
- 更新架构、命令与 MCP 文档,明确 reverse JSON-RPC、MCP runtime/control-plane owner、Agent graph/mailbox、首轮响应策略和 canonical projection 边界。
|
||||
- 更新 refactor v2 执行计划与逐切片 evidence,记录 current / compat / deprecated / dead 分类、验证结果和删除退出条件。
|
||||
- 更新 Refactor V2 中央执行计划、架构确认与逐切片 evidence,记录 canonical child Thread、Agent Chat current owner、App Server 模块 owner 和删除退出条件。
|
||||
- 同步 Agent Workspace、AgentUI、Project Thread、Skills 与 SubAgent roadmap,移除把 legacy session roster 或 Team sidecar 描述为 current 的口径。
|
||||
|
||||
### 其他
|
||||
|
||||
- 版本事实源更新到 `1.102.0`:根应用、CLI npm package、Rust workspace、`lime-rs/Cargo.lock` 和 release notes。
|
||||
- 版本事实源更新到 `1.103.0`:根应用、CLI npm package、Rust workspace、`lime-rs/Cargo.lock` 和 release notes。
|
||||
|
||||
**完整变更**: `v1.101.0` -> `v1.102.0`
|
||||
**完整变更**: `v1.102.0` -> `v1.103.0`
|
||||
|
||||
+117
-17
@@ -34,11 +34,14 @@ const {
|
||||
let systemProxyRules = "DIRECT";
|
||||
const resolveProxyMock = vi.fn(async () => systemProxyRules);
|
||||
let releaseDelayedStaleError: (() => void) | null = null;
|
||||
let turnIdentityReadAttempts = 0;
|
||||
let turnStartRequestMode:
|
||||
| "resolve"
|
||||
| "hang"
|
||||
| "hang-non-admission"
|
||||
| "hang-non-admission-read-invalid"
|
||||
| "hang-mismatched-admission"
|
||||
| "hang-non-admission-read-eventual"
|
||||
| "hang-request"
|
||||
| "throw-stale-once"
|
||||
| "throw-exited-before-next-message"
|
||||
@@ -81,16 +84,23 @@ const {
|
||||
recordedRequests.push(request);
|
||||
const hasCanonicalIdentity =
|
||||
turnStartRequestMode !== "hang-non-admission" &&
|
||||
turnStartRequestMode !== "hang-non-admission-read-invalid";
|
||||
turnStartRequestMode !== "hang-non-admission-read-invalid" &&
|
||||
turnStartRequestMode !== "hang-non-admission-read-eventual";
|
||||
const isMismatchedAdmission =
|
||||
turnStartRequestMode === "hang-mismatched-admission";
|
||||
const notification = {
|
||||
method: "agentSession/event",
|
||||
params: {
|
||||
event: {
|
||||
eventId: `evt-${request.id}`,
|
||||
sequence: 1,
|
||||
sessionId: "session-b",
|
||||
...(hasCanonicalIdentity ? { threadId: "thread-b" } : {}),
|
||||
turnId: "turn-b",
|
||||
sessionId: isMismatchedAdmission ? "session-old" : "session-b",
|
||||
...(hasCanonicalIdentity
|
||||
? {
|
||||
threadId: isMismatchedAdmission ? "thread-old" : "thread-b",
|
||||
}
|
||||
: {}),
|
||||
turnId: isMismatchedAdmission ? "turn-old" : "turn-b",
|
||||
type: "message.created",
|
||||
timestamp: "2026-06-06T00:00:00.000Z",
|
||||
payload: {},
|
||||
@@ -102,7 +112,9 @@ const {
|
||||
if (
|
||||
turnStartRequestMode === "hang" ||
|
||||
turnStartRequestMode === "hang-non-admission" ||
|
||||
turnStartRequestMode === "hang-non-admission-read-invalid"
|
||||
turnStartRequestMode === "hang-non-admission-read-invalid" ||
|
||||
turnStartRequestMode === "hang-mismatched-admission" ||
|
||||
turnStartRequestMode === "hang-non-admission-read-eventual"
|
||||
) {
|
||||
return {
|
||||
id: request.id,
|
||||
@@ -189,27 +201,37 @@ const {
|
||||
if (
|
||||
request.method === "agentSession/read" &&
|
||||
(turnStartRequestMode === "hang-non-admission" ||
|
||||
turnStartRequestMode === "hang-non-admission-read-invalid")
|
||||
turnStartRequestMode === "hang-non-admission-read-invalid" ||
|
||||
turnStartRequestMode === "hang-mismatched-admission" ||
|
||||
turnStartRequestMode === "hang-non-admission-read-eventual")
|
||||
) {
|
||||
const invalidIdentity =
|
||||
turnStartRequestMode === "hang-non-admission-read-invalid";
|
||||
const eventualIdentity =
|
||||
turnStartRequestMode === "hang-non-admission-read-eventual";
|
||||
const shouldReturnEventualInvalid =
|
||||
eventualIdentity && turnIdentityReadAttempts++ === 0;
|
||||
return {
|
||||
result: {
|
||||
session: {
|
||||
sessionId: "session-b",
|
||||
threadId: invalidIdentity ? "" : "thread-b",
|
||||
threadId:
|
||||
invalidIdentity || shouldReturnEventualInvalid
|
||||
? ""
|
||||
: "thread-b",
|
||||
updatedAt: "2026-06-06T00:00:00.000Z",
|
||||
},
|
||||
turns: invalidIdentity
|
||||
? []
|
||||
: [
|
||||
{
|
||||
turnId: "turn-b",
|
||||
sessionId: "session-b",
|
||||
threadId: "thread-b",
|
||||
startedAt: "2026-06-06T00:00:00.000Z",
|
||||
},
|
||||
],
|
||||
turns:
|
||||
invalidIdentity || shouldReturnEventualInvalid
|
||||
? []
|
||||
: [
|
||||
{
|
||||
turnId: "turn-b",
|
||||
sessionId: "session-b",
|
||||
threadId: "thread-b",
|
||||
startedAt: "2026-06-06T00:00:00.000Z",
|
||||
},
|
||||
],
|
||||
},
|
||||
messages: [],
|
||||
};
|
||||
@@ -331,6 +353,7 @@ const {
|
||||
lifecycleOptions.length = 0;
|
||||
mirroredNotifications.length = 0;
|
||||
delayedStaleErrorReadyResolvers.length = 0;
|
||||
turnIdentityReadAttempts = 0;
|
||||
systemProxyRules = "DIRECT";
|
||||
resolveProxyMock.mockClear();
|
||||
releaseDelayedStaleError = null;
|
||||
@@ -351,6 +374,8 @@ const {
|
||||
| "hang"
|
||||
| "hang-non-admission"
|
||||
| "hang-non-admission-read-invalid"
|
||||
| "hang-mismatched-admission"
|
||||
| "hang-non-admission-read-eventual"
|
||||
| "hang-request"
|
||||
| "throw-stale-once"
|
||||
| "throw-exited-before-next-message"
|
||||
@@ -1015,6 +1040,81 @@ describe("ElectronAppServerHost", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("首条 streaming 通知属于旧 turn 时应丢弃该通知身份并读取 requested canonical turn", async () => {
|
||||
const { ElectronAppServerHost } = await import("./appServerHost");
|
||||
setTurnStartRequestMode("hang-mismatched-admission");
|
||||
const host = new ElectronAppServerHost();
|
||||
|
||||
const result = await host.handleJsonLines({
|
||||
lines: [
|
||||
encodeMessage({
|
||||
id: 1,
|
||||
method: "agentSession/turn/start",
|
||||
params: {
|
||||
sessionId: "session-b",
|
||||
turnId: "turn-b",
|
||||
input: { text: "忽略旧回合通知" },
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
expect(result.lines.map(decodeMessage)).toMatchObject([
|
||||
{
|
||||
id: 1,
|
||||
result: {
|
||||
turn: {
|
||||
sessionId: "session-b",
|
||||
threadId: "thread-b",
|
||||
turnId: "turn-b",
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
expect(recordedRequests.map((request) => request.method)).toEqual([
|
||||
"agentSession/turn/start",
|
||||
"agentSession/read",
|
||||
]);
|
||||
});
|
||||
|
||||
it("canonical Turn read model 稍晚落盘时应在有界窗口内重读而不是误报 identity 缺失", async () => {
|
||||
const { ElectronAppServerHost } = await import("./appServerHost");
|
||||
setTurnStartRequestMode("hang-non-admission-read-eventual");
|
||||
const host = new ElectronAppServerHost();
|
||||
|
||||
const result = await host.handleJsonLines({
|
||||
lines: [
|
||||
encodeMessage({
|
||||
id: 1,
|
||||
method: "agentSession/turn/start",
|
||||
params: {
|
||||
sessionId: "session-b",
|
||||
turnId: "turn-b",
|
||||
input: { text: "等待 canonical Turn 落盘" },
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
expect(result.lines.map(decodeMessage)).toMatchObject([
|
||||
{
|
||||
id: 1,
|
||||
result: {
|
||||
turn: {
|
||||
sessionId: "session-b",
|
||||
threadId: "thread-b",
|
||||
turnId: "turn-b",
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
expect(recordedRequests.map((request) => request.method)).toEqual([
|
||||
"agentSession/turn/start",
|
||||
"agentSession/read",
|
||||
"agentSession/read",
|
||||
]);
|
||||
});
|
||||
|
||||
it("App Server 未返回精确 canonical turn 时应拒绝伪造回合身份", async () => {
|
||||
const { ElectronAppServerHost } = await import("./appServerHost");
|
||||
setTurnStartRequestMode("hang-non-admission-read-invalid");
|
||||
|
||||
+67
-16
@@ -45,6 +45,8 @@ const APP_SERVER_PROJECT_SHELL_DRAIN_EVENTS_TIMEOUT_MS = 3_000;
|
||||
const APP_SERVER_CONVERSATION_IMPORT_THREAD_COMMIT_TIMEOUT_MS = 180_000;
|
||||
const APP_SERVER_REQUEST_TIMEOUT_OVERRIDE_CEILING_MS = 600_000;
|
||||
const APP_SERVER_STREAMING_TURN_ACK_GRACE_MS = 250;
|
||||
const APP_SERVER_STREAMING_TURN_IDENTITY_READ_TIMEOUT_MS = 2_000;
|
||||
const APP_SERVER_STREAMING_TURN_IDENTITY_READ_RETRY_MS = 25;
|
||||
const APP_SERVER_PROXY_REQUEST_ID_PREFIX = "electron-host";
|
||||
const APP_SERVER_CANCEL_REQUEST_METHOD = "$/cancelRequest";
|
||||
const APP_SERVER_DATA_DIR_NAME = "app-server";
|
||||
@@ -359,12 +361,12 @@ export class ElectronAppServerHost {
|
||||
return messages;
|
||||
}
|
||||
const identity = turnEventIdentity(result.messages[0]);
|
||||
const acceptedIdentity =
|
||||
identity && turnIdentityMatchesStart(identity, originalMessage)
|
||||
? identity
|
||||
: await this.#readCanonicalTurnIdentity(connected, originalMessage);
|
||||
return [
|
||||
streamingTurnStartAcceptedResponse(
|
||||
originalMessage,
|
||||
identity ??
|
||||
(await this.#readCanonicalTurnIdentity(connected, originalMessage)),
|
||||
),
|
||||
streamingTurnStartAcceptedResponse(originalMessage, acceptedIdentity),
|
||||
];
|
||||
} catch (error) {
|
||||
if (!isAppServerRequestTimeoutError(error)) {
|
||||
@@ -390,19 +392,55 @@ export class ElectronAppServerHost {
|
||||
"app-server turn/start timed out before a canonical turn identity event",
|
||||
);
|
||||
}
|
||||
const read = await this.#requestAppServer<AgentSessionReadResponse>(
|
||||
connected,
|
||||
connected.connection.client.readSession({ sessionId }),
|
||||
"agentSession/read",
|
||||
{ timeoutMs: DEFAULT_APP_SERVER_REQUEST_TIMEOUT_MS },
|
||||
);
|
||||
const identity = turnIdentityFromSessionRead(read.result, sessionId, turnId);
|
||||
if (!identity) {
|
||||
throw new Error(
|
||||
"app-server turn/start did not resolve a canonical turn identity",
|
||||
|
||||
const startedAt = Date.now();
|
||||
for (;;) {
|
||||
const elapsedMs = Date.now() - startedAt;
|
||||
const remainingMs =
|
||||
APP_SERVER_STREAMING_TURN_IDENTITY_READ_TIMEOUT_MS - elapsedMs;
|
||||
if (remainingMs <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
const read = await this.#requestAppServer<AgentSessionReadResponse>(
|
||||
connected,
|
||||
connected.connection.client.readSession({ sessionId }),
|
||||
"agentSession/read",
|
||||
{
|
||||
timeoutMs: Math.min(
|
||||
DEFAULT_APP_SERVER_REQUEST_TIMEOUT_MS,
|
||||
remainingMs,
|
||||
),
|
||||
},
|
||||
);
|
||||
const identity = turnIdentityFromSessionRead(
|
||||
read.result,
|
||||
sessionId,
|
||||
turnId,
|
||||
);
|
||||
if (identity) {
|
||||
return identity;
|
||||
}
|
||||
|
||||
const retryDelayMs = Math.min(
|
||||
APP_SERVER_STREAMING_TURN_IDENTITY_READ_RETRY_MS,
|
||||
Math.max(
|
||||
0,
|
||||
APP_SERVER_STREAMING_TURN_IDENTITY_READ_TIMEOUT_MS -
|
||||
(Date.now() - startedAt),
|
||||
),
|
||||
);
|
||||
if (retryDelayMs <= 0) {
|
||||
break;
|
||||
}
|
||||
await new Promise<void>((resolve) => {
|
||||
setTimeout(resolve, retryDelayMs);
|
||||
});
|
||||
}
|
||||
return identity;
|
||||
|
||||
throw new Error(
|
||||
"app-server turn/start did not resolve a canonical turn identity",
|
||||
);
|
||||
}
|
||||
|
||||
async #withActiveProxyRequest<T>(
|
||||
@@ -680,6 +718,19 @@ function turnEventIdentity(
|
||||
return { sessionId, threadId, turnId, timestamp };
|
||||
}
|
||||
|
||||
function turnIdentityMatchesStart(
|
||||
identity: CanonicalTurnIdentity,
|
||||
originalMessage: JsonRpcRequest,
|
||||
): boolean {
|
||||
const params = turnStartParams(originalMessage);
|
||||
const sessionId = nonEmptyString(params?.sessionId);
|
||||
const turnId = nonEmptyString(params?.turnId);
|
||||
return (
|
||||
(!sessionId || identity.sessionId === sessionId) &&
|
||||
(!turnId || identity.turnId === turnId)
|
||||
);
|
||||
}
|
||||
|
||||
function turnIdentityFromSessionRead(
|
||||
response: AgentSessionReadResponse,
|
||||
sessionId: string,
|
||||
|
||||
@@ -206,9 +206,9 @@ describe("electron/ipcChannels", () => {
|
||||
|
||||
it("App Server truth bridge 命令由 Desktop Host 投影,不走原始 JSONL 通道", () => {
|
||||
expect([...ELECTRON_APP_SERVER_TRUTH_BRIDGE_COMMANDS].sort()).toEqual([
|
||||
"get_runtime_provider_selection",
|
||||
"get_default_provider",
|
||||
"get_local_skills_for_app",
|
||||
"get_runtime_provider_selection",
|
||||
"plugin_get_ui_runtime_status",
|
||||
"plugin_runtime_cancel_task",
|
||||
"plugin_runtime_get_task",
|
||||
|
||||
@@ -543,7 +543,6 @@ function sessionReadToLegacy(
|
||||
queued_turns: [],
|
||||
thread_read: threadRead,
|
||||
todo_items: [],
|
||||
child_subagent_sessions: [],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@ src/routing.ts -> routing run.status / decision payload projection helpers
|
||||
src/runtimeFacts.ts -> runtime entity/status/phase/topology 标准事实解释
|
||||
src/summary.ts -> host-neutral summary / surface / lane selectors
|
||||
src/subagents.ts -> AgentUiSubagentsModel 标准模型 selector
|
||||
src/subagentStatusEvents.ts -> subagent_status_changed team / handoff / worker notification projection helpers
|
||||
src/threadItems.ts -> thread item -> AgentUiProjectionEvent builders / action item builders / subagent activity builders / task owner metadata parser
|
||||
src/toolEvents.ts -> tool_start / tool_end / tool_progress / tool delta -> AgentUiProjectionEvent builders
|
||||
src/readModel.ts -> execution events -> read model
|
||||
@@ -160,7 +159,6 @@ src/index.ts -> barrel exports only
|
||||
| `queueProjection.ts` | compat adapter | 只允许把主聊天 `queue_added` / `queue_removed` / `queue_started` / `queue_cleared` 字段映射到标准 `buildAgentUiQueueAddedEvents` / `buildAgentUiQueueLifecycleEvents`;queue.changed 与 task.changed 的 owner/scope/phase/control/runtimeStatus/payload 已由标准 helper 接管 | 周边投影模块改为直接消费标准 queue helper 后删除 |
|
||||
| `routingProjection.ts` | compat adapter | 只允许把主聊天 routing decision / limit state / limit event 字段映射到标准 `buildAgentUiRoutingStatusEvent`;run.status 的 owner/scope/phase/surface/persistence 与 routing / limit payload 已由标准 helper 接管 | 周边投影模块改为直接消费标准 routing helper 后删除 |
|
||||
| `runtimeLifecycleProjection.ts` 中 lifecycle / model / task profile 构建 | compat adapter | 只允许把主聊天 `thread_started` / `turn_started` / `turn_completed` / `turn_failed` / `runtime_status` / `model_change` / `task_profile_resolved` 字段映射到标准 `buildAgentUiThreadStartedEvent` / `buildAgentUiRunStartedEvent` / `buildAgentUiRunFinishedEvent` / `buildAgentUiRunFailedEvent` / `buildAgentUiRuntimeStatusEvent` / `buildAgentUiRuntimeTeamChangedEvent` / `buildAgentUiModelChangeEvent` / `buildAgentUiTaskProfileResolvedEvent` | 周边投影模块改为直接消费标准 lifecycle helper 后删除通用兼容构建 |
|
||||
| `subagentStatusProjection.ts` | compat adapter | 只允许把主聊天 `runtime_status` 字段映射到标准 `buildAgentUiRuntimeTeamChangedEvent`,并把 `subagent_status_changed` 字段映射到标准 `buildAgentUiSubagentStatusChangedEvents`;runtime status 来源 `team.changed` 与 subagent status 来源 team / handoff / transcript / worker notification 复合事件的 owner/scope/phase/surface/persistence/payload 已由标准 helper 接管 | 周边投影模块改为直接消费标准 subagent status helper 后删除 |
|
||||
| `threadItemProjection.ts` 中 thread item 主事件构建 | compat adapter | 只允许把主聊天 `AgentThreadItem` 映射到标准 `buildAgentUiThreadItemEvent` / `buildAgentUiThreadItemBase`,并通过 `extractAgentUiTaskOwnerChangeProjection` 读取 TaskUpdate owner metadata;审批、用户输入、subagent activity、worker notification 和计划审批 metadata 已由标准 helper 接管;旧协作视图附加事件只能作为主聊天 presentation residual 暂留 | 周边投影模块改为直接消费标准 thread item helper 后删除通用兼容构建 |
|
||||
| `toolEventProjection.ts` | compat adapter | 只允许把主聊天 `tool_start` / `tool_end` / `tool_progress` / `tool_output_delta` / `tool_input_delta` 字段映射到标准 `buildAgentUiTool*` helper;tool lifecycle、artifact refs、diagnostic keys 和 plan approval 附加 action 已由标准 helper 接管 | 周边投影模块改为直接消费标准 tool helper 后删除 |
|
||||
| `agentUiEventProjection.ts` 中从主聊天事件构建 `AgentUiProjectionEvent` 的代码 | compat adapter | 仍依赖主聊天 `agentProtocol` 和历史事件形状,是迁移输入适配层;通用 envelope / sequence 规则已迁入标准 projection 包 | host-neutral 构建规则继续分批迁入标准 projection 包或 App Server event adapter 后收缩 |
|
||||
@@ -247,15 +245,14 @@ Electron 只作为 Desktop Host bridge 和 sidecar lifecycle host。新增 runti
|
||||
13. 主聊天 queue projection 必须委托标准 `buildAgentUiQueueAddedEvents` / `buildAgentUiQueueLifecycleEvents`,不得重新实现 `queue.changed` / `task.changed` 的 payload、owner、scope、phase、control、runtimeStatus 或 queued turn 计数规则。
|
||||
14. 主聊天 routing projection 必须委托标准 `buildAgentUiRoutingStatusEvent`,不得重新实现 routing / limit `run.status` 的 payload、owner、scope、phase、surface 或 persistence。
|
||||
15. 主聊天 runtime lifecycle projection 必须委托标准 `buildAgentUiThreadStartedEvent` / `buildAgentUiRunStartedEvent` / `buildAgentUiRunFinishedEvent` / `buildAgentUiRunFailedEvent` / `buildAgentUiRuntimeStatusEvent` / `buildAgentUiRuntimeTeamChangedEvent` / `buildAgentUiModelChangeEvent` / `buildAgentUiTaskProfileResolvedEvent`,不得重新实现 `session.opened` / `run.started` / `run.finished` / `run.failed` / `run.status` / runtime status 来源 `team.changed` / `task.changed` 的 payload、status、phase、model routing、Team runtime metadata / topology 或 task profile 规则。
|
||||
16. 主聊天 subagent status projection 必须委托标准 `buildAgentUiSubagentStatusChangedEvents`,不得重新实现 `subagent_status_changed` 来源 agent / task / team / transcript / spawned / completed / handoff / worker notification 事件的 payload、status、phase、topology、worker usage、transcript ref、handoff status 或 owner / scope / surface / persistence 规则。
|
||||
17. 主聊天 thread item projection 必须委托标准 `buildAgentUiThreadItemEvent` / `buildAgentUiThreadItemBase` / `buildAgentUiThreadItemActionEvent` / `buildAgentUiThreadItemSubagentActivityEvent` / `buildAgentUiThreadItemSubagentWorkerNotificationEvent` / `extractAgentUiTaskOwnerChangeProjection`,不得重新实现 approval request、request user input、subagent activity、worker notification、plan、reasoning、tool、command、web search、artifact、context compaction、turn summary、diagnostics 或 TaskUpdate owner metadata 的通用构造与解析。
|
||||
18. 主聊天 tool event projection 必须委托标准 `buildAgentUiToolStartEvents` / `buildAgentUiToolEndEvents` / `buildAgentUiToolProgressEvent` / `buildAgentUiToolOutputDeltaEvent` / `buildAgentUiToolInputDeltaEvent`,不得重新实现 `tool.started` / `tool.args` / `tool.result` / `tool.failed` / `tool.progress` / tool delta 的 payload、refs、phase、persistence 或 plan approval 附加 action。
|
||||
19. 标准包源码不得重新合并为单文件实现。
|
||||
20. `agent_runtime_*` 不得作为新增 current 能力证据。
|
||||
21. mock fallback 只能在测试夹具中显式使用。
|
||||
22. 文档与路线图不得引导新能力回到旧命令或旧 projection 事实源。
|
||||
23. Plugin Runtime 的标准 projection panel 必须渲染 `AgentUiProjectionView`,证明第二宿主消费同一个 UI 入口。
|
||||
24. `agent-runtime-ui` 的 `index.ts` 必须保持 barrel exports,React primitives 必须按 messages / processTimeline / executionGraph / runtimeFacts / projectionView 等职责拆分。
|
||||
16. 主聊天 thread item projection 必须委托标准 `buildAgentUiThreadItemEvent` / `buildAgentUiThreadItemBase` / `buildAgentUiThreadItemActionEvent` / `buildAgentUiThreadItemSubagentActivityEvent` / `buildAgentUiThreadItemSubagentWorkerNotificationEvent` / `extractAgentUiTaskOwnerChangeProjection`,不得重新实现 approval request、request user input、subagent activity、worker notification、plan、reasoning、tool、command、web search、artifact、context compaction、turn summary、diagnostics 或 TaskUpdate owner metadata 的通用构造与解析。
|
||||
17. 主聊天 tool event projection 必须委托标准 `buildAgentUiToolStartEvents` / `buildAgentUiToolEndEvents` / `buildAgentUiToolProgressEvent` / `buildAgentUiToolOutputDeltaEvent` / `buildAgentUiToolInputDeltaEvent`,不得重新实现 `tool.started` / `tool.args` / `tool.result` / `tool.failed` / `tool.progress` / tool delta 的 payload、refs、phase、persistence 或 plan approval 附加 action。
|
||||
18. 标准包源码不得重新合并为单文件实现。
|
||||
19. `agent_runtime_*` 不得作为新增 current 能力证据。
|
||||
20. mock fallback 只能在测试夹具中显式使用。
|
||||
21. 文档与路线图不得引导新能力回到旧命令或旧 projection 事实源。
|
||||
22. Plugin Runtime 的标准 projection panel 必须渲染 `AgentUiProjectionView`,证明第二宿主消费同一个 UI 入口。
|
||||
23. `agent-runtime-ui` 的 `index.ts` 必须保持 barrel exports,React primitives 必须按 messages / processTimeline / executionGraph / runtimeFacts / projectionView 等职责拆分。
|
||||
25. `agent-ui-contracts` 的 `index.ts` 只能做 barrel exports,events / runtime / projection / messages / timeline / graph 必须按职责拆分。
|
||||
26. 标准 UI 不得恢复旧私有 tree 命名或旧 Plugin `data-agent-run-projection-*` DOM;过程结构以 message parts、process timeline、execution graph 和 runtime facts 为标准 surface。
|
||||
27. `agent-runtime-ui` 用户可见文案必须可由 labels / formatter props 注入;默认 fallback 不得替代宿主五语言 i18n。
|
||||
|
||||
@@ -156,6 +156,8 @@ outer JSON-RPC id 只负责 App Server 到客户端的响应关联,domain toke
|
||||
|
||||
状态模型与 Codex 对齐:Thread 是会话上下文,Turn 是一次执行,Item 是可恢复的输入、输出、工具或审批活动。`ProjectionStore` 和 repository/read model 是 GUI 读取的唯一持久化真相;queue payload、stream buffer 与 renderer cache 不得反向成为事实源。
|
||||
|
||||
Message 与 Plan 也必须遵循 Codex 的 canonical Item lifecycle。用户输入在 `message.created` 时直接形成带 `completed_at_ms` 的 completed UserMessage;assistant 只有出现真实正文时才启动 AgentMessage,并由同一 Item 在 `message.completed` 进入 completed,取消或中断映射为 `Interrupted`。Plan 是独立的 `ThreadItemPayload::Plan`,`plan.delta` 与 `plan.final` 必须按 `(turn_id, revision_id)` 共享稳定 Item identity;delta 只表达流式过程,completed `plan.final` snapshot 是恢复和 GUI 决策绑定的权威内容。Plan 前的纯空白按 Codex `leading_whitespace_by_item` 语义暂存:后续出现正文时随正文发出,Plan-only 输出则丢弃,因此不得创建空白 AgentMessage 或伪造 `message.completed`。历史恢复、live notification 与 read model 必须保留同一 revision identity、Plan steps/status 与 terminal timestamp,禁止用 `update_plan` Tool Item 或 Renderer 本地状态替代。
|
||||
|
||||
canonical 持久化的 current owner 是 App Server `ProjectionStore` 对 `thread_store::ThreadStore` 的直接 SQLite 实现。typed `ThreadHistoryChangeSet`、Thread/Turn/Item 表、sequence collision、rollback/remove、opaque cursor、archive 和 metadata patch 必须在同一事务边界完成;不得增加 `RuntimeStore` 适配层、第二个 transcript 数据库或 renderer 持久化副本。旧 `thread-store::runtime_store`、`session_repository` 与 AgentSession read path 属于待 S2e 迁出的 `deprecated` surface。
|
||||
|
||||
session start 返回成功前必须先在 ProjectionStore 建立 empty canonical Thread,再把 session 暴露到 RuntimeCore 内存状态;SQLite 失败不得留下 memory-only session。canonical `session_id` 与 `thread_id` 均为唯一 identity,跨 RuntimeCore 重启也不得一对多。显式 session delete 与 import replace 必须先在同一 SQLite 事务删除 canonical/projected 数据,再移除内存状态;GUI、AgentSession adapter 和首事件 lazy create 都不能充当 empty Thread fallback。首事件 ensure 只保留为防御式幂等边界,不再拥有 Thread 创建时点。
|
||||
@@ -220,9 +222,9 @@ MCP form elicitation 的产品表现是主窗口全局 GUI 模态表单,不是
|
||||
|
||||
Multi-Agent parent/child topology、agent identity 与 inter-agent mailbox 是三个 owner。`thread-store::AgentGraphStore` 定义 storage-neutral Open/Closed directional edge,App Server `ProjectionStore` 在 canonical SQLite 中持久化 child-unique parent、状态与稳定 descendants traversal;生产 AgentControl 必须通过该 owner 写 spawn/status/recover,禁止继续扫描 `agent_sessions.extension_data_json` 重建树。`thread-store::{AgentIdentityStore,AgentMailboxStore}` 是同一 root-thread tree 的 durable identity/mailbox owner:identity 以 `thread_id` 与 `(root_thread_id, agent_path)` 双重唯一,`task_name` 只能由 canonical path 末段派生;mailbox 用稳定 `message_id` 幂等 append、冲突 fail-closed、`QueueOnly`/`TriggerTurn` 分流、按 `(created_at_ms,message_id)` FIFO、按 root/recipient 隔离,并只将状态更新为 delivered 保留 audit record。mailbox 不能复用 `RuntimeQueuedTurn` 用户输入队列。S4u 定义 durable storage;S4w 在 `RuntimeCore` 建立唯一内部 consumer:`message_id` 派生 canonical Item ID,`TriggerTurn` 使用确定性 turn ID,`QueueOnly` 仅在下一真实 turn 前注入。canonical Item 必须在 mailbox delivered ack 之前可读;canonical EventLog 仍是事件顺序事实源,因此 EventLog-first 后的 canonical projection 失败保留 mailbox pending,严格校验同一 session 的连续 durable tail 后才重放 canonical Item 并 ack,identity/sequence 不一致一律 fail-closed。不得以临时 map、legacy session metadata 或第二套队列绕过这些 owner。S4v 已在 `RuntimeCore` 建立第一段 current control boundary:仅已加载的 parent session 可创建 child session/thread,成功后才持久化 Open edge;edge 写入失败时必须删除刚创建的 child session/canonical Thread,补偿失败仍显式 fail closed。Closed edge 与 descendants traversal 继续由 `AgentGraphStore` contract 拥有;没有 current consumer 的 RuntimeCore close/read 包装已删除,禁止为测试或未来猜测恢复。S4x 以 `RuntimeCore(session,thread,turn) -> AgentControlGatewayHandle -> ExecutionRequest -> RuntimeBackend -> current provider` 接入六个 current 工具;handle 只在该 turn 有效,provider 仅在 handle 存在时广告并执行 `spawn_agent`、`send_message`、`followup_task`、`wait_agent`、`interrupt_agent`、`list_agents`。S4aa 将 canonical child terminal activity 补入同一 durable owner:completed/failed child Turn 先完成 canonical Turn/Item 持久化,再按 durable direct-parent edge 写一条稳定 ID 的 `Result + QueueOnly` mailbox;interrupted/canceled 不生成 FINAL_ANSWER。canonical apply 前失败与 canonical 成功/mailbox append 前失败均由 parent 的 wait/下一真实 turn 沿 direct-child EventLog 有效前缀恢复,只应用 canonical 缺失 tail,再幂等补 result;恢复不得把 child 插入 RuntimeCore、递归扫描 grandchild 或把 delivered record 降回 pending。`wait_agent` 对调用前已存在和等待中新增的 queued steer 都优先返回 `Wait interrupted by new input`,无 steer 时才消费 mailbox activity,active wait 以有界退避重查 durable terminal recovery;并发 wait 只能有一个消费同一 activity。S4z 已证明新 RuntimeCore hydrate root 时不递归加载 descendants,`send_message` QueueOnly 不加载 child,`followup_task`/`interrupt_agent` 只 hydrate exact target,Closed edge 不可寻址且不 reopen。`RuntimeBackend` 只能 opaque pass-through,不得持有或回调 `RuntimeCore`;全局 agent registry、legacy metadata、第二队列、JSON-RPC/GUI 扩张和 Team/旧 alias 均不得作为该链路 fallback。S4y 已物理删除 `tool-runtime::collab_agent`、旧 Team catalog/prompt/discovery/registry surface,并将工具执行 smoke 迁到六个 V2 名称;这些路径属于 `dead / deleted / forbidden-to-restore`。canonical `CollabAgentToolCall` / SubAgent 历史与展示 payload 仍是独立的 read/projection 边界,不等于可执行旧工具,也不得在本删除切片中混删。JSON-RPC/Renderer 与真实 Electron Multi-Agent canonical SubAgent 产品闭环仍须后续 current slice 完成。
|
||||
|
||||
S4ad 使成功的 targeted AgentControl 操作在普通 Tool lifecycle 之外追加一个 stable canonical `ThreadItemPayload::SubAgent`:spawn 对应 `Started`,send/followup 对应 `Interacted`,interrupt 对应 `Interrupted`,并携带 gateway 已解析的真实 target `ThreadId` 与 agent path。typed projection facts 只能走 `AgentControlGatewayResult -> RuntimeToolExecutionResult -> NormalizedToolOutput` 的内部字段,不能混入 model-visible output/metadata;失败调用、wait 和 list 不得伪造 SubAgent Item。旧 `Spawned/MessageSent/Waiting/Resumed/Completed/Failed/Closed` activity 枚举已直接替换,不保留 V1 双轨;child terminal 完成/失败继续只由 S4aa Result mailbox 表达。
|
||||
S4ac/S4ad/S4ae 固定 AgentControl 的 canonical Item 边界:`wait_agent` 独占一个 `CollabAgentToolCall::Wait` lifecycle;`spawn_agent`、`send_message`、`followup_task`、`interrupt_agent` 继续产生普通 Tool lifecycle,并仅在 gateway 完整成功后紧随 Tool terminal 追加一个 distinct completed SubAgent Item。App Server gateway 只能用 durable identity owner 解析出的真实 `ThreadId` 产生 Started/Interacted/Interrupted fact,输入 target path 不得冒充 ThreadId。fact 只允许经 `RuntimeToolExecutionResult -> NormalizedToolOutput` 的 serde-skipped typed internal field 进入 host emitter,不得写入 model-visible output、structured content 或普通 Tool metadata;失败、started phase、空/多 fact、tool/activity mismatch、wait/list 一律不产生 SubAgent Item。Started/Interacted/Interrupted 是唯一 current activity wire;Spawned/MessageSent/Waiting/Resumed/Completed/Failed/Closed 没有外部数据兼容约束,属于 `dead / forbidden-to-restore`。GUI 只从 canonical ThreadStore cold read 与 live Thread/Turn/Item notification 消费相同 Item identity,activity Item 的 completed 只表示该活动事实已落盘,不得推断 child terminal;child completed/failed 只由 S4aa Result mailbox 与 child thread lifecycle 表达。Renderer 必须本地化三态并禁止 `real:subagent:*` synthetic sidecar、raw enum 文案与 activity worker-result notification。Renderer 也不得按文本长度、正则或 selected Team 在发送前构造本地 formation、虚拟成员、work-board event 或 assistant dispatch preview;开启 SubAgent 只控制 current AgentControl 工具可用性,成员与状态必须等真实 child Thread/Item 后再展示。`team-workspace-runtime` 这类重新订阅 raw subagent status/stream、维护本地 draft/tool/queue map 并再次写 projection store 的第二 runtime 属于 `dead / deleted / forbidden-to-restore`;Workspace 只可从真实 child session/parent context 派生入口可见性,停止操作直接委托 current turn owner。
|
||||
|
||||
S4ac/S4ad 固定 AgentControl 的 canonical Item 边界:`wait_agent` 独占一个 `CollabAgentToolCall::Wait` lifecycle;`spawn_agent`、`send_message`、`followup_task`、`interrupt_agent` 继续产生普通 Tool lifecycle,并仅在 gateway 完整成功后紧随 Tool terminal 追加一个 distinct completed SubAgent Item。App Server gateway 只能用 durable identity owner 解析出的真实 `ThreadId` 产生 Started/Interacted/Interrupted fact,输入 target path 不得冒充 ThreadId。fact 只允许经 `RuntimeToolExecutionResult -> NormalizedToolOutput` 的 serde-skipped typed internal field 进入 host emitter,不得写入 model-visible output、structured content 或普通 Tool metadata;失败、started phase、空/多 fact、tool/activity mismatch、wait/list 一律不产生 SubAgent Item。Started/Interacted/Interrupted 是唯一 current activity 写入值;Spawned/MessageSent/Waiting/Resumed/Completed/Failed/Closed 只为历史 canonical Item decode/re-emit 保留,属于 `deprecated / historical-read-only`。
|
||||
S6k 固定 canonical child roster 的 GUI 读取链:App Server `thread/list` 将 durable AgentGraph 与 AgentIdentity join 为 typed child Thread identity,并通过 `agentState` 暴露 `pendingInit/running/interrupted/completed/errored/shutdown/notFound` 七态;Renderer selector 只能基于这些 typed 字段形成 roster 和计数,`agentState` 缺失时才以 Thread/Turn lifecycle 作 canonical fallback,不得读取 metadata 或 raw Team status event 推断成员状态。Workspace 用 parent SubAgent Item 中的 child ThreadId 补 `notFound`,用 child Thread 自带的 sessionId 导航;只有 roster 未知或 sessionId 缺失时才通过 current `thread/read` 解析。Harness、RuntimeStrip 和子线程导航必须消费同一 roster,不建立第二事件队列或本地成员表。
|
||||
|
||||
Provider history、context compaction 与 evidence/export 也属于 canonical Tool 的生产 consumer:它们只允许从 nested `ThreadItemPayload::{Tool,McpToolCall,CollabAgentToolCall}` 读取 call identity、ItemStatus、arguments、metadata、structured output、output reference 与 MCP server identity。非 lifecycle 的领域 side-channel 可以按显式 allowlist 保留,但 raw `tool.started/result/failed/completed` 不得影响 transcript、摘要、统计、browser evidence 或 artifact 提取,只能存在于入口拒绝守卫、负向测试和历史 evidence。
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Refactor v2 多进程实施计划
|
||||
|
||||
> status: ready-for-parallel-implementation
|
||||
> status: skeleton-and-post-gate-closeout / refinement-backlog-active / not-archive-ready
|
||||
> owner: refactor-v2-coordinator
|
||||
> coordination: required
|
||||
> started: 2026-07-12
|
||||
> execution: active-parallel-implementation
|
||||
> execution: post-skeleton-refinement
|
||||
> source plan: `internal/research/refactor/v2/12-plan/slices.md`
|
||||
> architecture: `internal/research/refactor/v2/04-target/architecture.md`
|
||||
|
||||
@@ -154,6 +154,7 @@ S2 不允许继续以一个模糊的 `materialization/store` 写集施工。下
|
||||
| `S2d` SQLite typed store | `projection_schema.rs`、`projection_store.rs`、`projection_item_events.rs`、`projection_store_tests.rs` | 依赖 S2a/S2b;单 owner 保留现有 collision hardening,并接入 changeset、ordinal、opaque cursor |
|
||||
| `S2e` read-model cutover | `load_context.rs`、`read_model.rs`、`read_model/**` 定向 tests | 依赖 S2d;只消费 typed store,JSON-RPC/schema/client 接线归 S1c |
|
||||
| `S2j-projection-thread-identity` | `projection_store.rs`、`projection_store_tests.rs` | 后续 guard:session 首 event 必须提供 threadId;后续缺失字段只可精确继承既有 session owner;session/turn owner 冲突与 repair replay 冲突必须在同一 SQLite 事务 fail closed。不得修改 Electron Host、schema、MCP runtime 或 protocol。 |
|
||||
| `S2l-canonical-history-repair` | `canonical_thread_store.rs`、`projection_repair.rs`、history Item ordering projection 与定向 tests | EventLog 全量 replay 必须识别并原子替换已存在但 Item 不完整的 canonical history,保留 Thread metadata;Renderer 的 live/history 路径必须统一按 canonical ordinal 排列 Item,再以 mutable sequence 做同 ordinal tie-break。只从正式 Item lifecycle 决定 terminal,禁止从 `turn.completed` 合成 Message completion;不得修改 Electron、protocol 或恢复 projected fallback。 |
|
||||
|
||||
旧 timeline/store 只有在 S2e 与 S1c production consumer 均通过后才能交给 S6 删除;不得提前删除仍有真实 consumer 的 `agent_timeline`、`session_repository` 或 runtime snapshot 路径。
|
||||
|
||||
@@ -205,6 +206,59 @@ aggregate execution runtime 和 direct session query 不是过渡 owner,直接
|
||||
| `S6g-dead-agent-runtime-aggregate` | `agent/src/{lib,session_execution_runtime,session_execution_runtime/runtime_payload}.rs`(aggregate-only 删除)、runtime/catalog guards、S6g evidence | aggregate builder、metadata parser、permission fallback 与专属 DTO 必须离开编译图;保留 `AgentEvent` task/routing/limit/cost DTO 和 App Server read-model projection;不得修改 protocol、Electron、Renderer 或 wire。 |
|
||||
| `S6h-dead-agent-runtime-session-query` | `agent/src/{lib,session_execution_runtime,session_execution_runtime_query}.rs`(query 删除)、agent migration/catalog guards、S6h evidence | direct `agent_sessions` execution runtime query、module、alias/re-export 必须删除;App Server `session_metadata` read model 与 `agent-runtime` generic projection 保持 current,token usage projection 不受影响;不得触碰 App Server runtime、Electron、Renderer 或 protocol。 |
|
||||
|
||||
### 4.5d S6 Renderer fake Team 删除切片
|
||||
|
||||
RuntimeCore AgentControl 与 canonical Thread/Turn/Item 是 Multi-Agent 成员、活动和状态的唯一事实源。
|
||||
Renderer 不得根据 selected Team、输入长度或正则在发送前宣布组队成功,也不得伪造成员、work-board
|
||||
事件或 assistant preview。
|
||||
|
||||
| 子 slice | 精确写集 | 退出条件与禁止交集 |
|
||||
| --- | --- | --- |
|
||||
| `S6i-dead-team-formation-preview` | `useRuntimeTeamFormation`、`teamFormationAgentUiProjection`、send preview helper/state、shell preview flag 与对应正向 tests | fake formation、虚拟成员、`runtime-team-dispatch:*` 消息和 preview layout 输入物理删除;发送直接进入 current Agent runtime,canonical child Thread/Item GUI 保持不变;负向 boundary guard 禁止回流。 |
|
||||
| `S6j-dead-team-runtime-sidecar` | `team-workspace-runtime/**`、`useTeamWorkspaceRuntime`、session/control wrappers、`teamWorkspaceRuntime` 与对应 tests/i18n | 删除 raw status/stream 订阅、本地 live/draft/tool/queue map、restored synthetic facts 和 unavailable control stubs;Workspace 只从真实 child facts 派生标题/可见性并直接委托主输出 stop;canonical reader/projection/timeline/navigation 不得删除。 |
|
||||
| `S6k-canonical-child-roster` | App Server canonical `thread/list`、canonical child selector/hook、Harness/Workspace roster wiring 与 focused tests | 成员和状态只读 canonical child Thread/lifecycle,保留 threadId/sessionId;不得恢复 raw Team sidecar、mock 或旧 roster owner。与 S6l 并行时拥有 `AgentChatWorkspace` roster wiring。 |
|
||||
| `S6l-thread-first-subagent-navigation-guards` | current `thread/read` session identity helper、Workspace navigation hook、project-thread/dead/i18n/scenario guards 与 current docs | canonical activity 的 child ThreadId 必须解析真实 sessionId 后导航,真实 roster sessionId 直接进入 session view;修复 S6j 漏跑 ENOENT guard,补 sidecar 回流 monitor,不触碰 raw status API/roster DTO 删除。 |
|
||||
| `S6m-raw-subagent-channel-retirement` | raw status sync effect、runtime adapter alias、status/stream event API、DevBridge truth prefixes、stale fixture 与 dead-channel guard | `agent_subagent_status:*` / `agent_subagent_stream:*` 无 producer/consumer,必须从生产订阅、API 与 mock policy 删除;generic `agentSession/event` transport、canonical read refresh 和 child roster 保持 current。 |
|
||||
| `S6n1-raw-subagent-status-parser-retirement` | Renderer raw status parser、Agent UI dispatcher、正向 parser/projector tests 与负向 fail-closed guard | `subagent_status_changed` 不再进入 Renderer typed event 或 Agent UI projection;canonical SubAgent Item、runtime status team projection 与 generic historical EventLog read 不变。本切片不冒充 raw type/package/fixture 已物理删除。 |
|
||||
| `S6n-raw-subagent-type-package-fixture-retirement` | raw status TS type/local projector、projection package helper/barrel/runtime facts、summary/i18n/fixture 正向口径、docs 与回流守卫 | raw status 类型、独立 local/package projector、fixture producer、summary/i18n 和正向文档全部物理删除;`runtime_status -> team.changed`、canonical SubAgent Item、thread/list child lifecycle 与 generic EventLog/hydration 保持 current。legacy roster DTO 不混删。 |
|
||||
| `S6o-legacy-subagent-roster-dto-retirement` | team-memory shadow legacy child/sibling metadata、selected-team memory runtime wiring 与 focused guards | 删除无 current consumer 的 `team.subagents` / `team.parent_context` shadow entries、legacy roster DTO 类型依赖与 Workspace memory-runtime 传参;保留 `team.selection` 和 canonical child Thread roster。不得删除 canonical roster/projection/navigation 或恢复 raw status/stream。 |
|
||||
| `S6o-canonical-gui-fallback-retirement` | Harness delegation/status、AgentRuntimeStrip 与 Workspace Harness 的 canonical child roster 接线 | GUI roster surfaces 只消费 `CanonicalChildThreadSummary[]`,删除 legacy list、DTO prop、状态 helper 与 fallback;不改变 canonical child Thread、navigation、session state 或 protocol。 |
|
||||
| `S6p-a-canonical-navigation-and-runtime-strip-fallback-retirement` | `useWorkspaceSubagentNavigationRuntime` legacy known-session 分支、AgentRuntimeStrip legacy roster 统计、对应 fixture、Workspace wiring 与 boundary guard | SubAgent 导航只接受 canonical child ThreadId,命中 roster sessionId 直达,缺失时通过 current `readThreadSessionId` 解析;runtime strip 只消费 canonical child summaries。Harness delegation/status fallback、Task Rail stats、session state 与 legacy DTO 仍留给后续独立切片。 |
|
||||
| `S6q-canonical-task-rail-subtask-stats` | Workspace scene -> Task Rail runtime -> Task Center Toolbar -> Task Rail ViewModel canonical child summaries 与定向 tests | Task Rail 子任务统计只消费 canonical child 七态:pendingInit/running 为 active,completed/shutdown 为 completed,errored/notFound/interrupted 为需处理;删除 Task Rail 的 `childSubagentSessions` 输入。MessageList、Inputbar、Harness 与 session DTO 不混入。 |
|
||||
| `S6r-canonical-inputbar-subtask-stats` | Workspace scene -> landing task card / MessageList / Inputbar runtime status canonical child summaries 与定向 tests | landing、MessageList、Inputbar 子任务统计只消费 canonical child 七态;删除这些 surface 的 `childSubagentSessions` 输入和 projection deferral 搬运字段。session state、normalizer、API fixture、Rust metrics 留给后续 contract 切片。 |
|
||||
| `S6s-legacy-subagent-session-contract-retirement` | React session state plumbing、Renderer session API/normalizer/fixture、canonical parent identity、Rust export active count 与三条窄 claim | 物理删除 child/sibling/parent session roster DTO 与 state;API spread 不得穿透旧 roster;parent visibility 只读 canonical thread family;export `activeSubagentCount` 保持输出契约但只读 canonical AgentGraph/open child status。 |
|
||||
|
||||
### 4.5e S7 post-skeleton gate correction
|
||||
|
||||
S7 skeleton closeout 后继续按 smart Vitest 失败点做窄写集修正。测试只能跟随 current 事实源,
|
||||
不得为了恢复旧断言而把 retired 路径、重复规则文案或旧 package entrypoint 写回生产和文档。
|
||||
|
||||
| 子 slice | 精确写集 | 退出条件与禁止交集 |
|
||||
| --- | --- | --- |
|
||||
| `S7a-electron-ipc-contract-ordering` | `electron/ipcChannels.test.ts` 的 truth-bridge exact-set expectation | 只把已排序的期望数组改为确定性字典序;生产 command catalog、preload、host、App Server、catalog/mock 均不变。focused 与 smart batch 9 必须通过。 |
|
||||
| `S7b-current-electron-guard-alignment` | `scripts/electron/current-entrypoints.test.mjs`、`scripts/electron/current-rules-guard.test.mjs` | renderer alias 断言跟随 current `browser.ts`;根规则只断言仓库级 owner,retired 细节只在 internal/roadmap guard 检查;质量断言绑定 Gate A/B、GUI smoke 与 no-mock 语义。不得修改生产 Vite、AGENTS、aiprompts 或 skill。 |
|
||||
| `S7c-app-server-runtime-guard-currentization` | `src/lib/governance/appServerRuntimeBoundary.testSupport.ts`、`src/lib/governance/appServerRuntimeBoundary.test.ts`、`internal/roadmap/appserver/app-server-agent-runtime-boundary-governance.md` | 修正 `lime_agent::`/`CollabAgentState`/registry wrapper 误报,排除 test-only;正向断言 current `stream_current_provider_turn`、`session_configuration`、`workspace_patch_host`、`tool-runtime` owner。不得放宽真实 boundary,不得触碰 active Rust 实现。 |
|
||||
| `S7d-image-command-events-split` | `lime-rs/crates/app-server/src/runtime_backend/image_command/mod.rs`、新增 `image_command/events.rs`、模块 tests/exports | 将 262-908 行 canonical image/tool/turn event projection 抽到 current `events` owner,`mod.rs` 保持 <=800 行 workflow facade;不改协议、provider、GUI 或 S2l 文件。 |
|
||||
| `S7e-runtime-value-fields-split` | `lime-rs/crates/app-server/src/runtime.rs`、新增 `runtime/value_fields.rs`、module/tests/exports | 将 runtime.rs 652-738 的 id/JSON/timestamp helpers 抽到 current `value_fields` owner,runtime facade 保持 <=720 行;不触碰 canonical history/store/projection 或 S2l 写集。 |
|
||||
| `S7f-runtime-backend-execution-trait-split` | `runtime_backend.rs`、新增 `runtime_backend/execution_backend.rs` 与边界/contract guards | ExecutionBackend trait 适配整体迁入 current 子模块,root facade <=480 行;不改变 turn/message lifecycle、协议或 provider 行为。 |
|
||||
| `S7h-batch40-current-fixture-alignment` | `agentProtocol.test.ts`、`agentRuntimeEvents.test.ts` | Approval 只接受 canonical request ID,Thread/Turn/Item lifecycle fixture 只走 canonical envelope;不得恢复 raw dual-ID、synthetic terminal/tool fan-out。 |
|
||||
| `S7i-plugin-runtime-thread-fixture-alignment` | `pluginRuntime.test.ts` | Plugin task start/get/cancel fixture 保留 canonical threadId;不得恢复 session-only task lookup。 |
|
||||
| `S7j-plugin-capability-thread-fixture-alignment` | Plugin capability dispatcher test fixture | Capability Host fixture 的 start/cancel 使用同一 canonical threadId;不改 production host。 |
|
||||
| `S7k-client-factory-session-read-owner-alignment` | `clientFactory.test.ts` | standard client 只注入 turn lifecycle,session read 仍由 App Server session owner 承接;不得路由到错误的 `readThread` mock。 |
|
||||
| `S7l-plugin-host-bridge-thread-fixture-alignment` | Plugin Runtime Page Host Bridge fixture/test | task refresh 改读 canonical `thread/read(full)`;不得恢复 session-only refresh。 |
|
||||
| `S7m-image-workbench-boundary-guard-alignment` | Image Workbench boundary guard | 守卫对齐 `Workspace -> SendSurface -> ImageRuntime` current 组合链;不改 GUI 行为。 |
|
||||
| `S7n-agent-chat-current-api-fixture-alignment` | `index.testFixtures.tsx` | Skills fixture 走 execution current API,工具库存 mock 绑定 inventoryClient;不得扩展 compat root barrel。 |
|
||||
| `S7o-live-reasoning-unsequenced-tool-order` | historical reasoning content sync 与 unit tests | 历史切片曾让无 position Tool 的到达顺序参与 production reasoning 排序;S7x 冷审确认该输入不可能通过 current canonical reader,现已 superseded,不能作为 current 规则或正向 fixture。 |
|
||||
| `S7p-stream-binding-canonical-lifecycle-fixture-alignment` | stream binding / tail recovery tests | 正向 fixture 全部补 canonical Item/Turn envelope,production raw lifecycle 继续 fail closed。 |
|
||||
| `S7q-runtime-sync-canonical-turn-fixture` | runtime sync effects terminal fixture | completed Turn 通过 canonical `turn/updated` 触发 deferred reconcile;不清 mock、不改 production fallback。 |
|
||||
| `S7r-canonical-tool-order-fixture-alignment` | runtime handler integration fixture | WebSearch -> Reasoning -> WebFetch 顺序来自 canonical Tool/Reasoning Item sequence,不恢复 raw tool start/end。 |
|
||||
| `S7s-streaming-renderer-checkpoint-mock-owner` | StreamingRenderer test mock | checkpoint restore mock 绑定 current threadClient owner;不恢复 agentRuntime root compat mock。 |
|
||||
| `S7t-vitest-smart-targeted-state-isolation` | smart runner 与 runner unit tests | `--only-batch` / `--list-batches` 不写 resume state;该 runner slice 从冲突的旧 S7i 治理编号迁入 S7t,旧 claim 保留为 superseded evidence。 |
|
||||
| `S7u-image-title-current-owner-fixture` | Image Workbench action shared test fixture | 标题生成 mock 绑定 current agentClient;不改 production local fallback。 |
|
||||
| `S7v-inputbar-objective-current-owner-fixture` | `Inputbar/index.test.tsx` | objective persistence mock 绑定 current objectiveClient;plan/goal metadata 与 production send 保持不变。 |
|
||||
| `S7x-canonical-reasoning-position-only` | `agentStreamReasoningContentSync.ts` 与 unit test | 删除由无 position Tool arrival order 决定 production reasoning 顺序的特判和 sentinel 正向 fixture;只保留 canonical ordinal/sequence、稳定 Item identity 与 reasoning 位于正文前的 GUI 规则。不得回退 S2l ordinal-first、恢复 raw lifecycle 或修改 projector/reader。 |
|
||||
| `S7y-approval-cold-read-typed-response` | `runtime/read_model.rs`、新增 `runtime/read_model/approval.rs`、read model tests、Agent protocol TS source/declaration、timeline Approval view-model/tests | cold read terminal Approval response 输出 canonical `{ decision, decision_scope, reason_code }`,pending 为 null;wire 保持 `approved/approvedForSession/denied/timedOut/abort`,仅 GUI view-model lower 为现有显示值。不得新增 method、IPC、mock、legacy scalar parser或触碰 conversation import/materializer。 |
|
||||
|
||||
### 4.6 S1 canonical live producer 收口
|
||||
|
||||
S1c Renderer sequence gate 已只接受完整 canonical entity,但生产 App Server notification 仍直接包装 raw `AgentEvent`。canonical store 已写入不等于 live notification 已 canonical;不得让 GUI 恢复 ID normalization 或 lifecycle synthesis。
|
||||
@@ -259,7 +313,8 @@ duplicate live event 维持 consumer。
|
||||
| `S4z-agent-control-restart-on-demand` | 跨 RuntimeCore 重启后的 exact-target child hydrate 与 durable control 语义 | 已完成 / focused-and-App-Server-validated:root hydrate 不递归加载 descendants;send_message QueueOnly 不唤醒 child,followup/interrupt 只加载 exact target,Closed edge 不可寻址且不 reopen。App Server check 与 agent_control 12/12 通过;无 BFS registry、第二队列、legacy metadata、JSON-RPC 或 GUI。 |
|
||||
| `S4aa-agent-terminal-mailbox-activity` | canonical child terminal -> direct-parent durable Result mailbox;EventLog crash recovery;steer-first wait | 已完成 / focused-Rust-App-Server-and-GUI-smoke-validated / product-chain-pending:completed/failed 先 canonical 后写 direct-parent QueueOnly Result,interrupted/canceled 不写;Result 作为 assistant canonical Item 并保留 mailbox metadata,completed 长文本不静默截断。两类 EventLog-first crash window、repairable/empty-prefix tail、direct-parent isolation、pre-existing/new steer 优先、deadline final recovery、SQLite CAS 与 RuntimeCore/EventLog single-consume 已固定。graph/mailbox 1+1、canonical graph 8、store/delivery/terminal/EventLog/control 7+6+13+24+12、最终 App Server library check 与通用 GUI smoke 通过;JSON-RPC/Multi-Agent Gate B 未声明完成。 |
|
||||
| `S4ac-wait-agent-canonical-item` | `agent/src/protocol.rs` 与独立 AgentControl projection tests | 已完成 / focused-and-lime-agent-validated:`wait_agent` Started/Completed 直接产同一 canonical `CollabAgentToolCall::Wait` Item,terminal ToolOutput 保真;list/non-AgentControl 继续为 generic Tool。S4aa 已完成并释放 gateway,targeted SubAgent activity 可由 S4ad 用真实 ThreadId 接入。focused 1、protocol 19、current provider 13 与 lime-agent check 通过;无协议/schema/GUI 改动。 |
|
||||
| `S4ad-targeted-subagent-producer` | App Server AgentControl gateway typed fact、tool-runtime internal transport、current provider canonical emitter、SubAgent activity protocol/schema | 已完成实现 / focused-Rust-and-schema-validated / aggregate-gates-running:spawn 成功追加真实 child ThreadId 的 Started;send/followup 成功追加 resolved target ThreadId 的 Interacted;interrupt 成功追加 Interrupted。四工具保留普通 Tool lifecycle,并在成功 terminal 后追加独立稳定 SubAgent Item;typed fact 不进入 model output、structured content 或 Tool metadata,失败/错配/wait/list 不伪造 activity。三新 activity 为 current,七旧值仅历史只读。tool-runtime 5、agent-protocol 1、lime-agent agent_control 5/current provider 14、App Server agent_control 12、schema fixture 1 已通过;contracts/current fixture 待最终记录。 |
|
||||
| `S4ad-targeted-subagent-producer` | App Server AgentControl gateway typed fact、tool-runtime internal transport、current provider canonical emitter、SubAgent activity protocol/schema | 已完成实现 / focused-Rust-and-schema-validated / aggregate-gates-running:spawn 成功追加真实 child ThreadId 的 Started;send/followup 成功追加 resolved target ThreadId 的 Interacted;interrupt 成功追加 Interrupted。四工具保留普通 Tool lifecycle,并在成功 terminal 后追加独立稳定 SubAgent Item;typed fact 不进入 model output、structured content 或 Tool metadata,失败/错配/wait/list 不伪造 activity。三新 activity 为 current;S4ad 临时保留七个 historical wire 的决定已被 S4ae 按 Codex 三值与无兼容前提推翻,七旧值现为 `dead / forbidden-to-restore`。tool-runtime 5、agent-protocol 1、lime-agent agent_control 5/current provider 14、App Server agent_control 12、schema fixture 1 已通过;contracts/current fixture 待最终记录。 |
|
||||
| `S4ae-canonical-subagent-gui` | canonical cold/live SubAgent GUI、activity projection/i18n、synthetic sidecar 删除、三值协议收口 | Gate B AgentControl 修复中:GUI/protocol focused 实现已完成;重启 current Sidecar 后排除旧 binary/SQLite CANTOPEN,真实 `agent-control-tools` 证明 `spawn_agent` 已提交 child Thread/Open edge/identity/mailbox,但同步等待 child `RuntimeCore::start_turn` terminal,且 child 未继承父 turn provider/runtime options,导致父 Tool 卡在 `provider.request.started`。当前窄修复要求 durable commit 后立即返回、后台 child turn 继承有效 provider/runtime request,并以 canonical failed turn 或 pending mailbox 保留失败可观测性;禁止恢复 `real:subagent:*`、activity `worker.notification` 或第二队列。七旧 activity 值仍为 `dead / forbidden-to-restore`。 |
|
||||
| `S4r1-mcp-elicitation-router` | `mcp/src/{elicitation,elicitation_tests,client,manager}.rs` 与 lifecycle/Cargo feature | 已完成:复制并强化 Codex connection-shared request router 与 RMCP form handler;opaque request ID、replacement 后旧 waiter 精确响应、bounded single-consumer、cancel/consumer-drop/`cancel_all` cleanup、typed action/content/schema 校验与 request `_meta` 已通过 focused 13、lime-mcp 128 和 App Server check。capability 仍保持 absent。 |
|
||||
| `S4r2-app-server-reverse-jsonrpc` | `app-server-protocol` serverRequest catalog/schema、App Server broker、TS connection、Electron drain、Renderer event bus/dispatcher | 已完成并经 S4r2b correctness closeout:outer ID 使用 boot UUID + counter,aborted wait remove-on-drop,ambiguous client fail closed,Renderer 对 connection-scoped in-flight/settled id at-most-once。App Server 7、protocol 45+1、package 63、Electron 22、Renderer 6、contracts 290、legacy 0/0/0 与 GUI smoke 证据成立。S4r3 adapter、GUI、五语言、thread-owned runtime connection 和专用 Gate B 仍是后续;MCP elicitation 不产生 canonical Item。 |
|
||||
| `S4r3-mcp-elicitation-adapter` | `app-server/src/{local_data_source,main,lib,mcp_elicitation}.rs` | 已完成 backend/transport foundation:启动期 clone 唯一 manager router,App Server transport lifecycle 并发 pump typed reverse request;R1 token 只留在 adapter task,R2 outer id 只留在 JSON-RPC,运行期不重锁 manager。真实 RMCP duplex 走 R1→R2→R1 已通过,GUI/product blockers 仍保持 capability absent。 |
|
||||
@@ -327,6 +382,16 @@ S5c Gate B 的完整 AgentDebug 证明 `queuedPromotion.start` 本身直到 120
|
||||
| --- | --- | --- |
|
||||
| `S5f-active-stream-queue-intent` | `hooks/agentStreamUserInputSendPreparation{,.test}.ts`、`agentStreamPreparedSendEnv{,.test}.ts`、`agentStreamUserInputSubmission{,.test}.ts`、`agentStreamSubmitExecution{,.test}.ts`、`useAgentStream.ts` prepared-env wiring | queue intent 必须把同会话、带真实 turnId 的 active stream 视为 busy;保留无 turnId stale binding 的既有恢复语义。queued listener 不得覆盖 active binding,accepted 后必须释放 listener 并立即 refresh canonical read model,不创建第二个 active stream或 120 秒 watchdog;复跑同一 Gate B。不得恢复 legacy read truth或 local active turn fallback。 |
|
||||
|
||||
### 4.13a S5 Managed Objective current owner migration
|
||||
|
||||
Managed Objective 的 DTO 已归 `agentRuntime/sessionTypes`,行为已归 `agentRuntime/objectiveClient`;
|
||||
Agent Chat 叶子组件继续从 root `@/lib/api/agentRuntime` compat barrel 导入只会扩大旧入口。
|
||||
本切片只迁 import/mock 并补负向守卫,不改变 Objective 行为、协议、文案或 App Server。
|
||||
|
||||
| 子 slice | 精确写集 | 退出条件与禁止交集 |
|
||||
| --- | --- | --- |
|
||||
| `S5g-managed-objective-current-owner-migration` | Inputbar Objective panel/send、ManagedObjective panel/view/model、`agentStreamSubmitExecution` 的 Objective imports/mocks 与新增 current-boundary guard | ManagedObjective 类型只从 `sessionTypes` 导入,行为只从 `objectiveClient` 导入;测试 mock 同步指向 current owner,禁止本域恢复 root compat barrel。不得触碰 `agentRuntimeAdapter`、`appServerSessionClient`、S2l history/read model、S6o roster 或协议。 |
|
||||
|
||||
### 4.14 S2 canonical active Turn read timing hardening
|
||||
|
||||
Gate B 的首次复现曾在长流期间读到 queued Turn,却没有 active Turn;Rust canonical store
|
||||
@@ -339,6 +404,17 @@ Gate B 的首次复现曾在长流期间读到 queued Turn,却没有 active Tu
|
||||
| --- | --- | --- |
|
||||
| `S2i-canonical-active-turn-read` | `app-server/src/runtime/thread_item_projection/{materializer,typed_tests}.rs`、`app-server/src/runtime/canonical_thread_store_tests.rs`、必要时 `app-server/src/runtime/turn_execution.rs` 的 active admission 相关测试 | 增量 apply/read 覆盖 active admission、provider/message progress、queue.added 并发时序;canonical `thread/read` 必须返回唯一 active Turn,queued promotion 必须能取出 active identity;只允许 current Thread/Turn/Item store,禁止 legacy read/local fallback。若没有可复现 Rust 丢写,Gate B 失败必须归类为 timing/environment evidence 并保留重跑证据。 |
|
||||
|
||||
### 4.14a S2 canonical Message / Plan lifecycle
|
||||
|
||||
聚合 fixture 的 Plan revision identity blocker 暴露出 canonical Message/Plan 终态不完整:user/agent
|
||||
Item 缺少一致 completed lifecycle,Plan delta/final 没有正式 typed Item 与可跨重启恢复的 revision
|
||||
identity,Plan-only 输出还可能创建空白 assistant message。该切片直接按 Codex Item lifecycle 收口,
|
||||
不新增第二 read model、Tool alias 或 Renderer fallback。
|
||||
|
||||
| 子 slice | 精确写集 | 退出条件与禁止交集 |
|
||||
| --- | --- | --- |
|
||||
| `S2k-canonical-message-plan-lifecycle` | `agent-protocol` Plan payload/status、App Server runtime event mapper/parser、canonical materializer/store/read model/notification 与 tests、generated schema/client、Renderer canonical Item reader、Plan history Gate B fixture | `message.created` 形成 completed UserMessage;AgentMessage 仅在真实正文出现后启动,并由同一 Item 在 `message.completed` 终结,取消映射 Interrupted;Plan 是正式 typed Item,delta/final 按 `(turnId, revisionId)` 共用 identity,completed final snapshot authoritative 且跨重启保真。Plan 前空白缓存,Plan-only 不创建空 AgentMessage;read model/GUI reload 保留 revision、steps/status,legacy `update_plan` Item 为 0。禁止新增 compat、第二状态机、mock fallback 或 Renderer lifecycle synthesis。 |
|
||||
|
||||
### 4.15 S4i Skills metadata and policy convergence
|
||||
|
||||
当前 Skills 已有 stable `scope:name` identity、局部 `allowed_tools` 和 session source/capability
|
||||
@@ -456,7 +532,7 @@ S0 -> S1 -> S2 -> S4 --\
|
||||
| S1h-notification-test-correction | ready-for-review / validated | coordinator | `.lime/refactor-v2/claims/S1h-notification-test-correction-coordinator.md` | `20260712T150612Z-S1h-notification-test-correction-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s2g-s1h-canonical-fixture-corrections.md` | notification JSONL 回归先断言 canonical Item,再移除 notification-only 字段比较 durable source payload;定向 JSONL loop 1/1 |
|
||||
| S1f | ready-for-review / handler-validated | s1f-thread-read-protocol -> S2e canonical handler | `.lime/refactor-v2/claims/S1f-thread-read-protocol-s1f-thread-read-protocol.md` + `.lime/refactor-v2/claims/S2e-canonical-read-handler-coordinator.md` | `20260712T120619Z-S1f-thread-read-protocol-s1f-thread-read-protocol.md` + `20260712T123500Z-S2e-canonical-write-read-coordinator.md` + `2026-07-12-s1f-s2e-canonical-thread-read.md` | 四个 canonical Thread read protocol/schema/Rust+TS client、direct ThreadStore handler、shared-read metadata 与 contracts 已在当前树通过 |
|
||||
| S1d | ready-for-review / package-cleanup-complete | runtime-client-a -> runtime-client-cleanup-a | `.lime/refactor-v2/claims/S1d-runtime-client-a.md` + `.lime/refactor-v2/claims/S1e-runtime-client-cleanup-a.md` | `20260712T104756Z-S1d-runtime-client-a.md` + `20260712T110746Z-S1e-runtime-client-cleanup-a.md` | production/package API/tests 已只消费 canonical lifecycle;raw 仅保留验证后的 media non-thread channel;18 tests 与 typecheck 通过,旧 raw mapper/export/tests 和 no-op schema middleware 已删除 |
|
||||
| S2 | ready-for-review / canonical-write-read-complete / empty-thread-validated | coordinator | S2a-S2g claims | S2a-S2g handoffs + `20260712T123500Z-S2e-canonical-write-read-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s2f-empty-thread-create.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s2g-s1h-canonical-fixture-corrections.md` | event-driven typed write/read、empty canonical Thread lifecycle 与 canonical fixture corrections 已验证;Gate B 已越过首个 Turn 前 `thread does not exist` 原 blocker,并到达 GUI/read model completed;S5 consumer cutover 后仍需删除 deprecated AgentSession presentation |
|
||||
| S2 | completed / canonical-write-read-and-message-plan-lifecycle-Gate-B-validated / imported-message-plan-lifecycle-closed | coordinator -> root | S2a-S2n claims | S2a-S2n handoffs + `20260712T123500Z-S2e-canonical-write-read-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s2f-empty-thread-create.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s2g-s1h-canonical-fixture-corrections.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s2-canonical-message-plan-lifecycle.md` + S2m/S2n evidence | event-driven typed write/read、empty canonical Thread、user/agent completed Item 与 typed Plan lifecycle 已验证;Plan delta/final 共享 turn-scoped revision,final snapshot authoritative,restart/GUI history hydrate 保真,Plan-only 不创建空 AgentMessage。Codex imported Plan 与 User/Agent Message 均保持 source identity、canonical lifecycle 和 source ordinal,关闭 S2l related failure。 |
|
||||
| S2a | completed | s2a-store-contract | `.lime/refactor-v2/claims/S2a-store-contract-s2a-store-contract.md` | `20260712T095953Z-S2a-store-contract-s2a-store-contract.md` | async storage-neutral typed ThreadStore、cursor/page/metadata patch 已通过 check 与 45 tests;S2d 必须实现该 trait |
|
||||
| S2b | ready-for-review / workspace-validated | s2b_typed_materializer | `.lime/refactor-v2/claims/S2b-materializer-s2b_typed_materializer.md` | `20260712T101755Z-S2b-materializer-status-correction.md` | typed materializer 已在真实 App Server workspace 通过 thread_item_projection 22 tests |
|
||||
| S2c | ready-for-review | s2c_event_log_repair -> coordinator | `.lime/refactor-v2/claims/S2c-event-log-repair-s2c-event-log-repair.md` + `.lime/refactor-v2/claims/S2c-validation-fix-coordinator.md` | `20260712T104754Z-S2c-event-log-repair-s2c-event-log-repair.md` + `20260712T111200Z-S2c-validation-fix-coordinator.md` | canonical event log 16 tests 与 projection repair 7 tests 全通过;invalid fixture 不再绕过 production append guard |
|
||||
@@ -468,9 +544,13 @@ S0 -> S1 -> S2 -> S4 --\
|
||||
| S2h-canonical-queue-state | completed / focused-and-unified-Gate-B-validated | canonical-queue-state | `.lime/refactor-v2/claims/S2h-canonical-queue-state-canonical-queue-state.md` | `20260712T201546Z-S2h-canonical-queue-state.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` | `queue.added -> InProgress + Queued`、`queue.removed` 按 queuedTurnId 删除、`queue.promoted` 不生成 phantom Turn、`turn.started -> Running`;producer/materializer focused tests 与 S5 queued promotion 统一 Gate B 通过 |
|
||||
| S2i-canonical-active-turn-read | completed / coordinator-validated / Gate-B-3-pass-1-flaky-evidence-closed | coordinator | `.lime/refactor-v2/claims/S2i-canonical-active-turn-read-coordinator.md` | `20260713T055500Z-S2i-canonical-active-turn-read-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s2i-canonical-active-turn-read.md` | 增量 `turn.accepted -> message.delta -> queue.added` canonical read 回归通过;三次 kept Electron Gate B 均在 promotion 前解析唯一 active Turn、收到 cancel,并由 SQLite/event log 证明 active durable;coordinator 复核 Rust 1/1、queue/read TS 32/32、typecheck 与 contracts 290 checks 通过;一次不保留目录的首跑早读失败仅保留为 timing/environment evidence,禁止 GUI fallback |
|
||||
| S2j-projection-thread-identity | completed / focused-validated | coordinator | `.lime/refactor-v2/claims/S2j-projection-thread-identity-coordinator.md` | `internal/research/refactor/v2/13-evidence/2026-07-13-s2j-projection-thread-identity.md` | ProjectionStore 已删除 `threadId = sessionId` fallback;首次缺 identity、后续 explicit conflict、turn 跨 owner reuse 与 repair clear/replay rollback 均 fail closed。`projection_store_tests` 23/23、rustfmt/diff 通过。Electron synthetic admission identity 修复是独立 Host write set;旧 turn first-notification fallback race 已登记给 Host owner。 |
|
||||
| S2k-canonical-message-plan-lifecycle | completed / focused-contract-and-Gate-B-validated | root | `.lime/refactor-v2/claims/S2-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s2-canonical-message-plan-lifecycle.md` | Codex 对齐的 user/agent completed lifecycle、typed Plan、turn-scoped revision identity、authoritative final snapshot、restart/read model/GUI hydrate 与 Plan-only whitespace suppression 已完成。Rust focused、protocol、canonical reader、typecheck、694 types 零漂移、290 client checks 与 Plan history Electron Gate B 通过;完整 `test:contracts` 仅被无关已跟踪 release plan 的 docs ignore 边界阻断。 |
|
||||
| S2l-canonical-history-repair | completed / focused-and-Gate-B-validated / related-import-concern-closed-by-S2m | root | `.lime/refactor-v2/claims/S2l-canonical-history-repair-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s2l-canonical-history-repair.md` + S2l/S2m handoffs | canonical Item 的 live/history 展示统一使用 ordinal;持久化 Reasoning 接管反序临时 thinking 时重新插入正文前。TS 12/12、Rust 8+21、typecheck/lint、history Electron fixture、GUI smoke 与真实 CDP `thinking#6 -> text#314` 通过。原 related 1093/1094 的 completed Plan 唯一失败已由 S2m 关闭,当前 related app-server 1097/1097。 |
|
||||
| S2m-conversation-import-plan-lifecycle | completed / focused-and-related-rust-validated | root | `.lime/refactor-v2/claims/S2m-conversation-import-plan-lifecycle-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s2m-conversation-import-plan-lifecycle.md` + S2m handoff | Codex `item_completed(Plan.id)` 是 completed Plan 的 authoritative Item/revision identity;presentation/canonical read 同为 `item-plan-1`,不再按 turn/event 合成第二 identity。focused 2/2、related app-server 1097/1097、rustfmt/diff 通过。`events.rs` 1002 行,后续业务扩展前必须先拆 specialized event 子模块。 |
|
||||
| S2n-conversation-import-message-lifecycle | completed / focused-related-rust-and-history-Gate-B-validated | root | `.lime/refactor-v2/claims/S2n-conversation-import-message-lifecycle-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s2n-conversation-import-message-lifecycle.md` + S2n handoff | Codex imported User/Agent Message 使用 source call ID / source event sequence 的稳定 identity 与 ordinal,并写入完整 `item.started` / presentation / `item.completed` lifecycle;focused 2/2、shared related app-server 1097/1097、rustfmt/diff 与 history Electron fixture 通过。 |
|
||||
| S3 | production-canonical / retired-mapper-deleted | provider-a -> refactor-v2-coordinator | `.lime/refactor-v2/claims/S3f-provider-request-cutover-coordinator-provider-request-cutover.md` | `20260712T102744Z-S3d-provider-cutover-recovery.md` + `20260712T103500Z-S3e-media-event-cutover.md` + `20260712T105500Z-S3f-provider-request-cutover.md` + `20260712T115000Z-S3f-runtime-core-mapper-delete-validation.md` | provider stream、agent consumer、media RuntimeEvent 和媒体 request lowering 均走 canonical/current;retired runtime-core mapper、正向测试与导出已物理删除并补回流守卫,runtime-core 49、model-provider 118、contract 287 checks 通过 |
|
||||
| S3c | released-blocked-environment | provider-consumer-a | `.lime/refactor-v2/claims/S3c-provider-consumer-a.md` | `20260712T085025Z-S3c-provider-consumer-a.md` | media consumer 已迁移并通过 check;完整 tests 被 ENOSPC 阻塞,provider stream consumer 留给 S3d |
|
||||
| S3d | ready-for-review / app-server-validated | coordinator-s3d-recovery | `.lime/refactor-v2/claims/S3d-provider-cutover-recovery-coordinator-s3d-recovery.md` | `20260712T102744Z-S3d-provider-cutover-recovery.md` + `20260712T112000Z-coordinator-gate-validation.md` | CurrentProviderEvent 投影已删除;model-provider 118、provider_turn 3、lime-agent check 通过,App Server provider_history 3 与 tool_events 23 tests 已复测通过 |
|
||||
| S3c | completed / environment-blocker-resolved-by-S3e-S3f | provider-consumer-a -> coordinator | `.lime/refactor-v2/claims/S3c-provider-consumer-a.md` | S3c handoff + S3e/S3f evidence | media consumer 已迁移;历史 ENOSPC 已由 S3e/S3f 的 media-runtime 50+51、route integration 9+9 与 model-provider 118 tests 关闭,不再是 current blocker。 |
|
||||
| S3d | completed / stale-recovered-and-current-tree-validated | coordinator-s3d-recovery -> root | S3d provider client/cutover/recovery claims | S3d recovery handoffs + active-claim audit handoff | CurrentProviderEvent 投影已删除;既有 model-provider、App Server provider history/tool event 验证保持,fresh current-tree `provider_turn` 10/10 通过并覆盖 reasoning-only 无用户可见输出 fail closed。 |
|
||||
| S4 | canonical-tool-and-approval-restart-ready / S4h-completed / S4i-typed-skills-and-stable-read-ready / S4l-step-snapshot-ready / S4m-output-media-residuals-completed / S4n-dead-stream-surface-deleted / S4o-control-plane-owner-split-completed / S4p-resource-identity-completed / S4q-prompt-identity-completed / S4s-sampling-fail-closed / S4t-edge-store-completed / S4u-durable-mailbox-storage-validated / S4v-runtime-control-boundary-validated / S4w-mailbox-consumer-focused-validated / S4x-agent-control-gateway-focused-validated / S4y-dead-team-surface-deleted / S4z-restart-on-demand-validated / S4aa-terminal-mailbox-recovery-validated / S4ab-v1-projection-alias-dead / S4ac-wait-collab-item-validated / broader-control-plane-pending | coordinator | S4a-S4q + S4s/S4t/S4u/S4v/S4w/S4x/S4y/S4z/S4aa/S4ab/S4ac claims + `.lime/refactor-v2/claims/S4e-approval-restart-production-coordinator.md` | S4a-S4q + S4s/S4t/S4u/S4v/S4w/S4x/S4y/S4z/S4aa/S4ab/S4ac handoffs/evidence + `20260712T192327Z-S4e-approval-restart-production-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4w-agent-mailbox-production-consumer.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4x-agent-control-tool-gateway.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4y-dead-team-tool-surface.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4z-agent-control-restart-on-demand.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4aa-agent-terminal-mailbox-activity.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4ab-legacy-collab-projection-boundary.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4ac-wait-agent-canonical-item.md` | RuntimeTool、canonical Tool Item、provider history/output refs/read model/evidence/media、typed approval/restart、raw lifecycle 删除、typed Skills stable-id read、MCP sampling-step Tool snapshot、独立 GUI live management owner、Resource/Prompt 精确 target、sampling fail-closed、AgentGraphStore edge persistence、durable root-tree identity/mailbox storage、RuntimeCore loaded-parent graph control boundary及 mailbox internal consumer 已收敛。S4x 已将六个 AgentControl 工具通过 per-turn opaque gateway 接入 current provider;S4y 已删除旧 Team/collab_agent 可执行 surface 并补回流守卫;S4z 已证明重启后 root-only hydrate 与 exact-target control;S4aa 已接通 direct-parent terminal result、两类 crash recovery 与 steer-first wait;S4ab 已删除 V1 projection alias;S4ac 已把 wait_agent lifecycle 收敛为 canonical Collab Wait Item。JSON-RPC/GUI 与真实 Multi-Agent Gate B 仍为后续 current slice;targeted SubAgent producer 由 S4ad 继续。 |
|
||||
| S4a-tool-core | ready-for-review / production-consumer-present | tool-core-a -> runtime-tools-production-a | `.lime/refactor-v2/claims/S4a-tool-core-tool-core-a.md` + `.lime/refactor-v2/claims/S4c-tool-production-wiring-runtime-tools-production-a.md` | `20260712T122741Z-S4a-tool-core-tool-core-a.md` + `20260712T131753Z-S4c-tool-production-wiring-runtime-tools-production-a.md` + `20260712T132422Z-S4c-tool-production-wiring-ordering-correction.md` | canonical spec/executor/emitter/output contract 97 tests 通过;S4c 已接入 current provider 生产 caller,旧 AgentEvent/App Server raw mapper 与残余 backend/core stream DTO 已由 S4d-S4n 删除。 |
|
||||
| S4b-display-items | ready-for-review / review-and-governance-corrected | coordinator | `.lime/refactor-v2/claims/S4b-display-items-coordinator.md` | `20260712T124000Z-S4b-review-resolved-without-decision.md` + `20260712T135000Z-S4b-display-items-coordinator.md` + `20260712T141234Z-S4b-display-items-governance-correction.md` | Tool/MCP/Collab/Approval typed display DTO、schema/client 与 25 materializer tests 通过;ask-user resolved-without-decision 为 terminal + decision null + Turn Resolved。MCP server elicitation 是独立瞬时 reverse request,不投影为该表中的 Item;sidecar 字段复用集中 owner,legacy report 边界违规为 0 |
|
||||
@@ -504,19 +584,20 @@ S0 -> S1 -> S2 -> S4 --\
|
||||
| S4z-agent-control-restart-on-demand | completed / focused-and-App-Server-validated / product-chain-pending | root | `.lime/refactor-v2/claims/S4z-agent-control-restart-on-demand-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4z-agent-control-restart-on-demand.md` | 新 RuntimeCore 只 hydrate root;QueueOnly 不加载 child,followup/interrupt 精确 hydrate target,Closed edge 不可寻址且不 reopen,grandchild 不被递归加载。App Server check、agent_control 12/12、rustfmt/diff 通过;JSON-RPC/GUI/Gate B pending。 |
|
||||
| S4aa-agent-terminal-mailbox-activity | completed / focused-Rust-App-Server-and-GUI-smoke-validated / product-chain-pending | root | `.lime/refactor-v2/claims/S4aa-agent-terminal-mailbox-activity-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4aa-agent-terminal-mailbox-activity.md` | direct-parent completed/failed Result、assistant Item/mailbox metadata、两类 EventLog-first crash recovery、repairable/empty-prefix tail、long Unicode、pre-existing/new steer priority、deadline final recovery 与 concurrent wait CAS/dedupe 已完成。focused 1+1+8+7+6+13+24+12、最终 App Server library check 与通用 GUI smoke 通过;聚合 Agent fixture 被独立 Plan revision binding 阻断,JSON-RPC/Multi-Agent Gate B 未运行。 |
|
||||
| S4ac-wait-agent-canonical-item | completed / focused-and-lime-agent-validated / targeted-SubAgent-producer-ready | root | `.lime/refactor-v2/claims/S4ac-wait-agent-canonical-item-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4ac-wait-agent-canonical-item.md` | `wait_agent` canonical lifecycle 复用既有 `CollabAgentToolCall::Wait`,Started/Completed identity/ordinal 与 terminal output 保真;focused 1、protocol 19、current provider 13、lime-agent check、rustfmt/diff 通过。S4aa 已释放 gateway,S4ad 可用真实 target ThreadId 产 SubAgent;list 保持 generic Tool。 |
|
||||
| S4ad-targeted-subagent-producer | implemented / focused-Rust-and-schema-validated / aggregate-gates-running | root | `.lime/refactor-v2/claims/S4ad-targeted-subagent-producer-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4ad-targeted-subagent-producer.md` | gateway 成功结果携带真实 resolved ThreadId 的 typed internal fact;current provider 保留普通 Tool 并追加 distinct completed SubAgent Item。fact 不进入模型或 Tool metadata;失败、错配、wait/list 零 activity。current 三值与 historical 七值共存于 Rust/schema/TS。focused Rust 5+1+5+14+12、schema fixture 1 通过;contracts/current fixture 待最终记录,GUI/Gate B 归 S4ae。 |
|
||||
| S4ad-targeted-subagent-producer | implemented / focused-Rust-and-schema-validated / aggregate-gates-running | root | `.lime/refactor-v2/claims/S4ad-targeted-subagent-producer-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4ad-targeted-subagent-producer.md` | gateway 成功结果携带真实 resolved ThreadId 的 typed internal fact;current provider 保留普通 Tool 并追加 distinct completed SubAgent Item。fact 不进入模型或 Tool metadata;失败、错配、wait/list 零 activity。S4ae 已将临时十值 contract 收口为 Codex 三值;七旧值无兼容约束,禁止恢复。focused Rust 5+1+5+14+12、schema fixture 1 通过;contracts/current fixture 待最终记录,GUI/Gate B 归 S4ae。 |
|
||||
| S4r1-mcp-elicitation-router | completed / coordinator-validated / foundation-only | s4r-router-impl -> coordinator | `.lime/refactor-v2/claims/S4r1-mcp-elicitation-router-s4r-router-impl.md` | `.lime/refactor-v2/handoffs/20260713T122925Z-S4r1-mcp-elicitation-router.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s4r1-mcp-elicitation-router.md` | manager-shared opaque exact router、bounded single consumer、closed token、cancel cleanup、typed form schema validation 与真实 RMCP duplex 已完成;focused 13、lime-mcp 128、两 crate check、rustfmt/diff 通过。capability 保持 absent。 |
|
||||
| S4r2-app-server-reverse-jsonrpc | completed / correctness-closeout-validated / product-chain-pending | coordinator | `.lime/refactor-v2/claims/S4r2-app-server-reverse-jsonrpc-coordinator.md` + `.lime/refactor-v2/claims/S4r2b-reverse-jsonrpc-correctness-coordinator.md` | `.lime/refactor-v2/handoffs/20260713T121706Z-S4r2-app-server-reverse-jsonrpc.md` + `.lime/refactor-v2/handoffs/20260713T123857Z-S4r2b-reverse-jsonrpc-correctness.md` + S4r2/S4r2b evidence | 三类 catalog、transport 与 dispatcher foundation 已完成;boot-scope exact id、abort cleanup、ambiguous-client fail closed 与 settled replay suppression 经 App Server 7/7、Renderer 6/6 复核。专用 Gate B 等待 S4r3 adapter 与 Phase C。 |
|
||||
| S4r8-mcp-runtime-thread-owner | completed / owner-lifecycle-revalidated / Gate-B-blocked | coordinator | `.lime/refactor-v2/claims/S4r8-mcp-runtime-thread-owner-coordinator.md` | `internal/research/refactor/v2/13-evidence/2026-07-13-s4r8-mcp-runtime-thread-owner.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4r8-gate-b-runtime-server-failure.md` | `AgentRuntimeState[sessionId] -> McpThreadRuntime` 创建期绑定 immutable thread 与独立 RMCP generation;management manager 只提供 typed runtime server specs。per-call scope 只留 nullable turn correlation,不重传 session/thread/parent identity;management nested elicitation fail closed。session/turn mismatch、delete exact close、A 取消不影响 B 与 forwarded waiter terminal 顺序已回归。最新真实 Electron Gate B 在 provider sampling 前被默认 Playwright MCP 的 E404 阻断,故不能宣称 GUI 闭环通过;S4r9 必须先完成 per-server fault isolation。 |
|
||||
| S4r9-mcp-runtime-server-fault-isolation | completed / focused-and-Gate-B-validated | root | `.lime/refactor-v2/claims/S4r9-mcp-runtime-server-fault-isolation-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s4r8-gate-b-runtime-server-failure.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s4r9-mcp-runtime-server-fault-isolation.md` | `McpThreadRuntime` 现在并发启动 typed enabled specs;optional failure 被记录并从 snapshot 排除,required failure 只关闭候选 manager、拒绝 replacement 并保留旧 generation。真实保留故障默认 Playwright MCP 的 Electron Gate B 已获得 provider 2 requests、Renderer form accept、resolved close 和 final text;无 legacy command/console error。 |
|
||||
| S4-approval-restart-production | ready-for-review / focused-validated / Gate-B-fixture-blocked | coordinator | `.lime/refactor-v2/claims/S4e-approval-restart-production-coordinator.md` | `20260712T192327Z-S4e-approval-restart-production-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s4-approval-restart-production.md` | RuntimeCore 直接从 StoredSession current event 恢复 type/scope/descriptor;restart reopen、not-resumable、cancel waiter、terminal reason 与 processor error.data 均通过。聚合已越过 home/greeting/workbench/image/cancel 场景,approval external fixture 在 action.required 前因 fixture Provider 鉴权失败;contracts 已随 S5d/S4h 收口恢复通过 |
|
||||
| S5 | ready-for-review / canonical-read-control-Gate-B-passed / compat-consumer-subtraction-active | coordinator | `.lime/refactor-v2/claims/S5-coordinator.md` + `.lime/refactor-v2/claims/S5-agent-runtime-compat-current-owner-migration-root.md` | `20260712T192800Z-S5-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s5-canonical-terminal-gui.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-sidebar-session-compat-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-automation-current-owner-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-skills-evidence-current-owner-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-agent-runtime-compat-current-owner-migration.md` | canonical terminal/Approval history 与 queued-turn canonical read control 已收敛;S5f Gate B 在约 5 秒内完成 `thread/read -> promote -> real cancel -> resume`,不再等待 120 秒 watchdog。Sidebar、automation、skills/evidence、plugin history、legacy summary 与 reliability/file-checkpoint domain 已直连 current owner,root compat barrel consumer 从 228 降至 213;remaining 207 个 Agent Chat consumer 必须继续按域迁移,禁止扩展 compat。Approval resume external fixture blocker 仍归 S4 approval evidence |
|
||||
| S4-approval-restart-production | completed / focused-and-approval-Gate-B-validated | coordinator -> root | `.lime/refactor-v2/claims/S4e-approval-restart-production-coordinator.md` | S4e evidence/handoff + resolved-blocker audit handoff | RuntimeCore 直接从 StoredSession current event 恢复 type/scope/descriptor;restart reopen、not-resumable、cancel waiter、terminal reason 与 processor error.data 均通过。S4h raw fixture 已关闭;真实 Electron 证据覆盖 resume 内 `allow_for_session -> action.resolved`、decline、cancel 与 fresh cancel closeout。Skills Provider 鉴权仍是独立 aggregate residual,不再归为 S4e blocker。 |
|
||||
| S5 | ready-for-review / canonical-read-control-Gate-B-passed / compat-consumer-subtraction-active | coordinator | `.lime/refactor-v2/claims/S5-coordinator.md` + `.lime/refactor-v2/claims/S5-agent-runtime-compat-current-owner-migration-root.md` | `20260712T192800Z-S5-coordinator.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s5-canonical-terminal-gui.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-sidebar-session-compat-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-automation-current-owner-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-skills-evidence-current-owner-migration.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s5-agent-runtime-compat-current-owner-migration.md` | canonical terminal/Approval history 与 queued-turn canonical read control 已收敛;S5f Gate B 在约 5 秒内完成 `thread/read -> promote -> real cancel -> resume`,不再等待 120 秒 watchdog。Sidebar、automation、skills/evidence、plugin history、legacy summary 与 reliability/file-checkpoint domain 已直连 current owner;当前 Agent Chat 仍有 22 个 production consumer file 直连 root compat barrel,必须继续按域迁移,禁止扩展 compat。Approval resume external fixture blocker 仍归 S4 approval evidence。 |
|
||||
| S5a | ready-for-review | gui-s5a-host-capabilities | `.lime/refactor-v2/claims/S5a-host-capabilities-gui-s5a-host-capabilities.md` | `20260712T103640Z-S5a-host-capabilities-gui-s5a-host-capabilities.md` | typed host facade已通过3 unit、51 focused、360 related tests与eslint;最终GUI Gate B仍归S5 |
|
||||
| S5c-canonical-read-consumer | completed / focused-contracts-and-Gate-B-validated | gui-s5-canonical-read -> coordinator | `.lime/refactor-v2/claims/S5c-canonical-read-consumer-gui-s5-canonical-read.md` | `20260712T162548Z-S5c-canonical-read-consumer-minimal-audit.md` + `20260712T200156Z-S5c-canonical-read-consumer.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` | package/Renderer queue control 只读 canonical `thread/read` narrow projection;queued promotion Gate B 解析唯一 active Turn,并完成 promote、真实 cancel、resume 与 reload queue restore;focused 77 tests、typecheck、contracts 289 checks 通过 |
|
||||
| S5d-plugin-canonical-thread-read | ready-for-review / focused-and-contracts-validated | plugin-canonical-thread -> coordinator | `.lime/refactor-v2/claims/S5d-plugin-canonical-thread-read-plugin-canonical-thread.md` + `.lime/refactor-v2/claims/S5d-plugin-canonical-thread-read-coordinator.md` | `20260713T041500Z-S5d-plugin-canonical-thread-read.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` | canonical threadId 已贯穿 start/get/cancel/reload;缺失、冲突、错误 identity、queued/terminal/multiple-active 全部 fail closed;Plugin focused 26/26、typecheck、contracts 通过,静态守卫只接受 canonical Thread/Item |
|
||||
| S5e-terminal-queue-history | completed / focused-and-unified-Gate-B-validated | canonical-terminal-queue | `.lime/refactor-v2/claims/S5e-terminal-queue-history-canonical-terminal-queue.md` | `20260712T202403Z-S5e-terminal-queue-history.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` | terminal Turn 可保留 historical Running/NotQueued 且 activeTurnId 为 null;terminal+Queued 仍 fail closed;projection + adapter + flow 与同一 Electron queued promotion Gate B 通过 |
|
||||
| S5f-active-stream-queue-intent | completed / focused-contracts-and-Gate-B-validated | coordinator | `.lime/refactor-v2/claims/S5f-active-stream-queue-intent-coordinator.md` | `20260712T215632Z-S5f-active-stream-queue-intent.md` + `internal/research/refactor/v2/13-evidence/2026-07-13-s5-canonical-read-consumers.md` | 同会话真实 active turn 强制 queue intent;queued listener 不覆盖 active binding,accepted 后立即 canonical hydrate;Gate B 约 5 秒完成且 backend ledger 真实 cancel,focused 77 tests、typecheck、contracts 与 GUI smoke 通过 |
|
||||
| S6 | partial-deletion-validated / thread-store-default-mcp-seed-agent-session-store-and-runtime-sidecars-dead-removed | refactor-v2-coordinator | narrow coordinator write set + `.lime/refactor-v2/claims/S6a-thread-store-dead-thread-store-dead-a.md` + `.lime/refactor-v2/claims/S6b-dead-default-playwright-mcp-seed-root.md` + `.lime/refactor-v2/claims/S6c-dead-agent-session-store-root.md` + `.lime/refactor-v2/claims/S6e-dead-rust-execution-strategy-compat-root.md` + `.lime/refactor-v2/claims/S6f-dead-agent-subagent-sidecars-root.md` + `.lime/refactor-v2/claims/S6g-dead-agent-runtime-aggregate-root.md` + `.lime/refactor-v2/claims/S6h-dead-agent-runtime-session-query-root.md` | `20260712T115000Z-S3f-runtime-core-mapper-delete-validation.md` + `20260712T121200Z-S6-retired-client-shell-delete.md` + `20260712T124908Z-S6a-thread-store-dead-thread-store-dead-a.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6b-dead-default-playwright-mcp-seed.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6c-dead-agent-session-store.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6e-dead-rust-execution-strategy-compat.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6f-dead-agent-subagent-sidecars.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6g-dead-agent-runtime-aggregate.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6h-dead-agent-runtime-session-query.md` | runtime-core mapper、零 consumer media/subagent client 壳、六个旧 thread-store 模块、失效默认 Playwright MCP seed、重复 lime-agent session store family、Rust execution strategy compat、local subagent sidecars、aggregate runtime 和 direct runtime session query 已物理删除。current owner 保持 App Server RuntimeCore -> ThreadStore/ProjectionStore/read model 与 agent-runtime generic projection;S6h `lime-agent` 259/259、反向依赖 compile、dead guards 与 legacy report 均通过。其余删除仍等待 S1/S2/S4/S5 对应 consumer cutover |
|
||||
| S5g-managed-objective-current-owner-migration | completed / focused-32-tests-eslint-typecheck-governance-validated | managed-objective-current-owner | `.lime/refactor-v2/claims/S5g-managed-objective-current-owner-migration-managed-objective-current-owner.md` | S5g evidence + handoff | Managed Objective 类型已直连 `sessionTypes`,行为与 mocks 已直连 `objectiveClient`;focused 32/32、ESLint、typecheck、legacy 0/0/0 与 diff check 通过,无 blocker。 |
|
||||
| S6 | completed / raw-sidechain-and-legacy-roster-contract-deleted / canonical-GUI-and-export-validated | refactor-v2-coordinator | S6a-S6t narrow claims | S6a-S6t handoffs/evidence | runtime 与 Renderer Team sidecar、专用 status/stream channel、raw parser/type/projector/package/fixture、legacy child/sibling/parent session roster DTO/state/normalizer/fallback 已迁出并受回流守卫保护;canonical child roster/navigation/Harness/Task Rail/Inputbar、canonical parent identity、AgentGraph export stats 和 Gate B/GUI smoke 已完成。 |
|
||||
| S6a-thread-store-dead | completed / coordinator-validated | thread-store-dead-a -> coordinator | `.lime/refactor-v2/claims/S6a-thread-store-dead-thread-store-dead-a.md` | `20260712T124908Z-S6a-thread-store-dead-thread-store-dead-a.md` + `internal/research/refactor/v2/13-evidence/2026-07-12-s6a-thread-store-dead.md` | 六个零 crate 外 consumer 的 transcript/search/runtime-store/insight 模块及内嵌正向测试共 1923 行已删除,八个旧路径纳入 forbidden-to-restore 守卫;三个反向依赖 check 与 coordinator 定向复核通过 |
|
||||
| S6b-dead-default-playwright-mcp-seed | completed / focused-and-governance-validated | root | `.lime/refactor-v2/claims/S6b-dead-default-playwright-mcp-seed-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6b-dead-default-playwright-mcp-seed.md` + S6b handoff | `migration_v3`、module export 与 startup dispatch 已删除;fresh database regression 证明不再写默认 Playwright MCP。旧 npm package、migration marker 与调用已纳入 `dead` guard;用户显式配置的 MCP 不迁移、不删除、不改名。`lime-core` 全量、related Rust、治理目录册、legacy report、rustfmt/diff 全部通过;GUI/bridge wire 未变化,Gate B 不适用。 |
|
||||
| S6c-dead-agent-session-store | completed / focused-and-governance-validated | root | `.lime/refactor-v2/claims/S6c-dead-agent-session-store-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6c-dead-agent-session-store.md` + S6c handoff | `session_store`、12 个 sibling、`session_state_snapshot` 与 crate-root CRUD/read/DTO export 共 4182 行已删除;App Server RuntimeCore -> ThreadStore/ProjectionStore 保持唯一 session owner。`lime-agent` 265/265、`app-server`/`lime-scheduler`/`lime-server` check、目录册 200、删除路径守卫和 legacy report 0/0/0 通过;GUI/bridge wire 未变化,Gate B 不适用。 |
|
||||
@@ -524,7 +605,32 @@ S0 -> S1 -> S2 -> S4 --\
|
||||
| S6f-dead-agent-subagent-sidecars | completed / focused-and-governance-validated | root | `.lime/refactor-v2/claims/S6f-dead-agent-subagent-sidecars-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6f-dead-agent-subagent-sidecars.md` | 无 caller 的 local subagent control/profile sidecar、旧 extension 与专属 DTO 已删除;App Server canonical graph/mailbox 与 `agent-runtime/session_execution` 保持唯一 current owner。 |
|
||||
| S6g-dead-agent-runtime-aggregate | completed / focused-and-governance-validated | root | `.lime/refactor-v2/claims/S6g-dead-agent-runtime-aggregate-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6g-dead-agent-runtime-aggregate.md` | 无 caller aggregate execution runtime builder、metadata parser、permission fallback 与专属 DTO 已删除;`AgentEvent` task/routing/limit/cost DTO 及 App Server read-model projection 保持 current。 |
|
||||
| S6h-dead-agent-runtime-session-query | completed / focused-and-governance-validated | root | `.lime/refactor-v2/claims/S6h-dead-agent-runtime-session-query-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6h-dead-agent-runtime-session-query.md` | direct `agent_sessions` execution-runtime query、module、alias/re-export 已删除;App Server `session_metadata` read model 与 `agent-runtime` generic projection 是唯一 current owner,`lime-agent` 259/259、反向依赖 compile、215 governance tests 和 legacy report 0/0/0 通过。 |
|
||||
| S7 | pending | coordinator | - | - | S0-S6 |
|
||||
| S6i-dead-team-formation-preview | completed / focused-typecheck-governance-and-GUI-smoke-validated | root | `.lime/refactor-v2/claims/S6i-dead-team-formation-preview-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6i-dead-team-formation-preview.md` | 输入长度/正则 + selected Team 的本地 formation、虚拟 member AgentUI event、`runtime-team-dispatch:*` 伪消息、send preview state 与 layout preview flag 已删除;发送不再等待或记录 Renderer 组队结果。focused 188、typecheck、legacy report 0/0/0、diff guard 与 GUI smoke 通过;canonical child Thread/Item GUI 未删除。 |
|
||||
| S6j-dead-team-runtime-sidecar | completed / S6k-S6l-followup-validated | root | `.lime/refactor-v2/claims/S6j-dead-team-runtime-sidecar-root.md` | S6j/S6k/S6l evidence | 第二 Team runtime 与 dead i18n 已删除;follow-up 发现的 project-thread ENOENT 和 ThreadId 直传 session bug 已由 S6k/S6l 修复并补 Gate。 |
|
||||
| S6k-canonical-child-roster | completed / focused-Rust-contracts-and-Gate-B-validated | root | `.lime/refactor-v2/claims/S6k-canonical-child-roster-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6k-canonical-child-roster.md` + S6k handoff | App Server canonical read/list join AgentGraph/Identity;selector/hook/Harness 只读 canonical child roster/status,保留 threadId/sessionId 和 notFound。Rust 精确 4、app-server check、unified focused 91、typecheck、contracts 290、Multi-Agent Gate B 与 GUI smoke 通过;Rust related 被无关 MCP stack overflow 阻断。 |
|
||||
| S6l-thread-first-subagent-navigation-guards | completed / focused-contracts-governance-and-Gate-B-validated | root | `.lime/refactor-v2/claims/S6l-thread-first-subagent-navigation-guards-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6l-thread-first-subagent-navigation-guards.md` + S6l handoff | canonical roster sessionId 优先,缺失时 `thread/read(notLoaded)` 严格解析;project-thread/dead/i18n/scenario/docs 已收口。unified focused 91、stop 1、typecheck、contracts 290、i18n/legacy、Multi-Agent Gate B 与 GUI smoke 通过;aggregate 只在已知 Skills Provider 鉴权失败处 exit 1。 |
|
||||
| S6m-raw-subagent-channel-retirement | completed / focused-typecheck-contract-core-governance-and-current-fixture-validated | third-worker -> root | S6m third-worker + continuation claims | S6m partial + continuation handoffs/evidence | status/stream 专用 channel、listener API、adapter alias、sync effect 与 DevBridge truth policy 已删除,stale adapter fixture 清理并补 negative guard。continuation focused 25/25、typecheck、legacy 0/0/0,contracts 290 与主体 gate 通过;最终 docs boundary 只被并行 release plan 阻断。current aggregate 通过此前全部场景后在 Inputbar pending-steer 首跑超时,精确 Electron 场景复跑通过。 |
|
||||
| S6n1-raw-subagent-status-parser-retirement | completed / focused-typecheck-validated | root | `.lime/refactor-v2/claims/S6n1-raw-subagent-status-parser-retirement-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6n1-raw-subagent-status-parser-retirement.md` + S6n1 handoff | `parseAgentEvent` 对 raw status fail closed,Agent UI dispatcher 不再投影;精确 2/2、dispatcher 全量 22/22、typecheck/diff 通过。完整 agentProtocol 的 1 个 action request id fixture 漂移与本切片无关。 |
|
||||
| S6n-raw-subagent-type-package-fixture-retirement | completed / focused-typecheck-i18n-governance-contract-core-and-Gate-B-validated | root | `.lime/refactor-v2/claims/S6n-raw-subagent-type-package-fixture-retirement-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6n-raw-subagent-type-package-fixture-retirement.md` + S6n handoff | raw status local/package projector、TS type、barrel/helper、runtime facts、summary/i18n/fixture 正向口径已物理删除;package 295/295、focused 136/137(唯一失败为既有 action request id 漂移)、guards 16/16、typecheck、i18n、legacy 0/0/0、Multi-Agent Gate B 与 GUI smoke 通过。contracts 主体通过后被并行 release plan 阻断;current aggregate 只在已知 Skills Provider 鉴权失败处退出。 |
|
||||
| S6o-legacy-subagent-roster-dto-retirement | completed / memory-shadow-and-canonical-GUI-fallback-retired | root | `.lime/refactor-v2/claims/S6o-legacy-subagent-roster-dto-retirement-root-memory-shadow.md` + `.lime/refactor-v2/claims/S6o-legacy-subagent-roster-dto-retirement-root-canonical-gui-fallback.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6o-legacy-roster-memory-shadow.md` + `internal/research/refactor/v2/13-evidence/2026-07-14-s6o-canonical-gui-fallback-retirement.md` + S6o handoffs | team-memory child/sibling roster shadow 与 Harness/AgentRuntimeStrip GUI fallback 均已删除;focused、typecheck、legacy 0/0/0、diff 与 GUI smoke 通过。剩余 session contract 已由 S6s/S6t 物理删除。 |
|
||||
| S6p-a-canonical-navigation-and-runtime-strip-fallback-retirement | completed / focused-typecheck-governance-and-GUI-smoke-validated | root | `.lime/refactor-v2/claims/S6p-a-canonical-navigation-and-runtime-strip-fallback-retirement-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6p-a-canonical-navigation-and-runtime-strip-fallback-retirement.md` + S6p-a handoff | 导航删除 legacy known-session 直达分支,runtime strip 删除 legacy roster 统计;navigation/guard 5/5、strip 10/10、typecheck、legacy report 0/0/0、GUI smoke 与 diff check 通过。Harness fallback 已由 S6o canonical GUI slice 收口,Task Rail stats 已由 S6q 收口。 |
|
||||
| S6q-canonical-task-rail-subtask-stats | completed / focused-typecheck-governance-and-GUI-smoke-validated | root | `.lime/refactor-v2/claims/S6q-canonical-task-rail-subtask-stats-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6q-canonical-task-rail-subtask-stats.md` + S6q handoff | Task Rail 从 Workspace scene 到 Toolbar/ViewModel 只透传 canonical children;七态映射锁定 interrupted 为需处理。focused 78/78、最终映射 7/7、typecheck、legacy 0/0/0、GUI smoke 与 diff check 通过。Inputbar/Harness/session DTO 未混入。 |
|
||||
| S6r-canonical-inputbar-subtask-stats | completed / focused-typecheck-governance-and-GUI-smoke-validated | root | `.lime/refactor-v2/claims/S6r-canonical-inputbar-subtask-stats-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6r-canonical-inputbar-subtask-stats.md` + S6r handoff | landing、MessageList、Inputbar runtime status 已从 legacy roster 收敛到 canonical children;七态统计回归 `total=7, active=2, queued=1, completed=2, failed=3`。focused 41/41、typecheck、ESLint/Prettier、legacy 0/0/0、GUI smoke 与 diff check 通过。后续 S6s/S6t 已删除 session DTO/state/normalizer/API fixture/metrics fallback。 |
|
||||
| S6s-legacy-subagent-session-contract-retirement | completed / focused-typecheck-governance-and-GUI-smoke-validated | root -> react/api/rust narrow owners | `.lime/refactor-v2/claims/S6s-legacy-subagent-session-contract-retirement-root.md` + React/Rust subclaims + S6t | `internal/research/refactor/v2/13-evidence/2026-07-14-s6s-legacy-subagent-session-contract-retirement.md` + subclaim evidence/handoffs | React/API 删除 child/sibling/parent roster DTO/state/normalizer/fixture;canonical thread family 独占 parent identity;Rust export active count 改读 canonical AgentGraph。React 255+5、API 60+1、Rust focused 2、typecheck、legacy 0/0/0 与 GUI smoke 通过;Rust related 被无关 MCP stack overflow 阻断。 |
|
||||
| S6t-legacy-session-roster-contract-retirement | completed / focused-typecheck-governance-and-GUI-smoke-validated | root | `.lime/refactor-v2/claims/S6t-legacy-session-roster-contract-retirement-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s6t-legacy-session-roster-contract-retirement.md` + S6t handoff | session API 类型、normalizer、两个 spread 边界、Electron/smoke fixture 与 dead display leaf 已收口;API 60/60、相关 clientFactory 1/1、typecheck、lint/format/diff、legacy 0/0/0 与 GUI smoke 通过。完整 clientFactory 唯一失败为未触及 turn-lifecycle 旧期望。 |
|
||||
| S7 | completed / skeleton-and-post-gate-closeout / smart-suite-and-S7x-focused-Gate-B-validated / refinement-active / not-archive-ready | root | `.lime/refactor-v2/claims/S7-root.md` + S7a-S7y claims | S7 skeleton evidence + S7a-S7y evidence/handoffs + historical claim audit handoffs | Codex-first GUI 架构骨架与 post-skeleton refinement 已收口。S7c-S7f 完成 runtime guard/模块职责拆分,S7h-S7v 将 smart Vitest 失败对齐 current protocol/client/projector/mock owner;smart suite 已完成 batch 110,`failed_batch: null`。S7x 删除无 position raw Tool 排序 fallback,focused 55/55、reasoning-first Gate B 与 history replay Gate B 通过。S2m/S2n 已关闭,历史 active/blocked claim 元数据已按后续事实源释放。fresh `verify:gui-smoke` 通过;current aggregate 再次只在独立 Skills Provider 鉴权场景退出。S7y Approval cold-read 正 active;S5 剩余 22 个 dirty compat consumer、fresh aggregate 全绿与 PR architecture confirmation 未关闭,因此 v2 不标记 archive-ready。 |
|
||||
| S7a-electron-ipc-contract-ordering | completed / focused-and-smart-batch-validated | root | `.lime/refactor-v2/claims/S7a-electron-ipc-contract-ordering-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s7a-electron-ipc-contract-ordering.md` + S7a handoff | truth-bridge production set 无缺项;只修正 test-only sorted expectation。focused 4/4、smart batch 9 的 16 files/132 tests 与 diff check 通过。 |
|
||||
| S7b-current-electron-guard-alignment | completed / focused-and-smart-batch-validated | root | `.lime/refactor-v2/claims/S7b-current-electron-guard-alignment-root.md` | `internal/research/refactor/v2/13-evidence/2026-07-14-s7b-current-electron-guard-alignment.md` + S7b handoff | packaged renderer alias guard 跟随 `browser.ts`;规则 guard 不再强迫根/事实源复制 retired 细节或固定旧文案。focused 25/25,后续 smart batch 15/16 覆盖两 guard,batch 12 current run 16 files/151 tests 通过。 |
|
||||
| S7c-app-server-runtime-guard-currentization | completed / focused-format-contract-and-governance-validated | root | `.lime/refactor-v2/claims/S7c-app-server-runtime-guard-currentization-root.md` | S7c evidence/handoff | stale guard 已对齐 current runtime owner,不增加 whitelist 或放宽真实体量阈值。 |
|
||||
| S7d-image-command-events-split | completed / stale-recovered-and-released | image-command-events | `.lime/refactor-v2/claims/S7d-image-command-events-split-image-command-events.md` | S7d evidence/handoff | canonical image/tool/turn event projection 已迁入 `image_command/events.rs`,workflow facade 回到体量门槛内且行为不变。 |
|
||||
| S7e-runtime-value-fields-split | completed / focused-validated | runtime-value-fields | `.lime/refactor-v2/claims/S7e-runtime-value-fields-split-runtime-value-fields.md` | S7e evidence/handoff | id/JSON/timestamp helpers 已迁入 `runtime/value_fields.rs`,runtime facade 职责与行为保持。 |
|
||||
| S7f-runtime-backend-execution-trait-split | completed / focused-contract-and-rustfmt-validated | root | `.lime/refactor-v2/claims/S7f-runtime-backend-execution-trait-split-root.md` | S7f evidence/handoff | ExecutionBackend trait 适配迁入独立 current 子模块,root facade <=480 行;App Server check/contract/guard 通过。 |
|
||||
| S7h-S7s-current-fixture-and-ordering-closeout | completed / focused-and-smart-validated / S7o-current-semantics-superseded | root + narrow owners | S7h-S7s claims | S7h-S7s evidence/handoffs | Approval、Plugin、stream/runtime、checkpoint 与 API fixtures 跟随 canonical Thread/Turn/Item 和 current module owner;S7o 的无 position Tool 原位排序结论已由 S7x 推翻,历史 evidence 不再作为 current 规则。 |
|
||||
| S7t-vitest-smart-targeted-state-isolation | completed / governance-renumbered-and-validated | root | `.lime/refactor-v2/claims/S7t-vitest-smart-targeted-state-isolation-root.md` | original runner evidence/handoff | `--only-batch` / `--list-batches` 不覆盖 resumable state,unit 11/11 与 scripts governance 通过;旧 runner S7i claim 保留为 superseded。 |
|
||||
| S7u-image-title-current-owner-fixture | completed / full-resume-typecheck-and-governance-validated / released | root | `.lime/refactor-v2/claims/S7u-image-title-current-owner-fixture-root.md` | S7u evidence/handoff | batch 101 的 title mock 对齐 current agentClient;focused 16/16、full resume、typecheck、lint/format、legacy 0/0/0 通过。 |
|
||||
| S7v-inputbar-objective-current-owner-fixture | completed / focused-and-smart-validated | root | `.lime/refactor-v2/claims/S7v-inputbar-objective-current-owner-fixture-root.md` | S7v evidence/handoff | batch 108 的 objective mock 对齐 current objectiveClient;Inputbar 87/87 与 batch 108-110 通过。 |
|
||||
| S7x-canonical-reasoning-position-only | completed / focused-and-reasoning-Gate-B-validated | root | `.lime/refactor-v2/claims/S7x-canonical-reasoning-position-only-root.md` | S7x evidence/handoff | canonical Tool/Reasoning ordinal 是唯一 ordering fact;无 position raw Tool 特判与 sentinel 正向 fixture 已删除。focused 55/55、ESLint/Prettier/diff 与真实 Electron reasoning-first-visible 通过;aggregate 首页场景另受 250ms sampling budget 阻断,实测 pending paint 为 21ms。 |
|
||||
| S7y-approval-cold-read-typed-response | active / canonical-cold-read-and-GUI-lowering | root | `.lime/refactor-v2/claims/S7y-approval-cold-read-typed-response-root.md` | pending | 只修 canonical ThreadStore -> read model -> typed Renderer -> GUI view-model;不新增 Approval server request、IPC 或第二响应 owner。 |
|
||||
|
||||
S2f 架构确认:
|
||||
|
||||
@@ -559,6 +665,15 @@ S2f 架构确认:
|
||||
确认内容:已核对 Renderer typed client -> App Server JSON-RPC -> direct ThreadStore read 的依赖方向;AgentSession detail 仅保留迁移期 presentation adapter,并登记 S2e/S5 退出条件。
|
||||
```
|
||||
|
||||
### 9.2a S2k canonical Message / Plan lifecycle 确认
|
||||
|
||||
```text
|
||||
架构影响:重大;把 user/agent Message 与 proposed Plan 收敛为 Codex 对齐的正式 canonical Item lifecycle,并改变 Plan history/revision 的持久化与 GUI 恢复语义;不新增 runtime owner、Electron 后端、JSON-RPC method、兼容层或第二 read model。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.2 节 Agent Runtime 组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:已核对 `message.created` 直接形成 completed UserMessage,AgentMessage 只在真实正文开始后创建并由同一 Item 在 `message.completed` 进入 terminal,取消映射 Interrupted;Plan delta/final 使用 `plan_{turnId}_{revisionId}` 稳定 identity,completed final snapshot 覆盖流式 delta 并保留首 ordinal。Codex `leading_whitespace_by_item` 语义已复制到 Plan parser,Plan-only 输出不产生空白 AgentMessage。canonical SQLite restart、read model、typed reader 与真实 Electron reload 均保留 revision、source、steps/status;GUI 实施确认绑定同一 revision,legacy update_plan Item 为 0。Gate B 通过;聚合 fixture 后续 Skills Provider 鉴权失败与本切片无关。
|
||||
```
|
||||
|
||||
### 9.3 S4c production tool lifecycle 架构确认
|
||||
|
||||
```text
|
||||
@@ -799,7 +914,115 @@ S2f 架构确认:
|
||||
架构影响:重大;在既有 App Server AgentControl gateway -> RuntimeTool -> canonical ToolLifecycleEmitter -> Thread/Turn/Item 主链增加 success-only typed internal activity 与独立 SubAgent Item,不新增 JSON-RPC、队列、registry、Electron 后端或兼容层。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.3 节 Provider 与工具组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:已核对 spawn 使用真实 child ThreadId 产生 Started,send/followup 使用 durable identity 解析后的 target ThreadId 产生 Interacted,interrupt 产生 Interrupted;input target path 只作解析输入和 detail,不作为 ThreadId。typed fact 经 serde-skipped RuntimeToolExecutionResult/NormalizedToolOutput 传给 host emitter,不进入 model output、structured content 或普通 Tool metadata。四个 targeted 工具先完成普通 Tool Item,再追加 call-derived stable distinct SubAgent Item;失败、started phase、空/多 fact、tool/activity mismatch、wait/list 均 fail closed。Started/Interacted/Interrupted 是 current 写入值,旧七值只保留 historical decode/re-emit。focused Rust 5+1+5+14+12、schema fixture 1 已通过;contracts/current fixture 与最终 rustfmt/diff 在 evidence 收尾记录。
|
||||
确认内容:已核对 spawn 使用真实 child ThreadId 产生 Started,send/followup 使用 durable identity 解析后的 target ThreadId 产生 Interacted,interrupt 产生 Interrupted;input target path 只作解析输入和 detail,不作为 ThreadId。typed fact 经 serde-skipped RuntimeToolExecutionResult/NormalizedToolOutput 传给 host emitter,不进入 model output、structured content 或普通 Tool metadata。四个 targeted 工具先完成普通 Tool Item,再追加 call-derived stable distinct SubAgent Item;失败、started phase、空/多 fact、tool/activity mismatch、wait/list 均 fail closed。Started/Interacted/Interrupted 是 current 写入值;S4ad 临时保留旧七值的历史兼容决定已由 S4ae 推翻,原因是仓库没有外部用户或历史数据兼容约束,且 Codex contract 只有三值。focused Rust 5+1+5+14+12、schema fixture 1 已通过;contracts/current fixture 与最终 rustfmt/diff 在 evidence 收尾记录。
|
||||
```
|
||||
|
||||
### 9.20j S4ae canonical SubAgent GUI 确认
|
||||
|
||||
```text
|
||||
架构影响:重大;将 canonical SubAgent activity 收敛为 Codex Started/Interacted/Interrupted 三值,并让 GUI cold/live timeline、Harness 与状态文案只消费同一 Item identity;删除 synthetic sidecar 与 activity worker-result,不新增 Electron 后端、JSON-RPC、队列或兼容层。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.3 节 Provider 与工具组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:已核对 App Server cold read 从 canonical ThreadStore 回填 detail.items/thread_read.thread_items,Renderer live reader 保留相同 Item ID 与 child ThreadId;activity Item 的 completed 只表示事实落盘,started/interacted 投影 running/acting,interrupted 投影 cancelled/interrupted,child terminal 仍只由 S4aa Result mailbox/thread lifecycle 表达。GUI 使用五语言文案且 unknown wire 不直接显示;real:subagent:* producer/test、activity worker.notification 和 Harness child-terminal 推断已删除。协议已收口 Codex 三值并同步 schema/TS;focused、typecheck、i18n 与 GUI smoke 通过。current fixture 已越过此前 ENOSPC 及首页/Workbench/Approval/Inputbar/Plan 等真实 Electron 场景,最终 Skills Runtime fixture Provider 鉴权失败;不将该外部鉴权 blocker 冒充 SubAgent GUI 回归或 aggregate Gate 通过。
|
||||
```
|
||||
|
||||
### 9.20k S6i Renderer fake Team formation 删除确认
|
||||
|
||||
```text
|
||||
架构影响:重大;删除 Renderer 在发送前按 selected Team、长度和正则构造的第二套 Multi-Agent formation/preview 事实源,不新增 compat、协议或替代状态机。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.3 节 Provider 与工具组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:已核对真实 Multi-Agent 成员与活动只由 RuntimeCore AgentControl -> canonical Collab/SubAgent ThreadItem 产生;本地 formed state、虚拟 member/work-board event、runtime-team-dispatch 伪消息、send preview state 与 layout preview flag 已删除。canonical child ThreadId 导航、timeline Item 和 SubAgent 工具开关保持 current。focused 188、typecheck、legacy report 0/0/0 与 GUI smoke 通过;aggregate fixture 的外部 Skills Provider 鉴权 blocker 单独记录。
|
||||
```
|
||||
|
||||
### 9.20l S6j Renderer Team runtime sidecar 删除确认
|
||||
|
||||
```text
|
||||
架构影响:重大;删除 Renderer 重复订阅 raw subagent status/stream、维护本地 live/draft/tool/queue map 并再次写 projection store 的第二 runtime,不新增 compat、fallback 或替代事件总线。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.3 节 Provider 与工具组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:team-workspace-runtime 目录、useTeamWorkspaceRuntime、teamWorkspaceRuntime、wrappers、正向 tests 与 dead 五语言 keys 已删除,stop 直接委托 current owner;canonical reader、ThreadItem projection 和 timeline 卡片保持 current。2026-07-14 follow-up 发现原 focused 集漏跑仍读取已删文件的 project-thread guard,且 canonical activity ThreadId 被直接当 sessionId 导航,因此本确认只覆盖 sidecar 删除,不覆盖 navigation/guard 完成。S6k/S6l 必须完成 canonical roster、ThreadId -> sessionId 解析、补守卫和 Gate 后才能恢复完整完成声明。
|
||||
```
|
||||
|
||||
### 9.20m S6k canonical child roster 确认
|
||||
|
||||
```text
|
||||
架构影响:重大;将 App Server durable AgentGraph/AgentIdentity 与 canonical Thread lifecycle join 为 typed child roster,并让 Workspace GUI 只消费该 roster,不新增协议 owner、Electron 后端、事件总线、compat 或生产 mock。
|
||||
架构图更新章节:internal/aiprompts/architecture.md 第 6.3 节 Provider 与工具组。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`thread/list` 暴露 parentThreadId、agentPath/nickname/role、lastTaskMessage 与 Codex 七态 agentState;selector/hook 保留 threadId/sessionId,parent Item 引用缺失 child 显式 notFound。Harness 和 RuntimeStrip 显式传入 canonical roster 时不回退 raw sessions,pendingInit+running 才计 active,interrupted 独立;导航优先 canonical ThreadId -> sessionId,未知才 thread/read。unified focused 91、Rust 精确 4、app-server check、scoped ESLint、typecheck、contracts 290、五语言、multi-agent-team Gate B 与 GUI smoke 通过。Rust related 被无关 MCP stdio stack overflow 阻断;aggregate 只在已知 Skills Provider 鉴权失败处 exit 1。
|
||||
```
|
||||
|
||||
### 9.20n S6l Thread-first SubAgent 导航与守卫确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;复用既有 App Server thread/read 与 canonical child roster 修正 Renderer 身份转换,不新增协议、Electron 后端、事件总线、compat 或 fallback。
|
||||
架构图更新章节:不适用;既有 canonical Thread/Turn/Item 主链未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:canonical roster 保留 threadId/sessionId,activity target 优先使用 roster sessionId,缺失时通过 `thread/read(turnsView=notLoaded)` 严格解析;真实 child session id 仍可直达,mismatch/空值/read 失败均 fail closed。unified focused 91、stop 1、project-thread 10、catalog/registry 213、typecheck、contracts 290、五语言/unused/legacy、Multi-Agent Gate B 与 GUI smoke 通过;完整 aggregate 只在已知 Skills Provider 鉴权失败提示处 exit 1。
|
||||
```
|
||||
|
||||
### 9.20o S6m raw SubAgent channel 退役确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;删除无 producer/consumer 的 Renderer status/stream 专用事件通道、adapter alias 与 DevBridge truth policy,不改变 App Server JSON-RPC、Electron host、canonical read model 或 current event transport。
|
||||
架构图更新章节:不适用;既有 Electron Desktop Host -> App Server -> RuntimeCore -> Thread/Turn/Item -> GUI 主链未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`agent_subagent_status:*` / `agent_subagent_stream:*` 已从 production listener、sync effect、runtime adapter、event source API 和 bridge truth prefix 迁出;`agentSession/event`、generic local fanout、sequence gate、thread/read polling 与 canonical child roster 保持 current。negative guard 同时阻止两个 prefix、专用 getter/listener 和 `listenToTeamEvents` 回流。focused 25/25、typecheck、legacy report 0/0/0;contracts protocol/client 290 和主体 gates 通过,最终 docs boundary 仅被并行索引的 release-v1.102.0 plan 阻断。current aggregate 通过历史/stream/首页/Workbench/图片/停止继续/Approval/Inputbar rich restore,pending-steer 首跑输入稳定等待超时,精确 Electron 场景复跑通过。
|
||||
```
|
||||
|
||||
### 9.20p S6n1 raw SubAgent status parser 退役确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;让 Renderer 对无生产协议来源的 raw `subagent_status_changed` fail closed,并删除 Agent UI dispatcher 分支;不改变 canonical Item schema、runtime status team projection、历史 EventLog opaque read 或 GUI current owner。
|
||||
架构图更新章节:不适用;canonical SubAgent Item -> ThreadItem projection 与 thread/list child roster 主链未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`parseAgentEvent` 对旧 raw status 返回 null,绕过 parser 直接调用 dispatcher 也得到空投影;canonical `item_* -> subagent_activity` 和 `runtime_status -> team.changed` 保持 current。精确 2/2、dispatcher 全量 22/22、typecheck/diff 通过。本切片当时保留的 raw TS type、独立 helper/package、fixture/i18n 已由后续 S6n 物理删除。
|
||||
```
|
||||
|
||||
### 9.20q S6n raw SubAgent type/package/fixture 退役确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;物理删除已无 producer/consumer 的 raw status TS type、local/package projector、fixture producer 与 summary/i18n 正向口径,不改变 App Server JSON-RPC、canonical Item schema、thread/list child lifecycle、runtime status team projection 或历史 EventLog opaque read。
|
||||
架构图更新章节:不适用;Electron Desktop Host -> App Server -> RuntimeCore -> Thread/Turn/Item -> GUI 主链与 owner 未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`subagent_status_changed` 类型、`subagentStatusProjection`、projection package `subagentStatusEvents`、raw-only runtime facts、summary/i18n/fixture 正向输入已删除;barrel 和 current docs 不再导出或宣称 raw helper。`runtime_status -> team.changed`、canonical `item_completed -> subagent_activity`、child roster/navigation 与 generic EventLog/hydration 保持 current。package 295/295、focused 136/137(唯一失败为既有 `action_required.request_id` fixture 漂移)、governance guards 16/16、typecheck、五语言、unused、legacy report 0/0/0、Multi-Agent Electron Gate B 与 GUI smoke 通过;contracts 主体通过后被并行索引的 release plan 阻断,aggregate 仅在已知 Skills Provider 鉴权失败处退出。
|
||||
```
|
||||
|
||||
### 9.20r S6p-a canonical navigation/runtime strip fallback 退役确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;删除 Renderer 导航和 runtime strip 对无 current producer 的 legacy child session fallback,不改变 App Server JSON-RPC、canonical child roster、Thread/Turn/Item schema、Electron host 或 session state owner。
|
||||
架构图更新章节:不适用;既有 canonical child Thread -> `readThreadSessionId` -> session navigation 与 Thread/Turn/Item -> GUI 主链未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`useWorkspaceSubagentNavigationRuntime` 只从 canonical child ThreadId 命中 roster sessionId,缺失时调用 `readThreadSessionId`,不再检查 `childSubagentSessions` 或 `isKnownSession`;`AgentRuntimeStrip` 只接受 canonical child summaries 并将空 roster fail closed 为零计数。Harness delegation/status fallback、Task Rail subtask stats、session state 和 legacy DTO 仍明确留在后续写集。导航/guard 5/5、strip 10/10、typecheck、legacy report 0/0/0、`npm run verify:gui-smoke` 与 claimed diff check 通过。
|
||||
```
|
||||
|
||||
### 9.20s S6q canonical Task Rail subtask stats 确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;将 Task Center Task Rail 的子任务统计从无 current producer 的 legacy session detail roster 切换到既有 canonical child Thread summaries,不改变 App Server protocol、Thread schema、Electron host、MessageList 或 session state owner。
|
||||
架构图更新章节:不适用;既有 canonical child Thread roster -> Workspace scene -> Task Rail GUI 数据流未新增 owner。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`canonicalChildren` 已贯穿 AgentChatWorkspace scene、`useWorkspaceConversationSceneRuntime`、`useWorkspaceTaskRailRuntime`、TaskCenterUtilityToolbar 与 Task Rail ViewModel;Task Rail 不再接受 `childSubagentSessions`。状态映射为 pendingInit/running -> active,completed/shutdown -> completed,errored/notFound/interrupted -> 需处理,保证七态不静默丢失。focused 四组 78/78、最终映射 7/7、typecheck、legacy report 0/0/0、`npm run verify:gui-smoke` 与 claimed diff check 通过。Inputbar、Harness 与 legacy DTO/state/metrics 仍属后续。
|
||||
```
|
||||
|
||||
### 9.20t S6r canonical Inputbar and landing subtask stats 确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;将 landing task card、MessageList 和 Inputbar runtime status 的子任务统计从无 current producer 的 legacy session detail roster 切换到既有 canonical child Thread summaries,不改变 App Server protocol、Thread schema、Electron host、session state owner 或用户可见文案。
|
||||
架构图更新章节:不适用;既有 canonical child Thread roster -> Workspace scene -> landing/MessageList/Inputbar GUI 数据流未新增 owner。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:`canonicalChildren` 已从 Workspace scene 贯穿 landing task card、MessageList timeline state 和 Inputbar runtime status;上述 surface 不再接受 `childSubagentSessions`,projection deferral 也不再搬运空 legacy roster。统一七态统计为 pendingInit/running -> active,completed/shutdown -> completed,errored/notFound/interrupted -> failed。focused 6 files/41 tests、typecheck、exact ESLint/Prettier、legacy report 0/0/0、`npm run verify:gui-smoke` 与 claimed diff check 通过。session DTO/state/normalizer/API fixture/export metrics 仍属后续 contract 删除切片。
|
||||
```
|
||||
|
||||
### 9.20u S6s legacy SubAgent session contract retirement 确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;删除无 current producer/consumer 的 Renderer session roster DTO/state/normalizer/fixture 与 raw export metrics fallback,并让已有 canonical thread family/AgentGraph 承接 parent identity 和 active child count;不改变 App Server protocol、Thread schema、Electron command、export response schema 或 RuntimeCore owner。
|
||||
架构图更新章节:不适用;既有 App Server -> canonical Thread family/AgentGraph -> GUI/export 数据流未新增 owner。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:React session snapshot/hooks/Workspace 不再持有 child/parent roster;session API 删除 AgentSubagentSessionInfo/ParentContext/SkillInfo 和 child/sibling/parent keys,两个 object-spread 边界只允许删除旧 key;Workspace parent visibility 只读 useCanonicalChildThreads.hasParentThread;export activeSubagentCount 只统计 canonical AgentGraph direct open children 中 PendingInit/Running 状态。React 255/255 + final 5/5、API 60/60 + related clientFactory 1/1、Rust focused 2/2、typecheck、exact lint/format/rustfmt/diff、legacy report 0/0/0 与 GUI smoke 通过。Rust related 被未触及 MCP stdio stack overflow/SIGABRT 阻断;完整 clientFactory 唯一失败为未触及 turn-lifecycle readThread 旧期望。
|
||||
```
|
||||
|
||||
### 9.20 S4r2 App Server reverse JSON-RPC 确认
|
||||
@@ -847,6 +1070,15 @@ S2f 架构确认:
|
||||
确认内容:真实 stdio MCP fixture、S4u mailbox store 与 S4v AgentControl focused test 已在 shared fixture 修复后分别 1/1、4/4、6/6 通过。默认 macOS test worker stack 对该既有 stdio fixture 会溢出,遵循仓库已有 RUST_MIN_STACK=8388608 test-runner 口径;这不是生产路径 fallback,也不改变 S4w 仍待 hot write set 释放的事实。
|
||||
```
|
||||
|
||||
### 9.23 S7 v2 skeleton closeout 架构确认
|
||||
|
||||
```text
|
||||
架构影响:非重大;S7 不新增业务实现、协议、runtime owner、Electron 后端、compat 或 fallback,只汇总并确认 S0-S6 已落地的 Codex-first GUI 架构与当前工作树证据。
|
||||
架构图更新章节:不适用;本轮只读复核 internal/aiprompts/architecture.md,既有 Electron Desktop Host -> App Server JSON-RPC -> RuntimeCore -> Thread/Turn/Item -> GUI 主链未变化。
|
||||
责任开发者确认:root,2026-07-14
|
||||
确认内容:已核对 Lime 作为 GUI 产品保留 Renderer 交互与可视投影,但 Agent loop、状态机、工具/MCP/Skills/Multi-Agent、历史恢复和 canonical read model 只向 Codex 语义收敛;provider capability/lowering 与多模态 part 继续按 OpenCode owner 边界收敛。fresh Approval cancel Gate B 证明 recordCount=1、Turn canceled、pendingRequestCount=0 且 GUI composer 恢复;GUI smoke、lint、typecheck、legacy 0/0/0、scripts governance 和 diff 通过。S7 只标记 skeleton closeout,因 verify:local baseline assertion、release docs boundary、Skills Provider 鉴权、PR architecture context、S5 compat consumer 与 S6o GUI/session roster refinement 未关闭,不标记 archive-ready 或 v2 全部完成。
|
||||
```
|
||||
|
||||
## 10. 完成定义
|
||||
|
||||
v2 实施不能因为“几个进程都有改动”而标记完成。每个 slice 必须同时具备:
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# Lime v1.103.0 发布执行计划
|
||||
|
||||
状态:release-ready / gates-passed / publication-authorized
|
||||
日期:2026-07-15
|
||||
目标版本:`1.103.0`
|
||||
目标 tag:`v1.103.0`
|
||||
|
||||
## 目标
|
||||
|
||||
将 `v1.102.0` 后当前工作树中的 Refactor V2 Agent 主链收口作为单一 release candidate,完成版本事实源、双语 release notes、发布门禁、release commit、tag、main/tag 推送和远端复核。
|
||||
|
||||
## Release Candidate
|
||||
|
||||
- `release metadata`:`package.json`、`packages/lime-cli-npm/package.json`、`lime-rs/Cargo.toml`、`lime-rs/Cargo.lock`、`RELEASE_NOTES.md`、`RELEASE_NOTES.en.md`、`.gitignore`、本计划。
|
||||
- `candidate changes`:candidate freeze 时工作树中的 382 个修改、29 个删除和 97 个未跟踪源码、测试、schema、文档与 evidence 路径,共 508 个候选路径;全部围绕 canonical Thread/Turn/Item、AgentControl/SubAgent、Agent Chat current owner、App Server owner 拆分和 S7 gate refinement。
|
||||
- `excluded changes`:candidate freeze 之后由并行 owner 新启动的 S7y Approval cold/live typed response 与 S5 compat residual 增量不进入 `v1.103.0`,保留为下一版本工作树;它们不属于已冻结并完成门禁的 508 个候选路径。
|
||||
|
||||
## 窄写集与避让
|
||||
|
||||
本发布任务修改 release metadata,并在候选 owner 释放后补齐 S2n/S7x evidence、中央计划状态、history Electron oracle readiness regression 与两处 docs boundary 文案。其余 Electron、App Server、Renderer、协议、测试和 roadmap 候选文件只读核对并原样纳入,不扩大发布收口写集。
|
||||
|
||||
## 退出条件
|
||||
|
||||
1. S2m、S2n 与 S7x closeout 形成 evidence / handoff,候选集连续稳定且没有活跃测试写入。
|
||||
2. 所有版本事实源为 `1.103.0`,`npm run verify:app-version` 通过,旧版本只允许出现在 release comparison 和历史文档上下文。
|
||||
3. `npm run typecheck` 通过;协议、Rust 与 GUI 风险按当前变更补足 `npm run test:contracts`、定向 Rust 验证和 `npm run verify:gui-smoke`。
|
||||
4. `git diff --check` 通过;staged 集覆盖全部 release metadata 与 candidate changes,且没有未说明的排除项。
|
||||
5. 获得危险操作确认后,连续完成 `git commit`、`git tag v1.103.0`、`git push origin main`、`git push origin v1.103.0`,并复核本地与远端 tag。
|
||||
|
||||
## 当前状态
|
||||
|
||||
- S2m/S2n conversation import Plan 与 Message lifecycle 已完成 focused 验证并形成 evidence;本地 owner 进入 released。
|
||||
- S7x focused 55/55 与 reasoning-first Gate B 通过;history replay oracle readiness race 已修复,原始 Electron fixture 复跑通过。
|
||||
- 两处 docs boundary 旧引用已修正为 `internal/roadmap guard`。
|
||||
- candidate 已冻结且没有未说明排除项;最终 aggregate gates 全部通过,发布写操作已获用户授权。
|
||||
- 发布 cutoff 以已验证的 staged index 为准;冻结后新启动的 S7y/S5 工作保持 unstaged,不中断、不覆盖,也不改变本版本 tag 内容。
|
||||
|
||||
## 验证记录
|
||||
|
||||
- `npm run verify:app-version`:通过,版本一致为 `1.103.0`。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run test:contracts`:通过;protocol types 698/0 drift、App Server client 288 checks、command、Harness、modality、scripts、Electron release workflow、cleanup 与 docs boundary 全部通过。
|
||||
- S2m focused Rust:2/2;shared related App Server:1097/1097。
|
||||
- S2n focused Rust:2/2;exact rustfmt 与 narrow diff check 通过。
|
||||
- S7x focused Vitest:4 files / 55 tests;ESLint、Prettier、diff 与 reasoning-first Gate B 通过。
|
||||
- history replay Electron fixture:`ok=true`、reasoning summary 1、image attachments 2、MCP tool rows 1、console errors 0。
|
||||
- `npm run verify:gui-smoke`:通过;Renderer、Electron host/preload、真实 App Server sidecar `1.103.0`、Claw workbench 与 settings 主路径就绪。
|
||||
- `git diff --check`:通过。
|
||||
|
||||
## 架构确认
|
||||
|
||||
本发布任务本身不改变架构;candidate 的重大架构切片已在 `internal/aiprompts/architecture.md` 与 `internal/exec-plans/refactor-v2-implementation.md` 逐项确认。发布门禁只引用这些既有确认,不新增第二套 owner、compat 或 fallback。
|
||||
|
||||
当前完成度:`90%`。下一刀:复核 staged candidate 后执行 release commit、tag、main/tag push 与远端校验。
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
# S2 canonical Message / Plan lifecycle evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
canonical user/agent Message 与 proposed Plan 生命周期已按 Codex 收口。Plan 不再是附着在普通
|
||||
消息或 `update_plan` Tool 上的旁路状态,而是可持久化、可通知、可跨重启恢复的正式
|
||||
`ThreadItemPayload::Plan`。聚合 fixture 原有的 Plan revision identity blocker 已解除。
|
||||
|
||||
current 链路是:
|
||||
|
||||
```text
|
||||
Runtime event
|
||||
-> canonical Message / Plan Item lifecycle
|
||||
-> ProjectionStore / ThreadStore
|
||||
-> read model + canonical notification
|
||||
-> Renderer typed reader
|
||||
-> GUI Plan rail / implementation decision
|
||||
```
|
||||
|
||||
## Codex 对齐
|
||||
|
||||
- `codex-rs/core/src/session/mod.rs`:user input 发送 `ItemStarted` 后立即发送同一 Item 的
|
||||
`ItemCompleted`;所有 terminal Item 都携带 completed timestamp。
|
||||
- `codex-rs/core/src/session/turn.rs`:Plan 使用稳定 Item ID,流式 `PlanDelta` 与 completed Plan
|
||||
snapshot 共用 identity;completed snapshot 是权威内容,不要求等于 delta 拼接。
|
||||
- 同文件 `leading_whitespace_by_item`:Plan 前纯空白在第一个真实 assistant 文本前缓存;若整轮
|
||||
只有 Plan,则不启动 AgentMessage。
|
||||
- `app-server-protocol/src/protocol/v2/item.rs`:Plan、ItemStarted、ItemCompleted 与 PlanDelta 是
|
||||
typed contract;历史由 durable completed Item 恢复。
|
||||
|
||||
## 实现事实
|
||||
|
||||
- `message.created` 直接物化为 completed UserMessage,并记录 `completed_at_ms`。
|
||||
- assistant `message.delta` 启动稳定的 AgentMessage;`message.completed` 完成同一 Item,取消或
|
||||
中断映射为 `ItemStatus::Interrupted`。
|
||||
- Plan payload 保存 `text`、`revision_id`、`source`、typed steps/status、explanation、tool/source
|
||||
identity;`ItemKind::Plan` 已进入 protocol/schema/generated client。
|
||||
- Plan Item ID 固定为 `plan_{turnId}_{revisionId}`。`plan.delta` 创建/更新 running Item;
|
||||
`plan.final` 以 completed authoritative snapshot 更新同一 Item,保留首 delta ordinal。
|
||||
- canonical store restart、AgentSession presentation read model 与 Renderer canonical reader 都保留
|
||||
revision/source/steps/status。
|
||||
- proposed Plan parser 缓存首个真实正文前的空白。Plan-only 输出即使包含前后换行,也不发
|
||||
`message.delta` 或 `message.completed`;后续出现正文时,缓存空白与正文一起发出。
|
||||
|
||||
## 验证
|
||||
|
||||
- `cargo test -p app-server proposed_plan_parser --lib`:8/8。
|
||||
- `cargo test -p app-server thread_item_projection --lib`:37/37。
|
||||
- canonical store restart revision identity、user/agent completed lifecycle、message terminal ordering、
|
||||
canceled agent Interrupted 与 typed `message.completed -> item/completed` 定向回归:全部通过。
|
||||
- `cargo test -p agent-protocol`:27/27(最终共享树包含并行 S6k 新增的 Codex child-state contract)。
|
||||
- Renderer canonical reader Vitest:15/15;fixture/聚合脚本 Vitest:69/69。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run check:protocol-types`:694 types,0 drift。
|
||||
- App Server client contract:290 checks,通过。
|
||||
- `npm run verify:gui-smoke`:通过;Renderer production build、Electron main/preload、App Server
|
||||
1.102.0 sidecar、初始化、Claw workbench shell 与 memory settings 均就绪。首次尝试撞到并行 S6k
|
||||
尚未完成的 protocol 根导出中间态;S6k 补齐后同一命令复跑通过,未修改 S2 实现绕过失败。
|
||||
- `npm run test:contracts`:协议、client、command、harness、modality、scripts、Forge 与 cleanup
|
||||
子门禁均通过;最终 `docs:boundary` 因既有已跟踪
|
||||
`internal/exec-plans/release-v1.102.0-plan.md` 应被 ignore 而失败。该文件不在 S2 写集,本轮未改动。
|
||||
|
||||
## Gate B
|
||||
|
||||
证据:
|
||||
`.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-plan-history-hydrate-regression-summary.json`
|
||||
|
||||
- `ok=true`,`proofLevel="Gate B controlled fixture"`,使用真实 Electron/preload/IPC、
|
||||
`app_server_handle_json_lines`、App Server JSON-RPC、runtime/read model 与 GUI;backend 为受控
|
||||
external fixture,不是 production mock fallback,也不证明 live Provider。
|
||||
- Plan mode/prompt/collaboration mode 已进入 backend;GUI Plan rail、steps 与 implementation decision
|
||||
均可见,且未自动执行计划。
|
||||
- reload 后 read model 与 GUI 均保留 `revisionId=proposed_plan:fixture-1`、
|
||||
`source=proposed_plan` 和全部三条 Plan step;实施确认绑定同一 turn/revision。
|
||||
- completed Plan ThreadItem 可读,legacy `update_plan` Tool Item 数量为 0。
|
||||
- invoke error 与 actionable console error 为 0。
|
||||
|
||||
聚合 `smoke:agent-runtime-current-fixture` 已越过原 Plan blocker,随后在独立 Skills Runtime 场景
|
||||
因 Provider 鉴权失败停止。该外部配置失败不属于 Message/Plan lifecycle 回归,不用于扩大或缩小
|
||||
本切片的 Gate B claim。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:typed UserMessage、AgentMessage、Plan Item lifecycle;ProjectionStore/ThreadStore;
|
||||
canonical notification/read model;Renderer typed reader 与 GUI revision binding。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:`agentSession/read` presentation adapter 仍等待 S5/S6 consumer cutover 后删除。
|
||||
- `dead / forbidden-to-restore`:Plan-as-`update_plan` truth、Renderer 本地 revision/lifecycle 合成、
|
||||
Plan-only 空白 AgentMessage、第二 read model 或 production mock fallback。
|
||||
|
||||
下一刀:继续 S6k canonical child roster 主链;Message/Plan lifecycle 不再是其聚合 fixture blocker。
|
||||
@@ -0,0 +1,102 @@
|
||||
# S2l Canonical history 与实时 reasoning 顺序修复
|
||||
|
||||
> date: 2026-07-14
|
||||
> slice: S2l-canonical-history-repair
|
||||
> owner: root
|
||||
> lime_head: 650d7503363364614ee26921c0df810c0a914bef(dirty working tree)
|
||||
> codex_reference: /Users/coso/Documents/dev/rust/codex
|
||||
|
||||
## 用户闭环
|
||||
|
||||
同一回合必须始终按 canonical Item 首次出现位置展示:思考在最终正文之前。该顺序在 live
|
||||
streaming、回合终态、切换会话后重新 hydrate 和应用重启恢复时必须一致;列表项必须能点击,
|
||||
进入后消息与输入框都可用。
|
||||
|
||||
## 根因
|
||||
|
||||
问题不是 EventLog 反序,而是三个 current projection 边界混用了 mutable completion sequence:
|
||||
|
||||
1. 历史 ThreadItem 排序和 content-part metadata 使用 Item 最新更新 `sequence`。Reasoning 在正文
|
||||
后才 completed 时,`sequence` 会晚于 AgentMessage;稳定时间线位置实际是 `ordinal`。
|
||||
2. `StreamingRenderer` 会再次按 content-part metadata 排序。即使历史 Item 已按 ordinal 排好,
|
||||
metadata 继续写 completion sequence 仍会把 reasoning 二次移到正文后。
|
||||
3. live streaming 中,持久化 Reasoning 接管同轮临时 thinking 时,若临时 part 已经落在正文后且
|
||||
其它 part 没有 sequence,旧分支只原位替换,保留错误索引。重新进入历史后才恢复正确,因此
|
||||
出现“实时反序、重进正确”。
|
||||
|
||||
## 实现
|
||||
|
||||
- `resolveThreadItemTimelinePosition` 统一采用 `ordinal -> metadata.ordinal -> sequence`。
|
||||
- 历史 Item 排序、Reasoning/Tool/Text content-part metadata 和 live tool/reasoning sync 共用同一
|
||||
timeline position,不再各自解释 sequence。
|
||||
- 持久化 Reasoning 接管临时 thinking 时先移除旧 part,再按 canonical position 或首个正文边界
|
||||
重新插入;删除无 sequence 时原位保留的分叉。
|
||||
- 没有修改 CSS、没有新增 Renderer 状态机、没有从 `turn.completed` 合成 Message terminal,也
|
||||
没有引入 projected fallback 或生产 mock。
|
||||
|
||||
## 回归与静态验证
|
||||
|
||||
```text
|
||||
npx vitest run \
|
||||
agentStreamReasoningContentSync.unit.test.ts \
|
||||
agentChatHistoryThreadItems.test.ts \
|
||||
streamingContentPartOrder.unit.test.ts
|
||||
结果:3 files / 12 tests passed。
|
||||
|
||||
npm run typecheck
|
||||
结果:passed。
|
||||
|
||||
npx eslint <S2l TypeScript write set>
|
||||
git diff --check -- <S2l TypeScript write set>
|
||||
结果:passed。
|
||||
|
||||
cargo test -p app-server projection_repair --lib
|
||||
结果:8/8 passed。
|
||||
|
||||
cargo test -p app-server canonical_thread_store --lib
|
||||
结果:21/21 passed,包含 Plan revision restart identity。
|
||||
```
|
||||
|
||||
`RUST_MIN_STACK=8388608 npm run test:rust:related -- <S2l Rust paths>` 最终为 `1093/1094`;
|
||||
唯一失败是 conversation import 的 completed Plan `plan.final` 缺 canonical Item。该失败不经过 S2l
|
||||
Renderer/history 写集,已交给后续 S2m 独立修复,不能把 S2l related 报成全绿。
|
||||
|
||||
## Electron 验证
|
||||
|
||||
- `npm run smoke:agent-session-history-electron-fixture`:通过。真实 Electron/preload/IPC、
|
||||
`agentSession/start/read/update/list`、归档/恢复、侧栏进入、分页与 reasoning replay 全闭环。
|
||||
- `npm run verify:gui-smoke -- --reuse-running`:通过。最新 renderer、Electron host/preload、App
|
||||
Server `1.102.0`、Claw shell 与 memory settings ready。
|
||||
- `npm run smoke:agent-runtime-current-fixture`:历史 31、终态 32、Electron guard 64 通过;首页、
|
||||
短问候、Coding、图片、停止继续、approval、rich draft、queue/hydrate 和 Plan history 均通过。
|
||||
最终独立 Skills Runtime fixture 因 Provider 鉴权失败退出;不覆盖为通过,也不在 S2l 修改
|
||||
Skills/provider 热区。
|
||||
|
||||
## Gate B
|
||||
|
||||
```text
|
||||
Electron CDP: http://127.0.0.1:9223
|
||||
page: http://127.0.0.1:1420/?nativeStartup=1
|
||||
session: sess_7827308372264379bfb153eab62b8e53
|
||||
screenshot: .lime/refactor-v2/order-178-gate-b-final.png
|
||||
```
|
||||
|
||||
- `window.__LIME_ELECTRON__ === true`,preload `electronAPI.invoke` 存在。
|
||||
- 侧栏先进入“你好”,再点击 `ORDER-178`,两次点击均成功,消息历史恢复,输入框可用。
|
||||
- `electron-ipc -> app_server_handle_json_lines -> agentSession/read` 成功。
|
||||
- canonical read:Reasoning `ordinal=6, sequence=320`;AgentMessage
|
||||
`ordinal=314, sequence=316`。
|
||||
- GUI signature:`thinking#6|text#314`;`StreamingRenderer` 第一子项为 `thinking-block`,第二
|
||||
子项为最终正文。第二个 live Provider 回合也保持思考在上、正文在下并恢复输入。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:canonical ThreadItem ordinal、history/live reasoning sync、App Server read model、
|
||||
Electron IPC 与 GUI projection。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:用 Item completion sequence 作为展示位置、无 sequence 时原位保留
|
||||
反序 thinking、Renderer 本地终态合成、生产 mock fallback。
|
||||
|
||||
S2l 用户问题完成度:`100%`。Refactor v2 仍为 `in_progress`;下一刀是 S2m conversation import
|
||||
completed Plan Item lifecycle。
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
# S2m Conversation Import Plan Lifecycle Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Codex `item_completed` 携带的 `TurnItem::Plan.id` 是 completed Plan 的 authoritative identity。
|
||||
S2m 将同一 ID 写入 imported runtime event 的 `itemId`、`planId`、`revisionId` 与
|
||||
`sourceItemId`,materializer 对 `sourceClient=codex` 且显式带 ID 的 Plan 使用该 identity,
|
||||
不再按 turn/event 合成另一条 canonical Item。
|
||||
|
||||
presentation read 与 canonical `thread_read.thread_items` 现在都得到 `item-plan-1`,status 为
|
||||
completed,revisionId 仍为 `item-plan-1`。`turn.completed` 不创建或补全 Plan;完成事实只来自
|
||||
`item_completed`。
|
||||
|
||||
## 写集与并行边界
|
||||
|
||||
- `conversation_import/codex/events.rs`:只认领 completed Plan identity lowering hunk。
|
||||
- `conversation_import/codex/events/tests.rs`:只认领 authoritative Plan regression;同文件 SubAgent
|
||||
activity test 属于 S4af 相邻改动。
|
||||
- `conversation_import/tests/runtime_events.rs`:只认领 completed Plan commit/read hunk;同文件
|
||||
user/agent message lifecycle 与 ordinal collision tests 属于 active S2n 相邻改动。
|
||||
- `thread_item_projection/materializer.rs`:只认领 imported Codex Plan explicit identity boundary。
|
||||
- 未修改 provider、Electron、protocol/schema、generated client 或 Renderer。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:Codex `item_completed(Plan.id)` -> imported `plan.final` -> canonical Plan Item/revision。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:completed Plan 的 turn/event-derived synthetic ID、
|
||||
`turn.completed` 补 Plan、把 completed Plan 降成 legacy `update_plan` Tool Item。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
RUST_MIN_STACK=8388608 cargo test -p app-server \
|
||||
codex_completed_plan_preserves_authoritative_item_identity --lib
|
||||
=> 1/1 passed
|
||||
|
||||
RUST_MIN_STACK=8388608 cargo test -p app-server \
|
||||
commit_preserves_imported_completed_plan_item --lib
|
||||
=> 1/1 passed
|
||||
|
||||
RUST_MIN_STACK=8388608 npm run test:rust:related -- <S2m Rust paths>
|
||||
=> app-server 1097/1097 passed
|
||||
```
|
||||
|
||||
- exact `rustfmt --check` passed。
|
||||
- claimed Rust write set `git diff --check` passed。
|
||||
- 4 条 warning 来自未触及的 `runtime_backend/tests.rs` unused/dead test helpers,不属于 S2m。
|
||||
|
||||
## 文件体量退出条件
|
||||
|
||||
`conversation_import/codex/events.rs` 当前为 1002 行,已经超过非生成文件硬阈值。本 slice 不再
|
||||
向该文件追加业务逻辑;下一次触碰 Codex 非 tool specialized event 前,必须先把对应事件族迁入
|
||||
职责子模块并把 root 文件降到 1000 行以下。禁止用 compat wrapper、重复 parser 或删除必要可读性
|
||||
空行规避阈值。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
S2l handoff 的唯一 related Rust 失败已关闭;canonical history repair 与 conversation import 的
|
||||
completed Plan identity 现在使用同一 Item/revision 事实源。
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
# S2n Conversation Import Message Lifecycle Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Codex conversation import 的 User / Agent Message 已进入 canonical Item lifecycle。每条导入消息
|
||||
使用 source call ID 或 `sourceEventSeq` 派生的稳定 Item identity,并使用 rollout
|
||||
`sourceEventSeq` 作为 ordinal;App Server 自身的 event sequence 不再替代来源顺序。
|
||||
|
||||
导入链现在为同一 Item 依次写入 `item.started`、既有 presentation message event 与
|
||||
`item.completed`。`turn.completed` 只关闭 Turn,不再合成或补全 Message Item。current
|
||||
`importVersion=2` 保留 source ordinal;只有没有版本标记的旧 Codex import 才在历史修复时使用
|
||||
持久化 event-sequence domain。
|
||||
|
||||
## 写集与并行边界
|
||||
|
||||
- `conversation_import/commit.rs`:从 User / Agent source provenance 构造稳定 message draft。
|
||||
- `conversation_import/commit_events.rs`:为 current Codex import 写入 `importVersion=2`。
|
||||
- `conversation_import/commit_events/tool_lowering.rs`:lower User / Agent canonical lifecycle,保留
|
||||
presentation event 和 source ordinal。
|
||||
- `conversation_import/tests/runtime_events.rs`:覆盖 canonical lifecycle 与 source/runtime ordinal
|
||||
collision。
|
||||
- `thread_item_projection/materializer.rs`:仅对无版本的历史 Codex import 使用 legacy ordinal 修复。
|
||||
- 未修改 provider、Electron、protocol/schema、generated client 或 Renderer。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:Codex source provenance -> stable User / Agent Item identity ->
|
||||
`item.started` / presentation / `item.completed` -> canonical thread read。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:无版本标记的历史 Codex import ordinal 修复,仅供读取旧数据。
|
||||
- `dead / forbidden-to-restore`:用 App Server event sequence 覆盖 source ordinal、由
|
||||
`turn.completed` 合成 Message、只写 presentation event 而没有 canonical Item lifecycle。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
RUST_MIN_STACK=8388608 cargo test -p app-server \
|
||||
commit_imports_user_and_agent_items_with_canonical_lifecycle --lib
|
||||
=> 1/1 passed
|
||||
|
||||
RUST_MIN_STACK=8388608 cargo test -p app-server \
|
||||
commit_avoids_source_and_runtime_ordinal_collision --lib
|
||||
=> 1/1 passed
|
||||
```
|
||||
|
||||
- App Server shared related suite:1097/1097 passed(当前 S2m/S2n 共享工作树)。
|
||||
- exact `rustfmt --check` passed。
|
||||
- claimed Rust write set `git diff --check` passed。
|
||||
- history replay Electron fixture 已验证 imported Message / Reasoning / Tool 的完整 DOM 恢复,
|
||||
reasoning summary 单实例、2 个图片附件、1 个 MCP tool row,console error 为 0。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
S2m 已关闭 imported completed Plan identity;S2n 继续关闭 imported User / Agent Message identity、
|
||||
lifecycle 与 ordinal。conversation import 的 Message、Plan、Reasoning 和 Tool 现在共享 canonical
|
||||
Thread/Turn/Item ordering 事实源,不新增第二套 import read model。
|
||||
+14
-10
@@ -2,6 +2,11 @@
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
> S4ae 后续收口说明:本文件原先把旧七值判为 historical-read-only,是 S4ad producer
|
||||
> 切片中的临时兼容决定。仓库没有外部用户或历史数据兼容约束,且 Codex canonical contract
|
||||
> 只有 `Started/Interacted/Interrupted`;S4ae 已将旧七值改判为
|
||||
> `dead / forbidden-to-restore`。以下 producer 证据仍有效,十值兼容结论不再有效。
|
||||
|
||||
## 结论
|
||||
|
||||
AgentControl targeted 操作已形成完整 canonical producer:
|
||||
@@ -25,10 +30,9 @@ App Server gateway resolved durable ThreadId/path
|
||||
- target path 只作为 gateway 解析输入和 activity detail;`child_thread_id` 只使用 durable identity owner 返回的 `ThreadId`。
|
||||
|
||||
`Started/Interacted/Interrupted` 是唯一 current producer 写入值。旧
|
||||
`Spawned/MessageSent/Waiting/Resumed/Completed/Failed/Closed` 继续保留在 Rust enum、JSON
|
||||
Schema 和 generated TS 中,仅用于历史 canonical Item 的 decode/re-emit,分类为
|
||||
`deprecated / historical-read-only`。child terminal completed/failed 继续由 S4aa Result mailbox
|
||||
表达,S4ad 不恢复旧 activity producer。
|
||||
`Spawned/MessageSent/Waiting/Resumed/Completed/Failed/Closed` 已由 S4ae 从 Rust enum、JSON
|
||||
Schema 和 generated TS 中删除,并由负向反序列化回归阻止回流。child terminal
|
||||
completed/failed 继续由 S4aa Result mailbox 表达,S4ad 不恢复旧 activity producer。
|
||||
|
||||
## 验证
|
||||
|
||||
@@ -37,8 +41,8 @@ Schema 和 generated TS 中,仅用于历史 canonical Item 的 decode/re-emit
|
||||
- lime-agent `agent_control`:5/5;`current_provider_turn`:14/14。
|
||||
- App Server `agent_control`:12/12。
|
||||
- App Server protocol schema fixture:1/1。
|
||||
- Rust schema exporter与 `npm run generate:protocol-types`:通过;`SubAgentActivityKind` 为
|
||||
3 current + 7 historical 的十值 union。
|
||||
- Rust schema exporter 与 `npm run generate:protocol-types`:S4ad 当时生成十值 union;该结果已被
|
||||
S4ae 的 Codex 三值 schema/client 取代,不再是 current contract。
|
||||
- `cargo check -p app-server --lib`、`npm run test:contracts`、
|
||||
`npm run smoke:agent-runtime-current-fixture` 与最终 rustfmt/diff:收尾门禁中,结果在本文件
|
||||
完成时更新。
|
||||
@@ -46,7 +50,7 @@ Schema 和 generated TS 中,仅用于历史 canonical Item 的 decode/re-emit
|
||||
## 范围
|
||||
|
||||
`current` 是 durable target resolution、typed internal fact、ordinary Tool + canonical SubAgent Item
|
||||
和三值 current activity。`deprecated / historical-read-only` 是旧七值;`compat` 无新增;旧 Team
|
||||
工具与 V1 alias 继续是 `dead / deleted / forbidden-to-restore`。S4ad 不新增 JSON-RPC、Electron、
|
||||
Renderer 或 GUI fallback,也不声明 Multi-Agent Gate B;typed GUI cold/live consumer 与真实 Electron
|
||||
闭环归 S4ae。
|
||||
和三值 current activity。旧七值、旧 Team 工具与 V1 alias 均是
|
||||
`dead / deleted / forbidden-to-restore`;`compat` 与 `deprecated` 无新增。S4ad 不新增 JSON-RPC、
|
||||
Electron、Renderer 或 GUI fallback,也不声明 Multi-Agent Gate B;typed GUI cold/live consumer 与
|
||||
真实 Electron闭环归 S4ae。
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# S4ae canonical SubAgent GUI evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 当前结论
|
||||
|
||||
canonical SubAgent GUI 骨架已形成,唯一活动语义为:
|
||||
|
||||
- `Started` / `Interacted`:活动仍在进行,GUI 使用 running/acting。
|
||||
- `Interrupted`:活动被中断,GUI 使用 cancelled/interrupted。
|
||||
- activity Item 的 `ItemStatus::Completed` 只表示事实已持久化,不代表 child terminal。
|
||||
- child completed/failed 继续只由 S4aa Result mailbox 与 child thread lifecycle 表达。
|
||||
|
||||
冷恢复当前由 `agentSession/read -> canonical ThreadStore -> detail.items/thread_read.thread_items`
|
||||
承接;本轮没有额外并发 `thread/read(full)`,避免历史分页和 refresh 重复读取完整 Thread。
|
||||
live 与 cold 使用相同 canonical Item ID,hydrate 按 ID 去重。
|
||||
|
||||
## 已收口 surface
|
||||
|
||||
- 删除 `real:subagent:*` synthetic producer 及正向测试,Workspace 不再合并 child-session sidecar。
|
||||
- 删除 activity Item 伪造的 `worker.notification`;真实 child terminal notification owner 不变。
|
||||
- Harness 不再从 activity Item status 构造 child terminal roster。
|
||||
- timeline badge 按 activity 而不是 Item status 选择状态,并覆盖五语言;未知 wire 不显示 raw enum。
|
||||
- App Server canonical ThreadStore 重启后仍读取三类 activity 的稳定 Item ID 与 child ThreadId。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm --prefix packages/agent-runtime-projection test`:298/298。
|
||||
- focused Vitest:7 files / 70 tests。
|
||||
- `src/components/agent/chat/index.test.tsx`:16/16。
|
||||
- `cargo test -p app-server read_detail_prefers_canonical_thread_store_items_after_restart --lib`:1/1。
|
||||
- `cargo test -p agent-protocol subagent_activity_accepts_only_codex_current_wire_values --lib`:1/1。
|
||||
- `npm run check:protocol-types`:694 types,0 drift。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run i18n:check:json`:五语言,0 issue。
|
||||
- `npm run smoke:agent-runtime-current-fixture`:history/cache 31/31、stream 32 passed、Electron
|
||||
fixture guard 64/64;真实 Electron 首页、问候、Coding Workbench、图片、cancel/continue、Approval、
|
||||
Inputbar queue/restore 与 Plan history 场景通过。最终 Skills Runtime 场景因 fixture Provider 鉴权失败
|
||||
显示配置错误,命令 exit 1;不是 SubAgent GUI 投影失败。
|
||||
- `npm run verify:gui-smoke`:通过;Renderer、Electron Host/preload、真实 App Server sidecar、初始化、
|
||||
Claw shell 与 memory settings 均成功。
|
||||
|
||||
## 并行冲突处理
|
||||
|
||||
并行只读审计曾以 `v1.101.0/v1.102.0` 本地开发数据为由要求保留十值。该假设与仓库“无外部
|
||||
用户、无历史兼容负担”的事实源冲突,也偏离 Codex 仅三值的 canonical contract,因此未采纳。
|
||||
`thread.rs`、schema 与 generated TS 已重新收口为三值;旧七值由反序列化负向测试禁止回流。
|
||||
|
||||
磁盘空间随后被外部进程释放,本进程没有执行删除。`verify:gui-smoke` 已通过;current fixture 已越过
|
||||
此前 ENOSPC 和多个真实 Electron 场景,最终仅被 Skills Runtime fixture Provider 鉴权失败阻断。
|
||||
本文件状态为 implementation-complete / GUI-smoke-validated /
|
||||
aggregate-fixture-external-provider-auth-blocked。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:canonical ThreadStore cold read、live Thread/Turn/Item、三态本地化 GUI。
|
||||
- `compat`:`agentSession/read` 作为当前冷恢复入口;后续 S5/S6 迁到 typed `thread/read(full)` 后删除。
|
||||
- `deprecated`:无新增。
|
||||
- `dead`:旧七 activity wire、activity worker-result、`real:subagent:*` synthetic sidecar。
|
||||
@@ -0,0 +1,68 @@
|
||||
# S4ae / S6i aggregate Gate resume evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
S4ae 的 ENOSPC blocker 已关闭,S6i 的 Renderer fake Team formation 删除也已完成。
|
||||
fresh Renderer + Electron 证据证明通用 GUI 主路径可用;完整
|
||||
`smoke:agent-runtime-current-fixture` 尚未全绿,当前唯一已观察 blocker 是独立
|
||||
`skills-runtime` fixture 进入 Provider 鉴权失败,而不是 SubAgent、Team 删除或 bridge 回归。
|
||||
|
||||
建议状态更新为:
|
||||
|
||||
`implementation-complete / GUI-smoke-and-home-hotpath-validated / aggregate-skills-fixture-blocked`
|
||||
|
||||
## 并发构建根因
|
||||
|
||||
首次恢复 aggregate Gate 时,Vite 正在读取 S6i active write set。`AgentChatWorkspace.tsx`、
|
||||
`useWorkspaceTeamRuntime.ts` 和 `useWorkspaceSendActions.ts` 的 mtime 落在构建窗口内;生成 bundle
|
||||
因此捕获到删除中的中间态,启动时报 `setRuntimeTeamDispatchPreview is not defined`。
|
||||
|
||||
这不是缺少兼容 setter。S6i 完成后的源码与 boundary guard 均禁止
|
||||
`runtimeTeamDispatchPreview`,fresh bundle 也不再包含该符号。稳定构建后的 home-hotpath 重新运行:
|
||||
|
||||
- summary `ok=true`。
|
||||
- Electron/preload、App Server JSON-RPC、external fixture backend、GUI user/assistant message、
|
||||
terminal read model 与输入框恢复等全部注册断言为 true。
|
||||
- actionable console error 为 0。
|
||||
|
||||
因此根因是共享 `dist` 在 active source write 期间构建,不应通过恢复 dead setter 修补。
|
||||
|
||||
## Aggregate fixture
|
||||
|
||||
稳定产物上的 aggregate run 已通过 14 个已落 summary 的场景,包括 home、image、approval、
|
||||
cancel/continue、inputbar queue/restore 和 plan history hydrate。随后 `skills-runtime` 失败:GUI
|
||||
显示 Provider API Key / Base URL 鉴权错误,未得到 fixture 期望的 assistant summary;该场景
|
||||
summary `ok=false`,aggregate 在此停止,后续场景未冒充执行。
|
||||
|
||||
该 blocker 与 S4ae canonical SubAgent GUI、S6i fake Team preview 删除没有共享事实边界,应由
|
||||
Skills fixture / provider setup owner 单独处理。
|
||||
|
||||
## GUI smoke
|
||||
|
||||
`npm run verify:gui-smoke`:exit 0。
|
||||
|
||||
- Renderer loaded。
|
||||
- App Server ready:`protocol=appserver.v0`、`version=1.102.0`。
|
||||
- App Server initialized。
|
||||
- Claw workbench shell ready。
|
||||
- memory settings ready。
|
||||
|
||||
构建期间 `install_name_tool` 曾报告一次 target binary 临时 rename 竞争,但 smoke 仍使用已准备
|
||||
sidecar 完成真实初始化并 exit 0。后续共享 Gate 应继续保持单一 Cargo / Electron build owner,
|
||||
避免把 artifact race 当产品回归。
|
||||
|
||||
## 治理与下一刀
|
||||
|
||||
- `current`:RuntimeCore AgentControl、canonical SubAgent Item、fresh Renderer 与真实 App Server GUI
|
||||
主链。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:S6i handoff 已登记的 `team-workspace-runtime/**` 第二状态/stream sidecar。
|
||||
- `dead / deleted / forbidden-to-restore`:Renderer Team formation、dispatch preview、虚拟 member event
|
||||
与伪消息。
|
||||
|
||||
下一刀按 S6i handoff 进入 S6j:删除 `useTeamWorkspaceRuntime`、`team-workspace-runtime/**`、
|
||||
session/control wrapper 和 unavailable stub;同时由 Skills fixture owner修复独立鉴权配置后续跑
|
||||
aggregate。执行计划仍是其他已完成切片的脏共享事实源,本轮只提供新 evidence/handoff,等待
|
||||
coordinator 合并状态,避免夹写。
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# S4af Codex SubAgent import fidelity evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Codex `sub_agent_activity` / `subagent_activity` import 现在显式把 source `kind`
|
||||
写入内部 `subagent.activity` 事件的 `activity` 字段。canonical materializer 已优先读取
|
||||
`activity`,因此 `Started`、`Interacted`、`Interrupted` 不再被 `statusLabel=running`
|
||||
或 `status=in_progress` 误投影为统一的 `Interacted`。
|
||||
|
||||
`statusLabel`、`status`、`role` 继续只承载旧展示和来源信息;它们不替代 typed activity。
|
||||
本切片没有恢复 raw Codex product wire、没有修改 SubAgent protocol/schema,也没有触碰
|
||||
S4ae cold/live GUI、Plan materializer 或 Electron 热区。
|
||||
|
||||
## 回归
|
||||
|
||||
新增 `codex_subagent_activity_preserves_current_kind`,逐值验证三种 current Codex kind
|
||||
进入内部 runtime event 后仍保留同名 `activity`,并确认事件类型仍为
|
||||
`subagent.activity`。
|
||||
|
||||
## 验证
|
||||
|
||||
- scoped `rustfmt --check`:通过。
|
||||
- tracked diff `git diff --check` 与新文件 trailing-whitespace 扫描:通过。
|
||||
- `codex_subagent_activity_preserves_current_kind`:1/1。
|
||||
- `commit_projects_codex_runtime_specialized_items_into_existing_timeline_types`:1/1,证明
|
||||
commit/read 端到端 timeline 未回归。
|
||||
- `cargo check -p app-server --lib`:通过。
|
||||
|
||||
首次 focused test 曾因共享磁盘 `ENOSPC` 失败;并行进程恢复可用空间后已完整重跑通过,
|
||||
因此该环境问题不再是本切片 blocker。测试编译仅报告共享基线中的未使用测试辅助代码 warning。
|
||||
|
||||
## 治理与并行边界
|
||||
|
||||
- `current`:Codex current activity kind 到 canonical SubAgent activity 的精确保真。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:source-local status label/role 仍由既有 import presentation 使用,本切片不扩展。
|
||||
- `dead`:raw Codex event 作为 product wire,未恢复。
|
||||
|
||||
S4ae active claim 占用 `thread.rs`、schema/generated TS、GUI、architecture 与执行计划;本切片
|
||||
全部避让。执行计划登记应在 S4ae 释放热区后由 coordinator 合并,不能夹写当前 active owner。
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
# S4r8b 历史进入与 canonical recovery evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
侧栏会话无法进入、历史对话无法恢复和 `turn/start` 偶发 canonical identity 缺失已收口。
|
||||
current 链路仍是唯一事实源:
|
||||
|
||||
```text
|
||||
Electron Desktop Host
|
||||
-> app_server_handle_json_lines
|
||||
-> App Server JSON-RPC
|
||||
-> EventLog / ProjectionRepair
|
||||
-> canonical Thread / Turn / Item
|
||||
-> agentSession/read
|
||||
-> GUI
|
||||
```
|
||||
|
||||
## 根因与修复
|
||||
|
||||
- Electron Host 过去把任意首条通知当成当前 `turn/start` admission,并只读一次 canonical
|
||||
Turn。旧 turn 通知或短暂 read-model 延迟会错误返回 identity 缺失。Host 现在只接受与请求
|
||||
`sessionId/turnId` 匹配的通知,并对 canonical read 做 2 秒有界重试。
|
||||
- JSONL repair 过去只重建 `projected_*` session read model;`agentSession/list` 能看到条目,
|
||||
`agentSession/read` 随后却因 canonical Thread 缺失而失败。`ProjectionRepair` 现在用同一批
|
||||
EventLog 事件建立缺失的 canonical Thread,并物化 Turn / Item 后才返回。
|
||||
- history fixtures 已改为 Codex typed Item 口径:UserMessage、Reasoning、AgentMessage 使用稳定
|
||||
canonical identity;assistant 由 `message.delta -> message.completed` 进入 completed;replayed
|
||||
reasoning / MCP 使用 typed `ThreadItem`,不再依赖旧 payload 摘要猜测。
|
||||
|
||||
没有新增 projected fallback、renderer 本地历史拼装、第二 read model 或 turn-terminal Item
|
||||
状态推断。修复前已经落盘且缺少 `message.completed` 的旧 EventLog 不被静默改写;当前 Runtime
|
||||
Backend 已按 Codex 在 `turn.completed` 前发送正式 `message.completed`。
|
||||
|
||||
## Gate B
|
||||
|
||||
- `smoke:agent-session-history-electron-fixture` 通过:真实 Electron/preload/IPC、App Server
|
||||
JSON-RPC、归档/恢复重启、侧栏点击、分页、thread resume、reasoning/MCP visual replay 全闭环。
|
||||
- `smoke:claw-chat-current-fixture` 通过:用户消息、assistant 输出、read model completed、输入框恢复。
|
||||
- `smoke:claw-chat-current-fixture -- --scenario cancel-then-continue` 通过:停止后同一 session 再次
|
||||
提交并完成。
|
||||
- 真实用户数据 CDP `9223`:`window.__LIME_ELECTRON__=true`,preload invoke 可用;侧栏“你好”
|
||||
按钮可点击,进入后恢复 2 个 turn,composer 可用;IPC trace 为 `electron-ipc`。
|
||||
- 真实 Provider 当前返回 `404 Application not found`,页面能终态失败并恢复输入;该配置错误不再
|
||||
表现为列表不可点、历史不可进入或 turn 永久 active。
|
||||
|
||||
## 验证
|
||||
|
||||
- App Server projection repair:7/7。
|
||||
- Electron Host + history guard:32/32。
|
||||
- `npm run typecheck:electron`:通过。
|
||||
- `npm run verify:gui-smoke -- --reuse-running`:通过。
|
||||
- `npm run smoke:agent-runtime-current-fixture` 已越过原 plan revision identity blocker,并通过首页、
|
||||
Coding、图片、cancel-then-continue、approval、rich draft、queue 与 Plan history hydrate;最终仅在
|
||||
Skills Runtime fixture 因 Provider 鉴权失败停止。
|
||||
- `npm run test:contracts` 的协议/client/command/harness/modality/scripts/Forge/cleanup 子门禁通过;
|
||||
最终仅因并行 `internal/exec-plans/release-v1.102.0-plan.md` 违反 docs ignore 边界退出 1。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:Electron Host canonical admission;EventLog -> canonical Thread repair;typed Message /
|
||||
Reasoning / MCP Item;App Server current read model;GUI history hydrate。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:`agentSession/read` presentation adapter 仍由后续 consumer cutover 负责删除。
|
||||
- `dead / forbidden-to-restore`:projected-only history truth、renderer history synthesis、生产 mock
|
||||
fallback、以 `turn.completed` 猜测 Item terminal。
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
# S5 Claw reasoning 先于最终正文证据
|
||||
|
||||
> date: 2026-07-14
|
||||
> slice: S5-claw-reasoning-before-answer
|
||||
> owner: root
|
||||
> lime_head: 650d7503363364614ee26921c0df810c0a914bef(dirty working tree)
|
||||
> codex_head: 5c19155cbd93bfa099016e7487259f61669823ff
|
||||
|
||||
## 用户闭环
|
||||
|
||||
同一轮中,思考内容必须在最终正文之前出现。思考完成后可以折叠,但不能因为 completion
|
||||
事件晚于正文 delta 而移动到结果后面。live streaming 与重新进入历史会话必须保持相同顺序。
|
||||
|
||||
## 现场根因
|
||||
|
||||
初始真实会话:
|
||||
|
||||
```text
|
||||
session: sess_a7dfe9233a7f4cb7b02a9be0410e9208
|
||||
turn: 48cc2e69-62bd-40b6-a535-536bc84c73c4
|
||||
events: reasoning.started=6 -> first message.delta=46 -> reasoning.ended=85
|
||||
read: reasoning sequence=85, ordinal=1;没有独立 user/agent Item
|
||||
DOM: text#48 -> thinking#85
|
||||
```
|
||||
|
||||
EventLog 本身没有反序。错误发生在两个 current projection 边界:
|
||||
|
||||
1. canonical materializer 把 turn 级 `request_id` 作为通用 Item ID。user message、agent message、
|
||||
reasoning 共用同一 request 后,在 canonical store 中互相覆盖;最终 reasoning 继承 user
|
||||
message 的 ordinal/created time,同时持有 reasoning terminal sequence。
|
||||
2. Renderer reasoning content sync 使用 `sequence` 做展示顺序。canonical `sequence` 表示 Item
|
||||
最新更新事件,`ordinal` 才是稳定创建位置,因此 reasoning 在完成时被移到正文之后。
|
||||
|
||||
## Codex 对齐与实现
|
||||
|
||||
Codex App Server 的每个 ThreadItem 有稳定独立 identity,生命周期为
|
||||
`item/started -> deltas -> item/completed`;completion 只更新原 Item,不创建新的时间线位置。
|
||||
|
||||
本刀保持两层唯一 owner:
|
||||
|
||||
```text
|
||||
App Server materializer
|
||||
-> family-scoped Item identity
|
||||
-> canonical sequence(最新更新)+ ordinal(稳定位置)
|
||||
-> agentSession/read / canonical notification
|
||||
-> Renderer reasoning sync 读取 ordinal
|
||||
-> StreamingRenderer interleaved timeline
|
||||
```
|
||||
|
||||
- 非 approval Item 不再读取 `requestId/request_id` 作为 identity;approval 继续以 request identity
|
||||
表达用户决策请求。
|
||||
- `AgentThreadItem` 显式携带可选 `ordinal`;canonical live event reader 保留该字段。
|
||||
- reasoning 与 tool 的 interleaved display position 优先使用 ordinal;非 canonical/旧数据缺失
|
||||
ordinal 时才使用原 sequence。
|
||||
- 没有修改 CSS、没有强行把 thinking prepend、没有新增 renderer 排序状态机,也没有生产 mock。
|
||||
|
||||
## 回归与静态验证
|
||||
|
||||
```text
|
||||
npx vitest run \
|
||||
src/components/agent/chat/hooks/agentStreamReasoningContentSync.unit.test.ts \
|
||||
src/components/agent/chat/components/StreamingRenderer.webSearch.sequence.test.tsx \
|
||||
src/components/agent/chat/hooks/agentStreamRuntimeHandler.test.ts \
|
||||
src/lib/api/agentRuntime/appServerCanonicalItemReader.test.ts \
|
||||
src/lib/api/agentRuntime/appServerCanonicalItemProjection.test.ts
|
||||
结果:5 files / 33 tests passed。
|
||||
|
||||
npm run typecheck
|
||||
结果:passed。
|
||||
|
||||
npx eslint <changed TS files>
|
||||
结果:passed。
|
||||
|
||||
npm run test:rust:unit -- \
|
||||
-p app-server request_id_does_not_collapse_user_agent_and_reasoning_items
|
||||
结果:1 passed;1076 filtered out。
|
||||
|
||||
cargo build --manifest-path lime-rs/Cargo.toml -p app-server --bin app-server
|
||||
结果:passed。
|
||||
|
||||
npm run verify:gui-smoke
|
||||
结果:passed;Renderer、Host/preload、App Server 1.102.0、Claw shell、memory settings ready。
|
||||
|
||||
git diff --check -- <本刀窄写集>
|
||||
结果:passed。
|
||||
```
|
||||
|
||||
聚合 `npm run smoke:agent-runtime-current-fixture` 已通过 history、stream、首页普通/短问候、
|
||||
Coding、两种图片、停止继续、四种 approval、rich draft 与三种 queue/hydrate 场景;随后既知
|
||||
`plan-history-hydrate` 因 `revisionId/revisionSource` 为空失败。计划正文、三步计划和确认面板均已
|
||||
可见,该失败未经过本刀文件,不覆盖为通过。
|
||||
|
||||
## Gate B
|
||||
|
||||
最终 live Provider 会话:
|
||||
|
||||
```text
|
||||
Electron CDP: http://127.0.0.1:9223
|
||||
page: http://127.0.0.1:1420/?nativeStartup=1
|
||||
session: sess_8a7772167ed84335ae7563b8d186a931
|
||||
turn: cb6edb6b-e827-4361-986e-99d9fbd20b22
|
||||
```
|
||||
|
||||
- `window.__LIME_ELECTRON__ === true`;preload `electronAPI.invoke` 存在。
|
||||
- EventLog:`turn.accepted` 的 source 为 `agentSession/turn/start`;reasoning 从 sequence `6`
|
||||
开始,正文从 `133` 开始,reasoning 到 `160` 才 terminal,turn 在 `161` completed。
|
||||
- GUI:assistant renderer signature 为 `thinking#6|text#134`;DOM 第一子项是 reasoning,第二项
|
||||
是最终正文;console error `0`,composer 恢复。
|
||||
- `agentSession/read` 返回 completed session 和两条 user/assistant message;同一 turn 的
|
||||
canonical Item 为:
|
||||
|
||||
```text
|
||||
user_message id=item_user-<turn> sequence=1 ordinal=1
|
||||
reasoning id=item_reasoning-<turn> sequence=160 ordinal=6 completed
|
||||
agent_message id=item_agent-<turn> sequence=156 ordinal=133
|
||||
```
|
||||
|
||||
这份证据覆盖真实 Electron、preload/IPC、`app_server_handle_json_lines`、App Server JSON-RPC、
|
||||
live provider、RuntimeCore、canonical ThreadItem/read model 与用户可见 DOM,不依赖 fixture backend。
|
||||
|
||||
## 剩余 concern
|
||||
|
||||
identity 拆开后,canonical user/agent message Item 在 turn completed 后仍为 `in_progress`,说明
|
||||
runtime 尚未完整发出 Codex 式 `message/item.completed` 生命周期。当前 turn terminal、GUI 输入恢复
|
||||
和 reasoning 顺序均正确;本刀没有用 turn completed 猜测所有 Item 终态。下一刀应在 runtime
|
||||
canonical item lifecycle owner 补真实 item completion,并增加 live/hydrate 一致性回归。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:App Server canonical materializer、ThreadItem ordinal/sequence、Renderer reasoning sync。
|
||||
- `compat`:本刀未新增、未依赖。
|
||||
- `deprecated`:本刀未新增。
|
||||
- `dead`:把 turn `request_id` 当成所有 Item identity、把 latest sequence 当展示位置的假设已移除。
|
||||
|
||||
请求问题完成度:`100%`。Refactor v2 全局仍为 `in_progress`;下一刀回到 canonical message
|
||||
lifecycle 与既有 plan revision hydrate blocker。
|
||||
@@ -0,0 +1,57 @@
|
||||
# S5 Agent Runtime Clean Owner Follow-up
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
9 个 Agent Chat consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel 迁到各自
|
||||
唯一 current owner:5 个 DTO consumer 直连 `sessionTypes`,2 个 session update consumer
|
||||
直连 `sessionClient`,replayed action 类型直连 `requestTypes`,title 生成行为直连
|
||||
`agentClient`。本切片只改变 import owner,不改变类型、调用参数、运行时行为或 provider
|
||||
lowering。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/agentSessionTimelineMergePolicy.ts`
|
||||
- `hooks/agentSilentTurnRecovery.ts`
|
||||
- `hooks/sessionHistoryMergeController.ts`
|
||||
- `workspace/imageCommandIntent.ts`
|
||||
- `workspace/imageWorkbenchTaskActions.ts`
|
||||
- `workspace/useSessionRecentMetadataSyncRuntime.ts`
|
||||
- `workspace/useWorkspaceRightSurfaceHostRuntime.ts`
|
||||
- `hooks/agentChatActionState.ts`
|
||||
- `workspace/useWorkspaceImageWorkbenchCommandActionRuntime.ts`
|
||||
- `sessionTypesCurrentBoundary.test.ts`
|
||||
- `agentRuntimeClientOwnerBoundary.test.ts`
|
||||
|
||||
Active S2m/S7、共享脏的 `useAgentChat`/`WorkspaceConversationScene`、Electron、Rust、
|
||||
App Server protocol 和 provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`sessionTypes`、`sessionClient`、`requestTypes`、`agentClient` 与上述直接
|
||||
consumers。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 9 个 consumer 对 root compat barrel 的直接 import,
|
||||
由两个 current-owner boundary tests 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:2 files / 2 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary tests Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed production write set `git diff --check` passed。
|
||||
- 9 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
- 过滤 test/fixture 后,Agent Chat root compat import consumer 从 52 降到 43。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,因此未升级到 GUI smoke。
|
||||
|
||||
## 下一刀
|
||||
|
||||
剩余 43 个 consumer 以混合 owner 文件为主。后续应逐文件拆到 `sessionTypes`、
|
||||
`agentExecutionRuntime`、`queuedTurn`、`sessionClient`、`threadClient` 与协议 DTO owner;
|
||||
不得通过扩展 root barrel 或新增 compat 包装层规避拆分。
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
# S5 Evidence Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Agent Chat 的 evidence/review 消费者已向唯一 current owner 收敛:
|
||||
|
||||
- DTO、evidence pack、replay、review decision 类型直接来自 `agentRuntime/evidenceTypes`。
|
||||
- evidence export、review template export/save 直接来自 `agentRuntime/exportClient`。
|
||||
- Harness 与 Scene review 测试 mock 同步改为 mock `exportClient`,没有新增 compat wrapper。
|
||||
- Harness tool-inventory fixture 的 DTO 也直接来自 `toolInventoryTypes`。
|
||||
|
||||
本切片只改变 TypeScript import owner 和测试 mock 边界,不改变 export payload、review request、MCP/浏览器 evidence
|
||||
展示或 GUI 交互行为。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`evidenceTypes.ts`、`exportClient.ts` 及其直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 Agent Chat consumer,本切片不扩展它。
|
||||
- `deprecated`:无新增。
|
||||
- `dead`:本切片没有物理删除 surface;迁出的 evidence/review root import 受 boundary guard 禁止回流。
|
||||
|
||||
## 写集与避让
|
||||
|
||||
本切片改动 19 个干净的 evidence/review 组件、selector、workspace hook、工具和测试 fixture,新增
|
||||
`evidenceCurrentBoundary.test.ts`。
|
||||
|
||||
没有触碰:`AgentChatWorkspace.tsx`、S6n raw subagent type/package/fixture 写集、脏的 HarnessStatus
|
||||
实现/投影/i18n、Electron、App Server protocol/runtime、Rust 或生成 schema。
|
||||
|
||||
## 验证
|
||||
|
||||
- isolated evidence/Scene tests:4 files / 18 tests passed。
|
||||
- Harness/Expert/curated regressions:9 files / 66 tests passed。
|
||||
- 精确写集 ESLint:passed。
|
||||
- 精确写集 Prettier check:passed。
|
||||
- `npm run typecheck`:passed。
|
||||
- `npm run governance:legacy-report`:零引用候选 0、分类漂移 0、边界违规 0。
|
||||
- claimed write set `git diff --check`:passed。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,未升级到 GUI smoke;S5/S6 聚合仍需 coordinator 在
|
||||
并行写集合并后执行。
|
||||
|
||||
## 下一刀
|
||||
|
||||
共享工作树当前有 165 个 Agent Chat root-barrel 直接 import。继续按 session/stream、tool inventory、evidence
|
||||
等明确领域迁移;legacy roster DTO 与 team-memory child/sibling shadow 仍需等待 S6n handoff 和
|
||||
`AgentChatWorkspace.tsx` 写窗口。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# S5 Execution Strategy Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
5 个干净的 Agent Chat execution-strategy consumer 已从
|
||||
`@/lib/api/agentRuntime` compat 根 barrel 迁到唯一 current owner
|
||||
`@/lib/api/agentExecutionRuntime`。本切片只改变 TypeScript 类型 import owner,
|
||||
不改变 runtime lowering、发送策略或 UI 行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `commands/types.ts`
|
||||
- `skill-selection/runtimeInputCapabilityCatalog.ts`
|
||||
- `utils/agentRuntimeStatus.ts`
|
||||
- `utils/chatToolPreferences.ts`
|
||||
- `hooks/agentChatStorage.ts`
|
||||
- `utils/executionStrategyCurrentBoundary.test.ts`
|
||||
|
||||
S6r Inputbar/MessageList/scene、provider stream/send、AgentChatWorkspace、Electron、Rust 与协议均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/agentExecutionRuntime.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 5 个 consumer 对 root compat barrel 的直接 import,受 boundary test 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:1 file / 1 test passed。
|
||||
- exact-set ESLint passed。
|
||||
- exact-set Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift / 0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
|
||||
共享工作树中的 Agent Chat 精确 root import 计数从此前 159 降到 151;其中本轮归属 5 个,
|
||||
另外 3 个由并行 S6r 迁出,不归入本 slice。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按领域迁出剩余 151 个 root-barrel consumer;优先选择干净的 queued-turn、thread-read 或
|
||||
session-detail 类型 consumer,并避让仍在进行的 S6r 与 provider/session 热区。
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
# S5 Execution Strategy Stream Follow-up
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
8 个 Agent Chat stream/session controller consumer 已从
|
||||
`@/lib/api/agentRuntime` compat 根 barrel 迁到唯一 current owner
|
||||
`@/lib/api/agentExecutionRuntime`。本切片只改变 `AgentExecutionStrategy`
|
||||
类型 import owner,不改变 stream、queue、session finalize 或 metadata sync 行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/agentStreamEventProcessorAuxiliary.ts`
|
||||
- `hooks/agentStreamQueueController.ts`
|
||||
- `hooks/agentStreamRuntimeStatusController.ts`
|
||||
- `hooks/agentStreamSubmitContext.ts`
|
||||
- `hooks/agentStreamSubmitDraft.ts`
|
||||
- `hooks/sessionFinalizeController.ts`
|
||||
- `hooks/sessionMetadataSyncController.ts`
|
||||
- `hooks/useAgentContext.ts`
|
||||
- `utils/executionStrategyCurrentBoundary.test.ts`
|
||||
|
||||
Active S2l history repair、S6s session roster contract、Electron、Rust、App Server protocol
|
||||
和 provider stream 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/agentExecutionRuntime.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展后的 `executionStrategyCurrentBoundary.test.ts` 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:1 file / 1 test passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary test Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
- 8 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
|
||||
共享树同时有 S6s session roster owner 工作,因此全局 root-barrel 计数仅作共享状态;
|
||||
本切片归属固定为上述 8 个生产文件。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按 current owner 迁出剩余 Agent Chat root-barrel consumers;优先选择不与 S2l/S6s
|
||||
重叠的 queued-turn 或 execution-strategy 纯 import consumer。S6s 完成后回到 canonical
|
||||
Thread parent identity,物理删除剩余 parent-context contract。
|
||||
@@ -0,0 +1,58 @@
|
||||
# S5 Low-risk Mixed Owner Follow-up
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
8 个 Agent Chat consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel 拆到
|
||||
`agentExecutionRuntime`、`sessionTypes`、`queuedTurn`、`sessionClient` 与
|
||||
`@limecloud/app-server-client` current owners。`RuntimeSearchMode` 不再经 Lime compat
|
||||
barrel 转发;session update 行为与 thread-read DTO 也分别直连行为/类型 owner。
|
||||
|
||||
本切片只改变 imports,不改变类型 identity、发送、恢复、工作台行为或 provider
|
||||
lowering。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/handleSendTypes.ts`
|
||||
- `hooks/agentStreamPreparedSendEnv.ts`
|
||||
- `hooks/agentStreamRuntimeHandlerTypes.ts`
|
||||
- `workspace/workspaceConversationCodingViews.tsx`
|
||||
- `hooks/agentSessionTopicViewModel.ts`
|
||||
- `utils/submitOpRuntimeCompaction.ts`
|
||||
- `hooks/agentStreamUserInputSendPreparation.ts`
|
||||
- `workspace/useWorkspaceArticleEditorRightSurfaceRuntime.ts`
|
||||
- execution、queue、session、client 与 RuntimeSearchMode 共 5 个 boundary tests
|
||||
|
||||
Active S2m/S7、共享脏 root consumers、未跟踪 S6 navigation 文件、Electron、Rust、
|
||||
App Server protocol 和 provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:上述 direct owners 与 8 个直接 consumers。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展/新增的 5 个 boundary tests 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:5 files / 5 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary tests Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed production write set `git diff --check` passed。
|
||||
- 生产文件 diff 分别为 5 个 `2/2`、2 个 `2/4`、1 个 `1/1`,
|
||||
并通过 production import-only diff review。
|
||||
- 过滤 test/fixture 后,Agent Chat root compat import consumer 从 35 降到 27。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,因此未升级到 GUI smoke。
|
||||
|
||||
## 下一刀
|
||||
|
||||
剩余 5 个 clean consumer 都是三-owner stream 类型组合:`agentChatShared.ts`、
|
||||
`agentStreamResumeBinding.ts`、`agentStreamTurnEventBinding.ts`、`useAgentStream.ts` 与
|
||||
`buildUserInputSubmitOp.ts`。应在独立切片一次拆到 execution/session/queue/search owner;
|
||||
其余 22 个 root consumer 等待并行 owner 释放。
|
||||
@@ -0,0 +1,54 @@
|
||||
# S5 Mixed Owner Follow-up
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
8 个 Agent Chat 双符号 consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel 拆到
|
||||
唯一 current owners:`agentExecutionRuntime`、`queuedTurn`、`sessionTypes`、
|
||||
`evidenceTypes` 与 `toolInventoryTypes`。本切片只拆分 type import,不改变类型 identity、
|
||||
运行时行为、消息投影或 provider lowering。
|
||||
|
||||
## 写集
|
||||
|
||||
- `components/Inputbar/components/InputbarComposerSection.tsx`
|
||||
- `components/Inputbar/index.tsx`
|
||||
- `components/harnessStatusPanelSummary.ts`
|
||||
- `hooks/agentSessionRefresh.ts`
|
||||
- `hooks/agentStreamReadModelParsing.ts`
|
||||
- `hooks/agentStreamRequestStartController.ts`
|
||||
- `hooks/agentStreamSend.ts`
|
||||
- `utils/importedSourceProcess.ts`
|
||||
- execution runtime、queued turn、session types、evidence 与 tool inventory 共 5 个
|
||||
current-owner boundary tests
|
||||
|
||||
Active S2m/S7、22 个共享脏 root consumer、Electron、Rust、App Server protocol 和
|
||||
provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:上述 5 个 direct owner modules 与 8 个直接 consumers。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展后的 5 个 boundary tests 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:5 files / 7 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary tests Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed production write set `git diff --check` passed。
|
||||
- 8 个生产文件 `git diff --numstat` 均为 `2 4`,并通过 production import-only diff review。
|
||||
- 过滤 test/fixture 后,Agent Chat root compat import consumer 从 43 降到 35。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,因此未升级到 GUI smoke。
|
||||
|
||||
## 下一刀
|
||||
|
||||
剩余 35 个 consumer 中,本轮审计时 22 个已脏、13 个仍 clean。下一组继续选择 clean
|
||||
双/三 owner consumer,拆到 direct owner 并扩展相应守卫;已脏文件等待当前 owner 释放,
|
||||
不得夹写。
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
# S5 Queued Turn Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
6 个 Agent Chat queued-turn consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel
|
||||
迁到 DTO 唯一 current owner `@/lib/api/queuedTurn`。本切片只改变
|
||||
`QueuedTurnSnapshot` 类型 import owner,不改变队列排序、恢复计划、提升/移除动作或 Inputbar UI。
|
||||
|
||||
## 写集
|
||||
|
||||
- `agentStreamInputRestorePlan.ts`
|
||||
- `agentStreamInputRestoreTypes.ts`
|
||||
- `agentQueuedTurnProjection.ts` 及 unit test
|
||||
- `InputbarCore.tsx`
|
||||
- `QueuedTurnsPanel.tsx`
|
||||
- `queuedTurnCurrentBoundary.test.ts`
|
||||
|
||||
S6r Inputbar runtime/MessageList/scene、provider stream 执行、AgentChatWorkspace、Electron、Rust 与协议均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/queuedTurn.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 6 个 consumer 对 root compat barrel 的直接 import,受 boundary test 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:2 files / 4 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- exact-set Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift / 0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
|
||||
验证时共享工作树的 Agent Chat 精确 root import 计数为 146;并行 S6r 同时在迁移其他 consumer,
|
||||
因此全局净变化只作为共享状态记录,本轮归属固定为上述 6 个文件。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按 queued-turn/session/thread-read 领域迁出剩余 root-barrel consumer;session roster DTO 的物理删除
|
||||
应等待 S6r 释放 MessageList/scene/deferral 写集后再进行。
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
# S5 Session Types Current Owner Follow-up
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
8 个 Agent Chat session/read DTO consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel
|
||||
迁到唯一 current owner `@/lib/api/agentRuntime/sessionTypes`。本切片只改变
|
||||
`AutoContinueRequestPayload`、`AgentSessionDetail` 和
|
||||
`AgentRuntimeFileCheckpointThreadSummary` 的类型 import owner,不改变发送、恢复或工作台行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `components/Inputbar/inputbarSendPayload.ts`
|
||||
- `utils/sessionExecutionRuntime.ts`
|
||||
- `workspace/CodingWorkbenchOutputPanel.tsx`
|
||||
- `workspace/codingWorkbenchRecovery.ts`
|
||||
- `workspace/knowledge/useWorkspaceKnowledgeRuntime.ts`
|
||||
- `workspace/useWorkspaceCanvasWorkflowActions.ts`
|
||||
- `workspace/workspaceConversationSessionViewModel.ts`
|
||||
- `workspace/workspaceConversationWorkbenchViewModel.ts`
|
||||
- `sessionTypesCurrentBoundary.test.ts`
|
||||
|
||||
Active S2l/S7、共享脏的 `useAgentChat`/`WorkspaceConversationScene`、Electron、Rust、
|
||||
App Server protocol 和 provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/agentRuntime/sessionTypes.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由 `sessionTypesCurrentBoundary.test.ts` 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:1 file / 1 test passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary test Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
- 8 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按 `sessionTypes`、`agentExecutionRuntime` 与 `queuedTurn` owner 迁出剩余 root-barrel
|
||||
consumer;优先选择 clean 单 owner 文件,避让 S2l history repair、S7 refinement 和共享脏区。
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
# S5 Session Types History Follow-up
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
8 个 Agent Chat history helper 已从 `@/lib/api/agentRuntime` compat 根 barrel
|
||||
迁到唯一 current owner `@/lib/api/agentRuntime/sessionTypes`。本切片只改变
|
||||
`AgentSessionDetail` 的类型 import owner,不改变历史 hydration、timeline merge、artifact、
|
||||
read model 或 token usage 行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/agentChatHistoryArtifacts.ts`
|
||||
- `hooks/agentChatHistoryHydrate.ts`
|
||||
- `hooks/agentChatHistoryNormalize.ts`
|
||||
- `hooks/agentChatHistoryReadModel.ts`
|
||||
- `hooks/agentChatHistoryTimelineBasics.ts`
|
||||
- `hooks/agentChatHistoryTimelineMerge.ts`
|
||||
- `hooks/agentChatHistoryTypes.ts`
|
||||
- `hooks/agentChatHistoryUsage.ts`
|
||||
- `sessionTypesCurrentBoundary.test.ts`
|
||||
|
||||
Active S2l 拥有的 `agentChatHistoryThreadItems.ts`、S7、共享脏的
|
||||
`useAgentChat`/`WorkspaceConversationScene`、Electron、Rust、App Server protocol 和
|
||||
provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/agentRuntime/sessionTypes.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展后的 `sessionTypesCurrentBoundary.test.ts` 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:1 file / 1 test passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary test Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed production write set `git diff --check` passed。
|
||||
- 8 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
- 过滤 test/fixture 后,Agent Chat root compat import consumer 从 60 降到 52。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,因此未升级到 GUI smoke;后续
|
||||
Refactor V2 聚合门禁仍由 coordinator 在 active S2l/S7 写集稳定后执行。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续迁出剩余 13 个 clean `sessionTypes` consumer,随后处理 `sessionClient`、
|
||||
`requestTypes` 与 `agentClient` 单 owner consumer;混合 owner 文件需要独立窄切片,
|
||||
不得为减少 diff 继续依赖 compat 根 barrel。
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
# S5 Skill Bindings Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Workspace skill-binding metadata 与读取 consumer 已从 Agent Runtime 聚合入口迁到明确 owner:
|
||||
|
||||
- `AgentRuntimeWorkspaceSkillBinding` 直接来自 `agentRuntime/toolInventoryTypes`。
|
||||
- `listWorkspaceSkillBindings` 直接来自 `agentRuntime/inventoryClient`。
|
||||
- `skillBindingsCurrentBoundary.test.ts` 同时禁止回绕 `agentRuntime` 根入口与 `agentRuntime/types` 聚合入口。
|
||||
|
||||
本切片不改变 binding request、runtime enable metadata、Harness request metadata 或 React hook 行为。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`toolInventoryTypes.ts`、`inventoryClient.ts` 与直接消费者。
|
||||
- `compat`:Agent Runtime 根入口和 `types` 聚合入口仍服务尚未迁出的 consumer,本切片不扩展它们。
|
||||
- `deprecated`:无新增。
|
||||
- `dead`:已迁出的 skill-binding 聚合 import 对本领域为禁止回流;没有物理删除文件。
|
||||
|
||||
## 写集与避让
|
||||
|
||||
改动 `workspaceSkillBindingsMetadata`、`harnessRequestMetadata`、Workspace Harness metadata runtime、
|
||||
Workspace skill-binding read hook 及对应 tests,新增一条 boundary guard。
|
||||
|
||||
没有触碰 S6n、AgentChatWorkspace、`useWorkspaceSendActions`、stream/send 热区、协议、Rust 或 Electron。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:4 files / 29 tests passed。
|
||||
- 精确写集 ESLint:passed。
|
||||
- 精确写集 Prettier check:passed。
|
||||
- `npm run typecheck`:passed。
|
||||
- `npm run governance:legacy-report`:零引用候选 0、分类漂移 0、边界违规 0。
|
||||
- claimed write set `git diff --check`:passed。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,未升级到 GUI smoke。
|
||||
|
||||
## 下一刀
|
||||
|
||||
共享工作树当前有 159 个 Agent Chat root-barrel 精确 import。可继续迁出干净的 session/thread、queued-turn
|
||||
或 execution-strategy consumer;legacy roster DTO 仍等待 S6n handoff 和 AgentChatWorkspace 写窗口。
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
# S5 Stream Runtime Current Owner Follow-up
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
2 个 queued-turn consumer 已从 `@/lib/api/agentRuntime` compat 根 barrel 迁到
|
||||
`@/lib/api/queuedTurn`;6 个 execution runtime consumer 已迁到
|
||||
`@/lib/api/agentExecutionRuntime`。本切片只改变 TypeScript 类型 import owner,
|
||||
不改变 stream lifecycle、access mode、tool preference 或 Workspace 行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/agentStreamFlowControl.ts`
|
||||
- `hooks/agentStreamSubmissionLifecycle.ts`
|
||||
- `components/Inputbar/components/InputbarModelExtra.tsx`
|
||||
- `hooks/agentStreamRuntimeContextController.ts`
|
||||
- `hooks/agentStreamRuntimeHandlerActions.ts`
|
||||
- `utils/accessModeRuntime.ts`
|
||||
- `utils/submitOpToolPreferenceCompaction.ts`
|
||||
- `workspace/useWorkspaceChatToolPreferencesRuntime.ts`
|
||||
- `hooks/queuedTurnCurrentBoundary.test.ts`
|
||||
- `utils/executionStrategyCurrentBoundary.test.ts`
|
||||
|
||||
S2l/S7 active files、S6 roster/canonical family、Electron、Rust、App Server protocol 和
|
||||
provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/queuedTurn.ts`、`src/lib/api/agentExecutionRuntime.ts`
|
||||
与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 8 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展后的两个 boundary tests 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:2 files / 2 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary tests Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
- 8 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按 current owner 迁出剩余 Agent Chat root-barrel consumers;优先选择干净的
|
||||
queued-turn/execution-runtime consumer,避让 S2l history repair、S7 refinement 与共享脏文件。
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# S5 Thread Read UI Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
5 个 Agent Chat UI `AgentRuntimeThreadReadModel` consumer 已从
|
||||
`@/lib/api/agentRuntime` compat 根 barrel 迁到唯一 current owner
|
||||
`@/lib/api/agentRuntime/sessionTypes`。本切片只改变 TypeScript 类型 import owner,
|
||||
不改变 Thread/Turn/Item read model identity、投影行为或 UI 行为。
|
||||
|
||||
## 写集
|
||||
|
||||
- `components/MessageTimelineSection.tsx`
|
||||
- `components/useMessageListTelemetry.ts`
|
||||
- `components/MessageListItem.tsx`
|
||||
- `components/AgentThreadTimeline.tsx`
|
||||
- `components/generalWorkbenchRunControlSurfaceViewModel.ts`
|
||||
- `components/threadReadCurrentBoundary.test.ts`
|
||||
|
||||
S6r Inputbar/MessageList/scene/deferral、S2l history repair、provider stream/send、
|
||||
AgentChatWorkspace、Electron、Rust 与协议均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/agentRuntime/sessionTypes.ts` 与上述直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 consumer,本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 5 个 consumer 对 root compat barrel 的直接 import,
|
||||
受 `threadReadCurrentBoundary.test.ts` 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:1 file / 1 test passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary test Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
- 5 个生产文件 `git diff --numstat` 均为 `1 1`,并通过 production import-only diff review。
|
||||
|
||||
共享工作树仍有其他 S5/S6 进程迁移 Agent Chat root-barrel consumers;全局计数受并行写入影响,
|
||||
本切片归属固定为上述 5 个生产文件,不以全局净变化替代精确写集证据。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按领域迁出剩余 Agent Chat root-barrel consumers;session roster DTO 的物理删除应等待
|
||||
S6r 释放 Inputbar/MessageList/scene/deferral 写集后再进行。随后回到 S6 legacy session roster
|
||||
contract retirement 与最终 S7/`verify:local` 审计。
|
||||
@@ -0,0 +1,57 @@
|
||||
# S5 Three-owner Follow-up
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
最后 5 个 clean Agent Chat root compat consumers 已从 `@/lib/api/agentRuntime` 拆到
|
||||
`agentExecutionRuntime`、`sessionTypes`、`queuedTurn` 与
|
||||
`@limecloud/app-server-client` current owners。S5 当前可安全修改的 clean backlog 已清空;
|
||||
剩余 22 个生产 root imports 全部已脏或未跟踪,归并行 owner 持有。
|
||||
|
||||
本切片只改变 type imports,不改变 stream、send、resume、message projection 或 provider
|
||||
lowering。
|
||||
|
||||
## 写集
|
||||
|
||||
- `hooks/agentChatShared.ts`
|
||||
- `hooks/agentStreamResumeBinding.ts`
|
||||
- `hooks/agentStreamTurnEventBinding.ts`
|
||||
- `hooks/useAgentStream.ts`
|
||||
- `utils/buildUserInputSubmitOp.ts`
|
||||
- execution、queue、session 与 RuntimeSearchMode 共 4 个 boundary tests
|
||||
|
||||
Active S2m/S7、22 个共享脏/未跟踪 root consumers、Electron、Rust、App Server protocol
|
||||
和 provider 行为均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:execution/session/queue/app-server protocol direct owners 与上述 consumers。
|
||||
- `compat`:`agentRuntime` package root 仍被 22 个并行脏 consumer 使用;本轮不扩展它。
|
||||
- `dead / retired guard-only`:上述 5 个 consumer 对 root compat barrel 的直接 import,
|
||||
由扩展后的 4 个 boundary tests 防回流。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused boundary Vitest:4 files / 4 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- boundary tests Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed production write set `git diff --check` passed。
|
||||
- 生产文件 diff 为 3 个 `3/3` 与 2 个 `4/2`,并通过 import-only diff review。
|
||||
- 过滤 test/fixture 后,Agent Chat root compat import consumer 从 27 降到 22。
|
||||
|
||||
本切片没有用户可见、Bridge、协议或 GUI 行为变化,因此未升级到 GUI smoke。
|
||||
|
||||
## 剩余阻塞
|
||||
|
||||
剩余 root imports 位于 Harness/Task Rail/MessageList、session/adapter、S2m history、
|
||||
Workspace scene/send/navigation 等共享脏区。它们必须等待各自 owner 释放后继续迁移;当前
|
||||
进程不夹写,也不通过扩展 root barrel 增加 compat。
|
||||
|
||||
## 下一刀
|
||||
|
||||
回到 S7 refinement 行政 closeout与 S2m handoff;S5 下一轮只在 22 个文件释放后恢复。
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# S5 Tool Inventory Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Agent Chat 的 11 个 tool-inventory 生产消费者不再从 `@/lib/api/agentRuntime`
|
||||
compat 根 barrel 读取 DTO 或行为。DTO 直接归
|
||||
`agentRuntime/toolInventoryTypes`,库存读取直接归
|
||||
`agentRuntime/inventoryClient`;专用 hook 测试也改为 mock current owner。
|
||||
|
||||
本切片不改变 tool inventory request、DTO shape、MCP prepare/call proof 或 GUI 展示行为,
|
||||
只收敛 import owner,并用 `toolInventoryCurrentBoundary.test.ts` 阻止这些消费者回绕 compat 根入口。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`toolInventoryTypes.ts`、`inventoryClient.ts` 及直接消费者。
|
||||
- `compat`:`agentRuntime` package root 仍服务尚未迁出的 Agent Chat consumer,本切片不扩展它。
|
||||
- `deprecated`:无新增。
|
||||
- `dead`:本切片没有物理删除 surface;已迁出的 11 个 root-barrel import 对该领域为禁止回流。
|
||||
|
||||
## 写集
|
||||
|
||||
- 6 个 Harness tool-inventory 展示组件。
|
||||
- `useHarnessToolInventoryModel.ts` 与 `harnessToolInventoryViewModel.ts`。
|
||||
- `runtimeToolAvailability.ts` 及其单测。
|
||||
- `useWorkspaceHarnessInventoryRuntime.ts` 及其单测。
|
||||
- `toolInventoryCurrentBoundary.test.ts`。
|
||||
|
||||
`AgentChatWorkspace.tsx`、脏的 `index.testFixtures.tsx`、S6n Harness/status/projection/i18n
|
||||
写集、Electron、Rust 与协议文件均未触碰。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:3 files / 16 tests passed。
|
||||
- `src/components/agent/chat/index.test.tsx`:16/16 passed。
|
||||
- 精确写集 ESLint:passed。
|
||||
- 精确写集 Prettier check:passed。
|
||||
- `npm run typecheck`:passed。
|
||||
- `npm run governance:legacy-report`:零引用候选 0、分类漂移 0、边界违规 0。
|
||||
- claimed write set `git diff --check`:passed。
|
||||
|
||||
本切片无用户可见、Bridge、协议或 GUI 行为变化,未升级到 GUI smoke;S5/S6 最终聚合仍需由
|
||||
coordinator 在并行写集合并后执行。
|
||||
|
||||
## 下一刀
|
||||
|
||||
共享工作树当前仍有 183 个 Agent Chat root-barrel 直接 import。继续按领域迁到明确 current owner;
|
||||
legacy roster DTO 与 team-memory child/sibling shadow 应等待 S6n handoff 和
|
||||
`AgentChatWorkspace.tsx` 写窗口后独立收口。
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
# S5g Managed Objective Current Owner Migration
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Managed Objective 的 7 个 DTO consumer、4 个行为 consumer 与 4 个测试 mock 已从
|
||||
`@/lib/api/agentRuntime` compat 根 barrel 迁到唯一 current owner:DTO 直连
|
||||
`agentRuntime/sessionTypes`,行为与 mock 直连 `agentRuntime/objectiveClient`。
|
||||
|
||||
本切片只改变 TypeScript import/mock owner,没有改变 Objective 请求、协议、状态转换、
|
||||
UI 文案或 App Server 行为。两个 `agentStreamSubmitExecution` 文件仍从根 barrel 读取本切片
|
||||
之外的 runtime 类型;其 Objective 行为已独立直连 `objectiveClient`,未越权迁移无关类型。
|
||||
|
||||
## 写集
|
||||
|
||||
- `InputbarObjectiveInlinePanel.tsx` 及其测试
|
||||
- `useInputbarSend.ts` 及其测试
|
||||
- `ManagedObjectiveAuditSummary.tsx`
|
||||
- `ManagedObjectiveCurrentView.tsx`
|
||||
- `ManagedObjectivePanel.tsx` 及其测试
|
||||
- `managedObjectivePanelModel.ts`
|
||||
- `agentStreamSubmitExecution.ts` 及其测试
|
||||
- `managedObjectiveCurrentBoundary.test.ts`
|
||||
|
||||
`sessionTypes.ts`、`objectiveClient.ts` 与根 barrel 只读;协议、App Server、Electron、i18n、
|
||||
中央执行计划及并行 slice 均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`agentRuntime/sessionTypes`、`agentRuntime/objectiveClient` 与上述直接 consumer/mock。
|
||||
- `compat`:根 `agentRuntime` barrel 继续服务未迁出的其它领域类型,本轮不扩展它。
|
||||
- `deprecated`:无新增。
|
||||
- `dead / retired guard-only`:本写集内的 Managed Objective 根 barrel import/mock;
|
||||
`managedObjectiveCurrentBoundary.test.ts` 阻止其回流。
|
||||
|
||||
## 守卫
|
||||
|
||||
新增边界测试分别约束:
|
||||
|
||||
- Managed Objective DTO consumer 必须直连 `sessionTypes`。
|
||||
- Managed Objective 行为 consumer 必须直连 `objectiveClient`。
|
||||
- Objective 测试必须 mock `objectiveClient`,不得 mock/importActual 根 barrel,避免落到真实
|
||||
`AppServerClient`。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:5 files / 32 tests passed。
|
||||
- exact-set ESLint:12 files passed,`--max-warnings 0`。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续按领域迁出根 `agentRuntime` barrel 的剩余 consumer;优先选择同一 current owner 已明确、
|
||||
且不与活跃 Rust/history 或 GUI 热区重叠的 session DTO / client 切片。
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
# S6i dead Team formation / preview evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
发送前的 Renderer Team formation 与 dispatch preview 已删除。旧链路按输入长度/正则和
|
||||
selected Team 直接生成 `formed`,再伪造成员 AgentUI event、user/assistant 消息和 layout
|
||||
preview;它既不执行真实 spawn,也不来自 canonical Thread/Turn/Item,是第二事实源。
|
||||
|
||||
current 链保持:
|
||||
|
||||
```text
|
||||
用户发送
|
||||
-> App Server / RuntimeCore current turn
|
||||
-> AgentControl spawn/send/followup/interrupt
|
||||
-> canonical Collab/SubAgent ThreadItem
|
||||
-> GUI timeline / child Thread navigation
|
||||
```
|
||||
|
||||
## 删除范围
|
||||
|
||||
- 删除 `useRuntimeTeamFormation` 及 40 字符/正则编队策略。
|
||||
- 删除 `teamFormationAgentUiProjection` 与虚拟 member/work-board event。
|
||||
- 删除 `runtimeTeamCollaborationCopy` 与 formation preview 文案组装器。
|
||||
- 删除 send path 的 prepare callback、preview state、伪消息和失败回写。
|
||||
- 删除 shell 的 `hasTeamDispatchPreview` 宽度输入和 reset 的 formation 空操作。
|
||||
- 删除对应正向测试,边界测试改为禁止上述符号和物理路径回流。
|
||||
|
||||
本切片涉及 19 个生产/测试文件,scoped diff 为 61 additions / 1801 deletions。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:5 files,188/188。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run governance:legacy-report`:边界违规 0、分类漂移 0、零引用候选 0。
|
||||
- `git diff --check`:收尾执行。
|
||||
|
||||
后续 aggregate Gate:`npm run verify:gui-smoke` 已通过;current fixture 已通过多个真实 Electron
|
||||
场景,最终被 Skills Runtime fixture Provider 鉴权失败阻断。该外部 blocker 不改变本切片删除结论。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:RuntimeCore AgentControl、canonical Collab/SubAgent ThreadItem、GUI timeline 与 child
|
||||
Thread navigation。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:`team-workspace-runtime/**` raw status/stream 第二投影链,下一切片删除。
|
||||
- `dead / deleted / forbidden-to-restore`:本地 formation、虚拟 members、formation projection、
|
||||
dispatch preview 与伪 assistant 消息。
|
||||
|
||||
下一刀:让 `useWorkspaceTeamRuntime` 直接派生标题/可见性并直接调用主输出 stop,随后删除
|
||||
`useTeamWorkspaceRuntime`、`team-workspace-runtime/**` 与 unavailable Team control stubs。
|
||||
@@ -0,0 +1,65 @@
|
||||
# S6j dead Team runtime sidecar evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Renderer 的第二套 Team runtime 已删除。旧链路重复订阅
|
||||
`agent_subagent_status:*` / `agent_subagent_stream:*`,维护本地 runtime、activity、draft、tool、
|
||||
queue map,再把 restored/live facts 写回 `conversationProjectionStore`;这些状态没有通过
|
||||
`useWorkspaceTeamRuntime` 暴露给 GUI,不能继续作为过渡 owner。
|
||||
|
||||
sidecar 删除后的目标 GUI 边界是:
|
||||
|
||||
```text
|
||||
canonical Thread/Turn/Item -> shared projection -> timeline
|
||||
canonical child Thread roster -> workspace visibility and session navigation
|
||||
current main turn owner -> stop
|
||||
```
|
||||
|
||||
## 删除范围
|
||||
|
||||
- 删除 `team-workspace-runtime/**` 的 projector、subscriptions、reconciler 及 tests。
|
||||
- 删除 `useTeamWorkspaceRuntime` 和 restored synthetic status 写入。
|
||||
- 删除 `teamWorkspaceRuntime` 的混合 runtime/activity/summary 状态模型。
|
||||
- 删除 session/control wrappers;close/resume/wait/sendInput unavailable stubs 不再出现在产品路径。
|
||||
- `useWorkspaceTeamRuntime` 只从真实 child sessions、parent context 与工具开关派生标题/可见性,
|
||||
`handleStopSending` 直接委托 current `stopSending`。
|
||||
- 删除五语言无消费者的 liveRuntime/runtimeStatus/control keys 和正向 i18n 测试。
|
||||
- 边界守卫禁止第二 runtime 的路径、hook、subscription 和 live map 回流;该守卫在 S6l 补齐目录级 catalog 后才构成完整回流证据。
|
||||
|
||||
当前共享树的 S6j scoped diff 约为 43 additions / 5478 deletions;与 S6i 共用的 owner/guard
|
||||
文件在完整 diff 中合计为 110 additions / 5508 deletions。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:8 files,56/56,覆盖入口渲染、workspace selector、canonical reader/projection、
|
||||
flow guard 与 i18n。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run i18n:check:json`:五语言、13 namespaces、0 issue。
|
||||
- `npm run governance:legacy-report`:边界违规 0、分类漂移 0、零引用候选 0。
|
||||
- scoped `git diff --check`:通过。
|
||||
- `npm run verify:gui-smoke`:通过;Renderer、Electron Host/preload、真实 App Server sidecar、
|
||||
初始化、Claw shell 与 memory settings 均成功。
|
||||
- `npm run smoke:agent-runtime-current-fixture`:history/stream/guard 与首页、Workbench、图片、
|
||||
cancel/continue、Approval、Inputbar、Plan history 等真实 Electron 场景通过;最终 Skills Runtime
|
||||
fixture Provider 鉴权失败,GUI 正确显示配置错误,命令 exit 1。
|
||||
|
||||
### 2026-07-14 follow-up correction
|
||||
|
||||
- 原 focused 集漏掉 `projectThreadFirstBoundary.test.ts`;该测试仍读取三个已删除文件,独立执行必然 ENOENT,因此 S6j 的 focused 完成口径不完整。
|
||||
- canonical activity 的 `child_thread_id` 当时写入 display item 的 legacy `session_id` 字段并直接传给 `switchTopic`;真实 `thread-*` 与 `agent-*` 不等,原“child ThreadId navigation 保持 current”声明不成立。
|
||||
- S6l 负责通过 current `thread/read` / canonical child roster 解析真实 sessionId,并把 project-thread guard、dead catalog、i18n unused 与可执行 scenario registry 补齐;完成前 S6j 状态应视为 `deletion-complete / navigation-and-guard-followup-active`。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:canonical Thread/Turn/Item reader/projection、timeline 与 current main-turn stop;child navigation/roster 由 S6k/S6l 收口。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:raw `subagent_status_changed` projection、零生产 consumer 的专用 event source、旧
|
||||
roster DTO 仍待后续切片迁出。
|
||||
- `dead / deleted / forbidden-to-restore`:`team-workspace-runtime/**`、本地 live/draft/tool/queue
|
||||
state、restored synthetic facts、Team unavailable controls 和对应 i18n。
|
||||
|
||||
下一刀:在 canonical child Thread summary selector 承接 roster/status 后,删除
|
||||
`subagent_status_changed` projector、零 consumer 的 `listenSubagentStatus/listenSubagentStream` API 与
|
||||
旧 Team/budget DTO 字段;GUI roster 壳继续保留。
|
||||
@@ -0,0 +1,48 @@
|
||||
# S6k canonical child roster evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Renderer Multi-Agent roster/status 已从 legacy `AgentSessionReadResponse.detail` 与 raw Team sidecar 收敛到 canonical Thread owner:
|
||||
|
||||
```text
|
||||
AgentGraphStore + AgentIdentityStore + canonical child Thread lifecycle
|
||||
-> App Server thread/list + thread/read
|
||||
-> canonical child selector/hook
|
||||
-> Workspace / Harness roster and status
|
||||
```
|
||||
|
||||
App Server read/list 在 canonical Thread 上投影 parent ThreadId、agent path/nickname/role、last task message 与七态 agent state;Renderer 按 parent ThreadId 过滤、稳定排序,并对 activity 引用但 list 缺失的 child 显式投影 `notFound`,不回退 raw status 或 mock。
|
||||
|
||||
## 实现范围
|
||||
|
||||
- `ProjectionStore` 的 canonical thread read/list 在读取时 join durable spawn edge 与 agent identity;关闭 edge 投影 `shutdown`,但不擦除 identity。
|
||||
- typed App Server client 接入既有 `thread/list` method;canonical child client 按 cursor 分页收集并只保留目标 parent children。
|
||||
- selector 从 canonical Thread/lifecycle 派生 pendingInit/running/interrupted/completed/errored/shutdown/notFound 与计数。
|
||||
- Workspace、Harness、Runtime strip 消费 canonical children;legacy child session 仅保留尚未迁完的兼容展示输入,不再是 roster owner。
|
||||
- canonical children 同时保留 threadId/sessionId;导航由 S6l 使用 roster sessionId,缺失时走 `thread/read`。
|
||||
|
||||
## 验证
|
||||
|
||||
- canonical client/selector/Workspace focused:15/15。
|
||||
- S6k/S6l 统一 focused:91/91。
|
||||
- `test:related`:33 files 中 256/258 通过;主线相关 stop test 的陈旧 toast 断言已修复并单独 1/1 通过。剩余 `index.autoGuide03.test.tsx` 因 Skills mock 缺 `listExecutableSkills` 失败,与 roster 无关。
|
||||
- Rust 精确:agent state 1/1;canonical read join 3/3。
|
||||
- `cargo check --manifest-path lime-rs/Cargo.toml -p app-server --lib`:通过。
|
||||
- Rust related 扩大到 app-server 1092 tests 后,被无关 `mcp_current_jsonrpc_starts_real_stdio_server_and_reads_tool_resource` stack overflow/SIGABRT 中止;新增测试无失败。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run test:contracts`:290 checks 通过。
|
||||
- `npm run smoke:claw-chat-current-fixture -- --scenario multi-agent-team --timeout-ms 180000`:真实 Electron/App Server、GUI/read model 完成与 Evidence Pack 导出通过。
|
||||
- `npm run verify:gui-smoke`:通过。
|
||||
|
||||
完整 current aggregate 在 Skills Runtime 场景稳定显示外部 Provider 鉴权失败后 exit 1;此前首页、Workbench、图片、cancel/continue、Approval、Inputbar 与 Plan history 均通过。首次 plain-image 运行曾因并发 build 瞬时缺失 `dist/index.html` 失败,稳定资产定向复跑与完整复跑均通过。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:AgentGraph/AgentIdentity、canonical Thread lifecycle、App Server thread/list/read、canonical child selector/roster。
|
||||
- `compat`:真实 legacy child session input 只为未迁完消费者提供展示/直达 sessionId,不承接新状态逻辑。
|
||||
- `deprecated`:raw status refresh/projector 和 legacy roster DTO。
|
||||
- `dead / deleted / forbidden-to-restore`:Renderer Team runtime sidecar、restored synthetic facts、本地 live maps 与 unavailable child controls。
|
||||
|
||||
本切片是既有架构的 current owner 接线,不新增协议 method、Electron 后端、runtime taxonomy、mock 或 fallback;无需修改架构图。
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
# S6l Thread-first SubAgent navigation and guards evidence
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
S6j 的 Team runtime sidecar 删除方向成立,但原完成声明漏了两个产品阻塞:
|
||||
|
||||
1. `projectThreadFirstBoundary.test.ts` 仍读取三个已删除文件,未进入原 focused 集,独立运行必然 ENOENT。
|
||||
2. canonical SubAgent activity 携带真实 child ThreadId,Renderer 却把它直接传给 session navigation;真实 `thread-*` 与 `agent-*` 不等。
|
||||
|
||||
S6l 不恢复 sidecar,也不给 canonical payload 伪造 sessionId。current 身份转换固定为:
|
||||
|
||||
```text
|
||||
canonical activity child ThreadId
|
||||
-> canonical child roster sessionId(已存在时)
|
||||
-> App Server thread/read(turnsView=notLoaded)(缺失时)
|
||||
-> existing session view switchTopic(sessionId)
|
||||
```
|
||||
|
||||
真实 legacy child session list 仍可直接使用其 session id;Thread identity mismatch、空 sessionId 或 read 失败均 fail closed。
|
||||
|
||||
## 实现与守卫
|
||||
|
||||
- `threadClient.ts` 新增 `readThreadSessionId`,复用既有 `thread/read`,严格校验 request/response ThreadId 与非空 sessionId,不新增 method/protocol/Electron bridge。
|
||||
- Workspace navigation helper 区分 canonical child Thread、真实 child session 与缺 roster 的 ThreadId;导航前继续执行 recent metadata defer。
|
||||
- timeline fixture 改为真实不等身份,不再用 `child-session-1` 冒充 canonical ThreadId。
|
||||
- project-thread guard 改守 canonical reader、shared ThreadItem projection、timeline 与 thread/read identity,不再读取 deleted owner。
|
||||
- legacy catalog 新增独立 `dead` monitor,阻止 Team sidecar、restored facts、本地 live maps 与 dead i18n key 回流。
|
||||
- i18n unused 删除 `agentChat.teamWorkspace.control.` protected prefix;可执行 scenario registry 与 current roadmap 不再引用已删目录。
|
||||
|
||||
## 并行协调
|
||||
|
||||
- S6k canonical child roster 独立 claim 拥有 App Server `thread/list`、canonical child selector/hook、Harness roster 与 `AgentChatWorkspace` roster wiring。
|
||||
- S6l 避让这些 owner;S6k 仅把 canonical children/session identity 接入 S6l navigation helper 和 boundary test,保留 S6l 的 fallback/fail-closed contract。
|
||||
- raw `subagent_status_changed` API/projector 与 legacy roster DTO 删除明确不在本切片。
|
||||
|
||||
## 验证
|
||||
|
||||
- thread client/navigation/timeline focused:63/63;追加空 sessionId 负向断言后 client/navigation 49/49。
|
||||
- project-thread guard:10/10。
|
||||
- legacy catalog + scenario registry:213/213。
|
||||
- focused ESLint:通过。
|
||||
- `npm run i18n:check:json`:五语言、13 namespaces、0 issue。
|
||||
- `npm run i18n:unused`:10408 resources、unused 0。
|
||||
- `npm run governance:legacy-report`:边界违规 0、分类漂移 0、零引用候选 0。
|
||||
- `git diff --check`:通过。
|
||||
- S6k/S6l 统一 focused:91/91。
|
||||
- stop direct-owner 回归修正后:1/1。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run test:contracts`:290 checks 通过。
|
||||
- `npm run smoke:claw-chat-current-fixture -- --scenario multi-agent-team --timeout-ms 180000`:真实 Electron/App Server、GUI/read model 与 Evidence Pack 导出通过。
|
||||
- `npm run verify:gui-smoke`:通过。
|
||||
- 完整 current aggregate:首页、Workbench、图片、cancel/continue、Approval、Inputbar 与 Plan history 通过;Skills Runtime 在外部 Provider 鉴权失败提示处 exit 1。首次 plain-image 因并发 build 瞬时缺失 `dist/index.html` 失败,定向和完整稳定复跑均通过。
|
||||
- `test:related`:256/258;本主线 stop test 已修复并 1/1,剩余失败为无关 Skills mock 缺 `listExecutableSkills`。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:canonical Thread/Turn/Item、canonical child roster、`thread/read` identity resolution、timeline 与 existing session view。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:raw status refresh/projector 与 legacy roster DTO,下一窄切片迁出。
|
||||
- `dead / deleted / forbidden-to-restore`:Renderer Team sidecar、restored synthetic facts、本地 live/draft/tool/queue map、unavailable controls 与 dead i18n keys。
|
||||
|
||||
下一刀:把 `useAgentRuntimeSyncEffects` 的 raw status refresh 迁到 canonical notification/read control,再删除 raw listener/parser/projector;roster DTO 只在 canonical child selector 完全接管消费者后删除。
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# S6m raw SubAgent channel retirement evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`agent_subagent_status:*` 与 `agent_subagent_stream:*` 已退出 Renderer 生产链:
|
||||
|
||||
- status sync effect、`listenToTeamEvents` adapter alias 和 status API 由首段 owner 删除。
|
||||
- continuation 删除零 consumer 的 stream name/listener API 与 DevBridge truth prefix。
|
||||
- stale `ChatModelSelector` adapter fixture 已收口。
|
||||
- repository negative guard 同时禁止两个 prefix、专用 getter/listener 和 adapter alias 回流。
|
||||
|
||||
current transport 仍是 generic `agentSession/event` / `agent_stream_`、App Server notification、thread/read refresh 与 canonical child roster;没有新增 compat、fallback 或 mock producer。
|
||||
|
||||
## Producer / consumer 证据
|
||||
|
||||
- Rust、Electron 和 App Server 对两个专用 prefix 均为零 producer。
|
||||
- stream helper 删除前全仓零生产 consumer;status 唯一 consumer 只触发 detail refresh,且其 channel 本身无 producer。
|
||||
- canonical SubAgent GUI 由 SubAgent Item notification 与 thread item projection承接,成员状态由 `thread/list` child lifecycle 承接。
|
||||
|
||||
## 验证
|
||||
|
||||
- continuation focused:25/25。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run governance:legacy-report`:零引用候选 0、分类漂移 0、边界违规 0。
|
||||
- `npm run test:contracts`:protocol types、App Server client 290 checks、command/harness/modality/scripts/release/cleanup gates 通过;最终 docs boundary 因并行索引的 `internal/exec-plans/release-v1.102.0-plan.md` 失败,与本切片无关。
|
||||
- claimed write set Prettier 与 `git diff --check`:通过。
|
||||
- `agentRuntimeEvents.test.ts` 完整 4/6;两条失败是 handoff 已记录的 sequence-gate 陈旧 raw fixture,本切片相关 generic listener/source 2/2 通过,未放宽 current gate。
|
||||
- `npm run smoke:agent-runtime-current-fixture`:历史/stream/UI guard、首页、Workbench、图片、停止继续、Approval 与 Inputbar rich restore 均通过;聚合在 pending-steer 首跑等待 controlled input value 时超时。随后精确复跑 `inputbar-pending-steer-rich-restore` Electron 场景通过,判定为瞬时输入稳定时序,不是本切片回归。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:generic App Server runtime event transport、local fanout/sequence gate、canonical read refresh、child roster。
|
||||
- `dead`:status/stream 专用 event channel、helper/listener、adapter alias 与 bridge truth prefix。
|
||||
- `test-only`:negative guard 中的 retired 名称。
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
# S6n raw SubAgent type/package/fixture retirement evidence
|
||||
|
||||
## 结论
|
||||
|
||||
raw SubAgent status 侧链已经完整退出生产实现和正向测试口径:
|
||||
|
||||
- 删除 Renderer `subagentStatusProjection` 及其正向测试。
|
||||
- 删除 projection package `subagentStatusEvents` helper 及其正向测试,三个 barrel 不再导出 raw helper。
|
||||
- 删除 `AgentEventSubagentStatusChanged`、`AgentSubagentRuntimeStatus` 与 union 分支。
|
||||
- 删除只服务 raw status 的 runtime facts helpers,以及 summary、i18n、fixture 和 current docs 中的正向口径。
|
||||
- Multi-Agent fixture 只发送 canonical Item,并通过 child identifiers 验证 canonical roster。
|
||||
- negative guard 阻止已删文件、类型、helper、source type 和 fixture producer 回流。
|
||||
|
||||
没有新增 compat parser、fallback 或 mock producer。legacy `AgentSubagentSessionInfo` / `child_subagent_sessions` DTO 仍有任务统计、Team memory、导出指标和 session state 消费者,留给独立切片迁移,未混入本刀。
|
||||
|
||||
## 唯一事实源与分类
|
||||
|
||||
- `current`:canonical SubAgent Item / `subagent_activity`、`thread/list` child lifecycle、`runtime_status -> team.changed`、generic EventLog/hydration。
|
||||
- `dead / deleted`:raw status/stream channel、raw TS type/parser/projector、projection package helper、raw fixture producer、summary/i18n 和 current docs 正向口径。
|
||||
- `test-only`:协议、DevBridge 和治理 guard 中的 retired 负向字符串。
|
||||
- `follow-up`:legacy roster DTO 与它的统计、memory、export、session-state consumers;不得恢复为 GUI current owner。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm --prefix packages/agent-runtime-projection test`:295/295。
|
||||
- focused Renderer / fixture tests:136/137;本切片相关用例全部通过,唯一失败为既有 `action_required.request_id` fixture 漂移,期望 `req-action-1`、实际 `claw_request_turn_1`。
|
||||
- raw status governance guards:16/16。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run i18n:check`:覆盖率 100%,missing/extra 均为 0。
|
||||
- `npm run i18n:unused`:unused 0。
|
||||
- `npm run governance:legacy-report`:零引用候选、分类漂移、边界违规均为 0。
|
||||
- `npm run test:contracts`:App Server client 288 checks 与 command/harness/modality/scripts/release/cleanup 主体 gates 通过;最终 docs boundary 被并行索引的 `internal/exec-plans/release-v1.102.0-plan.md` 阻断,与本切片无关。
|
||||
- Multi-Agent Electron Gate B:通过;证据为 `.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-multi-agent-team-s6n-summary.json`。
|
||||
- `npm run smoke:agent-runtime-current-fixture`:历史、stream、首页、Workbench、图片、停止继续、Approval、全部 Inputbar 和 Plan 场景通过;Skills Runtime 因外部 Provider 鉴权失败退出,属于已知环境 blocker。
|
||||
- `npm run verify:gui-smoke`:通过。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀关闭 S6 的 raw SubAgent status/stream 侧链,使 GUI 活动和成员状态继续只向 canonical Thread/Turn/Item 与 child lifecycle 收敛。下一刀回到 S6 legacy roster DTO 迁移,优先删除 canonical UI fallback,并让 subtask stats 直接消费 canonical child facts。
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# S6n1 raw SubAgent status parser retirement evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`subagent_status_changed` 已从 Renderer 生产语义入口迁出:
|
||||
|
||||
- `parseAgentEvent` 对该旧事件返回 `null`。
|
||||
- `buildAgentUiProjectionEvents` 即使被测试直接传入旧事件,也返回空投影。
|
||||
- canonical `item_started / item_updated / item_completed -> subagent_activity` 投影和 `runtime_status -> team.changed` 保持 current。
|
||||
|
||||
本切片不物理删除文件;旧 TS type、独立 helper 和 package helper 留给后续有明确删除窗口的切片统一收掉。
|
||||
|
||||
## 事实证据
|
||||
|
||||
- Rust、Electron、App Server typed protocol/schema 对 `subagent_status_changed`、`agent_subagent_status:*`、`agent_subagent_stream:*` 均无 producer。
|
||||
- App Server 历史 EventLog 使用通用 `AgentEvent { event_type, payload }` 读取旧 JSONL,不依赖 Renderer 专用 parser/type。
|
||||
- current SubAgent GUI 链是 canonical SubAgent Item notification -> canonical item reader -> thread item projection;roster/status 是 `thread/list` child lifecycle。
|
||||
|
||||
## 验证
|
||||
|
||||
- 精确 retired parser/dispatcher guard:2/2。
|
||||
- `agentUiEventProjection.test.ts` 完整:22/22。
|
||||
- `npm run typecheck`:通过。
|
||||
- claimed write set `git diff --check`:通过。
|
||||
- `agentProtocol.test.ts` 完整:27/28;唯一失败是既有 `action_required.request_id` fixture 漂移(期望 `req-action-1`,实现返回 `claw_request_turn_1`),与本切片无关;本切片精确用例通过。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Thread/Turn/Item、SubAgent Item projection、child Thread lifecycle、generic EventLog/hydration、runtime status projection。
|
||||
- `dead`:raw `subagent_status_changed` Renderer parser 和 dispatcher 分支。
|
||||
- `deprecated / pending deletion`:raw TS type、独立 projector/package helper、fixture/i18n 正向断言。
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
# S6o canonical GUI fallback retirement
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 事实源
|
||||
|
||||
Harness、AgentRuntimeStrip 和 Workspace Harness 的子任务 roster 统一消费
|
||||
`CanonicalChildThreadSummary[]`。它来自 App Server canonical child Thread/read-model
|
||||
投影,保留 `threadId`、`sessionId`、Codex 七态和状态详情;空 roster 表示没有可展示的
|
||||
子任务,不再回退到 session DTO。
|
||||
|
||||
## 本轮收口
|
||||
|
||||
- 删除 Harness panel prop 链中的 `AgentSubagentSessionInfo` / `childSubagentSessions`。
|
||||
- 删除 `RuntimeSubagentSessionList`、legacy 状态标签/Badge/type helper 和
|
||||
`summarizeChildSubagentSessions`。
|
||||
- `HarnessStatusPanel` summary、activity、delegation、Workspace surface 只接收
|
||||
canonical children;`AgentChatWorkspace` 的 general workbench 接线只传
|
||||
`canonicalChildren`。
|
||||
- legacy 正向测试改为 canonical roster 与空 roster 回归;新增
|
||||
`canonicalRosterFallbackBoundary.test.ts` 防止 GUI owner 回流。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:App Server canonical child Thread -> `CanonicalChildThreadSummary[]` ->
|
||||
Harness/AgentRuntimeStrip/Workspace GUI。
|
||||
- `dead / retired guard-only`:旧 child-session prop、DTO display list、runtime status
|
||||
helper 和 legacy summary fallback。没有新增 compat 包装层。
|
||||
- `compat`、`deprecated`:本轮未新增;task rail/inputbar/session state 中仍存在的
|
||||
legacy roster 用途不属于本 slice,留给后续独立迁移。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:5 files / 49 tests passed。
|
||||
- `npm run typecheck` passed。
|
||||
- exact-set ESLint and Prettier passed。
|
||||
- `npm run i18n:unused` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift / 0 boundary violations。
|
||||
- `npm run verify:gui-smoke` passed:renderer build、Electron host/preload、App Server sidecar ready、workbench shell/memory smoke。
|
||||
- `git diff --check` passed;GUI owner legacy identifier scan has no matches。
|
||||
|
||||
## 并行协作
|
||||
|
||||
`AgentChatWorkspace.tsx` 同时由另一进程推进 S6p-a navigation/runtime-strip 变更;本轮只修改
|
||||
general workbench panel 的 roster 参数,未覆盖其 navigation hunk。上述验证反映共享工作树,
|
||||
不将其他进程的改动归入本 slice。
|
||||
|
||||
## 下一刀
|
||||
|
||||
迁移 `agentTaskRuntime.ts`、`inputbarRuntimeStatusLine.ts`、Task Rail 和 conversation
|
||||
scene 的 subtask stats 到 `CanonicalChildThreadSummary[]`,再删除 session state/DTO 的
|
||||
legacy roster contract。
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
# S6o Legacy Roster Memory Shadow Retirement
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Team memory runtime 不再接收或序列化 legacy child/sibling session roster:
|
||||
|
||||
- 删除 `AgentSubagentSessionInfo` / `AgentSubagentParentContext` 类型依赖。
|
||||
- 删除 `childSubagentSessions` / `subagentParentContext` memory-runtime 参数。
|
||||
- 删除 `team.subagents` / `team.parent_context` 正向写入、序列化和测试口径。
|
||||
- 同步时仅保留 `team.selection` 与非 `team.*` memory;既有旧 team roster shadow 会被清除。
|
||||
|
||||
`team.selection`、selected-team restore、canonical child Thread roster、parent-thread visibility 和
|
||||
SubAgent navigation 保持 current。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`team.selection` selected-team memory;canonical child Thread roster。
|
||||
- `compat`:剩余 session detail / GUI legacy roster DTO consumer,继续由 S6o 后续阶段迁出,不得扩展。
|
||||
- `deprecated`:无新增。
|
||||
- `dead`:team-memory child/sibling roster shadow、对应参数和正向测试口径。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:3 files / 5 tests passed。
|
||||
- 精确新/独立文件 ESLint 与 Prettier:passed。
|
||||
- `npm run typecheck`:passed。
|
||||
- `npm run governance:legacy-report`:零引用候选 0、分类漂移 0、边界违规 0。
|
||||
- claimed write set `git diff --check`:passed。
|
||||
- `npm run verify:gui-smoke`:passed;Renderer、Electron Host、App Server sidecar 和 Claw shell ready。
|
||||
|
||||
共享脏文件 `AgentChatWorkspace.tsx` 的全文件 Prettier 仍提示前序 S6l navigation block 排版;只读格式 diff
|
||||
证明与本阶段 memory hunk 无关,因此未写格式化覆盖该 block。
|
||||
|
||||
## 下一刀
|
||||
|
||||
删除 Harness canonical list 对 `childSubagentSessions` 的 fallback,并把 task rail/inputbar subtask stats
|
||||
迁到 `CanonicalChildThreadSummary[]`;随后才能物理删除 session detail 的 legacy roster DTO contract。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# S6p-a canonical navigation/runtime strip fallback retirement evidence
|
||||
|
||||
## 结论
|
||||
|
||||
本刀把两个已经没有 current producer 的 Renderer fallback 收敛到 canonical owner:
|
||||
|
||||
- `useWorkspaceSubagentNavigationRuntime` 删除 `childSubagentSessions` known-session 直达分支;目标只按 canonical child ThreadId 命中 roster sessionId,缺失时通过 `readThreadSessionId` 解析。
|
||||
- `AgentRuntimeStrip` 删除 legacy `AgentSubagentSessionInfo` 输入、统计分支和 prop;空 canonical roster 保持零计数,状态统计只按 Codex canonical child 七态计算。
|
||||
- 对应正向 legacy fixture 与 boundary guard 断言同步迁移;Harness delegation/status fallback、Task Rail stats、session state 和 legacy DTO 没有混入本刀。
|
||||
|
||||
## 唯一事实源与分类
|
||||
|
||||
- `current`:`canonicalThreadClient -> useCanonicalChildThreads -> canonicalChildThreadSummary`,以及 `readThreadSessionId(threadId)` 的 Thread identity resolver。
|
||||
- `dead / deleted`:runtime strip 的 legacy roster fallback、导航的 known-session legacy branch。
|
||||
- `deprecated / follow-up`:HarnessStatusPanel/HarnessDelegationSection 的 legacy list fallback、Task Rail/Inputbar subtask stats、`AgentSubagentSessionInfo` state/normalizer/metrics plumbing;它们没有外部兼容约束,应由后续独立切片迁出。
|
||||
- `test-only`:本刀不新增 retired string;boundary guard 只保留负向检查。
|
||||
|
||||
## 验证
|
||||
|
||||
- navigation + AgentChatWorkspace boundary:5/5。
|
||||
- `AgentRuntimeStrip.test.tsx`:10/10。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run governance:legacy-report`:零引用候选、分类漂移、边界违规均为 0。
|
||||
- `npm run verify:gui-smoke`:通过,退出码 0;Electron smoke 完成 renderer load、App Server ready、Claw workbench shell 和 memory settings smoke。
|
||||
- claimed write set `git diff --check`:通过。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀继续 S6 的 canonical child roster 主线,移除导航和 runtime strip 的 legacy 身份旁路。下一刀应按独立写集删除 Harness delegation/status 的可见 fallback,再把 Task Rail/Inputbar subtask stats 迁到 canonical child counts,最后处理 DTO/state/normalizer/metrics 的整体退役。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# S6q canonical Task Rail subtask stats evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Task Center Task Rail 的子任务统计已从 legacy session detail roster 收敛到 canonical child Thread summaries:
|
||||
|
||||
- `canonicalChildren` 从 AgentChatWorkspace scene 进入 `useWorkspaceConversationSceneRuntime`。
|
||||
- `useWorkspaceTaskRailRuntime`、TaskCenterUtilityToolbar 和 Task Rail ViewModel/Context 只传递 canonical children。
|
||||
- 七态映射固定为 `pendingInit/running -> active`、`completed/shutdown -> completed`、`errored/notFound/interrupted -> 需处理`。
|
||||
- Task Rail 的 `childSubagentSessions` prop 和统计 helper 已删除;MessageList、Inputbar、Harness 与 session DTO 不在本刀写集。
|
||||
|
||||
## 唯一事实源与分类
|
||||
|
||||
- `current`:`canonicalThreadClient -> useCanonicalChildThreads -> canonicalChildThreadSummary`。
|
||||
- `dead / deleted`:Task Rail 内部 legacy `childSubagentSessions` 输入与 subtask stats reducer。
|
||||
- `deprecated / follow-up`:MessageList/Inputbar/Harness 的 legacy roster props、session state/normalizer/metrics DTO;后续分别迁移,不能回流成为 Task Rail owner。
|
||||
|
||||
## 验证
|
||||
|
||||
- Task Rail runtime、scene、ViewModel、Toolbar 四组 focused tests:78/78。
|
||||
- 最终 canonical interrupted 映射回归:7/7。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run governance:legacy-report`:零引用候选、分类漂移、边界违规均为 0。
|
||||
- `npm run verify:gui-smoke`:通过,退出码 0;Electron renderer、App Server、Claw workbench shell 和 memory settings smoke 完成。
|
||||
- claimed write set `git diff --check`:通过。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀继续 S6 的 canonical child roster 主线,关闭 Task Rail 统计旁路。下一刀优先删除 Harness delegation/status 的 canonical-list fallback,再迁移 Inputbar 子任务统计,最后处理剩余 session detail DTO/state/normalizer/metrics 退役。
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
# S6r canonical Inputbar and landing subtask stats
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 事实源
|
||||
|
||||
Landing task card、MessageList runtime status 和 Inputbar runtime status 的子任务统计
|
||||
统一消费 Workspace scene 已有的 `CanonicalChildThreadSummary[]`。canonical child Thread
|
||||
是唯一 roster owner;本刀没有新增 fetch、compat 包装或第二套状态源。
|
||||
|
||||
## 本轮收口
|
||||
|
||||
- `agentTaskRuntime.ts` 新增 `summarizeAgentTaskChildren`,复用
|
||||
`summarizeCanonicalChildThreads` 的 Codex 七态统计。
|
||||
- `pendingInit/running` 计入 active,`pendingInit` 额外计入 queued;
|
||||
`completed/shutdown` 计入 completed;`errored/notFound/interrupted` 计入 failed。
|
||||
- landing task card、MessageList、Inputbar 和 scene runtime 透传 `canonicalChildren`,删除
|
||||
`childSubagentSessions` 输入与只搬运空 legacy roster 的 projection deferral 字段。
|
||||
- MessageList runtime status 与 landing task card 保留原有 turn、action、usage 和发送中
|
||||
状态行为;空 canonical roster 不生成子任务统计。
|
||||
- 新增 boundary guard,禁止 Inputbar/landing/message-list owner 回流
|
||||
`childSubagentSessions`。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:App Server canonical child Thread -> `CanonicalChildThreadSummary[]` ->
|
||||
Workspace scene -> landing/MessageList/Inputbar。
|
||||
- `dead / retired guard-only`:上述 surface 的 legacy `childSubagentSessions` prop、
|
||||
reducer 和 deferral 搬运字段。
|
||||
- `deprecated / follow-up`:`AgentSubagentSessionInfo`、session state/normalizer、
|
||||
App Server adapter 空字段、插件 fixture 与 export metrics 的 legacy roster contract;
|
||||
下一刀物理删除,不新增 compat。
|
||||
- `compat`:本刀未新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:6 files / 41 tests passed,包含七态统计期望
|
||||
`total=7, active=2, queued=1, completed=2, failed=3`。
|
||||
- `npm run typecheck`:renderer/node TypeScript 通过。
|
||||
- claimed write set 的 exact ESLint 与 Prettier:通过。
|
||||
- `npm run governance:legacy-report`:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- `npm run verify:gui-smoke`:退出码 0;renderer build、Electron host/preload、App Server
|
||||
`appserver.v0` 初始化、Claw workbench shell 和 memory settings smoke 完成。
|
||||
- claimed tracked write set `git diff --check`:通过。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀关闭 canonical child roster 在 landing、MessageList 和 Inputbar 的统计旁路,完成
|
||||
S6 的 GUI roster 收敛。下一刀回到 session contract 主链,删除剩余
|
||||
`AgentSubagentSessionInfo` / `child_subagent_sessions` 的 state、normalizer、API fixture
|
||||
和 export metrics 读取。
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
# S6s legacy SubAgent session contract retirement
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
S6 canonical child roster 收口完成:
|
||||
|
||||
- React session snapshot、Hook、AgentChatWorkspace 和 test fixture 不再持有
|
||||
`childSubagentSessions` / `subagentParentContext`。
|
||||
- session API 的 legacy child/sibling/parent roster DTO、normalizer 与空 fixture producer
|
||||
已物理删除;旧输入不能穿透 object spread。
|
||||
- Workspace parent visibility 只读 canonical thread family 的 `hasParentThread`,不保留
|
||||
session fallback。
|
||||
- export `activeSubagentCount` 保持外部输出字段,但输入改为 canonical AgentGraph direct
|
||||
open children + hydrated `Thread.agent_state`;raw detail roster 不再参与统计。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Thread family、`CanonicalChildThreadSummary[]`、AgentGraph 与
|
||||
canonical `CollabAgentStatus` 七态。
|
||||
- `dead / deleted`:legacy session roster DTO/state/normalizer/fixture、parent fallback、
|
||||
raw export metrics fallback。
|
||||
- `compat`:无。
|
||||
- `deprecated`:无;API 只在读取边界删除历史 key。
|
||||
|
||||
## 验证
|
||||
|
||||
- React focused:10 files / 255 tests passed;final hook/boundary 5/5 passed。
|
||||
- API focused:60/60 passed;相关 `clientFactory` session 回归 1/1 passed。
|
||||
- Rust focused:canonical status mapping 1/1、handoff export 1/1 passed。
|
||||
- `npm run typecheck`:renderer/node 通过。
|
||||
- exact ESLint、Prettier、rustfmt 与 claimed diff check:通过。
|
||||
- `npm run governance:legacy-report`:0/0/0。
|
||||
- `npm run verify:gui-smoke`:退出码 0,真实 Electron/App Server/Claw shell/memory
|
||||
settings smoke 通过。
|
||||
|
||||
Rust `npm run test:rust:related` 已完成编译并进入 app-server 1094 tests,随后被未触及的
|
||||
`local_data_source::tests::mcp_current_jsonrpc_starts_real_stdio_server_and_reads_tool_resource`
|
||||
stack overflow / SIGABRT 阻断。完整 `clientFactory.test.ts` 的未通过项同样是未触及的
|
||||
turn-lifecycle `readThread` 旧期望;本刀相关用例均已精确复跑通过。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀完成 S6 的 legacy SubAgent roster contract 物理退役。下一刀应回到 S5 剩余
|
||||
Agent Runtime compat consumer 或 S7 当前 gate refinement,不再为 roster 建立新切片。
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
# S6s React Legacy Roster Plumbing Retirement
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 事实源
|
||||
|
||||
React roster 与 lineage 只允许消费 `useCanonicalChildThreads` 返回的 canonical child
|
||||
Thread summaries 和 canonical parent Thread identity。session detail 的 legacy child/parent
|
||||
roster DTO 不再进入 React snapshot、Hook 或 Workspace。
|
||||
|
||||
## 本轮收口
|
||||
|
||||
- `AgentSessionSnapshot`、empty snapshot 和 detail hydration 删除
|
||||
`childSubagentSessions` / `subagentParentContext`。
|
||||
- `useAgentSession` 删除两组 React state、setter、snapshot 搬运、依赖和返回字段;
|
||||
`useAgentChat` 不再继续向 Workspace 暴露 legacy roster。
|
||||
- `AgentChatWorkspace` 不再解构或向 Team、context、Inputbar 等 surface 转发 legacy
|
||||
roster,child roster 统一使用 `canonicalChildren`。
|
||||
- `useWorkspaceTeamRuntime` 删除 `session.hasParentThread` optional fallback,parent identity
|
||||
只使用 `canonical.hasParentThread`。
|
||||
- 删除零调用的 legacy runtime-status helpers 及其 `AgentSubagentSessionInfo` 类型依赖,
|
||||
并移除只为 legacy roster 服务的测试 fixture。
|
||||
- 新增 React plumbing boundary guard,禁止 legacy child/parent roster、旧 hydration 和
|
||||
runtime-status helpers 回流,同时锁定 canonical parent identity。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:`useCanonicalChildThreads` -> `canonicalChildren` 与
|
||||
`canonical.hasParentThread` -> Workspace UI。
|
||||
- `compat`:本 slice 未新增或保留 compat 包装。
|
||||
- `deprecated`:本 slice 范围内无残留;API / App Server / Rust contract 由并行 owner
|
||||
独立收口,本 owner 未触碰其写集。
|
||||
- `dead`:React child/parent roster snapshot、Hook plumbing、Workspace fallback、零调用
|
||||
status helpers 和对应正向 fixture。
|
||||
- `test-only`:legacy 标识仅保留在负向边界测试文字中。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:10 files / 255 tests passed。
|
||||
- canonical parent identity 最终补丁:2 files / 5 tests passed,覆盖
|
||||
`useWorkspaceTeamRuntime` unit test 与 React boundary guard。
|
||||
- `npm run typecheck`:renderer / node TypeScript 通过;最终纯 canonical fallback 删除按
|
||||
coordinator 要求不重复启动第三份 typecheck,由上述 focused test 与 exact lint 覆盖。
|
||||
- claimed TypeScript exact ESLint 与 Prettier:通过。
|
||||
- `npm run governance:legacy-report`:扫描 2410 个文件,零引用候选 0、分类漂移 0、
|
||||
边界违规 0。
|
||||
- production scan:`src`、`electron`、`packages`、`lime-rs` 中四个 legacy roster 标识
|
||||
零命中;React production 中 `session.hasParentThread` 零命中。
|
||||
- root shared-tree integrated `npm run verify:gui-smoke` session `93758`:exit 0;
|
||||
renderer loaded、App Server `appserver.v0` initialized、Claw workbench shell 与 memory
|
||||
settings ready。为释放并行构建资源,本 owner 的重复 session `55001` 按 coordinator
|
||||
指令中止,未作为有效门禁结果。
|
||||
- claimed tracked write set `git diff --check`:通过。
|
||||
|
||||
## 并行协作
|
||||
|
||||
`AgentChatWorkspace.tsx`、`useAgentChat.ts` 和部分测试文件包含并行 owner 的既有改动;
|
||||
本 slice 只处理 legacy roster 相关 hunk,没有覆盖或回退其它变更。API、Electron、Rust、
|
||||
packages 与中央执行计划均保持避让。
|
||||
|
||||
## 下一刀
|
||||
|
||||
本 React slice 完成度 100%。下一步由 refactor-v2 coordinator 汇总并行完成的 API contract
|
||||
与 Rust export slices,执行更高层集成门禁;React roster plumbing 已无待迁 residual。
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
# S6s Rust canonical export subagent count
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 事实源
|
||||
|
||||
App Server export 的 `active_subagent_count` 只从 canonical AgentGraph direct child
|
||||
关系和 hydrated `Thread.agent_state` 派生。export 不再读取
|
||||
`AgentSessionReadResponse.detail.child_subagent_sessions` 或顶层 `subagents`。
|
||||
|
||||
## 本轮收口
|
||||
|
||||
- `handoff_metrics` 改为异步读取 `RuntimeCore.projection_store`:先按父 Thread 查询
|
||||
direct open children,再以 `ThreadTurnsView::Summary` 读取 child Thread,避免 terminal
|
||||
child 因缺少 latest Turn 被误判为 `PendingInit`。
|
||||
- `PendingInit`、`Running` 计入 active;`Interrupted`、`Completed`、`Errored`、
|
||||
`Shutdown`、`NotFound` 不计入。closed edge、archived/missing child 也不计入。
|
||||
- 没有 `ProjectionStore` 时返回 `0`。这是 fail closed:canonical
|
||||
`spawn_agent_controlled` 本身会在缺少 ProjectionStore 时拒绝创建 child,因此不存在可计数的
|
||||
canonical AgentGraph。
|
||||
- handoff bundle、replay case、analysis handoff、review decision 四个 export 入口统一 await
|
||||
canonical metrics;输出 protocol 和 builder shape 不变。
|
||||
- 删除 raw detail roster fallback 和 `handoff_status_is_active` 字符串 helper。
|
||||
- handoff export fixture 使用真实 canonical spawn edge,证明一个 open child 计入、一个
|
||||
closed child 排除,并同时断言 response 与 `progress.json` 的 active count。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`ProjectionStore -> AgentGraph direct children -> hydrated
|
||||
Thread.agent_state -> active_subagent_count`。
|
||||
- `dead / deleted`:export metrics 对 `child_subagent_sessions`、顶层 `subagents` 和 legacy
|
||||
runtime status 字符串的读取。
|
||||
- `compat`:未新增。
|
||||
- `deprecated`:本刀未保留 export roster 例外。
|
||||
|
||||
## 验证
|
||||
|
||||
- exact `rustfmt --check`:三个 claimed Rust 文件通过。
|
||||
- `cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server
|
||||
canonical_subagent_status_mapping_is_exhaustive`:1 passed。
|
||||
- `cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server
|
||||
export_handoff_bundle_writes_current_session_bundle_to_workspace`:1 passed。
|
||||
- raw 回流扫描:claimed export 源码不再包含 `child_subagent_sessions`、顶层
|
||||
`detail.get("subagents")`、`handoff_status_is_active` 或 legacy runtime status key。
|
||||
- claimed write set `git diff --check`:通过。
|
||||
- `npm run test:rust:related -- <three claimed Rust files>`:成功映射到 `app-server` 并完成
|
||||
crate 编译,运行 1094 项 lib tests 时被无关既有测试
|
||||
`local_data_source::tests::mcp_current_jsonrpc_starts_real_stdio_server_and_reads_tool_resource`
|
||||
的 stack overflow / SIGABRT 阻断。本刀两个 focused 测试均已单独通过;未修改该 MCP
|
||||
测试或其共享热区。
|
||||
|
||||
## 架构确认
|
||||
|
||||
本刀为非重大架构变更:不修改 protocol、schema、read model、canonical store 或 Agent
|
||||
control,只把 export 指标切换到已存在的 canonical owner。
|
||||
|
||||
## 路线图关系
|
||||
|
||||
本刀关闭 S6 legacy roster 在 Rust export 旁路中的最后一个正向消费者。下一步由 refactor-v2
|
||||
协调者继续处理剩余 session DTO / adapter 空字段物理删除;不得恢复 raw roster fallback。
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
# S6t Canonical Parent Thread Identity
|
||||
|
||||
时间:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Workspace 的 parent-thread 可见性已从 legacy session parent context 收敛到 canonical
|
||||
`thread/list -> Thread.parentThreadId`。同一次分页读取同时返回当前 Thread 的 parent identity
|
||||
和直接 children,`useCanonicalChildThreads` 再把 canonical `hasParentThread` 交给
|
||||
`useWorkspaceTeamRuntime`;不再接受 session roster/context 的第二身份源。
|
||||
|
||||
## 写集
|
||||
|
||||
- `src/lib/api/agentRuntime/canonicalThreadClient.ts` 及定向测试
|
||||
- `workspace/useCanonicalChildThreads.ts`
|
||||
- `workspace/useWorkspaceTeamRuntime.ts` 及定向测试
|
||||
|
||||
Active S6s React/API/Rust child-roster 写集、S2l history repair、AgentChatWorkspace、Electron、
|
||||
Rust 与协议均未触碰。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical `Thread.parentThreadId`、direct child Thread list、
|
||||
`CanonicalChildThreadSummary[]`。
|
||||
- `dead / retired guard-only`:Workspace team runtime 的 legacy parent-context Boolean 输入。
|
||||
- `compat`:无新增。
|
||||
- `deprecated`:无新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:2 files / 9 tests passed。
|
||||
- exact-set ESLint passed。
|
||||
- exact-set Prettier passed。
|
||||
- `npm run typecheck` passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
|
||||
新增回归覆盖当前 canonical Thread 有 parent、没有 children 且 SubAgent tool 关闭时,
|
||||
runtime 会话与 Subagents 入口仍保持可见;空 Thread identity 不访问 App Server,重复 cursor
|
||||
继续 fail-safe 终止。
|
||||
|
||||
## 下一刀
|
||||
|
||||
由 active S6s coordinator 汇总 child roster DTO/state/API/Rust export 删除并运行 GUI smoke;
|
||||
随后清 Electron `pluginRuntimeTaskHost` 的空 legacy roster fixture,并把仍标记旧 roster 为
|
||||
current 的 roadmap 文档迁到 canonical Thread/AgentGraph 事实源。
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# S6t legacy session roster contract retirement
|
||||
|
||||
日期:2026-07-14
|
||||
|
||||
## 结论
|
||||
|
||||
Renderer session API 不再定义、normalize、返回或缓存 legacy SubAgent roster:
|
||||
|
||||
- 删除 `AgentSubagentSessionInfo`、`AgentSubagentParentContext`、
|
||||
`AgentSubagentSkillInfo` 和 child/sibling/parent roster 字段。
|
||||
- 删除 legacy subagent session/parent normalizer 与两个零调用 runtime-status helper。
|
||||
- App Server session detail 的两个 object-spread 边界显式删除 retired child/parent key,
|
||||
防止旧输入穿透类型边界。
|
||||
- Electron plugin runtime 与 tool-surface smoke 不再构造空 roster fixture。
|
||||
- 删除零调用 `teamWorkspaceCopy.ts` dead leaf;parent-thread visibility 已由
|
||||
`useCanonicalChildThreads.hasParentThread` 承接。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical thread family 的 `parentThreadId`、
|
||||
`CanonicalChildThreadSummary[]` 与 canonical AgentGraph。
|
||||
- `dead / deleted`:session detail child/sibling/parent roster DTO、normalizer、React
|
||||
plumbing、空 fixture producer 和零调用 display helper。
|
||||
- `compat`:无。
|
||||
- `deprecated`:无;API 读取边界只保留对旧 key 的显式删除,不解释或消费旧值。
|
||||
|
||||
## 验证
|
||||
|
||||
- App Server session client、agent API 与 contract boundary:3 files / 60 tests passed。
|
||||
- `clientFactory` 的 session create/list/get 精确回归:1/1 passed。
|
||||
- shared `npm run typecheck`:renderer/node 通过。
|
||||
- exact ESLint、Prettier 与 claimed diff check:通过。
|
||||
- `npm run governance:legacy-report`:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- shared `npm run verify:gui-smoke`:退出码 0;renderer、Electron host/preload、
|
||||
App Server `appserver.v0`、Claw workbench shell 与 memory settings ready。
|
||||
|
||||
首次把完整 `clientFactory.test.ts` 纳入 API focused 时为 69/70;唯一失败是未触及的
|
||||
turn-lifecycle `standardRuntimeClient.readThread` 旧期望。与本刀直接相关的 session
|
||||
create/list/get 用例单独复跑 1/1 通过。
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
# S6u Current Roadmap Roster Alignment
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
6 份 clean current roadmap 已从 legacy session roster DTO 口径收敛到 S6 已验证的唯一
|
||||
事实源:App Server `thread/list|read` join canonical AgentGraph/identity,读取
|
||||
`Thread.parentThreadId / agentState` 并投影为 `CanonicalChildThreadSummary[]`。旧
|
||||
`childSubagentSessions`、`child_subagent_sessions`、sibling/parent context 不再被这些
|
||||
current roadmap 标为产品事实。
|
||||
|
||||
## 写集与避让
|
||||
|
||||
更新:
|
||||
|
||||
- `internal/roadmap/projectthread/README.md`
|
||||
- `internal/roadmap/agent-workspace/README.md`
|
||||
- `internal/roadmap/agent-workspace/run-observability.md`
|
||||
- `internal/roadmap/agentui/conversation-projection-fact-map.md`
|
||||
- `internal/roadmap/agentui/lime-agentui-target-architecture.md`
|
||||
- `internal/roadmap/agentui/conversation-projection-implementation-plan.md`
|
||||
- `src/lib/governance/legacySubagentRoadmapBoundary.test.ts`
|
||||
|
||||
`internal/roadmap/agentui/lime-agentui-standard-alignment.md` 在本切片开始前已被并行进程
|
||||
修改,因此没有夹写。该文件第 248 行仍有一处旧 session roster 历史完成描述,必须在
|
||||
owner 释放后单独迁成 canonical Thread family 口径;本 evidence 不把它计入已清范围。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Thread family、AgentGraph/identity、
|
||||
`CanonicalChildThreadSummary[]` 及其 current roadmap 描述。
|
||||
- `dead / deleted`:legacy session child/sibling/parent roster DTO 及其 current roadmap
|
||||
正向口径。
|
||||
- `retired guard-only`:新 roadmap boundary test 中的旧字段字符串。
|
||||
- `compat` / `deprecated`:本切片未新增。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused roadmap boundary Vitest:1 file / 1 test passed。
|
||||
- 新守卫 exact ESLint 与 Prettier passed。
|
||||
- 6 份 roadmap claimed `git diff --check` passed。
|
||||
- 6 份 roadmap 精确 `rg` 无 legacy roster 字段。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
|
||||
本切片只校正文档事实与新增静态守卫,没有生产、协议、Bridge 或 GUI 行为变化,未运行
|
||||
GUI smoke。
|
||||
|
||||
## 下一刀
|
||||
|
||||
等待 `lime-agentui-standard-alignment.md` 的并行 owner 释放后,收掉其第 248 行残留并把
|
||||
该文件加入 roadmap guard;随后继续 S5 root compat consumer 迁移和 S7 refinement
|
||||
行政 closeout。
|
||||
@@ -0,0 +1,84 @@
|
||||
# Refactor v2 skeleton closeout
|
||||
|
||||
> date: 2026-07-14
|
||||
> owner: root
|
||||
> status: skeleton-complete / refinement-open / not-archive-ready
|
||||
|
||||
## 收口结论
|
||||
|
||||
v2 的快速完整骨架已经完成收口:Agent 产品链只保留
|
||||
`Electron Desktop Host -> App Server JSON-RPC -> RuntimeCore -> Thread/Turn/Item -> GUI`,
|
||||
Electron 不承接第二业务后端,Renderer 不再维护第二套 Team runtime、raw SubAgent channel
|
||||
或 synthetic formation truth。
|
||||
|
||||
本结论是 skeleton closeout,不是 v2 全部完成或 release/archive ready。S5 仍有 Agent Chat
|
||||
compat consumer 需要按领域迁出;S6o 已删除 team-memory roster shadow,但 Harness fallback、subtask stats
|
||||
与 session detail legacy roster contract 仍需继续收口。最终门禁也保留了四个明确阻塞。
|
||||
|
||||
## 架构与唯一事实源
|
||||
|
||||
- Agent loop、状态机、Thread/Turn/Item、工具生命周期、MCP、Skills、Multi-Agent、历史恢复和 GUI 护栏按 Codex current 语义收敛。
|
||||
- Lime 是 GUI 产品:Codex TUI 交互只复制语义和状态机,Renderer 继续负责 GUI 模态、时间线、工作台、导航和五语言展示。
|
||||
- provider capability、provider-specific lowering、多模型和多模态 message part 按 OpenCode owner 边界收敛。
|
||||
- copy/adapt/delete 已形成单轨:复制成熟 contract,适配 GUI 产品边界,删除 Team sidecar、fake formation、raw status/stream channel 和 raw status type/projector/package/fixture family。
|
||||
|
||||
## Fresh Gate B 证据
|
||||
|
||||
fresh Electron Approval cancel 场景已通过真实产品链:
|
||||
|
||||
- `recordCount=1`
|
||||
- Turn 状态为 `canceled`
|
||||
- `pendingRequestCount=0`
|
||||
- GUI composer 恢复可输入状态
|
||||
|
||||
聚合 `smoke:agent-runtime-current-fixture` 已越过 Approval resume/decline/cancel、取消后继续、图片、
|
||||
Workbench、队列、Plan、首页、历史和 Inputbar rich restore 等场景;最终停止在 Skills Runtime
|
||||
外部 Provider 鉴权失败。该结果不冒充 aggregate 全通过,也不归因于 SubAgent/Approval GUI 回归。
|
||||
|
||||
## 当前工作树验证
|
||||
|
||||
| 校验 | 结果 | 口径 |
|
||||
| --- | --- | --- |
|
||||
| `npm run lint` | 通过 | 当前工作树 |
|
||||
| `npm run typecheck` | 通过 | 当前工作树 |
|
||||
| `git diff --check` | 通过 | 当前工作树 |
|
||||
| `npm run verify:gui-smoke` | 通过 | 真实 Electron Desktop Host fixture;GUI 主链可启动 |
|
||||
| `npm run governance:legacy-report` | 通过 | 零引用候选 0、分类漂移 0、边界违规 0 |
|
||||
| `npm run governance:scripts` | 通过 | scripts 冻结边界无回流 |
|
||||
| `npm run test:contracts` | 主体通过,最终失败 | protocol/client 与命令主体 gate 通过;被并行 `internal/exec-plans/release-v1.102.0-plan.md` 的 docs-boundary 阻断,本轮未修改该文件 |
|
||||
| `npm run governance:architecture-confirmation` | 未通过 | 本地无 PR event/body/base SHA,无法执行 PR 级判定;架构确认已写入中央计划,进入 PR 时仍需复制到 PR body |
|
||||
| `npm run verify:local` | 未全绿 | 前置 app-version/i18n/lint/typecheck 进入 `npm test` 前通过;Vitest 109 批中 1-8 批通过,第 9 批 149/150,通过之外唯一失败为 `electron/ipcChannels.test.ts:208` 的已提交数组排序期望;10-109 批未执行 |
|
||||
|
||||
`verify:local` 第 9 批失败不属于 S7 产品回归或环境故障。实际 bridge command 集合无缺项;
|
||||
生产集合排序后以 `get_default_provider` 开头,已提交测试仍按未排序顺序期望
|
||||
`get_runtime_provider_selection`。该基线来自提交 `56e4e7d9a`,目标测试和实现均不在 S7 写集。
|
||||
第 1-8 批共 23 个文件通过,第 9 批 16 个文件中只有 1/150 assertion 失败,后 100 批
|
||||
共 1598 个文件保持 pending。
|
||||
|
||||
本次 local-ci 因 fail-fast 没有继续运行 contracts、Rust 和 GUI smoke;这些边界按上表的独立命令证据记录,
|
||||
不能被解释为同一次 `verify:local` 已完成。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:Electron Host、App Server JSON-RPC、RuntimeCore、canonical Thread/Turn/Item、ProjectionStore/thread-store、model-provider、tool-runtime、canonical child roster 和 GUI projection。
|
||||
- `compat`:S5 登记的 207 个 Agent Chat presentation/barrel consumers;只能迁出和委托,不得新增业务逻辑。
|
||||
- `deprecated`:S6o 剩余 Harness roster fallback、subtask stats 和 session detail legacy roster DTO contract;AgentSession presentation adapter 只允许继续迁出。
|
||||
- `dead`:Renderer Team runtime sidecar、fake Team formation/preview、`agent_subagent_status:*`、`agent_subagent_stream:*`、raw status parser/type/projector/package/fixture、team-memory child/sibling roster shadow、已退役 runtime vendor/crate/migration/skill。
|
||||
- `test-only`:retired 名称仅允许存在于 negative guard 和历史 evidence。
|
||||
|
||||
## 已知阻塞与归因
|
||||
|
||||
1. `verify:local` 被 committed Electron IPC 数组排序测试阻断;修复应由 Electron contract owner 独立认领,随后从第 9 批续跑。
|
||||
2. `test:contracts` 被并行 release plan 的 docs-boundary 阻断;S7 不接管或修改 release 文件。
|
||||
3. aggregate Agent fixture 被外部 Skills Provider 鉴权阻断;没有降级到 mock 或生产 fallback。
|
||||
4. architecture confirmation 缺 PR event/body/base;进入 PR 后必须运行真实门禁。
|
||||
|
||||
## 后续细化
|
||||
|
||||
1. Rust cold read 把 Approval response 统一输出为结构化 `{ decision, decision_scope, reason_code }`;取消使用 `decision: "cancel"`,不新增前端 legacy 字符串解析。
|
||||
2. 完成 S6o Harness canonical-list fallback、subtask stats 与 session detail legacy roster DTO contract 的迁出和物理删除。
|
||||
3. 继续把 S5 Agent Chat compat consumers 按领域迁到 current typed owner,禁止新增 root compat barrel consumer。
|
||||
4. 由 Electron contract owner 修正 `ipcChannels.test.ts` 的排序断言,使用 `test:resume` 或 batch 9 续跑剩余 Vitest。
|
||||
5. PR 阶段补 architecture confirmation,并在外部 Skills Provider 可用时重跑 aggregate fixture。
|
||||
|
||||
快速骨架阶段完成度为 100%;post-skeleton refinement 保持开放,v2 不标记 archive-ready。
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# S7a Electron IPC contract ordering evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`ELECTRON_APP_SERVER_TRUTH_BRIDGE_COMMANDS` 的 production catalog 无缺项、无新增、无路由变化。
|
||||
失败来自测试先对 actual 排序,却把 expected 的前三项保留为非字典序。S7a 只重排 expected,
|
||||
没有修改 Electron Host、preload、App Server、catalog、mock 或 Renderer gateway。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm exec vitest run electron/ipcChannels.test.ts`:4/4 passed。
|
||||
- `npm test -- --only-batch 9`:16 files / 132 tests passed。
|
||||
- claimed diff `git diff --check`:passed。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`electron/ipcChannels.ts` truth-bridge catalog 与 Desktop Host projection。
|
||||
- `test-only`:`electron/ipcChannels.test.ts` exact-set sorted expectation。
|
||||
- `compat / deprecated / dead`:本切片没有新增或恢复任何 surface。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# S7b current Electron guard alignment evidence
|
||||
|
||||
## 结论
|
||||
|
||||
两个 Electron guard 已改为验证当前事实:
|
||||
|
||||
- packaged renderer 的 App Server client alias 指向 current `browser.ts`,不再要求旧 `index.ts`。
|
||||
- 根规则只检查仓库级 owner/禁止旁路;retired Rust command 细节继续由 internal/roadmap guard 检查。
|
||||
- quality guard 检查 Gate A/B、真实 GUI、`verify:gui-smoke` 和生产 no-mock 语义,不绑定已删除的固定旧句。
|
||||
|
||||
生产 `vite.config.ts`、`AGENTS.md`、`internal/aiprompts/**`、skills、Electron 和 App Server 均未修改。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused `current-entrypoints.test.mjs` + `current-rules-guard.test.mjs`:25/25 passed。
|
||||
- smart Vitest 后续在 batch 15/16 再次覆盖两 guard:passed。
|
||||
- `npm test -- --only-batch 12` 当前分片:16 files / 151 tests passed。
|
||||
- claimed diff `git diff --check`:passed。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`vite.config.ts` browser entry、仓库级规则、aiprompts 领域事实源、Gate A/B 质量证据。
|
||||
- `test-only`:两份 Electron current guard。
|
||||
- `dead`:`index.ts` renderer alias 旧断言、要求根文件复制 retired 细节和固定旧句的断言。
|
||||
- `compat / deprecated`:本切片无保留项。
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
# S7c App Server Runtime Guard Currentization Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`appServerRuntimeBoundary` 已从历史 Agent adapter 事实校正到 current App Server / lime-agent /
|
||||
agent-runtime / tool-runtime owner。守卫没有增加 legacy whitelist,也没有放宽 `runtime_backend.rs`
|
||||
的 `480` 行门槛;focused guard `25/25`、App Server client contract `288 checks` 和 legacy
|
||||
report `0/0/0` 均通过。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:App Server 只通过 `agent_runtime_registry.rs` 直接调用
|
||||
`lime_agent::initialize_agent_runtime`;主 turn streaming owner 是
|
||||
`stream_current_provider_turn`;session config 由 `lime-agent/session_configuration.rs` 直接
|
||||
re-export `agent-runtime` current 类型与 builder;workspace patch 批执行留在
|
||||
`workspace_patch_host.rs` 的 `RuntimeTool::execute_call`;shell permission / execution decision
|
||||
归 `tool-runtime`。
|
||||
- `current`:`image_command/events.rs`、`runtime/value_fields.rs` 和
|
||||
`runtime_backend/execution_backend.rs` 已登记为现役拆分 owner,主文件体量与职责回流守卫继续
|
||||
生效。
|
||||
- `compat / deprecated`:本切片没有保留或新增 surface。
|
||||
- `dead / forbidden-to-restore`:`session_config_adapter.rs`、
|
||||
`workspace_patch_runtime_adapter.rs`、`agent_tools/tool_orchestrator.rs`。守卫改为断言文件不得
|
||||
恢复,而不是为测试重建 adapter。
|
||||
|
||||
## 变更事实
|
||||
|
||||
- `productionSource` 新增 `*_tests.rs` 排除规则,test-only 源码不再被生产耦合扫描误报。
|
||||
- runtime 初始化扫描从模糊的 `initialize_agent_runtime(` 收紧为
|
||||
`lime_agent::initialize_agent_runtime(`,只允许 registry current owner。
|
||||
- Agent execution snippets 对齐 `stream_current_provider_turn`、
|
||||
`run_agent_turn_with_policy` 与 current provider configuration 入口。
|
||||
- session configuration、workspace patch 与 shell execution 断言改为验证现役 owner,并为三个
|
||||
已删除 adapter 增加负向回流守卫。
|
||||
- `app-server-agent-runtime-boundary-governance.md` 同步 current streaming、session config、
|
||||
workspace patch 与 tool-runtime ownership;没有修改 Rust 生产行为。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
./node_modules/.bin/vitest run \
|
||||
src/lib/governance/appServerRuntimeBoundary.test.ts --reporter=dot
|
||||
=> 1 file passed; 25 passed; 0 failed
|
||||
|
||||
node scripts/check-app-server-client-contract.mjs
|
||||
=> ok (288 checks)
|
||||
|
||||
npm run governance:legacy-report
|
||||
=> zero-reference candidates: 0
|
||||
=> classification drift candidates: 0
|
||||
=> boundary violations: 0
|
||||
|
||||
git diff --check -- <S7c/S7d/S7f claimed implementation files>
|
||||
=> passed
|
||||
```
|
||||
|
||||
## 阻塞与未验证
|
||||
|
||||
- 本切片是治理 guard / roadmap currentization,不改变 Renderer、Electron、JSON-RPC 或 GUI
|
||||
行为,因此未运行 GUI smoke 或 Gate B;这些结果不能被解读为 GUI 可交付证据。
|
||||
- 未运行聚合 `npm run test:contracts` 或全量 Vitest;本轮只执行贴边的 App Server client
|
||||
contract 与 focused guard。当前没有 S7c 局部阻塞。
|
||||
|
||||
## 下一刀
|
||||
|
||||
后续 owner 拆分必须继续登记到同一 guard,并保持 `480` 行阈值和 dead adapter 负向断言;不要
|
||||
用扩大允许集合消除真实越界。S7c 完成后应回到 S2l canonical message/history Gate B 主链,
|
||||
而不是继续扩张治理规则。
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
# S7d Image Command Events Split Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
image command 的 canonical image / workflow / Tool Item / turn event projection 已从
|
||||
`image_command/mod.rs` 原样抽到私有 `image_command/events.rs` owner。主文件从基线 `909` 行降到
|
||||
`234` 行,新 events owner 为 `696` 行;workflow facade、事件顺序、payload、协议与 GUI surface
|
||||
均未另起第二套实现。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`image_command/mod.rs` 是图片命令 workflow orchestration facade,负责 intent、
|
||||
presentation、media task 调用与成功/失败分支编排。
|
||||
- `current`:`image_command/events.rs` 是该 workflow 内部 event projection 的唯一 owner,负责
|
||||
workflow audit、assistant presentation、canonical Tool Item、image task domain event 与
|
||||
`turn.completed` 投影。
|
||||
- `compat / deprecated / dead`:本切片没有新增或保留这些 surface;没有 raw Tool lifecycle、
|
||||
fallback、mock 或旧 image skill launch 恢复。
|
||||
|
||||
## 变更事实
|
||||
|
||||
- `mod.rs` 新增私有 `mod events`,只导入 workflow orchestration 实际调用的 event helper。
|
||||
- 原 `mod.rs:262-908` 的 workflow step facts、audit payload、presentation event、task create
|
||||
event、canonical Tool Item 与 terminal event helper 迁入 `events.rs`。
|
||||
- 测试需要的 event DTO import 改为 `#[cfg(test)]`,生产 facade 不再持有 event projection
|
||||
的具体类型依赖。
|
||||
- `appServerRuntimeBoundary` 已把 `events.rs` 登记为 image command 拆分 owner,主文件
|
||||
`<=800` 行守卫继续生效。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
rustfmt --edition 2021 --check \
|
||||
lime-rs/crates/app-server/src/runtime_backend/image_command/mod.rs \
|
||||
lime-rs/crates/app-server/src/runtime_backend/image_command/events.rs
|
||||
=> passed
|
||||
|
||||
cargo test --manifest-path lime-rs/Cargo.toml -p app-server --lib \
|
||||
"runtime_backend::image_command::tests::" -- --nocapture
|
||||
=> 10 passed; 0 failed; 1085 filtered out
|
||||
|
||||
cargo check --manifest-path lime-rs/Cargo.toml -p app-server
|
||||
=> passed
|
||||
|
||||
./node_modules/.bin/vitest run \
|
||||
src/lib/governance/appServerRuntimeBoundary.test.ts --reporter=dot
|
||||
=> 25 passed; 0 failed
|
||||
|
||||
git diff --check -- <S7c/S7d/S7f claimed implementation files>
|
||||
=> passed
|
||||
```
|
||||
|
||||
Rust test build 报告了共享 `runtime_backend/tests.rs` 的 4 条既存 unused/dead-code warning;
|
||||
S7d 未修改该文件,测试与 check 均以退出码 `0` 完成。
|
||||
|
||||
## 阻塞与协调状态
|
||||
|
||||
- 原 owner `image-command-events` 已断线;实现、focused test、`cargo check` 与 guard 已客观
|
||||
完成,但其 claim 仍为 active,且没有 owner handoff / release。本 evidence 不代替 coordinator
|
||||
做 claim/lock 清理。
|
||||
- 本切片没有改变 GUI 或跨层协议,未运行 GUI smoke / Gate B;现有验证只证明结构抽离与 Rust
|
||||
行为回归,不单独构成 GUI 可交付证据。
|
||||
|
||||
## 下一刀
|
||||
|
||||
`image_command/presentation.rs` 当前仍超过 `800` 行。若继续扩 presentation,应先按生成调用、
|
||||
解析/校验或 Soul presentation 的现有职责边界另开窄 claim 拆分;不得把事件 helper 折回
|
||||
`mod.rs`,也不得借拆分改变 canonical Tool / image task / turn event 顺序。
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
# S7e Runtime Value Fields Split Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`RuntimeCore` facade 中通用的 ID、JSON 字段与时间 helper 已原样迁入私有
|
||||
`runtime/value_fields.rs` owner。`runtime.rs` 从 `741` 行降到 `656` 行,只保留状态、依赖注入、
|
||||
backend contract 与 facade wiring;没有修改持久化、lifecycle、协议、compat 或 fallback 行为。
|
||||
|
||||
## 边界与可见性
|
||||
|
||||
- `current`:`runtime.rs` 继续是 `RuntimeCore` facade/state wiring owner;`value_fields.rs` 是通用
|
||||
runtime 值字段 helper 的唯一 current owner。
|
||||
- `new_id`、`optional_id_or_new`、`string_field`、`string_array_field`、`raw_string_field`、
|
||||
`metadata_string`、`timestamp`、`timestamp_seconds`、`json_string` 通过 facade 私有导入继续只供
|
||||
`runtime/**` 后代使用。
|
||||
- `event_request_id` 在 facade 上保留原 `pub(super)` 重导出,因此 crate 内既有调用可见性不变;
|
||||
私有 `value_fields` 模块没有成为新的外部入口。
|
||||
- `compat` / `deprecated` / `dead`:本切片没有新增或保留这些 surface,也没有建立包装层。
|
||||
- S2l 的 `canonical_thread_store`、`projection_repair`、`event_mapper` 以及 `runtime_backend` 均未触碰。
|
||||
|
||||
## 变更
|
||||
|
||||
- 新增 `runtime/value_fields.rs`,承接原 `runtime.rs:652-738` 的 10 个 helper,函数体保持原样。
|
||||
- `chrono::{SecondsFormat, Utc}` 与 `uuid::Uuid` 随实现迁入新 owner。
|
||||
- `runtime.rs` 只新增模块声明、私有导入和 `event_request_id` 的同级重导出。
|
||||
- guard support/test 未修改;`appServerRuntimeBoundary` owner list 更新仍由 coordinator 执行。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
rustfmt --edition 2021 --config skip_children=true \
|
||||
lime-rs/crates/app-server/src/runtime.rs \
|
||||
lime-rs/crates/app-server/src/runtime/value_fields.rs
|
||||
=> passed
|
||||
|
||||
cargo test --manifest-path lime-rs/Cargo.toml -p app-server --lib -j 2 \
|
||||
"runtime::tests::" -- --nocapture
|
||||
=> 234 passed; 0 failed; 859 filtered out
|
||||
|
||||
cargo check --manifest-path lime-rs/Cargo.toml -p app-server
|
||||
=> passed
|
||||
|
||||
git diff --check -- lime-rs/crates/app-server/src/runtime.rs
|
||||
=> passed
|
||||
|
||||
rg -n '[[:blank:]]+$' \
|
||||
lime-rs/crates/app-server/src/runtime/value_fields.rs \
|
||||
internal/research/refactor/v2/13-evidence/2026-07-14-s7e-runtime-value-fields-split.md
|
||||
=> no matches
|
||||
```
|
||||
|
||||
测试编译输出包含 `runtime_backend/tests.rs` 的 4 条既存 unused/dead-code warning;本切片没有修改该
|
||||
文件,且测试与 check 均以退出码 `0` 完成。
|
||||
|
||||
## 下一刀
|
||||
|
||||
coordinator 应把 `value_fields.rs` 加入 `appServerRuntimeBoundary` 的允许 owner 并运行对应 guard;
|
||||
随后继续按独立 claim 拆分 facade 中剩余职责,不应把 helper 重新堆回 `runtime.rs`。
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
# S7f Runtime Backend Execution Trait Split Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`ExecutionBackend for RuntimeBackend` 的 trait adaptation 已作为一个完整单元迁入私有
|
||||
`runtime_backend/execution_backend.rs` owner。`runtime_backend.rs` 从 HEAD 基线 `574` 行降到
|
||||
当前工作树 `403` 行,新模块为 `182` 行;现有 `480` 行 guard 未提高,turn orchestration 仍由
|
||||
`RuntimeBackend` 根 owner 承接。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`runtime_backend.rs` 继续负责 RuntimeBackend state、依赖 wiring 和主 turn
|
||||
orchestration。
|
||||
- `current`:`runtime_backend/execution_backend.rs` 是 `ExecutionBackend` trait adapter 的唯一
|
||||
owner,承接 app data source 注入、start/cancel/close、action response、tool inventory 和 worker
|
||||
request/artifact 委托。
|
||||
- `compat / deprecated / dead`:本切片没有新增或保留任何 surface;没有第二个 backend、包装
|
||||
fallback 或 mock execution owner。
|
||||
|
||||
## 变更事实
|
||||
|
||||
- 根模块新增私有 `mod execution_backend`,trait 相关 import 随实现迁入新 owner。
|
||||
- 原 `ExecutionBackend for RuntimeBackend` 的 9 个方法和 `action_response_error` helper 一并
|
||||
迁移,调用仍委托原有 RuntimeBackend / action response / tool inventory / plugin worker /
|
||||
workspace patch owner。
|
||||
- `appServerRuntimeBoundary` 与 App Server client contract owner list 已登记新模块;根文件仍受
|
||||
`<=480` 行与职责回流守卫约束。
|
||||
- 共享 `runtime_backend.rs` 当前还包含 S2l 并行加入的 `emit_agent_message_finish` import 和两处
|
||||
terminal 调用;它们不属于 S7f,本 evidence 不把该 message lifecycle diff 归入 trait 拆分。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
rustfmt --edition 2021 --check \
|
||||
lime-rs/crates/app-server/src/runtime_backend.rs \
|
||||
lime-rs/crates/app-server/src/runtime_backend/execution_backend.rs
|
||||
=> passed
|
||||
|
||||
cargo test --manifest-path lime-rs/Cargo.toml -p app-server --lib \
|
||||
"runtime_backend::tests::turn_flows::" -- --nocapture
|
||||
=> 5 passed; 0 failed
|
||||
|
||||
cargo test --manifest-path lime-rs/Cargo.toml -p app-server --lib \
|
||||
"runtime_backend::tests::tool_inventory::" -- --nocapture
|
||||
=> 6 passed; 0 failed
|
||||
|
||||
cargo test --manifest-path lime-rs/Cargo.toml -p app-server --lib \
|
||||
"runtime_backend::initialization_tests::" -- --nocapture
|
||||
=> 7 passed; 0 failed
|
||||
|
||||
cargo check --manifest-path lime-rs/Cargo.toml -p app-server
|
||||
=> passed
|
||||
|
||||
./node_modules/.bin/vitest run \
|
||||
src/lib/governance/appServerRuntimeBoundary.test.ts --reporter=dot
|
||||
=> 25 passed; 0 failed
|
||||
|
||||
node scripts/check-app-server-client-contract.mjs
|
||||
=> ok (288 checks)
|
||||
|
||||
git diff --check -- <S7c/S7d/S7f claimed implementation files>
|
||||
=> passed
|
||||
```
|
||||
|
||||
三组 Rust test 都报告共享 `runtime_backend/tests.rs` 的 4 条既存 unused/dead-code warning;测试与
|
||||
check 均以退出码 `0` 完成。
|
||||
|
||||
## 阻塞与未验证
|
||||
|
||||
- S7f 没有修改 provider、协议、Renderer、Electron 或 GUI,未运行 GUI smoke / Gate B;focused
|
||||
结果证明 trait wiring 未回归,但不覆盖真实桌面产品链。
|
||||
- 未运行 app-server 全量 Rust test 或聚合 `npm run test:contracts`;当前没有 S7f 局部编译、
|
||||
contract 或 guard 阻塞。
|
||||
- S2l message terminal lifecycle 仍由其 owner 负责验证和收口,不能因共享根文件通过 S7f 测试
|
||||
就视为完成。
|
||||
|
||||
## 下一刀
|
||||
|
||||
根文件已低于 `480` 行,不应为追求更小文件继续机械拆分。下一步应由 S2l owner 完成 canonical
|
||||
message terminal/history 的 Gate B 证据;只有根模块再次出现独立、可命名的职责时,才另开窄
|
||||
claim 继续拆分。
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
# S7h Batch 40 Current Fixture Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Smart Vitest batch 40 暴露的是测试仍在描述已退役事件语义,不是 production owner 缺失。
|
||||
S7h 只校正 current fixture:Approval 只使用 canonical `request_id`;缺少 canonical Item lifecycle 的
|
||||
raw message/turn 不得进入 listener;raw `tool_completed` 不得再合成 legacy `tool_start/tool_end`
|
||||
fan-out。生产 parser、event gateway、projection 和 App Server 均未由本切片修改。
|
||||
|
||||
## 实际补丁
|
||||
|
||||
- `src/lib/api/agentProtocol.test.ts`:移除同一 Approval 同时携带 `request_id` 与 `actionId` 的双身份
|
||||
fixture,required/resolved 两端都只保留 canonical `request_id`。
|
||||
- `src/lib/api/agentRuntimeEvents.test.ts`:把 raw `text_delta + turn_completed` 的正向投递断言改为
|
||||
fail-closed;没有 canonical Item lifecycle 时 listener 必须保持零调用。
|
||||
- `src/lib/api/agentRuntimeEvents.test.ts`:把 raw `tool_completed` 合成两条 legacy tool event 的正向
|
||||
断言改为 fail-closed;listener 必须保持零调用。
|
||||
- 两份测试文件中的其他并行 diff 不归 S7h;本 evidence 不把它们计入本切片变更。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:Approval 的 canonical `request_id`;App Server canonical Item lifecycle;
|
||||
`projectAgentRuntimeSequenceGatePayloads(..., "fail-closed", ...)` 事件门禁。
|
||||
- `test-only`:本切片修改的协议与 runtime event fixtures。
|
||||
- `dead / forbidden-to-restore`:Approval 双 ID / `actionId` 优先级、无 Item lifecycle 的 raw
|
||||
message/turn 直投、raw `tool_completed` 的 legacy fan-out。
|
||||
- `compat / deprecated`:本切片没有新增或保留项。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npm exec vitest run \
|
||||
src/lib/api/agentProtocol.test.ts \
|
||||
src/lib/api/agentRuntimeEvents.test.ts
|
||||
=> 2 files / 34 tests passed
|
||||
|
||||
npm exec vitest run \
|
||||
src/components/agent/chat/projection/agentUiEventProjection.test.ts \
|
||||
src/lib/api/agentRuntime/eventSequenceGate.test.ts \
|
||||
src/lib/api/agentRuntime/canonicalApprovalItemProjection.test.ts \
|
||||
src/components/agent/chat/projection/actionProjection.test.ts \
|
||||
src/components/agent/chat/projection/toolEventProjection.test.ts
|
||||
=> 5 files / 52 tests passed
|
||||
```
|
||||
|
||||
第二组是 closeout 时对当前共享工作树的扩展复验;测试集已大于实施时记录的 `38/38`,因此以本次
|
||||
实际输出 `52/52` 为准。本切片未恢复 raw event adapter、tool fan-out 或 Approval compat 身份。
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# S7i Plugin Runtime Thread Fixture Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Plugin runtime production contract 已要求 start/cancel/get 结果和 task lookup 携带 canonical
|
||||
`threadId`,batch 44 失败来自 `pluginRuntime.test.ts` 仍构造 session-only fixture。S7i 只把测试
|
||||
输入输出对齐现有 current contract,没有修改 command、Electron Host、App Server 或生产实现。
|
||||
|
||||
## 实际补丁
|
||||
|
||||
- start task accepted fixture 补 `threadId: "thread-1"`。
|
||||
- cancel/get task 的返回 fixture 补 canonical `threadId`。
|
||||
- cancel/get 请求从 `sessionId` 改为 contract 要求的 `threadId`。
|
||||
- task snapshot 与 diagnostic/error-envelope 负向用例同步使用 `threadId`,没有增加 session fallback。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`src/lib/api/pluginRuntime.ts` 的 `PluginRuntimeStartTaskResult`、
|
||||
`PluginRuntimeCancelTaskRequest/Result`、`PluginRuntimeGetTaskRequest` 与
|
||||
`PluginRuntimeTaskSnapshot` canonical thread identity。
|
||||
- `test-only`:`src/lib/api/pluginRuntime.test.ts` 的 command facade fixtures。
|
||||
- `dead / forbidden-to-restore`:cancel/get 仅凭 `sessionId` 定位 Plugin task 的旧 fixture 与 fallback
|
||||
语义。
|
||||
- `compat / deprecated`:本切片没有新增或保留项。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npm exec vitest run src/lib/api/pluginRuntime.test.ts
|
||||
=> 1 file / 6 tests passed
|
||||
```
|
||||
|
||||
验证针对当前共享工作树;S7i 的 claimed patch 为 test-only,未把相邻生产或其他并行 diff 归入本
|
||||
切片。
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
# S7i Vitest Smart Targeted State Isolation Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`vitest-smart` 的默认 state 现在只记录可恢复的 full、`--from-batch` 与 `--resume` 运行。
|
||||
`--only-batch` 和 `--list-batches` 只作为定向诊断,不再创建、覆盖或中断写回
|
||||
`.lime/test/vitest-smart-last-run.json`,因此定向失败不能破坏已有的全量续跑状态。
|
||||
|
||||
## 边界与行为
|
||||
|
||||
- `current`:full、`--from-batch`、`--resume` 继续持久化 running、failed、passed 与 signal
|
||||
interruption 状态,原退出码和续跑提示保持不变。
|
||||
- `current diagnostic`:`--only-batch` 与 `--list-batches` 仍构造内存态并执行原选择逻辑,但所有
|
||||
state update 都通过 `persist: false` 保持只读。
|
||||
- signal handler 只在当前 run 允许持久化时写回 state;targeted run 被中断时只输出只读诊断提示。
|
||||
- `compat` / `deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:targeted 或 list 命令覆盖默认 resume state 的行为。
|
||||
|
||||
## 回归
|
||||
|
||||
新增单元回归用临时 state 文件写入 sentinel,然后以 `persist: false` 调用 `updateRunState`:
|
||||
|
||||
- 返回的内存 state 仍获得 `updated_at`;
|
||||
- sentinel 文件字节保持不变;
|
||||
- `shouldPersistRunState` 对 full 返回 `true`,对 targeted/list 返回 `false`。
|
||||
|
||||
本次 closeout 直接使用 focused Vitest,不经过 `vitest-smart` runner。默认 state 文件验证前后
|
||||
SHA-256 均为:
|
||||
|
||||
```text
|
||||
6dc1af8fb641b31f2a50af5ad4096c37f3707d083f87ad9ace2ef81b3ea168e2
|
||||
```
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npx vitest run scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> 1 file / 11 tests passed
|
||||
|
||||
npm run governance:scripts
|
||||
=> passed; retiredRoot=0, retiredDirs=0, untrackedRoot=0, untrackedDirs=0
|
||||
|
||||
npx eslint scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
|
||||
npx prettier --check scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
|
||||
git diff --check -- scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
```
|
||||
|
||||
## 范围
|
||||
|
||||
本切片未修改中央执行计划、默认 state 文件、应用生产代码、Rust、Electron、协议、Renderer、GUI
|
||||
或其他 claim。现有 state 的历史状态也未被手工修复;后续续跑应由 full/from-batch runner 自己更新。
|
||||
|
||||
## 2026-07-15 复核
|
||||
|
||||
本轮再次用 direct focused Vitest 复核,没有经过 `vitest-smart` runner。复核前后默认 state 的
|
||||
SHA-256 均为:
|
||||
|
||||
```text
|
||||
4823ad2c674fb8811a4e4beaf20b11df1731ebb6c6ed79278ac9d7db0ee47a65
|
||||
```
|
||||
|
||||
复核结果:
|
||||
|
||||
```text
|
||||
npx vitest run scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> 1 file / 11 tests passed
|
||||
|
||||
npm run governance:scripts
|
||||
=> passed; retiredRoot=0, retiredDirs=0, untrackedRoot=0, untrackedDirs=0
|
||||
|
||||
npx eslint scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
|
||||
npx prettier --check scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
|
||||
git diff --check -- scripts/run-vitest-smart.mjs scripts/lib/run-vitest-smart.unit.test.mjs
|
||||
=> passed
|
||||
```
|
||||
|
||||
原 closeout 记录的 `6dc1af...` 是当时真实的前后哈希;之后 coordinator 的 resumable suite 已合法
|
||||
推进 state。此次复核只证明当前定向命令未改写当下的 resumable state,不把不同时点的哈希混为
|
||||
同一次运行。
|
||||
|
||||
## 协调事实
|
||||
|
||||
- `S7i-vitest-smart-targeted-state-isolation` 与
|
||||
`S7i-plugin-runtime-thread-fixture-alignment` 是两个完整 canonical slice ID,不能用短号 `S7i`
|
||||
合并 claim、状态、写集或 evidence。前者已经 completed/released;后者仍有独立 active claim 与
|
||||
lock,本 evidence 没有触碰其文件。
|
||||
- 复核时 `S7l-plugin-host-bridge-thread-fixture-alignment`、
|
||||
`S7m-image-workbench-boundary-guard-alignment`、
|
||||
`S7n-agent-chat-current-api-fixture-alignment` 均有 claim,但没有对应 lock owner 文件。这里仅记录
|
||||
协调事实,不代替 coordinator 补锁、释放或修改状态;并行避让继续依赖各 claim 的窄写集。
|
||||
|
||||
S7i targeted state isolation 完成度:`100%`。Refactor V2 仍在进行中,后续由 coordinator 继续处理
|
||||
S7 其他 refinement closeout 与真实失败批次。
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# S7j Plugin Capability Thread Fixture Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Plugin capability current owner 会在 startTask 后持久化 canonical `threadId`,后续 get/cancel 必须以
|
||||
该 thread identity 访问并校验返回身份。batch 52 的 shared fixture 仍返回 session-only start/cancel
|
||||
结果,导致测试与 production contract 漂移;S7j 只修正测试 fixture 和对应断言。
|
||||
|
||||
## 实际补丁
|
||||
|
||||
- `capabilityDispatcherTestFixtures.ts` 的 startTask fixture 返回
|
||||
`threadId: "agent-runtime-thread-1"`。
|
||||
- cancelTask fixture 改为返回完整 cancel result,并回显请求中的 canonical `threadId`。
|
||||
- `capabilityDispatcher.unit.test.ts` 的 cancel handoff 断言从 `sessionId` 改为
|
||||
`threadId: "agent-runtime-thread-1"`。
|
||||
- `AgentRuntimeCapabilityHost`、dispatcher production implementation 和协议类型均未由本切片修改。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`AgentRuntimeCapabilityHost` 持久化的 `RuntimeTaskState.threadId`,以及 get/cancel 的
|
||||
canonical thread lookup 和 identity conflict check。
|
||||
- `test-only`:shared capability dispatcher fixture 与 cancel handoff assertion。
|
||||
- `dead / forbidden-to-restore`:仅凭 `sessionId` 执行 Plugin task get/cancel、缺失 thread identity 的
|
||||
accepted/cancel result。
|
||||
- `compat / deprecated`:本切片没有新增或保留项。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npm exec vitest run src/features/plugin/runtime/capabilityDispatcher.unit.test.ts
|
||||
=> 1 file / 20 tests passed
|
||||
```
|
||||
|
||||
该测试真实加载 `src/features/plugin/testing/capabilityDispatcherTestFixtures.ts`,因此同时覆盖 shared
|
||||
fixture 与 dispatcher assertion;验证针对当前共享工作树。
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# S7k Client Factory Session Read Owner Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`createAgentRuntimeClient` 注入 standard runtime client 时,只把它用于 turn lifecycle;
|
||||
`getAgentRuntimeThreadRead(sessionId)` 仍由 Lime `threadClient` 通过 App Server `readSession` 读取并投影。
|
||||
batch 53 的测试把 session read 错误地断言给 `standardRuntimeClient.readThread`。S7k 只纠正 owner
|
||||
断言,没有修改 client factory 或生产路由。
|
||||
|
||||
## 实际补丁
|
||||
|
||||
- 测试名称明确区分“standard client lifecycle injection”与“App Server session read owner”。
|
||||
- 保留 `standardRuntimeClient.startTurn` 的正向调用断言。
|
||||
- `standardRuntimeClient.readThread` 改为零调用断言。
|
||||
- `appServerClient.readSession({ sessionId: "session-1" })` 改为正向调用断言。
|
||||
- `appServerClient.startTurn` 与 legacy `bridgeInvoke` 继续保持零调用。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:turn lifecycle 的 standard runtime client 注入;
|
||||
`getAgentRuntimeThreadRead(sessionId) -> appServerClient.readSession -> projectAppServerSessionReadResult`
|
||||
的 Lime App Server read model owner。
|
||||
- `test-only`:`src/lib/api/agentRuntime/clientFactory.test.ts` 的 owner assertion。
|
||||
- `dead / forbidden-to-restore`:把 session read 路由到注入 client `readThread` 的错误 fixture 语义,
|
||||
以及 legacy bridge fallback。
|
||||
- `compat / deprecated`:本切片没有新增或保留项。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npm exec vitest run src/lib/api/agentRuntime/clientFactory.test.ts
|
||||
=> 1 file / 10 tests passed
|
||||
```
|
||||
|
||||
## 后续
|
||||
|
||||
`AgentRuntimeLifecycleClient` 类型当前仍包含本聚合路径零调用的 `readThread`。后续可在独立 current
|
||||
owner 切片确认其他消费者后收窄类型;本 test-only 修复不通过修改 production type 扩大范围。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# S7l Plugin Host Bridge Thread Fixture Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Plugin Runtime Page 的 production client 已通过 session gateway 调用 App Server canonical
|
||||
`readThread`,batch 55 失败来自 Host Bridge page fixture 只提供 `readSession`。S7l 为测试 client 补齐
|
||||
`readThread` 和 canonical Thread/Turn response,并把断言对齐 thread-first 读取;生产页面、gateway、
|
||||
Host Bridge 和 App Server 均未修改。
|
||||
|
||||
## 实际补丁
|
||||
|
||||
- `PluginRuntimePage.testFixtures.tsx` 的 App Server mock catalog 与 factory 返回值补 `readThread`。
|
||||
- `readThread` fixture 返回 canonical thread identity、`turnsView`、完整 Turn identity/status 与空 Item
|
||||
列表;fixture response id 顺延,避免复用同一 JSON-RPC id。
|
||||
- `PluginRuntimePage.hostBridge.test.tsx` 从期待
|
||||
`readSession({ sessionId: "plugin-session-1" })` 改为期待
|
||||
`readThread({ threadId: "plugin-thread-1", turnsView: "full" })`。
|
||||
- 既有 `readSession` mock 没有被声明为全局 dead;本切片只否定它作为 Plugin runtime task refresh
|
||||
owner 的旧测试语义。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`createPluginRuntimeClientFromAppServer` 的 session gateway、App Server
|
||||
`thread/read`、canonical Thread/Turn projection。
|
||||
- `test-only`:Runtime Page App Server mock、canonical read response 与 Host Bridge assertion。
|
||||
- `dead / forbidden-to-restore`:Plugin runtime task refresh 通过 session-only `readSession` 完成的旧
|
||||
fixture/fallback 语义。
|
||||
- `compat / deprecated`:本切片没有新增或保留项。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npm exec vitest run src/features/plugin/ui/PluginRuntimePage.hostBridge.test.tsx
|
||||
=> 1 file / 9 tests passed
|
||||
```
|
||||
|
||||
验证针对当前共享工作树;test-only fixture 没有引入生产 mock fallback,也没有恢复 session-only task
|
||||
identity。
|
||||
|
||||
## 聚合收尾
|
||||
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed;S7l 为 9/9。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已推进并完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
# S7m Image Workbench Boundary Guard Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
图片工作台边界守卫已对齐当前组合链:`AgentChatWorkspace` 只装配
|
||||
`useWorkspaceSendSurfaceRuntime`,send surface 再委托 `useWorkspaceImageWorkbenchRuntime`。本切片只
|
||||
修正 test-only 静态守卫,没有修改图片工作台、发送链、GUI、协议或 Rust 的生产行为。
|
||||
|
||||
## 边界
|
||||
|
||||
- `current`:`AgentChatWorkspace -> useWorkspaceSendSurfaceRuntime -> useWorkspaceImageWorkbenchRuntime`
|
||||
是唯一继续演进的组合链。
|
||||
- 守卫要求顶层 workspace 不再直接调用 image-workbench owner,并要求 send surface 明确调用当前
|
||||
owner。
|
||||
- 既有三段内部 glue 只能留在 `useWorkspaceImageWorkbenchRuntime`;它们不能回流到顶层 workspace
|
||||
或 send surface。
|
||||
- owner 的小文件门槛继续保持 `< 160` 行,避免把拆出的实现重新堆回组合 owner。
|
||||
- `compat` / `deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:顶层 workspace 或 send surface 重新拼装三段图片 glue 的路径。
|
||||
|
||||
## 验证
|
||||
|
||||
以下命令验证的是当前共享工作树,不单独声明相邻生产改动归属于本切片:
|
||||
|
||||
```text
|
||||
npx vitest run \
|
||||
src/components/agent/chat/AgentChatWorkspace.imageWorkbenchRuntimeBoundaryGuard.test.ts
|
||||
=> 1 file / 1 test passed
|
||||
|
||||
npx eslint \
|
||||
src/components/agent/chat/AgentChatWorkspace.imageWorkbenchRuntimeBoundaryGuard.test.ts
|
||||
=> passed
|
||||
|
||||
npx prettier --check \
|
||||
src/components/agent/chat/AgentChatWorkspace.imageWorkbenchRuntimeBoundaryGuard.test.ts
|
||||
=> passed
|
||||
|
||||
git diff --check -- \
|
||||
src/components/agent/chat/AgentChatWorkspace.imageWorkbenchRuntimeBoundaryGuard.test.ts
|
||||
=> passed
|
||||
```
|
||||
|
||||
这是 test-only 结构边界校验,不是 GUI smoke 或 Gate B;本切片没有用户可见行为变化,因此没有把
|
||||
focused guard 冒充产品交付证据。
|
||||
|
||||
## 协调
|
||||
|
||||
- claim 声明的源码写集只有
|
||||
`AgentChatWorkspace.imageWorkbenchRuntimeBoundaryGuard.test.ts`;production image/send owners、
|
||||
canonical roster 热区和中央执行计划均为避让区。
|
||||
- 复核时 S7l、S7m、S7n 的完整 canonical slice claim 均存在,但三个 slice 都没有对应 lock
|
||||
owner 文件。该事实不等于自动释放或互斥成立;并行施工仍必须按 claim 的窄写集避让。
|
||||
- 本次证据收尾只写本 evidence,没有修改 claim、lock、handoff 或中央计划。
|
||||
|
||||
S7m focused boundary alignment 完成度:`100%`;smart suite 的继续续跑与 slice 状态同步由
|
||||
coordinator 处理。
|
||||
|
||||
## 聚合收尾
|
||||
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed;S7m 为 1/1。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已推进并完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
# S7n Agent Chat Current API Fixture Alignment Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
Agent Chat 集成测试的共享 fixture 已对齐生产 hook 实际消费的 current API:Skills 使用
|
||||
`skillExecutionApi.listExecutableSkills` 后按 stable ID 读取详情;工具库存 mock 绑定精确的
|
||||
`agentRuntime/inventoryClient` owner,不再假设 compat `agentRuntime` root barrel 导出库存方法。
|
||||
本切片只修复 test-only fixture,没有增加生产 fallback 或改变 GUI 行为。
|
||||
|
||||
## 变更边界
|
||||
|
||||
- `current test fixture`:对 `@/lib/api/skill-execution` 使用 partial actual mock,保留模块 current
|
||||
surface,并显式 mock `listExecutableSkills` 与 `getSkillDetail`。
|
||||
- 默认 executable skill fixture 提供稳定 `skill_id` 与名称,使自动引导覆盖真实的“先列举、后详情”
|
||||
调用顺序。
|
||||
- 工具库存 mock 从 `@/lib/api/agentRuntime` root 移到
|
||||
`@/lib/api/agentRuntime/inventoryClient`,与 `useWorkspaceHarnessInventoryRuntime` 的 current import
|
||||
边界一致。
|
||||
- `compat` / `deprecated`:没有为旧 root barrel 补导出或测试 wrapper。
|
||||
- `dead / forbidden-to-restore`:测试继续从 compat root mock `getAgentRuntimeToolInventory`,或省略
|
||||
`listExecutableSkills` 后依赖偶然 fallback 的路径。
|
||||
|
||||
## 验证
|
||||
|
||||
```text
|
||||
npx vitest run \
|
||||
src/components/agent/chat/index.autoGuide03.test.tsx \
|
||||
src/components/agent/chat/index.workbench01.test.tsx
|
||||
=> 2 files / 22 tests passed (7 + 15)
|
||||
|
||||
npx eslint src/components/agent/chat/index.testFixtures.tsx
|
||||
=> passed
|
||||
|
||||
npx prettier --check src/components/agent/chat/index.testFixtures.tsx
|
||||
=> passed
|
||||
|
||||
git diff --check -- src/components/agent/chat/index.testFixtures.tsx
|
||||
=> passed
|
||||
```
|
||||
|
||||
测试 stderr 包含既有 i18n 初始化提示,以及无 Electron Host 时 Workflow Read Model 的 fail-closed
|
||||
诊断;两份 focused 测试仍以退出码 `0` 完成。这组回归证明 current API mock 与组件接线,不证明
|
||||
Electron/preload/App Server 的 Gate B 产品链。
|
||||
|
||||
## 协调
|
||||
|
||||
- claim 的唯一源码写集是 `index.testFixtures.tsx`;`index.autoGuide03.test.tsx`、
|
||||
`index.workbench01.test.tsx` 与两个 production hook 只读。
|
||||
- 复核时 S7l、S7m、S7n 的完整 canonical slice claim 均存在,但三个 slice 都没有对应 lock
|
||||
owner 文件。该事实只用于说明协调缺口,不能把短号或相邻 fixture 当作共同写集。
|
||||
- 本次证据收尾只写本 evidence,没有修改源码、claim、lock、handoff 或中央计划。
|
||||
|
||||
S7n current API fixture alignment 完成度:`100%`;smart suite 的继续续跑与 slice 状态同步由
|
||||
coordinator 处理。
|
||||
|
||||
## 聚合收尾
|
||||
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed;S7n 为 22/22。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已推进并完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# S7o Live Reasoning Unsequenced Tool Order Evidence
|
||||
|
||||
> Superseded by `S7x-canonical-reasoning-position-only`. S7x confirmed that the no-position Tool input cannot pass the current canonical reader, so this historical behavior is `dead / deleted / forbidden-to-restore`, not a current GUI rule.
|
||||
|
||||
## 结论
|
||||
|
||||
reasoning Item 完成时,旧逻辑会先移除已存在的 thinking part;当相邻 tool part 都没有
|
||||
可比较的 canonical position 且正文尚未出现时,fallback 会把 reasoning 追加到工具之后,
|
||||
破坏已经正确的 `Tool -> Reasoning -> Tool` 实时顺序。
|
||||
|
||||
S7o 在无可比较 position 时原位更新已经位于首段正文之前的 reasoning;一旦存在 canonical
|
||||
position,仍由 canonical ordinal/sequence 决定顺序。若临时 thinking 已落在正文之后,仍会
|
||||
移动到正文之前。
|
||||
|
||||
## 写集与分类
|
||||
|
||||
- `current`:canonical Thread Item position 与 live content part 既有顺序共同决定投影。
|
||||
- 修改:`agentStreamReasoningContentSync.ts` 及其 unit test。
|
||||
- 只读:runtime handler 集成 fixture 与 history position helper。
|
||||
- `compat / deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:无 position 时无条件移除并尾插 reasoning 的旧 fallback。
|
||||
|
||||
## 验证
|
||||
|
||||
- reasoning unit:8/8 passed。
|
||||
- runtime handler integration:7/7 passed。
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
|
||||
## Gate B 边界
|
||||
|
||||
- `reasoning-first-visible`:`ok=true`,证明 reasoning 在最终回答前可见。
|
||||
- `web-tools-rendering` 初跑与复跑:`ok=false`。失败点是完成后的过程组默认折叠,未展示
|
||||
search/fetch 展开态;两次底层 content parts 均保持
|
||||
`text|WebSearch|thinking|WebFetch|text`。
|
||||
|
||||
因此 S7o 只关闭 content part 排序目标,不宣称 web-tools 可视展开 Gate B 通过;后者属于独立
|
||||
GUI 产品 follow-up。
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# S7p Stream Binding Canonical Lifecycle Fixture Alignment
|
||||
|
||||
## 结论
|
||||
|
||||
`agentStreamTurnEventBinding` 的 current 正向测试已恢复 production
|
||||
`projectAppServerAgentEventPayload`,并用 canonical AgentMessage、Tool、Reasoning 与 Turn entity
|
||||
驱动 GUI stream listener。无 `canonicalEvent` 的 raw lifecycle 继续 fail closed;中途出现的
|
||||
test-only raw projector workaround 已从这两份 current-chain 测试移除。
|
||||
|
||||
## 根因与修复
|
||||
|
||||
- batch 70 的 7 个失败都来自手写 `params.event` 缺 canonical entity,不是 production projector
|
||||
回归。
|
||||
- stale-recovery 接管无 lock、无存活 owner 且已停止变化的旧 claim;恢复记录位于
|
||||
`.lime/refactor-v2/handoffs/20260714T170700Z-S7p-stream-binding-raw-lifecycle-fixture-alignment-stale-recovery-root.md`。
|
||||
- `runtime.error` fixture 改为 canonical failed Turn;message delta 使用 in-progress AgentMessage
|
||||
Item;WebSearch/WebFetch 使用 canonical Tool Item;reasoning 使用稳定 ordinal 的 canonical Item;
|
||||
completed/canceled 使用 canonical terminal Turn。
|
||||
- tail recovery 仍刻意不提供 terminal,但正文首包本身是合法 canonical AgentMessage Item。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:production projector、canonical Thread/Turn/Item lifecycle、GUI stream listener。
|
||||
- `test-only`:两份 stream binding fixture。
|
||||
- `compat / deprecated`:本切片未保留。
|
||||
- `dead / forbidden-to-restore`:current 正向测试通过 raw lifecycle test projector、raw
|
||||
`runtime.error`、raw tool fan-out、无 canonical entity 的 message/turn lifecycle。
|
||||
|
||||
## 验证
|
||||
|
||||
- 两份 focused stream binding 测试:`16/16` passed。
|
||||
- 与 S7r/S7v 合并 focused:`4 files / 110 tests` passed。
|
||||
- exact ESLint、Prettier、`git diff --check`:passed。
|
||||
- smart Vitest resumable state:`passed`;该状态由并行续跑共同推进,focused 数字仍以上述独立命令为准。
|
||||
|
||||
本切片未修改 production、协议、Electron 或 Rust,因此不声明新的 GUI Gate B。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# S7p Stream Binding Canonical Lifecycle Fixture Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
stream binding 的生产 projector 已对 Thread/Turn/Item lifecycle fail closed:没有
|
||||
`canonicalEvent` 的 raw lifecycle notification 不再进入 Renderer。batch 70 的测试仍用 raw
|
||||
message/tool/reasoning/turn fixture,失败来自 fixture 漂移,不是 production binding 回归。
|
||||
|
||||
S7p 将 stream binding 与 tail recovery fixture 补成 canonical `item/updated` 和
|
||||
`turn/updated` envelope,并直接使用 current `appServerEventPayloadProjection` owner。生产
|
||||
projector、binding、协议与 Electron 均未修改,也没有使用 test-only raw projector绕过门禁。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Item/Turn notification -> production projector -> stream binding。
|
||||
- `test-only`:canonical agent message、tool call、reasoning 与 terminal Turn fixture builder。
|
||||
- `compat / deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:raw lifecycle fixture 作为 current-chain 正向证据。
|
||||
|
||||
## 验证
|
||||
|
||||
- stream binding:14/14 passed。
|
||||
- tail recovery:2/2 passed。
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
|
||||
测试 stderr 中的 inactivity/tail-recovery 日志为覆盖对应恢复分支的预期诊断。
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# S7q Runtime Sync Canonical Turn Fixture Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
runtime sync 只通过 canonical `turn/updated` 识别 terminal Turn。原测试 notification 仅包含
|
||||
raw `turn.completed`,production projector 正确忽略它,因此没有登记 deferred terminal
|
||||
refresh,解绑后会正常回退到 `runtimeSync.sendSettled` detail refresh。
|
||||
|
||||
S7q 只给该 terminal fixture 补充 identity 一致的 canonical completed Turn,使测试验证真实
|
||||
current 链;没有清空 mock 调用掩盖行为,也没有修改 production hook/projector。
|
||||
|
||||
## 写集与协调
|
||||
|
||||
- 本 slice 只认领 `useAgentRuntimeSyncEffects.test.tsx` 中 completed Turn fixture hunk。
|
||||
- 同文件的 retired team-listener 删除属于已完成 S6m,不归 S7q 所有。
|
||||
- production runtime sync、protocol、Electron、Rust 与中央执行计划均避让。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical `turn/updated(status=completed)` terminal reconcile。
|
||||
- `test-only`:completed Turn notification fixture。
|
||||
- `compat / deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:raw `turn.completed` 作为 terminal current-chain 正向证据。
|
||||
|
||||
## 验证
|
||||
|
||||
- runtime sync effects:23/23 passed。
|
||||
- S7l-S7q current-tree 聚合 Vitest:9 files / 86 tests passed。
|
||||
- claimed files exact ESLint、Prettier 与 `git diff --check` passed。
|
||||
- smart Vitest resume 已完成 batch 110,`failed_batch: null`。
|
||||
- `npm run typecheck` passed;`npm run governance:legacy-report` 为 0/0/0。
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
# S7r Canonical Tool Order Fixture Alignment
|
||||
|
||||
## 结论
|
||||
|
||||
WebSearch -> Reasoning -> WebFetch 的 live 顺序测试已从已退役 `tool_start/tool_end` 正向输入迁到
|
||||
canonical Tool Item completion。S2l 的 ordinal-first reasoning 排序实现不需要修改,也没有为
|
||||
缺少 Tool Item position 的 raw card 增加 fallback。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Tool/Reasoning Item sequence 与 ordinal、现有 live content-part projection。
|
||||
- `test-only`:`agentStreamRuntimeHandler.test.ts` 的完整链 fixture。
|
||||
- `compat / deprecated`:无新增。
|
||||
- `dead / forbidden-to-restore`:raw Tool wire 作为正向时间线事实源。
|
||||
|
||||
## 验证
|
||||
|
||||
- `agentStreamRuntimeHandler.test.ts`:`7/7` passed。
|
||||
- 与 S7p/S7v 合并 focused:`4 files / 110 tests` passed。
|
||||
- exact ESLint、Prettier、`git diff --check`:passed。
|
||||
- smart Vitest resumable state:`passed`。
|
||||
|
||||
本切片是 test-only currentization,不声明新的 GUI Gate B。
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# S7s StreamingRenderer Checkpoint Mock Owner Evidence
|
||||
|
||||
## 结论
|
||||
|
||||
`StreamingRenderer.fileChanges.test.tsx` 的 checkpoint 撤销断言失败不是生产行为回归。Release
|
||||
v1.102.0 已把 `fileChangesUndo.ts` 迁到 current
|
||||
`@/lib/api/agentRuntime/threadClient`,但共享测试 harness 仍 mock deprecated
|
||||
`@/lib/api/agentRuntime` root barrel,导致 list/restore spy 均为零调用。
|
||||
|
||||
S7s 将 test-only mock 改为同一个 current `threadClient` owner;没有修改生产组件、恢复逻辑、
|
||||
App Server method、协议或 GUI 行为。Prettier 另要求收敛同文件一处既有条件换行,未触及语义。
|
||||
|
||||
## 治理分类
|
||||
|
||||
- `current`:`fileChangesUndo.ts -> agentRuntime/threadClient -> App Server file checkpoint methods`。
|
||||
- `test-only current fixture`:`StreamingRenderer.testMocks.tsx` 对 current `threadClient` 的 list/restore
|
||||
mock。
|
||||
- `deprecated`:`@/lib/api/agentRuntime` root barrel;本 fixture 不再把它作为 checkpoint owner。
|
||||
- `compat / dead`:本刀未新增 compat;未恢复 legacy command、fallback 或 production mock。
|
||||
|
||||
## 验证
|
||||
|
||||
- 原失败 focused test:`1` file / `4` tests passed。
|
||||
- StreamingRenderer + fileChangesUndo current boundary:`12` files / `99` tests passed。
|
||||
- `npm test -- --only-batch 79`:当前动态分批为 `16` files / `149` tests passed;并行文件变化已
|
||||
使 batch 内容重新编号,因此原失败的直接证据以上述 focused test 为准。
|
||||
- exact ESLint、Prettier、deprecated root mock 扫描与 claimed `git diff --check`:通过。
|
||||
- targeted run 前后 `.lime/test/vitest-smart-last-run.json` SHA-256 均为
|
||||
`3f188a8943ea59ef9d4e9a40311f77afca214fd3dfe9698832061f018d08caa7`。
|
||||
|
||||
## 并行边界
|
||||
|
||||
本轮实际源码写集只有 `StreamingRenderer.testMocks.tsx`。S7o/S7p/S7q/S7r、Rust、protocol、
|
||||
Electron、中央执行计划、dirty roadmap 与共享 resume state 均避让。S7s 验证结束后,相邻进程已
|
||||
把共享 state 推进到新的 failed batch 78;该变化不属于 S7s。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续用 targeted 模式向共享失败点之后探测;若命中新的失败,先按 active claim/dirty 文件重新
|
||||
划分 owner,不能用动态 batch 编号替代精确文件归属。
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
# S7v Inputbar Objective Current Owner Fixture
|
||||
|
||||
## 结论
|
||||
|
||||
Inputbar 聚合测试的 Objective mock 已从 compat root `@/lib/api/agentRuntime` 迁到唯一 current
|
||||
behavior owner `agentRuntime/objectiveClient`。Goal 发送仍先持久化相同 objective request,再下传
|
||||
Plan/Goal metadata;production 行为未改。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`objectiveClient.setAgentRuntimeObjective` 与 Inputbar Goal send。
|
||||
- `test-only`:Inputbar 聚合测试 mock。
|
||||
- `compat`:root barrel 仍服务尚未迁出的其它领域,本切片不扩展。
|
||||
- `dead / forbidden-to-restore`:Objective 测试 mock root barrel。
|
||||
|
||||
## 验证
|
||||
|
||||
- `Inputbar/index.test.tsx`:`87/87` passed;batch 108 当前树 `166/166` passed。
|
||||
- 与 S7p/S7r 合并 focused:`4 files / 110 tests` passed。
|
||||
- exact ESLint、Prettier、`git diff --check`:passed。
|
||||
- smart Vitest resumable state:`passed`。
|
||||
|
||||
本切片不改变用户可见文案或 GUI 行为,不声明新的 GUI Gate B。
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
# S7u Image Title Current Owner Fixture Evidence
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
图片工作台 command action 已通过 `agentRuntime/agentClient` current owner 生成标题,
|
||||
共享测试 fixture 原先仍 mock `agentRuntime` compat 根 barrel,导致 mock 无法拦截生产
|
||||
import,batch 101 实际落入本地 `local_preview_title` fallback。
|
||||
|
||||
本切片只把测试 mock 与 `importOriginal` 类型路径迁到同一个 current `agentClient`
|
||||
owner。生产提交、标题生成、fallback、请求 payload 与 GUI 行为均未修改。
|
||||
|
||||
## 写集与避让
|
||||
|
||||
- 修改:`useWorkspaceImageWorkbenchActionRuntime.testFixtures.tsx`。
|
||||
- 只读:`useWorkspaceImageWorkbenchCommandActionRuntime.ts`、`agentClient.ts`。
|
||||
- 避让:S7d Rust image command、S7m boundary guard、S7r 中央执行计划与生产
|
||||
image workbench 热区。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:`agentRuntime/agentClient` 及其 production consumer。
|
||||
- `compat`:`agentRuntime` package root;本切片不扩展它。
|
||||
- `deprecated`:无新增。
|
||||
- `dead / retired guard-only`:该 production consumer 的 compat root import。
|
||||
- `test-only`:共享 action-runtime fixture 对 current owner 的显式 mock。
|
||||
|
||||
## 验证
|
||||
|
||||
- 复现:目标测试修复前 `2 failed / 5 passed`,真实返回
|
||||
`fallbackReason: local_preview_title`,且旧 mock spy 为 `0` 次。
|
||||
- focused Vitest:3 files / 16 tests passed。
|
||||
- smart Vitest:batch 101 通过;随后共享 resume 完成至 batch 110,状态为
|
||||
`passed`、`failed_batch: null`。
|
||||
- `npm run typecheck` passed。
|
||||
- exact ESLint passed,`--max-warnings 0`。
|
||||
- exact Prettier passed。
|
||||
- `npm run governance:legacy-report` passed:0 zero-reference candidates / 0 drift /
|
||||
0 boundary violations。
|
||||
- claimed write set `git diff --check` passed。
|
||||
|
||||
## 下一刀
|
||||
|
||||
继续收尾 smart Vitest 暴露的其它 test-only current-owner mock 漂移;不得为测试恢复
|
||||
compat barrel 或 production fallback。
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
# S7w Post-Skeleton Closeout Governance Evidence
|
||||
|
||||
时间:2026-07-15
|
||||
|
||||
## 结论
|
||||
|
||||
S7a-S7v 的 implementation、fixture alignment、smart runner state isolation 与 current-owner
|
||||
mock 修复均已有 completed claim/evidence/handoff。中央执行计划此前只登记到 S7e,且 runner 与
|
||||
Plugin runtime fixture 同时使用短号 S7i,导致导航事实源有歧义。
|
||||
|
||||
S7w 将 runner 的 canonical 治理编号迁到空闲的 S7t;旧 runner S7i claim 保留并标记
|
||||
superseded,Plugin runtime fixture 继续独占 S7i。中央执行计划同步补齐 S7f-S7v,并把 S7 从
|
||||
`refinement-active` 更新为 `skeleton-and-post-gate-closeout / full-vitest-validated`。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:S7i Plugin fixture、S7t Vitest runner、S7a-S7v completed claims/evidence。
|
||||
- `compat / deprecated`:无新增。
|
||||
- `dead / retired guard-only`:旧 runner S7i 短号只作为 superseded 历史 evidence 保留,不再作为
|
||||
canonical 导航 ID。
|
||||
- `test-only`:S7h-S7v 的 fixture/mock/runner slices;不转化为 production fallback。
|
||||
|
||||
## 写集与避让
|
||||
|
||||
- 更新中央执行计划的 S7 post-skeleton 定义与状态表。
|
||||
- 更新旧 runner S7i claim,新增 S7t canonical claim。
|
||||
- 不修改 Plugin S7i claim、应用源码、测试、共享 Vitest state、Electron、Rust、协议或 GUI。
|
||||
|
||||
## 验证
|
||||
|
||||
- S7 claim `slice:` 完整 ID uniqueness audit:0 duplicate。
|
||||
- 中央计划 S7 post-gate 三列表:20 行均为 3 列。
|
||||
- 中央计划 S7 状态六列表:11 行均为 6 列。
|
||||
- S7i/S7t/S7w claims exact Prettier passed。
|
||||
- claimed write set `git diff --check` passed。
|
||||
- 中央执行计划整文件 Prettier 仍报告既存格式差异;`HEAD` 基线复核同样为 unformatted。本 slice
|
||||
不执行全文件格式化,避免把 1000+ 行共享事实源制造成无关格式 churn。
|
||||
|
||||
## 当前状态
|
||||
|
||||
S7 post-skeleton correction 完成度:`100%`。前端 smart suite 已完成 batch 110,
|
||||
`failed_batch: null`;typecheck 与 legacy report 0/0/0 已通过。Refactor V2 仍有 S2m 等非 S7
|
||||
active slice,因此整体不标记 archive-ready。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# S7x Canonical Reasoning Position Only
|
||||
|
||||
## 结论
|
||||
|
||||
S7o 曾在相邻 Tool content part 没有可比较 position 时保留 Renderer 已有顺序。冷审确认 current production projector 只接受带 canonical event 的 Thread lifecycle,canonical Item reader 同时强制 `sequence` 与 `ordinal`;S7o 的 `Number.MAX_SAFE_INTEGER` Tool fixture 不可能来自 current 主链。
|
||||
|
||||
S7x 删除该 production 特判和 sentinel 正向测试。Reasoning 与 Tool 的相对顺序只由 canonical ordinal/sequence 和稳定 Item identity 决定;当没有更早的 comparable part 时,GUI 仍把 reasoning 放在最终正文前。
|
||||
|
||||
## 分类
|
||||
|
||||
- `current`:canonical Tool/Reasoning Item、ordinal-first merge、稳定 Item identity、reasoning-before-final-text GUI 规则。
|
||||
- `compat / deprecated`:无。
|
||||
- `dead / deleted / forbidden-to-restore`:无 position raw Tool card 的到达顺序参与 production reasoning 排序,以及对应正向 fixture。
|
||||
|
||||
## 验证
|
||||
|
||||
- focused Vitest:4 files / 55 tests passed,覆盖 reasoning sync、runtime handler、canonical reader 和 event-stream fail-closed。
|
||||
- exact ESLint、Prettier 与 claimed diff check:passed。
|
||||
- Gate B:`reasoning-first-visible` passed;Electron/preload/App Server JSON-RPC、current session start/read/list、GUI reasoning-before-answer、terminal GUI 与 read model assertions 全部为 true。
|
||||
- `npm run smoke:agent-runtime-current-fixture` 的 unit/guard 阶段通过;首次被并行 Cargo sidecar 产物竞争阻断,重试进入 Electron 后首页 sampling 记录 `conversationStartedAtMs=409`,超过 250ms budget,但真实 pending preview paint trace 为 21ms,且无 flicker/layout drift/auxiliary request。该性能场景不作为 S7x 语义通过证据。
|
||||
|
||||
## Release closeout
|
||||
|
||||
发布复核首次运行 `npm run smoke:agent-session-history-electron-fixture` 时,oracle 在 Reasoning
|
||||
节点刚出现但仍显示“思考中”时提前返回,随后 assertion 误报 reasoning summary 缺失;失败截图稍后
|
||||
已经显示完整 summary,确认是 E2E readiness race,不是产品数据丢失。
|
||||
|
||||
history replay oracle 现在只在完整 DOM 同时满足以下条件后返回:User / Agent 文本可见、图片占位
|
||||
消失且两个附件渲染、Reasoning summary 精确出现一次、MCP Item 与 tool row 已渲染。新增 unit
|
||||
regression 锁定瞬态 Reasoning shell 不得视为 ready。
|
||||
|
||||
原始 Electron fixture 复跑通过:`ok=true`、reasoning summary 1 次、图片附件 2 个、MCP tool
|
||||
row 1 个、console error 0。该 Gate B 继续经过 Electron、preload/IPC、
|
||||
`app_server_handle_json_lines`、App Server JSON-RPC、runtime/read model 和用户可见 DOM。
|
||||
|
||||
## 并行边界
|
||||
|
||||
S7x 产品切片只修改 Renderer reasoning sync、对应 unit test 与协调文档;S2n Rust import
|
||||
lifecycle 已独立完成并释放。release closeout 额外只修正 history Electron fixture 的 oracle
|
||||
readiness 与对应回归,不改变 App Server projector/reader、protocol 或 GUI production semantics。
|
||||
|
||||
## 下一刀
|
||||
|
||||
S2n 已释放 Rust/App Server 热区;当前执行 fresh release aggregate gates。发布后继续 S5 root
|
||||
compat barrel 的 22 个 production consumer file 分域迁移。
|
||||
@@ -252,7 +252,7 @@ Agent Workspace 评测体系达到 `4.0+` 的最低条件:
|
||||
|
||||
本轮评测路线图文档完成度:`100%`。
|
||||
|
||||
整体 Agent Workspace 目标完成度估算:`84%`。口径是:底层 runtime / projection / evidence 约完成较高,任务区域已具备 plan / tool-run / model / permission / reasoning / workspace / objective / diffstat / sources / subagents / outputs / approval 摘要,并新增同一区域只读运行控制区,能把 environment / run / plan / goal / sources / participants / outputs / split lane 汇总展示;计划、执行和产物明细已统一在同一运行控制区内呈现,输出仍可点击打开并保留溢出计数;任务轨道接线与历史恢复投影延迟已拆出独立 hook,并已补齐 `workflowSteps=[]` 时从结构化 plan thread item 与 `todoItems` 恢复计划清单的主路径;`agent-workspace-run-control-restore` 正式 evidence 证明 deterministic UI 恢复态可在同一区域恢复 environment、plan、goal、sources、subagents、diffstat、approval 和 output,真实 Electron session history fixture 也已证明 current `agentSession/list/read/update` 的归档、恢复和重启 readback 链路;本轮新增 `agent-workspace-session-restore` 正式 evidence,证明本地历史导入会话能恢复消息、reasoning、command、patch、web search、approval 细节,并在同一个 current `AgentSession` 继续对话,同时不会把导入支持能力显示成消息主线 banner、环境信息或 run control 独立状态卡;这些状态继续从 `threadRead.context_summary`、`threadRead.evidence_summary`、`threadRead.artifacts`、`threadRead.change_summary`、`todoItems`、`child_subagent_sessions` 以及 timeline / provenance facts 派生,不解析 assistant Markdown;最终桌面工作台体验、完整 citation consistency、Split review、pause/steer 控制闭环、Skill / MCP 专项 GUI evidence、coding 闭环、browser/search 实测和完整 P0 Evidence Pack 仍需要继续补证。
|
||||
整体 Agent Workspace 目标完成度估算:`84%`。口径是:底层 runtime / projection / evidence 约完成较高,任务区域已具备 plan / tool-run / model / permission / reasoning / workspace / objective / diffstat / sources / subagents / outputs / approval 摘要,并新增同一区域只读运行控制区,能把 environment / run / plan / goal / sources / participants / outputs / split lane 汇总展示;计划、执行和产物明细已统一在同一运行控制区内呈现,输出仍可点击打开并保留溢出计数;任务轨道接线与历史恢复投影延迟已拆出独立 hook,并已补齐 `workflowSteps=[]` 时从结构化 plan thread item 与 `todoItems` 恢复计划清单的主路径;`agent-workspace-run-control-restore` 正式 evidence 证明 deterministic UI 恢复态可在同一区域恢复 environment、plan、goal、sources、subagents、diffstat、approval 和 output,真实 Electron session history fixture 也已证明 current `agentSession/list/read/update` 的归档、恢复和重启 readback 链路;本轮新增 `agent-workspace-session-restore` 正式 evidence,证明本地历史导入会话能恢复消息、reasoning、command、patch、web search、approval 细节,并在同一个 current `AgentSession` 继续对话,同时不会把导入支持能力显示成消息主线 banner、环境信息或 run control 独立状态卡;这些状态继续从 `threadRead.context_summary`、`threadRead.evidence_summary`、`threadRead.artifacts`、`threadRead.change_summary`、`todoItems`、canonical child Thread family / `CanonicalChildThreadSummary[]` 以及 timeline / provenance facts 派生,不解析 assistant Markdown;最终桌面工作台体验、完整 citation consistency、Split review、pause/steer 控制闭环、Skill / MCP 专项 GUI evidence、coding 闭环、browser/search 实测和完整 P0 Evidence Pack 仍需要继续补证。
|
||||
|
||||
## 10. 当前本地 Evidence 状态
|
||||
|
||||
|
||||
@@ -198,4 +198,4 @@ AgentRunControlSurfaceViewModel
|
||||
|
||||
## 9. 下一刀
|
||||
|
||||
下一刀转向 `run-control-split-review` 或 `run-control-permission-chip` 的真实控制闭环。`run-control-basic-local`、`run-control-plan-checklist` 与 `run-control-restore` 已经有本地 pass evidence:同一区域可见 environment / run / plan / goal / sources / participants / outputs,恢复态能从 `threadRead`、`threadItems`、`todoItems`、`child_subagent_sessions` 和 approval facts 重建。后续不要继续只补只读展示,应证明 pause / steer / approval writeback / split review 这些动作能回写 runtime 并恢复。
|
||||
下一刀转向 `run-control-split-review` 或 `run-control-permission-chip` 的真实控制闭环。`run-control-basic-local`、`run-control-plan-checklist` 与 `run-control-restore` 已经有本地 pass evidence:同一区域可见 environment / run / plan / goal / sources / participants / outputs,恢复态能从 `threadRead`、`threadItems`、`todoItems`、canonical child Thread family / `CanonicalChildThreadSummary[]` 和 approval facts 重建。后续不要继续只补只读展示,应证明 pause / steer / approval writeback / split review 这些动作能回写 runtime 并恢复。
|
||||
|
||||
@@ -115,6 +115,8 @@ Plugin MVP 必须先满足:真实 runtime facts -> Host Run UI -> 业务 artif
|
||||
|
||||
2026-05-17 继续只读核对当前工作树时,发现 Lime 并不是完全没有 AgentUI 基础,而是 **Claw / Chat 主链已有较完整的 AgentUI projection 资产,Plugin Host 尚未接入这条事实源**。
|
||||
|
||||
> 2026-07-14 supersession:本节是历史只读快照。Renderer Team runtime sidecar 已归类为 `dead / deleted / forbidden-to-restore`;Plugin 后续只能复用 canonical ThreadItem / AgentUI projection,不得依赖已删 subscription,也不得另写 roster 或 worker notification owner。
|
||||
|
||||
| 已有资产 | 当前证据 | 对 Plugin 的含义 |
|
||||
| --- | --- | --- |
|
||||
| 标准 event / owner / scope / surface 类型 | `src/components/agent/chat/projection/agentUiEventProjection.ts` 定义 `AgentUiProjectionEvent`、`AgentUiEventClass`、`AgentUiSurface`、`AgentUiRuntimeEntity`、`AgentUiTopology` | 不应在 Plugin 里再定义一套 AgentUI 类型。 |
|
||||
@@ -122,7 +124,7 @@ Plugin MVP 必须先满足:真实 runtime facts -> Host Run UI -> 业务 artif
|
||||
| Projection store | `conversationProjectionStore.ts` 提供 record / select by type / surface / scope / tool / action / artifact / evidence | Host Run UI 可使用同一个 projection store 或同构 reducer,避免第二套 UI state owner。 |
|
||||
| Subagents 投影与视图模型 | `agentUiSubagentsViewModel.ts`、`AgentUiProjectionState.subagents`、`SubagentsView` 已存在 | Subagents 不是零实现;缺口是 Plugin runtime facts 尚未投影和挂到 Host Run UI。 |
|
||||
| Claw stream 运行时接入 | `agentStreamRuntimeHandler.ts` 调用 `buildAgentUiProjectionEvents` 并记录 projection events | Claw 已经证明 stream -> AgentUI projection 的路径可行;Plugin 应复用这条路径。 |
|
||||
| Team runtime 接入 | `team-workspace-runtime/runtimeEventSubscriptions.ts` 已把 subagent/team stream 记录为 AgentUI projection events | Plugin 的 team / subagent 后续应收敛到同一 projection,而不是另写 roster / worker notification。 |
|
||||
| Canonical SubAgent 接入 | canonical Thread/Turn/Item reader 与 shared AgentUI projection 已承接 activity/lineage | Plugin 的 team / subagent 后续应复用 canonical projection,不得恢复 Team sidecar 或另写 roster / worker notification。 |
|
||||
| 后端 Plugin task projection first-cut | 当前脏工作树中 `runtime_turn.rs` 已把 profile/runtime events 投影为 `task:runtimeEvent` payload,含 `taskEvents`、`runtimeEvent`、`streamKind`、artifact/evidence/action/tool 映射 | 后端已有 first-cut,但仍是 Plugin task event 形态;前端还需要桥接到 AgentUI event class。 |
|
||||
| Plugin frontend bridge first-cut | `src/features/plugin/runtime/agentUiProjectionBridge.ts` 可把 Plugin task events / `task:runtimeEvent.taskEvents` 映射为 `AgentUiProjectionEvent[]`,测试覆盖 text、tool args、HITL、artifact、evidence、queue、terminal status | P0 seam 已有纯函数入口;仍需接入 `AgentRunRenderer` view model。 |
|
||||
| Plugin Host Run view model first-cut | `src/features/plugin/runtime/agentUiProjectionViewModel.ts` 可把 `AgentUiProjectionEvent[]` 转成 Host Run 可消费的 ordered parts、actions、artifacts、evidence、task summary,并只输出语义 `label`,不夹带硬编码 UI 文案 | Renderer 接入前的数据模型已就绪;仍未改动 `AgentRunHostDrawer.tsx`。 |
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
| `streamDiagnostics` | Conversation Projection Store | `recordAgentStreamPerformanceMetric` | E2E、debug panel、future diagnostics UI | memory ring / projection store | performance trace | true | current |
|
||||
| `queuedTurns` | stream queue controller | runtime queue event / local queue | inputbar、task capsule | runtime queue / memory | runtime event | false | current |
|
||||
| `pendingActions` | action request controller | runtime event / A2UI | inputbar、pending panel、capsule | runtime action request | runtime event | false | current |
|
||||
| `childSubagentSessions` | task / subagent projection | runtime event / session detail | task capsule、process drawer | runtime session detail | runtime event | false | current |
|
||||
| `canonicalChildren` | canonical child Thread selector | App Server `thread/list|read` + AgentGraph/identity | task capsule、process drawer、Subagents view | canonical Thread / AgentGraph | canonical Thread family | false | current |
|
||||
|
||||
首个代码 slice 选择 `streamDiagnostics`,原因是它是纯 UI/诊断 projection,不改变 runtime 行为,适合验证 Projection Store 和 selector 边界。
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
1. `sessionId / threadId / turnId / taskId`
|
||||
2. `messages / threadTurns / threadItems`
|
||||
3. `thread_read / runtime_summary / permission_state`
|
||||
4. `queuedTurns / pendingActions / childSubagentSessions`
|
||||
4. `queuedTurns / pendingActions / canonical child Thread family / canonicalChildren`
|
||||
5. `artifact_snapshot / ArtifactDocument / task artifact index`
|
||||
6. `sessionHistoryWindow / cached snapshot / restore candidate`
|
||||
7. stream performance trace
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Lime AgentUI 标准对齐与缺口追踪
|
||||
|
||||
> 状态:v0.6.0 标准对齐完成;后续只跟踪 future boundary 与 v0.5 尾项增强
|
||||
> 更新时间:2026-05-11
|
||||
> 状态:current canonical projection;第 8 节起的 2026-05 实施记录为历史快照
|
||||
> 更新时间:2026-07-14
|
||||
> 标准版本:Agent UI `v0.6.0`,commit `dcf4bc5`
|
||||
> 范围:对齐 `/Users/coso/Documents/dev/ai/limecloud/agentui` v0.6.0、Claude Code、Vercel AI SDK、assistant-ui、LangGraph、OpenAI ChatKit/Apps SDK 等调研结论,并回挂 Lime 当前实现缺口。
|
||||
|
||||
@@ -12,8 +12,8 @@ Lime AgentUI 的主目标不是只修复 thinking 样式,而是把对话工作
|
||||
事实源声明:
|
||||
|
||||
```text
|
||||
Agent runtime event / subagent runtime event / automation job event / remote task event
|
||||
-> Agent UI envelope projection
|
||||
RuntimeCore -> canonical Thread/Turn/Item + child Thread lifecycle
|
||||
-> typed Agent UI envelope projection
|
||||
-> conversationProjectionStore.agentUi
|
||||
-> Conversation / Inline Process / Task Capsule / Artifact / Evidence / Diagnostics / Subagents UI
|
||||
```
|
||||
@@ -25,6 +25,7 @@ Agent runtime event / subagent runtime event / automation job event / remote tas
|
||||
3. Agent UI `runtimeEntity` 映射只能落到:`agent_turn`、`subagent_turn`、`automation_job`,以及 adapter 层的 `external_task`、`work_item`。
|
||||
4. `scheduler tick`、`execution run`、worker notification、review lane、remote heartbeat 都不能反向定义新的 Lime runtime taxonomy。
|
||||
5. Subagents 是 projection surface,不是新的执行引擎。
|
||||
6. raw `subagent_status_changed` 与 Renderer Team sidecar 不是 current owner;canonical SubAgent Item、child Thread lifecycle 和 durable Result mailbox 才能表达活动与 terminal 事实。
|
||||
|
||||
## 2. 标准引用与追溯页
|
||||
|
||||
@@ -56,7 +57,7 @@ Agent UI 标准已经从“thinking/progressive rendering 局部规则”扩展
|
||||
| Running process visibility | running reasoning / tool / action 默认可见,完成后折叠归档。 | inline process running 展开;completed timeline 折叠。 |
|
||||
| Tool lifecycle | input streaming、input available、running、progress、output available、output error 分阶段。 | 真实 source event 投影为 `tool.args.delta`、`tool.progress`、`tool.output.delta`、`tool.result`、`tool.failed`。 |
|
||||
| HITL / action | approval、plan decision、structured input、clarification、permission grant 保持结构化,不从 assistant 文本反推。 | `action.required` / `action.resolved` 已进入 projection;delegated approval 已补 plan approval 请求方 / 目标 session / 权限 / plan ref 结构化显示。 |
|
||||
| Task / queue | foreground turn、queued steer、task capsule、background job 独立分类。 | queue/steer、`agent_turn/subagent_turn/automation_job` 已进入 projection;`work_item` 通过 team formation / review fix / TaskUpdate owner change 接入;`external_task` 通过 remote task metadata 接入。 |
|
||||
| Task / queue | foreground turn、queued steer、task capsule、background job 独立分类。 | queue/steer、`agent_turn/subagent_turn/automation_job` 已进入 projection;`work_item` 只从 review fix / TaskUpdate owner change 等真实 source 接入;`external_task` 通过 remote task metadata 接入。 |
|
||||
| Subagents surfaces | `team_roster`、`work_board`、`delegation_graph`、`handoff_lane`、`worker_notifications`、`review_lane`、`teammate_transcript`、`background_teammate`、`remote_teammate`、`team_policy`。 | 10 个标准 surface 已进入 summary、lane、surface detail、操作视图与 action target 定位;后续只补更深 teammate drilldown 和 future command boundary。 |
|
||||
| Team topology | `coordinator_team`、`parallel_workers`、`specialist_handoff`、`review_team`、`human_agent_board`、`background_teammate`、`remote_teammate`。 | coordinator / parallel / specialist handoff / review / background / remote / human board 均已有 projection baseline;直接 board/team 写回、原生 A2A ingress、remote control callback 归入 future product boundary。 |
|
||||
| Team events | `agent.spawned`、`agent.completed`、`agent.handoff`、`team.changed`、`worker.notification`、`review.requested`、`review.completed`。 | 标准 event class 与 subagent/handoff/review 基线已接入;reviewer teammate baseline 已进 roster;handoff bundle / analysis handoff 导出已作为 runtime handoff source 以 `handoff_requested` 写入 `handoff_lane`;accepted/returned/resumed 的 phase mapping 已在 adapter 层就绪,并已接入最小真实 source:`subagent_status_changed` 证明 accepted/returned,`team_control_projection(action=resume)` 证明 resumed;reassignment 与 surface 消费继续收口。 |
|
||||
@@ -100,7 +101,7 @@ AgentRuntimeProfileEvent / ThreadReadModel / EvidenceSummary
|
||||
| 标准 envelope adapter | runtime events 归一化为 `owner/scope/phase/surface/persistence/control` 并写入 projection store。 | `agentUiEventProjection.ts`、`conversationProjectionStore.ts`、`agentStreamRuntimeHandler.ts` | `current` |
|
||||
| Final answer 与 reasoning/tool 分离 | `text.delta`、`reasoning.delta`、`tool.*`、`action.required`、`run.finished` 已进入标准 envelope。 | `agentStreamRuntimeHandler.ts`、`agentStreamCompletionController.ts` | `current` |
|
||||
| Tool lifecycle 全状态 | MCP/tool notification 与 provider tool input delta 已按真实 source event 投影。 | `agentUiEventProjection.ts`、`agentProtocol.ts`、`event_converter.rs`、`openai.rs`、`openai_responses.rs`、`anthropic.rs`、`InlineToolProcessStep.tsx` | `current` + 待增强 |
|
||||
| HITL/action | `action_required`、tool confirmation、ask/elicitation、plan approval request/response 已结构化投影。 | `agentUiEventProjection.ts`、`agentProtocol.ts`、`subagent_runtime.rs`、`agent_control.rs`、`runtimeEventSubscriptions.ts` | `current` |
|
||||
| HITL/action | `action_required`、tool confirmation、ask/elicitation、plan approval request/response 已结构化投影。 | `agentUiEventProjection.ts`、`agentProtocol.ts`、canonical ThreadItem projection | `current` |
|
||||
| Queue/steer/task capsule | queue 事件投影为 `queue.changed`;busy input 投影为 `task.changed/control=steer`。 | `agentUiEventProjection.ts`、`TaskCenterTabStrip.tsx`、`QueuedTurnsPanel.tsx`、`agentUiProjectionSummary.ts` | `current` |
|
||||
| Artifact workspace | `artifact_snapshot` / `file_artifact` 投影为 artifact 事件,正文仍在 artifact service/workbench。 | `agentUiEventProjection.ts`、`AgentThreadTimelineArtifactCard.tsx`、`useWorkspaceArtifactPreviewActions.ts`、`agentUiProjectionSummary.ts` | `current` |
|
||||
| Evidence/review/replay 基线 | evidence pack、replay case、analysis handoff、review decision 导出 / 保存写入 `evidence.changed`。 | `agentUiEventProjection.ts`、`conversationProjectionStore.ts`、`useConversationProjectionStore.ts`、`HarnessStatusPanel.tsx` | `current` + 待增强 |
|
||||
@@ -113,20 +114,20 @@ AgentRuntimeProfileEvent / ThreadReadModel / EvidenceSummary
|
||||
|
||||
| v0.6.0 要求 | Lime 当前事实 | 主要入口 | 结论 / 缺口 |
|
||||
| --- | --- | --- | --- |
|
||||
| `runtimeEntity` 映射 | Lime taxonomy 已定义 `agent turn` / `subagent turn` / `automation job`;projection type 已显式携带 `runtimeEntity`。 | `internal/aiprompts/task-agent-taxonomy.md`、`agentUiEventProjection.ts`、`session_store.rs`、`subagent_runtime.rs`、`automation_service/*`、`remoteTaskAgentUiProjection.ts` | `current` + 待增强:本地 `agent_turn/subagent_turn/automation_job` 已接入;`work_item` 已通过 team formation -> work board baseline 写入;`external_task` 已从 gateway provenance -> `agent_runs.metadata` -> Subagents session-scoped projection baseline 接入。 |
|
||||
| Team queue / parallelism facts | 数据源存在:`team_phase`、`team_parallel_budget`、`team_active_count`、`team_queued_count`、`provider_concurrency_group`、`queue_reason`。 | `session_store.rs`、`teamWorkspaceRuntime.ts`、`hooks/useTeamWorkspaceRuntime.ts`、`liveRuntimeProjector.ts` | `current`:已进入 `run.status`、`team.changed`、`agent.changed`、`task.changed` envelope;surface 详情消费继续收口。 |
|
||||
| Subagents surfaces | Lime 已把 10 个标准 surface 收敛到 `AgentUiProjectionState.subagents`、`buildAgentUiSubagentsModel`、`agentUiSubagentsViewModel.ts` 和 `SubagentsView`;projection summary selector 继续提供 surface / lane / latest event 聚合,产品侧只能消费这些读模型和 action callback。 | `packages/agent-ui-contracts/src/projection.ts`、`packages/agent-runtime-projection/src/subagents.ts`、`packages/agent-runtime-ui/src/subagents.tsx`、`src/components/agent/chat/projection/agentUiSubagentsViewModel.ts`、`agentUiProjectionSummary.ts`、`teamWorkspaceRuntime.ts`、`team-workspace-runtime/*` | `current` + 待增强:标准包已经承接 threads、delegation calls、activities、active/completed/failed thread ids 与 isolation 摘要;产品侧旧本地 panel / board 入口已退出 current 标准面。更直接的 board/team API 写回仍是 future command boundary;后续只在新增 current 命令 / shared task board service 后接入,不在 UI 本地伪造完成态。 |
|
||||
| `agent.spawned` / `agent.completed` | subagent spawn/status/activity 和 child session 存储存在,标准 projection 已从 `subagent_status_changed` 派生 lifecycle。 | `subagent_runtime.rs`、`runtimeEventSubscriptions.ts`、`agentUiEventProjection.ts` | `current`:`agent.changed` 继续保留为 summary 兼容事件。 |
|
||||
| `team.changed` | team phase、membership、queue/concurrency facts 在 runtime UI 有聚合;发送前 team formation state 已作为结构化 source 写入 Agent UI projection。 | `session_store.rs`、`teamWorkspaceRuntime.ts`、`liveRuntimeProjector.ts`、`agentUiEventProjection.ts`、`teamFormationAgentUiProjection.ts`、`useWorkspaceSendActions.ts` | `current` + 待增强:runtime status、subagent status 与 team formation 已派生 `team.changed`;merging/done 的更细 source event 仍待增强。 |
|
||||
| `worker.notification` | subagent activity、tool/task/action 事件已进入 projection store,terminal subagent status 与 archived subagent activity 已独立投影 worker notification;`subagent_status_changed` parser / projection 已支持 `usage`、`duration_ms`、`tool_count`、`result_ref`,terminal notification 顶层携带 `transcriptRef` 与 `workerUsage`;Rust status emitter 已在 terminal status 输出 session usage、latest turn duration、tool count 与 latest AgentMessage runtime item `result_ref`;Subagents view model 已把 worker usage / duration / tool count / result ref 展示到 subtitle / chips。 | `runtimeEventSubscriptions.ts`、`liveRuntimeProjector.ts`、`agentProtocol.ts`、`agentUiEventProjection.ts`、`agentUiSubagentsViewModel.ts`、`subagent_control.rs`、`subagent_runtime.rs` | `current` + 待增强:usage/duration/tool count 与 terminal `result_ref` 都已有真实 source;`result_ref` 来自 latest turn 的 durable Agent runtime item ref,后续如需 artifact 级结果可再接 artifact source。 |
|
||||
| `agent.handoff` | analysis handoff 与 runtime handoff bundle 导出已通过 evidence helper 以 `handoff_requested` 投影到 `handoff_lane`,Subagents 已展示 status、from/to、resume target 与 context boundary;`buildAgentUiHandoffProjectionEvents` 已按 source-provided status 映射 `accepted/acting/reconciling/completed/failed/cancelled/waiting` phase,plan approval、send input、wait/resume/close 有结构化控制。 | `HarnessStatusPanel.tsx`、`agentUiEventProjection.ts`、`agentUiProjectionSummary.ts`、`agentUiSubagentsViewModel.ts`、`subagent_runtime.rs`、`useWorkspaceTeamSessionControlRuntime.ts` | `current` + 待增强:runtime handoff bundle / analysis handoff 已有真实 `handoff_requested` source event;`subagent_status_changed` 现在会把 child running/completed/failed/cancelled 映射为 specialist handoff accepted/returned/failed/cancelled;`team_control_projection(action=resume)` 会在真实 affected session 返回后映射为 resumed;仍缺更独立的 handoff protocol callback 与外部 specialist lifecycle。 |
|
||||
| `runtimeEntity` 映射 | Lime taxonomy 定义 `agent turn` / `subagent turn` / `automation job`;`external_task/work_item` 只属于 adapter surface。 | `internal/aiprompts/task-agent-taxonomy.md`、canonical ThreadItem projection、automation/remote projection | `current`;本地 formation 不再产生 `work_item`。 |
|
||||
| Team queue / parallelism facts | canonical child Thread lifecycle 与 persisted graph/identity 是 roster/status owner;旧 Team budget/queue DTO 仍待迁出。 | App Server `thread/list` / `thread/read`、canonical child selector | `current` + `deprecated` residual;不得恢复本地 live map。 |
|
||||
| Subagents surfaces | 标准包继续提供 surface/lane/view model;产品成员与 activity 只来自 canonical child Thread/Item。 | `appServerCanonicalItemReader.ts`、`threadItemProjection.ts`、`packages/agent-runtime-projection/src/threadItems.ts`、`AgentThreadTimelineItemRenderers.tsx` | `current`;`team-workspace-runtime/**` 已 dead。 |
|
||||
| `agent.spawned` / `agent.completed` | Started/Interacted/Interrupted canonical activity 表达动作事实;child completed/failed 只由 child Thread lifecycle 与 durable Result mailbox 表达。 | canonical SubAgent Item、child Thread lifecycle、Result mailbox | `current`;raw status lifecycle projection 待删除。 |
|
||||
| `team.changed` | 只保留真实 TaskUpdate owner change、review/evidence 等结构化 source;发送前 local formation 已删除。 | `agentUiEventProjection.ts`、TaskUpdate/evidence projection | `current` source only。 |
|
||||
| `worker.notification` | worker terminal 只能来自 child terminal lifecycle / Result mailbox 或其它 durable structured source;activity Item 的 completed 不代表 child terminal。 | canonical child Thread lifecycle、Result mailbox、evidence refs | `current`;raw terminal status projector 为 `deprecated`。 |
|
||||
| `agent.handoff` | evidence/handoff bundle 仍可结构化投影;GUI 不再提供已删除的 resume/close Team wrapper。 | `HarnessStatusPanel.tsx`、`agentUiEventProjection.ts`、`agentUiProjectionSummary.ts` | `current` evidence projection;外部 specialist control 仍是 future boundary。 |
|
||||
| `review.requested` / `review.completed` | Harness review decision 导出/保存已通过 review helper 投影到 `review_lane`;导出 review template 时也会记录 `team_control_projection(control=request_review)`,把人工审核请求作为 review work item 暴露给 Subagents;surface detail 已展示 decision、reviewer、risk、checklist、followup、regression counts、requested fixes 与 regression requirement preview;review completed 的 reviewer 已额外进入 team roster;`verification_summary` 的 failure/recovered facts 已回写到 review payload 和 requested-fix work item;`team_control_projection(action=reassign)` 已能表达 work item reassignment source;`TaskUpdate` owner 变更已输出结构化 `owner_change` 并由 `item_completed` 投影到 `work_board` assign/reassign。 | `HarnessStatusPanel.tsx`、`agentUiEventProjection.ts`、`teamControlAgentUiProjection.ts`、`agentUiProjectionSummary.ts`、evidence/review runtime | `current` + 待增强:reassignment adapter baseline 与 TaskUpdate owner_change board source 已有;requested fix execution 已能从 `artifact_snapshot` metadata 即时回写 `work_board`,并从 evidence artifact metadata 进入 verification summary 与 review decision;前端 reassignment selector/callback 已接入为 TaskUpdate owner 更新指令回填,负责人变化仍以真实 `owner_change` source 确认;requested fix 可回填输入框作为人工确认后的执行发起入口;board 完成态按 source-provided executionStatus 可见化,后台无确认自动执行仍不伪造。 |
|
||||
| `background_teammate` | durable automation job 是 current 执行实体;automation 创建/加载/更新/删除/立即运行已投影为 `runtimeEntity=automation_job`、`background_teammate`、`task_capsule` 与 terminal `worker.notification`。 | `lime-rs/src/services/automation_service/*`、`lime-rs/src/commands/automation_cmd.rs`、`src/lib/api/automation.ts`、`automationJobAgentUiProjection.ts`、`settings-v2/system/automation/index.tsx`、`WorkspaceRegisteredSkillsPanel.tsx` | `current` + 待增强:settings automation 与 capability drafts managed automation 入口已接持续刷新;仍可继续把 skills automation 等其它消费入口接入同一 helper。 |
|
||||
| `remote_teammate` | current gateway ingress(Telegram / Feishu / Discord / Wechat)已在 `agent.run` 传入 `source_metadata.remote_task`,包含 channel、account、remote task id、inbound message identity 与 Agent Card;`rpc_handler.rs` 会把 snake/camel 两种 source metadata 持久化到 `agent_runs.metadata`,terminal metadata 合并时保留 provenance;`remoteTaskAgentUiProjection.ts` 已能从 `AgentRun.metadata.source_metadata.remote_task` 构造 `runtimeEntity=external_task` projection,并写入 `conversationProjectionStore.agentUi`。 | `internal/aiprompts/remote-runtime.md`、`channelsRuntime.ts`、`gateway_channel_cmd.rs`、`lime-rs/crates/gateway/src/*`、`rpc_handler.rs`、`remoteTaskAgentUiProjection.ts`、`useRemoteTaskExecutionRunProjection.ts` | `current` + `partial`:gateway remote ingress 已成为 Agent UI `remote_task_projection` actual source baseline;terminal `AgentRun.status` 仍优先,且 `remote_task.event/taskStatus/status/state/phase` 已可驱动 A2A lifecycle,不从 heartbeat、gateway 日志文本、assistant prose 或普通 session message 猜测;远端 artifact 指针继续保留为 refs;真正原生 A2A ingress 与 remote artifact store/content 回流已审计为 future product boundary。 |
|
||||
| `work_board` / `assign` | Team board canvas 和 task capsule 有 UI 基础;发送前 `TeamWorkspaceRuntimeFormationState` 已记录 `team_formation_projection`,输出 `agent.changed(surface=team_roster/control=assign)` 与 `task.changed(surface=work_board/control=assign)`;`TaskUpdate` owner 变更会输出 `owner_change` metadata,`item_completed` projection 会把初次 owner 写入映射为 `assign`,把 owner 切换映射为 `reassign`。 | `team-workspace-board/*`、`TaskCenterTabStrip.tsx`、`teamWorkspaceRuntime.ts`、`teamFormationAgentUiProjection.ts`、`useWorkspaceSendActions.ts` | `current` + 待增强:assignment / TaskUpdate owner_change reassignment baseline 不再依赖 runtime status hack 或 peer message 文本;已提供可见 reassignment selector/callback 的 TaskUpdate 指令回填;后续若要做到无 prompt 的直接 live board update,需先新增 current board/team 命令边界或 shared task board service;当前不从 UI 本地写状态,review work item 与完成态继续只认 source fact。 |
|
||||
| Team controls | spawn/send/wait/resume/close 已有;stop 通过前台 stopSending;subagent task projection 已把 `idle/queued/running/terminal` 映射为 `continue_agent/wait/stop/close`;`agent.spawned` 已携带 `delegate`;`team_control_projection` adapter 已覆盖 `delegate/assign/continue_agent/wait/stop/close/request_review` 标准 control,并可用 `action=reassign` + `control=assign` 表达 work item reassignment;当 source 提供 `resolvedStatus` 时会优先映射为 top-level `phase/runtimeStatus`,避免已知完成/失败/assigned 状态被固定显示成 queued/completed;Team formation 已作为 actual assignment source 投影 `assign/work_item`;Harness review template 导出已作为 actual review request source 投影 `request_review/work_item`。 | `useWorkspaceTeamSessionControlRuntime.ts`、`teamControlAgentUiProjection.ts`、`teamFormationAgentUiProjection.ts`、`HarnessStatusPanel.tsx`、`agentUiEventProjection.ts`、`subagent_runtime.rs`、`agent_control.rs` | `current` + 待增强:现有 control 均已有实际来源;reviewer teammate baseline 已进入 roster;requested fix execution artifact metadata 已进入 `work_board` 即时投影与 review decision source;reassignment adapter、TaskUpdate owner_change source 与 source-provided `resolvedStatus` 映射已有;前端可见 reassignment selector/callback 已接入为 TaskUpdate 指令回填,真实负责人变化仍等 `owner_change` source;requested fixes 已可回填输入框作为人工确认后的执行发起入口,也可在用户显式点击后直接提交 runtime turn,且 prompt 已声明 `requestedFixExecutionResults` metadata contract;board 完成态已按 source-provided executionStatus 可见化,后台无确认自动执行仍不伪造。 |
|
||||
| Delegated approval identity | team lead / teammate plan approval 已结构化,能发出 `action_resolved`;direct `action_resolved(plan_approval)` projection 已保留 `targetSessionId`、`planFile`、`planId` 与 `awaitingLeaderApproval`,summary/detail 已显示请求方、目标 session、权限模式、leader 审批等待与 plan ref,不只剩 metadata keys。 | `subagent_runtime.rs`、`agent_control.rs`、`runtimeEventSubscriptions.ts`、`agentUiEventProjection.ts`、`agentUiProjectionSummary.ts` | `current` + 待增强:后续如 runtime 提供更细 policy / transcript ref,可继续进入同一结构化详情,不从 prose 反推。 |
|
||||
| Teammate transcript | child session / parent context 存在;`subagent_status_changed` 已派生 `agent.changed(surface=teammate_transcript, control=open_detail, transcriptRef=...)`;summary selector 与 Subagents view model 已能把 transcript ref 作为 action target 定位;本地 child session 焦点、live activity preview、历史 activity snapshot fallback 与 queued turn / thread item drilldown 均只消费结构化 fact,不从正文合成状态。 | `agentUiEventProjection.ts`、`agentUiSubagentsViewModel.ts`、`useWorkspaceCanvasSceneRuntime.tsx`、`teamWorkspaceRuntime.ts` | `current` + 待增强:transcript ref 事实源、target 定位、本地 child session 焦点、live activity preview、历史 activity snapshot fallback、queued turn / thread item 结构化 drilldown 与 related projection chain 已接入;仍需真实 pending input 操作 handler / 更深 transcript drilldown,且继续避免把 teammate 内部输出直接混进主 final answer。 |
|
||||
| `work_board` / `assign` | `TaskUpdate` owner 变更和 review/evidence metadata 可产生结构化 work item。 | `TaskCenterTabStrip.tsx`、`agentUiEventProjection.ts`、evidence/review projection | `current` source only;本地 Team board/formation 已 dead。 |
|
||||
| Team controls | GUI 只保留 main-turn `stopSending` 与结构化 target 定位;模型侧六个 AgentControl tools 由 RuntimeCore/tool-runtime 执行。 | `AgentChatWorkspace.tsx`、RuntimeCore AgentControl gateway | `current`;已删除的 child resume/close/wait/sendInput wrapper 不得恢复。 |
|
||||
| Delegated approval identity | plan approval 继续保留 target session、plan ref 与等待 leader 等结构化字段。 | canonical action Item、`agentUiEventProjection.ts`、`agentUiProjectionSummary.ts` | `current`;不得依赖 raw Team subscription。 |
|
||||
| Teammate transcript | canonical child Thread/session identity 和 ThreadItem refs 用于定位详情;主 final answer 不混入 child transcript。 | canonical child roster、ThreadItem projection、session view | `current`;raw status transcript projection 待删除。 |
|
||||
|
||||
## 5. Current / compat / deprecated / dead 分类
|
||||
|
||||
@@ -138,11 +139,11 @@ AgentRuntimeProfileEvent / ThreadReadModel / EvidenceSummary
|
||||
| `threadItems` / `threadTurns` / `thread_read` timeline | `current` | 完成态过程归档、历史恢复、evidence 链路的主事实源。 | 无。继续演进。 |
|
||||
| Inline active process | `current` | active turn 的首要过程投影;running 时优先于 timeline detail。 | 无。继续演进。 |
|
||||
| Historical timeline archive | `current` | completed process 的归档投影;默认折叠。 | 无。继续演进。 |
|
||||
| Subagents runtime cards / live runtime projector | `current` | subagent/team runtime 的 current UI 读模型。 | 标准 surfaces 补齐后,作为 Subagents projection consumer。 |
|
||||
| Subagent runtime controls `spawn/send_input/wait/resume/close` | `current` | Lime teammate / child session 的 current 控制入口。 | 对齐标准 control 名称,补 `delegate/assign/continue_agent/wait/stop/close/request_review` 的 adapter。 |
|
||||
| Canonical SubAgent Item / child roster / timeline | `current` | activity、成员、状态和导航的唯一 GUI 读模型;ThreadId 经 canonical Thread sessionId 进入 session view。 | 无。继续演进。 |
|
||||
| GUI main-turn stop | `current` | Workspace 只直接委托主输出 `stopSending`。模型侧六个 AgentControl tools 属于 RuntimeCore/tool-runtime,不等于 GUI child control。 | 无。不得恢复 unavailable wrapper。 |
|
||||
| Automation job | `current` | durable background execution 的 current 执行实体;创建、更新、删除、立即运行、列表 / 状态 / run history 刷新已投影为 `runtimeEntity=automation_job`、`background_teammate`、`task_capsule` 与 terminal `worker.notification`。 | 后续其它 automation 消费入口继续接同一 projection helper;不得拆出新 runtime taxonomy。 |
|
||||
| Remote task projection | `current` + actual source `partial` | `remoteTaskAgentUiProjection.ts` 是 `remote_task_projection` 的唯一 current builder;它输出 `agent.changed/task.changed(surface=remote_teammate, runtimeEntity=external_task)`、artifact refs 与 terminal `worker.notification`,`agentUiEventProjection.ts` 只保留兼容 wrapper。2026-05-10 已接入 gateway provenance:渠道 runtime 在 `agent.run` 写入 `source_metadata.remote_task`,RPC terminal metadata 合并保留该 source,前端按 terminal `AgentRun.status`、结构化 remote task status 与 metadata 投影当前 session remote teammate。 | terminal `AgentRun.status` 仍优先;非 terminal run 可消费 `remote_task.event/taskStatus/status/state/phase` 这类结构化 remote task source,不得用 heartbeat、gateway 日志、assistant prose、普通 session message 或 teammate XML/JSON 文本反推。真正原生 A2A ingress、remote artifact store/content 回流与更完整远端任务详情归入 future product boundary;current baseline 继续只消费结构化 remote_task source。 |
|
||||
| `subagent_status_changed -> agent.changed` 单一投影 | `current` + 旧语义 `compat` 退出中 | 已补 `agent.spawned`、`agent.completed`、`team.changed`、`worker.notification`、queue/team/provider facts;`agent.changed` 继续作为 summary 兼容事件。 | 后续 UI 消费全部改读 v0.6 event classes 后,`agent.changed` 只保留通用状态摘要。 |
|
||||
| `subagent_status_changed -> agent.changed` | `deprecated` | raw status 仅剩迁移期 refresh/projection consumer,不得承接新 roster/activity/terminal 语义。 | canonical notification/read control 接管 refresh 后删除 API、parser 与 projector。 |
|
||||
| `thinkingContent` fallback | `compat` | 仅作为 contentParts/reasoning 持久化不完整时的兜底。 | 历史 session 均能从 `contentParts` 或 `threadItems.reasoning` 恢复后删除。 |
|
||||
| Scheduler tick 作为产品级 task taxonomy | `compat` -> `deprecated` | 只能作为“发现到期任务并触发 automation job”的兼容触发壳。 | 后续若保留 scheduler,也只能做触发器;新后台能力一律落 `automation job`。 |
|
||||
| Active turn leading timeline duplicate | `deprecated` | 与 inline process 同屏重复时必须被抑制。 | 保持只在没有 inline process fact 时作为 fallback。 |
|
||||
@@ -157,14 +158,14 @@ AgentRuntimeProfileEvent / ThreadReadModel / EvidenceSummary
|
||||
|
||||
| 后续优先级 | 后续项 | 影响 | 期望收口 |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 | `runtimeEntity` 显式字段 / 类型 | 已可机械证明 `agent_turn/subagent_turn/automation_job` 进入 Agent UI envelope;`work_item` 已有 team formation -> work board baseline;`external_task` 已有 remote task projection helper。 | 继续禁止新建第四类 runtime taxonomy;remote helper 只能消费真实 remote source。 |
|
||||
| P0 | `runtimeEntity` 显式字段 / 类型 | 已可机械证明 `agent_turn/subagent_turn/automation_job` 进入 Agent UI envelope;`work_item` 只认真实 TaskUpdate/review source;`external_task` 已有 remote task projection helper。 | 继续禁止新建第四类 runtime taxonomy;remote helper 只能消费真实 remote source。 |
|
||||
| P0 | team queue / parallelism facts 进入标准 envelope | Team UI 与 Agent UI projection 已共享 team/provider queue facts。 | 继续补 surface 详情消费,避免各 UI 局部重算。 |
|
||||
| P0 | `agent.spawned` / `agent.completed` 独立于 `agent.changed` | 已表达 teammate lifecycle、worker terminal result 与 parent/child lineage。 | 后续补更精确的 spawn source 与 transcript refs。 |
|
||||
| P0 | `worker.notification` 独立 surface | terminal subagent status 与 archived subagent activity 已进入 `worker_notifications`,不进入主 transcript/final answer;terminal status projection 已保留 `transcriptRef`,Rust status emitter 已提供 usage / duration / tool count / result_ref,Subagents 操作视图已显示这些 worker result facts。 | 已补 latest turn AgentMessage 的 durable runtime item `result_ref` source;后续如需 artifact 级结果再接 artifact source,仍不从 teammate 文本反推。 |
|
||||
| P1 | Subagents surfaces consumer 基线已接入 | summary panel 已展示 roster、board、delegation、handoff、notifications、review、transcript、background、remote、policy 的 scoped counts、latest events、`Team 拓扑 / Worker 流 / Review-Handoff` lanes、可展开 surface detail 与 `工作台操作视图`;独立 view model 已保留 action target 与 attention 状态,并把 `review_requested_fix` work item 显式展示为可指派 Review fix,且能展示结构化 regression outcome;`team_reassignment` work item 已显示重新指派目标、负责人流转、原因与 action label;panel 已能把 action item 回传并在右侧定位标准 target;subagent status 已提供 teammate transcript ref target;`teammate_transcript/open_detail` 已有 Transcript Zoom 定位面,解析 child session / latest turn,并展示本地 child session 概览、live activity preview、历史 activity snapshot fallback、同目标 related projection chain 与 requested fix / worker result 的 artifact/evidence/result ref 追溯。 | 已补非本地 target route taxonomy、可见状态、requested fix 显式点击后的 runtime turn 提交与重指派 selector/callback 的 TaskUpdate 指令回填;直接 board/team API 写回已审计为 future command boundary,当前不作为 v0.6 projection 对齐阻塞项;后台无确认策略和更完整 teammate drilldown 排后。 |
|
||||
| P1 | `agent.handoff` 基线已建模 | analysis handoff helper 与 handoff bundle 导出都已保留 from/to/reason/resume target/context boundary,并写入 `handoff_lane`;Subagents surface detail / 操作视图已能显示 handoff status、from/to、resume target 与 context boundary;handoff projection adapter 已把真实 source status 映射到标准 phase。 | 最小真实 source 已接:accepted/returned 来自 `subagent_status_changed`,resumed 来自真实 resume control response;后续补更独立的 handoff protocol callback,不从 review decision 或 prose 合成。 |
|
||||
| P1 | Review lane 基线已与 evidence 合流 | `review.requested` / `review.completed` 已进入 `review_lane` 并关联 evidence refs;review template 导出也会同步记录 `request_review/work_item` team control projection;surface detail 已展示 reviewer、risk、checklist、followup、regression、requested fixes 与 regression requirement preview;`review.completed` 已把 reviewer 投影为 `team_roster` reviewer teammate;requested fixes 已派生为 `work_board` work item,并在工作台操作视图中显示修复正文、pending 状态、regression outcome 和 assign target;`team_control_projection(action=reassign)` 已能表达 reassignment source。 | requested fix execution artifact metadata 已进入 evidence / review decision 链路;TaskUpdate owner_change source 已接入 work_board;前端 reassignment selector/callback 已以 TaskUpdate 指令回填方式接入;当前已支持把 pending fix 回填输入框,由用户确认发送后执行,也支持用户显式点击后直接提交主线程 runtime turn,并要求后续写入 `requestedFixExecutionResults` metadata;artifact snapshot 一旦带回该 metadata,会即时把 board 完成状态按 source-provided executionStatus 展示为“待执行修复 / 修复完成”等可见状态。 |
|
||||
| P1 | Control 接线尾项 | `team_control_projection` adapter 已能表达 `delegate/assign/reassign/continue_agent/wait/stop/close/request_review`;现有 wait/resume/send_input/close/stop 已接 UI 操作且带 session scope;`agent.spawned` 已作为 delegation source 携带 `delegate`;Team formation 已把 actual assignment source 投影为 `assign/work_item`;Harness review template 导出已把 actual request_review source 投影为 review work item;Subagents action click 已只做标准 target 定位;无本地 child session 时会明确返回并显示 located_only / remote_task_source_located / unsupported_review / unsupported_handoff / unsupported_work_item / seeded_work_item;pending requested fix 可回填输入框,也可在用户显式点击后提交 runtime turn;两条路径都不伪造运行时完成。 | 当前 control 来源已覆盖主路径;更细 review teammate 状态、无人工确认后台执行策略与无 prompt board/team API 写回都属于后续产品增强,直接写回需先补 current 命令边界。 |
|
||||
| P1 | Control 接线尾项 | GUI 已收敛到 main-turn stop 与结构化 target 定位;模型侧协作只经 RuntimeCore AgentControl tools。 | 若要新增 review/work-item 直接写回,先定义 current App Server command;不得恢复 Team child control wrapper。 |
|
||||
| P2 | Background teammate 持续刷新 | settings automation 页刷新、创建、更新、删除、立即运行,以及 capability drafts managed automation 列表/开关已记录 `automation_job_projection`,并持续投影到 `background_teammate` / `task_capsule` / `worker_notifications`。 | 保持 automation job 为 current 执行实体;后续只需补 skills automation 等其它消费入口,不新增 runtime taxonomy。 |
|
||||
| P2 | Remote teammate adapter | `remoteTaskAgentUiProjection.ts` 已提供 `external_task -> remote_teammate` adapter baseline,保留 Agent Card、remote task id、input/auth、artifact updates 与 terminal worker notification;gateway current ingress 已把真实 channel provenance / remote task id / Agent Card 通过 `agent_runs.metadata` 接入该 helper。 | 真正原生 A2A ingress、remote artifact store/content 回流、远端详情与控制 callback 已登记为 future product boundary;current baseline 不用假 remote surface、heartbeat completion 或普通文本反推状态。 |
|
||||
| P2 | Context/memory 细分事件 | v0.5 尾项仍存在。 | memory budget、missing context、retrieval refs 结构化 source event。 |
|
||||
@@ -182,6 +183,8 @@ AgentRuntimeProfileEvent / ThreadReadModel / EvidenceSummary
|
||||
|
||||
## 8. 2026-05-09 v0.6.0 再审计记录
|
||||
|
||||
> 历史快照:本节及 8.x 的 Team formation、raw status subscription、live projector、resume/close wrapper 与旧命令证据已被 2026-07-14 S6i/S6j 取代,不是 current 导航或验证入口。
|
||||
|
||||
- 已确认 Agent UI 标准版本为 `v0.6.0`,local commit 为 `dcf4bc5`,公开 schema 为 `https://limecloud.github.io/agentui/schemas/agentui-event.schema.json`。
|
||||
- 已确认 Lime current taxonomy 只承认 `agent turn`、`subagent turn`、`automation job`,与 Agent UI `runtimeEntity` 的三类本地映射一致。
|
||||
- 已确认 Lime 已有 subagent runtime、child session、team phase、queue/provider concurrency 数据源,主要缺口在标准 projection envelope 和 Subagents surface 消费。
|
||||
|
||||
@@ -20,7 +20,7 @@ Lime 的下一代 AgentUI 应是一个桌面工作台,而不是单列聊天页
|
||||
| --- | --- | --- | --- |
|
||||
| 对话层 Conversation | 我和 Agent 说了什么,最终答复是什么 | `MessageList`、`StreamingRenderer`、用户消息、助手正文 | `messages`、`contentParts`、`text_delta` |
|
||||
| 过程层 Process | Agent 现在在做什么,卡在哪里 | runtime strip、thinking、tool step、timeline | `runtime_status`、`thinking_delta`、`threadItems`、`threadTurns` |
|
||||
| 任务层 Task | 还有哪些后台任务、排队输入、子代理 | capsule、task center、queue panel、team board | `queuedTurns`、`childSubagentSessions`、`thread_read` |
|
||||
| 任务层 Task | 还有哪些后台任务、排队输入、子代理 | capsule、task center、queue panel、Subagents view | `queuedTurns`、`canonicalChildren`、`thread_read` |
|
||||
| 产物层 Artifact | 最终交付物在哪里继续编辑 | canvas、artifact preview、workbench | `artifact_snapshot`、ArtifactDocument、`.lime/artifacts` |
|
||||
| 证据层 Evidence | 这次执行是否可靠,如何复盘 | harness panel、evidence pack、review decision、replay | `thread_read`、timeline、evidence/review services |
|
||||
|
||||
|
||||
@@ -18,16 +18,16 @@ App Server 负责 JSON-RPC、会话状态、投影、证据、artifact 和数据
|
||||
- `current`:`lime-rs/crates/app-server/src/agent_runtime_registry.rs` 作为 App Server 内部 Agent runtime 初始化边界;LocalAppDataSource 和其他数据源层不得直接 import `lime_agent::initialize_agent_runtime`。
|
||||
- `current`:`lime-rs/crates/app-server/src/skill_registry.rs` 作为 App Server 内部 Skill registry 变更通知边界;LocalAppDataSource 只能通知该边界,不得直接触碰 Agent 状态。
|
||||
- `current`:`lime-rs/crates/agent/src/knowledge_builder_skill.rs` 作为 Knowledge Builder Skill 的真实 Agent Skill 执行边界,负责 Skill 加载、provider fallback、prompt / workflow 执行,并通过 `KnowledgeBuilderSkillRunner` 持有 Agent 状态。
|
||||
- `current`:`lime-rs/crates/agent/src/turn_execution.rs` 作为主 Agent turn 的 Agent streaming loop 调用边界,负责 `stream_reply_with_policy`、cancel token 生命周期和事件回调入口;App Server `runtime_backend.rs` 只传入已构造好的 session config / request tool policy 并投影事件。
|
||||
- `current`:`lime-rs/crates/agent/src/turn_execution.rs` 作为主 Agent turn 的 Agent streaming loop 调用边界,负责 `stream_current_provider_turn`、cancel token 生命周期和事件回调入口;App Server `runtime_backend.rs` 只传入已构造好的 session config / request tool policy 并投影事件。
|
||||
- `current`:`lime-rs/crates/agent/src/provider_configuration.rs` 作为运行时 Provider 配置 façade,负责调用 `AgentState.configure_provider` / `configure_provider_from_pool`、持有 `ProtocolKind -> ModelProviderProtocol -> RuntimeProviderProtocol` 映射并返回 `ProviderConfig`;App Server 只传入 App Server `ProtocolKind`。
|
||||
- `current`:`lime-rs/crates/agent/src/session_configuration.rs` 作为主 Agent turn 的 Agent `SessionConfig` 构造 façade,负责持有 `SessionConfigBuilder` 和 `agent::agents::SessionConfig` 类型出口;App Server 只传入 system prompt、turn context 与 trace 开关。
|
||||
- `current`:`lime-rs/crates/agent/src/session_configuration.rs` 作为主 Agent turn 的 session config façade,直接 re-export `agent-runtime/src/session_config.rs` 的 `AgentSessionConfig`、`AgentSessionConfigurationRequest` 和 `build_agent_session_config`;App Server 只传入 system prompt、turn context 与 trace 开关。
|
||||
- `current`:`lime-rs/crates/agent/src/turn_context_configuration.rs` 作为主 Agent turn 的 Agent `TurnContextOverride` / `TurnOutputSchemaSource` 构造 façade,负责持有 turn context 类型、output schema source 设置和 metadata / policy 读取 helper;App Server 只传入 request 投影数据或调用 façade helper。
|
||||
- `current`:`lime-rs/crates/agent/src/direct_text_generation.rs` 作为禁用工具的受控文本生成边界,负责 `SessionConfigBuilder`、`RequestToolPolicyMode::Disabled` 与 Agent streaming 文本收集;App Server image presentation adapter 只传入已解析的 prompt、session/turn id 与 turn context。
|
||||
- `current`:`lime-rs/crates/agent/src/host_managed_generation.rs` 作为 Plugin worker host-managed generation 边界,负责声明解析、prompt 拼装、多段 direct text generation loop、输出裁剪和 status envelope helper;App Server plugin worker adapter 只保留 provider route 解析、provider 配置和 worker request 投影。
|
||||
- `current`:`lime-rs/crates/agent/src/native_tools/**` 作为 image / memory 原生 Agent Tool 实现边界,负责工具 schema、参数解析、权限检查与 `ToolResult` 投影;App Server 只注入 media / memory gateway。
|
||||
- `current`:`lime-rs/crates/agent/src/agent_tools/tool_inventory_runtime_snapshot.rs` 作为 tool inventory 的 Agent registry / extension snapshot 边界,负责读取 Agent `tool_registry()`、`get_extension_configs()`、`list_tools()`,并把 MCP bridge tools 合并为 runtime extension surface;`lime-rs/crates/agent/src/agent_tools/inventory.rs` 继续负责 inventory read-model 投影。
|
||||
- `current`:`lime-rs/crates/agent/src/agent_tools/workspace_patch_host.rs` 作为 workspace patch host tool request 解析、Agent tool registry 批执行、planned tool evidence 拼装与 workspace patch 回写边界;App Server 只提取 RuntimeEvent 里的 artifact patch、构造 turn context 并调用 `lime-agent` execution façade。
|
||||
- `current`:`lime-rs/crates/agent/src/agent_tools/tool_orchestrator.rs` 作为 shell tool canonicalization、Agent shell tool registry 权限预检与 live process registry 接线边界;App Server `execution_process.rs` 只保留 process control、stdin / interrupt / terminate / drain 输出 read-model 投影,不得直接注册 `BashTool` / `PowerShellTool` 或构造 `ToolRegistry`。
|
||||
- `current`:`lime-rs/crates/agent/src/agent_tools/workspace_patch_host.rs` 作为 workspace patch host tool request 解析、RuntimeTool `execute_call` 批执行、tool lifecycle evidence 拼装与 workspace patch 回写边界;App Server 只提取 RuntimeEvent 里的 artifact patch、构造 turn context 并调用 execution façade。
|
||||
- `current`:`lime-rs/crates/tool-runtime/src/shell_permission.rs` 与 `execution_decision.rs` 作为 shell permission / execution decision owner;App Server `execution_process.rs` 只保留 process control、stdin / interrupt / terminate / drain 输出 read-model 投影和委托预检,不得直接注册 Agent shell tool 或构造 Agent `ToolRegistry`。
|
||||
- `current-but-at-risk`:`lime-rs/crates/app-server/src/runtime_backend.rs` 与已登记 `runtime_backend/**` 子模块。它们目前承接真实 Claw / Agent 执行,但后续只能缩边界、拆职责,不应继续膨胀。`lime-rs/crates/app-server/src/runtime_backend/knowledge_builder_runtime.rs` 已从平行 Agent Skill 执行器收缩为 App Server adapter,只负责 `KnowledgeBuilderRuntimePlan -> lime-agent KnowledgeBuilderSkillRunner -> KnowledgeBuilderRuntimeExecution` 投影,不再直接持有 `AgentState`。
|
||||
- `current-but-at-risk`:`lime-rs/crates/app-server/src/runtime_backend/provider_config.rs` 只允许保留 App Server `ProtocolKind` 传递、runtime database 初始化、`model.effective` 事件构造和 `lime-agent` provider façade 接线;不得重新直接调用 Agent provider 配置方法,也不得重新直接引用 `RuntimeProviderProtocol` 或 `RuntimeProviderProtocol`。
|
||||
- `current-but-at-risk`:`lime-rs/crates/app-server/src/runtime_backend/request_context.rs` 已收缩为 800 行以下 facade,并拆出 `request_context/session_config.rs`、`turn_context.rs`、`workspace_scope.rs`。这些子模块仍是 App Server request adapter,只允许继续收缩或下沉,不得把 `SessionConfig`、`TurnContextOverride` 或 workspace scope 拼装逻辑折回主文件;其中 `session_config.rs` 已不再直接使用 `SessionConfigBuilder`,`turn_context.rs` 已不再直接引用 `TurnContextOverride` / `TurnOutputSchemaSource`。
|
||||
@@ -100,7 +100,7 @@ App Server 负责 JSON-RPC、会话状态、投影、证据、artifact 和数据
|
||||
- 扩展 `src/lib/governance/appServerRuntimeBoundary.test.ts` 与 `scripts/check-app-server-client-contract.mjs`,禁止 App Server production 重新直接引用 provider protocol DTO 或恢复本地 provider protocol 映射 helper。
|
||||
- 将 tool inventory 的 Agent `tool_registry()`、`get_extension_configs()`、`list_tools()` snapshot 和 MCP extension surface 合并下沉到 `lime-rs/crates/agent/src/agent_tools/tool_inventory_runtime_snapshot.rs`;App Server `runtime_backend/tool_inventory.rs` 只保留 AppDataSource MCP snapshot 读取、metadata 合并和 `agentSession/toolInventory/read` read-model 投影。
|
||||
- 扩展 `src/lib/governance/appServerRuntimeBoundary.test.ts` 与 `scripts/check-app-server-client-contract.mjs`,禁止 App Server tool inventory 重新直接读取 Agent tool registry / extension config。
|
||||
- 将 App Server `execution_process.rs` 中的 Agent shell `BashTool` / `PowerShellTool` 注册、`ToolRegistry` 构造和权限预检下沉到 `lime-rs/crates/agent/src/agent_tools/tool_orchestrator.rs` 的 `check_shell_tool_permissions` façade;App Server execution process 只保留 `ExecutionProcess*` 协议投影、process control 和输出缓冲。
|
||||
- 删除 App Server `execution_process.rs` 中的 Agent shell `BashTool` / `PowerShellTool` 注册与 `ToolRegistry` 构造;shell permission 和 execution decision 统一委托 `tool-runtime` 的 `check_shell_command_permission` / `decide_tool_execution`,App Server 只保留 `ExecutionProcess*` 协议投影、process control 和输出缓冲。
|
||||
- 扩展 `src/lib/governance/appServerRuntimeBoundary.test.ts`,防止 App Server execution process 重新直接 import `agent::tools` 或注册 shell tool registry。
|
||||
|
||||
## 剩余缺口
|
||||
|
||||
@@ -2,7 +2,15 @@
|
||||
|
||||
> 关联 PRD:`internal/roadmap/i18n/prd.md`
|
||||
> 当前阶段:P0-P4 readiness 完成审计
|
||||
> 更新日期:2026-05-27
|
||||
> 更新日期:2026-07-14
|
||||
|
||||
## 2026-07-14:S6j/S6l Team runtime dead key 收口
|
||||
|
||||
- 五语言 `agentTeamWorkspace` 已删除 `liveRuntime.*`、`runtimeStatus.*`、`control.*` dead key;namespace 只保留仍有 current consumer 的 AgentUI projection copy。
|
||||
- `scripts/i18n/i18n-unused-key-check.ts` 已移除 `agentChat.teamWorkspace.control.` 默认 protected prefix,避免已删 control 文案静默回流。
|
||||
- 2026-05 的“实际运行时家族”与旧保护计数保留为历史指标,不再代表 current Team runtime owner。
|
||||
|
||||
验证:`npm run i18n:check:json`、`npm run i18n:unused` 与相关 i18n/governance 定向测试。
|
||||
|
||||
## 2026-05-27:P0-P4 全路线图 readiness 审计
|
||||
|
||||
@@ -86,6 +94,7 @@
|
||||
- `npm run i18n:docs-locale-manifest:json -- --output "internal/roadmap/i18n/evidence/docs-locale-build-manifest.json"` 通过。
|
||||
- `npm run i18n:release-docs-report:json -- --output "internal/roadmap/i18n/evidence/release-docs-workflow-inventory.json"` 通过。
|
||||
- `npm run i18n:p4-readiness-report:json -- --output "internal/roadmap/i18n/evidence/p4-readiness-report.json"` 通过。
|
||||
|
||||
- `npm run i18n:roadmap-readiness-report:json -- --output "internal/roadmap/i18n/evidence/roadmap-readiness-report.json"` 通过。
|
||||
|
||||
## 主目标
|
||||
|
||||
@@ -84,7 +84,7 @@ Lime 当前主链没有完全踩 Yi-One 的坑:`agentSession` 协议和 memory
|
||||
| 插件 `lime.agent.startTask` App Server runtime host | `current` | 只允许显式 `workspaceId/projectId/sessionId` 驱动;缺 Project/Thread workspace 时 fail closed,不再自动创建默认项目。 |
|
||||
| 插件 `agent-runtime/tasks/` 本地 task 投影缓存 | `compat` | 只用于刷新后恢复 task projection;长期事实源仍必须回到 App Server session/thread/turn/evidence。 |
|
||||
| subagent / team session | `compat` | 允许 child session 作为执行上下文,但必须挂 parent thread lineage,不得进入独立聊天列表。 |
|
||||
| subagent parent context / Team projection | `current` | `parent_session_id / created_from_turn_id / team_preset_id / sibling_subagent_sessions` 必须回到 parent Thread 的 timeline、team facts 和 projection。 |
|
||||
| canonical SubAgent Thread family / AgentGraph projection | `current` | `Thread.parentThreadId / agentState` 与 `CanonicalChildThreadSummary[]` 必须回到 parent Thread 的 timeline、team facts 和 projection。 |
|
||||
| Evidence Pack `team_facts` | `current` | App Server `evidence/export` 汇总 Team facts,证明 roster、handoff、worker notification、review lane 可从 parent session/thread/turn 导出。 |
|
||||
| Browser profile / runtime session | `compat` | 只能是工具运行环境或 right surface,不得成为用户任务第一分类。 |
|
||||
| Automation / workflow job | `compat` | 可以后台运行,但输出、证据和继续动作必须回到 Project / Thread。 |
|
||||
@@ -253,7 +253,7 @@ Agent / Expert / Skill / Plugin 的正确位置是:
|
||||
|
||||
1. Agent Workspace P0 `multi-agent-team` evidence 证明 team facts 可见、可恢复、可导出。
|
||||
2. 没有独立的“子 Agent 会话历史列表”绕开 parent thread。
|
||||
3. 已完成恢复第一刀:parent `childSubagentSessions` / child `subagentParentContext.sibling_subagent_sessions` 会回补同构 Agent UI Team facts projection,并绑定 parent session / thread / turn。
|
||||
3. 已完成 canonical Thread family 恢复:`thread/list|read` join AgentGraph/identity 后生成 `CanonicalChildThreadSummary[]`,同构 Agent UI SubAgent projection 绑定 parent thread、child thread/session 与来源 turn item。
|
||||
|
||||
## 8. P0 回归场景
|
||||
|
||||
|
||||
@@ -599,9 +599,11 @@ npm run verify:gui-smoke
|
||||
|
||||
最终验证:
|
||||
|
||||
> 2026-07-14:Team runtime sidecar 测试路径已被 S6j 删除;下列命令改用 canonical SubAgent reader/projection/timeline 回归,2026-06-21 的历史结果不变。
|
||||
|
||||
```bash
|
||||
npm test -- --run src/lib/governance/agentSkillsRuntimeBoundary.test.ts src/lib/api/skillCatalog.test.ts src/lib/base-setup/seededCommandPackage.test.ts src/lib/base-setup/compat/commandCatalogProjection.test.ts src/components/agent/chat/workspace/serviceSkillSceneLaunch.test.ts src/components/agent/chat/team-workspace-runtime/liveRuntimeProjector.test.ts src/components/agent/chat/team-workspace-runtime/runtimeEventSubscriptions.test.ts src/components/agent/chat/components/AgentThreadTimeline.test.tsx src/components/agent/chat/components/AgentThreadTimeline.reasoning.test.tsx src/components/agent/chat/components/AgentThreadTimelineViewModel.unit.test.ts
|
||||
npx eslint src/components/agent/chat/team-workspace-runtime/liveRuntimeProjector.test.ts src/components/agent/chat/components/AgentThreadTimelineViewModel.ts src/components/agent/chat/components/AgentThreadTimelineViewModel.unit.test.ts src/lib/governance/agentSkillsRuntimeBoundary.test.ts src/lib/api/skillCatalog.test.ts src/lib/base-setup/seededCommandPackage.test.ts src/lib/base-setup/compat/commandCatalogProjection.test.ts src/components/agent/chat/workspace/serviceSkillSceneLaunch.test.ts --max-warnings 0
|
||||
npm test -- --run src/lib/governance/agentSkillsRuntimeBoundary.test.ts src/lib/api/skillCatalog.test.ts src/lib/base-setup/seededCommandPackage.test.ts src/lib/base-setup/compat/commandCatalogProjection.test.ts src/components/agent/chat/workspace/serviceSkillSceneLaunch.test.ts src/lib/api/agentRuntime/appServerCanonicalItemReader.test.ts src/components/agent/chat/projection/threadItemProjection.test.ts src/components/agent/chat/components/AgentThreadTimeline.test.tsx src/components/agent/chat/components/AgentThreadTimeline.reasoning.test.tsx src/components/agent/chat/components/AgentThreadTimelineViewModel.unit.test.ts
|
||||
npx eslint src/components/agent/chat/components/AgentThreadTimelineViewModel.ts src/components/agent/chat/components/AgentThreadTimelineViewModel.unit.test.ts src/lib/governance/agentSkillsRuntimeBoundary.test.ts src/lib/api/skillCatalog.test.ts src/lib/base-setup/seededCommandPackage.test.ts src/lib/base-setup/compat/commandCatalogProjection.test.ts src/components/agent/chat/workspace/serviceSkillSceneLaunch.test.ts src/lib/api/agentRuntime/appServerCanonicalItemReader.test.ts src/components/agent/chat/projection/threadItemProjection.test.ts --max-warnings 0
|
||||
npm run test:contracts
|
||||
npm run smoke:agent-runtime-current-fixture
|
||||
npm run verify:gui-smoke
|
||||
|
||||
@@ -16,16 +16,13 @@
|
||||
|
||||
- 聊天输入中的 `/subagents` 是本地 slash action,命中后只调用 `onOpenSubagents`,不发送给模型,不走 mock,不新增 Electron IPC 或 App Server JSON-RPC 命令。
|
||||
- 输入栏 plus menu 的 Subagents 状态只表达当前 turn 可使用 Subagents/thread runtime,不打开 Team picker、Team profile editor 或协作工作台。
|
||||
- Subagents 运行态展示继续收敛到 runtime projection / workspace scene runtime:
|
||||
- `src/components/agent/chat/team-workspace-runtime/liveRuntimeProjector.ts`
|
||||
- `src/components/agent/chat/team-workspace-runtime/runtimeEventSubscriptions.ts`
|
||||
- `src/components/agent/chat/team-workspace-runtime/runtimeStateReconciler.ts`
|
||||
- `src/components/agent/chat/workspace/useWorkspaceTeamSessionRuntime.ts`
|
||||
- App Server / RuntimeCore 后续若提供 first-class subagent thread list,前端只允许接到 Subagents/thread projection,不得恢复 Team 配置面。
|
||||
- Subagents activity 展示只走 canonical 链:`appServerCanonicalItemReader.ts` -> `threadItemProjection.ts` / `packages/agent-runtime-projection/src/threadItems.ts` -> `AgentThreadTimelineItemRenderers.tsx`。
|
||||
- Workspace 可见性与 roster 只允许消费 canonical child Thread 或仍在迁出的真实 child session/parent context;不得订阅 raw status/stream 后重建本地 runtime。
|
||||
- App Server 已提供 canonical `thread/list` / `thread/read`。activity 中的 child ThreadId 必须经 canonical Thread 的 `sessionId` 进入现有 session view,不得把 ThreadId 直接当 sessionId。
|
||||
|
||||
### compat
|
||||
|
||||
- `TeamDefinition`、`selectedTeam`、`recent_team_selection`、`teamWorkspaceRuntime`、`useTeamWorkspaceRuntime`、`lime.chat.team_selection.v1.general` 仍是历史兼容命名,只能承载现有 runtime metadata / session projection。
|
||||
- `TeamDefinition`、`selectedTeam`、`recent_team_selection`、`lime.chat.team_selection.v1.general` 仍是历史兼容命名,只能承载现有 runtime metadata / selection projection。
|
||||
- 兼容字段可以继续被发送边界读取,但不允许重新变成用户可见 Team 概念、profile 编辑器、任务分工模板或自定义 Team 存储入口。
|
||||
- 退出条件:App Server / RuntimeCore 提供 current `SubagentThread` / `SubagentProfile` 事实源后,将上述 compat 命名迁成 subagent/thread 语义,并删除不再被 current projection 使用的存储 key。
|
||||
|
||||
@@ -40,6 +37,8 @@
|
||||
- `empty-state-team-selector`、`team-selector-stub` 等旧 test id / DOM surface。
|
||||
- `agentChat.inputbar.teamSelector.*` 与 Team canvas / board / dock / formation / selectedSession / activityPreview / operations / canvasLane / teamPreset i18n key。
|
||||
- `agentChat.inputbar.teamSuggestion.*` i18n key 与 `team-suggestion-bar` DOM surface。
|
||||
- `team-workspace-runtime/**`、`useTeamWorkspaceRuntime`、`teamWorkspaceRuntime`、session/control wrappers、restored synthetic facts、本地 live/draft/tool/queue map 与 unavailable controls。
|
||||
- `agentChat.teamWorkspace.liveRuntime.*`、`runtimeStatus.*`、`control.*` 五语言 dead key。
|
||||
|
||||
## 实施约束
|
||||
|
||||
@@ -66,8 +65,14 @@
|
||||
- 已把用户可见文案从 `Team current tools`、`Team Memory`、`Team member`、`teammate` 等改为 Subagents / 子代理语义;兼容 key 仅保留在协议、storage 和 runtime metadata 边界。
|
||||
- 已补 `legacySurfaceCatalog` dead surface 守卫,覆盖旧文件、路径、props、test id、Team 画布术语和旧展示文案,防止后续恢复。
|
||||
|
||||
## 2026-07-14 current supersession
|
||||
|
||||
- S6i 已删除发送前本地 formation、虚拟成员、work-board event 与 dispatch preview。
|
||||
- S6j 已删除 raw Team runtime sidecar、restored/live synthetic facts 和不可用 control stub;2026-06-10 记录中的“回到 runtime projection”只保留为历史,不再指向这些已删 owner。
|
||||
- canonical SubAgent Item、child Thread lifecycle 和 canonical child roster 是继续演进的 current owner;raw status API 与旧 roster DTO 仅作为待迁出的 deprecated 边界。
|
||||
|
||||
## 后续退出条件
|
||||
|
||||
- Runtime 提供 first-class Subagents thread/profile schema 后,迁掉 `TeamDefinition` / `selectedTeam` / `recent_team_selection` 等 compat 命名。
|
||||
- `agentTeamWorkspace` namespace 只剩 current runtimeStatus / liveRuntime / control 文案后,评估是否改名为 Subagents namespace。
|
||||
- `agentTeamWorkspace` namespace 只承载仍在使用的 AgentUI projection copy;是否改名为 Subagents namespace另开窄切片,不恢复已删 runtime/control key。
|
||||
- 若 `teamMemorySnapshot` 仍只作为历史 metadata 展示,保持只读 compat;若无 current 消费,按 `dead` 删除并补守卫。
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
"npx vitest run \"internal/roadmap/test/clawstream/scenario-registry.test.mjs\"",
|
||||
"npm --prefix \"packages/agent-runtime-projection\" run build && node --test \"packages/agent-runtime-projection/tests/multiAgentItemTaxonomy.test.mjs\"",
|
||||
"npm --prefix \"packages/agent-runtime-projection\" run build && node --test \"packages/agent-runtime-projection/tests/multiAgentToolSchema.test.mjs\"",
|
||||
"npm run test:related -- \"src/components/agent/chat/team-workspace-runtime\" \"src/components/agent/chat/projection/subagentStatusProjection.test.ts\" \"src/components/agent/chat/projection/agentUiSubagentsViewModel.test.ts\"",
|
||||
"npm run test:related -- \"src/lib/api/agentRuntime/appServerCanonicalItemReader.ts\" \"src/components/agent/chat/projection/threadItemProjection.ts\" \"src/components/agent/chat/projection/agentUiSubagentsViewModel.ts\" \"src/components/agent/chat/workspace/useWorkspaceTeamRuntime.ts\"",
|
||||
"npm run test:rust:related -- \"lime-rs/crates/app-server/src/runtime/tests/evidence_exports/team_facts.rs\" \"lime-rs/crates/thread-store/src/subagent_tree.rs\"",
|
||||
"npm run smoke:claw-chat-current-fixture -- --scenario multi-agent-team --timeout-ms 180000"
|
||||
],
|
||||
|
||||
Generated
+31
-31
@@ -21,7 +21,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "agent-protocol"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"schemars",
|
||||
"serde",
|
||||
@@ -30,7 +30,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "agent-runtime"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"anyhow",
|
||||
@@ -180,7 +180,7 @@ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
|
||||
|
||||
[[package]]
|
||||
name = "app-server"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"agent-runtime",
|
||||
@@ -239,7 +239,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "app-server-client"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"app-server-protocol",
|
||||
"app-server-transport",
|
||||
@@ -250,7 +250,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "app-server-daemon"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"app-server-protocol",
|
||||
"app-server-transport",
|
||||
@@ -262,7 +262,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "app-server-protocol"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"schemars",
|
||||
@@ -272,7 +272,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "app-server-test-client"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-server-client",
|
||||
@@ -283,7 +283,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "app-server-transport"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"app-server-protocol",
|
||||
"serde_json",
|
||||
@@ -1346,7 +1346,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "document-preview"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"flate2",
|
||||
"tempfile",
|
||||
@@ -2618,7 +2618,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-agent"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"agent-runtime",
|
||||
@@ -2651,7 +2651,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-browser-runtime"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"futures",
|
||||
@@ -2668,7 +2668,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-cli"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"lime-core",
|
||||
@@ -2680,7 +2680,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-config"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"lime-core",
|
||||
@@ -2696,7 +2696,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-core"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"async-trait",
|
||||
@@ -2752,7 +2752,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-gateway"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"async-trait",
|
||||
@@ -2780,7 +2780,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-infra"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"dashmap",
|
||||
@@ -2802,7 +2802,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-knowledge"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"hex",
|
||||
@@ -2815,7 +2815,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-mcp"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum",
|
||||
@@ -2839,7 +2839,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-media-runtime"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
@@ -2858,7 +2858,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-processor"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"lime-core",
|
||||
@@ -2877,7 +2877,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-providers"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@@ -2932,7 +2932,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-server"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"async-stream",
|
||||
@@ -2975,7 +2975,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-server-utils"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"futures",
|
||||
@@ -2990,7 +2990,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-services"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@@ -3034,7 +3034,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-skills"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"dirs 5.0.1",
|
||||
@@ -3054,7 +3054,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lime-websocket"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"chrono",
|
||||
@@ -3263,7 +3263,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "model-provider"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"anyhow",
|
||||
@@ -3940,7 +3940,7 @@ checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec"
|
||||
|
||||
[[package]]
|
||||
name = "patch-apply"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"tempfile",
|
||||
"thiserror 1.0.69",
|
||||
@@ -4694,7 +4694,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "runtime-core"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"app-server-protocol",
|
||||
"serde",
|
||||
@@ -5441,7 +5441,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "thread-store"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"chrono",
|
||||
@@ -5719,7 +5719,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tool-runtime"
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
dependencies = [
|
||||
"agent-protocol",
|
||||
"app-server-protocol",
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ exclude = [
|
||||
resolver = "2"
|
||||
|
||||
[workspace.package]
|
||||
version = "1.102.0"
|
||||
version = "1.103.0"
|
||||
edition = "2021"
|
||||
authors = ["coso"]
|
||||
repository = "https://github.com/aiclientproxy/lime"
|
||||
|
||||
@@ -260,9 +260,10 @@ pub struct RuntimeSnapshot {
|
||||
}
|
||||
|
||||
pub use thread::{
|
||||
ApprovalAction, ApprovalDecision, ApprovalScope, CollabAgentOperation, FileChangeStatus,
|
||||
ItemKind, ItemStatus, PageCursor, SortDirection, SubAgentActivityKind, Thread,
|
||||
ThreadActiveFlag, ThreadHistoryChange, ThreadHistoryChangeSet, ThreadItem, ThreadItemPayload,
|
||||
ApprovalAction, ApprovalDecision, ApprovalScope, CollabAgentOperation, CollabAgentState,
|
||||
CollabAgentStatus, FileChangeStatus, ItemKind, ItemStatus, PageCursor, PlanStep,
|
||||
PlanStepStatus, SortDirection, SubAgentActivityKind, Thread, ThreadActiveFlag,
|
||||
ThreadHistoryChange, ThreadHistoryChangeSet, ThreadItem, ThreadItemPayload,
|
||||
ThreadItemsListParams, ThreadItemsListResponse, ThreadListParams, ThreadListResponse,
|
||||
ThreadStatus, ThreadTurnsListParams, ThreadTurnsListResponse, ThreadTurnsView, ToolArgument,
|
||||
ToolOutput, Turn, TurnAdmissionState, TurnApprovalState, TurnError, TurnItemsView,
|
||||
|
||||
@@ -124,6 +124,7 @@ impl ItemStatus {
|
||||
pub enum ItemKind {
|
||||
UserMessage,
|
||||
AgentMessage,
|
||||
Plan,
|
||||
Reasoning,
|
||||
Tool,
|
||||
McpToolCall,
|
||||
@@ -182,6 +183,30 @@ pub enum CollabAgentOperation {
|
||||
Close,
|
||||
}
|
||||
|
||||
/// Last known runtime status for an AgentControl child.
|
||||
///
|
||||
/// This mirrors Codex app-server's `CollabAgentStatus`; the optional message is
|
||||
/// carried separately so the wire shape stays stable across terminal states.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum CollabAgentStatus {
|
||||
PendingInit,
|
||||
Running,
|
||||
Interrupted,
|
||||
Completed,
|
||||
Errored,
|
||||
Shutdown,
|
||||
NotFound,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CollabAgentState {
|
||||
pub status: CollabAgentStatus,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub message: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ApprovalAction {
|
||||
@@ -214,13 +239,20 @@ pub enum SubAgentActivityKind {
|
||||
Started,
|
||||
Interacted,
|
||||
Interrupted,
|
||||
Spawned,
|
||||
MessageSent,
|
||||
Waiting,
|
||||
Resumed,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum PlanStepStatus {
|
||||
Pending,
|
||||
InProgress,
|
||||
Completed,
|
||||
Failed,
|
||||
Closed,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
|
||||
pub struct PlanStep {
|
||||
pub step: String,
|
||||
pub status: PlanStepStatus,
|
||||
}
|
||||
|
||||
/// Typed Item payload union. JSON `Value` is intentionally confined to the
|
||||
@@ -238,6 +270,22 @@ pub enum ThreadItemPayload {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
phase: Option<String>,
|
||||
},
|
||||
/// Proposed plan content. The completed snapshot is authoritative and may
|
||||
/// not equal the concatenation of preceding plan deltas.
|
||||
Plan {
|
||||
text: String,
|
||||
revision_id: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
source: Option<String>,
|
||||
#[serde(default)]
|
||||
plan: Vec<PlanStep>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
explanation: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
tool_call_id: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
source_item_id: Option<String>,
|
||||
},
|
||||
Reasoning {
|
||||
#[serde(default)]
|
||||
summary: Vec<String>,
|
||||
@@ -333,6 +381,7 @@ impl ThreadItemPayload {
|
||||
match self {
|
||||
Self::UserMessage { .. } => ItemKind::UserMessage,
|
||||
Self::AgentMessage { .. } => ItemKind::AgentMessage,
|
||||
Self::Plan { .. } => ItemKind::Plan,
|
||||
Self::Reasoning { .. } => ItemKind::Reasoning,
|
||||
Self::Tool { .. } => ItemKind::Tool,
|
||||
Self::McpToolCall { .. } => ItemKind::McpToolCall,
|
||||
@@ -362,6 +411,16 @@ pub struct Thread {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub parent_thread_id: Option<ThreadId>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub agent_path: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub agent_nickname: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub agent_role: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub last_task_message: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub agent_state: Option<CollabAgentState>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub forked_from_id: Option<ThreadId>,
|
||||
#[serde(default)]
|
||||
pub preview: String,
|
||||
@@ -710,18 +769,66 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn subagent_activity_keeps_current_and_historical_wire_values() {
|
||||
fn plan_payload_keeps_revisioned_completed_snapshot_fields() {
|
||||
let payload = ThreadItemPayload::Plan {
|
||||
text: "- [x] inspect".to_string(),
|
||||
revision_id: "proposed_plan:1".to_string(),
|
||||
source: Some("proposed_plan".to_string()),
|
||||
plan: vec![PlanStep {
|
||||
step: "inspect".to_string(),
|
||||
status: PlanStepStatus::Completed,
|
||||
}],
|
||||
explanation: None,
|
||||
tool_call_id: None,
|
||||
source_item_id: None,
|
||||
};
|
||||
|
||||
assert_eq!(payload.kind(), ItemKind::Plan);
|
||||
assert_eq!(
|
||||
serde_json::to_value(payload).expect("serialize plan payload"),
|
||||
json!({
|
||||
"type": "plan",
|
||||
"text": "- [x] inspect",
|
||||
"revision_id": "proposed_plan:1",
|
||||
"source": "proposed_plan",
|
||||
"plan": [{"step": "inspect", "status": "completed"}]
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn collab_agent_state_matches_codex_app_server_wire() {
|
||||
let statuses = [
|
||||
(CollabAgentStatus::PendingInit, "pendingInit"),
|
||||
(CollabAgentStatus::Running, "running"),
|
||||
(CollabAgentStatus::Interrupted, "interrupted"),
|
||||
(CollabAgentStatus::Completed, "completed"),
|
||||
(CollabAgentStatus::Errored, "errored"),
|
||||
(CollabAgentStatus::Shutdown, "shutdown"),
|
||||
(CollabAgentStatus::NotFound, "notFound"),
|
||||
];
|
||||
for (status, wire) in statuses {
|
||||
let state = CollabAgentState {
|
||||
status,
|
||||
message: (status == CollabAgentStatus::Errored)
|
||||
.then(|| "provider failed".to_string()),
|
||||
};
|
||||
let encoded = serde_json::to_value(&state).expect("serialize agent state");
|
||||
assert_eq!(encoded["status"], wire);
|
||||
assert_eq!(
|
||||
serde_json::from_value::<CollabAgentState>(encoded)
|
||||
.expect("deserialize agent state"),
|
||||
state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn subagent_activity_accepts_only_codex_current_wire_values() {
|
||||
let values = [
|
||||
(SubAgentActivityKind::Started, "started"),
|
||||
(SubAgentActivityKind::Interacted, "interacted"),
|
||||
(SubAgentActivityKind::Interrupted, "interrupted"),
|
||||
(SubAgentActivityKind::Spawned, "spawned"),
|
||||
(SubAgentActivityKind::MessageSent, "messageSent"),
|
||||
(SubAgentActivityKind::Waiting, "waiting"),
|
||||
(SubAgentActivityKind::Resumed, "resumed"),
|
||||
(SubAgentActivityKind::Completed, "completed"),
|
||||
(SubAgentActivityKind::Failed, "failed"),
|
||||
(SubAgentActivityKind::Closed, "closed"),
|
||||
];
|
||||
|
||||
for (activity, wire) in values {
|
||||
@@ -733,6 +840,21 @@ mod tests {
|
||||
activity
|
||||
);
|
||||
}
|
||||
|
||||
for retired in [
|
||||
"spawned",
|
||||
"messageSent",
|
||||
"waiting",
|
||||
"resumed",
|
||||
"completed",
|
||||
"failed",
|
||||
"closed",
|
||||
] {
|
||||
assert!(
|
||||
serde_json::from_value::<SubAgentActivityKind>(json!(retired)).is_err(),
|
||||
"retired SubAgent activity wire must fail closed: {retired}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -539,6 +539,36 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CollabAgentState": {
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/CollabAgentStatus"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"CollabAgentStatus": {
|
||||
"description": "Last known runtime status for an AgentControl child.\n\nThis mirrors Codex app-server's `CollabAgentStatus`; the optional message is\ncarried separately so the wire shape stays stable across terminal states.",
|
||||
"enum": [
|
||||
"completed",
|
||||
"errored",
|
||||
"interrupted",
|
||||
"notFound",
|
||||
"pendingInit",
|
||||
"running",
|
||||
"shutdown"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"FileChangeStatus": {
|
||||
"enum": [
|
||||
"applied",
|
||||
@@ -564,6 +594,7 @@
|
||||
"file",
|
||||
"mcpToolCall",
|
||||
"media",
|
||||
"plan",
|
||||
"reasoning",
|
||||
"subAgent",
|
||||
"tool",
|
||||
@@ -582,23 +613,67 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"PlanStep": {
|
||||
"properties": {
|
||||
"status": {
|
||||
"$ref": "#/$defs/PlanStepStatus"
|
||||
},
|
||||
"step": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status",
|
||||
"step"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"PlanStepStatus": {
|
||||
"enum": [
|
||||
"completed",
|
||||
"in_progress",
|
||||
"pending"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"SubAgentActivityKind": {
|
||||
"enum": [
|
||||
"closed",
|
||||
"completed",
|
||||
"failed",
|
||||
"interacted",
|
||||
"interrupted",
|
||||
"messageSent",
|
||||
"resumed",
|
||||
"spawned",
|
||||
"started",
|
||||
"waiting"
|
||||
"started"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"Thread": {
|
||||
"properties": {
|
||||
"agentNickname": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentPath": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentRole": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentState": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/CollabAgentState"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"archived": {
|
||||
"type": "boolean"
|
||||
},
|
||||
@@ -612,6 +687,12 @@
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"lastTaskMessage": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"metadata": {
|
||||
"default": null
|
||||
},
|
||||
@@ -804,6 +885,58 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Proposed plan content. The completed snapshot is authoritative and may\nnot equal the concatenation of preceding plan deltas.",
|
||||
"properties": {
|
||||
"explanation": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"plan": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/PlanStep"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"revision_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"source": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"source_item_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"tool_call_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"const": "plan",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"revision_id",
|
||||
"text",
|
||||
"type"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
|
||||
+141
-8
@@ -45,6 +45,36 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CollabAgentState": {
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/CollabAgentStatus"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"CollabAgentStatus": {
|
||||
"description": "Last known runtime status for an AgentControl child.\n\nThis mirrors Codex app-server's `CollabAgentStatus`; the optional message is\ncarried separately so the wire shape stays stable across terminal states.",
|
||||
"enum": [
|
||||
"completed",
|
||||
"errored",
|
||||
"interrupted",
|
||||
"notFound",
|
||||
"pendingInit",
|
||||
"running",
|
||||
"shutdown"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"FileChangeStatus": {
|
||||
"enum": [
|
||||
"applied",
|
||||
@@ -70,6 +100,7 @@
|
||||
"file",
|
||||
"mcpToolCall",
|
||||
"media",
|
||||
"plan",
|
||||
"reasoning",
|
||||
"subAgent",
|
||||
"tool",
|
||||
@@ -88,23 +119,67 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"PlanStep": {
|
||||
"properties": {
|
||||
"status": {
|
||||
"$ref": "#/$defs/PlanStepStatus"
|
||||
},
|
||||
"step": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status",
|
||||
"step"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"PlanStepStatus": {
|
||||
"enum": [
|
||||
"completed",
|
||||
"in_progress",
|
||||
"pending"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"SubAgentActivityKind": {
|
||||
"enum": [
|
||||
"closed",
|
||||
"completed",
|
||||
"failed",
|
||||
"interacted",
|
||||
"interrupted",
|
||||
"messageSent",
|
||||
"resumed",
|
||||
"spawned",
|
||||
"started",
|
||||
"waiting"
|
||||
"started"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"Thread": {
|
||||
"properties": {
|
||||
"agentNickname": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentPath": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentRole": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentState": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/CollabAgentState"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"archived": {
|
||||
"type": "boolean"
|
||||
},
|
||||
@@ -118,6 +193,12 @@
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"lastTaskMessage": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"metadata": {
|
||||
"default": null
|
||||
},
|
||||
@@ -310,6 +391,58 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Proposed plan content. The completed snapshot is authoritative and may\nnot equal the concatenation of preceding plan deltas.",
|
||||
"properties": {
|
||||
"explanation": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"plan": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/PlanStep"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"revision_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"source": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"source_item_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"tool_call_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"const": "plan",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"revision_id",
|
||||
"text",
|
||||
"type"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
|
||||
@@ -570,6 +570,36 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"CollabAgentState": {
|
||||
"properties": {
|
||||
"message": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/CollabAgentStatus"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"CollabAgentStatus": {
|
||||
"description": "Last known runtime status for an AgentControl child.\n\nThis mirrors Codex app-server's `CollabAgentStatus`; the optional message is\ncarried separately so the wire shape stays stable across terminal states.",
|
||||
"enum": [
|
||||
"completed",
|
||||
"errored",
|
||||
"interrupted",
|
||||
"notFound",
|
||||
"pendingInit",
|
||||
"running",
|
||||
"shutdown"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"ConfigWarningNotification": {
|
||||
"properties": {
|
||||
"details": {
|
||||
@@ -628,6 +658,7 @@
|
||||
"file",
|
||||
"mcpToolCall",
|
||||
"media",
|
||||
"plan",
|
||||
"reasoning",
|
||||
"subAgent",
|
||||
"tool",
|
||||
@@ -646,6 +677,29 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"PlanStep": {
|
||||
"properties": {
|
||||
"status": {
|
||||
"$ref": "#/$defs/PlanStepStatus"
|
||||
},
|
||||
"step": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"status",
|
||||
"step"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"PlanStepStatus": {
|
||||
"enum": [
|
||||
"completed",
|
||||
"in_progress",
|
||||
"pending"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"RequestId": {
|
||||
"anyOf": [
|
||||
{
|
||||
@@ -670,16 +724,9 @@
|
||||
},
|
||||
"SubAgentActivityKind": {
|
||||
"enum": [
|
||||
"closed",
|
||||
"completed",
|
||||
"failed",
|
||||
"interacted",
|
||||
"interrupted",
|
||||
"messageSent",
|
||||
"resumed",
|
||||
"spawned",
|
||||
"started",
|
||||
"waiting"
|
||||
"started"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
@@ -719,6 +766,34 @@
|
||||
},
|
||||
"Thread": {
|
||||
"properties": {
|
||||
"agentNickname": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentPath": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentRole": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"agentState": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/CollabAgentState"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"archived": {
|
||||
"type": "boolean"
|
||||
},
|
||||
@@ -732,6 +807,12 @@
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"lastTaskMessage": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"metadata": {
|
||||
"default": null
|
||||
},
|
||||
@@ -924,6 +1005,58 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Proposed plan content. The completed snapshot is authoritative and may\nnot equal the concatenation of preceding plan deltas.",
|
||||
"properties": {
|
||||
"explanation": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"plan": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/PlanStep"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"revision_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"source": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"source_item_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"tool_call_id": {
|
||||
"type": [
|
||||
"null",
|
||||
"string"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"const": "plan",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"revision_id",
|
||||
"text",
|
||||
"type"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user