claude-use 11.33.0 → 11.35.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/README.md +2 -1
- package/dist/cli.cjs +157 -58
- package/dist/index.cjs +84 -40
- package/dist/index.mjs +84 -40
- package/dist/types/index.d.ts +72 -27
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -26973,6 +26973,9 @@ function isHttpProvider(provider) {
|
|
|
26973
26973
|
function isCodexProvider(provider) {
|
|
26974
26974
|
return provider.kind === "codex";
|
|
26975
26975
|
}
|
|
26976
|
+
function isRouterProvider(provider) {
|
|
26977
|
+
return provider.kind === "router";
|
|
26978
|
+
}
|
|
26976
26979
|
function isAntigravityProvider(provider) {
|
|
26977
26980
|
return provider.kind === "antigravity";
|
|
26978
26981
|
}
|
|
@@ -26987,7 +26990,7 @@ function isTimeZone(name) {
|
|
|
26987
26990
|
return false;
|
|
26988
26991
|
}
|
|
26989
26992
|
}
|
|
26990
|
-
var import_node_path4, CATEGORY_NAMES, OVERRIDABLE_CATEGORIES, CategoryMapSchema, DURATION_RE, DurationSchema, WhenConditionObjectSchema, WhenSchema, EntryValueSchema, ENTRY_KEY_RE, EntriesSchema, LaunchSchema, CREDENTIAL_TARGETS, PROVIDER_CREDENTIAL_TARGETS, CREDENTIAL_TARGET_VARS, ArgvSchema, CommandSourceOptions, EnvCredentialSourceSchema, FileCredentialSourceSchema, CommandCredentialSourceSchema, OpCredentialSourceSchema, KeychainCredentialSourceSchema, LiteralCredentialSourceSchema, CredentialSourceSchema, RemoteCredentialSourceSchema, CREDENTIAL_CACHE_STORES, CredentialCacheSchema, CredentialSchema, ProviderCredentialSchema, RESERVED_PROVIDER_ENV_KEYS, ProviderEnvSchema, PROVIDER_KINDS, ANTIGRAVITY_MODES, CLAUDE_TIERS, ANTIGRAVITY_EFFORTS, ANTIGRAVITY_DEFAULT_MODE, ANTIGRAVITY_DEFAULT_MODEL, ANTIGRAVITY_DEFAULT_TIER_MODELS, ANTIGRAVITY_DEFAULT_EFFORT, AntigravityModelTargetSchema, AntigravityProviderConfigSchema, CODEX_EFFORTS, CODEX_LOGINS, CODEX_DEFAULT_LOGIN, CODEX_DEFAULT_MODEL, CODEX_DEFAULT_TIER_MODELS, CODEX_DEFAULT_EFFORT, CodexProviderConfigSchema, ProviderRouteSchema, PickerModelSchema, PickerModelsSchema, ProviderCatalogueSchema, HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema, ProviderSchema, SELECTION_MODES, VirtualModelSchema, ModelPricesSchema, ModelsConfigSchema, ModelsLayerSchema, ConfigProfileSchema, POOL_SELECTOR_PREFIX, POOL_NAME_PATTERN, IDENTITY_NAME_PATTERN, PoolNameSchema, SELECTOR_RE, IdentitySelectorSchema, PoolMemberSchema, POOL_PREFERENCES, PoolPreferenceSchema, WHOLE_PERCENT_MAX, CompactAtUtilisationSchema, PoolSchema, WEEKDAYS, AnchorSchema, JOB_WINDOWS, JobTriggerSchema, JobTargetSchema, JobSchema, DirectoryRuleSchema, DirectoryRulesSchema, PortableConfigSchema, HEADROOM_MODES, HEADROOM_CCR_MODES, HEADROOM_ROLLOUT_CHANNELS, INTERCEPT_CHANNELS, READ_MATURATION_CHANNELS, HeadroomGlobalConfigObjectSchema, HeadroomGlobalConfigSchema, HEADROOM_DEFAULT_SOURCE, HEADROOM_DEFAULT_IDLE_SHUTDOWN_MINUTES, FRONTDOOR_DEFAULT_IDLE_SHUTDOWN_MINUTES, FrontDoorGlobalConfigSchema, UPDATE_MODES, UpdateGlobalConfigSchema, GlobalConfigSchema, IdentitySchema, CategoryClassificationSchema, CategoryClassificationOverlaySchema, SHIPPED_CATEGORY_DEFAULTS;
|
|
26993
|
+
var import_node_path4, CATEGORY_NAMES, OVERRIDABLE_CATEGORIES, CategoryMapSchema, DURATION_RE, DurationSchema, WhenConditionObjectSchema, WhenSchema, EntryValueSchema, ENTRY_KEY_RE, EntriesSchema, LaunchSchema, CREDENTIAL_TARGETS, PROVIDER_CREDENTIAL_TARGETS, CREDENTIAL_TARGET_VARS, ArgvSchema, CommandSourceOptions, EnvCredentialSourceSchema, FileCredentialSourceSchema, CommandCredentialSourceSchema, OpCredentialSourceSchema, KeychainCredentialSourceSchema, LiteralCredentialSourceSchema, CredentialSourceSchema, RemoteCredentialSourceSchema, CREDENTIAL_CACHE_STORES, CredentialCacheSchema, CredentialSchema, ProviderCredentialSchema, RESERVED_PROVIDER_ENV_KEYS, ProviderEnvSchema, PROVIDER_KINDS, ANTIGRAVITY_MODES, CLAUDE_TIERS, ANTIGRAVITY_EFFORTS, ANTIGRAVITY_DEFAULT_MODE, ANTIGRAVITY_DEFAULT_MODEL, ANTIGRAVITY_DEFAULT_TIER_MODELS, ANTIGRAVITY_DEFAULT_EFFORT, AntigravityModelTargetSchema, AntigravityProviderConfigSchema, CODEX_EFFORTS, CODEX_LOGINS, CODEX_DEFAULT_LOGIN, CODEX_DEFAULT_MODEL, CODEX_DEFAULT_TIER_MODELS, CODEX_DEFAULT_EFFORT, CodexProviderConfigSchema, ProviderRouteSchema, PickerModelSchema, PickerModelsSchema, ProviderCatalogueSchema, HttpProviderSchema, CodexProviderSchema, RouterProviderSchema, AntigravityProviderSchema, ProviderSchema, SELECTION_MODES, VirtualModelSchema, ModelPricesSchema, ModelsConfigSchema, ModelsLayerSchema, ConfigProfileSchema, POOL_SELECTOR_PREFIX, POOL_NAME_PATTERN, IDENTITY_NAME_PATTERN, PoolNameSchema, SELECTOR_RE, IdentitySelectorSchema, PoolMemberSchema, POOL_PREFERENCES, PoolPreferenceSchema, WHOLE_PERCENT_MAX, CompactAtUtilisationSchema, PoolSchema, WEEKDAYS, AnchorSchema, JOB_WINDOWS, JobTriggerSchema, JobTargetSchema, JobSchema, DirectoryRuleSchema, DirectoryRulesSchema, PortableConfigSchema, HEADROOM_MODES, HEADROOM_CCR_MODES, HEADROOM_ROLLOUT_CHANNELS, INTERCEPT_CHANNELS, READ_MATURATION_CHANNELS, HeadroomGlobalConfigObjectSchema, HeadroomGlobalConfigSchema, HEADROOM_DEFAULT_SOURCE, HEADROOM_DEFAULT_IDLE_SHUTDOWN_MINUTES, FRONTDOOR_DEFAULT_IDLE_SHUTDOWN_MINUTES, FrontDoorGlobalConfigSchema, UPDATE_MODES, UpdateGlobalConfigSchema, GlobalConfigSchema, IdentitySchema, CategoryClassificationSchema, CategoryClassificationOverlaySchema, SHIPPED_CATEGORY_DEFAULTS;
|
|
26991
26994
|
var init_schema = __esm({
|
|
26992
26995
|
"src/config/schema.ts"() {
|
|
26993
26996
|
"use strict";
|
|
@@ -27032,6 +27035,8 @@ var init_schema = __esm({
|
|
|
27032
27035
|
delay: external_exports.string().regex(DURATION_RE, "must be a duration such as 5s or 500ms").optional(),
|
|
27033
27036
|
/** Whether the launcher waits for a key press after its own output before it starts claude. Takes the place of `delay` when both are set. Applies only when a terminal is watching. */
|
|
27034
27037
|
pause: external_exports.boolean().optional(),
|
|
27038
|
+
/** Whether a provider session routes provider-qualified model names (`z/glm-5.3`, `auto`) through the `models` block to the provider that serves them, instead of sending every request to the launch provider. */
|
|
27039
|
+
routeByName: external_exports.boolean().optional(),
|
|
27035
27040
|
/** Whether the launcher's report, for a launch that picks from a pool, lists every member the pick ranked with why each stands where it does, and not only the member it picked. */
|
|
27036
27041
|
explain: external_exports.boolean().optional()
|
|
27037
27042
|
});
|
|
@@ -27092,7 +27097,7 @@ var init_schema = __esm({
|
|
|
27092
27097
|
ProviderEnvSchema = external_exports.record(external_exports.string().min(1), external_exports.string()).refine((env) => !Object.keys(env).some((key) => RESERVED_PROVIDER_ENV_KEYS.includes(key)), {
|
|
27093
27098
|
message: `env may not set ${RESERVED_PROVIDER_ENV_KEYS.join(", ")}: the credential block's target sets one and agent-shim removes the others`
|
|
27094
27099
|
});
|
|
27095
|
-
PROVIDER_KINDS = ["http", "codex", "antigravity"];
|
|
27100
|
+
PROVIDER_KINDS = ["http", "codex", "antigravity", "router"];
|
|
27096
27101
|
ANTIGRAVITY_MODES = ["cloud", "local"];
|
|
27097
27102
|
CLAUDE_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
27098
27103
|
ANTIGRAVITY_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
@@ -27205,6 +27210,11 @@ var init_schema = __esm({
|
|
|
27205
27210
|
pickerModels: PickerModelsSchema.optional(),
|
|
27206
27211
|
codex: CodexProviderConfigSchema.optional()
|
|
27207
27212
|
});
|
|
27213
|
+
RouterProviderSchema = external_exports.strictObject({
|
|
27214
|
+
$schema: external_exports.string().optional(),
|
|
27215
|
+
kind: external_exports.literal("router"),
|
|
27216
|
+
displayName: external_exports.string().min(1)
|
|
27217
|
+
});
|
|
27208
27218
|
AntigravityProviderSchema = external_exports.strictObject({
|
|
27209
27219
|
$schema: external_exports.string().optional(),
|
|
27210
27220
|
kind: external_exports.literal("antigravity"),
|
|
@@ -27215,7 +27225,7 @@ var init_schema = __esm({
|
|
|
27215
27225
|
pickerModels: PickerModelsSchema.optional(),
|
|
27216
27226
|
antigravity: AntigravityProviderConfigSchema.optional()
|
|
27217
27227
|
});
|
|
27218
|
-
ProviderSchema = external_exports.discriminatedUnion("kind", [HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema]);
|
|
27228
|
+
ProviderSchema = external_exports.discriminatedUnion("kind", [HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema, RouterProviderSchema]);
|
|
27219
27229
|
SELECTION_MODES = ["ordered", "most-allowance", "soonest-reset", "spread", "adaptive", "lowest-latency", "highest-success", "cheapest"];
|
|
27220
27230
|
VirtualModelSchema = external_exports.strictObject({
|
|
27221
27231
|
/** How the virtual model chooses its member for a request. */
|
|
@@ -32621,6 +32631,9 @@ function flattenLayers(layers, options) {
|
|
|
32621
32631
|
if (layer.launch.explain !== void 0) {
|
|
32622
32632
|
launch.explain = layer.launch.explain;
|
|
32623
32633
|
}
|
|
32634
|
+
if (layer.launch.routeByName !== void 0) {
|
|
32635
|
+
launch.routeByName = layer.launch.routeByName;
|
|
32636
|
+
}
|
|
32624
32637
|
}
|
|
32625
32638
|
if (layer.models !== void 0) {
|
|
32626
32639
|
models = mergeModels(models, layer.models);
|
|
@@ -34432,7 +34445,7 @@ var init_package = __esm({
|
|
|
34432
34445
|
"package.json"() {
|
|
34433
34446
|
package_default = {
|
|
34434
34447
|
name: "claude-use",
|
|
34435
|
-
version: "11.
|
|
34448
|
+
version: "11.35.0",
|
|
34436
34449
|
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.",
|
|
34437
34450
|
license: "MIT",
|
|
34438
34451
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -34697,6 +34710,7 @@ function identifyRequest(headers) {
|
|
|
34697
34710
|
sessionId: internalHeaderValue(headers, SESSION_HEADER),
|
|
34698
34711
|
provider: internalHeaderValue(headers, PROVIDER_HEADER),
|
|
34699
34712
|
headroom: internalHeaderValue(headers, HEADROOM_FLAG_HEADER) === "1",
|
|
34713
|
+
routeByName: internalHeaderValue(headers, ROUTE_BY_NAME_HEADER) === "1",
|
|
34700
34714
|
projectId: internalHeaderValue(headers, PROJECT_ID_HEADER)
|
|
34701
34715
|
},
|
|
34702
34716
|
forwardableHeaders: forwardable
|
|
@@ -34716,7 +34730,7 @@ function parseProviderPath(path65) {
|
|
|
34716
34730
|
}
|
|
34717
34731
|
return { provider: decodeURIComponent(tail.slice(0, slash)), rest: tail.slice(slash) };
|
|
34718
34732
|
}
|
|
34719
|
-
var HEADROOM_SESSION_HEADER, INTERNAL_HEADER_NAMES, IDENTITY_HEADER, SESSION_HEADER, PROVIDER_HEADER, HEADROOM_FLAG_HEADER, PROJECT_ID_HEADER, CLIENT_SESSION_HEADER, HEADROOM_BASE_URL_HEADER, AUTH_HEADER, HOP_SECRET_HEADER, HOP_ID_HEADER, PROVIDER_PATH_PREFIX;
|
|
34733
|
+
var HEADROOM_SESSION_HEADER, INTERNAL_HEADER_NAMES, IDENTITY_HEADER, SESSION_HEADER, PROVIDER_HEADER, HEADROOM_FLAG_HEADER, ROUTE_BY_NAME_HEADER, PROJECT_ID_HEADER, CLIENT_SESSION_HEADER, HEADROOM_BASE_URL_HEADER, AUTH_HEADER, HOP_SECRET_HEADER, HOP_ID_HEADER, PROVIDER_PATH_PREFIX;
|
|
34720
34734
|
var init_route = __esm({
|
|
34721
34735
|
"src/frontdoor/route.ts"() {
|
|
34722
34736
|
"use strict";
|
|
@@ -34725,6 +34739,7 @@ var init_route = __esm({
|
|
|
34725
34739
|
"x-agent-shim-identity",
|
|
34726
34740
|
"x-agent-shim-session",
|
|
34727
34741
|
"x-agent-shim-headroom",
|
|
34742
|
+
"x-agent-shim-route-by-name",
|
|
34728
34743
|
"x-agent-shim-auth",
|
|
34729
34744
|
"x-agent-shim-provider",
|
|
34730
34745
|
"x-agent-shim-hop",
|
|
@@ -34737,6 +34752,7 @@ var init_route = __esm({
|
|
|
34737
34752
|
SESSION_HEADER = "x-agent-shim-session";
|
|
34738
34753
|
PROVIDER_HEADER = "x-agent-shim-provider";
|
|
34739
34754
|
HEADROOM_FLAG_HEADER = "x-agent-shim-headroom";
|
|
34755
|
+
ROUTE_BY_NAME_HEADER = "x-agent-shim-route-by-name";
|
|
34740
34756
|
PROJECT_ID_HEADER = "x-headroom-project-id";
|
|
34741
34757
|
CLIENT_SESSION_HEADER = "x-claude-code-session-id";
|
|
34742
34758
|
HEADROOM_BASE_URL_HEADER = "x-headroom-base-url";
|
|
@@ -36112,7 +36128,7 @@ function describeProviderEndpoint(provider) {
|
|
|
36112
36128
|
if (isAntigravityProvider(provider)) {
|
|
36113
36129
|
return (provider.antigravity?.mode ?? ANTIGRAVITY_DEFAULT_MODE) === "local" ? "antigravity local (ACP daemon)" : "antigravity cloud (Gemini API)";
|
|
36114
36130
|
}
|
|
36115
|
-
return provider.baseUrl;
|
|
36131
|
+
return isRouterProvider(provider) ? "the models block" : provider.baseUrl;
|
|
36116
36132
|
}
|
|
36117
36133
|
function isEmptyCodexConfig(config2) {
|
|
36118
36134
|
return config2 === void 0 || config2.defaultModel === void 0 && config2.effort === void 0 && config2.login === void 0 && (config2.models === void 0 || Object.keys(config2.models).length === 0);
|
|
@@ -36134,10 +36150,16 @@ function addProvider(paths, name, input2) {
|
|
|
36134
36150
|
if (kind === "antigravity" && input2.baseUrl !== void 0) {
|
|
36135
36151
|
throw new ProviderKindMismatchError("An antigravity provider has no base URL: the launcher points its sessions at the front-door daemon. Drop --base-url.");
|
|
36136
36152
|
}
|
|
36153
|
+
if (kind === "router" && input2.baseUrl !== void 0) {
|
|
36154
|
+
throw new ProviderKindMismatchError("A router provider has no base URL: it resolves each request's model name through the models block. Drop --base-url.");
|
|
36155
|
+
}
|
|
36137
36156
|
if (kind === "http" && input2.baseUrl === void 0) {
|
|
36138
36157
|
throw new ProviderKindMismatchError("An http provider needs --base-url.");
|
|
36139
36158
|
}
|
|
36140
|
-
if (kind
|
|
36159
|
+
if (kind === "router" && (input2.sources.length > 0 || input2.target !== void 0 || input2.env !== void 0 || input2.pickerModels !== void 0)) {
|
|
36160
|
+
throw new ProviderKindMismatchError("A router provider has no credential, env or picker models of its own: the models block's targets carry their own.");
|
|
36161
|
+
}
|
|
36162
|
+
if (kind !== "http" && kind !== "router" && input2.catalogue !== void 0) {
|
|
36141
36163
|
throw new ProviderKindMismatchError("A model catalogue applies only to an http provider.");
|
|
36142
36164
|
}
|
|
36143
36165
|
if (kind !== "codex" && !isEmptyCodexConfig(input2.codex)) {
|
|
@@ -36153,7 +36175,7 @@ function addProvider(paths, name, input2) {
|
|
|
36153
36175
|
...input2.pickerModels === void 0 || input2.pickerModels.length === 0 ? {} : { pickerModels: input2.pickerModels }
|
|
36154
36176
|
};
|
|
36155
36177
|
const parsed = ProviderSchema.safeParse(
|
|
36156
|
-
kind === "codex" ? { kind, ...shared, ...isEmptyCodexConfig(input2.codex) ? {} : { codex: input2.codex } } : kind === "antigravity" ? { kind, ...shared, ...isEmptyAntigravityConfig(input2.antigravity) ? {} : { antigravity: input2.antigravity } } : { ...shared, baseUrl: input2.baseUrl, ...input2.catalogue === void 0 ? {} : { catalogue: input2.catalogue } }
|
|
36178
|
+
kind === "router" ? { kind, displayName: input2.displayName } : kind === "codex" ? { kind, ...shared, ...isEmptyCodexConfig(input2.codex) ? {} : { codex: input2.codex } } : kind === "antigravity" ? { kind, ...shared, ...isEmptyAntigravityConfig(input2.antigravity) ? {} : { antigravity: input2.antigravity } } : { ...shared, baseUrl: input2.baseUrl, ...input2.catalogue === void 0 ? {} : { catalogue: input2.catalogue } }
|
|
36157
36179
|
);
|
|
36158
36180
|
if (!parsed.success) {
|
|
36159
36181
|
throw new ConfigValidationError(providerJsonPath(paths, name), parsed.error.issues);
|
|
@@ -36167,15 +36189,18 @@ function updateProvider(paths, name, input2) {
|
|
|
36167
36189
|
throw new ProviderNotFoundError(name);
|
|
36168
36190
|
}
|
|
36169
36191
|
const unset = new Set(input2.unsetEnv);
|
|
36170
|
-
const
|
|
36192
|
+
const existingEnv = isRouterProvider(existing) ? {} : existing.env;
|
|
36193
|
+
const env = Object.fromEntries(Object.entries({ ...existingEnv, ...input2.env }).filter(([key]) => !unset.has(key)));
|
|
36171
36194
|
const unsetPicker = new Set(input2.unsetPickerModels);
|
|
36172
36195
|
const added = new Map((input2.pickerModels ?? []).map((entry) => [entry.model, entry]));
|
|
36196
|
+
const existingPicker = isRouterProvider(existing) ? [] : existing.pickerModels;
|
|
36173
36197
|
const pickerModels = [
|
|
36174
|
-
...(
|
|
36175
|
-
...[...added.values()].filter((entry) => !(
|
|
36198
|
+
...(existingPicker ?? []).filter((entry) => !unsetPicker.has(entry.model)).map((entry) => added.get(entry.model) ?? entry),
|
|
36199
|
+
...[...added.values()].filter((entry) => !(existingPicker ?? []).some((kept) => kept.model === entry.model))
|
|
36176
36200
|
];
|
|
36177
|
-
const
|
|
36178
|
-
const
|
|
36201
|
+
const router = isRouterProvider(existing);
|
|
36202
|
+
const target = router ? void 0 : input2.target ?? existing.credential.target;
|
|
36203
|
+
const cache = router ? void 0 : input2.cache === void 0 ? existing.credential.cache : input2.cache === false ? void 0 : input2.cache;
|
|
36179
36204
|
if (isCodexProvider(existing) && input2.baseUrl !== void 0) {
|
|
36180
36205
|
throw new ProviderKindMismatchError(`Provider "${name}" is a codex provider, which has no base URL.`);
|
|
36181
36206
|
}
|
|
@@ -36193,10 +36218,12 @@ function updateProvider(paths, name, input2) {
|
|
|
36193
36218
|
}
|
|
36194
36219
|
const shared = {
|
|
36195
36220
|
...input2.displayName === void 0 ? {} : { displayName: input2.displayName },
|
|
36196
|
-
|
|
36197
|
-
|
|
36198
|
-
|
|
36199
|
-
|
|
36221
|
+
...router ? {} : {
|
|
36222
|
+
credential: {
|
|
36223
|
+
sources: input2.sources ?? existing.credential.sources,
|
|
36224
|
+
...target === void 0 ? {} : { target },
|
|
36225
|
+
...cache === void 0 ? {} : { cache }
|
|
36226
|
+
}
|
|
36200
36227
|
},
|
|
36201
36228
|
env: Object.keys(env).length === 0 ? void 0 : env,
|
|
36202
36229
|
pickerModels: pickerModels.length === 0 ? void 0 : pickerModels
|
|
@@ -36216,6 +36243,8 @@ function updateProvider(paths, name, input2) {
|
|
|
36216
36243
|
...existing.antigravity?.models === void 0 && input2.antigravity?.models === void 0 ? {} : { models: { ...existing.antigravity?.models, ...input2.antigravity?.models } }
|
|
36217
36244
|
};
|
|
36218
36245
|
candidate = { ...existing, ...shared, antigravity: isEmptyAntigravityConfig(antigravity) ? void 0 : antigravity };
|
|
36246
|
+
} else if (router) {
|
|
36247
|
+
candidate = { kind: "router", ...shared };
|
|
36219
36248
|
} else {
|
|
36220
36249
|
const catalogue = input2.catalogue === void 0 ? existing.catalogue : input2.catalogue === false ? void 0 : input2.catalogue;
|
|
36221
36250
|
candidate = { ...existing, ...shared, catalogue, ...input2.baseUrl === void 0 ? {} : { baseUrl: input2.baseUrl } };
|
|
@@ -36265,6 +36294,9 @@ function resolveProvider(params) {
|
|
|
36265
36294
|
return selection;
|
|
36266
36295
|
}
|
|
36267
36296
|
const { name, definition } = selection.provider;
|
|
36297
|
+
if (isRouterProvider(definition)) {
|
|
36298
|
+
return { ok: true, provider: { name, definition, credential: { target: "bearer", token: "", source: { env: "AGENT_SHIM_ROUTER" }, warnings: [] } }, warnings: [] };
|
|
36299
|
+
}
|
|
36268
36300
|
if (params.credentials === void 0) {
|
|
36269
36301
|
return { ok: false, status: 1, message: `agent-shim: provider ${name} needs its credential resolved, but this launcher has no credential port wired` };
|
|
36270
36302
|
}
|
|
@@ -63240,7 +63272,8 @@ var init_argv = __esm({
|
|
|
63240
63272
|
{ flag: "--remote-control", key: "remoteControl" },
|
|
63241
63273
|
{ flag: "--wait", key: "wait" },
|
|
63242
63274
|
{ flag: "--pause", key: "pause" },
|
|
63243
|
-
{ flag: "--explain", key: "explain" }
|
|
63275
|
+
{ flag: "--explain", key: "explain" },
|
|
63276
|
+
{ flag: "--route-by-name", key: "routeByName" }
|
|
63244
63277
|
];
|
|
63245
63278
|
LAUNCHER_FLAG_NAMES = [
|
|
63246
63279
|
...VALUED_FLAGS,
|
|
@@ -63430,6 +63463,7 @@ function resolveLaunchFlags(params) {
|
|
|
63430
63463
|
trackUsage: params.flags?.trackUsage ?? parseEnvBool("AGENT_SHIM_TRACK_USAGE", params.env.AGENT_SHIM_TRACK_USAGE) ?? params.cascade?.trackUsage ?? true,
|
|
63431
63464
|
pause: params.flags?.pause ?? parseEnvBool("AGENT_SHIM_PAUSE", params.env.AGENT_SHIM_PAUSE) ?? params.cascade?.pause ?? false,
|
|
63432
63465
|
explain: params.flags?.explain ?? parseEnvBool("AGENT_SHIM_EXPLAIN", params.env.AGENT_SHIM_EXPLAIN) ?? params.cascade?.explain ?? false,
|
|
63466
|
+
routeByName: params.flags?.routeByName ?? parseEnvBool("AGENT_SHIM_ROUTE_BY_NAME", params.env.AGENT_SHIM_ROUTE_BY_NAME) ?? params.cascade?.routeByName ?? false,
|
|
63433
63467
|
delayMs: resolveDelayMs(params)
|
|
63434
63468
|
};
|
|
63435
63469
|
}
|
|
@@ -63470,7 +63504,7 @@ function buildEnv(params) {
|
|
|
63470
63504
|
env.CLAUDE_CONFIG_DIR = import_node_path40.default.join(params.identitiesDir, params.resolvedIdentityName);
|
|
63471
63505
|
}
|
|
63472
63506
|
if (params.provider !== void 0) {
|
|
63473
|
-
const providerEnv = params.provider.definition.env ?? {};
|
|
63507
|
+
const providerEnv = params.provider.definition.kind !== void 0 && params.provider.definition.kind !== "http" ? {} : params.provider.definition.env ?? {};
|
|
63474
63508
|
providerCustomHeaders = providerEnv.ANTHROPIC_CUSTOM_HEADERS;
|
|
63475
63509
|
env.ANTHROPIC_BASE_URL = void 0;
|
|
63476
63510
|
env.AGENT_SHIM_PROVIDER = params.provider.definition.displayName;
|
|
@@ -63498,6 +63532,7 @@ function buildEnv(params) {
|
|
|
63498
63532
|
{ name: SESSION_HEADER, value: params.sessionId },
|
|
63499
63533
|
{ name: AUTH_HEADER, value: params.frontdoor.sessionToken },
|
|
63500
63534
|
...params.provider === void 0 ? [] : [{ name: PROVIDER_HEADER, value: params.provider.name }],
|
|
63535
|
+
...params.routeByName ? [{ name: ROUTE_BY_NAME_HEADER, value: "1" }] : [],
|
|
63501
63536
|
...params.headroom === void 0 ? [] : [
|
|
63502
63537
|
{ name: HEADROOM_FLAG_HEADER, value: "1" },
|
|
63503
63538
|
{ name: PROJECT_ID_HEADER, value: params.headroom.projectId }
|
|
@@ -65174,8 +65209,8 @@ function catalogueRows(provider, models) {
|
|
|
65174
65209
|
return filterCatalogue(models, provider.catalogue).map((model) => ({ model: model.id, label: labelOf(model.id), description: describedAs(model.id, model.name === void 0 ? "Listed by the provider" : `Listed by the provider as ${model.name}`), behavesAs: TIER_BEHAVES_AS[tier] })).sort((left, right) => left.model.localeCompare(right.model));
|
|
65175
65210
|
}
|
|
65176
65211
|
function providerModelRows(provider, catalogue = []) {
|
|
65177
|
-
const derived2 = provider.kind === "codex" ? codexRows(provider) : provider.kind === "antigravity" ? antigravityRows(provider) : httpRows(provider);
|
|
65178
|
-
const declared = (provider.pickerModels ?? []).map(declaredRow);
|
|
65212
|
+
const derived2 = provider.kind === "codex" ? codexRows(provider) : provider.kind === "antigravity" ? antigravityRows(provider) : provider.kind === "router" ? [] : httpRows(provider);
|
|
65213
|
+
const declared = provider.kind === "router" ? [] : (provider.pickerModels ?? []).map(declaredRow);
|
|
65179
65214
|
const declaredModels = new Set(declared.map((row) => row.model));
|
|
65180
65215
|
const named = [...derived2.filter((row) => !declaredModels.has(row.model)), ...declared];
|
|
65181
65216
|
const taken = new Set(named.map((row) => labelOf(row.model)));
|
|
@@ -65619,6 +65654,7 @@ function decideLaunch(params, readOnly) {
|
|
|
65619
65654
|
...parsedArgv.trackUsage === void 0 ? {} : { trackUsage: parsedArgv.trackUsage },
|
|
65620
65655
|
...parsedArgv.pause === void 0 ? {} : { pause: parsedArgv.pause },
|
|
65621
65656
|
...parsedArgv.explain === void 0 ? {} : { explain: parsedArgv.explain },
|
|
65657
|
+
...parsedArgv.routeByName === void 0 ? {} : { routeByName: parsedArgv.routeByName },
|
|
65622
65658
|
...parsedArgv.delay === void 0 ? {} : { delay: parsedArgv.delay }
|
|
65623
65659
|
}
|
|
65624
65660
|
});
|
|
@@ -65762,7 +65798,8 @@ function prepareLaunch(params) {
|
|
|
65762
65798
|
...frontDoor === void 0 ? {} : { frontdoor: frontDoor },
|
|
65763
65799
|
...headroom === void 0 ? {} : { headroom },
|
|
65764
65800
|
sessionId,
|
|
65765
|
-
remoteControl: resolvedFlags.remoteControl
|
|
65801
|
+
remoteControl: resolvedFlags.remoteControl,
|
|
65802
|
+
routeByName: resolvedFlags.routeByName || resolvedProvider !== void 0 && isRouterProvider(resolvedProvider.definition)
|
|
65766
65803
|
});
|
|
65767
65804
|
const releases = [...headroom === void 0 || headroomPort === void 0 ? [] : [headroomPort.release], ...frontDoorRelease === void 0 ? [] : [frontDoorRelease]];
|
|
65768
65805
|
const release = () => {
|
|
@@ -65789,11 +65826,12 @@ function resolveLaunch(params) {
|
|
|
65789
65826
|
...frontDoor ? { frontdoor: { port: 0, connectPort: 0, trustBundlePath: "", sessionToken: "" } } : {},
|
|
65790
65827
|
...decided.flags.headroom ? { headroom: { socketPath: "", projectId: "" } } : {},
|
|
65791
65828
|
sessionId: "",
|
|
65792
|
-
remoteControl: decided.flags.remoteControl
|
|
65829
|
+
remoteControl: decided.flags.remoteControl,
|
|
65830
|
+
routeByName: decided.flags.routeByName
|
|
65793
65831
|
});
|
|
65794
65832
|
const credentialNames = decided.identityCredentialBlock === void 0 ? [] : Object.keys(credentialVariables(decided.identityCredentialBlock.target ?? "bearer", ""));
|
|
65795
65833
|
const environment = [.../* @__PURE__ */ new Set([...Object.keys(built).filter((name) => built[name] !== env[name]), ...credentialNames])].sort();
|
|
65796
|
-
const credential = decided.provider !== void 0 ? { subject: "provider", name: decided.provider.name, summary: summariseCredential(decided.provider.definition.credential) } : decided.identityCredentialBlock !== void 0 && decided.farmIdentity !== void 0 ? { subject: "identity", name: decided.farmIdentity, summary: summariseCredential(decided.identityCredentialBlock) } : void 0;
|
|
65834
|
+
const credential = decided.provider !== void 0 ? isRouterProvider(decided.provider.definition) ? void 0 : { subject: "provider", name: decided.provider.name, summary: summariseCredential(decided.provider.definition.credential) } : decided.identityCredentialBlock !== void 0 && decided.farmIdentity !== void 0 ? { subject: "identity", name: decided.farmIdentity, summary: summariseCredential(decided.identityCredentialBlock) } : void 0;
|
|
65797
65835
|
return {
|
|
65798
65836
|
decision: decided.decision,
|
|
65799
65837
|
flags: decided.flags,
|
|
@@ -65801,7 +65839,7 @@ function resolveLaunch(params) {
|
|
|
65801
65839
|
bin: decided.bin,
|
|
65802
65840
|
args: decided.args,
|
|
65803
65841
|
...credential === void 0 ? {} : { credential },
|
|
65804
|
-
routing: { frontDoor, headroom: decided.flags.headroom },
|
|
65842
|
+
routing: { frontDoor, headroom: decided.flags.headroom, routeByName: decided.flags.routeByName },
|
|
65805
65843
|
environment
|
|
65806
65844
|
};
|
|
65807
65845
|
}
|
|
@@ -66365,7 +66403,7 @@ function createProviderLookup(ports) {
|
|
|
66365
66403
|
return {
|
|
66366
66404
|
baseUrl,
|
|
66367
66405
|
apiKey: () => {
|
|
66368
|
-
const resolution = resolveCredential({ credential: definition.credential, env: ports.env, port: ports.credentials, subject: `provider ${name}` });
|
|
66406
|
+
const resolution = resolveCredential({ credential: isRouterProvider(definition) ? { sources: [] } : definition.credential, env: ports.env, port: ports.credentials, subject: `provider ${name}` });
|
|
66369
66407
|
if (!resolution.ok) {
|
|
66370
66408
|
throw new Error(resolution.message);
|
|
66371
66409
|
}
|
|
@@ -111816,6 +111854,9 @@ function applyProfileChange(paths, name, change) {
|
|
|
111816
111854
|
if (change.launchExplain !== void 0) {
|
|
111817
111855
|
launchPatch.explain = change.launchExplain;
|
|
111818
111856
|
}
|
|
111857
|
+
if (change.launchRouteByName !== void 0) {
|
|
111858
|
+
launchPatch.routeByName = change.launchRouteByName;
|
|
111859
|
+
}
|
|
111819
111860
|
if (Object.keys(launchPatch).length > 0) {
|
|
111820
111861
|
setProfileLaunchFlags(paths, name, launchPatch);
|
|
111821
111862
|
touched = true;
|
|
@@ -113102,7 +113143,7 @@ function registerProfileCommand(program2, deps) {
|
|
|
113102
113143
|
withExamples(
|
|
113103
113144
|
profile.command("set <name>").description(
|
|
113104
113145
|
"Update a configuration profile's categories, entries, extends list, description or launch settings. With no options on a terminal, walks through its categories."
|
|
113105
|
-
).option("--category <category=bool>", "Share (true) or hide (false) a whole category (repeatable).", collectBoolPair).option("--entry <path=bool>", "Share (true) or hide (false) one <category>/<path> entry (repeatable).", collectBoolPair).option("--extends <profile>", "Replace the extends list with these profiles (repeatable, in order).", collectRepeated).option("--no-extends", "Clear the extends list.").option("--description <text>", "Replace the description.").option("--no-description", "Clear the description.").option("--launch-skip-permissions", "Launches under this profile skip permission prompts.").option("--no-launch-skip-permissions", "Launches under this profile keep permission prompts.").option("--launch-remote-control", "Launches under this profile enable Remote Control.").option("--no-launch-remote-control", "Launches under this profile leave Remote Control off.").option("--launch-headroom", "Launches under this profile route through headroom.").option("--no-launch-headroom", "Launches under this profile route direct.").option("--launch-track-usage", "Launches under this profile route through the front door so their requests and quota are recorded, with no headroom needed.").option("--no-launch-track-usage", "Launches under this profile are not recorded unless a provider or headroom routes them anyway.").option("--launch-provider <provider>", "Launches under this profile route through this provider.").option("--no-launch-provider", "Clear this profile's provider selection.").option("--launch-claude-version <version>", "Launches under this profile run exactly this installed Claude Code version (such as 2.1.220); a version that is not installed fails the launch.").option("--no-launch-claude-version", "Clear this profile's Claude Code version pin.").option("--launch-delay <duration>", "Launches under this profile wait this long (such as 5s) after the launcher's own output before starting claude, so the output can be read.", parseDurationLiteral).option("--no-launch-delay", "Clear this profile's launch delay.").option("--launch-pause", "Launches under this profile wait for a key press after the launcher's own output before starting claude.").option("--no-launch-pause", "Launches under this profile start claude without waiting for a key press.").option("--launch-explain", "Launches under this profile that pick from a pool list every member the pick ranked and why, in the launcher's report.").option("--no-launch-explain", "Launches under this profile name only the member a pool pick chose.").option("--json", "Print the result as JSON.").action(async (name, allOptions) => {
|
|
113146
|
+
).option("--category <category=bool>", "Share (true) or hide (false) a whole category (repeatable).", collectBoolPair).option("--entry <path=bool>", "Share (true) or hide (false) one <category>/<path> entry (repeatable).", collectBoolPair).option("--extends <profile>", "Replace the extends list with these profiles (repeatable, in order).", collectRepeated).option("--no-extends", "Clear the extends list.").option("--description <text>", "Replace the description.").option("--no-description", "Clear the description.").option("--launch-skip-permissions", "Launches under this profile skip permission prompts.").option("--no-launch-skip-permissions", "Launches under this profile keep permission prompts.").option("--launch-remote-control", "Launches under this profile enable Remote Control.").option("--no-launch-remote-control", "Launches under this profile leave Remote Control off.").option("--launch-headroom", "Launches under this profile route through headroom.").option("--no-launch-headroom", "Launches under this profile route direct.").option("--launch-track-usage", "Launches under this profile route through the front door so their requests and quota are recorded, with no headroom needed.").option("--no-launch-track-usage", "Launches under this profile are not recorded unless a provider or headroom routes them anyway.").option("--launch-provider <provider>", "Launches under this profile route through this provider.").option("--no-launch-provider", "Clear this profile's provider selection.").option("--launch-claude-version <version>", "Launches under this profile run exactly this installed Claude Code version (such as 2.1.220); a version that is not installed fails the launch.").option("--no-launch-claude-version", "Clear this profile's Claude Code version pin.").option("--launch-delay <duration>", "Launches under this profile wait this long (such as 5s) after the launcher's own output before starting claude, so the output can be read.", parseDurationLiteral).option("--no-launch-delay", "Clear this profile's launch delay.").option("--launch-pause", "Launches under this profile wait for a key press after the launcher's own output before starting claude.").option("--no-launch-pause", "Launches under this profile start claude without waiting for a key press.").option("--launch-explain", "Launches under this profile that pick from a pool list every member the pick ranked and why, in the launcher's report.").option("--no-launch-explain", "Launches under this profile name only the member a pool pick chose.").option("--launch-route-by-name", "Launches under this profile route provider-qualified model names through the models block to the provider that serves them.").option("--no-launch-route-by-name", "Launches under this profile send every request to the launch provider.").option("--json", "Print the result as JSON.").action(async (name, allOptions) => {
|
|
113106
113147
|
const { json: json2, ...options } = allOptions;
|
|
113107
113148
|
requireProfileExists(paths, name);
|
|
113108
113149
|
if (Object.entries(allOptions).every(([key, value2]) => key === "json" || value2 === void 0)) {
|
|
@@ -113732,11 +113773,12 @@ function cachedState(cacheEnv, owner, block2) {
|
|
|
113732
113773
|
function buildCredentialReport(provider, identity, identityName, cacheEnv) {
|
|
113733
113774
|
const identityCredential = identity?.credential === void 0 ? void 0 : summariseCredential(identity.credential);
|
|
113734
113775
|
const identityCached = identity?.credential === void 0 || identityName === void 0 ? void 0 : cachedState(cacheEnv, `identity ${identityName}`, identity.credential);
|
|
113735
|
-
const
|
|
113776
|
+
const providerCredential = provider?.definition !== void 0 && !isRouterProvider(provider.definition) ? provider.definition.credential : void 0;
|
|
113777
|
+
const providerCached = providerCredential === void 0 || provider === void 0 ? void 0 : cachedState(cacheEnv, `provider ${provider.name}`, providerCredential);
|
|
113736
113778
|
return {
|
|
113737
113779
|
applies: provider !== void 0 ? "provider" : identityCredential !== void 0 ? "identity" : "stored-login",
|
|
113738
113780
|
...provider === void 0 ? {} : {
|
|
113739
|
-
provider: provider.problem === void 0 ? { name: provider.name, credential: summariseCredential(
|
|
113781
|
+
provider: provider.problem === void 0 ? { name: provider.name, ...providerCredential === void 0 ? {} : { credential: summariseCredential(providerCredential), ...providerCached === void 0 ? {} : { cached: providerCached } } } : { name: provider.name, problem: provider.problem }
|
|
113740
113782
|
},
|
|
113741
113783
|
...identityCredential === void 0 ? {} : { identity: identityCredential },
|
|
113742
113784
|
...identityCached === void 0 ? {} : { identityCached }
|
|
@@ -113831,7 +113873,7 @@ function formatCheckReport(report) {
|
|
|
113831
113873
|
const { credential } = report;
|
|
113832
113874
|
if (credential.provider !== void 0) {
|
|
113833
113875
|
lines.push(
|
|
113834
|
-
` Provider ${credential.provider.name}: ${credential.provider.credential === void 0 ? `unusable: ${credential.provider.problem}` : formatCredentialSummary(credential.provider.credential)}${credential.provider.cached === void 0 ? "" : `; ${formatCachedCredentialState(credential.provider.cached)}`}`
|
|
113876
|
+
` Provider ${credential.provider.name}: ${credential.provider.credential === void 0 ? `unusable: ${credential.provider.problem ?? ""}` : formatCredentialSummary(credential.provider.credential)}${credential.provider.cached === void 0 ? "" : `; ${formatCachedCredentialState(credential.provider.cached)}`}`
|
|
113835
113877
|
);
|
|
113836
113878
|
}
|
|
113837
113879
|
if (credential.identity !== void 0) {
|
|
@@ -119586,9 +119628,11 @@ function pushProvider(push, entry, cacheEnv, signIn) {
|
|
|
119586
119628
|
if (validated2.ignored.length > 0) {
|
|
119587
119629
|
push("provider", "warn", describeIgnoredKeys(entry.path, validated2.ignored), entry.name);
|
|
119588
119630
|
}
|
|
119589
|
-
const
|
|
119590
|
-
|
|
119591
|
-
|
|
119631
|
+
const router = isRouterProvider(validated2.data);
|
|
119632
|
+
const noCache = { unreadable: false, text: "" };
|
|
119633
|
+
const cache = router ? noCache : cacheClause(cacheEnv, `provider ${entry.name}`, validated2.data.credential);
|
|
119634
|
+
push("provider", cache.unreadable ? "fail" : "pass", router ? `${entry.name} is valid (${describeProviderEndpoint(validated2.data)})` : `${entry.name} is valid (${describeProviderEndpoint(validated2.data)}, credential ${describeCredential(validated2.data.credential)})${cache.text}.`, entry.name);
|
|
119635
|
+
if (!router && validated2.data.env?.ENABLE_TOOL_SEARCH === void 0) {
|
|
119592
119636
|
push("provider", "warn", `${entry.name} does not set ENABLE_TOOL_SEARCH: a session on this provider keeps Claude Code's own API as its base URL, so it defers MCP tool loading and sends tool_reference payloads the upstream backend must understand. Set ENABLE_TOOL_SEARCH=false in the provider's env block to load tools upfront instead, when the backend does not support them.`, entry.name);
|
|
119593
119637
|
}
|
|
119594
119638
|
if (signIn !== void 0 && isCodexProvider(validated2.data) && validated2.data.codex?.login === "chatgpt-sign-in") {
|
|
@@ -125491,7 +125535,7 @@ var CachedCredentialStateSchema = external_exports.union([
|
|
|
125491
125535
|
external_exports.strictObject({ store: external_exports.enum(CREDENTIAL_CACHE_STORES), status: external_exports.enum(["fresh", "expired"]), ageMs: external_exports.number(), expiresInMs: external_exports.number().optional() })
|
|
125492
125536
|
]);
|
|
125493
125537
|
var CheckCredentialProviderSchema = external_exports.union([
|
|
125494
|
-
external_exports.strictObject({ name: external_exports.string(), credential: CredentialSummarySchema, cached: CachedCredentialStateSchema.optional() }),
|
|
125538
|
+
external_exports.strictObject({ name: external_exports.string(), credential: CredentialSummarySchema.optional(), cached: CachedCredentialStateSchema.optional() }),
|
|
125495
125539
|
external_exports.strictObject({ name: external_exports.string(), problem: external_exports.string() })
|
|
125496
125540
|
]);
|
|
125497
125541
|
var CheckCredentialSchema = external_exports.strictObject({
|
|
@@ -128140,7 +128184,7 @@ var ProviderValueSchema = external_exports.strictObject({
|
|
|
128140
128184
|
displayName: external_exports.string(),
|
|
128141
128185
|
baseUrl: external_exports.string().optional(),
|
|
128142
128186
|
codex: CodexProviderConfigSchema.optional(),
|
|
128143
|
-
credential: CredentialSummarySchema2,
|
|
128187
|
+
credential: CredentialSummarySchema2.optional(),
|
|
128144
128188
|
env: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
128145
128189
|
});
|
|
128146
128190
|
var ConfigNameInputSchema = external_exports.strictObject({ name: external_exports.string().min(1) });
|
|
@@ -128178,7 +128222,8 @@ var ConfigProfileSetInputSchema = external_exports.strictObject({
|
|
|
128178
128222
|
claudeVersion: external_exports.union([external_exports.string().min(1), external_exports.literal(false)]).optional(),
|
|
128179
128223
|
delay: external_exports.union([external_exports.string().regex(DURATION_RE), external_exports.literal(false)]).optional(),
|
|
128180
128224
|
pause: external_exports.boolean().optional(),
|
|
128181
|
-
explain: external_exports.boolean().optional()
|
|
128225
|
+
explain: external_exports.boolean().optional(),
|
|
128226
|
+
routeByName: external_exports.boolean().optional()
|
|
128182
128227
|
}).optional()
|
|
128183
128228
|
});
|
|
128184
128229
|
var ConfigProfileSetOutputSchema = storedMutationOutput("profile", "updated", ProfileValueSchema);
|
|
@@ -128290,9 +128335,8 @@ function providerValue(name, provider) {
|
|
|
128290
128335
|
name,
|
|
128291
128336
|
kind: provider.kind ?? "http",
|
|
128292
128337
|
displayName: provider.displayName,
|
|
128293
|
-
...isCodexProvider(provider) ? provider.codex === void 0 ? {} : { codex: provider.codex } : isAntigravityProvider(provider) ? provider.antigravity === void 0 ? {} : { antigravity: provider.antigravity } : { baseUrl: provider.baseUrl },
|
|
128294
|
-
credential: summariseCredential(provider.credential),
|
|
128295
|
-
...provider.env === void 0 ? {} : { env: provider.env }
|
|
128338
|
+
...isCodexProvider(provider) ? provider.codex === void 0 ? {} : { codex: provider.codex } : isAntigravityProvider(provider) ? provider.antigravity === void 0 ? {} : { antigravity: provider.antigravity } : isRouterProvider(provider) ? {} : { baseUrl: provider.baseUrl },
|
|
128339
|
+
...isRouterProvider(provider) ? {} : { credential: summariseCredential(provider.credential), ...provider.env === void 0 ? {} : { env: provider.env } }
|
|
128296
128340
|
};
|
|
128297
128341
|
}
|
|
128298
128342
|
function profileValue(name, paths) {
|
|
@@ -128391,7 +128435,8 @@ function createConfigApiRouter(deps) {
|
|
|
128391
128435
|
...launch?.claudeVersion === void 0 ? {} : { launchClaudeVersion: launch.claudeVersion },
|
|
128392
128436
|
...launch?.delay === void 0 ? {} : { launchDelay: launch.delay },
|
|
128393
128437
|
...launch?.pause === void 0 ? {} : { launchPause: launch.pause },
|
|
128394
|
-
...launch?.explain === void 0 ? {} : { launchExplain: launch.explain }
|
|
128438
|
+
...launch?.explain === void 0 ? {} : { launchExplain: launch.explain },
|
|
128439
|
+
...launch?.routeByName === void 0 ? {} : { launchRouteByName: launch.routeByName }
|
|
128395
128440
|
});
|
|
128396
128441
|
return { action: "updated", kind: "profile", name: input2.name, value: profileValue(input2.name, paths) };
|
|
128397
128442
|
})
|
|
@@ -128474,7 +128519,7 @@ function createConfigApiRouter(deps) {
|
|
|
128474
128519
|
if (input2.baseUrl !== void 0 && isHttpProvider(existing) && input2.baseUrl !== existing.baseUrl && credential?.sources === void 0) {
|
|
128475
128520
|
throw new ORPCError("BAD_REQUEST", { message: `Changing the base URL of provider "${input2.name}" requires a credential block in the same call: the stored credential is not sent to a different endpoint.` });
|
|
128476
128521
|
}
|
|
128477
|
-
const cache = credential?.cache === void 0 ? void 0 : mergeCredentialCache(credential.cache === false ? { enabled: false } : { ...credential.cache, enabled: true }, existing.credential.cache);
|
|
128522
|
+
const cache = credential?.cache === void 0 || isRouterProvider(existing) ? void 0 : mergeCredentialCache(credential.cache === false ? { enabled: false } : { ...credential.cache, enabled: true }, isRouterProvider(existing) ? void 0 : existing.credential.cache);
|
|
128478
128523
|
const updated = updateProvider(paths, input2.name, {
|
|
128479
128524
|
...input2.displayName === void 0 ? {} : { displayName: input2.displayName },
|
|
128480
128525
|
...input2.baseUrl === void 0 ? {} : { baseUrl: input2.baseUrl },
|
|
@@ -128693,6 +128738,7 @@ var LaunchFlagsSchema = external_exports.strictObject({
|
|
|
128693
128738
|
trackUsage: external_exports.boolean(),
|
|
128694
128739
|
pause: external_exports.boolean(),
|
|
128695
128740
|
explain: external_exports.boolean(),
|
|
128741
|
+
routeByName: external_exports.boolean(),
|
|
128696
128742
|
/** How long the launch waits after its own output before it starts claude, in milliseconds. */
|
|
128697
128743
|
delayMs: external_exports.number()
|
|
128698
128744
|
});
|
|
@@ -128706,7 +128752,7 @@ var LaunchResolveOutputSchema = external_exports.strictObject({
|
|
|
128706
128752
|
args: external_exports.readonly(external_exports.array(external_exports.string())),
|
|
128707
128753
|
/** The credential the launch would authenticate with, by target and source kinds. Absent when none applies. */
|
|
128708
128754
|
credential: external_exports.strictObject({ subject: external_exports.enum(["provider", "identity"]), name: external_exports.string(), summary: CredentialSummarySchema }).optional(),
|
|
128709
|
-
routing: external_exports.strictObject({ frontDoor: external_exports.boolean(), headroom: external_exports.boolean() }),
|
|
128755
|
+
routing: external_exports.strictObject({ frontDoor: external_exports.boolean(), headroom: external_exports.boolean(), routeByName: external_exports.boolean() }),
|
|
128710
128756
|
/** The names of the environment variables the launch would set or unset, sorted. Values are not reported. */
|
|
128711
128757
|
environment: external_exports.readonly(external_exports.array(external_exports.string())),
|
|
128712
128758
|
warnings: external_exports.readonly(external_exports.array(external_exports.string()))
|
|
@@ -131080,6 +131126,23 @@ function scopeSessionProviderPath(request7) {
|
|
|
131080
131126
|
}
|
|
131081
131127
|
return { ...request7, url: `${PROVIDER_PATH_PREFIX}${encodeURIComponent(request7.session.provider)}${request7.url}` };
|
|
131082
131128
|
}
|
|
131129
|
+
function resolveModelTarget(model, models, includeUnqualified) {
|
|
131130
|
+
if (models === void 0) {
|
|
131131
|
+
return model.includes("/") && !model.startsWith("acct:") ? model.split("/")[0] : void 0;
|
|
131132
|
+
}
|
|
131133
|
+
if (model.includes("/") && !model.startsWith("acct:")) {
|
|
131134
|
+
return model.split("/")[0];
|
|
131135
|
+
}
|
|
131136
|
+
if (!includeUnqualified) {
|
|
131137
|
+
return void 0;
|
|
131138
|
+
}
|
|
131139
|
+
const virtual = models.virtual?.[model];
|
|
131140
|
+
const first = virtual?.members.find((member) => !member.startsWith("acct:") && !member.startsWith("family:"));
|
|
131141
|
+
if (first === void 0) {
|
|
131142
|
+
return void 0;
|
|
131143
|
+
}
|
|
131144
|
+
return first.includes("/") ? first.split("/")[0] : resolveModelTarget(first, models, true);
|
|
131145
|
+
}
|
|
131083
131146
|
function createProviderRouteResolver(deps) {
|
|
131084
131147
|
const oauthRoute = createPassthroughRoute("anthropic", { baseUrl: `https://${CONNECT_INTERCEPT_HOST}:${String(HTTPS_PORT)}`, stripPrefix: void 0, headroomUpstream: void 0 });
|
|
131085
131148
|
const antigravityQuotaSources = /* @__PURE__ */ new Map();
|
|
@@ -131192,6 +131255,9 @@ function createProviderRouteResolver(deps) {
|
|
|
131192
131255
|
)
|
|
131193
131256
|
};
|
|
131194
131257
|
}
|
|
131258
|
+
if (isRouterProvider(definition)) {
|
|
131259
|
+
return { ok: true, route: passthroughFor(`router:${provider}`, { baseUrl: `http://127.0.0.1:${String(deps.directPort())}`, stripPrefix: `${PROVIDER_PATH_PREFIX}${encodeURIComponent(provider)}`, headroomUpstream: directOrigin2(deps.directPort()) }) };
|
|
131260
|
+
}
|
|
131195
131261
|
const httpProvider = definition;
|
|
131196
131262
|
return {
|
|
131197
131263
|
ok: true,
|
|
@@ -131231,11 +131297,33 @@ function createProviderRouteResolver(deps) {
|
|
|
131231
131297
|
visited.add(providerName);
|
|
131232
131298
|
}
|
|
131233
131299
|
let routes;
|
|
131300
|
+
let isRouter;
|
|
131234
131301
|
try {
|
|
131235
131302
|
const definition = providerName === void 0 ? void 0 : loadProvider(deps.providersDir, providerName, deps.fs);
|
|
131236
131303
|
routes = definition === void 0 || !isHttpProvider(definition) ? void 0 : definition.routes;
|
|
131304
|
+
isRouter = definition !== void 0 && isRouterProvider(definition);
|
|
131237
131305
|
} catch {
|
|
131238
131306
|
routes = void 0;
|
|
131307
|
+
isRouter = false;
|
|
131308
|
+
}
|
|
131309
|
+
const routesByName = isRouter || current.session.routeByName && providerName !== void 0;
|
|
131310
|
+
if (routesByName) {
|
|
131311
|
+
const scan2 = await scanRequestHead(current, false);
|
|
131312
|
+
if (scan2.replayed !== void 0) {
|
|
131313
|
+
replay = scan2.replayed;
|
|
131314
|
+
}
|
|
131315
|
+
const target = scan2.model === void 0 || providerName === void 0 ? void 0 : resolveModelTarget(scan2.model, deps.models?.(), isRouter || current.session.routeByName);
|
|
131316
|
+
if (target === providerName) {
|
|
131317
|
+
const resolution = resolve2(current);
|
|
131318
|
+
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;
|
|
131319
|
+
}
|
|
131320
|
+
if (target !== void 0) {
|
|
131321
|
+
const rest2 = path65.slice(`${PROVIDER_PATH_PREFIX}${encodeURIComponent(providerName ?? "")}`.length);
|
|
131322
|
+
const query2 = current.url.includes("?") ? current.url.slice(current.url.indexOf("?")) : "";
|
|
131323
|
+
const carried = scan2.replayed ?? current;
|
|
131324
|
+
current = { ...current, url: `${PROVIDER_PATH_PREFIX}${encodeURIComponent(target)}${rest2}${query2}`, body: carried.body, headers: carried.headers };
|
|
131325
|
+
continue;
|
|
131326
|
+
}
|
|
131239
131327
|
}
|
|
131240
131328
|
if (routes === void 0 || routes.length === 0) {
|
|
131241
131329
|
const resolution = resolve2(current);
|
|
@@ -134453,6 +134541,8 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
134453
134541
|
const rcControlToken = (0, import_node_crypto25.randomUUID)();
|
|
134454
134542
|
const resolveRoute = rcObservingResolver(
|
|
134455
134543
|
createProviderRouteResolver({
|
|
134544
|
+
// Read live so a models-block edit reaches the next request without a door restart.
|
|
134545
|
+
models: () => readModels(paths),
|
|
134456
134546
|
fs: realFsPort,
|
|
134457
134547
|
providersDir: paths.providersDir,
|
|
134458
134548
|
codexPorts,
|
|
@@ -145715,6 +145805,7 @@ function registerCompletionCommand(program2) {
|
|
|
145715
145805
|
var import_node_child_process8 = require("node:child_process");
|
|
145716
145806
|
init_commandDeps();
|
|
145717
145807
|
init_cliError();
|
|
145808
|
+
init_schema();
|
|
145718
145809
|
init_credential();
|
|
145719
145810
|
init_credentialCache();
|
|
145720
145811
|
|
|
@@ -145783,6 +145874,9 @@ function credentialSubject(deps, name, asProvider) {
|
|
|
145783
145874
|
if (provider === void 0) {
|
|
145784
145875
|
throw new ProviderNotFoundError(name);
|
|
145785
145876
|
}
|
|
145877
|
+
if (isRouterProvider(provider)) {
|
|
145878
|
+
throw new UsageError(`Provider "${name}" is a router: it has no credential of its own.`);
|
|
145879
|
+
}
|
|
145786
145880
|
return { name, subject: `provider ${name}`, credential: provider.credential };
|
|
145787
145881
|
}
|
|
145788
145882
|
const identity = readIdentity(deps.paths, name);
|
|
@@ -146821,11 +146915,11 @@ function toProviderView(name, provider) {
|
|
|
146821
146915
|
name,
|
|
146822
146916
|
kind: provider.kind ?? "http",
|
|
146823
146917
|
displayName: provider.displayName,
|
|
146824
|
-
...isCodexProvider(provider) ? provider.codex === void 0 ? {} : { codex: provider.codex } : isAntigravityProvider(provider) ? provider.antigravity === void 0 ? {} : { antigravity: provider.antigravity } : { baseUrl: provider.baseUrl },
|
|
146825
|
-
credential: summariseCredential(provider.credential),
|
|
146826
|
-
|
|
146827
|
-
|
|
146828
|
-
...isCodexProvider(provider) || isAntigravityProvider(provider) || provider.catalogue === void 0 ? {} : { catalogue: provider.catalogue }
|
|
146918
|
+
...isCodexProvider(provider) ? provider.codex === void 0 ? {} : { codex: provider.codex } : isAntigravityProvider(provider) ? provider.antigravity === void 0 ? {} : { antigravity: provider.antigravity } : isRouterProvider(provider) ? {} : { baseUrl: provider.baseUrl },
|
|
146919
|
+
...isRouterProvider(provider) ? {} : { credential: summariseCredential(provider.credential) },
|
|
146920
|
+
...!isRouterProvider(provider) && provider.env !== void 0 ? { env: provider.env } : {},
|
|
146921
|
+
...!isRouterProvider(provider) && provider.pickerModels !== void 0 ? { pickerModels: provider.pickerModels } : {},
|
|
146922
|
+
...isCodexProvider(provider) || isAntigravityProvider(provider) || isRouterProvider(provider) || provider.catalogue === void 0 ? {} : { catalogue: provider.catalogue }
|
|
146829
146923
|
};
|
|
146830
146924
|
}
|
|
146831
146925
|
function antigravityConfigFromOptions(options) {
|
|
@@ -146933,7 +147027,7 @@ function registerProviderCommand(program2, deps) {
|
|
|
146933
147027
|
...antigravity === void 0 ? {} : { antigravity }
|
|
146934
147028
|
});
|
|
146935
147029
|
reportMutation(options.json, { action: "created", kind: "provider", name, value: created }, () => {
|
|
146936
|
-
console.log(`Created provider "${name}" (${describeProviderEndpoint(created)}
|
|
147030
|
+
console.log(`Created provider "${name}" (${describeProviderEndpoint(created)}${isRouterProvider(created) ? "" : `, credential ${describeCredential(created.credential)}`}).`);
|
|
146937
147031
|
});
|
|
146938
147032
|
}),
|
|
146939
147033
|
[
|
|
@@ -146967,12 +147061,13 @@ function registerProviderCommand(program2, deps) {
|
|
|
146967
147061
|
}
|
|
146968
147062
|
const codex = codexConfigFromOptions(options);
|
|
146969
147063
|
const antigravity = antigravityConfigFromOptions(options);
|
|
146970
|
-
const
|
|
147064
|
+
const existingForCache = readProvider(paths, name);
|
|
147065
|
+
const cache = cacheChange(options, existingForCache !== void 0 && !isRouterProvider(existingForCache) ? existingForCache.credential.cache : void 0);
|
|
146971
147066
|
if (options.unsetCatalogue === true && hasCatalogueOptions(options)) {
|
|
146972
147067
|
throw new UsageError("--unset-catalogue cannot be combined with another --catalogue option.");
|
|
146973
147068
|
}
|
|
146974
147069
|
const existingProvider = readProvider(paths, name);
|
|
146975
|
-
const catalogue = options.unsetCatalogue === true ? false : catalogueFromOptions(options, existingProvider !== void 0 && !isCodexProvider(existingProvider) && !isAntigravityProvider(existingProvider) ? existingProvider.catalogue : void 0);
|
|
147070
|
+
const catalogue = options.unsetCatalogue === true ? false : catalogueFromOptions(options, existingProvider !== void 0 && !isCodexProvider(existingProvider) && !isAntigravityProvider(existingProvider) && !isRouterProvider(existingProvider) ? existingProvider.catalogue : void 0);
|
|
146976
147071
|
const updated = updateProvider(paths, name, {
|
|
146977
147072
|
...codex === void 0 ? {} : { codex },
|
|
146978
147073
|
...antigravity === void 0 ? {} : { antigravity },
|
|
@@ -146988,7 +147083,7 @@ function registerProviderCommand(program2, deps) {
|
|
|
146988
147083
|
...catalogue === void 0 ? {} : { catalogue }
|
|
146989
147084
|
});
|
|
146990
147085
|
reportMutation(json2, { action: "updated", kind: "provider", name, value: updated }, () => {
|
|
146991
|
-
console.log(`Updated provider "${name}" (${describeProviderEndpoint(updated)}
|
|
147086
|
+
console.log(`Updated provider "${name}" (${describeProviderEndpoint(updated)}${isRouterProvider(updated) ? "" : `, credential ${describeCredential(updated.credential)}`}).`);
|
|
146992
147087
|
});
|
|
146993
147088
|
}),
|
|
146994
147089
|
[
|
|
@@ -147046,16 +147141,18 @@ function registerProviderCommand(program2, deps) {
|
|
|
147046
147141
|
console.log(`Antigravity effort: ${config2.effort}`);
|
|
147047
147142
|
console.log(`Antigravity degrade down tiers: ${config2.degradeDownTiers ? "on" : "off"}`);
|
|
147048
147143
|
console.log(`Endpoint: ${describeProviderEndpoint(found)}`);
|
|
147049
|
-
} else {
|
|
147144
|
+
} else if (!isRouterProvider(found)) {
|
|
147050
147145
|
console.log(`Base URL: ${found.baseUrl}`);
|
|
147051
147146
|
}
|
|
147052
|
-
|
|
147053
|
-
|
|
147147
|
+
if (!isRouterProvider(found)) {
|
|
147148
|
+
console.log(`Credential: ${describeCredential(found.credential)}`);
|
|
147149
|
+
}
|
|
147150
|
+
const env = Object.entries(isRouterProvider(found) ? {} : found.env ?? {});
|
|
147054
147151
|
console.log(`Environment: ${env.length === 0 ? "(none)" : env.map(([key, value2]) => `${key}=${value2}`).join(", ")}`);
|
|
147055
|
-
if (found.pickerModels !== void 0) {
|
|
147152
|
+
if (!isRouterProvider(found) && found.pickerModels !== void 0) {
|
|
147056
147153
|
console.log(`Picker models: ${found.pickerModels.map((entry) => `${entry.model} (${entry.tier})`).join(", ")}`);
|
|
147057
147154
|
}
|
|
147058
|
-
if (!isCodexProvider(found) && !isAntigravityProvider(found) && found.catalogue !== void 0) {
|
|
147155
|
+
if (!isCodexProvider(found) && !isAntigravityProvider(found) && !isRouterProvider(found) && found.catalogue !== void 0) {
|
|
147059
147156
|
const { tier, include, exclude, url: url2 } = found.catalogue;
|
|
147060
147157
|
console.log(`Catalogue: tier ${tier}${include === void 0 ? "" : `, include ${include.join(" ")}`}${exclude === void 0 ? "" : `, exclude ${exclude.join(" ")}`}${url2 === void 0 ? "" : `, url ${url2}`} (see \`provider models ${name}\`)`);
|
|
147061
147158
|
}
|
|
@@ -147068,7 +147165,7 @@ function registerProviderCommand(program2, deps) {
|
|
|
147068
147165
|
if (found === void 0) {
|
|
147069
147166
|
throw new ProviderNotFoundError(name);
|
|
147070
147167
|
}
|
|
147071
|
-
if (isCodexProvider(found) || isAntigravityProvider(found) || found.catalogue === void 0) {
|
|
147168
|
+
if (isCodexProvider(found) || isAntigravityProvider(found) || isRouterProvider(found) || found.catalogue === void 0) {
|
|
147072
147169
|
throw new UsageError(`Provider "${name}" has no catalogue setting. Set one with \`agent-shim provider set ${name} --catalogue-tier <tier>\`.`);
|
|
147073
147170
|
}
|
|
147074
147171
|
const catalogueSetting = found.catalogue;
|
|
@@ -147865,11 +147962,12 @@ Launching:
|
|
|
147865
147962
|
--delay <duration> wait this long (5s, 500ms) after the launcher's own output before starting claude
|
|
147866
147963
|
--[no-]pause wait for a key press after the launcher's own output before starting claude
|
|
147867
147964
|
--[no-]explain with @pool:<name>, list every member the pick ranked and why, not only the one picked
|
|
147965
|
+
--[no-]route-by-name route provider-qualified model names through the models block to the provider that serves them
|
|
147868
147966
|
--native run the real claude with nothing from agent-shim applied (no other launch flag allowed)
|
|
147869
147967
|
|
|
147870
147968
|
Environment:
|
|
147871
147969
|
AGENT_SHIM_IDENTITY, AGENT_SHIM_CONFIG_PROFILE, AGENT_SHIM_SKIP_PERMISSIONS,
|
|
147872
|
-
AGENT_SHIM_REMOTE_CONTROL, AGENT_SHIM_HEADROOM, AGENT_SHIM_TRACK_USAGE, AGENT_SHIM_DELAY, AGENT_SHIM_PAUSE, AGENT_SHIM_EXPLAIN, AGENT_SHIM_ALLOW_AMBIENT_CREDENTIAL,
|
|
147970
|
+
AGENT_SHIM_REMOTE_CONTROL, AGENT_SHIM_HEADROOM, AGENT_SHIM_TRACK_USAGE, AGENT_SHIM_DELAY, AGENT_SHIM_PAUSE, AGENT_SHIM_EXPLAIN, AGENT_SHIM_ROUTE_BY_NAME, AGENT_SHIM_ALLOW_AMBIENT_CREDENTIAL,
|
|
147873
147971
|
AGENT_SHIM_CATEGORY_OVERRIDE, AGENT_SHIM_ENTRY_OVERRIDE, AGENT_SHIM_HOME,
|
|
147874
147972
|
AGENT_SHIM_DEBUG (print stack traces), NO_COLOR. Booleans are true, false, 1 or 0.
|
|
147875
147973
|
|
|
@@ -148593,6 +148691,7 @@ function otherLaunchFlags(parsed) {
|
|
|
148593
148691
|
...parsed.delay === void 0 ? [] : ["--delay"],
|
|
148594
148692
|
...parsed.pause === void 0 ? [] : ["--[no-]pause"],
|
|
148595
148693
|
...parsed.explain === void 0 ? [] : ["--[no-]explain"],
|
|
148694
|
+
...parsed.routeByName === void 0 ? [] : ["--[no-]route-by-name"],
|
|
148596
148695
|
...parsed.headroom === void 0 ? [] : ["--[no-]headroom"],
|
|
148597
148696
|
...parsed.trackUsage === void 0 ? [] : ["--[no-]track-usage"],
|
|
148598
148697
|
...parsed.skipPermissions === void 0 ? [] : ["--[no-]skip-permissions"],
|