ccjk 15.5.0 → 15.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -46,6 +46,9 @@ ccjk rollback # 从备份还原 settings.json
46
46
  | `ccjk doctor` | 检查 settings.json 中的常见配置问题 |
47
47
  | `ccjk doctor --fix` | **自动修复**能修的问题(修改前备份) |
48
48
  | `ccjk rollback` | **从备份还原** settings.json / config.toml |
49
+ | `ccjk tools` | **查看 Clavue/Claude Code/Codex 版本**(加 `--check-updates` 查最新) |
50
+ | `ccjk install [tool]` | **安装代码工具**(不带参=交互选;`--all` 装全部缺失的) |
51
+ | `ccjk update [tool]` | **更新代码工具到最新版**(不带参=交互选 outdated;`--all` 全部) |
49
52
  | `ccjk detect` | 列出已安装的代码工具 |
50
53
  | `ccjk git-install` | 安装 `/ccjk:git-commit` 等 slash 命令模板 |
51
54
 
@@ -159,6 +162,33 @@ Sonnet 4.5 1M │ 📁 ccjk │ ⚡ 4.5% 45.0k │ 12 calls · 1.5k tok/m
159
162
 
160
163
  实现细节:扫 `~/.claude/projects/*/*.jsonl` 当天 mtime 文件,读 `message.usage` 字段聚合。错误一律 swallow,不会让 Claude Code UI 报红。
161
164
 
165
+ ### Tools:工具版本管理
166
+
167
+ 三个开发工具(Clavue / Claude Code / Codex)的本地版本、npm 最新版、安装、升级——一条命令搞定。
168
+
169
+ ```bash
170
+ ccjk tools # 看本地三个工具的版本
171
+ ccjk tools --check-updates # 额外查 npm latest,标记 outdated
172
+
173
+ ccjk install # 交互选择要安装的工具
174
+ ccjk install codex # 安装 Codex
175
+ ccjk install --all # 装全部缺失的
176
+
177
+ ccjk update # 交互选择 outdated 的工具更新
178
+ ccjk update claude-code # 更新 Claude Code
179
+ ccjk update --all # 更新所有 outdated
180
+ ```
181
+
182
+ 输出示例:
183
+
184
+ ```
185
+ Clavue 8.9.2 (latest)
186
+ Claude Code 2.1.138 (latest)
187
+ Codex 0.128.0 → 0.130.0 可升级
188
+ ```
189
+
190
+ 实现就是 `npm install -g <pkg>` / `npm install -g <pkg>@<latest>`,所有命令执行前都会展示给用户确认。如果 npm 因权限失败,会把建议的 `sudo <cmd>` 打印出来让用户自己跑。加 `--dry-run` 只看命令不执行。
191
+
162
192
  ## 支持
163
193
 
164
194
  | 工具 | 配置目标 | 状态 |
package/dist/cli.js CHANGED
@@ -15,6 +15,7 @@ import { profileExportCommand, profileImportCommand } from './commands/profile-p
15
15
  import { permsCommand, permsShowCommand } from './commands/perms.js';
16
16
  import { rollbackCommand } from './commands/rollback.js';
17
17
  import { statusLineCommand, statusLineInstallCommand, statusLineUninstallCommand, } from './commands/statusline.js';
18
+ import { installCommand, updateCommand, versionCommand } from './commands/version.js';
18
19
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
19
20
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
20
21
  const program = new Command();
@@ -144,6 +145,25 @@ program
144
145
  .command('detect')
145
146
  .description('检测已安装的代码工具')
146
147
  .action(detectCommand);
148
+ program
149
+ .command('tools')
150
+ .description('查看 Clavue / Claude Code / Codex 的本地版本(加 --check-updates 查最新)')
151
+ .option('--check-updates', '查询 npm 上的最新版本')
152
+ .action((opts) => versionCommand(opts));
153
+ program
154
+ .command('install [tool]')
155
+ .description('安装代码工具(不带参=交互选择)')
156
+ .option('--all', '装全部缺失的工具')
157
+ .option('--dry-run', '只显示命令不执行')
158
+ .option('-y, --yes', '跳过确认')
159
+ .action((tool, opts) => installCommand(tool, opts));
160
+ program
161
+ .command('update [tool]')
162
+ .description('升级代码工具到最新版(不带参=交互选 outdated)')
163
+ .option('--all', '更新全部 outdated 工具')
164
+ .option('--dry-run', '只显示命令不执行')
165
+ .option('-y, --yes', '跳过确认')
166
+ .action((tool, opts) => updateCommand(tool, opts));
147
167
  program
