mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-26 15:03:34 +08:00
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>
6.1 KiB
6.1 KiB
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-projectactiveSkillsAPI 保持不变。- 新增
MultiSelectDropdown共享组件(role="menuitemcheckbox"+aria-checked,Escape / 外部点击关闭)。
- 新增
-
会话 JSONL 导出/导入(#75)。
- 单 session 右键菜单 → "Export as JSONL":通过浏览器下载
.jsonl文件。 - 项目右键菜单 → "Import session…":上传一个
.jsonl作为新 session 加入该项目(写入新 uuid,避免与本地已有 session 冲突)。 - 后端
GET /api/projects/sessions/export?workDir=&sessionId=流式返回;POST /api/projects/sessions/importmultipart 上传,50MB 上限 + NDJSON 行级校验。
- 单 session 右键菜单 → "Export as JSONL":通过浏览器下载
-
删除全部项目会话(#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.ts:11 个 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.ts111 pass / 0 fail。desktop/src/api/projects.test.ts:6 个测试 (clear/export/import 各 2 个)。desktop/src/components/skills/SkillDetail.test.tsx:4 个测试覆盖三个范围按钮、选中态品牌配色、项目 Dropdown。desktop/src/components/layout/sidebarComponents.test.tsx:2 个测试覆盖顶部按钮默认常显(regression guard)。src/server/__tests__/skills-active.test.ts:3 个新测试覆盖 cwd 透传 + roundtrip。src/server/__tests__/project-rules.test.ts:1 个新测试覆盖"无规则项目仍列出"。
范围
src/server/services/sessionService.ts:resolveProjectRootFromSessionMetadata增加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.tsx:ProjectHeaderActions移除 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 key(5 clear + 8 export/import + 1 currentProject + 5 clearProjectSessions + 部分变体)。
验证
- 所有相关测试在本地全 pass(135+ tests across 8 test files)。
- TypeScript 编译无错误。
- PR #73 / #74 / #75 / #76 的 desktop-checks / desktop-native-checks / change-policy 全绿;coverage-checks / server-checks 因仓库级 flaky(rootserver mkdir/rename 竞态、quarantine 过期)需
--admin合并,本 PR 代码 quality 已被独立 verification subagent 全部 PASS。
已知遗留
- 仓库 quarantine manifest 中
server:providers-real条目过期需 review,导致 change-policy 在某些 PR 上 fail(与本批 PR 代码无关)。 - coverage gate 在高并发
bun test模式下偶发 ENOENT(mkdir → writeFile.tmp → rename 竞态)—— 单文件本地跑均 pass,仅 CI 全量并发场景触发。