claude-use 11.40.0 → 11.40.2

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
@@ -34636,7 +34636,7 @@ var init_package = __esm({
34636
34636
  "package.json"() {
34637
34637
  package_default = {
34638
34638
  name: "claude-use",
34639
- version: "11.40.0",
34639
+ version: "11.40.2",
34640
34640
  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.",
34641
34641
  license: "MIT",
34642
34642
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -64176,6 +64176,131 @@ var init_launchReport = __esm({
64176
64176
  }
64177
64177
  });
64178
64178
 
64179
+ // src/models/identity.ts
64180
+ function withoutContextMarker(model) {
64181
+ return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
64182
+ }
64183
+ function canonicalText(name) {
64184
+ return name.trim().toLowerCase().replace(NON_IDENTITY_BRACKET_RE, "").replace(/[\s_]+/g, "-").replace(/([a-z])(\d+(?:\.\d+)+)/g, "$1-$2").replace(/-+/g, "-").replace(/^-|-$/g, "");
64185
+ }
64186
+ function splitVariants(tokens) {
64187
+ const variants = [];
64188
+ let end = tokens.length;
64189
+ for (; ; ) {
64190
+ const token = tokens[end - 1];
64191
+ if (token === void 0 || !KNOWN_VARIANTS.has(token)) {
64192
+ return { familyTokens: tokens.slice(0, end), variants };
64193
+ }
64194
+ variants.unshift(token);
64195
+ end -= 1;
64196
+ }
64197
+ }
64198
+ function versionOf(tokens) {
64199
+ for (let index = 0; index < tokens.length; index += 1) {
64200
+ const token = tokens[index];
64201
+ const next = tokens[index + 1];
64202
+ if (token === void 0) {
64203
+ return "";
64204
+ }
64205
+ if (/^\d+$/.test(token) && next !== void 0 && /^\d+$/.test(next)) {
64206
+ return `${token}.${next}`;
64207
+ }
64208
+ const dotted = /^\d+(?:\.\d+)+$/.exec(token);
64209
+ if (dotted !== null) {
64210
+ return dotted[0];
64211
+ }
64212
+ }
64213
+ return "";
64214
+ }
64215
+ function modelIdentity(rawName) {
64216
+ const segments = rawName.trim().toLowerCase().split("/");
64217
+ const stripped = canonicalText(segments[segments.length - 1] ?? "").split(":")[0] ?? "";
64218
+ const withoutDate = stripped.replace(DATE_STAMP_RE, "");
64219
+ const tokens = withoutDate.split("-").filter((token) => token !== "");
64220
+ const { familyTokens, variants } = splitVariants(tokens);
64221
+ const version2 = versionOf(familyTokens);
64222
+ const versionless = familyTokens.filter((token, index) => {
64223
+ if (version2 === "") {
64224
+ return true;
64225
+ }
64226
+ const dotted = /^\d+(?:\.\d+)+$/.test(token);
64227
+ const previous = familyTokens[index - 1];
64228
+ const next = familyTokens[index + 1];
64229
+ const insideVersionRun = dotted || /^\d+$/.test(token) && (previous !== void 0 && /^\d+$/.test(previous) || next !== void 0 && /^\d+$/.test(next));
64230
+ return !insideVersionRun;
64231
+ });
64232
+ const family = versionless.join("-");
64233
+ const tokenVendor = familyTokens.find((token) => Object.keys(VENDOR_BY_TOKEN).some((key) => token === key || token.startsWith(key)));
64234
+ const namespace = segments.length >= 2 ? (segments[0] ?? "").split(":").pop() ?? "" : "";
64235
+ const namespaceVendor = VENDOR_BY_NAMESPACE[namespace] ?? "";
64236
+ const tokenVendorName = tokenVendor === void 0 ? "" : VENDOR_BY_TOKEN[Object.keys(VENDOR_BY_TOKEN).find((key) => tokenVendor === key || tokenVendor.startsWith(key)) ?? ""] ?? "";
64237
+ return {
64238
+ vendor: tokenVendorName === "" ? namespaceVendor : tokenVendorName,
64239
+ vendorConflict: tokenVendorName !== "" && namespaceVendor !== "" && tokenVendorName !== namespaceVendor,
64240
+ family,
64241
+ version: version2,
64242
+ variant: variants.join("-"),
64243
+ familyAndVersion: version2 === "" ? family : `${family}-${version2.replace(/\./g, "-")}`
64244
+ };
64245
+ }
64246
+ function relateModels(left, right) {
64247
+ const a10 = modelIdentity(left);
64248
+ const b = modelIdentity(right);
64249
+ if (a10.familyAndVersion !== b.familyAndVersion) {
64250
+ return sameFamilyOtherVersion(a10, b) ? "similar" : "distinct";
64251
+ }
64252
+ if (a10.variant !== b.variant || a10.vendorConflict || b.vendorConflict || a10.vendor !== "" && b.vendor !== "" && a10.vendor !== b.vendor) {
64253
+ return "similar";
64254
+ }
64255
+ return "same";
64256
+ }
64257
+ function sameFamilyOtherVersion(a10, b) {
64258
+ if (a10.family !== b.family) {
64259
+ return false;
64260
+ }
64261
+ if (a10.vendor !== "" && b.vendor !== "" && a10.vendor !== b.vendor) {
64262
+ return false;
64263
+ }
64264
+ return true;
64265
+ }
64266
+ var NON_IDENTITY_BRACKET_RE, CONTEXT_MARKER_1M, DATE_STAMP_RE, KNOWN_VARIANTS, VENDOR_BY_NAMESPACE, VENDOR_BY_TOKEN;
64267
+ var init_identity2 = __esm({
64268
+ "src/models/identity.ts"() {
64269
+ "use strict";
64270
+ NON_IDENTITY_BRACKET_RE = /\[[^\]]*\]/g;
64271
+ CONTEXT_MARKER_1M = "[1m]";
64272
+ DATE_STAMP_RE = /-(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])$/;
64273
+ KNOWN_VARIANTS = /* @__PURE__ */ new Set(["high", "medium", "low", "thinking", "xhigh", "max", "highspeed", "sol", "terra", "luna", "mini", "flash-lite", "turbo"]);
64274
+ VENDOR_BY_NAMESPACE = Object.freeze({
64275
+ anthropic: "anthropic",
64276
+ google: "google",
64277
+ openai: "openai",
64278
+ zai: "zai",
64279
+ "z-ai": "zai",
64280
+ minimax: "minimax",
64281
+ qwen: "qwen",
64282
+ deepseek: "deepseek",
64283
+ moonshot: "moonshot",
64284
+ meta: "meta",
64285
+ mistral: "mistral"
64286
+ });
64287
+ VENDOR_BY_TOKEN = Object.freeze({
64288
+ claude: "anthropic",
64289
+ gemini: "google",
64290
+ antigravity: "google",
64291
+ gpt: "openai",
64292
+ glm: "zai",
64293
+ minimax: "minimax",
64294
+ qwen: "qwen",
64295
+ deepseek: "deepseek",
64296
+ kimi: "moonshot",
64297
+ llama: "meta",
64298
+ mistral: "mistral",
64299
+ mixtral: "mistral"
64300
+ });
64301
+ }
64302
+ });
64303
+
64179
64304
  // src/selection/engine.ts
64180
64305
  function compareMaybe(left, right, preferHigh) {
64181
64306
  if (left === void 0 && right === void 0) {
@@ -64843,7 +64968,7 @@ function isBackendModelName(name) {
64843
64968
  return BACKEND_FAMILY_PREFIXES.some((prefix) => name.startsWith(prefix)) || BACKEND_CLAUDE_NAME.test(name);
64844
64969
  }
64845
64970
  function resolveName(requested, config2) {
64846
- const stripped = requested.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? requested.slice(0, -CONTEXT_MARKER_1M.length) : requested;
64971
+ const stripped = withoutContextMarker(requested);
64847
64972
  const lower = stripped.toLowerCase();
64848
64973
  const alias = config2.aliases.get(lower);
64849
64974
  if (alias !== void 0) {
@@ -65079,11 +65204,12 @@ function translateRequest(request7, config2, routing) {
65079
65204
  toolNames
65080
65205
  };
65081
65206
  }
65082
- var import_node_crypto16, SECONDS_PER_HOUR2, NEUTRAL_PRESSURE, AUTO_ALIAS, CONTEXT_MARKER_1M, BACKEND_FAMILY_PREFIXES, BACKEND_CLAUDE_NAME, EFFORT_TO_BUDGET, BILLING_HEADER_LINE, ANTIGRAVITY_TOOL_NAME_LIMIT, TOOL_NAME_HASH_CHARS, NON_TEXT_TOOL_RESULT, EMPTY_SCHEMA, EFFORT_SUFFIXES;
65207
+ var import_node_crypto16, SECONDS_PER_HOUR2, NEUTRAL_PRESSURE, AUTO_ALIAS, BACKEND_FAMILY_PREFIXES, BACKEND_CLAUDE_NAME, EFFORT_TO_BUDGET, BILLING_HEADER_LINE, ANTIGRAVITY_TOOL_NAME_LIMIT, TOOL_NAME_HASH_CHARS, NON_TEXT_TOOL_RESULT, EMPTY_SCHEMA, EFFORT_SUFFIXES;
65083
65208
  var init_translate = __esm({
65084
65209
  "src/antigravity/translate.ts"() {
65085
65210
  "use strict";
65086
65211
  import_node_crypto16 = require("node:crypto");
65212
+ init_identity2();
65087
65213
  init_engine();
65088
65214
  init_quota();
65089
65215
  init_signatures();
@@ -65092,7 +65218,6 @@ var init_translate = __esm({
65092
65218
  SECONDS_PER_HOUR2 = 3600;
65093
65219
  NEUTRAL_PRESSURE = 1;
65094
65220
  AUTO_ALIAS = "auto";
65095
- CONTEXT_MARKER_1M = "[1m]";
65096
65221
  BACKEND_FAMILY_PREFIXES = ["gemini-", "antigravity-", "gpt-oss-"];
65097
65222
  BACKEND_CLAUDE_NAME = /^claude-.+-(?:low|medium|high|thinking)$/;
65098
65223
  EFFORT_TO_BUDGET = {
@@ -65401,10 +65526,10 @@ var init_providerCatalogue = __esm({
65401
65526
 
65402
65527
  // src/launcher/modelPicker.ts
65403
65528
  function labelOf(model) {
65404
- return model.toLowerCase().endsWith(CONTEXT_MARKER_1M2) ? model.slice(0, -CONTEXT_MARKER_1M2.length) : model;
65529
+ return withoutContextMarker(model);
65405
65530
  }
65406
65531
  function describedAs(model, description) {
65407
- return model.toLowerCase().endsWith(CONTEXT_MARKER_1M2) ? `${description}; 1M context` : description;
65532
+ return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? `${description}; 1M context` : description;
65408
65533
  }
65409
65534
  function joined(parts) {
65410
65535
  const last = parts[parts.length - 1];
@@ -65490,9 +65615,8 @@ function routedModelRows(models, providers) {
65490
65615
  if (provider.kind !== void 0 && provider.kind !== "http") {
65491
65616
  continue;
65492
65617
  }
65493
- const env = provider.env ?? {};
65494
- const match = Object.entries(env).find(([, value2]) => value2 === model);
65495
- if (match?.[0].endsWith("_MODEL") === true) {
65618
+ const match = Object.entries(provider.env ?? {}).find(([key, value2]) => value2 === model && key.startsWith("ANTHROPIC_DEFAULT_") && key.endsWith("_MODEL"));
65619
+ if (match !== void 0) {
65496
65620
  const tier = match[0].replace("ANTHROPIC_DEFAULT_", "").replace("_MODEL", "").toLowerCase();
65497
65621
  return tier === "fable" || tier === "opus" || tier === "sonnet" || tier === "haiku" ? tier : void 0;
65498
65622
  }
@@ -65517,7 +65641,7 @@ function modelPickerSettings(provider, catalogue = []) {
65517
65641
  function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
65518
65642
  return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
65519
65643
  }
65520
- var CONTEXT_MARKER_1M2, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
65644
+ var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
65521
65645
  var init_modelPicker = __esm({
65522
65646
  "src/launcher/modelPicker.ts"() {
65523
65647
  "use strict";
@@ -65525,7 +65649,7 @@ var init_modelPicker = __esm({
65525
65649
  init_translate2();
65526
65650
  init_providerCatalogue();
65527
65651
  init_schema();
65528
- CONTEXT_MARKER_1M2 = "[1m]";
65652
+ init_identity2();
65529
65653
  TIER_BEHAVES_AS = Object.freeze({
65530
65654
  fable: "claude-fable-5-1",
65531
65655
  opus: "claude-opus-5-5",
@@ -131423,6 +131547,7 @@ function candidateOf(ref, order, facts, isCurrent) {
131423
131547
 
131424
131548
  // src/frontdoor/providerRoute.ts
131425
131549
  init_engine();
131550
+ init_identity2();
131426
131551
  init_route();
131427
131552
  var import_node_stream3 = require("node:stream");
131428
131553
 
@@ -131518,7 +131643,7 @@ function resolveRoutedModel(model, providerName, session, includeUnqualified, de
131518
131643
  if (qualified !== void 0) {
131519
131644
  const [provider2, ...rest2] = qualified.split("/");
131520
131645
  const named = rest2.join("/");
131521
- return provider2 === void 0 || named === "" ? void 0 : { provider: provider2, model: named, ref: qualified };
131646
+ return provider2 === void 0 || named === "" ? void 0 : { provider: provider2, model: withoutContextMarker(named), ref: qualified };
131522
131647
  }
131523
131648
  const virtual = models?.virtual?.[model];
131524
131649
  if (virtual === void 0 || !includeUnqualified) {
@@ -131548,7 +131673,7 @@ function resolveRoutedModel(model, providerName, session, includeUnqualified, de
131548
131673
  }
131549
131674
  const [provider, ...rest] = selection.ref.split("/");
131550
131675
  const chosen = rest.join("/");
131551
- return provider === void 0 || chosen === "" ? void 0 : { provider, model: chosen, ref: selection.ref };
131676
+ return provider === void 0 || chosen === "" ? void 0 : { provider, model: withoutContextMarker(chosen), ref: selection.ref };
131552
131677
  }
131553
131678
  function resolveAccountTarget(model, models) {
131554
131679
  if (model.startsWith("acct:")) {
@@ -147521,123 +147646,7 @@ init_providerCatalogue();
147521
147646
  init_realPorts();
147522
147647
  init_schema();
147523
147648
  init_cliError();
147524
-
147525
- // src/models/identity.ts
147526
- var NON_IDENTITY_BRACKET_RE = /\[[^\]]*\]/g;
147527
- var DATE_STAMP_RE = /-(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])$/;
147528
- var KNOWN_VARIANTS = /* @__PURE__ */ new Set(["high", "medium", "low", "thinking", "xhigh", "max", "highspeed", "sol", "terra", "luna", "mini", "flash-lite", "turbo"]);
147529
- var VENDOR_BY_NAMESPACE = Object.freeze({
147530
- anthropic: "anthropic",
147531
- google: "google",
147532
- openai: "openai",
147533
- zai: "zai",
147534
- "z-ai": "zai",
147535
- minimax: "minimax",
147536
- qwen: "qwen",
147537
- deepseek: "deepseek",
147538
- moonshot: "moonshot",
147539
- meta: "meta",
147540
- mistral: "mistral"
147541
- });
147542
- var VENDOR_BY_TOKEN = Object.freeze({
147543
- claude: "anthropic",
147544
- gemini: "google",
147545
- antigravity: "google",
147546
- gpt: "openai",
147547
- glm: "zai",
147548
- minimax: "minimax",
147549
- qwen: "qwen",
147550
- deepseek: "deepseek",
147551
- kimi: "moonshot",
147552
- llama: "meta",
147553
- mistral: "mistral",
147554
- mixtral: "mistral"
147555
- });
147556
- function canonicalText(name) {
147557
- return name.trim().toLowerCase().replace(NON_IDENTITY_BRACKET_RE, "").replace(/[\s_]+/g, "-").replace(/([a-z])(\d+(?:\.\d+)+)/g, "$1-$2").replace(/-+/g, "-").replace(/^-|-$/g, "");
147558
- }
147559
- function splitVariants(tokens) {
147560
- const variants = [];
147561
- let end = tokens.length;
147562
- for (; ; ) {
147563
- const token = tokens[end - 1];
147564
- if (token === void 0 || !KNOWN_VARIANTS.has(token)) {
147565
- return { familyTokens: tokens.slice(0, end), variants };
147566
- }
147567
- variants.unshift(token);
147568
- end -= 1;
147569
- }
147570
- }
147571
- function versionOf(tokens) {
147572
- for (let index = 0; index < tokens.length; index += 1) {
147573
- const token = tokens[index];
147574
- const next = tokens[index + 1];
147575
- if (token === void 0) {
147576
- return "";
147577
- }
147578
- if (/^\d+$/.test(token) && next !== void 0 && /^\d+$/.test(next)) {
147579
- return `${token}.${next}`;
147580
- }
147581
- const dotted = /^\d+(?:\.\d+)+$/.exec(token);
147582
- if (dotted !== null) {
147583
- return dotted[0];
147584
- }
147585
- }
147586
- return "";
147587
- }
147588
- function modelIdentity(rawName) {
147589
- const segments = rawName.trim().toLowerCase().split("/");
147590
- const stripped = canonicalText(segments[segments.length - 1] ?? "").split(":")[0] ?? "";
147591
- const withoutDate = stripped.replace(DATE_STAMP_RE, "");
147592
- const tokens = withoutDate.split("-").filter((token) => token !== "");
147593
- const { familyTokens, variants } = splitVariants(tokens);
147594
- const version2 = versionOf(familyTokens);
147595
- const versionless = familyTokens.filter((token, index) => {
147596
- if (version2 === "") {
147597
- return true;
147598
- }
147599
- const dotted = /^\d+(?:\.\d+)+$/.test(token);
147600
- const previous = familyTokens[index - 1];
147601
- const next = familyTokens[index + 1];
147602
- const insideVersionRun = dotted || /^\d+$/.test(token) && (previous !== void 0 && /^\d+$/.test(previous) || next !== void 0 && /^\d+$/.test(next));
147603
- return !insideVersionRun;
147604
- });
147605
- const family = versionless.join("-");
147606
- const tokenVendor = familyTokens.find((token) => Object.keys(VENDOR_BY_TOKEN).some((key) => token === key || token.startsWith(key)));
147607
- const namespace = segments.length >= 2 ? (segments[0] ?? "").split(":").pop() ?? "" : "";
147608
- const namespaceVendor = VENDOR_BY_NAMESPACE[namespace] ?? "";
147609
- const tokenVendorName = tokenVendor === void 0 ? "" : VENDOR_BY_TOKEN[Object.keys(VENDOR_BY_TOKEN).find((key) => tokenVendor === key || tokenVendor.startsWith(key)) ?? ""] ?? "";
147610
- return {
147611
- vendor: tokenVendorName === "" ? namespaceVendor : tokenVendorName,
147612
- vendorConflict: tokenVendorName !== "" && namespaceVendor !== "" && tokenVendorName !== namespaceVendor,
147613
- family,
147614
- version: version2,
147615
- variant: variants.join("-"),
147616
- familyAndVersion: version2 === "" ? family : `${family}-${version2.replace(/\./g, "-")}`
147617
- };
147618
- }
147619
- function relateModels(left, right) {
147620
- const a10 = modelIdentity(left);
147621
- const b = modelIdentity(right);
147622
- if (a10.familyAndVersion !== b.familyAndVersion) {
147623
- return sameFamilyOtherVersion(a10, b) ? "similar" : "distinct";
147624
- }
147625
- if (a10.variant !== b.variant || a10.vendorConflict || b.vendorConflict || a10.vendor !== "" && b.vendor !== "" && a10.vendor !== b.vendor) {
147626
- return "similar";
147627
- }
147628
- return "same";
147629
- }
147630
- function sameFamilyOtherVersion(a10, b) {
147631
- if (a10.family !== b.family) {
147632
- return false;
147633
- }
147634
- if (a10.vendor !== "" && b.vendor !== "" && a10.vendor !== b.vendor) {
147635
- return false;
147636
- }
147637
- return true;
147638
- }
147639
-
147640
- // src/models.ts
147649
+ init_identity2();
147641
147650
  init_modelsStore();
147642
147651
  init_realPorts();
147643
147652
  init_read();
package/dist/index.cjs CHANGED
@@ -3106,7 +3106,7 @@ var init_package = __esm({
3106
3106
  "package.json"() {
3107
3107
  package_default = {
3108
3108
  name: "claude-use",
3109
- version: "11.40.0",
3109
+ version: "11.40.2",
3110
3110
  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.",
3111
3111
  license: "MIT",
3112
3112
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -8649,6 +8649,45 @@ var init_launchReport = __esm({
8649
8649
  }
8650
8650
  });
8651
8651
 
8652
+ // src/models/identity.ts
8653
+ function withoutContextMarker(model) {
8654
+ return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
8655
+ }
8656
+ var CONTEXT_MARKER_1M, VENDOR_BY_NAMESPACE, VENDOR_BY_TOKEN;
8657
+ var init_identity2 = __esm({
8658
+ "src/models/identity.ts"() {
8659
+ "use strict";
8660
+ CONTEXT_MARKER_1M = "[1m]";
8661
+ VENDOR_BY_NAMESPACE = Object.freeze({
8662
+ anthropic: "anthropic",
8663
+ google: "google",
8664
+ openai: "openai",
8665
+ zai: "zai",
8666
+ "z-ai": "zai",
8667
+ minimax: "minimax",
8668
+ qwen: "qwen",
8669
+ deepseek: "deepseek",
8670
+ moonshot: "moonshot",
8671
+ meta: "meta",
8672
+ mistral: "mistral"
8673
+ });
8674
+ VENDOR_BY_TOKEN = Object.freeze({
8675
+ claude: "anthropic",
8676
+ gemini: "google",
8677
+ antigravity: "google",
8678
+ gpt: "openai",
8679
+ glm: "zai",
8680
+ minimax: "minimax",
8681
+ qwen: "qwen",
8682
+ deepseek: "deepseek",
8683
+ kimi: "moonshot",
8684
+ llama: "meta",
8685
+ mistral: "mistral",
8686
+ mixtral: "mistral"
8687
+ });
8688
+ }
8689
+ });
8690
+
8652
8691
  // src/selection/engine.ts
8653
8692
  var init_engine = __esm({
8654
8693
  "src/selection/engine.ts"() {
@@ -8790,6 +8829,7 @@ var AUTO_ALIAS;
8790
8829
  var init_translate = __esm({
8791
8830
  "src/antigravity/translate.ts"() {
8792
8831
  "use strict";
8832
+ init_identity2();
8793
8833
  init_engine();
8794
8834
  init_quota();
8795
8835
  init_signatures();
@@ -8867,7 +8907,7 @@ var init_providerCatalogue = __esm({
8867
8907
 
8868
8908
  // src/launcher/modelPicker.ts
8869
8909
  function labelOf(model) {
8870
- return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
8910
+ return withoutContextMarker(model);
8871
8911
  }
8872
8912
  function describedAs(model, description) {
8873
8913
  return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? `${description}; 1M context` : description;
@@ -8956,9 +8996,8 @@ function routedModelRows(models, providers) {
8956
8996
  if (provider.kind !== void 0 && provider.kind !== "http") {
8957
8997
  continue;
8958
8998
  }
8959
- const env = provider.env ?? {};
8960
- const match = Object.entries(env).find(([, value]) => value === model);
8961
- if (match?.[0].endsWith("_MODEL") === true) {
8999
+ const match = Object.entries(provider.env ?? {}).find(([key, value]) => value === model && key.startsWith("ANTHROPIC_DEFAULT_") && key.endsWith("_MODEL"));
9000
+ if (match !== void 0) {
8962
9001
  const tier = match[0].replace("ANTHROPIC_DEFAULT_", "").replace("_MODEL", "").toLowerCase();
8963
9002
  return tier === "fable" || tier === "opus" || tier === "sonnet" || tier === "haiku" ? tier : void 0;
8964
9003
  }
@@ -8983,7 +9022,7 @@ function modelPickerSettings(provider, catalogue = []) {
8983
9022
  function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
8984
9023
  return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
8985
9024
  }
8986
- var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
9025
+ var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
8987
9026
  var init_modelPicker = __esm({
8988
9027
  "src/launcher/modelPicker.ts"() {
8989
9028
  "use strict";
@@ -8991,7 +9030,7 @@ var init_modelPicker = __esm({
8991
9030
  init_translate2();
8992
9031
  init_providerCatalogue();
8993
9032
  init_schema();
8994
- CONTEXT_MARKER_1M = "[1m]";
9033
+ init_identity2();
8995
9034
  TIER_BEHAVES_AS = Object.freeze({
8996
9035
  fable: "claude-fable-5-1",
8997
9036
  opus: "claude-opus-5-5",
package/dist/index.mjs CHANGED
@@ -3082,7 +3082,7 @@ var init_package = __esm({
3082
3082
  "package.json"() {
3083
3083
  package_default = {
3084
3084
  name: "claude-use",
3085
- version: "11.40.0",
3085
+ version: "11.40.2",
3086
3086
  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.",
3087
3087
  license: "MIT",
3088
3088
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -8621,6 +8621,45 @@ var init_launchReport = __esm({
8621
8621
  }
8622
8622
  });
8623
8623
 
8624
+ // src/models/identity.ts
8625
+ function withoutContextMarker(model) {
8626
+ return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
8627
+ }
8628
+ var CONTEXT_MARKER_1M, VENDOR_BY_NAMESPACE, VENDOR_BY_TOKEN;
8629
+ var init_identity2 = __esm({
8630
+ "src/models/identity.ts"() {
8631
+ "use strict";
8632
+ CONTEXT_MARKER_1M = "[1m]";
8633
+ VENDOR_BY_NAMESPACE = Object.freeze({
8634
+ anthropic: "anthropic",
8635
+ google: "google",
8636
+ openai: "openai",
8637
+ zai: "zai",
8638
+ "z-ai": "zai",
8639
+ minimax: "minimax",
8640
+ qwen: "qwen",
8641
+ deepseek: "deepseek",
8642
+ moonshot: "moonshot",
8643
+ meta: "meta",
8644
+ mistral: "mistral"
8645
+ });
8646
+ VENDOR_BY_TOKEN = Object.freeze({
8647
+ claude: "anthropic",
8648
+ gemini: "google",
8649
+ antigravity: "google",
8650
+ gpt: "openai",
8651
+ glm: "zai",
8652
+ minimax: "minimax",
8653
+ qwen: "qwen",
8654
+ deepseek: "deepseek",
8655
+ kimi: "moonshot",
8656
+ llama: "meta",
8657
+ mistral: "mistral",
8658
+ mixtral: "mistral"
8659
+ });
8660
+ }
8661
+ });
8662
+
8624
8663
  // src/selection/engine.ts
8625
8664
  var init_engine = __esm({
8626
8665
  "src/selection/engine.ts"() {
@@ -8762,6 +8801,7 @@ var AUTO_ALIAS;
8762
8801
  var init_translate = __esm({
8763
8802
  "src/antigravity/translate.ts"() {
8764
8803
  "use strict";
8804
+ init_identity2();
8765
8805
  init_engine();
8766
8806
  init_quota();
8767
8807
  init_signatures();
@@ -8839,7 +8879,7 @@ var init_providerCatalogue = __esm({
8839
8879
 
8840
8880
  // src/launcher/modelPicker.ts
8841
8881
  function labelOf(model) {
8842
- return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
8882
+ return withoutContextMarker(model);
8843
8883
  }
8844
8884
  function describedAs(model, description) {
8845
8885
  return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? `${description}; 1M context` : description;
@@ -8928,9 +8968,8 @@ function routedModelRows(models, providers) {
8928
8968
  if (provider.kind !== void 0 && provider.kind !== "http") {
8929
8969
  continue;
8930
8970
  }
8931
- const env = provider.env ?? {};
8932
- const match = Object.entries(env).find(([, value]) => value === model);
8933
- if (match?.[0].endsWith("_MODEL") === true) {
8971
+ const match = Object.entries(provider.env ?? {}).find(([key, value]) => value === model && key.startsWith("ANTHROPIC_DEFAULT_") && key.endsWith("_MODEL"));
8972
+ if (match !== void 0) {
8934
8973
  const tier = match[0].replace("ANTHROPIC_DEFAULT_", "").replace("_MODEL", "").toLowerCase();
8935
8974
  return tier === "fable" || tier === "opus" || tier === "sonnet" || tier === "haiku" ? tier : void 0;
8936
8975
  }
@@ -8955,7 +8994,7 @@ function modelPickerSettings(provider, catalogue = []) {
8955
8994
  function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
8956
8995
  return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
8957
8996
  }
8958
- var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
8997
+ var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
8959
8998
  var init_modelPicker = __esm({
8960
8999
  "src/launcher/modelPicker.ts"() {
8961
9000
  "use strict";
@@ -8963,7 +9002,7 @@ var init_modelPicker = __esm({
8963
9002
  init_translate2();
8964
9003
  init_providerCatalogue();
8965
9004
  init_schema();
8966
- CONTEXT_MARKER_1M = "[1m]";
9005
+ init_identity2();
8967
9006
  TIER_BEHAVES_AS = Object.freeze({
8968
9007
  fable: "claude-fable-5-1",
8969
9008
  opus: "claude-opus-5-5",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-use",
3
- "version": "11.40.0",
3
+ "version": "11.40.2",
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>",