Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
53cd7d3
docs(skill): 精简发版技能,消重并就近归置规则
maguowei Jul 5, 2026
bfa11fe
docs(skill): 精简依赖升级与 schema 同步技能,触发词并入 description
maguowei Jul 5, 2026
33cbec3
feat(tray): 新增防止休眠三态开关,会话运行时阻止 macOS 空闲休眠
maguowei Jul 5, 2026
743fa8d
Merge branch 'main' into dev
maguowei Jul 5, 2026
a1934cd
feat(settings): 防止休眠加实时生效徽标与切换 Toast 反馈
maguowei Jul 5, 2026
3e8c55d
feat(sleep): 新增可选屏幕常亮,托盘与设置页同步切换
maguowei Jul 6, 2026
b647a41
refactor(settings): 偏好权威值提升到 App,抽屉改为 prop 下发的编辑草稿
maguowei Jul 6, 2026
35f915d
fix(settings): 突出分段控件选中态并守卫工作区重拉竞态
maguowei Jul 6, 2026
d35f9a8
fix(projects): 源码仓库 URL 改单行省略号避免窄卡片逐字符换行
maguowei Jul 6, 2026
1629c54
docs(claude): 移除与 rules 重复的使用方式段并消重验证说明
maguowei Jul 8, 2026
f5d93cc
docs(config): 移除已删除的 official-plugin-catalog 断链引用
maguowei Jul 8, 2026
008aee6
docs(readme): 拆分 Profiles 能力格长句为三簇提升可读性
maguowei Jul 8, 2026
d9c4b32
docs(site): Hero 首段按三大功能域分簇并厘清痛点矩阵措辞
maguowei Jul 8, 2026
643e3a5
build(deps): 升级 typescript 到 7.0.2 原生编译器
maguowei Jul 9, 2026
523b198
chore(docs): 移除已完成的 superpowers 计划与设计文档
maguowei Jul 11, 2026
6dcfb1e
docs(agents): 新增 Agent skills 配置与 issue tracker/triage/domain 约定
maguowei Jul 11, 2026
17a1546
fix(profiles): 重构模型测试结果列表展示与失败原因卡
maguowei Jul 12, 2026
c9cf4ce
feat(claude-overview): 目录总览展示软链并只读跟随预览
maguowei Jul 12, 2026
0fa24e3
feat(deep-link): 支持 code-manager:// 配置导入深度链接
maguowei Jul 12, 2026
aee51b3
fix(deep-link): 钉死公网 DNS 解析并去重语言切换重复入队
maguowei Jul 12, 2026
de92ee7
feat(usage): 缓存命中率趋势图扩展为总体与各模型多系列
maguowei Jul 12, 2026
62968dd
fix(claude-overview): 同步预览 summary 样式契约测试
maguowei Jul 12, 2026
6658e4f
test(claude-overview): 补 file-viewer-utils 纯函数单测抬升分支覆盖率
maguowei Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/rules/config-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ paths:

## 插件与 Marketplace

