ccjk 13.6.7 → 14.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 (51) hide show
  1. package/dist/chunks/api-cli.mjs +4 -2
  2. package/dist/chunks/api-config-selector.mjs +2 -4
  3. package/dist/chunks/auto-fix.mjs +3 -1
  4. package/dist/chunks/ccjk-all.mjs +5 -2
  5. package/dist/chunks/ccjk-mcp.mjs +5 -2
  6. package/dist/chunks/ccjk-setup.mjs +4 -1
  7. package/dist/chunks/ccr.mjs +5 -8
  8. package/dist/chunks/check-updates.mjs +1 -4
  9. package/dist/chunks/claude-code-incremental-manager.mjs +4 -6
  10. package/dist/chunks/code-type-resolver.mjs +878 -0
  11. package/dist/chunks/codex-config-switch.mjs +0 -1
  12. package/dist/chunks/codex-provider-manager.mjs +0 -1
  13. package/dist/chunks/codex.mjs +2 -2
  14. package/dist/chunks/config-switch.mjs +2 -4
  15. package/dist/chunks/config.mjs +1144 -5
  16. package/dist/chunks/config2.mjs +6 -4
  17. package/dist/chunks/config3.mjs +4 -2
  18. package/dist/chunks/doctor.mjs +1 -1
  19. package/dist/chunks/evolution.mjs +47 -27
  20. package/dist/chunks/features.mjs +2 -3
  21. package/dist/chunks/index10.mjs +115 -12
  22. package/dist/chunks/init.mjs +44 -17
  23. package/dist/chunks/installer.mjs +2 -2
  24. package/dist/chunks/mcp-cli.mjs +18 -19
  25. package/dist/chunks/mcp.mjs +6 -7
  26. package/dist/chunks/package.mjs +1 -1
  27. package/dist/chunks/platform.mjs +1 -1
  28. package/dist/chunks/quick-setup.mjs +2 -5
  29. package/dist/chunks/slash-commands.mjs +1 -1
  30. package/dist/chunks/status.mjs +63 -16
  31. package/dist/chunks/uninstall.mjs +1 -3
  32. package/dist/chunks/update.mjs +4 -5
  33. package/dist/cli.mjs +58 -17
  34. package/dist/i18n/locales/en/configuration.json +6 -2
  35. package/dist/i18n/locales/en/menu.json +7 -0
  36. package/dist/i18n/locales/zh-CN/configuration.json +6 -2
  37. package/dist/i18n/locales/zh-CN/menu.json +7 -0
  38. package/dist/index.d.mts +64 -17
  39. package/dist/index.d.ts +64 -17
  40. package/dist/index.mjs +12 -720
  41. package/dist/shared/{ccjk.DHaUdzX3.mjs → ccjk.B6VCKdyy.mjs} +2 -2
  42. package/dist/shared/ccjk.BO45TPXJ.mjs +807 -0
  43. package/dist/shared/{ccjk.B4aXNclK.mjs → ccjk.CVjfbEIj.mjs} +1 -1
  44. package/dist/shared/{ccjk.Dz0ssUQx.mjs → ccjk.Dh6Be-ef.mjs} +1 -1
  45. package/package.json +1 -1
  46. package/dist/chunks/claude-code-config-manager.mjs +0 -811
  47. package/dist/chunks/claude-config.mjs +0 -286
  48. package/dist/chunks/intent-engine.mjs +0 -142
  49. package/dist/chunks/smart-defaults.mjs +0 -425
  50. package/dist/shared/ccjk.DJuyfrlL.mjs +0 -348
  51. package/dist/shared/ccjk.yYQMbHH3.mjs +0 -115
@@ -8,8 +8,7 @@ import { d as dayjs } from '../shared/ccjk.RyizuzOI.mjs';
8
8
  import { i as inquirer } from './index6.mjs';
9
9
  import { SETTINGS_FILE } from './constants.mjs';
10
10
  import { ensureI18nInitialized, i18n } from './index2.mjs';
11
- import { d as setPrimaryApiKey, e as addCompletedOnboarding } from './claude-config.mjs';
12
- import { b as backupExistingConfig } from './config.mjs';
11
+ import { l as setPrimaryApiKey, n as addCompletedOnboarding, b as backupExistingConfig } from './config.mjs';
13
12
  import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
14
13
  import { p as promptBoolean } from '../shared/ccjk.DZ2LLOa-.mjs';
15
14
  import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
@@ -34,6 +33,9 @@ import 'node:stream';
34
33
  import './fs-operations.mjs';
35
34
  import 'node:fs/promises';
36
35
  import '../shared/ccjk.DScm_NnL.mjs';
36
+ import './ccjk-config.mjs';
37
+ import '../shared/ccjk.BBtCGd_g.mjs';
38
+ import './index3.mjs';
37
39
  import '../shared/ccjk.DeWpAShp.mjs';
38
40
 
39
41
  const PROVIDER_PRESETS_URL = "https://pub-0dc3e1677e894f07bbea11b17a29e032.r2.dev/providers.json";
