ccjk 15.6.1 → 15.8.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
@@ -19,6 +19,8 @@ npm install -g ccjk
19
19
  | 场景 | 命令 |
20
20
  |---|---|
21
21
  | 第一次配 API key | `ccjk init` |
22
+ | 装机后想一键配置好 | `ccjk workflow run starter` |
23
+ | 写代码 / 闲聊切换思考强度 | `ccjk mode use code` / `ccjk mode use chat` |
22
24
  | 多个 API key 之间切换(GLM/Kimi/Anthropic/...) | `ccjk use` |
23
25
  | 不想每次都点确认权限 | `ccjk perms standard` |
24
26
  | 看不到当前模型/用量 | `ccjk statusline-install` |
@@ -31,6 +33,17 @@ npm install -g ccjk
31
33
 
32
34
  ## 命令一览
33
35
 
36
+ ### 快速开始
37
+
38
+ | 命令 | 用途 |
39
+ |---|---|
40
+ | `ccjk workflow ls` | 列出可用工作流(starter / team-import / reset-soft / dev-ready) |
41
+ | `ccjk workflow run [id]` | **跑工作流**:按顺序执行多个 ccjk 命令(每步单独确认) |
42
+ | `ccjk mode ls` | 列出可用对话模式(code / chat / fast / deep) |
43
+ | `ccjk mode use [name]` | **切换对话模式**:thinking / effort 一键档位(同步 Claude+Codex) |
44
+ | `ccjk mode show [name]` | 查看模式详情(不带参=当前) |
45
+ | `ccjk mode add [name]` | 新建自定义模式(基于内置模式复制+改) |
46
+
34
47
  ### 配置 API(init / use / profile)
35
48
 
36
49
  | 命令 | 用途 |
@@ -93,6 +106,47 @@ npm install -g ccjk
93
106
 
94
107
  ## 详解
95
108
 
109
+ ### Workflow:快速工作流
110
+
111
+ 把多个 ccjk 命令串起来一键跑,省去你按顺序敲。每步都会单独问你"执行 / 跳过 / 中止",不会偷偷做事。
112
+
113
+ | 工作流 | 步骤 |
114
+ |---|---|
115
+ | `starter` | 配 API → perms standard → statusline-install → 装常用 MCP(可选) |
116
+ | `team-import` | 导入 profile 包 → 切到该 profile → perms standard → doctor --fix |
117
+ | `reset-soft` | 卸 statusline → 切到 perms safe |
118
+ | `dev-ready` | 切 code 对话模式 → perms standard → 装 git slash 命令 → doctor --fix |
119
+
120
+ ```bash
121
+ ccjk workflow # 列出全部
122
+ ccjk workflow run starter # 直接跑 starter
123
+ ccjk workflow run # 交互选
124
+ ```
125
+
126
+ 工作流定义存在代码里,未来会支持 `~/.ccjk/workflows/<id>.json` 加载用户自定义(数据结构已就位)。
127
+
128
+ ### Mode:对话模式
129
+
130
+ 把 Claude/Clavue 的 `thinking` 设置和 Codex 的 `model_reasoning_effort` 抽象成一个统一档位,一键同步两个工具。
131
+
132
+ | 模式 | Claude thinking | Codex effort | 适用 |
133
+ |---|---|---|---|
134
+ | `code` | on, budget 16k | high | 写代码、调 bug、重构 |
135
+ | `chat` | off | medium | 答疑、解释概念、随便聊 |
136
+ | `fast` | off | low | 简单查询、小修改、想立刻拿到结果 |
137
+ | `deep` | on, budget 32k | high | 架构设计、复杂 debug、多角度推理 |
138
+
139
+ ```bash
140
+ ccjk mode ls # 列出全部模式(标记当前)
141
+ ccjk mode use code # 切到 code 模式(同步 Claude + Codex)
142
+ ccjk mode show # 看当前模式详情
143
+ ccjk mode add fast2 --base fast --thinking off --effort low # 自定义模式
144
+ ```
145
+
146
+ 写到工具的**原生字段**(`thinking`、`model_reasoning_effort`),卸载 ccjk 后配置依然有效。需要重启 Claude Code / Codex 才能生效。
147
+
148
+ 自定义模式存在 `~/.ccjk/modes/<id>.json`,可手动编辑。同名时覆盖内置。
149
+
96
150
  ### Profile:多 API 切换
97
151
 
98
152
  `ccjk init` 配完 API 默认会问"保存为 profile?"。之后 `ccjk use` 可以在多个 profile 之间一键切换:
package/dist/cli.js CHANGED
@@ -16,6 +16,8 @@ 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
18
  import { installCommand, updateCommand, versionCommand } from './commands/version.js';
19
+ import { modeAddCommand, modeListCommand, modeShowCommand, modeUseCommand, } from './commands/mode.js';
20
+ import { workflowListCommand, workflowRunCommand } from './commands/workflow.js';
19
21
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
20
22
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
21
23
  const program = new Command();
@@ -145,6 +147,48 @@ program
145
147
  .command('detect')
146
148
  .description('检测已安装的代码工具')
147
149
  .action(detectCommand);
