@fased/fased 0.1.54 → 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 +3 -10
- package/dist/agents/model-catalog-normalized.js +1 -0
- package/dist/agents/model-metadata.js +25 -4
- package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
- 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/providers-cli.js +3 -2
- 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 +12 -17
- 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 +27 -5
- 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-BKlu6OKz.js → app-D2RaTXoV.js} +1475 -1474
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
- package/dist/control-ui/assets/{index-nrFcGMv-.js → index-D2nC6I-9.js} +3 -3
- package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-CyjiG5Jw.js} +4 -4
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -0
- package/dist/gateway/control-ui.js +2 -0
- package/dist/gateway/protocol/schema/agents-models-skills.js +5 -2
- package/dist/gateway/server-methods/models.js +7 -8
- package/dist/gateway/server-model-catalog.js +3 -0
- package/dist/infra/update-runner.js +31 -3
- package/dist/light-update-status.js +11 -11
- package/dist/memory/inventory.js +19 -2
- package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-CeRNo5Ae.js} +1 -1
- package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-OMRHtXPj.js} +2 -2
- package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-BlIkS3iR.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-B2n3a2Tj.js} +26 -26
- package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-Ppg6dR_b.js} +1 -1
- package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-af8dWWRv.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.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-B2ffJ-LR.js → chunk-CD76Byie.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-jOdkyP53.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-BWb4NcfW.js → commands-registry-DgS55tNj.js} +2 -2
- package/dist/plugin-sdk/{common-C4XrB73N.js → common-CWvfeiX0.js} +1 -1
- package/dist/plugin-sdk/{config-rySyVtKs.js → config-CYDETqcF.js} +83 -65
- package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-CQ4EVcQG.js} +128 -66
- 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-CGF-Qnp0.js → handle-action-B75UVKxF.js} +13 -13
- package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-BuEwju6y.js} +1 -1
- package/dist/plugin-sdk/{image-ops-CcBfoMLW.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-DpDQyM7r.js → login-Amr2DpKU.js} +3 -3
- package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-DMQNEi9m.js} +3 -3
- package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-Bvpq49BI.js} +2 -2
- package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-DmQ7oXOm.js} +1 -1
- package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-ByLQbEwJ.js} +2 -2
- package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-K_u6daGa.js} +30 -30
- package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-S_7LrvSj.js} +31 -31
- package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-BrDJUZXR.js} +26 -26
- package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
- package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-BuDafBBI.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DmZmUqFP.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-e4D4eBDA.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-T3IGoGZg.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-DvAG_Png.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.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-CMplwiwf.js → pw-ai-D7eW43DL.js} +3 -3
- package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-BMIPmEoP.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-DJN-SUSt.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-CY1qY6d7.js} +1 -1
- package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-CgOkQe0w.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.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-CgyS75Av.js → send-2ITqny2W.js} +8 -8
- package/dist/plugin-sdk/{send-D264hFVb.js → send-BAz22RZr.js} +5 -5
- package/dist/plugin-sdk/{send-C7x6gzSl.js → send-BG3RWyil.js} +7 -7
- package/dist/plugin-sdk/{send-D58yEeH4.js → send-Cr-dj6S-.js} +6 -6
- package/dist/plugin-sdk/{send-DrAtUGLM.js → send-eTxqFFsw.js} +6 -6
- package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C8nJmmVE.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-Rm5by9S8.js} +2 -2
- package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-BNIALJTA.js} +11 -11
- package/dist/plugin-sdk/{slack-C-I6q3NB.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-DCrDTYIi.js → sticker-cache-D3oDiu2u.js} +3 -3
- package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-DS5L7lCA.js} +1 -1
- package/dist/plugin-sdk/{targets-znKHngSk.js → targets-D6lUomJc.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.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-ClzPBK70.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-C0stmvNk.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.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-BI2njxWJ.d.ts → types-DKvBJHfH.d.ts} +14 -5
- package/dist/plugin-sdk/{types-DV5TNhMK.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-CyovJojz.js → wallet-status-f0HagNeO.js} +8 -5
- package/dist/plugin-sdk/{web-CJMfhGFY.js → web-DRNJxHXA.js} +31 -31
- package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BDXZF2R5.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.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-D5jDUlms.js → wsl-Biw7Mj39.js} +3 -3
- package/dist/providers/litellm-models.js +1 -1
- package/dist/providers/refresh.js +218 -56
- package/dist/providers/registry.js +15 -5
- package/dist/providers/runtime-model-catalog.js +181 -0
- package/dist/shared/model-thinking.js +41 -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 +6 -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 +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -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 +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/control-ui/assets/chat-model-ref-B9sWop67.js +0 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { buildCredentialScopedAllowedModelSet } from "./model-catalog-access.js";
|
|
2
|
+
import { applyRuntimeProviderModelDiscovery, filterCatalogToAuthoritativeAvailability } from "../providers/runtime-model-catalog.js";
|
|
3
|
+
|
|
4
|
+
//#region src/agents/authenticated-model-catalog.ts
|
|
5
|
+
async function resolveAuthenticatedModelCatalog(params) {
|
|
6
|
+
const initialScope = buildCredentialScopedAllowedModelSet({
|
|
7
|
+
cfg: params.cfg,
|
|
8
|
+
catalog: params.catalog,
|
|
9
|
+
defaultProvider: params.defaultProvider,
|
|
10
|
+
store: params.store
|
|
11
|
+
});
|
|
12
|
+
const discoveredCatalog = filterCatalogToAuthoritativeAvailability(await applyRuntimeProviderModelDiscovery({
|
|
13
|
+
cfg: params.cfg,
|
|
14
|
+
store: params.store,
|
|
15
|
+
routes: initialScope.usableProviders,
|
|
16
|
+
catalog: initialScope.usableCatalog
|
|
17
|
+
}), params.store);
|
|
18
|
+
return buildCredentialScopedAllowedModelSet({
|
|
19
|
+
cfg: params.cfg,
|
|
20
|
+
catalog: discoveredCatalog,
|
|
21
|
+
defaultProvider: params.defaultProvider,
|
|
22
|
+
storedProviders: initialScope.usableProviders
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { resolveAuthenticatedModelCatalog };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG, buildCloudflareAiGatewayModelDefinition } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
2
2
|
import { HUGGINGFACE_BASE_URL, HUGGINGFACE_MODEL_CATALOG, buildHuggingfaceModelDefinition } from "../providers/huggingface-models.js";
|
|
3
|
-
import { LITELLM_BASE_URL, LITELLM_MODEL_CATALOG, buildLitellmModelDefinition } from "../providers/litellm-models.js";
|
|
4
3
|
import { SYNTHETIC_BASE_URL, SYNTHETIC_MODEL_CATALOG, buildSyntheticModelDefinition } from "../providers/synthetic-models.js";
|
|
5
4
|
import { TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG, buildTogetherModelDefinition } from "../providers/together-models.js";
|
|
6
5
|
import { VENICE_BASE_URL, VENICE_MODEL_CATALOG, buildVeniceModelDefinition } from "../providers/venice-models.js";
|
|
@@ -876,22 +875,16 @@ const CURRENT_MODEL_PROVIDER_CATALOG = {
|
|
|
876
875
|
models: CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG.map((entry) => buildCloudflareAiGatewayModelDefinition({ id: entry.id }))
|
|
877
876
|
},
|
|
878
877
|
litellm: {
|
|
879
|
-
baseUrl:
|
|
878
|
+
baseUrl: "http://localhost:4000/v1",
|
|
880
879
|
api: "openai-completions",
|
|
881
880
|
request: { allowPrivateNetwork: true },
|
|
882
|
-
models:
|
|
881
|
+
models: []
|
|
883
882
|
},
|
|
884
883
|
vllm: {
|
|
885
884
|
baseUrl: "http://127.0.0.1:8000/v1",
|
|
886
885
|
api: "openai-completions",
|
|
887
886
|
request: { allowPrivateNetwork: true },
|
|
888
|
-
models: [
|
|
889
|
-
id: "local",
|
|
890
|
-
name: "Local model",
|
|
891
|
-
input: ["text", "image"],
|
|
892
|
-
contextWindow: 128e3,
|
|
893
|
-
maxTokens: 8192
|
|
894
|
-
})]
|
|
887
|
+
models: []
|
|
895
888
|
},
|
|
896
889
|
"github-copilot": {
|
|
897
890
|
baseUrl: "https://api.individual.githubcopilot.com",
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { resolveModelThinkingCapability } from "../shared/model-thinking.js";
|
|
2
|
-
import { getProviderBrandManifestForRoute, lookupProviderManifestModelCapability } from "../providers/registry.js";
|
|
2
|
+
import { getProviderBrandManifestForRoute, lookupProviderManifestModelCapability, providerModelRecommendationRank } from "../providers/registry.js";
|
|
3
3
|
import { isPrivateNetworkBaseUrl } from "../utils/private-network-url.js";
|
|
4
4
|
import { lookupRefreshedModelCapability } from "../providers/refreshed-model-capabilities.js";
|
|
5
5
|
|
|
6
6
|
//#region src/agents/model-metadata.ts
|
|
7
|
+
function availabilitySourceForCatalogSource(source) {
|
|
8
|
+
switch (source) {
|
|
9
|
+
case "provider-api": return "provider-api";
|
|
10
|
+
case "runtime": return "runtime-catalog";
|
|
11
|
+
case "configured": return "configured";
|
|
12
|
+
case "provider-index": return "provider-plugin";
|
|
13
|
+
case "manifest": return "curated-recommendation";
|
|
14
|
+
case "current-preview":
|
|
15
|
+
default: return "reviewed-catalog";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
7
18
|
const FEATURE_LABELS = {
|
|
8
19
|
text: "text",
|
|
9
20
|
vision: "vision",
|
|
@@ -32,8 +43,10 @@ const JSON_CAPABLE_APIS = new Set([
|
|
|
32
43
|
const LOCAL_DYNAMIC_PROVIDERS = new Set([
|
|
33
44
|
"ollama",
|
|
34
45
|
"lmstudio",
|
|
35
|
-
"vllm"
|
|
46
|
+
"vllm",
|
|
47
|
+
"litellm"
|
|
36
48
|
]);
|
|
49
|
+
const CURATED_CATALOG_REVIEWED_AT = "2026-07-12T00:00:00.000Z";
|
|
37
50
|
function resolveProviderConfig(cfg, provider) {
|
|
38
51
|
return cfg?.models?.providers?.[provider];
|
|
39
52
|
}
|
|
@@ -70,8 +83,9 @@ function deriveModelMetadata(params) {
|
|
|
70
83
|
...manifestCapabilities,
|
|
71
84
|
...params.model.capabilities
|
|
72
85
|
} : undefined;
|
|
73
|
-
const
|
|
74
|
-
const
|
|
86
|
+
const capabilitySource = params.capabilitySource ?? (params.model.capabilities ? params.model.catalogSource === "configured" ? "configured" : "runtime" : refreshed ? refreshed.source === "catalog" || refreshed.source === "provider-api" ? "provider-api" : "official-docs" : manifestCapabilities ? "official-docs" : api && !LOCAL_DYNAMIC_PROVIDERS.has(provider) ? "inferred" : "unknown");
|
|
87
|
+
const capabilityConfidence = capabilitySource === "provider-api" || capabilitySource === "official-docs" ? "verified" : capabilitySource === "runtime" || capabilitySource === "configured" ? "declared" : capabilitySource === "inferred" ? "inferred" : "unknown";
|
|
88
|
+
const shouldInferApiCapabilities = !LOCAL_DYNAMIC_PROVIDERS.has(provider);
|
|
75
89
|
const reasoning = params.model.reasoning ?? refreshed?.reasoning;
|
|
76
90
|
const thinking = resolveModelThinkingCapability({
|
|
77
91
|
provider,
|
|
@@ -95,6 +109,7 @@ function deriveModelMetadata(params) {
|
|
|
95
109
|
label: params.model.name?.trim() || modelId,
|
|
96
110
|
contextWindow: typeof refreshed?.contextWindow === "number" && refreshed.contextWindow > 0 ? refreshed.contextWindow : typeof params.model.contextWindow === "number" && params.model.contextWindow > 0 ? params.model.contextWindow : undefined,
|
|
97
111
|
maxTokens: typeof refreshed?.maxTokens === "number" && refreshed.maxTokens > 0 ? refreshed.maxTokens : typeof params.model.maxTokens === "number" && params.model.maxTokens > 0 ? params.model.maxTokens : undefined,
|
|
112
|
+
...typeof api === "string" && api.trim() ? { apiRoute: api.trim() } : {},
|
|
98
113
|
features,
|
|
99
114
|
...thinking ? {
|
|
100
115
|
thinkingLevels: thinking.thinkingLevels,
|
|
@@ -104,6 +119,11 @@ function deriveModelMetadata(params) {
|
|
|
104
119
|
} : {},
|
|
105
120
|
streaming: capabilities?.streaming !== false,
|
|
106
121
|
capabilityConfidence,
|
|
122
|
+
capabilitySource,
|
|
123
|
+
...params.capabilityRetrievedAt ?? refreshed?.refreshedAt ?? (capabilitySource === "official-docs" ? CURATED_CATALOG_REVIEWED_AT : undefined) ? { capabilityRetrievedAt: params.capabilityRetrievedAt ?? refreshed?.refreshedAt ?? CURATED_CATALOG_REVIEWED_AT } : {},
|
|
124
|
+
retrievedAt: refreshed?.refreshedAt ?? CURATED_CATALOG_REVIEWED_AT,
|
|
125
|
+
availabilitySource: availabilitySourceForCatalogSource(params.model.catalogSource),
|
|
126
|
+
authRoute: provider,
|
|
107
127
|
authMode: resolveAuthMode({
|
|
108
128
|
provider,
|
|
109
129
|
providerConfig
|
|
@@ -111,6 +131,7 @@ function deriveModelMetadata(params) {
|
|
|
111
131
|
privateNetwork,
|
|
112
132
|
privateNetworkAllowed: privateNetwork ? providerConfig?.request?.allowPrivateNetwork === true : false,
|
|
113
133
|
...params.recommended ? { recommended: true } : {},
|
|
134
|
+
...providerModelRecommendationRank(provider, modelId) ? { recommendationRank: providerModelRecommendationRank(provider, modelId) } : {},
|
|
114
135
|
...params.default ? { default: true } : {}
|
|
115
136
|
};
|
|
116
137
|
}
|
|
@@ -348,6 +348,30 @@ function createOpenAIResponsesContextManagementWrapper(baseStreamFn, extraParams
|
|
|
348
348
|
});
|
|
349
349
|
};
|
|
350
350
|
}
|
|
351
|
+
function createOpenAIReasoningEffortWrapper(baseStreamFn, reasoningEffort) {
|
|
352
|
+
const underlying = baseStreamFn ?? streamSimple;
|
|
353
|
+
return (model, context, options) => {
|
|
354
|
+
const supportsReasoningEffort = model.api === "openai-codex-responses" || model.api === "openai-responses" && model.provider === "openai" && (model.baseUrl === undefined || isDirectOpenAIBaseUrl(model.baseUrl));
|
|
355
|
+
if (!reasoningEffort || !supportsReasoningEffort) {
|
|
356
|
+
return underlying(model, context, options);
|
|
357
|
+
}
|
|
358
|
+
const originalOnPayload = options?.onPayload;
|
|
359
|
+
return underlying(model, context, {
|
|
360
|
+
...options,
|
|
361
|
+
onPayload: (payload) => {
|
|
362
|
+
if (payload && typeof payload === "object") {
|
|
363
|
+
const payloadObj = payload;
|
|
364
|
+
const reasoning = payloadObj.reasoning;
|
|
365
|
+
payloadObj.reasoning = {
|
|
366
|
+
...reasoning && typeof reasoning === "object" ? reasoning : {},
|
|
367
|
+
effort: reasoningEffort === "off" ? "none" : reasoningEffort
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
originalOnPayload?.(payload);
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
};
|
|
374
|
+
}
|
|
351
375
|
function createCodexDefaultTransportWrapper(baseStreamFn) {
|
|
352
376
|
const underlying = baseStreamFn ?? streamSimple;
|
|
353
377
|
return (model, context, options) => underlying(model, context, {
|
|
@@ -814,6 +838,7 @@ function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverr
|
|
|
814
838
|
}
|
|
815
839
|
agent.streamFn = createGoogleThinkingPayloadWrapper(agent.streamFn, thinkingLevel);
|
|
816
840
|
agent.streamFn = createOpenAIResponsesContextManagementWrapper(agent.streamFn, merged);
|
|
841
|
+
agent.streamFn = createOpenAIReasoningEffortWrapper(agent.streamFn, thinkingLevel);
|
|
817
842
|
}
|
|
818
843
|
|
|
819
844
|
//#endregion
|
package/dist/brand.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const FASED_BRAND_NAME = "Fased";
|
|
3
3
|
const FASED_AGENT_NAME = "Fased Agent";
|
|
4
4
|
const FASED_CONTROL_NAME = "Fased Control";
|
|
5
|
-
const FASED_PRODUCT_VERSION = "0.1.
|
|
5
|
+
const FASED_PRODUCT_VERSION = "0.1.55";
|
|
6
6
|
const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
|
|
7
7
|
function formatFasedDisplayLine() {
|
|
8
8
|
return `${FASED_AGENT_NAME} ${FASED_DISPLAY_VERSION}`;
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
c4a6e3e507ccfdd8b130a370232c38876b21dcd70184d986652833ecac14bd0a
|
|
@@ -5,8 +5,8 @@ import { loadAuthProfileStoreForRuntime } from "../agents/auth-profiles/store.js
|
|
|
5
5
|
import { loadConfig, writeConfigFile } from "../config/io.js";
|
|
6
6
|
import "../config/config.js";
|
|
7
7
|
import "../agents/auth-profiles.js";
|
|
8
|
-
import { createClackPrompter } from "../wizard/clack-prompter.js";
|
|
9
8
|
import { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, loadProviderRefreshSnapshotFromFile } from "../providers/refresh.js";
|
|
9
|
+
import { createClackPrompter } from "../wizard/clack-prompter.js";
|
|
10
10
|
import path from "node:path";
|
|
11
11
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
12
12
|
|
|
@@ -284,7 +284,8 @@ async function applyRegistryRefresh(report) {
|
|
|
284
284
|
} catch {
|
|
285
285
|
existingCapabilities = "";
|
|
286
286
|
}
|
|
287
|
-
const
|
|
287
|
+
const normalizeCapabilityTimestamps = (source) => source.replace(/refreshedAt: "[^"]+",/g, "refreshedAt: \"<reviewed-at>\",");
|
|
288
|
+
const capabilitiesChanged = normalizeCapabilityTimestamps(capabilitiesSource) !== normalizeCapabilityTimestamps(existingCapabilities);
|
|
288
289
|
if (capabilitiesChanged) {
|
|
289
290
|
await writeFile(CAPABILITIES_PATH, capabilitiesSource, "utf8");
|
|
290
291
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF } from "../providers/cloudflare-ai-gateway-shared.js";
|
|
2
|
-
import { LITELLM_DEFAULT_MODEL_REF } from "../providers/litellm-models.js";
|
|
3
2
|
import { SYNTHETIC_DEFAULT_MODEL_REF } from "../providers/synthetic-models.js";
|
|
4
3
|
import { TOGETHER_DEFAULT_MODEL_REF } from "../providers/together-models.js";
|
|
5
4
|
import { VENICE_DEFAULT_MODEL_REF } from "../providers/venice-models.js";
|
|
@@ -14,7 +13,7 @@ import { createAuthChoiceAgentModelNoter, createAuthChoiceDefaultModelApplier, c
|
|
|
14
13
|
import { KIMI_CODING_MODEL_REF, MISTRAL_DEFAULT_MODEL_REF, MOONSHOT_DEFAULT_MODEL_REF, QIANFAN_DEFAULT_MODEL_REF } from "./onboard-auth.models.js";
|
|
15
14
|
import { XIAOMI_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, setChutesApiKey, setCloudflareAiGatewayConfig, setGeminiApiKey, setKimiCodingApiKey, setLitellmApiKey, setMistralApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setQianfanApiKey, setQwenApiKey, setQwenCodingPlanApiKey, setSyntheticApiKey, setTogetherApiKey, setVeniceApiKey, setVercelAiGatewayApiKey, setXiaomiApiKey, setZaiApiKey } from "./onboard-auth.credentials.js";
|
|
16
15
|
import { applyCloudflareAiGatewayConfig, applyCloudflareAiGatewayProviderConfig, applyVercelAiGatewayConfig, applyVercelAiGatewayProviderConfig } from "./onboard-auth.config-gateways.js";
|
|
17
|
-
import {
|
|
16
|
+
import { applyLitellmProviderConfig } from "./onboard-auth.config-litellm.js";
|
|
18
17
|
import { applyAuthProfileConfig, applyChutesConfig, applyChutesProviderConfig, applyKimiCodeConfig, applyKimiCodeProviderConfig, applyMistralConfig, applyMistralProviderConfig, applyMoonshotConfig, applyMoonshotConfigCn, applyMoonshotProviderConfig, applyMoonshotProviderConfigCn, applyQianfanConfig, applyQianfanProviderConfig, applyQwenCodingPlanConfig, applyQwenCodingPlanProviderConfig, applyQwenConfig, applyQwenProviderConfig, applySyntheticConfig, applySyntheticProviderConfig, applyTogetherConfig, applyTogetherProviderConfig, applyVeniceConfig, applyVeniceProviderConfig, applyXiaomiConfig, applyXiaomiProviderConfig, applyZaiConfig, applyZaiProviderConfig } from "./onboard-auth.config-core.js";
|
|
19
18
|
import { applyOpencodeZenConfig, applyOpencodeZenProviderConfig } from "./onboard-auth.config-opencode.js";
|
|
20
19
|
import "./onboard-auth.js";
|
|
@@ -342,12 +341,8 @@ async function applyAuthChoiceApiProviders(params) {
|
|
|
342
341
|
mode: "api_key"
|
|
343
342
|
});
|
|
344
343
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
applyDefaultConfig: applyLitellmConfig,
|
|
348
|
-
applyProviderConfig: applyLitellmProviderConfig,
|
|
349
|
-
noteDefault: LITELLM_DEFAULT_MODEL_REF
|
|
350
|
-
});
|
|
344
|
+
nextConfig = applyLitellmProviderConfig(nextConfig);
|
|
345
|
+
await params.prompter.note("LiteLLM is connected. Choose a model returned by this proxy after discovery completes.", "LiteLLM model discovery");
|
|
351
346
|
return {
|
|
352
347
|
config: nextConfig,
|
|
353
348
|
agentModelOverride
|
|
@@ -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 {
|
|
@@ -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";
|