- 官方插件市场常量在 `marketplace-presets.ts`;通用 marketplace 拉取和 localStorage 缓存在 `marketplace-catalog.ts` / `useMarketplaceCatalog.ts`;官方插件兼容层在 `official-plugin-catalog.ts`
- 官方插件市场常量在 `marketplace-presets.ts`;通用 marketplace 拉取和 localStorage 缓存在 `marketplace-catalog.ts` / `useMarketplaceCatalog.ts`。
- `extraKnownMarketplaces` 存储层支持多种 `source` 形态;浏览市场当前只支持 `source: github`,其他来源显示 unsupported 状态,不伪造插件数据。
- `EnabledPluginsEditor.tsx` 是插件分区容器,表单模式分为“已配置”和“浏览市场”两个 Tab。
- 已配置列表只反映 `settings.enabledPlugins` 的真实条目,不要把浏览项混进配置列表。
Expand Down
1 change: 1 addition & 0 deletions .claude/rules/tauri-backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ paths:
| `main.rs` | 二进制入口,仅调用 `code_manager_lib::run()` |
| `utils.rs` | 公共锁、JSON 读写、原子文件写入、应用数据目录解析 |
| `config.rs` | 配置 / Provider 合并落盘、`resolve_profile_settings()`、模型测试、`config-registry.json` |
| `deep_link.rs` | 深度链接:`code-manager://profiles/import` 解析、内嵌 payload / 远端 HTTPS 拉取(SSRF 防护)、pending 队列与导入链接生成 |
| `memory.rs` | 用户级 `CLAUDE.md` 与 `rules/*.md` 的托管、导入、启停 |
| `skills.rs` | Skills 启停、`~/.codex/skills/<id>` 软链同步、`SKILL.md` 读写、文件树扫描 |
| `history.rs` | `~/.claude/history.jsonl` 读取、会话详情解析、轮询变更 |
Expand Down
16 changes: 8 additions & 8 deletions .claude/skills/release-new-version/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: release-new-version
description: 手动触发的发版技能。仅在用户主动输入 `/release-new-version` 命令时调用,模型不得自动调用此技能
description: 手动触发的发版流程:更新版本文件 → 提交 → 生成 release notes → 打 annotated tag → push
disable-model-invocation: true
---

Expand Down Expand Up @@ -115,6 +115,8 @@ git log --pretty=format:'%h %s' {BASE_TAG}..HEAD

若基准为 `INITIAL`,改用 `git log --pretty=format:'%h %s'`(取全部历史)。

若 `{BASE_TAG}..HEAD` 区间无 commit(少见,如重打 tag),release notes 为空,需提示用户确认是否继续。

#### 6.2 过滤噪音 commit

移除匹配 `chore(release): bump version to` 的行(版本升级 commit 本身)。
Expand Down Expand Up @@ -197,6 +199,8 @@ git push origin v{VERSION}
rm -f "$NOTES_FILE"
```

tag 必须用 annotated(`-a`):lightweight tag 不保存 message,`git show v{VERSION}` 将看不到变更内容。

### 步骤 8:完成确认

- 汇报已完成的步骤,展示生成的 release notes 内容(供用户确认)。
Expand All @@ -206,12 +210,8 @@ rm -f "$NOTES_FILE"

## 注意事项

- **发布分支固定为 `main`**:版本 bump 提交与 tag 都落在 main(见步骤 0);发布内容先经 PR 合入 main,不在 dev/功能分支上直接发版。
跨步骤的约定与环境依赖(单步内的规则已就近写在对应步骤里):

- 版本文件中始终使用纯 semver(如 `0.17.0`),只有 git tag 才加 `v` 前缀(`v0.17.0`)。
- **tag 必须用 annotated(`-a`)**,lightweight tag 不会保存 message,`git show v{VERSION}` 将看不到变更内容。
- 对比基准 tag 必须真实存在(通过 `git rev-parse` 校验),不存在则中止并询问用户确认。
- 当 `{BASE_TAG}..HEAD` 区间无 commit 时(少见,如重打 tag),release notes 为空,需提示用户确认是否继续。
- 执行前检查工作区是否有未提交的无关变更,若有则先提示用户。
- 不手动修改 `pnpm-lock.yaml`,不手动编辑 `Cargo.lock`。
- 不手动修改 `pnpm-lock.yaml`,不手动编辑 `Cargo.lock`(步骤 3 用 `cargo update` 同步)。
- **应用自更新依赖签名与发布**:release workflow 需配置 `TAURI_SIGNING_PRIVATE_KEY` 与 `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` 两个 GitHub secret,否则不会生成 `.sig` 与 `latest.json`,自更新不可用;`src-tauri/tauri.conf.json` 的 `plugins.updater.pubkey` 必须是对应公钥,不能留占位符。
- **草稿 Release 必须手动发布**:workflow 以 `releaseDraft: true` 创建草稿,updater 的 endpoint(`releases/latest/download/latest.json`)只解析到已发布的正式 Release;发布草稿后自更新与 Homebrew Cask 更新才会触发。
10 changes: 1 addition & 9 deletions .claude/skills/update-claude-code-schema/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
---
name: update-claude-code-schema
description: Code Manager 仓库的 Claude Code settings schema 同步技能。涉及 src/schemas/claude-settings.schema.json 升级、SchemaStore 最新定义同步、Claude Code 新增 settings 字段(hooks/env/worktree/permissionRule 等)、或后端 Rust 配置校验兼容性检查时使用:以官方 SchemaStore 为唯一事实源,按"下载 → 整体替换 → 语义比对 → Rust 校验"四步走
description: Code Manager 仓库的 Claude Code settings schema 同步技能。同步 SchemaStore 最新定义、Claude Code 新增 settings 字段(hooks/env/worktree/permissionRule 等)、`validate_settings_document` 或 Rust 配置校验红,或复盘 schema 变化对前端编辑器/表单/类型契约的影响,凡涉及 src/schemas/claude-settings.schema.json 都使用本技能
---

# Update Claude Code Schema

为 Code Manager 同步 Claude Code settings 的 SchemaStore 最新定义。**事实源永远是当前下载的 `https://www.schemastore.org/claude-code-settings.json`**——不要凭记忆、不要从网页片段拼补、不要只 diff 局部字段。