150
+ const mode = program
151
+ .command('mode')
152
+ .description('对话模式:thinking/effort 一键档位(code/chat/fast/deep ...)');
153
+ mode
154
+ .command('ls', { isDefault: true })
155
+ .description('列出所有模式(标记当前)')
156
+ .action(modeListCommand);
157
+ mode
158
+ .command('use [name]')
159
+ .description('切换对话模式(同时作用于 Claude/Clavue + Codex)')
160
+ .option('--tools <list>', '逗号分隔指定工具')
161
+ .option('-y, --yes', '跳过确认')
162
+ .action((name, opts) => modeUseCommand(name, opts));
163
+ mode
164
+ .command('show [name]')
165
+ .description('查看模式详情(不带参看当前)')
166
+ .action((name) => modeShowCommand(name));
167
+ mode
168
+ .command('add [name]')
169
+ .description('新建自定义模式(基于内置模式复制 + 改)')
170
+ .option('--base <id>', '基于哪个模式复制(默认空白)')
171
+ .option('--thinking <on|off>', 'Claude 是否启用 thinking')
172
+ .option('--budget <tokens>', 'thinking budget tokens')
173
+ .option('--effort <low|medium|high>', 'Codex reasoning effort')
174
+ .action((name, opts) => modeAddCommand(name, {
175
+ ...(opts.base ? { base: opts.base } : {}),
176
+ ...(opts.thinking ? { thinking: opts.thinking } : {}),
177
+ ...(opts.budget ? { budget: Number(opts.budget) } : {}),
178
+ ...(opts.effort ? { effort: opts.effort } : {}),
179
+ }));
180
+ const workflow = program
181
+ .command('workflow')
182
+ .description('快速工作流:按顺序跑多个 ccjk 命令(starter / team-import / dev-ready ...)');
183
+ workflow
184
+ .command('ls', { isDefault: true })
185
+ .description('列出可用工作流')
186
+ .action(workflowListCommand);
187
+ workflow
188
+ .command('run [id]')
189
+ .description('执行工作流(不带参=交互选择)')
190
+ .option('-y, --yes', '跳过启动确认(每步仍单独确认)')
191
+ .action((id, opts) => workflowRunCommand(id, opts));
148
192
  program
149
193
  .command('tools')
150
194
  .description('查看 Clavue / Claude Code / Codex 的本地版本(加 --check-updates 查最新)')
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;AACtF,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,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,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oDAAoD,CAAC,CAAC;AACrE,IAAI;KACD,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAClC,WAAW,CAAC,cAAc,CAAC;KAC3B,MAAM,CAAC,eAAe,CAAC,CAAC;AAC3B,IAAI;KACD,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;KACpC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;KAC3B,MAAM,CAAC,CAAC,IAAwB,EAAE,IAAuC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7G,IAAI;KACD,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,CAAC,IAAwB,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,IAAI;KACD,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACvC,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;KACrD,MAAM,CAAC,4BAA4B,EAAE,wBAAwB,CAAC;KAC9D,MAAM,CAAC,CAAC,IAAwB,EAAE,IAKlC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;IACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC,CAAC;AAEN,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,6DAA6D,CAAC,CAAC;AAC9E,QAAQ;KACL,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAClC,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC/B,QAAQ;KACL,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iBAAiB,CAAC;KAC9B,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC;KACtC,MAAM,CAAC,CAAC,EAAsB,EAAE,IAAuB,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAE7F,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"}
@@ -1,3 +1,6 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
1
4
  import inquirer from 'inquirer';
2
5
  import ansis from 'ansis';
3
6
  import { detectCommand } from './detect.js';
@@ -10,43 +13,108 @@ import { permsCommand } from './perms.js';
10
13
  import { rollbackCommand } from './rollback.js';
11
14
  import { statusLineInstallCommand } from './statusline.js';
12
15
  import { installCommand, updateCommand, versionCommand } from './version.js';
13
- import { listProfiles, readState } from '../core/profiles.js';
14
- const ITEMS = [
15
- { key: '1', label: '配置 API(init)', run: () => initCommand() },
16
- { key: '2', label: '切换 Profile(快速切换 API)', run: () => profileUseCommand(undefined) },
17
- { key: '3', label: '一键设权限档位(safe/standard/yolo)', run: () => permsCommand(undefined) },
18
- { key: '4', label: '安装状态栏(显示模型/用量/速率)', run: () => statusLineInstallCommand() },
19
- { key: '5', label: '配置 MCP 服务', run: () => mcpCommand() },
20
- { key: '6', label: '体检(doctor)', run: () => doctorCommand() },
21
- { key: '7', label: '从备份还原(rollback)', run: () => rollbackCommand() },
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() },
16
+ import { modeUseCommand } from './mode.js';
17
+ import { workflowRunCommand } from './workflow.js';
18
+ import { collectStatus, renderBanner, renderStatusBar } from '../core/banner.js';
19
+ const GROUPS = [
20
+ {
21
+ title: '快速开始',
22
+ items: [
23
+ { label: '运行工作流', hint: '一连串命令一键跑(starter / dev-ready ...)', run: () => workflowRunCommand(undefined) },
24
+ { label: '切换对话模式', hint: 'code / chat / fast / deep', run: () => modeUseCommand(undefined) },
25
+ ],
26
+ },
27
+ {
28
+ title: '配置 API',
29
+ items: [
30
+ { label: '配置 API(init)', hint: '写 settings.json,存为 profile', run: () => initCommand() },
31
+ { label: '切换 Profile', hint: '在已配过的 API 之间切换', run: () => profileUseCommand(undefined) },
32
+ { label: '权限档位', hint: 'safe / standard / yolo(同步 3 工具)', run: () => permsCommand(undefined) },
33
+ ],
34
+ },
35
+ {
36
+ title: '增强体验',
37
+ items: [
38
+ { label: '安装状态栏', hint: '显示模型 / 用量 / 速率', run: () => statusLineInstallCommand() },
39
+ { label: '配置 MCP 服务', hint: 'context7 / serena / playwright ...', run: () => mcpCommand() },
40
+ { label: '安装 Git 命令模板', hint: '/ccjk:git-commit 等 slash 命令', run: () => gitInstallCommand() },
41
+ ],
42
+ },
43
+ {
44
+ title: '维护与诊断',
45
+ items: [
46
+ { label: '体检(doctor)', hint: '检查 settings.json 配置问题', run: () => doctorCommand() },
47
+ { label: '从备份还原', hint: '回滚 settings.json / config.toml', run: () => rollbackCommand() },
48
+ { label: '查看版本 / 检查更新', hint: '本地 + npm latest', run: () => versionCommand({ checkUpdates: true }) },
49
+ { label: '安装代码工具', hint: 'Clavue / Claude Code / Codex', run: () => installCommand(undefined) },
50
+ { label: '更新代码工具', hint: '升级到最新版', run: () => updateCommand(undefined) },
51
+ { label: '检测已安装的工具', hint: '看哪些已装哪些没装', run: async () => detectCommand() },
52
+ ],
53
+ },
27
54
  ];
