diff --git a/release-notes/v0.5.12.md b/release-notes/v0.5.12.md index 4e57caef..1efb1d6f 100644 --- a/release-notes/v0.5.12.md +++ b/release-notes/v0.5.12.md @@ -1,73 +1,71 @@ # v0.5.12 -> 本版本聚焦 Workspace LSP 的产品链路收尾:桌面工作区编辑器会把打开、修改、保存事件同步给 Workspace LSP 服务,并通过标准 `textDocument/publishDiagnostics` 接收语言服务器诊断。自定义 LSP 服务器配置现在可以从桌面设置持久化进入工作区 LSP 流程,并且在扩展名重叠时优先于内置预设。 -> -> 同时新增 image-gen MCP 插件,支持多 provider 图像生成 + 自动 fallback;桌面端新增插件可视化配置和聊天内图片渲染。 +> 这一版三条主线收尾:**Solo 模式演进成 Solo Council**(A/B/C 三方案门控 + plan-critic 专家 + 评审面板 + 实施前审批)、**Workspace LSP 链路全闭合**(agent 文件编辑桥 + 自动诊断同步 + 状态指示器接入工作区面板)、**插件生态成形**(image-gen MCP 多 provider 图像生成 + 桌面插件可视化配置 + 内置 marketplace 随包发布 + 逆向工程 3 个验证过的 MCP server)。同时品牌改名 **Code Council**,桌面端补了一批 UX/Polish/可靠性改动。 ## 新功能 -### Workspace LSP 自动诊断链 +### Solo Council:Plan A/B/C + 评审面板 + 审批门控 -- 工作区编辑器在文件 `open` / `change` / `save` 时调用 session LSP sync API,服务端启动匹配的语言服务器并发送 LSP 文档同步通知。 -- 诊断只来自语言服务器的 `textDocument/publishDiagnostics` 通知,桌面按文件 URI 缓存并展示错误、警告、信息和提示级别诊断。 -- LSP 状态接口返回当前文件匹配到的 server name、command、ready / starting / unavailable 状态和启动错误,保留工作区路径校验,拒绝越界路径。 +- **A/B/C plan gate + plan-critic 专家**(#34)。Solo 模式不再是单线流水线 — 进入 planner 阶段会 fan-out 三个候选方案 A / B / C,由独立的 `plan-critic` 专家投票评分,把最优方案推回主线。 +- **Council 评审面板**。Solo Council 视图新增专属 panel,展示各方案的合成与冲突 / blockers,UI 视觉细节同步抛光。 +- **实施前必须审批**。完成评审后会强制要求用户确认才能进入 builder 阶段,不会闷头开干。 +- **Ctrl+B 侧栏 toggle + thinking block 默认折叠**。多 panel 拥挤时一键收起侧栏;推理块默认折叠避免视觉噪音。 +- **i18n 重命名**。"Solo Pipeline" → "Solo"(5 个 locale 同步),composer toggle / chat header chip / 设置文案统一。 -### 自定义 LSP 支持 +### Workspace LSP 链路全闭合 -- 支持用户提供自定义 LSP `path` 或裸 `command`,并使用独立 `args: string[]` 传参;不接受 shell 字符串拼接,Windows 含空格的绝对路径可作为 `path` 使用。 -- 自定义 `extensionToLanguage` 映射会覆盖重叠扩展名的内置预设。例如用户为 `.ts` 配置自定义 server 时,`.ts` 会路由到自定义 server,而 `.tsx` / `.js` / `.jsx` 仍可继续使用 TypeScript 预设。 -- 桌面设置 store 新增 `workspaceLsp` 持久化字段,Workspace Panel 的 LSP state / diagnostics / sync 请求会自动带上该配置并触发必要的重启。 +- **Agent 文件编辑桥(Phase 4)**(#29)。FileEditTool / FileWriteTool 写盘前后调 `diagnosticTracker.beforeFileEdited` 抓 baseline,写完通知 LSP `didChange` + `didSave`,下一轮 user message 自动注入 `` attachment 让 agent 看到错误。Bash-tool 缺失时跳过注入(子 agent 修不了的不发)。 +- **自动诊断同步**(commit `d13f29e0`)。Workspace 编辑器在文件 open / change / save 时调 session LSP sync API,服务端启动匹配的语言服务器并接收 `textDocument/publishDiagnostics`,按文件 URI 缓存 + 跨轮去重 + 严重度限流。 +- **LspStatusIndicator 接入工作区面板**(#51)。原本只有简陋的 `LSP idle · N diagnostics` 文本条,换成完整 indicator:spinner / 绿勾 / 红色错误计数 chip / Retry 按钮,点击展开诊断下拉,Enter 跳转文件。Retry 按钮直连 `POST /api/sessions/:id/lsp/restart`,自带形状适配 `lspStateMap.ts`(pure adapter + 8 单测)。 +- **可编辑文件预览**。工作区面板的文件预览不再只读,CodeMirror 6 ≈ 80 KB gz 接入语法高亮、行号、搜索、缩进引导,原子保存 + 冲突 banner。 +- **从历史恢复后台任务**。会话重连后正在跑的 task 会被恢复,不会幽灵悬挂。 -### image-gen MCP 插件 +### 插件生态:image-gen + 桌面配置 + Marketplace 随包 -- 新增多 provider 图像生成 MCP 插件,支持 Agnes、GPT-image-2、DALL-E、Gemini image、Flux、Stable Diffusion 等 OpenAI 兼容 API。 -- 3 个可配置 provider 槽位,按优先级顺序调用,失败自动 fallback。 -- 每个 provider 内部支持完整参数 → 精简参数兼容重试(借鉴 spriteflow)。 -- 内置模型能力数据库,agent 可查询每个模型支持的尺寸、编辑、透明背景等能力。 -- SSRF 防护:阻止内网地址、file://、ftp:// 等危险 URL。 +- **image-gen MCP 插件**(#49)。多 provider 图像生成 MCP,支持 Agnes / GPT-image-2 / DALL-E / Gemini image / Flux / Stable Diffusion 等 OpenAI 兼容 API。3 个可配置 provider 槽位按优先级 fallback;每个 provider 内部支持完整参数 → 精简参数兼容重试;内置模型能力数据库供 agent 查询;SSRF 防护(包括 IPv6 `[::1]` vs `::1` 旁路)。 +- **桌面端插件可视化配置**。新增 `PluginConfigModal` 组件,支持配置插件 userConfig 选项;PluginDetail 详情页新增 Configure 按钮(仅当插件有 userConfig 时显示);新增 `GET/POST /api/plugins/options` API,敏感值返回 `********`。 +- **聊天内图片渲染**。Tool result 中的 MCP image content block(`{ type: 'image', data, mimeType }`)现在在聊天 UI 中渲染为内联图片,同时支持 OpenAI-style `image_url` block。 +- **Marketplace 随 Electron 包发布**(#50)。新增 `desktop/scripts/build-plugin-seed.ts`,把 `plugins/` 复制到 `desktop/plugin-seed/marketplaces/cc-haha-builtin/` 并打进 asar,sidecar 通过 `CLAUDE_CODE_PLUGIN_SEED_DIR` env 在启动时 `registerSeedMarketplaces` 注入,CLI 端早就支持但桌面端从没接通 — 现在装完就能在设置-插件里直接看到 image-gen / reverse-engineering 等内置插件。 +- **一键 Language Server / MCP 安装**。Settings → Plugins 新增"Install all"面板,单个 manager 失败时按平台 fallthrough(winget → scoop → choco / brew → port / apt → dnf → pacman),不会一个 dependency 卡住后续全部。MCP marketplace 现在尊重 installed state 与 required env。 +- **Reverse-engineering 插件 v0.4.6**(#32 / #33)。 + - 从 7 → 3 个 live-smoked MCP server(apktool / lldb / radare2 / jadx 上游不可用,frida 换成 PyPI 的 `frida-mcp`)。新增 `scripts/smoke-reverse-engineering-mcps.ts` 走 NDJSON 框架做端到端验证。 + - 新增 `apk-hardening` skill(~430 行):APKiD 识别 + 8 个加固家族路由(360 / Tencent Legu / Bangcle / Naga / Ijiami / 阿里聚安全 / Baidu / Flutter / Unity IL2CPP / RN)+ 每工具 playbook(FRIDA-DEXDump / FART / Unidbg / Blutter)。 + - triage / apk-analysis / frida-dynamic / lldb-debug 改用 Bash 直接驱动 CLI,不再假设 MCP 存在。 -### 桌面端插件配置 +### 品牌:Code Council -- 新增 PluginConfigModal 组件,支持可视化配置插件 userConfig 选项。 -- PluginDetail 详情页新增 Configure 按钮(当插件有 userConfig 时显示)。 -- 新增 `GET/POST /api/plugins/options` API 端点,敏感值返回 `********`。 +- 桌面应用可见品牌从 "Claude Code Haha" 更新为 **Code Council**。About 页 / 窗口标题 / 安装包 productName 全部一致。 -### 聊天内图片渲染 +## 改进 -- Tool result 中的 MCP image content block(`{ type: 'image', data, mimeType }`)现在在聊天 UI 中渲染为内联图片。 -- 支持 MCP image block 和 OpenAI-style image_url block 两种格式。 +- **Phase 1 UX quick wins + Sidebar refactor**。聊天 UI 视觉抛光,侧栏结构重写降耦合。 +- **TabBar 不再挤压窗口控件**。修复 macOS / Windows 上 tab 多时 close/min/max 按钮被推出可视区。 +- **本地图片附件预览**。聊天输入区附加图片时立即显示缩略图,不必等上传。 +- **品牌重命名后的 CI 修复**。symlink test + brand-aware fixtures 同步更新。 ## 修复 -- 修复自定义 LSP server 被内置 preset 抢占同扩展名的问题。 -- 修复桌面设置中的自定义 LSP 配置未进入 Workspace LSP 产品链路的问题。 -- 修复 image-gen 插件 IPv6 SSRF 防护绕过(`[::1]` vs `::1`)。 - -## 范围说明 - -- 本版本没有实现语言服务器安装器,也不打包 `typescript-language-server` / `pyright` / `rust-analyzer`。 -- 本版本没有手写 rust-analyzer 或 TypeScript 诊断;诊断来源仍是语言服务器发布的 `publishDiagnostics`。 -- Settings UI 的完整表单仍可后续补齐;当前交付的是可持久化的设置/API/store hook 与 Workspace LSP 流程接线。 -- image-gen 插件为独立 MCP server,不影响现有 CLI 或桌面功能。 +- **修 Windows 上"用 VS Code 打开"启动后无窗口**(#52)。`defaultLaunch` 之前对 IDE 也设了 `windowsHide: true`,Windows 把 `STARTUPINFO.wShowWindow=SW_HIDE` 当成传给 `ShowWindow()` 的初始 nCmdShow — 进程在任务管理器跑但主窗口被立刻隐藏。删掉这个 flag,cmd flash 极短可接受。回归测试 `getDefaultLaunchSpawnOptions` 锁定 spawn 选项形状。 +- **Compact 从 prompt-too-long 错误恢复**。当 API 因上下文超长拒绝时,compact 流程自动触发并重试,不再卡死。 +- **Text-only assistant 消息也发进度**。修复某些 provider 只回文本不调工具时进度条停在最早状态。 +- **聊天用户回合前重新同步 runtime mode**。修复模式切换后第一条消息有时仍带旧 mode flag。 +- **About 页产品名修复**。 +- **TabBar 不再吃掉 macOS 红绿灯按钮的 hit area**。 +- **修复 image-gen IPv6 SSRF bypass**(`[::1]` vs `::1` 区分)。 +- **修复自定义 LSP server 被内置 preset 抢占同扩展名**。 +- **修复桌面设置中的自定义 LSP 配置未进入 Workspace LSP 产品链路**。 ## 验证 -- 服务端 Workspace LSP 单元测试覆盖:路径越界保护、自定义绝对路径与 args 数组、自定义 `.ts` 覆盖 TypeScript 预设、`publishDiagnostics` 缓存映射、open/change/save 同步。 -- 桌面 store 单元测试覆盖:自定义 LSP 设置持久化与规范化、Workspace Panel 向 LSP state / diagnostics / sync 请求注入持久化配置、空配置不注入。 -- image-gen MCP server 验证:初始化、tools/list、list_providers 能力信息、prompt 空校验、n 参数 clamp、edit 能力检查、SSRF 防护(IPv4 私有地址 + IPv6)。 -- 桌面 TypeScript 编译通过。 +- 服务端:open-target 测试 32/32(含 4 条 spawn 选项回归)、conversations/Solo 3/3、soloPipelinePrompt 11/11、soloSuggestions.i18n 2/2、provider fetchUpstreamModels 5/5、seed-marketplaces-startup 4/4。 +- 桌面:`bun run lint`(tsc --noEmit)clean、stores(chatStore / sessionRuntimeStore / workspacePanelStore / openTargetStore)全套通过、components(WorkspaceEditor / LspStatusIndicator / WorkspacePanel)全套通过、`src/lib/lspStateMap.test.ts` 8/8。 +- AgentTool / coordinator:taskSpecQuality 18/18、lazyDelegationCheck 全套、workerContinueAdvisor 全套。 +- Reverse-engineering:`scripts/smoke-reverse-engineering-mcps.ts` 全 3 server live-init 通过(ghidra / semgrep / frida-mcp)。 -## 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。 +- **零破坏**。Solo Council 默认关,需要在 `+` 菜单显式打开 toggle。LSP 反馈在 `feature('LSP_FOUNDATION')` flag 下,没装语言服务器的用户透明降级为 unavailable。 +- **桌面包内置 marketplace**。安装 v0.5.12 后第一次启动,设置-插件页就能看到 cc-haha-builtin 里的 image-gen / reverse-engineering / plugin-power 等内置插件,不需要手动添加 marketplace。 +- **品牌改名**:app 名变成 Code Council,installer 文件名 `Claude-Code-Haha-${version}-${os}-${arch}.${ext}` 仍保持兼容性(不影响升级)。 +- **Windows 用户**:v0.5.11 之前从右上角 "Open in VS Code/Cursor" 启动后看不到窗口的问题修了,无需手动找 Code.exe。 +- **逆向插件**:v0.4.6 用了 PyPI 的 `frida-mcp`,需要 `uvx`(uv 0.5+)。安装方式见 `plugins/reverse-engineering/README.md`。