@fased/fased 0.1.54 → 0.1.56

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 (465) hide show
  1. package/config/capability-catalog.json +12 -0
  2. package/dist/acp/client.js +2 -2
  3. package/dist/acp/secret-file.js +2 -2
  4. package/dist/agents/agent-scope.js +2 -2
  5. package/dist/agents/apply-patch.js +8 -8
  6. package/dist/agents/auth-profiles/paths.js +2 -2
  7. package/dist/agents/auth-profiles/store.js +2 -2
  8. package/dist/agents/authenticated-model-catalog.js +28 -0
  9. package/dist/agents/bash-tools.exec-host-node.js +1 -1
  10. package/dist/agents/bash-tools.exec.js +1 -1
  11. package/dist/agents/bash-tools.shared.js +2 -2
  12. package/dist/agents/cli-credentials.js +4 -4
  13. package/dist/agents/copilot-dynamic-headers.js +37 -0
  14. package/dist/agents/current-model-catalog.js +9 -13
  15. package/dist/agents/docs-path.js +3 -3
  16. package/dist/agents/embedded-pi-mcp.js +4 -4
  17. package/dist/agents/identity-avatar.js +3 -3
  18. package/dist/agents/identity-file.js +2 -2
  19. package/dist/agents/model-catalog-normalized.js +1 -0
  20. package/dist/agents/model-catalog-source.js +2 -2
  21. package/dist/agents/model-catalog.js +1 -1
  22. package/dist/agents/model-metadata.js +58 -9
  23. package/dist/agents/openai-codex-app-server.js +499 -0
  24. package/dist/agents/pi-embedded-runner/compact.js +3 -3
  25. package/dist/agents/pi-embedded-runner/extra-params.js +168 -79
  26. package/dist/agents/pi-embedded-runner/model.js +62 -1
  27. package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
  28. package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
  29. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
  30. package/dist/agents/pi-embedded-runner/run.js +5 -2
  31. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  32. package/dist/agents/pi-embedded-runner.js +1 -1
  33. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  34. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  35. package/dist/agents/pi-model-discovery.js +6 -6
  36. package/dist/agents/pi-project-settings.js +3 -3
  37. package/dist/agents/pi-tools.js +2 -2
  38. package/dist/agents/sandbox/fs-bridge.js +2 -2
  39. package/dist/agents/session-dirs.js +4 -4
  40. package/dist/agents/session-write-lock.js +13 -13
  41. package/dist/agents/shell-utils.js +5 -5
  42. package/dist/agents/skills/bundled-dir.js +4 -4
  43. package/dist/agents/skills/local-loader.js +6 -6
  44. package/dist/agents/skills/plugin-skills.js +2 -2
  45. package/dist/agents/skills/workspace.js +13 -13
  46. package/dist/agents/skills-install-download.js +7 -7
  47. package/dist/agents/skills-install-plan.js +2 -2
  48. package/dist/agents/skills-install.js +2 -2
  49. package/dist/agents/skills-status.js +2 -2
  50. package/dist/agents/subagent-depth.js +2 -2
  51. package/dist/agents/system-prompt-params.js +2 -2
  52. package/dist/agents/tools/discord-actions-messaging.js +1 -1
  53. package/dist/agents/tools/message-tool.js +1 -1
  54. package/dist/agents/tools/session-status-tool.js +3 -3
  55. package/dist/agents/tools/slack-actions.js +1 -1
  56. package/dist/agents/tools/tts-tool.js +1 -1
  57. package/dist/agents/workspace.js +22 -22
  58. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  59. package/dist/auto-reply/reply/agent-runner.js +2 -2
  60. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  61. package/dist/auto-reply/reply/commands-models.js +1 -1
  62. package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
  63. package/dist/auto-reply/reply/dispatch-acp.js +1 -1
  64. package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
  65. package/dist/auto-reply/reply/get-reply-run.js +20 -2
  66. package/dist/auto-reply/reply/model-selection.js +1 -1
  67. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  68. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  69. package/dist/auto-reply/reply/session-reset-model.js +1 -1
  70. package/dist/auto-reply/reply/session.js +3 -3
  71. package/dist/auto-reply/skill-commands.js +3 -3
  72. package/dist/auto-reply/status.js +7 -7
  73. package/dist/auto-reply/thinking.js +1 -1
  74. package/dist/brand.js +1 -1
  75. package/dist/browser/cdp.helpers.js +2 -2
  76. package/dist/browser/chrome.executables.js +3 -3
  77. package/dist/browser/chrome.js +5 -5
  78. package/dist/browser/chrome.profile-decoration.js +6 -6
  79. package/dist/browser/extension-relay.js +7 -7
  80. package/dist/browser/profiles-service.js +2 -2
  81. package/dist/browser/server-context.js +2 -2
  82. package/dist/browser/trash.js +4 -4
  83. package/dist/build-info.json +3 -3
  84. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  85. package/dist/canvas-host/server.js +4 -4
  86. package/dist/capabilities/catalog.js +3 -3
  87. package/dist/channels/plugins/catalog.js +3 -3
  88. package/dist/cli/browser-cli-extension.js +6 -6
  89. package/dist/cli/command-format.js +2 -2
  90. package/dist/cli/cron-cli/register.cron-add.js +1 -1
  91. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  92. package/dist/cli/dns-cli.js +9 -9
  93. package/dist/cli/gateway-cli/dev.js +5 -5
  94. package/dist/cli/gateway-cli/run.js +2 -2
  95. package/dist/cli/hooks-cli.js +5 -5
  96. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  97. package/dist/cli/memory-cli.js +7 -7
  98. package/dist/cli/nodes-media-utils.js +2 -2
  99. package/dist/cli/plugins-cli.js +2 -2
  100. package/dist/cli/program/register.agent.js +1 -1
  101. package/dist/cli/providers-cli.js +3 -2
  102. package/dist/cli/secrets-cli.js +3 -3
  103. package/dist/cli/windows-argv.js +2 -2
  104. package/dist/commands/agent.js +22 -3
  105. package/dist/commands/auth-choice.apply.api-providers.js +3 -8
  106. package/dist/commands/auth-choice.apply.openai.js +13 -7
  107. package/dist/commands/auth-choice.model-check.js +1 -2
  108. package/dist/commands/configure.gateway-auth.js +14 -16
  109. package/dist/commands/dashboard-link.js +3 -3
  110. package/dist/commands/doctor-config-flow.js +1 -1
  111. package/dist/commands/doctor-install.js +5 -5
  112. package/dist/commands/doctor-memory-search.js +2 -2
  113. package/dist/commands/doctor-platform-notes.js +2 -2
  114. package/dist/commands/doctor-sandbox.js +2 -2
  115. package/dist/commands/doctor-state-integrity.js +23 -23
  116. package/dist/commands/doctor-workspace.js +3 -3
  117. package/dist/commands/doctor.js +3 -3
  118. package/dist/commands/hosted-dashboard-probe.js +3 -3
  119. package/dist/commands/managed-up.js +2 -2
  120. package/dist/commands/model-picker.js +27 -8
  121. package/dist/commands/models/list.probe.js +1 -1
  122. package/dist/commands/models/list.registry.js +13 -17
  123. package/dist/commands/models/list.status-command.js +2 -2
  124. package/dist/commands/onboard-auth.config-core.js +1 -1
  125. package/dist/commands/onboard-auth.config-litellm.js +21 -21
  126. package/dist/commands/onboard-auth.credentials.js +3 -4
  127. package/dist/commands/onboard-auth.js +0 -1
  128. package/dist/commands/onboarding/plugin-install.js +2 -2
  129. package/dist/commands/openai-codex-model-default.js +28 -5
  130. package/dist/commands/sessions-cleanup.js +2 -2
  131. package/dist/commands/signal-install.js +6 -6
  132. package/dist/commands/status-all/channels.js +2 -2
  133. package/dist/commands/wallet.js +47 -47
  134. package/dist/config/cache-utils.js +2 -2
  135. package/dist/config/includes.js +5 -5
  136. package/dist/config/io.js +2 -2
  137. package/dist/config/paths.js +3 -3
  138. package/dist/config/sat-runtime-ids.js +3 -3
  139. package/dist/config/sessions/disk-budget.js +6 -6
  140. package/dist/config/sessions/paths.js +2 -2
  141. package/dist/config/sessions/store.js +17 -17
  142. package/dist/config/sessions/transcript.js +4 -4
  143. package/dist/config/talk.js +2 -2
  144. package/dist/config/zod-schema.agent-defaults.js +6 -2
  145. package/dist/config/zod-schema.agent-runtime.js +6 -2
  146. package/dist/config/zod-schema.core.js +6 -2
  147. package/dist/control-ui/assets/{app-BKlu6OKz.js → app-D7TXyNRi.js} +1548 -1540
  148. package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
  149. package/dist/control-ui/assets/{index-nrFcGMv-.js → index-BmSBom-w.js} +3 -3
  150. package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-Cc89iMdx.js} +5 -5
  151. package/dist/control-ui/index.html +1 -1
  152. package/dist/control-ui/version.json +1 -0
  153. package/dist/cron/isolated-agent/run.js +6 -2
  154. package/dist/cron/service/jobs.js +11 -1
  155. package/dist/cron/service/store.js +2 -2
  156. package/dist/cron/store.js +6 -6
  157. package/dist/daemon/systemd-system.js +5 -5
  158. package/dist/discord/monitor/gateway-plugin.js +2 -2
  159. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  160. package/dist/discord/voice/manager.js +1 -1
  161. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  162. package/dist/gateway/client.js +4 -4
  163. package/dist/gateway/control-ui-boot-check.js +6 -6
  164. package/dist/gateway/control-ui-login.js +7 -7
  165. package/dist/gateway/control-ui.js +11 -9
  166. package/dist/gateway/hooks-mapping.js +4 -4
  167. package/dist/gateway/protocol/schema/agents-models-skills.js +66 -4
  168. package/dist/gateway/server-discovery.js +2 -2
  169. package/dist/gateway/server-http.js +4 -4
  170. package/dist/gateway/server-methods/chat.js +3 -3
  171. package/dist/gateway/server-methods/models.js +8 -8
  172. package/dist/gateway/server-methods/sessions.js +8 -8
  173. package/dist/gateway/server-methods/tts.js +2 -2
  174. package/dist/gateway/server-methods/usage.js +2 -2
  175. package/dist/gateway/server-model-catalog.js +3 -0
  176. package/dist/gateway/server.impl.js +3 -3
  177. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  178. package/dist/gateway/session-utils.fs.js +24 -24
  179. package/dist/gateway/session-utils.js +6 -6
  180. package/dist/gateway/sessions-patch.js +27 -24
  181. package/dist/hooks/bundled-dir.js +4 -4
  182. package/dist/hooks/gmail-setup-utils.js +6 -6
  183. package/dist/hooks/import-url.js +2 -2
  184. package/dist/hooks/loader.js +4 -4
  185. package/dist/hooks/workspace.js +7 -7
  186. package/dist/infra/archive.js +17 -17
  187. package/dist/infra/boundary-file-read.js +2 -2
  188. package/dist/infra/boundary-path.js +15 -15
  189. package/dist/infra/brew.js +2 -2
  190. package/dist/infra/control-ui-assets.js +14 -14
  191. package/dist/infra/device-auth-store.js +8 -8
  192. package/dist/infra/device-identity.js +8 -8
  193. package/dist/infra/dotenv.js +2 -2
  194. package/dist/infra/exec-approvals.js +8 -8
  195. package/dist/infra/exec-command-resolution.js +4 -4
  196. package/dist/infra/exec-safe-bin-trust.js +2 -2
  197. package/dist/infra/fased-root.js +5 -5
  198. package/dist/infra/fs-safe.js +14 -14
  199. package/dist/infra/gateway-lock.js +11 -11
  200. package/dist/infra/git-commit.js +5 -5
  201. package/dist/infra/git-root.js +4 -4
  202. package/dist/infra/hosted-runtime-artifact.js +3 -3
  203. package/dist/infra/is-main.js +2 -2
  204. package/dist/infra/json-file.js +7 -7
  205. package/dist/infra/outbound/delivery-queue.js +16 -16
  206. package/dist/infra/path-env.js +3 -3
  207. package/dist/infra/ports-lsof.js +4 -4
  208. package/dist/infra/provider-usage.auth.js +3 -3
  209. package/dist/infra/safe-open-sync.js +2 -2
  210. package/dist/infra/session-cost-usage.js +9 -9
  211. package/dist/infra/shell-env.js +2 -2
  212. package/dist/infra/state-migrations.fs.js +6 -6
  213. package/dist/infra/state-migrations.js +23 -23
  214. package/dist/infra/tmp-fased-dir.js +6 -6
  215. package/dist/infra/update-runner.js +31 -3
  216. package/dist/infra/widearea-dns.js +3 -3
  217. package/dist/infra/wsl.js +2 -2
  218. package/dist/light-update-status.js +1 -1
  219. package/dist/line/accounts.js +2 -2
  220. package/dist/line/download.js +2 -2
  221. package/dist/logging/config.js +3 -3
  222. package/dist/logging/logger.js +7 -7
  223. package/dist/managed/federation.js +3 -3
  224. package/dist/managed/tunnel.js +3 -3
  225. package/dist/media/store.js +13 -13
  226. package/dist/media-understanding/runner.js +3 -3
  227. package/dist/memory/embeddings.js +2 -2
  228. package/dist/memory/internal.js +10 -10
  229. package/dist/memory/inventory.js +19 -2
  230. package/dist/memory/manager-sync-ops.js +7 -7
  231. package/dist/memory/repair-executor.js +17 -17
  232. package/dist/node-host/invoke-system-run-plan.js +8 -8
  233. package/dist/node-host/invoke.js +2 -2
  234. package/dist/node-host/runner.js +3 -3
  235. package/dist/pairing/pairing-store.js +3 -3
  236. package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-DzWlKv1U.js} +1 -1
  237. package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-BplQVLL6.js} +4 -4
  238. package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-x4MLhYUw.js} +1 -1
  239. package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
  240. package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-G8h3Sn8_.js} +43 -47
  241. package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-CWknklvI.js} +1 -1
  242. package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-a9Dnfw7-.js} +1 -1
  243. package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.js → channel-access-configure-CD4QDN5E.js} +1 -1
  244. package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
  245. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  246. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  247. package/dist/plugin-sdk/{chunk-B2ffJ-LR.js → chunk-B8EZkwiT.js} +1 -1
  248. package/dist/plugin-sdk/{chunk-items-jOdkyP53.js → chunk-items-CEPklxGe.js} +1 -1
  249. package/dist/plugin-sdk/command-status.d.ts +2 -2
  250. package/dist/plugin-sdk/command-status.js +43 -47
  251. package/dist/plugin-sdk/{commands-registry-BWb4NcfW.js → commands-registry-BfEa4tFA.js} +2 -2
  252. package/dist/plugin-sdk/{common-C4XrB73N.js → common-CbfckC19.js} +1 -1
  253. package/dist/plugin-sdk/{config-rySyVtKs.js → config-Bt5GhnA-.js} +105 -73
  254. package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-B9DKr6J5.js} +96239 -81587
  255. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  256. package/dist/plugin-sdk/device-pair.js +2 -3
  257. package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
  258. package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
  259. package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
  260. package/dist/plugin-sdk/discord.d.ts +5 -5
  261. package/dist/plugin-sdk/discord.js +31 -32
  262. package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
  263. package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
  264. package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
  265. package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
  266. package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
  267. package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
  268. package/dist/plugin-sdk/{handle-action-CGF-Qnp0.js → handle-action-DbzZFYnG.js} +24 -25
  269. package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-CluGKuIV.js} +1 -1
  270. package/dist/plugin-sdk/{image-ops-CcBfoMLW.js → image-ops-CUaLtIFj.js} +1 -1
  271. package/dist/plugin-sdk/index.d.ts +8 -8
  272. package/dist/plugin-sdk/index.js +47 -51
  273. package/dist/plugin-sdk/json-store.js +6 -6
  274. package/dist/plugin-sdk/{login-DpDQyM7r.js → login-DJuHYDiK.js} +3 -3
  275. package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-CbHL5ayf.js} +3 -3
  276. package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-oHAvZCT3.js} +7 -7
  277. package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-Mkx7k92Y.js} +1 -1
  278. package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-CA8sTmVE.js} +4 -4
  279. package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-CZrN9pev.js} +51 -55
  280. package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-CmwGqNyV.js} +61 -65
  281. package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-CWOd4war.js} +43 -47
  282. package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
  283. package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-0oN9IfNw.js} +9 -9
  284. package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DdVkqUzE.js} +2 -2
  285. package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
  286. package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-ClqhfCUk.js} +1 -1
  287. package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-B01mCSct.js} +2 -2
  288. package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
  289. package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
  290. package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
  291. package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
  292. package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
  293. package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
  294. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  295. package/dist/plugin-sdk/{pw-ai-CMplwiwf.js → pw-ai-B0domrii.js} +6 -8
  296. package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
  297. package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
  298. package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-1macZ1mZ.js} +4 -4
  299. package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
  300. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
  301. package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
  302. package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-CkNIKKEW.js} +1 -1
  303. package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
  304. package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
  305. package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-9ybIh4Fq.js} +1 -1
  306. package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-Dy420wBu.js} +3 -3
  307. package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.js → runtime-dependency-CIw9t7-k.js} +123 -15
  308. package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
  309. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  310. package/dist/plugin-sdk/sat-runtime.js +44 -10
  311. package/dist/plugin-sdk/{send-D264hFVb.js → send-2VcOMTN5.js} +9 -9
  312. package/dist/plugin-sdk/{send-CgyS75Av.js → send-BQUtCJFW.js} +10 -10
  313. package/dist/plugin-sdk/{send-D58yEeH4.js → send-DPJIIYAs.js} +6 -6
  314. package/dist/plugin-sdk/{send-C7x6gzSl.js → send-Dqes9tdU.js} +13 -13
  315. package/dist/plugin-sdk/{send-DrAtUGLM.js → send-J4JWKP62.js} +8 -8
  316. package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C_n2S5ub.js} +3 -3
  317. package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-B7wx9ax8.js} +102 -102
  318. package/dist/plugin-sdk/{slack-C-I6q3NB.js → slack-BouRQG-W.js} +64 -68
  319. package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-CasHVtiq.js} +20 -21
  320. package/dist/plugin-sdk/slack.d.ts +5 -5
  321. package/dist/plugin-sdk/slack.js +13 -13
  322. package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
  323. package/dist/plugin-sdk/{sticker-cache-DCrDTYIi.js → sticker-cache-BvGEUas3.js} +3 -3
  324. package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-CjlQJV4r.js} +2 -2
  325. package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
  326. package/dist/plugin-sdk/{targets-znKHngSk.js → targets-QfP164Dh.js} +2 -2
  327. package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.js → telegram-actions-CwYjV6Db.js} +48 -52
  328. package/dist/plugin-sdk/telegram.d.ts +5 -5
  329. package/dist/plugin-sdk/telegram.js +11 -11
  330. package/dist/plugin-sdk/{thread-bindings.lifecycle-ClzPBK70.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
  331. package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-BgYWFjNF.js} +2 -2
  332. package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
  333. package/dist/plugin-sdk/{types-DV5TNhMK.d.ts → types-BYDL6dQj.d.ts} +2 -2
  334. package/dist/plugin-sdk/{types-BI2njxWJ.d.ts → types-CLIvQaVg.d.ts} +39 -5
  335. package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-DyhXnYUr.d.ts} +1 -1
  336. package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-_fbu40Re.d.ts} +8 -5
  337. package/dist/plugin-sdk/{web-CJMfhGFY.js → web-D0yENDve.js} +52 -56
  338. package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BT2nPLyo.js} +18 -19
  339. package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
  340. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  341. package/dist/plugin-sdk/whatsapp.js +14 -14
  342. package/dist/plugin-sdk/{wsl-D5jDUlms.js → wsl-B_ojyEtC.js} +53 -53
  343. package/dist/plugins/bundled-dir.js +3 -3
  344. package/dist/plugins/discovery.js +11 -11
  345. package/dist/plugins/loader.js +13 -13
  346. package/dist/plugins/manifest-registry.js +2 -2
  347. package/dist/plugins/manifest.js +4 -4
  348. package/dist/plugins/path-safety.js +3 -3
  349. package/dist/plugins/runtime/index.js +1 -1
  350. package/dist/plugins/status-cache.js +9 -9
  351. package/dist/plugins/update.js +3 -3
  352. package/dist/plugins/web-search-install-catalog.js +3 -3
  353. package/dist/providers/github-copilot-model-discovery.js +51 -0
  354. package/dist/providers/litellm-models.js +1 -1
  355. package/dist/providers/openai-codex-model-discovery.js +166 -0
  356. package/dist/providers/refresh.js +311 -67
  357. package/dist/providers/registry.js +16 -6
  358. package/dist/providers/runtime-model-catalog.js +250 -0
  359. package/dist/secrets/apply.js +16 -16
  360. package/dist/secrets/audit.js +11 -11
  361. package/dist/secrets/shared.js +9 -9
  362. package/dist/security/scan-paths.js +2 -2
  363. package/dist/shared/config-eval.js +2 -2
  364. package/dist/shared/model-thinking.js +54 -4
  365. package/dist/shared/pid-alive.js +2 -2
  366. package/dist/tasks/standing-orders.js +5 -5
  367. package/dist/tasks/task-flow-registry.js +5 -5
  368. package/dist/tasks/task-registry.js +5 -5
  369. package/dist/tasks/workflow-definitions.js +6 -6
  370. package/dist/telegram/bot-message-context.js +1 -1
  371. package/dist/telegram/token.js +5 -5
  372. package/dist/utils.js +5 -5
  373. package/dist/wallet/local-socket-signer-broker.js +16 -16
  374. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  375. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  376. package/dist/wallet/wallet-approval-auth.js +5 -5
  377. package/dist/wallet/wallet-audit-log.js +5 -5
  378. package/dist/wallet/wallet-custody.js +21 -21
  379. package/dist/wallet/wallet-inbound-events.js +5 -5
  380. package/dist/wallet/wallet-observability.js +5 -5
  381. package/dist/wallet/wallet-policy.js +9 -9
  382. package/dist/wallet/wallet-provider-registry.js +7 -7
  383. package/dist/wallet/wallet-runtime-config.js +3 -3
  384. package/dist/wallet/wallet-secrets-store.js +22 -22
  385. package/dist/wallet/wallet-send-approvals.js +5 -5
  386. package/dist/wallet/wallet-settlement-links.js +5 -5
  387. package/dist/web/accounts.js +3 -3
  388. package/dist/web/auth-store.js +18 -18
  389. package/dist/web/session.js +4 -4
  390. package/dist/wizard/host-security-capability.js +2 -2
  391. package/dist/wizard/onboarding.host-security.js +7 -7
  392. package/dist/wizard/onboarding.js +31 -13
  393. package/dist/wizard/onboarding.wallet.js +44 -44
  394. package/extensions/acpx/package.json +1 -1
  395. package/extensions/bluebubbles/package.json +1 -1
  396. package/extensions/copilot-proxy/package.json +1 -1
  397. package/extensions/diagnostics-otel/package.json +1 -1
  398. package/extensions/fased-federation/package.json +1 -1
  399. package/extensions/google-gemini-cli-auth/package.json +1 -1
  400. package/extensions/imessage/package.json +1 -1
  401. package/extensions/irc/package.json +1 -1
  402. package/extensions/line/package.json +1 -1
  403. package/extensions/llm-task/package.json +1 -1
  404. package/extensions/lobster/package.json +1 -1
  405. package/extensions/matrix/CHANGELOG.md +12 -0
  406. package/extensions/matrix/package.json +1 -1
  407. package/extensions/mattermost/package.json +1 -1
  408. package/extensions/memory-core/package.json +2 -2
  409. package/extensions/memory-lancedb/package.json +1 -1
  410. package/extensions/minimax-portal-auth/package.json +1 -1
  411. package/extensions/msteams/CHANGELOG.md +12 -0
  412. package/extensions/msteams/package.json +1 -1
  413. package/extensions/nextcloud-talk/package.json +1 -1
  414. package/extensions/nostr/CHANGELOG.md +12 -0
  415. package/extensions/nostr/package.json +1 -1
  416. package/extensions/open-prose/package.json +1 -1
  417. package/extensions/sat-mining/package.json +1 -1
  418. package/extensions/signal/package.json +1 -1
  419. package/extensions/synology-chat/package.json +1 -1
  420. package/extensions/tlon/package.json +1 -1
  421. package/extensions/twitch/CHANGELOG.md +12 -0
  422. package/extensions/twitch/package.json +1 -1
  423. package/extensions/voice-call/CHANGELOG.md +12 -0
  424. package/extensions/voice-call/package.json +1 -1
  425. package/extensions/zalo/CHANGELOG.md +12 -0
  426. package/extensions/zalo/package.json +1 -1
  427. package/extensions/zalouser/CHANGELOG.md +12 -0
  428. package/extensions/zalouser/package.json +1 -1
  429. package/package.json +2 -1
  430. package/dist/control-ui/assets/chat-model-ref-B9sWop67.js +0 -2
  431. package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
  432. package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
  433. package/dist/plugin-sdk/wallet-status-CyovJojz.js +0 -11944
  434. package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
  435. /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
  436. /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
  437. /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
  438. /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
  439. /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
  440. /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
  441. /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
  442. /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
  443. /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
  444. /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
  445. /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
  446. /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
  447. /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
  448. /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
  449. /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
  450. /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
  451. /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
  452. /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
  453. /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
  454. /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
  455. /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
  456. /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
  457. /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
  458. /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
  459. /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
  460. /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
  461. /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
  462. /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
  463. /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
  464. /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
  465. /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
