claude-use 11.15.0 → 11.16.0

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.cjs CHANGED
@@ -27023,13 +27023,8 @@ var init_schema = __esm({
27023
27023
  mode: external_exports.enum(ANTIGRAVITY_MODES).optional(),
27024
27024
  /** The model a request maps to when no tier matches its model name. */
27025
27025
  defaultModel: external_exports.string().min(1).optional(),
27026
- /** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `ANTIGRAVITY_TIERS` order. */
27027
- models: external_exports.strictObject({
27028
- fable: external_exports.string().min(1).optional(),
27029
- opus: external_exports.string().min(1).optional(),
27030
- sonnet: external_exports.string().min(1).optional(),
27031
- haiku: external_exports.string().min(1).optional()
27032
- }).optional(),
27026
+ /** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `ANTIGRAVITY_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. */
27027
+ models: external_exports.record(external_exports.string().min(1), external_exports.string().min(1)).optional(),
27033
27028
  /** The reasoning effort used when the request's own effort is not one the backend accepts. */
27034
27029
  effort: external_exports.enum(ANTIGRAVITY_EFFORTS).optional(),
27035
27030
  /** Cloud-specific settings (for `mode: "cloud"`). */
@@ -34093,7 +34088,7 @@ var init_package = __esm({
34093
34088
  "package.json"() {
34094
34089
  package_default = {
34095
34090
  name: "claude-use",
34096
- version: "11.15.0",
34091
+ version: "11.16.0",
34097
34092
  description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
34098
34093
  license: "MIT",
34099
34094
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -127790,17 +127785,27 @@ function toolCallSignatureOf(toolUseId) {
127790
127785
 
127791
127786
  // src/antigravity/translate.ts
127792
127787
  init_schema();
127788
+ function isAntigravityTier(key) {
127789
+ return ANTIGRAVITY_TIERS.some((tier) => tier === key);
127790
+ }
127793
127791
  function resolveAntigravityConfig(config2) {
127794
- const overrides = config2?.models;
127792
+ const overrides = config2?.models ?? {};
127793
+ const aliases = /* @__PURE__ */ new Map();
127794
+ for (const [key, model] of Object.entries(overrides)) {
127795
+ if (!isAntigravityTier(key)) {
127796
+ aliases.set(key.toLowerCase(), model);
127797
+ }
127798
+ }
127795
127799
  return {
127796
127800
  mode: config2?.mode ?? ANTIGRAVITY_DEFAULT_MODE,
127797
127801
  defaultModel: config2?.defaultModel ?? ANTIGRAVITY_DEFAULT_MODEL,
127798
127802
  models: {
127799
- fable: overrides?.fable ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.fable,
127800
- opus: overrides?.opus ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.opus,
127801
- sonnet: overrides?.sonnet ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.sonnet,
127802
- haiku: overrides?.haiku ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.haiku
127803
+ fable: overrides.fable ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.fable,
127804
+ opus: overrides.opus ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.opus,
127805
+ sonnet: overrides.sonnet ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.sonnet,
127806
+ haiku: overrides.haiku ?? ANTIGRAVITY_DEFAULT_TIER_MODELS.haiku
127803
127807
  },
127808
+ aliases,
127804
127809
  effort: config2?.effort ?? ANTIGRAVITY_DEFAULT_EFFORT,
127805
127810
  cloud: {
127806
127811
  endpoint: config2?.cloud?.endpoint,
@@ -127814,12 +127819,21 @@ function resolveAntigravityConfig(config2) {
127814
127819
  };
127815
127820
  }
127816
127821
  var CONTEXT_MARKER_1M = "[1m]";
127822
+ var BACKEND_FAMILY_PREFIXES = ["gemini-", "antigravity-", "gpt-oss-"];
127823
+ var BACKEND_CLAUDE_NAME = /^claude-.+-(?:low|medium|high|thinking)$/;
127824
+ function isBackendModelName(name) {
127825
+ return BACKEND_FAMILY_PREFIXES.some((prefix) => name.startsWith(prefix)) || BACKEND_CLAUDE_NAME.test(name);
127826
+ }
127817
127827
  function mapModel2(requested, config2) {
127818
127828
  const stripped = requested.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? requested.slice(0, -CONTEXT_MARKER_1M.length) : requested;
127819
- if (stripped.startsWith("gemini-") || stripped.startsWith("antigravity-")) {
127829
+ const lower = stripped.toLowerCase();
127830
+ const alias = config2.aliases.get(lower);
127831
+ if (alias !== void 0) {
127832
+ return alias;
127833
+ }
127834
+ if (isBackendModelName(stripped)) {
127820
127835
  return stripped;
127821
127836
  }
127822
- const lower = stripped.toLowerCase();
127823
127837
  const tier = ANTIGRAVITY_TIERS.find((candidate) => lower.includes(candidate));
127824
127838
  return tier === void 0 ? config2.defaultModel : config2.models[tier];
127825
127839
  }
@@ -128046,7 +128060,7 @@ function completeEffortSuffix(model, request7, config2) {
128046
128060
  if (splitEffortSuffix(model) !== void 0) {
128047
128061
  return model;
128048
128062
  }
128049
- const configured = [config2.defaultModel, ...Object.values(config2.models)];
128063
+ const configured = [config2.defaultModel, ...Object.values(config2.models), ...config2.aliases.values()];
128050
128064
  const effort = request7.output_config?.effort;
128051
128065
  const level = ANTIGRAVITY_EFFORTS.find((candidate) => candidate === effort) ?? config2.effort;
128052
128066
  const suffixed = `${model}-${effortSuffixOf(level)}`;
@@ -128092,6 +128106,19 @@ function findBucket(quota, keys) {
128092
128106
  }
128093
128107
  return void 0;
128094
128108
  }
128109
+ var QUOTA_FAMILY_WINDOWS = [
128110
+ { label: "Gem 5h", keys: GEMINI_5H_KEYS },
128111
+ { label: "Gem Wk", keys: GEMINI_WEEKLY_KEYS },
128112
+ { label: "3P 5h", keys: THIRD_PARTY_5H_KEYS },
128113
+ { label: "3P Wk", keys: THIRD_PARTY_WEEKLY_KEYS },
128114
+ { label: "Argon Wk", keys: ARGON_WEEKLY_KEYS }
128115
+ ];
128116
+ function antigravityFamilyBuckets(quota) {
128117
+ return QUOTA_FAMILY_WINDOWS.flatMap(({ label, keys }) => {
128118
+ const bucket = findBucket(quota, keys);
128119
+ return bucket === void 0 ? [] : [{ label, bucket }];
128120
+ });
128121
+ }
128095
128122
  function selectAntigravityBuckets(quota, model) {
128096
128123
  const lower = (model ?? "").toLowerCase();
128097
128124
  if (lower.includes("argon")) {
@@ -133473,13 +133500,12 @@ function payloadWindowsOf(payload) {
133473
133500
  const seven = isObject4(rateLimits) ? payloadWindow(rateLimits, "seven_day") : void 0;
133474
133501
  return { fiveHourUsed: five?.used, fiveHourResetAt: five?.resetAt, sevenDayUsed: seven?.used, sevenDayResetAt: seven?.resetAt };
133475
133502
  }
133476
- function antigravityWindowsOf(payload, nowMs) {
133503
+ function antigravityQuotaMapOf(payload) {
133477
133504
  const quota = isObject4(payload) ? payload.quota : void 0;
133478
133505
  if (!isObject4(quota)) {
133479
- return { fiveHourUsed: void 0, fiveHourResetAt: void 0, sevenDayUsed: void 0, sevenDayResetAt: void 0 };
133506
+ return void 0;
133480
133507
  }
133481
- const model = isObject4(payload) && isObject4(payload.model) && typeof payload.model.id === "string" ? payload.model.id : void 0;
133482
- const buckets = Object.fromEntries(
133508
+ return Object.fromEntries(
133483
133509
  Object.entries(quota).flatMap(([key, bucket]) => {
133484
133510
  if (!isObject4(bucket)) {
133485
133511
  return [];
@@ -133489,15 +133515,30 @@ function antigravityWindowsOf(payload, nowMs) {
133489
133515
  return [[key, { ...typeof remaining === "number" ? { remaining_fraction: remaining } : {}, ...typeof resetIn === "number" ? { reset_in_seconds: resetIn } : {} }]];
133490
133516
  })
133491
133517
  );
133492
- const { fiveHour, weekly } = selectAntigravityBuckets(buckets, model);
133493
- const windowOf2 = (bucket) => ({
133518
+ }
133519
+ function bucketView(bucket, nowMs) {
133520
+ return {
133494
133521
  used: bucket?.remaining_fraction === void 0 || !Number.isFinite(bucket.remaining_fraction) ? void 0 : (1 - Math.min(1, Math.max(0, bucket.remaining_fraction))) * FULL_PERCENT,
133495
133522
  resetAt: bucket?.reset_in_seconds === void 0 || !Number.isFinite(bucket.reset_in_seconds) ? void 0 : new Date(nowMs + bucket.reset_in_seconds * MS_PER_SECOND14).toISOString()
133496
- });
133497
- const five = windowOf2(fiveHour);
133498
- const seven = windowOf2(weekly);
133523
+ };
133524
+ }
133525
+ function antigravityWindowsOf(payload, nowMs) {
133526
+ const buckets = antigravityQuotaMapOf(payload);
133527
+ if (buckets === void 0) {
133528
+ return { fiveHourUsed: void 0, fiveHourResetAt: void 0, sevenDayUsed: void 0, sevenDayResetAt: void 0 };
133529
+ }
133530
+ const model = isObject4(payload) && isObject4(payload.model) && typeof payload.model.id === "string" ? payload.model.id : void 0;
133531
+ const { fiveHour, weekly } = selectAntigravityBuckets(buckets, model);
133532
+ const five = bucketView(fiveHour, nowMs);
133533
+ const seven = bucketView(weekly, nowMs);
133499
133534
  return { fiveHourUsed: five.used, fiveHourResetAt: five.resetAt, sevenDayUsed: seven.used, sevenDayResetAt: seven.resetAt };
133500
133535
  }
133536
+ function quotaFamiliesOf(buckets, nowMs) {
133537
+ return antigravityFamilyBuckets(buckets).flatMap(({ label, bucket }) => {
133538
+ const { used, resetAt } = bucketView(bucket, nowMs);
133539
+ return used === void 0 ? [] : [{ measures: label, utilization: used / FULL_PERCENT, resetsAt: resetAt }];
133540
+ });
133541
+ }
133501
133542
  function enrichStatuslinePayload(params) {
133502
133543
  const identity = identityOf(params.env);
133503
133544
  const clientEmail = isObject4(params.payload) && typeof params.payload.email === "string" && params.payload.email !== "" ? params.payload.email : void 0;
@@ -133520,6 +133561,7 @@ function enrichStatuslinePayload(params) {
133520
133561
  sevenDayUsed: void 0,
133521
133562
  sevenDayResetAt: void 0,
133522
133563
  providerQuotaWindows: [],
133564
+ quotaFamilies: [],
133523
133565
  headroom: params.headroom
133524
133566
  };
133525
133567
  if (params.snapshot !== void 0) {
@@ -133545,9 +133587,22 @@ function enrichStatuslinePayload(params) {
133545
133587
  }
133546
133588
  }
133547
133589
  const providerQuotaWindows = [...scopedState?.quota?.windows ?? []].sort((a10, b) => (a10.periodMs ?? Number.POSITIVE_INFINITY) - (b.periodMs ?? Number.POSITIVE_INFINITY)).map((window) => ({ measures: window.measures, utilization: window.utilization, resetsAt: window.resetsAt }));
133548
- summary = { ...summary, ...windowsOf(states), providerAccountEmail: email3, providerAccountSub: sub, providerPlan: plan, providerQuotaWindows };
133590
+ const providerBuckets = Object.fromEntries(
133591
+ (scopedState?.quota?.windows ?? []).map((window) => [
133592
+ window.measures,
133593
+ {
133594
+ remaining_fraction: 1 - window.utilization,
133595
+ ...window.resetsAt === void 0 ? {} : { reset_in_seconds: (Date.parse(window.resetsAt) - params.nowMs) / MS_PER_SECOND14 }
133596
+ }
133597
+ ])
133598
+ );
133599
+ summary = { ...summary, ...windowsOf(states), providerAccountEmail: email3, providerAccountSub: sub, providerPlan: plan, providerQuotaWindows, quotaFamilies: quotaFamiliesOf(providerBuckets, params.nowMs) };
133549
133600
  }
133550
133601
  if (summary.provider === void 0) {
133602
+ const agyBuckets = antigravityQuotaMapOf(params.payload);
133603
+ if (agyBuckets !== void 0) {
133604
+ summary = { ...summary, quotaFamilies: quotaFamiliesOf(agyBuckets, params.nowMs) };
133605
+ }
133551
133606
  for (const own2 of [antigravityWindowsOf(params.payload, params.nowMs), payloadWindowsOf(params.payload)]) {
133552
133607
  summary = {
133553
133608
  ...summary,
@@ -133891,22 +133946,26 @@ function renderStatuslineBlock(summary, view, terminalWidth, nowMs) {
133891
133946
  contextGroup.push(new Segment("bar", "", `Ctx ${tokens}`, ` ${percent2}${cache}`, fraction, true));
133892
133947
  }
133893
133948
  const quotaGroup = [];
133894
- if (summary.fiveHourUsed !== void 0) {
133895
- const fraction = Math.max(0, Math.min(1, summary.fiveHourUsed / FULL_PERCENT2));
133896
- const color = statusColor(fraction, true);
133897
- quotaGroup.push(new Segment("bar", "", "5h ", ` ${color}${summary.fiveHourUsed.toFixed(1)}%${RESET} (${formatDuration(secondsUntil(summary.fiveHourResetAt, nowMs))})`, fraction, true));
133898
- }
133899
- if (summary.sevenDayUsed !== void 0) {
133900
- const fraction = Math.max(0, Math.min(1, summary.sevenDayUsed / FULL_PERCENT2));
133901
- const color = statusColor(fraction, true);
133902
- quotaGroup.push(new Segment("bar", "", "Wk ", ` ${color}${summary.sevenDayUsed.toFixed(1)}%${RESET} (${formatDuration(secondsUntil(summary.sevenDayResetAt, nowMs))})`, fraction, true));
133903
- }
133904
- if (summary.fiveHourUsed === void 0 && summary.sevenDayUsed === void 0) {
133905
- for (const window of summary.providerQuotaWindows) {
133906
- const used = window.utilization * FULL_PERCENT2;
133907
- const fraction = Math.max(0, Math.min(1, window.utilization));
133908
- const color = statusColor(fraction, true);
133909
- quotaGroup.push(new Segment("bar", "", `${window.measures} `, ` ${color}${used.toFixed(1)}%${RESET} (${formatDuration(secondsUntil(window.resetsAt, nowMs))})`, fraction, true));
133949
+ const drawWindow = (label, fraction, resetsAt) => {
133950
+ const clamped = Math.max(0, Math.min(1, fraction));
133951
+ const color = statusColor(clamped, true);
133952
+ quotaGroup.push(new Segment("bar", "", `${label} `, ` ${color}${(fraction * FULL_PERCENT2).toFixed(1)}%${RESET} (${formatDuration(secondsUntil(resetsAt, nowMs))})`, clamped, true));
133953
+ };
133954
+ if (summary.quotaFamilies.length > 0) {
133955
+ for (const window of summary.quotaFamilies) {
133956
+ drawWindow(window.measures, window.utilization, window.resetsAt);
133957
+ }
133958
+ } else {
133959
+ if (summary.fiveHourUsed !== void 0) {
133960
+ drawWindow("5h", summary.fiveHourUsed / FULL_PERCENT2, summary.fiveHourResetAt);
133961
+ }
133962
+ if (summary.sevenDayUsed !== void 0) {
133963
+ drawWindow("Wk", summary.sevenDayUsed / FULL_PERCENT2, summary.sevenDayResetAt);
133964
+ }
133965
+ if (summary.fiveHourUsed === void 0 && summary.sevenDayUsed === void 0) {
133966
+ for (const window of summary.providerQuotaWindows) {
133967
+ drawWindow(window.measures, window.utilization, window.resetsAt);
133968
+ }
133910
133969
  }
133911
133970
  }
133912
133971
  const width = Math.max(TWENTY, terminalWidth - RESERVED_COLUMNS);
@@ -145055,7 +145114,7 @@ function registerProviderCommand(program2, deps) {
145055
145114
  new Option("--credential-target <target>", "Where the token goes: bearer sets ANTHROPIC_AUTH_TOKEN (default), apiKey sets ANTHROPIC_API_KEY.").choices(
145056
145115
  PROVIDER_CREDENTIAL_TARGETS
145057
145116
  )
145058
- ).option("--env <KEY=VALUE>", "Extra environment entry for the child (repeatable).", collectStringPair).option("--codex-default-model <model>", "Codex providers: the codex model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: the codex model one tier (fable, opus, sonnet or haiku) maps to (repeatable).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: the reasoning effort when a request asks for none the backend accepts.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: which login the upstream call uses, the Codex CLI's own login or a Sign in with ChatGPT grant from `agent-shim codex login`.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: the model one tier (fable, opus, sonnet or haiku) maps to (repeatable).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.").option("--json", "Print the result as JSON.").action((name, options) => {
145117
+ ).option("--env <KEY=VALUE>", "Extra environment entry for the child (repeatable).", collectStringPair).option("--codex-default-model <model>", "Codex providers: the codex model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: the codex model one tier (fable, opus, sonnet or haiku) maps to (repeatable).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: the reasoning effort when a request asks for none the backend accepts.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: which login the upstream call uses, the Codex CLI's own login or a Sign in with ChatGPT grant from `agent-shim codex login`.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: the model a tier (fable, opus, sonnet or haiku, matched by substring) or an alias (any other name, matched whole, selectable with /model) maps to (repeatable).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.").option("--json", "Print the result as JSON.").action((name, options) => {
145059
145118
  const codex = codexConfigFromOptions(options);
145060
145119
  const antigravity = antigravityConfigFromOptions(options);
145061
145120
  const created = addProvider(paths, name, {
@@ -145167,6 +145226,9 @@ function registerProviderCommand(program2, deps) {
145167
145226
  const config2 = resolveAntigravityConfig(found.antigravity);
145168
145227
  console.log(`Antigravity mode: ${config2.mode}`);
145169
145228
  console.log(`Antigravity models: ${ANTIGRAVITY_TIERS.map((tier) => `${tier}=${config2.models[tier]}`).join(", ")}, otherwise ${config2.defaultModel}`);
145229
+ if (config2.aliases.size > 0) {
145230
+ console.log(`Antigravity aliases: ${[...config2.aliases].map(([alias, model]) => `${alias}=${model}`).join(", ")}`);
145231
+ }
145170
145232
  console.log(`Antigravity effort: ${config2.effort}`);
145171
145233
  console.log(`Endpoint: ${describeProviderEndpoint(found)}`);
145172
145234
  } else {
package/dist/index.cjs CHANGED
@@ -356,13 +356,8 @@ var init_schema = __esm({
356
356
  mode: import_zod.z.enum(ANTIGRAVITY_MODES).optional(),
357
357
  /** The model a request maps to when no tier matches its model name. */
358
358
  defaultModel: import_zod.z.string().min(1).optional(),
359
- /** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `ANTIGRAVITY_TIERS` order. */
360
- models: import_zod.z.strictObject({
361
- fable: import_zod.z.string().min(1).optional(),
362
- opus: import_zod.z.string().min(1).optional(),
363
- sonnet: import_zod.z.string().min(1).optional(),
364
- haiku: import_zod.z.string().min(1).optional()
365
- }).optional(),
359
+ /** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `ANTIGRAVITY_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. */
360
+ models: import_zod.z.record(import_zod.z.string().min(1), import_zod.z.string().min(1)).optional(),
366
361
  /** The reasoning effort used when the request's own effort is not one the backend accepts. */
367
362
  effort: import_zod.z.enum(ANTIGRAVITY_EFFORTS).optional(),
368
363
  /** Cloud-specific settings (for `mode: "cloud"`). */
@@ -2841,7 +2836,7 @@ var init_package = __esm({
2841
2836
  "package.json"() {
2842
2837
  package_default = {
2843
2838
  name: "claude-use",
2844
- version: "11.15.0",
2839
+ version: "11.16.0",
2845
2840
  description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
2846
2841
  license: "MIT",
2847
2842
  author: "Joseph Mearman <joseph@mearman.co.uk>",
package/dist/index.mjs CHANGED
@@ -334,13 +334,8 @@ var init_schema = __esm({
334
334
  mode: z.enum(ANTIGRAVITY_MODES).optional(),
335
335
  /** The model a request maps to when no tier matches its model name. */
336
336
  defaultModel: z.string().min(1).optional(),
337
- /** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `ANTIGRAVITY_TIERS` order. */
338
- models: z.strictObject({
339
- fable: z.string().min(1).optional(),
340
- opus: z.string().min(1).optional(),
341
- sonnet: z.string().min(1).optional(),
342
- haiku: z.string().min(1).optional()
343
- }).optional(),
337
+ /** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `ANTIGRAVITY_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. */
338
+ models: z.record(z.string().min(1), z.string().min(1)).optional(),
344
339
  /** The reasoning effort used when the request's own effort is not one the backend accepts. */
345
340
  effort: z.enum(ANTIGRAVITY_EFFORTS).optional(),
346
341
  /** Cloud-specific settings (for `mode: "cloud"`). */
@@ -2817,7 +2812,7 @@ var init_package = __esm({
2817
2812
  "package.json"() {
2818
2813
  package_default = {
2819
2814
  name: "claude-use",
2820
- version: "11.15.0",
2815
+ version: "11.16.0",
2821
2816
  description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
2822
2817
  license: "MIT",
2823
2818
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -390,12 +390,7 @@ declare const AntigravityProviderConfigSchema: z.ZodObject<{
390
390
  local: "local";
391
391
  }>>;
392
392
  defaultModel: z.ZodOptional<z.ZodString>;
393
- models: z.ZodOptional<z.ZodObject<{
394
- fable: z.ZodOptional<z.ZodString>;
395
- opus: z.ZodOptional<z.ZodString>;
396
- sonnet: z.ZodOptional<z.ZodString>;
397
- haiku: z.ZodOptional<z.ZodString>;
398
- }, z.core.$strict>>;
393
+ models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
399
394
  effort: z.ZodOptional<z.ZodEnum<{
400
395
  none: "none";
401
396
  max: "max";
@@ -661,12 +656,7 @@ declare const ProviderSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
661
656
  local: "local";
662
657
  }>>;
663
658
  defaultModel: z.ZodOptional<z.ZodString>;
664
- models: z.ZodOptional<z.ZodObject<{
665
- fable: z.ZodOptional<z.ZodString>;
666
- opus: z.ZodOptional<z.ZodString>;
667
- sonnet: z.ZodOptional<z.ZodString>;
668
- haiku: z.ZodOptional<z.ZodString>;
669
- }, z.core.$strict>>;
659
+ models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
670
660
  effort: z.ZodOptional<z.ZodEnum<{
671
661
  none: "none";
672
662
  max: "max";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-use",
3
- "version": "11.15.0",
3
+ "version": "11.16.0",
4
4
  "description": "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
5
5
  "license": "MIT",
6
6
  "author": "Joseph Mearman <joseph@mearman.co.uk>",