claude-use 11.36.0 → 11.38.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
@@ -34635,7 +34635,7 @@ var init_package = __esm({
34635
34635
  "package.json"() {
34636
34636
  package_default = {
34637
34637
  name: "claude-use",
34638
- version: "11.36.0",
34638
+ version: "11.38.0",
34639
34639
  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.",
34640
34640
  license: "MIT",
34641
34641
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -36496,6 +36496,58 @@ function resolveProvider(params) {
36496
36496
  }
36497
36497
  return { ok: true, provider: { name, definition, credential: resolution.credential }, warnings: resolution.credential.warnings };
36498
36498
  }
36499
+ function resolveRoutedProviderCredentials(params) {
36500
+ const { models } = params;
36501
+ if (models === void 0) {
36502
+ return { ok: true, checked: [] };
36503
+ }
36504
+ const virtualNames = new Set(Object.keys(models.virtual ?? {}));
36505
+ const providerNames = /* @__PURE__ */ new Set();
36506
+ const collect = (ref) => {
36507
+ if (ref.startsWith("acct:") || ref.startsWith("family:") || virtualNames.has(ref)) {
36508
+ return;
36509
+ }
36510
+ const [provider] = ref.split("/", 1);
36511
+ if (provider !== void 0 && provider !== "") {
36512
+ providerNames.add(provider);
36513
+ }
36514
+ };
36515
+ for (const model of Object.values(models.virtual ?? {})) {
36516
+ for (const member of model.members) {
36517
+ collect(member);
36518
+ }
36519
+ }
36520
+ for (const ref of Object.values(models.tiers ?? {})) {
36521
+ collect(ref);
36522
+ }
36523
+ if (providerNames.size === 0) {
36524
+ return { ok: true, checked: [] };
36525
+ }
36526
+ if (params.credentials === void 0) {
36527
+ return { ok: false, status: 1, message: `agent-shim: the models block routes to providers ${[...providerNames].sort().join(", ")}, which need their credentials resolved, but this launcher has no credential port wired` };
36528
+ }
36529
+ const failures = [];
36530
+ let credentialFailure = false;
36531
+ for (const name of [...providerNames].sort()) {
36532
+ const definition = loadProvider(params.paths.providersDir, name, params.port);
36533
+ if (definition === void 0) {
36534
+ failures.push(`no provider named "${name}"`);
36535
+ continue;
36536
+ }
36537
+ if (isRouterProvider(definition)) {
36538
+ continue;
36539
+ }
36540
+ const resolution = resolveCredential({ credential: definition.credential, env: params.env, port: params.credentials, subject: `provider ${name}` });
36541
+ if (!resolution.ok) {
36542
+ failures.push(resolution.message.replace(/^agent-shim: /, ""));
36543
+ credentialFailure = true;
36544
+ }
36545
+ }
36546
+ if (failures.length > 0) {
36547
+ return { ok: false, status: credentialFailure ? CREDENTIAL_UNAVAILABLE_EXIT : 1, message: `agent-shim: this launch routes model names through the models block, but: ${failures.join("; ")}` };
36548
+ }
36549
+ return { ok: true, checked: [...providerNames].sort() };
36550
+ }
36499
36551
  var import_node_fs10, import_node_path29, ProviderNotFoundError, ProviderAlreadyExistsError, InvalidProviderNameError, PROVIDER_NAME_RE, LEGACY_PROVIDER_FIELDS, LEGACY_ENV_CREDENTIAL_KEYS, LEGACY_LITERAL_PLACEHOLDER, LegacyProviderFileError, ProviderKindMismatchError;
36500
36552
  var init_providersStore = __esm({
36501
36553
  "src/providersStore.ts"() {
@@ -65437,10 +65489,10 @@ function routedModelRows(models, providers) {
65437
65489
  return [...virtual, ...concrete.filter((row) => visible(row.model))];
65438
65490
  }
65439
65491
  function modelPickerSettings(provider, catalogue = []) {
65440
- return modelPickerSettingsFromRows(providerModelRows(provider, catalogue));
65492
+ return modelPickerSettingsFromRows(providerModelRows(provider, catalogue), true);
65441
65493
  }
65442
- function modelPickerSettingsFromRows(options) {
65443
- return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
65494
+ function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
65495
+ return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
65444
65496
  }
65445
65497
  var CONTEXT_MARKER_1M2, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
65446
65498
  var init_modelPicker = __esm({
@@ -65996,7 +66048,7 @@ function decideLaunch(params, readOnly) {
65996
66048
  const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
65997
66049
  const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
65998
66050
  const routesByName = flags.routeByName || selectedProvider !== void 0 && isRouterProvider(selectedProvider.definition);
65999
- const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider]))) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
66051
+ const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider])), selectedProvider !== void 0) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
66000
66052
  const callerSettings = hasSettingsArgument(parsedArgv.rest);
66001
66053
  if (pickerSettings !== void 0 && callerSettings) {
66002
66054
  notes.push("--settings was passed, so /model keeps Claude Code's own model names");
@@ -66098,6 +66150,14 @@ function prepareLaunch(params) {
66098
66150
  if (decided.pinnedVersion !== void 0) {
66099
66151
  rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
66100
66152
  }
66153
+ const routesByName = resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition);
66154
+ if (routesByName) {
66155
+ const check2 = resolveRoutedProviderCredentials({ paths, port: params.fs, env, ...params.credentials === void 0 ? {} : { credentials: params.credentials }, models: loadConfigFile(paths.globalConfigFile, GlobalConfigSchema, params.fs.readConfigFile)?.config.models });
66156
+ if (!check2.ok) {
66157
+ log.error(check2.message);
66158
+ proc.exit(check2.status);
66159
+ }
66160
+ }
66101
66161
  const frontDoorPort = params.frontdoor;
66102
66162
  const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
66103
66163
  if (frontDoorEngaged && frontDoorPort === void 0) {
@@ -66130,7 +66190,7 @@ function prepareLaunch(params) {
66130
66190
  ...headroom === void 0 ? {} : { headroom },
66131
66191
  sessionId,
66132
66192
  remoteControl: resolvedFlags.remoteControl,
66133
- routeByName: resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition)
66193
+ routeByName: routesByName
66134
66194
  });
66135
66195
  const releases = [...headroom === void 0 || headroomPort === void 0 ? [] : [headroomPort.release], ...frontDoorRelease === void 0 ? [] : [frontDoorRelease]];
66136
66196
  const release = () => {
@@ -66220,9 +66280,11 @@ var init_launcher = __esm({
66220
66280
  init_lock();
66221
66281
  init_spawn();
66222
66282
  init_providersStore();
66283
+ init_load();
66223
66284
  init_flatten();
66224
66285
  init_walk();
66225
66286
  init_schema();
66287
+ init_schema();
66226
66288
  init_credential();
66227
66289
  init_middleware();
66228
66290
  init_preflight();
@@ -131365,19 +131427,20 @@ function createProviderRouteResolver(deps) {
131365
131427
  routes = void 0;
131366
131428
  isRouter = false;
131367
131429
  }
131368
- const routesByName = isRouter || current.session.routeByName && providerName !== void 0;
131430
+ const routesByName = (isRouter || current.session.routeByName) && !isRcSelfHostPath(path65);
131369
131431
  if (routesByName) {
131370
131432
  const scan2 = await scanRequestHead(current, false);
131371
131433
  if (scan2.replayed !== void 0) {
131372
131434
  replay = scan2.replayed;
131373
131435
  }
131374
- const target = scan2.model === void 0 || providerName === void 0 ? void 0 : resolveModelTarget(scan2.model, deps.models?.(), isRouter || current.session.routeByName);
131436
+ const target = scan2.model === void 0 ? void 0 : resolveModelTarget(scan2.model, deps.models?.(), isRouter || current.session.routeByName && providerName !== void 0);
131375
131437
  if (target === providerName) {
131376
131438
  const resolution = resolve2(current);
131377
131439
  return resolution.ok && replay !== void 0 ? { ok: true, route: servingRewritten(resolution.route, { ...replay, url: current.url }), request: { ...replay, url: current.url } } : resolution.ok ? serveScoped(resolution) : resolution;
131378
131440
  }
131379
131441
  if (target !== void 0) {
131380
- const rest2 = path65.slice(`${PROVIDER_PATH_PREFIX}${encodeURIComponent(providerName ?? "")}`.length);
131442
+ const scopedPrefix = providerName === void 0 ? void 0 : `${PROVIDER_PATH_PREFIX}${encodeURIComponent(providerName)}`;
131443
+ const rest2 = scopedPrefix !== void 0 && path65.startsWith(scopedPrefix) ? path65.slice(scopedPrefix.length) : path65;
131381
131444
  const query2 = current.url.includes("?") ? current.url.slice(current.url.indexOf("?")) : "";
131382
131445
  const carried = scan2.replayed ?? current;
131383
131446
  current = { ...current, url: `${PROVIDER_PATH_PREFIX}${encodeURIComponent(target)}${rest2}${query2}`, body: carried.body, headers: carried.headers };
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.36.0",
3109
+ version: "11.38.0",
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>",
@@ -7175,6 +7175,58 @@ function resolveProvider(params) {
7175
7175
  }
7176
7176
  return { ok: true, provider: { name, definition, credential: resolution.credential }, warnings: resolution.credential.warnings };
7177
7177
  }
7178
+ function resolveRoutedProviderCredentials(params) {
7179
+ const { models } = params;
7180
+ if (models === void 0) {
7181
+ return { ok: true, checked: [] };
7182
+ }
7183
+ const virtualNames = new Set(Object.keys(models.virtual ?? {}));
7184
+ const providerNames = /* @__PURE__ */ new Set();
7185
+ const collect = (ref) => {
7186
+ if (ref.startsWith("acct:") || ref.startsWith("family:") || virtualNames.has(ref)) {
7187
+ return;
7188
+ }
7189
+ const [provider] = ref.split("/", 1);
7190
+ if (provider !== void 0 && provider !== "") {
7191
+ providerNames.add(provider);
7192
+ }
7193
+ };
7194
+ for (const model of Object.values(models.virtual ?? {})) {
7195
+ for (const member of model.members) {
7196
+ collect(member);
7197
+ }
7198
+ }
7199
+ for (const ref of Object.values(models.tiers ?? {})) {
7200
+ collect(ref);
7201
+ }
7202
+ if (providerNames.size === 0) {
7203
+ return { ok: true, checked: [] };
7204
+ }
7205
+ if (params.credentials === void 0) {
7206
+ return { ok: false, status: 1, message: `agent-shim: the models block routes to providers ${[...providerNames].sort().join(", ")}, which need their credentials resolved, but this launcher has no credential port wired` };
7207
+ }
7208
+ const failures = [];
7209
+ let credentialFailure = false;
7210
+ for (const name of [...providerNames].sort()) {
7211
+ const definition = loadProvider(params.paths.providersDir, name, params.port);
7212
+ if (definition === void 0) {
7213
+ failures.push(`no provider named "${name}"`);
7214
+ continue;
7215
+ }
7216
+ if (isRouterProvider(definition)) {
7217
+ continue;
7218
+ }
7219
+ const resolution = resolveCredential({ credential: definition.credential, env: params.env, port: params.credentials, subject: `provider ${name}` });
7220
+ if (!resolution.ok) {
7221
+ failures.push(resolution.message.replace(/^agent-shim: /, ""));
7222
+ credentialFailure = true;
7223
+ }
7224
+ }
7225
+ if (failures.length > 0) {
7226
+ return { ok: false, status: credentialFailure ? CREDENTIAL_UNAVAILABLE_EXIT : 1, message: `agent-shim: this launch routes model names through the models block, but: ${failures.join("; ")}` };
7227
+ }
7228
+ return { ok: true, checked: [...providerNames].sort() };
7229
+ }
7178
7230
  var import_node_fs6, import_node_path25, ProviderNotFoundError, ProviderAlreadyExistsError, InvalidProviderNameError, PROVIDER_NAME_RE, LEGACY_PROVIDER_FIELDS, LEGACY_ENV_CREDENTIAL_KEYS, LEGACY_LITERAL_PLACEHOLDER, LegacyProviderFileError, ProviderKindMismatchError;
7179
7231
  var init_providersStore = __esm({
7180
7232
  "src/providersStore.ts"() {
@@ -8903,10 +8955,10 @@ function routedModelRows(models, providers) {
8903
8955
  return [...virtual, ...concrete.filter((row) => visible(row.model))];
8904
8956
  }
8905
8957
  function modelPickerSettings(provider, catalogue = []) {
8906
- return modelPickerSettingsFromRows(providerModelRows(provider, catalogue));
8958
+ return modelPickerSettingsFromRows(providerModelRows(provider, catalogue), true);
8907
8959
  }
8908
- function modelPickerSettingsFromRows(options) {
8909
- return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
8960
+ function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
8961
+ return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
8910
8962
  }
8911
8963
  var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
8912
8964
  var init_modelPicker = __esm({
@@ -9354,7 +9406,7 @@ function decideLaunch(params, readOnly) {
9354
9406
  const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
9355
9407
  const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
9356
9408
  const routesByName = flags.routeByName || selectedProvider !== void 0 && isRouterProvider(selectedProvider.definition);
9357
- const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider]))) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
9409
+ const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider])), selectedProvider !== void 0) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
9358
9410
  const callerSettings = hasSettingsArgument(parsedArgv.rest);
9359
9411
  if (pickerSettings !== void 0 && callerSettings) {
9360
9412
  notes.push("--settings was passed, so /model keeps Claude Code's own model names");
@@ -9456,6 +9508,14 @@ function prepareLaunch(params) {
9456
9508
  if (decided.pinnedVersion !== void 0) {
9457
9509
  rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
9458
9510
  }
9511
+ const routesByName = resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition);
9512
+ if (routesByName) {
9513
+ const check = resolveRoutedProviderCredentials({ paths, port: params.fs, env, ...params.credentials === void 0 ? {} : { credentials: params.credentials }, models: loadConfigFile(paths.globalConfigFile, GlobalConfigSchema, params.fs.readConfigFile)?.config.models });
9514
+ if (!check.ok) {
9515
+ log.error(check.message);
9516
+ proc.exit(check.status);
9517
+ }
9518
+ }
9459
9519
  const frontDoorPort = params.frontdoor;
9460
9520
  const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
9461
9521
  if (frontDoorEngaged && frontDoorPort === void 0) {
@@ -9488,7 +9548,7 @@ function prepareLaunch(params) {
9488
9548
  ...headroom === void 0 ? {} : { headroom },
9489
9549
  sessionId,
9490
9550
  remoteControl: resolvedFlags.remoteControl,
9491
- routeByName: resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition)
9551
+ routeByName: routesByName
9492
9552
  });
9493
9553
  const releases = [...headroom === void 0 || headroomPort === void 0 ? [] : [headroomPort.release], ...frontDoorRelease === void 0 ? [] : [frontDoorRelease]];
9494
9554
  const release = () => {
@@ -9578,9 +9638,11 @@ var init_launcher = __esm({
9578
9638
  init_lock();
9579
9639
  init_spawn();
9580
9640
  init_providersStore();
9641
+ init_load();
9581
9642
  init_flatten();
9582
9643
  init_walk();
9583
9644
  init_schema();
9645
+ init_schema();
9584
9646
  init_credential();
9585
9647
  init_middleware();
9586
9648
  init_preflight();
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.36.0",
3085
+ version: "11.38.0",
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>",
@@ -7150,6 +7150,58 @@ function resolveProvider(params) {
7150
7150
  }
7151
7151
  return { ok: true, provider: { name, definition, credential: resolution.credential }, warnings: resolution.credential.warnings };
7152
7152
  }
7153
+ function resolveRoutedProviderCredentials(params) {
7154
+ const { models } = params;
7155
+ if (models === void 0) {
7156
+ return { ok: true, checked: [] };
7157
+ }
7158
+ const virtualNames = new Set(Object.keys(models.virtual ?? {}));
7159
+ const providerNames = /* @__PURE__ */ new Set();
7160
+ const collect = (ref) => {
7161
+ if (ref.startsWith("acct:") || ref.startsWith("family:") || virtualNames.has(ref)) {
7162
+ return;
7163
+ }
7164
+ const [provider] = ref.split("/", 1);
7165
+ if (provider !== void 0 && provider !== "") {
7166
+ providerNames.add(provider);
7167
+ }
7168
+ };
7169
+ for (const model of Object.values(models.virtual ?? {})) {
7170
+ for (const member of model.members) {
7171
+ collect(member);
7172
+ }
7173
+ }
7174
+ for (const ref of Object.values(models.tiers ?? {})) {
7175
+ collect(ref);
7176
+ }
7177
+ if (providerNames.size === 0) {
7178
+ return { ok: true, checked: [] };
7179
+ }
7180
+ if (params.credentials === void 0) {
7181
+ return { ok: false, status: 1, message: `agent-shim: the models block routes to providers ${[...providerNames].sort().join(", ")}, which need their credentials resolved, but this launcher has no credential port wired` };
7182
+ }
7183
+ const failures = [];
7184
+ let credentialFailure = false;
7185
+ for (const name of [...providerNames].sort()) {
7186
+ const definition = loadProvider(params.paths.providersDir, name, params.port);
7187
+ if (definition === void 0) {
7188
+ failures.push(`no provider named "${name}"`);
7189
+ continue;
7190
+ }
7191
+ if (isRouterProvider(definition)) {
7192
+ continue;
7193
+ }
7194
+ const resolution = resolveCredential({ credential: definition.credential, env: params.env, port: params.credentials, subject: `provider ${name}` });
7195
+ if (!resolution.ok) {
7196
+ failures.push(resolution.message.replace(/^agent-shim: /, ""));
7197
+ credentialFailure = true;
7198
+ }
7199
+ }
7200
+ if (failures.length > 0) {
7201
+ return { ok: false, status: credentialFailure ? CREDENTIAL_UNAVAILABLE_EXIT : 1, message: `agent-shim: this launch routes model names through the models block, but: ${failures.join("; ")}` };
7202
+ }
7203
+ return { ok: true, checked: [...providerNames].sort() };
7204
+ }
7153
7205
  var ProviderNotFoundError, ProviderAlreadyExistsError, InvalidProviderNameError, PROVIDER_NAME_RE, LEGACY_PROVIDER_FIELDS, LEGACY_ENV_CREDENTIAL_KEYS, LEGACY_LITERAL_PLACEHOLDER, LegacyProviderFileError, ProviderKindMismatchError;
7154
7206
  var init_providersStore = __esm({
7155
7207
  "src/providersStore.ts"() {
@@ -8875,10 +8927,10 @@ function routedModelRows(models, providers) {
8875
8927
  return [...virtual, ...concrete.filter((row) => visible(row.model))];
8876
8928
  }
8877
8929
  function modelPickerSettings(provider, catalogue = []) {
8878
- return modelPickerSettingsFromRows(providerModelRows(provider, catalogue));
8930
+ return modelPickerSettingsFromRows(providerModelRows(provider, catalogue), true);
8879
8931
  }
8880
- function modelPickerSettingsFromRows(options) {
8881
- return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
8932
+ function modelPickerSettingsFromRows(options, replaceBuiltInOptions) {
8933
+ return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions } });
8882
8934
  }
8883
8935
  var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
8884
8936
  var init_modelPicker = __esm({
@@ -9328,7 +9380,7 @@ function decideLaunch(params, readOnly) {
9328
9380
  const flags = loginlessProvider === void 0 ? requestedFlags : { ...requestedFlags, remoteControl: false };
9329
9381
  const catalogue = selectedProvider === void 0 ? void 0 : parseCatalogueCache(params.fs.readFileUtf8(catalogueCachePath(paths, selectedProvider.name)));
9330
9382
  const routesByName = flags.routeByName || selectedProvider !== void 0 && isRouterProvider(selectedProvider.definition);
9331
- const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider]))) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
9383
+ const pickerSettings = routesByName ? modelPickerSettingsFromRows(routedModelRows(readModels(paths) ?? {}, listProviders(paths).map((entry) => [entry.name, entry.provider])), selectedProvider !== void 0) : selectedProvider === void 0 ? void 0 : modelPickerSettings(selectedProvider.definition, catalogue?.models);
9332
9384
  const callerSettings = hasSettingsArgument(parsedArgv.rest);
9333
9385
  if (pickerSettings !== void 0 && callerSettings) {
9334
9386
  notes.push("--settings was passed, so /model keeps Claude Code's own model names");
@@ -9430,6 +9482,14 @@ function prepareLaunch(params) {
9430
9482
  if (decided.pinnedVersion !== void 0) {
9431
9483
  rows.push(pinnedVersionRow(decided.pinnedVersion.version, decided.pinnedVersion.source));
9432
9484
  }
9485
+ const routesByName = resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition);
9486
+ if (routesByName) {
9487
+ const check = resolveRoutedProviderCredentials({ paths, port: params.fs, env, ...params.credentials === void 0 ? {} : { credentials: params.credentials }, models: loadConfigFile(paths.globalConfigFile, GlobalConfigSchema, params.fs.readConfigFile)?.config.models });
9488
+ if (!check.ok) {
9489
+ log.error(check.message);
9490
+ proc.exit(check.status);
9491
+ }
9492
+ }
9433
9493
  const frontDoorPort = params.frontdoor;
9434
9494
  const frontDoorEngaged = resolvedProvider !== void 0 || resolvedFlags.headroom || resolvedFlags.trackUsage;
9435
9495
  if (frontDoorEngaged && frontDoorPort === void 0) {
@@ -9462,7 +9522,7 @@ function prepareLaunch(params) {
9462
9522
  ...headroom === void 0 ? {} : { headroom },
9463
9523
  sessionId,
9464
9524
  remoteControl: resolvedFlags.remoteControl,
9465
- routeByName: resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition)
9525
+ routeByName: routesByName
9466
9526
  });
9467
9527
  const releases = [...headroom === void 0 || headroomPort === void 0 ? [] : [headroomPort.release], ...frontDoorRelease === void 0 ? [] : [frontDoorRelease]];
9468
9528
  const release = () => {
@@ -9549,9 +9609,11 @@ var init_launcher = __esm({
9549
9609
  init_lock();
9550
9610
  init_spawn();
9551
9611
  init_providersStore();
9612
+ init_load();
9552
9613
  init_flatten();
9553
9614
  init_walk();
9554
9615
  init_schema();
9616
+ init_schema();
9555
9617
  init_credential();
9556
9618
  init_middleware();
9557
9619
  init_preflight();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-use",
3
- "version": "11.36.0",
3
+ "version": "11.38.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>",