@fased/fased 0.1.53 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/authenticated-model-catalog.js +27 -0
- package/dist/agents/current-model-catalog.js +30 -10
- package/dist/agents/model-catalog-normalized.js +1 -0
- package/dist/agents/model-catalog-source.js +4 -4
- package/dist/agents/model-forward-compat.js +19 -1
- package/dist/agents/model-metadata.js +37 -8
- package/dist/agents/pi-embedded-runner/agent-messages.js +15 -0
- package/dist/agents/pi-embedded-runner/compact.js +2 -1
- package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
- package/dist/agents/pi-embedded-runner/model.js +2 -7
- package/dist/agents/pi-embedded-runner/run/attempt.js +4 -5
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/cli/program/register.agent.js +17 -0
- package/dist/cli/providers-cli.js +3 -2
- package/dist/commands/agents.commands.models.js +63 -0
- package/dist/commands/agents.js +1 -0
- package/dist/commands/auth-choice.apply.api-providers.js +3 -8
- package/dist/commands/auth-choice.apply.openai.js +13 -7
- package/dist/commands/auth-choice.model-check.js +1 -2
- package/dist/commands/configure.gateway-auth.js +14 -16
- package/dist/commands/model-picker.js +25 -7
- package/dist/commands/models/list.registry.js +13 -18
- package/dist/commands/onboard-auth.config-core.js +1 -1
- package/dist/commands/onboard-auth.config-litellm.js +21 -21
- package/dist/commands/onboard-auth.credentials.js +0 -1
- package/dist/commands/onboard-auth.js +0 -1
- package/dist/commands/openai-codex-model-default.js +26 -4
- package/dist/config/defaults.js +1 -1
- package/dist/config/zod-schema.agent-defaults.js +4 -2
- package/dist/config/zod-schema.agent-runtime.js +4 -2
- package/dist/config/zod-schema.core.js +4 -2
- package/dist/control-ui/assets/{app-WIDYwhr-.js → app-D2RaTXoV.js} +1788 -1755
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
- package/dist/control-ui/assets/{index-K3ysLeTN.js → index-D2nC6I-9.js} +3 -3
- package/dist/control-ui/assets/{providers-rQMhp1fb.js → providers-CyjiG5Jw.js} +4 -4
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -0
- package/dist/cron/isolated-agent/run.js +9 -3
- package/dist/cron/normalize.js +10 -0
- package/dist/gateway/control-ui.js +2 -0
- package/dist/gateway/protocol/schema/agents-models-skills.js +6 -2
- package/dist/gateway/protocol/schema/cron.js +7 -0
- package/dist/gateway/server-methods/models.js +8 -9
- package/dist/gateway/server-model-catalog.js +3 -0
- package/dist/infra/update-runner.js +31 -3
- package/dist/light-update-status.js +10 -10
- package/dist/memory/inventory.js +19 -2
- package/dist/plugin-sdk/{accounts-BZrfqJmO.js → accounts-CeRNo5Ae.js} +1 -1
- package/dist/plugin-sdk/{actions-7_zTh8zC.js → actions-OMRHtXPj.js} +2 -2
- package/dist/plugin-sdk/{active-listener-D8NVRD8J.js → active-listener-BlIkS3iR.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-BrVWUkoP.js → audio-preflight-B2n3a2Tj.js} +26 -26
- package/dist/plugin-sdk/{audit-2iRlVyQF.js → audit-Ppg6dR_b.js} +1 -1
- package/dist/plugin-sdk/{channel-access-BCf1rJsn.js → channel-access-af8dWWRv.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B-Z51Qsd.js → channel-access-configure-B6IAGlE0.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-BREC9ijl.js → chunk-CD76Byie.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-BLRCltGL.js → chunk-items-Bu19zrYH.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +26 -26
- package/dist/plugin-sdk/{commands-registry-D3-bFLsz.js → commands-registry-DgS55tNj.js} +2 -2
- package/dist/plugin-sdk/{common-BlqMqEqn.js → common-CWvfeiX0.js} +1 -1
- package/dist/plugin-sdk/{config-442EDe7Z.js → config-CYDETqcF.js} +130 -134
- package/dist/plugin-sdk/{config-schema-DV0zctd2.js → config-schema-CQ4EVcQG.js} +164 -78
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BxDgHCgj.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-pNaP87Dr.js → handle-action-B75UVKxF.js} +13 -13
- package/dist/plugin-sdk/{helpers-B994qqVW.js → helpers-BuEwju6y.js} +1 -1
- package/dist/plugin-sdk/{image-ops-Doq8nZQw.js → image-ops-C66HPeAZ.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +8 -8
- package/dist/plugin-sdk/index.js +28 -28
- package/dist/plugin-sdk/{login-CK2zTIJA.js → login-Amr2DpKU.js} +3 -3
- package/dist/plugin-sdk/{login-qr-u8Mn1mCp.js → login-qr-DMQNEi9m.js} +3 -3
- package/dist/plugin-sdk/{manager-CeJNf2bH.js → manager-Bvpq49BI.js} +2 -2
- package/dist/plugin-sdk/{markdown-tables-DeZztrY6.js → markdown-tables-DmQ7oXOm.js} +1 -1
- package/dist/plugin-sdk/{media-CgUAEfhs.js → media-ByLQbEwJ.js} +2 -2
- package/dist/plugin-sdk/{monitor-CEtMJuFX.js → monitor-K_u6daGa.js} +30 -30
- package/dist/plugin-sdk/{monitor-D-APtCpn.js → monitor-S_7LrvSj.js} +31 -31
- package/dist/plugin-sdk/{openresponses-http-g1Iz0xB2.js → openresponses-http-BrDJUZXR.js} +26 -26
- package/dist/plugin-sdk/{optional-runtime-dependency-D0BdXz1C.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
- package/dist/plugin-sdk/{outbound-DXGuFrdx.js → outbound-BuDafBBI.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-oxhGO33g.js → outbound-attachment-DmZmUqFP.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-D3WPVg_j.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-C29ixrvn.js → pairing-message-e4D4eBDA.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-1kcsOWRs.js → pairing-store-T3IGoGZg.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-l-xqaEd0.js → pi-model-discovery-DvAG_Png.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-CibV8F8G.js → pi-model-discovery-runtime-NjkUgjIf.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-9qEBW5-k.js → pw-ai-D7eW43DL.js} +3 -3
- package/dist/plugin-sdk/{replies-BX3L8fX7.js → replies-BMIPmEoP.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-D0AK10E7.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-UO6XLYH3.js → resolve-route-DJN-SUSt.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-C5N8JiHL.js → retry-policy-CY1qY6d7.js} +1 -1
- package/dist/plugin-sdk/{runtime-Dnzwux3G.js → runtime-CgOkQe0w.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-BDDpVKBO.js → runtime-dependency-DvdRNMvs.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +5 -5
- package/dist/plugin-sdk/{send-bcKv8F5E.js → send-2ITqny2W.js} +8 -8
- package/dist/plugin-sdk/{send-DGEgo_6f.js → send-BAz22RZr.js} +5 -5
- package/dist/plugin-sdk/{send-DcsYRH2f.js → send-BG3RWyil.js} +7 -7
- package/dist/plugin-sdk/{send-D5rgCP1r.js → send-Cr-dj6S-.js} +6 -6
- package/dist/plugin-sdk/{send-B4XLsTL0.js → send-eTxqFFsw.js} +6 -6
- package/dist/plugin-sdk/{session-BoGNOlwv.js → session-C8nJmmVE.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-Be8s4TGQ.js → skill-commands-Rm5by9S8.js} +2 -2
- package/dist/plugin-sdk/{slack-actions-TNnAXiUx.js → slack-actions-BNIALJTA.js} +11 -11
- package/dist/plugin-sdk/{slack-74qForpW.js → slack-xvIVvyEM.js} +38 -38
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CrYayLff.js → sticker-cache-D3oDiu2u.js} +3 -3
- package/dist/plugin-sdk/{tables-Ch4js2qy.js → tables-DS5L7lCA.js} +1 -1
- package/dist/plugin-sdk/{targets-BGfRUJPE.js → targets-D6lUomJc.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-BGy4AEvF.js → telegram-actions-MSFkDn0m.js} +29 -29
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-_uQ2EF17.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-DUg0s_1X.js → thread-bindings.state-C0stmvNk.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-BrbXGSkl.d.ts → tmp-fased-dir-D91GExk4.d.ts} +2 -2
- package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-BzadOItY.d.ts} +1 -1
- package/dist/plugin-sdk/{types-DlKIHIqA.d.ts → types-DKvBJHfH.d.ts} +16 -6
- package/dist/plugin-sdk/{types-BJdDoTQF.d.ts → types-DVTIpopt.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-BiHPaDTF.d.ts} +2 -1
- package/dist/plugin-sdk/{wallet-status-M6aK3abH.js → wallet-status-f0HagNeO.js} +31 -13
- package/dist/plugin-sdk/{web-r1KFR44s.js → web-DRNJxHXA.js} +31 -31
- package/dist/plugin-sdk/{whatsapp-actions-CID_tqAX.js → whatsapp-actions-BDXZF2R5.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bk-aZVMa.js → whatsapp-heartbeat-CKgmwCGr.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C_STtED7.js → wsl-Biw7Mj39.js} +3 -3
- package/dist/providers/huggingface-models.js +0 -30
- package/dist/providers/litellm-models.js +1 -1
- package/dist/providers/opencode-zen-shared.js +0 -1
- package/dist/providers/refresh.js +221 -62
- package/dist/providers/registry.js +31 -7
- package/dist/providers/runtime-model-catalog.js +181 -0
- package/dist/providers/vercel-ai-gateway-models.js +0 -35
- package/dist/shared/model-thinking.js +44 -2
- package/dist/wizard/onboarding.js +24 -6
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/control-ui/assets/chat-model-ref-NT82zapt.js +0 -2
|
@@ -6,7 +6,7 @@ import { isRemoteEnvironment } from "./oauth-env.js";
|
|
|
6
6
|
import { setOpenaiApiKey, writeOAuthCredentials } from "./onboard-auth.credentials.js";
|
|
7
7
|
import { applyAuthProfileConfig } from "./onboard-auth.config-core.js";
|
|
8
8
|
import "./onboard-auth.js";
|
|
9
|
-
import {
|
|
9
|
+
import { applyOpenAICodexModelDefault, discoverOpenAICodexDefaultModel } from "./openai-codex-model-default.js";
|
|
10
10
|
import { loginOpenAICodexOAuth } from "./openai-codex-oauth.js";
|
|
11
11
|
import { OPENAI_DEFAULT_MODEL, applyOpenAIConfig, applyOpenAIProviderConfig } from "./openai-model-default.js";
|
|
12
12
|
|
|
@@ -88,15 +88,21 @@ async function applyAuthChoiceOpenAI(params) {
|
|
|
88
88
|
provider: "openai-codex",
|
|
89
89
|
mode: "oauth"
|
|
90
90
|
});
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
const discoveredModel = await discoverOpenAICodexDefaultModel({
|
|
92
|
+
config: nextConfig,
|
|
93
|
+
agentDir: params.agentDir
|
|
94
|
+
});
|
|
95
|
+
if (params.setDefaultModel && discoveredModel) {
|
|
96
|
+
const applied = applyOpenAICodexModelDefault(nextConfig, discoveredModel);
|
|
93
97
|
nextConfig = applied.next;
|
|
94
98
|
if (applied.changed) {
|
|
95
|
-
await params.prompter.note(`Default model set to ${
|
|
99
|
+
await params.prompter.note(`Default model set to ${discoveredModel}`, "Model configured");
|
|
96
100
|
}
|
|
97
|
-
} else {
|
|
98
|
-
agentModelOverride =
|
|
99
|
-
await noteAgentModel(
|
|
101
|
+
} else if (!params.setDefaultModel && discoveredModel) {
|
|
102
|
+
agentModelOverride = discoveredModel;
|
|
103
|
+
await noteAgentModel(discoveredModel);
|
|
104
|
+
} else if (!discoveredModel) {
|
|
105
|
+
await params.prompter.note("Sign-in completed, but the authenticated runtime did not return an executable model. Refresh Agent > Models or run `fased models list --all --provider openai-codex`.", "No sign-in model available");
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
return {
|
|
@@ -4,7 +4,6 @@ import "../agents/auth-profiles.js";
|
|
|
4
4
|
import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth.js";
|
|
5
5
|
import { resolveDefaultModelForAgent } from "../agents/model-selection.js";
|
|
6
6
|
import { loadModelCatalog } from "../agents/model-catalog.js";
|
|
7
|
-
import { OPENAI_CODEX_DEFAULT_MODEL } from "./openai-codex-model-default.js";
|
|
8
7
|
|
|
9
8
|
//#region src/commands/auth-choice.model-check.ts
|
|
10
9
|
async function warnIfModelConfigLooksOff(config, prompter, options) {
|
|
@@ -33,7 +32,7 @@ async function warnIfModelConfigLooksOff(config, prompter, options) {
|
|
|
33
32
|
if (ref.provider === "openai") {
|
|
34
33
|
const hasCodex = listProfilesForProvider(store, "openai-codex").length > 0;
|
|
35
34
|
if (hasCodex) {
|
|
36
|
-
warnings.push(
|
|
35
|
+
warnings.push("Detected OpenAI sign-in. Choose a model returned by `fased models list --all --provider openai-codex`.");
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
38
|
if (warnings.length > 0) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { resolveFasedAgentAgentDir } from "../agents/agent-paths.js";
|
|
1
2
|
import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
|
|
2
3
|
import "../agents/auth-profiles.js";
|
|
3
4
|
import { randomToken } from "./onboard-helpers.js";
|
|
4
5
|
import { promptAuthChoiceGrouped } from "./auth-choice-prompt.js";
|
|
5
|
-
import { applyModelAllowlist, applyModelFallbacksFromSelection, promptModelAllowlist } from "./model-picker.js";
|
|
6
|
+
import { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist } from "./model-picker.js";
|
|
6
7
|
import { applyAuthChoice } from "./auth-choice.apply.js";
|
|
7
8
|
import { resolvePreferredProviderForAuthChoice } from "./auth-choice.preferred-provider.js";
|
|
8
9
|
import "./auth-choice.js";
|
|
@@ -20,12 +21,6 @@ function sanitizeTokenValue(value) {
|
|
|
20
21
|
}
|
|
21
22
|
return trimmed;
|
|
22
23
|
}
|
|
23
|
-
const ANTHROPIC_OAUTH_MODEL_KEYS = [
|
|
24
|
-
"anthropic/claude-fable-5",
|
|
25
|
-
"anthropic/claude-opus-4-8",
|
|
26
|
-
"anthropic/claude-sonnet-5",
|
|
27
|
-
"anthropic/claude-haiku-4-5"
|
|
28
|
-
];
|
|
29
24
|
function buildGatewayAuthConfig(params) {
|
|
30
25
|
const allowTailscale = params.existing?.allowTailscale;
|
|
31
26
|
const base = {};
|
|
@@ -61,9 +56,10 @@ function buildGatewayAuthConfig(params) {
|
|
|
61
56
|
return base;
|
|
62
57
|
}
|
|
63
58
|
async function promptAuthConfig(cfg, runtime, prompter) {
|
|
59
|
+
const agentDir = resolveFasedAgentAgentDir();
|
|
64
60
|
const authChoice = await promptAuthChoiceGrouped({
|
|
65
61
|
prompter,
|
|
66
|
-
store: ensureAuthProfileStore(
|
|
62
|
+
store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false }),
|
|
67
63
|
includeSkip: true
|
|
68
64
|
});
|
|
69
65
|
let next = cfg;
|
|
@@ -82,24 +78,26 @@ async function promptAuthConfig(cfg, runtime, prompter) {
|
|
|
82
78
|
config: next,
|
|
83
79
|
prompter,
|
|
84
80
|
runtime,
|
|
85
|
-
setDefaultModel:
|
|
81
|
+
setDefaultModel: false,
|
|
82
|
+
agentDir
|
|
86
83
|
});
|
|
87
84
|
next = applied.config;
|
|
88
85
|
}
|
|
89
|
-
const anthropicOAuth = authChoice === "anthropic-oauth" || authChoice === "setup-token" || authChoice === "token" || authChoice === "oauth";
|
|
90
86
|
const preferredProvider = authChoice !== "custom-api-key" ? resolvePreferredProviderForAuthChoice(authChoice, { config: next }) : undefined;
|
|
91
87
|
if (authChoice !== "custom-api-key" && authChoice !== "skip") {
|
|
92
88
|
const allowlistSelection = await promptModelAllowlist({
|
|
93
89
|
config: next,
|
|
94
90
|
prompter,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
message: anthropicOAuth ? "Anthropic OAuth models" : undefined,
|
|
98
|
-
preferredProvider
|
|
91
|
+
preferredProvider,
|
|
92
|
+
agentDir
|
|
99
93
|
});
|
|
100
94
|
if (allowlistSelection.models) {
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
const selectedModels = allowlistSelection.models;
|
|
96
|
+
if (selectedModels[0]) {
|
|
97
|
+
next = applyPrimaryModel(next, selectedModels[0]);
|
|
98
|
+
}
|
|
99
|
+
next = applyModelAllowlist(next, selectedModels);
|
|
100
|
+
next = applyModelFallbacksFromSelection(next, selectedModels);
|
|
103
101
|
}
|
|
104
102
|
}
|
|
105
103
|
return next;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { resolveAgentModelPrimaryValue } from "../config/model-input.js";
|
|
2
2
|
import { CLOUDFLARE_AI_GATEWAY_MODEL_REFS } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
3
3
|
import { HUGGINGFACE_MODEL_REFS } from "../providers/huggingface-models.js";
|
|
4
|
-
import { LITELLM_MODEL_REFS } from "../providers/litellm-models.js";
|
|
5
4
|
import { OPENCODE_ZEN_MODEL_REFS } from "../providers/opencode-zen-shared.js";
|
|
6
5
|
import { TOGETHER_MODEL_REFS } from "../providers/together-models.js";
|
|
7
6
|
import { VENICE_MODEL_REFS } from "../providers/venice-models.js";
|
|
8
7
|
import { VERCEL_AI_GATEWAY_MODEL_REFS } from "../providers/vercel-ai-gateway-models.js";
|
|
8
|
+
import { LITELLM_MODEL_REFS } from "../providers/litellm-models.js";
|
|
9
9
|
import { BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_MODEL_REFS, COPILOT_PROXY_MODEL_REFS, GITHUB_COPILOT_MODEL_REFS, GOOGLE_API_MODEL_REFS, GOOGLE_GEMINI_CLI_MODEL_REFS, MISTRAL_MODEL_REFS, OPENAI_API_MODEL_REFS, OPENAI_SIGN_IN_MODEL_REFS, OPENROUTER_MODEL_REFS, QIANFAN_MODEL_REFS, SYNTHETIC_MODEL_REFS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_MODEL_REFS, XAI_MODEL_REFS, XIAOMI_MODEL_REFS, ZAI_MODEL_REFS, isStandardProviderCatalogEntry, isStandardProviderModelRef } from "../providers/registry.js";
|
|
10
10
|
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js";
|
|
11
11
|
import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
|
|
@@ -16,6 +16,7 @@ import { buildAllowedModelSet, buildModelAliasIndex, modelKey, normalizeProvider
|
|
|
16
16
|
import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
|
|
17
17
|
import { formatModelFeatureList } from "../agents/model-metadata.js";
|
|
18
18
|
import { loadModelCatalog } from "../agents/model-catalog.js";
|
|
19
|
+
import { resolveAuthenticatedModelCatalog } from "../agents/authenticated-model-catalog.js";
|
|
19
20
|
import { loadPreviewModelListSources } from "./models/list.preview-catalog.js";
|
|
20
21
|
import { formatTokenK } from "./models/shared.js";
|
|
21
22
|
import { OPENAI_CODEX_DEFAULT_MODEL } from "./openai-codex-model-default.js";
|
|
@@ -205,14 +206,31 @@ function loadModelPickerPreviewCatalog(cfg) {
|
|
|
205
206
|
catalogSource: "current-preview"
|
|
206
207
|
}));
|
|
207
208
|
}
|
|
208
|
-
async function loadModelPickerCatalog(cfg) {
|
|
209
|
+
async function loadModelPickerCatalog(cfg, agentDir) {
|
|
209
210
|
const catalog = await loadModelCatalog({
|
|
210
211
|
config: cfg,
|
|
211
212
|
useCache: false,
|
|
212
213
|
includeMetadata: true
|
|
213
214
|
});
|
|
214
215
|
const models = catalog.length > 0 ? catalog : loadModelPickerPreviewCatalog(cfg);
|
|
215
|
-
|
|
216
|
+
const standardModels = models.filter(isStandardProviderCatalogEntry);
|
|
217
|
+
if (!agentDir) {
|
|
218
|
+
return standardModels;
|
|
219
|
+
}
|
|
220
|
+
const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
|
|
221
|
+
const authenticated = await resolveAuthenticatedModelCatalog({
|
|
222
|
+
cfg,
|
|
223
|
+
store,
|
|
224
|
+
catalog: standardModels,
|
|
225
|
+
defaultProvider: DEFAULT_PROVIDER
|
|
226
|
+
});
|
|
227
|
+
return authenticated.allowedCatalog.length > 0 ? authenticated.allowedCatalog : authenticated.usableCatalog;
|
|
228
|
+
}
|
|
229
|
+
async function resolveAuthenticatedDefaultModel(params) {
|
|
230
|
+
const catalog = await loadModelPickerCatalog(params.config, params.agentDir);
|
|
231
|
+
const preferredProvider = normalizeProviderId(params.preferredProvider ?? "");
|
|
232
|
+
const candidate = (preferredProvider ? catalog.find((entry) => normalizeProviderId(entry.provider) === preferredProvider) : undefined) ?? catalog[0];
|
|
233
|
+
return candidate ? modelKey(candidate.provider, candidate.id) : undefined;
|
|
216
234
|
}
|
|
217
235
|
async function promptManualModel(params) {
|
|
218
236
|
const modelInput = await params.prompter.text({
|
|
@@ -244,7 +262,7 @@ async function promptDefaultModel(params) {
|
|
|
244
262
|
const resolvedKey = modelKey(resolved.provider, resolved.model);
|
|
245
263
|
const configuredKey = configuredRaw ? resolvedKey : "";
|
|
246
264
|
const allowKeep = allowKeepRequested && !isHiddenRouterModelRef(configuredRaw);
|
|
247
|
-
const catalog = await loadModelPickerCatalog(cfg);
|
|
265
|
+
const catalog = await loadModelPickerCatalog(cfg, params.ignoreAllowlist ? undefined : params.agentDir);
|
|
248
266
|
if (catalog.length === 0) {
|
|
249
267
|
return promptManualModel({
|
|
250
268
|
prompter: params.prompter,
|
|
@@ -464,7 +482,7 @@ async function promptModelAllowlist(params) {
|
|
|
464
482
|
...params.initialSelections ?? []
|
|
465
483
|
]);
|
|
466
484
|
const initialKeys = allowedKeySet ? initialSeeds.filter((key) => allowedKeySet.has(key)) : initialSeeds;
|
|
467
|
-
const catalog = await loadModelPickerCatalog(cfg);
|
|
485
|
+
const catalog = await loadModelPickerCatalog(cfg, params.agentDir);
|
|
468
486
|
if (catalog.length === 0 && allowedKeys.length === 0) {
|
|
469
487
|
const raw = await params.prompter.text({
|
|
470
488
|
message: params.message ?? "Allowlist models (comma-separated provider/model; blank to keep current)",
|
|
@@ -503,7 +521,7 @@ async function promptModelAllowlist(params) {
|
|
|
503
521
|
hasAuth
|
|
504
522
|
});
|
|
505
523
|
}
|
|
506
|
-
const supplementalKeys = allowedKeySet ? allowedKeys : existingKeys;
|
|
524
|
+
const supplementalKeys = allowedKeySet ? allowedKeys : params.agentDir ? [] : existingKeys;
|
|
507
525
|
for (const key of supplementalKeys) {
|
|
508
526
|
if (seen.has(key)) {
|
|
509
527
|
continue;
|
|
@@ -630,4 +648,4 @@ function applyModelFallbacksFromSelection(cfg, selection) {
|
|
|
630
648
|
}
|
|
631
649
|
|
|
632
650
|
//#endregion
|
|
633
|
-
export { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist };
|
|
651
|
+
export { applyModelAllowlist, applyModelFallbacksFromSelection, applyPrimaryModel, promptModelAllowlist, resolveAuthenticatedDefaultModel };
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
|
1
2
|
import { resolveFasedAgentAgentDir } from "../../agents/agent-paths.js";
|
|
3
|
+
import { ensureAuthProfileStore } from "../../agents/auth-profiles/store.js";
|
|
4
|
+
import "../../agents/auth-profiles.js";
|
|
2
5
|
import { modelKey } from "../../agents/model-selection.js";
|
|
3
6
|
import { ensureFasedAgentModelsJson } from "../../agents/models-config.js";
|
|
4
7
|
import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js";
|
|
5
8
|
import { deriveModelMetadata, formatModelFeatureList } from "../../agents/model-metadata.js";
|
|
6
9
|
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
|
10
|
+
import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
|
|
7
11
|
import { isLocalBaseUrl } from "./shared.js";
|
|
8
12
|
import { createModelListAuthIndex } from "./list.auth-index.js";
|
|
9
13
|
import { MODEL_AVAILABILITY_UNAVAILABLE_CODE, formatErrorWithStack, shouldFallbackToAuthHeuristics } from "./list.errors.js";
|
|
@@ -58,34 +62,25 @@ function normalizeModelListSource(model) {
|
|
|
58
62
|
metadata: "metadata" in model ? model.metadata : undefined
|
|
59
63
|
};
|
|
60
64
|
}
|
|
61
|
-
function mergeModelCatalogEntries(params) {
|
|
62
|
-
const models = params.registryModels.map((model) => normalizeModelListSource(model));
|
|
63
|
-
const seen = new Set(models.map((model) => modelKey(model.provider, model.id)));
|
|
64
|
-
for (const entry of params.catalog) {
|
|
65
|
-
const key = modelKey(entry.provider, entry.id);
|
|
66
|
-
if (seen.has(key)) {
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
models.push(normalizeModelListSource(entry));
|
|
70
|
-
seen.add(key);
|
|
71
|
-
}
|
|
72
|
-
return models;
|
|
73
|
-
}
|
|
74
65
|
async function loadModelRegistry(cfg) {
|
|
75
66
|
await ensureFasedAgentModelsJson(cfg);
|
|
76
67
|
const agentDir = resolveFasedAgentAgentDir();
|
|
77
68
|
const authStorage = discoverAuthStorage(agentDir);
|
|
78
69
|
const registry = discoverModels(authStorage, agentDir);
|
|
79
|
-
|
|
70
|
+
registry.getAll();
|
|
80
71
|
const catalog = await loadModelCatalog({
|
|
81
72
|
config: cfg,
|
|
82
73
|
useCache: false,
|
|
83
74
|
includeMetadata: true
|
|
84
75
|
});
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
76
|
+
const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
|
|
77
|
+
const authenticated = await resolveAuthenticatedModelCatalog({
|
|
78
|
+
cfg,
|
|
79
|
+
store,
|
|
80
|
+
catalog,
|
|
81
|
+
defaultProvider: DEFAULT_PROVIDER
|
|
88
82
|
});
|
|
83
|
+
const models = authenticated.usableCatalog.map((model) => normalizeModelListSource(model));
|
|
89
84
|
let availableKeys;
|
|
90
85
|
let availabilityErrorMessage;
|
|
91
86
|
try {
|
|
@@ -133,7 +128,7 @@ function toModelRow(params) {
|
|
|
133
128
|
cfg,
|
|
134
129
|
authStore
|
|
135
130
|
}) : undefined);
|
|
136
|
-
const available = availableKeys !== undefined ? availableKeys.has(modelKey(model.provider, model.id)) : authIndex?.hasProviderAuth(model.provider) ?? false;
|
|
131
|
+
const available = availableKeys !== undefined ? availableKeys.has(modelKey(model.provider, model.id)) || model.catalogSource !== "runtime" && (authIndex?.hasProviderAuth(model.provider) ?? false) : authIndex?.hasProviderAuth(model.provider) ?? false;
|
|
137
132
|
const aliasTags = aliases.length > 0 ? [`alias:${aliases.join(",")}`] : [];
|
|
138
133
|
const mergedTags = new Set(tags);
|
|
139
134
|
if (aliasTags.length > 0) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { HUGGINGFACE_BASE_URL, HUGGINGFACE_DEFAULT_MODEL_REF, HUGGINGFACE_MODEL_CATALOG, buildHuggingfaceModelDefinition } from "../providers/huggingface-models.js";
|
|
2
|
-
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID } from "../providers/litellm-models.js";
|
|
3
2
|
import { SYNTHETIC_BASE_URL, SYNTHETIC_DEFAULT_MODEL_REF, SYNTHETIC_MODEL_CATALOG, buildSyntheticModelDefinition } from "../providers/synthetic-models.js";
|
|
4
3
|
import { TOGETHER_BASE_URL, TOGETHER_DEFAULT_MODEL_REF, TOGETHER_MODEL_CATALOG, buildTogetherModelDefinition } from "../providers/together-models.js";
|
|
5
4
|
import { VENICE_BASE_URL, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_CATALOG, buildVeniceModelDefinition } from "../providers/venice-models.js";
|
|
5
|
+
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID } from "../providers/litellm-models.js";
|
|
6
6
|
import { CHUTES_BASE_URL, CHUTES_DEFAULT_MODEL_REF, CHUTES_MODEL_CATALOG, buildChutesModelDefinition } from "../agents/chutes-models.js";
|
|
7
7
|
import "../agents/huggingface-models.js";
|
|
8
8
|
import "../agents/synthetic-models.js";
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID
|
|
2
|
-
import { applyAgentDefaultModelPrimary, applyProviderConfigWithDefaultModel } from "./onboard-auth.config-shared.js";
|
|
1
|
+
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID } from "../providers/litellm-models.js";
|
|
3
2
|
|
|
4
3
|
//#region src/commands/onboard-auth.config-litellm.ts
|
|
5
|
-
function buildLitellmModelDefinition() {
|
|
6
|
-
return buildLitellmModelDefinition$1(LITELLM_MODEL_CATALOG[0]);
|
|
7
|
-
}
|
|
8
4
|
function applyLitellmProviderConfig(cfg) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
...models[LITELLM_DEFAULT_MODEL_REF],
|
|
12
|
-
alias: models[LITELLM_DEFAULT_MODEL_REF]?.alias ?? "LiteLLM proxy default"
|
|
13
|
-
};
|
|
14
|
-
const defaultModel = buildLitellmModelDefinition();
|
|
15
|
-
const existingProvider = cfg.models?.providers?.litellm;
|
|
5
|
+
const providers = { ...cfg.models?.providers };
|
|
6
|
+
const existingProvider = providers.litellm;
|
|
16
7
|
const resolvedBaseUrl = typeof existingProvider?.baseUrl === "string" ? existingProvider.baseUrl.trim() : "";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
api: "openai-completions",
|
|
8
|
+
providers.litellm = {
|
|
9
|
+
...existingProvider,
|
|
10
|
+
...typeof existingProvider?.apiKey === "string" && existingProvider.apiKey.trim() ? { apiKey: existingProvider.apiKey.trim() } : {},
|
|
21
11
|
baseUrl: resolvedBaseUrl || LITELLM_BASE_URL,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
api: "openai-completions",
|
|
13
|
+
request: {
|
|
14
|
+
...existingProvider?.request,
|
|
15
|
+
allowPrivateNetwork: true
|
|
16
|
+
},
|
|
17
|
+
models: existingProvider?.models ?? []
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
...cfg,
|
|
21
|
+
models: {
|
|
22
|
+
mode: cfg.models?.mode ?? "merge",
|
|
23
|
+
providers
|
|
24
|
+
}
|
|
25
|
+
};
|
|
25
26
|
}
|
|
26
27
|
function applyLitellmConfig(cfg) {
|
|
27
|
-
|
|
28
|
-
return applyAgentDefaultModelPrimary(next, LITELLM_DEFAULT_MODEL_REF);
|
|
28
|
+
return applyLitellmProviderConfig(cfg);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
//#endregion
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths.js";
|
|
2
2
|
import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
3
3
|
import { HUGGINGFACE_DEFAULT_MODEL_REF } from "../providers/huggingface-models.js";
|
|
4
|
-
import { LITELLM_DEFAULT_MODEL_REF } from "../providers/litellm-models.js";
|
|
5
4
|
import { TOGETHER_DEFAULT_MODEL_REF } from "../providers/together-models.js";
|
|
6
5
|
import { VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF } from "../providers/vercel-ai-gateway-models.js";
|
|
7
6
|
import "../providers/registry.js";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
2
2
|
import { HUGGINGFACE_DEFAULT_MODEL_REF } from "../providers/huggingface-models.js";
|
|
3
|
-
import { LITELLM_DEFAULT_MODEL_REF } from "../providers/litellm-models.js";
|
|
4
3
|
import { SYNTHETIC_DEFAULT_MODEL_ID, SYNTHETIC_DEFAULT_MODEL_REF } from "../providers/synthetic-models.js";
|
|
5
4
|
import { TOGETHER_DEFAULT_MODEL_REF } from "../providers/together-models.js";
|
|
6
5
|
import { VENICE_DEFAULT_MODEL_ID, VENICE_DEFAULT_MODEL_REF } from "../providers/venice-models.js";
|
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
import { DEFAULT_PROVIDER } from "../agents/defaults.js";
|
|
2
|
+
import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
|
|
3
|
+
import "../agents/auth-profiles.js";
|
|
4
|
+
import { loadModelCatalog } from "../agents/model-catalog.js";
|
|
5
|
+
import { resolveAuthenticatedModelCatalog } from "../agents/authenticated-model-catalog.js";
|
|
6
|
+
|
|
1
7
|
//#region src/commands/openai-codex-model-default.ts
|
|
2
8
|
const OPENAI_CODEX_DEFAULT_MODEL = "openai-codex/gpt-5.5";
|
|
9
|
+
async function discoverOpenAICodexDefaultModel(params) {
|
|
10
|
+
const catalog = await loadModelCatalog({
|
|
11
|
+
config: params.config,
|
|
12
|
+
useCache: false,
|
|
13
|
+
includeMetadata: true
|
|
14
|
+
});
|
|
15
|
+
const store = ensureAuthProfileStore(params.agentDir, { allowKeychainPrompt: false });
|
|
16
|
+
const authenticated = await resolveAuthenticatedModelCatalog({
|
|
17
|
+
cfg: params.config,
|
|
18
|
+
store,
|
|
19
|
+
catalog,
|
|
20
|
+
defaultProvider: DEFAULT_PROVIDER
|
|
21
|
+
});
|
|
22
|
+
const model = authenticated.usableCatalog.filter((entry) => entry.provider === "openai-codex").toSorted((left, right) => (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name))[0];
|
|
23
|
+
return model ? `${model.provider}/${model.id}` : undefined;
|
|
24
|
+
}
|
|
3
25
|
function shouldSetOpenAICodexModel(model) {
|
|
4
26
|
const trimmed = model?.trim();
|
|
5
27
|
if (!trimmed) {
|
|
@@ -23,7 +45,7 @@ function resolvePrimaryModel(model) {
|
|
|
23
45
|
}
|
|
24
46
|
return undefined;
|
|
25
47
|
}
|
|
26
|
-
function applyOpenAICodexModelDefault(cfg) {
|
|
48
|
+
function applyOpenAICodexModelDefault(cfg, model = OPENAI_CODEX_DEFAULT_MODEL) {
|
|
27
49
|
const current = resolvePrimaryModel(cfg.agents?.defaults?.model);
|
|
28
50
|
if (!shouldSetOpenAICodexModel(current)) {
|
|
29
51
|
return {
|
|
@@ -40,8 +62,8 @@ function applyOpenAICodexModelDefault(cfg) {
|
|
|
40
62
|
...cfg.agents?.defaults,
|
|
41
63
|
model: cfg.agents?.defaults?.model && typeof cfg.agents.defaults.model === "object" ? {
|
|
42
64
|
...cfg.agents.defaults.model,
|
|
43
|
-
primary:
|
|
44
|
-
} : { primary:
|
|
65
|
+
primary: model
|
|
66
|
+
} : { primary: model }
|
|
45
67
|
}
|
|
46
68
|
}
|
|
47
69
|
},
|
|
@@ -50,4 +72,4 @@ function applyOpenAICodexModelDefault(cfg) {
|
|
|
50
72
|
}
|
|
51
73
|
|
|
52
74
|
//#endregion
|
|
53
|
-
export { OPENAI_CODEX_DEFAULT_MODEL, applyOpenAICodexModelDefault };
|
|
75
|
+
export { OPENAI_CODEX_DEFAULT_MODEL, applyOpenAICodexModelDefault, discoverOpenAICodexDefaultModel };
|
package/dist/config/defaults.js
CHANGED
|
@@ -9,7 +9,7 @@ let defaultWarnState = { warned: false };
|
|
|
9
9
|
const DEFAULT_MODEL_ALIASES = {
|
|
10
10
|
opus: "anthropic/claude-opus-4-8",
|
|
11
11
|
sonnet: "anthropic/claude-sonnet-5",
|
|
12
|
-
gpt: "openai/gpt-5.
|
|
12
|
+
gpt: "openai/gpt-5.6",
|
|
13
13
|
"gpt-mini": "openai/gpt-5.4-mini",
|
|
14
14
|
gemini: "google/gemini-3.5-flash",
|
|
15
15
|
"gemini-flash": "google/gemini-3-flash-preview",
|
|
@@ -89,7 +89,8 @@ const AgentDefaultsSchema = z.object({
|
|
|
89
89
|
z.literal("low"),
|
|
90
90
|
z.literal("medium"),
|
|
91
91
|
z.literal("high"),
|
|
92
|
-
z.literal("xhigh")
|
|
92
|
+
z.literal("xhigh"),
|
|
93
|
+
z.literal("max")
|
|
93
94
|
]).optional(),
|
|
94
95
|
reasoningDefault: z.union([
|
|
95
96
|
z.literal("off"),
|
|
@@ -97,7 +98,8 @@ const AgentDefaultsSchema = z.object({
|
|
|
97
98
|
z.literal("low"),
|
|
98
99
|
z.literal("medium"),
|
|
99
100
|
z.literal("high"),
|
|
100
|
-
z.literal("xhigh")
|
|
101
|
+
z.literal("xhigh"),
|
|
102
|
+
z.literal("max")
|
|
101
103
|
]).optional(),
|
|
102
104
|
fastModeDefault: z.boolean().optional(),
|
|
103
105
|
verboseDefault: z.union([
|
|
@@ -541,7 +541,8 @@ const AgentEntrySchema = z.object({
|
|
|
541
541
|
z.literal("low"),
|
|
542
542
|
z.literal("medium"),
|
|
543
543
|
z.literal("high"),
|
|
544
|
-
z.literal("xhigh")
|
|
544
|
+
z.literal("xhigh"),
|
|
545
|
+
z.literal("max")
|
|
545
546
|
]).optional(),
|
|
546
547
|
reasoningDefault: z.union([
|
|
547
548
|
z.literal("off"),
|
|
@@ -549,7 +550,8 @@ const AgentEntrySchema = z.object({
|
|
|
549
550
|
z.literal("low"),
|
|
550
551
|
z.literal("medium"),
|
|
551
552
|
z.literal("high"),
|
|
552
|
-
z.literal("xhigh")
|
|
553
|
+
z.literal("xhigh"),
|
|
554
|
+
z.literal("max")
|
|
553
555
|
]).optional(),
|
|
554
556
|
fastModeDefault: z.boolean().optional(),
|
|
555
557
|
skills: z.array(z.string()).optional(),
|
|
@@ -110,7 +110,8 @@ const ModelCapabilitySchema = z.object({
|
|
|
110
110
|
z.literal("low"),
|
|
111
111
|
z.literal("medium"),
|
|
112
112
|
z.literal("high"),
|
|
113
|
-
z.literal("xhigh")
|
|
113
|
+
z.literal("xhigh"),
|
|
114
|
+
z.literal("max")
|
|
114
115
|
])).optional(),
|
|
115
116
|
defaultThinkingLevel: z.union([
|
|
116
117
|
z.literal("off"),
|
|
@@ -118,7 +119,8 @@ const ModelCapabilitySchema = z.object({
|
|
|
118
119
|
z.literal("low"),
|
|
119
120
|
z.literal("medium"),
|
|
120
121
|
z.literal("high"),
|
|
121
|
-
z.literal("xhigh")
|
|
122
|
+
z.literal("xhigh"),
|
|
123
|
+
z.literal("max")
|
|
122
124
|
]).optional(),
|
|
123
125
|
thinkingMode: z.union([
|
|
124
126
|
z.literal("openai-reasoning-effort"),
|