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 +72 -9
- package/dist/index.cjs +68 -6
- package/dist/index.mjs +68 -6
- package/package.json +1 -1
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.
|
|
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
|
|
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:
|
|
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 &&
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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:
|
|
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.
|
|
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
|
|
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:
|
|
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.
|
|
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>",
|