## 触发场景

- 同步 SchemaStore 最新 settings schema。
- Claude Code 发布新 settings 字段(hooks 子字段、permissionRule 模式、env 结构、worktree 选项等)。
- `validate_settings_document` 测试失败或 Rust 配置校验红。
- 复盘 schema 变化对前端编辑器、表单或类型契约的影响。

## 工作流速览

1. **前置检查**:工具 + 规则 + 工作区状态。
Expand All @@ -39,7 +32,6 @@ curl -fsSL https://www.schemastore.org/claude-code-settings.json \

- **为什么下载到临时文件**:留一份原始字节用于后续语义比对;本地文件可能已带格式化痕迹,直接覆盖会丢掉对照基线。
- sandbox 下网络/代理可能挡掉 curl,按权限流程提权重跑同一命令,不要绕过。
- **不**从网页片段、旧 PR diff 或记忆里手工拼补字段——SchemaStore 是 single source of truth,手工拼补必然遗漏上游的"删除字段"。

## 整体替换 + 单文件格式化

Expand Down
10 changes: 2 additions & 8 deletions .claude/skills/upgrade-dependencies/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
---
name: upgrade-dependencies
description: Code Manager 仓库 pnpm/Cargo 依赖升级技能。无论是依赖巡检、单包升级、Tauri 栈对齐、安全补丁修复,还是评估 Vite/TypeScript/Rust 主版本 breaking change,只要涉及 package.json、Cargo.toml、lock 文件或要跑 pnpm audit/cargo update,都使用本技能:按"安全→Tauri→前端→breaking"分批推进,每批跑对应验证
description: Code Manager 仓库 pnpm/Cargo 依赖升级技能。依赖巡检、单包升级、Tauri 栈对齐、安全补丁修复、评估 Vite/TypeScript/Rust 主版本 breaking change,或复盘升级失败(构建/测试挂、锁文件漂移、版本回滚),只要涉及 package.json、Cargo.toml、lock 文件或要跑 pnpm audit/cargo update,都使用本技能。
---

# Upgrade Dependencies

为 Code Manager 仓库执行依赖检查、升级规划、分批实施和复盘。**事实源永远是当前命令输出**——本文档列出的历史版本号会过时,不能当作未来升级的依据。

## 触发场景

- 检查当前可升级依赖、漏洞或 `cargo update --dry-run` 结果。
- 规划或实施升级(含 patch/minor、Tauri 栈、breaking 主版本)。
- 复盘升级失败:构建挂、测试挂、锁文件漂移、版本回滚。

## 工作流速览

1. **前置检查**:工作区状态 + 工具链版本 + 命中规则。
Expand Down Expand Up @@ -122,7 +116,7 @@ Vite、TypeScript、pnpm、Rust 主版本依赖逐项独立评估。

下列是过往升级踩过的具体事实。**版本号会过时,再次升级前必须用"事实源"小节的命令重新查询。** 若历史与当前输出冲突,信任当前输出并就地更新或删除条目。

