@fased/fased 0.1.55 → 0.1.57
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/config/capability-catalog.json +12 -0
- package/dist/agents/authenticated-model-catalog.js +3 -2
- package/dist/agents/bash-tools.exec-host-node.js +1 -1
- package/dist/agents/bash-tools.exec.js +1 -1
- package/dist/agents/copilot-dynamic-headers.js +37 -0
- package/dist/agents/current-model-catalog.js +6 -3
- package/dist/agents/model-catalog-snapshot.js +124 -0
- package/dist/agents/model-catalog-source.js +2 -2
- package/dist/agents/model-catalog.js +1 -1
- package/dist/agents/model-metadata.js +34 -6
- package/dist/agents/openai-codex-app-server.js +524 -0
- package/dist/agents/openai-codex-runtime-component.js +39 -0
- package/dist/agents/pi-embedded-runner/compact.js +3 -3
- package/dist/agents/pi-embedded-runner/extra-params.js +170 -94
- package/dist/agents/pi-embedded-runner/model.js +62 -1
- package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
- package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
- package/dist/agents/pi-embedded-runner/run.js +5 -2
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-runner.js +1 -1
- package/dist/agents/pi-tools.js +2 -2
- package/dist/agents/tools/discord-actions-messaging.js +1 -1
- package/dist/agents/tools/message-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +3 -3
- package/dist/agents/tools/slack-actions.js +1 -1
- package/dist/agents/tools/tts-tool.js +1 -1
- package/dist/auto-reply/reply/commands-models.js +1 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
- package/dist/auto-reply/reply/dispatch-acp.js +1 -1
- package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
- package/dist/auto-reply/reply/get-reply-run.js +20 -2
- package/dist/auto-reply/reply/model-selection.js +1 -1
- package/dist/auto-reply/reply/session-reset-model.js +1 -1
- package/dist/auto-reply/status.js +1 -1
- package/dist/auto-reply/thinking.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/browser/cdp.helpers.js +2 -2
- package/dist/browser/chrome.js +2 -2
- package/dist/browser/extension-relay.js +7 -7
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/capabilities/install.js +43 -0
- package/dist/cli/components-cli.js +9 -31
- package/dist/cli/cron-cli/register.cron-add.js +1 -1
- package/dist/cli/hooks-cli.js +1 -1
- package/dist/cli/plugins-cli.js +3 -3
- package/dist/cli/program/register.agent.js +1 -1
- package/dist/cli/update-cli/update-command.js +50 -12
- package/dist/commands/agent.js +22 -3
- package/dist/commands/auth-choice.apply.openai.js +9 -0
- package/dist/commands/auth-choice.apply.plugin-provider.js +1 -1
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/hosted-dashboard-probe.js +3 -3
- package/dist/commands/model-picker.js +4 -3
- package/dist/commands/models/list.probe.js +1 -1
- package/dist/commands/models/list.registry.js +3 -2
- package/dist/commands/models/list.status-command.js +2 -2
- package/dist/commands/onboard-channels.js +1 -1
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/openai-codex-model-default.js +3 -2
- 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-D2RaTXoV.js → app-DltSyY4Y.js} +1723 -1716
- package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
- package/dist/control-ui/assets/{index-D2nC6I-9.js → index-D5JlBp7f.js} +3 -3
- package/dist/control-ui/assets/{providers-CyjiG5Jw.js → providers-Cc89iMdx.js} +3 -3
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/cron/isolated-agent/run.js +6 -2
- package/dist/cron/service/jobs.js +11 -1
- package/dist/discord/monitor/gateway-plugin.js +2 -2
- package/dist/discord/voice/manager.js +1 -1
- package/dist/gateway/client.js +4 -4
- package/dist/gateway/protocol/schema/agents-models-skills.js +106 -5
- package/dist/gateway/server-methods/hooks.js +1 -1
- package/dist/gateway/server-methods/models.js +15 -7
- package/dist/gateway/server-methods/plugins-marketplace.js +3 -3
- package/dist/gateway/server-methods/services.js +1 -1
- package/dist/gateway/server-methods/sessions.js +1 -1
- package/dist/gateway/server-methods/tts.js +2 -2
- package/dist/gateway/server-model-catalog.js +1 -1
- package/dist/gateway/sessions-patch.js +27 -24
- package/dist/light-update-status.js +11 -11
- package/dist/plugin-sdk/{accounts-CeRNo5Ae.js → accounts-CmMwe9Dt.js} +1 -1
- package/dist/plugin-sdk/{actions-OMRHtXPj.js → actions-DYViFQiX.js} +4 -4
- package/dist/plugin-sdk/{active-listener-BlIkS3iR.js → active-listener-DVbpcisf.js} +1 -1
- package/dist/plugin-sdk/{agent-scope-BbgPlhtw.js → agent-scope-CCjfjKoO.js} +1 -1
- package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-B2n3a2Tj.js → audio-preflight-D-Mfay8i.js} +44 -48
- package/dist/plugin-sdk/{audit-Ppg6dR_b.js → audit-JImYFOzJ.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B6IAGlE0.js → channel-access-configure-B_qYjml8.js} +1 -1
- package/dist/plugin-sdk/{channel-access-af8dWWRv.js → channel-access-cxCK2mci.js} +1 -1
- package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +5 -5
- package/dist/plugin-sdk/{chunk-CD76Byie.js → chunk-CF8nvZNj.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-Bu19zrYH.js → chunk-items-yLFoO571.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +44 -48
- package/dist/plugin-sdk/{commands-registry-DgS55tNj.js → commands-registry-CK4KmMG0.js} +2 -2
- package/dist/plugin-sdk/{common-CWvfeiX0.js → common-Cky4hpqr.js} +1 -1
- package/dist/plugin-sdk/{config-CYDETqcF.js → config-Dbxj_jUP.js} +1153 -17
- package/dist/plugin-sdk/{config-schema-CQ4EVcQG.js → config-schema-aKPMn6ML.js} +96084 -81132
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/device-pair.js +2 -3
- package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
- package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
- package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
- package/dist/plugin-sdk/discord.d.ts +6 -6
- package/dist/plugin-sdk/discord.js +32 -33
- package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
- package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
- package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-ZoHU8oA7.js} +3 -3
- package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-g4g7GT02.js} +2 -2
- package/dist/plugin-sdk/{group-mentions-BxDgHCgj.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
- package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
- package/dist/plugin-sdk/{handle-action-B75UVKxF.js → handle-action-BSNDD2Vc.js} +25 -26
- package/dist/plugin-sdk/{helpers-BuEwju6y.js → helpers-CDo2XBSr.js} +1 -1
- package/dist/plugin-sdk/{image-ops-C66HPeAZ.js → image-ops-DbeBxbn4.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +18 -18
- package/dist/plugin-sdk/index.js +48 -52
- package/dist/plugin-sdk/{login-Amr2DpKU.js → login-CWXvFTd8.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DMQNEi9m.js → login-qr-CJB2zjmM.js} +4 -4
- package/dist/plugin-sdk/{manager-Bvpq49BI.js → manager-CbiFFLKS.js} +8 -8
- package/dist/plugin-sdk/{markdown-tables-DmQ7oXOm.js → markdown-tables-Bskt9r8i.js} +1 -1
- package/dist/plugin-sdk/{media-ByLQbEwJ.js → media-B3aAg5rh.js} +5 -5
- package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-DTjIMw8J.js} +1 -1
- package/dist/plugin-sdk/{monitor-K_u6daGa.js → monitor-BJs6z7AT.js} +52 -56
- package/dist/plugin-sdk/{monitor-S_7LrvSj.js → monitor-BYGbTI5V.js} +62 -66
- package/dist/plugin-sdk/{openresponses-http-BrDJUZXR.js → openresponses-http-BGCl2dS2.js} +44 -48
- package/dist/plugin-sdk/{optional-runtime-dependency-CbYjAC2b.js → optional-runtime-dependency-BlTVkcAg.js} +1 -1
- package/dist/plugin-sdk/{outbound-BuDafBBI.js → outbound-CIemga5_.js} +9 -9
- package/dist/plugin-sdk/{outbound-attachment-DmZmUqFP.js → outbound-attachment-2RckWqrk.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-D0-UWGFJ.d.ts → pairing-message-C403mq4K.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-e4D4eBDA.js → pairing-message-r-VQfhFB.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-T3IGoGZg.js → pairing-store-uPnLfGgB.js} +2 -2
- package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-DjgDArrp.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-DvAG_Png.js → pi-model-discovery-BpEilAym.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-NjkUgjIf.js → pi-model-discovery-runtime-DwNdFaz-.js} +3 -3
- package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
- package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe-CJb5uR8B.js} +2 -2
- package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-D7eW43DL.js → pw-ai-H7UgunQQ.js} +7 -9
- package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-DSyx77KY.js} +4 -4
- package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
- package/dist/plugin-sdk/{replies-BMIPmEoP.js → replies-CKMwkH4G.js} +4 -4
- package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-CeVw7Mn2.js} +1 -1
- package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
- package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → resolve-channels-_-nV-EK2.js} +1 -1
- package/dist/plugin-sdk/{resolve-outbound-target-CXCqUUPV.js → resolve-outbound-target-B68fSoGi.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-DJN-SUSt.js → resolve-route-B8fOfihG.js} +2 -2
- package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-DN9VQBwv.js} +1 -1
- package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
- package/dist/plugin-sdk/{retry-policy-CY1qY6d7.js → retry-policy-B6GQldxB.js} +1 -1
- package/dist/plugin-sdk/{runtime-dependency-DvdRNMvs.js → runtime-dependency-DlqVSsSs.js} +124 -16
- package/dist/plugin-sdk/{runtime-CgOkQe0w.js → runtime-nVJl3PlS.js} +4 -4
- package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-Dx2lUqCu.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +45 -11
- package/dist/plugin-sdk/{send-2ITqny2W.js → send-BCJ4hi3t.js} +10 -10
- package/dist/plugin-sdk/{send-Cr-dj6S-.js → send-BHokB4TR.js} +6 -6
- package/dist/plugin-sdk/{send-BAz22RZr.js → send-CPK_HlYW.js} +9 -9
- package/dist/plugin-sdk/{send-eTxqFFsw.js → send-D3DQOg2a.js} +8 -8
- package/dist/plugin-sdk/{send-BG3RWyil.js → send-hSu1HWms.js} +13 -13
- package/dist/plugin-sdk/{session-C8nJmmVE.js → session-DQ4Dr-mf.js} +3 -3
- package/dist/plugin-sdk/{skill-commands-Rm5by9S8.js → skill-commands-CmdoKLh_.js} +103 -103
- package/dist/plugin-sdk/{slack-xvIVvyEM.js → slack-B70NHpMF.js} +65 -69
- package/dist/plugin-sdk/{slack-actions-BNIALJTA.js → slack-actions-fSmP981b.js} +21 -22
- package/dist/plugin-sdk/slack.d.ts +6 -6
- package/dist/plugin-sdk/slack.js +14 -14
- package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
- package/dist/plugin-sdk/{sticker-cache-D3oDiu2u.js → sticker-cache-B4dG2sKU.js} +3 -3
- package/dist/plugin-sdk/{tables-DS5L7lCA.js → tables-EX4Hy-a-.js} +2 -2
- package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
- package/dist/plugin-sdk/{targets-D6lUomJc.js → targets-BeGUCGWK.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-MSFkDn0m.js → telegram-actions-CM8SJgc9.js} +49 -53
- package/dist/plugin-sdk/telegram.d.ts +6 -6
- package/dist/plugin-sdk/telegram.js +12 -12
- package/dist/plugin-sdk/{thread-bindings.lifecycle-Ry6Vcgw3.js → thread-bindings.lifecycle-tHK_1mvp.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-C0stmvNk.js → thread-bindings.state-D7xG1GHu.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-D91GExk4.d.ts → tmp-fased-dir-Ouj58axY.d.ts} +2 -2
- package/dist/plugin-sdk/{types-DVTIpopt.d.ts → types-B4hj6HgR.d.ts} +2 -2
- package/dist/plugin-sdk/{types-BzadOItY.d.ts → types-DyhXnYUr.d.ts} +1 -1
- package/dist/plugin-sdk/{types-DKvBJHfH.d.ts → types-dWZFX1fk.d.ts} +28 -3
- package/dist/plugin-sdk/{types.plugin-BiHPaDTF.d.ts → types.plugin-_fbu40Re.d.ts} +7 -5
- package/dist/plugin-sdk/{web-DRNJxHXA.js → web-BFolfZ3i.js} +53 -57
- package/dist/plugin-sdk/{whatsapp-actions-BDXZF2R5.js → whatsapp-actions-CYmleHCz.js} +19 -20
- package/dist/plugin-sdk/{whatsapp-heartbeat-CKgmwCGr.js → whatsapp-heartbeat-BEwm4GK3.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +11 -11
- package/dist/plugin-sdk/whatsapp.js +15 -15
- package/dist/plugin-sdk/{wsl-Biw7Mj39.js → wsl-BtMDzMv5.js} +53 -53
- package/dist/plugin-sdk/{zod-schema.providers-core-CIzCjXH9.d.ts → zod-schema.providers-core-FaYR6KdD.d.ts} +61 -61
- package/dist/plugins/lifecycle.js +1 -1
- package/dist/plugins/manifest-registry.js +26 -0
- package/dist/plugins/manifest.js +2 -0
- package/dist/plugins/marketplace.js +1 -1
- package/dist/plugins/runtime/index.js +1 -1
- package/dist/plugins/update.js +1 -1
- package/dist/providers/github-copilot-model-discovery.js +51 -0
- package/dist/providers/openai-codex-model-discovery.js +176 -0
- package/dist/providers/refresh.js +116 -34
- package/dist/providers/registry.js +2 -2
- package/dist/providers/runtime-model-catalog.js +97 -28
- package/dist/shared/model-thinking.js +13 -2
- package/dist/telegram/bot-message-context.js +1 -1
- package/dist/wizard/onboarding.finalize.js +1 -1
- 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 +2 -1
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +0 -2
- package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
- package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
- package/dist/plugin-sdk/wallet-status-f0HagNeO.js +0 -11947
- package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
- /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
- /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
- /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
- /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
- /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
- /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
- /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
- /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
- /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
- /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
- /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
- /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
- /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
- /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
- /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
- /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
- /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
- /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
- /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
- /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
- /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
- /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
- /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
- /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
- /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
- /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
- /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
- /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { normalizeThinkLevel } from "../shared/model-thinking.js";
|
|
2
|
+
import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
|
|
3
|
+
import { writeConfigFile } from "../config/io.js";
|
|
4
|
+
import "../config/config.js";
|
|
5
|
+
import { resolveApiKeyForProfile } from "../agents/auth-profiles/oauth.js";
|
|
6
|
+
import "../agents/auth-profiles.js";
|
|
7
|
+
import { listOpenAICodexAppServerModels } from "../agents/openai-codex-app-server.js";
|
|
8
|
+
import { ensureOpenAICodexRuntimeComponent } from "../agents/openai-codex-runtime-component.js";
|
|
9
|
+
|
|
10
|
+
//#region src/providers/openai-codex-model-discovery.ts
|
|
11
|
+
const OPENAI_CODEX_MODELS_URL = "https://chatgpt.com/backend-api/codex/models";
|
|
12
|
+
const OPENAI_CODEX_ROUTE = "openai-codex";
|
|
13
|
+
const OPENAI_CODEX_CATALOG_CLIENT_VERSION = "0.144.0";
|
|
14
|
+
const DISCOVERY_TIMEOUT_MS = 8e3;
|
|
15
|
+
function decodeJwtPayload(token) {
|
|
16
|
+
const encoded = token.split(".")[1];
|
|
17
|
+
if (!encoded) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
|
|
22
|
+
} catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function extractChatGptAccountId(token) {
|
|
27
|
+
const payload = decodeJwtPayload(token);
|
|
28
|
+
const auth = payload?.["https://api.openai.com/auth"];
|
|
29
|
+
if (!auth || typeof auth !== "object" || Array.isArray(auth)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const accountId = auth.chatgpt_account_id;
|
|
33
|
+
return typeof accountId === "string" && accountId.trim() ? accountId.trim() : null;
|
|
34
|
+
}
|
|
35
|
+
function positiveInteger(value) {
|
|
36
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
37
|
+
}
|
|
38
|
+
function inputModalities(value) {
|
|
39
|
+
if (!Array.isArray(value)) {
|
|
40
|
+
return ["text"];
|
|
41
|
+
}
|
|
42
|
+
const values = value.filter((entry) => entry === "text" || entry === "image");
|
|
43
|
+
return values.length > 0 ? values : ["text"];
|
|
44
|
+
}
|
|
45
|
+
function modelCapabilities(model) {
|
|
46
|
+
const rawLevels = Array.isArray(model.supported_reasoning_levels) ? model.supported_reasoning_levels : [];
|
|
47
|
+
const thinkingLevels = rawLevels.flatMap((entry) => {
|
|
48
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
const effort = entry.effort;
|
|
52
|
+
const normalized = typeof effort === "string" ? normalizeThinkLevel(effort) : undefined;
|
|
53
|
+
return normalized ? [normalized] : [];
|
|
54
|
+
});
|
|
55
|
+
const defaultThinkingLevel = typeof model.default_reasoning_level === "string" ? normalizeThinkLevel(model.default_reasoning_level) : undefined;
|
|
56
|
+
return {
|
|
57
|
+
tools: true,
|
|
58
|
+
json: true,
|
|
59
|
+
streaming: true,
|
|
60
|
+
...thinkingLevels.length > 0 ? { thinkingLevels } : {},
|
|
61
|
+
...defaultThinkingLevel ? { defaultThinkingLevel } : {},
|
|
62
|
+
thinkingMode: "openai-reasoning-effort",
|
|
63
|
+
reasoningBudgetSupported: thinkingLevels.length > 0
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function parseModels(value) {
|
|
67
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
const models = value.models;
|
|
71
|
+
if (!Array.isArray(models)) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
return models.flatMap((entry) => {
|
|
75
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
const model = entry;
|
|
79
|
+
const id = typeof model.slug === "string" ? model.slug.trim() : "";
|
|
80
|
+
if (!id || model.visibility !== "list") {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const capabilities = modelCapabilities(model);
|
|
84
|
+
return [{
|
|
85
|
+
id,
|
|
86
|
+
name: typeof model.display_name === "string" && model.display_name.trim() ? model.display_name.trim().replace(/-(Sol|Terra|Luna|Mini)$/i, " $1") : id,
|
|
87
|
+
input: inputModalities(model.input_modalities),
|
|
88
|
+
reasoning: true,
|
|
89
|
+
tools: capabilities.tools,
|
|
90
|
+
json: capabilities.json,
|
|
91
|
+
thinkingLevels: capabilities.thinkingLevels,
|
|
92
|
+
defaultThinkingLevel: capabilities.defaultThinkingLevel,
|
|
93
|
+
thinkingMode: capabilities.thinkingMode,
|
|
94
|
+
reasoningBudgetSupported: capabilities.reasoningBudgetSupported,
|
|
95
|
+
contextWindow: positiveInteger(model.context_window),
|
|
96
|
+
responsesLite: model.use_responses_lite === true,
|
|
97
|
+
source: "openai-codex-account"
|
|
98
|
+
}];
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function parseAppServerModels(models) {
|
|
102
|
+
return models.map((model) => {
|
|
103
|
+
const thinkingLevels = model.supportedReasoningEfforts.flatMap((effort) => {
|
|
104
|
+
const normalized = normalizeThinkLevel(effort);
|
|
105
|
+
return normalized ? [normalized] : [];
|
|
106
|
+
});
|
|
107
|
+
const defaultThinkingLevel = normalizeThinkLevel(model.defaultReasoningEffort);
|
|
108
|
+
const responsesLite = /^gpt-5\.6-(?:sol|terra|luna)$/i.test(model.id);
|
|
109
|
+
return {
|
|
110
|
+
id: model.id,
|
|
111
|
+
name: model.displayName.replace(/-(Sol|Terra|Luna|Mini)$/i, " $1"),
|
|
112
|
+
input: model.inputModalities,
|
|
113
|
+
reasoning: thinkingLevels.length > 0,
|
|
114
|
+
tools: !responsesLite,
|
|
115
|
+
json: !responsesLite,
|
|
116
|
+
thinkingLevels,
|
|
117
|
+
...defaultThinkingLevel ? { defaultThinkingLevel } : {},
|
|
118
|
+
thinkingMode: "openai-reasoning-effort",
|
|
119
|
+
reasoningBudgetSupported: false,
|
|
120
|
+
responsesLite,
|
|
121
|
+
source: "openai-codex-app-server"
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async function discoverOpenAICodexModels(params) {
|
|
126
|
+
const profileId = listProfilesForProvider(params.store, OPENAI_CODEX_ROUTE)[0];
|
|
127
|
+
if (!profileId) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
const resolved = await resolveApiKeyForProfile({
|
|
131
|
+
cfg: params.cfg,
|
|
132
|
+
store: params.store,
|
|
133
|
+
profileId,
|
|
134
|
+
agentDir: params.agentDir
|
|
135
|
+
});
|
|
136
|
+
if (!resolved?.apiKey) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
const accountId = extractChatGptAccountId(resolved.apiKey);
|
|
140
|
+
if (!accountId) {
|
|
141
|
+
throw new Error("OpenAI sign-in token does not contain a ChatGPT account ID");
|
|
142
|
+
}
|
|
143
|
+
if (!params.fetchImpl) {
|
|
144
|
+
const runtime = await (params.ensureRuntime ?? ensureOpenAICodexRuntimeComponent)({ config: params.cfg });
|
|
145
|
+
if (runtime.installed) {
|
|
146
|
+
await writeConfigFile(runtime.config);
|
|
147
|
+
}
|
|
148
|
+
return parseAppServerModels(await (params.listAppServerModels ?? listOpenAICodexAppServerModels)({
|
|
149
|
+
token: resolved.apiKey,
|
|
150
|
+
executable: runtime.executable
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
const url = new URL(OPENAI_CODEX_MODELS_URL);
|
|
154
|
+
url.searchParams.set("client_version", OPENAI_CODEX_CATALOG_CLIENT_VERSION);
|
|
155
|
+
const response = await (params.fetchImpl ?? fetch)(url, {
|
|
156
|
+
headers: {
|
|
157
|
+
authorization: `Bearer ${resolved.apiKey}`,
|
|
158
|
+
"chatgpt-account-id": accountId,
|
|
159
|
+
originator: "fased",
|
|
160
|
+
accept: "application/json"
|
|
161
|
+
},
|
|
162
|
+
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
163
|
+
});
|
|
164
|
+
if (!response.ok) {
|
|
165
|
+
throw new Error(`OpenAI account model discovery failed (${response.status})`);
|
|
166
|
+
}
|
|
167
|
+
return parseModels(await response.json());
|
|
168
|
+
}
|
|
169
|
+
const testing = {
|
|
170
|
+
extractChatGptAccountId,
|
|
171
|
+
parseAppServerModels,
|
|
172
|
+
parseModels
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
//#endregion
|
|
176
|
+
export { discoverOpenAICodexModels };
|
|
@@ -10,6 +10,7 @@ import { XIAOMI_MODEL_IDS } from "./xiaomi-models.js";
|
|
|
10
10
|
import { LITELLM_BASE_URL } from "./litellm-models.js";
|
|
11
11
|
import { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, QIANFAN_MODEL_IDS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, listProviderBrandManifests, lookupProviderManifestModelCapability, resolveProviderRouteModelCapability } from "./registry.js";
|
|
12
12
|
import { readFile } from "node:fs/promises";
|
|
13
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
13
14
|
|
|
14
15
|
//#region src/providers/refresh.ts
|
|
15
16
|
const OPENAI_DOCS_MODELS_URL = "https://developers.openai.com/api/docs/models/all";
|
|
@@ -46,6 +47,7 @@ const VLLM_DEFAULT_BASE_URL = "http://127.0.0.1:8000/v1";
|
|
|
46
47
|
const OLLAMA_DEFAULT_BASE_URL = "http://127.0.0.1:11434";
|
|
47
48
|
const LMSTUDIO_DEFAULT_BASE_URL = "http://127.0.0.1:1234/v1";
|
|
48
49
|
const LITELLM_DEFAULT_BASE_URL = LITELLM_BASE_URL;
|
|
50
|
+
const providerCatalogView = new AsyncLocalStorage();
|
|
49
51
|
function normalizeModelIds(values, options = {}) {
|
|
50
52
|
const seen = new Set();
|
|
51
53
|
const result = [];
|
|
@@ -107,15 +109,19 @@ function metadataString(metadata, key) {
|
|
|
107
109
|
function setProviderRefreshEnvFromProfile(params) {
|
|
108
110
|
const provider = params.profile.provider.trim();
|
|
109
111
|
const apiKey = resolveApiKeyProfileValue(params.profile, params.env);
|
|
112
|
+
const token = resolveTokenProfileValue(params.profile, params.env);
|
|
110
113
|
switch (provider) {
|
|
111
114
|
case "openai":
|
|
112
115
|
setProviderRefreshEnvValue(params.target, "OPENAI_API_KEY", apiKey);
|
|
113
116
|
break;
|
|
114
117
|
case "chutes":
|
|
115
|
-
setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY",
|
|
118
|
+
setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY", token);
|
|
116
119
|
break;
|
|
117
120
|
case "anthropic":
|
|
118
121
|
setProviderRefreshEnvValue(params.target, "ANTHROPIC_API_KEY", apiKey);
|
|
122
|
+
if (params.profile.type !== "api_key") {
|
|
123
|
+
setProviderRefreshEnvValue(params.target, "ANTHROPIC_OAUTH_TOKEN", token);
|
|
124
|
+
}
|
|
119
125
|
break;
|
|
120
126
|
case "google":
|
|
121
127
|
case "gemini":
|
|
@@ -129,7 +135,7 @@ function setProviderRefreshEnvFromProfile(params) {
|
|
|
129
135
|
break;
|
|
130
136
|
}
|
|
131
137
|
case "xai":
|
|
132
|
-
setProviderRefreshEnvValue(params.target, "XAI_API_KEY",
|
|
138
|
+
setProviderRefreshEnvValue(params.target, "XAI_API_KEY", token);
|
|
133
139
|
break;
|
|
134
140
|
case "mistral":
|
|
135
141
|
setProviderRefreshEnvValue(params.target, "MISTRAL_API_KEY", apiKey);
|
|
@@ -193,7 +199,7 @@ function setProviderRefreshEnvFromProfile(params) {
|
|
|
193
199
|
setProviderRefreshEnvValue(params.target, "TOGETHER_API_KEY", apiKey);
|
|
194
200
|
break;
|
|
195
201
|
case "openrouter":
|
|
196
|
-
setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY",
|
|
202
|
+
setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY", token);
|
|
197
203
|
break;
|
|
198
204
|
case "vercel-ai-gateway":
|
|
199
205
|
case "ai-gateway":
|
|
@@ -322,6 +328,7 @@ function normalizeProviderRefreshModelEntry(entry) {
|
|
|
322
328
|
}
|
|
323
329
|
return {
|
|
324
330
|
id,
|
|
331
|
+
...entry.name ? { name: entry.name } : {},
|
|
325
332
|
...entry.input ? { input: entry.input } : {},
|
|
326
333
|
...entry.reasoning !== undefined ? { reasoning: entry.reasoning } : {},
|
|
327
334
|
...entry.tools !== undefined ? { tools: entry.tools } : {},
|
|
@@ -335,6 +342,7 @@ function normalizeProviderRefreshModelEntry(entry) {
|
|
|
335
342
|
...entry.reasoningBudgetSupported !== undefined ? { reasoningBudgetSupported: entry.reasoningBudgetSupported } : {},
|
|
336
343
|
...typeof entry.contextWindow === "number" && entry.contextWindow > 0 ? { contextWindow: entry.contextWindow } : {},
|
|
337
344
|
...typeof entry.maxTokens === "number" && entry.maxTokens > 0 ? { maxTokens: entry.maxTokens } : {},
|
|
345
|
+
...entry.price ? { price: entry.price } : {},
|
|
338
346
|
...entry.source ? { source: entry.source } : {}
|
|
339
347
|
};
|
|
340
348
|
}
|
|
@@ -788,6 +796,57 @@ function readPositiveNumber(value) {
|
|
|
788
796
|
}
|
|
789
797
|
return undefined;
|
|
790
798
|
}
|
|
799
|
+
function readNonNegativeNumber(value) {
|
|
800
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
|
|
801
|
+
return value;
|
|
802
|
+
}
|
|
803
|
+
if (typeof value === "string") {
|
|
804
|
+
const parsed = Number(value);
|
|
805
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
|
|
806
|
+
}
|
|
807
|
+
return undefined;
|
|
808
|
+
}
|
|
809
|
+
function readNonNegativeNumberFrom(record, keys) {
|
|
810
|
+
for (const key of keys) {
|
|
811
|
+
const value = readNonNegativeNumber(record[key]);
|
|
812
|
+
if (value !== undefined) {
|
|
813
|
+
return value;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
return undefined;
|
|
817
|
+
}
|
|
818
|
+
function readModelPrice(record) {
|
|
819
|
+
const pricing = asRecord(record.pricing);
|
|
820
|
+
const perTokenInput = readNonNegativeNumberFrom(pricing, ["prompt", "input"]);
|
|
821
|
+
const perTokenOutput = readNonNegativeNumberFrom(pricing, ["completion", "output"]);
|
|
822
|
+
if (perTokenInput !== undefined || perTokenOutput !== undefined) {
|
|
823
|
+
return {
|
|
824
|
+
input: (perTokenInput ?? 0) * 1e6,
|
|
825
|
+
output: (perTokenOutput ?? 0) * 1e6,
|
|
826
|
+
cacheRead: (readNonNegativeNumberFrom(pricing, ["input_cache_read", "cache_read"]) ?? 0) * 1e6,
|
|
827
|
+
cacheWrite: (readNonNegativeNumberFrom(pricing, ["input_cache_write", "cache_write"]) ?? 0) * 1e6
|
|
828
|
+
};
|
|
829
|
+
}
|
|
830
|
+
const input = readNonNegativeNumberFrom(record, [
|
|
831
|
+
"input_price_per_million",
|
|
832
|
+
"inputPricePerMillion",
|
|
833
|
+
"prompt_price_per_million"
|
|
834
|
+
]);
|
|
835
|
+
const output = readNonNegativeNumberFrom(record, [
|
|
836
|
+
"output_price_per_million",
|
|
837
|
+
"outputPricePerMillion",
|
|
838
|
+
"completion_price_per_million"
|
|
839
|
+
]);
|
|
840
|
+
if (input === undefined && output === undefined) {
|
|
841
|
+
return undefined;
|
|
842
|
+
}
|
|
843
|
+
return {
|
|
844
|
+
input: input ?? 0,
|
|
845
|
+
output: output ?? 0,
|
|
846
|
+
cacheRead: readNonNegativeNumberFrom(record, ["cache_read_price_per_million", "cacheReadPerMillion"]) ?? 0,
|
|
847
|
+
cacheWrite: readNonNegativeNumberFrom(record, ["cache_write_price_per_million", "cacheWritePerMillion"]) ?? 0
|
|
848
|
+
};
|
|
849
|
+
}
|
|
791
850
|
function asRecord(value) {
|
|
792
851
|
return value && typeof value === "object" ? value : {};
|
|
793
852
|
}
|
|
@@ -919,8 +978,10 @@ function parseOpenRouterModelSnapshotsFromModelsResponse(payload) {
|
|
|
919
978
|
const speech = outputModalities.has("audio");
|
|
920
979
|
const contextWindow = readPositiveNumber(record.context_length) ?? readPositiveNumber(record.context_window) ?? readPositiveNumber(record.contextWindow);
|
|
921
980
|
const maxTokens = readPositiveNumber(topProvider.max_completion_tokens) ?? readPositiveNumber(record.max_tokens) ?? readPositiveNumber(record.maxTokens);
|
|
981
|
+
const price = readModelPrice(record);
|
|
922
982
|
return [{
|
|
923
983
|
id: entry.id,
|
|
984
|
+
...readString(record.name) ? { name: readString(record.name) } : {},
|
|
924
985
|
...input.length > 0 ? { input } : {},
|
|
925
986
|
...reasoning ? { reasoning } : {},
|
|
926
987
|
...tools ? { tools } : {},
|
|
@@ -930,6 +991,7 @@ function parseOpenRouterModelSnapshotsFromModelsResponse(payload) {
|
|
|
930
991
|
...speech ? { speech } : {},
|
|
931
992
|
...contextWindow ? { contextWindow } : {},
|
|
932
993
|
...maxTokens ? { maxTokens } : {},
|
|
994
|
+
...price ? { price } : {},
|
|
933
995
|
source: "catalog"
|
|
934
996
|
}];
|
|
935
997
|
}
|
|
@@ -1009,8 +1071,11 @@ function parseGenericModelSnapshotsFromModelsResponse(payload) {
|
|
|
1009
1071
|
"outputTokenLimit",
|
|
1010
1072
|
"max_completion_tokens"
|
|
1011
1073
|
]);
|
|
1074
|
+
const price = readModelPrice(record);
|
|
1075
|
+
const displayName = readString(record.display_name) ?? readString(record.displayName) ?? (readString(record.id) || readString(record.key) || readString(record.model) ? readString(record.name) : undefined);
|
|
1012
1076
|
return [{
|
|
1013
1077
|
id: normalizeProviderModelId(id),
|
|
1078
|
+
...displayName ? { name: displayName } : {},
|
|
1014
1079
|
...input ? { input } : {},
|
|
1015
1080
|
...reasoning !== undefined ? { reasoning } : {},
|
|
1016
1081
|
...tools !== undefined ? { tools } : {},
|
|
@@ -1024,6 +1089,7 @@ function parseGenericModelSnapshotsFromModelsResponse(payload) {
|
|
|
1024
1089
|
...thinking.reasoningBudgetSupported !== undefined ? { reasoningBudgetSupported: thinking.reasoningBudgetSupported } : {},
|
|
1025
1090
|
...contextWindow ? { contextWindow } : {},
|
|
1026
1091
|
...maxTokens ? { maxTokens } : {},
|
|
1092
|
+
...price ? { price } : {},
|
|
1027
1093
|
source: "catalog"
|
|
1028
1094
|
}];
|
|
1029
1095
|
});
|
|
@@ -1131,8 +1197,12 @@ function selectModelSnapshotsByIds(entries, selectedIds, route) {
|
|
|
1131
1197
|
});
|
|
1132
1198
|
}
|
|
1133
1199
|
function selectManifestModelsForNormalUi(modelIds, preferred) {
|
|
1134
|
-
const
|
|
1135
|
-
|
|
1200
|
+
const normalized = normalizeModelIds(modelIds);
|
|
1201
|
+
if (providerCatalogView.getStore() === "available") {
|
|
1202
|
+
return sortWithPreferredOrder(normalized, preferred);
|
|
1203
|
+
}
|
|
1204
|
+
const recommended = new Set(preferred.map((id) => id.toLowerCase()));
|
|
1205
|
+
return sortWithPreferredOrder(normalized.filter((id) => recommended.has(id.toLowerCase())), preferred);
|
|
1136
1206
|
}
|
|
1137
1207
|
function selectOpenAIApiModelsForNormalUi(modelIds) {
|
|
1138
1208
|
return selectManifestModelsForNormalUi(modelIds, OPENAI_API_MODEL_IDS);
|
|
@@ -1219,12 +1289,10 @@ function selectOpencodeZenModelsForNormalUi(modelIds) {
|
|
|
1219
1289
|
return selectManifestModelsForNormalUi(modelIds, OPENCODE_ZEN_MODEL_IDS);
|
|
1220
1290
|
}
|
|
1221
1291
|
function selectHuggingfaceModelsForNormalUi(modelIds) {
|
|
1222
|
-
|
|
1223
|
-
return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id)), HUGGINGFACE_MODEL_IDS);
|
|
1292
|
+
return selectManifestModelsForNormalUi(modelIds, HUGGINGFACE_MODEL_IDS);
|
|
1224
1293
|
}
|
|
1225
1294
|
function selectVeniceModelsForNormalUi(modelIds) {
|
|
1226
|
-
|
|
1227
|
-
return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id)), VENICE_MODEL_IDS);
|
|
1295
|
+
return selectManifestModelsForNormalUi(modelIds, VENICE_MODEL_IDS);
|
|
1228
1296
|
}
|
|
1229
1297
|
function readEnv(env, names) {
|
|
1230
1298
|
for (const name of names) {
|
|
@@ -1363,19 +1431,28 @@ async function fetchChutesProviderRefreshSnapshot(params = {}) {
|
|
|
1363
1431
|
return { providers: { [CHUTES_PROVIDER_BRAND_ID]: { routes: { [CHUTES_ROUTE_ID]: selectModelSnapshotsByIds(models, selectChutesModelsForNormalUi(ids), CHUTES_ROUTE_ID) } } } };
|
|
1364
1432
|
}
|
|
1365
1433
|
async function fetchAnthropicProviderRefreshSnapshot(params = {}) {
|
|
1366
|
-
const
|
|
1434
|
+
const env = params.env ?? process.env;
|
|
1435
|
+
const apiKey = readEnv(env, ["ANTHROPIC_API_KEY"]);
|
|
1436
|
+
const oauthToken = readEnv(env, ["ANTHROPIC_OAUTH_TOKEN"]);
|
|
1437
|
+
const token = apiKey ?? oauthToken;
|
|
1367
1438
|
if (!token) {
|
|
1368
1439
|
return missingProviderRoutes(ANTHROPIC_PROVIDER_BRAND_ID, { [ANTHROPIC_ROUTE_ID]: {
|
|
1369
1440
|
reason: "credential-missing",
|
|
1370
|
-
detail: "
|
|
1441
|
+
detail: "Configure Anthropic sign-in, setup-token, or API-key credentials before model discovery."
|
|
1371
1442
|
} });
|
|
1372
1443
|
}
|
|
1373
1444
|
const payload = await fetchJsonCatalog({
|
|
1374
1445
|
fetch: params.fetch ?? fetch,
|
|
1375
1446
|
url: ANTHROPIC_MODELS_URL,
|
|
1376
|
-
headers: {
|
|
1377
|
-
"x-api-key":
|
|
1447
|
+
headers: apiKey ? {
|
|
1448
|
+
"x-api-key": apiKey,
|
|
1378
1449
|
"anthropic-version": "2023-06-01"
|
|
1450
|
+
} : {
|
|
1451
|
+
Authorization: `Bearer ${oauthToken}`,
|
|
1452
|
+
"anthropic-version": "2023-06-01",
|
|
1453
|
+
"anthropic-beta": "claude-code-20250219,oauth-2025-04-20",
|
|
1454
|
+
"user-agent": "fased-agent",
|
|
1455
|
+
"x-app": "cli"
|
|
1379
1456
|
},
|
|
1380
1457
|
label: "Anthropic"
|
|
1381
1458
|
});
|
|
@@ -2042,28 +2119,33 @@ function providerRefreshFetcherForBrand(brandId) {
|
|
|
2042
2119
|
default: return undefined;
|
|
2043
2120
|
}
|
|
2044
2121
|
}
|
|
2122
|
+
function listProviderRefreshContractGaps(manifests = listProviderBrandManifests()) {
|
|
2123
|
+
return manifests.flatMap((manifest) => providerRefreshFetcherForBrand(manifest.id) ? [] : [`${manifest.id}: no authenticated or operator catalog fetcher`]);
|
|
2124
|
+
}
|
|
2045
2125
|
async function fetchProviderRefreshSnapshotForRoutes(params) {
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
const
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2126
|
+
return await providerCatalogView.run("available", async () => {
|
|
2127
|
+
const requestedRoutes = new Set([...params.routes].map((route) => route.trim().toLowerCase()).filter(Boolean));
|
|
2128
|
+
const fetchers = new Set();
|
|
2129
|
+
for (const manifest of listProviderBrandManifests()) {
|
|
2130
|
+
const routes = new Set([
|
|
2131
|
+
...manifest.methods.map((method) => method.route.trim().toLowerCase()),
|
|
2132
|
+
...(manifest.modelProviderIds ?? []).map((route) => route.trim().toLowerCase()),
|
|
2133
|
+
...(manifest.routeAliases ?? []).map((route) => route.trim().toLowerCase())
|
|
2134
|
+
]);
|
|
2135
|
+
if (![...routes].some((route) => requestedRoutes.has(route))) {
|
|
2136
|
+
continue;
|
|
2137
|
+
}
|
|
2138
|
+
const fetcher = providerRefreshFetcherForBrand(manifest.id);
|
|
2139
|
+
if (fetcher) {
|
|
2140
|
+
fetchers.add(fetcher);
|
|
2141
|
+
}
|
|
2060
2142
|
}
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2143
|
+
const results = await Promise.allSettled([...fetchers].map((fetcher) => fetcher({
|
|
2144
|
+
fetch: params.fetch,
|
|
2145
|
+
env: params.env
|
|
2146
|
+
})));
|
|
2147
|
+
return mergeProviderRefreshSnapshots(results.flatMap((result) => result.status === "fulfilled" ? [result.value] : []));
|
|
2148
|
+
});
|
|
2067
2149
|
}
|
|
2068
2150
|
function mergeProviderRefreshSnapshots(snapshots) {
|
|
2069
2151
|
const providers = {};
|
|
@@ -2237,4 +2319,4 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
|
2237
2319
|
}
|
|
2238
2320
|
|
|
2239
2321
|
//#endregion
|
|
2240
|
-
export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, fetchProviderRefreshSnapshotForRoutes, loadProviderRefreshSnapshotFromFile };
|
|
2322
|
+
export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, fetchProviderRefreshSnapshotForRoutes, loadProviderRefreshSnapshotFromFile, parseGenericModelSnapshotsFromModelsResponse };
|
|
@@ -763,7 +763,7 @@ const OPENAI_PROVIDER_MANIFEST = {
|
|
|
763
763
|
id: "openai-codex",
|
|
764
764
|
route: OPENAI_CODEX_ROUTE_ID,
|
|
765
765
|
kind: "oauth",
|
|
766
|
-
label: "
|
|
766
|
+
label: "ChatGPT sign-in",
|
|
767
767
|
hint: "Open the OpenAI sign-in URL, finish login in the browser, then Fased completes the OAuth flow."
|
|
768
768
|
}, {
|
|
769
769
|
id: "openai-api-key",
|
|
@@ -1601,4 +1601,4 @@ function isStandardProviderCatalogEntry(entry) {
|
|
|
1601
1601
|
}
|
|
1602
1602
|
|
|
1603
1603
|
//#endregion
|
|
1604
|
-
export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute,
|
|
1604
|
+
export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, providerModelRecommendationRank, resolveProviderRouteModelCapability };
|