ccjk 15.31.1 → 16.0.1

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.
Files changed (532) hide show
  1. package/README.md +1 -1
  2. package/bin/ccjk.mjs +2 -0
  3. package/dist/chunks/api-providers.mjs +145 -113
  4. package/dist/chunks/claude-code-config-manager.mjs +731 -0
  5. package/dist/chunks/claude-code-incremental-manager.mjs +126 -286
  6. package/dist/chunks/codex-config-switch.mjs +52 -110
  7. package/dist/chunks/codex-provider-manager.mjs +41 -82
  8. package/dist/chunks/codex-uninstaller.mjs +24 -23
  9. package/dist/chunks/commands.mjs +38 -28
  10. package/dist/chunks/features.mjs +287 -370
  11. package/dist/chunks/simple-config.mjs +8037 -62
  12. package/dist/cli.mjs +2354 -2563
  13. package/dist/i18n/locales/en/api.json +1 -11
  14. package/dist/i18n/locales/en/cli.json +2 -95
  15. package/dist/i18n/locales/en/codex.json +3 -64
  16. package/dist/i18n/locales/en/common.json +1 -49
  17. package/dist/i18n/locales/en/configuration.json +23 -174
  18. package/dist/i18n/locales/en/errors.json +11 -11
  19. package/dist/i18n/locales/en/installation.json +1 -4
  20. package/dist/i18n/locales/en/language.json +1 -1
  21. package/dist/i18n/locales/en/mcp.json +6 -162
  22. package/dist/i18n/locales/en/menu.json +49 -297
  23. package/dist/i18n/locales/en/multi-config.json +1 -1
  24. package/dist/i18n/locales/en/tools.json +1 -28
  25. package/dist/i18n/locales/en/updater.json +2 -6
  26. package/dist/i18n/locales/en/workflow.json +12 -44
  27. package/dist/i18n/locales/zh-CN/api.json +1 -11
  28. package/dist/i18n/locales/zh-CN/cli.json +1 -94
  29. package/dist/i18n/locales/zh-CN/codex.json +3 -64
  30. package/dist/i18n/locales/zh-CN/common.json +1 -49
  31. package/dist/i18n/locales/zh-CN/configuration.json +23 -172
  32. package/dist/i18n/locales/zh-CN/errors.json +11 -11
  33. package/dist/i18n/locales/zh-CN/installation.json +1 -4
  34. package/dist/i18n/locales/zh-CN/language.json +1 -1
  35. package/dist/i18n/locales/zh-CN/mcp.json +6 -162
  36. package/dist/i18n/locales/zh-CN/menu.json +49 -297
  37. package/dist/i18n/locales/zh-CN/multi-config.json +1 -1
  38. package/dist/i18n/locales/zh-CN/tools.json +1 -28
  39. package/dist/i18n/locales/zh-CN/updater.json +1 -5
  40. package/dist/i18n/locales/zh-CN/workflow.json +12 -44
  41. package/dist/index.d.mts +241 -5574
  42. package/dist/index.d.ts +241 -5574
  43. package/dist/index.mjs +17 -3730
  44. package/dist/shared/ccjk.DGjQxTq_.mjs +34 -0
  45. package/package.json +34 -14
  46. package/templates/CLAUDE.md +221 -0
  47. package/templates/claude-code/CLAUDE.md +250 -0
  48. package/templates/claude-code/common/settings.json +48 -0
  49. package/templates/claude-code/en/workflow/bmad/commands/bmad-init.md +275 -0
  50. package/templates/claude-code/en/workflow/common/agents/get-current-datetime.md +29 -0
  51. package/templates/claude-code/en/workflow/common/agents/init-architect.md +114 -0
  52. package/templates/claude-code/en/workflow/common/commands/init-project.md +53 -0
  53. package/templates/claude-code/en/workflow/plan/agents/planner.md +116 -0
  54. package/templates/claude-code/en/workflow/plan/agents/ui-ux-designer.md +91 -0
  55. package/templates/claude-code/en/workflow/plan/commands/feat.md +105 -0
  56. package/templates/claude-code/zh-CN/workflow/bmad/commands/bmad-init.md +275 -0
  57. package/{dist/templates/common/workflow/essential/en → templates/claude-code/zh-CN/workflow/common}/agents/init-architect.md +0 -1
  58. package/templates/claude-code/zh-CN/workflow/plan/agents/planner.md +116 -0
  59. package/templates/claude-code/zh-CN/workflow/plan/commands/feat.md +105 -0
  60. package/templates/codex/common/config.toml +0 -0
  61. package/templates/common/output-styles/en/engineer-professional.md +88 -0
  62. package/templates/common/output-styles/en/laowang-engineer.md +127 -0
  63. package/templates/common/output-styles/en/leibus-engineer.md +251 -0
  64. package/templates/common/output-styles/en/nekomata-engineer.md +120 -0
  65. package/templates/common/output-styles/en/ojousama-engineer.md +121 -0
  66. package/templates/common/output-styles/en/rem-engineer.md +173 -0
  67. package/templates/common/output-styles/zh-CN/engineer-professional.md +89 -0
  68. package/templates/common/output-styles/zh-CN/laowang-engineer.md +127 -0
  69. package/templates/common/output-styles/zh-CN/leibus-engineer.md +251 -0
  70. package/templates/common/output-styles/zh-CN/nekomata-engineer.md +120 -0
  71. package/templates/common/output-styles/zh-CN/ojousama-engineer.md +121 -0
  72. package/templates/common/output-styles/zh-CN/rem-engineer.md +179 -0
  73. package/templates/common/workflow/git/en/git-cleanBranches.md +102 -0
  74. package/templates/common/workflow/git/en/git-commit.md +205 -0
  75. package/templates/common/workflow/git/en/git-rollback.md +90 -0
  76. package/templates/common/workflow/git/en/git-worktree.md +276 -0
  77. package/templates/common/workflow/sixStep/en/workflow.md +251 -0
  78. package/{dist/templates → templates}/common/workflow/sixStep/zh-CN/workflow.md +10 -154
  79. package/dist/chunks/agent-teams.mjs +0 -145
  80. package/dist/chunks/agent.mjs +0 -1439
  81. package/dist/chunks/agents.mjs +0 -3783
  82. package/dist/chunks/api-cli.mjs +0 -135
  83. package/dist/chunks/api-config-selector.mjs +0 -159
  84. package/dist/chunks/api.mjs +0 -115
  85. package/dist/chunks/auto-bootstrap.mjs +0 -358
  86. package/dist/chunks/auto-fixer.mjs +0 -95
  87. package/dist/chunks/auto-updater.mjs +0 -507
  88. package/dist/chunks/banner.mjs +0 -173
  89. package/dist/chunks/bash.mjs +0 -187
  90. package/dist/chunks/boost.mjs +0 -474
  91. package/dist/chunks/brain-config.mjs +0 -75
  92. package/dist/chunks/brain-status.mjs +0 -89
  93. package/dist/chunks/ccjk-agents.mjs +0 -416
  94. package/dist/chunks/ccjk-all.mjs +0 -1046
  95. package/dist/chunks/ccjk-config.mjs +0 -445
  96. package/dist/chunks/ccjk-hooks.mjs +0 -1074
  97. package/dist/chunks/ccjk-mcp.mjs +0 -763
  98. package/dist/chunks/ccjk-setup.mjs +0 -765
  99. package/dist/chunks/ccjk-skills.mjs +0 -518
  100. package/dist/chunks/ccr.mjs +0 -109
  101. package/dist/chunks/ccu.mjs +0 -40
  102. package/dist/chunks/check-updates.mjs +0 -117
  103. package/dist/chunks/claude-config.mjs +0 -606
  104. package/dist/chunks/claude-config2.mjs +0 -62
  105. package/dist/chunks/claude-wrapper.mjs +0 -85
  106. package/dist/chunks/clavue-config.mjs +0 -1454
  107. package/dist/chunks/cleanup-migration.mjs +0 -20
  108. package/dist/chunks/cli-hook.mjs +0 -4096
  109. package/dist/chunks/cloud-sync.mjs +0 -29
  110. package/dist/chunks/code-type-resolver.mjs +0 -880
  111. package/dist/chunks/codex.mjs +0 -2141
  112. package/dist/chunks/commands2.mjs +0 -421
  113. package/dist/chunks/commit.mjs +0 -140
  114. package/dist/chunks/completion.mjs +0 -517
  115. package/dist/chunks/config-consolidator.mjs +0 -172
  116. package/dist/chunks/config-switch.mjs +0 -334
  117. package/dist/chunks/config.mjs +0 -558
  118. package/dist/chunks/config2.mjs +0 -484
  119. package/dist/chunks/config3.mjs +0 -486
  120. package/dist/chunks/constants.mjs +0 -323
  121. package/dist/chunks/context-opt.mjs +0 -444
  122. package/dist/chunks/context.mjs +0 -974
  123. package/dist/chunks/dashboard.mjs +0 -481
  124. package/dist/chunks/doctor.mjs +0 -1301
  125. package/dist/chunks/eval.mjs +0 -502
  126. package/dist/chunks/evolution.mjs +0 -322
  127. package/dist/chunks/fish.mjs +0 -181
  128. package/dist/chunks/fs-operations.mjs +0 -180
  129. package/dist/chunks/health-alerts.mjs +0 -830
  130. package/dist/chunks/help.mjs +0 -341
  131. package/dist/chunks/hook-installer.mjs +0 -48
  132. package/dist/chunks/impact.mjs +0 -651
  133. package/dist/chunks/index.mjs +0 -23
  134. package/dist/chunks/index10.mjs +0 -19
  135. package/dist/chunks/index11.mjs +0 -1171
  136. package/dist/chunks/index12.mjs +0 -218
  137. package/dist/chunks/index13.mjs +0 -679
  138. package/dist/chunks/index14.mjs +0 -1009
  139. package/dist/chunks/index15.mjs +0 -194
  140. package/dist/chunks/index2.mjs +0 -7637
  141. package/dist/chunks/index3.mjs +0 -171
  142. package/dist/chunks/index4.mjs +0 -26
  143. package/dist/chunks/index5.mjs +0 -19
  144. package/dist/chunks/index6.mjs +0 -19092
  145. package/dist/chunks/index7.mjs +0 -616
  146. package/dist/chunks/index8.mjs +0 -1602
  147. package/dist/chunks/index9.mjs +0 -5384
  148. package/dist/chunks/init.mjs +0 -1911
  149. package/dist/chunks/installer.mjs +0 -757
  150. package/dist/chunks/installer2.mjs +0 -103
  151. package/dist/chunks/interview.mjs +0 -2927
  152. package/dist/chunks/json-config.mjs +0 -60
  153. package/dist/chunks/linux.mjs +0 -3863
  154. package/dist/chunks/macos.mjs +0 -69
  155. package/dist/chunks/main.mjs +0 -635
  156. package/dist/chunks/manager.mjs +0 -1048
  157. package/dist/chunks/marketplace.mjs +0 -265
  158. package/dist/chunks/mcp-cli.mjs +0 -205
  159. package/dist/chunks/mcp-performance.mjs +0 -187
  160. package/dist/chunks/mcp.mjs +0 -667
  161. package/dist/chunks/memory-check.mjs +0 -2973
  162. package/dist/chunks/memory-paths.mjs +0 -259
  163. package/dist/chunks/memory-sync.mjs +0 -209
  164. package/dist/chunks/memory.mjs +0 -354
  165. package/dist/chunks/metrics-display.mjs +0 -153
  166. package/dist/chunks/monitor.mjs +0 -1856
  167. package/dist/chunks/notification.mjs +0 -1864
  168. package/dist/chunks/onboarding.mjs +0 -386
  169. package/dist/chunks/package.mjs +0 -3
  170. package/dist/chunks/paradigm.mjs +0 -74
  171. package/dist/chunks/permission-manager.mjs +0 -250
  172. package/dist/chunks/permissions.mjs +0 -265
  173. package/dist/chunks/persistence-manager.mjs +0 -801
  174. package/dist/chunks/persistence.mjs +0 -707
  175. package/dist/chunks/platform.mjs +0 -395
  176. package/dist/chunks/plugin.mjs +0 -1936
  177. package/dist/chunks/powershell.mjs +0 -213
  178. package/dist/chunks/prompts.mjs +0 -244
  179. package/dist/chunks/providers.mjs +0 -263
  180. package/dist/chunks/quick-actions.mjs +0 -335
  181. package/dist/chunks/quick-provider.mjs +0 -755
  182. package/dist/chunks/quick-setup.mjs +0 -421
  183. package/dist/chunks/remote.mjs +0 -497
  184. package/dist/chunks/research.mjs +0 -1904
  185. package/dist/chunks/rollback.mjs +0 -38
  186. package/dist/chunks/session-manager.mjs +0 -1371
  187. package/dist/chunks/session.mjs +0 -878
  188. package/dist/chunks/sessions.mjs +0 -106
  189. package/dist/chunks/silent-updater.mjs +0 -396
  190. package/dist/chunks/skill.mjs +0 -117
  191. package/dist/chunks/skill2.mjs +0 -9052
  192. package/dist/chunks/skills-sync.mjs +0 -1343
  193. package/dist/chunks/skills.mjs +0 -577
  194. package/dist/chunks/slash-commands.mjs +0 -208
  195. package/dist/chunks/smart-guide.mjs +0 -247
  196. package/dist/chunks/snapshot.mjs +0 -58
  197. package/dist/chunks/startup.mjs +0 -487
  198. package/dist/chunks/stats.mjs +0 -191
  199. package/dist/chunks/status.mjs +0 -471
  200. package/dist/chunks/team.mjs +0 -63
  201. package/dist/chunks/thinking.mjs +0 -626
  202. package/dist/chunks/trace.mjs +0 -57
  203. package/dist/chunks/uninstall.mjs +0 -852
  204. package/dist/chunks/update.mjs +0 -174
  205. package/dist/chunks/upgrade-manager.mjs +0 -204
  206. package/dist/chunks/upgrade.mjs +0 -133
  207. package/dist/chunks/version-checker.mjs +0 -891
  208. package/dist/chunks/vim.mjs +0 -903
  209. package/dist/chunks/windows.mjs +0 -14
  210. package/dist/chunks/workflows.mjs +0 -633
  211. package/dist/chunks/wsl.mjs +0 -129
  212. package/dist/chunks/zero-config.mjs +0 -871
  213. package/dist/chunks/zsh.mjs +0 -182
  214. package/dist/cli.js +0 -358
  215. package/dist/cli.js.map +0 -1
  216. package/dist/commands/bench.js +0 -178
  217. package/dist/commands/bench.js.map +0 -1
  218. package/dist/commands/completion.js +0 -183
  219. package/dist/commands/completion.js.map +0 -1
  220. package/dist/commands/detect.js +0 -16
  221. package/dist/commands/detect.js.map +0 -1
  222. package/dist/commands/doctor.js +0 -334
  223. package/dist/commands/doctor.js.map +0 -1
  224. package/dist/commands/edit.js +0 -263
  225. package/dist/commands/edit.js.map +0 -1
  226. package/dist/commands/env-perm.js +0 -197
  227. package/dist/commands/env-perm.js.map +0 -1
  228. package/dist/commands/git-install.js +0 -46
  229. package/dist/commands/git-install.js.map +0 -1
  230. package/dist/commands/grok.js +0 -77
  231. package/dist/commands/grok.js.map +0 -1
  232. package/dist/commands/init.js +0 -477
  233. package/dist/commands/init.js.map +0 -1
  234. package/dist/commands/mcp.js +0 -208
  235. package/dist/commands/mcp.js.map +0 -1
  236. package/dist/commands/menu.js +0 -274
  237. package/dist/commands/menu.js.map +0 -1
  238. package/dist/commands/migrate.js +0 -154
  239. package/dist/commands/migrate.js.map +0 -1
  240. package/dist/commands/mode.js +0 -140
  241. package/dist/commands/mode.js.map +0 -1
  242. package/dist/commands/onboard.js +0 -28
  243. package/dist/commands/onboard.js.map +0 -1
  244. package/dist/commands/perms.js +0 -210
  245. package/dist/commands/perms.js.map +0 -1
  246. package/dist/commands/probe.js +0 -135
  247. package/dist/commands/probe.js.map +0 -1
  248. package/dist/commands/profile-diff.js +0 -78
  249. package/dist/commands/profile-diff.js.map +0 -1
  250. package/dist/commands/profile-pack.js +0 -150
  251. package/dist/commands/profile-pack.js.map +0 -1
  252. package/dist/commands/profile.js +0 -405
  253. package/dist/commands/profile.js.map +0 -1
  254. package/dist/commands/quick.js +0 -251
  255. package/dist/commands/quick.js.map +0 -1
  256. package/dist/commands/rollback.js +0 -103
  257. package/dist/commands/rollback.js.map +0 -1
  258. package/dist/commands/status.js +0 -320
  259. package/dist/commands/status.js.map +0 -1
  260. package/dist/commands/statusline.js +0 -118
  261. package/dist/commands/statusline.js.map +0 -1
  262. package/dist/commands/uninstall.js +0 -160
  263. package/dist/commands/uninstall.js.map +0 -1
  264. package/dist/commands/version.js +0 -316
  265. package/dist/commands/version.js.map +0 -1
  266. package/dist/commands/workflow.js +0 -142
  267. package/dist/commands/workflow.js.map +0 -1
  268. package/dist/core/banner.js +0 -125
  269. package/dist/core/banner.js.map +0 -1
  270. package/dist/core/codex-config.js +0 -208
  271. package/dist/core/codex-config.js.map +0 -1
  272. package/dist/core/detect.js +0 -24
  273. package/dist/core/detect.js.map +0 -1
  274. package/dist/core/env-recommend.js +0 -34
  275. package/dist/core/env-recommend.js.map +0 -1
  276. package/dist/core/grok-config.js +0 -110
  277. package/dist/core/grok-config.js.map +0 -1
  278. package/dist/core/lint.js +0 -245
  279. package/dist/core/lint.js.map +0 -1
  280. package/dist/core/mcp.js +0 -41
  281. package/dist/core/mcp.js.map +0 -1
  282. package/dist/core/modes.js +0 -128
  283. package/dist/core/modes.js.map +0 -1
  284. package/dist/core/paths.js +0 -9
  285. package/dist/core/paths.js.map +0 -1
  286. package/dist/core/perms.js +0 -353
  287. package/dist/core/perms.js.map +0 -1
  288. package/dist/core/profile-pack.js +0 -101
  289. package/dist/core/profile-pack.js.map +0 -1
  290. package/dist/core/profiles.js +0 -238
  291. package/dist/core/profiles.js.map +0 -1
  292. package/dist/core/providers.js +0 -133
  293. package/dist/core/providers.js.map +0 -1
  294. package/dist/core/quick-parse.js +0 -187
  295. package/dist/core/quick-parse.js.map +0 -1
  296. package/dist/core/runtime-env.js +0 -92
  297. package/dist/core/runtime-env.js.map +0 -1
  298. package/dist/core/settings.js +0 -31
  299. package/dist/core/settings.js.map +0 -1
  300. package/dist/core/slash-templates.js +0 -56
  301. package/dist/core/slash-templates.js.map +0 -1
  302. package/dist/core/statusline.js +0 -238
  303. package/dist/core/statusline.js.map +0 -1
  304. package/dist/core/term.js +0 -98
  305. package/dist/core/term.js.map +0 -1
  306. package/dist/core/toml.js +0 -241
  307. package/dist/core/toml.js.map +0 -1
  308. package/dist/core/tools.js +0 -63
  309. package/dist/core/tools.js.map +0 -1
  310. package/dist/core/versions.js +0 -126
  311. package/dist/core/versions.js.map +0 -1
  312. package/dist/core/workflows.js +0 -80
  313. package/dist/core/workflows.js.map +0 -1
  314. package/dist/i18n/locales/en/agent-teams.json +0 -18
  315. package/dist/i18n/locales/en/agentBrowser.json +0 -80
  316. package/dist/i18n/locales/en/agents.json +0 -135
  317. package/dist/i18n/locales/en/ccjk-agents.json +0 -33
  318. package/dist/i18n/locales/en/ccjk-all.json +0 -23
  319. package/dist/i18n/locales/en/ccjk-skills.json +0 -22
  320. package/dist/i18n/locales/en/ccjk.json +0 -276
  321. package/dist/i18n/locales/en/claude-md.json +0 -73
  322. package/dist/i18n/locales/en/cloud-setup.json +0 -31
  323. package/dist/i18n/locales/en/cloud-sync.json +0 -147
  324. package/dist/i18n/locales/en/cloud.json +0 -40
  325. package/dist/i18n/locales/en/cloudPlugins.json +0 -118
  326. package/dist/i18n/locales/en/config.json +0 -108
  327. package/dist/i18n/locales/en/context.json +0 -85
  328. package/dist/i18n/locales/en/dashboard.json +0 -78
  329. package/dist/i18n/locales/en/evolution.json +0 -54
  330. package/dist/i18n/locales/en/hooks.json +0 -74
  331. package/dist/i18n/locales/en/hooksSync.json +0 -133
  332. package/dist/i18n/locales/en/interview.json +0 -104
  333. package/dist/i18n/locales/en/lsp.json +0 -78
  334. package/dist/i18n/locales/en/marketplace.json +0 -116
  335. package/dist/i18n/locales/en/memory.json +0 -23
  336. package/dist/i18n/locales/en/notification.json +0 -307
  337. package/dist/i18n/locales/en/permissions.json +0 -95
  338. package/dist/i18n/locales/en/persistence.json +0 -127
  339. package/dist/i18n/locales/en/plugins.json +0 -146
  340. package/dist/i18n/locales/en/quick-actions.json +0 -78
  341. package/dist/i18n/locales/en/registry.json +0 -54
  342. package/dist/i18n/locales/en/remote.json +0 -93
  343. package/dist/i18n/locales/en/sandbox.json +0 -44
  344. package/dist/i18n/locales/en/setup.json +0 -44
  345. package/dist/i18n/locales/en/shencha.json +0 -14
  346. package/dist/i18n/locales/en/skills.json +0 -100
  347. package/dist/i18n/locales/en/skillsSync.json +0 -74
  348. package/dist/i18n/locales/en/smartGuide.json +0 -49
  349. package/dist/i18n/locales/en/stats.json +0 -20
  350. package/dist/i18n/locales/en/subagent.json +0 -69
  351. package/dist/i18n/locales/en/superpowers.json +0 -117
  352. package/dist/i18n/locales/en/team.json +0 -7
  353. package/dist/i18n/locales/en/thinking.json +0 -65
  354. package/dist/i18n/locales/en/vim.json +0 -169
  355. package/dist/i18n/locales/en/workspace.json +0 -108
  356. package/dist/i18n/locales/zh-CN/agent-teams.json +0 -18
  357. package/dist/i18n/locales/zh-CN/agentBrowser.json +0 -80
  358. package/dist/i18n/locales/zh-CN/agents.json +0 -135
  359. package/dist/i18n/locales/zh-CN/ccjk-agents.json +0 -33
  360. package/dist/i18n/locales/zh-CN/ccjk-all.json +0 -23
  361. package/dist/i18n/locales/zh-CN/ccjk-skills.json +0 -22
  362. package/dist/i18n/locales/zh-CN/ccjk.json +0 -276
  363. package/dist/i18n/locales/zh-CN/claude-md.json +0 -73
  364. package/dist/i18n/locales/zh-CN/cloud-setup.json +0 -31
  365. package/dist/i18n/locales/zh-CN/cloud-sync.json +0 -147
  366. package/dist/i18n/locales/zh-CN/cloud.json +0 -40
  367. package/dist/i18n/locales/zh-CN/cloudPlugins.json +0 -118
  368. package/dist/i18n/locales/zh-CN/config.json +0 -108
  369. package/dist/i18n/locales/zh-CN/context.json +0 -85
  370. package/dist/i18n/locales/zh-CN/dashboard.json +0 -78
  371. package/dist/i18n/locales/zh-CN/evolution.json +0 -54
  372. package/dist/i18n/locales/zh-CN/hooks.json +0 -74
  373. package/dist/i18n/locales/zh-CN/hooksSync.json +0 -133
  374. package/dist/i18n/locales/zh-CN/interview.json +0 -104
  375. package/dist/i18n/locales/zh-CN/lsp.json +0 -78
  376. package/dist/i18n/locales/zh-CN/marketplace.json +0 -116
  377. package/dist/i18n/locales/zh-CN/memory.json +0 -23
  378. package/dist/i18n/locales/zh-CN/notification.json +0 -307
  379. package/dist/i18n/locales/zh-CN/permissions.json +0 -95
  380. package/dist/i18n/locales/zh-CN/persistence.json +0 -127
  381. package/dist/i18n/locales/zh-CN/plugins.json +0 -146
  382. package/dist/i18n/locales/zh-CN/quick-actions.json +0 -78
  383. package/dist/i18n/locales/zh-CN/registry.json +0 -54
  384. package/dist/i18n/locales/zh-CN/remote.json +0 -93
  385. package/dist/i18n/locales/zh-CN/sandbox.json +0 -44
  386. package/dist/i18n/locales/zh-CN/setup.json +0 -44
  387. package/dist/i18n/locales/zh-CN/shencha.json +0 -14
  388. package/dist/i18n/locales/zh-CN/skills.json +0 -100
  389. package/dist/i18n/locales/zh-CN/skillsSync.json +0 -74
  390. package/dist/i18n/locales/zh-CN/smartGuide.json +0 -49
  391. package/dist/i18n/locales/zh-CN/stats.json +0 -20
  392. package/dist/i18n/locales/zh-CN/subagent.json +0 -69
  393. package/dist/i18n/locales/zh-CN/superpowers.json +0 -117
  394. package/dist/i18n/locales/zh-CN/team.json +0 -7
  395. package/dist/i18n/locales/zh-CN/thinking.json +0 -65
  396. package/dist/i18n/locales/zh-CN/vim.json +0 -169
  397. package/dist/i18n/locales/zh-CN/workspace.json +0 -108
  398. package/dist/shared/ccjk.5bEolFrk.mjs +0 -254
  399. package/dist/shared/ccjk.8oaxX4iR.mjs +0 -90
  400. package/dist/shared/ccjk.B2U7DsPy.mjs +0 -31
  401. package/dist/shared/ccjk.B2f-cwUP.mjs +0 -468
  402. package/dist/shared/ccjk.BAGoDD49.mjs +0 -36
  403. package/dist/shared/ccjk.BBtCGd_g.mjs +0 -899
  404. package/dist/shared/ccjk.BFQ7yr5S.mjs +0 -16
  405. package/dist/shared/ccjk.BLsIiTqO.mjs +0 -449
  406. package/dist/shared/ccjk.BXv8aYs1.mjs +0 -170
  407. package/dist/shared/ccjk.BnsY5WxD.mjs +0 -171
  408. package/dist/shared/ccjk.BoApaI4j.mjs +0 -28
  409. package/dist/shared/ccjk.Bq8TqZG_.mjs +0 -189
  410. package/dist/shared/ccjk.BtrioX1Z.mjs +0 -25
  411. package/dist/shared/ccjk.Bx_rmYfN.mjs +0 -69
  412. package/dist/shared/ccjk.BzPbSEP2.mjs +0 -115
  413. package/dist/shared/ccjk.C0WLUnFV.mjs +0 -293
  414. package/dist/shared/ccjk.C1hANZTu.mjs +0 -19
  415. package/dist/shared/ccjk.C2jHOZVP.mjs +0 -52
  416. package/dist/shared/ccjk.CNhnT6uQ.mjs +0 -636
  417. package/dist/shared/ccjk.COweQ1RR.mjs +0 -5
  418. package/dist/shared/ccjk.CfKKcvWy.mjs +0 -126
  419. package/dist/shared/ccjk.Cjgrln_h.mjs +0 -297
  420. package/dist/shared/ccjk.CoCHVXl3.mjs +0 -3951
  421. package/dist/shared/ccjk.CwGZSTAK.mjs +0 -319
  422. package/dist/shared/ccjk.CxpGa6MC.mjs +0 -2724
  423. package/dist/shared/ccjk.D-magaEx.mjs +0 -763
  424. package/dist/shared/ccjk.D0g2ABGg.mjs +0 -171
  425. package/dist/shared/ccjk.D6ycHbak.mjs +0 -270
  426. package/dist/shared/ccjk.D75wivnp.mjs +0 -142
  427. package/dist/shared/ccjk.DDL-4C-k.mjs +0 -100
  428. package/dist/shared/ccjk.DFRPtmK_.mjs +0 -75
  429. package/dist/shared/ccjk.DMV3x5Sd.mjs +0 -299
  430. package/dist/shared/ccjk.DZ2LLOa-.mjs +0 -2195
  431. package/dist/shared/ccjk.DbigonEQ.mjs +0 -698
  432. package/dist/shared/ccjk.DcMvE7lf.mjs +0 -618
  433. package/dist/shared/ccjk.DeWpAShp.mjs +0 -1828
  434. package/dist/shared/ccjk.DhJ1kyDR.mjs +0 -30
  435. package/dist/shared/ccjk.DlTXS9rP.mjs +0 -224
  436. package/dist/shared/ccjk.DopKzo3z.mjs +0 -305
  437. package/dist/shared/ccjk.DsZsc4LR.mjs +0 -1280
  438. package/dist/shared/ccjk.DuzJZlgj.mjs +0 -418
  439. package/dist/shared/ccjk.Dxgd2vjc.mjs +0 -444
  440. package/dist/shared/ccjk.J8YiPsOw.mjs +0 -259
  441. package/dist/shared/ccjk.KfSWcGlE.mjs +0 -38
  442. package/dist/shared/ccjk.L7yC58_i.mjs +0 -225
  443. package/dist/shared/ccjk.MwtjAULc.mjs +0 -1447
  444. package/dist/shared/ccjk.OJKHVSOb.mjs +0 -2005
  445. package/dist/shared/ccjk.OTnevPNE.mjs +0 -225
  446. package/dist/shared/ccjk.RyizuzOI.mjs +0 -21
  447. package/dist/shared/ccjk.T_cX87dY.mjs +0 -15
  448. package/dist/shared/ccjk.bQ7Dh1g4.mjs +0 -249
  449. package/dist/shared/ccjk.gDEDGD_t.mjs +0 -38
  450. package/dist/shared/ccjk.hoqrwWdN.mjs +0 -333
  451. package/dist/shared/ccjk.i_vn-9C3.mjs +0 -317
  452. package/dist/shared/ccjk.lG3ccFjm.mjs +0 -885
  453. package/dist/shared/ccjk.wLJHO0Af.mjs +0 -244
  454. package/dist/shared/ccjk.y-a_1vK4.mjs +0 -5127
  455. package/dist/templates/agents/README.md +0 -78
  456. package/dist/templates/agents/fullstack-developer.json +0 -70
  457. package/dist/templates/agents/go-expert.json +0 -69
  458. package/dist/templates/agents/index.json +0 -64
  459. package/dist/templates/agents/python-expert.json +0 -69
  460. package/dist/templates/agents/react-specialist.json +0 -69
  461. package/dist/templates/agents/testing-automation-expert.json +0 -70
  462. package/dist/templates/agents/typescript-architect.json +0 -69
  463. package/dist/templates/claude-code/common/settings.json +0 -109
  464. package/dist/templates/common/error-prevention.md +0 -267
  465. package/dist/templates/common/karpathy-baseline.md +0 -83
  466. package/dist/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
  467. package/dist/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
  468. package/dist/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
  469. package/dist/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
  470. package/dist/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
  471. package/dist/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
  472. package/dist/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
  473. package/dist/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
  474. package/dist/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
  475. package/dist/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
  476. package/dist/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
  477. package/dist/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
  478. package/dist/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
  479. package/dist/templates/common/workflow/essential/en/feat.md +0 -92
  480. package/dist/templates/common/workflow/essential/en/goal.md +0 -147
  481. package/dist/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
  482. package/dist/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
  483. package/dist/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
  484. package/dist/templates/common/workflow/essential/zh-CN/feat.md +0 -315
  485. package/dist/templates/common/workflow/essential/zh-CN/goal.md +0 -146
  486. package/dist/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
  487. package/dist/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
  488. package/dist/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
  489. package/dist/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
  490. package/dist/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
  491. package/dist/templates/common/workflow/interview/en/interview.md +0 -67
  492. package/dist/templates/common/workflow/interview/zh-CN/interview.md +0 -67
  493. package/dist/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
  494. package/dist/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
  495. package/dist/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
  496. package/dist/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
  497. package/dist/templates/common/workflow/sixStep/en/workflow.md +0 -83
  498. package/dist/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
  499. package/dist/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
  500. package/dist/templates/hooks/README.md +0 -212
  501. package/dist/templates/hooks/git-workflow-hooks.md +0 -551
  502. package/dist/templates/hooks/post-test/coverage.json +0 -21
  503. package/dist/templates/hooks/post-test/summary.json +0 -21
  504. package/dist/templates/hooks/post-test-coverage.md +0 -434
  505. package/dist/templates/hooks/pre-commit/eslint.json +0 -22
  506. package/dist/templates/hooks/pre-commit/prettier.json +0 -22
  507. package/dist/templates/hooks/pre-commit-black.md +0 -274
  508. package/dist/templates/hooks/pre-commit-eslint.md +0 -153
  509. package/dist/templates/hooks/pre-commit-gofmt.md +0 -284
  510. package/dist/templates/hooks/pre-commit-prettier.md +0 -212
  511. package/dist/templates/hooks/pre-commit-type-check.md +0 -377
  512. package/dist/templates/skills/ccjk-init.md +0 -154
  513. package/dist/templates/skills/ccjk-mcp-setup.md +0 -205
  514. package/dist/templates/skills/ccjk-troubleshoot.md +0 -228
  515. package/dist/templates/skills/django-patterns.md +0 -1016
  516. package/dist/templates/skills/git-workflow.md +0 -748
  517. package/dist/templates/skills/go-idioms.md +0 -963
  518. package/dist/templates/skills/index.json +0 -132
  519. package/dist/templates/skills/nextjs-optimization.md +0 -694
  520. package/dist/templates/skills/python-pep8.md +0 -852
  521. package/dist/templates/skills/react-patterns.md +0 -686
  522. package/dist/templates/skills/rust-patterns.md +0 -1057
  523. package/dist/templates/skills/security-best-practices.md +0 -1413
  524. package/dist/templates/skills/testing-best-practices.md +0 -1315
  525. package/dist/templates/skills/ts-best-practices.md +0 -354
  526. /package/{dist/templates/common/workflow/essential/en → templates/claude-code/zh-CN/workflow/common}/agents/get-current-datetime.md +0 -0
  527. /package/{dist/templates/common/workflow/essential/en → templates/claude-code/zh-CN/workflow/common/commands}/init-project.md +0 -0
  528. /package/{dist/templates/common/workflow/essential/en → templates/claude-code/zh-CN/workflow/plan}/agents/ui-ux-designer.md +0 -0
  529. /package/{dist/templates/common/workflow/git/en → templates/common/workflow/git/zh-CN}/git-cleanBranches.md +0 -0
  530. /package/{dist/templates/common/workflow/git/en → templates/common/workflow/git/zh-CN}/git-commit.md +0 -0
  531. /package/{dist/templates/common/workflow/git/en → templates/common/workflow/git/zh-CN}/git-rollback.md +0 -0
  532. /package/{dist/templates/common/workflow/git/en → templates/common/workflow/git/zh-CN}/git-worktree.md +0 -0
