@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.
Files changed (278) hide show
  1. package/config/capability-catalog.json +12 -0
  2. package/dist/agents/authenticated-model-catalog.js +3 -2
  3. package/dist/agents/bash-tools.exec-host-node.js +1 -1
  4. package/dist/agents/bash-tools.exec.js +1 -1
  5. package/dist/agents/copilot-dynamic-headers.js +37 -0
  6. package/dist/agents/current-model-catalog.js +6 -3
  7. package/dist/agents/model-catalog-snapshot.js +124 -0
  8. package/dist/agents/model-catalog-source.js +2 -2
  9. package/dist/agents/model-catalog.js +1 -1
  10. package/dist/agents/model-metadata.js +34 -6
  11. package/dist/agents/openai-codex-app-server.js +524 -0
  12. package/dist/agents/openai-codex-runtime-component.js +39 -0
  13. package/dist/agents/pi-embedded-runner/compact.js +3 -3
  14. package/dist/agents/pi-embedded-runner/extra-params.js +170 -94
  15. package/dist/agents/pi-embedded-runner/model.js +62 -1
  16. package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
  17. package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
  18. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
  19. package/dist/agents/pi-embedded-runner/run.js +5 -2
  20. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  21. package/dist/agents/pi-embedded-runner.js +1 -1
  22. package/dist/agents/pi-tools.js +2 -2
  23. package/dist/agents/tools/discord-actions-messaging.js +1 -1
  24. package/dist/agents/tools/message-tool.js +1 -1
  25. package/dist/agents/tools/session-status-tool.js +3 -3
  26. package/dist/agents/tools/slack-actions.js +1 -1
  27. package/dist/agents/tools/tts-tool.js +1 -1
  28. package/dist/auto-reply/reply/commands-models.js +1 -1
  29. package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
  30. package/dist/auto-reply/reply/dispatch-acp.js +1 -1
  31. package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
  32. package/dist/auto-reply/reply/get-reply-run.js +20 -2
  33. package/dist/auto-reply/reply/model-selection.js +1 -1
  34. package/dist/auto-reply/reply/session-reset-model.js +1 -1
  35. package/dist/auto-reply/status.js +1 -1
  36. package/dist/auto-reply/thinking.js +1 -1
  37. package/dist/brand.js +1 -1
  38. package/dist/browser/cdp.helpers.js +2 -2
  39. package/dist/browser/chrome.js +2 -2
  40. package/dist/browser/extension-relay.js +7 -7
  41. package/dist/build-info.json +3 -3
  42. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  43. package/dist/capabilities/install.js +43 -0
  44. package/dist/cli/components-cli.js +9 -31
  45. package/dist/cli/cron-cli/register.cron-add.js +1 -1
  46. package/dist/cli/hooks-cli.js +1 -1
  47. package/dist/cli/plugins-cli.js +3 -3
  48. package/dist/cli/program/register.agent.js +1 -1
  49. package/dist/cli/update-cli/update-command.js +50 -12
  50. package/dist/commands/agent.js +22 -3
  51. package/dist/commands/auth-choice.apply.openai.js +9 -0
  52. package/dist/commands/auth-choice.apply.plugin-provider.js +1 -1
  53. package/dist/commands/doctor-config-flow.js +1 -1
  54. package/dist/commands/hosted-dashboard-probe.js +3 -3
  55. package/dist/commands/model-picker.js +4 -3
  56. package/dist/commands/models/list.probe.js +1 -1
  57. package/dist/commands/models/list.registry.js +3 -2
  58. package/dist/commands/models/list.status-command.js +2 -2
  59. package/dist/commands/onboard-channels.js +1 -1
  60. package/dist/commands/onboarding/plugin-install.js +2 -2
  61. package/dist/commands/openai-codex-model-default.js +3 -2
  62. package/dist/config/zod-schema.agent-defaults.js +4 -2
  63. package/dist/config/zod-schema.agent-runtime.js +4 -2
  64. package/dist/config/zod-schema.core.js +4 -2
  65. package/dist/control-ui/assets/{app-D2RaTXoV.js → app-DltSyY4Y.js} +1723 -1716
  66. package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
  67. package/dist/control-ui/assets/{index-D2nC6I-9.js → index-D5JlBp7f.js} +3 -3
  68. package/dist/control-ui/assets/{providers-CyjiG5Jw.js → providers-Cc89iMdx.js} +3 -3
  69. package/dist/control-ui/index.html +1 -1
  70. package/dist/control-ui/version.json +1 -1
  71. package/dist/cron/isolated-agent/run.js +6 -2
  72. package/dist/cron/service/jobs.js +11 -1
  73. package/dist/discord/monitor/gateway-plugin.js +2 -2
  74. package/dist/discord/voice/manager.js +1 -1
  75. package/dist/gateway/client.js +4 -4
  76. package/dist/gateway/protocol/schema/agents-models-skills.js +106 -5
  77. package/dist/gateway/server-methods/hooks.js +1 -1
  78. package/dist/gateway/server-methods/models.js +15 -7
  79. package/dist/gateway/server-methods/plugins-marketplace.js +3 -3
  80. package/dist/gateway/server-methods/services.js +1 -1
  81. package/dist/gateway/server-methods/sessions.js +1 -1
  82. package/dist/gateway/server-methods/tts.js +2 -2
  83. package/dist/gateway/server-model-catalog.js +1 -1
  84. package/dist/gateway/sessions-patch.js +27 -24
  85. package/dist/light-update-status.js +11 -11
  86. package/dist/plugin-sdk/{accounts-CeRNo5Ae.js → accounts-CmMwe9Dt.js} +1 -1
  87. package/dist/plugin-sdk/{actions-OMRHtXPj.js → actions-DYViFQiX.js} +4 -4
  88. package/dist/plugin-sdk/{active-listener-BlIkS3iR.js → active-listener-DVbpcisf.js} +1 -1
  89. package/dist/plugin-sdk/{agent-scope-BbgPlhtw.js → agent-scope-CCjfjKoO.js} +1 -1
  90. package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
  91. package/dist/plugin-sdk/{audio-preflight-B2n3a2Tj.js → audio-preflight-D-Mfay8i.js} +44 -48
  92. package/dist/plugin-sdk/{audit-Ppg6dR_b.js → audit-JImYFOzJ.js} +1 -1
  93. package/dist/plugin-sdk/{channel-access-configure-B6IAGlE0.js → channel-access-configure-B_qYjml8.js} +1 -1
  94. package/dist/plugin-sdk/{channel-access-af8dWWRv.js → channel-access-cxCK2mci.js} +1 -1
  95. package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
  96. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  97. package/dist/plugin-sdk/channel-plugin-common.js +5 -5
  98. package/dist/plugin-sdk/{chunk-CD76Byie.js → chunk-CF8nvZNj.js} +1 -1
  99. package/dist/plugin-sdk/{chunk-items-Bu19zrYH.js → chunk-items-yLFoO571.js} +1 -1
  100. package/dist/plugin-sdk/command-status.d.ts +2 -2
  101. package/dist/plugin-sdk/command-status.js +44 -48
  102. package/dist/plugin-sdk/{commands-registry-DgS55tNj.js → commands-registry-CK4KmMG0.js} +2 -2
  103. package/dist/plugin-sdk/{common-CWvfeiX0.js → common-Cky4hpqr.js} +1 -1
  104. package/dist/plugin-sdk/{config-CYDETqcF.js → config-Dbxj_jUP.js} +1153 -17
  105. package/dist/plugin-sdk/{config-schema-CQ4EVcQG.js → config-schema-aKPMn6ML.js} +96084 -81132
  106. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  107. package/dist/plugin-sdk/device-pair.js +2 -3
  108. package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
  109. package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
  110. package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
  111. package/dist/plugin-sdk/discord.d.ts +6 -6
  112. package/dist/plugin-sdk/discord.js +32 -33
  113. package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
  114. package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
  115. package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-ZoHU8oA7.js} +3 -3
  116. package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-g4g7GT02.js} +2 -2
  117. package/dist/plugin-sdk/{group-mentions-BxDgHCgj.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
  118. package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
  119. package/dist/plugin-sdk/{handle-action-B75UVKxF.js → handle-action-BSNDD2Vc.js} +25 -26
  120. package/dist/plugin-sdk/{helpers-BuEwju6y.js → helpers-CDo2XBSr.js} +1 -1
  121. package/dist/plugin-sdk/{image-ops-C66HPeAZ.js → image-ops-DbeBxbn4.js} +1 -1
  122. package/dist/plugin-sdk/index.d.ts +18 -18
  123. package/dist/plugin-sdk/index.js +48 -52
  124. package/dist/plugin-sdk/{login-Amr2DpKU.js → login-CWXvFTd8.js} +3 -3
  125. package/dist/plugin-sdk/{login-qr-DMQNEi9m.js → login-qr-CJB2zjmM.js} +4 -4
  126. package/dist/plugin-sdk/{manager-Bvpq49BI.js → manager-CbiFFLKS.js} +8 -8
  127. package/dist/plugin-sdk/{markdown-tables-DmQ7oXOm.js → markdown-tables-Bskt9r8i.js} +1 -1
  128. package/dist/plugin-sdk/{media-ByLQbEwJ.js → media-B3aAg5rh.js} +5 -5
  129. package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-DTjIMw8J.js} +1 -1
  130. package/dist/plugin-sdk/{monitor-K_u6daGa.js → monitor-BJs6z7AT.js} +52 -56
  131. package/dist/plugin-sdk/{monitor-S_7LrvSj.js → monitor-BYGbTI5V.js} +62 -66
  132. package/dist/plugin-sdk/{openresponses-http-BrDJUZXR.js → openresponses-http-BGCl2dS2.js} +44 -48
  133. package/dist/plugin-sdk/{optional-runtime-dependency-CbYjAC2b.js → optional-runtime-dependency-BlTVkcAg.js} +1 -1
  134. package/dist/plugin-sdk/{outbound-BuDafBBI.js → outbound-CIemga5_.js} +9 -9
  135. package/dist/plugin-sdk/{outbound-attachment-DmZmUqFP.js → outbound-attachment-2RckWqrk.js} +2 -2
  136. package/dist/plugin-sdk/{pairing-message-D0-UWGFJ.d.ts → pairing-message-C403mq4K.d.ts} +2 -2
  137. package/dist/plugin-sdk/{pairing-message-e4D4eBDA.js → pairing-message-r-VQfhFB.js} +1 -1
  138. package/dist/plugin-sdk/{pairing-store-T3IGoGZg.js → pairing-store-uPnLfGgB.js} +2 -2
  139. package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-DjgDArrp.js} +1 -1
  140. package/dist/plugin-sdk/{pi-model-discovery-DvAG_Png.js → pi-model-discovery-BpEilAym.js} +1 -1
  141. package/dist/plugin-sdk/{pi-model-discovery-runtime-NjkUgjIf.js → pi-model-discovery-runtime-DwNdFaz-.js} +3 -3
  142. package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
  143. package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe-CJb5uR8B.js} +2 -2
  144. package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
  145. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  146. package/dist/plugin-sdk/{pw-ai-D7eW43DL.js → pw-ai-H7UgunQQ.js} +7 -9
  147. package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-DSyx77KY.js} +4 -4
  148. package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
  149. package/dist/plugin-sdk/{replies-BMIPmEoP.js → replies-CKMwkH4G.js} +4 -4
  150. package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-CeVw7Mn2.js} +1 -1
  151. package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
  152. package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → resolve-channels-_-nV-EK2.js} +1 -1
  153. package/dist/plugin-sdk/{resolve-outbound-target-CXCqUUPV.js → resolve-outbound-target-B68fSoGi.js} +2 -2
  154. package/dist/plugin-sdk/{resolve-route-DJN-SUSt.js → resolve-route-B8fOfihG.js} +2 -2
  155. package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-DN9VQBwv.js} +1 -1
  156. package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
  157. package/dist/plugin-sdk/{retry-policy-CY1qY6d7.js → retry-policy-B6GQldxB.js} +1 -1
  158. package/dist/plugin-sdk/{runtime-dependency-DvdRNMvs.js → runtime-dependency-DlqVSsSs.js} +124 -16
  159. package/dist/plugin-sdk/{runtime-CgOkQe0w.js → runtime-nVJl3PlS.js} +4 -4
  160. package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-Dx2lUqCu.js} +2 -2
  161. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  162. package/dist/plugin-sdk/sat-runtime.js +45 -11
  163. package/dist/plugin-sdk/{send-2ITqny2W.js → send-BCJ4hi3t.js} +10 -10
  164. package/dist/plugin-sdk/{send-Cr-dj6S-.js → send-BHokB4TR.js} +6 -6
  165. package/dist/plugin-sdk/{send-BAz22RZr.js → send-CPK_HlYW.js} +9 -9
  166. package/dist/plugin-sdk/{send-eTxqFFsw.js → send-D3DQOg2a.js} +8 -8
  167. package/dist/plugin-sdk/{send-BG3RWyil.js → send-hSu1HWms.js} +13 -13
  168. package/dist/plugin-sdk/{session-C8nJmmVE.js → session-DQ4Dr-mf.js} +3 -3
  169. package/dist/plugin-sdk/{skill-commands-Rm5by9S8.js → skill-commands-CmdoKLh_.js} +103 -103
  170. package/dist/plugin-sdk/{slack-xvIVvyEM.js → slack-B70NHpMF.js} +65 -69
  171. package/dist/plugin-sdk/{slack-actions-BNIALJTA.js → slack-actions-fSmP981b.js} +21 -22
  172. package/dist/plugin-sdk/slack.d.ts +6 -6
  173. package/dist/plugin-sdk/slack.js +14 -14
  174. package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
  175. package/dist/plugin-sdk/{sticker-cache-D3oDiu2u.js → sticker-cache-B4dG2sKU.js} +3 -3
  176. package/dist/plugin-sdk/{tables-DS5L7lCA.js → tables-EX4Hy-a-.js} +2 -2
  177. package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
  178. package/dist/plugin-sdk/{targets-D6lUomJc.js → targets-BeGUCGWK.js} +2 -2
  179. package/dist/plugin-sdk/{telegram-actions-MSFkDn0m.js → telegram-actions-CM8SJgc9.js} +49 -53
  180. package/dist/plugin-sdk/telegram.d.ts +6 -6
  181. package/dist/plugin-sdk/telegram.js +12 -12
  182. package/dist/plugin-sdk/{thread-bindings.lifecycle-Ry6Vcgw3.js → thread-bindings.lifecycle-tHK_1mvp.js} +3 -3
  183. package/dist/plugin-sdk/{thread-bindings.state-C0stmvNk.js → thread-bindings.state-D7xG1GHu.js} +2 -2
  184. package/dist/plugin-sdk/{tmp-fased-dir-D91GExk4.d.ts → tmp-fased-dir-Ouj58axY.d.ts} +2 -2
  185. package/dist/plugin-sdk/{types-DVTIpopt.d.ts → types-B4hj6HgR.d.ts} +2 -2
  186. package/dist/plugin-sdk/{types-BzadOItY.d.ts → types-DyhXnYUr.d.ts} +1 -1
  187. package/dist/plugin-sdk/{types-DKvBJHfH.d.ts → types-dWZFX1fk.d.ts} +28 -3
  188. package/dist/plugin-sdk/{types.plugin-BiHPaDTF.d.ts → types.plugin-_fbu40Re.d.ts} +7 -5
  189. package/dist/plugin-sdk/{web-DRNJxHXA.js → web-BFolfZ3i.js} +53 -57
  190. package/dist/plugin-sdk/{whatsapp-actions-BDXZF2R5.js → whatsapp-actions-CYmleHCz.js} +19 -20
  191. package/dist/plugin-sdk/{whatsapp-heartbeat-CKgmwCGr.js → whatsapp-heartbeat-BEwm4GK3.js} +2 -2
  192. package/dist/plugin-sdk/whatsapp.d.ts +11 -11
  193. package/dist/plugin-sdk/whatsapp.js +15 -15
  194. package/dist/plugin-sdk/{wsl-Biw7Mj39.js → wsl-BtMDzMv5.js} +53 -53
  195. package/dist/plugin-sdk/{zod-schema.providers-core-CIzCjXH9.d.ts → zod-schema.providers-core-FaYR6KdD.d.ts} +61 -61
  196. package/dist/plugins/lifecycle.js +1 -1
  197. package/dist/plugins/manifest-registry.js +26 -0
  198. package/dist/plugins/manifest.js +2 -0
  199. package/dist/plugins/marketplace.js +1 -1
  200. package/dist/plugins/runtime/index.js +1 -1
  201. package/dist/plugins/update.js +1 -1
  202. package/dist/providers/github-copilot-model-discovery.js +51 -0
  203. package/dist/providers/openai-codex-model-discovery.js +176 -0
  204. package/dist/providers/refresh.js +116 -34
  205. package/dist/providers/registry.js +2 -2
  206. package/dist/providers/runtime-model-catalog.js +97 -28
  207. package/dist/shared/model-thinking.js +13 -2
  208. package/dist/telegram/bot-message-context.js +1 -1
  209. package/dist/wizard/onboarding.finalize.js +1 -1
  210. package/extensions/acpx/package.json +1 -1
  211. package/extensions/bluebubbles/package.json +1 -1
  212. package/extensions/copilot-proxy/package.json +1 -1
  213. package/extensions/diagnostics-otel/package.json +1 -1
  214. package/extensions/fased-federation/package.json +1 -1
  215. package/extensions/google-gemini-cli-auth/package.json +1 -1
  216. package/extensions/imessage/package.json +1 -1
  217. package/extensions/irc/package.json +1 -1
  218. package/extensions/line/package.json +1 -1
  219. package/extensions/llm-task/package.json +1 -1
  220. package/extensions/lobster/package.json +1 -1
  221. package/extensions/matrix/CHANGELOG.md +12 -0
  222. package/extensions/matrix/package.json +1 -1
  223. package/extensions/mattermost/package.json +1 -1
  224. package/extensions/memory-core/package.json +2 -2
  225. package/extensions/memory-lancedb/package.json +1 -1
  226. package/extensions/minimax-portal-auth/package.json +1 -1
  227. package/extensions/msteams/CHANGELOG.md +12 -0
  228. package/extensions/msteams/package.json +1 -1
  229. package/extensions/nextcloud-talk/package.json +1 -1
  230. package/extensions/nostr/CHANGELOG.md +12 -0
  231. package/extensions/nostr/package.json +1 -1
  232. package/extensions/open-prose/package.json +1 -1
  233. package/extensions/sat-mining/package.json +1 -1
  234. package/extensions/signal/package.json +1 -1
  235. package/extensions/synology-chat/package.json +1 -1
  236. package/extensions/tlon/package.json +1 -1
  237. package/extensions/twitch/CHANGELOG.md +12 -0
  238. package/extensions/twitch/package.json +1 -1
  239. package/extensions/voice-call/CHANGELOG.md +12 -0
  240. package/extensions/voice-call/package.json +1 -1
  241. package/extensions/zalo/CHANGELOG.md +12 -0
  242. package/extensions/zalo/package.json +1 -1
  243. package/extensions/zalouser/CHANGELOG.md +12 -0
  244. package/extensions/zalouser/package.json +1 -1
  245. package/package.json +2 -1
  246. package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +0 -2
  247. package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
  248. package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
  249. package/dist/plugin-sdk/wallet-status-f0HagNeO.js +0 -11947
  250. package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
  251. /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
  252. /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
  253. /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
  254. /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
  255. /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
  256. /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
  257. /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
  258. /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
  259. /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
  260. /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
  261. /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
  262. /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
  263. /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
  264. /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
  265. /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
  266. /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
  267. /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
  268. /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
  269. /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
  270. /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
  271. /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
  272. /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
  273. /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
  274. /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
  275. /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
  276. /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
  277. /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
  278. /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", apiKey);
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", apiKey);
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", apiKey);
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 allowed = new Set(preferred.map((id) => id.toLowerCase()));
1135
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id.toLowerCase())), preferred);
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
- const allowed = new Set(HUGGINGFACE_MODEL_IDS);
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
- const allowed = new Set(VENICE_MODEL_IDS);
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 token = readEnv(params.env ?? process.env, ["ANTHROPIC_API_KEY"]);
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: "Set ANTHROPIC_API_KEY or configure an Anthropic API-key auth profile."
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": token,
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
- const requestedRoutes = new Set([...params.routes].map((route) => route.trim().toLowerCase()).filter(Boolean));
2047
- const fetchers = new Set();
2048
- for (const manifest of listProviderBrandManifests()) {
2049
- const routes = new Set([
2050
- ...manifest.methods.map((method) => method.route.trim().toLowerCase()),
2051
- ...(manifest.modelProviderIds ?? []).map((route) => route.trim().toLowerCase()),
2052
- ...(manifest.routeAliases ?? []).map((route) => route.trim().toLowerCase())
2053
- ]);
2054
- if (![...routes].some((route) => requestedRoutes.has(route))) {
2055
- continue;
2056
- }
2057
- const fetcher = providerRefreshFetcherForBrand(manifest.id);
2058
- if (fetcher) {
2059
- fetchers.add(fetcher);
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
- const results = await Promise.allSettled([...fetchers].map((fetcher) => fetcher({
2063
- fetch: params.fetch,
2064
- env: params.env
2065
- })));
2066
- return mergeProviderRefreshSnapshots(results.flatMap((result) => result.status === "fulfilled" ? [result.value] : []));
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: "Sign in",
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, isOpenAISignInCatalogModel, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, providerModelRecommendationRank, resolveProviderRouteModelCapability };
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 };