claude-use 11.24.0 → 11.25.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 +1 -0
- package/dist/cli.cjs +82 -33
- package/dist/index.cjs +54 -22
- package/dist/index.mjs +54 -22
- package/dist/types/index.d.ts +71 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -119,6 +119,7 @@ agent-shim provider add <name> --display-name <name> (--base-url <url> | --kind
|
|
|
119
119
|
[--codex-default-model <model>] [--codex-model <tier=model>]... [--codex-effort <none|low|medium|high>] [--codex-login <codex-cli|chatgpt-sign-in>]
|
|
120
120
|
agent-shim provider set <name> [--display-name <name>] ([--base-url <url>] | --kind codex) [--credential <source>]... [--credential-target <bearer|apiKey>] [--env KEY=VALUE]... [--unset-env KEY]... [--json]
|
|
121
121
|
[--codex-default-model <model>] [--codex-model <tier=model>]... [--codex-effort <none|low|medium|high>] [--codex-login <codex-cli|chatgpt-sign-in>]
|
|
122
|
+
agent-shim provider add|set <name> [--picker-model <model=tier>]... # models /model lists beside the tier models; set also takes [--unset-picker-model <model>]...
|
|
122
123
|
agent-shim provider list [--json]
|
|
123
124
|
agent-shim provider show <name> [--json]
|
|
124
125
|
agent-shim provider remove <name> [--yes] [--json]
|
package/dist/cli.cjs
CHANGED
|
@@ -26987,7 +26987,7 @@ function isTimeZone(name) {
|
|
|
26987
26987
|
return false;
|
|
26988
26988
|
}
|
|
26989
26989
|
}
|
|
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,
|
|
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, HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema, ProviderSchema, 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
26991
|
var init_schema = __esm({
|
|
26992
26992
|
"src/config/schema.ts"() {
|
|
26993
26993
|
"use strict";
|
|
@@ -27088,7 +27088,7 @@ var init_schema = __esm({
|
|
|
27088
27088
|
});
|
|
27089
27089
|
PROVIDER_KINDS = ["http", "codex", "antigravity"];
|
|
27090
27090
|
ANTIGRAVITY_MODES = ["cloud", "local"];
|
|
27091
|
-
|
|
27091
|
+
CLAUDE_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
27092
27092
|
ANTIGRAVITY_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
27093
27093
|
ANTIGRAVITY_DEFAULT_MODE = "cloud";
|
|
27094
27094
|
ANTIGRAVITY_DEFAULT_MODEL = "gemini-3.8-flash-high";
|
|
@@ -27105,7 +27105,7 @@ var init_schema = __esm({
|
|
|
27105
27105
|
mode: external_exports.enum(ANTIGRAVITY_MODES).optional(),
|
|
27106
27106
|
/** The model a request maps to when no tier matches its model name. */
|
|
27107
27107
|
defaultModel: external_exports.string().min(1).optional(),
|
|
27108
|
-
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `
|
|
27108
|
+
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `CLAUDE_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. A value is one model or an ordered list of candidates: the request goes to the first whose quota windows are not spent, and when every candidate is spent, to the one whose binding window lifts soonest. */
|
|
27109
27109
|
models: external_exports.record(external_exports.string().min(1), AntigravityModelTargetSchema).optional(),
|
|
27110
27110
|
/** When every candidate of the tier a request names has no quota left, serve it from the next tier down, and onward through the lower tiers, instead of failing with the quota limit. Applies to a name that selects a tier (`/model fable`), not to an alias or a backend model name. Defaults to false. */
|
|
27111
27111
|
degradeDownTiers: external_exports.boolean().optional(),
|
|
@@ -27128,7 +27128,6 @@ var init_schema = __esm({
|
|
|
27128
27128
|
socketPath: external_exports.string().min(1).optional()
|
|
27129
27129
|
}).optional()
|
|
27130
27130
|
});
|
|
27131
|
-
CODEX_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
27132
27131
|
CODEX_EFFORTS = ["none", "low", "medium", "high"];
|
|
27133
27132
|
CODEX_LOGINS = ["codex-cli", "chatgpt-sign-in"];
|
|
27134
27133
|
CODEX_DEFAULT_LOGIN = "codex-cli";
|
|
@@ -27143,7 +27142,7 @@ var init_schema = __esm({
|
|
|
27143
27142
|
CodexProviderConfigSchema = external_exports.strictObject({
|
|
27144
27143
|
/** The codex model a request maps to when no tier matches its model name. */
|
|
27145
27144
|
defaultModel: external_exports.string().min(1).optional(),
|
|
27146
|
-
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `
|
|
27145
|
+
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `CLAUDE_TIERS` order. */
|
|
27147
27146
|
models: external_exports.strictObject({
|
|
27148
27147
|
fable: external_exports.string().min(1).optional(),
|
|
27149
27148
|
opus: external_exports.string().min(1).optional(),
|
|
@@ -27163,6 +27162,13 @@ var init_schema = __esm({
|
|
|
27163
27162
|
/** The model name to rewrite the request to before it reaches the target, for a provider that expects another form (OpenRouter's `anthropic/claude-...` for instance). A route that rewrites reads the whole body, the one copy the rewrite needs. */
|
|
27164
27163
|
model: external_exports.string().min(1).optional()
|
|
27165
27164
|
});
|
|
27165
|
+
PickerModelSchema = external_exports.strictObject({
|
|
27166
|
+
model: external_exports.string().min(1),
|
|
27167
|
+
tier: external_exports.enum(CLAUDE_TIERS),
|
|
27168
|
+
label: external_exports.string().min(1).optional(),
|
|
27169
|
+
description: external_exports.string().min(1).optional()
|
|
27170
|
+
});
|
|
27171
|
+
PickerModelsSchema = external_exports.array(PickerModelSchema).refine((models) => new Set(models.map((entry) => entry.model)).size === models.length, { message: "pickerModels names a model more than once" });
|
|
27166
27172
|
HttpProviderSchema = external_exports.strictObject({
|
|
27167
27173
|
$schema: external_exports.string().optional(),
|
|
27168
27174
|
kind: external_exports.literal("http").optional(),
|
|
@@ -27170,6 +27176,8 @@ var init_schema = __esm({
|
|
|
27170
27176
|
baseUrl: external_exports.url(),
|
|
27171
27177
|
credential: ProviderCredentialSchema,
|
|
27172
27178
|
env: ProviderEnvSchema.optional(),
|
|
27179
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
27180
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
27173
27181
|
/** Per-request routing: when present, each request this provider would serve is matched against the list in order, and the first definite match is sent to that entry's provider instead (itself resolved exactly as a directly dialled request would be). Unmatched requests stay on this provider. */
|
|
27174
27182
|
routes: external_exports.array(ProviderRouteSchema).optional()
|
|
27175
27183
|
});
|
|
@@ -27179,6 +27187,8 @@ var init_schema = __esm({
|
|
|
27179
27187
|
displayName: external_exports.string().min(1),
|
|
27180
27188
|
credential: ProviderCredentialSchema,
|
|
27181
27189
|
env: ProviderEnvSchema.optional(),
|
|
27190
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
27191
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
27182
27192
|
codex: CodexProviderConfigSchema.optional()
|
|
27183
27193
|
});
|
|
27184
27194
|
AntigravityProviderSchema = external_exports.strictObject({
|
|
@@ -27187,6 +27197,8 @@ var init_schema = __esm({
|
|
|
27187
27197
|
displayName: external_exports.string().min(1),
|
|
27188
27198
|
credential: ProviderCredentialSchema,
|
|
27189
27199
|
env: ProviderEnvSchema.optional(),
|
|
27200
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
27201
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
27190
27202
|
antigravity: AntigravityProviderConfigSchema.optional()
|
|
27191
27203
|
});
|
|
27192
27204
|
ProviderSchema = external_exports.discriminatedUnion("kind", [HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema]);
|
|
@@ -34181,7 +34193,7 @@ var init_package = __esm({
|
|
|
34181
34193
|
"package.json"() {
|
|
34182
34194
|
package_default = {
|
|
34183
34195
|
name: "claude-use",
|
|
34184
|
-
version: "11.
|
|
34196
|
+
version: "11.25.0",
|
|
34185
34197
|
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.",
|
|
34186
34198
|
license: "MIT",
|
|
34187
34199
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -35892,7 +35904,8 @@ function addProvider(paths, name, input2) {
|
|
|
35892
35904
|
const shared = {
|
|
35893
35905
|
displayName: input2.displayName,
|
|
35894
35906
|
credential: { sources: input2.sources, ...input2.target === void 0 ? {} : { target: input2.target } },
|
|
35895
|
-
...input2.env === void 0 || Object.keys(input2.env).length === 0 ? {} : { env: input2.env }
|
|
35907
|
+
...input2.env === void 0 || Object.keys(input2.env).length === 0 ? {} : { env: input2.env },
|
|
35908
|
+
...input2.pickerModels === void 0 || input2.pickerModels.length === 0 ? {} : { pickerModels: input2.pickerModels }
|
|
35896
35909
|
};
|
|
35897
35910
|
const parsed = ProviderSchema.safeParse(
|
|
35898
35911
|
kind === "codex" ? { kind, ...shared, ...isEmptyCodexConfig(input2.codex) ? {} : { codex: input2.codex } } : kind === "antigravity" ? { kind, ...shared, ...isEmptyAntigravityConfig(input2.antigravity) ? {} : { antigravity: input2.antigravity } } : { ...shared, baseUrl: input2.baseUrl }
|
|
@@ -35910,6 +35923,12 @@ function updateProvider(paths, name, input2) {
|
|
|
35910
35923
|
}
|
|
35911
35924
|
const unset = new Set(input2.unsetEnv);
|
|
35912
35925
|
const env = Object.fromEntries(Object.entries({ ...existing.env, ...input2.env }).filter(([key]) => !unset.has(key)));
|
|
35926
|
+
const unsetPicker = new Set(input2.unsetPickerModels);
|
|
35927
|
+
const added = new Map((input2.pickerModels ?? []).map((entry) => [entry.model, entry]));
|
|
35928
|
+
const pickerModels = [
|
|
35929
|
+
...(existing.pickerModels ?? []).filter((entry) => !unsetPicker.has(entry.model)).map((entry) => added.get(entry.model) ?? entry),
|
|
35930
|
+
...[...added.values()].filter((entry) => !(existing.pickerModels ?? []).some((kept) => kept.model === entry.model))
|
|
35931
|
+
];
|
|
35913
35932
|
const target = input2.target ?? existing.credential.target;
|
|
35914
35933
|
const cache = input2.cache === void 0 ? existing.credential.cache : input2.cache === false ? void 0 : input2.cache;
|
|
35915
35934
|
if (isCodexProvider(existing) && input2.baseUrl !== void 0) {
|
|
@@ -35931,7 +35950,8 @@ function updateProvider(paths, name, input2) {
|
|
|
35931
35950
|
...target === void 0 ? {} : { target },
|
|
35932
35951
|
...cache === void 0 ? {} : { cache }
|
|
35933
35952
|
},
|
|
35934
|
-
env: Object.keys(env).length === 0 ? void 0 : env
|
|
35953
|
+
env: Object.keys(env).length === 0 ? void 0 : env,
|
|
35954
|
+
pickerModels: pickerModels.length === 0 ? void 0 : pickerModels
|
|
35935
35955
|
};
|
|
35936
35956
|
let candidate;
|
|
35937
35957
|
if (isCodexProvider(existing)) {
|
|
@@ -63920,7 +63940,7 @@ function candidatesOf(target) {
|
|
|
63920
63940
|
return typeof target === "string" ? [target] : target;
|
|
63921
63941
|
}
|
|
63922
63942
|
function isAntigravityTier(key) {
|
|
63923
|
-
return
|
|
63943
|
+
return CLAUDE_TIERS.some((tier) => tier === key);
|
|
63924
63944
|
}
|
|
63925
63945
|
function resolveAntigravityConfig(config2) {
|
|
63926
63946
|
const overrides = config2?.models ?? {};
|
|
@@ -63965,7 +63985,7 @@ function resolveName(requested, config2) {
|
|
|
63965
63985
|
if (isBackendModelName(stripped)) {
|
|
63966
63986
|
return { candidates: [stripped], tier: void 0 };
|
|
63967
63987
|
}
|
|
63968
|
-
const tier =
|
|
63988
|
+
const tier = CLAUDE_TIERS.find((candidate) => lower.includes(candidate));
|
|
63969
63989
|
return tier === void 0 ? { candidates: [config2.defaultModel], tier: void 0 } : { candidates: config2.models[tier], tier };
|
|
63970
63990
|
}
|
|
63971
63991
|
function candidateStages(requested, config2) {
|
|
@@ -63973,7 +63993,7 @@ function candidateStages(requested, config2) {
|
|
|
63973
63993
|
if (!config2.degradeDownTiers || tier === void 0) {
|
|
63974
63994
|
return [candidates];
|
|
63975
63995
|
}
|
|
63976
|
-
return
|
|
63996
|
+
return CLAUDE_TIERS.slice(CLAUDE_TIERS.indexOf(tier)).map((name) => config2.models[name]);
|
|
63977
63997
|
}
|
|
63978
63998
|
function chooseCandidate(candidates, routing) {
|
|
63979
63999
|
const first = candidates[0];
|
|
@@ -64249,7 +64269,7 @@ function mapModel(requested, config2) {
|
|
|
64249
64269
|
return requested;
|
|
64250
64270
|
}
|
|
64251
64271
|
const lower = requested.toLowerCase();
|
|
64252
|
-
const tier =
|
|
64272
|
+
const tier = CLAUDE_TIERS.find((candidate) => lower.includes(candidate));
|
|
64253
64273
|
return tier === void 0 ? config2.defaultModel : config2.models[tier];
|
|
64254
64274
|
}
|
|
64255
64275
|
function isRequestableEffort(value2) {
|
|
@@ -64408,6 +64428,12 @@ var init_translate2 = __esm({
|
|
|
64408
64428
|
});
|
|
64409
64429
|
|
|
64410
64430
|
// src/launcher/modelPicker.ts
|
|
64431
|
+
function labelOf(model) {
|
|
64432
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M2) ? model.slice(0, -CONTEXT_MARKER_1M2.length) : model;
|
|
64433
|
+
}
|
|
64434
|
+
function describedAs(model, description) {
|
|
64435
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M2) ? `${description}; 1M context` : description;
|
|
64436
|
+
}
|
|
64411
64437
|
function joined(parts) {
|
|
64412
64438
|
const last = parts[parts.length - 1];
|
|
64413
64439
|
return last === void 0 || parts.length === 1 ? last ?? "" : `${parts.slice(0, -1).join(", ")} and ${last}`;
|
|
@@ -64421,7 +64447,7 @@ function rowOf(model, reaches) {
|
|
|
64421
64447
|
const fallbacks = reaches.filter((reach) => reach.standing === "fallback").map((reach) => reach.tier);
|
|
64422
64448
|
const serves = firsts.length === 0 ? [] : [`Serves the ${joined(firsts)} tier${firsts.length === 1 ? "" : "s"}`];
|
|
64423
64449
|
const falls = fallbacks.length === 0 ? [] : [`${serves.length === 0 ? "Fallback" : "fallback"} for ${joined(fallbacks)}`];
|
|
64424
|
-
return { model, label: model, description: [...serves, ...falls].join("; "), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
64450
|
+
return { model, label: labelOf(model), description: describedAs(model, [...serves, ...falls].join("; ")), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
64425
64451
|
}
|
|
64426
64452
|
function rowsOfTable(table) {
|
|
64427
64453
|
const reachesByModel = /* @__PURE__ */ new Map();
|
|
@@ -64438,47 +64464,53 @@ function rowsOfTable(table) {
|
|
|
64438
64464
|
}
|
|
64439
64465
|
function antigravityRows(provider) {
|
|
64440
64466
|
const config2 = resolveAntigravityConfig(provider.antigravity);
|
|
64441
|
-
const tiers = rowsOfTable(
|
|
64467
|
+
const tiers = rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, config2.models[tier]]));
|
|
64442
64468
|
const behavesAsOf = new Map(tiers.map((row) => [row.model, row.behavesAs]));
|
|
64443
64469
|
const aliases = [...config2.aliases].flatMap(([alias, candidates]) => {
|
|
64444
64470
|
const [first] = candidates;
|
|
64445
64471
|
const behavesAs = first === void 0 ? void 0 : behavesAsOf.get(first);
|
|
64446
|
-
return behavesAs === void 0 ? [] : [{ model: alias, label: alias, description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
64472
|
+
return behavesAs === void 0 ? [] : [{ model: alias, label: labelOf(alias), description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
64447
64473
|
});
|
|
64448
64474
|
return [...tiers, ...aliases];
|
|
64449
64475
|
}
|
|
64450
64476
|
function codexRows(provider) {
|
|
64451
64477
|
const config2 = resolveCodexConfig(provider.codex);
|
|
64452
|
-
return rowsOfTable(
|
|
64478
|
+
return rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, [config2.models[tier]]]));
|
|
64453
64479
|
}
|
|
64454
64480
|
function httpRows(provider) {
|
|
64455
64481
|
const env = provider.env ?? {};
|
|
64456
|
-
const table =
|
|
64482
|
+
const table = CLAUDE_TIERS.flatMap((tier) => {
|
|
64457
64483
|
const model = env[TIER_ENV_VARIABLES[tier]];
|
|
64458
64484
|
return model === void 0 || model === "" ? [] : [[tier, [model]]];
|
|
64459
64485
|
});
|
|
64460
64486
|
return rowsOfTable(table);
|
|
64461
64487
|
}
|
|
64488
|
+
function declaredRow(entry) {
|
|
64489
|
+
return {
|
|
64490
|
+
model: entry.model,
|
|
64491
|
+
label: entry.label ?? labelOf(entry.model),
|
|
64492
|
+
description: entry.description ?? describedAs(entry.model, `Declared by the provider for the ${entry.tier} tier`),
|
|
64493
|
+
behavesAs: TIER_BEHAVES_AS[entry.tier]
|
|
64494
|
+
};
|
|
64495
|
+
}
|
|
64462
64496
|
function providerModelRows(provider) {
|
|
64463
|
-
|
|
64464
|
-
|
|
64465
|
-
|
|
64466
|
-
|
|
64467
|
-
return antigravityRows(provider);
|
|
64468
|
-
}
|
|
64469
|
-
return httpRows(provider);
|
|
64497
|
+
const derived2 = provider.kind === "codex" ? codexRows(provider) : provider.kind === "antigravity" ? antigravityRows(provider) : httpRows(provider);
|
|
64498
|
+
const declared = (provider.pickerModels ?? []).map(declaredRow);
|
|
64499
|
+
const declaredModels = new Set(declared.map((row) => row.model));
|
|
64500
|
+
return [...derived2.filter((row) => !declaredModels.has(row.model)), ...declared];
|
|
64470
64501
|
}
|
|
64471
64502
|
function modelPickerSettings(provider) {
|
|
64472
64503
|
const options = providerModelRows(provider);
|
|
64473
64504
|
return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
|
|
64474
64505
|
}
|
|
64475
|
-
var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
64506
|
+
var CONTEXT_MARKER_1M2, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
64476
64507
|
var init_modelPicker = __esm({
|
|
64477
64508
|
"src/launcher/modelPicker.ts"() {
|
|
64478
64509
|
"use strict";
|
|
64479
64510
|
init_translate();
|
|
64480
64511
|
init_translate2();
|
|
64481
64512
|
init_schema();
|
|
64513
|
+
CONTEXT_MARKER_1M2 = "[1m]";
|
|
64482
64514
|
TIER_BEHAVES_AS = Object.freeze({
|
|
64483
64515
|
fable: "claude-fable-5-1",
|
|
64484
64516
|
opus: "claude-opus-5-5",
|
|
@@ -145733,7 +145765,8 @@ function toProviderView(name, provider) {
|
|
|
145733
145765
|
displayName: provider.displayName,
|
|
145734
145766
|
...isCodexProvider(provider) ? provider.codex === void 0 ? {} : { codex: provider.codex } : isAntigravityProvider(provider) ? provider.antigravity === void 0 ? {} : { antigravity: provider.antigravity } : { baseUrl: provider.baseUrl },
|
|
145735
145767
|
credential: summariseCredential(provider.credential),
|
|
145736
|
-
...provider.env === void 0 ? {} : { env: provider.env }
|
|
145768
|
+
...provider.env === void 0 ? {} : { env: provider.env },
|
|
145769
|
+
...provider.pickerModels === void 0 ? {} : { pickerModels: provider.pickerModels }
|
|
145737
145770
|
};
|
|
145738
145771
|
}
|
|
145739
145772
|
function antigravityConfigFromOptions(options) {
|
|
@@ -145764,6 +145797,15 @@ function antigravityConfigFromOptions(options) {
|
|
|
145764
145797
|
}
|
|
145765
145798
|
return parsed.data;
|
|
145766
145799
|
}
|
|
145800
|
+
function pickerModelsFromOption(option) {
|
|
145801
|
+
return Object.entries(option).map(([model, tier]) => {
|
|
145802
|
+
const parsed = PickerModelSchema.safeParse({ model, tier });
|
|
145803
|
+
if (!parsed.success) {
|
|
145804
|
+
throw new UsageError(`Invalid --picker-model ${model}=${tier}: ${parsed.error.issues.map((issue2) => `${issue2.path.join(".")}: ${issue2.message}`).join("; ")}`);
|
|
145805
|
+
}
|
|
145806
|
+
return parsed.data;
|
|
145807
|
+
});
|
|
145808
|
+
}
|
|
145767
145809
|
function codexConfigFromOptions(options) {
|
|
145768
145810
|
if (options.codexDefaultModel === void 0 && options.codexModel === void 0 && options.codexEffort === void 0 && options.codexLogin === void 0) {
|
|
145769
145811
|
return void 0;
|
|
@@ -145795,7 +145837,7 @@ function registerProviderCommand(program2, deps) {
|
|
|
145795
145837
|
new Option("--credential-target <target>", "Where the token goes: bearer sets ANTHROPIC_AUTH_TOKEN (default), apiKey sets ANTHROPIC_API_KEY.").choices(
|
|
145796
145838
|
PROVIDER_CREDENTIAL_TARGETS
|
|
145797
145839
|
)
|
|
145798
|
-
).option("--env <KEY=VALUE>", "Extra environment entry for the child (repeatable).", collectStringPair).option("--codex-default-model <model>", "Codex providers: the codex model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: the codex model one tier (fable, opus, sonnet or haiku) maps to (repeatable).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: the reasoning effort when a request asks for none the backend accepts.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: which login the upstream call uses, the Codex CLI's own login or a Sign in with ChatGPT grant from `agent-shim codex login`.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: the model a tier (fable, opus, sonnet or haiku, matched by substring) or an alias (any other name, matched whole, selectable with /model) maps to; a comma-separated list routes by available quota, first unspent first (repeatable).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-degrade-down-tiers", "Antigravity providers: when every candidate of a tier has no quota left, serve the request from the tiers below it instead of failing.").option("--no-antigravity-degrade-down-tiers", "Antigravity providers: fail with the quota limit when a tier has no quota left (the default).").option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.").option("--json", "Print the result as JSON.").action((name, options) => {
|
|
145840
|
+
).option("--env <KEY=VALUE>", "Extra environment entry for the child (repeatable).", collectStringPair).option("--picker-model <model=tier>", "A model /model lists beside the ones the tier settings name, with the Claude tier (fable, opus, sonnet or haiku) whose handling it borrows (repeatable).", collectStringPair).option("--codex-default-model <model>", "Codex providers: the codex model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: the codex model one tier (fable, opus, sonnet or haiku) maps to (repeatable).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: the reasoning effort when a request asks for none the backend accepts.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: which login the upstream call uses, the Codex CLI's own login or a Sign in with ChatGPT grant from `agent-shim codex login`.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: the model a tier (fable, opus, sonnet or haiku, matched by substring) or an alias (any other name, matched whole, selectable with /model) maps to; a comma-separated list routes by available quota, first unspent first (repeatable).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-degrade-down-tiers", "Antigravity providers: when every candidate of a tier has no quota left, serve the request from the tiers below it instead of failing.").option("--no-antigravity-degrade-down-tiers", "Antigravity providers: fail with the quota limit when a tier has no quota left (the default).").option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.").option("--json", "Print the result as JSON.").action((name, options) => {
|
|
145799
145841
|
const codex = codexConfigFromOptions(options);
|
|
145800
145842
|
const antigravity = antigravityConfigFromOptions(options);
|
|
145801
145843
|
const created = addProvider(paths, name, {
|
|
@@ -145805,6 +145847,7 @@ function registerProviderCommand(program2, deps) {
|
|
|
145805
145847
|
sources: options.credential,
|
|
145806
145848
|
...options.credentialTarget === void 0 ? {} : { target: options.credentialTarget },
|
|
145807
145849
|
...options.env === void 0 ? {} : { env: options.env },
|
|
145850
|
+
...options.pickerModel === void 0 ? {} : { pickerModels: pickerModelsFromOption(options.pickerModel) },
|
|
145808
145851
|
...codex === void 0 ? {} : { codex },
|
|
145809
145852
|
...antigravity === void 0 ? {} : { antigravity }
|
|
145810
145853
|
});
|
|
@@ -145831,14 +145874,14 @@ function registerProviderCommand(program2, deps) {
|
|
|
145831
145874
|
new Option("--credential-target <target>", "Where the token goes: bearer sets ANTHROPIC_AUTH_TOKEN, apiKey sets ANTHROPIC_API_KEY.").choices(
|
|
145832
145875
|
PROVIDER_CREDENTIAL_TARGETS
|
|
145833
145876
|
)
|
|
145834
|
-
).option("--env <KEY=VALUE>", "Add or replace an environment entry for the child (repeatable).", collectStringPair).option("--unset-env <KEY>", "Remove an environment entry (repeatable).", collectRepeated).option("--codex-default-model <model>", "Codex providers: replace the model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: set the codex model one tier maps to (repeatable; other tiers are kept).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: replace the default reasoning effort.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: replace which login the upstream call uses.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: set the model one tier maps to (repeatable; other tiers are kept).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-degrade-down-tiers", "Antigravity providers: when every candidate of a tier has no quota left, serve the request from the tiers below it instead of failing.").option("--no-antigravity-degrade-down-tiers", "Antigravity providers: fail with the quota limit when a tier has no quota left (the default).").option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.");
|
|
145877
|
+
).option("--env <KEY=VALUE>", "Add or replace an environment entry for the child (repeatable).", collectStringPair).option("--unset-env <KEY>", "Remove an environment entry (repeatable).", collectRepeated).option("--picker-model <model=tier>", "Add or replace a model /model lists beside the ones the tier settings name, with the Claude tier (fable, opus, sonnet or haiku) whose handling it borrows (repeatable).", collectStringPair).option("--unset-picker-model <model>", "Remove a model from the /model list (repeatable).", collectRepeated).option("--codex-default-model <model>", "Codex providers: replace the model a request maps to when no tier matches.").option("--codex-model <tier=model>", "Codex providers: set the codex model one tier maps to (repeatable; other tiers are kept).", collectStringPair).addOption(new Option("--codex-effort <effort>", "Codex providers: replace the default reasoning effort.").choices(CODEX_EFFORTS)).addOption(new Option("--codex-login <login>", "Codex providers: replace which login the upstream call uses.").choices(CODEX_LOGINS)).addOption(new Option("--antigravity-mode <mode>", "Antigravity providers: cloud (direct Gemini/Vertex) or local (ACP daemon).").choices(ANTIGRAVITY_MODES)).option("--antigravity-default-model <model>", "Antigravity providers: the model a request maps to when no tier matches.").option("--antigravity-model <tier=model>", "Antigravity providers: set the model one tier maps to (repeatable; other tiers are kept).", collectStringPair).addOption(new Option("--antigravity-effort <effort>", "Antigravity providers: reasoning effort.").choices(ANTIGRAVITY_EFFORTS)).option("--antigravity-degrade-down-tiers", "Antigravity providers: when every candidate of a tier has no quota left, serve the request from the tiers below it instead of failing.").option("--no-antigravity-degrade-down-tiers", "Antigravity providers: fail with the quota limit when a tier has no quota left (the default).").option("--antigravity-endpoint <url>", "Antigravity cloud providers: custom API endpoint URL.").option("--antigravity-project-id <id>", "Antigravity cloud providers: Google Cloud project ID (for Vertex AI).").option("--antigravity-location <loc>", "Antigravity cloud providers: Google Cloud location (for Vertex AI).").option("--antigravity-command <cmd...>", "Antigravity local providers: command to spawn ACP server.", collectRepeated).option("--antigravity-socket <path>", "Antigravity local providers: path to existing Unix domain socket.");
|
|
145835
145878
|
addCredentialCacheOptions(providerSet);
|
|
145836
145879
|
withExamples(
|
|
145837
145880
|
providerSet.option("--json", "Print the result as JSON.").action((name, allOptions) => {
|
|
145838
145881
|
const { json: json2, ...options } = allOptions;
|
|
145839
145882
|
if (Object.entries(allOptions).every(([key, value2]) => key === "json" || value2 === void 0)) {
|
|
145840
145883
|
throw new UsageError(
|
|
145841
|
-
"Nothing to change: pass --display-name, --base-url, --credential, --credential-target, a --credential-cache option, --env, --unset-env, or codex/antigravity settings."
|
|
145884
|
+
"Nothing to change: pass --display-name, --base-url, --credential, --credential-target, a --credential-cache option, --env, --unset-env, --picker-model, --unset-picker-model, or codex/antigravity settings."
|
|
145842
145885
|
);
|
|
145843
145886
|
}
|
|
145844
145887
|
const codex = codexConfigFromOptions(options);
|
|
@@ -145853,7 +145896,9 @@ function registerProviderCommand(program2, deps) {
|
|
|
145853
145896
|
...options.credential === void 0 ? {} : { sources: options.credential },
|
|
145854
145897
|
...options.credentialTarget === void 0 ? {} : { target: options.credentialTarget },
|
|
145855
145898
|
...options.env === void 0 ? {} : { env: options.env },
|
|
145856
|
-
...options.unsetEnv === void 0 ? {} : { unsetEnv: options.unsetEnv }
|
|
145899
|
+
...options.unsetEnv === void 0 ? {} : { unsetEnv: options.unsetEnv },
|
|
145900
|
+
...options.pickerModel === void 0 ? {} : { pickerModels: pickerModelsFromOption(options.pickerModel) },
|
|
145901
|
+
...options.unsetPickerModel === void 0 ? {} : { unsetPickerModels: options.unsetPickerModel }
|
|
145857
145902
|
});
|
|
145858
145903
|
reportMutation(json2, { action: "updated", kind: "provider", name, value: updated }, () => {
|
|
145859
145904
|
console.log(`Updated provider "${name}" (${describeProviderEndpoint(updated)}, credential ${describeCredential(updated.credential)}).`);
|
|
@@ -145865,7 +145910,8 @@ function registerProviderCommand(program2, deps) {
|
|
|
145865
145910
|
"agent-shim provider set z --credential op:op://vault/z/credential --credential-cache-ttl 12h",
|
|
145866
145911
|
"agent-shim provider set anthropic-api --credential-target apiKey",
|
|
145867
145912
|
"agent-shim provider set codex --codex-model haiku=gpt-5.6-terra",
|
|
145868
|
-
"agent-shim provider set agy --antigravity-model haiku=gemini-2.5-flash"
|
|
145913
|
+
"agent-shim provider set agy --antigravity-model haiku=gemini-2.5-flash",
|
|
145914
|
+
"agent-shim provider set o --picker-model deepseek/deepseek-r1=opus --picker-model qwen/qwen3-coder=sonnet"
|
|
145869
145915
|
]
|
|
145870
145916
|
);
|
|
145871
145917
|
withExamples(
|
|
@@ -145900,13 +145946,13 @@ function registerProviderCommand(program2, deps) {
|
|
|
145900
145946
|
console.log(`Kind: ${found.kind ?? "http"}`);
|
|
145901
145947
|
if (isCodexProvider(found)) {
|
|
145902
145948
|
const config2 = resolveCodexConfig(found.codex);
|
|
145903
|
-
console.log(`Codex models: ${
|
|
145949
|
+
console.log(`Codex models: ${CLAUDE_TIERS.map((tier) => `${tier}=${config2.models[tier]}`).join(", ")}, otherwise ${config2.defaultModel}`);
|
|
145904
145950
|
console.log(`Codex effort: ${config2.effort}`);
|
|
145905
145951
|
console.log(`Codex login: ${config2.login}`);
|
|
145906
145952
|
} else if (isAntigravityProvider(found)) {
|
|
145907
145953
|
const config2 = resolveAntigravityConfig(found.antigravity);
|
|
145908
145954
|
console.log(`Antigravity mode: ${config2.mode}`);
|
|
145909
|
-
console.log(`Antigravity models: ${
|
|
145955
|
+
console.log(`Antigravity models: ${CLAUDE_TIERS.map((tier) => `${tier}=${config2.models[tier].join(" > ")}`).join(", ")}, otherwise ${config2.defaultModel}`);
|
|
145910
145956
|
if (config2.aliases.size > 0) {
|
|
145911
145957
|
console.log(`Antigravity aliases: ${[...config2.aliases].map(([alias, model]) => `${alias}=${model.join(" > ")}`).join(", ")}`);
|
|
145912
145958
|
}
|
|
@@ -145919,6 +145965,9 @@ function registerProviderCommand(program2, deps) {
|
|
|
145919
145965
|
console.log(`Credential: ${describeCredential(found.credential)}`);
|
|
145920
145966
|
const env = Object.entries(found.env ?? {});
|
|
145921
145967
|
console.log(`Environment: ${env.length === 0 ? "(none)" : env.map(([key, value2]) => `${key}=${value2}`).join(", ")}`);
|
|
145968
|
+
if (found.pickerModels !== void 0) {
|
|
145969
|
+
console.log(`Picker models: ${found.pickerModels.map((entry) => `${entry.model} (${entry.tier})`).join(", ")}`);
|
|
145970
|
+
}
|
|
145922
145971
|
}),
|
|
145923
145972
|
["agent-shim provider show z", "agent-shim provider show z --json"]
|
|
145924
145973
|
);
|
package/dist/index.cjs
CHANGED
|
@@ -242,7 +242,7 @@ function isTimeZone(name) {
|
|
|
242
242
|
return false;
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
|
-
var import_node_path2, import_zod, import_trilean, 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,
|
|
245
|
+
var import_node_path2, import_zod, import_trilean, 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, HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema, ProviderSchema, 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, FrontDoorGlobalConfigSchema, UPDATE_MODES, UpdateGlobalConfigSchema, GlobalConfigSchema, IdentitySchema, CategoryClassificationSchema, CategoryClassificationOverlaySchema, SHIPPED_CATEGORY_DEFAULTS;
|
|
246
246
|
var init_schema = __esm({
|
|
247
247
|
"src/config/schema.ts"() {
|
|
248
248
|
"use strict";
|
|
@@ -343,7 +343,7 @@ var init_schema = __esm({
|
|
|
343
343
|
});
|
|
344
344
|
PROVIDER_KINDS = ["http", "codex", "antigravity"];
|
|
345
345
|
ANTIGRAVITY_MODES = ["cloud", "local"];
|
|
346
|
-
|
|
346
|
+
CLAUDE_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
347
347
|
ANTIGRAVITY_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
348
348
|
ANTIGRAVITY_DEFAULT_MODE = "cloud";
|
|
349
349
|
ANTIGRAVITY_DEFAULT_MODEL = "gemini-3.8-flash-high";
|
|
@@ -360,7 +360,7 @@ var init_schema = __esm({
|
|
|
360
360
|
mode: import_zod.z.enum(ANTIGRAVITY_MODES).optional(),
|
|
361
361
|
/** The model a request maps to when no tier matches its model name. */
|
|
362
362
|
defaultModel: import_zod.z.string().min(1).optional(),
|
|
363
|
-
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `
|
|
363
|
+
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `CLAUDE_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. A value is one model or an ordered list of candidates: the request goes to the first whose quota windows are not spent, and when every candidate is spent, to the one whose binding window lifts soonest. */
|
|
364
364
|
models: import_zod.z.record(import_zod.z.string().min(1), AntigravityModelTargetSchema).optional(),
|
|
365
365
|
/** When every candidate of the tier a request names has no quota left, serve it from the next tier down, and onward through the lower tiers, instead of failing with the quota limit. Applies to a name that selects a tier (`/model fable`), not to an alias or a backend model name. Defaults to false. */
|
|
366
366
|
degradeDownTiers: import_zod.z.boolean().optional(),
|
|
@@ -383,7 +383,6 @@ var init_schema = __esm({
|
|
|
383
383
|
socketPath: import_zod.z.string().min(1).optional()
|
|
384
384
|
}).optional()
|
|
385
385
|
});
|
|
386
|
-
CODEX_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
387
386
|
CODEX_EFFORTS = ["none", "low", "medium", "high"];
|
|
388
387
|
CODEX_LOGINS = ["codex-cli", "chatgpt-sign-in"];
|
|
389
388
|
CODEX_DEFAULT_LOGIN = "codex-cli";
|
|
@@ -398,7 +397,7 @@ var init_schema = __esm({
|
|
|
398
397
|
CodexProviderConfigSchema = import_zod.z.strictObject({
|
|
399
398
|
/** The codex model a request maps to when no tier matches its model name. */
|
|
400
399
|
defaultModel: import_zod.z.string().min(1).optional(),
|
|
401
|
-
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `
|
|
400
|
+
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `CLAUDE_TIERS` order. */
|
|
402
401
|
models: import_zod.z.strictObject({
|
|
403
402
|
fable: import_zod.z.string().min(1).optional(),
|
|
404
403
|
opus: import_zod.z.string().min(1).optional(),
|
|
@@ -418,6 +417,13 @@ var init_schema = __esm({
|
|
|
418
417
|
/** The model name to rewrite the request to before it reaches the target, for a provider that expects another form (OpenRouter's `anthropic/claude-...` for instance). A route that rewrites reads the whole body, the one copy the rewrite needs. */
|
|
419
418
|
model: import_zod.z.string().min(1).optional()
|
|
420
419
|
});
|
|
420
|
+
PickerModelSchema = import_zod.z.strictObject({
|
|
421
|
+
model: import_zod.z.string().min(1),
|
|
422
|
+
tier: import_zod.z.enum(CLAUDE_TIERS),
|
|
423
|
+
label: import_zod.z.string().min(1).optional(),
|
|
424
|
+
description: import_zod.z.string().min(1).optional()
|
|
425
|
+
});
|
|
426
|
+
PickerModelsSchema = import_zod.z.array(PickerModelSchema).refine((models) => new Set(models.map((entry) => entry.model)).size === models.length, { message: "pickerModels names a model more than once" });
|
|
421
427
|
HttpProviderSchema = import_zod.z.strictObject({
|
|
422
428
|
$schema: import_zod.z.string().optional(),
|
|
423
429
|
kind: import_zod.z.literal("http").optional(),
|
|
@@ -425,6 +431,8 @@ var init_schema = __esm({
|
|
|
425
431
|
baseUrl: import_zod.z.url(),
|
|
426
432
|
credential: ProviderCredentialSchema,
|
|
427
433
|
env: ProviderEnvSchema.optional(),
|
|
434
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
435
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
428
436
|
/** Per-request routing: when present, each request this provider would serve is matched against the list in order, and the first definite match is sent to that entry's provider instead (itself resolved exactly as a directly dialled request would be). Unmatched requests stay on this provider. */
|
|
429
437
|
routes: import_zod.z.array(ProviderRouteSchema).optional()
|
|
430
438
|
});
|
|
@@ -434,6 +442,8 @@ var init_schema = __esm({
|
|
|
434
442
|
displayName: import_zod.z.string().min(1),
|
|
435
443
|
credential: ProviderCredentialSchema,
|
|
436
444
|
env: ProviderEnvSchema.optional(),
|
|
445
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
446
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
437
447
|
codex: CodexProviderConfigSchema.optional()
|
|
438
448
|
});
|
|
439
449
|
AntigravityProviderSchema = import_zod.z.strictObject({
|
|
@@ -442,6 +452,8 @@ var init_schema = __esm({
|
|
|
442
452
|
displayName: import_zod.z.string().min(1),
|
|
443
453
|
credential: ProviderCredentialSchema,
|
|
444
454
|
env: ProviderEnvSchema.optional(),
|
|
455
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
456
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
445
457
|
antigravity: AntigravityProviderConfigSchema.optional()
|
|
446
458
|
});
|
|
447
459
|
ProviderSchema = import_zod.z.discriminatedUnion("kind", [HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema]);
|
|
@@ -2935,7 +2947,7 @@ var init_package = __esm({
|
|
|
2935
2947
|
"package.json"() {
|
|
2936
2948
|
package_default = {
|
|
2937
2949
|
name: "claude-use",
|
|
2938
|
-
version: "11.
|
|
2950
|
+
version: "11.25.0",
|
|
2939
2951
|
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.",
|
|
2940
2952
|
license: "MIT",
|
|
2941
2953
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -6562,7 +6574,8 @@ function addProvider(paths, name, input) {
|
|
|
6562
6574
|
const shared = {
|
|
6563
6575
|
displayName: input.displayName,
|
|
6564
6576
|
credential: { sources: input.sources, ...input.target === void 0 ? {} : { target: input.target } },
|
|
6565
|
-
...input.env === void 0 || Object.keys(input.env).length === 0 ? {} : { env: input.env }
|
|
6577
|
+
...input.env === void 0 || Object.keys(input.env).length === 0 ? {} : { env: input.env },
|
|
6578
|
+
...input.pickerModels === void 0 || input.pickerModels.length === 0 ? {} : { pickerModels: input.pickerModels }
|
|
6566
6579
|
};
|
|
6567
6580
|
const parsed = ProviderSchema.safeParse(
|
|
6568
6581
|
kind === "codex" ? { kind, ...shared, ...isEmptyCodexConfig(input.codex) ? {} : { codex: input.codex } } : kind === "antigravity" ? { kind, ...shared, ...isEmptyAntigravityConfig(input.antigravity) ? {} : { antigravity: input.antigravity } } : { ...shared, baseUrl: input.baseUrl }
|
|
@@ -6580,6 +6593,12 @@ function updateProvider(paths, name, input) {
|
|
|
6580
6593
|
}
|
|
6581
6594
|
const unset = new Set(input.unsetEnv);
|
|
6582
6595
|
const env = Object.fromEntries(Object.entries({ ...existing.env, ...input.env }).filter(([key]) => !unset.has(key)));
|
|
6596
|
+
const unsetPicker = new Set(input.unsetPickerModels);
|
|
6597
|
+
const added = new Map((input.pickerModels ?? []).map((entry) => [entry.model, entry]));
|
|
6598
|
+
const pickerModels = [
|
|
6599
|
+
...(existing.pickerModels ?? []).filter((entry) => !unsetPicker.has(entry.model)).map((entry) => added.get(entry.model) ?? entry),
|
|
6600
|
+
...[...added.values()].filter((entry) => !(existing.pickerModels ?? []).some((kept) => kept.model === entry.model))
|
|
6601
|
+
];
|
|
6583
6602
|
const target = input.target ?? existing.credential.target;
|
|
6584
6603
|
const cache = input.cache === void 0 ? existing.credential.cache : input.cache === false ? void 0 : input.cache;
|
|
6585
6604
|
if (isCodexProvider(existing) && input.baseUrl !== void 0) {
|
|
@@ -6601,7 +6620,8 @@ function updateProvider(paths, name, input) {
|
|
|
6601
6620
|
...target === void 0 ? {} : { target },
|
|
6602
6621
|
...cache === void 0 ? {} : { cache }
|
|
6603
6622
|
},
|
|
6604
|
-
env: Object.keys(env).length === 0 ? void 0 : env
|
|
6623
|
+
env: Object.keys(env).length === 0 ? void 0 : env,
|
|
6624
|
+
pickerModels: pickerModels.length === 0 ? void 0 : pickerModels
|
|
6605
6625
|
};
|
|
6606
6626
|
let candidate;
|
|
6607
6627
|
if (isCodexProvider(existing)) {
|
|
@@ -7947,7 +7967,7 @@ function candidatesOf(target) {
|
|
|
7947
7967
|
return typeof target === "string" ? [target] : target;
|
|
7948
7968
|
}
|
|
7949
7969
|
function isAntigravityTier(key) {
|
|
7950
|
-
return
|
|
7970
|
+
return CLAUDE_TIERS.some((tier) => tier === key);
|
|
7951
7971
|
}
|
|
7952
7972
|
function resolveAntigravityConfig(config) {
|
|
7953
7973
|
const overrides = config?.models ?? {};
|
|
@@ -8013,6 +8033,12 @@ var init_translate2 = __esm({
|
|
|
8013
8033
|
});
|
|
8014
8034
|
|
|
8015
8035
|
// src/launcher/modelPicker.ts
|
|
8036
|
+
function labelOf(model) {
|
|
8037
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
|
|
8038
|
+
}
|
|
8039
|
+
function describedAs(model, description) {
|
|
8040
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? `${description}; 1M context` : description;
|
|
8041
|
+
}
|
|
8016
8042
|
function joined(parts) {
|
|
8017
8043
|
const last = parts[parts.length - 1];
|
|
8018
8044
|
return last === void 0 || parts.length === 1 ? last ?? "" : `${parts.slice(0, -1).join(", ")} and ${last}`;
|
|
@@ -8026,7 +8052,7 @@ function rowOf2(model, reaches) {
|
|
|
8026
8052
|
const fallbacks = reaches.filter((reach) => reach.standing === "fallback").map((reach) => reach.tier);
|
|
8027
8053
|
const serves = firsts.length === 0 ? [] : [`Serves the ${joined(firsts)} tier${firsts.length === 1 ? "" : "s"}`];
|
|
8028
8054
|
const falls = fallbacks.length === 0 ? [] : [`${serves.length === 0 ? "Fallback" : "fallback"} for ${joined(fallbacks)}`];
|
|
8029
|
-
return { model, label: model, description: [...serves, ...falls].join("; "), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
8055
|
+
return { model, label: labelOf(model), description: describedAs(model, [...serves, ...falls].join("; ")), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
8030
8056
|
}
|
|
8031
8057
|
function rowsOfTable(table) {
|
|
8032
8058
|
const reachesByModel = /* @__PURE__ */ new Map();
|
|
@@ -8043,47 +8069,53 @@ function rowsOfTable(table) {
|
|
|
8043
8069
|
}
|
|
8044
8070
|
function antigravityRows(provider) {
|
|
8045
8071
|
const config = resolveAntigravityConfig(provider.antigravity);
|
|
8046
|
-
const tiers = rowsOfTable(
|
|
8072
|
+
const tiers = rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, config.models[tier]]));
|
|
8047
8073
|
const behavesAsOf = new Map(tiers.map((row) => [row.model, row.behavesAs]));
|
|
8048
8074
|
const aliases = [...config.aliases].flatMap(([alias, candidates]) => {
|
|
8049
8075
|
const [first] = candidates;
|
|
8050
8076
|
const behavesAs = first === void 0 ? void 0 : behavesAsOf.get(first);
|
|
8051
|
-
return behavesAs === void 0 ? [] : [{ model: alias, label: alias, description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
8077
|
+
return behavesAs === void 0 ? [] : [{ model: alias, label: labelOf(alias), description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
8052
8078
|
});
|
|
8053
8079
|
return [...tiers, ...aliases];
|
|
8054
8080
|
}
|
|
8055
8081
|
function codexRows(provider) {
|
|
8056
8082
|
const config = resolveCodexConfig(provider.codex);
|
|
8057
|
-
return rowsOfTable(
|
|
8083
|
+
return rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, [config.models[tier]]]));
|
|
8058
8084
|
}
|
|
8059
8085
|
function httpRows(provider) {
|
|
8060
8086
|
const env = provider.env ?? {};
|
|
8061
|
-
const table =
|
|
8087
|
+
const table = CLAUDE_TIERS.flatMap((tier) => {
|
|
8062
8088
|
const model = env[TIER_ENV_VARIABLES[tier]];
|
|
8063
8089
|
return model === void 0 || model === "" ? [] : [[tier, [model]]];
|
|
8064
8090
|
});
|
|
8065
8091
|
return rowsOfTable(table);
|
|
8066
8092
|
}
|
|
8093
|
+
function declaredRow(entry) {
|
|
8094
|
+
return {
|
|
8095
|
+
model: entry.model,
|
|
8096
|
+
label: entry.label ?? labelOf(entry.model),
|
|
8097
|
+
description: entry.description ?? describedAs(entry.model, `Declared by the provider for the ${entry.tier} tier`),
|
|
8098
|
+
behavesAs: TIER_BEHAVES_AS[entry.tier]
|
|
8099
|
+
};
|
|
8100
|
+
}
|
|
8067
8101
|
function providerModelRows(provider) {
|
|
8068
|
-
|
|
8069
|
-
|
|
8070
|
-
|
|
8071
|
-
|
|
8072
|
-
return antigravityRows(provider);
|
|
8073
|
-
}
|
|
8074
|
-
return httpRows(provider);
|
|
8102
|
+
const derived = provider.kind === "codex" ? codexRows(provider) : provider.kind === "antigravity" ? antigravityRows(provider) : httpRows(provider);
|
|
8103
|
+
const declared = (provider.pickerModels ?? []).map(declaredRow);
|
|
8104
|
+
const declaredModels = new Set(declared.map((row) => row.model));
|
|
8105
|
+
return [...derived.filter((row) => !declaredModels.has(row.model)), ...declared];
|
|
8075
8106
|
}
|
|
8076
8107
|
function modelPickerSettings(provider) {
|
|
8077
8108
|
const options = providerModelRows(provider);
|
|
8078
8109
|
return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
|
|
8079
8110
|
}
|
|
8080
|
-
var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
8111
|
+
var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
8081
8112
|
var init_modelPicker = __esm({
|
|
8082
8113
|
"src/launcher/modelPicker.ts"() {
|
|
8083
8114
|
"use strict";
|
|
8084
8115
|
init_translate();
|
|
8085
8116
|
init_translate2();
|
|
8086
8117
|
init_schema();
|
|
8118
|
+
CONTEXT_MARKER_1M = "[1m]";
|
|
8087
8119
|
TIER_BEHAVES_AS = Object.freeze({
|
|
8088
8120
|
fable: "claude-fable-5-1",
|
|
8089
8121
|
opus: "claude-opus-5-5",
|
package/dist/index.mjs
CHANGED
|
@@ -223,7 +223,7 @@ function isTimeZone(name) {
|
|
|
223
223
|
return false;
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
|
-
var 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,
|
|
226
|
+
var 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, HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema, ProviderSchema, 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, FrontDoorGlobalConfigSchema, UPDATE_MODES, UpdateGlobalConfigSchema, GlobalConfigSchema, IdentitySchema, CategoryClassificationSchema, CategoryClassificationOverlaySchema, SHIPPED_CATEGORY_DEFAULTS;
|
|
227
227
|
var init_schema = __esm({
|
|
228
228
|
"src/config/schema.ts"() {
|
|
229
229
|
"use strict";
|
|
@@ -321,7 +321,7 @@ var init_schema = __esm({
|
|
|
321
321
|
});
|
|
322
322
|
PROVIDER_KINDS = ["http", "codex", "antigravity"];
|
|
323
323
|
ANTIGRAVITY_MODES = ["cloud", "local"];
|
|
324
|
-
|
|
324
|
+
CLAUDE_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
325
325
|
ANTIGRAVITY_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"];
|
|
326
326
|
ANTIGRAVITY_DEFAULT_MODE = "cloud";
|
|
327
327
|
ANTIGRAVITY_DEFAULT_MODEL = "gemini-3.8-flash-high";
|
|
@@ -338,7 +338,7 @@ var init_schema = __esm({
|
|
|
338
338
|
mode: z.enum(ANTIGRAVITY_MODES).optional(),
|
|
339
339
|
/** The model a request maps to when no tier matches its model name. */
|
|
340
340
|
defaultModel: z.string().min(1).optional(),
|
|
341
|
-
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `
|
|
341
|
+
/** Model name mapping. A key naming a tier (`fable`, `opus`, `sonnet`, `haiku`) overrides that tier's shipped model and is matched by substring of the requested name in `CLAUDE_TIERS` order; any other key is an alias, matched against the whole requested name case-insensitively, so `/model <alias>` selects its backend model. An alias outranks every other rule, including the pass-through of backend names. A value is one model or an ordered list of candidates: the request goes to the first whose quota windows are not spent, and when every candidate is spent, to the one whose binding window lifts soonest. */
|
|
342
342
|
models: z.record(z.string().min(1), AntigravityModelTargetSchema).optional(),
|
|
343
343
|
/** When every candidate of the tier a request names has no quota left, serve it from the next tier down, and onward through the lower tiers, instead of failing with the quota limit. Applies to a name that selects a tier (`/model fable`), not to an alias or a backend model name. Defaults to false. */
|
|
344
344
|
degradeDownTiers: z.boolean().optional(),
|
|
@@ -361,7 +361,6 @@ var init_schema = __esm({
|
|
|
361
361
|
socketPath: z.string().min(1).optional()
|
|
362
362
|
}).optional()
|
|
363
363
|
});
|
|
364
|
-
CODEX_TIERS = ["fable", "opus", "sonnet", "haiku"];
|
|
365
364
|
CODEX_EFFORTS = ["none", "low", "medium", "high"];
|
|
366
365
|
CODEX_LOGINS = ["codex-cli", "chatgpt-sign-in"];
|
|
367
366
|
CODEX_DEFAULT_LOGIN = "codex-cli";
|
|
@@ -376,7 +375,7 @@ var init_schema = __esm({
|
|
|
376
375
|
CodexProviderConfigSchema = z.strictObject({
|
|
377
376
|
/** The codex model a request maps to when no tier matches its model name. */
|
|
378
377
|
defaultModel: z.string().min(1).optional(),
|
|
379
|
-
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `
|
|
378
|
+
/** Per-tier overrides of the shipped mapping, matched by substring of the requested model name in `CLAUDE_TIERS` order. */
|
|
380
379
|
models: z.strictObject({
|
|
381
380
|
fable: z.string().min(1).optional(),
|
|
382
381
|
opus: z.string().min(1).optional(),
|
|
@@ -396,6 +395,13 @@ var init_schema = __esm({
|
|
|
396
395
|
/** The model name to rewrite the request to before it reaches the target, for a provider that expects another form (OpenRouter's `anthropic/claude-...` for instance). A route that rewrites reads the whole body, the one copy the rewrite needs. */
|
|
397
396
|
model: z.string().min(1).optional()
|
|
398
397
|
});
|
|
398
|
+
PickerModelSchema = z.strictObject({
|
|
399
|
+
model: z.string().min(1),
|
|
400
|
+
tier: z.enum(CLAUDE_TIERS),
|
|
401
|
+
label: z.string().min(1).optional(),
|
|
402
|
+
description: z.string().min(1).optional()
|
|
403
|
+
});
|
|
404
|
+
PickerModelsSchema = z.array(PickerModelSchema).refine((models) => new Set(models.map((entry) => entry.model)).size === models.length, { message: "pickerModels names a model more than once" });
|
|
399
405
|
HttpProviderSchema = z.strictObject({
|
|
400
406
|
$schema: z.string().optional(),
|
|
401
407
|
kind: z.literal("http").optional(),
|
|
@@ -403,6 +409,8 @@ var init_schema = __esm({
|
|
|
403
409
|
baseUrl: z.url(),
|
|
404
410
|
credential: ProviderCredentialSchema,
|
|
405
411
|
env: ProviderEnvSchema.optional(),
|
|
412
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
413
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
406
414
|
/** Per-request routing: when present, each request this provider would serve is matched against the list in order, and the first definite match is sent to that entry's provider instead (itself resolved exactly as a directly dialled request would be). Unmatched requests stay on this provider. */
|
|
407
415
|
routes: z.array(ProviderRouteSchema).optional()
|
|
408
416
|
});
|
|
@@ -412,6 +420,8 @@ var init_schema = __esm({
|
|
|
412
420
|
displayName: z.string().min(1),
|
|
413
421
|
credential: ProviderCredentialSchema,
|
|
414
422
|
env: ProviderEnvSchema.optional(),
|
|
423
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
424
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
415
425
|
codex: CodexProviderConfigSchema.optional()
|
|
416
426
|
});
|
|
417
427
|
AntigravityProviderSchema = z.strictObject({
|
|
@@ -420,6 +430,8 @@ var init_schema = __esm({
|
|
|
420
430
|
displayName: z.string().min(1),
|
|
421
431
|
credential: ProviderCredentialSchema,
|
|
422
432
|
env: ProviderEnvSchema.optional(),
|
|
433
|
+
/** Extra models `/model` lists beside the ones the tier settings name. */
|
|
434
|
+
pickerModels: PickerModelsSchema.optional(),
|
|
423
435
|
antigravity: AntigravityProviderConfigSchema.optional()
|
|
424
436
|
});
|
|
425
437
|
ProviderSchema = z.discriminatedUnion("kind", [HttpProviderSchema, CodexProviderSchema, AntigravityProviderSchema]);
|
|
@@ -2911,7 +2923,7 @@ var init_package = __esm({
|
|
|
2911
2923
|
"package.json"() {
|
|
2912
2924
|
package_default = {
|
|
2913
2925
|
name: "claude-use",
|
|
2914
|
-
version: "11.
|
|
2926
|
+
version: "11.25.0",
|
|
2915
2927
|
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.",
|
|
2916
2928
|
license: "MIT",
|
|
2917
2929
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -6537,7 +6549,8 @@ function addProvider(paths, name, input) {
|
|
|
6537
6549
|
const shared = {
|
|
6538
6550
|
displayName: input.displayName,
|
|
6539
6551
|
credential: { sources: input.sources, ...input.target === void 0 ? {} : { target: input.target } },
|
|
6540
|
-
...input.env === void 0 || Object.keys(input.env).length === 0 ? {} : { env: input.env }
|
|
6552
|
+
...input.env === void 0 || Object.keys(input.env).length === 0 ? {} : { env: input.env },
|
|
6553
|
+
...input.pickerModels === void 0 || input.pickerModels.length === 0 ? {} : { pickerModels: input.pickerModels }
|
|
6541
6554
|
};
|
|
6542
6555
|
const parsed = ProviderSchema.safeParse(
|
|
6543
6556
|
kind === "codex" ? { kind, ...shared, ...isEmptyCodexConfig(input.codex) ? {} : { codex: input.codex } } : kind === "antigravity" ? { kind, ...shared, ...isEmptyAntigravityConfig(input.antigravity) ? {} : { antigravity: input.antigravity } } : { ...shared, baseUrl: input.baseUrl }
|
|
@@ -6555,6 +6568,12 @@ function updateProvider(paths, name, input) {
|
|
|
6555
6568
|
}
|
|
6556
6569
|
const unset = new Set(input.unsetEnv);
|
|
6557
6570
|
const env = Object.fromEntries(Object.entries({ ...existing.env, ...input.env }).filter(([key]) => !unset.has(key)));
|
|
6571
|
+
const unsetPicker = new Set(input.unsetPickerModels);
|
|
6572
|
+
const added = new Map((input.pickerModels ?? []).map((entry) => [entry.model, entry]));
|
|
6573
|
+
const pickerModels = [
|
|
6574
|
+
...(existing.pickerModels ?? []).filter((entry) => !unsetPicker.has(entry.model)).map((entry) => added.get(entry.model) ?? entry),
|
|
6575
|
+
...[...added.values()].filter((entry) => !(existing.pickerModels ?? []).some((kept) => kept.model === entry.model))
|
|
6576
|
+
];
|
|
6558
6577
|
const target = input.target ?? existing.credential.target;
|
|
6559
6578
|
const cache = input.cache === void 0 ? existing.credential.cache : input.cache === false ? void 0 : input.cache;
|
|
6560
6579
|
if (isCodexProvider(existing) && input.baseUrl !== void 0) {
|
|
@@ -6576,7 +6595,8 @@ function updateProvider(paths, name, input) {
|
|
|
6576
6595
|
...target === void 0 ? {} : { target },
|
|
6577
6596
|
...cache === void 0 ? {} : { cache }
|
|
6578
6597
|
},
|
|
6579
|
-
env: Object.keys(env).length === 0 ? void 0 : env
|
|
6598
|
+
env: Object.keys(env).length === 0 ? void 0 : env,
|
|
6599
|
+
pickerModels: pickerModels.length === 0 ? void 0 : pickerModels
|
|
6580
6600
|
};
|
|
6581
6601
|
let candidate;
|
|
6582
6602
|
if (isCodexProvider(existing)) {
|
|
@@ -7919,7 +7939,7 @@ function candidatesOf(target) {
|
|
|
7919
7939
|
return typeof target === "string" ? [target] : target;
|
|
7920
7940
|
}
|
|
7921
7941
|
function isAntigravityTier(key) {
|
|
7922
|
-
return
|
|
7942
|
+
return CLAUDE_TIERS.some((tier) => tier === key);
|
|
7923
7943
|
}
|
|
7924
7944
|
function resolveAntigravityConfig(config) {
|
|
7925
7945
|
const overrides = config?.models ?? {};
|
|
@@ -7985,6 +8005,12 @@ var init_translate2 = __esm({
|
|
|
7985
8005
|
});
|
|
7986
8006
|
|
|
7987
8007
|
// src/launcher/modelPicker.ts
|
|
8008
|
+
function labelOf(model) {
|
|
8009
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? model.slice(0, -CONTEXT_MARKER_1M.length) : model;
|
|
8010
|
+
}
|
|
8011
|
+
function describedAs(model, description) {
|
|
8012
|
+
return model.toLowerCase().endsWith(CONTEXT_MARKER_1M) ? `${description}; 1M context` : description;
|
|
8013
|
+
}
|
|
7988
8014
|
function joined(parts) {
|
|
7989
8015
|
const last = parts[parts.length - 1];
|
|
7990
8016
|
return last === void 0 || parts.length === 1 ? last ?? "" : `${parts.slice(0, -1).join(", ")} and ${last}`;
|
|
@@ -7998,7 +8024,7 @@ function rowOf2(model, reaches) {
|
|
|
7998
8024
|
const fallbacks = reaches.filter((reach) => reach.standing === "fallback").map((reach) => reach.tier);
|
|
7999
8025
|
const serves = firsts.length === 0 ? [] : [`Serves the ${joined(firsts)} tier${firsts.length === 1 ? "" : "s"}`];
|
|
8000
8026
|
const falls = fallbacks.length === 0 ? [] : [`${serves.length === 0 ? "Fallback" : "fallback"} for ${joined(fallbacks)}`];
|
|
8001
|
-
return { model, label: model, description: [...serves, ...falls].join("; "), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
8027
|
+
return { model, label: labelOf(model), description: describedAs(model, [...serves, ...falls].join("; ")), behavesAs: TIER_BEHAVES_AS[lead.tier] };
|
|
8002
8028
|
}
|
|
8003
8029
|
function rowsOfTable(table) {
|
|
8004
8030
|
const reachesByModel = /* @__PURE__ */ new Map();
|
|
@@ -8015,47 +8041,53 @@ function rowsOfTable(table) {
|
|
|
8015
8041
|
}
|
|
8016
8042
|
function antigravityRows(provider) {
|
|
8017
8043
|
const config = resolveAntigravityConfig(provider.antigravity);
|
|
8018
|
-
const tiers = rowsOfTable(
|
|
8044
|
+
const tiers = rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, config.models[tier]]));
|
|
8019
8045
|
const behavesAsOf = new Map(tiers.map((row) => [row.model, row.behavesAs]));
|
|
8020
8046
|
const aliases = [...config.aliases].flatMap(([alias, candidates]) => {
|
|
8021
8047
|
const [first] = candidates;
|
|
8022
8048
|
const behavesAs = first === void 0 ? void 0 : behavesAsOf.get(first);
|
|
8023
|
-
return behavesAs === void 0 ? [] : [{ model: alias, label: alias, description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
8049
|
+
return behavesAs === void 0 ? [] : [{ model: alias, label: labelOf(alias), description: `Alias for ${candidates.join(", then ")}`, behavesAs }];
|
|
8024
8050
|
});
|
|
8025
8051
|
return [...tiers, ...aliases];
|
|
8026
8052
|
}
|
|
8027
8053
|
function codexRows(provider) {
|
|
8028
8054
|
const config = resolveCodexConfig(provider.codex);
|
|
8029
|
-
return rowsOfTable(
|
|
8055
|
+
return rowsOfTable(CLAUDE_TIERS.map((tier) => [tier, [config.models[tier]]]));
|
|
8030
8056
|
}
|
|
8031
8057
|
function httpRows(provider) {
|
|
8032
8058
|
const env = provider.env ?? {};
|
|
8033
|
-
const table =
|
|
8059
|
+
const table = CLAUDE_TIERS.flatMap((tier) => {
|
|
8034
8060
|
const model = env[TIER_ENV_VARIABLES[tier]];
|
|
8035
8061
|
return model === void 0 || model === "" ? [] : [[tier, [model]]];
|
|
8036
8062
|
});
|
|
8037
8063
|
return rowsOfTable(table);
|
|
8038
8064
|
}
|
|
8065
|
+
function declaredRow(entry) {
|
|
8066
|
+
return {
|
|
8067
|
+
model: entry.model,
|
|
8068
|
+
label: entry.label ?? labelOf(entry.model),
|
|
8069
|
+
description: entry.description ?? describedAs(entry.model, `Declared by the provider for the ${entry.tier} tier`),
|
|
8070
|
+
behavesAs: TIER_BEHAVES_AS[entry.tier]
|
|
8071
|
+
};
|
|
8072
|
+
}
|
|
8039
8073
|
function providerModelRows(provider) {
|
|
8040
|
-
|
|
8041
|
-
|
|
8042
|
-
|
|
8043
|
-
|
|
8044
|
-
return antigravityRows(provider);
|
|
8045
|
-
}
|
|
8046
|
-
return httpRows(provider);
|
|
8074
|
+
const derived = provider.kind === "codex" ? codexRows(provider) : provider.kind === "antigravity" ? antigravityRows(provider) : httpRows(provider);
|
|
8075
|
+
const declared = (provider.pickerModels ?? []).map(declaredRow);
|
|
8076
|
+
const declaredModels = new Set(declared.map((row) => row.model));
|
|
8077
|
+
return [...derived.filter((row) => !declaredModels.has(row.model)), ...declared];
|
|
8047
8078
|
}
|
|
8048
8079
|
function modelPickerSettings(provider) {
|
|
8049
8080
|
const options = providerModelRows(provider);
|
|
8050
8081
|
return options.length === 0 ? void 0 : JSON.stringify({ modelPicker: { options, replaceBuiltInOptions: true } });
|
|
8051
8082
|
}
|
|
8052
|
-
var TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
8083
|
+
var CONTEXT_MARKER_1M, TIER_BEHAVES_AS, TIER_ENV_VARIABLES;
|
|
8053
8084
|
var init_modelPicker = __esm({
|
|
8054
8085
|
"src/launcher/modelPicker.ts"() {
|
|
8055
8086
|
"use strict";
|
|
8056
8087
|
init_translate();
|
|
8057
8088
|
init_translate2();
|
|
8058
8089
|
init_schema();
|
|
8090
|
+
CONTEXT_MARKER_1M = "[1m]";
|
|
8059
8091
|
TIER_BEHAVES_AS = Object.freeze({
|
|
8060
8092
|
fable: "claude-fable-5-1",
|
|
8061
8093
|
opus: "claude-opus-5-5",
|
package/dist/types/index.d.ts
CHANGED
|
@@ -434,6 +434,21 @@ declare const CodexProviderConfigSchema: z.ZodObject<{
|
|
|
434
434
|
}>>;
|
|
435
435
|
}, z.core.$strict>;
|
|
436
436
|
type CodexProviderConfig = z.infer<typeof CodexProviderConfigSchema>;
|
|
437
|
+
/**
|
|
438
|
+
* A model a provider serves that `/model` should list beside the ones its tier settings name. `tier` is the Claude tier whose client-side handling (prompt profile, effort defaults) the row borrows, since Claude Code knows no handling for a model it has not heard of. `label` defaults to the model name and `description` to a generic line.
|
|
439
|
+
*/
|
|
440
|
+
declare const PickerModelSchema: z.ZodObject<{
|
|
441
|
+
model: z.ZodString;
|
|
442
|
+
tier: z.ZodEnum<{
|
|
443
|
+
fable: "fable";
|
|
444
|
+
opus: "opus";
|
|
445
|
+
sonnet: "sonnet";
|
|
446
|
+
haiku: "haiku";
|
|
447
|
+
}>;
|
|
448
|
+
label: z.ZodOptional<z.ZodString>;
|
|
449
|
+
description: z.ZodOptional<z.ZodString>;
|
|
450
|
+
}, z.core.$strict>;
|
|
451
|
+
type PickerModel = z.infer<typeof PickerModelSchema>;
|
|
437
452
|
/** All kinds of provider; see `HttpProviderSchema` for the shared fields. */
|
|
438
453
|
declare const ProviderSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
439
454
|
$schema: z.ZodOptional<z.ZodString>;
|
|
@@ -476,6 +491,17 @@ declare const ProviderSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
476
491
|
}>>;
|
|
477
492
|
}, z.core.$strict>;
|
|
478
493
|
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
494
|
+
pickerModels: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
495
|
+
model: z.ZodString;
|
|
496
|
+
tier: z.ZodEnum<{
|
|
497
|
+
fable: "fable";
|
|
498
|
+
opus: "opus";
|
|
499
|
+
sonnet: "sonnet";
|
|
500
|
+
haiku: "haiku";
|
|
501
|
+
}>;
|
|
502
|
+
label: z.ZodOptional<z.ZodString>;
|
|
503
|
+
description: z.ZodOptional<z.ZodString>;
|
|
504
|
+
}, z.core.$strict>>>;
|
|
479
505
|
routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
480
506
|
when: z.ZodUnion<readonly [z.ZodObject<{
|
|
481
507
|
newerThan: z.ZodOptional<z.ZodString>;
|
|
@@ -592,6 +618,17 @@ declare const ProviderSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
592
618
|
}>>;
|
|
593
619
|
}, z.core.$strict>;
|
|
594
620
|
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
621
|
+
pickerModels: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
622
|
+
model: z.ZodString;
|
|
623
|
+
tier: z.ZodEnum<{
|
|
624
|
+
fable: "fable";
|
|
625
|
+
opus: "opus";
|
|
626
|
+
sonnet: "sonnet";
|
|
627
|
+
haiku: "haiku";
|
|
628
|
+
}>;
|
|
629
|
+
label: z.ZodOptional<z.ZodString>;
|
|
630
|
+
description: z.ZodOptional<z.ZodString>;
|
|
631
|
+
}, z.core.$strict>>>;
|
|
595
632
|
codex: z.ZodOptional<z.ZodObject<{
|
|
596
633
|
defaultModel: z.ZodOptional<z.ZodString>;
|
|
597
634
|
models: z.ZodOptional<z.ZodObject<{
|
|
@@ -651,6 +688,17 @@ declare const ProviderSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
651
688
|
}>>;
|
|
652
689
|
}, z.core.$strict>;
|
|
653
690
|
env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
691
|
+
pickerModels: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
692
|
+
model: z.ZodString;
|
|
693
|
+
tier: z.ZodEnum<{
|
|
694
|
+
fable: "fable";
|
|
695
|
+
opus: "opus";
|
|
696
|
+
sonnet: "sonnet";
|
|
697
|
+
haiku: "haiku";
|
|
698
|
+
}>;
|
|
699
|
+
label: z.ZodOptional<z.ZodString>;
|
|
700
|
+
description: z.ZodOptional<z.ZodString>;
|
|
701
|
+
}, z.core.$strict>>>;
|
|
654
702
|
antigravity: z.ZodOptional<z.ZodObject<{
|
|
655
703
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
656
704
|
cloud: "cloud";
|
|
@@ -4323,10 +4371,10 @@ declare const CheckReportJsonSchema: z.ZodObject<{
|
|
|
4323
4371
|
configProfile: z.ZodObject<{
|
|
4324
4372
|
name: z.ZodNullable<z.ZodString>;
|
|
4325
4373
|
source: z.ZodEnum<{
|
|
4326
|
-
"directory-rule": "directory-rule";
|
|
4327
4374
|
env: "env";
|
|
4328
4375
|
none: "none";
|
|
4329
4376
|
"cli-flag": "cli-flag";
|
|
4377
|
+
"directory-rule": "directory-rule";
|
|
4330
4378
|
"identity-default": "identity-default";
|
|
4331
4379
|
"global-default": "global-default";
|
|
4332
4380
|
}>;
|
|
@@ -4334,9 +4382,9 @@ declare const CheckReportJsonSchema: z.ZodObject<{
|
|
|
4334
4382
|
layers: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
4335
4383
|
id: z.ZodInt;
|
|
4336
4384
|
kind: z.ZodEnum<{
|
|
4385
|
+
"directory-rule": "directory-rule";
|
|
4337
4386
|
"global-config": "global-config";
|
|
4338
4387
|
"config-profile": "config-profile";
|
|
4339
|
-
"directory-rule": "directory-rule";
|
|
4340
4388
|
portable: "portable";
|
|
4341
4389
|
"portable-local": "portable-local";
|
|
4342
4390
|
"cli-override": "cli-override";
|
|
@@ -7378,10 +7426,10 @@ declare function createLaunchApiRouter(deps: LaunchApiDeps): {
|
|
|
7378
7426
|
configDir: zod.ZodOptional<zod.ZodString>;
|
|
7379
7427
|
configProfile: zod.ZodOptional<zod.ZodString>;
|
|
7380
7428
|
configProfileSource: zod.ZodEnum<{
|
|
7381
|
-
"directory-rule": "directory-rule";
|
|
7382
7429
|
env: "env";
|
|
7383
7430
|
none: "none";
|
|
7384
7431
|
"cli-flag": "cli-flag";
|
|
7432
|
+
"directory-rule": "directory-rule";
|
|
7385
7433
|
"identity-default": "identity-default";
|
|
7386
7434
|
"global-default": "global-default";
|
|
7387
7435
|
}>;
|
|
@@ -8015,10 +8063,10 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
8015
8063
|
configProfile: zod.ZodObject<{
|
|
8016
8064
|
name: zod.ZodNullable<zod.ZodString>;
|
|
8017
8065
|
source: zod.ZodEnum<{
|
|
8018
|
-
"directory-rule": "directory-rule";
|
|
8019
8066
|
env: "env";
|
|
8020
8067
|
none: "none";
|
|
8021
8068
|
"cli-flag": "cli-flag";
|
|
8069
|
+
"directory-rule": "directory-rule";
|
|
8022
8070
|
"identity-default": "identity-default";
|
|
8023
8071
|
"global-default": "global-default";
|
|
8024
8072
|
}>;
|
|
@@ -8026,9 +8074,9 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
8026
8074
|
layers: zod.ZodReadonly<zod.ZodArray<zod.ZodObject<{
|
|
8027
8075
|
id: zod.ZodInt;
|
|
8028
8076
|
kind: zod.ZodEnum<{
|
|
8077
|
+
"directory-rule": "directory-rule";
|
|
8029
8078
|
"global-config": "global-config";
|
|
8030
8079
|
"config-profile": "config-profile";
|
|
8031
|
-
"directory-rule": "directory-rule";
|
|
8032
8080
|
portable: "portable";
|
|
8033
8081
|
"portable-local": "portable-local";
|
|
8034
8082
|
"cli-override": "cli-override";
|
|
@@ -8266,12 +8314,12 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
|
|
|
8266
8314
|
ok: zod.ZodBoolean;
|
|
8267
8315
|
findings: zod.ZodReadonly<zod.ZodArray<zod.ZodObject<{
|
|
8268
8316
|
section: zod.ZodEnum<{
|
|
8269
|
-
"global-config": "global-config";
|
|
8270
|
-
"config-profile": "config-profile";
|
|
8271
8317
|
identity: "identity";
|
|
8272
8318
|
provider: "provider";
|
|
8273
8319
|
frontdoor: "frontdoor";
|
|
8274
8320
|
pool: "pool";
|
|
8321
|
+
"global-config": "global-config";
|
|
8322
|
+
"config-profile": "config-profile";
|
|
8275
8323
|
keychain: "keychain";
|
|
8276
8324
|
"ambient-credential": "ambient-credential";
|
|
8277
8325
|
"binary-discovery": "binary-discovery";
|
|
@@ -8494,10 +8542,10 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
8494
8542
|
configDir: zod.ZodOptional<zod.ZodString>;
|
|
8495
8543
|
configProfile: zod.ZodOptional<zod.ZodString>;
|
|
8496
8544
|
configProfileSource: zod.ZodEnum<{
|
|
8497
|
-
"directory-rule": "directory-rule";
|
|
8498
8545
|
env: "env";
|
|
8499
8546
|
none: "none";
|
|
8500
8547
|
"cli-flag": "cli-flag";
|
|
8548
|
+
"directory-rule": "directory-rule";
|
|
8501
8549
|
"identity-default": "identity-default";
|
|
8502
8550
|
"global-default": "global-default";
|
|
8503
8551
|
}>;
|
|
@@ -10128,10 +10176,10 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
10128
10176
|
configProfile: zod.ZodObject<{
|
|
10129
10177
|
name: zod.ZodNullable<zod.ZodString>;
|
|
10130
10178
|
source: zod.ZodEnum<{
|
|
10131
|
-
"directory-rule": "directory-rule";
|
|
10132
10179
|
env: "env";
|
|
10133
10180
|
none: "none";
|
|
10134
10181
|
"cli-flag": "cli-flag";
|
|
10182
|
+
"directory-rule": "directory-rule";
|
|
10135
10183
|
"identity-default": "identity-default";
|
|
10136
10184
|
"global-default": "global-default";
|
|
10137
10185
|
}>;
|
|
@@ -10139,9 +10187,9 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
10139
10187
|
layers: zod.ZodReadonly<zod.ZodArray<zod.ZodObject<{
|
|
10140
10188
|
id: zod.ZodInt;
|
|
10141
10189
|
kind: zod.ZodEnum<{
|
|
10190
|
+
"directory-rule": "directory-rule";
|
|
10142
10191
|
"global-config": "global-config";
|
|
10143
10192
|
"config-profile": "config-profile";
|
|
10144
|
-
"directory-rule": "directory-rule";
|
|
10145
10193
|
portable: "portable";
|
|
10146
10194
|
"portable-local": "portable-local";
|
|
10147
10195
|
"cli-override": "cli-override";
|
|
@@ -10379,12 +10427,12 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
|
|
|
10379
10427
|
ok: zod.ZodBoolean;
|
|
10380
10428
|
findings: zod.ZodReadonly<zod.ZodArray<zod.ZodObject<{
|
|
10381
10429
|
section: zod.ZodEnum<{
|
|
10382
|
-
"global-config": "global-config";
|
|
10383
|
-
"config-profile": "config-profile";
|
|
10384
10430
|
identity: "identity";
|
|
10385
10431
|
provider: "provider";
|
|
10386
10432
|
frontdoor: "frontdoor";
|
|
10387
10433
|
pool: "pool";
|
|
10434
|
+
"global-config": "global-config";
|
|
10435
|
+
"config-profile": "config-profile";
|
|
10388
10436
|
keychain: "keychain";
|
|
10389
10437
|
"ambient-credential": "ambient-credential";
|
|
10390
10438
|
"binary-discovery": "binary-discovery";
|
|
@@ -12244,12 +12292,12 @@ declare const CheckRunInputSchema: z.ZodObject<{
|
|
|
12244
12292
|
/** One line of the doctor report: the section it belongs to, its severity, its message, and the identity/profile/rule it is about when there is one. */
|
|
12245
12293
|
declare const DoctorFindingSchema: z.ZodObject<{
|
|
12246
12294
|
section: z.ZodEnum<{
|
|
12247
|
-
"global-config": "global-config";
|
|
12248
|
-
"config-profile": "config-profile";
|
|
12249
12295
|
identity: "identity";
|
|
12250
12296
|
provider: "provider";
|
|
12251
12297
|
frontdoor: "frontdoor";
|
|
12252
12298
|
pool: "pool";
|
|
12299
|
+
"global-config": "global-config";
|
|
12300
|
+
"config-profile": "config-profile";
|
|
12253
12301
|
keychain: "keychain";
|
|
12254
12302
|
"ambient-credential": "ambient-credential";
|
|
12255
12303
|
"binary-discovery": "binary-discovery";
|
|
@@ -12275,12 +12323,12 @@ declare const DoctorRunOutputSchema: z.ZodObject<{
|
|
|
12275
12323
|
ok: z.ZodBoolean;
|
|
12276
12324
|
findings: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
12277
12325
|
section: z.ZodEnum<{
|
|
12278
|
-
"global-config": "global-config";
|
|
12279
|
-
"config-profile": "config-profile";
|
|
12280
12326
|
identity: "identity";
|
|
12281
12327
|
provider: "provider";
|
|
12282
12328
|
frontdoor: "frontdoor";
|
|
12283
12329
|
pool: "pool";
|
|
12330
|
+
"global-config": "global-config";
|
|
12331
|
+
"config-profile": "config-profile";
|
|
12284
12332
|
keychain: "keychain";
|
|
12285
12333
|
"ambient-credential": "ambient-credential";
|
|
12286
12334
|
"binary-discovery": "binary-discovery";
|
|
@@ -12383,10 +12431,10 @@ declare const LaunchResolveOutputSchema: z.ZodObject<{
|
|
|
12383
12431
|
configDir: z.ZodOptional<z.ZodString>;
|
|
12384
12432
|
configProfile: z.ZodOptional<z.ZodString>;
|
|
12385
12433
|
configProfileSource: z.ZodEnum<{
|
|
12386
|
-
"directory-rule": "directory-rule";
|
|
12387
12434
|
env: "env";
|
|
12388
12435
|
none: "none";
|
|
12389
12436
|
"cli-flag": "cli-flag";
|
|
12437
|
+
"directory-rule": "directory-rule";
|
|
12390
12438
|
"identity-default": "identity-default";
|
|
12391
12439
|
"global-default": "global-default";
|
|
12392
12440
|
}>;
|
|
@@ -13416,6 +13464,8 @@ interface AddProviderInput {
|
|
|
13416
13464
|
readonly sources: readonly CredentialSource[];
|
|
13417
13465
|
readonly target?: ProviderCredentialTarget;
|
|
13418
13466
|
readonly env?: Readonly<Record<string, string>>;
|
|
13467
|
+
/** Extra models `/model` lists beside the ones the tier settings name; applies to every provider kind. */
|
|
13468
|
+
readonly pickerModels?: readonly PickerModel[];
|
|
13419
13469
|
readonly codex?: CodexProviderConfig;
|
|
13420
13470
|
readonly antigravity?: AntigravityProviderConfig;
|
|
13421
13471
|
}
|
|
@@ -13439,6 +13489,10 @@ interface UpdateProviderInput {
|
|
|
13439
13489
|
readonly cache?: CredentialCache | false;
|
|
13440
13490
|
readonly env?: Readonly<Record<string, string>>;
|
|
13441
13491
|
readonly unsetEnv?: readonly string[];
|
|
13492
|
+
/** Picker models to add; one for a model the provider already declares replaces that entry in place. */
|
|
13493
|
+
readonly pickerModels?: readonly PickerModel[];
|
|
13494
|
+
/** Models whose picker entries are removed. */
|
|
13495
|
+
readonly unsetPickerModels?: readonly string[];
|
|
13442
13496
|
/** Merged over a codex provider's existing settings: a field given here replaces that field, and `models` entries merge per tier. */
|
|
13443
13497
|
readonly codex?: CodexProviderConfig;
|
|
13444
13498
|
/** Merged over an antigravity provider's existing settings: a field given here replaces that field, and `models` entries merge per tier. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-use",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.25.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>",
|