@@ -0,0 +1,731 @@
1
+ import dayjs from 'dayjs';
2
+ import { join } from 'pathe';
3
+ import { c as CCJK_CONFIG_FILE, C as CCJK_CONFIG_DIR, as as ensureDir, at as readDefaultTomlConfig, au as createDefaultTomlConfig, av as exists, aw as readJsonConfig, ax as writeTomlConfig, S as SETTINGS_FILE, ay as clearModelEnv, az as copyFile } from './simple-config.mjs';
4
+ import 'node:fs';
5
+ import 'node:process';
6
+ import 'ansis';
7
+ import 'inquirer';
8
+ import 'node:child_process';
9
+ import 'node:os';
10
+ import 'node:util';
11
+ import 'node:url';
12
+ import '@rainbowatcher/toml-edit-js';
13
+ import 'inquirer-toggle';
14
+ import 'ora';
15
+ import 'tinyexec';
16
+ import 'semver';
17
+ import 'node:fs/promises';
18
+ import 'i18next';
19
+ import 'i18next-fs-backend';
20
+
21
+ class ClaudeCodeConfigManager {
22
+ static CONFIG_FILE = CCJK_CONFIG_FILE;
23
+ static LEGACY_CONFIG_FILE = join(CCJK_CONFIG_DIR, "claude-code-configs.json");
24
+ /**
25
+ * Ensure configuration directory exists
26
+ */
27
+ static ensureConfigDir() {
28
+ ensureDir(CCJK_CONFIG_DIR);
29
+ }
30
+ /**
31
+ * Read TOML configuration
32
+ */
33
+ static readTomlConfig() {
34
+ return readDefaultTomlConfig();
35
+ }
36
+ /**
37
+ * Load TOML configuration, falling back to default when missing
38
+ */
39
+ static loadTomlConfig() {
40
+ const existingConfig = this.readTomlConfig();
41
+ if (existingConfig) {
42
+ return existingConfig;
43
+ }
44
+ return createDefaultTomlConfig();
45
+ }
46
+ /**
47
+ * Migrate legacy JSON-based configuration into TOML storage
48
+ */
49
+ static migrateFromLegacyConfig() {
50
+ if (!exists(this.LEGACY_CONFIG_FILE)) {
51
+ return null;
52
+ }
53
+ try {
54
+ const legacyConfig = readJsonConfig(this.LEGACY_CONFIG_FILE);
55
+ if (!legacyConfig) {
56
+ return null;
57
+ }
58
+ const normalizedProfiles = {};
59
+ const existingKeys = /* @__PURE__ */ new Set();
60
+ let migratedCurrentKey = "";
61
+ Object.entries(legacyConfig.profiles || {}).forEach(([legacyKey, profile]) => {
62
+ const sourceProfile = profile;
63
+ const name = sourceProfile.name?.trim() || legacyKey;
64
+ const baseKey = this.generateProfileId(name);
65
+ let uniqueKey = baseKey || legacyKey;
66
+ let suffix = 2;
67
+ while (existingKeys.has(uniqueKey)) {
68
+ uniqueKey = `${baseKey || legacyKey}-${suffix++}`;
69
+ }
70
+ existingKeys.add(uniqueKey);
71
+ const sanitizedProfile = this.sanitizeProfile({
72
+ ...sourceProfile,
73
+ name
74
+ });
75
+ normalizedProfiles[uniqueKey] = {
76
+ ...sanitizedProfile,
77
+ id: uniqueKey
78
+ };
79
+ if (legacyConfig.currentProfileId === legacyKey || legacyConfig.currentProfileId === sourceProfile.id) {
80
+ migratedCurrentKey = uniqueKey;
81
+ }
82
+ });
83
+ if (!migratedCurrentKey && legacyConfig.currentProfileId) {
84
+ const fallbackKey = this.generateProfileId(legacyConfig.currentProfileId);
85
+ if (existingKeys.has(fallbackKey)) {
86
+ migratedCurrentKey = fallbackKey;
87
+ }
88
+ }
89
+ if (!migratedCurrentKey && existingKeys.size > 0) {
90
+ migratedCurrentKey = Array.from(existingKeys)[0];
91
+ }
92
+ const migratedConfig = {
93
+ currentProfileId: migratedCurrentKey,
94
+ profiles: normalizedProfiles
95
+ };
96
+ this.writeConfig(migratedConfig);
97
+ return migratedConfig;
98
+ } catch (error) {
99
+ console.error("Failed to migrate legacy Claude Code config:", error);
100
+ return null;
101
+ }
102
+ }
103
+ /**
104
+ * Read configuration
105
+ */
106
+ static readConfig() {
107
+ try {
108
+ const tomlConfig = readDefaultTomlConfig();
109
+ if (!tomlConfig || !tomlConfig.claudeCode) {
110
+ return this.migrateFromLegacyConfig();
111
+ }
112
+ const { claudeCode } = tomlConfig;
113
+ const rawProfiles = claudeCode.profiles || {};
114
+ const sanitizedProfiles = Object.fromEntries(
115
+ Object.entries(rawProfiles).map(([key, profile]) => {
116
+ const storedProfile = this.sanitizeProfile({
117
+ ...profile,
118
+ name: profile.name || key
119
+ });
120
+ return [key, { ...storedProfile, id: key }];
121
+ })
122
+ );
123
+ const configData = {
124
+ currentProfileId: claudeCode.currentProfile || "",
125
+ profiles: sanitizedProfiles
126
+ };
127
+ if (Object.keys(configData.profiles).length === 0) {
128
+ const migrated = this.migrateFromLegacyConfig();
129
+ if (migrated) {
130
+ return migrated;
131
+ }
132
+ }
133
+ return configData;
134
+ } catch (error) {
135
+ console.error("Failed to read Claude Code config:", error);
136
+ return null;
137
+ }
138
+ }
139
+ /**
140
+ * Write configuration
141
+ */
142
+ static writeConfig(config) {
143
+ try {
144
+ this.ensureConfigDir();
145
+ const keyMap = /* @__PURE__ */ new Map();
146
+ const sanitizedProfiles = Object.fromEntries(
147
+ Object.entries(config.profiles).map(([key, profile]) => {
148
+ const normalizedName = profile.name?.trim() || key;
149
+ const profileKey = this.generateProfileId(normalizedName);
150
+ keyMap.set(key, profileKey);
151
+ const sanitizedProfile = this.sanitizeProfile({
152
+ ...profile,
153
+ name: normalizedName
154
+ });
155
+ return [profileKey, sanitizedProfile];
156
+ })
157
+ );
158
+ const tomlConfig = this.loadTomlConfig();
159
+ const nextTomlConfig = {
160
+ ...tomlConfig,
161
+ claudeCode: {
162
+ ...tomlConfig.claudeCode,
163
+ currentProfile: keyMap.get(config.currentProfileId) || config.currentProfileId,
164
+ profiles: sanitizedProfiles
165
+ }
166
+ };
167
+ writeTomlConfig(this.CONFIG_FILE, nextTomlConfig);
168
+ } catch (error) {
169
+ console.error("Failed to write Claude Code config:", error);
170
+ throw new Error(`Failed to write config: ${error instanceof Error ? error.message : String(error)}`);
171
+ }
172
+ }
173
+ /**
174
+ * Create empty configuration
175
+ */
176
+ static createEmptyConfig() {
177
+ return {
178
+ currentProfileId: "",
179
+ profiles: {}
180
+ };
181
+ }
182
+ /**
183
+ * Apply profile settings to Claude Code runtime
184
+ */
185
+ static async applyProfileSettings(profile) {
186
+ const { ensureI18nInitialized, i18n } = await import('./simple-config.mjs').then(function (n) { return n.bi; });
187
+ ensureI18nInitialized();
188
+ try {
189
+ if (!profile) {
190
+ const { switchToOfficialLogin } = await import('./simple-config.mjs').then(function (n) { return n.bm; });
191
+ switchToOfficialLogin();
192
+ return;
193
+ }
194
+ const { readJsonConfig: readJsonConfig2, writeJsonConfig } = await import('./simple-config.mjs').then(function (n) { return n.bk; });
195
+ const settings = readJsonConfig2(SETTINGS_FILE) || {};
196
+ if (!settings.env)
197
+ settings.env = {};
198
+ clearModelEnv(settings.env);
199
+ let shouldRestartCcr = false;
200
+ if (profile.authType === "api_key") {
201
+ settings.env.ANTHROPIC_API_KEY = profile.apiKey;
202
+ delete settings.env.ANTHROPIC_AUTH_TOKEN;
203
+ } else if (profile.authType === "auth_token") {
204
+ settings.env.ANTHROPIC_AUTH_TOKEN = profile.apiKey;
205
+ delete settings.env.ANTHROPIC_API_KEY;
206
+ } else if (profile.authType === "ccr_proxy") {
207
+ const { readCcrConfig } = await import('./simple-config.mjs').then(function (n) { return n.bn; });
208
+ const ccrConfig = readCcrConfig();
209
+ if (!ccrConfig) {
210
+ throw new Error(i18n.t("ccr:ccrNotConfigured") || "CCR proxy configuration not found");
211
+ }
212
+ const host = ccrConfig.HOST || "127.0.0.1";
213
+ const port = ccrConfig.PORT || 3456;
214
+ const apiKey = ccrConfig.APIKEY || "sk-ccjk-x-ccr";
215
+ settings.env.ANTHROPIC_BASE_URL = `http://${host}:${port}`;
216
+ settings.env.ANTHROPIC_API_KEY = apiKey;
217
+ delete settings.env.ANTHROPIC_AUTH_TOKEN;
218
+ shouldRestartCcr = true;
219
+ }
220
+ if (profile.authType !== "ccr_proxy") {
221
+ if (profile.baseUrl)
222
+ settings.env.ANTHROPIC_BASE_URL = profile.baseUrl;
223
+ else
224
+ delete settings.env.ANTHROPIC_BASE_URL;
225
+ }
226
+ const hasModelConfig = Boolean(
227
+ profile.primaryModel || profile.defaultHaikuModel || profile.defaultSonnetModel || profile.defaultOpusModel
228
+ );
229
+ if (hasModelConfig) {
230
+ if (profile.primaryModel)
231
+ settings.env.ANTHROPIC_MODEL = profile.primaryModel;
232
+ if (profile.defaultHaikuModel)
233
+ settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = profile.defaultHaikuModel;
234
+ if (profile.defaultSonnetModel)
235
+ settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = profile.defaultSonnetModel;
236
+ if (profile.defaultOpusModel)
237
+ settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = profile.defaultOpusModel;
238
+ } else {
239
+ clearModelEnv(settings.env);
240
+ }
241
+ writeJsonConfig(SETTINGS_FILE, settings);
242
+ const { setPrimaryApiKey, addCompletedOnboarding } = await import('./simple-config.mjs').then(function (n) { return n.bl; });
243
+ setPrimaryApiKey();
244
+ addCompletedOnboarding();
245
+ if (shouldRestartCcr) {
246
+ const { runCcrRestart } = await import('./commands.mjs');
247
+ await runCcrRestart();
248
+ }
249
+ } catch (error) {
250
+ const reason = error instanceof Error ? error.message : String(error);
251
+ throw new Error(`${i18n.t("multi-config:failedToApplySettings")}: ${reason}`);
252
+ }
253
+ }
254
+ static async applyCurrentProfile() {
255
+ const currentProfile = this.getCurrentProfile();
256
+ await this.applyProfileSettings(currentProfile);
257
+ }
258
+ /**
259
+ * Remove unsupported fields from profile payload
260
+ */
261
+ static sanitizeProfile(profile) {
262
+ const sanitized = {
263
+ name: profile.name,
264
+ authType: profile.authType
265
+ };
266
+ if (profile.apiKey)
267
+ sanitized.apiKey = profile.apiKey;
268
+ if (profile.baseUrl)
269
+ sanitized.baseUrl = profile.baseUrl;
270
+ if (profile.primaryModel)
271
+ sanitized.primaryModel = profile.primaryModel;
272
+ if (profile.defaultHaikuModel)
273
+ sanitized.defaultHaikuModel = profile.defaultHaikuModel;
274
+ if (profile.defaultSonnetModel)
275
+ sanitized.defaultSonnetModel = profile.defaultSonnetModel;
276
+ if (profile.defaultOpusModel)
277
+ sanitized.defaultOpusModel = profile.defaultOpusModel;
278
+ return sanitized;
279
+ }
280
+ /**
281
+ * Backup configuration
282
+ */
283
+ static backupConfig() {
284
+ try {
285
+ if (!exists(this.CONFIG_FILE)) {
286
+ return null;
287
+ }
288
+ const timestamp = dayjs().format("YYYY-MM-DD_HH-mm-ss");
289
+ const backupPath = join(CCJK_CONFIG_DIR, `config.backup.${timestamp}.toml`);
290
+ copyFile(this.CONFIG_FILE, backupPath);
291
+ return backupPath;
292
+ } catch (error) {
293
+ console.error("Failed to backup Claude Code config:", error);
294
+ return null;
295
+ }
296
+ }
297
+ /**
298
+ * Add configuration
299
+ */
300
+ static async addProfile(profile) {
301
+ try {
302
+ const validationErrors = this.validateProfile(profile);
303
+ if (validationErrors.length > 0) {
304
+ return {
305
+ success: false,
306
+ error: `Validation failed: ${validationErrors.join(", ")}`
307
+ };
308
+ }
309
+ const backupPath = this.backupConfig();
310
+ let config = this.readConfig();
311
+ if (!config) {
312
+ config = this.createEmptyConfig();
313
+ }
314
+ if (profile.id && config.profiles[profile.id]) {
315
+ return {
316
+ success: false,
317
+ error: `Profile with ID "${profile.id}" already exists`,
318
+ backupPath: backupPath || void 0
319
+ };
320
+ }
321
+ const normalizedName = profile.name.trim();
322
+ const profileKey = this.generateProfileId(normalizedName);
323
+ const existingNames = Object.values(config.profiles).map((p) => p.name || "");
324
+ if (config.profiles[profileKey] || existingNames.some((name) => name.toLowerCase() === normalizedName.toLowerCase())) {
325
+ return {
326
+ success: false,
327
+ error: `Profile with name "${profile.name}" already exists`,
328
+ backupPath: backupPath || void 0
329
+ };
330
+ }
331
+ const sanitizedProfile = this.sanitizeProfile({
332
+ ...profile,
333
+ name: normalizedName
334
+ });
335
+ const runtimeProfile = {
336
+ ...sanitizedProfile,
337
+ id: profileKey
338
+ };
339
+ config.profiles[profileKey] = runtimeProfile;
340
+ if (!config.currentProfileId) {
341
+ config.currentProfileId = profileKey;
342
+ }
343
+ this.writeConfig(config);
344
+ return {
345
+ success: true,
346
+ backupPath: backupPath || void 0,
347
+ addedProfile: runtimeProfile
348
+ };
349
+ } catch (error) {
350
+ return {
351
+ success: false,
352
+ error: error instanceof Error ? error.message : String(error)
353
+ };
354
+ }
355
+ }
356
+ /**
357
+ * Update configuration
358
+ */
359
+ static async updateProfile(id, data) {
360
+ try {
361
+ const validationErrors = this.validateProfile(data, true);
362
+ if (validationErrors.length > 0) {
363
+ return {
364
+ success: false,
365
+ error: `Validation failed: ${validationErrors.join(", ")}`
366
+ };
367
+ }
368
+ const backupPath = this.backupConfig();
369
+ const config = this.readConfig();
370
+ if (!config || !config.profiles[id]) {
371
+ return {
372
+ success: false,
373
+ error: `Profile with ID "${id}" not found`,
374
+ backupPath: backupPath || void 0
375
+ };
376
+ }
377
+ const existingProfile = config.profiles[id];
378
+ const nextName = data.name !== void 0 ? data.name.trim() : existingProfile.name;
379
+ const nextKey = this.generateProfileId(nextName);
380
+ const nameChanged = nextKey !== id;
381
+ if (nameChanged) {
382
+ const duplicateName = Object.entries(config.profiles).some(([key, profile]) => key !== id && (profile.name || "").toLowerCase() === nextName.toLowerCase());
383
+ if (duplicateName || config.profiles[nextKey]) {
384
+ return {
385
+ success: false,
386
+ error: `Profile with name "${data.name}" already exists`,
387
+ backupPath: backupPath || void 0
388
+ };
389
+ }
390
+ }
391
+ const mergedProfile = this.sanitizeProfile({
392
+ ...existingProfile,
393
+ ...data,
394
+ name: nextName
395
+ });
396
+ if (nameChanged) {
397
+ delete config.profiles[id];
398
+ config.profiles[nextKey] = {
399
+ ...mergedProfile,
400
+ id: nextKey
401
+ };
402
+ if (config.currentProfileId === id) {
403
+ config.currentProfileId = nextKey;
404
+ }
405
+ } else {
406
+ config.profiles[id] = {
407
+ ...mergedProfile,
408
+ id
409
+ };
410
+ }
411
+ this.writeConfig(config);
412
+ return {
413
+ success: true,
414
+ backupPath: backupPath || void 0,
415
+ updatedProfile: {
416
+ ...mergedProfile,
417
+ id: nameChanged ? nextKey : id
418
+ }
419
+ };
420
+ } catch (error) {
421
+ return {
422
+ success: false,
423
+ error: error instanceof Error ? error.message : String(error)
424
+ };
425
+ }
426
+ }
427
+ /**
428
+ * Delete configuration
429
+ */
430
+ static async deleteProfile(id) {
431
+ try {
432
+ const backupPath = this.backupConfig();
433
+ const config = this.readConfig();
434
+ if (!config || !config.profiles[id]) {
435
+ return {
436
+ success: false,
437
+ error: `Profile with ID "${id}" not found`,
438
+ backupPath: backupPath || void 0
439
+ };
440
+ }
441
+ const profileCount = Object.keys(config.profiles).length;
442
+ if (profileCount === 1) {
443
+ return {
444
+ success: false,
445
+ error: "Cannot delete the last profile. At least one profile must remain.",
446
+ backupPath: backupPath || void 0
447
+ };
448
+ }
449
+ delete config.profiles[id];
450
+ if (config.currentProfileId === id) {
451
+ const remainingIds = Object.keys(config.profiles);
452
+ config.currentProfileId = remainingIds[0];
453
+ }
454
+ this.writeConfig(config);
455
+ return {
456
+ success: true,
457
+ backupPath: backupPath || void 0,
458
+ remainingProfiles: Object.entries(config.profiles).map(([key, profile]) => ({
459
+ ...profile,
460
+ id: key
461
+ }))
462
+ };
463
+ } catch (error) {
464
+ return {
465
+ success: false,
466
+ error: error instanceof Error ? error.message : String(error)
467
+ };
468
+ }
469
+ }
470
+ /**
471
+ * Delete multiple configurations
472
+ */
473
+ static async deleteProfiles(ids) {
474
+ try {
475
+ const backupPath = this.backupConfig();
476
+ const config = this.readConfig();
477
+ if (!config) {
478
+ return {
479
+ success: false,
480
+ error: "No configuration found",
481
+ backupPath: backupPath || void 0
482
+ };
483
+ }
484
+ const missingIds = ids.filter((id) => !config.profiles[id]);
485
+ if (missingIds.length > 0) {
486
+ return {
487
+ success: false,
488
+ error: `Profiles not found: ${missingIds.join(", ")}`,
489
+ backupPath: backupPath || void 0
490
+ };
491
+ }
492
+ const remainingCount = Object.keys(config.profiles).length - ids.length;
493
+ if (remainingCount === 0) {
494
+ return {
495
+ success: false,
496
+ error: "Cannot delete all profiles. At least one profile must remain.",
497
+ backupPath: backupPath || void 0
498
+ };
499
+ }
500
+ let newCurrentProfileId;
501
+ ids.forEach((id) => {
502
+ delete config.profiles[id];
503
+ });
504
+ if (ids.includes(config.currentProfileId)) {
505
+ const remainingIds = Object.keys(config.profiles);
506
+ config.currentProfileId = remainingIds[0];
507
+ newCurrentProfileId = config.currentProfileId;
508
+ }
509
+ this.writeConfig(config);
510
+ return {
511
+ success: true,
512
+ backupPath: backupPath || void 0,
513
+ newCurrentProfileId,
514
+ deletedProfiles: ids,
515
+ remainingProfiles: Object.entries(config.profiles).map(([key, profile]) => ({
516
+ ...profile,
517
+ id: key
518
+ }))
519
+ };
520
+ } catch (error) {
521
+ return {
522
+ success: false,
523
+ error: error instanceof Error ? error.message : String(error)
524
+ };
525
+ }
526
+ }
527
+ /**
528
+ * Generate profile ID from name
529
+ */
530
+ static generateProfileId(name) {
531
+ return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "profile";
532
+ }
533
+ /**
534
+ * Switch configuration
535
+ */
536
+ static async switchProfile(id) {
537
+ try {
538
+ const config = this.readConfig();
539
+ if (!config || !config.profiles[id]) {
540
+ return {
541
+ success: false,
542
+ error: "Profile not found"
543
+ };
544
+ }
545
+ if (config.currentProfileId === id) {
546
+ return { success: true };
547
+ }
548
+ config.currentProfileId = id;
549
+ this.writeConfig(config);
550
+ return { success: true };
551
+ } catch (error) {
552
+ return {
553
+ success: false,
554
+ error: error instanceof Error ? error.message : String(error)
555
+ };
556
+ }
557
+ }
558
+ /**
559
+ * List all configurations
560
+ */
561
+ static listProfiles() {
562
+ const config = this.readConfig();
563
+ if (!config) {
564
+ return [];
565
+ }
566
+ return Object.values(config.profiles);
567
+ }
568
+ /**
569
+ * Get current configuration
570
+ */
571
+ static getCurrentProfile() {
572
+ const config = this.readConfig();
573
+ if (!config || !config.currentProfileId) {
574
+ return null;
575
+ }
576
+ return config.profiles[config.currentProfileId] || null;
577
+ }
578
+ /**
579
+ * Get configuration by ID
580
+ */
581
+ static getProfileById(id) {
582
+ const config = this.readConfig();
583
+ if (!config) {
584
+ return null;
585
+ }
586
+ return config.profiles[id] || null;
587
+ }
588
+ /**
589
+ * Get configuration by name
590
+ */
591
+ static getProfileByName(name) {
592
+ const config = this.readConfig();
593
+ if (!config) {
594
+ return null;
595
+ }
596
+ return Object.values(config.profiles).find((p) => p.name === name) || null;
597
+ }
598
+ /**
599
+ * Sync CCR configuration
600
+ */
601
+ static async syncCcrProfile() {
602
+ try {
603
+ const { readCcrConfig } = await import('./simple-config.mjs').then(function (n) { return n.bn; });
604
+ const ccrConfig = readCcrConfig();
605
+ if (!ccrConfig) {
606
+ await this.ensureCcrProfileExists(ccrConfig);
607
+ return;
608
+ }
609
+ await this.ensureCcrProfileExists(ccrConfig);
610
+ } catch (error) {
611
+ console.error("Failed to sync CCR profile:", error);
612
+ }
613
+ }
614
+ /**
615
+ * 确保CCR配置文件存在
616
+ */
617
+ static async ensureCcrProfileExists(ccrConfig) {
618
+ const config = this.readConfig() || this.createEmptyConfig();
619
+ const ccrProfileId = "ccr-proxy";
620
+ const existingCcrProfile = config.profiles[ccrProfileId];
621
+ if (!ccrConfig) {
622
+ if (existingCcrProfile) {
623
+ delete config.profiles[ccrProfileId];
624
+ if (config.currentProfileId === ccrProfileId) {
625
+ const remainingIds = Object.keys(config.profiles);
626
+ config.currentProfileId = remainingIds[0] || "";
627
+ }
628
+ this.writeConfig(config);
629
+ }
630
+ return;
631
+ }
632
+ const host = ccrConfig.HOST || "127.0.0.1";
633
+ const port = ccrConfig.PORT || 3456;
634
+ const apiKey = ccrConfig.APIKEY || "sk-ccjk-x-ccr";
635
+ const baseUrl = `http://${host}:${port}`;
636
+ const ccrProfile = {
637
+ name: "CCR Proxy",
638
+ authType: "ccr_proxy",
639
+ baseUrl,
640
+ apiKey
641
+ };
642
+ config.profiles[ccrProfileId] = {
643
+ ...ccrProfile,
644
+ id: ccrProfileId
645
+ };
646
+ if (!config.currentProfileId) {
647
+ config.currentProfileId = ccrProfileId;
648
+ }
649
+ this.writeConfig(config);
650
+ }
651
+ /**
652
+ * Switch to official login
653
+ */
654
+ static async switchToOfficial() {
655
+ try {
656
+ const config = this.readConfig();
657
+ if (!config) {
658
+ return { success: true };
659
+ }
660
+ config.currentProfileId = "";
661
+ this.writeConfig(config);
662
+ return { success: true };
663
+ } catch (error) {
664
+ return {
665
+ success: false,
666
+ error: error instanceof Error ? error.message : String(error)
667
+ };
668
+ }
669
+ }
670
+ /**
671
+ * Switch to CCR proxy
672
+ */
673
+ static async switchToCcr() {
674
+ try {
675
+ await this.syncCcrProfile();
676
+ const config = this.readConfig();
677
+ if (!config || !config.profiles["ccr-proxy"]) {
678
+ return {
679
+ success: false,
680
+ error: "CCR proxy configuration not found. Please configure CCR first."
681
+ };
682
+ }
683
+ return await this.switchProfile("ccr-proxy");
684
+ } catch (error) {
685
+ return {
686
+ success: false,
687
+ error: error instanceof Error ? error.message : String(error)
688
+ };
689
+ }
690
+ }
691
+ /**
692
+ * Validate configuration
693
+ */
694
+ static validateProfile(profile, isUpdate = false) {
695
+ const errors = [];
696
+ if (!isUpdate && (!profile.name || typeof profile.name !== "string" || profile.name.trim() === "")) {
697
+ errors.push("Profile name is required");
698
+ }
699
+ if (profile.name && typeof profile.name !== "string") {
700
+ errors.push("Profile name must be a string");
701
+ }
702
+ if (profile.authType && !["api_key", "auth_token", "ccr_proxy"].includes(profile.authType)) {
703
+ errors.push("Invalid auth type. Must be one of: api_key, auth_token, ccr_proxy");
704
+ }
705
+ if (profile.authType === "api_key" || profile.authType === "auth_token") {
706
+ if (!profile.apiKey || typeof profile.apiKey !== "string" || profile.apiKey.trim() === "") {
707
+ errors.push("API key is required for api_key and auth_token types");
708
+ }
709
+ }
710
+ if (profile.baseUrl) {
711
+ try {
712
+ new URL(profile.baseUrl);
713
+ } catch {
714
+ errors.push("Invalid base URL format");
715
+ }
716
+ }
717
+ return errors;
718
+ }
719
+ /**
720
+ * 检查是否为最后一个配置
721
+ */
722
+ static isLastProfile(id) {
723
+ const config = this.readConfig();
724
+ if (!config || !config.profiles[id]) {
725
+ return false;
726
+ }
727
+ return Object.keys(config.profiles).length === 1;
728
+ }
729
+ }
730
+
731
+ export { ClaudeCodeConfigManager };