- `pnpm@11.x` 在本仓库可用;安装走 `CI=true pnpm install` 或 `CI=true pnpm install --no-frozen-lockfile`
- `pnpm@11.x` 在本仓库可用(安装命令见"执行约束")
- Vite 8 + `@vitejs/plugin-react` 6 + TypeScript 6 可通过本仓库门禁;TS6 下需显式 Node types,并移除已弃用的 `baseUrl`,仅保留 `paths` alias。
- `schemars 1.x` 弃用了 `RootSchema.schema.object` 访问路径;schema 契约测试改为 `serde_json::to_value(schema_for!(...))` 后读取 `properties` / `required`。
- `reqwest 0.13` 使用 `default-features = false` 时,Rustls feature 是 `rustls`,不是旧的 `rustls-tls`。
Expand Down
26 changes: 16 additions & 10 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,6 @@

本文件面向在本仓库中工作的 AI Agent,例如 Claude Code、Codex 以及读取 `AGENTS.md` / `CLAUDE.md` 的同类代理。它是执行手册,不是产品介绍页;人类用户入口在 `README.md`,完整使用说明在 `docs/user-manual.md`。

## 使用方式

- 每次会话先读本文件,再按“规则索引”读取命中路径的 `.claude/rules/*.md`。
- `CLAUDE.md` 只保留会话级事实、硬约束、规则索引和验证入口,目标控制在 200 行以内。
- 细粒度规则放在 `.claude/rules/*.md`,通过 `paths` frontmatter 触发;不要用 `@.claude/rules/...` 把大规则 import 回主文件。
- `AGENTS.md` 是指向本文件的软链接,不单独维护。
- 个人或机器特定指令放 `CLAUDE.local.md`,保持未提交;不要把本地偏好写入共享根文档。

## 项目速览

- 项目:Code Manager,基于 Tauri 2 的 Claude Code 本地配置管理桌面应用。
Expand All @@ -35,7 +27,7 @@
- 代码注释使用中文。
- 所有用户可见文本必须走 `useI18n()` 的 `t()` 函数,不要硬编码中英文字符串。
- 所有前端通知优先走 `useToast()`,不要把 `console.error` 当作用户反馈。
- `pnpm check` 会执行 `biome check --write .` 并修改文件;只想做只读前端检查时用 `make lint-frontend`,只读格式检查用 `make fmt-check`。
- `pnpm check` 会执行 `biome check --write .` 并修改文件,`make fmt` 同样改写,都别当只读验证;只读前端检查用 `make lint-frontend`,只读格式检查用 `make fmt-check`。
- 新增有层叠关系或浮层的样式时,使用 shadcn 语义变量和 shadcn 原子组件内置层级,不要硬编码十六进制色值或 z-index 数字。
- 前端视觉默认采用“均衡管理台”风格:克制、紧凑、可扫描,不做营销式 hero、大字号展示或装饰性卡片堆叠。
- Rust 新增文件读写、锁、时间、JSON 工具时,优先复用 `src-tauri/src/utils.rs`。
Expand Down Expand Up @@ -125,7 +117,7 @@ macOS 上应用数据刻意复用 `~/.config/code-manager/`,便于跨平台备
| UI 视觉 | 前端命令 + 本地应用或浏览器截图核验;无法截图时说明限制 |
| 全量本地门禁 | `make verify` |

本地启动桌面应用优先用 `make dev`(底层是 `pnpm tauri dev`);`pnpm dev` 只启动 Vite。生产包优先用 `make build`。`make fmt` 与 `pnpm check` 会改写文件,避免把它们当只读验证;纯格式检查用 `make fmt-check`。
本地启动桌面应用优先用 `make dev`(底层是 `pnpm tauri dev`);`pnpm dev` 只启动 Vite。生产包优先用 `make build`。

## 已知陷阱