@@ -147,6 +147,18 @@
147
147
  "surface": "Services > Browser",
148
148
  "description": "Chrome, Chromium, Brave, Edge, remote CDP, or the extension relay."
149
149
  },
150
+ {
151
+ "id": "openai-runtime",
152
+ "label": "OpenAI Sign-In Runtime",
153
+ "category": "provider",
154
+ "delivery": "npm-addon",
155
+ "packageName": "@fased/openai-runtime",
156
+ "pluginId": "openai-runtime",
157
+ "restartRequired": false,
158
+ "docsPath": "/providers/openai",
159
+ "surface": "Agent > Models",
160
+ "description": "Official Codex app-server runtime for ChatGPT sign-in model discovery and execution."
161
+ },
150
162
  {
151
163
  "id": "ollama",
152
164
  "label": "Ollama",
@@ -2,7 +2,7 @@ import { isKnownCoreToolId } from "../agents/tool-catalog.js";
2
2
  import { DANGEROUS_ACP_TOOLS } from "../security/dangerous-tools.js";
3
3
  import { ensureFasedAgentCliOnPath } from "../infra/path-env.js";
4
4
  import { fileURLToPath } from "node:url";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import { homedir } from "node:os";
7
7
  import path from "node:path";
8
8
  import { spawn } from "node:child_process";
@@ -269,7 +269,7 @@ function resolveSelfEntryPath() {
269
269
  try {
270
270
  const here = fileURLToPath(import.meta.url);
271
271
  const candidate = path.resolve(path.dirname(here), "..", "entry.js");
272
- if (fs.existsSync(candidate)) {
272
+ if (syncFs.existsSync(candidate)) {
273
273
  return candidate;
274
274
  }
275
275
  } catch {}
@@ -1,5 +1,5 @@
1
1
  import { resolveUserPath } from "../utils.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
 
4
4
  //#region src/acp/secret-file.ts
5
5
  function readSecretFromFile(filePath, label) {
@@ -9,7 +9,7 @@ function readSecretFromFile(filePath, label) {
9
9
  }
10
10
  let raw = "";
11
11
  try {
12
- raw = fs.readFileSync(resolvedPath, "utf8");
12
+ raw = syncFs.readFileSync(resolvedPath, "utf8");
13
13
  } catch (err) {
14
14
  throw new Error(`Failed to read ${label} file at ${resolvedPath}: ${String(err)}`, { cause: err });
15
15
  }
@@ -6,7 +6,7 @@ import { parseAgentSessionKey } from "../sessions/session-key-utils.js";
6
6
  import { DEFAULT_AGENT_ID, normalizeAgentId, resolveAgentIdFromSessionKey } from "../routing/session-key.js";
7
7
  import { resolveEffectiveAgentSkillFilter } from "./skills/agent-filter.js";
8
8
  import { resolveDefaultAgentWorkspaceDir } from "./workspace.js";
9
- import fs from "node:fs";
9
+ import syncFs from "node:fs";
10
10
  import path from "node:path";
11
11
 
12
12
  //#region src/agents/agent-scope.ts
@@ -245,7 +245,7 @@ function normalizePathForComparison(input) {
245
245
  const resolved = path.resolve(stripNullBytes(resolveUserPath(input)));
246
246
  let normalized = resolved;
247
247
  try {
248
- normalized = fs.realpathSync.native(resolved);
248
+ normalized = syncFs.realpathSync.native(resolved);
249
249
  } catch {}
250
250
  if (process.platform === "win32") {
251
251
  return normalized.toLowerCase();
@@ -3,9 +3,9 @@ import { PATH_ALIAS_POLICIES } from "../infra/path-alias-guards.js";
3
3
  import { writeFileWithinRoot } from "../infra/fs-safe.js";
4
4
  import { applyUpdateHunk } from "./apply-patch-update.js";
5
5
  import { assertSandboxPath, resolveSandboxInputPath } from "./sandbox-paths.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import path from "node:path";
8
- import fs$1 from "node:fs/promises";
8
+ import fs from "node:fs/promises";
9
9
  import { Type } from "@sinclair/typebox";
10
10
 
11
11
  //#region src/agents/apply-patch.ts
@@ -159,7 +159,7 @@ function resolvePatchFileOps(options) {
159
159
  return {
160
160
  readFile: async (filePath) => {
161
161
  if (!workspaceOnly) {
162
- return await fs$1.readFile(filePath, "utf8");
162
+ return await fs.readFile(filePath, "utf8");
163
163
  }
164
164
  const opened = await openBoundaryFile({
165
165
  absolutePath: filePath,
@@ -168,14 +168,14 @@ function resolvePatchFileOps(options) {
168
168
  });
169
169
  assertBoundaryRead(opened, filePath);
170
170
  try {
171
- return fs.readFileSync(opened.fd, "utf8");
171
+ return syncFs.readFileSync(opened.fd, "utf8");
172
172
  } finally {
173
- fs.closeSync(opened.fd);
173
+ syncFs.closeSync(opened.fd);
174
174
  }
175
175
  },
176
176
  writeFile: async (filePath, content) => {
177
177
  if (!workspaceOnly) {
178
- await fs$1.writeFile(filePath, content, "utf8");
178
+ await fs.writeFile(filePath, content, "utf8");
179
179
  return;
180
180
  }
181
181
  const relative = toRelativeWorkspacePath(options.cwd, filePath);
@@ -186,8 +186,8 @@ function resolvePatchFileOps(options) {
186
186
  encoding: "utf8"
187
187
  });
188
188
  },
189
- remove: (filePath) => fs$1.rm(filePath),
190
- mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
189
+ remove: (filePath) => fs.rm(filePath),
190
+ mkdirp: (dir) => fs.mkdir(dir, { recursive: true }).then(() => {})
191
191
  };
192
192
  }
193
193
  async function ensureDir(filePath, ops) {
@@ -2,7 +2,7 @@ import { resolveUserPath } from "../../utils.js";
2
2
  import { saveJsonFile } from "../../infra/json-file.js";
3
3
  import { AUTH_PROFILE_FILENAME, AUTH_STORE_VERSION, LEGACY_AUTH_FILENAME } from "./constants.js";
4
4
  import { resolveFasedAgentAgentDir } from "../agent-paths.js";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
 
8
8
  //#region src/agents/auth-profiles/paths.ts
@@ -19,7 +19,7 @@ function resolveAuthStorePathForDisplay(agentDir) {
19
19
  return pathname.startsWith("~") ? pathname : resolveUserPath(pathname);
20
20
  }
21
21
  function ensureAuthStoreFile(pathname) {
22
- if (fs.existsSync(pathname)) {
22
+ if (syncFs.existsSync(pathname)) {
23
23
  return;
24
24
  }
25
25
  const payload = {
@@ -5,7 +5,7 @@ import { withFileLock } from "../../plugin-sdk/file-lock.js";
5
5
  import "../../infra/file-lock.js";
6
6
  import { syncExternalCliCredentials } from "./external-cli-sync.js";
7
7
  import { ensureAuthStoreFile, resolveAuthStorePath, resolveLegacyAuthStorePath } from "./paths.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
 
10
10
  //#region src/agents/auth-profiles/store.ts
11
11
  const AUTH_PROFILE_TYPES = new Set([
@@ -361,7 +361,7 @@ function loadAuthProfileStoreForAgent(agentDir, options) {
361
361
  if (shouldWrite && legacy !== null) {
362
362
  const legacyPath = resolveLegacyAuthStorePath(agentDir);
363
363
  try {
364
- fs.unlinkSync(legacyPath);
364
+ syncFs.unlinkSync(legacyPath);
365
365
  } catch (err) {
366
366
  if (err?.code !== "ENOENT") {
367
367
  log.warn("failed to delete legacy auth.json after migration", {
@@ -0,0 +1,28 @@
1
+ import { applyRuntimeProviderModelDiscovery, filterCatalogToAuthoritativeAvailability } from "../providers/runtime-model-catalog.js";
2
+ import { buildCredentialScopedAllowedModelSet } from "./model-catalog-access.js";
3
+
4
+ //#region src/agents/authenticated-model-catalog.ts
5
+ async function resolveAuthenticatedModelCatalog(params) {
6
+ const initialScope = buildCredentialScopedAllowedModelSet({
7
+ cfg: params.cfg,
8
+ catalog: params.catalog,
9
+ defaultProvider: params.defaultProvider,
10
+ store: params.store
11
+ });
12
+ const discoveredCatalog = filterCatalogToAuthoritativeAvailability(await applyRuntimeProviderModelDiscovery({
13
+ cfg: params.cfg,
14
+ store: params.store,
15
+ routes: initialScope.usableProviders,
16
+ catalog: initialScope.usableCatalog,
17
+ agentDir: params.agentDir
18
+ }), params.store);
19
+ return buildCredentialScopedAllowedModelSet({
20
+ cfg: params.cfg,
21
+ catalog: discoveredCatalog,
22
+ defaultProvider: params.defaultProvider,
23
+ storedProviders: initialScope.usableProviders
24
+ });
25
+ }
26
+
27
+ //#endregion
28
+ export { resolveAuthenticatedModelCatalog };
@@ -1,6 +1,6 @@
1
1
  import { logInfo } from "../logger.js";
2
- import { evaluateShellAllowlist } from "../infra/exec-approvals-allowlist.js";
3
2
  import { callGatewayTool } from "./tools/gateway.js";
3
+ import { evaluateShellAllowlist } from "../infra/exec-approvals-allowlist.js";
4
4
  import { requiresExecApproval, resolveExecApprovalsFromFile } from "../infra/exec-approvals.js";
5
5
  import { detectCommandObfuscation } from "../infra/exec-obfuscation-detect.js";
6
6
  import { DEFAULT_APPROVAL_TIMEOUT_MS, createApprovalSlug, emitExecSystemEvent } from "./bash-tools.exec-runtime.js";
@@ -2,8 +2,8 @@ import { parseAgentSessionKey } from "../sessions/session-key-utils.js";
2
2
  import { resolveAgentIdFromSessionKey } from "../routing/session-key.js";
3
3
  import { logInfo } from "../logger.js";
4
4
  import { getShellPathFromLoginShell, resolveShellEnvFallbackTimeoutMs } from "../infra/shell-env.js";
5
- import { resolveExecSafeBinRuntimePolicy } from "../infra/exec-safe-bin-runtime-policy.js";
6
5
  import { SafeOpenError, readFileWithinRoot } from "../infra/fs-safe.js";
6
+ import { resolveExecSafeBinRuntimePolicy } from "../infra/exec-safe-bin-runtime-policy.js";
7
7
  import { maxAsk, minSecurity } from "../infra/exec-approvals.js";
8
8
  import { markBackgrounded } from "./bash-process-registry.js";
9
9
  import { applyPathPrepend, normalizePathPrepend } from "../infra/path-prepend.js";
@@ -3,7 +3,7 @@ import { assertSandboxPath } from "./sandbox-paths.js";
3
3
  import { existsSync, statSync } from "node:fs";
4
4
  import { homedir } from "node:os";
5
5
  import path from "node:path";
6
- import fs$1 from "node:fs/promises";
6
+ import fs from "node:fs/promises";
7
7
 
8
8
  //#region src/agents/bash-tools.shared.ts
9
9
  const CHUNK_LIMIT = 8 * 1024;
@@ -67,7 +67,7 @@ async function resolveSandboxWorkdir(params) {
67
67
  cwd: process.cwd(),
68
68
  root: params.sandbox.workspaceDir
69
69
  });
70
- const stats = await fs$1.stat(resolved.resolved);
70
+ const stats = await fs.stat(resolved.resolved);
71
71
  if (!stats.isDirectory()) {
72
72
  throw new Error("workdir is not a directory");
73
73
  }
@@ -1,7 +1,7 @@
1
1
  import { resolveUserPath } from "../utils.js";
2
2
  import { createSubsystemLogger } from "../logging/subsystem.js";
3
3
  import { loadJsonFile, saveJsonFile } from "../infra/json-file.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
  import { execFileSync, execSync } from "node:child_process";
7
7
  import { createHash } from "node:crypto";
@@ -61,7 +61,7 @@ function resolveCodexHomePath() {
61
61
  const configured = process.env.CODEX_HOME;
62
62
  const home = configured ? resolveUserPath(configured) : resolveUserPath("~/.codex");
63
63
  try {
64
- return fs.realpathSync.native(home);
64
+ return syncFs.realpathSync.native(home);
65
65
  } catch {
66
66
  return home;
67
67
  }
@@ -264,7 +264,7 @@ function writeClaudeCliKeychainCredentials(newCredentials, options) {
264
264
  }
265
265
  function writeClaudeCliFileCredentials(newCredentials, options) {
266
266
  const credPath = resolveClaudeCliCredentialsPath(options?.homeDir);
267
- if (!fs.existsSync(credPath)) {
267
+ if (!syncFs.existsSync(credPath)) {
268
268
  return false;
269
269
  }
270
270
  try {
@@ -331,7 +331,7 @@ function readCodexCliCredentials(options) {
331
331
  }
332
332
  let expires;
333
333
  try {
334
- const stat = fs.statSync(authPath);
334
+ const stat = syncFs.statSync(authPath);
335
335
  expires = stat.mtimeMs + 60 * 60 * 1e3;
336
336
  } catch {
337
337
  expires = Date.now() + 60 * 60 * 1e3;
@@ -0,0 +1,37 @@
1
+ //#region src/agents/copilot-dynamic-headers.ts
2
+ const COPILOT_EDITOR_VERSION = "vscode/1.96.2";
3
+ const COPILOT_USER_AGENT = "GitHubCopilotChat/0.26.7";
4
+ const COPILOT_GITHUB_API_VERSION = "2025-04-01";
5
+ function inferCopilotInitiator(messages) {
6
+ const last = messages[messages.length - 1];
7
+ return last && last.role !== "user" ? "agent" : "user";
8
+ }
9
+ function hasCopilotVisionInput(messages) {
10
+ return messages.some((message) => {
11
+ if (message.role === "user" && Array.isArray(message.content)) {
12
+ return message.content.some((item) => item.type === "image");
13
+ }
14
+ if (message.role === "toolResult" && Array.isArray(message.content)) {
15
+ return message.content.some((item) => item.type === "image");
16
+ }
17
+ return false;
18
+ });
19
+ }
20
+ function buildCopilotIdeHeaders(params = {}) {
21
+ return {
22
+ "Editor-Version": COPILOT_EDITOR_VERSION,
23
+ "User-Agent": COPILOT_USER_AGENT,
24
+ ...params.includeApiVersion ? { "X-Github-Api-Version": COPILOT_GITHUB_API_VERSION } : {}
25
+ };
26
+ }
27
+ function buildCopilotDynamicHeaders(params) {
28
+ return {
29
+ ...buildCopilotIdeHeaders(),
30
+ "X-Initiator": inferCopilotInitiator(params.messages),
31
+ "Openai-Intent": "conversation-edits",
32
+ ...params.hasImages ? { "Copilot-Vision-Request": "true" } : {}
33
+ };
34
+ }
35
+
36
+ //#endregion
37
+ export { buildCopilotIdeHeaders };
@@ -1,6 +1,5 @@
1
1
  import { CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG, buildCloudflareAiGatewayModelDefinition } from "../providers/cloudflare-ai-gateway-shared.js";
2
2
  import { HUGGINGFACE_BASE_URL, HUGGINGFACE_MODEL_CATALOG, buildHuggingfaceModelDefinition } from "../providers/huggingface-models.js";
3
- import { LITELLM_BASE_URL, LITELLM_MODEL_CATALOG, buildLitellmModelDefinition } from "../providers/litellm-models.js";
4
3
  import { SYNTHETIC_BASE_URL, SYNTHETIC_MODEL_CATALOG, buildSyntheticModelDefinition } from "../providers/synthetic-models.js";
5
4
  import { TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG, buildTogetherModelDefinition } from "../providers/together-models.js";
6
5
  import { VENICE_BASE_URL, VENICE_MODEL_CATALOG, buildVeniceModelDefinition } from "../providers/venice-models.js";
@@ -154,7 +153,8 @@ const OPENAI_CODEX_MODELS = [
154
153
  input: ["text", "image"],
155
154
  contextWindow: 105e4,
156
155
  maxTokens: 128e3,
157
- api: "openai-codex-responses"
156
+ api: "openai-codex-responses",
157
+ compat: { responsesLite: true }
158
158
  }),
159
159
  model({
160
160
  id: "gpt-5.6-terra",
@@ -163,7 +163,8 @@ const OPENAI_CODEX_MODELS = [
163
163
  input: ["text", "image"],
164
164
  contextWindow: 105e4,
165
165
  maxTokens: 128e3,
166
- api: "openai-codex-responses"
166
+ api: "openai-codex-responses",
167
+ compat: { responsesLite: true }
167
168
  }),
168
169
  model({
169
170
  id: "gpt-5.6-luna",
@@ -172,7 +173,8 @@ const OPENAI_CODEX_MODELS = [
172
173
  input: ["text", "image"],
173
174
  contextWindow: 105e4,
174
175
  maxTokens: 128e3,
175
- api: "openai-codex-responses"
176
+ api: "openai-codex-responses",
177
+ compat: { responsesLite: true }
176
178
  }),
177
179
  model({
178
180
  id: "gpt-5.5",
@@ -876,22 +878,16 @@ const CURRENT_MODEL_PROVIDER_CATALOG = {
876
878
  models: CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG.map((entry) => buildCloudflareAiGatewayModelDefinition({ id: entry.id }))
877
879
  },
878
880
  litellm: {
879
- baseUrl: LITELLM_BASE_URL,
881
+ baseUrl: "http://localhost:4000/v1",
880
882
  api: "openai-completions",
881
883
  request: { allowPrivateNetwork: true },
882
- models: LITELLM_MODEL_CATALOG.map(buildLitellmModelDefinition)
884
+ models: []
883
885
  },
884
886
  vllm: {
885
887
  baseUrl: "http://127.0.0.1:8000/v1",
886
888
  api: "openai-completions",
887
889
  request: { allowPrivateNetwork: true },
888
- models: [model({
889
- id: "local",
890
- name: "Local model",
891
- input: ["text", "image"],
892
- contextWindow: 128e3,
893
- maxTokens: 8192
894
- })]
890
+ models: []
895
891
  },
896
892
  "github-copilot": {
897
893
  baseUrl: "https://api.individual.githubcopilot.com",
@@ -1,5 +1,5 @@
1
1
  import { resolveFasedAgentPackageRoot } from "../infra/fased-root.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import path from "node:path";
4
4
 
5
5
  //#region src/agents/docs-path.ts
@@ -7,7 +7,7 @@ async function resolveFasedAgentDocsPath(params) {
7
7
  const workspaceDir = params.workspaceDir?.trim();
8
8
  if (workspaceDir) {
9
9
  const workspaceDocs = path.join(workspaceDir, "docs");
10
- if (fs.existsSync(workspaceDocs)) {
10
+ if (syncFs.existsSync(workspaceDocs)) {
11
11
  return workspaceDocs;
12
12
  }
13
13
  }
@@ -20,7 +20,7 @@ async function resolveFasedAgentDocsPath(params) {
20
20
  return null;
21
21
  }
22
22
  const packageDocs = path.join(packageRoot, "docs");
23
- return fs.existsSync(packageDocs) ? packageDocs : null;
23
+ return syncFs.existsSync(packageDocs) ? packageDocs : null;
24
24
  }
25
25
 
26
26
  //#endregion
@@ -1,6 +1,6 @@
1
1
  import { STATE_DIR } from "../config/paths.js";
2
2
  import { isRecord, resolveUserPath } from "../utils.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/agents/embedded-pi-mcp.ts
@@ -66,10 +66,10 @@ function readBundleMcpFile(params) {
66
66
  if (relative.startsWith("..") || path.isAbsolute(relative)) {
67
67
  return {};
68
68
  }
69
- if (!fs.existsSync(filePath)) {
69
+ if (!syncFs.existsSync(filePath)) {
70
70
  return {};
71
71
  }
72
- const raw = JSON.parse(fs.readFileSync(filePath, "utf-8"));
72
+ const raw = JSON.parse(syncFs.readFileSync(filePath, "utf-8"));
73
73
  const servers = extractMcpServerMap(raw);
74
74
  const baseDir = path.dirname(filePath);
75
75
  return Object.fromEntries(Object.entries(servers).map(([serverName, server]) => [serverName, absolutizeBundleMcpServer({
@@ -99,7 +99,7 @@ function loadEnabledBundleMcpConfig(params) {
99
99
  cfg: params.cfg,
100
100
  pluginId
101
101
  })) {
102
- if (!fs.existsSync(rootDir)) {
102
+ if (!syncFs.existsSync(rootDir)) {
103
103
  continue;
104
104
  }
105
105
  for (const fileName of BUNDLE_MCP_FILENAMES) {
@@ -3,7 +3,7 @@ import { resolveAgentWorkspaceDir } from "./agent-scope.js";
3
3
  import { AVATAR_MAX_BYTES, isAvatarDataUrl, isAvatarHttpUrl, isPathWithinRoot, isSupportedLocalAvatarExtension } from "../shared/avatar-policy.js";
4
4
  import { resolveAgentIdentity } from "./identity.js";
5
5
  import { loadAgentIdentityFromWorkspace } from "./identity-file.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/agents/identity-avatar.ts
@@ -28,7 +28,7 @@ function resolveAvatarSource(cfg, agentId, opts) {
28
28
  }
29
29
  function resolveExistingPath(value) {
30
30
  try {
31
- return fs.realpathSync(value);
31
+ return syncFs.realpathSync(value);
32
32
  } catch {
33
33
  return path.resolve(value);
34
34
  }
@@ -51,7 +51,7 @@ function resolveLocalAvatarPath(params) {
51
51
  };
52
52
  }
53
53
  try {
54
- const stat = fs.statSync(realPath);
54
+ const stat = syncFs.statSync(realPath);
55
55
  if (!stat.isFile()) {
56
56
  return {
57
57
  ok: false,
@@ -1,5 +1,5 @@
1
1
  import { DEFAULT_IDENTITY_FILENAME } from "./workspace.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import path from "node:path";
4
4
 
5
5
  //#region src/agents/identity-file.ts
@@ -67,7 +67,7 @@ function identityHasValues(identity) {
67
67
  }
68
68
  function loadIdentityFromFile(identityPath) {
69
69
  try {
70
- const content = fs.readFileSync(identityPath, "utf-8");
70
+ const content = syncFs.readFileSync(identityPath, "utf-8");
71
71
  const parsed = parseIdentityMarkdown(content);
72
72
  if (!identityHasValues(parsed)) {
73
73
  return null;
@@ -3,6 +3,7 @@ import { normalizeProviderId } from "./provider-id.js";
3
3
  //#region src/agents/model-catalog-normalized.ts
4
4
  const SOURCE_AUTHORITY = {
5
5
  configured: 500,
6
+ "provider-api": 450,
6
7
  runtime: 400,
7
8
  manifest: 300,
8
9
  "provider-index": 200,
@@ -1,4 +1,4 @@
1
- import { isOpenAISignInCatalogModel, isStandardProviderCatalogEntry, listProviderBrandManifests } from "../providers/registry.js";
1
+ import { isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, listProviderBrandManifests } from "../providers/registry.js";
2
2
  import { MODEL_APIS } from "../config/types.models.js";
3
3
  import { buildModelCatalogMergeKey, mergeModelCatalogRowsByAuthority, normalizeModelCatalogModelId, normalizeModelCatalogProviderId, normalizeProviderCatalogRows } from "./model-catalog-normalized.js";
4
4
  import { CURRENT_MODEL_PROVIDER_CATALOG, listCurrentModelCatalogRows } from "./current-model-catalog.js";
@@ -28,7 +28,7 @@ function isSupportedRuntimeCatalogModel(provider, id) {
28
28
  if (provider !== "openai-codex") {
29
29
  return true;
30
30
  }
31
- return isOpenAISignInCatalogModel(id);
31
+ return isOpenAISignInRuntimeModelSupported(id);
32
32
  }
33
33
  function configuredProviderCatalogRows(cfg) {
34
34
  return Object.entries(cfg.models?.providers ?? {}).flatMap(([provider, providerConfig]) => normalizeProviderCatalogRows({
@@ -4,8 +4,8 @@ import { loadConfig } from "../config/io.js";
4
4
  import "../config/config.js";
5
5
  import { normalizeModelCatalogProviderId } from "./model-catalog-normalized.js";
6
6
  import { ensureFasedAgentModelsJson } from "./models-config.js";
7
- import { augmentModelCatalogWithProviderPlugins } from "../plugins/provider-runtime.runtime.js";
8
7
  import { deriveModelMetadata } from "./model-metadata.js";
8
+ import { augmentModelCatalogWithProviderPlugins } from "../plugins/provider-runtime.runtime.js";
9
9
  import { buildFasedModelCatalogEntries } from "./model-catalog-source.js";
10
10
  import { __setProviderExtensionCatalogEntriesForTest, loadProviderExtensionCatalogIndex } from "./provider-extension-catalog-index.js";
11
11
 
@@ -1,9 +1,20 @@
1
1
  import { resolveModelThinkingCapability } from "../shared/model-thinking.js";
2
- import { getProviderBrandManifestForRoute, lookupProviderManifestModelCapability } from "../providers/registry.js";
2
+ import { getProviderBrandManifestForRoute, lookupProviderManifestModelCapability, providerModelRecommendationRank } from "../providers/registry.js";
3
3
  import { isPrivateNetworkBaseUrl } from "../utils/private-network-url.js";
4
4
  import { lookupRefreshedModelCapability } from "../providers/refreshed-model-capabilities.js";
5
5
 
6
6
  //#region src/agents/model-metadata.ts
7
+ function availabilitySourceForCatalogSource(source) {
8
+ switch (source) {
9
+ case "provider-api": return "provider-api";
10
+ case "runtime": return "runtime-catalog";
11
+ case "configured": return "configured";
12
+ case "provider-index": return "provider-plugin";
13
+ case "manifest": return "curated-recommendation";
14
+ case "current-preview":
15
+ default: return "reviewed-catalog";
16
+ }
17
+ }
7
18
  const FEATURE_LABELS = {
8
19
  text: "text",
9
20
  vision: "vision",
@@ -32,8 +43,10 @@ const JSON_CAPABLE_APIS = new Set([
32
43
  const LOCAL_DYNAMIC_PROVIDERS = new Set([
33
44
  "ollama",
34
45
  "lmstudio",
35
- "vllm"
46
+ "vllm",
47
+ "litellm"
36
48
  ]);
49
+ const CURATED_CATALOG_REVIEWED_AT = "2026-07-12T00:00:00.000Z";
37
50
  function resolveProviderConfig(cfg, provider) {
38
51
  return cfg?.models?.providers?.[provider];
39
52
  }
@@ -60,6 +73,12 @@ function deriveModelMetadata(params) {
60
73
  const provider = params.model.provider.trim();
61
74
  const modelId = params.model.id.trim();
62
75
  const providerConfig = params.providerConfig ?? resolveProviderConfig(params.cfg, provider);
76
+ const providerManifest = getProviderBrandManifestForRoute(provider);
77
+ const credentialMethod = providerManifest?.methods.find((entry) => [
78
+ entry.route,
79
+ entry.statusRoute,
80
+ entry.configProviderId
81
+ ].map((value) => value?.trim().toLowerCase()).includes(provider.toLowerCase()));
63
82
  const baseUrl = params.model.baseUrl ?? providerConfig?.baseUrl ?? "";
64
83
  const api = params.model.api ?? providerConfig?.api;
65
84
  const refreshed = lookupRefreshedModelCapability(provider, modelId);
@@ -70,8 +89,9 @@ function deriveModelMetadata(params) {
70
89
  ...manifestCapabilities,
71
90
  ...params.model.capabilities
72
91
  } : undefined;
73
- const capabilityConfidence = capabilities || refreshed || manifestCapabilities ? "declared" : "unknown";
74
- const shouldInferApiCapabilities = !(LOCAL_DYNAMIC_PROVIDERS.has(provider) && capabilityConfidence === "unknown");
92
+ const capabilitySource = params.capabilitySource ?? (params.model.capabilities ? params.model.catalogSource === "configured" ? "configured" : "runtime" : refreshed ? refreshed.source === "catalog" || refreshed.source === "provider-api" ? "provider-api" : "official-docs" : manifestCapabilities ? "official-docs" : api && !LOCAL_DYNAMIC_PROVIDERS.has(provider) ? "inferred" : "unknown");
93
+ const capabilityConfidence = capabilitySource === "provider-api" || capabilitySource === "official-docs" ? "verified" : capabilitySource === "runtime" || capabilitySource === "configured" ? "declared" : capabilitySource === "inferred" ? "inferred" : "unknown";
94
+ const shouldInferApiCapabilities = !LOCAL_DYNAMIC_PROVIDERS.has(provider);
75
95
  const reasoning = params.model.reasoning ?? refreshed?.reasoning;
76
96
  const thinking = resolveModelThinkingCapability({
77
97
  provider,
@@ -89,12 +109,29 @@ function deriveModelMetadata(params) {
89
109
  addFeature(features, "video", capabilities?.video === true);
90
110
  addFeature(features, "speech", capabilities?.speech === true);
91
111
  const privateNetwork = baseUrl ? isPrivateNetworkBaseUrl(baseUrl) : false;
112
+ const authMode = resolveAuthMode({
113
+ provider,
114
+ providerConfig
115
+ });
116
+ const credentialRoutes = params.credentialRoutes?.length ? params.credentialRoutes : [{
117
+ id: credentialMethod?.id ?? provider,
118
+ label: credentialMethod?.label ?? providerManifest?.label ?? provider,
119
+ authMode
120
+ }];
121
+ const credentialRoute = credentialRoutes[0];
122
+ const configuredCost = providerConfig?.models?.find((entry) => entry.id.trim().toLowerCase() === modelId.toLowerCase())?.cost;
123
+ const cost = params.model.cost ?? configuredCost;
124
+ const recommendationRank = providerModelRecommendationRank(provider, modelId);
92
125
  return {
126
+ ref: `${provider}/${modelId}`,
93
127
  provider,
128
+ publicProviderId: providerManifest?.id ?? provider,
129
+ publicProviderLabel: providerManifest?.label ?? provider,
94
130
  model: modelId,
95
131
  label: params.model.name?.trim() || modelId,
96
132
  contextWindow: typeof refreshed?.contextWindow === "number" && refreshed.contextWindow > 0 ? refreshed.contextWindow : typeof params.model.contextWindow === "number" && params.model.contextWindow > 0 ? params.model.contextWindow : undefined,
97
133
  maxTokens: typeof refreshed?.maxTokens === "number" && refreshed.maxTokens > 0 ? refreshed.maxTokens : typeof params.model.maxTokens === "number" && params.model.maxTokens > 0 ? params.model.maxTokens : undefined,
134
+ ...typeof api === "string" && api.trim() ? { apiRoute: api.trim() } : {},
98
135
  features,
99
136
  ...thinking ? {
100
137
  thinkingLevels: thinking.thinkingLevels,
@@ -104,13 +141,25 @@ function deriveModelMetadata(params) {
104
141
  } : {},
105
142
  streaming: capabilities?.streaming !== false,
106
143
  capabilityConfidence,
107
- authMode: resolveAuthMode({
108
- provider,
109
- providerConfig
110
- }),
144
+ capabilitySource,
145
+ ...params.capabilityRetrievedAt ?? refreshed?.refreshedAt ?? (capabilitySource === "official-docs" ? CURATED_CATALOG_REVIEWED_AT : undefined) ? { capabilityRetrievedAt: params.capabilityRetrievedAt ?? refreshed?.refreshedAt ?? CURATED_CATALOG_REVIEWED_AT } : {},
146
+ retrievedAt: refreshed?.refreshedAt ?? CURATED_CATALOG_REVIEWED_AT,
147
+ availabilitySource: availabilitySourceForCatalogSource(params.model.catalogSource),
148
+ authRoute: provider,
149
+ authMode: credentialRoute.authMode,
150
+ credentialRoute,
151
+ credentialRoutes,
152
+ ...cost ? { price: {
153
+ input: cost.input,
154
+ output: cost.output,
155
+ cacheRead: cost.cacheRead,
156
+ cacheWrite: cost.cacheWrite,
157
+ unit: "usd-per-million-tokens"
158
+ } } : {},
111
159
  privateNetwork,
112
160
  privateNetworkAllowed: privateNetwork ? providerConfig?.request?.allowPrivateNetwork === true : false,
113
- ...params.recommended ? { recommended: true } : {},
161
+ ...params.recommended || recommendationRank !== undefined ? { recommended: true } : {},
162
+ ...recommendationRank !== undefined ? { recommendationRank } : {},
114
163
  ...params.default ? { default: true } : {}
115
164
  };
116
165
  }