148
168
  .command('git-install')
149
169
  .description('安装 git slash 命令模板到 Claude Code/Clavue')
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACpF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAC;AAE9E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6BAA6B,CAAC;KAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,uDAAuD,CAAC;KACtF,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;KACjD,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAkE,EAAE,EAAE,CACvG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,oBAAoB,CAAC,CAAC;AACrC,OAAO;KACJ,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAClC,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC9B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAkE,EAAE,EAAE,CACvG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACnC,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,YAAY,CAAC;KACzB,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAuB,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/F,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,CAAC,IAAwB,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC;KAClC,MAAM,CAAC,CAAC,IAA4E,EAAE,EAAE,CACvF,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;KAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,IAA2E,EAAE,EAAE,CACpG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEtC,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,WAAW,CAAC;KAC9C,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtC,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,CAAC,IAAmD,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAEzF,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,cAAc,CAAC;KAC3B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;KACnC,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC;KACvC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEzE,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAExE,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAwD,EAAE,EAAE,CAC7F,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,OAAO,EAAE,mBAAmB,CAAC;KACpC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC;KACxC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAkE,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAEzG,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAkE,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAElH,OAAO;KACJ,OAAO,CAAC,sBAAsB,CAAC;KAC/B,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAkE,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpH,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,YAAY,CAAC;KACzB,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC;KAC1C,MAAM,CAAC,CAAC,IAAgC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtE,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;KAC3B,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;KAC/B,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAwD,EAAE,EAAE,CAC7F,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;KAC/B,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAwD,EAAE,EAAE,CAC7F,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE/B,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACnD,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACpC,WAAW,CAAC,YAAY,CAAC;KACzB,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -9,6 +9,7 @@ import { profileUseCommand } from './profile.js';
9
9
  import { permsCommand } from './perms.js';
10
10
  import { rollbackCommand } from './rollback.js';
11
11
  import { statusLineInstallCommand } from './statusline.js';
12
+ import { installCommand, updateCommand, versionCommand } from './version.js';
12
13
  import { listProfiles, readState } from '../core/profiles.js';
13
14
  const ITEMS = [
14
15
  { key: '1', label: '配置 API(init)', run: () => initCommand() },
@@ -18,8 +19,11 @@ const ITEMS = [
18
19
  { key: '5', label: '配置 MCP 服务', run: () => mcpCommand() },
19
20
  { key: '6', label: '体检(doctor)', run: () => doctorCommand() },
20
21
  { key: '7', label: '从备份还原(rollback)', run: () => rollbackCommand() },
21
- { key: '8', label: '安装 Git 命令模板', run: () => gitInstallCommand() },
22
- { key: '9', label: '检测已安装的工具', run: async () => detectCommand() },
22
+ { key: '8', label: '查看工具版本 / 检查更新', run: () => versionCommand({ checkUpdates: true }) },
23
+ { key: '9', label: '安装代码工具(Clavue/Claude Code/Codex)', run: () => installCommand(undefined) },
24
+ { key: '0', label: '更新代码工具到最新版', run: () => updateCommand(undefined) },
25
+ { key: 'g', label: '安装 Git 命令模板', run: () => gitInstallCommand() },
26
+ { key: 'd', label: '检测已安装的工具', run: async () => detectCommand() },
23
27
  ];
24
28
  export async function menuCommand() {
25
29
  console.log(ansis.bold('\nccjk - Clavue/Claude Code 配置助手\n'));
@@ -37,7 +41,7 @@ export async function menuCommand() {
37
41
  type: 'input',
38
42
  name: 'choice',
39
43
  message: '\n选择',
40
- validate: (v) => /^[1-9q]$/.test(v.trim()) || '输入 1-9 或 q',
44
+ validate: (v) => /^([0-9]|[gdq])$/.test(v.trim()) || '输入有效的选项',
41
45
  }]);
