程序员阿江(Relakkes) e070c4a0d0 Make upgrade failures diagnosable without deleting user state
Desktop startup can fail before React mounts on older WebViews, so an HTML-level watchdog now renders startup diagnostics even when the module bundle never reaches the app code. Persistent provider migration now imports legacy root provider config into cc-haha-owned storage without deleting the old source file, and plugin marketplace cleanup refuses obvious corrupted cache roots or outside paths.

Constraint: User explicitly accepted the current reviewed state for landing despite remaining review concerns.

Constraint: Global ~/.claude state is user-owned and protected; automatic repair must avoid deleting shared config, transcripts, skills, MCP, plugins, OAuth, adapters, and teams.

Rejected: Tell users to delete ~/.claude or ~/.claude/cc-haha | unsafe because it can destroy user-owned Claude state and still may not fix WebView compatibility failures.

Confidence: medium

Scope-risk: moderate

Directive: Do not weaken protected-path checks; future deletion paths should validate real paths and symlink behavior before recursive rm.

Tested: bun test src/utils/plugins/installedPluginsManager.test.ts src/utils/plugins/marketplaceManager.test.ts

Tested: bun run check:server

Tested: cd desktop && bun run test -- --run src/main.test.tsx index-html.test.ts vite-config.test.ts src/theme/globals.test.ts

Tested: cd desktop && bun run build

Tested: bun run check:coverage

Not-tested: live macOS 12/Safari 15 WKWebView startup on an affected machine.

Not-tested: H5 diagnostic URL redaction and symlink-escape hardening are known follow-up risks from review.
2026-05-14 18:04:47 +08:00

