cc-haha/release-notes/v0.5.12.md
你的姓名 4c128e0764 fix(plugins): address code review findings for image-gen plugin
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>
2026-06-14 13:00:44 +08:00

6.1 KiB
Raw Blame History

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 -> useCLITaskStoreTASK_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.tsdesktop/src/stores/chatStore.test.ts
  • 桌面 About 品牌名:desktop/src/pages/Settings.tsxdesktop/src/__tests__/generalSettings.test.tsx
  • Windows tab bar 布局:desktop/src/components/layout/TabBar.tsxdesktop/src/components/layout/TabBar.test.tsx

验证

  • 桌面 bun run lint(tsc --noEmit)
  • 桌面 bun run test src/stores/workspacePanelStore.test.ts:30 / 3024 → 30+6 agent edit 用例)
  • 桌面 bun run test src/stores/chatStore.test.ts:112 / 112106 → 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 KB97.59 KB headroom 剩余)
  • 独立 verification subagent 跑了 build / lint / 两套 test / bundle 预算 / 9 个 ad-hoc helper edge caseUnicode 路径、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。