ccjk 1.4.0 → 2.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/README.ja.md +249 -297
- package/README.ko.md +241 -290
- package/README.md +216 -360
- package/README.zh-CN.md +234 -311
- package/dist/chunks/claude-code-config-manager.mjs +7 -7
- package/dist/chunks/claude-code-incremental-manager.mjs +1 -1
- package/dist/chunks/codex-config-switch.mjs +3 -3
- package/dist/chunks/codex-uninstaller.mjs +2 -2
- package/dist/chunks/features.mjs +10 -10
- package/dist/chunks/simple-config.mjs +388 -45
- package/dist/chunks/smart-guide.mjs +234 -0
- package/dist/cli.mjs +2325 -1317
- package/dist/i18n/locales/en/marketplace.json +84 -0
- package/dist/i18n/locales/en/menu.json +38 -1
- package/dist/i18n/locales/en/skills.json +140 -0
- package/dist/i18n/locales/en/smartGuide.json +49 -0
- package/dist/i18n/locales/en/subagent.json +69 -0
- package/dist/i18n/locales/en/superpowers.json +58 -0
- package/dist/i18n/locales/en/workflow.json +28 -9
- package/dist/i18n/locales/zh-CN/marketplace.json +84 -0
- package/dist/i18n/locales/zh-CN/menu.json +38 -1
- package/dist/i18n/locales/zh-CN/skills.json +140 -0
- package/dist/i18n/locales/zh-CN/smartGuide.json +49 -0
- package/dist/i18n/locales/zh-CN/subagent.json +69 -0
- package/dist/i18n/locales/zh-CN/superpowers.json +58 -0
- package/dist/i18n/locales/zh-CN/workflow.json +28 -9
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/package.json +26 -27
- package/templates/claude-code/en/workflow/essential/commands/feat.md +196 -51
- package/templates/claude-code/zh-CN/workflow/essential/commands/feat.md +194 -51
- package/templates/common/skills/en/brainstorming.md +64 -0
- package/templates/common/skills/en/code-review.md +81 -0
- package/templates/common/skills/en/documentation-gen.md +808 -0
- package/templates/common/skills/en/executing-plans.md +75 -0
- package/templates/common/skills/en/git-commit.md +216 -0
- package/templates/common/skills/en/interview.md +223 -0
- package/templates/common/skills/en/migration-assistant.md +312 -0
- package/templates/common/skills/en/performance-profiling.md +576 -0
- package/templates/common/skills/en/pr-review.md +341 -0
- package/templates/common/skills/en/refactoring.md +384 -0
- package/templates/common/skills/en/security-audit.md +462 -0
- package/templates/common/skills/en/systematic-debugging.md +82 -0
- package/templates/common/skills/en/tdd-workflow.md +93 -0
- package/templates/common/skills/en/verification.md +81 -0
- package/templates/common/skills/en/workflow.md +370 -0
- package/templates/common/skills/en/writing-plans.md +78 -0
- package/templates/common/skills/zh-CN/documentation-gen.md +807 -0
- package/templates/common/skills/zh-CN/migration-assistant.md +318 -0
- package/templates/common/skills/zh-CN/performance-profiling.md +746 -0
- package/templates/common/skills/zh-CN/pr-review.md +341 -0
- package/templates/common/skills/zh-CN/refactoring.md +384 -0
- package/templates/common/skills/zh-CN/security-audit.md +462 -0
- package/templates/common/smart-guide/en/smart-guide.md +72 -0
- package/templates/common/smart-guide/zh-CN/smart-guide.md +72 -0
- package/templates/common/workflow/sixStep/en/workflow.md +137 -31
- package/templates/common/workflow/sixStep/zh-CN/workflow.md +152 -10
|
@@ -14,13 +14,13 @@ import toggleModule from 'inquirer-toggle';
|
|
|
14
14
|
import ora from 'ora';
|
|
15
15
|
import { exec, x } from 'tinyexec';
|
|
16
16
|
import semver from 'semver';
|
|
17
|
-
import { rm, mkdir, copyFile as copyFile$1 } from 'node:fs/promises';
|
|
17
|
+
import { readFile as readFile$1, rm, mkdir, copyFile as copyFile$1 } from 'node:fs/promises';
|
|
18
18
|
import { pathExists } from 'fs-extra';
|
|
19
19
|
import trash from 'trash';
|
|
20
20
|
import i18next from 'i18next';
|
|
21
21
|
import Backend from 'i18next-fs-backend';
|
|
22
22
|
|
|
23
|
-
const version = "
|
|
23
|
+
const version = "2.0.0";
|
|
24
24
|
const homepage = "https://github.com/miounet11/ccjk";
|
|
25
25
|
|
|
26
26
|
const i18n = i18next.createInstance();
|
|
@@ -38,10 +38,18 @@ const NAMESPACES = [
|
|
|
38
38
|
"interview",
|
|
39
39
|
// Interview-Driven Development
|
|
40
40
|
"language",
|
|
41
|
+
"marketplace",
|
|
42
|
+
// Marketplace system for plugins, skills, and workflows
|
|
41
43
|
"mcp",
|
|
42
44
|
"menu",
|
|
43
45
|
"multi-config",
|
|
44
46
|
"shencha",
|
|
47
|
+
"skills",
|
|
48
|
+
// Skills management system
|
|
49
|
+
"smartGuide",
|
|
50
|
+
// Smart Guide for quick actions
|
|
51
|
+
"superpowers",
|
|
52
|
+
// Superpowers plugin integration
|
|
45
53
|
"team",
|
|
46
54
|
"tools",
|
|
47
55
|
"uninstall",
|
|
@@ -292,7 +300,14 @@ const WORKFLOW_CONFIG_BASE = [
|
|
|
292
300
|
agents: [],
|
|
293
301
|
autoInstallAgents: false,
|
|
294
302
|
category: "interview",
|
|
295
|
-
|
|
303
|
+
displayCategory: "planning",
|
|
304
|
+
outputDir: "interview",
|
|
305
|
+
metadata: {
|
|
306
|
+
version: "1.0.0",
|
|
307
|
+
addedDate: "2025-01",
|
|
308
|
+
tags: ["recommended", "popular"],
|
|
309
|
+
difficulty: "beginner"
|
|
310
|
+
}
|
|
296
311
|
},
|
|
297
312
|
{
|
|
298
313
|
id: "essentialTools",
|
|
@@ -307,7 +322,14 @@ const WORKFLOW_CONFIG_BASE = [
|
|
|
307
322
|
],
|
|
308
323
|
autoInstallAgents: true,
|
|
309
324
|
category: "essential",
|
|
310
|
-
|
|
325
|
+
displayCategory: "planning",
|
|
326
|
+
outputDir: "essential",
|
|
327
|
+
metadata: {
|
|
328
|
+
version: "1.0.0",
|
|
329
|
+
addedDate: "2025-01",
|
|
330
|
+
tags: ["essential"],
|
|
331
|
+
difficulty: "beginner"
|
|
332
|
+
}
|
|
311
333
|
},
|
|
312
334
|
{
|
|
313
335
|
id: "gitWorkflow",
|
|
@@ -317,7 +339,14 @@ const WORKFLOW_CONFIG_BASE = [
|
|
|
317
339
|
agents: [],
|
|
318
340
|
autoInstallAgents: false,
|
|
319
341
|
category: "git",
|
|
320
|
-
|
|
342
|
+
displayCategory: "versionControl",
|
|
343
|
+
outputDir: "git",
|
|
344
|
+
metadata: {
|
|
345
|
+
version: "1.0.0",
|
|
346
|
+
addedDate: "2025-01",
|
|
347
|
+
tags: ["popular"],
|
|
348
|
+
difficulty: "beginner"
|
|
349
|
+
}
|
|
321
350
|
},
|
|
322
351
|
{
|
|
323
352
|
id: "sixStepsWorkflow",
|
|
@@ -327,7 +356,14 @@ const WORKFLOW_CONFIG_BASE = [
|
|
|
327
356
|
agents: [],
|
|
328
357
|
autoInstallAgents: false,
|
|
329
358
|
category: "sixStep",
|
|
330
|
-
|
|
359
|
+
displayCategory: "development",
|
|
360
|
+
outputDir: "workflow",
|
|
361
|
+
metadata: {
|
|
362
|
+
version: "1.0.0",
|
|
363
|
+
addedDate: "2025-01",
|
|
364
|
+
tags: ["professional"],
|
|
365
|
+
difficulty: "intermediate"
|
|
366
|
+
}
|
|
331
367
|
}
|
|
332
368
|
];
|
|
333
369
|
function getWorkflowConfigs() {
|
|
@@ -336,22 +372,26 @@ function getWorkflowConfigs() {
|
|
|
336
372
|
{
|
|
337
373
|
id: "interviewWorkflow",
|
|
338
374
|
name: i18n.t("workflow:workflowOption.interviewWorkflow"),
|
|
339
|
-
description: i18n.t("workflow:workflowDescription.interviewWorkflow")
|
|
375
|
+
description: i18n.t("workflow:workflowDescription.interviewWorkflow"),
|
|
376
|
+
stats: i18n.t("workflow:workflowStats.interviewWorkflow")
|
|
340
377
|
},
|
|
341
378
|
{
|
|
342
379
|
id: "essentialTools",
|
|
343
380
|
name: i18n.t("workflow:workflowOption.essentialTools"),
|
|
344
|
-
description: i18n.t("workflow:workflowDescription.essentialTools")
|
|
381
|
+
description: i18n.t("workflow:workflowDescription.essentialTools"),
|
|
382
|
+
stats: i18n.t("workflow:workflowStats.essentialTools")
|
|
345
383
|
},
|
|
346
384
|
{
|
|
347
385
|
id: "gitWorkflow",
|
|
348
386
|
name: i18n.t("workflow:workflowOption.gitWorkflow"),
|
|
349
|
-
description: i18n.t("workflow:workflowDescription.gitWorkflow")
|
|
387
|
+
description: i18n.t("workflow:workflowDescription.gitWorkflow"),
|
|
388
|
+
stats: i18n.t("workflow:workflowStats.gitWorkflow")
|
|
350
389
|
},
|
|
351
390
|
{
|
|
352
391
|
id: "sixStepsWorkflow",
|
|
353
392
|
name: i18n.t("workflow:workflowOption.sixStepsWorkflow"),
|
|
354
|
-
description: i18n.t("workflow:workflowDescription.sixStepsWorkflow")
|
|
393
|
+
description: i18n.t("workflow:workflowDescription.sixStepsWorkflow"),
|
|
394
|
+
stats: i18n.t("workflow:workflowStats.sixStepsWorkflow")
|
|
355
395
|
}
|
|
356
396
|
];
|
|
357
397
|
return WORKFLOW_CONFIG_BASE.map((baseConfig) => {
|
|
@@ -359,7 +399,8 @@ function getWorkflowConfigs() {
|
|
|
359
399
|
return {
|
|
360
400
|
...baseConfig,
|
|
361
401
|
name: translation?.name || baseConfig.id,
|
|
362
|
-
description: translation?.description
|
|
402
|
+
description: translation?.description,
|
|
403
|
+
stats: translation?.stats
|
|
363
404
|
};
|
|
364
405
|
});
|
|
365
406
|
}
|
|
@@ -369,6 +410,17 @@ function getWorkflowConfig(workflowId) {
|
|
|
369
410
|
function getOrderedWorkflows() {
|
|
370
411
|
return getWorkflowConfigs().sort((a, b) => a.order - b.order);
|
|
371
412
|
}
|
|
413
|
+
function getTagLabel(tag) {
|
|
414
|
+
ensureI18nInitialized();
|
|
415
|
+
const tagKeys = {
|
|
416
|
+
recommended: "workflow:tags.recommended",
|
|
417
|
+
popular: "workflow:tags.popular",
|
|
418
|
+
new: "workflow:tags.new",
|
|
419
|
+
essential: "workflow:tags.essential",
|
|
420
|
+
professional: "workflow:tags.professional"
|
|
421
|
+
};
|
|
422
|
+
return i18n.t(tagKeys[tag]);
|
|
423
|
+
}
|
|
372
424
|
|
|
373
425
|
const CLAUDE_DIR$1 = join(homedir(), ".claude");
|
|
374
426
|
const SETTINGS_FILE$1 = join(CLAUDE_DIR$1, "settings.json");
|
|
@@ -2214,7 +2266,7 @@ function getFallbackPresets() {
|
|
|
2214
2266
|
];
|
|
2215
2267
|
}
|
|
2216
2268
|
|
|
2217
|
-
const execAsync$
|
|
2269
|
+
const execAsync$4 = promisify(exec$1);
|
|
2218
2270
|
const CCR_CONFIG_DIR = join(homedir(), ".claude-code-router");
|
|
2219
2271
|
const CCR_CONFIG_FILE = join(CCR_CONFIG_DIR, "config.json");
|
|
2220
2272
|
const CCR_BACKUP_DIR = CCR_CONFIG_DIR;
|
|
@@ -2381,10 +2433,10 @@ async function restartAndCheckCcrStatus() {
|
|
|
2381
2433
|
ensureI18nInitialized();
|
|
2382
2434
|
try {
|
|
2383
2435
|
console.log(ansis.cyan(`${i18n.t("ccr:restartingCcr")}`));
|
|
2384
|
-
await execAsync$
|
|
2436
|
+
await execAsync$4("ccr restart");
|
|
2385
2437
|
console.log(ansis.green(`\u2714 ${i18n.t("ccr:ccrRestartSuccess")}`));
|
|
2386
2438
|
console.log(ansis.cyan(`${i18n.t("ccr:checkingCcrStatus")}`));
|
|
2387
|
-
const { stdout } = await execAsync$
|
|
2439
|
+
const { stdout } = await execAsync$4("ccr status");
|
|
2388
2440
|
console.log(ansis.gray(stdout));
|
|
2389
2441
|
} catch (error) {
|
|
2390
2442
|
console.error(ansis.red(`${i18n.t("ccr:ccrRestartFailed")}:`), error.message || error);
|
|
@@ -2521,16 +2573,16 @@ const config = {
|
|
|
2521
2573
|
writeCcrConfig: writeCcrConfig
|
|
2522
2574
|
};
|
|
2523
2575
|
|
|
2524
|
-
const execAsync$
|
|
2576
|
+
const execAsync$3 = promisify(exec$1);
|
|
2525
2577
|
async function getInstalledVersion(command, maxRetries = 3) {
|
|
2526
2578
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
2527
2579
|
try {
|
|
2528
2580
|
let stdout;
|
|
2529
2581
|
try {
|
|
2530
|
-
const result = await execAsync$
|
|
2582
|
+
const result = await execAsync$3(`${command} -v`);
|
|
2531
2583
|
stdout = result.stdout;
|
|
2532
2584
|
} catch {
|
|
2533
|
-
const result = await execAsync$
|
|
2585
|
+
const result = await execAsync$3(`${command} --version`);
|
|
2534
2586
|
stdout = result.stdout;
|
|
2535
2587
|
}
|
|
2536
2588
|
const versionMatch = stdout.match(/(\d+\.\d+\.\d+(?:-[\w.]+)?)/);
|
|
@@ -2547,7 +2599,7 @@ async function getInstalledVersion(command, maxRetries = 3) {
|
|
|
2547
2599
|
async function getLatestVersion(packageName, maxRetries = 3) {
|
|
2548
2600
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
2549
2601
|
try {
|
|
2550
|
-
const { stdout } = await execAsync$
|
|
2602
|
+
const { stdout } = await execAsync$3(`npm view ${packageName} version`);
|
|
2551
2603
|
return stdout.trim();
|
|
2552
2604
|
} catch {
|
|
2553
2605
|
if (attempt === maxRetries) {
|
|
@@ -2576,7 +2628,7 @@ async function getClaudeCodeInstallationSource() {
|
|
|
2576
2628
|
return { isHomebrew: true, commandPath, source: "homebrew-cask" };
|
|
2577
2629
|
}
|
|
2578
2630
|
try {
|
|
2579
|
-
const { stdout: realPath } = await execAsync$
|
|
2631
|
+
const { stdout: realPath } = await execAsync$3(`readlink -f "${commandPath}" 2>/dev/null || realpath "${commandPath}" 2>/dev/null || echo "${commandPath}"`);
|
|
2580
2632
|
const resolvedPath = realPath.trim();
|
|
2581
2633
|
if (resolvedPath.includes("/Caskroom/claude-code/")) {
|
|
2582
2634
|
return { isHomebrew: true, commandPath, source: "homebrew-cask" };
|
|
@@ -2595,7 +2647,7 @@ async function detectAllClaudeCodeInstallations() {
|
|
|
2595
2647
|
let activeResolvedPath = null;
|
|
2596
2648
|
if (activeCommandPath) {
|
|
2597
2649
|
try {
|
|
2598
|
-
const { stdout } = await execAsync$
|
|
2650
|
+
const { stdout } = await execAsync$3(`readlink -f "${activeCommandPath}" 2>/dev/null || realpath "${activeCommandPath}" 2>/dev/null || echo "${activeCommandPath}"`);
|
|
2599
2651
|
activeResolvedPath = stdout.trim();
|
|
2600
2652
|
} catch {
|
|
2601
2653
|
activeResolvedPath = activeCommandPath;
|
|
@@ -2603,7 +2655,7 @@ async function detectAllClaudeCodeInstallations() {
|
|
|
2603
2655
|
}
|
|
2604
2656
|
async function getVersionFromPath(path) {
|
|
2605
2657
|
try {
|
|
2606
|
-
const { stdout } = await execAsync$
|
|
2658
|
+
const { stdout } = await execAsync$3(`"${path}" -v 2>/dev/null || "${path}" --version 2>/dev/null`);
|
|
2607
2659
|
const versionMatch = stdout.match(/(\d+\.\d+\.\d+(?:-[\w.]+)?)/);
|
|
2608
2660
|
return versionMatch ? versionMatch[1] : null;
|
|
2609
2661
|
} catch {
|
|
@@ -2618,7 +2670,7 @@ async function detectAllClaudeCodeInstallations() {
|
|
|
2618
2670
|
async function addInstallation(path, source) {
|
|
2619
2671
|
let resolvedPath = path;
|
|
2620
2672
|
try {
|
|
2621
|
-
const { stdout } = await execAsync$
|
|
2673
|
+
const { stdout } = await execAsync$3(`readlink -f "${path}" 2>/dev/null || realpath "${path}" 2>/dev/null || echo "${path}"`);
|
|
2622
2674
|
resolvedPath = stdout.trim();
|
|
2623
2675
|
} catch {
|
|
2624
2676
|
}
|
|
@@ -2654,7 +2706,7 @@ async function detectAllClaudeCodeInstallations() {
|
|
|
2654
2706
|
}
|
|
2655
2707
|
}
|
|
2656
2708
|
try {
|
|
2657
|
-
await execAsync$
|
|
2709
|
+
await execAsync$3("brew list --cask claude-code");
|
|
2658
2710
|
const homebrewPrefixes = ["/opt/homebrew", "/usr/local"];
|
|
2659
2711
|
for (const prefix of homebrewPrefixes) {
|
|
2660
2712
|
const caskroomPath = `${prefix}/Caskroom/claude-code`;
|
|
@@ -2679,7 +2731,7 @@ async function detectAllClaudeCodeInstallations() {
|
|
|
2679
2731
|
if (nodeFs.existsSync(path)) {
|
|
2680
2732
|
let resolvedPath = path;
|
|
2681
2733
|
try {
|
|
2682
|
-
const { stdout } = await execAsync$
|
|
2734
|
+
const { stdout } = await execAsync$3(`readlink -f "${path}" 2>/dev/null || realpath "${path}" 2>/dev/null || echo "${path}"`);
|
|
2683
2735
|
resolvedPath = stdout.trim();
|
|
2684
2736
|
} catch {
|
|
2685
2737
|
}
|
|
@@ -2869,7 +2921,7 @@ async function handleDuplicateInstallations(skipPrompt = false) {
|
|
|
2869
2921
|
}
|
|
2870
2922
|
async function getHomebrewClaudeCodeVersion() {
|
|
2871
2923
|
try {
|
|
2872
|
-
const { stdout } = await execAsync$
|
|
2924
|
+
const { stdout } = await execAsync$3("brew info --cask claude-code --json=v2");
|
|
2873
2925
|
const info = JSON.parse(stdout);
|
|
2874
2926
|
if (info.casks && info.casks.length > 0) {
|
|
2875
2927
|
return info.casks[0].version;
|
|
@@ -3175,15 +3227,15 @@ const autoUpdater = {
|
|
|
3175
3227
|
updateCometixLine: updateCometixLine
|
|
3176
3228
|
};
|
|
3177
3229
|
|
|
3178
|
-
const execAsync$
|
|
3230
|
+
const execAsync$2 = promisify(exec$1);
|
|
3179
3231
|
async function isCcrInstalled() {
|
|
3180
3232
|
let commandExists = false;
|
|
3181
3233
|
try {
|
|
3182
|
-
await execAsync$
|
|
3234
|
+
await execAsync$2("ccr version");
|
|
3183
3235
|
commandExists = true;
|
|
3184
3236
|
} catch {
|
|
3185
3237
|
try {
|
|
3186
|
-
await execAsync$
|
|
3238
|
+
await execAsync$2("which ccr");
|
|
3187
3239
|
commandExists = true;
|
|
3188
3240
|
} catch {
|
|
3189
3241
|
commandExists = false;
|
|
@@ -3191,7 +3243,7 @@ async function isCcrInstalled() {
|
|
|
3191
3243
|
}
|
|
3192
3244
|
let hasCorrectPackage = false;
|
|
3193
3245
|
try {
|
|
3194
|
-
await execAsync$
|
|
3246
|
+
await execAsync$2("npm list -g @musistudio/claude-code-router");
|
|
3195
3247
|
hasCorrectPackage = true;
|
|
3196
3248
|
} catch {
|
|
3197
3249
|
hasCorrectPackage = false;
|
|
@@ -3211,10 +3263,10 @@ async function installCcr() {
|
|
|
3211
3263
|
}
|
|
3212
3264
|
if (isInstalled && !hasCorrectPackage) {
|
|
3213
3265
|
try {
|
|
3214
|
-
await execAsync$
|
|
3266
|
+
await execAsync$2("npm list -g claude-code-router");
|
|
3215
3267
|
console.log(ansis.yellow(`\u26A0 ${i18n.t("ccr:detectedIncorrectPackage")}`));
|
|
3216
3268
|
try {
|
|
3217
|
-
await execAsync$
|
|
3269
|
+
await execAsync$2("npm uninstall -g claude-code-router");
|
|
3218
3270
|
console.log(ansis.green(`\u2714 ${i18n.t("ccr:uninstalledIncorrectPackage")}`));
|
|
3219
3271
|
} catch {
|
|
3220
3272
|
console.log(ansis.yellow(`\u26A0 ${i18n.t("ccr:failedToUninstallIncorrectPackage")}`));
|
|
@@ -3229,7 +3281,7 @@ async function installCcr() {
|
|
|
3229
3281
|
if (usedSudo) {
|
|
3230
3282
|
console.log(ansis.yellow(`\u2139 ${i18n.t("installation:usingSudo")}`));
|
|
3231
3283
|
}
|
|
3232
|
-
await execAsync$
|
|
3284
|
+
await execAsync$2([command, ...args].join(" "));
|
|
3233
3285
|
console.log(ansis.green(`\u2714 ${i18n.t("ccr:ccrInstallSuccess")}`));
|
|
3234
3286
|
} catch (error) {
|
|
3235
3287
|
if (error.message?.includes("EEXIST")) {
|
|
@@ -5327,10 +5379,10 @@ const COMETIX_COMMANDS = {
|
|
|
5327
5379
|
TUI_CONFIG: `${COMETIX_COMMAND_NAME} -c`
|
|
5328
5380
|
};
|
|
5329
5381
|
|
|
5330
|
-
const execAsync = promisify(exec$1);
|
|
5382
|
+
const execAsync$1 = promisify(exec$1);
|
|
5331
5383
|
async function isCometixLineInstalled() {
|
|
5332
5384
|
try {
|
|
5333
|
-
await execAsync(COMETIX_COMMANDS.CHECK_INSTALL);
|
|
5385
|
+
await execAsync$1(COMETIX_COMMANDS.CHECK_INSTALL);
|
|
5334
5386
|
return true;
|
|
5335
5387
|
} catch {
|
|
5336
5388
|
return false;
|
|
@@ -5344,7 +5396,7 @@ async function installCometixLine() {
|
|
|
5344
5396
|
if (usedSudo) {
|
|
5345
5397
|
console.log(ansis.yellow(`\u2139 ${i18n.t("installation:usingSudo")}`));
|
|
5346
5398
|
}
|
|
5347
|
-
await execAsync([command, ...args].join(" "));
|
|
5399
|
+
await execAsync$1([command, ...args].join(" "));
|
|
5348
5400
|
};
|
|
5349
5401
|
const isInstalled = await isCometixLineInstalled();
|
|
5350
5402
|
if (isInstalled) {
|
|
@@ -6563,6 +6615,208 @@ async function handleMultipleInstallations(status) {
|
|
|
6563
6615
|
}
|
|
6564
6616
|
}
|
|
6565
6617
|
|
|
6618
|
+
const execAsync = promisify(exec$1);
|
|
6619
|
+
function getClaudePluginDir() {
|
|
6620
|
+
return join(homedir(), ".claude", "plugins");
|
|
6621
|
+
}
|
|
6622
|
+
function getSuperpowersPath() {
|
|
6623
|
+
return join(getClaudePluginDir(), "superpowers");
|
|
6624
|
+
}
|
|
6625
|
+
async function checkSuperpowersInstalled() {
|
|
6626
|
+
const superpowersPath = getSuperpowersPath();
|
|
6627
|
+
if (!existsSync(superpowersPath)) {
|
|
6628
|
+
return { installed: false };
|
|
6629
|
+
}
|
|
6630
|
+
try {
|
|
6631
|
+
const packageJsonPath = join(superpowersPath, "package.json");
|
|
6632
|
+
if (existsSync(packageJsonPath)) {
|
|
6633
|
+
const packageJson = JSON.parse(await readFile$1(packageJsonPath, "utf-8"));
|
|
6634
|
+
const skillsDir = join(superpowersPath, "skills");
|
|
6635
|
+
let skillCount = 0;
|
|
6636
|
+
if (existsSync(skillsDir)) {
|
|
6637
|
+
const { readdir } = await import('node:fs/promises');
|
|
6638
|
+
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
6639
|
+
skillCount = entries.filter((e) => e.isDirectory()).length;
|
|
6640
|
+
}
|
|
6641
|
+
return {
|
|
6642
|
+
installed: true,
|
|
6643
|
+
version: packageJson.version,
|
|
6644
|
+
skillCount,
|
|
6645
|
+
path: superpowersPath
|
|
6646
|
+
};
|
|
6647
|
+
}
|
|
6648
|
+
return { installed: true, path: superpowersPath };
|
|
6649
|
+
} catch {
|
|
6650
|
+
return { installed: true, path: superpowersPath };
|
|
6651
|
+
}
|
|
6652
|
+
}
|
|
6653
|
+
async function installSuperpowers(_options) {
|
|
6654
|
+
try {
|
|
6655
|
+
const status = await checkSuperpowersInstalled();
|
|
6656
|
+
if (status.installed) {
|
|
6657
|
+
return {
|
|
6658
|
+
success: true,
|
|
6659
|
+
message: i18n.t("superpowers:alreadyInstalled")
|
|
6660
|
+
};
|
|
6661
|
+
}
|
|
6662
|
+
console.log(i18n.t("superpowers:addingMarketplace"));
|
|
6663
|
+
try {
|
|
6664
|
+
await execAsync("claude /plugin marketplace add obra/superpowers-marketplace", {
|
|
6665
|
+
timeout: 6e4
|
|
6666
|
+
});
|
|
6667
|
+
} catch {
|
|
6668
|
+
}
|
|
6669
|
+
console.log(i18n.t("superpowers:installing"));
|
|
6670
|
+
await execAsync("claude /plugin install superpowers@superpowers-marketplace", {
|
|
6671
|
+
timeout: 12e4
|
|
6672
|
+
});
|
|
6673
|
+
const newStatus = await checkSuperpowersInstalled();
|
|
6674
|
+
if (newStatus.installed) {
|
|
6675
|
+
return {
|
|
6676
|
+
success: true,
|
|
6677
|
+
message: i18n.t("superpowers:installSuccess")
|
|
6678
|
+
};
|
|
6679
|
+
}
|
|
6680
|
+
return {
|
|
6681
|
+
success: false,
|
|
6682
|
+
message: i18n.t("superpowers:installFailed"),
|
|
6683
|
+
error: "Installation completed but plugin not found"
|
|
6684
|
+
};
|
|
6685
|
+
} catch (error) {
|
|
6686
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
6687
|
+
return {
|
|
6688
|
+
success: false,
|
|
6689
|
+
message: i18n.t("superpowers:installFailed"),
|
|
6690
|
+
error: errorMessage
|
|
6691
|
+
};
|
|
6692
|
+
}
|
|
6693
|
+
}
|
|
6694
|
+
async function installSuperpowersViaGit() {
|
|
6695
|
+
try {
|
|
6696
|
+
const pluginDir = getClaudePluginDir();
|
|
6697
|
+
const superpowersPath = getSuperpowersPath();
|
|
6698
|
+
const { mkdir } = await import('node:fs/promises');
|
|
6699
|
+
await mkdir(pluginDir, { recursive: true });
|
|
6700
|
+
console.log(i18n.t("superpowers:cloning"));
|
|
6701
|
+
await execAsync(
|
|
6702
|
+
`git clone https://github.com/obra/superpowers.git "${superpowersPath}"`,
|
|
6703
|
+
{ timeout: 12e4 }
|
|
6704
|
+
);
|
|
6705
|
+
const status = await checkSuperpowersInstalled();
|
|
6706
|
+
if (status.installed) {
|
|
6707
|
+
return {
|
|
6708
|
+
success: true,
|
|
6709
|
+
message: i18n.t("superpowers:installSuccess")
|
|
6710
|
+
};
|
|
6711
|
+
}
|
|
6712
|
+
return {
|
|
6713
|
+
success: false,
|
|
6714
|
+
message: i18n.t("superpowers:installFailed")
|
|
6715
|
+
};
|
|
6716
|
+
} catch (error) {
|
|
6717
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
6718
|
+
return {
|
|
6719
|
+
success: false,
|
|
6720
|
+
message: i18n.t("superpowers:installFailed"),
|
|
6721
|
+
error: errorMessage
|
|
6722
|
+
};
|
|
6723
|
+
}
|
|
6724
|
+
}
|
|
6725
|
+
async function uninstallSuperpowers() {
|
|
6726
|
+
try {
|
|
6727
|
+
const status = await checkSuperpowersInstalled();
|
|
6728
|
+
if (!status.installed) {
|
|
6729
|
+
return {
|
|
6730
|
+
success: true,
|
|
6731
|
+
message: i18n.t("superpowers:notInstalled")
|
|
6732
|
+
};
|
|
6733
|
+
}
|
|
6734
|
+
try {
|
|
6735
|
+
await execAsync("claude /plugin uninstall superpowers", {
|
|
6736
|
+
timeout: 6e4
|
|
6737
|
+
});
|
|
6738
|
+
} catch {
|
|
6739
|
+
const superpowersPath = getSuperpowersPath();
|
|
6740
|
+
if (existsSync(superpowersPath)) {
|
|
6741
|
+
const { rm } = await import('node:fs/promises');
|
|
6742
|
+
await rm(superpowersPath, { recursive: true, force: true });
|
|
6743
|
+
}
|
|
6744
|
+
}
|
|
6745
|
+
const newStatus = await checkSuperpowersInstalled();
|
|
6746
|
+
if (!newStatus.installed) {
|
|
6747
|
+
return {
|
|
6748
|
+
success: true,
|
|
6749
|
+
message: i18n.t("superpowers:uninstallSuccess")
|
|
6750
|
+
};
|
|
6751
|
+
}
|
|
6752
|
+
return {
|
|
6753
|
+
success: false,
|
|
6754
|
+
message: i18n.t("superpowers:uninstallFailed")
|
|
6755
|
+
};
|
|
6756
|
+
} catch (error) {
|
|
6757
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
6758
|
+
return {
|
|
6759
|
+
success: false,
|
|
6760
|
+
message: i18n.t("superpowers:uninstallFailed"),
|
|
6761
|
+
error: errorMessage
|
|
6762
|
+
};
|
|
6763
|
+
}
|
|
6764
|
+
}
|
|
6765
|
+
async function updateSuperpowers() {
|
|
6766
|
+
try {
|
|
6767
|
+
const status = await checkSuperpowersInstalled();
|
|
6768
|
+
if (!status.installed) {
|
|
6769
|
+
return {
|
|
6770
|
+
success: false,
|
|
6771
|
+
message: i18n.t("superpowers:notInstalled")
|
|
6772
|
+
};
|
|
6773
|
+
}
|
|
6774
|
+
try {
|
|
6775
|
+
await execAsync("claude /plugin update superpowers", {
|
|
6776
|
+
timeout: 12e4
|
|
6777
|
+
});
|
|
6778
|
+
return {
|
|
6779
|
+
success: true,
|
|
6780
|
+
message: i18n.t("superpowers:updateSuccess")
|
|
6781
|
+
};
|
|
6782
|
+
} catch {
|
|
6783
|
+
const superpowersPath = getSuperpowersPath();
|
|
6784
|
+
await execAsync("git pull", {
|
|
6785
|
+
cwd: superpowersPath,
|
|
6786
|
+
timeout: 6e4
|
|
6787
|
+
});
|
|
6788
|
+
return {
|
|
6789
|
+
success: true,
|
|
6790
|
+
message: i18n.t("superpowers:updateSuccess")
|
|
6791
|
+
};
|
|
6792
|
+
}
|
|
6793
|
+
} catch (error) {
|
|
6794
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
6795
|
+
return {
|
|
6796
|
+
success: false,
|
|
6797
|
+
message: i18n.t("superpowers:updateFailed"),
|
|
6798
|
+
error: errorMessage
|
|
6799
|
+
};
|
|
6800
|
+
}
|
|
6801
|
+
}
|
|
6802
|
+
async function getSuperpowersSkills() {
|
|
6803
|
+
try {
|
|
6804
|
+
const status = await checkSuperpowersInstalled();
|
|
6805
|
+
if (!status.installed || !status.path) {
|
|
6806
|
+
return [];
|
|
6807
|
+
}
|
|
6808
|
+
const skillsDir = join(status.path, "skills");
|
|
6809
|
+
if (!existsSync(skillsDir)) {
|
|
6810
|
+
return [];
|
|
6811
|
+
}
|
|
6812
|
+
const { readdir } = await import('node:fs/promises');
|
|
6813
|
+
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
6814
|
+
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
6815
|
+
} catch {
|
|
6816
|
+
return [];
|
|
6817
|
+
}
|
|
6818
|
+
}
|
|
6819
|
+
|
|
6566
6820
|
function getRootDir() {
|
|
6567
6821
|
const currentFilePath = fileURLToPath(import.meta.url);
|
|
6568
6822
|
const distDir = dirname(dirname(currentFilePath));
|
|
@@ -6570,25 +6824,49 @@ function getRootDir() {
|
|
|
6570
6824
|
}
|
|
6571
6825
|
const DEFAULT_CODE_TOOL_TEMPLATE = "claude-code";
|
|
6572
6826
|
const COMMON_TEMPLATE_CATEGORIES = ["git", "sixStep"];
|
|
6827
|
+
function formatTags(tags) {
|
|
6828
|
+
const tagColors = {
|
|
6829
|
+
recommended: (text) => ansis.bgGreen.black(` ${text} `),
|
|
6830
|
+
popular: (text) => ansis.bgYellow.black(` ${text} `),
|
|
6831
|
+
new: (text) => ansis.bgCyan.black(` ${text} `),
|
|
6832
|
+
essential: (text) => ansis.bgBlue.white(` ${text} `),
|
|
6833
|
+
professional: (text) => ansis.bgMagenta.white(` ${text} `)
|
|
6834
|
+
};
|
|
6835
|
+
return tags.map((tag) => tagColors[tag](getTagLabel(tag))).join(" ");
|
|
6836
|
+
}
|
|
6837
|
+
function buildWorkflowChoice(workflow) {
|
|
6838
|
+
const tags = formatTags(workflow.metadata.tags);
|
|
6839
|
+
const stats = workflow.stats ? ansis.dim(workflow.stats) : "";
|
|
6840
|
+
const description = workflow.description ? ansis.gray(workflow.description) : "";
|
|
6841
|
+
const nameLine = `${workflow.name} ${tags}`;
|
|
6842
|
+
const detailLine = stats ? ` ${stats}` : "";
|
|
6843
|
+
const descLine = description ? ` ${description}` : "";
|
|
6844
|
+
const displayName = [nameLine, detailLine, descLine].filter(Boolean).join("\n");
|
|
6845
|
+
return {
|
|
6846
|
+
name: displayName,
|
|
6847
|
+
value: workflow.id,
|
|
6848
|
+
checked: workflow.defaultSelected
|
|
6849
|
+
};
|
|
6850
|
+
}
|
|
6573
6851
|
async function selectAndInstallWorkflows(configLang, preselectedWorkflows) {
|
|
6574
6852
|
ensureI18nInitialized();
|
|
6575
6853
|
const workflows = getOrderedWorkflows();
|
|
6576
|
-
const choices = workflows.map((workflow) =>
|
|
6577
|
-
return {
|
|
6578
|
-
name: workflow.name,
|
|
6579
|
-
value: workflow.id,
|
|
6580
|
-
checked: workflow.defaultSelected
|
|
6581
|
-
};
|
|
6582
|
-
});
|
|
6854
|
+
const choices = workflows.map((workflow) => buildWorkflowChoice(workflow));
|
|
6583
6855
|
let selectedWorkflows;
|
|
6584
6856
|
if (preselectedWorkflows) {
|
|
6585
6857
|
selectedWorkflows = preselectedWorkflows;
|
|
6586
6858
|
} else {
|
|
6859
|
+
console.log("");
|
|
6860
|
+
console.log(ansis.bold.cyan("\u2501".repeat(60)));
|
|
6861
|
+
console.log(ansis.bold.white(` \u{1F680} ${i18n.t("workflow:selectWorkflowType")}`));
|
|
6862
|
+
console.log(ansis.bold.cyan("\u2501".repeat(60)));
|
|
6863
|
+
console.log("");
|
|
6587
6864
|
const response = await inquirer.prompt({
|
|
6588
6865
|
type: "checkbox",
|
|
6589
6866
|
name: "selectedWorkflows",
|
|
6590
|
-
message:
|
|
6591
|
-
choices
|
|
6867
|
+
message: i18n.t("common:multiSelectHint"),
|
|
6868
|
+
choices,
|
|
6869
|
+
pageSize: 15
|
|
6592
6870
|
});
|
|
6593
6871
|
selectedWorkflows = response.selectedWorkflows;
|
|
6594
6872
|
}
|
|
@@ -6786,6 +7064,12 @@ async function validateSkipPromptOptions(options) {
|
|
|
6786
7064
|
if (options.installCometixLine === void 0) {
|
|
6787
7065
|
options.installCometixLine = true;
|
|
6788
7066
|
}
|
|
7067
|
+
if (typeof options.installSuperpowers === "string") {
|
|
7068
|
+
options.installSuperpowers = options.installSuperpowers.toLowerCase() === "true";
|
|
7069
|
+
}
|
|
7070
|
+
if (options.installSuperpowers === void 0) {
|
|
7071
|
+
options.installSuperpowers = false;
|
|
7072
|
+
}
|
|
6789
7073
|
if (options.configAction && !["new", "backup", "merge", "docs-only", "skip"].includes(options.configAction)) {
|
|
6790
7074
|
throw new Error(
|
|
6791
7075
|
i18n.t("errors:invalidConfigAction", { value: options.configAction })
|
|
@@ -6875,6 +7159,53 @@ async function validateSkipPromptOptions(options) {
|
|
|
6875
7159
|
options.workflows = WORKFLOW_CONFIG_BASE.map((w) => w.id);
|
|
6876
7160
|
}
|
|
6877
7161
|
}
|
|
7162
|
+
async function handleSuperpowersInstallation(options) {
|
|
7163
|
+
try {
|
|
7164
|
+
const status = await checkSuperpowersInstalled();
|
|
7165
|
+
if (status.installed) {
|
|
7166
|
+
console.log(ansis.green(`\u2714 ${i18n.t("superpowers:alreadyInstalled")}`));
|
|
7167
|
+
if (status.version) {
|
|
7168
|
+
console.log(ansis.gray(` ${i18n.t("superpowers:status.version", { version: status.version })}`));
|
|
7169
|
+
}
|
|
7170
|
+
if (status.skillCount) {
|
|
7171
|
+
console.log(ansis.gray(` ${i18n.t("superpowers:status.skillCount", { count: status.skillCount })}`));
|
|
7172
|
+
}
|
|
7173
|
+
return;
|
|
7174
|
+
}
|
|
7175
|
+
let shouldInstall = false;
|
|
7176
|
+
if (options.skipPrompt) {
|
|
7177
|
+
shouldInstall = options.installSuperpowers === true;
|
|
7178
|
+
} else {
|
|
7179
|
+
console.log(ansis.cyan(`
|
|
7180
|
+
${i18n.t("superpowers:title")}`));
|
|
7181
|
+
console.log(ansis.gray(i18n.t("superpowers:description")));
|
|
7182
|
+
console.log(ansis.gray(i18n.t("superpowers:installPromptDescription")));
|
|
7183
|
+
shouldInstall = await promptBoolean({
|
|
7184
|
+
message: i18n.t("superpowers:installPrompt"),
|
|
7185
|
+
defaultValue: false
|
|
7186
|
+
});
|
|
7187
|
+
}
|
|
7188
|
+
if (!shouldInstall) {
|
|
7189
|
+
console.log(ansis.yellow(i18n.t("common:skip")));
|
|
7190
|
+
return;
|
|
7191
|
+
}
|
|
7192
|
+
const result = await installSuperpowers({
|
|
7193
|
+
lang: i18n.language,
|
|
7194
|
+
skipPrompt: options.skipPrompt
|
|
7195
|
+
});
|
|
7196
|
+
if (result.success) {
|
|
7197
|
+
console.log(ansis.green(`\u2714 ${result.message}`));
|
|
7198
|
+
} else {
|
|
7199
|
+
console.error(ansis.red(`\u2716 ${result.message}`));
|
|
7200
|
+
if (result.error) {
|
|
7201
|
+
console.error(ansis.gray(` ${result.error}`));
|
|
7202
|
+
}
|
|
7203
|
+
}
|
|
7204
|
+
} catch (error) {
|
|
7205
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
7206
|
+
console.error(ansis.red(`${i18n.t("superpowers:installFailed")}: ${errorMessage}`));
|
|
7207
|
+
}
|
|
7208
|
+
}
|
|
6878
7209
|
async function init(options = {}) {
|
|
6879
7210
|
if (options.skipPrompt) {
|
|
6880
7211
|
await validateSkipPromptOptions(options);
|
|
@@ -7392,6 +7723,18 @@ async function init(options = {}) {
|
|
|
7392
7723
|
} else {
|
|
7393
7724
|
console.log(ansis.green(`\u2714 ${i18n.t("cometix:cometixAlreadyInstalled")}`));
|
|
7394
7725
|
}
|
|
7726
|
+
if (!options.skipPrompt || options.installSuperpowers) {
|
|
7727
|
+
await handleSuperpowersInstallation(options);
|
|
7728
|
+
}
|
|
7729
|
+
try {
|
|
7730
|
+
const { injectSmartGuide } = await import('./smart-guide.mjs');
|
|
7731
|
+
const smartGuideSuccess = await injectSmartGuide(configLang);
|
|
7732
|
+
if (smartGuideSuccess) {
|
|
7733
|
+
console.log(ansis.green(`\u2714 ${i18n.t("smartGuide:enabled")}`));
|
|
7734
|
+
}
|
|
7735
|
+
} catch {
|
|
7736
|
+
console.log(ansis.gray(`\u2139 ${i18n.t("smartGuide:skipped")}`));
|
|
7737
|
+
}
|
|
7395
7738
|
updateZcfConfig({
|
|
7396
7739
|
version,
|
|
7397
7740
|
preferredLang: i18n.language,
|
|
@@ -10391,4 +10734,4 @@ async function openSettingsJson() {
|
|
|
10391
10734
|
}
|
|
10392
10735
|
}
|
|
10393
10736
|
|
|
10394
|
-
export { AI_OUTPUT_LANGUAGES as $, AIDER_DIR as A, CODEX_AGENTS_FILE as B, CCJK_PLUGINS_DIR as C, CODEX_PROMPTS_DIR as D, CLINE_DIR as E, CLINE_CONFIG_FILE as F, CURSOR_DIR as G, CURSOR_CONFIG_FILE as H, CCJK_CONFIG_DIR as I, CCJK_CONFIG_FILE as J, LEGACY_ZCF_CONFIG_FILE as K, LEGACY_ZCF_CONFIG_DIR as L, LEGACY_ZCF_CONFIG_FILES as M, ZCF_CONFIG_FILE as N, CODE_TOOL_TYPES as O, DEFAULT_CODE_TOOL_TYPE as P, CODE_TOOL_BANNERS as Q, CODE_TOOL_ALIASES as R, STATUS as S, CODE_TOOL_INFO as T, isCodeToolType as U, API_DEFAULT_URL as V, API_ENV_KEY as W, resolveCodeToolType as X, SUPPORTED_LANGS as Y, ZCF_CONFIG_DIR as Z, LANG_LABELS as _, CCJK_SKILLS_DIR as a, getAvailableManagementActions as a$, getAiOutputLanguageLabel as a0, detectPackageManager as a1, detectFrameworks as a2, detectBuildTools as a3, detectTestFrameworks as a4, detectCICDSystems as a5, detectLanguages as a6, determineProjectType as a7, detectProject as a8, generateSuggestions as a9, createBackupDirectory as aA, ensureEnvKeyMigration as aB, getBackupMessage as aC, getCodexVersion as aD, getCurrentCodexProvider as aE, installCodexCli as aF, isCodexInstalled$1 as aG, listCodexProviders as aH, migrateEnvKeyInContent as aI, migrateEnvKeyToTempEnvKey as aJ, needsEnvKeyMigration as aK, parseCodexConfig as aL, readCodexConfig as aM, renderCodexConfig as aN, runCodexFullInit as aO, runCodexSystemPromptSelection as aP, runCodexUninstall as aQ, runCodexUpdate as aR, runCodexWorkflowImport as aS, runCodexWorkflowImportWithLanguageSelection as aT, runCodexWorkflowSelection as aU, switchCodexProvider as aV, switchToProvider as aW, writeAuthFile as aX, writeCodexConfig as aY, detectConfigManagementMode as aZ, shouldShowManagementMode as a_, getProjectSummary as aa, displayBanner as ab, displayBannerWithInfo as ac, renderProgressBar as ad, boxify as ae, menuItem as af, getMcpConfigPath as ag, readMcpConfig as ah, writeMcpConfig as ai, backupMcpConfig as aj, mergeMcpServers as ak, buildMcpServerConfig as al, fixWindowsMcpConfig as am, addCompletedOnboarding as an, ensureApiKeyApproved as ao, removeApiKeyFromRejected as ap, manageApiKeyApproval as aq, setPrimaryApiKey as ar, backupCodexAgents as as, backupCodexComplete as at, backupCodexConfig as au, backupCodexFiles as av, backupCodexPrompts as aw, checkCodexUpdate as ax, switchToOfficialLogin as ay, configureCodexApi as az, CCJK_GROUPS_DIR as b, trustDirectory as b$, configureCodexMcp as b0, applyCodexPlatformCommand as b1, getToolConfigPath as b2, getToolDir as b3, isToolInstalled as b4, getToolVersion as b5, getToolStatus as b6, getAllToolsStatus as b7, getInstalledTools as b8, installTool as b9, runDoctor as bA, isClaudeCodeInstalled as bB, installClaudeCode as bC, isCodexInstalled as bD, installCodex as bE, isLocalClaudeCodeInstalled as bF, getInstallationStatus as bG, removeLocalClaudeCode as bH, uninstallCodeTool as bI, setInstallMethod as bJ, detectInstalledVersion as bK, selectInstallMethod as bL, executeInstallMethod as bM, handleInstallFailure as bN, verifyInstallation as bO, createHomebrewSymlink as bP, displayVerificationResult as bQ, loadKnowledgeBase as bR, saveKnowledgeBase as bS, runOnboarding as bT, quickSync as bU, getProjectKnowledge as bV, exportProjectKnowledge as bW, PERMISSION_TEMPLATES as bX, readPermissions as bY, writePermissions as bZ, applyTemplate as b_, getToolInfo as ba, getAllToolsInfo as bb, getToolsByCategory as bc, formatToolStatus as bd, getRecommendedTools as be, ensureClaudeDir as bf, backupExistingConfig as bg, copyConfigFiles as bh, configureApi as bi, mergeConfigs as bj, updateCustomModel as bk, updateDefaultModel as bl, mergeSettingsFile as bm, getExistingModelConfig as bn, getExistingApiConfig as bo, applyAiLanguageDirective as bp, switchToOfficialLogin$1 as bq, promptApiConfigurationAction as br, detectAllConfigs as bs, compareConfigs as bt, consolidateConfigs as bu, writeConsolidatedConfig as bv, removeRedundantConfigs as bw, displayConfigScan as bx, runHealthCheck as by, displayHealthReport as bz, AIDER_CONFIG_FILE as c,
|
|
10737
|
+
export { AI_OUTPUT_LANGUAGES as $, AIDER_DIR as A, CODEX_AGENTS_FILE as B, CCJK_PLUGINS_DIR as C, CODEX_PROMPTS_DIR as D, CLINE_DIR as E, CLINE_CONFIG_FILE as F, CURSOR_DIR as G, CURSOR_CONFIG_FILE as H, CCJK_CONFIG_DIR as I, CCJK_CONFIG_FILE as J, LEGACY_ZCF_CONFIG_FILE as K, LEGACY_ZCF_CONFIG_DIR as L, LEGACY_ZCF_CONFIG_FILES as M, ZCF_CONFIG_FILE as N, CODE_TOOL_TYPES as O, DEFAULT_CODE_TOOL_TYPE as P, CODE_TOOL_BANNERS as Q, CODE_TOOL_ALIASES as R, STATUS as S, CODE_TOOL_INFO as T, isCodeToolType as U, API_DEFAULT_URL as V, API_ENV_KEY as W, resolveCodeToolType as X, SUPPORTED_LANGS as Y, ZCF_CONFIG_DIR as Z, LANG_LABELS as _, CCJK_SKILLS_DIR as a, getAvailableManagementActions as a$, getAiOutputLanguageLabel as a0, detectPackageManager as a1, detectFrameworks as a2, detectBuildTools as a3, detectTestFrameworks as a4, detectCICDSystems as a5, detectLanguages as a6, determineProjectType as a7, detectProject as a8, generateSuggestions as a9, createBackupDirectory as aA, ensureEnvKeyMigration as aB, getBackupMessage as aC, getCodexVersion as aD, getCurrentCodexProvider as aE, installCodexCli as aF, isCodexInstalled$1 as aG, listCodexProviders as aH, migrateEnvKeyInContent as aI, migrateEnvKeyToTempEnvKey as aJ, needsEnvKeyMigration as aK, parseCodexConfig as aL, readCodexConfig as aM, renderCodexConfig as aN, runCodexFullInit as aO, runCodexSystemPromptSelection as aP, runCodexUninstall as aQ, runCodexUpdate as aR, runCodexWorkflowImport as aS, runCodexWorkflowImportWithLanguageSelection as aT, runCodexWorkflowSelection as aU, switchCodexProvider as aV, switchToProvider as aW, writeAuthFile as aX, writeCodexConfig as aY, detectConfigManagementMode as aZ, shouldShowManagementMode as a_, getProjectSummary as aa, displayBanner as ab, displayBannerWithInfo as ac, renderProgressBar as ad, boxify as ae, menuItem as af, getMcpConfigPath as ag, readMcpConfig as ah, writeMcpConfig as ai, backupMcpConfig as aj, mergeMcpServers as ak, buildMcpServerConfig as al, fixWindowsMcpConfig as am, addCompletedOnboarding as an, ensureApiKeyApproved as ao, removeApiKeyFromRejected as ap, manageApiKeyApproval as aq, setPrimaryApiKey as ar, backupCodexAgents as as, backupCodexComplete as at, backupCodexConfig as au, backupCodexFiles as av, backupCodexPrompts as aw, checkCodexUpdate as ax, switchToOfficialLogin as ay, configureCodexApi as az, CCJK_GROUPS_DIR as b, trustDirectory as b$, configureCodexMcp as b0, applyCodexPlatformCommand as b1, getToolConfigPath as b2, getToolDir as b3, isToolInstalled as b4, getToolVersion as b5, getToolStatus as b6, getAllToolsStatus as b7, getInstalledTools as b8, installTool as b9, runDoctor as bA, isClaudeCodeInstalled as bB, installClaudeCode as bC, isCodexInstalled as bD, installCodex as bE, isLocalClaudeCodeInstalled as bF, getInstallationStatus as bG, removeLocalClaudeCode as bH, uninstallCodeTool as bI, setInstallMethod as bJ, detectInstalledVersion as bK, selectInstallMethod as bL, executeInstallMethod as bM, handleInstallFailure as bN, verifyInstallation as bO, createHomebrewSymlink as bP, displayVerificationResult as bQ, loadKnowledgeBase as bR, saveKnowledgeBase as bS, runOnboarding as bT, quickSync as bU, getProjectKnowledge as bV, exportProjectKnowledge as bW, PERMISSION_TEMPLATES as bX, readPermissions as bY, writePermissions as bZ, applyTemplate as b_, getToolInfo as ba, getAllToolsInfo as bb, getToolsByCategory as bc, formatToolStatus as bd, getRecommendedTools as be, ensureClaudeDir as bf, backupExistingConfig as bg, copyConfigFiles as bh, configureApi as bi, mergeConfigs as bj, updateCustomModel as bk, updateDefaultModel as bl, mergeSettingsFile as bm, getExistingModelConfig as bn, getExistingApiConfig as bo, applyAiLanguageDirective as bp, switchToOfficialLogin$1 as bq, promptApiConfigurationAction as br, detectAllConfigs as bs, compareConfigs as bt, consolidateConfigs as bu, writeConsolidatedConfig as bv, removeRedundantConfigs as bw, displayConfigScan as bx, runHealthCheck as by, displayHealthReport as bz, AIDER_CONFIG_FILE as c, writeTomlConfig as c$, untrustDirectory as c0, isPermissionAllowed as c1, isDirectoryTrusted as c2, addAutoApprovePattern as c3, removeAutoApprovePattern as c4, resetPermissions as c5, exportPermissions as c6, importPermissions as c7, getCurrentTemplateId as c8, displayPermissions as c9, checkAndUpdateTools as cA, resolveCodeType as cB, readZcfConfig as cC, readJsonConfig as cD, writeJsonConfig as cE, moveToTrash as cF, updateZcfConfig as cG, version as cH, resolveAiOutputLanguage as cI, updatePromptOnly as cJ, selectAndInstallWorkflows as cK, checkClaudeCodeVersionAndPrompt as cL, checkSuperpowersInstalled as cM, getSuperpowersSkills as cN, updateSuperpowers as cO, uninstallSuperpowers as cP, installSuperpowers as cQ, installSuperpowersViaGit as cR, readZcfConfigAsync as cS, initI18n as cT, selectScriptLanguage as cU, changeLanguage as cV, validateApiKey$1 as cW, ensureDir as cX, readDefaultTomlConfig as cY, createDefaultTomlConfig as cZ, exists as c_, checkClaudeCodeVersion as ca, checkCcjkVersion as cb, checkPluginVersions as cc, upgradeClaudeCode as cd, upgradeCcjk as ce, upgradePlugin as cf, upgradeAllPlugins as cg, checkAllVersions as ch, upgradeAll as ci, i18n as cj, testApiConnection as ck, quickSetup as cl, format as cm, getAllPresets as cn, ensureI18nInitialized as co, readCcrConfig as cp, isCcrInstalled as cq, installCcr as cr, configureCcrFeature as cs, promptBoolean as ct, handleExitPromptError as cu, handleGeneralError as cv, COMETIX_COMMAND_NAME as cw, COMETIX_COMMANDS as cx, installCometixLine as cy, addNumbersToChoices as cz, AIDER_ENV_FILE as d, clearModelEnv as d0, copyFile as d1, configureOutputStyle as d2, isWindows as d3, selectMcpServices as d4, getMcpServices as d5, setupCcrConfiguration as d6, modifyApiConfigPartially as d7, formatApiKeyDisplay as d8, index as d9, fsOperations as da, jsonConfig as db, claudeConfig as dc, config$1 as dd, config as de, prompts as df, codex as dg, installer as dh, CONTINUE_DIR as e, CONTINUE_CONFIG_FILE as f, COLORS as g, displayCurrentStatus as h, init as i, cleanupPermissions as j, commandExists as k, getPlatform as l, mergeAndCleanPermissions as m, importRecommendedEnv as n, importRecommendedPermissions as o, openSettingsJson as p, CLAUDE_DIR$1 as q, runConfigWizard as r, sectionDivider as s, SETTINGS_FILE$1 as t, CLAUDE_MD_FILE as u, ClAUDE_CONFIG_FILE as v, CLAUDE_VSC_CONFIG_FILE as w, CODEX_DIR as x, CODEX_CONFIG_FILE as y, CODEX_AUTH_FILE as z };
|