72 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Claude Code Haha v0.2.2
这是一个以 **仓库工作流、Worktree 隔离、macOS 通知稳定性和桌面运行时健壮性**为主的版本。
相比 `v0.2.1`本次最大的变化是把桌面端的「仓库感知」能力真正落地从仓库上下文启动控制栏、Worktree 隔离启动,到桌面会话与 CLI worktree 的身份对齐,桌面端现在可以更安全、更准确地在多分支和多 worktree 场景下发起和标识会话。与此同时macOS 通知调度、provider 运行时隔离、定时任务和 Computer Use 的稳定性问题也得到了集中修复。
## Highlight
- **桌面仓库工作流成型**:启动上下文控制栏统一展示仓库、分支/worktree 选择,配套 worktree 隔离保护避免多分支并发操作产生冲突。
- **Worktree 会话身份对齐**:桌面会话 badge 现在优先从原生 worktree 身份读取,再从 CLI transcript 状态恢复,保证会话与对应代码分支的关联更准确。
- **macOS 通知架构稳定**:通知调用从 invoke 线程迁移到 main queue构建产物签名身份保持稳定彻底消除 macOS 通知随机失效的问题。
- **Provider 运行时更安全**Bearer provider 不再继承本地 API Key 环境变量,桌面端每个会话独立维护 provider runtime避免多会话互相污染。
- **Computer Use 和定时任务能力补强**Computer Use 开关状态更稳定,定时任务现在通过桌面 sidecar 正确路由,并支持独立 provider runtime 配置。
## 主要更新
- 新增桌面端仓库启动上下文控制栏:空白聊天 tab 展示仓库路径、分支/worktree 选择器,以及一键启动按钮,让用户在发送首轮消息前就能明确指定工作上下文。
- 桌面分支启动现在通过 worktree 隔离保护,避免在同一工作目录下并发启动不同分支会话时产生冲突。
- 桌面会话与 CLI worktree 身份对齐:会话 badge 优先从原生 worktree 信息读取CLI 初始化完成前从 transcript 状态恢复,保证跨重启的 badge 一致性。
- 内置 workflow agent 从内部实验状态对外开放,用户可以直接使用工作流编排能力。
- 新增 Computer Use 可选项:用户可以在设置中选择退出内置 Computer Use bundle按需管理 desktop automation 依赖。
- 桌面通知新增会话路由能力:权限请求、任务通知和长任务回复现在可以精确导航到对应的目标会话,而不是打开通用入口。
- 定时任务现在支持独立指定 provider runtime任务执行时不再强制依赖全局 provider 设置。
- 质量门禁补强PR 质量验证流程具备自执行能力gate 结果可观测、可归档,提升 release 前的可信度。
## 问题修复
- 修复 Bearer provider 会继承本地 `ANTHROPIC_API_KEY` 等环境变量的问题Bearer 类型 provider 现在严格使用自身配置的 token不再意外透传本机 key。
- 修复桌面 provider runtime 在多会话场景下共享导致互相污染的问题;每个会话现在维护独立的 provider runtime 实例。
- 修复 macOS 通知调用在非主线程执行导致随机失效的问题;通知调用现在通过 main queue 调度dispatch 不再阻塞 invoke 线程。
- 修复 macOS 构建产物签名身份在多次打包后不稳定,导致通知权限偶发失效的问题。
- 修复桌面端 Computer Use 开关在任务 modal 中状态不稳定(展开/收起后可能意外重置)的问题。
- 修复配置变更触发的 CLI 重启不再被误判为用户新消息轮次。
- 修复桌面启动时显式选择的 runtime 在某些路径下被覆盖丢失的问题;用户手动选择的 runtime 现在在整个会话周期内保持稳定。
- 修复定时任务未通过桌面 sidecar 路由,导致在某些配置下无法正确执行的问题。
- 修复仓库启动上下文控制栏 UI 细节launch chips 布局更紧凑,控制栏不再因内容过长溢出单行,空会话也能正确展示控制栏。
- 修复桌面 session tab 标题在会话运行期间不同步更新的问题。
- 修复本地开发构建下桌面 UI 状态与实际 CLI 状态不一致,导致调试困难的问题。
- 修复 IM 聊天在对应桌面会话已被删除后仍尝试复用,导致 IM 消息无响应的问题IM 通道现在会检测会话有效性并重建绑定。
- 修复桌面应用启动时可能同时运行多个实例的问题;现在会强制单实例,新启动会激活已有窗口。
- 修复升级过程中因旧 persistence 状态残留导致崩溃的问题,并补充了安全的 Doctor 恢复路径供升级失败时使用。
- 修复自动生成的会话标题偶发格式异常(含多余引号或非预期字符)的问题。
- 修复终端 tab 在启动失败时错误信息未能保持可见的问题。
- 修复新激活的桌面 tab 在某些情况下未能滚动到可见区域的问题。
- 修复将普通文件夹路径误判为"仓库异常警告"的问题,路径识别逻辑更严格。
- 修复桌面 session 流式输出状态在多会话切换时未被隔离,导致 loading 状态串台的问题。
- 修复 task modal 中 model selector 被容器裁剪导致下拉列表不完整显示的问题。
- 修复自定义 provider 的 thinking 参数设置在会话重载后被重置的问题。
- 修复 local proxy 在处理真实 provider 响应时 tool call 解析异常的问题。
## 测试
- 新增桌面仓库启动就绪态的等待逻辑测试,确保 worktree launch 在 CLI 准备好之前不会误报成功。
- 质量门禁结果现在写入结构化 artifact方便 CI 和维护者追溯 gate 执行历史。
## 其他说明
- worktree 启动模式现在可以在 UI 中直接切换,不再需要手动修改配置。
- GitHub Release 正文继续以 `release-notes/v0.2.2.md` 作为来源,发布时无需再手动复制 Markdown。
- Bearer provider auth token 隔离修复属于**安全改进**,升级后本地 API Key 不会再意外被转发给第三方 provider endpoint。
- 如果升级后遇到应用无法启动或持续白屏,请优先使用桌面端 Doctor/恢复入口处理可再生的本地 UI 状态;不要手动删除 `~/.claude``~/.claude/cc-haha/` 目录,避免误删 Provider、OAuth、插件、技能或会话相关配置。
## 安装说明
### macOS
首次打开如果提示"已损坏"或"无法验证开发者",请执行:
```bash
xattr -cr /Applications/Claude\ Code\ Haha.app
```