Expand All @@ -145,3 +137,17 @@ macOS 上应用数据刻意复用 `~/.config/code-manager/`,便于跨平台备
4. `src/App.tsx`、`src/main.tsx`、`src-tauri/src/lib.rs`、`src-tauri/src/utils.rs`
5. 需要人类产品背景时再读 `README.md` 或 `docs/user-manual.md`
6. 涉及发版流程时阅读 `.claude/skills/release-new-version/SKILL.md`(手动触发,模型不得自动调用)

## Agent skills

### Issue tracker

Issues 追踪在仓库的 GitHub Issues,通过 `gh` CLI 操作;外部 PR 不作为 triage 队列来源。详见 `docs/agents/issue-tracker.md`。

### Triage labels

采用默认标签词汇:`needs-triage` / `needs-info` / `ready-for-agent` / `ready-for-human` / `wontfix`。详见 `docs/agents/triage-labels.md`。

### Domain docs

单上下文布局:根目录 `CONTEXT.md` + `docs/adr/`。详见 `docs/agents/domain.md`。
83 changes: 83 additions & 0 deletions CONTEXT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Code Manager

Code Manager 的领域术语表(glossary),只记录本项目语境下需要统一口径的词汇,不记录实现细节。

## Language

### 防止休眠(Sleep Prevention)

**防止休眠(Sleep Prevention)**:
应用阻止操作系统进入空闲休眠的能力,用于保证 Claude Code 会话在无人值守时不被系统休眠打断。
_Avoid_: 保持唤醒(keep awake)、caffeine、防睡眠

