ccjk 2.0.2 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,7 @@ import trash from 'trash';
20
20
  import i18next from 'i18next';
21
21
  import Backend from 'i18next-fs-backend';
22
22
 
23
- const version = "2.0.2";
23
+ const version = "2.0.5";
24
24
  const homepage = "https://github.com/miounet11/ccjk";
25
25
 
26
26
  const i18n = i18next.createInstance();
package/dist/cli.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
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, 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, y as CLAUDE_DIR, 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, q as commandExists, z as SETTINGS_FILE, _ 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';
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
5
  import { existsSync, readdirSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
6
6
  import { homedir } from 'node:os';
7
7
  import inquirer from 'inquirer';
@@ -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
@@ -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();
@@ -2906,160 +3085,6 @@ async function commit(options = {}) {
2906
3085
  }
2907
3086
  }
2908
3087
 
2909
- async function checkClaudeCode() {
2910
- const hasCommand = await commandExists("claude");
2911
- if (hasCommand) {
2912
- return { name: "Claude Code", status: "ok", message: "Installed" };
2913
- }
2914
- return {
2915
- name: "Claude Code",
2916
- status: "error",
2917
- message: "Not installed",
2918
- fix: "Run: npm install -g @anthropic-ai/claude-code"
2919
- };
2920
- }
2921
- async function checkClaudeDir() {
2922
- if (existsSync(CLAUDE_DIR)) {
2923
- return { name: "Config Directory", status: "ok", message: CLAUDE_DIR };
2924
- }
2925
- return {
2926
- name: "Config Directory",
2927
- status: "error",
2928
- message: "Does not exist",
2929
- fix: "Run: npx ccjk init"
2930
- };
2931
- }
2932
- async function checkSettings() {
2933
- if (existsSync(SETTINGS_FILE)) {
2934
- return { name: "settings.json", status: "ok", message: "Configured" };
2935
- }
2936
- return {
2937
- name: "settings.json",
2938
- status: "warning",
2939
- message: "Not found",
2940
- fix: "Run: npx ccjk init"
2941
- };
2942
- }
2943
- async function checkWorkflows() {
2944
- const commandsDir = join(CLAUDE_DIR, "commands");
2945
- if (existsSync(commandsDir)) {
2946
- try {
2947
- const files = readdirSync(commandsDir, { recursive: true });
2948
- const mdFiles = files.filter((f) => String(f).endsWith(".md"));
2949
- return {
2950
- name: "Workflows",
2951
- status: "ok",
2952
- message: `${mdFiles.length} commands installed`
2953
- };
2954
- } catch {
2955
- return { name: "Workflows", status: "warning", message: "Cannot read directory" };
2956
- }
2957
- }
2958
- return {
2959
- name: "Workflows",
2960
- status: "warning",
2961
- message: "Not installed",
2962
- fix: "Run: npx ccjk update"
2963
- };
2964
- }
2965
- async function checkMcp() {
2966
- const mcpConfigPath = join(CLAUDE_DIR, "mcp.json");
2967
- const settingsPath = SETTINGS_FILE;
2968
- if (existsSync(settingsPath)) {
2969
- try {
2970
- const { readFileSync } = await import('node:fs');
2971
- const settings = JSON.parse(readFileSync(settingsPath, "utf-8"));
2972
- if (settings.mcpServers && Object.keys(settings.mcpServers).length > 0) {
2973
- const count = Object.keys(settings.mcpServers).length;
2974
- return { name: "MCP Services", status: "ok", message: `${count} services configured` };
2975
- }
2976
- } catch {
2977
- }
2978
- }
2979
- if (existsSync(mcpConfigPath)) {
2980
- return { name: "MCP Services", status: "ok", message: "Configured" };
2981
- }
2982
- return {
2983
- name: "MCP Services",
2984
- status: "warning",
2985
- message: "Not configured",
2986
- fix: "Run: npx ccjk init and select MCP services"
2987
- };
2988
- }
2989
- async function checkCcr() {
2990
- const hasCcr = await commandExists("ccr");
2991
- if (hasCcr) {
2992
- return { name: "CCR Proxy", status: "ok", message: "Installed" };
2993
- }
2994
- return {
2995
- name: "CCR Proxy",
2996
- status: "warning",
2997
- message: "Not installed (optional)",
2998
- fix: "Run: npx ccjk ccr to install"
2999
- };
3000
- }
3001
- async function checkOutputStyles() {
3002
- const stylesDir = join(CLAUDE_DIR, "output-styles");
3003
- if (existsSync(stylesDir)) {
3004
- try {
3005
- const files = readdirSync(stylesDir).filter((f) => f.endsWith(".md"));
3006
- return {
3007
- name: "Output Styles",
3008
- status: "ok",
3009
- message: `${files.length} styles available`
3010
- };
3011
- } catch {
3012
- return { name: "Output Styles", status: "warning", message: "Cannot read directory" };
3013
- }
3014
- }
3015
- return {
3016
- name: "Output Styles",
3017
- status: "warning",
3018
- message: "Not installed",
3019
- fix: "Run: npx ccjk init"
3020
- };
3021
- }
3022
- async function doctor() {
3023
- console.log("");
3024
- console.log(ansis.bold.cyan("\u{1F50D} CCJK Health Check"));
3025
- console.log(ansis.dim("\u2500".repeat(50)));
3026
- console.log("");
3027
- const checks = [
3028
- checkClaudeCode,
3029
- checkClaudeDir,
3030
- checkSettings,
3031
- checkWorkflows,
3032
- checkMcp,
3033
- checkCcr,
3034
- checkOutputStyles
3035
- ];
3036
- let hasErrors = false;
3037
- let hasWarnings = false;
3038
- for (const check of checks) {
3039
- const result = await check();
3040
- const statusIcon = result.status === "ok" ? ansis.green("\u2705") : result.status === "warning" ? ansis.yellow("\u26A0\uFE0F") : ansis.red("\u274C");
3041
- const statusColor = result.status === "ok" ? ansis.green : result.status === "warning" ? ansis.yellow : ansis.red;
3042
- console.log(`${statusIcon} ${ansis.bold(result.name)}: ${statusColor(result.message)}`);
3043
- if (result.fix) {
3044
- console.log(ansis.dim(` \u{1F4A1} Fix: ${result.fix}`));
3045
- }
3046
- if (result.status === "error")
3047
- hasErrors = true;
3048
- if (result.status === "warning")
3049
- hasWarnings = true;
3050
- }
3051
- console.log("");
3052
- console.log(ansis.dim("\u2500".repeat(50)));
3053
- if (hasErrors) {
3054
- console.log(ansis.red("\u274C Issues found - please follow the suggestions above"));
3055
- } else if (hasWarnings) {
3056
- console.log(ansis.yellow("\u26A0\uFE0F Configuration is functional, but some features may be limited"));
3057
- } else {
3058
- console.log(ansis.green("\u2705 All checks passed - CCJK is properly configured!"));
3059
- }
3060
- console.log("");
3061
- }
3062
-
3063
3088
  async function showFeatures() {
3064
3089
  console.log("");
3065
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"));
@@ -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
  }
@@ -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
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ccjk",
3
3
  "type": "module",
4
- "version": "2.0.2",
4
+ "version": "2.0.5",
5
5
  "description": "Claude Code JinKu - Advanced AI-powered development assistant with skills, agents, and LLM-driven audit",
6
6
  "author": {
7
7
  "name": "CCJK Team"