ccjk 14.1.2 → 14.1.5

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 (75) hide show
  1. package/dist/chunks/api-cli.mjs +5 -5
  2. package/dist/chunks/api-config-selector.mjs +18 -5
  3. package/dist/chunks/api-providers.mjs +24 -9
  4. package/dist/chunks/auto-updater.mjs +13 -13
  5. package/dist/chunks/boost.mjs +1 -1
  6. package/dist/chunks/ccjk-all.mjs +4 -4
  7. package/dist/chunks/ccjk-config.mjs +78 -1
  8. package/dist/chunks/ccjk-mcp.mjs +4 -4
  9. package/dist/chunks/ccjk-setup.mjs +4 -4
  10. package/dist/chunks/ccr.mjs +11 -11
  11. package/dist/chunks/check-updates.mjs +3 -3
  12. package/dist/chunks/claude-code-incremental-manager.mjs +8 -6
  13. package/dist/chunks/claude-config.mjs +73 -0
  14. package/dist/chunks/claude-wrapper.mjs +1 -1
  15. package/dist/chunks/cli-hook.mjs +76 -1
  16. package/dist/chunks/code-type-resolver.mjs +14 -13
  17. package/dist/chunks/codex-config-switch.mjs +2 -2
  18. package/dist/chunks/codex-provider-manager.mjs +2 -2
  19. package/dist/chunks/codex.mjs +3 -3
  20. package/dist/chunks/config-switch.mjs +5 -5
  21. package/dist/chunks/config.mjs +531 -158
  22. package/dist/chunks/config2.mjs +22 -20
  23. package/dist/chunks/config3.mjs +6 -6
  24. package/dist/chunks/constants.mjs +20 -13
  25. package/dist/chunks/doctor.mjs +1 -1
  26. package/dist/chunks/features.mjs +59 -4
  27. package/dist/chunks/fs-operations.mjs +2 -14
  28. package/dist/chunks/index.mjs +1 -1
  29. package/dist/chunks/index10.mjs +115 -100
  30. package/dist/chunks/init.mjs +121 -53
  31. package/dist/chunks/installer.mjs +28 -21
  32. package/dist/chunks/mcp-cli.mjs +6 -6
  33. package/dist/chunks/mcp.mjs +6 -6
  34. package/dist/chunks/package.mjs +1 -1
  35. package/dist/chunks/platform.mjs +3 -3
  36. package/dist/chunks/prompts.mjs +9 -7
  37. package/dist/chunks/quick-actions.mjs +1 -1
  38. package/dist/chunks/quick-provider.mjs +23 -31
  39. package/dist/chunks/quick-setup.mjs +3 -4
  40. package/dist/chunks/simple-config.mjs +57 -16
  41. package/dist/chunks/slash-commands.mjs +1 -1
  42. package/dist/chunks/smart-guide.mjs +23 -10
  43. package/dist/chunks/status.mjs +28 -24
  44. package/dist/chunks/update.mjs +19 -18
  45. package/dist/chunks/upgrade.mjs +88 -5
  46. package/dist/chunks/version-checker.mjs +2 -2
  47. package/dist/chunks/zero-config.mjs +121 -16
  48. package/dist/cli.mjs +50 -27
  49. package/dist/i18n/locales/en/configuration.json +5 -3
  50. package/dist/i18n/locales/en/language.json +1 -1
  51. package/dist/i18n/locales/en/menu.json +8 -7
  52. package/dist/i18n/locales/en/multi-config.json +1 -1
  53. package/dist/i18n/locales/zh-CN/configuration.json +5 -3
  54. package/dist/i18n/locales/zh-CN/language.json +1 -1
  55. package/dist/i18n/locales/zh-CN/menu.json +8 -7
  56. package/dist/i18n/locales/zh-CN/multi-config.json +1 -1
  57. package/dist/index.d.mts +13 -11
  58. package/dist/index.d.ts +13 -11
  59. package/dist/index.mjs +7 -7
  60. package/dist/shared/{ccjk.B6VCKdyy.mjs → ccjk.BXTrU9TN.mjs} +31 -68
  61. package/dist/shared/{ccjk.DScm_NnL.mjs → ccjk.Ccrqt7u2.mjs} +30 -1
  62. package/dist/shared/{ccjk.CVjfbEIj.mjs → ccjk.DZtwozOG.mjs} +1 -1
  63. package/dist/shared/{ccjk.D6wx-rxT.mjs → ccjk.Dxgd2vjc.mjs} +3 -3
  64. package/dist/shared/{ccjk.BO45TPXJ.mjs → ccjk.K8c6VnM2.mjs} +2 -2
  65. package/dist/shared/{ccjk.BJENIVf7.mjs → ccjk.MpkxXQJL.mjs} +179 -19
  66. package/dist/shared/{ccjk.Dh6Be-ef.mjs → ccjk.ygJzcD-n.mjs} +28 -24
  67. package/package.json +1 -30
  68. package/dist/chunks/auto-fix.mjs +0 -253
  69. package/dist/chunks/auto-init.mjs +0 -311
  70. package/dist/chunks/auto-upgrade.mjs +0 -152
  71. package/dist/chunks/migrator.mjs +0 -178
  72. package/dist/shared/ccjk.DDq2hqA5.mjs +0 -158
  73. package/dist/shared/ccjk.KPLeMP-o.mjs +0 -79
  74. package/templates/common/workflow/essential/en/agents/planner.md +0 -116
  75. package/templates/common/workflow/essential/zh-CN/agents/planner.md +0 -116