**防止休眠模式(Sleep Prevention Mode)**:
一个三态互斥的用户偏好,决定防止休眠**何时**生效。取值:关闭(Off)、始终(Always)、仅活动时(While Active)。与[屏幕常亮](#屏幕常亮keep-display-awake)正交:模式管"何时",屏幕常亮管"保持什么"。
_Avoid_: 防止休眠开关(它不是布尔开关,是三态)

**屏幕常亮(Keep Display Awake)**:
一个与[防止休眠模式](#防止休眠模式sleep-prevention-mode)正交的布尔偏好,决定保持唤醒时**连显示器一起不熄**(阻止显示器空闲休眠,连带系统)还是**只挡系统空闲休眠、放任屏幕熄灭**。仅在模式非关闭时有意义;关闭时无效。默认关(只挡系统)。
_Avoid_: 防止黑屏、屏幕常显、display sleep

**始终(Always)**:
防止休眠模式的一种取值。无条件保持电脑唤醒,与会话状态无关,直到用户切换到其它模式。
_Avoid_: 手动模式、常开

**仅活动时(While Active)**:
防止休眠模式的一种取值。仅当存在[活动会话](#活动会话active-session)时保持唤醒,会话结束后自动释放。
_Avoid_: 自动模式

### 活动会话(Active Session)

**活动会话(Active Session)**:
一个处于 running 类状态(`running / busy / active / starting`)的 Claude Code 会话。**waiting(等待用户操作)不计入**——那时 Claude 卡在等人,机器休眠也不会杀死会话。"仅活动时"模式据此判断是否保持唤醒。
_Avoid_: 运行中会话(running session,只是其中一个具体状态)

### 目录总览(Directory Overview)

**目录总览(Directory Overview)**:
对 Claude Code 本地目录树(`~/.claude` 或项目级 `.claude/`)的只读浏览视图,用于查看布局、预览文件内容与诊断异常条目。
_Avoid_: 文件管理器、资源管理器、通用编辑器

**软链条目(Symlink Entry)**:
目录总览中**自身**为符号链接的树节点。可只读查看(目录可展开、文件可预览),不可经总览写入。
_Avoid_: 快捷方式、别名、映射(单独指代软链时)

**经软链路径(Path Via Symlink)**:
解析时经过至少一个[软链条目](#软链条目symlink-entry)的逻辑路径。只读可预览;新建、重命名、删除一律拒绝。
_Avoid_: 外部路径、越界路径(经软链可读但写仍拒绝,与恶意路径逃逸不同)

**可预览文本(Previewable Text)**:
目录总览中非已知二进制类型的文件内容,以 UTF-8 或有损 UTF-8 形式展示供阅读。
_Avoid_: 源码、纯文本白名单(判定是「非已知二进制」,不是穷举文本扩展名)

### 深度链接(Deep Link)

**深度链接(Deep Link)**:
由操作系统协议处理器打开 Code Manager 并触发既定业务动作的自定义 URL。当前注册 scheme 为 `code-manager://`。
_Avoid_: 万能链接(Universal Link / App Link,指 https 关联应用)、自定义协议(泛称实现手段时)

**配置导入链接(Profile Import Link)**:
一种[深度链接](#深度链接deep-link),动作为将外部 Claude settings 导入为**新配置(Profile)**。打开后须经预览确认才入库,且**不自动应用/绑定**到 `~/.claude/settings.json`。
_Avoid_: 一键应用链接、配置同步链接、远程配置下发

**内嵌载荷导入(Embedded Payload Import)**:
[配置导入链接](#配置导入链接profile-import-link)的一种来源:settings JSON 经 base64url 编码后放在 query `payload` 中随链接携带。
_Avoid_: 附件导入、剪贴板导入(那是别的入口)

**远端 URL 导入(Remote URL Import)**:
[配置导入链接](#配置导入链接profile-import-link)的一种来源:query `url` 指向一份 HTTPS 上的 settings JSON,由应用拉取后再走同一套预览导入。
_Avoid_: 在线配置中心、配置订阅、远程同步

### Token 用量(Token Usage)

**缓存命中率(Cache Hit Rate)**:
在筛选范围内,缓存读取占全部输入侧 Token 的比例。口径固定为 `cacheRead / (input + cacheCreate + cacheRead)`;输出 Token 不计入分母。无输入时记为 0%。
_Avoid_: 缓存率、命中比、把 output 算进分母、对各时间点命中率做算术平均

**总体缓存命中率(Overall Cache Hit Rate)**:
按全部模型 token **加权**汇总后的[缓存命中率](#缓存命中率cache-hit-rate),不是各模型命中率的简单平均。KPI 卡片与命中率趋势图中的「总体」系列共用此口径。
_Avoid_: 平均命中率、模型命中率均值

**模型缓存命中率(Model Cache Hit Rate)**:
单个模型在同一筛选与时间桶内、仅用该模型 token 算出的[缓存命中率](#缓存命中率cache-hit-rate)。与[总体缓存命中率](#总体缓存命中率overall-cache-hit-rate)并列展示,便于对比模型缓存表现。
_Avoid_: 模型缓存率(省略「命中」)、用总体分母去除模型分子
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Code Manager does not replace Claude Code; it provides a management layer for lo
| Capability | Description |
| --- | --- |
| `~/.claude` Overview | Browse, preview, edit, and locate the Claude Code user directory. |
| Profiles / Built-in Providers | Manage the profile layer that is ultimately written to `~/.claude/settings.json`, pick connection endpoints and model mappings from built-in (read-only) providers, with support for models, environment variables, permissions, Sandbox, hooks, plugins, status line, preview, copy, model testing, one-click apply, import an existing settings file, export (optionally with secrets, with a pre-save preview), diff comparison, and one-click sync of common options / marketplaces / plugins to other profiles. |
| Profiles / Built-in Providers | Manage the profile layer ultimately written to `~/.claude/settings.json`, picking connection endpoints and model mappings from built-in (read-only) providers. Edit models, environment variables, permissions, Sandbox, hooks, plugins, and the status line. Preview, copy, test models, apply in one click, import an existing settings file, export (optionally with secrets, with a pre-save preview), compare diffs, and sync common options / marketplaces / plugins to other profiles. |
| Memory Management | Manage user-level `CLAUDE.md` and `rules/*.md`, with support for the Karpathy behavior guide preset, import, enable, disable, copy, preview, and path validation. |
| Skills Management | Create, edit, delete, enable, and disable Claude Code Skills, and sync them as `~/.codex/skills/<id>` symlinks. |
| History & Sessions | Read `~/.claude/history.jsonl` and view history details by project and session. |
Expand Down
Loading