ccjk 13.6.5 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/api-cli.mjs +4 -2
- package/dist/chunks/api-config-selector.mjs +7 -7
- package/dist/chunks/auto-fix.mjs +3 -1
- package/dist/chunks/auto-updater.mjs +100 -2
- package/dist/chunks/banner.mjs +0 -16
- package/dist/chunks/ccjk-all.mjs +5 -2
- package/dist/chunks/ccjk-mcp.mjs +6 -3
- package/dist/chunks/ccjk-setup.mjs +4 -1
- package/dist/chunks/ccr.mjs +5 -5
- package/dist/chunks/check-updates.mjs +12 -2
- package/dist/chunks/claude-code-incremental-manager.mjs +45 -21
- package/dist/chunks/claude-wrapper.mjs +1 -1
- package/dist/chunks/cli-hook.mjs +4 -5
- package/dist/chunks/codex-config-switch.mjs +3 -3
- package/dist/chunks/codex-provider-manager.mjs +1 -1
- package/dist/chunks/codex.mjs +4 -360
- package/dist/chunks/config-switch.mjs +22 -11
- package/dist/chunks/config.mjs +1104 -5
- package/dist/chunks/config2.mjs +6 -4
- package/dist/chunks/config3.mjs +4 -2
- package/dist/chunks/constants.mjs +1 -1
- package/dist/chunks/doctor.mjs +2 -2
- package/dist/chunks/evolution.mjs +47 -27
- package/dist/chunks/features.mjs +76 -12
- package/dist/chunks/index10.mjs +78 -24
- package/dist/chunks/init.mjs +18 -35
- package/dist/chunks/installer.mjs +3 -3
- package/dist/chunks/mcp-cli.mjs +16 -16
- package/dist/chunks/mcp.mjs +9 -9
- package/dist/chunks/memory-check.mjs +1 -1
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/platform.mjs +1 -1
- package/dist/chunks/quick-setup.mjs +11 -10
- package/dist/chunks/research.mjs +225 -27
- package/dist/chunks/slash-commands.mjs +1 -1
- package/dist/chunks/smart-defaults.mjs +2 -2
- package/dist/chunks/uninstall.mjs +1 -1
- package/dist/chunks/update.mjs +16 -16
- package/dist/chunks/version-checker.mjs +11 -1
- package/dist/cli.mjs +5 -1
- package/dist/i18n/locales/en/cli.json +0 -4
- package/dist/i18n/locales/en/menu.json +10 -3
- package/dist/i18n/locales/en/notification.json +2 -2
- package/dist/i18n/locales/zh-CN/cli.json +0 -4
- package/dist/i18n/locales/zh-CN/menu.json +10 -3
- package/dist/i18n/locales/zh-CN/notification.json +2 -2
- package/dist/index.mjs +3 -2
- package/dist/shared/{ccjk.C4m4ypdk.mjs → ccjk.B6VCKdyy.mjs} +4 -3
- package/dist/shared/ccjk.BI-hdI7P.mjs +30 -0
- package/dist/shared/{ccjk.DvAP4XfP.mjs → ccjk.CVjfbEIj.mjs} +2 -2
- package/dist/shared/ccjk.DKXs7Fbm.mjs +361 -0
- package/dist/shared/{ccjk.BP5hsTZQ.mjs → ccjk.Dh6Be-ef.mjs} +2 -2
- package/package.json +3 -1
- package/templates/common/workflow/essential/en/feat.md +68 -291
- package/templates/common/workflow/sixStep/en/workflow.md +56 -330
- package/dist/chunks/claude-code-config-manager.mjs +0 -809
- package/dist/chunks/claude-config.mjs +0 -253
package/dist/chunks/config2.mjs
CHANGED
|
@@ -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 {
|
|
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('./
|
|
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('./
|
|
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")}`));
|
package/dist/chunks/config3.mjs
CHANGED
|
@@ -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";
|
|
@@ -80,7 +80,7 @@ const LEGACY_ZCF_CONFIG_FILES = [
|
|
|
80
80
|
const ZCF_CONFIG_DIR = CCJK_CONFIG_DIR;
|
|
81
81
|
const ZCF_CONFIG_FILE = CCJK_CONFIG_FILE;
|
|
82
82
|
const CODE_TOOL_TYPES = ["claude-code", "myclaude", "codex", "aider", "continue", "cline", "cursor"];
|
|
83
|
-
const DEFAULT_CODE_TOOL_TYPE = "
|
|
83
|
+
const DEFAULT_CODE_TOOL_TYPE = "myclaude";
|
|
84
84
|
const CLAUDE_FAMILY_CODE_TOOL_TYPES = ["claude-code", "myclaude"];
|
|
85
85
|
const CODE_TOOL_BANNERS = {
|
|
86
86
|
"claude-code": "for Claude Code",
|
package/dist/chunks/doctor.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { getApiProviderPresets } from './api-providers.mjs';
|
|
|
6
6
|
import { SETTINGS_FILE, CLAUDE_DIR } from './constants.mjs';
|
|
7
7
|
import { i18n } from './index2.mjs';
|
|
8
8
|
import { g as getPermissionManager } from '../shared/ccjk.SPoXMvZD.mjs';
|
|
9
|
-
import {
|
|
9
|
+
import { h as commandExists } from './platform.mjs';
|
|
10
10
|
import { P as ProviderHealthMonitor } from '../shared/ccjk.J8YiPsOw.mjs';
|
|
11
11
|
import { platform, userInfo, homedir } from 'node:os';
|
|
12
12
|
import ora from './index8.mjs';
|
|
@@ -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.
|
|
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
|
|
30
|
+
* Register agent — POST /a2a/hello
|
|
31
|
+
* Server expects: { agent: { name, version }, capabilities }
|
|
31
32
|
*/
|
|
32
|
-
async hello(
|
|
33
|
+
async hello(name, version, capabilities = []) {
|
|
33
34
|
const response = await this.request("/a2a/hello", {
|
|
34
35
|
method: "POST",
|
|
35
|
-
body: {
|
|
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
|
|
46
|
+
async publish(gene) {
|
|
45
47
|
this.ensureAuthenticated();
|
|
46
48
|
return this.request("/a2a/publish", {
|
|
47
49
|
method: "POST",
|
|
48
|
-
body: {
|
|
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(
|
|
65
|
+
async fetch(options = {}) {
|
|
56
66
|
this.ensureAuthenticated();
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
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,
|
|
83
|
+
async report(geneId, outcome, context) {
|
|
68
84
|
this.ensureAuthenticated();
|
|
69
85
|
return this.request("/a2a/report", {
|
|
70
86
|
method: "POST",
|
|
71
|
-
body: {
|
|
87
|
+
body: { geneId, outcome, ...context ? { context } : {} },
|
|
72
88
|
auth: true
|
|
73
89
|
});
|
|
74
90
|
}
|
|
75
91
|
/**
|
|
76
|
-
*
|
|
92
|
+
* Record decision — POST /a2a/decision
|
|
93
|
+
* Server expects: { geneId, action: 'approve' | 'reject' }
|
|
77
94
|
*/
|
|
78
|
-
async decision(
|
|
95
|
+
async decision(geneId, action) {
|
|
79
96
|
this.ensureAuthenticated();
|
|
80
97
|
return this.request("/a2a/decision", {
|
|
81
98
|
method: "POST",
|
|
82
|
-
body: {
|
|
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: {
|
|
111
|
+
body: { geneId, ...reason ? { reason } : {} },
|
|
94
112
|
auth: true
|
|
95
113
|
});
|
|
96
114
|
}
|
|
97
115
|
/**
|
|
98
|
-
* Get
|
|
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
|
}
|
package/dist/chunks/features.mjs
CHANGED
|
@@ -3,11 +3,14 @@ import { homedir } from 'node:os';
|
|
|
3
3
|
import process__default from 'node:process';
|
|
4
4
|
import a from './index5.mjs';
|
|
5
5
|
import { i as inquirer } from './index6.mjs';
|
|
6
|
+
import { g as getMcpServices } from '../shared/ccjk.DKXs7Fbm.mjs';
|
|
6
7
|
import { SUPPORTED_LANGS, LANG_LABELS } from './constants.mjs';
|
|
7
8
|
import { ensureI18nInitialized, i18n, changeLanguage } from './index2.mjs';
|
|
8
9
|
import { updateZcfConfig, readZcfConfig } from './ccjk-config.mjs';
|
|
9
|
-
import { g as getExistingModelConfig, a as getExistingCustomModelConfig, u as updateCustomModel, c as updateDefaultModel, d as getExistingApiConfig, p as promptApiConfigurationAction,
|
|
10
|
-
import { m as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.
|
|
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';
|
|
12
|
+
import { s as selectMcpServices } from '../shared/ccjk.BI-hdI7P.mjs';
|
|
13
|
+
import { i as isWindows } from './platform.mjs';
|
|
11
14
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
12
15
|
import { p as promptBoolean } from '../shared/ccjk.DZ2LLOa-.mjs';
|
|
13
16
|
import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
@@ -25,6 +28,7 @@ import 'node:path';
|
|
|
25
28
|
import 'node:crypto';
|
|
26
29
|
import 'buffer';
|
|
27
30
|
import 'string_decoder';
|
|
31
|
+
import 'node:child_process';
|
|
28
32
|
import 'node:url';
|
|
29
33
|
import '../shared/ccjk.BBtCGd_g.mjs';
|
|
30
34
|
import './index3.mjs';
|
|
@@ -32,13 +36,10 @@ import './fs-operations.mjs';
|
|
|
32
36
|
import 'node:fs/promises';
|
|
33
37
|
import './json-config.mjs';
|
|
34
38
|
import '../shared/ccjk.RyizuzOI.mjs';
|
|
35
|
-
import '
|
|
36
|
-
import './platform.mjs';
|
|
39
|
+
import '../shared/ccjk.DScm_NnL.mjs';
|
|
37
40
|
import './main.mjs';
|
|
38
41
|
import 'module';
|
|
39
|
-
import 'node:child_process';
|
|
40
42
|
import 'node:stream';
|
|
41
|
-
import '../shared/ccjk.DScm_NnL.mjs';
|
|
42
43
|
import '../shared/ccjk.DeWpAShp.mjs';
|
|
43
44
|
|
|
44
45
|
const DEFAULT_MODEL_CHOICES = [
|
|
@@ -105,7 +106,7 @@ async function handleCustomApiMode() {
|
|
|
105
106
|
ensureI18nInitialized();
|
|
106
107
|
const zcfConfig = readZcfConfig();
|
|
107
108
|
const codeToolType = zcfConfig?.codeToolType || "claude-code";
|
|
108
|
-
if (codeToolType === "claude-code") {
|
|
109
|
+
if (codeToolType === "claude-code" || codeToolType === "myclaude") {
|
|
109
110
|
const { configureIncrementalManagement } = await import('./claude-code-incremental-manager.mjs');
|
|
110
111
|
await configureIncrementalManagement();
|
|
111
112
|
return;
|
|
@@ -191,6 +192,57 @@ async function handleCustomApiMode() {
|
|
|
191
192
|
console.log(a.gray(` Key: ${formatApiKeyDisplay(configuredApi.key)}`));
|
|
192
193
|
}
|
|
193
194
|
}
|
|
195
|
+
async function configureMcpFeature() {
|
|
196
|
+
ensureI18nInitialized();
|
|
197
|
+
if (isWindows()) {
|
|
198
|
+
const fixWindows = await promptBoolean({
|
|
199
|
+
message: i18n.t("configuration:fixWindowsMcp") || "Fix Windows MCP configuration?",
|
|
200
|
+
defaultValue: true
|
|
201
|
+
});
|
|
202
|
+
if (fixWindows) {
|
|
203
|
+
const existingConfig = readMcpConfig() || { mcpServers: {} };
|
|
204
|
+
const fixedConfig = fixWindowsMcpConfig(existingConfig);
|
|
205
|
+
writeMcpConfig(fixedConfig);
|
|
206
|
+
console.log(a.green(`\u2714 ${i18n.t("configuration:windowsMcpConfigFixed")}`));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const selectedServices = await selectMcpServices();
|
|
210
|
+
if (!selectedServices) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (selectedServices.length > 0) {
|
|
214
|
+
const mcpBackupPath = backupMcpConfig();
|
|
215
|
+
if (mcpBackupPath) {
|
|
216
|
+
console.log(a.gray(`\u2714 ${i18n.t("mcp:mcpBackupSuccess")}: ${mcpBackupPath}`));
|
|
217
|
+
}
|
|
218
|
+
const newServers = {};
|
|
219
|
+
for (const serviceId of selectedServices) {
|
|
220
|
+
const service = (await getMcpServices()).find((s) => s.id === serviceId);
|
|
221
|
+
if (!service)
|
|
222
|
+
continue;
|
|
223
|
+
let config = service.config;
|
|
224
|
+
if (service.requiresApiKey) {
|
|
225
|
+
const { apiKey } = await inquirer.prompt({
|
|
226
|
+
type: "input",
|
|
227
|
+
name: "apiKey",
|
|
228
|
+
message: service.apiKeyPrompt,
|
|
229
|
+
validate: async (value) => !!value || i18n.t("api:keyRequired")
|
|
230
|
+
});
|
|
231
|
+
if (apiKey) {
|
|
232
|
+
config = buildMcpServerConfig(service.config, apiKey, service.apiKeyPlaceholder, service.apiKeyEnvVar);
|
|
233
|
+
} else {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
newServers[service.id] = config;
|
|
238
|
+
}
|
|
239
|
+
const existingConfig = readMcpConfig();
|
|
240
|
+
let mergedConfig = mergeMcpServers(existingConfig, newServers);
|
|
241
|
+
mergedConfig = fixWindowsMcpConfig(mergedConfig);
|
|
242
|
+
writeMcpConfig(mergedConfig);
|
|
243
|
+
console.log(a.green(`\u2714 ${i18n.t("mcp:mcpConfigSuccess")}`));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
194
246
|
async function configureDefaultModelFeature() {
|
|
195
247
|
ensureI18nInitialized();
|
|
196
248
|
const existingModel = getExistingModelConfig();
|
|
@@ -293,7 +345,7 @@ async function changeScriptLanguageFeature(currentLang) {
|
|
|
293
345
|
}
|
|
294
346
|
async function configureCodexDefaultModelFeature() {
|
|
295
347
|
ensureI18nInitialized();
|
|
296
|
-
const { readCodexConfig } = await import('./codex.mjs').then(function (n) { return n.
|
|
348
|
+
const { readCodexConfig } = await import('./codex.mjs').then(function (n) { return n.q; });
|
|
297
349
|
const existingConfig = readCodexConfig();
|
|
298
350
|
const currentModel = existingConfig?.model;
|
|
299
351
|
if (currentModel) {
|
|
@@ -393,14 +445,14 @@ ${a.green(`\u2139 ${i18n.t("configuration:existingLanguageConfig") || "Existing
|
|
|
393
445
|
} else if (option === "systemPrompt") {
|
|
394
446
|
const zcfConfig = readZcfConfig();
|
|
395
447
|
const currentLang = zcfConfig?.aiOutputLang || "English";
|
|
396
|
-
const { runCodexSystemPromptSelection } = await import('./codex.mjs').then(function (n) { return n.
|
|
448
|
+
const { runCodexSystemPromptSelection } = await import('./codex.mjs').then(function (n) { return n.q; });
|
|
397
449
|
await runCodexSystemPromptSelection();
|
|
398
450
|
await ensureLanguageDirectiveInAgents(currentLang);
|
|
399
451
|
console.log(a.green(`\u2714 ${i18n.t("configuration:systemPromptConfigured")}`));
|
|
400
452
|
}
|
|
401
453
|
}
|
|
402
454
|
async function updateCodexModelProvider(modelProvider) {
|
|
403
|
-
const { readCodexConfig, writeCodexConfig, backupCodexConfig, getBackupMessage } = await import('./codex.mjs').then(function (n) { return n.
|
|
455
|
+
const { readCodexConfig, writeCodexConfig, backupCodexConfig, getBackupMessage } = await import('./codex.mjs').then(function (n) { return n.q; });
|
|
404
456
|
const backupPath = backupCodexConfig();
|
|
405
457
|
if (backupPath) {
|
|
406
458
|
console.log(a.gray(getBackupMessage(backupPath)));
|
|
@@ -430,7 +482,7 @@ const codexLanguageLabels = {
|
|
|
430
482
|
};
|
|
431
483
|
async function setCodexLanguageDirective(aiOutputLang, mode) {
|
|
432
484
|
const { readFile, writeFileAtomic, exists } = await import('./fs-operations.mjs');
|
|
433
|
-
const { backupCodexAgents, getBackupMessage } = await import('./codex.mjs').then(function (n) { return n.
|
|
485
|
+
const { backupCodexAgents, getBackupMessage } = await import('./codex.mjs').then(function (n) { return n.q; });
|
|
434
486
|
const CODEX_AGENTS_FILE = join(homedir(), ".codex", "AGENTS.md");
|
|
435
487
|
if (!exists(CODEX_AGENTS_FILE)) {
|
|
436
488
|
console.log(a.yellow(i18n.t("codex:agentsFileNotFound")));
|
|
@@ -460,6 +512,8 @@ async function updateCodexLanguageDirective(aiOutputLang) {
|
|
|
460
512
|
return setCodexLanguageDirective(aiOutputLang, "update");
|
|
461
513
|
}
|
|
462
514
|
async function configureMemoryFeature() {
|
|
515
|
+
ensureI18nInitialized();
|
|
516
|
+
const isZh = i18n.language === "zh-CN";
|
|
463
517
|
const inquirer2 = (await import('./index6.mjs').then(function (n) { return n.c; })).default;
|
|
464
518
|
const ansis2 = (await import('./index5.mjs')).default;
|
|
465
519
|
const { execSync } = await import('node:child_process');
|
|
@@ -502,6 +556,8 @@ ${ansis2.bold(i18n.t("memory:currentStatus"))}`);
|
|
|
502
556
|
{ name: i18n.t("memory:editMemory"), value: "edit" },
|
|
503
557
|
{ name: i18n.t("memory:syncNow"), value: "sync" },
|
|
504
558
|
{ name: i18n.t("memory:configureRules"), value: "rules" },
|
|
559
|
+
{ name: isZh ? "\u{1F310} \u914D\u7F6E AI \u8F93\u51FA\u8BED\u8A00" : "\u{1F310} Configure AI output language", value: "language" },
|
|
560
|
+
{ name: isZh ? "\u{1F3A8} \u914D\u7F6E\u8F93\u51FA\u98CE\u683C" : "\u{1F3A8} Configure output style", value: "outputStyle" },
|
|
505
561
|
{ name: i18n.t("memory:back"), value: "back" }
|
|
506
562
|
]
|
|
507
563
|
}
|
|
@@ -573,7 +629,15 @@ ${ansis2.bold(i18n.t("memory:memoryContent"))}`);
|
|
|
573
629
|
console.log(i18n.t("memory:rulesDescription"));
|
|
574
630
|
break;
|
|
575
631
|
}
|
|
632
|
+
case "language": {
|
|
633
|
+
await changeScriptLanguageFeature(i18n.language);
|
|
634
|
+
break;
|
|
635
|
+
}
|
|
636
|
+
case "outputStyle": {
|
|
637
|
+
await configureOutputStyle();
|
|
638
|
+
break;
|
|
639
|
+
}
|
|
576
640
|
}
|
|
577
641
|
}
|
|
578
642
|
|
|
579
|
-
export { CODEX_MODEL_CHOICES, DEFAULT_MODEL_CHOICES, changeScriptLanguageFeature, configureCodexAiMemoryFeature, configureCodexDefaultModelFeature, configureDefaultModelFeature, configureMemoryFeature, formatCodexModelLabel, handleCustomApiMode, promptCustomModels };
|
|
643
|
+
export { CODEX_MODEL_CHOICES, DEFAULT_MODEL_CHOICES, changeScriptLanguageFeature, configureCodexAiMemoryFeature, configureCodexDefaultModelFeature, configureDefaultModelFeature, configureMcpFeature, configureMemoryFeature, formatCodexModelLabel, handleCustomApiMode, promptCustomModels };
|
package/dist/chunks/index10.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { CLOUD_ENDPOINTS, CCJK_CONFIG_DIR, SUPPORTED_LANGS, LANG_LABELS, CODE_TO
|
|
|
4
4
|
import { ensureI18nInitialized, i18n, resolveSupportedLanguage, changeLanguage } from './index2.mjs';
|
|
5
5
|
import { displayBannerWithInfo } from './banner.mjs';
|
|
6
6
|
import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
|
|
7
|
-
import { c as runCodexUpdate,
|
|
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
8
|
import { S as STARTUP_CODE_TOOL_CHOICES, a as resolveStartupCodeType } from '../shared/ccjk.yYQMbHH3.mjs';
|
|
9
9
|
import { a as handleExitPromptError, h as handleGeneralError } from '../shared/ccjk.DGllfVCZ.mjs';
|
|
10
10
|
import { changeScriptLanguageFeature } from './features.mjs';
|
|
@@ -26,7 +26,7 @@ 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.
|
|
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';
|
|
@@ -3162,7 +3162,7 @@ async function runOnboardingWizard(options = {}) {
|
|
|
3162
3162
|
console.log("");
|
|
3163
3163
|
}
|
|
3164
3164
|
|
|
3165
|
-
const NON_CODEX_TOOLS = ["claude-code", "aider", "continue", "cline", "cursor"];
|
|
3165
|
+
const NON_CODEX_TOOLS = ["claude-code", "myclaude", "aider", "continue", "cline", "cursor"];
|
|
3166
3166
|
const quickActionsItems = [
|
|
3167
3167
|
{
|
|
3168
3168
|
id: "init",
|
|
@@ -3238,6 +3238,17 @@ const quickActionsItems = [
|
|
|
3238
3238
|
icon: "\u{1F4F1}",
|
|
3239
3239
|
shortcut: "5",
|
|
3240
3240
|
supportedTools: NON_CODEX_TOOLS
|
|
3241
|
+
},
|
|
3242
|
+
{
|
|
3243
|
+
id: "switch-code-tool",
|
|
3244
|
+
label: "menuOptions.switchCodeTool",
|
|
3245
|
+
description: "menuDescriptions.switchCodeTool",
|
|
3246
|
+
category: "quick",
|
|
3247
|
+
level: "basic",
|
|
3248
|
+
action: "command",
|
|
3249
|
+
icon: "\u{1F504}",
|
|
3250
|
+
shortcut: "s",
|
|
3251
|
+
supportedTools: NON_CODEX_TOOLS
|
|
3241
3252
|
}
|
|
3242
3253
|
];
|
|
3243
3254
|
const configItems = [
|
|
@@ -3468,17 +3479,6 @@ const systemItems = [
|
|
|
3468
3479
|
shortcut: "z",
|
|
3469
3480
|
supportedTools: NON_CODEX_TOOLS
|
|
3470
3481
|
},
|
|
3471
|
-
{
|
|
3472
|
-
id: "switch-code-tool",
|
|
3473
|
-
label: "menuOptions.switchCodeTool",
|
|
3474
|
-
description: "menuDescriptions.switchCodeTool",
|
|
3475
|
-
category: "system",
|
|
3476
|
-
level: "expert",
|
|
3477
|
-
action: "command",
|
|
3478
|
-
icon: "\u{1F504}",
|
|
3479
|
-
shortcut: "t",
|
|
3480
|
-
supportedTools: NON_CODEX_TOOLS
|
|
3481
|
-
},
|
|
3482
3482
|
{
|
|
3483
3483
|
id: "uninstall",
|
|
3484
3484
|
label: "menuOptions.uninstall",
|
|
@@ -3774,6 +3774,15 @@ function getToolModeMeta(codeTool) {
|
|
|
3774
3774
|
config: t("menu:toolMode.claude.config", "Primary config: ~/.claude/settings.json"),
|
|
3775
3775
|
menuTitle: t("menu:toolMode.claude.menuTitle", "Claude Control Center")
|
|
3776
3776
|
};
|
|
3777
|
+
case "myclaude":
|
|
3778
|
+
return {
|
|
3779
|
+
icon: "\u25C9",
|
|
3780
|
+
title: t("menu:toolMode.myclaude.title", "myclaude Workspace"),
|
|
3781
|
+
summary: t("menu:toolMode.myclaude.summary", "Provider-first control center with explicit runtime status at startup."),
|
|
3782
|
+
focus: t("menu:toolMode.myclaude.focus", "Provider profiles, routing state, model slots, and Claude-family compatible configuration."),
|
|
3783
|
+
config: t("menu:toolMode.myclaude.config", "Primary config: ~/.claude.json (runtime) + ~/.ccjk/config.toml (reusable profiles)"),
|
|
3784
|
+
menuTitle: t("menu:toolMode.myclaude.menuTitle", "myclaude Control Center")
|
|
3785
|
+
};
|
|
3777
3786
|
case "codex":
|
|
3778
3787
|
return {
|
|
3779
3788
|
icon: "\u25C6",
|
|
@@ -3907,15 +3916,28 @@ function renderMenu(title, items, options = {}) {
|
|
|
3907
3916
|
lines.push(renderFooter(opts));
|
|
3908
3917
|
return lines.join("\n");
|
|
3909
3918
|
}
|
|
3910
|
-
function renderToolModeHero(codeTool, width = 76) {
|
|
3919
|
+
function renderToolModeHero(codeTool, width = 76, runtimeSummary) {
|
|
3911
3920
|
const meta = getToolModeMeta(codeTool);
|
|
3921
|
+
const content = [
|
|
3922
|
+
colors.itemText(meta.summary),
|
|
3923
|
+
`${colors.shortcut("Focus")} ${colors.itemText(meta.focus)}`,
|
|
3924
|
+
`${colors.shortcut("Config")} ${colors.itemText(meta.config)}`
|
|
3925
|
+
];
|
|
3926
|
+
if (runtimeSummary?.runtimeLabel) {
|
|
3927
|
+
content.push(`${colors.shortcut("Runtime")} ${colors.itemText(runtimeSummary.runtimeLabel)}`);
|
|
3928
|
+
}
|
|
3929
|
+
if (runtimeSummary?.profileLabel) {
|
|
3930
|
+
content.push(`${colors.shortcut("Profile")} ${colors.itemText(runtimeSummary.profileLabel)}`);
|
|
3931
|
+
}
|
|
3932
|
+
if (runtimeSummary?.routeLabel) {
|
|
3933
|
+
content.push(`${colors.shortcut("Route")} ${colors.itemText(runtimeSummary.routeLabel)}`);
|
|
3934
|
+
}
|
|
3935
|
+
if (runtimeSummary?.modelLabel) {
|
|
3936
|
+
content.push(`${colors.shortcut("Models")} ${colors.itemText(runtimeSummary.modelLabel)}`);
|
|
3937
|
+
}
|
|
3912
3938
|
return renderBox(
|
|
3913
3939
|
`${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
|
-
],
|
|
3940
|
+
content,
|
|
3919
3941
|
width
|
|
3920
3942
|
);
|
|
3921
3943
|
}
|
|
@@ -4126,7 +4148,7 @@ function attachHandlers(items, codeTool) {
|
|
|
4126
4148
|
await configureCodexMcp();
|
|
4127
4149
|
return;
|
|
4128
4150
|
}
|
|
4129
|
-
await (await import('./
|
|
4151
|
+
await (await import('./features.mjs')).configureMcpFeature();
|
|
4130
4152
|
}
|
|
4131
4153
|
};
|
|
4132
4154
|
case "model-config":
|
|
@@ -4332,6 +4354,29 @@ function getProgressiveFooterCommands(codeTool) {
|
|
|
4332
4354
|
}
|
|
4333
4355
|
];
|
|
4334
4356
|
}
|
|
4357
|
+
function buildMyclaudeRuntimeSummary(syncResult) {
|
|
4358
|
+
if (!syncResult?.activeProfile) {
|
|
4359
|
+
return {
|
|
4360
|
+
runtimeLabel: "myclaude / no active provider synced"
|
|
4361
|
+
};
|
|
4362
|
+
}
|
|
4363
|
+
const profile = syncResult.activeProfile;
|
|
4364
|
+
const routeFamily = profile.baseUrl ? "OpenAI-compatible gateway" : "Official runtime route";
|
|
4365
|
+
const primaryModel = typeof profile.primaryModel === "string" ? profile.primaryModel : profile.model;
|
|
4366
|
+
const fastModel = typeof profile.defaultHaikuModel === "string" ? profile.defaultHaikuModel : profile.fastModel;
|
|
4367
|
+
const sonnetModel = typeof profile.defaultSonnetModel === "string" ? profile.defaultSonnetModel : void 0;
|
|
4368
|
+
const modelParts = [
|
|
4369
|
+
primaryModel ? `primary ${primaryModel}` : void 0,
|
|
4370
|
+
fastModel ? `fast ${fastModel}` : void 0,
|
|
4371
|
+
sonnetModel ? `exec ${sonnetModel}` : void 0
|
|
4372
|
+
].filter(Boolean);
|
|
4373
|
+
return {
|
|
4374
|
+
runtimeLabel: "myclaude",
|
|
4375
|
+
profileLabel: `${profile.name} (${syncResult.activeProfileId || profile.id})`,
|
|
4376
|
+
routeLabel: profile.baseUrl ? `${routeFamily} \xB7 ${profile.baseUrl}` : routeFamily,
|
|
4377
|
+
modelLabel: modelParts.join(" \xB7 ") || void 0
|
|
4378
|
+
};
|
|
4379
|
+
}
|
|
4335
4380
|
function getMenuShellConfig(codeTool) {
|
|
4336
4381
|
if (codeTool === "codex" || codeTool === "myclaude") {
|
|
4337
4382
|
return {
|
|
@@ -4348,7 +4393,7 @@ function getMenuShellConfig(codeTool) {
|
|
|
4348
4393
|
showHero: false
|
|
4349
4394
|
};
|
|
4350
4395
|
}
|
|
4351
|
-
async function showProgressiveMenu(codeTool) {
|
|
4396
|
+
async function showProgressiveMenu(codeTool, runtimeSyncResult) {
|
|
4352
4397
|
if (codeTool !== "codex" && codeTool !== "myclaude") {
|
|
4353
4398
|
const rawItems2 = getItemsForLevel(menuState.level, "claude-code");
|
|
4354
4399
|
const items2 = attachHandlers(rawItems2, "claude-code");
|
|
@@ -4438,7 +4483,7 @@ async function showProgressiveMenu(codeTool) {
|
|
|
4438
4483
|
const menuShell = getMenuShellConfig(codeTool);
|
|
4439
4484
|
const allowedCommands = ["0", "q", ...menuShell.allowMore ? ["m"] : [], ...menuShell.footerCommands.map((command) => command.key)];
|
|
4440
4485
|
if (menuShell.showHero) {
|
|
4441
|
-
console.log(renderToolModeHero(codeTool));
|
|
4486
|
+
console.log(renderToolModeHero(codeTool, 76, codeTool === "myclaude" ? buildMyclaudeRuntimeSummary(runtimeSyncResult) : void 0));
|
|
4442
4487
|
console.log("");
|
|
4443
4488
|
}
|
|
4444
4489
|
const menuOutput = renderMenu(
|
|
@@ -5214,6 +5259,7 @@ async function showMainMenu(options = {}) {
|
|
|
5214
5259
|
if (await isFirstTimeUser()) {
|
|
5215
5260
|
await runOnboardingWizard({ preferredCodeTool: options.codeType });
|
|
5216
5261
|
}
|
|
5262
|
+
let myclaudeRuntimeSyncResult = null;
|
|
5217
5263
|
try {
|
|
5218
5264
|
const previousType = getCurrentCodeTool();
|
|
5219
5265
|
const resolvedType = await resolveStartupCodeType({
|
|
@@ -5226,6 +5272,10 @@ async function showMainMenu(options = {}) {
|
|
|
5226
5272
|
console.log(a.green(`\u2714 Switched to ${resolvedType}`));
|
|
5227
5273
|
}
|
|
5228
5274
|
}
|
|
5275
|
+
if (resolvedType === "myclaude") {
|
|
5276
|
+
const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.E; });
|
|
5277
|
+
myclaudeRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
|
|
5278
|
+
}
|
|
5229
5279
|
} catch (err) {
|
|
5230
5280
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
5231
5281
|
console.error(a.yellow(errorMessage));
|
|
@@ -5234,7 +5284,11 @@ async function showMainMenu(options = {}) {
|
|
|
5234
5284
|
while (!exitMenu) {
|
|
5235
5285
|
const codeTool = getCurrentCodeTool();
|
|
5236
5286
|
displayBannerWithInfo(CODE_TOOL_BANNERS[codeTool] || "CCJK");
|
|
5237
|
-
|
|
5287
|
+
if (codeTool === "myclaude") {
|
|
5288
|
+
const { syncMyclaudeProviderProfilesFromCurrentClaudeConfig } = await import('./config.mjs').then(function (n) { return n.E; });
|
|
5289
|
+
myclaudeRuntimeSyncResult = syncMyclaudeProviderProfilesFromCurrentClaudeConfig();
|
|
5290
|
+
}
|
|
5291
|
+
const result = await showProgressiveMenu(codeTool, myclaudeRuntimeSyncResult);
|
|
5238
5292
|
if (result === "exit") {
|
|
5239
5293
|
exitMenu = true;
|
|
5240
5294
|
} else if (result === "switch") {
|