@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
@@ -2,7 +2,7 @@ import { isLoopbackAddress, isLoopbackHost } from "../gateway/net.js";
2
2
  import { rawDataToString } from "../infra/ws.js";
3
3
  import { probeAuthenticatedFasedAgentRelay, resolveRelayAcceptedTokensForPort, resolveRelayAuthTokenForPort } from "./extension-relay-auth.js";
4
4
  import { createServer } from "node:http";
5
- import WebSocket, { WebSocketServer } from "ws";
5
+ import WebSocket$1, { WebSocketServer } from "ws";
6
6
 
7
7
  //#region src/browser/extension-relay.ts
8
8
  const RELAY_AUTH_HEADER = "x-fased-relay-token";
@@ -125,7 +125,7 @@ async function ensureChromeExtensionRelayServer(opts) {
125
125
  let extensionWs = null;
126
126
  const cdpClients = new Set();
127
127
  const connectedTargets = new Map();
128
- const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
128
+ const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
129
129
  let extensionDisconnectCleanupTimer = null;
130
130
  const extensionReconnectWaiters = new Set();
131
131
  const flushExtensionReconnectWaiters = (connected) => {
@@ -190,7 +190,7 @@ async function ensureChromeExtensionRelayServer(opts) {
190
190
  let nextExtensionId = 1;
191
191
  const sendToExtension = async (payload) => {
192
192
  const ws = extensionWs;
193
- if (!ws || ws.readyState !== WebSocket.OPEN) {
193
+ if (!ws || ws.readyState !== WebSocket$1.OPEN) {
194
194
  throw new Error("Chrome extension not connected");
195
195
  }
196
196
  ws.send(JSON.stringify(payload));
@@ -209,14 +209,14 @@ async function ensureChromeExtensionRelayServer(opts) {
209
209
  const broadcastToCdpClients = (evt) => {
210
210
  const msg = JSON.stringify(evt);
211
211
  for (const ws of cdpClients) {
212
- if (ws.readyState !== WebSocket.OPEN) {
212
+ if (ws.readyState !== WebSocket$1.OPEN) {
213
213
  continue;
214
214
  }
215
215
  ws.send(msg);
216
216
  }
217
217
  };
218
218
  const sendResponseToCdp = (ws, res) => {
219
- if (ws.readyState !== WebSocket.OPEN) {
219
+ if (ws.readyState !== WebSocket$1.OPEN) {
220
220
  return;
221
221
  }
222
222
  ws.send(JSON.stringify(res));
@@ -460,7 +460,7 @@ async function ensureChromeExtensionRelayServer(opts) {
460
460
  rejectUpgrade(socket, 401, "Unauthorized");
461
461
  return;
462
462
  }
463
- if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
463
+ if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
464
464
  try {
465
465
  extensionWs.terminate();
466
466
  } catch {}
@@ -497,7 +497,7 @@ async function ensureChromeExtensionRelayServer(opts) {
497
497
  clearExtensionDisconnectCleanupTimer();
498
498
  flushExtensionReconnectWaiters(true);
499
499
  const ping = setInterval(() => {
500
- if (ws.readyState !== WebSocket.OPEN) {
500
+ if (ws.readyState !== WebSocket$1.OPEN) {
501
501
  return;
502
502
  }
503
503
  ws.send(JSON.stringify({ method: "ping" }));
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.55",
3
- "commit": "c850bc2e9c5030a16672d753fdf92c14cfe8832e",
4
- "builtAt": "2026-07-12T22:55:14.749Z"
2
+ "version": "0.1.57",
3
+ "commit": "91e53d4b2c1ca02701eff503d93e889ccfaab43d",
4
+ "builtAt": "2026-07-13T13:04:23.327Z"
5
5
  }
@@ -1 +1 @@
1
- c4a6e3e507ccfdd8b130a370232c38876b21dcd70184d986652833ecac14bd0a
1
+ bfd05e986c05a91921422f61d2871d036c3e2622a756b89cd75c7ba92ccf4947
@@ -0,0 +1,43 @@
1
+ import { installPluginFromNpmSpec } from "../plugins/install.js";
2
+ import { buildNpmResolutionInstallFields } from "../plugins/installs.js";
3
+ import { finalizeInstalledPluginConfig } from "../plugins/lifecycle.js";
4
+ import { loadCapabilityCatalog } from "./catalog.js";
5
+
6
+ //#region src/capabilities/install.ts
7
+ async function installCapabilityComponent(params) {
8
+ const entry = loadCapabilityCatalog().find((candidate) => candidate.id === params.id);
9
+ if (!entry) {
10
+ throw new Error(`Unknown component: ${params.id}. Run \`fased components\` to list choices.`);
11
+ }
12
+ if (entry.delivery !== "npm-addon" || !entry.packageName || !entry.pluginId) {
13
+ throw new Error(`${entry.label} is delivered as ${entry.delivery} and cannot be installed as an add-on. See ${entry.docsPath}.`);
14
+ }
15
+ const packageSpec = params.packageSpec?.trim() || entry.packageName;
16
+ const result = await installPluginFromNpmSpec({ spec: packageSpec });
17
+ if (!result.ok) {
18
+ throw new Error(result.error);
19
+ }
20
+ const finalized = finalizeInstalledPluginConfig({
21
+ config: params.config,
22
+ pluginId: result.pluginId,
23
+ refreshManifestRegistry: true,
24
+ installRecord: {
25
+ source: "npm",
26
+ spec: packageSpec,
27
+ installPath: result.targetDir,
28
+ version: result.version,
29
+ ...buildNpmResolutionInstallFields(result.npmResolution)
30
+ }
31
+ });
32
+ return {
33
+ config: finalized.config,
34
+ entry,
35
+ pluginId: result.pluginId,
36
+ targetDir: result.targetDir,
37
+ ...result.version ? { version: result.version } : {},
38
+ slotWarnings: finalized.slotWarnings
39
+ };
40
+ }
41
+
42
+ //#endregion
43
+ export { installCapabilityComponent };
@@ -1,13 +1,11 @@
1
1
  import { theme } from "../terminal/theme.js";
2
2
  import { defaultRuntime } from "../runtime.js";
3
- import { installPluginFromNpmSpec } from "../plugins/install.js";
4
3
  import { loadConfig, writeConfigFile } from "../config/io.js";
5
4
  import "../config/config.js";
6
5
  import { formatDocsLink } from "../terminal/links.js";
6
+ import { buildCapabilityReadinessReport, formatCapabilityReadinessSummary } from "../capabilities/catalog.js";
7
+ import { installCapabilityComponent } from "../capabilities/install.js";
7
8
  import { renderTable } from "../terminal/table.js";
8
- import { buildNpmResolutionInstallFields } from "../plugins/installs.js";
9
- import { finalizeInstalledPluginConfig } from "../plugins/lifecycle.js";
10
- import { buildCapabilityReadinessReport, formatCapabilityReadinessSummary, loadCapabilityCatalog } from "../capabilities/catalog.js";
11
9
 
12
10
  //#region src/cli/components-cli.ts
13
11
  function registerComponentsCli(program) {
@@ -18,36 +16,16 @@ function registerComponentsCli(program) {
18
16
  renderComponentReport(options);
19
17
  });
20
18
  components.command("install").description("Install a cataloged optional component").argument("<id>", "Component id from `fased components`").action(async (id) => {
21
- const entry = loadCapabilityCatalog().find((candidate) => candidate.id === id);
22
- if (!entry) {
23
- throw new Error(`Unknown component: ${id}. Run \`fased components\` to list choices.`);
24
- }
25
- if (entry.delivery !== "npm-addon" || !entry.packageName || !entry.pluginId) {
26
- throw new Error(`${entry.label} is delivered as ${entry.delivery} and cannot be installed as an add-on. See ${entry.docsPath}.`);
27
- }
28
- const result = await installPluginFromNpmSpec({ spec: entry.packageName });
29
- if (!result.ok) {
30
- throw new Error(result.error);
31
- }
32
- const config = loadConfig();
33
- const finalized = finalizeInstalledPluginConfig({
34
- config,
35
- pluginId: result.pluginId,
36
- refreshManifestRegistry: true,
37
- installRecord: {
38
- source: "npm",
39
- spec: entry.packageName,
40
- installPath: result.targetDir,
41
- version: result.version,
42
- ...buildNpmResolutionInstallFields(result.npmResolution)
43
- }
19
+ const result = await installCapabilityComponent({
20
+ id,
21
+ config: loadConfig()
44
22
  });
45
- await writeConfigFile(finalized.config);
46
- for (const warning of finalized.slotWarnings) {
23
+ await writeConfigFile(result.config);
24
+ for (const warning of result.slotWarnings) {
47
25
  defaultRuntime.log(theme.warn(warning));
48
26
  }
49
- defaultRuntime.log(`Installed component: ${entry.label} (${entry.packageName})`);
50
- if (entry.restartRequired !== false) {
27
+ defaultRuntime.log(`Installed component: ${result.entry.label} (${result.entry.packageName})`);
28
+ if (result.entry.restartRequired !== false) {
51
29
  defaultRuntime.log("Restart the gateway to apply the component.");
52
30
  }
53
31
  });
@@ -38,7 +38,7 @@ function registerCronListCommand(cron) {
38
38
  }));
39
39
  }
40
40
  function registerCronAddCommand(cron) {
41
- addGatewayClientOptions(cron.command("add").alias("create").description("Add a scheduled task").requiredOption("--name <name>", "Task name").option("--description <text>", "Optional description").option("--disabled", "Create task disabled", false).option("--delete-after-run", "Delete one-shot task after it succeeds", false).option("--keep-after-run", "Keep one-shot task after it succeeds", false).option("--agent <id>", "Agent id for this task").option("--session <target>", "Session target (main|isolated)").option("--session-key <key>", "Session key for task routing (e.g. agent:my-agent:my-session)").option("--wake <mode>", "Wake mode (now|next-heartbeat)", "now").option("--at <when>", "Run once at time (ISO) or +duration (e.g. 20m)").option("--every <duration>", "Run every duration (e.g. 10m, 1h)").option("--cron <expr>", "Cron expression (5-field or 6-field with seconds)").option("--tz <iana>", "Timezone for cron expressions (IANA)", "").option("--stagger <duration>", "Cron stagger window (e.g. 30s, 5m)").option("--exact", "Disable cron staggering (set stagger to 0)", false).option("--system-event <text>", "System event payload (main session)").option("--message <text>", "Agent message payload").option("--thinking <level>", "Thinking level for agent tasks (off|minimal|low|medium|high)").option("--model <model>", "Model override for agent tasks (provider/model or alias)").option("--timeout-seconds <n>", "Timeout seconds for agent tasks").option("--announce", "Announce summary to a chat (subagent-style)", false).option("--deliver", "Deprecated (use --announce). Announces a summary to a chat.").option("--no-deliver", "Disable announce delivery and skip main-session summary").option("--channel <channel>", `Delivery channel (${getCronChannelOptions()})`, "last").option("--to <dest>", "Delivery destination (E.164, Telegram chatId, or Discord channel/user)").option("--best-effort-deliver", "Do not fail the task if delivery fails", false).option("--json", "Output JSON", false).action(async (opts, cmd) => {
41
+ addGatewayClientOptions(cron.command("add").alias("create").description("Add a scheduled task").requiredOption("--name <name>", "Task name").option("--description <text>", "Optional description").option("--disabled", "Create task disabled", false).option("--delete-after-run", "Delete one-shot task after it succeeds", false).option("--keep-after-run", "Keep one-shot task after it succeeds", false).option("--agent <id>", "Agent id for this task").option("--session <target>", "Session target (main|isolated)").option("--session-key <key>", "Session key for task routing (e.g. agent:my-agent:my-session)").option("--wake <mode>", "Wake mode (now|next-heartbeat)", "now").option("--at <when>", "Run once at time (ISO) or +duration (e.g. 20m)").option("--every <duration>", "Run every duration (e.g. 10m, 1h)").option("--cron <expr>", "Cron expression (5-field or 6-field with seconds)").option("--tz <iana>", "Timezone for cron expressions (IANA)", "").option("--stagger <duration>", "Cron stagger window (e.g. 30s, 5m)").option("--exact", "Disable cron staggering (set stagger to 0)", false).option("--system-event <text>", "System event payload (main session)").option("--message <text>", "Agent message payload").option("--thinking <level>", "Thinking level for agent tasks (off|minimal|low|medium|high|xhigh|max|ultra)").option("--model <model>", "Model override for agent tasks (provider/model or alias)").option("--timeout-seconds <n>", "Timeout seconds for agent tasks").option("--announce", "Announce summary to a chat (subagent-style)", false).option("--deliver", "Deprecated (use --announce). Announces a summary to a chat.").option("--no-deliver", "Disable announce delivery and skip main-session summary").option("--channel <channel>", `Delivery channel (${getCronChannelOptions()})`, "last").option("--to <dest>", "Delivery destination (E.164, Telegram chatId, or Discord channel/user)").option("--best-effort-deliver", "Do not fail the task if delivery fails", false).option("--json", "Output JSON", false).action(async (opts, cmd) => {
42
42
  try {
43
43
  const staggerRaw = typeof opts.stagger === "string" ? opts.stagger.trim() : "";
44
44
  const useExact = Boolean(opts.exact);
@@ -7,8 +7,8 @@ import { resolveArchiveKind } from "../infra/archive.js";
7
7
  import { loadConfig, writeConfigFile } from "../config/io.js";
8
8
  import { promptYesNo } from "./prompt.js";
9
9
  import { formatDocsLink } from "../terminal/links.js";
10
- import { renderTable } from "../terminal/table.js";
11
10
  import { buildPluginStatusReport } from "../plugins/status.js";
11
+ import { renderTable } from "../terminal/table.js";
12
12
  import { loadWorkspaceHookEntries } from "../hooks/workspace.js";
13
13
  import { buildWorkspaceHookStatus } from "../hooks/hooks-status.js";
14
14
  import { installHooksFromNpmSpec, installHooksFromPath, resolveHookInstallDir } from "../hooks/install.js";
@@ -7,13 +7,13 @@ import { installPluginFromNpmSpec, installPluginFromPath } from "../plugins/inst
7
7
  import { loadConfig, writeConfigFile } from "../config/io.js";
8
8
  import "../config/config.js";
9
9
  import { promptYesNo } from "./prompt.js";
10
- import { formatDocsLink } from "../terminal/links.js";
11
- import { renderTable } from "../terminal/table.js";
12
- import { findBundledPluginByNpmSpec } from "../plugins/bundled-sources.js";
13
10
  import { setPluginEnabledInConfig } from "../plugins/toggle-config.js";
14
11
  import { enablePluginInConfig } from "../plugins/enable.js";
12
+ import { formatDocsLink } from "../terminal/links.js";
13
+ import { findBundledPluginByNpmSpec } from "../plugins/bundled-sources.js";
15
14
  import { applySlotSelectionForPlugin, buildPluginLifecycleReport, buildPluginUninstallPreview, executePluginUninstallLifecycle, executePluginUpdateLifecycle, finalizeInstalledPluginConfig } from "../plugins/lifecycle.js";
16
15
  import { buildPluginMarketplaceReport } from "../plugins/marketplace.js";
16
+ import { renderTable } from "../terminal/table.js";
17
17
  import { buildPluginMarketplaceUpdateReview, formatPluginMarketplaceUpdateReviewWarnings } from "../plugins/marketplace-update-review.js";
18
18
  import { getPluginRuntimeSessionReadGrant, setPluginRuntimeSessionReadGrant } from "../plugins/runtime-helper-grants.js";
19
19
  import { resolvePinnedNpmInstallRecordForCli } from "./npm-resolution.js";
@@ -18,7 +18,7 @@ import "../../commands/agents.js";
18
18
 
19
19
  //#region src/cli/program/register.agent.ts
20
20
  function registerAgentCommands(program, args) {
21
- program.command("agent").description("Run an agent turn via the Gateway (use --local for embedded)").requiredOption("-m, --message <text>", "Message body for the agent").option("-t, --to <number>", "Recipient number in E.164 used to derive the session key").option("--session-id <id>", "Use an explicit session id").option("--agent <id>", "Agent id (overrides routing bindings)").option("--thinking <level>", "Thinking level: off | minimal | low | medium | high").option("--verbose <on|off>", "Persist agent verbose level for the session").option("--channel <channel>", `Delivery channel: ${args.agentChannelOptions} (omit to use the main session channel)`).option("--reply-to <target>", "Delivery target override (separate from session routing)").option("--reply-channel <channel>", "Delivery channel override (separate from routing)").option("--reply-account <id>", "Delivery account id override").option("--local", "Run the embedded agent locally (requires model provider API keys in your shell)", false).option("--deliver", "Send the agent's reply back to the selected channel", false).option("--json", "Output result as JSON", false).option("--timeout <seconds>", "Override agent command timeout (seconds, default 600 or config value)").addHelpText("after", () => `
21
+ program.command("agent").description("Run an agent turn via the Gateway (use --local for embedded)").requiredOption("-m, --message <text>", "Message body for the agent").option("-t, --to <number>", "Recipient number in E.164 used to derive the session key").option("--session-id <id>", "Use an explicit session id").option("--agent <id>", "Agent id (overrides routing bindings)").option("--thinking <level>", "Thinking level: off | minimal | low | medium | high | xhigh | max | ultra").option("--verbose <on|off>", "Persist agent verbose level for the session").option("--channel <channel>", `Delivery channel: ${args.agentChannelOptions} (omit to use the main session channel)`).option("--reply-to <target>", "Delivery target override (separate from session routing)").option("--reply-channel <channel>", "Delivery channel override (separate from routing)").option("--reply-account <id>", "Delivery account id override").option("--local", "Run the embedded agent locally (requires model provider API keys in your shell)", false).option("--deliver", "Send the agent's reply back to the selected channel", false).option("--json", "Output result as JSON", false).option("--timeout <seconds>", "Override agent command timeout (seconds, default 600 or config value)").addHelpText("after", () => `
22
22
  ${theme.heading("Examples:")}
23
23
  ${formatHelpExamples([
24
24
  ["fased agent --to +15555550123 --message \"status update\"", "Start a new session."],
@@ -9,6 +9,8 @@ import { readConfigFileSnapshot, writeConfigFile } from "../../config/io.js";
9
9
  import "../../config/config.js";
10
10
  import { loadGatewayTlsRuntime } from "../../infra/tls/gateway.js";
11
11
  import { stylePromptMessage } from "../../terminal/prompt-style.js";
12
+ import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../../plugins/update.js";
13
+ import { OPENAI_RUNTIME_COMPONENT_ID, ensureOpenAICodexRuntimeComponent, hasConfiguredOpenAICodexProfile } from "../../agents/openai-codex-runtime-component.js";
12
14
  import { DEFAULT_GIT_CHANNEL, DEFAULT_PACKAGE_CHANNEL, channelToNpmTag, normalizeUpdateChannel } from "../../infra/update-channels.js";
13
15
  import { cleanupGlobalRenameDirs, globalInstallArgs, resolveGlobalPackageRoot, resolveNodeModulesRootForPackageRoot } from "../../infra/update-global.js";
14
16
  import { checkUpdateStatus, compareSemverStrings, resolveNpmChannelTag } from "../../infra/update-check.js";
@@ -18,7 +20,6 @@ import { renderRestartDiagnostics, terminateStaleGatewayPids, waitForGatewayHeal
18
20
  import { runDaemonRestart } from "../daemon-cli/lifecycle.js";
19
21
  import "../../daemon-cli.js";
20
22
  import { installCompletion } from "../completion-cli.js";
21
- import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../../plugins/update.js";
22
23
  import { readPackageName, readPackageVersion } from "../../infra/package-json.js";
23
24
  import { finalizeUpdateTransaction, rollbackUpdateTransaction, runGatewayUpdate } from "../../infra/update-runner.js";
24
25
  import { checkShellCompletionStatus, ensureCompletionCacheExists } from "../../commands/doctor-completion.js";
@@ -422,14 +423,32 @@ async function updatePluginsAfterCoreUpdate(params) {
422
423
  config: params.configSnapshot.config,
423
424
  updateCompleted: true
424
425
  });
425
- const installs = repairResult.config.plugins?.installs ?? {};
426
+ let pluginConfig = repairResult.config;
427
+ let installedOpenAIRuntime = false;
428
+ if (hasConfiguredOpenAICodexProfile(pluginConfig)) {
429
+ const runtimeComponent = await ensureOpenAICodexRuntimeComponent({
430
+ config: pluginConfig,
431
+ version: params.targetVersion
432
+ });
433
+ pluginConfig = runtimeComponent.config;
434
+ installedOpenAIRuntime = runtimeComponent.installed;
435
+ if (runtimeComponent.installed && !params.opts.json) {
436
+ defaultRuntime.log(theme.muted("Installed the managed OpenAI sign-in runtime required by the existing ChatGPT credential."));
437
+ }
438
+ for (const warning of runtimeComponent.slotWarnings) {
439
+ if (!params.opts.json) {
440
+ defaultRuntime.log(theme.warn(warning));
441
+ }
442
+ }
443
+ }
444
+ const installs = pluginConfig.plugins?.installs ?? {};
426
445
  if (Object.keys(installs).length === 0) {
427
- if (repairResult.changed) {
428
- await writeConfigFile(repairResult.config);
446
+ if (repairResult.changed || installedOpenAIRuntime) {
447
+ await writeConfigFile(pluginConfig);
429
448
  }
430
449
  return {
431
- changed: repairResult.changed,
432
- checked: false
450
+ changed: repairResult.changed || installedOpenAIRuntime,
451
+ checked: installedOpenAIRuntime
433
452
  };
434
453
  }
435
454
  const pluginLogger = params.opts.json ? {} : {
@@ -442,25 +461,25 @@ async function updatePluginsAfterCoreUpdate(params) {
442
461
  defaultRuntime.log(theme.heading("Updating plugins..."));
443
462
  }
444
463
  const syncResult = await syncPluginsForUpdateChannel({
445
- config: repairResult.config,
464
+ config: pluginConfig,
446
465
  channel: params.channel,
447
466
  workspaceDir: params.root,
448
467
  logger: pluginLogger
449
468
  });
450
- let pluginConfig = syncResult.config;
469
+ pluginConfig = syncResult.config;
451
470
  const npmResult = await updateNpmInstalledPlugins({
452
471
  config: pluginConfig,
453
- skipIds: new Set(syncResult.summary.switchedToNpm),
472
+ skipIds: new Set([...syncResult.summary.switchedToNpm, ...installedOpenAIRuntime ? [OPENAI_RUNTIME_COMPONENT_ID] : []]),
454
473
  updateChannel: params.channel,
455
474
  logger: pluginLogger
456
475
  });
457
476
  pluginConfig = npmResult.config;
458
- if (repairResult.changed || syncResult.changed || npmResult.changed) {
477
+ if (repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed) {
459
478
  await writeConfigFile(pluginConfig);
460
479
  }
461
480
  if (params.opts.json) {
462
481
  return {
463
- changed: repairResult.changed || syncResult.changed || npmResult.changed,
482
+ changed: repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed,
464
483
  checked: true
465
484
  };
466
485
  }
@@ -511,7 +530,7 @@ async function updatePluginsAfterCoreUpdate(params) {
511
530
  defaultRuntime.log(theme.error(outcome.message));
512
531
  }
513
532
  return {
514
- changed: repairResult.changed || syncResult.changed || npmResult.changed,
533
+ changed: repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed,
515
534
  checked: true
516
535
  };
517
536
  }
@@ -802,6 +821,24 @@ async function updateCommand(opts) {
802
821
  }
803
822
  }
804
823
  if (alreadyCurrent && currentVersion && targetVersion) {
824
+ if (configSnapshot.valid && hasConfiguredOpenAICodexProfile(configSnapshot.config)) {
825
+ try {
826
+ const runtimeComponent = await ensureOpenAICodexRuntimeComponent({
827
+ config: configSnapshot.config,
828
+ version: targetVersion
829
+ });
830
+ if (runtimeComponent.installed) {
831
+ await writeConfigFile(runtimeComponent.config);
832
+ if (!opts.json) {
833
+ defaultRuntime.log(theme.muted("Installed the version-matched OpenAI sign-in runtime required by the current release."));
834
+ }
835
+ }
836
+ } catch (error) {
837
+ defaultRuntime.error(`OpenAI sign-in runtime update failed: ${String(error)}`);
838
+ defaultRuntime.exit(1);
839
+ return;
840
+ }
841
+ }
805
842
  const runningRuntime = await probeRunningGatewayRuntimeIdentity({ timeoutMs: 750 });
806
843
  if (runningRuntime.reachable && runningRuntime.version !== currentVersion) {
807
844
  if (!shouldRestart) {
@@ -1000,6 +1037,7 @@ async function updateCommand(opts) {
1000
1037
  const pluginResult = await measureUpdateStage(lifecycleTimings, "plugin updates", () => updatePluginsAfterCoreUpdate({
1001
1038
  root,
1002
1039
  channel,
1040
+ targetVersion: result.after?.version ?? targetVersion ?? undefined,
1003
1041
  configSnapshot,
1004
1042
  opts
1005
1043
  }));
@@ -1,4 +1,4 @@
1
- import { formatThinkingLevels, formatXHighModelHint, normalizeThinkLevel, supportsXHighThinking } from "../shared/model-thinking.js";
1
+ import { formatThinkingLevels, formatXHighModelHint, normalizeThinkLevel, supportsThinkingLevel, supportsXHighThinking } from "../shared/model-thinking.js";
2
2
  import { normalizeVerboseLevel } from "../auto-reply/thinking.js";
3
3
  import { defaultRuntime } from "../runtime.js";
4
4
  import { normalizeAgentId, resolveAgentIdFromSessionKey } from "../routing/session-key.js";
@@ -26,10 +26,10 @@ import { resolveSendPolicy } from "../sessions/send-policy.js";
26
26
  import { toAcpRuntimeError } from "../acp/runtime/errors.js";
27
27
  import { getAcpSessionManager } from "../acp/control-plane/manager.js";
28
28
  import { resolveAcpAgentPolicyError, resolveAcpDispatchPolicyError } from "../acp/policy.js";
29
- import { runWithModelFallback } from "../agents/model-fallback.js";
30
- import { applyModelOverrideToSessionEntry } from "../sessions/model-overrides.js";
31
29
  import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
32
30
  import { loadModelCatalog } from "../agents/model-catalog.js";
31
+ import { runWithModelFallback } from "../agents/model-fallback.js";
32
+ import { applyModelOverrideToSessionEntry } from "../sessions/model-overrides.js";
33
33
  import { buildWorkspaceSkillSnapshot } from "../agents/skills/workspace.js";
34
34
  import "../agents/skills.js";
35
35
  import { getSkillsSnapshotVersion } from "../agents/skills/refresh-state.js";
@@ -492,6 +492,25 @@ async function agentCommand(opts, runtime = defaultRuntime, deps = createDefault
492
492
  });
493
493
  }
494
494
  }
495
+ if ((resolvedThinkLevel === "max" || resolvedThinkLevel === "ultra") && !supportsThinkingLevel(provider, model, resolvedThinkLevel)) {
496
+ const explicitThink = Boolean(thinkOnce || thinkOverride);
497
+ if (explicitThink) {
498
+ throw new Error(`Thinking level "${resolvedThinkLevel}" is not supported for ${provider}/${model}. Supported levels: ${formatThinkingLevels(provider, model)}.`);
499
+ }
500
+ const unsupportedLevel = resolvedThinkLevel;
501
+ resolvedThinkLevel = "high";
502
+ if (sessionEntry && sessionStore && sessionKey && sessionEntry.thinkingLevel === unsupportedLevel) {
503
+ const entry = sessionEntry;
504
+ entry.thinkingLevel = "high";
505
+ entry.updatedAt = Date.now();
506
+ await persistSessionEntry({
507
+ sessionStore,
508
+ sessionKey,
509
+ storePath,
510
+ entry
511
+ });
512
+ }
513
+ }
495
514
  const sessionPathOpts = resolveSessionFilePathOptions({
496
515
  agentId: sessionAgentId,
497
516
  storePath
@@ -1,4 +1,5 @@
1
1
  import { openUrl } from "./onboard-helpers.js";
2
+ import { ensureOpenAICodexRuntimeComponent } from "../agents/openai-codex-runtime-component.js";
2
3
  import { normalizeApiKeyInput, validateApiKeyInput } from "./auth-choice.api-key.js";
3
4
  import { applyDefaultModelChoice } from "./auth-choice.default-model.js";
4
5
  import { createAuthChoiceAgentModelNoter, ensureApiKeyFromOptionEnvOrPrompt, normalizeSecretInputModeInput } from "./auth-choice.apply-helpers.js";
@@ -82,6 +83,14 @@ async function applyAuthChoiceOpenAI(params) {
82
83
  };
83
84
  }
84
85
  if (creds) {
86
+ const runtimeComponent = await ensureOpenAICodexRuntimeComponent({ config: nextConfig });
87
+ nextConfig = runtimeComponent.config;
88
+ for (const warning of runtimeComponent.slotWarnings) {
89
+ await params.prompter.note(warning, "OpenAI runtime warning");
90
+ }
91
+ if (runtimeComponent.installed) {
92
+ await params.prompter.note("Installed the managed OpenAI sign-in runtime for authenticated model discovery and execution.", "OpenAI runtime ready");
93
+ }
85
94
  const profileId = await writeOAuthCredentials("openai-codex", creds, params.agentDir, { syncSiblingAgents: true });
86
95
  nextConfig = applyAuthProfileConfig(nextConfig, {
87
96
  profileId,
@@ -1,8 +1,8 @@
1
1
  import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js";
2
2
  import { resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
3
3
  import { resolveFasedAgentAgentDir } from "../agents/agent-paths.js";
4
- import { resolvePluginProviders } from "../plugins/providers.js";
5
4
  import { enablePluginInConfig } from "../plugins/enable.js";
5
+ import { resolvePluginProviders } from "../plugins/providers.js";
6
6
  import { pickAuthMethod, resolveProviderMatch } from "../plugins/provider-auth-choice-helpers.js";
7
7
  import { applyPluginProviderAuthRunResult, createPluginProviderAuthContext, runInteractivePluginProviderOAuthDeviceAuth } from "../plugins/provider-auth-runtime.js";
8
8
 
@@ -14,8 +14,8 @@ import "../config/config.js";
14
14
  import { listTelegramAccountIds, resolveTelegramAccount } from "../telegram/accounts.js";
15
15
  import "../channels/registry.js";
16
16
  import { readChannelAllowFromStore } from "../pairing/pairing-store.js";
17
- import { listInterpreterLikeSafeBins, resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
18
17
  import { readWalletApprovalAuthSnapshot } from "../wallet/wallet-approval-auth.js";
18
+ import { listInterpreterLikeSafeBins, resolveMergedSafeBinProfileFixtures } from "../infra/exec-safe-bin-runtime-policy.js";
19
19
  import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js";
20
20
  import { isNumericTelegramUserId, normalizeTelegramAllowFromEntry } from "../channels/telegram/allow-from.js";
21
21
  import { collectProviderDangerousNameMatchingScopes } from "../config/dangerous-name-matching.js";
@@ -6,7 +6,7 @@ import { rawDataToString } from "../infra/ws.js";
6
6
  import { buildDeviceAuthPayload } from "../gateway/device-auth.js";
7
7
  import { PROTOCOL_VERSION } from "../gateway/protocol/schema/protocol-schemas.js";
8
8
  import "../gateway/protocol/index.js";
9
- import { WebSocket as WebSocket$1 } from "ws";
9
+ import { WebSocket } from "ws";
10
10
 
11
11
  //#region src/commands/hosted-dashboard-probe.ts
12
12
  function sanitizeErrorMessage(value) {
@@ -392,7 +392,7 @@ function probeHostedWs(params) {
392
392
  resolve(result);
393
393
  };
394
394
  const sendConnect = () => {
395
- if (!ws || ws.readyState !== WebSocket$1.OPEN || connectSent) {
395
+ if (!ws || ws.readyState !== WebSocket.OPEN || connectSent) {
396
396
  return;
397
397
  }
398
398
  connectSent = true;
@@ -438,7 +438,7 @@ function probeHostedWs(params) {
438
438
  });
439
439
  }, params.timeoutMs);
440
440
  try {
441
- ws = new WebSocket$1(params.wsUrl, {
441
+ ws = new WebSocket(params.wsUrl, {
442
442
  headers: { Origin: params.origin },
443
443
  handshakeTimeout: Math.max(1e3, Math.floor(params.timeoutMs)),
444
444
  maxPayload: 1024 * 1024
@@ -13,10 +13,10 @@ import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
13
13
  import "../agents/auth-profiles.js";
14
14
  import { getCustomProviderApiKey, resolveEnvApiKey } from "../agents/model-auth.js";
15
15
  import { buildAllowedModelSet, buildModelAliasIndex, modelKey, normalizeProviderId, resolveConfiguredModelRef } from "../agents/model-selection.js";
16
- import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
17
16
  import { formatModelFeatureList } from "../agents/model-metadata.js";
18
- import { loadModelCatalog } from "../agents/model-catalog.js";
17
+ import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
19
18
  import { resolveAuthenticatedModelCatalog } from "../agents/authenticated-model-catalog.js";
19
+ import { loadModelCatalog } from "../agents/model-catalog.js";
20
20
  import { loadPreviewModelListSources } from "./models/list.preview-catalog.js";
21
21
  import { formatTokenK } from "./models/shared.js";
22
22
  import { OPENAI_CODEX_DEFAULT_MODEL } from "./openai-codex-model-default.js";
@@ -222,7 +222,8 @@ async function loadModelPickerCatalog(cfg, agentDir) {
222
222
  cfg,
223
223
  store,
224
224
  catalog: standardModels,
225
- defaultProvider: DEFAULT_PROVIDER
225
+ defaultProvider: DEFAULT_PROVIDER,
226
+ agentDir
226
227
  });
227
228
  return authenticated.allowedCatalog.length > 0 ? authenticated.allowedCatalog : authenticated.usableCatalog;
228
229
  }
@@ -11,8 +11,8 @@ import { getCustomProviderApiKey, resolveEnvApiKey } from "../../agents/model-au
11
11
  import { findNormalizedProviderValue, normalizeProviderId, parseModelRef } from "../../agents/model-selection.js";
12
12
  import { resolveSessionTranscriptPath, resolveSessionTranscriptsDirForAgent } from "../../config/sessions/paths.js";
13
13
  import "../../agents/pi-embedded.js";
14
- import { describeFailoverError } from "../../agents/failover-error.js";
15
14
  import { loadModelCatalog } from "../../agents/model-catalog.js";
15
+ import { describeFailoverError } from "../../agents/failover-error.js";
16
16
  import { runEmbeddedPiAgent } from "../../agents/pi-embedded-runner/run.js";
17
17
  import { redactSecrets } from "../status-all/format.js";
18
18
  import { formatMs } from "./shared.js";
@@ -6,8 +6,8 @@ import { modelKey } from "../../agents/model-selection.js";
6
6
  import { ensureFasedAgentModelsJson } from "../../agents/models-config.js";
7
7
  import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js";
8
8
  import { deriveModelMetadata, formatModelFeatureList } from "../../agents/model-metadata.js";
9
- import { loadModelCatalog } from "../../agents/model-catalog.js";
10
9
  import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
10
+ import { loadModelCatalog } from "../../agents/model-catalog.js";
11
11
  import { isLocalBaseUrl } from "./shared.js";
12
12
  import { createModelListAuthIndex } from "./list.auth-index.js";
13
13
  import { MODEL_AVAILABILITY_UNAVAILABLE_CODE, formatErrorWithStack, shouldFallbackToAuthHeuristics } from "./list.errors.js";
@@ -78,7 +78,8 @@ async function loadModelRegistry(cfg) {
78
78
  cfg,
79
79
  store,
80
80
  catalog,
81
- defaultProvider: DEFAULT_PROVIDER
81
+ defaultProvider: DEFAULT_PROVIDER,
82
+ agentDir
82
83
  });
83
84
  const models = authenticated.usableCatalog.map((model) => normalizeModelListSource(model));
84
85
  let availableKeys;
@@ -16,12 +16,12 @@ import "../../agents/auth-profiles.js";
16
16
  import { resolveEnvApiKey } from "../../agents/model-auth.js";
17
17
  import { buildModelAliasIndex, parseModelRef, resolveConfiguredModelRef, resolveDefaultModelForAgent, resolveModelRefFromString } from "../../agents/model-selection.js";
18
18
  import { withProgressTotals } from "../../cli/progress.js";
19
+ import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
20
+ import { loadModelCatalog } from "../../agents/model-catalog.js";
19
21
  import { resolveUsageProviderId } from "../../infra/provider-usage.shared.js";
20
22
  import { formatUsageWindowSummary } from "../../infra/provider-usage.format.js";
21
23
  import { loadProviderUsageSummary } from "../../infra/provider-usage.load.js";
22
24
  import "../../infra/provider-usage.js";
23
- import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
24
- import { loadModelCatalog } from "../../agents/model-catalog.js";
25
25
  import { renderTable } from "../../terminal/table.js";
26
26
  import { buildModelCatalogStatus } from "../../agents/model-catalog-status.js";
27
27
  import { DEFAULT_OAUTH_WARN_MS, buildAuthHealthSummary, formatRemainingShort } from "../../agents/auth-health.js";
@@ -4,11 +4,11 @@ import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent
4
4
  import { formatCliCommand } from "../cli/command-format.js";
5
5
  import { getChannelPlugin, listChannelPlugins } from "../channels/plugins/index.js";
6
6
  import { formatChannelPrimerLine, formatChannelSelectionLine, listChatChannels } from "../channels/registry.js";
7
+ import { enablePluginInConfig } from "../plugins/enable.js";
7
8
  import { formatDocsLink } from "../terminal/links.js";
8
9
  import { formatChannelPluginCatalogSelectionHint, formatChannelPluginCatalogStatusLine, listChannelPluginCatalogEntries } from "../channels/plugins/catalog.js";
9
10
  import { isChannelConfigured } from "../config/plugin-auto-enable.js";
10
11
  import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js";
11
- import { enablePluginInConfig } from "../plugins/enable.js";
12
12
  import { ensureOnboardingPluginInstalled, reloadOnboardingPluginRegistry } from "./onboarding/plugin-install.js";
13
13
  import { getChannelOnboardingAdapter, listChannelOnboardingAdapters } from "./onboarding/registry.js";
14
14
 
@@ -2,11 +2,11 @@ import { createSubsystemLogger } from "../../logging/subsystem.js";
2
2
  import { resolveFasedAgentPackageRootSync } from "../../infra/fased-root.js";
3
3
  import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js";
4
4
  import { installPluginFromNpmSpec } from "../../plugins/install.js";
5
+ import { buildNpmResolutionInstallFields } from "../../plugins/installs.js";
5
6
  import { loadFasedAgentPlugins } from "../../plugins/loader.js";
6
7
  import { createPluginLoaderLogger } from "../../plugins/logger.js";
7
- import { resolveChannelPluginExpectedPluginIds } from "../../channels/plugins/catalog.js";
8
- import { buildNpmResolutionInstallFields } from "../../plugins/installs.js";
9
8
  import { finalizeInstalledPluginConfig } from "../../plugins/lifecycle.js";
9
+ import { resolveChannelPluginExpectedPluginIds } from "../../channels/plugins/catalog.js";
10
10
  import fs from "node:fs";
11
11
  import path from "node:path";
12
12
 
@@ -1,8 +1,8 @@
1
1
  import { DEFAULT_PROVIDER } from "../agents/defaults.js";
2
2
  import { ensureAuthProfileStore } from "../agents/auth-profiles/store.js";
3
3
  import "../agents/auth-profiles.js";
4
- import { loadModelCatalog } from "../agents/model-catalog.js";
5
4
  import { resolveAuthenticatedModelCatalog } from "../agents/authenticated-model-catalog.js";
5
+ import { loadModelCatalog } from "../agents/model-catalog.js";
6
6
 
7
7
  //#region src/commands/openai-codex-model-default.ts
8
8
  const OPENAI_CODEX_DEFAULT_MODEL = "openai-codex/gpt-5.5";
@@ -17,7 +17,8 @@ async function discoverOpenAICodexDefaultModel(params) {
17
17
  cfg: params.config,
18
18
  store,
19
19
  catalog,
20
- defaultProvider: DEFAULT_PROVIDER
20
+ defaultProvider: DEFAULT_PROVIDER,
21
+ agentDir: params.agentDir
21
22
  });
22
23
  const model = authenticated.usableCatalog.filter((entry) => entry.provider === "openai-codex").toSorted((left, right) => (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name))[0];
23
24
  return model ? `${model.provider}/${model.id}` : undefined;
@@ -90,7 +90,8 @@ const AgentDefaultsSchema = z.object({
90
90
  z.literal("medium"),
91
91
  z.literal("high"),
92
92
  z.literal("xhigh"),
93
- z.literal("max")
93
+ z.literal("max"),
94
+ z.literal("ultra")
94
95
  ]).optional(),
95
96
  reasoningDefault: z.union([
96
97
  z.literal("off"),
@@ -99,7 +100,8 @@ const AgentDefaultsSchema = z.object({
99
100
  z.literal("medium"),
100
101
  z.literal("high"),
101
102
  z.literal("xhigh"),
102
- z.literal("max")
103
+ z.literal("max"),
104
+ z.literal("ultra")
103
105
  ]).optional(),
104
106
  fastModeDefault: z.boolean().optional(),
105
107
  verboseDefault: z.union([