ccjk 2.0.0 → 2.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,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
4
- import { S as STATUS, cj as i18n, r as runConfigWizard, ck as testApiConnection, h as displayCurrentStatus, cl as quickSetup, cm as format, g as COLORS, cn as getAllPresets, co as ensureI18nInitialized, cp as readCcrConfig, cq as isCcrInstalled, cr as installCcr, cs as configureCcrFeature, ct as promptBoolean, cu as handleExitPromptError, cv as handleGeneralError, cw as COMETIX_COMMAND_NAME, cx as COMETIX_COMMANDS, cy as installCometixLine, cz as addNumbersToChoices, cA as checkAndUpdateTools, aR as runCodexUpdate, cB as resolveCodeType$1, X as resolveCodeToolType$1, cC as readZcfConfig, U as isCodeToolType, P as DEFAULT_CODE_TOOL_TYPE, aV as switchCodexProvider, aH as listCodexProviders, aM as readCodexConfig, ay as switchToOfficialLogin, aW as switchToProvider, cD as readJsonConfig, cE as writeJsonConfig, cF as moveToTrash, N as ZCF_CONFIG_FILE, ab as displayBanner, cG as updateZcfConfig, cH as version, cI as resolveAiOutputLanguage, cJ as updatePromptOnly, cK as selectAndInstallWorkflows, cL as checkClaudeCodeVersionAndPrompt, ac as displayBannerWithInfo, Q as CODE_TOOL_BANNERS, aQ as runCodexUninstall, b0 as configureCodexMcp, az as configureCodexApi, aT as runCodexWorkflowImportWithLanguageSelection, aO as runCodexFullInit, i as init, cM as checkSuperpowersInstalled, cN as getSuperpowersSkills, cO as updateSuperpowers, cP as uninstallSuperpowers, cQ as installSuperpowers, cR as installSuperpowersViaGit, T as CODE_TOOL_INFO, b6 as getToolStatus, b7 as getAllToolsStatus, O as CODE_TOOL_TYPES, ae as boxify, b9 as installTool, cS as readZcfConfigAsync, cT as initI18n, bU as quickSync, bA as runDoctor, ch as checkAllVersions, ci as upgradeAll, bs as detectAllConfigs, bx as displayConfigScan, c9 as displayPermissions, cU as selectScriptLanguage, cV as changeLanguage, bT as runOnboarding } from './chunks/simple-config.mjs';
5
- import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
4
+ import { S as STATUS, ch as i18n, n as runConfigWizard, ci as testApiConnection, m as displayCurrentStatus, cj as quickSetup, ck as format, k as COLORS, cl as getAllPresets, cm as ensureI18nInitialized, cn as readCcrConfig, co as isCcrInstalled, cp as installCcr, cq as configureCcrFeature, cr as promptBoolean, cs as handleExitPromptError, ct as handleGeneralError, cu as COMETIX_COMMAND_NAME, cv as COMETIX_COMMANDS, cw as installCometixLine, cx as addNumbersToChoices, cy as checkAndUpdateTools, aW as runCodexUpdate, cz as resolveCodeType$1, a2 as resolveCodeToolType$1, cA as readZcfConfig, $ as isCodeToolType, W as DEFAULT_CODE_TOOL_TYPE, a_ as switchCodexProvider, aM as listCodexProviders, aR as readCodexConfig, aD as switchToOfficialLogin, a$ as switchToProvider, q as commandExists, y as CLAUDE_DIR, z as SETTINGS_FILE, cB as readJsonConfig, cC as writeJsonConfig, cD as moveToTrash, U as ZCF_CONFIG_FILE, ah as displayBanner, cE as updateZcfConfig, v as version, cF as resolveAiOutputLanguage, cG as updatePromptOnly, cH as selectAndInstallWorkflows, cI as checkClaudeCodeVersionAndPrompt, l as init, ai as displayBannerWithInfo, X as CODE_TOOL_BANNERS, aV as runCodexUninstall, b5 as configureCodexMcp, aE as configureCodexApi, aY as runCodexWorkflowImportWithLanguageSelection, aT as runCodexFullInit, cJ as checkSuperpowersInstalled, cK as getSuperpowersSkills, cL as updateSuperpowers, cM as uninstallSuperpowers, cN as installSuperpowers, cO as installSuperpowersViaGit, _ as CODE_TOOL_INFO, bb as getToolStatus, bc as getAllToolsStatus, V as CODE_TOOL_TYPES, aj as boxify, be as installTool, cP as readZcfConfigAsync, cQ as initI18n, bV as quickSync, cf as checkAllVersions, cg as upgradeAll, i as detectAllConfigs, bB as displayConfigScan, c9 as displayPermissions, cR as selectScriptLanguage, cS as changeLanguage, bU as runOnboarding } from './chunks/simple-config.mjs';
5
+ import { existsSync, readdirSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
6
6
  import { homedir } from 'node:os';
7
7
  import inquirer from 'inquirer';
8
8
  import { join, resolve as resolve$1 } from 'pathe';
@@ -1106,6 +1106,160 @@ const configSwitch = {
1106
1106
  configSwitchCommand: configSwitchCommand
1107
1107
  };
1108
1108
 
1109
+ async function checkClaudeCode() {
1110
+ const hasCommand = await commandExists("claude");
1111
+ if (hasCommand) {
1112
+ return { name: "Claude Code", status: "ok", message: "Installed" };
1113
+ }
1114
+ return {
1115
+ name: "Claude Code",
1116
+ status: "error",
1117
+ message: "Not installed",
1118
+ fix: "Run: npm install -g @anthropic-ai/claude-code"
1119
+ };
1120
+ }
1121
+ async function checkClaudeDir() {
1122
+ if (existsSync(CLAUDE_DIR)) {
1123
+ return { name: "Config Directory", status: "ok", message: CLAUDE_DIR };
1124
+ }
1125
+ return {
1126
+ name: "Config Directory",
1127
+ status: "error",
1128
+ message: "Does not exist",
1129
+ fix: "Run: npx ccjk init"
1130
+ };
1131
+ }
1132
+ async function checkSettings() {
1133
+ if (existsSync(SETTINGS_FILE)) {
1134
+ return { name: "settings.json", status: "ok", message: "Configured" };
1135
+ }
1136
+ return {
1137
+ name: "settings.json",
1138
+ status: "warning",
1139
+ message: "Not found",
1140
+ fix: "Run: npx ccjk init"
1141
+ };
1142
+ }
1143
+ async function checkWorkflows() {
1144
+ const commandsDir = join(CLAUDE_DIR, "commands");
1145
+ if (existsSync(commandsDir)) {
1146
+ try {
1147
+ const files = readdirSync(commandsDir, { recursive: true });
1148
+ const mdFiles = files.filter((f) => String(f).endsWith(".md"));
1149
+ return {
1150
+ name: "Workflows",
1151
+ status: "ok",
1152
+ message: `${mdFiles.length} commands installed`
1153
+ };
1154
+ } catch {
1155
+ return { name: "Workflows", status: "warning", message: "Cannot read directory" };
1156
+ }
1157
+ }
1158
+ return {
1159
+ name: "Workflows",
1160
+ status: "warning",
1161
+ message: "Not installed",
1162
+ fix: "Run: npx ccjk update"
1163
+ };
1164
+ }
1165
+ async function checkMcp() {
1166
+ const mcpConfigPath = join(CLAUDE_DIR, "mcp.json");
1167
+ const settingsPath = SETTINGS_FILE;
1168
+ if (existsSync(settingsPath)) {
1169
+ try {
1170
+ const { readFileSync } = await import('node:fs');
1171
+ const settings = JSON.parse(readFileSync(settingsPath, "utf-8"));
1172
+ if (settings.mcpServers && Object.keys(settings.mcpServers).length > 0) {
1173
+ const count = Object.keys(settings.mcpServers).length;
1174
+ return { name: "MCP Services", status: "ok", message: `${count} services configured` };
1175
+ }
1176
+ } catch {
1177
+ }
1178
+ }
1179
+ if (existsSync(mcpConfigPath)) {
1180
+ return { name: "MCP Services", status: "ok", message: "Configured" };
1181
+ }
1182
+ return {
1183
+ name: "MCP Services",
1184
+ status: "warning",
1185
+ message: "Not configured",
1186
+ fix: "Run: npx ccjk init and select MCP services"
1187
+ };
1188
+ }
1189
+ async function checkCcr() {
1190
+ const hasCcr = await commandExists("ccr");
1191
+ if (hasCcr) {
1192
+ return { name: "CCR Proxy", status: "ok", message: "Installed" };
1193
+ }
1194
+ return {
1195
+ name: "CCR Proxy",
1196
+ status: "warning",
1197
+ message: "Not installed (optional)",
1198
+ fix: "Run: npx ccjk ccr to install"
1199
+ };
1200
+ }
1201
+ async function checkOutputStyles() {
1202
+ const stylesDir = join(CLAUDE_DIR, "output-styles");
1203
+ if (existsSync(stylesDir)) {
1204
+ try {
1205
+ const files = readdirSync(stylesDir).filter((f) => f.endsWith(".md"));
1206
+ return {
1207
+ name: "Output Styles",
1208
+ status: "ok",
1209
+ message: `${files.length} styles available`
1210
+ };
1211
+ } catch {
1212
+ return { name: "Output Styles", status: "warning", message: "Cannot read directory" };
1213
+ }
1214
+ }
1215
+ return {
1216
+ name: "Output Styles",
1217
+ status: "warning",
1218
+ message: "Not installed",
1219
+ fix: "Run: npx ccjk init"
1220
+ };
1221
+ }
1222
+ async function doctor() {
1223
+ console.log("");
1224
+ console.log(ansis.bold.cyan("\u{1F50D} CCJK Health Check"));
1225
+ console.log(ansis.dim("\u2500".repeat(50)));
1226
+ console.log("");
1227
+ const checks = [
1228
+ checkClaudeCode,
1229
+ checkClaudeDir,
1230
+ checkSettings,
1231
+ checkWorkflows,
1232
+ checkMcp,
1233
+ checkCcr,
1234
+ checkOutputStyles
1235
+ ];
1236
+ let hasErrors = false;
1237
+ let hasWarnings = false;
1238
+ for (const check of checks) {
1239
+ const result = await check();
1240
+ const statusIcon = result.status === "ok" ? ansis.green("\u2705") : result.status === "warning" ? ansis.yellow("\u26A0\uFE0F") : ansis.red("\u274C");
1241
+ const statusColor = result.status === "ok" ? ansis.green : result.status === "warning" ? ansis.yellow : ansis.red;
1242
+ console.log(`${statusIcon} ${ansis.bold(result.name)}: ${statusColor(result.message)}`);
1243
+ if (result.fix) {
1244
+ console.log(ansis.dim(` \u{1F4A1} Fix: ${result.fix}`));
1245
+ }
1246
+ if (result.status === "error")
1247
+ hasErrors = true;
1248
+ if (result.status === "warning")
1249
+ hasWarnings = true;
1250
+ }
1251
+ console.log("");
1252
+ console.log(ansis.dim("\u2500".repeat(50)));
1253
+ if (hasErrors) {
1254
+ console.log(ansis.red("\u274C Issues found - please follow the suggestions above"));
1255
+ } else if (hasWarnings) {
1256
+ console.log(ansis.yellow("\u26A0\uFE0F Configuration is functional, but some features may be limited"));
1257
+ } else {
1258
+ console.log(ansis.green("\u2705 All checks passed - CCJK is properly configured!"));
1259
+ }
1260
+ console.log("");
1261
+ }
1262
+
1109
1263
  class ZcfUninstaller {
1110
1264
  _lang;
1111
1265
  // Reserved for future i18n support
@@ -1393,7 +1547,7 @@ class ZcfUninstaller {
1393
1547
  result.removed.push(".claude.json (includes MCP configuration)");
1394
1548
  }
1395
1549
  try {
1396
- const { uninstallCodeTool } = await import('./chunks/simple-config.mjs').then(function (n) { return n.dh; });
1550
+ const { uninstallCodeTool } = await import('./chunks/simple-config.mjs').then(function (n) { return n.de; });
1397
1551
  const success = await uninstallCodeTool("claude-code");
1398
1552
  if (success) {
1399
1553
  result.removed.push("@anthropic-ai/claude-code");
@@ -1629,7 +1783,7 @@ async function uninstall(options = {}) {
1629
1783
  }
1630
1784
  const uninstaller = new ZcfUninstaller(options.lang || "en");
1631
1785
  if (codeType === "codex") {
1632
- const { runCodexUninstall } = await import('./chunks/simple-config.mjs').then(function (n) { return n.dg; });
1786
+ const { runCodexUninstall } = await import('./chunks/simple-config.mjs').then(function (n) { return n.dd; });
1633
1787
  await runCodexUninstall();
1634
1788
  return;
1635
1789
  }
@@ -1899,7 +2053,7 @@ async function update(options = {}) {
1899
2053
  }
1900
2054
  return;
1901
2055
  }
1902
- const { resolveTemplateLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.df; });
2056
+ const { resolveTemplateLanguage } = await import('./chunks/simple-config.mjs').then(function (n) { return n.dc; });
1903
2057
  const configLang = await resolveTemplateLanguage(
1904
2058
  options.configLang,
1905
2059
  // Command line option
@@ -2386,6 +2540,17 @@ async function showConfigSwitchMenu() {
2386
2540
  await configSwitchCommand({ codeType: "claude-code" });
2387
2541
  }
2388
2542
  function printCcjkFeaturesSection() {
2543
+ console.log(` -------- ${i18n.t("menu:menuSections.smartFeatures")} --------`);
2544
+ console.log(
2545
+ ` ${ansis.cyan("A.")} ${i18n.t("menu:menuOptions.quickActions")} ${ansis.gray(`- ${i18n.t("menu:menuDescriptions.quickActions")}`)}`
2546
+ );
2547
+ console.log(
2548
+ ` ${ansis.cyan("G.")} ${i18n.t("menu:menuOptions.smartGuide")} ${ansis.gray(`- ${i18n.t("menu:menuDescriptions.smartGuide")}`)}`
2549
+ );
2550
+ console.log(
2551
+ ` ${ansis.cyan("D.")} ${i18n.t("menu:menuOptions.doctor")} ${ansis.gray(`- ${i18n.t("menu:menuDescriptions.doctor")}`)}`
2552
+ );
2553
+ console.log("");
2389
2554
  console.log(` -------- ${i18n.t("menu:menuSections.ccjkFeatures")} --------`);
2390
2555
  console.log(
2391
2556
  ` ${ansis.cyan("W.")} ${i18n.t("menu:menuOptions.workflowsAndSkills")} ${ansis.gray(`- ${i18n.t("menu:menuDescriptions.workflowsAndSkills")}`)}`
@@ -2472,7 +2637,7 @@ async function showClaudeCodeMenu() {
2472
2637
  name: "choice",
2473
2638
  message: i18n.t("common:enterChoice"),
2474
2639
  validate: (value) => {
2475
- const valid = ["1", "2", "3", "4", "5", "6", "7", "w", "W", "o", "O", "c", "C", "r", "R", "u", "U", "l", "L", "p", "P", "m", "M", "0", "-", "+", "s", "S", "q", "Q"];
2640
+ const valid = ["1", "2", "3", "4", "5", "6", "7", "a", "A", "g", "G", "d", "D", "w", "W", "o", "O", "c", "C", "r", "R", "u", "U", "l", "L", "p", "P", "m", "M", "0", "-", "+", "s", "S", "q", "Q"];
2476
2641
  return valid.includes(value) || i18n.t("common:invalidChoice");
2477
2642
  }
2478
2643
  });
@@ -2503,6 +2668,20 @@ async function showClaudeCodeMenu() {
2503
2668
  case "7":
2504
2669
  await configureEnvPermissionFeature();
2505
2670
  break;
2671
+ // Smart Features
2672
+ case "a":
2673
+ await showQuickActionsMenu();
2674
+ printSeparator();
2675
+ return void 0;
2676
+ case "g":
2677
+ await showSmartGuideMenu();
2678
+ printSeparator();
2679
+ return void 0;
2680
+ case "d":
2681
+ await doctor();
2682
+ printSeparator();
2683
+ return void 0;
2684
+ // CCJK Features
2506
2685
  case "w":
2507
2686
  await showWorkflowsAndSkillsMenu();
2508
2687
  printSeparator();
@@ -2674,8 +2853,77 @@ async function showCodexMenu() {
2674
2853
  }
2675
2854
  return void 0;
2676
2855
  }
2856
+ async function isFirstTimeUser() {
2857
+ const config = readZcfConfig();
2858
+ if (!config || !config.version) {
2859
+ return true;
2860
+ }
2861
+ if (!existsSync(join(CLAUDE_DIR, "commands"))) {
2862
+ return true;
2863
+ }
2864
+ return false;
2865
+ }
2866
+ async function showNewUserWelcome() {
2867
+ console.log("");
2868
+ console.log(ansis.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"));
2869
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.white(" \u{1F44B} \u6B22\u8FCE\u4F7F\u7528 CCJK\uFF01 ") + ansis.bold.cyan("\u2551"));
2870
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
2871
+ console.log(`${ansis.bold.cyan("\u2551")} CCJK \u5E2E\u52A9\u60A8\u5FEB\u901F\u914D\u7F6E Claude Code \u5F00\u53D1\u73AF\u5883 ${ansis.bold.cyan("\u2551")}`);
2872
+ console.log(`${ansis.bold.cyan("\u2551")} \u5305\u62EC API \u8BBE\u7F6E\u3001\u5DE5\u4F5C\u6D41\u6A21\u677F\u3001MCP \u670D\u52A1\u7B49 ${ansis.bold.cyan("\u2551")}`);
2873
+ console.log(ansis.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
2874
+ console.log("");
2875
+ const { mode } = await inquirer.prompt({
2876
+ type: "list",
2877
+ name: "mode",
2878
+ message: "\u8BF7\u9009\u62E9\uFF1A",
2879
+ choices: [
2880
+ {
2881
+ name: ansis.green("\u{1F680} \u5FEB\u901F\u5F00\u59CB") + ansis.dim(" - \u63A8\u8350\u65B0\u624B\uFF0C3\u5206\u949F\u5B8C\u6210\u914D\u7F6E"),
2882
+ value: "quick"
2883
+ },
2884
+ {
2885
+ name: ansis.cyan("\u2699\uFE0F \u5B8C\u6574\u914D\u7F6E") + ansis.dim(" - \u81EA\u5B9A\u4E49\u6240\u6709\u9009\u9879"),
2886
+ value: "full"
2887
+ },
2888
+ {
2889
+ name: ansis.yellow("\u{1F4D6} \u67E5\u770B\u5E2E\u52A9") + ansis.dim(" - \u4E86\u89E3 CCJK \u529F\u80FD"),
2890
+ value: "help"
2891
+ }
2892
+ ]
2893
+ });
2894
+ return mode;
2895
+ }
2896
+ async function showFeaturesOverview() {
2897
+ console.log("");
2898
+ console.log(ansis.bold.cyan("\u{1F4D6} CCJK \u529F\u80FD\u4ECB\u7ECD"));
2899
+ console.log("");
2900
+ console.log(ansis.cyan("\u6838\u5FC3\u529F\u80FD\uFF1A"));
2901
+ console.log(` ${ansis.green("\u2022")} API \u914D\u7F6E - \u652F\u6301 Auth Token\u3001API Key\u3001CCR \u4EE3\u7406`);
2902
+ console.log(` ${ansis.green("\u2022")} \u5DE5\u4F5C\u6D41\u6A21\u677F - Git\u3001SixStep\u3001Common Tools \u7B49\u9884\u8BBE\u5DE5\u4F5C\u6D41`);
2903
+ console.log(` ${ansis.green("\u2022")} MCP \u670D\u52A1 - \u4EE3\u7801\u5E93\u641C\u7D22\u3001\u6587\u4EF6\u7CFB\u7EDF\u3001\u7F51\u7EDC\u641C\u7D22\u7B49`);
2904
+ console.log(` ${ansis.green("\u2022")} \u8F93\u51FA\u98CE\u683C - \u591A\u79CD AI \u8F93\u51FA\u98CE\u683C\uFF08\u901F\u5EA6\u4F18\u5148\u3001\u67B6\u6784\u5E08\u3001\u7ED3\u5BF9\u7F16\u7A0B\u7B49\uFF09`);
2905
+ console.log("");
2906
+ console.log(ansis.cyan("\u63A8\u8350\u63D2\u4EF6\uFF1A"));
2907
+ console.log(` ${ansis.green("\u2022")} CCR - Claude Code Router \u4EE3\u7406\u5DE5\u5177`);
2908
+ console.log(` ${ansis.green("\u2022")} CCusage - API \u4F7F\u7528\u91CF\u7EDF\u8BA1\u5DE5\u5177`);
2909
+ console.log(` ${ansis.green("\u2022")} Cometix - \u72B6\u6001\u680F\u589E\u5F3A\u5DE5\u5177`);
2910
+ console.log(` ${ansis.green("\u2022")} Superpowers - \u6280\u80FD\u6269\u5C55\u7CFB\u7EDF`);
2911
+ console.log("");
2912
+ console.log(ansis.dim("\u6309 Enter \u7EE7\u7EED..."));
2913
+ await inquirer.prompt([{ type: "input", name: "continue", message: "" }]);
2914
+ }
2677
2915
  async function showMainMenu(options = {}) {
2678
2916
  try {
2917
+ if (await isFirstTimeUser()) {
2918
+ const mode = await showNewUserWelcome();
2919
+ if (mode === "quick") {
2920
+ await init({ skipPrompt: false });
2921
+ return;
2922
+ } else if (mode === "help") {
2923
+ await showFeaturesOverview();
2924
+ return showMainMenu(options);
2925
+ }
2926
+ }
2679
2927
  if (options.codeType) {
2680
2928
  try {
2681
2929
  const resolvedType = await resolveCodeType$1(options.codeType);
@@ -2837,6 +3085,42 @@ async function commit(options = {}) {
2837
3085
  }
2838
3086
  }
2839
3087
 
3088
+ async function showFeatures() {
3089
+ console.log("");
3090
+ console.log(ansis.bold.cyan("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"));
3091
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.white(" \u{1F4E6} CCJK \u529F\u80FD\u4E00\u89C8 ") + ansis.bold.cyan("\u2551"));
3092
+ console.log(ansis.bold.cyan("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563"));
3093
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
3094
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.yellow(" \u{1F527} CLI \u547D\u4EE4 ") + ansis.bold.cyan("\u2551"));
3095
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.cyan("ccjk init")} \u521D\u59CB\u5316\u73AF\u5883\u914D\u7F6E ${ansis.bold.cyan("\u2551")}`);
3096
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.cyan("ccjk update")} \u66F4\u65B0\u5DE5\u4F5C\u6D41\u548C\u6A21\u677F ${ansis.bold.cyan("\u2551")}`);
3097
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.cyan("ccjk cs")} \u5207\u6362 API \u914D\u7F6E ${ansis.bold.cyan("\u2551")}`);
3098
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.cyan("ccjk doctor")} \u8BCA\u65AD\u914D\u7F6E\u95EE\u9898 ${ansis.bold.cyan("\u2551")}`);
3099
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.cyan("ccjk ccr")} CCR \u4EE3\u7406\u7BA1\u7406 ${ansis.bold.cyan("\u2551")}`);
3100
+ console.log(`${ansis.bold.cyan("\u2551")} \u2514\u2500 ${ansis.cyan("ccjk ccu")} \u4F7F\u7528\u91CF\u7EDF\u8BA1 ${ansis.bold.cyan("\u2551")}`);
3101
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
3102
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.yellow(" \u{1F4CB} \u5DE5\u4F5C\u6D41\uFF08\u5728 Claude Code \u4E2D\u4F7F\u7528\uFF09 ") + ansis.bold.cyan("\u2551"));
3103
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.green("/ccjk:workflow")} \u516D\u9636\u6BB5\u5F00\u53D1\u6D41\u7A0B ${ansis.bgGreen.black(" \u63A8\u8350 ")} ${ansis.bold.cyan("\u2551")}`);
3104
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.green("/ccjk:feat")} \u529F\u80FD\u89C4\u5212\u6D41\u7A0B ${ansis.bold.cyan("\u2551")}`);
3105
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.green("/git-commit")} \u667A\u80FD\u63D0\u4EA4 ${ansis.bgYellow.black(" \u70ED\u95E8 ")} ${ansis.bold.cyan("\u2551")}`);
3106
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.green("/git-rollback")} \u56DE\u6EDA\u66F4\u6539 ${ansis.bold.cyan("\u2551")}`);
3107
+ console.log(`${ansis.bold.cyan("\u2551")} \u2514\u2500 ${ansis.green("/git-cleanup")} \u6E05\u7406\u5206\u652F ${ansis.bold.cyan("\u2551")}`);
3108
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
3109
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.yellow(" \u{1F3A8} \u8F93\u51FA\u98CE\u683C ") + ansis.bold.cyan("\u2551"));
3110
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.magenta("senior-architect")} \u8D44\u6DF1\u67B6\u6784\u5E08\u98CE\u683C ${ansis.bold.cyan("\u2551")}`);
3111
+ console.log(`${ansis.bold.cyan("\u2551")} \u251C\u2500 ${ansis.magenta("pair-programmer")} \u7ED3\u5BF9\u7F16\u7A0B\u98CE\u683C ${ansis.bold.cyan("\u2551")}`);
3112
+ console.log(`${ansis.bold.cyan("\u2551")} \u2514\u2500 ${ansis.magenta("speed-coder")} \u5FEB\u901F\u7F16\u7801\u98CE\u683C ${ansis.bold.cyan("\u2551")}`);
3113
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
3114
+ console.log(ansis.bold.cyan("\u2551") + ansis.bold.yellow(" \u26A1 \u5FEB\u6377\u64CD\u4F5C\uFF08\u5728 Claude Code \u4E2D\u8F93\u5165\u6570\u5B57\uFF09 ") + ansis.bold.cyan("\u2551"));
3115
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.dim("1=\u667A\u80FD\u63D0\u4EA4 2=\u4EE3\u7801\u5BA1\u67E5 3=\u7F16\u5199\u6D4B\u8BD5 4=\u89C4\u5212\u529F\u80FD")} ${ansis.bold.cyan("\u2551")}`);
3116
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.dim("5=\u8C03\u8BD5\u95EE\u9898 6=\u5934\u8111\u98CE\u66B4 7=\u9A8C\u8BC1\u4EE3\u7801 8=\u5199\u6587\u6863")} ${ansis.bold.cyan("\u2551")}`);
3117
+ console.log(`${ansis.bold.cyan("\u2551")} ${ansis.bold.cyan("\u2551")}`);
3118
+ console.log(ansis.bold.cyan("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563"));
3119
+ console.log(ansis.bold.cyan("\u2551") + ansis.dim(" \u{1F4A1} \u63D0\u793A\uFF1A\u8F93\u5165 ccjk <\u547D\u4EE4> --help \u67E5\u770B\u8BE6\u7EC6\u7528\u6CD5 ") + ansis.bold.cyan("\u2551"));
3120
+ console.log(ansis.bold.cyan("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
3121
+ console.log("");
3122
+ }
3123
+
2840
3124
  const projectFoundationQuestions = [
2841
3125
  {
2842
3126
  id: "app-purpose",
@@ -6702,6 +6986,93 @@ async function toolsCommand(action = "list", target, options = {}) {
6702
6986
  }
6703
6987
  }
6704
6988
 
6989
+ const WORKFLOW_METADATA = {
6990
+ "workflow": { description: "\u516D\u9636\u6BB5\u5F00\u53D1\u6D41\u7A0B", tags: ["\u63A8\u8350", "\u6838\u5FC3"] },
6991
+ "feat": { description: "\u529F\u80FD\u89C4\u5212\u6D41\u7A0B", tags: ["\u63A8\u8350"] },
6992
+ "git-commit": { description: "\u667A\u80FD Git \u63D0\u4EA4", tags: ["\u70ED\u95E8", "Git"] },
6993
+ "git-rollback": { description: "\u56DE\u6EDA\u66F4\u6539", tags: ["Git"] },
6994
+ "git-cleanup": { description: "\u6E05\u7406\u5206\u652F", tags: ["Git"] },
6995
+ "git-worktree": { description: "\u5DE5\u4F5C\u6811\u7BA1\u7406", tags: ["Git"] },
6996
+ "bmad": { description: "BMad \u654F\u6377\u6D41\u7A0B", tags: ["\u654F\u6377"] },
6997
+ "spec": { description: "\u89C4\u683C\u9A71\u52A8\u5F00\u53D1", tags: ["\u89C4\u5212"] }
6998
+ };
6999
+ function getInstalledWorkflows() {
7000
+ const commandsDir = join(CLAUDE_DIR, "commands");
7001
+ const workflows = [];
7002
+ if (!existsSync(commandsDir)) {
7003
+ return workflows;
7004
+ }
7005
+ function scanDir(dir, prefix = "") {
7006
+ try {
7007
+ const items = readdirSync(dir, { withFileTypes: true });
7008
+ for (const item of items) {
7009
+ if (item.isDirectory()) {
7010
+ scanDir(join(dir, item.name), `${prefix}${item.name}/`);
7011
+ } else if (item.name.endsWith(".md")) {
7012
+ const name = item.name.replace(".md", "");
7013
+ const fullName = prefix ? `${prefix.replace(/\/$/, "")}:${name}` : name;
7014
+ const meta = WORKFLOW_METADATA[name] || {};
7015
+ workflows.push({
7016
+ name: `/${fullName}`,
7017
+ path: join(dir, item.name),
7018
+ description: meta.description,
7019
+ installed: true,
7020
+ tags: meta.tags
7021
+ });
7022
+ }
7023
+ }
7024
+ } catch {
7025
+ }
7026
+ }
7027
+ scanDir(commandsDir);
7028
+ return workflows;
7029
+ }
7030
+ function formatTags(tags) {
7031
+ if (!tags || tags.length === 0)
7032
+ return "";
7033
+ return tags.map((tag) => {
7034
+ switch (tag) {
7035
+ case "\u63A8\u8350":
7036
+ return ansis.bgGreen.black(` ${tag} `);
7037
+ case "\u70ED\u95E8":
7038
+ return ansis.bgYellow.black(` ${tag} `);
7039
+ case "\u6838\u5FC3":
7040
+ return ansis.bgBlue.white(` ${tag} `);
7041
+ case "Git":
7042
+ return ansis.bgMagenta.white(` ${tag} `);
7043
+ default:
7044
+ return ansis.bgGray.white(` ${tag} `);
7045
+ }
7046
+ }).join(" ");
7047
+ }
7048
+ async function showWorkflows() {
7049
+ console.log("");
7050
+ console.log(ansis.bold.cyan("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
7051
+ console.log(ansis.bold.cyan("\u2502") + ansis.bold.white(" \u{1F4CB} CCJK \u5DE5\u4F5C\u6D41\u7BA1\u7406 ") + ansis.bold.cyan("\u2502"));
7052
+ console.log(ansis.bold.cyan("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
7053
+ const workflows = getInstalledWorkflows();
7054
+ if (workflows.length === 0) {
7055
+ console.log(ansis.bold.cyan("\u2502") + ansis.yellow(" \u26A0\uFE0F \u672A\u5B89\u88C5\u4EFB\u4F55\u5DE5\u4F5C\u6D41 ") + ansis.bold.cyan("\u2502"));
7056
+ console.log(ansis.bold.cyan("\u2502") + ansis.dim(" \u8FD0\u884C npx ccjk init \u6216 npx ccjk update \u5B89\u88C5\u5DE5\u4F5C\u6D41 ") + ansis.bold.cyan("\u2502"));
7057
+ } else {
7058
+ console.log(ansis.bold.cyan("\u2502") + ansis.bold.green(` \u2705 \u5DF2\u5B89\u88C5\u5DE5\u4F5C\u6D41 (${workflows.length})`) + " ".repeat(42 - String(workflows.length).length) + ansis.bold.cyan("\u2502"));
7059
+ console.log(`${ansis.bold.cyan("\u2502")} ${ansis.bold.cyan("\u2502")}`);
7060
+ for (const wf of workflows) {
7061
+ const tags = formatTags(wf.tags);
7062
+ const desc = wf.description || "";
7063
+ const nameCol = ansis.green(wf.name.padEnd(20));
7064
+ const descCol = ansis.dim(desc.padEnd(25));
7065
+ console.log(ansis.bold.cyan("\u2502") + ` ${nameCol} ${descCol} ${tags}`.padEnd(60) + ansis.bold.cyan("\u2502"));
7066
+ }
7067
+ }
7068
+ console.log(`${ansis.bold.cyan("\u2502")} ${ansis.bold.cyan("\u2502")}`);
7069
+ console.log(ansis.bold.cyan("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
7070
+ console.log(ansis.bold.cyan("\u2502") + ansis.dim(" \u{1F4A1} \u5728 Claude Code \u4E2D\u8F93\u5165\u5DE5\u4F5C\u6D41\u540D\u79F0\u5373\u53EF\u4F7F\u7528 ") + ansis.bold.cyan("\u2502"));
7071
+ console.log(ansis.bold.cyan("\u2502") + ansis.dim(" \u4F8B\u5982: /ccjk:workflow \u5B9E\u73B0\u7528\u6237\u767B\u5F55\u529F\u80FD ") + ansis.bold.cyan("\u2502"));
7072
+ console.log(ansis.bold.cyan("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
7073
+ console.log("");
7074
+ }
7075
+
6705
7076
  async function resolveAndSwitchLanguage(lang, options, skipPrompt = false) {
6706
7077
  const ccjkConfig = await readZcfConfigAsync();
6707
7078
  const targetLang = options?.allLang || lang || options?.lang || ccjkConfig?.preferredLang || (skipPrompt ? "en" : await selectScriptLanguage());
@@ -6749,6 +7120,8 @@ function customizeHelp(sections) {
6749
7120
  ` ${ansis.cyan("ccjk quick")} Express interview (~10 questions)`,
6750
7121
  ` ${ansis.cyan("ccjk deep")} Deep dive interview (~40+ questions)`,
6751
7122
  ` ${ansis.cyan("ccjk mcp")} <action> MCP Server marketplace (search, trending, install)`,
7123
+ ` ${ansis.cyan("ccjk workflows")} | ${ansis.cyan("wf")} Manage installed workflows`,
7124
+ ` ${ansis.cyan("ccjk doctor")} Health check and diagnostics`,
6752
7125
  ` ${ansis.cyan("ccjk uninstall")} ${i18n.t("cli:help.commandDescriptions.uninstallConfigurations")}`,
6753
7126
  ` ${ansis.cyan("ccjk check-updates")} ${i18n.t("cli:help.commandDescriptions.checkUpdateVersions")}`,
6754
7127
  "",
@@ -6883,8 +7256,8 @@ async function setupCommands(cli) {
6883
7256
  cli.command("sync", "Quick sync - update knowledge base from current project").action(async () => {
6884
7257
  await quickSync();
6885
7258
  });
6886
- cli.command("doctor", "Run environment health check").option("--fix", "Attempt to fix issues automatically").action(async (options) => {
6887
- await runDoctor(options.fix);
7259
+ cli.command("doctor", "Run environment health check").action(async () => {
7260
+ await doctor();
6888
7261
  });
6889
7262
  cli.command("versions", "Check Claude Code, CCJK, and plugin versions").alias("ver").action(async () => {
6890
7263
  await checkAllVersions();
@@ -6966,6 +7339,12 @@ async function setupCommands(cli) {
6966
7339
  console.error(`Unknown action: ${action}. Use: save, list, restore, or export`);
6967
7340
  }
6968
7341
  });
7342
+ cli.command("features", "Show all available features").action(async () => {
7343
+ await showFeatures();
7344
+ });
7345
+ cli.command("workflows", "Manage installed workflows").alias("wf").option("--lang, -l <lang>", "Display language (zh-CN, en)").action(await withLanguageResolution(async () => {
7346
+ await showWorkflows();
7347
+ }));
6969
7348
  cli.help((sections) => customizeHelp(sections));
6970
7349
  cli.version(version);
6971
7350
  }
@@ -71,5 +71,16 @@
71
71
  "codexModelOptions.gpt5": "GPT-5 - General powerful model, suitable for complex tasks",
72
72
  "codexModelOptions.gpt5Codex": "GPT-5-Codex - Code-optimized model, recommended for programming tasks",
73
73
  "codexModelOptions.custom": "Custom - Specify custom model names",
74
- "windowsMcpConfigFixed": "Windows MCP configuration fixed"
74
+ "windowsMcpConfigFixed": "Windows MCP configuration fixed",
75
+ "setupCompleteTitle": "✅ CCJK Configuration Complete!",
76
+ "nextSteps": "🎯 Next Steps:",
77
+ "guidanceStep1": "1. Open Claude Code and use number shortcuts:",
78
+ "guidanceStep1Detail": "1 = Smart Commit 2 = Code Review 3 = Write Tests",
79
+ "guidanceStep1Detail2": "4 = Plan Feature 5 = Debug Issue 6 = Brainstorm",
80
+ "guidanceStep2": "2. Or use workflow commands:",
81
+ "guidanceStep2Example": "/ccjk:workflow implement user login feature",
82
+ "guidanceStep3": "3. View all features:",
83
+ "guidanceStep3Command": "npx ccjk features",
84
+ "guidanceStep4": "4. Having issues? Run:",
85
+ "guidanceStep4Command": "npx ccjk doctor"
75
86
  }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "menuSections.ccjkFeatures": "CCJK Features",
3
+ "menuSections.smartFeatures": "🎯 Smart Features (New)",
3
4
  "menuSections.recommendedPlugins": "Recommended Plugins",
4
5
  "menuSections.marketplace": "Marketplace",
5
6
  "menuDescriptions.ccrManagement": "Configure Claude Code Router to use multiple AI models",
@@ -84,5 +85,32 @@
84
85
  "ccjkFeatures.selectConfig": "Select API configuration",
85
86
  "ccjkFeatures.configChanged": "Switched to {{config}}",
86
87
  "ccjkFeatures.noConfigs": "No additional configurations available",
87
- "ccjkFeatures.availableConfigs": "Available configurations:"
88
+ "ccjkFeatures.availableConfigs": "Available configurations:",
89
+
90
+ "menuOptions.quickActions": "🚀 Quick Actions",
91
+ "menuOptions.smartGuide": "🎯 Smart Assistant",
92
+ "menuOptions.doctor": "🔧 Diagnostics",
93
+
94
+ "menuDescriptions.quickActions": "Execute common actions with one key (just type a number)",
95
+ "menuDescriptions.smartGuide": "Context-aware feature recommendations",
96
+ "menuDescriptions.doctor": "Check configuration issues and auto-fix",
97
+
98
+ "smartFeatures.quickActionsTitle": "Quick Actions Panel",
99
+ "smartFeatures.availableActions": "Available Quick Actions:",
100
+ "smartFeatures.selectAction": "Enter action number (q to quit)",
101
+ "smartFeatures.actionSelected": "Action selected",
102
+ "smartFeatures.runCommand": "Run in Claude Code",
103
+
104
+ "smartFeatures.smartGuideTitle": "Smart Guide",
105
+ "smartFeatures.guideInstalled": "Smart Guide is active",
106
+ "smartFeatures.guideNotInstalled": "Smart Guide is not installed",
107
+ "smartFeatures.guideDescription": "Smart Guide provides context-aware recommendations based on your current work.",
108
+ "smartFeatures.guideInstallPrompt": "Install Smart Guide to get intelligent feature recommendations.",
109
+ "smartFeatures.installGuide": "Install Smart Guide now?",
110
+ "smartFeatures.guideInstalledSuccess": "Smart Guide installed successfully!",
111
+ "smartFeatures.guideAction": "What would you like to do?",
112
+ "smartFeatures.refreshGuide": "Refresh Smart Guide",
113
+ "smartFeatures.removeGuide": "Remove Smart Guide",
114
+ "smartFeatures.guideRefreshed": "Smart Guide refreshed",
115
+ "smartFeatures.guideRemoved": "Smart Guide removed"
88
116
  }
@@ -71,5 +71,16 @@
71
71
  "codexModelOptions.gpt5": "GPT-5 - 通用强力模型,适合复杂任务",
72
72
  "codexModelOptions.gpt5Codex": "GPT-5-Codex - 专为代码优化的模型,推荐用于编程任务",
73
73
  "codexModelOptions.custom": "自定义 - 指定自定义模型名称",
74
- "windowsMcpConfigFixed": "Windows MCP 配置已修复"
74
+ "windowsMcpConfigFixed": "Windows MCP 配置已修复",
75
+ "setupCompleteTitle": "✅ CCJK 配置完成!",
76
+ "nextSteps": "🎯 下一步:",
77
+ "guidanceStep1": "1. 打开 Claude Code,输入数字快速操作:",
78
+ "guidanceStep1Detail": "1 = 智能提交 2 = 代码审查 3 = 编写测试",
79
+ "guidanceStep1Detail2": "4 = 规划功能 5 = 调试问题 6 = 头脑风暴",
80
+ "guidanceStep2": "2. 或使用工作流命令:",
81
+ "guidanceStep2Example": "/ccjk:workflow 实现用户登录功能",
82
+ "guidanceStep3": "3. 查看所有功能:",
83
+ "guidanceStep3Command": "npx ccjk features",
84
+ "guidanceStep4": "4. 遇到问题?运行:",
85
+ "guidanceStep4Command": "npx ccjk doctor"
75
86
  }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "menuSections.ccjkFeatures": "CCJK 功能",
3
+ "menuSections.smartFeatures": "🎯 智能功能 (新)",
3
4
  "menuSections.recommendedPlugins": "推荐插件",
4
5
  "menuSections.marketplace": "插件市场",
5
6
  "menuDescriptions.ccrManagement": "配置 Claude Code Router 以使用多个 AI 模型",
@@ -84,5 +85,32 @@
84
85
  "ccjkFeatures.selectConfig": "选择 API 配置",
85
86
  "ccjkFeatures.configChanged": "已切换到 {{config}}",
86
87
  "ccjkFeatures.noConfigs": "没有其他可用配置",
87
- "ccjkFeatures.availableConfigs": "可用配置:"
88
+ "ccjkFeatures.availableConfigs": "可用配置:",
89
+
90
+ "menuOptions.quickActions": "🚀 快捷操作",
91
+ "menuOptions.smartGuide": "🎯 智能助手",
92
+ "menuOptions.doctor": "🔧 诊断工具",
93
+
94
+ "menuDescriptions.quickActions": "一键执行常用操作 (输入数字即可)",
95
+ "menuDescriptions.smartGuide": "根据上下文智能推荐功能",
96
+ "menuDescriptions.doctor": "检查配置问题并自动修复",
97
+
98
+ "smartFeatures.quickActionsTitle": "快捷操作面板",
99
+ "smartFeatures.availableActions": "可用的快捷操作:",
100
+ "smartFeatures.selectAction": "输入操作编号 (q 退出)",
101
+ "smartFeatures.actionSelected": "已选择操作",
102
+ "smartFeatures.runCommand": "在 Claude Code 中运行",
103
+
104
+ "smartFeatures.smartGuideTitle": "智能引导",
105
+ "smartFeatures.guideInstalled": "智能引导已激活",
106
+ "smartFeatures.guideNotInstalled": "智能引导未安装",
107
+ "smartFeatures.guideDescription": "智能引导会根据您当前的工作上下文提供智能推荐。",
108
+ "smartFeatures.guideInstallPrompt": "安装智能引导以获取智能功能推荐。",
109
+ "smartFeatures.installGuide": "现在安装智能引导?",
110
+ "smartFeatures.guideInstalledSuccess": "智能引导安装成功!",
111
+ "smartFeatures.guideAction": "您想要做什么?",
112
+ "smartFeatures.refreshGuide": "刷新智能引导",
113
+ "smartFeatures.removeGuide": "移除智能引导",
114
+ "smartFeatures.guideRefreshed": "智能引导已刷新",
115
+ "smartFeatures.guideRemoved": "智能引导已移除"
88
116
  }