@@ -415,7 +417,7 @@ async function setupCcrConfiguration() {
415
417
  console.log(a.yellow(`${i18n.t("ccr:keepingExistingConfig")}`));
416
418
  await configureCcrProxy(existingConfig);
417
419
  try {
418
- const { manageApiKeyApproval } = await import('./claude-config.mjs').then(function (n) { return n.l; });
420
+ const { manageApiKeyApproval } = await import('./config.mjs').then(function (n) { return n.E; });
419
421
  const apiKey = existingConfig.APIKEY || "sk-ccjk-x-ccr";
420
422
  manageApiKeyApproval(apiKey);
421
423
  console.log(a.green(`\u2714 ${i18n.t("ccr:apiKeyApprovalSuccess")}`));
@@ -449,7 +451,7 @@ async function setupCcrConfiguration() {
449
451
  console.error(a.red(i18n.t("errors:failedToSetOnboarding")), error);
450
452
  }
451
453
  try {
452
- const { manageApiKeyApproval } = await import('./claude-config.mjs').then(function (n) { return n.l; });
454
+ const { manageApiKeyApproval } = await import('./config.mjs').then(function (n) { return n.E; });
453
455
  const apiKey = config.APIKEY || "sk-ccjk-x-ccr";
454
456
  manageApiKeyApproval(apiKey);
455
457
  console.log(a.green(`\u2714 ${i18n.t("ccr:apiKeyApprovalSuccess")}`));
@@ -21,10 +21,9 @@ import 'node:os';
21
21
  import 'node:crypto';
22
22
  import 'buffer';
23
23
  import 'string_decoder';
24
- import '../shared/ccjk.bQ7Dh1g4.mjs';
25
24
  import 'node:url';
25
+ import '../shared/ccjk.bQ7Dh1g4.mjs';
26
26
  import '../shared/ccjk.RyizuzOI.mjs';
27
- import './claude-config.mjs';
28
27
  import './json-config.mjs';
29
28
  import './fs-operations.mjs';
30
29
  import 'node:fs/promises';
@@ -34,6 +33,9 @@ import 'module';
34
33
  import 'node:child_process';
35
34
  import 'node:stream';
36
35
  import '../shared/ccjk.DScm_NnL.mjs';
36
+ import './ccjk-config.mjs';
37
+ import '../shared/ccjk.BBtCGd_g.mjs';
38
+ import './index3.mjs';
37
39
 
38
40
  async function getConfig(key, options = {}) {
39
41
  const isZh = i18n.language === "zh-CN";
@@ -814,7 +814,7 @@ async function checkPermissionRules() {
814
814
  }
815
815
  async function fixSettingsFile() {
816
816
  const isZh = i18n.language === "zh-CN";
817
- const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.j; });
817
+ const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.B; });
818
818
  console.log("");
819
819
  console.log(a.bold.cyan("\u{1F527} Fixing settings.json"));
820
820
  console.log(a.dim("\u2500".repeat(50)));
@@ -27,88 +27,108 @@ class A2AClient {
27
27
  this.baseUrl = resolved;
28
28
  }
29
29
  /**
30
- * Register agent (hello)
30
+ * Register agent — POST /a2a/hello
31
+ * Server expects: { agent: { name, version }, capabilities }
31
32
  */
32
- async hello(agent) {
33
+ async hello(name, version, capabilities = []) {
33
34
  const response = await this.request("/a2a/hello", {
34
35
  method: "POST",
35
- body: { type: "hello", agent }
36
+ body: { agent: { name, version }, capabilities }
36
37
  });
37
38
  this.token = response.token;
38
39
  this.agentId = response.agentId;
39
40
  return response;
40
41
  }
41
42
  /**
42
- * Publish a gene
43
+ * Publish a gene — POST /a2a/publish
44
+ * Server expects flat fields: problemSignature, solutionStrategy, solutionCode, solutionSteps, tags, version
43
45
  */
44
- async publish(gene, proof) {
46
+ async publish(gene) {
45
47
  this.ensureAuthenticated();
46
48
  return this.request("/a2a/publish", {
47
49
  method: "POST",
48
- body: { type: "publish", gene, proof },
50
+ body: {
51
+ problemSignature: gene.problemSignature,
52
+ solutionStrategy: gene.solutionStrategy,
53
+ solutionCode: gene.solutionCode || "",
54
+ solutionSteps: gene.solutionSteps,
55
+ tags: gene.tags || [],
56
+ version: gene.version || "1.0.0"
57
+ },
49
58
  auth: true
50
59
  });
51
60
  }
52
61
  /**
53
- * Fetch genes
62
+ * Fetch genes — GET /a2a/fetch?minGDI=&limit=&signature=
63
+ * Server returns: { success, genes: [...] }
54
64
  */
55
- async fetch(query, limit) {
65
+ async fetch(options = {}) {
56
66
  this.ensureAuthenticated();
57
- const response = await this.request("/a2a/fetch", {
58
- method: "POST",
59
- body: { type: "fetch", query, limit },
67
+ const params = new URLSearchParams();
68
+ if (options.minGDI !== void 0) params.set("minGDI", String(options.minGDI));
69
+ if (options.limit !== void 0) params.set("limit", String(options.limit));
70
+ if (options.signature) params.set("signature", options.signature);
71
+ if (options.geneId) params.set("geneId", options.geneId);
72
+ const qs = params.toString();
73
+ const response = await this.request(`/a2a/fetch${qs ? "?" + qs : ""}`, {
74
+ method: "GET",
60
75
  auth: true
61
76
  });
62
77
  return response.genes;
63
78
  }
64
79
  /**
65
- * Report usage result
80
+ * Report usage result — POST /a2a/report
81
+ * Server expects: { geneId, outcome, context? }
66
82
  */
67
- async report(geneId, result) {
83
+ async report(geneId, outcome, context) {
68
84
  this.ensureAuthenticated();
69
85
  return this.request("/a2a/report", {
70
86
  method: "POST",
71
- body: { type: "report", geneId, result },
87
+ body: { geneId, outcome, ...context ? { context } : {} },
72
88
  auth: true
73
89
  });
74
90
  }
75
91
  /**
76
- * Request decision
92
+ * Record decision — POST /a2a/decision
93
+ * Server expects: { geneId, action: 'approve' | 'reject' }
77
94
  */
78
- async decision(problem, options, context) {
95
+ async decision(geneId, action) {
79
96
  this.ensureAuthenticated();
80
97
  return this.request("/a2a/decision", {
81
98
  method: "POST",
82
- body: { type: "decision", problem, options, context },
99
+ body: { geneId, action },
83
100
  auth: true
84
101
  });
85
102
  }
86
103
  /**
87
- * Revoke a gene
104
+ * Revoke a gene — POST /a2a/revoke
105
+ * Server expects: { geneId, reason? }
88
106
  */
89
107
  async revoke(geneId, reason) {
90
108
  this.ensureAuthenticated();
91
109
  await this.request("/a2a/revoke", {
92
110
  method: "POST",
93
- body: { type: "revoke", geneId, reason },
111
+ body: { geneId, ...reason ? { reason } : {} },
94
112
  auth: true
95
113
  });
96
114
  }
97
115
  /**
98
- * Get agent ID
116
+ * Get stats — GET /a2a/stats
99
117
  */
118
+ async stats() {
119
+ this.ensureAuthenticated();
120
+ const resp = await this.request("/a2a/stats", {
121
+ method: "GET",
122
+ auth: true
123
+ });
124
+ return resp.stats;
125
+ }
100
126
  getAgentId() {
101
127
  return this.agentId;
102
128
  }
103
- /**
104
- * Check if authenticated
105
- */
106
129
  isAuthenticated() {
107
130
  return this.token !== null;
108
131
  }
109
- /**
110
- * Internal request wrapper
111
- */
112
132
  async request(path, options) {
113
133
  const url = `${this.baseUrl}${path}`;
114
134
  const headers = {
@@ -124,7 +144,7 @@ class A2AClient {
124
144
  });
125
145
  if (!response.ok) {
126
146
  const error = await response.json().catch(() => ({ error: response.statusText }));
127
- throw new Error(error.error || `Request failed: ${response.statusText}`);
147
+ throw new Error(error.error || error.message || `Request failed: ${response.statusText}`);
128
148
  }
129
149
  return response.json();
130
150
  }
@@ -7,9 +7,8 @@ import { g as getMcpServices } from '../shared/ccjk.DKXs7Fbm.mjs';
7
7
  import { SUPPORTED_LANGS, LANG_LABELS } from './constants.mjs';
8
8
  import { ensureI18nInitialized, i18n, changeLanguage } from './index2.mjs';
9
9
  import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
10
- import { r as readMcpConfig, f as fixWindowsMcpConfig, w as writeMcpConfig, b as backupMcpConfig, a as buildMcpServerConfig, m as mergeMcpServers } from './claude-config.mjs';
11
- import { g as getExistingModelConfig, a as getExistingCustomModelConfig, u as updateCustomModel, c as updateDefaultModel, d as getExistingApiConfig, p as promptApiConfigurationAction, e as configureApi } from './config.mjs';
12
- import { c as configureOutputStyle, m as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.Dz0ssUQx.mjs';
10
+ import { g as getExistingModelConfig, a as getExistingCustomModelConfig, u as updateCustomModel, c as updateDefaultModel, r as readMcpConfig, f as fixWindowsMcpConfig, w as writeMcpConfig, d as backupMcpConfig, e as buildMcpServerConfig, m as mergeMcpServers, h as getExistingApiConfig, p as promptApiConfigurationAction, i as configureApi } from './config.mjs';
11
+ import { c as configureOutputStyle, m as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.Dh6Be-ef.mjs';
13
12
  import { s as selectMcpServices } from '../shared/ccjk.BI-hdI7P.mjs';
14
13
  import { i as isWindows } from './platform.mjs';
15
14
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
@@ -5,7 +5,7 @@ import { ensureI18nInitialized, i18n, resolveSupportedLanguage, changeLanguage }
5
5
  import { displayBannerWithInfo } from './banner.mjs';
6
6
  import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
7
7
  import { c as runCodexUpdate, i as runCodexUninstall, j as configureCodexAiMemoryFeature, k as configureCodexDefaultModelFeature, m as configureCodexMcp, n as configureCodexApi, o as configureCodexPresetFeature, p as runCodexWorkflowImportWithLanguageSelection, h as runCodexFullInit } from './codex.mjs';
8
- import { S as STARTUP_CODE_TOOL_CHOICES, a as resolveStartupCodeType } from '../shared/ccjk.yYQMbHH3.mjs';
8
+ import { S as STARTUP_CODE_TOOL_CHOICES, a as resolveStartupCodeType } from './code-type-resolver.mjs';
9
9
  import { a as handleExitPromptError, h as handleGeneralError } from '../shared/ccjk.DGllfVCZ.mjs';
10
10
  import { changeScriptLanguageFeature } from './features.mjs';
11
11
  import { c as checkForUpdates, a as getInstalledPackages, s as searchPackages } from '../shared/ccjk.DbigonEQ.mjs';
@@ -26,11 +26,12 @@ import { configSwitchCommand } from './config-switch.mjs';
26
26
  import process__default from 'node:process';
27
27
  import { readFile, writeFileAtomic, ensureDir, exists, readJsonFile } from './fs-operations.mjs';
28
28
  import { workspaceDiagnostics, doctor } from './doctor.mjs';
29
- import { a as mcpList, c as mcpUninstall, m as mcpInstall, d as mcpTrending, b as mcpSearch } from '../shared/ccjk.B4aXNclK.mjs';
29
+ import { a as mcpList, c as mcpUninstall, m as mcpInstall, d as mcpTrending, b as mcpSearch } from '../shared/ccjk.CVjfbEIj.mjs';
30
30
  import { notificationCommand } from './notification.mjs';
31
31
  import { g as getRuntimeVersion } from '../shared/ccjk.gDEDGD_t.mjs';
32
32
  import { uninstall } from './uninstall.mjs';
33
33
  import { update } from './update.mjs';
34
+ import { g as getRuntimeCapabilityDescriptor } from '../shared/ccjk.BO45TPXJ.mjs';
34
35
  import { c as checkSuperpowersInstalled, g as getSuperpowersSkills, u as updateSuperpowers, a as uninstallSuperpowers, i as installSuperpowers, b as installSuperpowersViaGit } from '../shared/ccjk.Bq8TqZG_.mjs';
35
36
 
36
37
  const execAsync = promisify(exec);
@@ -3163,6 +3164,29 @@ async function runOnboardingWizard(options = {}) {
3163
3164
  }
3164
3165
 
3165
3166
  const NON_CODEX_TOOLS = ["claude-code", "myclaude", "aider", "continue", "cline", "cursor"];
3167
+ const CLAUDE_FAMILY_SLASH_RULE = (descriptor) => descriptor.native.slashCommands && descriptor.configBackend === "claude-family";
3168
+ const MENU_ITEM_CAPABILITY_RULES = {
3169
+ "diagnostics": (descriptor) => descriptor.managedByCcjk.doctor,
3170
+ "doctor": (descriptor) => descriptor.managedByCcjk.doctor,
3171
+ "workspace": (descriptor) => descriptor.managedByCcjk.doctor,
3172
+ "api-config": (descriptor) => descriptor.managedByCcjk.configSync || descriptor.managedByCcjk.providerProfiles,
3173
+ "mcp-config": (descriptor) => descriptor.native.mcp && descriptor.managedByCcjk.mcpBundles,
3174
+ "model-config": (descriptor) => descriptor.managedByCcjk.modelRouting,
3175
+ "memory-config": (descriptor) => descriptor.native.memory,
3176
+ "permission-config": (descriptor) => descriptor.native.permissions && descriptor.managedByCcjk.permissionRepair,
3177
+ "config-switch": (descriptor) => descriptor.managedByCcjk.configSync || descriptor.managedByCcjk.providerProfiles,
3178
+ "ccr": (descriptor) => descriptor.configBackend === "claude-family",
3179
+ "ccusage": (descriptor) => descriptor.configBackend === "claude-family",
3180
+ "cometix": (descriptor) => descriptor.native.statusline,
3181
+ "superpowers": CLAUDE_FAMILY_SLASH_RULE,
3182
+ "mcp-market": (descriptor) => descriptor.native.mcp && descriptor.managedByCcjk.mcpBundles,
3183
+ "marketplace": (descriptor) => descriptor.configBackend === "claude-family",
3184
+ "hooks-sync": (descriptor) => descriptor.configBackend === "claude-family",
3185
+ "quick-actions": CLAUDE_FAMILY_SLASH_RULE,
3186
+ "smart-guide": CLAUDE_FAMILY_SLASH_RULE,
3187
+ "workflows": CLAUDE_FAMILY_SLASH_RULE,
3188
+ "output-styles": CLAUDE_FAMILY_SLASH_RULE
3189
+ };
3166
3190
  const quickActionsItems = [
3167
3191
  {
3168
3192
  id: "init",
@@ -3502,8 +3526,20 @@ const menuItemsByCategory = {
3502
3526
  // Reserved for experimental features
3503
3527
  system: systemItems
3504
3528
  };
3529
+ function isItemSupportedByCapabilities(item, codeTool) {
3530
+ const descriptor = getRuntimeCapabilityDescriptor(codeTool);
3531
+ if (!descriptor) {
3532
+ return true;
3533
+ }
3534
+ const rule = MENU_ITEM_CAPABILITY_RULES[item.id];
3535
+ return rule ? rule(descriptor) : true;
3536
+ }
3505
3537
  function isItemSupportedForTool(item, codeTool) {
3506
- return !item.supportedTools || item.supportedTools.includes(codeTool);
3538
+ const toolSupported = !item.supportedTools || item.supportedTools.includes(codeTool);
3539
+ if (!toolSupported) {
3540
+ return false;
3541
+ }
3542
+ return isItemSupportedByCapabilities(item, codeTool);
3507
3543
  }
3508
3544
  function getVisibleItems(level, codeTool = "claude-code") {
3509
3545
  const visible = [];
@@ -3774,6 +3810,15 @@ function getToolModeMeta(codeTool) {
3774
3810
  config: t("menu:toolMode.claude.config", "Primary config: ~/.claude/settings.json"),
3775
3811
  menuTitle: t("menu:toolMode.claude.menuTitle", "Claude Control Center")
3776
3812
  };
3813
+ case "myclaude":
3814
+ return {
3815
+ icon: "\u25C9",
3816
+ title: t("menu:toolMode.myclaude.title", "myclaude Workspace"),
3817
+ summary: t("menu:toolMode.myclaude.summary", "Provider-first control center with explicit runtime status at startup."),
3818
+ focus: t("menu:toolMode.myclaude.focus", "Provider profiles, routing state, model slots, and Claude-family compatible configuration."),
3819
+ config: t("menu:toolMode.myclaude.config", "Primary config: ~/.claude.json (runtime) + ~/.ccjk/config.toml (reusable profiles)"),
3820
+ menuTitle: t("menu:toolMode.myclaude.menuTitle", "myclaude Control Center")
3821
+ };
3777
3822
  case "codex":
3778
3823
  return {
3779
3824
  icon: "\u25C6",
@@ -3907,15 +3952,37 @@ function renderMenu(title, items, options = {}) {
3907
3952
  lines.push(renderFooter(opts));
3908
3953
  return lines.join("\n");
3909
3954
  }
3910
- function renderToolModeHero(codeTool, width = 76) {
3955
+ function renderToolModeHero(codeTool, width = 76, runtimeSummary) {
3911
3956
  const meta = getToolModeMeta(codeTool);
3957
+ const content = [
3958
+ colors.itemText(meta.summary),
3959
+ `${colors.shortcut("Focus")} ${colors.itemText(meta.focus)}`,
3960
+ `${colors.shortcut("Config")} ${colors.itemText(meta.config)}`
3961
+ ];
3962
+ if (runtimeSummary?.runtimeLabel) {
3963
+ content.push(`${colors.shortcut("Runtime")} ${colors.itemText(runtimeSummary.runtimeLabel)}`);
3964
+ }
3965
+ if (runtimeSummary?.profileLabel) {
3966
+ content.push(`${colors.shortcut("Profile")} ${colors.itemText(runtimeSummary.profileLabel)}`);
3967
+ }
3968
+ if (runtimeSummary?.modeLabel) {
3969
+ content.push(`${colors.shortcut("Mode")} ${colors.itemText(runtimeSummary.modeLabel)}`);
3970
+ }
3971
+ if (runtimeSummary?.sourceLabel) {
3972
+ content.push(`${colors.shortcut("Source")} ${colors.itemText(runtimeSummary.sourceLabel)}`);
3973
+ }
3974
+ if (runtimeSummary?.routeLabel) {
3975
+ content.push(`${colors.shortcut("Route")} ${colors.itemText(runtimeSummary.routeLabel)}`);
3976
+ }
3977
+ if (runtimeSummary?.strategyLabel) {
3978
+ content.push(`${colors.shortcut("Strategy")} ${colors.itemText(runtimeSummary.strategyLabel)}`);
3979
+ }
3980
+ if (runtimeSummary?.modelLabel) {
3981
+ content.push(`${colors.shortcut("Models")} ${colors.itemText(runtimeSummary.modelLabel)}`);
3982
+ }
3912
3983
  return renderBox(
3913
3984
  `${meta.icon} ${meta.title}`,
3914
- [
3915
- colors.itemText(meta.summary),
3916
- `${colors.shortcut("Focus")} ${colors.itemText(meta.focus)}`,
3917
- `${colors.shortcut("Config")} ${colors.itemText(meta.config)}`
3918
- ],
3985
+ content,
3919
3986
  width
3920
3987
  );
3921
3988
  }
@@ -4332,6 +4399,33 @@ function getProgressiveFooterCommands(codeTool) {
4332
4399
  }
4333
4400
  ];
4334
4401
  }
4402
+ function buildMyclaudeRuntimeSummary(syncResult) {
4403
+ if (!syncResult?.activeProfile) {
4404
+ return {
4405
+ runtimeLabel: "myclaude / no active provider synced"
4406
+ };
4407
+ }
4408
+ const profile = syncResult.activeProfile;
4409
+ const primaryModel = typeof profile.primaryModel === "string" ? profile.primaryModel : profile.model;
4410
+ const fastModel = typeof profile.defaultHaikuModel === "string" ? profile.defaultHaikuModel : profile.fastModel;
4411
+ const sonnetModel = typeof profile.defaultSonnetModel === "string" ? profile.defaultSonnetModel : void 0;
4412
+ const opusModel = typeof profile.defaultOpusModel === "string" ? profile.defaultOpusModel : void 0;
4413
+ const modelParts = [
4414
+ primaryModel ? `primary ${primaryModel}` : void 0,
4415
+ fastModel ? `haiku ${fastModel}` : void 0,
4416
+ sonnetModel ? `sonnet ${sonnetModel}` : void 0,
4417
+ opusModel ? `opus ${opusModel}` : void 0
4418
+ ].filter(Boolean);
4419
+ return {
4420
+ runtimeLabel: "myclaude",
4421
+ profileLabel: `${profile.name} (${syncResult.activeProfileId || profile.id})`,
4422
+ modeLabel: profile.routeFamily,
4423
+ sourceLabel: [profile.source, profile.sourceDetail].filter(Boolean).join(" \xB7 ") || void 0,
4424
+ routeLabel: profile.pathLabel,
4425
+ strategyLabel: [profile.routingStrategy, profile.strategyNote].filter(Boolean).join(" \xB7 ") || void 0,
4426
+ modelLabel: modelParts.join(" \xB7 ") || void 0
4427
+ };
4428
+ }
4335
4429
  function getMenuShellConfig(codeTool) {
4336
4430
  if (codeTool === "codex" || codeTool === "myclaude") {
4337
4431
  return {
@@ -4348,7 +4442,7 @@ function getMenuShellConfig(codeTool) {
4348
4442
  showHero: false
4349
4443
  };
4350
4444
  }
4351
- async function showProgressiveMenu(codeTool) {
4445
+ async function showProgressiveMenu(codeTool, runtimeSyncResult) {
4352
4446
  if (codeTool !== "codex" && codeTool !== "myclaude") {
4353
4447
  const rawItems2 = getItemsForLevel(menuState.level, "claude-code");
4354
4448
  const items2 = attachHandlers(rawItems2, "claude-code");
@@ -4438,7 +4532,7 @@ async function showProgressiveMenu(codeTool) {
4438
4532
  const menuShell = getMenuShellConfig(codeTool);
4439
4533
  const allowedCommands = ["0", "q", ...menuShell.allowMore ? ["m"] : [], ...menuShell.footerCommands.map((command) => command.key)];
4440
4534
  if (menuShell.showHero) {
4441
- console.log(renderToolModeHero(codeTool));
4535
+ console.log(renderToolModeHero(codeTool, 76, codeTool === "myclaude" ? buildMyclaudeRuntimeSummary(runtimeSyncResult) : void 0));
4442
4536
  console.log("");
4443
4537
  }
4444
4538
  const menuOutput = renderMenu(
@@ -5214,6 +5308,7 @@ async function showMainMenu(options = {}) {
5214
5308
  if (await isFirstTimeUser()) {
5215
5309
  await runOnboardingWizard({ preferredCodeTool: options.codeType });
5216
5310
  }
5311
+ let myclaudeRuntimeSyncResult = null;
5217
5312
  try {
5218
5313
  const previousType = getCurrentCodeTool();
5219
5314
  const resolvedType = await resolveStartupCodeType({
@@ -5226,6 +5321,10 @@ async function showMainMenu(options = {}) {
5226
5321
  console.log(a.green(`\u2714 Switched to ${resolvedType}`));
5227
5322
  }
5228
5323
  }
5324
+ if (resolvedType === "myclaude") {
5325
+ const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.E; });
5326
+ myclaudeRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
5327
+ }
5229
5328
  } catch (err) {
5230
5329
  const errorMessage = err instanceof Error ? err.message : String(err);
5231
5330
  console.error(a.yellow(errorMessage));
@@ -5234,7 +5333,11 @@ async function showMainMenu(options = {}) {
5234
5333
  while (!exitMenu) {
5235
5334
  const codeTool = getCurrentCodeTool();
5236
5335
  displayBannerWithInfo(CODE_TOOL_BANNERS[codeTool] || "CCJK");
5237
- const result = await showProgressiveMenu(codeTool);
5336
+ if (codeTool === "myclaude") {
5337
+ const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.E; });
5338
+ myclaudeRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
5339
+ }
5340
+ const result = await showProgressiveMenu(codeTool, myclaudeRuntimeSyncResult);
5238
5341
  if (result === "exit") {
5239
5342
  exitMenu = true;
5240
5343
  } else if (result === "switch") {
@@ -12,18 +12,16 @@ import { exec } from 'node:child_process';
12
12
  import { promisify } from 'node:util';
13
13
  import { updateCcr } from './auto-updater.mjs';
14
14
  import { w as wrapCommandWithSudo, i as isWindows, b as isTermux } from './platform.mjs';
15
- import { h as setMyclaudeProviderProfiles, e as addCompletedOnboarding, d as setPrimaryApiKey, i as clearMyclaudeProviderProfiles, b as backupMcpConfig, a as buildMcpServerConfig, r as readMcpConfig, j as replaceMcpServers, f as fixWindowsMcpConfig, w as writeMcpConfig, k as syncMcpPermissions } from './claude-config.mjs';
15
+ import { v as setMyclaudeProviderProfiles, p as promptApiConfigurationAction, n as addCompletedOnboarding, l as setPrimaryApiKey, x as ensureClaudeDir, y as clearMyclaudeProviderProfiles, h as getExistingApiConfig, q as switchToOfficialLogin, b as backupExistingConfig, k as copyConfigFiles, t as applyAiLanguageDirective, i as configureApi, d as backupMcpConfig, e as buildMcpServerConfig, r as readMcpConfig, z as replaceMcpServers, f as fixWindowsMcpConfig, w as writeMcpConfig, A as syncMcpPermissions } from './config.mjs';
16
16
  import { h as runCodexFullInit } from './codex.mjs';
17
- import { a as resolveStartupCodeType, r as resolveCodeType } from '../shared/ccjk.yYQMbHH3.mjs';
17
+ import { p as parseOrchestrationLevel, a as resolveStartupCodeType, r as resolveCodeType, w as writeOrchestrationPolicy } from './code-type-resolver.mjs';
18
18
  import { exists } from './fs-operations.mjs';
19
19
  import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
20
- import { p as promptApiConfigurationAction, i as ensureClaudeDir, d as getExistingApiConfig, s as switchToOfficialLogin, b as backupExistingConfig, f as copyConfigFiles, h as applyAiLanguageDirective, e as configureApi } from './config.mjs';
21
20
  import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.DDq2hqA5.mjs';
22
- import { m as modifyApiConfigPartially, a as configureApiCompletely, c as configureOutputStyle, f as formatApiKeyDisplay } from '../shared/ccjk.Dz0ssUQx.mjs';
21
+ import { m as modifyApiConfigPartially, a as configureApiCompletely, c as configureOutputStyle, f as formatApiKeyDisplay } from '../shared/ccjk.Dh6Be-ef.mjs';
23
22
  import { a as handleExitPromptError, h as handleGeneralError } from '../shared/ccjk.DGllfVCZ.mjs';
24
23
  import { getInstallationStatus, installMyclaude, installClaudeCode } from './installer.mjs';
25
24
  import { s as selectMcpServices } from '../shared/ccjk.BI-hdI7P.mjs';
26
- import { p as parseOrchestrationLevel, w as writeOrchestrationPolicy } from './smart-defaults.mjs';
27
25
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
28
26
  import { resolveAiOutputLanguage } from './prompts.mjs';
29
27
  import { g as getRuntimeVersion } from '../shared/ccjk.gDEDGD_t.mjs';
@@ -511,7 +509,7 @@ async function silentInit(options = {}) {
511
509
  cleanupZcfNamespace();
512
510
  } catch {
513
511
  }
514
- const { detectSmartDefaults } = await import('./smart-defaults.mjs').then(function (n) { return n.s; });
512
+ const { detectSmartDefaults } = await import('./code-type-resolver.mjs').then(function (n) { return n.b; });
515
513
  const defaults = await detectSmartDefaults();
516
514
  if (!defaults.apiKey) {
517
515
  throw new Error("Silent mode requires ANTHROPIC_API_KEY environment variable");
@@ -770,7 +768,7 @@ async function validateApiConfigs(configs) {
770
768
  }
771
769
  }
772
770
  async function handleClaudeCodeConfigs(configs) {
773
- const { ClaudeCodeConfigManager } = await import('./claude-code-config-manager.mjs');
771
+ const { ClaudeCodeConfigManager } = await import('./config.mjs').then(function (n) { return n.D; });
774
772
  const addedProfiles = [];
775
773
  for (const config of configs) {
776
774
  if (config.type === "ccr_proxy") {
@@ -861,7 +859,7 @@ async function handleCodexConfigs(configs) {
861
859
  }
862
860
  async function saveSingleConfigToToml(apiConfig, provider, options) {
863
861
  try {
864
- const { ClaudeCodeConfigManager } = await import('./claude-code-config-manager.mjs');
862
+ const { ClaudeCodeConfigManager } = await import('./config.mjs').then(function (n) { return n.D; });
865
863
  const profile = await convertSingleConfigToProfile(apiConfig, provider, options);
866
864
  const result = await ClaudeCodeConfigManager.addProfile(profile);
867
865
  if (result.success) {
@@ -887,7 +885,7 @@ async function saveSingleConfigToToml(apiConfig, provider, options) {
887
885
  }
888
886
  }
889
887
  async function buildClaudeCodeProfile(params) {
890
- const { ClaudeCodeConfigManager } = await import('./claude-code-config-manager.mjs');
888
+ const { ClaudeCodeConfigManager } = await import('./config.mjs').then(function (n) { return n.D; });
891
889
  let {
892
890
  url: baseUrl,
893
891
  authType,
@@ -988,6 +986,33 @@ async function convertToCodexProvider(config) {
988
986
  }
989
987
 
990
988
  const ccjkVersion = getRuntimeVersion();
989
+ function getSetupCompletionGuidance(codeToolType) {
990
+ if (codeToolType === "myclaude") {
991
+ return {
992
+ step1: i18n.t("configuration:guidanceStep1", { runtime: "myclaude" }),
993
+ step1Detail: i18n.t("configuration:guidanceStep1MyclaudeDetail"),
994
+ step1Detail2: i18n.t("configuration:guidanceStep1MyclaudeDetail2"),
995
+ step2: i18n.t("configuration:guidanceStep2"),
996
+ step2Example: i18n.t("configuration:guidanceStep2Example"),
997
+ step3: i18n.t("configuration:guidanceStep3Myclaude"),
998
+ step3Command: i18n.t("configuration:guidanceStep3MyclaudeCommand"),
999
+ step4: i18n.t("configuration:guidanceStep4"),
1000
+ step4Command: i18n.t("configuration:guidanceStep4Command")
1001
+ };
1002
+ }
1003
+ const runtimeLabel = CODE_TOOL_INFO[codeToolType]?.name || "Claude Code";
1004
+ return {
1005
+ step1: i18n.t("configuration:guidanceStep1", { runtime: runtimeLabel }),
1006
+ step1Detail: i18n.t("configuration:guidanceStep1Detail"),
1007
+ step1Detail2: i18n.t("configuration:guidanceStep1Detail2"),
1008
+ step2: i18n.t("configuration:guidanceStep2"),
1009
+ step2Example: i18n.t("configuration:guidanceStep2Example"),
1010
+ step3: i18n.t("configuration:guidanceStep3"),
1011
+ step3Command: i18n.t("configuration:guidanceStep3Command"),
1012
+ step4: i18n.t("configuration:guidanceStep4"),
1013
+ step4Command: i18n.t("configuration:guidanceStep4Command")
1014
+ };
1015
+ }
991
1016
  async function init(options = {}) {
992
1017
  options.initSource = options.initSource || "init";
993
1018
  options.orchestration = parseOrchestrationLevel(options.orchestration);
@@ -1509,7 +1534,7 @@ async function init(options = {}) {
1509
1534
  const hasModelParams = options.apiModel || options.apiHaikuModel || options.apiSonnetModel || options.apiOpusModel;
1510
1535
  if (hasModelParams && action !== "docs-only" && (codeToolType === "claude-code" || codeToolType === "myclaude")) {
1511
1536
  if (options.skipPrompt) {
1512
- const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.j; });
1537
+ const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.B; });
1513
1538
  updateCustomModel(
1514
1539
  options.apiModel || void 0,
1515
1540
  options.apiHaikuModel || void 0,
@@ -1754,6 +1779,7 @@ async function init(options = {}) {
1754
1779
  }
1755
1780
  if (!options.skipPrompt && !options.skipBanner)
1756
1781
  tracker.complete();
1782
+ const completionGuidance = getSetupCompletionGuidance(codeToolType);
1757
1783
  console.log("");
1758
1784
  console.log(
1759
1785
  a.bold.green("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557")
@@ -1774,31 +1800,31 @@ async function init(options = {}) {
1774
1800
  `${a.bold.green("\u2551")} ${a.bold.green("\u2551")}`
1775
1801
  );
1776
1802
  console.log(
1777
- a.bold.green("\u2551") + padToDisplayWidth(` ${i18n.t("configuration:guidanceStep1")}`, 62) + a.bold.green("\u2551")
1803
+ a.bold.green("\u2551") + padToDisplayWidth(` ${completionGuidance.step1}`, 62) + a.bold.green("\u2551")
1778
1804
  );
1779
1805
  console.log(
1780
- a.bold.green("\u2551") + a.dim(padToDisplayWidth(` ${i18n.t("configuration:guidanceStep1Detail")}`, 62)) + a.bold.green("\u2551")
1806
+ a.bold.green("\u2551") + a.dim(padToDisplayWidth(` ${completionGuidance.step1Detail}`, 62)) + a.bold.green("\u2551")
1781
1807
  );
1782
1808
  console.log(
1783
- a.bold.green("\u2551") + a.dim(padToDisplayWidth(` ${i18n.t("configuration:guidanceStep1Detail2")}`, 62)) + a.bold.green("\u2551")
1809
+ a.bold.green("\u2551") + a.dim(padToDisplayWidth(` ${completionGuidance.step1Detail2}`, 62)) + a.bold.green("\u2551")
1784
1810
  );
1785
1811
  console.log(
1786
1812
  `${a.bold.green("\u2551")} ${a.bold.green("\u2551")}`
1787
1813
  );
1788
1814
  console.log(
1789
- a.bold.green("\u2551") + padToDisplayWidth(` ${i18n.t("configuration:guidanceStep2")}`, 62) + a.bold.green("\u2551")
1815
+ a.bold.green("\u2551") + padToDisplayWidth(` ${completionGuidance.step2}`, 62) + a.bold.green("\u2551")
1790
1816
  );
1791
1817
  console.log(
1792
- a.bold.green("\u2551") + a.green(padToDisplayWidth(` ${i18n.t("configuration:guidanceStep2Example")}`, 62)) + a.bold.green("\u2551")
1818
+ a.bold.green("\u2551") + a.green(padToDisplayWidth(` ${completionGuidance.step2Example}`, 62)) + a.bold.green("\u2551")
1793
1819
  );
1794
1820
  console.log(
1795
1821
  `${a.bold.green("\u2551")} ${a.bold.green("\u2551")}`
1796
1822
  );
1797
1823
  console.log(
1798
- a.bold.green("\u2551") + padToDisplayWidth(` ${i18n.t("configuration:guidanceStep3")} `, 44) + a.yellow(padToDisplayWidth(i18n.t("configuration:guidanceStep3Command"), 18)) + a.bold.green("\u2551")
1824
+ a.bold.green("\u2551") + padToDisplayWidth(` ${completionGuidance.step3} `, 44) + a.yellow(padToDisplayWidth(completionGuidance.step3Command, 18)) + a.bold.green("\u2551")
1799
1825
  );
1800
1826
  console.log(
1801
- a.bold.green("\u2551") + padToDisplayWidth(` ${i18n.t("configuration:guidanceStep4")} `, 44) + a.yellow(padToDisplayWidth(i18n.t("configuration:guidanceStep4Command"), 18)) + a.bold.green("\u2551")
1827
+ a.bold.green("\u2551") + padToDisplayWidth(` ${completionGuidance.step4} `, 44) + a.yellow(padToDisplayWidth(completionGuidance.step4Command, 18)) + a.bold.green("\u2551")
1802
1828
  );
1803
1829
  console.log(
1804
1830
  `${a.bold.green("\u2551")} ${a.bold.green("\u2551")}`
@@ -1853,6 +1879,7 @@ async function init(options = {}) {
1853
1879
  const init$1 = {
1854
1880
  __proto__: null,
1855
1881
  convertSingleConfigToProfile: convertSingleConfigToProfile,
1882
+ getSetupCompletionGuidance: getSetupCompletionGuidance,
1856
1883
  handleMultiConfigurations: handleMultiConfigurations,
1857
1884
  init: init,
1858
1885
  saveSingleConfigToToml: saveSingleConfigToToml,
@@ -224,7 +224,7 @@ async function getInstallationStatus(codeType = "claude-code") {
224
224
  async function getInstallMethodFromConfig(codeType) {
225
225
  try {
226
226
  if (isClaudeFamilyCodeTool(codeType)) {
227
- const { readMcpConfig } = await import('./claude-config.mjs').then(function (n) { return n.l; });
227
+ const { readMcpConfig } = await import('./config.mjs').then(function (n) { return n.E; });
228
228
  const config = readMcpConfig();
229
229
  return config?.installMethod || null;
230
230
  }
@@ -348,7 +348,7 @@ async function uninstallCodeTool(codeType) {
348
348
  async function setInstallMethod(method, codeType = "claude-code") {
349
349
  try {
350
350
  if (isClaudeFamilyCodeTool(codeType)) {
351
- const { readMcpConfig, writeMcpConfig } = await import('./claude-config.mjs').then(function (n) { return n.l; });
351
+ const { readMcpConfig, writeMcpConfig } = await import('./config.mjs').then(function (n) { return n.E; });
352
352
  let config = readMcpConfig();
353
353
  if (!config) {
354
354
  config = { mcpServers: {} };