@@ -1,4 +1,4 @@
1
- import { B as buildMyclaudeProviderPresentation } from './config.mjs';
1
+ import { E as buildMyclaudeProviderPresentation } from './config.mjs';
2
2
  import a from './index5.mjs';
3
3
  import { i as inquirer } from './index6.mjs';
4
4
  import { CLOUD_ENDPOINTS, CCJK_CONFIG_DIR, SUPPORTED_LANGS, LANG_LABELS, CODE_TOOL_BANNERS, isCodeToolType, DEFAULT_CODE_TOOL_TYPE } from './constants.mjs';
@@ -27,12 +27,12 @@ import { configSwitchCommand } from './config-switch.mjs';
27
27
  import process__default from 'node:process';
28
28
  import { readFile, writeFileAtomic, ensureDir, exists, readJsonFile } from './fs-operations.mjs';
29
29
  import { workspaceDiagnostics, doctor } from './doctor.mjs';
30
- import { a as mcpList, c as mcpUninstall, m as mcpInstall, d as mcpTrending, b as mcpSearch } from '../shared/ccjk.CVjfbEIj.mjs';
30
+ import { a as mcpList, c as mcpUninstall, m as mcpInstall, d as mcpTrending, b as mcpSearch } from '../shared/ccjk.DZtwozOG.mjs';
31
31
  import { notificationCommand } from './notification.mjs';
32
32
  import { g as getRuntimeVersion } from '../shared/ccjk.gDEDGD_t.mjs';
33
33
  import { uninstall } from './uninstall.mjs';
34
34
  import { update } from './update.mjs';
35
- import { g as getRuntimeCapabilityDescriptor } from '../shared/ccjk.BO45TPXJ.mjs';
35
+ import { g as getRuntimeCapabilityDescriptor } from '../shared/ccjk.K8c6VnM2.mjs';
36
36
  import { c as checkSuperpowersInstalled, g as getSuperpowersSkills, u as updateSuperpowers, a as uninstallSuperpowers, i as installSuperpowers, b as installSuperpowersViaGit } from '../shared/ccjk.Bq8TqZG_.mjs';
37
37
 
38
38
  const execAsync = promisify(exec);
@@ -3007,9 +3007,9 @@ const LANGUAGE_SELECTION_MESSAGES = {
3007
3007
  selectLanguage: "Select CCJK display language / \u9009\u62E9 CCJK \u663E\u793A\u8BED\u8A00"
3008
3008
  };
