@fased/fased 0.1.56 → 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 (359) hide show
  1. package/dist/acp/client.js +2 -2
  2. package/dist/acp/secret-file.js +2 -2
  3. package/dist/agents/agent-scope.js +2 -2
  4. package/dist/agents/apply-patch.js +8 -8
  5. package/dist/agents/auth-profiles/paths.js +2 -2
  6. package/dist/agents/auth-profiles/store.js +2 -2
  7. package/dist/agents/bash-tools.shared.js +2 -2
  8. package/dist/agents/cli-credentials.js +4 -4
  9. package/dist/agents/docs-path.js +3 -3
  10. package/dist/agents/embedded-pi-mcp.js +4 -4
  11. package/dist/agents/identity-avatar.js +3 -3
  12. package/dist/agents/identity-file.js +2 -2
  13. package/dist/agents/model-catalog-snapshot.js +124 -0
  14. package/dist/agents/openai-codex-app-server.js +35 -10
  15. package/dist/agents/openai-codex-runtime-component.js +39 -0
  16. package/dist/agents/pi-embedded-runner/compact.js +1 -1
  17. package/dist/agents/pi-embedded-runner/extra-params.js +28 -16
  18. package/dist/agents/pi-embedded-runner/run/attempt.js +1 -1
  19. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  20. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  21. package/dist/agents/pi-model-discovery.js +6 -6
  22. package/dist/agents/pi-project-settings.js +3 -3
  23. package/dist/agents/sandbox/fs-bridge.js +2 -2
  24. package/dist/agents/session-dirs.js +4 -4
  25. package/dist/agents/session-write-lock.js +13 -13
  26. package/dist/agents/shell-utils.js +5 -5
  27. package/dist/agents/skills/bundled-dir.js +4 -4
  28. package/dist/agents/skills/local-loader.js +6 -6
  29. package/dist/agents/skills/plugin-skills.js +2 -2
  30. package/dist/agents/skills/workspace.js +13 -13
  31. package/dist/agents/skills-install-download.js +7 -7
  32. package/dist/agents/skills-install-plan.js +2 -2
  33. package/dist/agents/skills-install.js +2 -2
  34. package/dist/agents/skills-status.js +2 -2
  35. package/dist/agents/subagent-depth.js +2 -2
  36. package/dist/agents/system-prompt-params.js +2 -2
  37. package/dist/agents/tools/session-status-tool.js +1 -1
  38. package/dist/agents/workspace.js +22 -22
  39. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  40. package/dist/auto-reply/reply/agent-runner.js +2 -2
  41. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  42. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  43. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  44. package/dist/auto-reply/reply/session.js +3 -3
  45. package/dist/auto-reply/skill-commands.js +3 -3
  46. package/dist/auto-reply/status.js +6 -6
  47. package/dist/brand.js +1 -1
  48. package/dist/browser/chrome.executables.js +3 -3
  49. package/dist/browser/chrome.js +3 -3
  50. package/dist/browser/chrome.profile-decoration.js +6 -6
  51. package/dist/browser/profiles-service.js +2 -2
  52. package/dist/browser/server-context.js +2 -2
  53. package/dist/browser/trash.js +4 -4
  54. package/dist/build-info.json +3 -3
  55. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  56. package/dist/canvas-host/server.js +4 -4
  57. package/dist/capabilities/catalog.js +3 -3
  58. package/dist/capabilities/install.js +43 -0
  59. package/dist/channels/plugins/catalog.js +3 -3
  60. package/dist/cli/browser-cli-extension.js +6 -6
  61. package/dist/cli/command-format.js +2 -2
  62. package/dist/cli/components-cli.js +9 -31
  63. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  64. package/dist/cli/dns-cli.js +9 -9
  65. package/dist/cli/gateway-cli/dev.js +5 -5
  66. package/dist/cli/gateway-cli/run.js +2 -2
  67. package/dist/cli/hooks-cli.js +6 -6
  68. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  69. package/dist/cli/memory-cli.js +7 -7
  70. package/dist/cli/nodes-media-utils.js +2 -2
  71. package/dist/cli/plugins-cli.js +5 -5
  72. package/dist/cli/secrets-cli.js +3 -3
  73. package/dist/cli/update-cli/update-command.js +50 -12
  74. package/dist/cli/windows-argv.js +2 -2
  75. package/dist/commands/agent.js +1 -1
  76. package/dist/commands/auth-choice.apply.openai.js +9 -0
  77. package/dist/commands/auth-choice.apply.plugin-provider.js +1 -1
  78. package/dist/commands/dashboard-link.js +3 -3
  79. package/dist/commands/doctor-install.js +5 -5
  80. package/dist/commands/doctor-memory-search.js +2 -2
  81. package/dist/commands/doctor-platform-notes.js +2 -2
  82. package/dist/commands/doctor-sandbox.js +2 -2
  83. package/dist/commands/doctor-state-integrity.js +23 -23
  84. package/dist/commands/doctor-workspace.js +3 -3
  85. package/dist/commands/doctor.js +3 -3
  86. package/dist/commands/managed-up.js +2 -2
  87. package/dist/commands/onboard-auth.credentials.js +3 -3
  88. package/dist/commands/onboard-channels.js +1 -1
  89. package/dist/commands/onboarding/plugin-install.js +4 -4
  90. package/dist/commands/sessions-cleanup.js +2 -2
  91. package/dist/commands/signal-install.js +6 -6
  92. package/dist/commands/status-all/channels.js +2 -2
  93. package/dist/commands/wallet.js +47 -47
  94. package/dist/config/cache-utils.js +2 -2
  95. package/dist/config/includes.js +5 -5
  96. package/dist/config/io.js +2 -2
  97. package/dist/config/paths.js +3 -3
  98. package/dist/config/sat-runtime-ids.js +3 -3
  99. package/dist/config/sessions/disk-budget.js +6 -6
  100. package/dist/config/sessions/paths.js +2 -2
  101. package/dist/config/sessions/store.js +17 -17
  102. package/dist/config/sessions/transcript.js +4 -4
  103. package/dist/config/talk.js +2 -2
  104. package/dist/control-ui/assets/{app-D7TXyNRi.js → app-DltSyY4Y.js} +1689 -1689
  105. package/dist/control-ui/assets/{index-BmSBom-w.js → index-D5JlBp7f.js} +3 -3
  106. package/dist/control-ui/index.html +1 -1
  107. package/dist/control-ui/version.json +1 -1
  108. package/dist/cron/service/store.js +2 -2
  109. package/dist/cron/store.js +6 -6
  110. package/dist/daemon/systemd-system.js +5 -5
  111. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  112. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  113. package/dist/gateway/control-ui-boot-check.js +6 -6
  114. package/dist/gateway/control-ui-login.js +7 -7
  115. package/dist/gateway/control-ui.js +9 -9
  116. package/dist/gateway/hooks-mapping.js +4 -4
  117. package/dist/gateway/protocol/schema/agents-models-skills.js +43 -1
  118. package/dist/gateway/server-discovery.js +2 -2
  119. package/dist/gateway/server-http.js +4 -4
  120. package/dist/gateway/server-methods/chat.js +3 -3
  121. package/dist/gateway/server-methods/hooks.js +1 -1
  122. package/dist/gateway/server-methods/models.js +12 -5
  123. package/dist/gateway/server-methods/plugins-marketplace.js +3 -3
  124. package/dist/gateway/server-methods/services.js +1 -1
  125. package/dist/gateway/server-methods/sessions.js +7 -7
  126. package/dist/gateway/server-methods/usage.js +2 -2
  127. package/dist/gateway/server.impl.js +3 -3
  128. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  129. package/dist/gateway/session-utils.fs.js +24 -24
  130. package/dist/gateway/session-utils.js +6 -6
  131. package/dist/gateway/sessions-patch.js +1 -1
  132. package/dist/hooks/bundled-dir.js +4 -4
  133. package/dist/hooks/gmail-setup-utils.js +6 -6
  134. package/dist/hooks/import-url.js +2 -2
  135. package/dist/hooks/loader.js +4 -4
  136. package/dist/hooks/workspace.js +7 -7
  137. package/dist/infra/archive.js +17 -17
  138. package/dist/infra/boundary-file-read.js +2 -2
  139. package/dist/infra/boundary-path.js +15 -15
  140. package/dist/infra/brew.js +2 -2
  141. package/dist/infra/control-ui-assets.js +14 -14
  142. package/dist/infra/device-auth-store.js +8 -8
  143. package/dist/infra/device-identity.js +8 -8
  144. package/dist/infra/dotenv.js +2 -2
  145. package/dist/infra/exec-approvals.js +8 -8
  146. package/dist/infra/exec-command-resolution.js +4 -4
  147. package/dist/infra/exec-safe-bin-trust.js +2 -2
  148. package/dist/infra/fased-root.js +5 -5
  149. package/dist/infra/fs-safe.js +14 -14
  150. package/dist/infra/gateway-lock.js +11 -11
  151. package/dist/infra/git-commit.js +5 -5
  152. package/dist/infra/git-root.js +4 -4
  153. package/dist/infra/hosted-runtime-artifact.js +3 -3
  154. package/dist/infra/is-main.js +2 -2
  155. package/dist/infra/json-file.js +7 -7
  156. package/dist/infra/outbound/delivery-queue.js +16 -16
  157. package/dist/infra/path-env.js +3 -3
  158. package/dist/infra/ports-lsof.js +4 -4
  159. package/dist/infra/provider-usage.auth.js +3 -3
  160. package/dist/infra/safe-open-sync.js +2 -2
  161. package/dist/infra/session-cost-usage.js +9 -9
  162. package/dist/infra/shell-env.js +2 -2
  163. package/dist/infra/state-migrations.fs.js +6 -6
  164. package/dist/infra/state-migrations.js +23 -23
  165. package/dist/infra/tmp-fased-dir.js +6 -6
  166. package/dist/infra/widearea-dns.js +3 -3
  167. package/dist/infra/wsl.js +2 -2
  168. package/dist/light-update-status.js +11 -11
  169. package/dist/line/accounts.js +2 -2
  170. package/dist/line/download.js +2 -2
  171. package/dist/logging/config.js +3 -3
  172. package/dist/logging/logger.js +7 -7
  173. package/dist/managed/federation.js +3 -3
  174. package/dist/managed/tunnel.js +3 -3
  175. package/dist/media/store.js +13 -13
  176. package/dist/media-understanding/runner.js +3 -3
  177. package/dist/memory/embeddings.js +2 -2
  178. package/dist/memory/internal.js +10 -10
  179. package/dist/memory/manager-sync-ops.js +7 -7
  180. package/dist/memory/repair-executor.js +17 -17
  181. package/dist/node-host/invoke-system-run-plan.js +8 -8
  182. package/dist/node-host/invoke.js +2 -2
  183. package/dist/node-host/runner.js +3 -3
  184. package/dist/pairing/pairing-store.js +3 -3
  185. package/dist/plugin-sdk/{accounts-DzWlKv1U.js → accounts-CmMwe9Dt.js} +1 -1
  186. package/dist/plugin-sdk/{actions-BplQVLL6.js → actions-DYViFQiX.js} +2 -2
  187. package/dist/plugin-sdk/{active-listener-x4MLhYUw.js → active-listener-DVbpcisf.js} +1 -1
  188. package/dist/plugin-sdk/{agent-scope-BbgPlhtw.js → agent-scope-CCjfjKoO.js} +1 -1
  189. package/dist/plugin-sdk/{audio-preflight-G8h3Sn8_.js → audio-preflight-D-Mfay8i.js} +31 -31
  190. package/dist/plugin-sdk/{audit-CWknklvI.js → audit-JImYFOzJ.js} +1 -1
  191. package/dist/plugin-sdk/{channel-access-configure-CD4QDN5E.js → channel-access-configure-B_qYjml8.js} +1 -1
  192. package/dist/plugin-sdk/{channel-access-a9Dnfw7-.js → channel-access-cxCK2mci.js} +1 -1
  193. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  194. package/dist/plugin-sdk/channel-plugin-common.js +5 -5
  195. package/dist/plugin-sdk/{chunk-B8EZkwiT.js → chunk-CF8nvZNj.js} +1 -1
  196. package/dist/plugin-sdk/{chunk-items-CEPklxGe.js → chunk-items-yLFoO571.js} +1 -1
  197. package/dist/plugin-sdk/command-status.js +31 -31
  198. package/dist/plugin-sdk/{commands-registry-BfEa4tFA.js → commands-registry-CK4KmMG0.js} +2 -2
  199. package/dist/plugin-sdk/{common-CbfckC19.js → common-Cky4hpqr.js} +1 -1
  200. package/dist/plugin-sdk/{config-Bt5GhnA-.js → config-Dbxj_jUP.js} +1125 -3
  201. package/dist/plugin-sdk/{config-schema-B9DKr6J5.js → config-schema-aKPMn6ML.js} +1749 -1387
  202. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  203. package/dist/plugin-sdk/discord.d.ts +4 -4
  204. package/dist/plugin-sdk/discord.js +22 -22
  205. package/dist/plugin-sdk/{filesystem-manager-BGGGrkiN.js → filesystem-manager-ZoHU8oA7.js} +2 -2
  206. package/dist/plugin-sdk/{fs-safe-xBqok6yR.js → fs-safe-g4g7GT02.js} +2 -2
  207. package/dist/plugin-sdk/{handle-action-DbzZFYnG.js → handle-action-BSNDD2Vc.js} +17 -17
  208. package/dist/plugin-sdk/{helpers-CluGKuIV.js → helpers-CDo2XBSr.js} +1 -1
  209. package/dist/plugin-sdk/{image-ops-CUaLtIFj.js → image-ops-DbeBxbn4.js} +1 -1
  210. package/dist/plugin-sdk/index.d.ts +15 -15
  211. package/dist/plugin-sdk/index.js +33 -33
  212. package/dist/plugin-sdk/json-store.js +6 -6
  213. package/dist/plugin-sdk/{login-DJuHYDiK.js → login-CWXvFTd8.js} +3 -3
  214. package/dist/plugin-sdk/{login-qr-CbHL5ayf.js → login-qr-CJB2zjmM.js} +4 -4
  215. package/dist/plugin-sdk/{manager-oHAvZCT3.js → manager-CbiFFLKS.js} +4 -4
  216. package/dist/plugin-sdk/{markdown-tables-Mkx7k92Y.js → markdown-tables-Bskt9r8i.js} +1 -1
  217. package/dist/plugin-sdk/{media-CA8sTmVE.js → media-B3aAg5rh.js} +4 -4
  218. package/dist/plugin-sdk/{memory-search-VFll-AIb.js → memory-search-DTjIMw8J.js} +1 -1
  219. package/dist/plugin-sdk/{monitor-CZrN9pev.js → monitor-BJs6z7AT.js} +35 -35
  220. package/dist/plugin-sdk/{monitor-CmwGqNyV.js → monitor-BYGbTI5V.js} +36 -36
  221. package/dist/plugin-sdk/{openresponses-http-CWOd4war.js → openresponses-http-BGCl2dS2.js} +31 -31
  222. package/dist/plugin-sdk/{optional-runtime-dependency-DKmk9PZa.js → optional-runtime-dependency-BlTVkcAg.js} +1 -1
  223. package/dist/plugin-sdk/{outbound-0oN9IfNw.js → outbound-CIemga5_.js} +6 -6
  224. package/dist/plugin-sdk/{outbound-attachment-DdVkqUzE.js → outbound-attachment-2RckWqrk.js} +2 -2
  225. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-C403mq4K.d.ts} +1 -1
  226. package/dist/plugin-sdk/{pairing-message-ClqhfCUk.js → pairing-message-r-VQfhFB.js} +1 -1
  227. package/dist/plugin-sdk/{pairing-store-B01mCSct.js → pairing-store-uPnLfGgB.js} +2 -2
  228. package/dist/plugin-sdk/{path-alias-guards-BJZD5JMJ.js → path-alias-guards-DjgDArrp.js} +1 -1
  229. package/dist/plugin-sdk/{pi-model-discovery-Buz0JC1Y.js → pi-model-discovery-BpEilAym.js} +1 -1
  230. package/dist/plugin-sdk/{pi-model-discovery-runtime-DuwuoteY.js → pi-model-discovery-runtime-DwNdFaz-.js} +3 -3
  231. package/dist/plugin-sdk/{probe--7xtfzMm.js → probe-CJb5uR8B.js} +1 -1
  232. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  233. package/dist/plugin-sdk/{pw-ai-B0domrii.js → pw-ai-H7UgunQQ.js} +6 -6
  234. package/dist/plugin-sdk/{qmd-manager-CFFeM4Fl.js → qmd-manager-DSyx77KY.js} +1 -1
  235. package/dist/plugin-sdk/{replies-1macZ1mZ.js → replies-CKMwkH4G.js} +2 -2
  236. package/dist/plugin-sdk/{reply-prefix-ClpxvL_w.js → reply-prefix-CeVw7Mn2.js} +1 -1
  237. package/dist/plugin-sdk/{probe-xY3Ky0Tx.js → resolve-channels-_-nV-EK2.js} +3 -2
  238. package/dist/plugin-sdk/{resolve-outbound-target-BdH6LUoW.js → resolve-outbound-target-B68fSoGi.js} +1 -1
  239. package/dist/plugin-sdk/{resolve-route-CkNIKKEW.js → resolve-route-B8fOfihG.js} +2 -2
  240. package/dist/plugin-sdk/{retry-policy-9ybIh4Fq.js → retry-policy-B6GQldxB.js} +1 -1
  241. package/dist/plugin-sdk/{runtime-dependency-CIw9t7-k.js → runtime-dependency-DlqVSsSs.js} +4 -4
  242. package/dist/plugin-sdk/{runtime-Dy420wBu.js → runtime-nVJl3PlS.js} +4 -4
  243. package/dist/plugin-sdk/{sandbox-paths-w64tYl0v.js → sandbox-paths-Dx2lUqCu.js} +2 -2
  244. package/dist/plugin-sdk/sat-runtime.d.ts +2 -2
  245. package/dist/plugin-sdk/sat-runtime.js +31 -31
  246. package/dist/plugin-sdk/{send-BQUtCJFW.js → send-BCJ4hi3t.js} +8 -8
  247. package/dist/plugin-sdk/{send-DPJIIYAs.js → send-BHokB4TR.js} +6 -6
  248. package/dist/plugin-sdk/{send-2VcOMTN5.js → send-CPK_HlYW.js} +5 -5
  249. package/dist/plugin-sdk/{send-J4JWKP62.js → send-D3DQOg2a.js} +6 -6
  250. package/dist/plugin-sdk/{send-Dqes9tdU.js → send-hSu1HWms.js} +7 -7
  251. package/dist/plugin-sdk/{session-C_n2S5ub.js → session-DQ4Dr-mf.js} +2 -2
  252. package/dist/plugin-sdk/{skill-commands-B7wx9ax8.js → skill-commands-CmdoKLh_.js} +4 -4
  253. package/dist/plugin-sdk/{slack-BouRQG-W.js → slack-B70NHpMF.js} +47 -47
  254. package/dist/plugin-sdk/{slack-actions-CasHVtiq.js → slack-actions-fSmP981b.js} +14 -14
  255. package/dist/plugin-sdk/slack.d.ts +4 -4
  256. package/dist/plugin-sdk/slack.js +12 -12
  257. package/dist/plugin-sdk/{sticker-cache-BvGEUas3.js → sticker-cache-B4dG2sKU.js} +3 -3
  258. package/dist/plugin-sdk/{tables-CjlQJV4r.js → tables-EX4Hy-a-.js} +1 -1
  259. package/dist/plugin-sdk/{targets-QfP164Dh.js → targets-BeGUCGWK.js} +1 -1
  260. package/dist/plugin-sdk/{telegram-actions-CwYjV6Db.js → telegram-actions-CM8SJgc9.js} +34 -34
  261. package/dist/plugin-sdk/telegram.d.ts +4 -4
  262. package/dist/plugin-sdk/telegram.js +9 -9
  263. package/dist/plugin-sdk/{thread-bindings.lifecycle-DU4iX_Jr.js → thread-bindings.lifecycle-tHK_1mvp.js} +3 -3
  264. package/dist/plugin-sdk/{thread-bindings.state-BgYWFjNF.js → thread-bindings.state-D7xG1GHu.js} +2 -2
  265. package/dist/plugin-sdk/{tmp-fased-dir-BdFQvrvw.d.ts → tmp-fased-dir-Ouj58axY.d.ts} +1 -1
  266. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-B4hj6HgR.d.ts} +1 -1
  267. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-dWZFX1fk.d.ts} +2 -2
  268. package/dist/plugin-sdk/{web-D0yENDve.js → web-BFolfZ3i.js} +36 -36
  269. package/dist/plugin-sdk/{whatsapp-actions-BT2nPLyo.js → whatsapp-actions-CYmleHCz.js} +16 -16
  270. package/dist/plugin-sdk/{whatsapp-heartbeat-CiABSZ6G.js → whatsapp-heartbeat-BEwm4GK3.js} +2 -2
  271. package/dist/plugin-sdk/whatsapp.d.ts +9 -9
  272. package/dist/plugin-sdk/whatsapp.js +13 -13
  273. package/dist/plugin-sdk/{wsl-B_ojyEtC.js → wsl-BtMDzMv5.js} +3 -3
  274. package/dist/plugin-sdk/{zod-schema.providers-core-CIzCjXH9.d.ts → zod-schema.providers-core-FaYR6KdD.d.ts} +61 -61
  275. package/dist/plugins/bundled-dir.js +3 -3
  276. package/dist/plugins/discovery.js +11 -11
  277. package/dist/plugins/lifecycle.js +1 -1
  278. package/dist/plugins/loader.js +13 -13
  279. package/dist/plugins/manifest-registry.js +28 -2
  280. package/dist/plugins/manifest.js +6 -4
  281. package/dist/plugins/marketplace.js +1 -1
  282. package/dist/plugins/path-safety.js +3 -3
  283. package/dist/plugins/status-cache.js +9 -9
  284. package/dist/plugins/update.js +4 -4
  285. package/dist/plugins/web-search-install-catalog.js +3 -3
  286. package/dist/providers/openai-codex-model-discovery.js +11 -1
  287. package/dist/providers/runtime-model-catalog.js +2 -2
  288. package/dist/secrets/apply.js +16 -16
  289. package/dist/secrets/audit.js +11 -11
  290. package/dist/secrets/shared.js +9 -9
  291. package/dist/security/scan-paths.js +2 -2
  292. package/dist/shared/config-eval.js +2 -2
  293. package/dist/shared/pid-alive.js +2 -2
  294. package/dist/tasks/standing-orders.js +5 -5
  295. package/dist/tasks/task-flow-registry.js +5 -5
  296. package/dist/tasks/task-registry.js +5 -5
  297. package/dist/tasks/workflow-definitions.js +6 -6
  298. package/dist/telegram/token.js +5 -5
  299. package/dist/utils.js +5 -5
  300. package/dist/wallet/local-socket-signer-broker.js +16 -16
  301. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  302. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  303. package/dist/wallet/wallet-approval-auth.js +5 -5
  304. package/dist/wallet/wallet-audit-log.js +5 -5
  305. package/dist/wallet/wallet-custody.js +21 -21
  306. package/dist/wallet/wallet-inbound-events.js +5 -5
  307. package/dist/wallet/wallet-observability.js +5 -5
  308. package/dist/wallet/wallet-policy.js +9 -9
  309. package/dist/wallet/wallet-provider-registry.js +7 -7
  310. package/dist/wallet/wallet-runtime-config.js +3 -3
  311. package/dist/wallet/wallet-secrets-store.js +22 -22
  312. package/dist/wallet/wallet-send-approvals.js +5 -5
  313. package/dist/wallet/wallet-settlement-links.js +5 -5
  314. package/dist/web/accounts.js +3 -3
  315. package/dist/web/auth-store.js +18 -18
  316. package/dist/web/session.js +4 -4
  317. package/dist/wizard/host-security-capability.js +2 -2
  318. package/dist/wizard/onboarding.finalize.js +1 -1
  319. package/dist/wizard/onboarding.host-security.js +7 -7
  320. package/dist/wizard/onboarding.js +7 -7
  321. package/dist/wizard/onboarding.wallet.js +44 -44
  322. package/extensions/acpx/package.json +1 -1
  323. package/extensions/bluebubbles/package.json +1 -1
  324. package/extensions/copilot-proxy/package.json +1 -1
  325. package/extensions/diagnostics-otel/package.json +1 -1
  326. package/extensions/fased-federation/package.json +1 -1
  327. package/extensions/google-gemini-cli-auth/package.json +1 -1
  328. package/extensions/imessage/package.json +1 -1
  329. package/extensions/irc/package.json +1 -1
  330. package/extensions/line/package.json +1 -1
  331. package/extensions/llm-task/package.json +1 -1
  332. package/extensions/lobster/package.json +1 -1
  333. package/extensions/matrix/CHANGELOG.md +6 -0
  334. package/extensions/matrix/package.json +1 -1
  335. package/extensions/mattermost/package.json +1 -1
  336. package/extensions/memory-core/package.json +2 -2
  337. package/extensions/memory-lancedb/package.json +1 -1
  338. package/extensions/minimax-portal-auth/package.json +1 -1
  339. package/extensions/msteams/CHANGELOG.md +6 -0
  340. package/extensions/msteams/package.json +1 -1
  341. package/extensions/nextcloud-talk/package.json +1 -1
  342. package/extensions/nostr/CHANGELOG.md +6 -0
  343. package/extensions/nostr/package.json +1 -1
  344. package/extensions/open-prose/package.json +1 -1
  345. package/extensions/sat-mining/package.json +1 -1
  346. package/extensions/signal/package.json +1 -1
  347. package/extensions/synology-chat/package.json +1 -1
  348. package/extensions/tlon/package.json +1 -1
  349. package/extensions/twitch/CHANGELOG.md +6 -0
  350. package/extensions/twitch/package.json +1 -1
  351. package/extensions/voice-call/CHANGELOG.md +6 -0
  352. package/extensions/voice-call/package.json +1 -1
  353. package/extensions/zalo/CHANGELOG.md +6 -0
  354. package/extensions/zalo/package.json +1 -1
  355. package/extensions/zalouser/CHANGELOG.md +6 -0
  356. package/extensions/zalouser/package.json +1 -1
  357. package/package.json +1 -1
  358. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +0 -4
  359. /package/dist/plugin-sdk/{resolve-users-Cxb5wpAQ.js → resolve-users-DN9VQBwv.js} +0 -0
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-D7TXyNRi.js","./icons-D3-vEvih.js","./open-external-url-DwSiwMPl.js","./chat-model-ref-Djkv93yn.js","./marketplace-order-evidence-DkR0ZRHa.js","./mining-commit-R-6nu87p.js","./task-ledger-source-route-C-yTp0QU.js","./wallet-policy-C3ZS66Rl.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-DltSyY4Y.js","./icons-D3-vEvih.js","./open-external-url-DwSiwMPl.js","./marketplace-order-evidence-DkR0ZRHa.js","./mining-commit-R-6nu87p.js","./chat-model-ref-Djkv93yn.js","./task-ledger-source-route-C-yTp0QU.js","./wallet-policy-C3ZS66Rl.js"])))=>i.map(i=>d[i]);
2
2
  (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={"entry-loaded":10,"app-import-start":20,"app-imported":30,"custom-element-defined":40,connected:50,"first-updated":60,rendered:70,"boot-failed":100};function t(t,n){if(typeof window>`u`)return;let r=window.__FASED_CONTROL_UI_BOOT=window.__FASED_CONTROL_UI_BOOT??{},i=e[r.stage]??0;e[t]<i&&r.stage!==`boot-failed`||(r.stage=t,r.detail=n??``,r.updatedAt=Date.now(),typeof r.mark==`function`&&r.mark(t,n),typeof window.dispatchEvent==`function`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(`fased-control-ui-boot`,{detail:{stage:t,detail:n??``}})))}var n=`modulepreload`,r=function(e,t){return new URL(e,t).href},i={},a=function(e,t,a){let o=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}o=l(t.map(t=>{if(t=r(t,a),t=u(t),t in i)return;i[t]=!0;let o=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.href===t&&(!o||r.rel===`stylesheet`))return}let s=document.createElement(`link`);if(s.rel=o?`stylesheet`:n,o||(s.as=`script`),s.crossOrigin=``,s.href=t,c&&s.setAttribute(`nonce`,c),document.head.appendChild(s),o)return new Promise((e,n)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(t=>{for(let e of t||[])e.status===`rejected`&&s(e.reason);return e().catch(s)})};function o(e){let n=e instanceof Error?e.stack??e.message:String(e);t(`boot-failed`,n||`Unknown dashboard boot error.`);let r=document.querySelector(`fased-app`);if(!r)return;r.innerHTML=``;let i=document.createElement(`style`);i.textContent=`
3
3
  body {
4
4
  margin: 0;
@@ -57,5 +57,5 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-D7TXyNRi.js","./
57
57
  font-weight: 650;
58
58
  cursor: pointer;
59
59
  }
60
- `;let a=document.createElement(`div`);a.className=`boot-page`;let o=document.createElement(`section`);o.className=`boot-card`;let s=document.createElement(`h1`);s.className=`boot-title`,s.textContent=`Dashboard bundle could not load`;let c=document.createElement(`p`);c.className=`boot-desc`,c.textContent=`The gateway page loaded, but the browser could not start the dashboard bundle. Reload first. If it keeps happening after an update, clear this site's browser data and sign in again.`;let l=document.createElement(`div`);l.className=`boot-error`,l.textContent=n||`Unknown dashboard boot error.`;let u=document.createElement(`button`);u.className=`boot-button`,u.textContent=`Reload`,u.addEventListener(`click`,()=>window.location.reload()),o.append(s,c,l,u),a.append(o),r.append(i,a)}t(`entry-loaded`),t(`app-import-start`),a(()=>import(`./app-D7TXyNRi.js`).then(()=>t(`app-imported`)),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).catch(o);export{t as n,a as t};
61
- //# sourceMappingURL=index-BmSBom-w.js.map
60
+ `;let a=document.createElement(`div`);a.className=`boot-page`;let o=document.createElement(`section`);o.className=`boot-card`;let s=document.createElement(`h1`);s.className=`boot-title`,s.textContent=`Dashboard bundle could not load`;let c=document.createElement(`p`);c.className=`boot-desc`,c.textContent=`The gateway page loaded, but the browser could not start the dashboard bundle. Reload first. If it keeps happening after an update, clear this site's browser data and sign in again.`;let l=document.createElement(`div`);l.className=`boot-error`,l.textContent=n||`Unknown dashboard boot error.`;let u=document.createElement(`button`);u.className=`boot-button`,u.textContent=`Reload`,u.addEventListener(`click`,()=>window.location.reload()),o.append(s,c,l,u),a.append(o),r.append(i,a)}t(`entry-loaded`),t(`app-import-start`),a(()=>import(`./app-DltSyY4Y.js`).then(()=>t(`app-imported`)),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).catch(o);export{t as n,a as t};
61
+ //# sourceMappingURL=index-D5JlBp7f.js.map
@@ -14,7 +14,7 @@
14
14
  <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
15
15
  <link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png" />
16
16
  <script data-fased-boot-watchdog src="./boot-watchdog.js" defer></script>
17
- <script type="module" crossorigin src="./assets/index-BmSBom-w.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-D5JlBp7f.js"></script>
18
18
  <link rel="stylesheet" crossorigin href="./assets/index-RwVraC3c.css">
19
19
  </head>
20
20
  <body>
@@ -1 +1 @@
1
- {"version":"0.1.56"}
1
+ {"version":"0.1.57"}
@@ -5,7 +5,7 @@ import { inferLegacyName, normalizeOptionalText } from "./normalize.js";
5
5
  import { normalizeCronStaggerMs, resolveDefaultCronStaggerMs } from "../stagger.js";
6
6
  import { loadCronStore, saveCronStore } from "../store.js";
7
7
  import { recomputeNextRuns } from "./jobs.js";
8
- import syncFs from "node:fs";
8
+ import fs from "node:fs";
9
9
 
10
10
  //#region src/cron/service/store.ts
11
11
  function buildDeliveryPatchFromLegacyPayload(payload) {
@@ -179,7 +179,7 @@ function stripLegacyTopLevelFields(raw) {
179
179
  }
180
180
  async function getFileMtimeMs(path) {
181
181
  try {
182
- const stats = await syncFs.promises.stat(path);
182
+ const stats = await fs.promises.stat(path);
183
183
  return stats.mtimeMs;
184
184
  } catch {
185
185
  return null;
@@ -1,6 +1,6 @@
1
1
  import { expandHomePrefix } from "../infra/home-dir.js";
2
2
  import { CONFIG_DIR } from "../utils.js";
3
- import syncFs from "node:fs";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import JSON5 from "json5";
6
6
 
@@ -19,7 +19,7 @@ function resolveCronStorePath(storePath) {
19
19
  }
20
20
  async function loadCronStore(storePath) {
21
21
  try {
22
- const raw = await syncFs.promises.readFile(storePath, "utf-8");
22
+ const raw = await fs.promises.readFile(storePath, "utf-8");
23
23
  let parsed;
24
24
  try {
25
25
  parsed = JSON5.parse(raw);
@@ -45,14 +45,14 @@ async function loadCronStore(storePath) {
45
45
  }
46
46
  }
47
47
  async function saveCronStore(storePath, store) {
48
- await syncFs.promises.mkdir(path.dirname(storePath), { recursive: true });
48
+ await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
49
49
  const { randomBytes } = await import("node:crypto");
50
50
  const tmp = `${storePath}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
51
51
  const json = JSON.stringify(store, null, 2);
52
- await syncFs.promises.writeFile(tmp, json, "utf-8");
53
- await syncFs.promises.rename(tmp, storePath);
52
+ await fs.promises.writeFile(tmp, json, "utf-8");
53
+ await fs.promises.rename(tmp, storePath);
54
54
  try {
55
- await syncFs.promises.copyFile(storePath, `${storePath}.bak`);
55
+ await fs.promises.copyFile(storePath, `${storePath}.bak`);
56
56
  } catch {}
57
57
  }
58
58
 
@@ -4,7 +4,7 @@ import { parseSystemdShow } from "./systemd.js";
4
4
  import { existsSync } from "node:fs";
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
- import fs from "node:fs/promises";
7
+ import fs$1 from "node:fs/promises";
8
8
  import { spawn } from "node:child_process";
9
9
 
10
10
  //#region src/daemon/systemd-system.ts
@@ -26,7 +26,7 @@ function buildHostedSystemctlControlArgs(action) {
26
26
  }
27
27
  async function readHostedSystemdCommand(unitPath) {
28
28
  try {
29
- const content = await fs.readFile(unitPath, "utf8");
29
+ const content = await fs$1.readFile(unitPath, "utf8");
30
30
  let workingDirectory = "";
31
31
  let execStart = "";
32
32
  const environment = {};
@@ -150,7 +150,7 @@ function buildHostedSystemdUnit(params) {
150
150
  return lines.join("\n");
151
151
  }
152
152
  async function runHelper(unit, runAsUser) {
153
- await fs.access(INSTALL_HELPER);
153
+ await fs$1.access(INSTALL_HELPER);
154
154
  await new Promise((resolve, reject) => {
155
155
  const child = spawn("sudo", [
156
156
  "-n",
@@ -205,8 +205,8 @@ async function installHostedSystemdService(params) {
205
205
  `${SERVICE_NAME}.service`
206
206
  ]).catch(() => undefined);
207
207
  const userUnit = path.join(os.homedir(), ".config", "systemd", "user", `${SERVICE_NAME}.service`);
208
- await fs.rm(userUnit, { force: true }).catch(() => undefined);
209
- await fs.rm(`${userUnit}.d`, {
208
+ await fs$1.rm(userUnit, { force: true }).catch(() => undefined);
209
+ await fs$1.rm(`${userUnit}.d`, {
210
210
  recursive: true,
211
211
  force: true
212
212
  }).catch(() => undefined);
@@ -3,7 +3,7 @@ import { normalizeAccountId } from "../../routing/account-id.js";
3
3
  import { resolveAgentIdFromSessionKey } from "../../routing/session-key.js";
4
4
  import { loadJsonFile, saveJsonFile } from "../../infra/json-file.js";
5
5
  import { DEFAULT_THREAD_BINDING_IDLE_TIMEOUT_MS, DEFAULT_THREAD_BINDING_MAX_AGE_MS, RECENT_UNBOUND_WEBHOOK_ECHO_WINDOW_MS, THREAD_BINDINGS_VERSION } from "./thread-bindings.types.js";
6
- import syncFs from "node:fs";
6
+ import fs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/discord/monitor/thread-bindings.state.ts
@@ -320,7 +320,7 @@ function shouldPersistBindingMutations() {
320
320
  if (shouldPersistAnyBindingState()) {
321
321
  return true;
322
322
  }
323
- return syncFs.existsSync(resolveThreadBindingsPath());
323
+ return fs.existsSync(resolveThreadBindingsPath());
324
324
  }
325
325
  function saveBindingsToDisk(params = {}) {
326
326
  if (!params.force && !shouldPersistAnyBindingState()) {
@@ -1,6 +1,6 @@
1
1
  import { SAT_RUNTIME_DEFAULTS } from "../../../config/sat-runtime-ids.js";
2
2
  import "../../../plugin-sdk/sat-runtime.js";
3
- import syncFs from "node:fs";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region extensions/sat-mining/src/sat-bond-layout.ts
@@ -162,7 +162,7 @@ function resolveLayoutPath(env = process.env) {
162
162
  path.resolve(import.meta.dirname, "..", "..", "..", "..", "..", "token", "sat", "bond-api", "bond-position-layout.json")
163
163
  ];
164
164
  for (const candidate of candidates) {
165
- if (candidate && syncFs.existsSync(candidate)) {
165
+ if (candidate && fs.existsSync(candidate)) {
166
166
  return candidate;
167
167
  }
168
168
  }
@@ -178,7 +178,7 @@ function resolvePolicyLayoutPath(env = process.env) {
178
178
  path.resolve(import.meta.dirname, "..", "..", "..", "..", "..", "token", "sat", "bond-api", "bond-tier-policy-layout.json")
179
179
  ];
180
180
  for (const candidate of candidates) {
181
- if (candidate && syncFs.existsSync(candidate)) {
181
+ if (candidate && fs.existsSync(candidate)) {
182
182
  return candidate;
183
183
  }
184
184
  }
@@ -194,7 +194,7 @@ function resolveStakingDistributorLayoutPath(env = process.env) {
194
194
  path.resolve(import.meta.dirname, "..", "..", "..", "..", "..", "token", "sat", "bond-api", "bond-staking-distributor-layout.json")
195
195
  ];
196
196
  for (const candidate of candidates) {
197
- if (candidate && syncFs.existsSync(candidate)) {
197
+ if (candidate && fs.existsSync(candidate)) {
198
198
  return candidate;
199
199
  }
200
200
  }
@@ -210,7 +210,7 @@ function resolveStakingPositionLayoutPath(env = process.env) {
210
210
  path.resolve(import.meta.dirname, "..", "..", "..", "..", "..", "token", "sat", "bond-api", "bond-staking-position-layout.json")
211
211
  ];
212
212
  for (const candidate of candidates) {
213
- if (candidate && syncFs.existsSync(candidate)) {
213
+ if (candidate && fs.existsSync(candidate)) {
214
214
  return candidate;
215
215
  }
216
216
  }
@@ -224,7 +224,7 @@ function loadSatBondLayout(env = process.env) {
224
224
  }
225
225
  const layoutPath = resolveLayoutPath(env);
226
226
  if (layoutPath) {
227
- const loaded = JSON.parse(syncFs.readFileSync(layoutPath, "utf-8"));
227
+ const loaded = JSON.parse(fs.readFileSync(layoutPath, "utf-8"));
228
228
  cachedLayout = {
229
229
  mode,
230
230
  value: loaded
@@ -244,7 +244,7 @@ function loadSatBondPolicyLayout(env = process.env) {
244
244
  }
245
245
  const layoutPath = resolvePolicyLayoutPath(env);
246
246
  if (layoutPath) {
247
- cachedPolicyLayout = JSON.parse(syncFs.readFileSync(layoutPath, "utf-8"));
247
+ cachedPolicyLayout = JSON.parse(fs.readFileSync(layoutPath, "utf-8"));
248
248
  return cachedPolicyLayout;
249
249
  }
250
250
  cachedPolicyLayout = DEDICATED_FALLBACK_POLICY_LAYOUT;
@@ -257,7 +257,7 @@ function loadSatBondStakingDistributorLayout(env = process.env) {
257
257
  }
258
258
  const layoutPath = resolveStakingDistributorLayoutPath(env);
259
259
  if (layoutPath) {
260
- cachedStakingDistributorLayout = JSON.parse(syncFs.readFileSync(layoutPath, "utf-8"));
260
+ cachedStakingDistributorLayout = JSON.parse(fs.readFileSync(layoutPath, "utf-8"));
261
261
  return cachedStakingDistributorLayout;
262
262
  }
263
263
  cachedStakingDistributorLayout ??= DEDICATED_FALLBACK_STAKING_DISTRIBUTOR_LAYOUT;
@@ -270,7 +270,7 @@ function loadSatBondStakingPositionLayout(env = process.env) {
270
270
  }
271
271
  const layoutPath = resolveStakingPositionLayoutPath(env);
272
272
  if (layoutPath) {
273
- cachedStakingPositionLayout = JSON.parse(syncFs.readFileSync(layoutPath, "utf-8"));
273
+ cachedStakingPositionLayout = JSON.parse(fs.readFileSync(layoutPath, "utf-8"));
274
274
  return cachedStakingPositionLayout;
275
275
  }
276
276
  cachedStakingPositionLayout ??= DEDICATED_FALLBACK_STAKING_POSITION_LAYOUT;
@@ -2,7 +2,7 @@ import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
2
2
  import { isWithinDir } from "../infra/path-safety.js";
3
3
  import { normalizeControlUiBasePath } from "./control-ui-shared.js";
4
4
  import { resolveControlUiRootSync } from "../infra/control-ui-assets.js";
5
- import syncFs from "node:fs";
5
+ import fs from "node:fs";
6
6
  import path from "node:path";
7
7
 
8
8
  //#region src/gateway/control-ui-boot-check.ts
@@ -189,7 +189,7 @@ function readControlUiBootAsset(params) {
189
189
  };
190
190
  }
191
191
  try {
192
- const body = syncFs.readFileSync(safeFile.fd);
192
+ const body = fs.readFileSync(safeFile.fd);
193
193
  return {
194
194
  check: {
195
195
  url: params.url,
@@ -200,7 +200,7 @@ function readControlUiBootAsset(params) {
200
200
  text: body.toString("utf8")
201
201
  };
202
202
  } finally {
203
- syncFs.closeSync(safeFile.fd);
203
+ fs.closeSync(safeFile.fd);
204
204
  }
205
205
  }
206
206
  function resolveBootCheckRoot(rootState) {
@@ -231,7 +231,7 @@ function resolveBootCheckRoot(rootState) {
231
231
  return {
232
232
  ok: true,
233
233
  root,
234
- rootReal: syncFs.realpathSync(root)
234
+ rootReal: fs.realpathSync(root)
235
235
  };
236
236
  } catch (error) {
237
237
  if (isExpectedSafePathError(error)) {
@@ -268,9 +268,9 @@ function resolveControlUiBootCheck(params) {
268
268
  }
269
269
  let html = "";
270
270
  try {
271
- html = syncFs.readFileSync(safeIndex.fd, "utf8");
271
+ html = fs.readFileSync(safeIndex.fd, "utf8");
272
272
  } finally {
273
- syncFs.closeSync(safeIndex.fd);
273
+ fs.closeSync(safeIndex.fd);
274
274
  }
275
275
  const entryJsUrl = extractHtmlScriptAssetUrls(html, indexUrl)[0] ?? null;
276
276
  const entry = entryJsUrl == null ? {
@@ -1,7 +1,7 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { safeEqualSecret } from "../security/secret-equal.js";
3
3
  import { isTrustedProxyAddress } from "./net.js";
4
- import syncFs from "node:fs";
4
+ import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import { createHash, createHmac, randomBytes } from "node:crypto";
7
7
 
@@ -512,10 +512,10 @@ var ControlUiLoginService = class {
512
512
  }
513
513
  readState() {
514
514
  try {
515
- if (!syncFs.existsSync(this.statePath)) {
515
+ if (!fs.existsSync(this.statePath)) {
516
516
  return buildEmptyState();
517
517
  }
518
- const raw = syncFs.readFileSync(this.statePath, "utf8");
518
+ const raw = fs.readFileSync(this.statePath, "utf8");
519
519
  return normalizeState(safeJsonParse(raw));
520
520
  } catch {
521
521
  return buildEmptyState();
@@ -525,13 +525,13 @@ var ControlUiLoginService = class {
525
525
  if (!this.state) {
526
526
  return;
527
527
  }
528
- syncFs.mkdirSync(path.dirname(this.statePath), { recursive: true });
528
+ fs.mkdirSync(path.dirname(this.statePath), { recursive: true });
529
529
  const tmpPath = `${this.statePath}.${process.pid}.${Date.now()}.tmp`;
530
530
  const body = `${JSON.stringify(this.state, null, 2)}\n`;
531
- syncFs.writeFileSync(tmpPath, body, { mode: 384 });
532
- syncFs.renameSync(tmpPath, this.statePath);
531
+ fs.writeFileSync(tmpPath, body, { mode: 384 });
532
+ fs.renameSync(tmpPath, this.statePath);
533
533
  try {
534
- syncFs.chmodSync(this.statePath, 384);
534
+ fs.chmodSync(this.statePath, 384);
535
535
  } catch {}
536
536
  }
537
537
  };
@@ -8,7 +8,7 @@ import { resolveControlUiRootSync } from "../infra/control-ui-assets.js";
8
8
  import { DEFAULT_ASSISTANT_IDENTITY, resolveAssistantIdentity } from "./assistant-identity.js";
9
9
  import { CONTROL_UI_BOOTSTRAP_CONFIG_PATH } from "./control-ui-contract.js";
10
10
  import { buildControlUiCspHeader } from "./control-ui-csp.js";
11
- import syncFs from "node:fs";
11
+ import fs from "node:fs";
12
12
  import path from "node:path";
13
13
 
14
14
  //#region src/gateway/control-ui.ts
@@ -152,10 +152,10 @@ function handleControlUiAvatarRequest(req, res, opts) {
152
152
  res.end();
153
153
  return true;
154
154
  }
155
- serveResolvedFile(res, safeAvatar.path, syncFs.readFileSync(safeAvatar.fd));
155
+ serveResolvedFile(res, safeAvatar.path, fs.readFileSync(safeAvatar.fd));
156
156
  return true;
157
157
  } finally {
158
- syncFs.closeSync(safeAvatar.fd);
158
+ fs.closeSync(safeAvatar.fd);
159
159
  }
160
160
  }
161
161
  function respondNotFound(res) {
@@ -318,7 +318,7 @@ function handleControlUiHttpRequest(req, res, opts) {
318
318
  }
319
319
  const rootReal = (() => {
320
320
  try {
321
- return syncFs.realpathSync(root);
321
+ return fs.realpathSync(root);
322
322
  } catch (error) {
323
323
  if (isExpectedSafePathError(error)) {
324
324
  return null;
@@ -364,13 +364,13 @@ function handleControlUiHttpRequest(req, res, opts) {
364
364
  return true;
365
365
  }
366
366
  if (path.basename(safeFile.path) === "index.html") {
367
- serveResolvedIndexHtml(res, syncFs.readFileSync(safeFile.fd, "utf8"));
367
+ serveResolvedIndexHtml(res, fs.readFileSync(safeFile.fd, "utf8"));
368
368
  return true;
369
369
  }
370
- serveResolvedFile(res, safeFile.path, syncFs.readFileSync(safeFile.fd));
370
+ serveResolvedFile(res, safeFile.path, fs.readFileSync(safeFile.fd));
371
371
  return true;
372
372
  } finally {
373
- syncFs.closeSync(safeFile.fd);
373
+ fs.closeSync(safeFile.fd);
374
374
  }
375
375
  }
376
376
  if (STATIC_ASSET_EXTENSIONS.has(path.extname(fileRel).toLowerCase())) {
@@ -387,10 +387,10 @@ function handleControlUiHttpRequest(req, res, opts) {
387
387
  res.end();
388
388
  return true;
389
389
  }
390
- serveResolvedIndexHtml(res, syncFs.readFileSync(safeIndex.fd, "utf8"));
390
+ serveResolvedIndexHtml(res, fs.readFileSync(safeIndex.fd, "utf8"));
391
391
  return true;
392
392
  } finally {
393
- syncFs.closeSync(safeIndex.fd);
393
+ fs.closeSync(safeIndex.fd);
394
394
  }
395
395
  }
396
396
  respondNotFound(res);
@@ -1,7 +1,7 @@
1
1
  import { CONFIG_PATH } from "../config/paths.js";
2
2
  import "../config/config.js";
3
3
  import { importFileModule, resolveFunctionModuleExport } from "../hooks/module-loader.js";
4
- import syncFs from "node:fs";
4
+ import fs from "node:fs";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/gateway/hooks-mapping.ts
@@ -301,8 +301,8 @@ function escapesBase(baseDir, candidate) {
301
301
  }
302
302
  function safeRealpathSync(candidate) {
303
303
  try {
304
- const nativeRealpath = syncFs.realpathSync.native;
305
- return nativeRealpath ? nativeRealpath(candidate) : syncFs.realpathSync(candidate);
304
+ const nativeRealpath = fs.realpathSync.native;
305
+ return nativeRealpath ? nativeRealpath(candidate) : fs.realpathSync(candidate);
306
306
  } catch {
307
307
  return null;
308
308
  }
@@ -310,7 +310,7 @@ function safeRealpathSync(candidate) {
310
310
  function resolveExistingAncestor(candidate) {
311
311
  let current = path.resolve(candidate);
312
312
  while (true) {
313
- if (syncFs.existsSync(current)) {
313
+ if (fs.existsSync(current)) {
314
314
  return current;
315
315
  }
316
316
  const parent = path.dirname(current);
@@ -21,6 +21,18 @@ const ModelChoiceSchema = Type.Object({
21
21
  Type.Literal("provider-index"),
22
22
  Type.Literal("manifest")
23
23
  ])),
24
+ available: Type.Optional(Type.Boolean()),
25
+ runnable: Type.Optional(Type.Boolean()),
26
+ recommended: Type.Optional(Type.Boolean()),
27
+ assignedRoles: Type.Optional(Type.Array(Type.Union([
28
+ Type.Literal("primary"),
29
+ Type.Literal("fallback"),
30
+ Type.Literal("cheapCheck"),
31
+ Type.Literal("strong"),
32
+ Type.Literal("escalation"),
33
+ Type.Literal("coding"),
34
+ Type.Literal("summarizer")
35
+ ]))),
24
36
  metadata: Type.Optional(Type.Object({
25
37
  ref: NonEmptyString,
26
38
  provider: NonEmptyString,
@@ -252,7 +264,37 @@ const ModelsListParamsSchema = Type.Object({
252
264
  sessionKey: Type.Optional(NonEmptyString),
253
265
  includeMetadata: Type.Optional(Type.Boolean())
254
266
  }, { additionalProperties: false });
255
- const ModelsListResultSchema = Type.Object({ models: Type.Array(ModelChoiceSchema) }, { additionalProperties: false });
267
+ const ModelsListResultSchema = Type.Object({
268
+ models: Type.Array(ModelChoiceSchema),
269
+ generatedAt: Type.Optional(NonEmptyString),
270
+ agentId: Type.Optional(NonEmptyString),
271
+ providers: Type.Optional(Type.Array(Type.Object({
272
+ id: NonEmptyString,
273
+ label: NonEmptyString,
274
+ routes: Type.Array(NonEmptyString),
275
+ credentialRoutes: Type.Array(Type.Object({
276
+ id: NonEmptyString,
277
+ label: NonEmptyString,
278
+ authMode: NonEmptyString
279
+ }, { additionalProperties: false })),
280
+ available: Type.Integer({ minimum: 0 }),
281
+ recommended: Type.Integer({ minimum: 0 }),
282
+ assigned: Type.Integer({ minimum: 0 })
283
+ }, { additionalProperties: false }))),
284
+ assignments: Type.Optional(Type.Array(Type.Object({
285
+ role: Type.Union([
286
+ Type.Literal("primary"),
287
+ Type.Literal("fallback"),
288
+ Type.Literal("cheapCheck"),
289
+ Type.Literal("strong"),
290
+ Type.Literal("escalation"),
291
+ Type.Literal("coding"),
292
+ Type.Literal("summarizer")
293
+ ]),
294
+ ref: NonEmptyString,
295
+ available: Type.Boolean()
296
+ }, { additionalProperties: false })))
297
+ }, { additionalProperties: false });
256
298
  const ModelsCatalogStatusParamsSchema = Type.Object({}, { additionalProperties: false });
257
299
  const ModelsCatalogStatusProviderSchema = Type.Object({
258
300
  provider: NonEmptyString,
@@ -1,6 +1,6 @@
1
1
  import { runExec } from "../process/exec.js";
2
2
  import { getTailnetHostname } from "../infra/tailscale.js";
3
- import syncFs from "node:fs";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/gateway/server-discovery.ts
@@ -20,7 +20,7 @@ function resolveBonjourCliPath(opts = {}) {
20
20
  if (envPath) {
21
21
  return envPath;
22
22
  }
23
- const statSync = opts.statSync ?? syncFs.statSync;
23
+ const statSync = opts.statSync ?? fs.statSync;
24
24
  const isFile = (candidate) => {
25
25
  try {
26
26
  return statSync(candidate).isFile();
@@ -51,7 +51,7 @@ import { buildGatewayProbePayload } from "./probe-payload.js";
51
51
  import { canonicalizePathVariant } from "./security-path.js";
52
52
  import { handleToolsInvokeHttpRequest } from "./tools-invoke-http.js";
53
53
  import { authorizeGatewayConnect, isLocalDirectRequest } from "./auth.js";
54
- import syncFs from "node:fs";
54
+ import fs from "node:fs";
55
55
  import path from "node:path";
56
56
  import { createServer } from "node:http";
57
57
  import { createServer as createServer$1 } from "node:https";
@@ -2102,7 +2102,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
2102
2102
  const sourcePath = path.join(resolveStateDir(env), "federation", "access-token.json");
2103
2103
  const managed = (env.FASED_GATEWAY_MODE ?? "").trim().toLowerCase() === "managed";
2104
2104
  const configured = resolveConfiguredFederationStatus(env);
2105
- if (!syncFs.existsSync(sourcePath)) {
2105
+ if (!fs.existsSync(sourcePath)) {
2106
2106
  return {
2107
2107
  managed,
2108
2108
  sourcePath,
@@ -2114,7 +2114,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
2114
2114
  }
2115
2115
  let rawText = "";
2116
2116
  try {
2117
- rawText = syncFs.readFileSync(sourcePath, "utf-8");
2117
+ rawText = fs.readFileSync(sourcePath, "utf-8");
2118
2118
  } catch {
2119
2119
  return {
2120
2120
  managed,
@@ -2163,7 +2163,7 @@ async function readLocalFederationStatus(env = process.env, fetchImpl = fetch) {
2163
2163
  const lifecycle = Number.isFinite(expiresAtMs) ? expiresAtMs > Date.now() ? "active" : "expired" : "invalid";
2164
2164
  let fileUpdatedAt;
2165
2165
  try {
2166
- fileUpdatedAt = syncFs.statSync(sourcePath).mtime.toISOString();
2166
+ fileUpdatedAt = fs.statSync(sourcePath).mtime.toISOString();
2167
2167
  } catch {
2168
2168
  fileUpdatedAt = undefined;
2169
2169
  }
@@ -30,7 +30,7 @@ import { parseMessageWithAttachments } from "../chat-attachments.js";
30
30
  import { injectTimestamp, timestampOptsFromConfig } from "./agent-timestamp.js";
31
31
  import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js";
32
32
  import { appendInjectedAssistantMessageToTranscript } from "./chat-transcript-inject.js";
33
- import syncFs from "node:fs";
33
+ import fs from "node:fs";
34
34
  import path from "node:path";
35
35
 
36
36
  //#region src/gateway/server-methods/chat.ts
@@ -321,7 +321,7 @@ function resolveTranscriptPath(params) {
321
321
  }
322
322
  function transcriptHasIdempotencyKey(transcriptPath, idempotencyKey) {
323
323
  try {
324
- const lines = syncFs.readFileSync(transcriptPath, "utf-8").split(/\r?\n/);
324
+ const lines = fs.readFileSync(transcriptPath, "utf-8").split(/\r?\n/);
325
325
  for (const line of lines) {
326
326
  if (!line.trim()) {
327
327
  continue;
@@ -349,7 +349,7 @@ function appendAssistantTranscriptMessage(params) {
349
349
  error: "transcript path not resolved"
350
350
  };
351
351
  }
352
- if (!syncFs.existsSync(transcriptPath)) {
352
+ if (!fs.existsSync(transcriptPath)) {
353
353
  if (!params.createIfMissing) {
354
354
  return {
355
355
  ok: false,
@@ -3,9 +3,9 @@ import { loadConfig, writeConfigFile } from "../../config/io.js";
3
3
  import "../../config/config.js";
4
4
  import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
5
5
  import "../protocol/index.js";
6
+ import { buildPluginStatusReport } from "../../plugins/status.js";
6
7
  import { completeTaskRunByRunId, createRunningTaskRun, failTaskRunByRunId } from "../../tasks/task-executor.js";
7
8
  import { applyHookMappings, resolveHookMappings } from "../hooks-mapping.js";
8
- import { buildPluginStatusReport } from "../../plugins/status.js";
9
9
  import { loadWorkspaceHookEntries } from "../../hooks/workspace.js";
10
10
  import { buildWorkspaceHookStatus } from "../../hooks/hooks-status.js";
11
11
  import { randomBytes, randomUUID } from "node:crypto";
@@ -12,7 +12,6 @@ import "../../config/config.js";
12
12
  import { resolveProfileUnusableUntilForDisplay } from "../../agents/auth-profiles/usage.js";
13
13
  import "../../agents/auth-profiles.js";
14
14
  import { deriveModelMetadata } from "../../agents/model-metadata.js";
15
- import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
16
15
  import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
17
16
  import { formatValidationErrors, validateModelsAuthClearParams, validateModelsAuthConfigureParams, validateModelsAuthInteractiveStartParams, validateModelsAuthStatusParams, validateModelsAuthStoreParams, validateModelsCatalogStatusParams, validateModelsListParams } from "../protocol/index.js";
18
17
  import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
@@ -23,6 +22,7 @@ import { configureLmStudioProvider, configureOllamaProvider, configureVllmProvid
23
22
  import { applyAuthChoice } from "../../commands/auth-choice.apply.js";
24
23
  import "../../commands/auth-choice.js";
25
24
  import { CustomApiError, applyCustomApiConfig, detectCustomApiCompatibility } from "../../commands/onboard-custom.js";
25
+ import { resolveCanonicalModelCatalogSnapshot } from "../../agents/model-catalog-snapshot.js";
26
26
  import { resolveProviderAuthOverview } from "../../commands/models/list.auth-overview.js";
27
27
  import { probeConfiguredModelProviderHealth } from "../../providers/health.js";
28
28
  import { WizardSession } from "../../wizard/session.js";
@@ -854,16 +854,17 @@ const modelsHandlers = {
854
854
  }) : defaultAgentId;
855
855
  const agentDir = resolveAgentDir(cfg, authAgentId);
856
856
  const store = ensureAuthProfileStore(agentDir);
857
- const { usableCatalog, allowedCatalog } = await resolveAuthenticatedModelCatalog({
857
+ const snapshot = await resolveCanonicalModelCatalogSnapshot({
858
858
  cfg,
859
859
  store,
860
860
  catalog,
861
861
  defaultProvider: DEFAULT_PROVIDER,
862
+ agentId: authAgentId,
862
863
  agentDir
863
864
  });
864
865
  const providerFilter = typeof params.provider === "string" && params.provider.trim() ? normalizeProviderId(params.provider) : "";
865
- const modelSource = params.all === true || params.available === true ? usableCatalog : allowedCatalog.length > 0 ? allowedCatalog : usableCatalog;
866
- const models = providerFilter ? modelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter) : modelSource;
866
+ const modelSource = params.all === true || params.available === true ? snapshot.models : snapshot.models.filter((model) => model.runnable);
867
+ const models = providerFilter ? modelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter || normalizeProviderId(model.metadata.publicProviderId) === providerFilter) : modelSource;
867
868
  const payloadModels = params.includeMetadata === true ? models.map((model) => ({
868
869
  ...model,
869
870
  metadata: model.metadata ?? deriveModelMetadata({
@@ -871,7 +872,13 @@ const modelsHandlers = {
871
872
  cfg
872
873
  })
873
874
  })) : models;
874
- respond(true, { models: payloadModels.toSorted((left, right) => left.provider.localeCompare(right.provider) || (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name)) }, undefined);
875
+ respond(true, {
876
+ models: payloadModels.toSorted((left, right) => left.provider.localeCompare(right.provider) || (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name)),
877
+ generatedAt: snapshot.generatedAt,
878
+ agentId: snapshot.agentId,
879
+ providers: providerFilter ? snapshot.providers.filter((provider) => [provider.id, ...provider.routes].map(normalizeProviderId).includes(providerFilter)) : snapshot.providers,
880
+ assignments: providerFilter ? snapshot.assignments.filter((assignment) => models.some((model) => `${model.provider}/${model.id}` === assignment.ref)) : snapshot.assignments
881
+ }, undefined);
875
882
  } catch (err) {
876
883
  respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
877
884
  }
@@ -4,13 +4,13 @@ import { clearPluginManifestRegistryCache } from "../../plugins/manifest-registr
4
4
  import { installPluginFromNpmSpec } from "../../plugins/install.js";
5
5
  import { loadConfig, writeConfigFile } from "../../config/io.js";
6
6
  import "../../config/config.js";
7
+ import { buildNpmResolutionInstallFields } from "../../plugins/installs.js";
7
8
  import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
8
9
  import { validatePluginsMarketplaceAdminRpcGrantSetParams, validatePluginsMarketplaceInfoParams, validatePluginsMarketplaceInstallParams, validatePluginsMarketplaceListParams, validatePluginsMarketplaceRestartParams, validatePluginsMarketplaceRuntimeHelperSetParams, validatePluginsMarketplaceUninstallParams, validatePluginsMarketplaceUpdateParams, validatePluginsMarketplaceUpdatePreviewParams } from "../protocol/index.js";
9
- import { resolveChannelPluginExpectedPluginIds } from "../../channels/plugins/catalog.js";
10
- import { scheduleGatewaySigusr1Restart } from "../../infra/restart.js";
11
- import { buildNpmResolutionInstallFields } from "../../plugins/installs.js";
12
10
  import { executePluginUninstallLifecycle, executePluginUpdateLifecycle, finalizeInstalledPluginConfig } from "../../plugins/lifecycle.js";
11
+ import { resolveChannelPluginExpectedPluginIds } from "../../channels/plugins/catalog.js";
13
12
  import { buildPluginMarketplaceReport, resolvePluginMarketplaceEntry } from "../../plugins/marketplace.js";
13
+ import { scheduleGatewaySigusr1Restart } from "../../infra/restart.js";
14
14
  import { assertValidParams } from "./validation.js";
15
15
  import { buildPluginMarketplaceUpdateReview, formatPluginMarketplaceUpdateReviewWarnings } from "../../plugins/marketplace-update-review.js";
16
16
  import { setPluginAdminRpcActionGrant, setPluginRuntimeSessionReadGrant } from "../../plugins/runtime-helper-grants.js";
@@ -2,8 +2,8 @@ import { loadConfig } from "../../config/io.js";
2
2
  import "../../config/config.js";
3
3
  import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
4
4
  import "../protocol/index.js";
5
- import { formatForLog } from "../ws-log.js";
6
5
  import { buildCapabilityReadinessReport } from "../../capabilities/catalog.js";
6
+ import { formatForLog } from "../ws-log.js";
7
7
  import { runGmailSetup } from "../../hooks/gmail-ops.js";
8
8
  import { listConfiguredWebSearchProviders, runWebSearch } from "../../web-search/runtime.js";
9
9