mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-31 16:33:34 +08:00
editor-lsp-foundation 47-task spec 收尾: - v0.5.11 已发,含 Phase 1 / 2 / 3 / 5(PR #23 / #24 / #26 / #27)。 - v0.5.12 是 Phase 4 (#29) 单 main feature 的 release notes 草稿, 也作为整个 47-task spec 的关闭 documentation:文末 "全景" section 列出所有 5 phase 的 PR + release 版本映射。 不发版;本 PR 仅放置 v0.5.12.md 占位,等下一次发版触发时由发版 流程消费。 _Tasks: 46, 47 (Phase 6 wrap-up)_ Co-authored-by: 你的姓名 <you@example.com>
4.8 KiB
4.8 KiB
v0.5.12
本版本一条主线:editor-lsp-foundation 的 Phase 4 收尾——把 CLI agent 的文件编辑(Edit / Write / NotebookEdit / MultiEdit 工具)实时桥接到桌面工作区面板。AI 改文件的瞬间,工作区文件树 / 诊断刷新,正在编辑的同名 buffer 自动浮出 agent-source 冲突 banner。完成后 v0.5.12 闭合 47-task editor-lsp-foundation spec 的全部产品工作。
新功能
Agent 文件编辑桥(Phase 4)
- agent 编辑实时反映到桌面工作区(#29)。当 CLI agent 的 Edit / Write / NotebookEdit / MultiEdit 工具成功完成时,桌面 chatStore 立即触发
workspacePanelStore.notifyAgentFileEdit(sessionId, absolutePath):- 工作区面板若打开则刷新
loadStatus,文件树 / changed 列表 / LSP 错误数都拉到最新; - 任何已打开 buffer 若路径匹配(按段边界后缀匹配,Windows
\与 POSIX/都正常归一),就被标上source: 'agent'冲突 banner,沿用 Phase 2 已有的 Reload / Keep mine / Open conflict view 三按钮路径——AI 永远不会静默覆盖用户未保存的改动。
- 工作区面板若打开则刷新
- 不动 vendored upstream 文件编辑工具。CLI 侧的 FileEditTool / FileWriteTool 是从 upstream Anthropic CLI vendored 来的,
ToolUseContext没有sessionId,从 CLI 进程 import server WS 模块也会引入跨进程依赖。本 PR 不碰它们一行——agent 的工具流(tool_use_complete+tool_result)已经把sessionId/toolName/input/isError都送到桌面,桌面 chatStore 自己识别这是文件编辑工具并消费。同 store 里TodoWrite -> useCLITaskStore、TASK_TOOL_NAMES -> refreshTasks用的是同一种 bridge pattern。 - 健壮的边界:
- 工具
tool_result.isError === true时不触发——失败的编辑不影响磁盘内容; - 同 toolUseId 收到重复
tool_result只 fire 一次(pending 表 consume 即删); - 已有冲突 banner 的 buffer 不被新 agent 事件覆盖(保留用户已经看到的 banner);
- path 匹配走
endsWith('/' + bufferPath)边界,避免foobar.ts误匹配bar.ts; disconnect/clearMessages/ new-session 三处都清掉 pending 表,无泄漏。
- 工具
改进
- 无(本版本是 Phase 4 单一 PR)。
修复
- 无。
范围
- chatStore 桥接:
desktop/src/stores/chatStore.ts(+FILE_EDIT_TOOL_NAMES/extractEditedFilePath/rememberPendingFileEdit/consumePendingFileEdit/clearPendingFileEdits、wire 到tool_use_complete/tool_result与 3 处 cleanup)、desktop/src/stores/chatStore.test.ts(+6)。 - workspacePanelStore agent 来源:
desktop/src/stores/workspacePanelStore.ts(+notifyAgentFileEdit/AGENT_EDIT_SENTINEL_HASH/normalizeAgentEditPath/agentEditMatchesBufferPath)、desktop/src/stores/workspacePanelStore.test.ts(+6)。
验证
- 桌面
bun run lint(tsc --noEmit)✅ - 桌面
bun run test src/stores/workspacePanelStore.test.ts:30 / 30(24 → 30,+6 agent edit 用例)✅ - 桌面
bun run test src/stores/chatStore.test.ts:112 / 112(106 → 112,+6 bridge 用例)✅ - 桌面
bun run build:✅ - 桌面
bun run check:bundle-budget:+2.41 KB gz vs 基线 3299.76 KB(97.59 KB headroom 剩余)✅ - 独立 verification subagent 跑了 build / lint / 两套 test / bundle 预算 / 9 个 ad-hoc helper edge case(Unicode 路径、trailing slash、identical absolute、deeper suffix mismatch):全 PASS。
升级注意
- 零破坏。Phase 4 只新增桌面 store 行为,不改 CLI 工具、不改 server,不改任何 vendored upstream 代码。已有 user-source 冲突 banner 与原子保存路径行为完全保留。
- agent 编辑反馈仅在工作区面板打开时刷新文件树——关闭面板时不发后台请求;下次打开会拉一次最新状态。
- 路径匹配是 path suffix 而非 inode。极少数情况下,monorepo 内多个 workspace 同名文件可能误触发——按 spec 设计这是可接受的(误报最多就是多刷一次 banner,永远不会丢数据)。
editor-lsp-foundation 全景
v0.5.11 + v0.5.12 联合闭合 .kiro/specs/editor-lsp-foundation/ 的 47 task:
| Phase | 内容 | PR | Release |
|---|---|---|---|
| Phase 1 | 默认 'all' 视图 | #23 | v0.5.11 |
| Phase 2 | CodeMirror 编辑器 + 原子保存 + 冲突 banner | #24 | v0.5.11 |
| Phase 3 | LspManager + LspStatusIndicator | #26 | v0.5.11 |
| Phase 4 | agent 编辑桥 | #29 | v0.5.12 |
| Phase 5 | Solo lspErrorCount 信号 | #27 | v0.5.11 |
| 收尾 | release notes + spec 关闭 | (本 PR) | v0.5.12 |
剩余的"WorkspaceEditor 接入 WorkspacePanel header"与"production LspClientFactory 包 typescript-language-server"是 spec 范围外的下一阶段工作——前 5 phase 把所有底座组件铺好,集成到 panel 是单独的小 PR。