42
46
  if (choice.trim() === 'q')
43
47
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/commands/menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/commands/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import inquirer from 'inquirer';
3
+ import ansis from 'ansis';
4
+ import { TOOLS } from '../core/tools.js';
5
+ import { getAllVersions, getInstalledVersion } from '../core/versions.js';
6
+ export async function versionCommand(opts = {}) {
7
+ console.log(ansis.bold('\n工具版本:\n'));
8
+ if (opts.checkUpdates) {
9
+ console.log(ansis.dim(' 正在查询 npm registry...\n'));
10
+ }
11
+ const versions = getAllVersions(opts.checkUpdates ?? false);
12
+ for (const v of versions) {
13
+ const name = ansis.bold(v.meta.displayName.padEnd(14));
14
+ const localStr = v.installed
15
+ ? (v.local ? ansis.green(v.local) : ansis.yellow('已装(版本未知)'))
16
+ : ansis.gray('未安装');
17
+ let suffix = '';
18
+ if (v.installed && v.latest) {
19
+ if (v.outdated) {
20
+ suffix = ` ${ansis.yellow(`→ ${v.latest} 可升级`)}`;
21
+ }
22
+ else {
23
+ suffix = ` ${ansis.dim(`(latest)`)}`;
24
+ }
25
+ }
26
+ else if (!v.installed && v.latest) {
27
+ suffix = ` ${ansis.dim(`latest: ${v.latest}`)}`;
28
+ }
29
+ console.log(` ${name} ${localStr}${suffix}`);
30
+ }
31
+ if (!opts.checkUpdates) {
32
+ console.log(ansis.dim('\n 加 --check-updates 查询最新版本\n'));
33
+ }
34
+ else {
35
+ const outdated = versions.filter(v => v.outdated);
36
+ const missing = versions.filter(v => !v.installed);
37
+ console.log();
38
+ if (outdated.length > 0) {
39
+ console.log(ansis.yellow(` ${outdated.length} 个工具有新版本 — 运行 \`ccjk update\``));
40
+ }
41
+ if (missing.length > 0) {
42
+ console.log(ansis.dim(` ${missing.length} 个工具未安装 — 运行 \`ccjk install\``));
43
+ }
44
+ if (outdated.length === 0 && missing.length === 0) {
45
+ console.log(ansis.green(' ✓ 全部最新'));
46
+ }
47
+ console.log();
48
+ }
49
+ }
50
+ export async function installCommand(toolArg, opts = {}) {
51
+ const targets = await resolveInstallTargets(toolArg, opts);
52
+ if (targets.length === 0) {
53
+ console.log(ansis.gray('\n没有要安装的工具。\n'));
54
+ return;
55
+ }
56
+ const cmds = targets.map(t => `npm install -g ${TOOLS[t].npmPackage}`);
57
+ console.log(ansis.bold('\n将要执行的命令:\n'));
58
+ for (const c of cmds)
59
+ console.log(` ${ansis.cyan(c)}`);
60
+ console.log();
61
+ if (opts.dryRun) {
62
+ console.log(ansis.dim('(--dry-run 仅展示,不执行)\n'));
63
+ return;
64
+ }
65
+ if (!opts.yes) {
66
+ const { ok } = await inquirer.prompt([{
67
+ type: 'confirm',
68
+ name: 'ok',
69
+ message: `确认执行${targets.length > 1 ? `(${targets.length} 个)` : ''}?需要联网,可能需要 sudo`,
70
+ default: true,
71
+ }]);
72
+ if (!ok) {
73
+ console.log(ansis.gray('已取消。\n'));
74
+ return;
75
+ }
76
+ }
77
+ await runNpmCommands(targets.map(t => ({ tool: t, args: ['install', '-g', TOOLS[t].npmPackage] })));
78
+ }
79
+ async function resolveInstallTargets(toolArg, opts) {
80
+ if (opts.all) {
81
+ return Object.keys(TOOLS).filter(t => !getInstalledVersion(t).installed);
82
+ }
83
+ if (toolArg) {
84
+ if (!(toolArg in TOOLS)) {
85
+ throw new Error(`未知工具 "${toolArg}"。可选: ${Object.keys(TOOLS).join(', ')}`);
86
+ }
87
+ return [toolArg];
88
+ }
89
+ // 交互选择
90
+ const versions = getAllVersions(false);
91
+ const choices = versions.map(v => ({
92
+ name: `${v.meta.displayName.padEnd(14)} ${v.installed ? ansis.green(`已装 ${v.local ?? ''}`) : ansis.gray('未安装')}`,
93
+ value: v.tool,
94
+ checked: !v.installed,
95
+ }));
96
+ const { tools } = await inquirer.prompt([{
97
+ type: 'checkbox',
98
+ name: 'tools',
99
+ message: '选择要安装的工具(已安装的会被覆盖为最新版)',
100
+ choices,
101
+ }]);
102
+ return tools;
103
+ }
104
+ export async function updateCommand(toolArg, opts = {}) {
105
+ const targets = await resolveUpdateTargets(toolArg, opts);
106
+ if (targets.length === 0) {
107
+ console.log(ansis.green('\n✓ 没有需要更新的工具。\n'));
108
+ return;
109
+ }
110
+ console.log(ansis.bold('\n将要更新:\n'));
111
+ for (const v of targets) {
112
+ const arrow = v.local ? `${ansis.dim(v.local)} → ${ansis.green(v.latest)}` : ansis.green(v.latest);
113
+ console.log(` ${v.meta.displayName.padEnd(14)} ${arrow}`);
114
+ }
115
+ console.log();
116
+ const cmds = targets.map(v => `npm install -g ${v.meta.npmPackage}@${v.latest}`);
117
+ console.log(ansis.bold('命令:'));
118
+ for (const c of cmds)
119
+ console.log(` ${ansis.cyan(c)}`);
120
+ console.log();
121
+ if (opts.dryRun) {
122
+ console.log(ansis.dim('(--dry-run 仅展示)\n'));
123
+ return;
124
+ }
125
+ if (!opts.yes) {
126
+ const { ok } = await inquirer.prompt([{
127
+ type: 'confirm', name: 'ok', message: '确认更新?', default: true,
128
+ }]);
129
+ if (!ok) {
130
+ console.log(ansis.gray('已取消。\n'));
131
+ return;
132
+ }
133
+ }
134
+ await runNpmCommands(targets.map(v => ({
135
+ tool: v.tool,
136
+ args: ['install', '-g', `${v.meta.npmPackage}@${v.latest}`],
137
+ })));
138
+ }
139
+ async function resolveUpdateTargets(toolArg, opts) {
140
+ console.log(ansis.dim('\n正在查询最新版本...'));
141
+ const versions = getAllVersions(true);
142
+ if (opts.all) {
143
+ return versions.filter(v => v.installed && v.outdated);
144
+ }
145
+ if (toolArg) {
146
+ if (!(toolArg in TOOLS)) {
147
+ throw new Error(`未知工具 "${toolArg}"`);
148
+ }
149
+ const v = versions.find(x => x.tool === toolArg);
150
+ if (!v.installed) {
151
+ throw new Error(`${v.meta.displayName} 未安装,请先 \`ccjk install ${toolArg}\``);
152
+ }
153
+ if (!v.latest) {
154
+ throw new Error(`无法获取 ${v.meta.displayName} 的最新版本(npm registry 不可达?)`);
155
+ }
156
+ if (!v.outdated) {
157
+ console.log(ansis.green(`\n✓ ${v.meta.displayName} 已是最新(${v.local})\n`));
158
+ return [];
159
+ }
160
+ return [v];
161
+ }
162
+ // 交互:列所有 outdated
163
+ const outdated = versions.filter(v => v.installed && v.outdated);
164
+ if (outdated.length === 0)
165
+ return [];
166
+ const { tools } = await inquirer.prompt([{
167
+ type: 'checkbox',
168
+ name: 'tools',
169
+ message: '选择要更新的工具',
170
+ choices: outdated.map(v => ({
171
+ name: `${v.meta.displayName.padEnd(14)} ${ansis.dim(v.local ?? '')} → ${ansis.green(v.latest)}`,
172
+ value: v.tool,
173
+ checked: true,
174
+ })),
175
+ }]);
176
+ return outdated.filter(v => tools.includes(v.tool));
177
+ }
178
+ async function runNpmCommands(jobs) {
179
+ const failures = [];
180
+ let success = 0;
181
+ for (const job of jobs) {
182
+ const cmd = `npm ${job.args.join(' ')}`;
183
+ console.log(ansis.bold(`\n→ ${TOOLS[job.tool].displayName}: ${ansis.cyan(cmd)}`));
184
+ const result = spawnSync('npm', job.args, { stdio: 'inherit' });
185
+ if (result.status === 0) {
186
+ success++;
187
+ const v = getInstalledVersion(job.tool);
188
+ console.log(ansis.green(` ✔ 完成${v.version ? ` (${v.version})` : ''}`));
189
+ }
190
+ else {
191
+ const reason = result.error
192
+ ? result.error.message
193
+ : `npm 退出码 ${result.status ?? 'null'}`;
194
+ failures.push({ tool: job.tool, cmd, reason });
195
+ console.log(ansis.red(` ✗ 失败: ${reason}`));
196
+ }
197
+ }
198
+ console.log();
199
+ console.log(ansis.green(`✓ 成功 ${success} / ${jobs.length}`));
200
+ if (failures.length > 0) {
201
+ console.log(ansis.red(`✗ 失败 ${failures.length}:`));
202
+ for (const f of failures) {
203
+ console.log(` ${TOOLS[f.tool].displayName}: ${f.reason}`);
204
+ console.log(ansis.dim(` 可手动执行: ${f.cmd}`));
205
+ console.log(ansis.dim(` 或权限问题尝试: sudo ${f.cmd}`));
206
+ }
207
+ process.exitCode = 1;
208
+ }
209
+ console.log();
210
+ }
211
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ export const TOOLS = {
5
5
  homepage: 'https://www.clavue.com',
6
6
  configDir: '~/.claude',
7
7
  settingsFile: '~/.claude/settings.json',
8
+ binName: 'clavue',
9
+ npmPackage: 'clavue',
8
10
  installHint: 'npm install -g clavue',
9
11
  },
