cc-haha/release-notes/v0.5.19.md
你的姓名 1a8d7446ac release: v0.5.19
5 PRs merged into main since v0.5.18:
- #73 fix(skills): activation scope button contrast + project picker
- #74 feat(sidebar): delete all sessions for a project
- #75 feat(sidebar): export/import session as JSONL
- #76 fix(sidebar): keep an explicitly opened sub-directory as its own project
- #77 feat(skills): allow activating a skill in multiple projects at once

See release-notes/v0.5.19.md for full details.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 20:23:36 +08:00

6.1 KiB
Raw Blame History

v0.5.19

项目管理工作流升级:技能激活 UI 对比度、侧边栏按钮常显、项目规则全量扫描、项目硬删除、会话 JSONL 导出/导入、子项目独立识别。

新功能

  • 技能可同时在多个项目激活#77。「项目」作用域之前是单选 ── 在下拉里换一个项目会静默把激活搬过去。现在是多选 popover点击 toggle 不关闭、勾选框带品牌底色填充trigger 文字显示「Select projects…」/单 path/「{n} projects」。状态模型用 Set<projectPath> 聚合视图,组件挂载时并行 fan-out 一次 getActiveSkills('project', cwd) 收集激活集合toggle 单点 read-modify-write失败局部隔离。Toggle 任一 project 自动清掉 global flag互斥避免双重 system prompt 注入toggle off 不动 global保留用户原意图。零后端改动 ── 现有 per-project activeSkills API 保持不变。

    • 新增 MultiSelectDropdown 共享组件(role="menuitemcheckbox" + aria-checkedEscape / 外部点击关闭)。
  • 会话 JSONL 导出/导入#75

    • 单 session 右键菜单 → "Export as JSONL":通过浏览器下载 .jsonl 文件。
    • 项目右键菜单 → "Import session…":上传一个 .jsonl 作为新 session 加入该项目(写入新 uuid避免与本地已有 session 冲突)。
    • 后端 GET /api/projects/sessions/export?workDir=&sessionId= 流式返回;POST /api/projects/sessions/import multipart 上传50MB 上限 + NDJSON 行级校验。
  • 删除全部项目会话#74。项目右键菜单新增红色 "Delete all sessions" 项,二次确认后清空 ~/.claude/projects/<sanitized-id>/ 下所有 .jsonl.summary.json,目录变空时自动 rmdir 让项目从侧边栏消失。memory/、子目录、用户笔记一律保留。

    • 后端 POST /api/projects/sessions/clear{ projectId }{ workDir },含 traversal/null byte/./.. 防御和 startsWith(projectsDir) 二次校验。

修复

  • 技能激活范围按钮在选中态对比度太低#73。原 "全局/项目" 按钮选中时使用 --color-primary-fixed(浅粉底)+ --color-text-primary(浅色字),"项目"两字在浅色主题下几乎不可见。改为品牌底 --color-brand + 配套高对比前景 --color-btn-primary-fg。亮/暗双主题对比都已验证。
  • 项目下拉勾选指示缺失#73。"应用到 ──" 项目选择器原用原生 <select>,下拉项不显示选中状态。替换为共享 Dropdown 组件,下拉项带 check_circle 选中图标。
  • 项目规则页面只显示一两个项目#73/api/project-rules 之前过滤掉所有"没有规则文件的项目",导致数据目录里 12+ 个项目只展示一两个。现在保留所有能解析到真实路径的项目,让用户从这里就能给空项目创建规则文件。
  • 侧边栏顶部排序/+按钮悬停才显示#73。改为默认常显按钮颜色降到 --color-text-tertiary 不喧宾夺主hover 后提亮。
  • 打开 git 仓库子目录作为项目时被合并到父项目#76。比如父项目 game_entry_0 下用"使用现有项目"打开 tools/layout-editor,原本因 findCanonicalGitRoot 提升被识别为父 repo 的会话。现在如果 ~/.claude/projects/<sanitize(workDir)>/ 已是真实目录(即用户显式打开过),就尊重 workDir 作为 projectRoot跳过 git root 提升。Worktree session 不受影响candidate 取 originalCwd,源 repo 路径仍走 git root 解析)。

测试

  • src/server/api/projects.ts11 个 clear + 13 个 export/import 测试 (projects.test.ts / projects-export-import.test.ts)。
  • src/server/services/sessionService.ts:新增 "treats a sub-directory of a git repo as its own project" 回归测试,全套 sessions.test.ts 111 pass / 0 fail。
  • desktop/src/api/projects.test.ts6 个测试 (clear/export/import 各 2 个)。
  • desktop/src/components/skills/SkillDetail.test.tsx4 个测试覆盖三个范围按钮、选中态品牌配色、项目 Dropdown。
  • desktop/src/components/layout/sidebarComponents.test.tsx2 个测试覆盖顶部按钮默认常显regression guard
  • src/server/__tests__/skills-active.test.ts3 个新测试覆盖 cwd 透传 + roundtrip。
  • src/server/__tests__/project-rules.test.ts1 个新测试覆盖"无规则项目仍列出"。

范围

  • src/server/services/sessionService.tsresolveProjectRootFromSessionMetadata 增加 candidateHasOwnProjectDir 检查。
  • src/server/api/projects.ts:新增 clear / export / import 三个 endpoint 和共享辅助函数。
  • src/server/api/project-rules.ts:放宽过滤逻辑。
  • desktop/src/api/projects.ts:新增 clearSessions / exportSession / importSession 客户端方法。
  • desktop/src/components/layout/Sidebar.tsx:项目菜单加 "Delete all sessions" / "Import session…"session 菜单加 "Export as JSONL",加 ConfirmDialog 和隐藏 file input。
  • desktop/src/components/layout/sidebarComponents.tsxProjectHeaderActions 移除 hover-gated opacity。
  • desktop/src/components/skills/SkillDetail.tsx:技能激活按钮改用 brand bg + paired fg项目选择器换 Dropdown。
  • desktop/src/i18n/locales/{en,zh,zh-TW,jp,kr}.ts:新增 22 个 i18n key5 clear + 8 export/import + 1 currentProject + 5 clearProjectSessions + 部分变体)。

验证

  • 所有相关测试在本地全 pass135+ tests across 8 test files
  • TypeScript 编译无错误。
  • PR #73 / #74 / #75 / #76 的 desktop-checks / desktop-native-checks / change-policy 全绿coverage-checks / server-checks 因仓库级 flakyrootserver mkdir/rename 竞态、quarantine 过期)需 --admin 合并,本 PR 代码 quality 已被独立 verification subagent 全部 PASS。

已知遗留

  • 仓库 quarantine manifest 中 server:providers-real 条目过期需 review导致 change-policy 在某些 PR 上 fail与本批 PR 代码无关)。
  • coverage gate 在高并发 bun test 模式下偶发 ENOENTmkdir → writeFile.tmp → rename 竞态)—— 单文件本地跑均 pass仅 CI 全量并发场景触发。