ccjk 12.3.3 → 12.3.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.
@@ -206,7 +206,7 @@ class ClaudeCodeConfigManager {
206
206
  ensureI18nInitialized();
207
207
  try {
208
208
  if (!profile) {
209
- const { switchToOfficialLogin } = await import('./config.mjs').then(function (n) { return n.j; });
209
+ const { switchToOfficialLogin } = await import('./config.mjs').then(function (n) { return n.k; });
210
210
  switchToOfficialLogin();
211
211
  return;
212
212
  }
@@ -247,6 +247,8 @@ class ClaudeCodeConfigManager {
247
247
  );
248
248
  if (hasModelConfig) {
249
249
  delete settings.model;
250
+ if (profile.primaryModel)
251
+ settings.env.ANTHROPIC_MODEL = profile.primaryModel;
250
252
  if (profile.defaultHaikuModel)
251
253
  settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = profile.defaultHaikuModel;
252
254
  if (profile.defaultSonnetModel)
@@ -11,6 +11,7 @@ import { m as mergeAndCleanPermissions } from '../shared/ccjk.DXRAZcix.mjs';
11
11
  import { j as join, d as dirname } from '../shared/ccjk.bQ7Dh1g4.mjs';
12
12
 
13
13
  const MODEL_ENV_KEYS = [
14
+ "ANTHROPIC_MODEL",
14
15
  "ANTHROPIC_DEFAULT_HAIKU_MODEL",
15
16
  "ANTHROPIC_DEFAULT_SONNET_MODEL",
16
17
  "ANTHROPIC_DEFAULT_OPUS_MODEL",
@@ -156,6 +157,9 @@ function updateCustomModel(primaryModel, haikuModel, sonnetModel, opusModel) {
156
157
  delete settings.model;
157
158
  settings.env = settings.env || {};
158
159
  clearModelEnv(settings.env);
160
+ if (primaryModel?.trim()) {
161
+ settings.env.ANTHROPIC_MODEL = primaryModel.trim();
162
+ }
159
163
  if (haikuModel?.trim())
160
164
  settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = haikuModel.trim();
161
165
  if (sonnetModel?.trim())
@@ -258,6 +262,27 @@ function getExistingModelConfig() {
258
262
  }
259
263
  return "default";
260
264
  }
265
+ function getExistingCustomModelConfig() {
266
+ const settings = readJsonConfig(SETTINGS_FILE);
267
+ if (!settings || !settings.env) {
268
+ return null;
269
+ }
270
+ const {
271
+ ANTHROPIC_MODEL,
272
+ ANTHROPIC_DEFAULT_HAIKU_MODEL,
273
+ ANTHROPIC_DEFAULT_SONNET_MODEL,
274
+ ANTHROPIC_DEFAULT_OPUS_MODEL
275
+ } = settings.env;
276
+ if (!ANTHROPIC_MODEL && !ANTHROPIC_DEFAULT_HAIKU_MODEL && !ANTHROPIC_DEFAULT_SONNET_MODEL && !ANTHROPIC_DEFAULT_OPUS_MODEL) {
277
+ return null;
278
+ }
279
+ return {
280
+ primaryModel: ANTHROPIC_MODEL,
281
+ haikuModel: ANTHROPIC_DEFAULT_HAIKU_MODEL,
282
+ sonnetModel: ANTHROPIC_DEFAULT_SONNET_MODEL,
283
+ opusModel: ANTHROPIC_DEFAULT_OPUS_MODEL
284
+ };
285
+ }
261
286
  function getExistingApiConfig() {
262
287
  const settings = readJsonConfig(SETTINGS_FILE);
263
288
  if (!settings || !settings.env) {
@@ -363,6 +388,7 @@ const config = {
363
388
  copyConfigFiles: copyConfigFiles,
364
389
  ensureClaudeDir: ensureClaudeDir,
365
390
  getExistingApiConfig: getExistingApiConfig,
391
+ getExistingCustomModelConfig: getExistingCustomModelConfig,
366
392
  getExistingModelConfig: getExistingModelConfig,
367
393
  mergeConfigs: mergeConfigs,
368
394
  mergeSettingsFile: mergeSettingsFile,
@@ -372,4 +398,4 @@ const config = {
372
398
  updateDefaultModel: updateDefaultModel
373
399
  };
374
400
 
375
- export { clearModelEnv as a, backupExistingConfig as b, copyConfigFiles as c, configureApi as d, applyAiLanguageDirective as e, getExistingModelConfig as f, getExistingApiConfig as g, updateDefaultModel as h, ensureClaudeDir as i, config as j, promptApiConfigurationAction as p, switchToOfficialLogin as s, updateCustomModel as u };
401
+ export { clearModelEnv as a, backupExistingConfig as b, copyConfigFiles as c, configureApi as d, applyAiLanguageDirective as e, getExistingModelConfig as f, getExistingApiConfig as g, getExistingCustomModelConfig as h, updateDefaultModel as i, ensureClaudeDir as j, config as k, promptApiConfigurationAction as p, switchToOfficialLogin as s, updateCustomModel as u };
@@ -814,7 +814,7 @@ async function checkPermissionRules() {
814
814
  }
815
815
  async function fixSettingsFile() {
816
816
  const isZh = i18n.language === "zh-CN";
817
- const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.j; });
817
+ const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.k; });
818
818
  console.log("");
819
819
  console.log(a.bold.cyan("\u{1F527} Fixing settings.json"));
820
820
  console.log(a.dim("\u2500".repeat(50)));
@@ -17,7 +17,7 @@ import { a as addCompletedOnboarding, s as setPrimaryApiKey, c as backupMcpConfi
17
17
  import { r as resolveCodeType } from '../shared/ccjk.Cot9p9_n.mjs';
18
18
  import { exists } from './fs-operations.mjs';
19
19
  import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
20
- import { p as promptApiConfigurationAction, i as ensureClaudeDir, g as getExistingApiConfig, s as switchToOfficialLogin, b as backupExistingConfig, c as copyConfigFiles, e as applyAiLanguageDirective, d as configureApi } from './config.mjs';
20
+ import { p as promptApiConfigurationAction, j as ensureClaudeDir, g as getExistingApiConfig, s as switchToOfficialLogin, b as backupExistingConfig, c as copyConfigFiles, e as applyAiLanguageDirective, d as configureApi } from './config.mjs';
21
21
  import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.DcKLglJQ.mjs';
22
22
  import { getInstallationStatus, installClaudeCode } from './installer.mjs';
23
23
  import { p as parseOrchestrationLevel, w as writeOrchestrationPolicy } from './smart-defaults.mjs';
@@ -1026,7 +1026,7 @@ async function init(options = {}) {
1026
1026
  const hasModelParams = options.apiModel || options.apiHaikuModel || options.apiSonnetModel || options.apiOpusModel;
1027
1027
  if (hasModelParams && action !== "docs-only" && codeToolType === "claude-code") {
1028
1028
  if (options.skipPrompt) {
1029
- const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.j; });
1029
+ const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.k; });
1030
1030
  updateCustomModel(
1031
1031
  options.apiModel || void 0,
1032
1032
  options.apiHaikuModel || void 0,
@@ -13,7 +13,7 @@ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/c
13
13
  import { homedir } from 'node:os';
14
14
  import { setupCcrConfiguration, readCcrConfig, configureCcrFeature } from './config2.mjs';
15
15
  import { a as isCcrInstalled, b as installCcr, i as init } from './init.mjs';
16
- import { e as applyAiLanguageDirective, f as getExistingModelConfig, u as updateCustomModel, h as updateDefaultModel, g as getExistingApiConfig, p as promptApiConfigurationAction, d as configureApi, s as switchToOfficialLogin } from './config.mjs';
16
+ import { e as applyAiLanguageDirective, f as getExistingModelConfig, h as getExistingCustomModelConfig, u as updateCustomModel, i as updateDefaultModel, g as getExistingApiConfig, p as promptApiConfigurationAction, d as configureApi, s as switchToOfficialLogin } from './config.mjs';
17
17
  import { c as configureOutputStyle, a as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.XsJWJuQP.mjs';
18
18
  import { k as isWindows } from './platform.mjs';
19
19
  import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
@@ -283,7 +283,13 @@ ${a.green(`\u2139 ${i18n.t("configuration:existingModelConfig") || "Existing mod
283
283
  return;
284
284
  }
285
285
  if (model === "custom") {
286
- const { primaryModel, haikuModel, sonnetModel, opusModel } = await promptCustomModels();
286
+ const existingCustomConfig = getExistingCustomModelConfig();
287
+ const { primaryModel, haikuModel, sonnetModel, opusModel } = await promptCustomModels(
288
+ existingCustomConfig?.primaryModel,
289
+ existingCustomConfig?.haikuModel,
290
+ existingCustomConfig?.sonnetModel,
291
+ existingCustomConfig?.opusModel
292
+ );
287
293
  if (!primaryModel.trim() && !haikuModel.trim() && !sonnetModel.trim() && !opusModel.trim()) {
288
294
  console.log(a.yellow(`\u26A0 ${i18n.t("configuration:customModelSkipped") || "Custom model configuration skipped"}`));
289
295
  return;
@@ -78,7 +78,7 @@ async function runOnboardingWizard(options = {}) {
78
78
  console.log(a.bold(`${isZh ? "\u6B65\u9AA4 2/3" : "Step 2/3"}: ${isZh ? "API \u914D\u7F6E" : "API Configuration"}${step2Done ? a.green(" \u2714") : ""}`));
79
79
  if (!step2Done) {
80
80
  try {
81
- const { getExistingApiConfig } = await import('./config.mjs').then(function (n) { return n.j; });
81
+ const { getExistingApiConfig } = await import('./config.mjs').then(function (n) { return n.k; });
82
82
  const existing = getExistingApiConfig();
83
83
  if (existing?.key || existing?.url) {
84
84
  console.log(a.green(` \u2714 ${isZh ? "\u5DF2\u914D\u7F6E" : "Already configured"}`));
@@ -1,3 +1,3 @@
1
- const version = "12.3.3";
1
+ const version = "12.3.5";
2
2
 
3
3
  export { version };
@@ -122,7 +122,7 @@ function getSlashCommands() {
122
122
  descriptionZh: "\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD",
123
123
  category: "system",
124
124
  handler: async () => {
125
- const { backupExistingConfig } = await import('./config.mjs').then(function (n) { return n.j; });
125
+ const { backupExistingConfig } = await import('./config.mjs').then(function (n) { return n.k; });
126
126
  const backupPath = backupExistingConfig();
127
127
  if (backupPath) {
128
128
  console.log(a.green(`\u2705 Backup created: ${backupPath}`));
package/dist/cli.mjs CHANGED
@@ -1212,11 +1212,13 @@ ${ansis.yellow("By Status:")}`);
1212
1212
  const { configCommand } = await import('./chunks/config3.mjs');
1213
1213
  return async (options, action, key, value) => {
1214
1214
  const args = [];
1215
+ if (action !== void 0)
1216
+ args.push(action);
1215
1217
  if (key !== void 0)
1216
1218
  args.push(key);
1217
1219
  if (value !== void 0)
1218
1220
  args.push(value);
1219
- await configCommand(action || "list", args, {
1221
+ await configCommand(args, {
1220
1222
  lang: options.lang,
1221
1223
  codeType: options.codeType,
1222
1224
  global: options.global,
package/dist/index.d.mts CHANGED
@@ -1175,6 +1175,15 @@ declare function mergeSettingsFile(templatePath: string, targetPath: string): vo
1175
1175
  * Get existing model configuration from settings.json
1176
1176
  */
1177
1177
  declare function getExistingModelConfig(): 'opus' | 'sonnet' | 'sonnet[1m]' | 'default' | 'custom' | null;
1178
+ /**
1179
+ * Get existing custom model configuration from settings.json
1180
+ */
1181
+ declare function getExistingCustomModelConfig(): {
1182
+ primaryModel?: string;
1183
+ haikuModel?: string;
1184
+ sonnetModel?: string;
1185
+ opusModel?: string;
1186
+ } | null;
1178
1187
  /**
1179
1188
  * Get existing API configuration from settings.json
1180
1189
  */
@@ -1200,6 +1209,7 @@ declare const config_configureHooks: typeof configureHooks;
1200
1209
  declare const config_copyConfigFiles: typeof copyConfigFiles;
1201
1210
  declare const config_ensureClaudeDir: typeof ensureClaudeDir;
1202
1211
  declare const config_getExistingApiConfig: typeof getExistingApiConfig;
1212
+ declare const config_getExistingCustomModelConfig: typeof getExistingCustomModelConfig;
1203
1213
  declare const config_getExistingModelConfig: typeof getExistingModelConfig;
1204
1214
  declare const config_mergeConfigs: typeof mergeConfigs;
1205
1215
  declare const config_mergeSettingsFile: typeof mergeSettingsFile;
@@ -1208,7 +1218,7 @@ declare const config_switchToOfficialLogin: typeof switchToOfficialLogin;
1208
1218
  declare const config_updateCustomModel: typeof updateCustomModel;
1209
1219
  declare const config_updateDefaultModel: typeof updateDefaultModel;
1210
1220
  declare namespace config {
1211
- export { config_applyAiLanguageDirective as applyAiLanguageDirective, config_backupExistingConfig as backupExistingConfig, config_configureApi as configureApi, config_configureHooks as configureHooks, config_copyConfigFiles as copyConfigFiles, config_ensureClaudeDir as ensureClaudeDir, config_getExistingApiConfig as getExistingApiConfig, config_getExistingModelConfig as getExistingModelConfig, config_mergeConfigs as mergeConfigs, config_mergeSettingsFile as mergeSettingsFile, config_promptApiConfigurationAction as promptApiConfigurationAction, config_switchToOfficialLogin as switchToOfficialLogin, config_updateCustomModel as updateCustomModel, config_updateDefaultModel as updateDefaultModel };
1221
+ export { config_applyAiLanguageDirective as applyAiLanguageDirective, config_backupExistingConfig as backupExistingConfig, config_configureApi as configureApi, config_configureHooks as configureHooks, config_copyConfigFiles as copyConfigFiles, config_ensureClaudeDir as ensureClaudeDir, config_getExistingApiConfig as getExistingApiConfig, config_getExistingCustomModelConfig as getExistingCustomModelConfig, config_getExistingModelConfig as getExistingModelConfig, config_mergeConfigs as mergeConfigs, config_mergeSettingsFile as mergeSettingsFile, config_promptApiConfigurationAction as promptApiConfigurationAction, config_switchToOfficialLogin as switchToOfficialLogin, config_updateCustomModel as updateCustomModel, config_updateDefaultModel as updateDefaultModel };
1212
1222
  export type { config_ApiConfig as ApiConfig };
1213
1223
  }
1214
1224
 
package/dist/index.d.ts CHANGED
@@ -1175,6 +1175,15 @@ declare function mergeSettingsFile(templatePath: string, targetPath: string): vo
1175
1175
  * Get existing model configuration from settings.json
1176
1176
  */
1177
1177
  declare function getExistingModelConfig(): 'opus' | 'sonnet' | 'sonnet[1m]' | 'default' | 'custom' | null;
1178
+ /**
1179
+ * Get existing custom model configuration from settings.json
1180
+ */
1181
+ declare function getExistingCustomModelConfig(): {
1182
+ primaryModel?: string;
1183
+ haikuModel?: string;
1184
+ sonnetModel?: string;
1185
+ opusModel?: string;
1186
+ } | null;
1178
1187
  /**
1179
1188
  * Get existing API configuration from settings.json
1180
1189
  */
@@ -1200,6 +1209,7 @@ declare const config_configureHooks: typeof configureHooks;
1200
1209
  declare const config_copyConfigFiles: typeof copyConfigFiles;
1201
1210
  declare const config_ensureClaudeDir: typeof ensureClaudeDir;
1202
1211
  declare const config_getExistingApiConfig: typeof getExistingApiConfig;
1212
+ declare const config_getExistingCustomModelConfig: typeof getExistingCustomModelConfig;
1203
1213
  declare const config_getExistingModelConfig: typeof getExistingModelConfig;
1204
1214
  declare const config_mergeConfigs: typeof mergeConfigs;
1205
1215
  declare const config_mergeSettingsFile: typeof mergeSettingsFile;
@@ -1208,7 +1218,7 @@ declare const config_switchToOfficialLogin: typeof switchToOfficialLogin;
1208
1218
  declare const config_updateCustomModel: typeof updateCustomModel;
1209
1219
  declare const config_updateDefaultModel: typeof updateDefaultModel;
1210
1220
  declare namespace config {
1211
- export { config_applyAiLanguageDirective as applyAiLanguageDirective, config_backupExistingConfig as backupExistingConfig, config_configureApi as configureApi, config_configureHooks as configureHooks, config_copyConfigFiles as copyConfigFiles, config_ensureClaudeDir as ensureClaudeDir, config_getExistingApiConfig as getExistingApiConfig, config_getExistingModelConfig as getExistingModelConfig, config_mergeConfigs as mergeConfigs, config_mergeSettingsFile as mergeSettingsFile, config_promptApiConfigurationAction as promptApiConfigurationAction, config_switchToOfficialLogin as switchToOfficialLogin, config_updateCustomModel as updateCustomModel, config_updateDefaultModel as updateDefaultModel };
1221
+ export { config_applyAiLanguageDirective as applyAiLanguageDirective, config_backupExistingConfig as backupExistingConfig, config_configureApi as configureApi, config_configureHooks as configureHooks, config_copyConfigFiles as copyConfigFiles, config_ensureClaudeDir as ensureClaudeDir, config_getExistingApiConfig as getExistingApiConfig, config_getExistingCustomModelConfig as getExistingCustomModelConfig, config_getExistingModelConfig as getExistingModelConfig, config_mergeConfigs as mergeConfigs, config_mergeSettingsFile as mergeSettingsFile, config_promptApiConfigurationAction as promptApiConfigurationAction, config_switchToOfficialLogin as switchToOfficialLogin, config_updateCustomModel as updateCustomModel, config_updateDefaultModel as updateDefaultModel };
1212
1222
  export type { config_ApiConfig as ApiConfig };
1213
1223
  }
1214
1224
 
package/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ import { promisify } from 'node:util';
13
13
  import a from './chunks/index3.mjs';
14
14
  import { g as getRuntimeVersion } from './shared/ccjk.gDEDGD_t.mjs';
15
15
  import { j as join$1 } from './shared/ccjk.bQ7Dh1g4.mjs';
16
- export { j as config } from './chunks/config.mjs';
16
+ export { k as config } from './chunks/config.mjs';
17
17
  export { a as loggerUtils } from './shared/ccjk.DJdmgr2d.mjs';
18
18
  export { p as platform } from './chunks/platform.mjs';
19
19
  import { Transform } from 'node:stream';
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "ccjk",
3
3
  "type": "module",
4
- "version": "12.3.3",
4
+ "version": "12.3.5",
5
+ "packageManager": "pnpm@10.17.1",
5
6
  "description": "CLI toolkit for Claude Code and Codex setup. Simplifies MCP service installation, API configuration, workflow management, and multi-provider support with guided interactive setup.",
6
7
  "author": {
7
8
  "name": "CCJK Team",
@@ -80,68 +81,6 @@
80
81
  "engines": {
81
82
  "node": ">=20"
82
83
  },
83
- "dependencies": {
84
- "fdir": "^6.5.0",
85
- "globby": "^14.1.0",
86
- "ioredis": "^5.9.3",
87
- "node-cron": "^4.2.1",
88
- "sql.js": "^1.14.0",
89
- "tar": "^7.5.9",
90
- "tinyglobby": "^0.2.15",
91
- "web-tree-sitter": "^0.26.5"
92
- },
93
- "devDependencies": {
94
- "@antfu/eslint-config": "^5.4.1",
95
- "@anthropic-ai/sdk": "^0.52.0",
96
- "@types/better-sqlite3": "^7.6.13",
97
- "@types/fs-extra": "^11.0.4",
98
- "@types/inquirer": "^9.0.9",
99
- "@types/node": "^22.18.6",
100
- "@types/node-cron": "^3.0.11",
101
- "@types/semver": "^7.7.1",
102
- "@types/uuid": "^11.0.0",
103
- "@typescript-eslint/eslint-plugin": "^6.0.0",
104
- "@typescript-eslint/parser": "^6.0.0",
105
- "@vitest/coverage-v8": "^3.2.4",
106
- "@vitest/ui": "^3.2.4",
107
- "ansis": "^4.2.0",
108
- "cac": "^6.7.14",
109
- "chokidar": "^4.0.3",
110
- "concurrently": "^9.2.1",
111
- "consola": "^3.4.2",
112
- "dayjs": "^1.11.19",
113
- "eslint": "^9.36.0",
114
- "eslint-plugin-format": "^1.4.0",
115
- "find-up-simple": "^1.0.1",
116
- "fs-extra": "^11.3.3",
117
- "gray-matter": "^4.0.3",
118
- "handlebars": "^4.7.8",
119
- "husky": "^9.1.7",
120
- "i18next": "^25.8.13",
121
- "i18next-fs-backend": "^2.6.1",
122
- "inquirer": "^12.9.6",
123
- "inquirer-toggle": "^1.0.1",
124
- "lint-staged": "^16.2.7",
125
- "lowdb": "^7.0.1",
126
- "nanoid": "^5.1.6",
127
- "ofetch": "^1.5.1",
128
- "ohash": "^1.1.4",
129
- "ora": "^8.2.0",
130
- "pathe": "^2.0.3",
131
- "pkgroll": "^2.26.3",
132
- "prettier": "^3.8.1",
133
- "semver": "^7.7.4",
134
- "shx": "^0.4.0",
135
- "smol-toml": "^1.6.0",
136
- "tinyexec": "^1.0.2",
137
- "trash": "^10.1.0",
138
- "tsx": "^4.21.0",
139
- "tweetnacl": "^1.0.3",
140
- "typescript": "^5.9.3",
141
- "unbuild": "^3.6.1",
142
- "uuid": "^11.1.0",
143
- "vitest": "^3.2.4"
144
- },
145
84
  "scripts": {
146
85
  "dev": "tsx ./src/cli.ts",
147
86
  "build": "unbuild",
@@ -149,6 +88,7 @@
149
88
  "typecheck": "tsc --noEmit",
150
89
  "release:verify": "node scripts/release-verify.mjs",
151
90
  "release:verify:full": "node scripts/release-verify.mjs --with-tests",
91
+ "prepublishOnly": "node scripts/validate-prepublish.mjs && pnpm contract:check && pnpm build",
152
92
  "lint": "eslint",
153
93
  "lint:fix": "eslint --fix",
154
94
  "test": "vitest",
@@ -170,6 +110,7 @@
170
110
  "test:integration:run": "NODE_ENV=test vitest run --config vitest.integration.config.ts",
171
111
  "test:integration:ui": "NODE_ENV=test vitest --config vitest.integration.config.ts --ui",
172
112
  "test:integration:coverage": "NODE_ENV=test vitest run --config vitest.integration.config.ts --coverage",
113
+ "prepare": "husky",
173
114
  "format": "prettier --write src/**/*.ts",
174
115
  "prepublish:fix": "node scripts/fix-package-catalog.mjs",
175
116
  "cleanup": "node scripts/cleanup.js",
@@ -204,5 +145,67 @@
204
145
  "i18n:check": "tsx scripts/check-i18n.ts",
205
146
  "i18n:report": "tsx scripts/check-i18n.ts --report",
206
147
  "contract:check": "node scripts/check-remote-contract.mjs"
148
+ },
149
+ "dependencies": {
150
+ "fdir": "^6.5.0",
151
+ "globby": "^14.1.0",
152
+ "ioredis": "^5.9.3",
153
+ "node-cron": "^4.2.1",
154
+ "sql.js": "^1.14.0",
155
+ "tar": "^7.5.9",
156
+ "tinyglobby": "^0.2.15",
157
+ "web-tree-sitter": "^0.26.5"
158
+ },
159
+ "devDependencies": {
160
+ "@antfu/eslint-config": "^5.4.1",
161
+ "@anthropic-ai/sdk": "^0.52.0",
162
+ "@types/better-sqlite3": "^7.6.13",
163
+ "@types/fs-extra": "^11.0.4",
164
+ "@types/inquirer": "^9.0.9",
165
+ "@types/node": "^22.18.6",
166
+ "@types/node-cron": "^3.0.11",
167
+ "@types/semver": "^7.7.1",
168
+ "@types/uuid": "^11.0.0",
169
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
170
+ "@typescript-eslint/parser": "^6.0.0",
171
+ "@vitest/coverage-v8": "^3.2.4",
172
+ "@vitest/ui": "^3.2.4",
173
+ "ansis": "^4.2.0",
174
+ "cac": "^6.7.14",
175
+ "chokidar": "^4.0.3",
176
+ "concurrently": "^9.2.1",
177
+ "consola": "^3.4.2",
178
+ "dayjs": "^1.11.19",
179
+ "eslint": "^9.36.0",
180
+ "eslint-plugin-format": "^1.4.0",
181
+ "find-up-simple": "^1.0.1",
182
+ "fs-extra": "^11.3.3",
183
+ "gray-matter": "^4.0.3",
184
+ "handlebars": "^4.7.8",
185
+ "husky": "^9.1.7",
186
+ "i18next": "^25.8.13",
187
+ "i18next-fs-backend": "^2.6.1",
188
+ "inquirer": "^12.9.6",
189
+ "inquirer-toggle": "^1.0.1",
190
+ "lint-staged": "^16.2.7",
191
+ "lowdb": "^7.0.1",
192
+ "nanoid": "^5.1.6",
193
+ "ofetch": "^1.5.1",
194
+ "ohash": "^1.1.4",
195
+ "ora": "^8.2.0",
196
+ "pathe": "^2.0.3",
197
+ "pkgroll": "^2.26.3",
198
+ "prettier": "^3.8.1",
199
+ "semver": "^7.7.4",
200
+ "shx": "^0.4.0",
201
+ "smol-toml": "^1.6.0",
202
+ "tinyexec": "^1.0.2",
203
+ "trash": "^10.1.0",
204
+ "tsx": "^4.21.0",
205
+ "tweetnacl": "^1.0.3",
206
+ "typescript": "^5.9.3",
207
+ "unbuild": "^3.6.1",
208
+ "uuid": "^11.1.0",
209
+ "vitest": "^3.2.4"
207
210
  }
208
- }
211
+ }