claudekit-cli 3.36.0-dev.25 → 3.36.0-dev.26

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/index.js CHANGED
@@ -6905,6 +6905,65 @@ var init_checksum_utils = __esm(() => {
6905
6905
  BINARY_DETECTION_SAMPLE_BYTES = 8 * 1024;
6906
6906
  });
6907
6907
 
6908
+ // src/commands/portable/model-taxonomy.ts
6909
+ function setTaxonomyOverrides(overrides) {
6910
+ userOverrides = overrides;
6911
+ }
6912
+ function resolveModel(sourceModel, targetProvider) {
6913
+ if (sourceModel === undefined || sourceModel === null) {
6914
+ return { resolved: null };
6915
+ }
6916
+ if (typeof sourceModel !== "string") {
6917
+ return {
6918
+ resolved: null,
6919
+ warning: `Ignored non-string model frontmatter (${typeof sourceModel})`
6920
+ };
6921
+ }
6922
+ const trimmed = sourceModel.trim();
6923
+ if (!trimmed || trimmed === "inherit") {
6924
+ return { resolved: null };
6925
+ }
6926
+ const tier = SOURCE_TIER_MAP[trimmed];
6927
+ if (!tier) {
6928
+ return {
6929
+ resolved: null,
6930
+ warning: `Unknown model "${trimmed}" — not in taxonomy, commented out`
6931
+ };
6932
+ }
6933
+ const overrideMap = userOverrides?.[targetProvider];
6934
+ if (overrideMap) {
6935
+ const override = overrideMap[tier];
6936
+ if (override) {
6937
+ return { resolved: override };
6938
+ }
6939
+ }
6940
+ const providerMap = DEFAULT_PROVIDER_MODEL_MAP[targetProvider];
6941
+ if (!providerMap) {
6942
+ return { resolved: null };
6943
+ }
6944
+ return { resolved: providerMap[tier] };
6945
+ }
6946
+ var SOURCE_TIER_MAP, DEFAULT_PROVIDER_MODEL_MAP, userOverrides;
6947
+ var init_model_taxonomy = __esm(() => {
6948
+ SOURCE_TIER_MAP = {
6949
+ opus: "heavy",
6950
+ sonnet: "balanced",
6951
+ haiku: "light"
6952
+ };
6953
+ DEFAULT_PROVIDER_MODEL_MAP = {
6954
+ codex: {
6955
+ heavy: { model: "gpt-5.4", effort: "xhigh" },
6956
+ balanced: { model: "gpt-5.4", effort: "high" },
6957
+ light: { model: "gpt-5.4-mini", effort: "medium" }
6958
+ },
6959
+ "gemini-cli": {
6960
+ heavy: { model: "gemini-3.1-pro-preview" },
6961
+ balanced: { model: "gemini-3.1-pro-preview" },
6962
+ light: { model: "gemini-3-flash-preview" }
6963
+ }
6964
+ };
6965
+ });
6966
+
6908
6967
  // src/commands/portable/converters/md-to-toml.ts
