ccjk 13.3.20 → 13.3.22

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.
@@ -246,8 +246,11 @@ class ClaudeCodeConfigManager {
246
246
  profile.primaryModel || profile.defaultHaikuModel || profile.defaultSonnetModel || profile.defaultOpusModel
247
247
  );
248
248
  if (hasModelConfig) {
249
+ clearModelEnv(settings.env, "override");
249
250
  if (profile.primaryModel)
250
- settings.env.ANTHROPIC_MODEL = profile.primaryModel;
251
+ settings.model = profile.primaryModel;
252
+ else
253
+ delete settings.model;
251
254
  if (profile.defaultHaikuModel) {
252
255
  settings.env.ANTHROPIC_SMALL_FAST_MODEL = profile.defaultHaikuModel;
253
256
  settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = profile.defaultHaikuModel;
@@ -256,9 +259,11 @@ class ClaudeCodeConfigManager {
256
259
  settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = profile.defaultSonnetModel;
257
260
  if (profile.defaultOpusModel)
258
261
  settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = profile.defaultOpusModel;
259
- delete settings.model;
262
+ if (!profile.primaryModel)
263
+ delete settings.model;
260
264
  } else {
261
265
  clearModelEnv(settings.env);
266
+ delete settings.model;
262
267
  }
263
268
  writeJsonConfig(SETTINGS_FILE, settings);
264
269
  const { setPrimaryApiKey, addCompletedOnboarding } = await import('./claude-config.mjs').then(function (n) { return n.h; });
@@ -159,11 +159,12 @@ function updateCustomModel(primaryModel, haikuModel, sonnetModel, opusModel) {
159
159
  if (existingSettings) {
160
160
  settings = existingSettings;
161
161
  }
162
- delete settings.model;
163
162
  settings.env = settings.env || {};
164
163
  clearModelEnv(settings.env, "override");
165
164
  if (primaryModel?.trim()) {
166
- settings.env.ANTHROPIC_MODEL = primaryModel.trim();
165
+ settings.model = primaryModel.trim();
166
+ } else {
167
+ delete settings.model;
167
168
  }
168
169
  if (haikuModel?.trim()) {
169
170
  settings.env.ANTHROPIC_SMALL_FAST_MODEL = haikuModel.trim();
@@ -256,7 +257,7 @@ function getExistingModelConfig() {
256
257
  if (!settings) {
257
258
  return null;
258
259
  }
259
- const hasModelEnv = MODEL_ENV_KEYS.some((key) => {
260
+ const hasModelEnv = MODEL_ENV_KEYS.filter((key) => key !== "ANTHROPIC_MODEL").some((key) => {
260
261
  const value = settings.env?.[key];
261
262
  return value !== void 0 && value !== null && value !== "";
262
263
  });
@@ -270,25 +271,25 @@ function getExistingModelConfig() {
270
271
  if (validModels.includes(settings.model)) {
271
272
  return settings.model;
272
273
  }
273
- return "default";
274
+ return "custom";
274
275
  }
275
276
  function getExistingCustomModelConfig() {
276
277
  const settings = readJsonConfig(SETTINGS_FILE);
277
- if (!settings || !settings.env) {
278
+ if (!settings) {
278
279
  return null;
279
280
  }
280
281
  const {
281
- ANTHROPIC_MODEL,
282
282
  ANTHROPIC_SMALL_FAST_MODEL,
283
283
  ANTHROPIC_DEFAULT_HAIKU_MODEL,
284
284
  ANTHROPIC_DEFAULT_SONNET_MODEL,
285
285
  ANTHROPIC_DEFAULT_OPUS_MODEL
286
- } = settings.env;
287
- if (!ANTHROPIC_MODEL && !ANTHROPIC_DEFAULT_HAIKU_MODEL && !ANTHROPIC_DEFAULT_SONNET_MODEL && !ANTHROPIC_DEFAULT_OPUS_MODEL) {
286
+ } = settings.env || {};
287
+ const primaryModel = settings.model && !["opus", "sonnet", "sonnet[1m]"].includes(settings.model) ? settings.model : settings.env?.ANTHROPIC_MODEL;
288
+ if (!primaryModel && !ANTHROPIC_DEFAULT_HAIKU_MODEL && !ANTHROPIC_DEFAULT_SONNET_MODEL && !ANTHROPIC_DEFAULT_OPUS_MODEL) {
288
289
  return null;
289
290
  }
290
291
  return {
291
- primaryModel: ANTHROPIC_MODEL,
292
+ primaryModel,
292
293
  haikuModel: ANTHROPIC_DEFAULT_HAIKU_MODEL || ANTHROPIC_SMALL_FAST_MODEL,
293
294
  sonnetModel: ANTHROPIC_DEFAULT_SONNET_MODEL,
294
295
  opusModel: ANTHROPIC_DEFAULT_OPUS_MODEL
@@ -52,7 +52,7 @@ const DEFAULT_SETTINGS_V2 = {
52
52
  };
53
53
  function validateConfig(config) {
54
54
  const errors = [];
55
- if (config.model && !["opus", "sonnet", "sonnet[1m]", "custom", "default"].includes(config.model)) {
55
+ if (config.model !== void 0 && (typeof config.model !== "string" || !config.model.trim())) {
56
56
  errors.push(`Invalid model: ${config.model}`);
57
57
  }
58
58
  if (config.thinking?.budgetTokens !== void 0) {
@@ -1,3 +1,3 @@
1
- const version = "13.3.20";
1
+ const version = "13.3.22";
2
2
 
3
3
  export { version };
package/dist/index.d.mts CHANGED
@@ -3832,7 +3832,7 @@ declare function configureApi(apiConfig: ApiConfig | null): ApiConfig | null;
3832
3832
  declare function configureHooks(hooks: Record<string, unknown[]>): void;
3833
3833
  declare function mergeConfigs(sourceFile: string, targetFile: string): void;
3834
3834
  /**
3835
- * Update custom model configuration using environment variables
3835
+ * Update custom model configuration using settings.model plus family-specific env overrides
3836
3836
  * @param primaryModel - Primary model name for general tasks
3837
3837
  * @param haikuModel - Default Haiku model (optional)
3838
3838
  * @param sonnetModel - Default Sonnet model (optional)
@@ -3842,7 +3842,7 @@ declare function updateCustomModel(primaryModel?: string, haikuModel?: string, s
3842
3842
  /**
3843
3843
  * Update the default model configuration in settings.json
3844
3844
  * @param model - The model type to set: opus, sonnet, sonnet[1m], default, or custom
3845
- * Note: 'custom' model type is handled differently - it should use environment variables instead
3845
+ * Note: 'custom' is configured by updateCustomModel().
3846
3846
  */
3847
3847
  declare function updateDefaultModel(model: 'opus' | 'sonnet' | 'sonnet[1m]' | 'default' | 'custom'): void;
3848
3848
  /**
package/dist/index.d.ts CHANGED
@@ -3832,7 +3832,7 @@ declare function configureApi(apiConfig: ApiConfig | null): ApiConfig | null;
3832
3832
  declare function configureHooks(hooks: Record<string, unknown[]>): void;
3833
3833
  declare function mergeConfigs(sourceFile: string, targetFile: string): void;
3834
3834
  /**
3835
- * Update custom model configuration using environment variables
3835
+ * Update custom model configuration using settings.model plus family-specific env overrides
3836
3836
  * @param primaryModel - Primary model name for general tasks
3837
3837
  * @param haikuModel - Default Haiku model (optional)
3838
3838
  * @param sonnetModel - Default Sonnet model (optional)
@@ -3842,7 +3842,7 @@ declare function updateCustomModel(primaryModel?: string, haikuModel?: string, s
3842
3842
  /**
3843
3843
  * Update the default model configuration in settings.json
3844
3844
  * @param model - The model type to set: opus, sonnet, sonnet[1m], default, or custom
3845
- * Note: 'custom' model type is handled differently - it should use environment variables instead
3845
+ * Note: 'custom' is configured by updateCustomModel().
3846
3846
  */
3847
3847
  declare function updateDefaultModel(model: 'opus' | 'sonnet' | 'sonnet[1m]' | 'default' | 'custom'): void;
3848
3848
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ccjk",
3
3
  "type": "module",
4
- "version": "13.3.20",
4
+ "version": "13.3.22",
5
5
  "packageManager": "pnpm@10.17.1",
6
6
  "description": "Turn Claude Code into a production-ready AI dev environment with one-command setup, persistent memory, MCP automation, cloud sync, and zero-config browser workflows.",
7
7
  "author": {