mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-08-01 16:43:37 +08:00
HIGH fixes: - SSRF protection: block private/link-local IPs and file:// URLs in edit_image image_url parameter - Mask sensitive values in GET /api/plugins/options response MEDIUM fixes: - Clamp n parameter to 1-10 to prevent API bill exhaustion - Validate prompt is non-empty string before API call - Return empty array when no providers configured (clear error) - Add 1MB buffer limit for JSON-RPC line accumulation - Fix PluginConfigModal useEffect re-fetch loop on parent re-render LOW fixes: - Remove unused requestId variable Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.1 KiB
6.1 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 的全部产品工作。
同时补齐了 0.5.12 发布前发现的桌面体验问题:Solo runtime mode 同步、关于页产品名、Windows 自定义标题栏关闭按钮可见性。
新功能
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 表,无泄漏。
- 工具
改进
- Solo runtime mode 在发送前重新同步。用户切换 Solo 后,下一次 user turn 会先按当前 UI 状态恢复 runtime mode,避免 Solo 开关状态与实际 agent 运行模式短暂错位。
- 关于页品牌名统一为 Code Council。Settings > About 的图标 alt 与标题不再显示旧的
Claude Code Haha。
修复
- Windows 自定义标题栏关闭按钮不再被 tab strip 挤出窗口。tab 滚动区域现在允许在 flex 布局中正确收缩,右侧 toolbar、滚动箭头和最小化/最大化/关闭按钮会保留可见空间。
范围
- 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)。 - Solo runtime mode 同步:
desktop/src/stores/chatStore.ts、desktop/src/stores/chatStore.test.ts。 - 桌面 About 品牌名:
desktop/src/pages/Settings.tsx、desktop/src/__tests__/generalSettings.test.tsx。 - Windows tab bar 布局:
desktop/src/components/layout/TabBar.tsx、desktop/src/components/layout/TabBar.test.tsx。
验证
- 桌面
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 test -- src/__tests__/generalSettings.test.tsx --run:54 / 54✅ - 桌面
bun run test -- src/components/layout/TabBar.test.tsx --run:27 / 27✅ - 桌面
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,永远不会丢数据)。
- Windows 标题栏修复只影响自绘窗口控件布局。不会改变 tab 数据、会话状态或窗口 API 行为。
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。