28
- export async function menuCommand() {
29
- console.log(ansis.bold('\nccjk - Clavue/Claude Code 配置助手\n'));
30
- const profiles = await listProfiles();
31
- const state = await readState();
32
- if (profiles.length > 0) {
33
- const cur = state.current ?? ansis.gray('(未设置)');
34
- console.log(ansis.dim(` 当前 profile: ${cur} · 共 ${profiles.length} 个\n`));
55
+ /**
56
+ * 中文字符在 monospace 终端通常占 2 列。padEnd 按字符数算不对齐,
57
+ * 这里手动补空格让 hint 对齐到第 22 列。
58
+ */
59
+ function padToVisibleWidth(s, width) {
60
+ let w = 0;
61
+ for (const ch of s) {
62
+ const code = ch.codePointAt(0) ?? 0;
63
+ if (code >= 0x4e00 && code <= 0x9fff)
64
+ w += 2;
65
+ else if (code >= 0x3000 && code <= 0x303f)
66
+ w += 2;
67
+ else if (code >= 0xff00 && code <= 0xffef)
68
+ w += 2;
69
+ else
70
+ w += 1;
71
+ }
72
+ return s + ' '.repeat(Math.max(0, width - w));
73
+ }
74
+ function getVersion() {
75
+ try {
76
+ const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
77
+ const raw = readFileSync(pkgPath, 'utf-8');
78
+ return JSON.parse(raw).version;
35
79
  }
36
- for (const { key, label } of ITEMS) {
37
- console.log(` ${ansis.green(key)}. ${label}`);
80
+ catch {
81
+ return '?.?.?';
82
+ }
83
+ }
84
+ export async function menuCommand() {
85
+ console.log();
86
+ console.log(renderBanner(getVersion()));
87
+ console.log();
88
+ const status = await collectStatus();
89
+ const statusLines = renderStatusBar(status);
90
+ for (const l of statusLines)
91
+ console.log(l);
92
+ console.log();
93
+ const choices = [];
94
+ let idx = 0;
95
+ const flat = [];
96
+ for (const g of GROUPS) {
97
+ choices.push(new inquirer.Separator(ansis.dim(`── ${g.title} ───────────────────────────`)));
98
+ for (const item of g.items) {
99
+ const hint = item.hint ? ` ${ansis.dim(item.hint)}` : '';
100
+ const padded = padToVisibleWidth(item.label, 20);
101
+ choices.push({ name: `${padded}${hint}`, value: idx, short: item.label });
102
+ flat.push(item);
103
+ idx++;
104
+ }
38
105
  }
39
- console.log(` ${ansis.gray('q')}. 退出`);
106
+ choices.push(new inquirer.Separator(ansis.dim('──────────────────────────────────────────')));
107
+ choices.push({ name: ansis.gray('退出'), value: -1, short: '退出' });
40
108
  const { choice } = await inquirer.prompt([{
41
- type: 'input',
109
+ type: 'list',
42
110
  name: 'choice',
43
- message: '\n选择',
44
- validate: (v) => /^([0-9]|[gdq])$/.test(v.trim()) || '输入有效的选项',
111
+ message: ansis.bold('选择操作'),
112
+ choices,
113
+ pageSize: 20,
114
+ loop: false,
45
115
  }]);
46
- if (choice.trim() === 'q')
116
+ if (choice < 0)
47
117
  return;
48
- const item = ITEMS.find(i => i.key === choice.trim());
49
- if (item)
50
- await item.run();
118
+ await flat[choice].run();
51
119
  }
52
120
  //# sourceMappingURL=menu.js.map
@@ -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,142 @@
1
+ import inquirer from 'inquirer';
2
+ import ansis from 'ansis';
3
+ import { TOOLS } from '../core/tools.js';
4
+ import { readSettings, writeSettings } from '../core/settings.js';
5
+ import { readTomlFile, writeTomlFile } from '../core/toml.js';
6
+ import { applyModeToClaudeSettings, applyModeToCodexConfig, BUILTIN_MODES, listModes, readMode, readModeState, writeMode, writeModeState, } from '../core/modes.js';
7
+ export async function modeListCommand() {
8
+ const modes = await listModes();
9
+ const state = await readModeState();
10
+ console.log(ansis.bold(`\n对话模式(${modes.length}):\n`));
11
+ for (const m of modes) {
12
+ const isCurrent = state.current === m.id;
13
+ const mark = isCurrent ? ansis.green('●') : ' ';
14
+ const name = isCurrent ? ansis.green.bold(m.id.padEnd(10)) : m.id.padEnd(10);
15
+ const builtin = BUILTIN_MODES[m.id] ? ansis.dim('(内置)') : ansis.cyan('(自定义)');
16
+ console.log(` ${mark} ${name} ${m.name.padEnd(8)} ${builtin}`);
17
+ console.log(` ${ansis.dim(m.description)}`);
18
+ }
19
+ console.log();
20
+ if (state.current)
21
+ console.log(ansis.dim(` 当前:${state.current}\n`));
22
+ else
23
+ console.log(ansis.dim(' 当前:未设置 — 用 `ccjk mode use <name>` 应用一个\n'));
24
+ }
25
+ export async function modeUseCommand(name, opts = {}) {
26
+ const target = name ? await resolveOrFail(name) : await pickMode();
27
+ if (!target)
28
+ return;
29
+ const tools = parseTools(opts.tools);
30
+ console.log(ansis.bold(`\n切换到对话模式: ${target.id}(${target.name})`));
31
+ console.log(ansis.dim(` ${target.description}`));
32
+ console.log(ansis.dim(` 目标工具: ${tools.join(', ')}`));
33
+ const claudeDesc = `thinking ${target.claude.thinkingEnabled ? `on (${target.claude.thinkingBudget ?? '默认'})` : 'off'}`;
34
+ console.log(ansis.dim(` Claude/Clavue: ${claudeDesc}`));
35
+ console.log(ansis.dim(` Codex: model_reasoning_effort = ${target.codex.effort}\n`));
36
+ if (!opts.yes) {
37
+ const { ok } = await inquirer.prompt([{
38
+ type: 'confirm', name: 'ok', message: '确认应用?', default: true,
39
+ }]);
40
+ if (!ok) {
41
+ console.log(ansis.gray('已取消。'));
42
+ return;
43
+ }
44
+ }
45
+ const results = [];
46
+ for (const t of tools) {
47
+ if (t === 'codex') {
48
+ const meta = TOOLS.codex;
49
+ const doc = await readTomlFile(meta.settingsFile);
50
+ applyModeToCodexConfig(doc, target);
51
+ const backup = await writeTomlFile(meta.settingsFile, doc);
52
+ const tail = backup ? ansis.dim(` · 备份 ${backup.split('/').pop()}`) : '';
53
+ results.push(`Codex: effort=${target.codex.effort}${tail}`);
54
+ }
55
+ else {
56
+ const meta = TOOLS[t];
57
+ const settings = await readSettings(meta.settingsFile);
58
+ applyModeToClaudeSettings(settings, target);
59
+ const backup = await writeSettings(meta.settingsFile, settings);
60
+ const tail = backup ? ansis.dim(` · 备份 ${backup.split('/').pop()}`) : '';
61
+ results.push(`${meta.displayName}: thinking=${target.claude.thinkingEnabled}${tail}`);
62
+ }
63
+ }
64
+ await writeModeState({ current: target.id });
65
+ console.log(ansis.green('\n✔ 对话模式已切换'));
66
+ for (const r of results)
67
+ console.log(` ${r}`);
68
+ console.log(ansis.yellow(' 提示: 重启 Claude Code / Codex 才能生效\n'));
69
+ }
70
+ export async function modeShowCommand(name) {
71
+ if (!name) {
72
+ const state = await readModeState();
73
+ if (!state.current) {
74
+ console.log(ansis.gray('\n没有当前模式。用 `ccjk mode use` 选一个。\n'));
75
+ return;
76
+ }
77
+ name = state.current;
78
+ }
79
+ const m = await readMode(name);
80
+ if (!m)
81
+ throw new Error(`mode "${name}" 不存在`);
82
+ console.log(ansis.bold(`\nMode: ${m.id}\n`));
83
+ console.log(` name ${m.name}`);
84
+ console.log(` description ${m.description}`);
85
+ console.log(` claude thinking=${m.claude.thinkingEnabled}, budget=${m.claude.thinkingBudget ?? '(未设)'}`);
86
+ console.log(` codex effort=${m.codex.effort}\n`);
87
+ }
88
+ export async function modeAddCommand(name, opts = {}) {
89
+ if (!name) {
90
+ const { v } = await inquirer.prompt([{
91
+ type: 'input', name: 'v', message: '新模式名称(字母数字 _ -)',
92
+ validate: (s) => /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/.test(s.trim()) || '名称非法',
93
+ }]);
94
+ name = v.trim();
95
+ }
96
+ const base = opts.base ? await readMode(opts.base) : null;
97
+ const def = base ? { ...base, id: name, name, description: `${base.name} 的副本` } : {
98
+ id: name,
99
+ name,
100
+ description: '自定义模式',
101
+ claude: { thinkingEnabled: opts.thinking !== 'off', ...(opts.budget !== undefined ? { thinkingBudget: opts.budget } : {}) },
102
+ codex: { effort: opts.effort ?? 'medium' },
103
+ };
104
+ await writeMode(def);
105
+ console.log(ansis.green(`\n✔ 模式 "${name}" 已保存`));
106
+ console.log(ansis.dim(` 存储在 ~/.ccjk/modes/${name}.json,可手动编辑细节\n`));
107
+ }
108
+ async function resolveOrFail(id) {
109
+ const m = await readMode(id);
110
+ if (!m) {
111
+ const all = await listModes();
112
+ throw new Error(`mode "${id}" 不存在。可选: ${all.map(x => x.id).join(', ')}`);
113
+ }
114
+ return m;
115
+ }
116
+ async function pickMode() {
117
+ const modes = await listModes();
118
+ const state = await readModeState();
119
+ const { id } = await inquirer.prompt([{
120
+ type: 'list',
121
+ name: 'id',
122
+ message: '选择对话模式',
123
+ default: state.current,
124
+ choices: modes.map(m => ({
125
+ name: `${m.id.padEnd(10)} ${ansis.dim(m.description)}${state.current === m.id ? ansis.green(' (当前)') : ''}`,
126
+ value: m.id,
127
+ })),
128
+ }]);
129
+ return modes.find(m => m.id === id);
130
+ }
131
+ function parseTools(raw) {
132
+ if (!raw)
133
+ return ['clavue', 'claude-code', 'codex'];
134
+ const valid = ['clavue', 'claude-code', 'codex'];
135
+ const items = raw.split(',').map(s => s.trim()).filter(Boolean);
136
+ for (const t of items) {
137
+ if (!valid.includes(t))
138
+ throw new Error(`未知工具 "${t}"`);
139
+ }
140
+ return items;
141
+ }
142
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/commands/mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import inquirer from 'inquirer';
2
+ import ansis from 'ansis';
3
+ import { listWorkflows, readWorkflow } from '../core/workflows.js';
4
+ import { initCommand } from './init.js';
5
+ import { profileUseCommand } from './profile.js';
6
+ import { permsCommand } from './perms.js';
7
+ import { mcpCommand } from './mcp.js';
8
+ import { statusLineInstallCommand, statusLineUninstallCommand } from './statusline.js';
9
+ import { doctorCommand } from './doctor.js';
10
+ import { profileImportCommand } from './profile-pack.js';
11
+ import { gitInstallCommand } from './git-install.js';
12
+ import { modeUseCommand } from './mode.js';
13
+ export async function workflowListCommand() {
14
+ const wfs = await listWorkflows();
15
+ console.log(ansis.bold(`\n可用工作流(${wfs.length}):\n`));
16
+ for (const w of wfs) {
17
+ console.log(` ${ansis.cyan(w.id.padEnd(14))} ${w.name}`);
18
+ console.log(` ${ansis.dim(w.description)}`);
19
+ console.log(` ${ansis.dim('步骤:')}${w.steps.map(s => s.label).join(' → ')}`);
20
+ console.log();
21
+ }
22
+ console.log(ansis.dim(' 运行:ccjk workflow run <id>\n'));
23
+ }
24
+ export async function workflowRunCommand(id, opts = {}) {
25
+ const target = id ? await resolveOrFail(id) : await pickWorkflow();
26
+ if (!target)
27
+ return;
28
+ console.log(ansis.bold(`\n工作流: ${target.id}(${target.name})`));
29
+ console.log(ansis.dim(` ${target.description}\n`));
30
+ console.log(ansis.bold('步骤:'));
31
+ for (let i = 0; i < target.steps.length; i++) {
32
+ const s = target.steps[i];
33
+ const opt = s.optional ? ansis.dim(' (可选)') : '';
34
+ console.log(` ${i + 1}. ${s.label}${opt}`);
35
+ }
36
+ console.log();
37
+ if (!opts.yes) {
38
+ const { ok } = await inquirer.prompt([{
39
+ type: 'confirm',
40
+ name: 'ok',
41
+ message: '开始执行?(每步会单独确认)',
42
+ default: true,
43
+ }]);
44
+ if (!ok) {
45
+ console.log(ansis.gray('已取消。\n'));
46
+ return;
47
+ }
48
+ }
49
+ let executed = 0;
50
+ let skipped = 0;
51
+ for (let i = 0; i < target.steps.length; i++) {
52
+ const step = target.steps[i];
53
+ const total = target.steps.length;
54
+ console.log(ansis.bold.cyan(`\n━━━ [${i + 1}/${total}] ${step.label} ━━━`));
55
+ if (step.optional) {
56
+ const { run } = await inquirer.prompt([{
57
+ type: 'confirm', name: 'run', message: '执行这一步?', default: false,
58
+ }]);
59
+ if (!run) {
60
+ console.log(ansis.gray(' 跳过'));
61
+ skipped++;
62
+ continue;
63
+ }
64
+ }
65
+ try {
66
+ await runStep(step.action);
67
+ executed++;
68
+ }
69
+ catch (e) {
70
+ console.log(ansis.red(`\n✗ 步骤失败: ${e.message}`));
71
+ const { cont } = await inquirer.prompt([{
72
+ type: 'list',
73
+ name: 'cont',
74
+ message: '继续后续步骤?',
75
+ choices: [
76
+ { name: '继续(跳过这一步)', value: true },
77
+ { name: '中止工作流', value: false },
78
+ ],
79
+ }]);
80
+ if (!cont) {
81
+ console.log(ansis.gray('\n工作流已中止。已执行 ' + executed + ' 步。\n'));
82
+ return;
83
+ }
84
+ skipped++;
85
+ }
86
+ }
87
+ console.log();
88
+ console.log(ansis.green(`✔ 工作流 "${target.id}" 完成`));
89
+ console.log(ansis.dim(` 执行 ${executed} 步,跳过 ${skipped} 步\n`));
90
+ }
91
+ async function runStep(action) {
92
+ switch (action.type) {
93
+ case 'init':
94
+ return initCommand();
95
+ case 'use':
96
+ return profileUseCommand(action.profile);
97
+ case 'perms':
98
+ return permsCommand(action.tier);
99
+ case 'mcp':
100
+ return mcpCommand({ ...(action.services ? { services: action.services } : {}) });
101
+ case 'statusline-install':
102
+ return statusLineInstallCommand();
103
+ case 'statusline-uninstall':
104
+ return statusLineUninstallCommand();
105
+ case 'doctor-fix':
106
+ return doctorCommand({ fix: true });
107
+ case 'profile-import': {
108
+ if (!action.file) {
109
+ const { f } = await inquirer.prompt([{
110
+ type: 'input', name: 'f', message: 'profile 包文件路径',
111
+ validate: (s) => s.trim().length > 0 || '不能为空',
112
+ }]);
113
+ return profileImportCommand(f.trim());
114
+ }
115
+ return profileImportCommand(action.file);
116
+ }
117
+ case 'git-install':
118
+ return gitInstallCommand({});
119
+ case 'mode-use':
120
+ return modeUseCommand(action.mode);
121
+ }
122
+ }
123
+ async function resolveOrFail(id) {
124
+ const w = await readWorkflow(id);
125
+ if (!w) {
126
+ const all = await listWorkflows();
127
+ throw new Error(`workflow "${id}" 不存在。可选: ${all.map(x => x.id).join(', ')}`);
128
+ }
129
+ return w;
130
+ }
131
+ async function pickWorkflow() {
132
+ const wfs = await listWorkflows();
133
+ const { id } = await inquirer.prompt([{
134
+ type: 'list',
135
+ name: 'id',
136
+ message: '选择要运行的工作流',
137
+ pageSize: Math.min(15, wfs.length + 2),
138
+ choices: wfs.map((w) => ({
139
+ name: `${w.id.padEnd(14)} ${ansis.dim(w.description)}`,
140
+ value: w.id,
141
+ })),
142
+ }]);
143
+ return wfs.find((w) => w.id === id);
144
+ }
145
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAC1D,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAsB,EAAE,OAAmB,EAAE;IACpF,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAkB,CAAC;gBACrD,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAmB,CAAC;oBACvD,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK;iBAChE,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAc,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAoB,CAAC;oBACzD,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS;oBAClB,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;wBAClC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;qBAChC;iBACF,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,QAAQ,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAkB;IACvC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,WAAW,EAAE,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,oBAAoB;YACvB,OAAO,wBAAwB,EAAE,CAAC;QACpC,KAAK,sBAAsB;YACzB,OAAO,0BAA0B,EAAE,CAAC;QACtC,KAAK,YAAY;YACf,OAAO,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAgB,CAAC;wBAClD,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe;wBAClD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM;qBACvD,CAAC,CAAC,CAAC;gBACJ,OAAO,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,aAAa;YAChB,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAU;IACrC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAiB,CAAC;YACpD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;gBACtD,KAAK,EAAE,CAAC,CAAC,EAAE;aACZ,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACJ,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,128 @@
1
+ import ansis from 'ansis';
2
+ import { homedir } from 'node:os';
3
+ import { existsSync } from 'node:fs';
4
+ import { TOOLS } from './tools.js';
5
+ import { getInstalledVersion } from './versions.js';
6
+ import { listProfiles, readState } from './profiles.js';
7
+ import { readSettings } from './settings.js';
8
+ import { detectClaudeTier } from './perms.js';
9
+ import { expandHome } from './paths.js';
10
+ import { readModeState } from './modes.js';
11
+ /**
12
+ * 渲染启动横幅。简洁优先:
13
+ * - 不闪烁、不动画
14
+ * - ASCII art 用单字节字符,避免双宽字体导致对齐歪
15
+ * - 终端不支持颜色时降级(ansis 自动处理)
16
+ */
17
+ export function renderBanner(version) {
18
+ const lines = [];
19
+ const dim = ansis.dim;
20
+ const bold = ansis.bold;
21
+ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
22
+ // ▄▄ ▄▄ ▄ ▄ ▄ ▄
23
+ // 走字母 art:每行严格 6 字符 × n,全部 ASCII:
24
+ //
25
+ // ██████╗ ██████╗ ██╗██╗ ██╗
26
+ // ██╔════╝ ██╔════╝ ██║██║ ██╔╝
27
+ // ██║ ██║ ██║█████╔╝
28
+ // ██║ ██║ ██ ██║██╔═██╗
29
+ // ╚██████╗ ╚██████╗ ╚█████╔╝██║ ██╗
30
+ // ╚═════╝ ╚═════╝ ╚════╝ ╚═╝ ╚═╝
31
+ //
32
+ // 这些字符(█ ╗ ╔ ║ ═ ╚)大多数 monospace 字体里都是单宽,对齐稳。
33
+ const art = [
34
+ ' ██████╗ ██████╗ ██╗██╗ ██╗',
35
+ ' ██╔════╝ ██╔════╝ ██║██║ ██╔╝',
36
+ ' ██║ ██║ ██║█████╔╝ ',
37
+ ' ██║ ██║ ██ ██║██╔═██╗ ',
38
+ ' ╚██████╗ ╚██████╗ ╚█████╔╝██║ ██╗',
39
+ ' ╚═════╝ ╚═════╝ ╚════╝ ╚═╝ ╚═╝',
40
+ ];
41
+ for (const a of art)
42
+ lines.push(bold.cyan(a));
43
+ lines.push('');
44
+ lines.push(` ${bold('Clavue 官方配置工具')} ${dim('· Claude Code / Codex 通用')}`);
45
+ lines.push(` ${dim(`v${version} · npm i -g ccjk · github.com/miounet11/ccjk`)}`);
46
+ return lines.join('\n');
47
+ }
48
+ export async function collectStatus() {
49
+ const profiles = await listProfiles().catch(() => []);
50
+ const state = await readState().catch(() => ({}));
51
+ const modeState = await readModeState().catch(() => ({}));
52
+ // 读 Claude/Clavue settings 决定 perms 档位 + statusline 是否装了
53
+ let permsTier;
54
+ let statuslineInstalled = false;
55
+ try {
56
+ const path = expandHome(TOOLS.clavue.settingsFile);
57
+ if (existsSync(path)) {
58
+ const s = await readSettings(TOOLS.clavue.settingsFile);
59
+ const detected = detectClaudeTier(s);
60
+ if (detected)
61
+ permsTier = detected;
62
+ const sl = s.statusLine;
63
+ if (sl?.command)
64
+ statuslineInstalled = true;
65
+ }
66
+ }
67
+ catch { /* swallow */ }
68
+ const toolsInstalled = Object.keys(TOOLS).map((t) => {
69
+ const v = getInstalledVersion(t);
70
+ return {
71
+ tool: t,
72
+ ...(v.version ? { version: v.version } : {}),
73
+ installed: v.installed,
74
+ };
75
+ });
76
+ return {
77
+ ...(state.current ? { profileName: state.current } : {}),
78
+ profileCount: profiles.length,
79
+ ...(permsTier ? { permsTier } : {}),
80
+ ...(modeState.current ? { modeName: modeState.current } : {}),
81
+ statuslineInstalled,
82
+ toolsInstalled,
83
+ };
84
+ }
85
+ /** 渲染状态行(横幅下方一行) */
86
+ export function renderStatusBar(s) {
87
+ const out = [];
88
+ // 左边:profile + 档位 + 状态栏
89
+ const pieces = [];
90
+ if (s.profileName) {
91
+ pieces.push(`${ansis.dim('profile')} ${ansis.cyan(s.profileName)}`);
92
+ }
93
+ else {
94
+ pieces.push(ansis.dim('profile (未设置)'));
95
+ }
96
+ if (s.permsTier) {
97
+ const c = s.permsTier === 'safe' ? ansis.green : s.permsTier === 'standard' ? ansis.cyan : ansis.yellow;
98
+ pieces.push(`${ansis.dim('perms')} ${c(s.permsTier)}`);
99
+ }
100
+ if (s.modeName) {
101
+ pieces.push(`${ansis.dim('mode')} ${ansis.magenta(s.modeName)}`);
102
+ }
103
+ pieces.push(`${ansis.dim('statusline')} ${s.statuslineInstalled ? ansis.green('●') : ansis.gray('○')}`);
104
+ out.push(` ${pieces.join(' · ')}`);
105
+ // 右边:工具版本一行
106
+ const toolPieces = s.toolsInstalled.map((t) => {
107
+ const meta = TOOLS[t.tool];
108
+ if (!t.installed)
109
+ return ansis.gray(`${meta.displayName}: 未装`);
110
+ const ver = t.version ? ansis.green(`v${t.version}`) : ansis.yellow('?');
111
+ return `${ansis.dim(meta.displayName)} ${ver}`;
112
+ });
113
+ out.push(` ${toolPieces.join(' · ')}`);
114
+ return out;
115
+ }
116
+ /**
117
+ * 把绝对路径压短:home 目录显示为 ~。
118
+ * 留作未来用——目前 banner/menu 没用到,但放这里集中。
119
+ */
120
+ export function shortenPath(p) {
121
+ const h = homedir();
122
+ if (p === h)
123
+ return '~';
124
+ if (p.startsWith(`${h}/`))
125
+ return `~/${p.slice(h.length + 1)}`;
126
+ return p;
127
+ }
128
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/core/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readFile, readdir, unlink, writeFile } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { setTomlValue } from './toml.js';
6
+ /**
7
+ * 内置模式。复制粘贴就能让用户写自己的。
8
+ */
9
+ export const BUILTIN_MODES = {
10
+ code: {
11
+ id: 'code',
12
+ name: '写代码',
13
+ description: '深度思考开启 / 高强度推理 — 适合写代码、调 bug、重构',
14
+ claude: { thinkingEnabled: true, thinkingBudget: 16384 },
15
+ codex: { effort: 'high' },
16
+ },
17
+ chat: {
18
+ id: 'chat',
19
+ name: '日常对话',
20
+ description: '思考关闭 / 中等推理 — 答疑、解释概念、随便聊',
21
+ claude: { thinkingEnabled: false },
22
+ codex: { effort: 'medium' },
23
+ },
24
+ fast: {
25
+ id: 'fast',
26
+ name: '快速响应',
27
+ description: '思考关闭 / 低推理 — 简单查询、小修改、想要立刻拿到结果',
28
+ claude: { thinkingEnabled: false },
29
+ codex: { effort: 'low' },
30
+ },
31
+ deep: {
32
+ id: 'deep',
33
+ name: '深度思考',
34
+ description: '深度思考开启 / 大 budget — 架构设计、复杂 debug、需要多角度推理',
35
+ claude: { thinkingEnabled: true, thinkingBudget: 32768 },
36
+ codex: { effort: 'high' },
37
+ },
38
+ };
39
+ export const MODES_DIR = join(homedir(), '.ccjk', 'modes');
40
+ export const MODE_STATE_FILE = join(homedir(), '.ccjk', 'mode-state.json');
41
+ const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/;
42
+ export function validateModeName(name) {
43
+ if (!NAME_RE.test(name)) {
44
+ throw new Error(`mode 名称非法: "${name}"(仅允许字母数字 _ - ,1-32 字符)`);
45
+ }
46
+ }
47
+ /**
48
+ * 读取所有可用 modes:内置 + 用户自定义(用户同名优先)。
49
+ * 这样用户可以"覆盖"内置的 code 模式而不破坏其它用户的 ccjk。
50
+ */
51
+ export async function listModes(dir = MODES_DIR) {
52
+ const out = new Map();
53
+ for (const m of Object.values(BUILTIN_MODES))
54
+ out.set(m.id, m);
55
+ if (existsSync(dir)) {
56
+ const files = await readdir(dir);
57
+ for (const f of files) {
58
+ if (!f.endsWith('.json'))
59
+ continue;
60
+ try {
61
+ const raw = await readFile(join(dir, f), 'utf-8');
62
+ const def = JSON.parse(raw);
63
+ validateModeName(def.id);
64
+ out.set(def.id, def);
65
+ }
66
+ catch {
67
+ // 跳过损坏文件
68
+ }
69
+ }
70
+ }
71
+ return [...out.values()].sort((a, b) => a.id.localeCompare(b.id));
72
+ }
73
+ export async function readMode(id, dir = MODES_DIR) {
74
+ validateModeName(id);
75
+ if (existsSync(join(dir, `${id}.json`))) {
76
+ const raw = await readFile(join(dir, `${id}.json`), 'utf-8');
77
+ return JSON.parse(raw);
78
+ }
79
+ return BUILTIN_MODES[id] ?? null;
80
+ }
81
+ export async function writeMode(mode, dir = MODES_DIR) {
82
+ validateModeName(mode.id);
83
+ await mkdir(dir, { recursive: true });
84
+ await writeFile(join(dir, `${mode.id}.json`), `${JSON.stringify(mode, null, 2)}\n`, 'utf-8');
85
+ }
86
+ export async function removeMode(id, dir = MODES_DIR) {
87
+ validateModeName(id);
88
+ const p = join(dir, `${id}.json`);
89
+ if (!existsSync(p))
90
+ return false;
91
+ await unlink(p);
92
+ return true;
93
+ }
94
+ export async function readModeState(file = MODE_STATE_FILE) {
95
+ if (!existsSync(file))
96
+ return {};
97
+ try {
98
+ return JSON.parse(await readFile(file, 'utf-8'));
99
+ }
100
+ catch {
101
+ return {};
102
+ }
103
+ }
104
+ export async function writeModeState(state, file = MODE_STATE_FILE) {
105
+ await mkdir(join(file, '..'), { recursive: true });
106
+ await writeFile(file, `${JSON.stringify(state, null, 2)}\n`, 'utf-8');
107
+ }
108
+ /**
109
+ * 应用 mode 到 Claude/Clavue settings.json(in-place 修改)。
110
+ * 写到 settings.thinking 而不是 env,因为 thinking 是 Claude Code 原生支持的字段。
111
+ */
112
+ export function applyModeToClaudeSettings(settings, mode) {
113
+ const obj = settings;
114
+ const thinking = {
115
+ enabled: mode.claude.thinkingEnabled,
116
+ };
117
+ if (mode.claude.thinkingBudget !== undefined) {
118
+ thinking.budgetTokens = mode.claude.thinkingBudget;
119
+ }
120
+ obj.thinking = thinking;
121
+ }
122
+ /**
123
+ * 应用 mode 到 Codex config.toml。
124
+ */
125
+ export function applyModeToCodexConfig(doc, mode) {
126
+ setTomlValue(doc, 'model_reasoning_effort', mode.codex.effort);
127
+ }
128
+ //# sourceMappingURL=modes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.js","sourceRoot":"","sources":["../../src/core/modes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ export const BUILTIN_WORKFLOWS = {
6
+ 'starter': {
7
+ id: 'starter',
8
+ name: '新机首配',
9
+ description: '装机后跑一遍:配 API → 设权限档位 → 装状态栏',
10
+ steps: [
11
+ { label: '配置 API(init)', action: { type: 'init' } },
12
+ { label: '设权限档位 standard', action: { type: 'perms', tier: 'standard' } },
13
+ { label: '安装状态栏', action: { type: 'statusline-install' } },
14
+ { label: '装常用 MCP(可选)', action: { type: 'mcp' }, optional: true },
15
+ ],
16
+ },
17
+ 'team-import': {
18
+ id: 'team-import',
19
+ name: '团队配置导入',
20
+ description: '从 profile 包导入 → 切到合适档位 → 体检自动修',
21
+ steps: [
22
+ { label: '导入 profile 包', action: { type: 'profile-import' } },
23
+ { label: '切换到导入的 profile', action: { type: 'use' } },
24
+ { label: '设权限档位 standard', action: { type: 'perms', tier: 'standard' } },
25
+ { label: '体检 + 自动修', action: { type: 'doctor-fix' } },
26
+ ],
27
+ },
28
+ 'reset-soft': {
29
+ id: 'reset-soft',
30
+ name: '回到低打扰状态',
31
+ description: '卸状态栏 + 切到 safe 档位 — 适合让步给同事用你的机器',
32
+ steps: [
33
+ { label: '卸载状态栏', action: { type: 'statusline-uninstall' } },
34
+ { label: '切到 safe 权限档位', action: { type: 'perms', tier: 'safe' } },
35
+ ],
36
+ },
37
+ 'dev-ready': {
38
+ id: 'dev-ready',
39
+ name: '日常开发就绪',
40
+ description: '切 code 模式 + perms standard + 装 git 模板 + 体检',
41
+ steps: [
42
+ { label: '切到 code 对话模式', action: { type: 'mode-use', mode: 'code' } },
43
+ { label: '设权限档位 standard', action: { type: 'perms', tier: 'standard' } },
44
+ { label: '装 git slash 命令', action: { type: 'git-install' } },
45
+ { label: '体检 + 自动修', action: { type: 'doctor-fix' } },
46
+ ],
47
+ },
48
+ };
49
+ export const WORKFLOWS_DIR = join(homedir(), '.ccjk', 'workflows');
50
+ export async function listWorkflows(dir = WORKFLOWS_DIR) {
51
+ const out = new Map();
52
+ for (const w of Object.values(BUILTIN_WORKFLOWS))
53
+ out.set(w.id, w);
54
+ if (existsSync(dir)) {
55
+ const files = await readdir(dir);
56
+ for (const f of files) {
57
+ if (!f.endsWith('.json'))
58
+ continue;
59
+ try {
60
+ const raw = await readFile(join(dir, f), 'utf-8');
61
+ const def = JSON.parse(raw);
62
+ out.set(def.id, def);
63
+ }
64
+ catch { /* 跳过损坏 */ }
65
+ }
66
+ }
67
+ return [...out.values()].sort((a, b) => a.id.localeCompare(b.id));
68
+ }
69
+ export async function readWorkflow(id, dir = WORKFLOWS_DIR) {
70
+ if (existsSync(join(dir, `${id}.json`))) {
71
+ const raw = await readFile(join(dir, `${id}.json`), 'utf-8');
72
+ return JSON.parse(raw);
73
+ }
74
+ return BUILTIN_WORKFLOWS[id] ?? null;
75
+ }
76
+ export async function writeWorkflow(w, dir = WORKFLOWS_DIR) {
77
+ await mkdir(dir, { recursive: true });
78
+ await writeFile(join(dir, `${w.id}.json`), `${JSON.stringify(w, null, 2)}\n`, 'utf-8');
79
+ }
80
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/core/workflows.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccjk",
3
- "version": "15.6.1",
3
+ "version": "15.8.0",
4
4
  "description": "Clavue / Claude Code / Codex 的本地配置 CLI — profile 切换、权限档位、状态栏、MCP、版本管理,一条命令搞定。",
5
5
  "type": "module",
6
6
  "bin": {