@cannbot-ai/install-helper 0.0.2-beta.14 → 0.0.2-beta.15
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/index.js +114 -50
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -282,7 +282,38 @@ var zh_CN = {
|
|
|
282
282
|
wizard_step_4_skill_title: "[4/4] \u9009\u62E9\u8981\u5B89\u88C5\u7684 Skills \u2014 {category}",
|
|
283
283
|
install_level_project: "\u5B89\u88C5\u5230\u5F53\u524D\u76EE\u5F55\uFF08\u63A8\u8350\uFF0C\u4EC5\u5F53\u524D\u9879\u76EE\u53EF\u7528\uFF09",
|
|
284
284
|
install_level_global: "\u5B89\u88C5\u5230\u5168\u5C40\uFF08\u6240\u6709\u9879\u76EE\u5171\u4EAB\uFF09",
|
|
285
|
-
wizard_select_mode_title: "\u9009\u62E9\u5B89\u88C5\u7C7B\u578B"
|
|
285
|
+
wizard_select_mode_title: "\u9009\u62E9\u5B89\u88C5\u7C7B\u578B",
|
|
286
|
+
skill_count_format: "{count} \u4E2A Skills",
|
|
287
|
+
result_success_format: "{count} \u6210\u529F",
|
|
288
|
+
result_failed_format: "{count} \u5931\u8D25",
|
|
289
|
+
uninstall_remove_label: "\u79FB\u9664",
|
|
290
|
+
uninstall_remove_file_format: "\u79FB\u9664 {count} \u4E2A\u6587\u4EF6",
|
|
291
|
+
uninstall_remove_dir_format: "{count} \u4E2A\u76EE\u5F55",
|
|
292
|
+
uninstall_clean_empty_dir: "\u6E05\u7406\u7A7A\u76EE\u5F55",
|
|
293
|
+
uninstall_skill_not_installed: "\u672A\u5B89\u88C5",
|
|
294
|
+
available_plugins: "\u53EF\u7528\u63D2\u4EF6",
|
|
295
|
+
available_skills: "\u53EF\u7528 Skills",
|
|
296
|
+
skill_total_count: "\u5171 {count} \u4E2A Skills",
|
|
297
|
+
wizard_confirm_install_format: "\u5373\u5C06\u5B89\u88C5 {count} \u4E2A\u63D2\u4EF6\u5230 {tool}\uFF08{level} \u7EA7\u522B\uFF09\uFF1A",
|
|
298
|
+
wizard_install_path: "\u5B89\u88C5\u8DEF\u5F84",
|
|
299
|
+
update_install_hint: "\u4F7F\u7528 {cmd} \u5B89\u88C5\u63D2\u4EF6",
|
|
300
|
+
hint_select_move: "\u79FB\u52A8",
|
|
301
|
+
hint_select_space: "\u7A7A\u683C",
|
|
302
|
+
hint_select_check: "\u52FE\u9009",
|
|
303
|
+
hint_select_confirm: "\u786E\u8BA4",
|
|
304
|
+
hint_checkbox_suffix: "\u4E0D\u9009\u6309\u56DE\u8F66\u53EF\u8FD4\u56DE",
|
|
305
|
+
doctor_not_installed: "\u672A\u5B89\u88C5",
|
|
306
|
+
doctor_links_valid: "{count} \u4E2A\u8F6F\u94FE\u63A5\u5747\u6709\u6548",
|
|
307
|
+
doctor_broken_links: "{count} \u4E2A\u5931\u6548\u94FE\u63A5",
|
|
308
|
+
doctor_fixed: "\u5DF2\u6E05\u7406 {count} \u4E2A\u5931\u6548\u94FE\u63A5",
|
|
309
|
+
doctor_not_exist: "\u4E0D\u5B58\u5728",
|
|
310
|
+
doctor_created: "\u5DF2\u521B\u5EFA {path}",
|
|
311
|
+
doctor_config_exists: "\u5B58\u5728",
|
|
312
|
+
doctor_config_not_exist: "\u4E0D\u5B58\u5728",
|
|
313
|
+
doctor_result_with_fix: "{warnings} \u4E2A\u8B66\u544A, {errors} \u4E2A\u9519\u8BEF, {fixes} \u9879\u5DF2\u4FEE\u590D",
|
|
314
|
+
doctor_result_without_fix: "{warnings} \u4E2A\u8B66\u544A, {errors} \u4E2A\u9519\u8BEF",
|
|
315
|
+
count_suffix: "\u4E2A",
|
|
316
|
+
try_prompt: "\u5E2E\u6211\u5F00\u53D1\u4E00\u4E2A Abs \u7B97\u5B50"
|
|
286
317
|
};
|
|
287
318
|
var en_US = {
|
|
288
319
|
wizard_title: "CANNBot Install Helper",
|
|
@@ -419,7 +450,38 @@ var en_US = {
|
|
|
419
450
|
wizard_step_4_skill_title: "[4/4] Select Skills to install \u2014 {category}",
|
|
420
451
|
install_level_project: "Install to current directory (recommended, current project only)",
|
|
421
452
|
install_level_global: "Install globally (all projects)",
|
|
422
|
-
wizard_select_mode_title: "Select installation type"
|
|
453
|
+
wizard_select_mode_title: "Select installation type",
|
|
454
|
+
skill_count_format: "{count} Skills",
|
|
455
|
+
result_success_format: "{count} succeeded",
|
|
456
|
+
result_failed_format: "{count} failed",
|
|
457
|
+
uninstall_remove_label: "Removed",
|
|
458
|
+
uninstall_remove_file_format: "Removed {count} files",
|
|
459
|
+
uninstall_remove_dir_format: "{count} directories",
|
|
460
|
+
uninstall_clean_empty_dir: "Cleaned empty directory",
|
|
461
|
+
uninstall_skill_not_installed: "Not installed",
|
|
462
|
+
available_plugins: "Available plugins",
|
|
463
|
+
available_skills: "Available Skills",
|
|
464
|
+
skill_total_count: "Total {count} Skills",
|
|
465
|
+
wizard_confirm_install_format: "About to install {count} plugins to {tool} ({level} level):",
|
|
466
|
+
wizard_install_path: "Install path",
|
|
467
|
+
update_install_hint: "Use {cmd} to install plugins",
|
|
468
|
+
hint_select_move: "Navigate",
|
|
469
|
+
hint_select_space: "Space",
|
|
470
|
+
hint_select_check: "Toggle",
|
|
471
|
+
hint_select_confirm: "Confirm",
|
|
472
|
+
hint_checkbox_suffix: "Press enter without selection to go back",
|
|
473
|
+
doctor_not_installed: "Not installed",
|
|
474
|
+
doctor_links_valid: "{count} symlinks all valid",
|
|
475
|
+
doctor_broken_links: "{count} broken links",
|
|
476
|
+
doctor_fixed: "Cleaned {count} broken links",
|
|
477
|
+
doctor_not_exist: "Does not exist",
|
|
478
|
+
doctor_created: "Created {path}",
|
|
479
|
+
doctor_config_exists: "Exists",
|
|
480
|
+
doctor_config_not_exist: "Does not exist",
|
|
481
|
+
doctor_result_with_fix: "{warnings} warnings, {errors} errors, {fixes} fixed",
|
|
482
|
+
doctor_result_without_fix: "{warnings} warnings, {errors} errors",
|
|
483
|
+
count_suffix: "",
|
|
484
|
+
try_prompt: "help me develop an Abs operator"
|
|
423
485
|
};
|
|
424
486
|
var currentLang = "zh_CN";
|
|
425
487
|
function setLanguage(lang) {
|
|
@@ -785,10 +847,10 @@ function printBoxTitle(title, width = 65) {
|
|
|
785
847
|
}
|
|
786
848
|
function showOperationHints(isCheckbox = false) {
|
|
787
849
|
if (isCheckbox) {
|
|
788
|
-
console.log(` \u{1F4A1} \x1B[36m\u2191\u2193\x1B[0m
|
|
850
|
+
console.log(` \u{1F4A1} \x1B[36m\u2191\u2193\x1B[0m ${t("hint_select_move")} | \x1B[36m${t("hint_select_space")}\x1B[0m ${t("hint_select_check")} | \x1B[36m\u23CE\x1B[0m ${t("hint_select_confirm")}\uFF08${t("hint_checkbox_suffix")}\uFF09
|
|
789
851
|
`);
|
|
790
852
|
} else {
|
|
791
|
-
console.log(` \u{1F4A1} \x1B[36m\u2191\u2193\x1B[0m
|
|
853
|
+
console.log(` \u{1F4A1} \x1B[36m\u2191\u2193\x1B[0m ${t("hint_select_move")} | \x1B[36m\u23CE\x1B[0m ${t("hint_select_confirm")}
|
|
792
854
|
`);
|
|
793
855
|
}
|
|
794
856
|
}
|
|
@@ -1097,8 +1159,8 @@ async function stepConfirm(tool, level, plugins) {
|
|
|
1097
1159
|
const displayPath = getConfigRoot(tool, level);
|
|
1098
1160
|
const toolName = getToolDisplayName(tool);
|
|
1099
1161
|
const levelText = level === "project" ? "project" : "global";
|
|
1100
|
-
logger.info(
|
|
1101
|
-
logger.info(
|
|
1162
|
+
logger.info(t("wizard_confirm_install_format").replace("{count}", chalk2.bold(String(plugins.length))).replace("{tool}", chalk2.green(toolName)).replace("{level}", chalk2.cyan(levelText)));
|
|
1163
|
+
logger.info(`${t("wizard_install_path")}: ${chalk2.cyan(displayPath)}`);
|
|
1102
1164
|
for (const plugin of selectedPlugins) {
|
|
1103
1165
|
if (plugin) {
|
|
1104
1166
|
logger.step(` \u2022 ${chalk2.bold(plugin.displayName)}`);
|
|
@@ -2170,10 +2232,10 @@ async function uninstallSkills(skillIds, tool, level) {
|
|
|
2170
2232
|
unlinkSync3(targetPath);
|
|
2171
2233
|
results.push({ skillId, success: true });
|
|
2172
2234
|
removedIds.push(skillId);
|
|
2173
|
-
logger.step(`
|
|
2235
|
+
logger.step(` ${t("uninstall_remove_label")}: ${skillId}`);
|
|
2174
2236
|
} else {
|
|
2175
2237
|
results.push({ skillId, success: false, error: "Not installed" });
|
|
2176
|
-
logger.warn(`${skillId}
|
|
2238
|
+
logger.warn(`${skillId} ${t("uninstall_skill_not_installed")}`);
|
|
2177
2239
|
}
|
|
2178
2240
|
} catch (error) {
|
|
2179
2241
|
results.push({ skillId, success: false, error: error instanceof Error ? error.message : "Unknown error" });
|
|
@@ -2187,7 +2249,7 @@ async function uninstallSkills(skillIds, tool, level) {
|
|
|
2187
2249
|
const entries = readdirSync3(skillsDir);
|
|
2188
2250
|
if (entries.length === 0) {
|
|
2189
2251
|
rmdirSync(skillsDir);
|
|
2190
|
-
logger.step(`
|
|
2252
|
+
logger.step(` ${t("uninstall_clean_empty_dir")}: skills/`);
|
|
2191
2253
|
}
|
|
2192
2254
|
} catch {
|
|
2193
2255
|
}
|
|
@@ -2296,7 +2358,7 @@ function listAllSkills() {
|
|
|
2296
2358
|
console.log(table.toString());
|
|
2297
2359
|
}
|
|
2298
2360
|
console.log();
|
|
2299
|
-
console.log(chalk4.dim(`
|
|
2361
|
+
console.log(chalk4.dim(` ${t("skill_total_count").replace("{count}", String(getAllSkills().length))}`));
|
|
2300
2362
|
console.log();
|
|
2301
2363
|
}
|
|
2302
2364
|
function isSymlink2(path) {
|
|
@@ -2333,7 +2395,8 @@ function printPluginList(plugins, installed) {
|
|
|
2333
2395
|
]);
|
|
2334
2396
|
});
|
|
2335
2397
|
console.log();
|
|
2336
|
-
|
|
2398
|
+
const countSuffix = t("count_suffix");
|
|
2399
|
+
console.log(chalk5.bold(` ${t("list_title")} (${plugins.length}${countSuffix ? " " + countSuffix : ""})`));
|
|
2337
2400
|
console.log(table.toString());
|
|
2338
2401
|
console.log();
|
|
2339
2402
|
}
|
|
@@ -2366,15 +2429,16 @@ function printEnhancedSummary(results, tool, configRoot) {
|
|
|
2366
2429
|
return;
|
|
2367
2430
|
}
|
|
2368
2431
|
const toolName = getToolDisplayName(tool);
|
|
2432
|
+
const countSuffix = t("count_suffix");
|
|
2369
2433
|
const lines = [
|
|
2370
2434
|
chalk5.bold(` ${t("install_done")}!`),
|
|
2371
2435
|
"",
|
|
2372
2436
|
` ${chalk5.dim(t("install_installed_to") + ":")} ${configRoot}`,
|
|
2373
|
-
` ${chalk5.dim(t("install_skills_count") + ":")} ${totalSkills}
|
|
2437
|
+
` ${chalk5.dim(t("install_skills_count") + ":")} ${totalSkills}${countSuffix ? " " + countSuffix : ""} ${chalk5.dim("|")} ${chalk5.dim(t("install_agents_count") + ":")} ${totalAgents}${countSuffix ? " " + countSuffix : ""}`,
|
|
2374
2438
|
"",
|
|
2375
2439
|
chalk5.bold(` ${t("install_enhanced_next_steps")}:`),
|
|
2376
2440
|
` ${chalk5.cyan("1.")} ${t("install_enhanced_launch")}: ${chalk5.green(toolName.toLowerCase())}`,
|
|
2377
|
-
` ${chalk5.cyan("2.")} ${t("install_enhanced_try")}: ${chalk5.green("
|
|
2441
|
+
` ${chalk5.cyan("2.")} ${t("install_enhanced_try")}: ${chalk5.green(t("try_prompt"))}`,
|
|
2378
2442
|
` ${chalk5.cyan("3.")} ${t("install_enhanced_more")}: ${chalk5.green("install-helper list")}`,
|
|
2379
2443
|
` ${chalk5.cyan("4.")} ${t("install_enhanced_check")}: ${chalk5.green("install-helper doctor")}`,
|
|
2380
2444
|
""
|
|
@@ -2582,7 +2646,7 @@ async function skillInstallFlow() {
|
|
|
2582
2646
|
spinner.start();
|
|
2583
2647
|
const repoPath = await repoManager.ensureRepo();
|
|
2584
2648
|
spinner.succeed(t("loading_plugin_data_complete"));
|
|
2585
|
-
logger.info(`${t("skill_install_progress")} ${chalk6.bold(selectedSkills.length)}
|
|
2649
|
+
logger.info(`${t("skill_install_progress")} ${t("skill_count_format").replace("{count}", chalk6.bold(String(selectedSkills.length)))}...`);
|
|
2586
2650
|
const results = await installSkills(selectedSkills, tool, level, repoPath);
|
|
2587
2651
|
let successCount = 0;
|
|
2588
2652
|
let failCount = 0;
|
|
@@ -2600,7 +2664,7 @@ async function skillInstallFlow() {
|
|
|
2600
2664
|
}
|
|
2601
2665
|
const configRoot = getConfigRoot(tool, level);
|
|
2602
2666
|
logger.blank();
|
|
2603
|
-
logger.success(`${t("skill_install_done")}: ${chalk6.green(
|
|
2667
|
+
logger.success(`${t("skill_install_done")}: ${chalk6.green(t("result_success_format").replace("{count}", String(successCount)))}, ${failCount > 0 ? chalk6.red(t("result_failed_format").replace("{count}", String(failCount))) : chalk6.dim(t("result_failed_format").replace("{count}", String(failCount)))}`);
|
|
2604
2668
|
logger.blank();
|
|
2605
2669
|
logger.info(`${t("install_to")}: ${chalk6.cyan(configRoot + "/skills/")}`);
|
|
2606
2670
|
logger.info(`${t("start_to_use").replace("{tool}", chalk6.green(tool))}`);
|
|
@@ -2646,7 +2710,7 @@ async function doctorCommand(options = {}) {
|
|
|
2646
2710
|
chalk7.green(" \u2713") + ` ${getToolDisplayName(tool)}${detected.version ? ` v${detected.version}` : ""}`
|
|
2647
2711
|
);
|
|
2648
2712
|
} else {
|
|
2649
|
-
console.log(chalk7.dim(" \u2014") + ` ${getToolDisplayName(tool)} \u2014
|
|
2713
|
+
console.log(chalk7.dim(" \u2014") + ` ${getToolDisplayName(tool)} \u2014 ${t("doctor_not_installed")}`);
|
|
2650
2714
|
}
|
|
2651
2715
|
}
|
|
2652
2716
|
console.log();
|
|
@@ -2661,7 +2725,7 @@ async function doctorCommand(options = {}) {
|
|
|
2661
2725
|
chalk7.green(" \u2713") + ` ${plugin.id.padEnd(30)} ${inst.skillsCount} skills, ${inst.agentsCount} agents`
|
|
2662
2726
|
);
|
|
2663
2727
|
} else {
|
|
2664
|
-
console.log(chalk7.dim(" \u2014") + ` ${plugin.id.padEnd(30)} \u2014
|
|
2728
|
+
console.log(chalk7.dim(" \u2014") + ` ${plugin.id.padEnd(30)} \u2014 ${t("doctor_not_installed")}`);
|
|
2665
2729
|
}
|
|
2666
2730
|
}
|
|
2667
2731
|
console.log();
|
|
@@ -2674,44 +2738,44 @@ async function doctorCommand(options = {}) {
|
|
|
2674
2738
|
const brokenLinks = checkBrokenLinks(skillsDir);
|
|
2675
2739
|
if (brokenLinks === 0) {
|
|
2676
2740
|
const count = readdirSync4(skillsDir).length;
|
|
2677
|
-
console.log(chalk7.green(" \u2713") + ` ${skillsDir} \u2014 ${count}
|
|
2741
|
+
console.log(chalk7.green(" \u2713") + ` ${skillsDir} \u2014 ${t("doctor_links_valid").replace("{count}", String(count))}`);
|
|
2678
2742
|
} else {
|
|
2679
|
-
console.log(chalk7.yellow(" \u26A0") + ` ${skillsDir} \u2014 ${brokenLinks}
|
|
2743
|
+
console.log(chalk7.yellow(" \u26A0") + ` ${skillsDir} \u2014 ${t("doctor_broken_links").replace("{count}", String(brokenLinks))}`);
|
|
2680
2744
|
warnings++;
|
|
2681
2745
|
if (options.fix) {
|
|
2682
2746
|
const fixed = fixBrokenLinks(skillsDir);
|
|
2683
2747
|
fixes += fixed;
|
|
2684
|
-
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_cleaning")}:
|
|
2748
|
+
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_cleaning")}: ${t("doctor_fixed").replace("{count}", String(fixed))}`);
|
|
2685
2749
|
}
|
|
2686
2750
|
}
|
|
2687
2751
|
} else {
|
|
2688
|
-
console.log(chalk7.dim(" \u2014") + ` ${skillsDir} \u2014
|
|
2752
|
+
console.log(chalk7.dim(" \u2014") + ` ${skillsDir} \u2014 ${t("doctor_not_exist")}`);
|
|
2689
2753
|
if (options.fix) {
|
|
2690
2754
|
mkdirSync6(skillsDir, { recursive: true });
|
|
2691
2755
|
fixes++;
|
|
2692
|
-
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_rebuilding")}:
|
|
2756
|
+
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_rebuilding")}: ${t("doctor_created").replace("{path}", skillsDir)}`);
|
|
2693
2757
|
}
|
|
2694
2758
|
}
|
|
2695
2759
|
if (existsSync12(agentsDir)) {
|
|
2696
2760
|
const brokenLinks = checkBrokenLinks(agentsDir);
|
|
2697
2761
|
if (brokenLinks === 0) {
|
|
2698
2762
|
const count = readdirSync4(agentsDir).length;
|
|
2699
|
-
console.log(chalk7.green(" \u2713") + ` ${agentsDir} \u2014 ${count}
|
|
2763
|
+
console.log(chalk7.green(" \u2713") + ` ${agentsDir} \u2014 ${t("doctor_links_valid").replace("{count}", String(count))}`);
|
|
2700
2764
|
} else {
|
|
2701
|
-
console.log(chalk7.yellow(" \u26A0") + ` ${agentsDir} \u2014 ${brokenLinks}
|
|
2765
|
+
console.log(chalk7.yellow(" \u26A0") + ` ${agentsDir} \u2014 ${t("doctor_broken_links").replace("{count}", String(brokenLinks))}`);
|
|
2702
2766
|
warnings++;
|
|
2703
2767
|
if (options.fix) {
|
|
2704
2768
|
const fixed = fixBrokenLinks(agentsDir);
|
|
2705
2769
|
fixes += fixed;
|
|
2706
|
-
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_cleaning")}:
|
|
2770
|
+
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_cleaning")}: ${t("doctor_fixed").replace("{count}", String(fixed))}`);
|
|
2707
2771
|
}
|
|
2708
2772
|
}
|
|
2709
2773
|
} else {
|
|
2710
|
-
console.log(chalk7.dim(" \u2014") + ` ${agentsDir} \u2014
|
|
2774
|
+
console.log(chalk7.dim(" \u2014") + ` ${agentsDir} \u2014 ${t("doctor_not_exist")}`);
|
|
2711
2775
|
if (options.fix) {
|
|
2712
2776
|
mkdirSync6(agentsDir, { recursive: true });
|
|
2713
2777
|
fixes++;
|
|
2714
|
-
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_rebuilding")}:
|
|
2778
|
+
console.log(chalk7.green(" \u2713") + ` ${t("doctor_fix_rebuilding")}: ${t("doctor_created").replace("{path}", agentsDir)}`);
|
|
2715
2779
|
}
|
|
2716
2780
|
}
|
|
2717
2781
|
console.log();
|
|
@@ -2719,19 +2783,19 @@ async function doctorCommand(options = {}) {
|
|
|
2719
2783
|
const configFile = getConfigFileName(primaryTool);
|
|
2720
2784
|
const configPath = join12(process.cwd(), configFile);
|
|
2721
2785
|
if (existsSync12(configPath)) {
|
|
2722
|
-
console.log(chalk7.green(" \u2713") + ` ${configFile}
|
|
2786
|
+
console.log(chalk7.green(" \u2713") + ` ${configFile} ${t("doctor_config_exists")}`);
|
|
2723
2787
|
} else {
|
|
2724
|
-
console.log(chalk7.dim(" \u2014") + ` ${configFile}
|
|
2788
|
+
console.log(chalk7.dim(" \u2014") + ` ${configFile} ${t("doctor_config_not_exist")}`);
|
|
2725
2789
|
}
|
|
2726
2790
|
console.log();
|
|
2727
2791
|
console.log(chalk7.dim(" " + "\u2500".repeat(46)));
|
|
2728
2792
|
if (options.fix && fixes > 0) {
|
|
2729
2793
|
console.log(
|
|
2730
|
-
` ${t("doctor_result")}: ${warnings}
|
|
2794
|
+
` ${t("doctor_result")}: ${t("doctor_result_with_fix").replace("{warnings}", String(warnings)).replace("{errors}", String(errors)).replace("{fixes}", String(fixes))}`
|
|
2731
2795
|
);
|
|
2732
2796
|
} else {
|
|
2733
2797
|
console.log(
|
|
2734
|
-
` ${t("doctor_result")}: ${warnings}
|
|
2798
|
+
` ${t("doctor_result")}: ${t("doctor_result_without_fix").replace("{warnings}", String(warnings)).replace("{errors}", String(errors))}`
|
|
2735
2799
|
);
|
|
2736
2800
|
}
|
|
2737
2801
|
console.log();
|
|
@@ -2826,9 +2890,9 @@ async function installCommand(names, options) {
|
|
|
2826
2890
|
try {
|
|
2827
2891
|
const scanRepoManager = createRepositoryManager();
|
|
2828
2892
|
await scanRepoManager.ensureRepoAndScan();
|
|
2829
|
-
scanSpinner2.succeed("
|
|
2893
|
+
scanSpinner2.succeed(t("loading_skills_list_complete"));
|
|
2830
2894
|
} catch {
|
|
2831
|
-
scanSpinner2.warn("
|
|
2895
|
+
scanSpinner2.warn(t("loading_skills_list_failed"));
|
|
2832
2896
|
}
|
|
2833
2897
|
let tool2;
|
|
2834
2898
|
if (options.tool) {
|
|
@@ -2860,8 +2924,8 @@ async function installCommand(names, options) {
|
|
|
2860
2924
|
const spinner = createSpinner(t("loading_plugin_data"));
|
|
2861
2925
|
spinner.start();
|
|
2862
2926
|
const repoPath = await repoManager.ensureRepo();
|
|
2863
|
-
spinner.succeed("
|
|
2864
|
-
logger.info(`${t("skill_install_progress")} ${chalk9.bold(names.length)}
|
|
2927
|
+
spinner.succeed(t("loading_plugin_data_complete"));
|
|
2928
|
+
logger.info(`${t("skill_install_progress")} ${t("skill_count_format").replace("{count}", chalk9.bold(String(names.length)))}...`);
|
|
2865
2929
|
const results = await installSkills(names, tool2, level2, repoPath);
|
|
2866
2930
|
let successCount = 0;
|
|
2867
2931
|
let failCount = 0;
|
|
@@ -2879,7 +2943,7 @@ async function installCommand(names, options) {
|
|
|
2879
2943
|
}
|
|
2880
2944
|
const configRoot = getConfigRoot(tool2, level2);
|
|
2881
2945
|
logger.blank();
|
|
2882
|
-
logger.success(`${t("skill_install_done")}: ${chalk9.green(
|
|
2946
|
+
logger.success(`${t("skill_install_done")}: ${chalk9.green(t("result_success_format").replace("{count}", String(successCount)))}, ${failCount > 0 ? chalk9.red(t("result_failed_format").replace("{count}", String(failCount))) : chalk9.dim(t("result_failed_format").replace("{count}", String(failCount)))}`);
|
|
2883
2947
|
logger.blank();
|
|
2884
2948
|
logger.info(`${t("install_to")}: ${chalk9.cyan(configRoot + "/skills/")}`);
|
|
2885
2949
|
logger.info(`${t("start_to_use").replace("{tool}", chalk9.green(tool2))}`);
|
|
@@ -2894,9 +2958,9 @@ async function installCommand(names, options) {
|
|
|
2894
2958
|
try {
|
|
2895
2959
|
const scanRepoManager = createRepositoryManager();
|
|
2896
2960
|
await scanRepoManager.ensureRepoAndScan();
|
|
2897
|
-
scanSpinner.succeed("
|
|
2961
|
+
scanSpinner.succeed(t("loading_skills_list_complete"));
|
|
2898
2962
|
} catch {
|
|
2899
|
-
scanSpinner.warn("
|
|
2963
|
+
scanSpinner.warn(t("loading_skills_list_failed"));
|
|
2900
2964
|
}
|
|
2901
2965
|
const plugins = [];
|
|
2902
2966
|
const skills = [];
|
|
@@ -2913,11 +2977,11 @@ async function installCommand(names, options) {
|
|
|
2913
2977
|
}
|
|
2914
2978
|
logger.error(`${t("error_plugin_not_found")}: ${name}`);
|
|
2915
2979
|
const allPlugins = getAllPlugins();
|
|
2916
|
-
logger.info("
|
|
2980
|
+
logger.info(t("available_plugins") + ":");
|
|
2917
2981
|
for (const p of allPlugins) {
|
|
2918
2982
|
logger.step(` ${p.id} (${p.aliases.join(", ")})`);
|
|
2919
2983
|
}
|
|
2920
|
-
logger.info(
|
|
2984
|
+
logger.info(`${t("available_skills")}: ${chalk9.cyan("install-helper install --list")}`);
|
|
2921
2985
|
return;
|
|
2922
2986
|
}
|
|
2923
2987
|
let tool;
|
|
@@ -2989,7 +3053,7 @@ async function installCommand(names, options) {
|
|
|
2989
3053
|
spinner.start();
|
|
2990
3054
|
const repoPath = await repoManager.ensureRepo();
|
|
2991
3055
|
spinner.succeed(t("loading_plugin_data_complete"));
|
|
2992
|
-
logger.info(`${t("skill_install_progress")} ${chalk9.bold(skills.length)}
|
|
3056
|
+
logger.info(`${t("skill_install_progress")} ${t("skill_count_format").replace("{count}", chalk9.bold(String(skills.length)))}...`);
|
|
2993
3057
|
const results = await installSkills(skills, tool, level, repoPath);
|
|
2994
3058
|
let successCount = 0;
|
|
2995
3059
|
let failCount = 0;
|
|
@@ -3006,7 +3070,7 @@ async function installCommand(names, options) {
|
|
|
3006
3070
|
}
|
|
3007
3071
|
}
|
|
3008
3072
|
logger.blank();
|
|
3009
|
-
logger.success(`${t("skill_install_done")}: ${chalk9.green(
|
|
3073
|
+
logger.success(`${t("skill_install_done")}: ${chalk9.green(t("result_success_format").replace("{count}", String(successCount)))}, ${failCount > 0 ? chalk9.red(t("result_failed_format").replace("{count}", String(failCount))) : chalk9.dim(t("result_failed_format").replace("{count}", String(failCount)))}`);
|
|
3010
3074
|
logger.blank();
|
|
3011
3075
|
logger.info(`${t("install_to")}: ${chalk9.cyan(getConfigRoot(tool, level) + "/skills/")}`);
|
|
3012
3076
|
logger.info(`${t("start_to_use").replace("{tool}", chalk9.green(tool))}`);
|
|
@@ -3078,7 +3142,7 @@ async function uninstallCommand(names, options) {
|
|
|
3078
3142
|
if (existsSync13(filePath) || isSymlink3(filePath)) {
|
|
3079
3143
|
unlinkSync5(filePath);
|
|
3080
3144
|
const name = filePath.split("/").pop() || filePath;
|
|
3081
|
-
logger.step(`
|
|
3145
|
+
logger.step(` ${t("uninstall_remove_label")}: ${name}`);
|
|
3082
3146
|
removedFiles++;
|
|
3083
3147
|
}
|
|
3084
3148
|
} catch {
|
|
@@ -3096,7 +3160,7 @@ async function uninstallCommand(names, options) {
|
|
|
3096
3160
|
if (entries.length === 0) {
|
|
3097
3161
|
rmdirSync2(dirPath);
|
|
3098
3162
|
const name = dirPath.split("/").pop() || dirPath;
|
|
3099
|
-
logger.step(`
|
|
3163
|
+
logger.step(` ${t("uninstall_clean_empty_dir")}: ${name}/`);
|
|
3100
3164
|
removedDirs++;
|
|
3101
3165
|
}
|
|
3102
3166
|
}
|
|
@@ -3124,13 +3188,13 @@ async function uninstallCommand(names, options) {
|
|
|
3124
3188
|
}
|
|
3125
3189
|
const totalRemoved = removedFiles + removedDirs;
|
|
3126
3190
|
if (totalRemoved > 0) {
|
|
3127
|
-
logger.success(`${t("uninstall_removed")} ${plugin.displayName}\uFF08
|
|
3191
|
+
logger.success(`${t("uninstall_removed")} ${plugin.displayName}\uFF08${t("uninstall_remove_file_format").replace("{count}", String(removedFiles))}\uFF0C${t("uninstall_remove_dir_format").replace("{count}", String(removedDirs))}\uFF09`);
|
|
3128
3192
|
} else {
|
|
3129
3193
|
logger.warn(`${plugin.displayName}${t("uninstall_files_gone")}`);
|
|
3130
3194
|
}
|
|
3131
3195
|
}
|
|
3132
3196
|
if (skills.length > 0) {
|
|
3133
|
-
logger.info(`${t("uninstall_skills_in_progress")} ${skills.length}
|
|
3197
|
+
logger.info(`${t("uninstall_skills_in_progress")} ${t("skill_count_format").replace("{count}", String(skills.length))}...`);
|
|
3134
3198
|
const results = await uninstallSkills(skills, tool, level);
|
|
3135
3199
|
let successCount = 0;
|
|
3136
3200
|
let failCount = 0;
|
|
@@ -3142,7 +3206,7 @@ async function uninstallCommand(names, options) {
|
|
|
3142
3206
|
}
|
|
3143
3207
|
}
|
|
3144
3208
|
logger.blank();
|
|
3145
|
-
logger.success(`${t("skill_uninstall_done")}: ${chalk10.green(
|
|
3209
|
+
logger.success(`${t("skill_uninstall_done")}: ${chalk10.green(t("result_success_format").replace("{count}", String(successCount)))}, ${failCount > 0 ? chalk10.red(t("result_failed_format").replace("{count}", String(failCount))) : chalk10.dim(t("result_failed_format").replace("{count}", String(failCount)))}`);
|
|
3146
3210
|
logger.blank();
|
|
3147
3211
|
}
|
|
3148
3212
|
}
|
|
@@ -3173,7 +3237,7 @@ async function updateCommand(pluginNames, options) {
|
|
|
3173
3237
|
pluginsToUpdate = manifests.map((m) => m.team);
|
|
3174
3238
|
if (pluginsToUpdate.length === 0) {
|
|
3175
3239
|
logger.info(t("update_no_plugins"));
|
|
3176
|
-
logger.info(
|
|
3240
|
+
logger.info(t("update_install_hint").replace("{cmd}", chalk11.cyan("install-helper install <plugin>")));
|
|
3177
3241
|
return;
|
|
3178
3242
|
}
|
|
3179
3243
|
} else {
|
|
@@ -3324,7 +3388,7 @@ function createCLI() {
|
|
|
3324
3388
|
setLanguage(config.language);
|
|
3325
3389
|
}
|
|
3326
3390
|
const program2 = new Command();
|
|
3327
|
-
program2.name("install-helper").description("CANNBot Install Helper - Interactive installer for CANN operator development skills").version("0.0.2-beta.
|
|
3391
|
+
program2.name("install-helper").description("CANNBot Install Helper - Interactive installer for CANN operator development skills").version("0.0.2-beta.15");
|
|
3328
3392
|
program2.command("init", { isDefault: false }).description("Run interactive installation wizard").action(async () => {
|
|
3329
3393
|
await initCommand();
|
|
3330
3394
|
});
|
|
@@ -3361,7 +3425,7 @@ function createCLI() {
|
|
|
3361
3425
|
// src/index.ts
|
|
3362
3426
|
process.on("uncaughtException", (error) => {
|
|
3363
3427
|
if (error.name === "ExitPromptError") {
|
|
3364
|
-
console.log("\n
|
|
3428
|
+
console.log("\n" + t("init_cancelled"));
|
|
3365
3429
|
process.exit(0);
|
|
3366
3430
|
}
|
|
3367
3431
|
throw error;
|