6909
6968
  function escapeTomlMultiline(str2) {
6910
6969
  let escaped = str2.replace(/\\/g, "\\\\");
@@ -6987,12 +7046,17 @@ function convertFmToCodexToml(item) {
6987
7046
  const warnings = [];
6988
7047
  const slug = toCodexSlug(item.name);
6989
7048
  const lines = [];
6990
- if (item.frontmatter.model !== undefined && item.frontmatter.model !== null) {
6991
- if (typeof item.frontmatter.model === "string" && item.frontmatter.model.trim().length > 0) {
6992
- lines.push(`# model = ${JSON.stringify(item.frontmatter.model.trim())}`);
6993
- } else if (typeof item.frontmatter.model !== "string") {
6994
- warnings.push(`Ignored non-string model frontmatter (${typeof item.frontmatter.model}) for "${item.name}"`);
7049
+ const modelResult = resolveModel(item.frontmatter.model, "codex");
7050
+ if (modelResult.warning) {
7051
+ warnings.push(modelResult.warning);
7052
+ }
7053
+ if (modelResult.resolved) {
7054
+ lines.push(`model = ${JSON.stringify(modelResult.resolved.model)}`);
7055
+ if (modelResult.resolved.effort) {
7056
+ lines.push(`effort = ${JSON.stringify(modelResult.resolved.effort)}`);
6995
7057
  }
7058
+ } else if (typeof item.frontmatter.model === "string" && item.frontmatter.model.trim().length > 0 && item.frontmatter.model.trim() !== "inherit") {
7059
+ lines.push(`# model = ${JSON.stringify(item.frontmatter.model.trim())}`);
6996
7060
  }
6997
7061
  const sandboxResult = deriveSandboxMode(item.frontmatter.tools);
6998
7062
  if (sandboxResult.warning) {
@@ -7030,7 +7094,9 @@ function buildCodexConfigEntry(name, description) {
7030
7094
  `);
7031
7095
  }
7032
7096
  var MAX_CODEX_SLUG_LENGTH = 96;
7033
- var init_fm_to_codex_toml = () => {};
7097
+ var init_fm_to_codex_toml = __esm(() => {
7098
+ init_model_taxonomy();
7099
+ });
7034
7100
 
7035
7101
  // node_modules/kind-of/index.js
7036
7102
  var require_kind_of = __commonJS((exports, module) => {
@@ -38991,7 +39057,7 @@ var init_claudekit_data = __esm(() => {
38991
39057
  });
38992
39058
 
38993
39059
  // src/types/ck-config.ts
38994
- var PlanValidationModeSchema, PlanFocusAreaSchema, PlanResolutionOrderSchema, ProjectTypeSchema, PackageManagerSchema, FrameworkSchema, GeminiModelSchema, StatuslineModeSchema, CodingLevelSchema, PlanResolutionSchema, PlanValidationSchema, CkPlanConfigSchema, CkDocsConfigSchema, CkPathsConfigSchema, CkLocaleConfigSchema, CkTrustConfigSchema, CkProjectConfigSchema, CkGeminiConfigSchema, CkSkillsConfigSchema, CkAssertionSchema, CkHooksConfigSchema, CkConfigSchema, DEFAULT_CK_CONFIG, CK_HOOK_NAMES;
39060
+ var PlanValidationModeSchema, PlanFocusAreaSchema, PlanResolutionOrderSchema, ProjectTypeSchema, PackageManagerSchema, FrameworkSchema, GeminiModelSchema, StatuslineModeSchema, CodingLevelSchema, PlanResolutionSchema, PlanValidationSchema, CkPlanConfigSchema, CkDocsConfigSchema, CkPathsConfigSchema, CkLocaleConfigSchema, CkTrustConfigSchema, CkProjectConfigSchema, CkGeminiConfigSchema, CkSkillsConfigSchema, ResolvedModelConfigSchema, ModelTierMapSchema, CkModelTaxonomySchema, CkAssertionSchema, CkHooksConfigSchema, CkConfigSchema, DEFAULT_CK_CONFIG, CK_HOOK_NAMES;
38995
39061
  var init_ck_config = __esm(() => {
38996
39062
  init_zod();
38997
39063
  PlanValidationModeSchema = exports_external.enum(["prompt", "auto", "strict", "none"]);
@@ -39084,6 +39150,16 @@ var init_ck_config = __esm(() => {
39084
39150
  useGemini: exports_external.boolean().optional()
39085
39151
  }).passthrough().optional()
39086
39152
  }).passthrough();
39153
+ ResolvedModelConfigSchema = exports_external.object({
39154
+ model: exports_external.string(),
39155
+ effort: exports_external.string().optional()
39156
+ });
39157
+ ModelTierMapSchema = exports_external.object({
39158
+ heavy: ResolvedModelConfigSchema.optional(),
39159
+ balanced: ResolvedModelConfigSchema.optional(),
39160
+ light: ResolvedModelConfigSchema.optional()
39161
+ });
39162
+ CkModelTaxonomySchema = exports_external.record(exports_external.string(), ModelTierMapSchema);
39087
39163
  CkAssertionSchema = exports_external.object({
39088
39164
  pattern: exports_external.string().optional(),
39089
39165
  rule: exports_external.string().optional(),
@@ -39115,7 +39191,8 @@ var init_ck_config = __esm(() => {
39115
39191
  gemini: CkGeminiConfigSchema.optional(),
39116
39192
  skills: CkSkillsConfigSchema.optional(),
39117
39193
  assertions: exports_external.array(CkAssertionSchema).optional(),
39118
- hooks: CkHooksConfigSchema.optional()
39194
+ hooks: CkHooksConfigSchema.optional(),
39195
+ modelTaxonomy: CkModelTaxonomySchema.optional()
39119
39196
  }).passthrough();
39120
39197
  DEFAULT_CK_CONFIG = {
39121
39198
  codingLevel: -1,
@@ -39447,6 +39524,10 @@ var init_config_manager = __esm(() => {
39447
39524
  });
39448
39525
 
39449
39526
  // src/domains/config/ck-config-manager.ts
39527
+ var exports_ck_config_manager = {};
39528
+ __export(exports_ck_config_manager, {
39529
+ CkConfigManager: () => CkConfigManager
39530
+ });
39450
39531
  import { existsSync as existsSync11 } from "node:fs";
39451
39532
  import { mkdir as mkdir5, readFile as readFile8, writeFile as writeFile6 } from "node:fs/promises";
39452
39533
  import { homedir as homedir9 } from "node:os";
@@ -48138,6 +48219,48 @@ var init_ck_config_schema = __esm(() => {
48138
48219
  }
48139
48220
  },
48140
48221
  additionalProperties: false
48222
+ },
48223
+ modelTaxonomy: {
48224
+ type: "object",
48225
+ description: "Custom model mappings for portable migration. Keys are provider names (e.g., 'codex', 'gemini-cli'), values map tiers to model config.",
48226
+ additionalProperties: {
48227
+ type: "object",
48228
+ properties: {
48229
+ heavy: {
48230
+ type: "object",
48231
+ properties: {
48232
+ model: { type: "string", description: "Target model name" },
48233
+ effort: {
48234
+ type: "string",
48235
+ description: "Effort/reasoning level (provider-specific)"
48236
+ }
48237
+ },
48238
+ required: ["model"]
48239
+ },
48240
+ balanced: {
48241
+ type: "object",
48242
+ properties: {
48243
+ model: { type: "string", description: "Target model name" },
48244
+ effort: {
48245
+ type: "string",
48246
+ description: "Effort/reasoning level (provider-specific)"
48247
+ }
48248
+ },
48249
+ required: ["model"]
48250
+ },
48251
+ light: {
48252
+ type: "object",
48253
+ properties: {
48254
+ model: { type: "string", description: "Target model name" },
48255
+ effort: {
48256
+ type: "string",
48257
+ description: "Effort/reasoning level (provider-specific)"
48258
+ }
48259
+ },
48260
+ required: ["model"]
48261
+ }
48262
+ }
48263
+ }
48141
48264
  }
48142
48265
  },
48143
48266
  additionalProperties: true
@@ -56416,7 +56539,7 @@ var package_default;
56416
56539
  var init_package = __esm(() => {
56417
56540
  package_default = {
56418
56541
  name: "claudekit-cli",
56419
- version: "3.36.0-dev.25",
56542
+ version: "3.36.0-dev.26",
56420
56543
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
56421
56544
  type: "module",
56422
56545
  repository: {
@@ -92908,6 +93031,7 @@ async function resolveConflict(action, options2) {
92908
93031
  // src/commands/migrate/migrate-command.ts
92909
93032
  init_converters();
92910
93033
  init_hooks_settings_merger();
93034
+ init_model_taxonomy();
92911
93035
 
92912
93036
  // src/commands/portable/plan-display.ts
92913
93037
  var import_picocolors24 = __toESM(require_picocolors(), 1);
@@ -93404,6 +93528,9 @@ async function migrateCommand(options2) {
93404
93528
  if (hookItems.length > 0 && unsupportedHooks.length > 0) {
93405
93529
  f2.info(import_picocolors25.default.dim(` [i] Hooks skipped for: ${unsupportedHooks.map((pv) => providers[pv].displayName).join(", ")} (unsupported)`));
93406
93530
  }
93531
+ const { CkConfigManager: CkConfigManager2 } = await Promise.resolve().then(() => (init_ck_config_manager(), exports_ck_config_manager));
93532
+ const ckConfigResult = await CkConfigManager2.loadFull(process.cwd());
93533
+ setTaxonomyOverrides(ckConfigResult.config.modelTaxonomy);
93407
93534
  const reconcileSpinner = de();
93408
93535
  reconcileSpinner.start("Computing migration plan...");
93409
93536
  const sourceStates = await computeSourceStates({