aico-cli 0.0.2 → 0.0.4

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/cli.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
4
- import { J as readZcfConfig, K as inquirer, N as addNumbersToChoices, O as updateZcfConfig, P as getTranslation, h as SUPPORTED_LANGS, j as LANG_LABELS, k as AI_OUTPUT_LANGUAGES, Q as version, q as backupExistingConfig, r as copyConfigFiles, x as applyAiLanguageDirective, R as configureAiPersonality, C as CLAUDE_DIR, T as readJsonConfig, H as addCompletedOnboarding, S as SETTINGS_FILE, U as writeJsonConfig, o as openSettingsJson, b as importRecommendedPermissions, a as importRecommendedEnv, V as isWindows, z as readMcpConfig, G as fixWindowsMcpConfig, B as writeMcpConfig, W as selectMcpServices, D as backupMcpConfig, M as MCP_SERVICES, F as buildMcpServerConfig, E as mergeMcpServers, X as displayBanner, I as I18N, Y as selectAndInstallWorkflows, Z as handleExitPromptError, _ as handleGeneralError, $ as displayBannerWithInfo, a0 as readZcfConfigAsync, i as init, a1 as executeWithEscapeSupport, a2 as EscapeKeyPressed } from './shared/aico-cli.De5MHWWb.mjs';
4
+ import { J as readZcfConfig, K as inquirer, N as addNumbersToChoices, O as updateZcfConfig, P as getTranslation, h as SUPPORTED_LANGS, j as LANG_LABELS, k as AI_OUTPUT_LANGUAGES, Q as version, q as backupExistingConfig, r as copyConfigFiles, x as applyAiLanguageDirective, R as configureAiPersonality, C as CLAUDE_DIR, T as readJsonConfig, H as addCompletedOnboarding, S as SETTINGS_FILE, U as writeJsonConfig, o as openSettingsJson, b as importRecommendedPermissions, a as importRecommendedEnv, V as isWindows, z as readMcpConfig, G as fixWindowsMcpConfig, B as writeMcpConfig, W as selectMcpServices, D as backupMcpConfig, M as MCP_SERVICES, F as buildMcpServerConfig, X as EscapeKeyPressed, E as mergeMcpServers, Y as displayBanner, I as I18N, Z as selectAndInstallWorkflows, _ as handleExitPromptError, $ as handleGeneralError, a0 as displayBannerWithInfo, a1 as readZcfConfigAsync, i as init, a2 as executeWithEscapeSupport } from './shared/aico-cli.BxrCfzlp.mjs';
5
5
  import inquirer$1 from 'inquirer';
6
6
  import { existsSync, copyFileSync, mkdirSync } from 'node:fs';
7
- import { exec } from 'node:child_process';
7
+ import { exec, spawn } from 'node:child_process';
8
8
  import { promisify } from 'node:util';
9
9
  import dayjs from 'dayjs';
10
10
  import { homedir } from 'node:os';
@@ -591,39 +591,145 @@ async function configureMcpFeature(scriptLang) {
591
591
  }
592
592
  }
593
593
  const selectedServices = await selectMcpServices(scriptLang);