10
12
  'claude-code': {
@@ -13,6 +15,8 @@ export const TOOLS = {
13
15
  homepage: 'https://claude.com/claude-code',
14
16
  configDir: '~/.claude',
15
17
  settingsFile: '~/.claude/settings.json',
18
+ binName: 'claude',
19
+ npmPackage: '@anthropic-ai/claude-code',
16
20
  installHint: 'npm install -g @anthropic-ai/claude-code',
17
21
  },
18
22
  'codex': {
@@ -21,6 +25,8 @@ export const TOOLS = {
21
25
  homepage: 'https://github.com/openai/codex',
22
26
  configDir: '~/.codex',
23
27
  settingsFile: '~/.codex/config.toml',
28
+ binName: 'codex',
29
+ npmPackage: '@openai/codex',
24
30
  installHint: 'npm install -g @openai/codex',
25
31
  },
26
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,KAAK,GAAmC;IACnD,QAAQ,EAAE;QACR,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,wBAAwB;QAClC,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,uBAAuB;KACrC;IACD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,gCAAgC;QAC1C,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,0CAA0C;KACxD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,iCAAiC;QAC3C,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,sBAAsB;QACpC,WAAW,EAAE,8BAA8B;KAC5C;CACF,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,KAAK,GAAmC;IACnD,QAAQ,EAAE;QACR,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,wBAAwB;QAClC,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,uBAAuB;KACrC;IACD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,gCAAgC;QAC1C,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,2BAA2B;QACvC,WAAW,EAAE,0CAA0C;KACxD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,iCAAiC;QAC3C,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,sBAAsB;QACpC,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,8BAA8B;KAC5C;CACF,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { TOOLS } from './tools.js';
3
+ /** 探测某个工具本地是否安装、版本号多少。不发网络。 */
4
+ export function getInstalledVersion(tool) {
5
+ const meta = TOOLS[tool];
6
+ // 先 which 一下,没装就不调 --version 避免冗长报错
7
+ if (!isOnPath(meta.binName))
8
+ return { installed: false };
9
+ try {
10
+ const raw = execSync(`${meta.binName} --version`, {
11
+ stdio: ['ignore', 'pipe', 'ignore'],
12
+ timeout: 5000,
13
+ encoding: 'utf-8',
14
+ });
15
+ const v = extractVersion(raw);
16
+ return v ? { installed: true, version: v } : { installed: true };
17
+ }
18
+ catch {
19
+ return { installed: true };
20
+ }
21
+ }
22
+ /**
23
+ * 从 npm registry 查 latest 版本。会发网络请求(`npm view <pkg> version`)。
24
+ * 失败返回 undefined(不抛错),让上层决定是否提示用户。
25
+ */
26
+ export function getLatestVersion(tool) {
27
+ const meta = TOOLS[tool];
28
+ try {
29
+ const raw = execSync(`npm view ${meta.npmPackage} version`, {
30
+ stdio: ['ignore', 'pipe', 'ignore'],
31
+ timeout: 10_000,
32
+ encoding: 'utf-8',
33
+ });
34
+ const v = raw.trim();
35
+ return /^\d+\.\d+\.\d+/.test(v) ? v : undefined;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ /**
42
+ * 同时查所有工具状态。checkUpdates=true 会发网络。
43
+ * 串行查 npm 而不是并发,因为 npm view 各自启子进程,并发反而更慢且占资源。
44
+ */
45
+ export function getAllVersions(checkUpdates = false) {
46
+ const out = [];
47
+ for (const tool of Object.keys(TOOLS)) {
48
+ const meta = TOOLS[tool];
49
+ const local = getInstalledVersion(tool);
50
+ const info = { tool, meta, installed: local.installed };
51
+ if (local.version)
52
+ info.local = local.version;
53
+ if (checkUpdates) {
54
+ const latest = getLatestVersion(tool);
55
+ if (latest) {
56
+ info.latest = latest;
57
+ if (info.local)
58
+ info.outdated = compareVersion(info.local, latest) < 0;
59
+ }
60
+ }
61
+ out.push(info);
62
+ }
63
+ return out;
64
+ }
65
+ /**
66
+ * 比较两个 semver 字符串。
67
+ * -1 = a < b
68
+ * 0 = a == b
69
+ * 1 = a > b
70
+ * 不支持 prerelease(1.2.3-beta),prerelease 部分会被忽略。
71
+ * 这里足够用——三个工具发布的都是稳定版。
72
+ */
73
+ export function compareVersion(a, b) {
74
+ const pa = parseVersion(a);
75
+ const pb = parseVersion(b);
76
+ for (let i = 0; i < 3; i++) {
77
+ if (pa[i] < pb[i])
78
+ return -1;
79
+ if (pa[i] > pb[i])
80
+ return 1;
81
+ }
82
+ return 0;
83
+ }
84
+ function parseVersion(v) {
85
+ const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec(v.trim());
86
+ if (!m)
87
+ return [0, 0, 0];
88
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
89
+ }
90
+ /**
91
+ * 从 `<bin> --version` 输出里抠版本号。
92
+ * 不同工具输出格式不一:
93
+ * "1.2.3"
94
+ * "clavue 1.2.3"
95
+ * "Claude Code v2.1.90 (...)"
96
+ */
97
+ export function extractVersion(raw) {
98
+ const m = /(\d+\.\d+\.\d+)/.exec(raw);
99
+ return m ? m[1] : undefined;
100
+ }
101
+ function isOnPath(bin) {
102
+ try {
103
+ execSync(`command -v ${bin}`, { stdio: 'ignore' });
104
+ return true;
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ }
110
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/core/versions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccjk",
3
- "version": "15.5.0",
3
+ "version": "15.6.0",
4
4
  "description": "Clavue / Claude Code 配置 CLI — init、API、MCP、doctor、git 模板。一条命令搞定。",
5
5
  "type": "module",
6
6
  "bin": {