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.
- package/dist/chunks/api-cli.mjs +5 -5
- package/dist/chunks/api-config-selector.mjs +18 -5
- package/dist/chunks/api-providers.mjs +24 -9
- package/dist/chunks/auto-updater.mjs +13 -13
- package/dist/chunks/boost.mjs +1 -1
- package/dist/chunks/ccjk-all.mjs +4 -4
- package/dist/chunks/ccjk-config.mjs +78 -1
- package/dist/chunks/ccjk-mcp.mjs +4 -4
- package/dist/chunks/ccjk-setup.mjs +4 -4
- package/dist/chunks/ccr.mjs +11 -11
- package/dist/chunks/check-updates.mjs +3 -3
- package/dist/chunks/claude-code-incremental-manager.mjs +8 -6
- package/dist/chunks/claude-config.mjs +73 -0
- package/dist/chunks/claude-wrapper.mjs +1 -1
- package/dist/chunks/cli-hook.mjs +76 -1
- package/dist/chunks/code-type-resolver.mjs +14 -13
- package/dist/chunks/codex-config-switch.mjs +2 -2
- package/dist/chunks/codex-provider-manager.mjs +2 -2
- package/dist/chunks/codex.mjs +3 -3
- package/dist/chunks/config-switch.mjs +5 -5
- package/dist/chunks/config.mjs +531 -158
- package/dist/chunks/config2.mjs +22 -20
- package/dist/chunks/config3.mjs +6 -6
- package/dist/chunks/constants.mjs +20 -13
- package/dist/chunks/doctor.mjs +1 -1
- package/dist/chunks/features.mjs +59 -4
- package/dist/chunks/fs-operations.mjs +2 -14
- package/dist/chunks/index.mjs +1 -1
- package/dist/chunks/index10.mjs +115 -100
- package/dist/chunks/init.mjs +121 -53
- package/dist/chunks/installer.mjs +28 -21
- package/dist/chunks/mcp-cli.mjs +6 -6
- package/dist/chunks/mcp.mjs +6 -6
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/platform.mjs +3 -3
- package/dist/chunks/prompts.mjs +9 -7
- package/dist/chunks/quick-actions.mjs +1 -1
- package/dist/chunks/quick-provider.mjs +23 -31
- package/dist/chunks/quick-setup.mjs +3 -4
- package/dist/chunks/simple-config.mjs +57 -16
- package/dist/chunks/slash-commands.mjs +1 -1
- package/dist/chunks/smart-guide.mjs +23 -10
- package/dist/chunks/status.mjs +28 -24
- package/dist/chunks/update.mjs +19 -18
- package/dist/chunks/upgrade.mjs +88 -5
- package/dist/chunks/version-checker.mjs +2 -2
- package/dist/chunks/zero-config.mjs +121 -16
- package/dist/cli.mjs +50 -27
- package/dist/i18n/locales/en/configuration.json +5 -3
- package/dist/i18n/locales/en/language.json +1 -1
- package/dist/i18n/locales/en/menu.json +8 -7
- package/dist/i18n/locales/en/multi-config.json +1 -1
- package/dist/i18n/locales/zh-CN/configuration.json +5 -3
- package/dist/i18n/locales/zh-CN/language.json +1 -1
- package/dist/i18n/locales/zh-CN/menu.json +8 -7
- package/dist/i18n/locales/zh-CN/multi-config.json +1 -1
- package/dist/index.d.mts +13 -11
- package/dist/index.d.ts +13 -11
- package/dist/index.mjs +7 -7
- package/dist/shared/{ccjk.B6VCKdyy.mjs → ccjk.BXTrU9TN.mjs} +31 -68
- package/dist/shared/{ccjk.DScm_NnL.mjs → ccjk.Ccrqt7u2.mjs} +30 -1
- package/dist/shared/{ccjk.CVjfbEIj.mjs → ccjk.DZtwozOG.mjs} +1 -1
- package/dist/shared/{ccjk.D6wx-rxT.mjs → ccjk.Dxgd2vjc.mjs} +3 -3
- package/dist/shared/{ccjk.BO45TPXJ.mjs → ccjk.K8c6VnM2.mjs} +2 -2
- package/dist/shared/{ccjk.BJENIVf7.mjs → ccjk.MpkxXQJL.mjs} +179 -19
- package/dist/shared/{ccjk.Dh6Be-ef.mjs → ccjk.ygJzcD-n.mjs} +28 -24
- package/package.json +1 -30
- package/dist/chunks/auto-fix.mjs +0 -253
- package/dist/chunks/auto-init.mjs +0 -311
- package/dist/chunks/auto-upgrade.mjs +0 -152
- package/dist/chunks/migrator.mjs +0 -178
- package/dist/shared/ccjk.DDq2hqA5.mjs +0 -158
- package/dist/shared/ccjk.KPLeMP-o.mjs +0 -79
- package/templates/common/workflow/essential/en/agents/planner.md +0 -116
- package/templates/common/workflow/essential/zh-CN/agents/planner.md +0 -116
package/dist/chunks/upgrade.mjs
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { i as inquirer } from './index6.mjs';
|
|
2
|
-
import {
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
3
6
|
import 'node:readline';
|
|
4
7
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
5
8
|
import 'stream';
|
|
@@ -11,13 +14,93 @@ import 'node:util';
|
|
|
11
14
|
import 'tty';
|
|
12
15
|
import 'fs';
|
|
13
16
|
import 'child_process';
|
|
14
|
-
import 'node:path';
|
|
15
|
-
import 'node:os';
|
|
16
17
|
import 'node:crypto';
|
|
17
18
|
import 'buffer';
|
|
18
19
|
import 'string_decoder';
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
function getCurrentVersion() {
|
|
22
|
+
try {
|
|
23
|
+
const packagePath = join(__dirname, "../../package.json");
|
|
24
|
+
const pkg = JSON.parse(readFileSync(packagePath, "utf-8"));
|
|
25
|
+
return pkg.version;
|
|
26
|
+
} catch {
|
|
27
|
+
return "0.0.0";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function getLatestVersion() {
|
|
31
|
+
try {
|
|
32
|
+
const result = execSync("npm view @cometx/ccjk version", {
|
|
33
|
+
encoding: "utf-8",
|
|
34
|
+
timeout: 3e3,
|
|
35
|
+
stdio: ["pipe", "pipe", "ignore"]
|
|
36
|
+
// 忽略 stderr
|
|
37
|
+
});
|
|
38
|
+
return result.trim();
|
|
39
|
+
} catch {
|
|
40
|
+
return getCurrentVersion();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function compareVersions(v1, v2) {
|
|
44
|
+
const parts1 = v1.split(".").map(Number);
|
|
45
|
+
const parts2 = v2.split(".").map(Number);
|
|
46
|
+
for (let i = 0; i < 3; i++) {
|
|
47
|
+
const p1 = parts1[i] || 0;
|
|
48
|
+
const p2 = parts2[i] || 0;
|
|
49
|
+
if (p1 > p2)
|
|
50
|
+
return 1;
|
|
51
|
+
if (p1 < p2)
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
function detectUpdateType(current, latest) {
|
|
57
|
+
const c = current.split(".").map(Number);
|
|
58
|
+
const l = latest.split(".").map(Number);
|
|
59
|
+
if (l[0] > c[0])
|
|
60
|
+
return "major";
|
|
61
|
+
if (l[1] > c[1])
|
|
62
|
+
return "minor";
|
|
63
|
+
if (l[2] > c[2])
|
|
64
|
+
return "patch";
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
async function checkForUpdates() {
|
|
68
|
+
const current = getCurrentVersion();
|
|
69
|
+
const latest = await getLatestVersion();
|
|
70
|
+
const hasUpdate = compareVersions(latest, current) > 0;
|
|
71
|
+
const updateType = hasUpdate ? detectUpdateType(current, latest) : null;
|
|
72
|
+
return {
|
|
73
|
+
current,
|
|
74
|
+
latest,
|
|
75
|
+
hasUpdate,
|
|
76
|
+
updateType
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
join(homedir(), ".claude", ".upgrade-state.json");
|
|
80
|
+
async function performUpgrade() {
|
|
81
|
+
try {
|
|
82
|
+
console.log("\u{1F680} Upgrading CCJK...");
|
|
83
|
+
let packageManager = "npm";
|
|
84
|
+
try {
|
|
85
|
+
execSync("pnpm --version", { stdio: "ignore" });
|
|
86
|
+
packageManager = "pnpm";
|
|
87
|
+
} catch {
|
|
88
|
+
try {
|
|
89
|
+
execSync("yarn --version", { stdio: "ignore" });
|
|
90
|
+
packageManager = "yarn";
|
|
91
|
+
} catch {
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const command = packageManager === "yarn" ? "yarn global add @cometx/ccjk@latest" : `${packageManager} add -g @cometx/ccjk@latest`;
|
|
95
|
+
console.log(` Running: ${command}`);
|
|
96
|
+
execSync(command, { stdio: "inherit" });
|
|
97
|
+
console.log("\n\u2705 Upgrade completed!");
|
|
98
|
+
return true;
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error("\u274C Upgrade failed:", error);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
21
104
|
|
|
22
105
|
async function upgrade() {
|
|
23
106
|
console.log("\u{1F50D} Checking for updates...\n");
|
|
@@ -865,8 +865,8 @@ async function checkCometixLineVersion() {
|
|
|
865
865
|
};
|
|
866
866
|
}
|
|
867
867
|
async function checkMyclaudeVersion() {
|
|
868
|
-
const currentVersion = await getInstalledVersion("
|
|
869
|
-
const latestVersion = await getLatestVersion("
|
|
868
|
+
const currentVersion = await getInstalledVersion("clavue");
|
|
869
|
+
const latestVersion = await getLatestVersion("clavue");
|
|
870
870
|
return {
|
|
871
871
|
installed: currentVersion !== null,
|
|
872
872
|
currentVersion,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import a from './index5.mjs';
|
|
3
3
|
import { i as inquirer } from './index6.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { ZCF_CONFIG_FILE } from './constants.mjs';
|
|
5
5
|
import { i18n } from './index2.mjs';
|
|
6
|
+
import { updateTomlConfig } from './ccjk-config.mjs';
|
|
6
7
|
import { ensureDir, writeFileAtomic } from './fs-operations.mjs';
|
|
7
|
-
import { m as mergeAndCleanPermissions } from '../shared/ccjk.
|
|
8
|
+
import { r as resolveClaudeFamilySettingsTarget, m as mergeAndCleanPermissions } from '../shared/ccjk.Ccrqt7u2.mjs';
|
|
8
9
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
9
10
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
10
11
|
import 'node:readline';
|
|
@@ -24,6 +25,10 @@ import 'buffer';
|
|
|
24
25
|
import 'string_decoder';
|
|
25
26
|
import '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
26
27
|
import 'node:url';
|
|
28
|
+
import '../shared/ccjk.BBtCGd_g.mjs';
|
|
29
|
+
import './index3.mjs';
|
|
30
|
+
import './json-config.mjs';
|
|
31
|
+
import '../shared/ccjk.RyizuzOI.mjs';
|
|
27
32
|
import 'node:fs/promises';
|
|
28
33
|
|
|
29
34
|
const MAX_PRESET = {
|
|
@@ -224,30 +229,99 @@ const SAFE_PRESET = {
|
|
|
224
229
|
]
|
|
225
230
|
};
|
|
226
231
|
const PRESETS = [MAX_PRESET, DEV_PRESET, SAFE_PRESET];
|
|
227
|
-
function
|
|
228
|
-
|
|
232
|
+
function getArchetypeProfile(archetype = "pc-dev") {
|
|
233
|
+
switch (archetype) {
|
|
234
|
+
case "app-dev":
|
|
235
|
+
return {
|
|
236
|
+
id: "app-dev",
|
|
237
|
+
name: "Application Development",
|
|
238
|
+
goal: "Plan, build, verify, and ship application features with a product-focused workflow"
|
|
239
|
+
};
|
|
240
|
+
case "text-studio":
|
|
241
|
+
return {
|
|
242
|
+
id: "text-studio",
|
|
243
|
+
name: "Text Studio",
|
|
244
|
+
goal: "Research, draft, edit, and review text-heavy work with a documentation-first workflow"
|
|
245
|
+
};
|
|
246
|
+
case "service-ops":
|
|
247
|
+
return {
|
|
248
|
+
id: "service-ops",
|
|
249
|
+
name: "Service Operations",
|
|
250
|
+
goal: "Inspect, operate, and maintain services safely with verification and controlled changes"
|
|
251
|
+
};
|
|
252
|
+
case "research":
|
|
253
|
+
return {
|
|
254
|
+
id: "research",
|
|
255
|
+
name: "Research and Analysis",
|
|
256
|
+
goal: "Investigate code, docs, and technical options before applying targeted changes"
|
|
257
|
+
};
|
|
258
|
+
case "automation":
|
|
259
|
+
return {
|
|
260
|
+
id: "automation",
|
|
261
|
+
name: "Automation and Scripting",
|
|
262
|
+
goal: "Automate repetitive development and operations tasks with reliable execution flows"
|
|
263
|
+
};
|
|
264
|
+
case "custom":
|
|
265
|
+
return {
|
|
266
|
+
id: "custom",
|
|
267
|
+
name: "Custom Workflow",
|
|
268
|
+
goal: "Adapt CCJK to a custom working style and toolchain combination"
|
|
269
|
+
};
|
|
270
|
+
case "pc-dev":
|
|
271
|
+
default:
|
|
272
|
+
return {
|
|
273
|
+
id: "pc-dev",
|
|
274
|
+
name: "PC Software Development",
|
|
275
|
+
goal: "Build, debug, test, and ship software efficiently"
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
function getCapabilityProfile(archetype = "pc-dev") {
|
|
280
|
+
return {
|
|
281
|
+
coding: archetype !== "text-studio" && archetype !== "research",
|
|
282
|
+
planning: true,
|
|
283
|
+
taskTracking: true,
|
|
284
|
+
memory: true,
|
|
285
|
+
browserAutomation: false,
|
|
286
|
+
research: true,
|
|
287
|
+
documentAuthoring: archetype === "text-studio" || archetype === "research",
|
|
288
|
+
serviceOps: archetype === "service-ops",
|
|
289
|
+
multiAgent: archetype !== "custom"
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function getOperatorMode(archetype = "pc-dev") {
|
|
293
|
+
if (archetype === "research" || archetype === "text-studio") {
|
|
294
|
+
return "planning-first";
|
|
295
|
+
}
|
|
296
|
+
if (archetype === "custom") {
|
|
297
|
+
return "conversational";
|
|
298
|
+
}
|
|
299
|
+
return "execution-first";
|
|
300
|
+
}
|
|
301
|
+
function loadCurrentSettings(target = resolveClaudeFamilySettingsTarget()) {
|
|
302
|
+
if (!existsSync(target.settingsFile)) {
|
|
229
303
|
return {};
|
|
230
304
|
}
|
|
231
305
|
try {
|
|
232
|
-
const content = readFileSync(
|
|
306
|
+
const content = readFileSync(target.settingsFile, "utf-8");
|
|
233
307
|
return JSON.parse(content);
|
|
234
308
|
} catch {
|
|
235
309
|
return {};
|
|
236
310
|
}
|
|
237
311
|
}
|
|
238
|
-
function saveSettings(settings) {
|
|
239
|
-
ensureDir(
|
|
240
|
-
writeFileAtomic(
|
|
312
|
+
function saveSettings(settings, target = resolveClaudeFamilySettingsTarget()) {
|
|
313
|
+
ensureDir(target.configDir);
|
|
314
|
+
writeFileAtomic(target.settingsFile, JSON.stringify(settings, null, 2));
|
|
241
315
|
}
|
|
242
|
-
function backupSettings() {
|
|
243
|
-
if (!existsSync(
|
|
316
|
+
function backupSettings(target = resolveClaudeFamilySettingsTarget()) {
|
|
317
|
+
if (!existsSync(target.settingsFile)) {
|
|
244
318
|
return null;
|
|
245
319
|
}
|
|
246
320
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, -5);
|
|
247
|
-
const backupDir = `${
|
|
321
|
+
const backupDir = `${target.configDir}/backup`;
|
|
248
322
|
ensureDir(backupDir);
|
|
249
323
|
const backupPath = `${backupDir}/settings-${timestamp}.json`;
|
|
250
|
-
const content = readFileSync(
|
|
324
|
+
const content = readFileSync(target.settingsFile, "utf-8");
|
|
251
325
|
writeFileAtomic(backupPath, content);
|
|
252
326
|
return backupPath;
|
|
253
327
|
}
|
|
@@ -268,6 +342,35 @@ function applyPreset(preset, currentSettings) {
|
|
|
268
342
|
}
|
|
269
343
|
return newSettings;
|
|
270
344
|
}
|
|
345
|
+
function applyAdaptationPreset(preset, archetype = "pc-dev") {
|
|
346
|
+
const safetyLevel = preset.id === "safe" ? "safe" : preset.id === "max" ? "max" : "dev";
|
|
347
|
+
updateTomlConfig(ZCF_CONFIG_FILE, {
|
|
348
|
+
adaptation: {
|
|
349
|
+
archetypeProfile: getArchetypeProfile(archetype),
|
|
350
|
+
capabilityProfile: getCapabilityProfile(archetype),
|
|
351
|
+
policyProfile: {
|
|
352
|
+
permissionPreset: safetyLevel,
|
|
353
|
+
verificationMode: safetyLevel === "safe" ? "manual" : "required",
|
|
354
|
+
destructiveActionPolicy: safetyLevel === "max" ? "confirm" : "confirm",
|
|
355
|
+
workflowFallbackMode: "graceful"
|
|
356
|
+
},
|
|
357
|
+
contextProfile: {
|
|
358
|
+
memoryMode: archetype === "custom" ? "session-only" : "project-aware",
|
|
359
|
+
compressionMode: "runtime-native",
|
|
360
|
+
instructionLayering: "runtime-first"
|
|
361
|
+
},
|
|
362
|
+
profileSelection: {
|
|
363
|
+
workflowPack: archetype === "service-ops" ? "service-operations" : "desktop-engineering",
|
|
364
|
+
toolPack: archetype === "text-studio" ? "document-authoring" : "typescript-node-react"
|
|
365
|
+
},
|
|
366
|
+
uiProfile: {
|
|
367
|
+
language: i18n.language === "zh-CN" ? "zh-CN" : "en",
|
|
368
|
+
outputStyle: "concise",
|
|
369
|
+
operatorMode: getOperatorMode(archetype)
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
}
|
|
271
374
|
function showPresetDiff(preset, currentSettings) {
|
|
272
375
|
const isZh = i18n.language === "zh-CN";
|
|
273
376
|
const currentPermissions = new Set(currentSettings.permissions?.allow || []);
|
|
@@ -301,6 +404,7 @@ function showPresetDiff(preset, currentSettings) {
|
|
|
301
404
|
}
|
|
302
405
|
async function zeroConfig(options = {}) {
|
|
303
406
|
const isZh = i18n.language === "zh-CN";
|
|
407
|
+
const target = resolveClaudeFamilySettingsTarget();
|
|
304
408
|
if (options.list) {
|
|
305
409
|
console.log("");
|
|
306
410
|
console.log(a.bold.cyan(isZh ? "\u{1F4E6} \u53EF\u7528\u7684\u6743\u9650\u9884\u8BBE" : "\u{1F4E6} Available Permission Presets"));
|
|
@@ -343,7 +447,7 @@ async function zeroConfig(options = {}) {
|
|
|
343
447
|
return;
|
|
344
448
|
}
|
|
345
449
|
}
|
|
346
|
-
const currentSettings = loadCurrentSettings();
|
|
450
|
+
const currentSettings = loadCurrentSettings(target);
|
|
347
451
|
showPresetDiff(selectedPreset, currentSettings);
|
|
348
452
|
if (!options.preset) {
|
|
349
453
|
const { confirm } = await inquirer.prompt({
|
|
@@ -358,16 +462,17 @@ async function zeroConfig(options = {}) {
|
|
|
358
462
|
}
|
|
359
463
|
}
|
|
360
464
|
if (!options.skipBackup) {
|
|
361
|
-
const backupPath = backupSettings();
|
|
465
|
+
const backupPath = backupSettings(target);
|
|
362
466
|
if (backupPath) {
|
|
363
467
|
console.log(a.gray(`\u2714 ${isZh ? "\u5DF2\u5907\u4EFD\u5230" : "Backed up to"}: ${backupPath}`));
|
|
364
468
|
}
|
|
365
469
|
}
|
|
366
470
|
const newSettings = applyPreset(selectedPreset, currentSettings);
|
|
367
|
-
saveSettings(newSettings);
|
|
471
|
+
saveSettings(newSettings, target);
|
|
472
|
+
applyAdaptationPreset(selectedPreset, options.archetype);
|
|
368
473
|
console.log("");
|
|
369
474
|
console.log(a.green(`\u2705 ${isZh ? "\u6743\u9650\u9884\u8BBE\u5DF2\u5E94\u7528" : "Permission preset applied"}: ${selectedPreset.name}`));
|
|
370
|
-
console.log(a.gray(` ${isZh ? "\u914D\u7F6E\u6587\u4EF6" : "Config file"}: ${
|
|
475
|
+
console.log(a.gray(` ${isZh ? "\u914D\u7F6E\u6587\u4EF6" : "Config file"}: ${target.settingsFile}`));
|
|
371
476
|
console.log("");
|
|
372
477
|
}
|
|
373
478
|
|
package/dist/cli.mjs
CHANGED
|
@@ -2453,6 +2453,45 @@ function extractLanguageOptions(options) {
|
|
|
2453
2453
|
skipPrompt: typeof obj.skipPrompt === "boolean" ? obj.skipPrompt : void 0
|
|
2454
2454
|
};
|
|
2455
2455
|
}
|
|
2456
|
+
function classifyStartupPath(args) {
|
|
2457
|
+
const positionalArgs = [];
|
|
2458
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
2459
|
+
const arg = args[index];
|
|
2460
|
+
if (!arg)
|
|
2461
|
+
continue;
|
|
2462
|
+
if (arg === "-l" || arg === "--lang" || arg === "-g" || arg === "--all-lang" || arg === "-T" || arg === "--code-type") {
|
|
2463
|
+
index += 1;
|
|
2464
|
+
continue;
|
|
2465
|
+
}
|
|
2466
|
+
if (arg.startsWith("--lang=") || arg.startsWith("--all-lang=") || arg.startsWith("--code-type=")) {
|
|
2467
|
+
continue;
|
|
2468
|
+
}
|
|
2469
|
+
positionalArgs.push(arg);
|
|
2470
|
+
}
|
|
2471
|
+
const firstToken = positionalArgs[0];
|
|
2472
|
+
if (!firstToken) {
|
|
2473
|
+
return { args, kind: "interactive" };
|
|
2474
|
+
}
|
|
2475
|
+
if (firstToken === "-h" || firstToken === "--help" || firstToken === "help") {
|
|
2476
|
+
return { args, kind: "help" };
|
|
2477
|
+
}
|
|
2478
|
+
if (firstToken === "-v" || firstToken === "--version") {
|
|
2479
|
+
return { args, kind: "version" };
|
|
2480
|
+
}
|
|
2481
|
+
if (firstToken.startsWith("/")) {
|
|
2482
|
+
return { args, kind: "slash" };
|
|
2483
|
+
}
|
|
2484
|
+
if (firstToken.startsWith("-")) {
|
|
2485
|
+
return { args, kind: "plain-args" };
|
|
2486
|
+
}
|
|
2487
|
+
if (shouldBootstrapCloudServicesForArgs(args)) {
|
|
2488
|
+
return { args, kind: "command" };
|
|
2489
|
+
}
|
|
2490
|
+
if (positionalArgs.length === 1) {
|
|
2491
|
+
return { args, kind: "quick-provider" };
|
|
2492
|
+
}
|
|
2493
|
+
return { args, kind: "plain-args" };
|
|
2494
|
+
}
|
|
2456
2495
|
async function setupCommandsLazy(cli) {
|
|
2457
2496
|
const envLang = process__default.env.CCJK_LANG;
|
|
2458
2497
|
if (envLang) {
|
|
@@ -2500,38 +2539,22 @@ ${cmd.deprecationMessage}
|
|
|
2500
2539
|
}
|
|
2501
2540
|
async function runLazyCli() {
|
|
2502
2541
|
const spinner = await showStartupSpinner();
|
|
2542
|
+
const startupPath = classifyStartupPath(process__default.argv.slice(2));
|
|
2503
2543
|
try {
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
runMigration();
|
|
2507
|
-
} catch {
|
|
2508
|
-
}
|
|
2509
|
-
bootstrapCloudServices();
|
|
2510
|
-
try {
|
|
2511
|
-
const { autoInitBrainHooks } = await import('./chunks/auto-init.mjs');
|
|
2512
|
-
await autoInitBrainHooks();
|
|
2513
|
-
} catch {
|
|
2514
|
-
}
|
|
2515
|
-
try {
|
|
2516
|
-
const { runAutoFixOnStartup } = await import('./chunks/auto-fix.mjs');
|
|
2517
|
-
await runAutoFixOnStartup();
|
|
2518
|
-
} catch {
|
|
2544
|
+
if (startupPath.kind === "command") {
|
|
2545
|
+
bootstrapCloudServices();
|
|
2519
2546
|
}
|
|
2520
|
-
|
|
2521
|
-
const
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
if (handled) {
|
|
2527
|
-
spinner?.stop();
|
|
2528
|
-
return;
|
|
2547
|
+
if (startupPath.kind === "quick-provider") {
|
|
2548
|
+
const handled = await tryQuickProviderLaunch();
|
|
2549
|
+
if (handled) {
|
|
2550
|
+
spinner?.stop();
|
|
2551
|
+
return;
|
|
2552
|
+
}
|
|
2529
2553
|
}
|
|
2530
|
-
|
|
2531
|
-
if (args.length > 0 && args[0].startsWith("/")) {
|
|
2554
|
+
if (startupPath.kind === "slash") {
|
|
2532
2555
|
spinner?.stop();
|
|
2533
2556
|
const { executeSlashCommand } = await import('./chunks/slash-commands.mjs');
|
|
2534
|
-
const slashHandled = await executeSlashCommand(args.join(" "));
|
|
2557
|
+
const slashHandled = await executeSlashCommand(startupPath.args.join(" "));
|
|
2535
2558
|
if (slashHandled) {
|
|
2536
2559
|
return;
|
|
2537
2560
|
}
|
|
@@ -90,16 +90,18 @@
|
|
|
90
90
|
"guidanceStep1": "1. Open {{runtime}} and use slash commands:",
|
|
91
91
|
"guidanceStep1Detail": "/ccjk:feat - Feature Dev /ccjk:git-commit - Smart Commit",
|
|
92
92
|
"guidanceStep1Detail2": "/ccjk:init-project - Init Project /commands - View installed",
|
|
93
|
-
"guidanceStep1MyclaudeDetail": "/ccjk:feat - Feature Dev /ccjk:
|
|
94
|
-
"guidanceStep1MyclaudeDetail2": "/
|
|
93
|
+
"guidanceStep1MyclaudeDetail": "/ccjk:feat - Feature Dev /ccjk:git-commit - Smart Commit",
|
|
94
|
+
"guidanceStep1MyclaudeDetail2": "/ccjk:init-project - Init Project /commands - View installed",
|
|
95
95
|
"guidanceStep2": "2. Example:",
|
|
96
96
|
"guidanceStep2Example": "/ccjk:feat implement user login feature",
|
|
97
97
|
"guidanceStep3": "3. View all features:",
|
|
98
98
|
"guidanceStep3Command": "npx ccjk features",
|
|
99
99
|
"guidanceStep3Myclaude": "3. View installed commands:",
|
|
100
100
|
"guidanceStep3MyclaudeCommand": "/commands",
|
|
101
|
-
"guidanceStep4": "4.
|
|
101
|
+
"guidanceStep4": "4. Verify setup health:",
|
|
102
102
|
"guidanceStep4Command": "npx ccjk doctor",
|
|
103
|
+
"guidanceStep5": "5. Keep CCJK updated:",
|
|
104
|
+
"guidanceStep5Command": "npx ccjk update",
|
|
103
105
|
"migration": {
|
|
104
106
|
"title": "Configuration Migration",
|
|
105
107
|
"migrationNeeded": "Configuration migration needed for Claude Code CLI 2.0-2.1 support",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"selectScriptLang": "Select CCJK display language",
|
|
3
|
-
"selectConfigLang": "Select
|
|
3
|
+
"selectConfigLang": "Select {{runtime}} configuration language",
|
|
4
4
|
"selectAiOutputLang": "Select AI output language",
|
|
5
5
|
"aiOutputLangHint": "AI will respond to you in this language",
|
|
6
6
|
"enterCustomLanguage": "Enter custom language (e.g., Japanese, French, etc.)",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"codexPreset": "Efficiency Center",
|
|
50
50
|
"codexCheckUpdates": "Update Codex",
|
|
51
51
|
"codexUninstall": "Uninstall Codex",
|
|
52
|
+
"checkUpdates": "Check Updates",
|
|
52
53
|
"mcpMarket": "MCP Market",
|
|
53
54
|
"marketplace": "Marketplace",
|
|
54
55
|
"hooksSync": "Hooks Sync",
|
|
@@ -85,15 +86,15 @@
|
|
|
85
86
|
},
|
|
86
87
|
"configCenter": {
|
|
87
88
|
"api": "API Configuration",
|
|
88
|
-
"apiDesc": "
|
|
89
|
+
"apiDesc": "Configure official login, CCR, or Clavue provider profiles",
|
|
89
90
|
"mcp": "MCP Configuration",
|
|
90
91
|
"mcpDesc": "Configure Model Context Protocol services",
|
|
91
92
|
"model": "Model Configuration",
|
|
92
93
|
"modelDesc": "Select and configure AI models",
|
|
93
94
|
"memory": "Memory Configuration",
|
|
94
95
|
"memoryDesc": "Manage project memory sync and AI response preferences",
|
|
95
|
-
"permission": "
|
|
96
|
-
"permissionDesc": "
|
|
96
|
+
"permission": "One-Click Permissions",
|
|
97
|
+
"permissionDesc": "Apply recommended env and permission presets to the active runtime",
|
|
97
98
|
"configSwitch": "Config Switch",
|
|
98
99
|
"configSwitchDesc": "Switch between configuration profiles",
|
|
99
100
|
"context": "Context Configuration",
|
|
@@ -144,12 +145,12 @@
|
|
|
144
145
|
"config": "Primary config: ~/.claude/settings.json",
|
|
145
146
|
"menuTitle": "Claude Control Center"
|
|
146
147
|
},
|
|
147
|
-
"
|
|
148
|
-
"title": "
|
|
148
|
+
"clavue": {
|
|
149
|
+
"title": "Clavue Workspace",
|
|
149
150
|
"summary": "Provider-first control center with explicit runtime status at startup.",
|
|
150
151
|
"focus": "Provider profiles, routing state, model slots, and Claude-family compatible configuration.",
|
|
151
|
-
"config": "Primary config: ~/.
|
|
152
|
-
"menuTitle": "
|
|
152
|
+
"config": "Primary config: ~/.clavue/.clavue.json (runtime) + ~/.ccjk/config.toml (reusable profiles)",
|
|
153
|
+
"menuTitle": "Clavue Control Center"
|
|
153
154
|
},
|
|
154
155
|
"codex": {
|
|
155
156
|
"title": "Codex Workspace",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"failedToSwitchToCcr": "Failed to switch to CCR proxy: {error}",
|
|
15
15
|
"successfullySwitchedToProfile": "Successfully switched to profile: {{name}}",
|
|
16
16
|
"failedToSwitchToProfile": "Failed to switch to profile: {{error}}",
|
|
17
|
-
"incrementalManagementTitle": "📋
|
|
17
|
+
"incrementalManagementTitle": "📋 {{runtime}} Configuration Management",
|
|
18
18
|
"currentProfileCount": "Current profile count: {{count}}",
|
|
19
19
|
"currentDefaultProfile": "Current default profile: {{profile}}",
|
|
20
20
|
"addProfile": "Add Profile",
|
|
@@ -88,16 +88,18 @@
|
|
|
88
88
|
"guidanceStep1": "1. 打开 {{runtime}},使用斜杠命令:",
|
|
89
89
|
"guidanceStep1Detail": "/ccjk:feat - 功能开发 /ccjk:git-commit - 智能提交",
|
|
90
90
|
"guidanceStep1Detail2": "/ccjk:init-project - 初始化项目 /commands - 查看已安装",
|
|
91
|
-
"guidanceStep1MyclaudeDetail": "/ccjk:feat - 功能开发 /ccjk:
|
|
92
|
-
"guidanceStep1MyclaudeDetail2": "/
|
|
91
|
+
"guidanceStep1MyclaudeDetail": "/ccjk:feat - 功能开发 /ccjk:git-commit - 智能提交",
|
|
92
|
+
"guidanceStep1MyclaudeDetail2": "/ccjk:init-project - 初始化项目 /commands - 查看已安装",
|
|
93
93
|
"guidanceStep2": "2. 示例:",
|
|
94
94
|
"guidanceStep2Example": "/ccjk:feat 实现用户登录功能",
|
|
95
95
|
"guidanceStep3": "3. 查看所有功能:",
|
|
96
96
|
"guidanceStep3Command": "npx ccjk features",
|
|
97
97
|
"guidanceStep3Myclaude": "3. 查看已安装命令:",
|
|
98
98
|
"guidanceStep3MyclaudeCommand": "/commands",
|
|
99
|
-
"guidanceStep4": "4.
|
|
99
|
+
"guidanceStep4": "4. 运行健康检查:",
|
|
100
100
|
"guidanceStep4Command": "npx ccjk doctor",
|
|
101
|
+
"guidanceStep5": "5. 更新 CCJK:",
|
|
102
|
+
"guidanceStep5Command": "npx ccjk update",
|
|
101
103
|
"migration": {
|
|
102
104
|
"title": "配置迁移",
|
|
103
105
|
"migrationNeeded": "需要迁移配置以支持 Claude Code CLI 2.0-2.1",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"codexPreset": "效率中心",
|
|
50
50
|
"codexCheckUpdates": "更新 Codex",
|
|
51
51
|
"codexUninstall": "卸载 Codex",
|
|
52
|
+
"checkUpdates": "检查更新",
|
|
52
53
|
"mcpMarket": "MCP 市场",
|
|
53
54
|
"marketplace": "扩展市场",
|
|
54
55
|
"hooksSync": "Hooks 同步",
|
|
@@ -85,15 +86,15 @@
|
|
|
85
86
|
},
|
|
86
87
|
"configCenter": {
|
|
87
88
|
"api": "API 配置",
|
|
88
|
-
"apiDesc": "
|
|
89
|
+
"apiDesc": "配置官方登录、CCR 或 Clavue Provider 档案",
|
|
89
90
|
"mcp": "MCP 配置",
|
|
90
91
|
"mcpDesc": "配置 Model Context Protocol 服务",
|
|
91
92
|
"model": "模型配置",
|
|
92
93
|
"modelDesc": "选择和配置 AI 模型",
|
|
93
94
|
"memory": "记忆配置",
|
|
94
95
|
"memoryDesc": "管理项目记忆同步与 AI 回复偏好",
|
|
95
|
-
"permission": "
|
|
96
|
-
"permissionDesc": "
|
|
96
|
+
"permission": "一键权限",
|
|
97
|
+
"permissionDesc": "向当前运行时应用推荐环境变量和权限预设",
|
|
97
98
|
"configSwitch": "配置切换",
|
|
98
99
|
"configSwitchDesc": "在配置文件之间切换",
|
|
99
100
|
"context": "上下文配置",
|
|
@@ -158,12 +159,12 @@
|
|
|
158
159
|
"config": "使用当前激活工具的配置档案。",
|
|
159
160
|
"menuTitle": "CCJK 控制中心"
|
|
160
161
|
},
|
|
161
|
-
"
|
|
162
|
-
"title": "
|
|
162
|
+
"clavue": {
|
|
163
|
+
"title": "Clavue 工作台",
|
|
163
164
|
"summary": "面向 Provider 的控制中心,启动时应明确展示当前运行态。",
|
|
164
165
|
"focus": "Provider 档案、路由状态、模型槽位与 Claude 家族兼容配置。",
|
|
165
|
-
"config": "主配置文件:~/.
|
|
166
|
-
"menuTitle": "
|
|
166
|
+
"config": "主配置文件:~/.clavue/.clavue.json(运行态) + ~/.ccjk/config.toml(可复用档案)",
|
|
167
|
+
"menuTitle": "Clavue 控制中心"
|
|
167
168
|
}
|
|
168
169
|
},
|
|
169
170
|
"menu": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"failedToSwitchToCcr": "切换到 CCR 代理失败:{error}",
|
|
15
15
|
"successfullySwitchedToProfile": "成功切换到配置文件:{{name}}",
|
|
16
16
|
"failedToSwitchToProfile": "切换到配置文件失败:{{error}}",
|
|
17
|
-
"incrementalManagementTitle": "📋
|
|
17
|
+
"incrementalManagementTitle": "📋 {{runtime}} 配置管理",
|
|
18
18
|
"currentProfileCount": "当前配置数量:{{count}}",
|
|
19
19
|
"currentDefaultProfile": "当前默认配置:{{profile}}",
|
|
20
20
|
"addProfile": "添加配置",
|