diff --git a/desktop/package.json b/desktop/package.json index 9ce7d338..4254bcc6 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,7 +1,7 @@ { "name": "claude-code-desktop", "private": true, - "version": "0.2.6", + "version": "0.2.7", "type": "module", "scripts": { "dev": "vite", diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index aa833b19..b632e51f 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -482,7 +482,7 @@ dependencies = [ [[package]] name = "claude-code-desktop" -version = "0.2.6" +version = "0.2.7" dependencies = [ "anyhow", "portable-pty", @@ -1054,9 +1054,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5b2eef6fafbf69f877e55509ce5b11a760690ac9700a2921be067aa6afaef6" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", @@ -2535,9 +2535,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "open" -version = "5.3.4" +version = "5.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3bab717c29a857abf75fcef718d441ec7cb2725f937343c734740a985d37fd" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" dependencies = [ "dunce", "is-wsl", @@ -4722,7 +4722,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -4785,7 +4785,7 @@ dependencies = [ "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -4794,7 +4794,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.2", + "winnow 1.0.3", ] [[package]] @@ -5789,9 +5789,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -6042,7 +6042,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.2", + "winnow 1.0.3", "zbus_macros", "zbus_names", "zvariant", @@ -6070,7 +6070,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant", ] @@ -6096,9 +6096,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -6181,7 +6181,7 @@ dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.2", + "winnow 1.0.3", "zvariant_derive", "zvariant_utils", ] @@ -6209,5 +6209,5 @@ dependencies = [ "quote", "serde", "syn 2.0.117", - "winnow 1.0.2", + "winnow 1.0.3", ] diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 69e68760..dfb533c0 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "claude-code-desktop" -version = "0.2.6" +version = "0.2.7" edition = "2021" [lib] diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index cb407f00..e252a458 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicegui/nicegui/main/nicegui/static/tauri-schema-v2.json", "productName": "Claude Code Haha", - "version": "0.2.6", + "version": "0.2.7", "identifier": "com.claude-code-haha.desktop", "build": { "frontendDist": "../dist", diff --git a/release-notes/v0.2.7.md b/release-notes/v0.2.7.md new file mode 100644 index 00000000..893ba023 --- /dev/null +++ b/release-notes/v0.2.7.md @@ -0,0 +1,77 @@ +# Claude Code Haha v0.2.7 + +这是一个围绕 **桌面 /goal 工作流、Project Memory、项目化会话侧边栏、插件热刷新和桌面稳定性** 的版本。 + +相比 `v0.2.6`,本次把桌面端从“能看到更多能力”继续推进到“能持续使用这些能力”:`/goal` 现在可以跨 CLI、桌面和恢复会话保持可见;Memory 变成项目树式资源面板;侧边栏按项目组织会话并持久保存偏好;插件启停、Skills 和 slash command 列表可以热刷新;同时补上了一批影响日常使用的滚动、复制、附件、缩放、启动诊断和 IM 完成状态问题。 + +## Highlight + +- **/goal 桌面闭环**:新增并打磨 `/goal` 目标循环在桌面端的展示、恢复、历史面包屑和状态同步;恢复会话后仍能看到已完成或进行中的 goal,桌面 composer 保持单一 `/goal` 命令并支持更清晰的 set / clear 交互。 +- **Project Memory 变成项目树**:Settings 里的 Memory 从分散列表升级为项目优先的文件树,支持真实路径恢复、项目搜索、Markdown 预览跳转,并让聊天中的 memory activity 使用统一的紧凑视觉语言。 +- **项目化会话侧边栏**:桌面侧边栏现在按 project root 组织会话,worktree 会话归并到源项目下,项目排序、隐藏、置顶等偏好在桌面和 H5 之间持久同步。 +- **插件和 Skills 热刷新**:桌面启停插件后,当前会话、空会话和 `/api/skills` 能更快看到插件提供的 slash commands / skills,不再需要重启聊天或桌面应用。 +- **桌面基础体验打磨**:新增 Settings UI Zoom 滑杆并和快捷键统一;默认纯白主题;支持拖拽附件;修复复制反馈、空会话布局、tab bar 拥挤、长会话滚动、H5 滚动、附件大 payload、数学公式可读性和启动白屏诊断。 +- **IM 流式卡片更可靠**:飞书 / 钉钉卡片更新加上完成兜底,避免流式文本已经刷完但卡片仍停在输入中或阻塞 completion。 + +## 主要更新 + +- `/goal` 支持从 transcript 恢复 active / completed 状态,并把 goal 生命周期事件作为可见桌面消息恢复出来。 +- `/goal` 用户侧语法简化为设置目标和清除目标,避免旧的 status / pause / resume 等管理子命令把目标状态变复杂。 +- Goal 活动条和 transcript 事件改用接近 Memory / tool result 的紧凑块状样式,减少大型成功卡片对聊天流的干扰。 +- 长时间 goal 运行时,桌面会展示后台 agent 的 start / progress 事件,避免验证或执行阶段看起来像停住了。 +- Project Memory 新增服务端 API、桌面 store、Settings 页面、聊天 memory activity 卡片,以及 `/memory` / `/context` 导航入口。 +- Memory 项目路径会优先从当前 cwd、session 元数据和真实文件系统恢复,减少中文路径、空格路径和 legacy memory-only 项目显示成短横线或乱码。 +- Memory 设置页改为项目树式导航,移除手动创建 memory 文件和误加的 project actions,让页面专注于浏览、搜索、编辑和预览已有 memory。 +- 桌面侧边栏按项目 root 分组,避免 worktree 会话散落成多个路径;项目排序、隐藏、置顶和组织偏好持久化到 cc-haha 自有配置,并兼容 H5。 +- 新增 Open Project 入口,支持从当前 session workDir 打开 Finder / 已检测到的本机 IDE,并使用本机应用图标;打包态图标 URL 也会正确走 desktop sidecar。 +- General Settings 新增 UI Zoom 控制,并和 `Command +`、`Command -`、`Command 0` 快捷键共用一套缩放状态。 +- DeepSeek 等 provider 的 thinking 行为改为服从全局 Thinking 设置,并修复 reasoning-before-text 流式事件导致桌面状态显示空档的问题。 +- 插件启停会刷新服务器和活跃 CLI 的 settings / plugin cache,让新会话 slash commands、空会话 skills 和当前会话插件命令保持一致。 +- 桌面附件选择在 Tauri 环境下改为发送本地路径,避免多文件或大文件被内联为 data URL 导致 WebSocket / renderer payload 暴涨。 +- 桌面 composer 支持从系统拖拽文件添加附件,并复用现有 path-only 附件管线,避免为拖拽单独引入大 payload 路径。 +- Markdown 渲染支持常见 LaTeX 数学公式,并针对公式密集的长聊天降低 KaTeX 渲染和 DOM 成本。 + +## 问题修复 + +- 修复桌面 confirm / alert 权限缺失导致 Superpowers 计划确认或浏览器确认流程卡住的问题。 +- 修复外部 IM、定时任务或其他入口创建的新会话需要重启桌面才可见的问题。 +- 修复聊天选中片段复用时可能被当成文件附件处理的问题。 +- 修复拖拽附件支持后 composer 的 slash / @ 文件弹层被裁剪的问题。 +- 修复 restored chat 自动跳到最新、H5 点击最新消息暴露空白、发送新消息后 transcript 不滚到新 turn 等滚动问题。 +- 修复混合 Markdown、数学公式、代码块、工具输出的长聊天被固定高度虚拟列表撑出空白区域的问题。 +- 修复长桌面会话切换时渲染成本过高的问题,同时避免隐藏会话断开正在运行的 CLI。 +- 修复旧 `/goal status` 等已移除子命令仍可替换当前目标,导致 goal 状态看起来卡住的问题。 +- 修复直接调用 `navigator.clipboard` 导致部分桌面复制入口成功与否不一致的问题,并为 H5 URL、QR link、workspace path 等复制动作补充 toast 反馈。 +- 修复 Settings 写入和插件状态写入共用 `~/.claude/settings.json` 时,旧缓存可能把桌面偏好覆盖回去的问题。 +- 修复 Settings 中 Skills、Plugins、MCP 资源发现和运行时不一致的问题,包括 linked skills、插件 skills 和合并来源 MCP。 +- 修复打包态 Open Project 图标被 CSP 或相对 URL 阻止加载的问题,并避免 macOS stale command shim 让已卸载 IDE 继续显示。 +- 修复 Activity、Memory activity、Goal UI、Zoom slider 在白色 / 深色主题下对比度和视觉风格不一致的问题。 +- 修复启动阶段 React 还没挂载就失败时只剩白屏的问题,现在 HTML 层 watchdog 会显示可复制的诊断信息。 +- 修复 legacy provider 配置迁移时缺乏 cc-haha 专属落点的问题;迁移会导入到 `~/.claude/cc-haha`,不会删除原始共享配置。 +- 修复插件 marketplace / cache 清理路径过宽的问题,避免自动删除 managed cache 目录外的用户路径。 +- 修复飞书 / 钉钉流式卡片更新超时、文本已 flush 但最终状态未结束的问题。 +- 修复模型输出里的常见数学公式只能看到 LaTeX 原文的问题,并避免公式密集内容导致聊天渲染成本过高。 + +## 验证 + +- 相关提交已新增和更新 goal state / evaluator、headless command、session restore、后台 agent progress、desktop MessageList、ActiveSession、composerUtils、ChatInput 等测试。 +- 相关提交已新增和更新 Project Memory API、Memory Settings、memory event WebSocket、Markdown preview、路径恢复和主题 token 测试。 +- 相关提交已新增和更新 Sidebar 项目分组、desktop UI preferences、Open Project、Settings zoom、plugin hot reload、Skills / Plugins / MCP 发现测试。 +- 相关提交已新增和更新 H5 滚动、copy fallback、附件 path-only、拖拽附件、Markdown 数学公式、startup diagnostics、provider thinking、settings cache、IM card completion 等回归测试。 +- 多个功能分支分别通过过 `bun run check:desktop`、`bun run check:server`、`bun run check:native`、`bun run check:adapters`、`bun run check:coverage`、`bun run verify`、desktop build,以及针对 Memory、Goal、Zoom、Sidebar、Open Project、H5 滚动和 IM 的浏览器或业务 smoke。 + +## 其他说明 + +- GitHub Release 正文继续以 `release-notes/v0.2.7.md` 作为来源,发布时无需手动复制 Markdown。 +- 本版本包含较多桌面状态和本地持久化迁移:升级后如遇到启动异常,请优先保留诊断页内容反馈,不要删除 `~/.claude` 或 `~/.claude/cc-haha`。 +- IM 流式卡片修复需要飞书 / 钉钉真实环境才能完整复核;没有对应环境时可先以桌面和 adapter 测试结果作为基础信号。 + +## 安装说明 + +### macOS + +首次打开如果提示"已损坏"或"无法验证开发者",请执行: + +```bash +xattr -cr /Applications/Claude\ Code\ Haha.app +```