3009
3009
  const TOOL_LABELS = {
3010
- "myclaude": {
3011
- en: "myclaude",
3012
- zh: "myclaude"
3010
+ "clavue": {
3011
+ en: "clavue",
3012
+ zh: "clavue"
3013
3013
  },
3014
3014
  "claude-code": {
3015
3015
  en: "Claude Code",
@@ -3030,7 +3030,7 @@ function resolveOnboardingCodeTool(value) {
3030
3030
  if (isPrimaryOnboardingTool(value)) {
3031
3031
  return value;
3032
3032
  }
3033
- return "myclaude";
3033
+ return "clavue";
3034
3034
  }
3035
3035
  function getToolLabel(tool, lang) {
3036
3036
  return lang === "zh-CN" ? TOOL_LABELS[tool].zh : TOOL_LABELS[tool].en;
@@ -3087,8 +3087,8 @@ async function selectOnboardingCodeTool(lang, options = {}) {
3087
3087
  message: isZh ? "\u9009\u62E9\u4EE3\u7801\u5DE5\u5177" : "Choose your code tool",
3088
3088
  choices: addNumbersToChoices([
3089
3089
  {
3090
- name: `${getToolLabel("myclaude", lang)} - ${isZh ? "Provider-first \u63A7\u5236\u4E2D\u5FC3\uFF08\u9ED8\u8BA4\u63A8\u8350\uFF09" : "Provider-first control center (recommended default)"}`,
3091
- value: "myclaude"
3090
+ name: `${getToolLabel("clavue", lang)} - ${isZh ? "Provider-first \u63A7\u5236\u4E2D\u5FC3\uFF08\u9ED8\u8BA4\u63A8\u8350\uFF09" : "Provider-first control center (recommended default)"}`,
3091
+ value: "clavue"
3092
3092
  },
3093
3093
  {
3094
3094
  name: `${getToolLabel("claude-code", lang)} - ${isZh ? "Claude \u5BB6\u65CF\u7ECF\u5178\u63A7\u5236\u4E2D\u5FC3" : "Classic Claude-family control center"}`,
@@ -3164,7 +3164,7 @@ async function runOnboardingWizard(options = {}) {
3164
3164
  console.log("");
3165
3165
  }
3166
3166
 
3167
- const NON_CODEX_TOOLS = ["claude-code", "myclaude", "aider", "continue", "cline", "cursor"];
3167
+ const NON_CODEX_TOOLS = ["claude-code", "clavue", "aider", "continue", "cline", "cursor"];
3168
3168
  const CLAUDE_FAMILY_SLASH_RULE = (descriptor) => descriptor.native.slashCommands && descriptor.configBackend === "claude-family";
3169
3169
  const MENU_ITEM_CAPABILITY_RULES = {
3170
3170
  "diagnostics": (descriptor) => descriptor.managedByCcjk.doctor,
@@ -3247,10 +3247,10 @@ const quickActionsItems = [
3247
3247
  label: "menu:oneClick.update",
3248
3248
  description: "menu:oneClick.updateDesc",
3249
3249
  category: "quick",
3250
- level: "basic",
3250
+ level: "intermediate",
3251
3251
  action: "command",
3252
3252
  icon: "\u{1F504}",
3253
- shortcut: "4",
3253
+ shortcut: "+",
3254
3254
  supportedTools: NON_CODEX_TOOLS
3255
3255
  },
3256
3256
  {
@@ -3258,21 +3258,10 @@ const quickActionsItems = [
3258
3258
  label: "menu:oneClick.notify",
3259
3259
  description: "menu:oneClick.notifyDesc",
3260
3260
  category: "quick",
3261
- level: "basic",
3261
+ level: "intermediate",
3262
3262
  action: "command",
3263
3263
  icon: "\u{1F4F1}",
3264
- shortcut: "5",
3265
- supportedTools: NON_CODEX_TOOLS
3266
- },
3267
- {
3268
- id: "switch-code-tool",
3269
- label: "menuOptions.switchCodeTool",
3270
- description: "menuDescriptions.switchCodeTool",
3271
- category: "quick",
3272
- level: "basic",
3273
- action: "command",
3274
- icon: "\u{1F504}",
3275
- shortcut: "s",
3264
+ shortcut: "n",
3276
3265
  supportedTools: NON_CODEX_TOOLS
3277
3266
  }
3278
3267
  ];
@@ -3285,7 +3274,7 @@ const configItems = [
3285
3274
  level: "basic",
3286
3275
  action: "command",
3287
3276
  icon: "\u{1F50C}",
3288
- shortcut: "6"
3277
+ shortcut: "4"
3289
3278
  },
3290
3279
  {
3291
3280
  id: "model-config",
@@ -3295,7 +3284,7 @@ const configItems = [
3295
3284
  level: "basic",
3296
3285
  action: "command",
3297
3286
  icon: "\u{1F916}",
3298
- shortcut: "7"
3287
+ shortcut: "5"
3299
3288
  },
3300
3289
  {
3301
3290
  id: "memory-config",
@@ -3305,17 +3294,17 @@ const configItems = [
3305
3294
  level: "basic",
3306
3295
  action: "command",
3307
3296
  icon: "\u{1F9E0}",
3308
- shortcut: "y"
3297
+ shortcut: "6"
3309
3298
  },
3310
3299
  {
3311
3300
  id: "permission-config",
3312
3301
  label: "menu:configCenter.permission",
3313
3302
  description: "menu:configCenter.permissionDesc",
3314
3303
  category: "config",
3315
- level: "intermediate",
3304
+ level: "basic",
3316
3305
  action: "command",
3317
3306
  icon: "\u{1F6E1}\uFE0F",
3318
- shortcut: "p",
3307
+ shortcut: "7",
3319
3308
  supportedTools: NON_CODEX_TOOLS
3320
3309
  },
3321
3310
  {
@@ -3564,7 +3553,7 @@ const levelDefinitions = {
3564
3553
  basic: {
3565
3554
  name: "Basic",
3566
3555
  description: "Essential features for getting started",
3567
- maxItems: 9,
3556
+ maxItems: 8,
3568
3557
  icon: "\u{1F331}",
3569
3558
  categories: ["quick", "config"],
3570
3559
  features: [
@@ -3572,10 +3561,11 @@ const levelDefinitions = {
3572
3561
  // #1 Core feature - one-click API setup
3573
3562
  "One-click setup",
3574
3563
  "Diagnostics",
3575
- "Update all",
3576
- "Notifications",
3577
3564
  "MCP config",
3578
3565
  "Model config",
3566
+ "Memory management",
3567
+ "One-click permissions",
3568
+ "Switch code tool",
3579
3569
  "Doctor"
3580
3570
  ]
3581
3571
  },
@@ -3811,14 +3801,14 @@ function getToolModeMeta(codeTool) {
3811
3801
  config: t("menu:toolMode.claude.config", "Primary config: ~/.claude/settings.json"),
3812
3802
  menuTitle: t("menu:toolMode.claude.menuTitle", "Claude Control Center")
3813
3803
  };
3814
- case "myclaude":
3804
+ case "clavue":
3815
3805
  return {
3816
3806
  icon: "\u25C9",
3817
- title: t("menu:toolMode.myclaude.title", "myclaude Workspace"),
3818
- summary: t("menu:toolMode.myclaude.summary", "Provider-first control center with explicit runtime status at startup."),
3819
- focus: t("menu:toolMode.myclaude.focus", "Provider profiles, routing state, model slots, and Claude-family compatible configuration."),
3820
- config: t("menu:toolMode.myclaude.config", "Primary config: ~/.claude.json (runtime) + ~/.ccjk/config.toml (reusable profiles)"),
3821
- menuTitle: t("menu:toolMode.myclaude.menuTitle", "myclaude Control Center")
3807
+ title: t("menu:toolMode.clavue.title", "Clavue Workspace"),
3808
+ summary: t("menu:toolMode.clavue.summary", "Provider-first control center with explicit runtime status at startup."),
3809
+ focus: t("menu:toolMode.clavue.focus", "Provider profiles, routing state, model slots, and Claude-family compatible configuration."),
3810
+ config: t("menu:toolMode.clavue.config", "Primary config: ~/.clavue/.clavue.json (runtime) + ~/.ccjk/config.toml (reusable profiles)"),
3811
+ menuTitle: t("menu:toolMode.clavue.menuTitle", "Clavue Control Center")
3822
3812
  };
3823
3813
  case "codex":
3824
3814
  return {
@@ -4115,6 +4105,36 @@ function printSeparator() {
4115
4105
  ${a.dim("\u2500".repeat(50))}
4116
4106
  `);
4117
4107
  }
4108
+ async function runSimpleNumericMenu(options) {
4109
+ console.log(a.green(options.title));
4110
+ {
4111
+ console.log(options.subtitle);
4112
+ }
4113
+ for (const item of options.items) {
4114
+ const description = item.description ? ` ${a.gray(`- ${item.description}`)}` : "";
4115
+ console.log(` ${a.green(`${item.key}.`)} ${item.label}${description}`);
4116
+ }
4117
+ console.log(` ${a.green("0.")} ${options.backLabel || i18n.t("common:back")}`);
4118
+ console.log("");
4119
+ const validChoices = ["0", ...options.items.map((item) => item.key)];
4120
+ const { choice } = await inquirer.prompt({
4121
+ type: "input",
4122
+ name: "choice",
4123
+ message: i18n.t("common:enterChoice"),
4124
+ validate: (value) => validChoices.includes(value) || i18n.t("common:invalidChoice")
4125
+ });
4126
+ if (!choice || choice === "0") {
4127
+ return;
4128
+ }
4129
+ const selectedItem = options.items.find((item) => item.key === choice);
4130
+ if (!selectedItem) {
4131
+ return;
4132
+ }
4133
+ await selectedItem.action();
4134
+ if (options.showSeparatorAfterAction ?? true) {
4135
+ printSeparator();
4136
+ }
4137
+ }
4118
4138
  function getCurrentCodeTool() {
4119
4139
  const config = readZcfConfig();
4120
4140
  if (config?.codeToolType && isCodeToolType(config.codeToolType)) {
@@ -4220,7 +4240,7 @@ function attachHandlers(items, codeTool) {
4220
4240
  }
4221
4241
  };
4222
4242
  case "permission-config":
4223
- return { ...item, handler: async () => await (await import('./permissions.mjs')).listPermissions({}) };
4243
+ return { ...item, handler: async () => await (await import('./features.mjs')).configureMergedPermissionsFeature() };
4224
4244
  case "config-switch":
4225
4245
  return {
4226
4246
  ...item,
@@ -4373,11 +4393,15 @@ function flattenSections(itemsBySection) {
4373
4393
  return itemsBySection.flatMap((section) => section.items);
4374
4394
  }
4375
4395
  function getProgressiveFooterCommands(codeTool) {
4376
- if (codeTool === "myclaude") {
4396
+ if (codeTool === "clavue") {
4377
4397
  return [
4378
4398
  {
4379
4399
  key: "s",
4380
4400
  label: i18n.t("menu:menuOptions.switchCodeTool")
4401
+ },
4402
+ {
4403
+ key: "+",
4404
+ label: i18n.t("menu:menuOptions.checkUpdates", "Check Updates")
4381
4405
  }
4382
4406
  ];
4383
4407
  }
@@ -4403,7 +4427,7 @@ function getProgressiveFooterCommands(codeTool) {
4403
4427
  function buildMyclaudeRuntimeSummary(syncResult) {
4404
4428
  if (!syncResult?.activeProfile) {
4405
4429
  return {
4406
- runtimeLabel: "myclaude / no active provider synced"
4430
+ runtimeLabel: "clavue / no active provider synced"
4407
4431
  };
4408
4432
  }
4409
4433
  const profile = syncResult.activeProfile;
@@ -4419,16 +4443,16 @@ function buildMyclaudeRuntimeSummary(syncResult) {
4419
4443
  opusModel ? `opus ${opusModel}` : void 0
4420
4444
  ].filter(Boolean);
4421
4445
  return {
4422
- runtimeLabel: "myclaude",
4446
+ runtimeLabel: "clavue",
4423
4447
  profileLabel: `${profile.name} (${syncResult.activeProfileId || profile.id})`,
4424
4448
  ...presentation,
4425
4449
  modelLabel: modelParts.join(" \xB7 ") || void 0
4426
4450
  };
4427
4451
  }
4428
4452
  function getMenuShellConfig(codeTool) {
4429
- if (codeTool === "codex" || codeTool === "myclaude") {
4453
+ if (codeTool === "codex" || codeTool === "clavue") {
4430
4454
  return {
4431
- allowMore: codeTool !== "myclaude",
4455
+ allowMore: codeTool !== "clavue",
4432
4456
  footerCommands: getProgressiveFooterCommands(codeTool),
4433
4457
  menuTitle: getToolModeMenuTitle(codeTool),
4434
4458
  showHero: true
@@ -4442,10 +4466,10 @@ function getMenuShellConfig(codeTool) {
4442
4466
  };
4443
4467
  }
4444
4468
  async function showProgressiveMenu(codeTool, runtimeSyncResult) {
4445
- if (codeTool !== "codex" && codeTool !== "myclaude") {
4446
- const rawItems2 = getItemsForLevel(menuState.level, "claude-code");
4469
+ if (codeTool !== "codex" && codeTool !== "clavue") {
4470
+ const rawItems2 = getItemsForLevel(menuState.level, codeTool);
4447
4471
  const items2 = attachHandlers(rawItems2, "claude-code");
4448
- const sections2 = createAllSections(menuState.level, "claude-code");
4472
+ const sections2 = createAllSections(menuState.level, codeTool);
4449
4473
  const maxItems2 = levelDefinitions[menuState.level].maxItems;
4450
4474
  const filteredSections2 = filterSectionsByItemLimit(sections2, maxItems2);
4451
4475
  const visibleItemCount2 = getVisibleItemCount(filteredSections2);
@@ -4531,7 +4555,7 @@ async function showProgressiveMenu(codeTool, runtimeSyncResult) {
4531
4555
  const menuShell = getMenuShellConfig(codeTool);
4532
4556
  const allowedCommands = ["0", "q", ...menuShell.allowMore ? ["m"] : [], ...menuShell.footerCommands.map((command) => command.key)];
4533
4557
  if (menuShell.showHero) {
4534
- console.log(renderToolModeHero(codeTool, 76, codeTool === "myclaude" ? buildMyclaudeRuntimeSummary(runtimeSyncResult) : void 0));
4558
+ console.log(renderToolModeHero(codeTool, 76, codeTool === "clavue" ? buildMyclaudeRuntimeSummary(runtimeSyncResult) : void 0));
4535
4559
  console.log("");
4536
4560
  }
4537
4561
  const menuOutput = renderMenu(
@@ -4564,7 +4588,7 @@ async function showProgressiveMenu(codeTool, runtimeSyncResult) {
4564
4588
  printSeparator();
4565
4589
  return "continue";
4566
4590
  }
4567
- if (codeTool === "codex" && input.normalized === "s") {
4591
+ if ((codeTool === "codex" || codeTool === "clavue") && input.normalized === "s") {
4568
4592
  const switched = await handleCodeToolSwitch(codeTool);
4569
4593
  if (switched) {
4570
4594
  return "switch";
@@ -4572,6 +4596,11 @@ async function showProgressiveMenu(codeTool, runtimeSyncResult) {
4572
4596
  printSeparator();
4573
4597
  return "continue";
4574
4598
  }
4599
+ if (codeTool === "clavue" && input.normalized === "+") {
4600
+ await checkUpdates();
4601
+ printSeparator();
4602
+ return "continue";
4603
+ }
4575
4604
  if (codeTool === "codex" && input.normalized === "+") {
4576
4605
  await runCodexUpdate();
4577
4606
  printSeparator();
@@ -4703,7 +4732,7 @@ async function showMoreFeaturesMenu() {
4703
4732
  await (await import('./config3.mjs')).configCommand("set", ["memory"], {});
4704
4733
  break;
4705
4734
  case "8":
4706
- await (await import('./permissions.mjs')).listPermissions({});
4735
+ await (await import('./features.mjs')).configureMergedPermissionsFeature();
4707
4736
  break;
4708
4737
  case "9":
4709
4738
  await configSwitchCommand({ codeType: codeTool });
@@ -5032,50 +5061,36 @@ async function showMarketplaceMenu() {
5032
5061
  printSeparator();
5033
5062
  }
5034
5063
  async function showHooksSyncMenu() {
5035
- i18n.language;
5036
- console.log(a.green(i18n.t("menu:hooksSync.title")));
5037
- console.log(" -------- Hooks Cloud Sync --------");
5038
- console.log(
5039
- ` ${a.green("1.")} ${i18n.t("menu:hooksSync.viewStatus")} ${a.gray(`- ${i18n.t("menu:hooksSync.viewStatusDesc")}`)}`
5040
- );
5041
- console.log(
5042
- ` ${a.green("2.")} ${i18n.t("menu:hooksSync.syncNow")} ${a.gray(`- ${i18n.t("menu:hooksSync.syncNowDesc")}`)}`
5043
- );
5044
- console.log(
5045
- ` ${a.green("3.")} ${i18n.t("menu:hooksSync.configure")} ${a.gray(`- ${i18n.t("menu:hooksSync.configureDesc")}`)}`
5046
- );
5047
- console.log(
5048
- ` ${a.green("4.")} ${i18n.t("menu:hooksSync.browseTemplates")} ${a.gray(`- ${i18n.t("menu:hooksSync.browseTemplatesDesc")}`)}`
5049
- );
5050
- console.log(` ${a.green("0.")} ${i18n.t("common:back")}`);
5051
- console.log("");
5052
- const { choice } = await inquirer.prompt({
5053
- type: "input",
5054
- name: "choice",
5055
- message: i18n.t("common:enterChoice"),
5056
- validate: (value) => {
5057
- const valid = ["1", "2", "3", "4", "0"];
5058
- return valid.includes(value) || i18n.t("common:invalidChoice");
5059
- }
5064
+ await runSimpleNumericMenu({
5065
+ title: i18n.t("menu:hooksSync.title"),
5066
+ subtitle: " -------- Hooks Cloud Sync --------",
5067
+ items: [
5068
+ {
5069
+ key: "1",
5070
+ label: i18n.t("menu:hooksSync.viewStatus"),
5071
+ description: i18n.t("menu:hooksSync.viewStatusDesc"),
5072
+ action: async () => hooksSync({ action: "list" })
5073
+ },
5074
+ {
5075
+ key: "2",
5076
+ label: i18n.t("menu:hooksSync.syncNow"),
5077
+ description: i18n.t("menu:hooksSync.syncNowDesc"),
5078
+ action: async () => hooksSync({ action: "sync" })
5079
+ },
5080
+ {
5081
+ key: "3",
5082
+ label: i18n.t("menu:hooksSync.configure"),
5083
+ description: i18n.t("menu:hooksSync.configureDesc"),
5084
+ action: async () => hooksSync({})
5085
+ },
5086
+ {
5087
+ key: "4",
5088
+ label: i18n.t("menu:hooksSync.browseTemplates"),
5089
+ description: i18n.t("menu:hooksSync.browseTemplatesDesc"),
5090
+ action: async () => hooksSync({ action: "templates" })
5091
+ }
5092
+ ]
5060
5093
  });
5061
- if (!choice || choice === "0") {
5062
- return;
5063
- }
5064
- switch (choice) {
5065
- case "1":
5066
- await hooksSync({ action: "list" });
5067
- break;
5068
- case "2":
5069
- await hooksSync({ action: "sync" });
5070
- break;
5071
- case "3":
5072
- await hooksSync({});
5073
- break;
5074
- case "4":
5075
- await hooksSync({ action: "templates" });
5076
- break;
5077
- }
5078
- printSeparator();
5079
5094
  }
5080
5095
  async function showQuickActionsMenu() {
5081
5096
  const lang = i18n.language;
@@ -5262,7 +5277,7 @@ async function showOutputStylesMenu() {
5262
5277
  async function handleCodeToolSwitch(current) {
5263
5278
  const CODE_TOOL_LABELS = {
5264
5279
  "claude-code": "Claude Code",
5265
- "myclaude": "myclaude",
5280
+ "clavue": "clavue",
5266
5281
  "codex": "Codex",
5267
5282
  "aider": "Aider",
5268
5283
  "continue": "Continue",
@@ -5307,7 +5322,7 @@ async function showMainMenu(options = {}) {
5307
5322
  if (await isFirstTimeUser()) {
5308
5323
  await runOnboardingWizard({ preferredCodeTool: options.codeType });
5309
5324
  }
5310
- let myclaudeRuntimeSyncResult = null;
5325
+ let clavueRuntimeSyncResult = null;
5311
5326
  try {
5312
5327
  const previousType = getCurrentCodeTool();
5313
5328
  const resolvedType = await resolveStartupCodeType({
@@ -5328,11 +5343,11 @@ async function showMainMenu(options = {}) {
5328
5343
  while (!exitMenu) {
5329
5344
  const codeTool = getCurrentCodeTool();
5330
5345
  displayBannerWithInfo(CODE_TOOL_BANNERS[codeTool] || "CCJK");
5331
- if (codeTool === "myclaude") {
5332
- const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.F; });
5333
- myclaudeRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
5346
+ if (codeTool === "clavue") {
5347
+ const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.H; });
5348
+ clavueRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
5334
5349
  }
5335
- const result = await showProgressiveMenu(codeTool, myclaudeRuntimeSyncResult);
5350
+ const result = await showProgressiveMenu(codeTool, clavueRuntimeSyncResult);
5336
5351
  if (result === "exit") {
5337
5352
  exitMenu = true;
5338
5353
  } else if (result === "switch") {