594
- if (!selectedServices) {
594
+ if (selectedServices === void 0) {
595
+ return;
596
+ }
597
+ if (selectedServices.length === 0) {
598
+ console.log(
599
+ ansis.yellow(i18n.mcp.noServicesSelected || "\u6CA1\u6709\u9009\u62E9\u4EFB\u4F55\u670D\u52A1")
600
+ );
595
601
  return;
596
602
  }
597
603
  if (selectedServices.length > 0) {
598
604
  const mcpBackupPath = backupMcpConfig();
599
605
  if (mcpBackupPath) {
600
- console.log(ansis.gray(`\u2714 ${i18n.mcp.mcpBackupSuccess}: ${mcpBackupPath}`));
606
+ console.log(
607
+ ansis.gray(`\u2714 ${i18n.mcp.mcpBackupSuccess}: ${mcpBackupPath}`)
608
+ );
601
609
  }
602
610
  const newServers = {};
611
+ const installResults = [];
603
612
  for (const serviceId of selectedServices) {
604
613
  const service = MCP_SERVICES.find((s) => s.id === serviceId);
605
- if (!service) continue;
606
- let config = service.config;
607
- if (service.requiresApiKey) {
608
- const { apiKey } = await inquirer.prompt({
609
- type: "input",
610
- name: "apiKey",
611
- message: service.apiKeyPrompt[scriptLang],
612
- validate: (value) => !!value || i18n.api.keyRequired
614
+ if (!service) {
615
+ installResults.push({
616
+ serviceId,
617
+ serviceName: serviceId,
618
+ success: false,
619
+ reason: i18n.mcp.serviceNotFound || "\u670D\u52A1\u672A\u627E\u5230"
613
620
  });
614
- if (apiKey) {
615
- config = buildMcpServerConfig(service.config, apiKey, service.apiKeyPlaceholder, service.apiKeyEnvVar);
621
+ continue;
622
+ }
623
+ try {
624
+ let config = service.config;
625
+ if (service.requiresApiKey) {
626
+ console.log(ansis.cyan(`
627
+ \u914D\u7F6E ${service.name[scriptLang]}...`));
628
+ const { apiKey } = await inquirer.prompt({
629
+ type: "input",
630
+ name: "apiKey",
631
+ message: service.apiKeyPrompt[scriptLang],
632
+ validate: (value) => !!value || i18n.api.keyRequired
633
+ });
634
+ if (apiKey) {
635
+ config = buildMcpServerConfig(
636
+ service.config,
637
+ apiKey,
638
+ service.apiKeyPlaceholder,
639
+ service.apiKeyEnvVar
640
+ );
641
+ newServers[service.id] = config;
642
+ installResults.push({
643
+ serviceId: service.id,
644
+ serviceName: service.name[scriptLang],
645
+ success: true
646
+ });
647
+ console.log(ansis.green(`\u2714 ${service.name[scriptLang]} \u914D\u7F6E\u6210\u529F`));
648
+ } else {
649
+ installResults.push({
650
+ serviceId: service.id,
651
+ serviceName: service.name[scriptLang],
652
+ success: false,
653
+ reason: i18n.mcp.apiKeyRequired || "API Key \u5FC5\u586B"
654
+ });
655
+ console.log(
656
+ ansis.yellow(
657
+ `\u26A0 ${service.name[scriptLang]} \u914D\u7F6E\u8DF3\u8FC7\uFF08\u672A\u63D0\u4F9B API Key\uFF09`
658
+ )
659
+ );
660
+ }
616
661
  } else {
617
- continue;
662
+ newServers[service.id] = config;
663
+ installResults.push({
664
+ serviceId: service.id,
665
+ serviceName: service.name[scriptLang],
666
+ success: true
667
+ });
668
+ console.log(ansis.green(`\u2714 ${service.name[scriptLang]} \u914D\u7F6E\u6210\u529F`));
669
+ }
670
+ } catch (error) {
671
+ if (error instanceof EscapeKeyPressed) {
672
+ installResults.push({
673
+ serviceId: service.id,
674
+ serviceName: service.name[scriptLang],
675
+ success: false,
676
+ reason: i18n.common.cancelled || "\u7528\u6237\u53D6\u6D88"
677
+ });
678
+ console.log(ansis.yellow(`\u26A0 ${service.name[scriptLang]} \u914D\u7F6E\u5DF2\u53D6\u6D88`));
679
+ } else {
680
+ installResults.push({
681
+ serviceId: service.id,
682
+ serviceName: service.name[scriptLang],
683
+ success: false,
684
+ reason: error.message || i18n.common.error || "\u914D\u7F6E\u5931\u8D25"
685
+ });
686
+ console.log(
687
+ ansis.red(
688
+ `\u2717 ${service.name[scriptLang]} \u914D\u7F6E\u5931\u8D25: ${error.message}`
689
+ )
690
+ );
618
691
  }
619
692
  }
620
- newServers[service.id] = config;
621
693
  }
622
- const existingConfig = readMcpConfig();
623
- let mergedConfig = mergeMcpServers(existingConfig, newServers);
624
- mergedConfig = fixWindowsMcpConfig(mergedConfig);
625
- writeMcpConfig(mergedConfig);
626
- console.log(ansis.green(`\u2714 ${i18n.mcp.mcpConfigSuccess}`));
694
+ if (Object.keys(newServers).length > 0) {
695
+ const existingConfig = readMcpConfig();
696
+ let mergedConfig = mergeMcpServers(existingConfig, newServers);
697
+ mergedConfig = fixWindowsMcpConfig(mergedConfig);
698
+ writeMcpConfig(mergedConfig);
699
+ }
700
+ console.log("\n" + ansis.dim("\u2500".repeat(50)));
701
+ console.log(ansis.bold(i18n.mcp.installationSummary || "MCP \u670D\u52A1\u5B89\u88C5\u7ED3\u679C"));
702
+ console.log(ansis.dim("\u2500".repeat(50)));
703
+ const successfulServices = installResults.filter((r) => r.success);
704
+ const failedServices = installResults.filter((r) => !r.success);
705
+ if (successfulServices.length > 0) {
706
+ console.log(
707
+ ansis.green(`\u2714 \u6210\u529F\u5B89\u88C5 ${successfulServices.length} \u4E2A\u670D\u52A1:`)
708
+ );
709
+ successfulServices.forEach((service) => {
710
+ console.log(ansis.green(` \u2022 ${service.serviceName}`));
711
+ });
712
+ }
713
+ if (failedServices.length > 0) {
714
+ console.log(ansis.yellow(`
715
+ \u26A0 ${failedServices.length} \u4E2A\u670D\u52A1\u5B89\u88C5\u5931\u8D25:`));
716
+ failedServices.forEach((service) => {
717
+ console.log(
718
+ ansis.yellow(` \u2022 ${service.serviceName}: ${service.reason}`)
719
+ );
720
+ });
721
+ }
722
+ if (successfulServices.length > 0) {
723
+ console.log(ansis.green(`
724
+ \u2714 ${i18n.mcp.mcpConfigSuccess}`));
725
+ } else if (failedServices.length === selectedServices.length) {
726
+ console.log(
727
+ ansis.yellow(
728
+ `
729
+ \u26A0 ${i18n.mcp.noServicesInstalled || "\u6CA1\u6709\u670D\u52A1\u88AB\u6210\u529F\u5B89\u88C5"}`
730
+ )
731
+ );
732
+ }
627
733
  }
628
734
  }
629
735
  async function configureAiMemoryFeature(scriptLang) {
@@ -648,10 +754,18 @@ async function configureAiMemoryFeature(scriptLang) {
648
754
  }
649
755
  if (option === "language") {
650
756
  const zcfConfig = readZcfConfig();
651
- const aiOutputLang = await resolveAiOutputLanguage(scriptLang, void 0, zcfConfig);
757
+ const aiOutputLang = await resolveAiOutputLanguage(
758
+ scriptLang,
759
+ void 0,
760
+ zcfConfig
761
+ );
652
762
  applyAiLanguageDirective(aiOutputLang);
653
763
  updateZcfConfig({ aiOutputLang });
654
- console.log(ansis.green(`\u2714 ${i18n.configuration.aiLanguageConfigured || "AI output language configured"}`));
764
+ console.log(
765
+ ansis.green(
766
+ `\u2714 ${i18n.configuration.aiLanguageConfigured || "AI output language configured"}`
767
+ )
768
+ );
655
769
  } else {
656
770
  await configureAiPersonality(scriptLang);
657
771
  }
@@ -664,15 +778,21 @@ async function configureEnvPermissionFeature(scriptLang) {
664
778
  message: i18n.configuration?.selectEnvPermissionOption || "Select option",
665
779
  choices: addNumbersToChoices([
666
780
  {
667
- name: `${i18n.configuration?.importRecommendedEnv || "Import environment"} ${ansis.gray("- " + (i18n.configuration?.importRecommendedEnvDesc || "Import env settings"))}`,
781
+ name: `${i18n.configuration?.importRecommendedEnv || "Import environment"} ${ansis.gray(
782
+ "- " + (i18n.configuration?.importRecommendedEnvDesc || "Import env settings")
783
+ )}`,
668
784
  value: "env"
669
785
  },
670
786
  {
671
- name: `${i18n.configuration?.importRecommendedPermissions || "Import permissions"} ${ansis.gray("- " + (i18n.configuration?.importRecommendedPermissionsDesc || "Import permission settings"))}`,
787
+ name: `${i18n.configuration?.importRecommendedPermissions || "Import permissions"} ${ansis.gray(
788
+ "- " + (i18n.configuration?.importRecommendedPermissionsDesc || "Import permission settings")
789
+ )}`,
672
790
  value: "permissions"
673
791
  },
674
792
  {
675
- name: `${i18n.configuration?.openSettingsJson || "Open settings"} ${ansis.gray("- " + (i18n.configuration?.openSettingsJsonDesc || "View settings file"))}`,
793
+ name: `${i18n.configuration?.openSettingsJson || "Open settings"} ${ansis.gray(
794
+ "- " + (i18n.configuration?.openSettingsJsonDesc || "View settings file")
795
+ )}`,
676
796
  value: "open"
677
797
  }
678
798
  ])
@@ -689,10 +809,18 @@ async function configureEnvPermissionFeature(scriptLang) {
689
809
  break;
690
810
  case "permissions":
691
811
  await importRecommendedPermissions();
692
- console.log(ansis.green(`\u2705 ${i18n.configuration?.permissionsImportSuccess || "Permissions imported"}`));
812
+ console.log(
813
+ ansis.green(
814
+ `\u2705 ${i18n.configuration?.permissionsImportSuccess || "Permissions imported"}`
815
+ )
816
+ );
693
817
  break;
694
818
  case "open":
695
- console.log(ansis.cyan(i18n.configuration?.openingSettingsJson || "Opening settings.json..."));
819
+ console.log(
820
+ ansis.cyan(
821
+ i18n.configuration?.openingSettingsJson || "Opening settings.json..."
822
+ )
823
+ );
696
824
  await openSettingsJson();
697
825
  break;
698
826
  }
@@ -701,6 +829,69 @@ async function configureEnvPermissionFeature(scriptLang) {
701
829
  }
702
830
  }
703
831
 
832
+ async function tryStartClaude(command, args, options) {
833
+ return new Promise((resolve, reject) => {
834
+ const child = spawn(command, args, options);
835
+ child.on("close", (code) => {
836
+ if (code === 0) {
837
+ console.log(ansis.green("\u2705 \u4EE3\u7801\u7F16\u8F91\u5668\u5DF2\u9000\u51FA"));
838
+ resolve();
839
+ } else {
840
+ reject(new Error(`Claude \u8FDB\u7A0B\u9000\u51FA\uFF0C\u9000\u51FA\u7801: ${code}`));
841
+ }
842
+ });
843
+ child.on("error", (error) => {
844
+ reject(error);
845
+ });
846
+ });
847
+ }
848
+ async function startClaudeCodeEditor(_lang) {
849
+ try {
850
+ console.log(ansis.cyan("\u{1F680} \u6B63\u5728\u542F\u52A8\u4EE3\u7801\u7F16\u8F91\u5668..."));
851
+ const isWindows = process.platform === "win32";
852
+ const spawnOptions = {
853
+ stdio: "inherit",
854
+ // 继承父进程的 stdio,这样可以在当前终端中交互
855
+ cwd: process.cwd(),
856
+ // 使用当前工作目录
857
+ shell: isWindows
858
+ // Windows 上使用 shell 来解析命令
859
+ };
860
+ try {
861
+ const command = isWindows ? "claude.cmd" : "claude";
862
+ await tryStartClaude(command, ["--dangerously-skip-permissions"], spawnOptions);
863
+ return;
864
+ } catch (firstError) {
865
+ if (firstError.code === "ENOENT") {
866
+ console.log(ansis.yellow("\u26A0\uFE0F \u76F4\u63A5\u8C03\u7528 claude \u5931\u8D25\uFF0C\u5C1D\u8BD5\u4F7F\u7528 npx..."));
867
+ try {
868
+ await tryStartClaude("npx", ["@anthropic-ai/claude-code", "--dangerously-skip-permissions"], spawnOptions);
869
+ return;
870
+ } catch (secondError) {
871
+ throw firstError;
872
+ }
873
+ } else {
874
+ throw firstError;
875
+ }
876
+ }
877
+ } catch (error) {
878
+ console.error(ansis.red("\u274C \u542F\u52A8\u4EE3\u7801\u7F16\u8F91\u5668\u5931\u8D25:"));
879
+ if (error.code === "ENOENT" || error.message?.includes("command not found")) {
880
+ console.error(ansis.yellow("\u{1F4A1} \u8BF7\u786E\u4FDD\u5DF2\u5B89\u88C5 Claude Code:"));
881
+ console.error(ansis.gray(" npm install -g @anthropic-ai/claude-code"));
882
+ if (process.platform === "win32") {
883
+ console.error(ansis.yellow("\u{1F4A1} Windows \u7528\u6237\u989D\u5916\u63D0\u793A:"));
884
+ console.error(ansis.gray(" 1. \u91CD\u542F\u547D\u4EE4\u884C\u7A97\u53E3\u4EE5\u5237\u65B0 PATH \u73AF\u5883\u53D8\u91CF"));
885
+ console.error(ansis.gray(" 2. \u786E\u8BA4 npm \u5168\u5C40\u5B89\u88C5\u8DEF\u5F84\u5728 PATH \u4E2D"));
886
+ console.error(ansis.gray(" 3. \u5C1D\u8BD5\u4F7F\u7528 npx @anthropic-ai/claude-code --dangerously-skip-permissions"));
887
+ }
888
+ } else {
889
+ console.error(ansis.gray(` \u9519\u8BEF\u4FE1\u606F: ${error.message || error}`));
890
+ }
891
+ throw error;
892
+ }
893
+ }
894
+
704
895
  async function update(options = {}) {
705
896
  try {
706
897
  if (!options.skipBanner) {
@@ -758,11 +949,17 @@ async function showMainMenu() {
758
949
  processor: () => configureAiMemoryFeature(scriptLang),
759
950
  section: "\u57FA\u7840\u914D\u7F6E"
760
951
  },
761
- "6": {
952
+ "5": {
762
953
  key: "5",
763
954
  labelKey: "configureEnvPermission",
764
955
  processor: () => configureEnvPermissionFeature(scriptLang),
765
956
  section: "\u57FA\u7840\u914D\u7F6E"
957
+ },
958
+ "6": {
959
+ key: "6",
960
+ labelKey: "startCodeEditor",
961
+ processor: () => startClaudeCodeEditor(scriptLang),
962
+ section: "\u57FA\u7840\u914D\u7F6E"
766
963
  }
767
964
  };
768
965
  let exitMenu = false;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AICO_CONFIG_FILE, k as AI_OUTPUT_LANGUAGES, C as CLAUDE_DIR, e as CLAUDE_MD_FILE, f as ClAUDE_CONFIG_FILE, I as I18N, j as LANG_LABELS, L as LEGACY_AICO_CONFIG_FILE, M as MCP_SERVICES, S as SETTINGS_FILE, h as SUPPORTED_LANGS, H as addCompletedOnboarding, x as applyAiLanguageDirective, q as backupExistingConfig, D as backupMcpConfig, F as buildMcpServerConfig, d as cleanupPermissions, c as commandExists, s as configureApi, r as copyConfigFiles, p as ensureClaudeDir, G as fixWindowsMcpConfig, w as getExistingApiConfig, y as getMcpConfigPath, g as getPlatform, a as importRecommendedEnv, b as importRecommendedPermissions, i as init, n as installClaudeCode, l as isClaudeCodeInstalled, m as mergeAndCleanPermissions, t as mergeConfigs, E as mergeMcpServers, v as mergeSettingsFile, o as openSettingsJson, z as readMcpConfig, u as updateDefaultModel, B as writeMcpConfig } from './shared/aico-cli.De5MHWWb.mjs';
1
+ export { A as AICO_CONFIG_FILE, k as AI_OUTPUT_LANGUAGES, C as CLAUDE_DIR, e as CLAUDE_MD_FILE, f as ClAUDE_CONFIG_FILE, I as I18N, j as LANG_LABELS, L as LEGACY_AICO_CONFIG_FILE, M as MCP_SERVICES, S as SETTINGS_FILE, h as SUPPORTED_LANGS, H as addCompletedOnboarding, x as applyAiLanguageDirective, q as backupExistingConfig, D as backupMcpConfig, F as buildMcpServerConfig, d as cleanupPermissions, c as commandExists, s as configureApi, r as copyConfigFiles, p as ensureClaudeDir, G as fixWindowsMcpConfig, w as getExistingApiConfig, y as getMcpConfigPath, g as getPlatform, a as importRecommendedEnv, b as importRecommendedPermissions, i as init, n as installClaudeCode, l as isClaudeCodeInstalled, m as mergeAndCleanPermissions, t as mergeConfigs, E as mergeMcpServers, v as mergeSettingsFile, o as openSettingsJson, z as readMcpConfig, u as updateDefaultModel, B as writeMcpConfig } from './shared/aico-cli.BxrCfzlp.mjs';
2
2
  import 'inquirer';
3
3
  import 'ansis';
4
4
  import 'node:fs';
@@ -80,7 +80,7 @@ const inquirer = {
80
80
  createPromptModule: inquirer$1.createPromptModule
81
81
  };
82
82
 
83
- const version = "0.0.2";
83
+ const version = "0.0.4";
84
84
 
85
85
  const common$1 = {
86
86
  // Basic
@@ -241,13 +241,18 @@ const mcp$1 = {
241
241
  mcpServiceInstalled: "\u5DF2\u9009\u62E9\u7684 MCP \u670D\u52A1",
242
242
  enterExaApiKey: "\u8BF7\u8F93\u5165 Exa API Key\uFF08\u53EF\u4ECE https://dashboard.exa.ai/api-keys \u83B7\u53D6\uFF09",
243
243
  skipMcp: "\u8DF3\u8FC7 MCP \u914D\u7F6E",
244
- mcpConfigSuccess: "MCP \u670D\u52A1\u5DF2\u914D\u7F6E",
244
+ mcpConfigSuccess: "MCP \u670D\u52A1\u914D\u7F6E\u5B8C\u6210",
245
245
  mcpBackupSuccess: "\u5DF2\u5907\u4EFD\u539F\u6709 MCP \u914D\u7F6E",
246
246
  fixWindowsMcp: "\u4FEE\u590D Windows MCP \u914D\u7F6E",
247
247
  fixWindowsMcpDesc: "\u4FEE\u590D Windows \u5E73\u53F0 MCP \u547D\u4EE4\u914D\u7F6E\u95EE\u9898",
248
248
  windowsMcpFixed: "Windows MCP \u914D\u7F6E\u5DF2\u4FEE\u590D",
249
249
  configureMcpServices: "\u914D\u7F6E MCP \u670D\u52A1",
250
- selectMcpOption: "\u9009\u62E9 MCP \u914D\u7F6E\u9009\u9879"
250
+ selectMcpOption: "\u9009\u62E9 MCP \u914D\u7F6E\u9009\u9879",
251
+ installationSummary: "MCP \u670D\u52A1\u5B89\u88C5\u7ED3\u679C",
252
+ serviceNotFound: "\u670D\u52A1\u672A\u627E\u5230",
253
+ apiKeyRequired: "API Key \u5FC5\u586B",
254
+ noServicesInstalled: "\u6CA1\u6709\u670D\u52A1\u88AB\u6210\u529F\u5B89\u88C5",
255
+ noServicesSelected: "\u6CA1\u6709\u9009\u62E9\u4EFB\u4F55\u670D\u52A1"
251
256
  };
252
257
 
253
258
  const menu$1 = {
@@ -264,6 +269,7 @@ const menu$1 = {
264
269
  configureModel: "\u914D\u7F6E\u9ED8\u8BA4\u6A21\u578B",
265
270
  configureAiMemory: "\u914D\u7F6E Claude \u5168\u5C40\u8BB0\u5FC6",
266
271
  configureEnvPermission: "\u5BFC\u5165\u63A8\u8350\u73AF\u5883\u53D8\u91CF\u548C\u6743\u9650\u914D\u7F6E",
272
+ startCodeEditor: "\u542F\u52A8\u4EE3\u7801\u7F16\u8F91",
267
273
  configureCcr: "\u914D\u7F6E\u6A21\u578B\u4EE3\u7406 (CCR)",
268
274
  ccrManagement: "CCR",
269
275
  ccusage: "ccusage",
@@ -281,6 +287,7 @@ const menu$1 = {
281
287
  configureModel: "\u8BBE\u7F6E\u9ED8\u8BA4\u6A21\u578B\uFF08opus/sonnet\uFF09",
282
288
  configureAiMemory: "\u914D\u7F6E AI \u8F93\u51FA\u8BED\u8A00\u548C\u89D2\u8272\u98CE\u683C",
283
289
  configureEnvPermission: "\u5BFC\u5165\u9690\u79C1\u4FDD\u62A4\u73AF\u5883\u53D8\u91CF\u548C\u7CFB\u7EDF\u6743\u9650\u914D\u7F6E",
290
+ startCodeEditor: "\u542F\u52A8\u4EE3\u7801\u7F16\u8F91\u5668\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1",
284
291
  configureCcr: "\u914D\u7F6E Claude Code Router \u4EE5\u4F7F\u7528\u591A\u4E2A AI \u6A21\u578B",
285
292
  ccrManagement: "\u914D\u7F6E Claude Code Router \u4EE5\u4F7F\u7528\u591A\u4E2A AI \u6A21\u578B",
286
293
  ccusage: "Claude Code \u7528\u91CF\u5206\u6790",
@@ -678,13 +685,18 @@ const mcp = {
678
685
  mcpServiceInstalled: "Selected MCP services",
679
686
  enterExaApiKey: "Enter Exa API Key (get from https://dashboard.exa.ai/api-keys)",
680
687
  skipMcp: "Skip MCP configuration",
681
- mcpConfigSuccess: "MCP services configured",
688
+ mcpConfigSuccess: "MCP services configuration completed",
682
689
  mcpBackupSuccess: "Original MCP config backed up",
683
690
  fixWindowsMcp: "Fix Windows MCP Configuration",
684
691
  fixWindowsMcpDesc: "Fix Windows platform MCP command configuration issues",
685
692
  windowsMcpFixed: "Windows MCP configuration fixed",
686
693
  configureMcpServices: "Configure MCP Services",
687
- selectMcpOption: "Select MCP configuration option"
694
+ selectMcpOption: "Select MCP configuration option",
695
+ installationSummary: "MCP Services Installation Results",
696
+ serviceNotFound: "Service not found",
697
+ apiKeyRequired: "API Key required",
698
+ noServicesInstalled: "No services were successfully installed",
699
+ noServicesSelected: "No services selected"
688
700
  };
689
701
 
690
702
  const menu = {
@@ -701,6 +713,7 @@ const menu = {
701
713
  configureModel: "Configure default model",
702
714
  configureAiMemory: "Configure Claude global memory",
703
715
  configureEnvPermission: "Import recommended environment variables and permissions",
716
+ startCodeEditor: "Start Code Editor",
704
717
  configureCcr: "Configure Model Proxy (CCR)",
705
718
  ccrManagement: "CCR",
706
719
  ccusage: "ccusage",
@@ -718,6 +731,7 @@ const menu = {
718
731
  configureModel: "Set default model (opus/sonnet)",
719
732
  configureAiMemory: "Configure AI output language and personality",
720
733
  configureEnvPermission: "Import privacy protection environment variables and system permissions",
734
+ startCodeEditor: "Start Claude code editor (skip permission checks)",
721
735
  configureCcr: "Configure Claude Code Router to use multiple AI models",
722
736
  ccrManagement: "Configure Claude Code Router to use multiple AI models",
723
737
  ccusage: "Claude Code usage analysis",
@@ -2366,4 +2380,4 @@ async function openSettingsJson() {
2366
2380
  }
2367
2381
  }
2368
2382
 
2369
- export { displayBannerWithInfo as $, AICO_CONFIG_FILE as A, writeMcpConfig as B, CLAUDE_DIR as C, backupMcpConfig as D, mergeMcpServers as E, buildMcpServerConfig as F, fixWindowsMcpConfig as G, addCompletedOnboarding as H, I18N as I, readZcfConfig as J, inquirer as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, addNumbersToChoices as N, updateZcfConfig as O, getTranslation as P, version as Q, configureAiPersonality as R, SETTINGS_FILE as S, readJsonConfig as T, writeJsonConfig as U, isWindows as V, selectMcpServices as W, displayBanner as X, selectAndInstallWorkflows as Y, handleExitPromptError as Z, handleGeneralError as _, importRecommendedEnv as a, readZcfConfigAsync as a0, executeWithEscapeSupport as a1, EscapeKeyPressed as a2, importRecommendedPermissions as b, commandExists as c, cleanupPermissions as d, CLAUDE_MD_FILE as e, ClAUDE_CONFIG_FILE as f, getPlatform as g, SUPPORTED_LANGS as h, init as i, LANG_LABELS as j, AI_OUTPUT_LANGUAGES as k, isClaudeCodeInstalled as l, mergeAndCleanPermissions as m, installClaudeCode as n, openSettingsJson as o, ensureClaudeDir as p, backupExistingConfig as q, copyConfigFiles as r, configureApi as s, mergeConfigs as t, updateDefaultModel as u, mergeSettingsFile as v, getExistingApiConfig as w, applyAiLanguageDirective as x, getMcpConfigPath as y, readMcpConfig as z };
2383
+ export { handleGeneralError as $, AICO_CONFIG_FILE as A, writeMcpConfig as B, CLAUDE_DIR as C, backupMcpConfig as D, mergeMcpServers as E, buildMcpServerConfig as F, fixWindowsMcpConfig as G, addCompletedOnboarding as H, I18N as I, readZcfConfig as J, inquirer as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, addNumbersToChoices as N, updateZcfConfig as O, getTranslation as P, version as Q, configureAiPersonality as R, SETTINGS_FILE as S, readJsonConfig as T, writeJsonConfig as U, isWindows as V, selectMcpServices as W, EscapeKeyPressed as X, displayBanner as Y, selectAndInstallWorkflows as Z, handleExitPromptError as _, importRecommendedEnv as a, displayBannerWithInfo as a0, readZcfConfigAsync as a1, executeWithEscapeSupport as a2, importRecommendedPermissions as b, commandExists as c, cleanupPermissions as d, CLAUDE_MD_FILE as e, ClAUDE_CONFIG_FILE as f, getPlatform as g, SUPPORTED_LANGS as h, init as i, LANG_LABELS as j, AI_OUTPUT_LANGUAGES as k, isClaudeCodeInstalled as l, mergeAndCleanPermissions as m, installClaudeCode as n, openSettingsJson as o, ensureClaudeDir as p, backupExistingConfig as q, copyConfigFiles as r, configureApi as s, mergeConfigs as t, updateDefaultModel as u, mergeSettingsFile as v, getExistingApiConfig as w, applyAiLanguageDirective as x, getMcpConfigPath as y, readMcpConfig as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aico-cli",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "packageManager": "pnpm@9.15.9",
5
5
  "description": "AI CLI",
6
6
  "repository": {