@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
@@ -2,7 +2,7 @@ import { CONFIG_DIR, isRecord, resolveUserPath } from "../../utils.js";
2
2
  import { resolveFasedAgentPackageRootSync } from "../../infra/fased-root.js";
3
3
  import { getPackageManifestMetadata } from "../../plugins/manifest.js";
4
4
  import { discoverFasedAgentPlugins } from "../../plugins/discovery.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/channels/plugins/catalog.ts
@@ -77,11 +77,11 @@ function loadExternalCatalogEntries(options) {
77
77
  function loadCatalogEntriesFromPaths(paths) {
78
78
  const entries = [];
79
79
  for (const resolved of paths) {
80
- if (!syncFs.existsSync(resolved)) {
80
+ if (!fs.existsSync(resolved)) {
81
81
  continue;
82
82
  }
83
83
  try {
84
- const payload = JSON.parse(syncFs.readFileSync(resolved, "utf-8"));
84
+ const payload = JSON.parse(fs.readFileSync(resolved, "utf-8"));
85
85
  entries.push(...parseCatalogEntries(payload));
86
86
  } catch {}
87
87
  }
@@ -8,7 +8,7 @@ import { formatDocsLink } from "../terminal/links.js";
8
8
  import { movePathToTrash } from "../browser/trash.js";
9
9
  import { copyToClipboard } from "../infra/clipboard.js";
10
10
  import { fileURLToPath } from "node:url";
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/cli/browser-cli-extension.ts
@@ -31,7 +31,7 @@ function installedExtensionRootDir() {
31
31
  return path.join(resolveStateDir(), "browser", "chrome-extension");
32
32
  }
33
33
  function hasManifest(dir) {
34
- return syncFs.existsSync(path.join(dir, "manifest.json"));
34
+ return fs.existsSync(path.join(dir, "manifest.json"));
35
35
  }
36
36
  async function installChromeExtension(opts) {
37
37
  const src = opts?.sourceDir ?? resolveBundledExtensionRootDir();
@@ -40,14 +40,14 @@ async function installChromeExtension(opts) {
40
40
  }
41
41
  const stateDir = opts?.stateDir ?? resolveStateDir();
42
42
  const dest = path.join(stateDir, "browser", "chrome-extension");
43
- syncFs.mkdirSync(path.dirname(dest), { recursive: true });
44
- if (syncFs.existsSync(dest)) {
43
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
44
+ if (fs.existsSync(dest)) {
45
45
  await movePathToTrash(dest).catch(() => {
46
46
  const backup = `${dest}.old-${Date.now()}`;
47
- syncFs.renameSync(dest, backup);
47
+ fs.renameSync(dest, backup);
48
48
  });
49
49
  }
50
- await syncFs.promises.cp(src, dest, { recursive: true });
50
+ await fs.promises.cp(src, dest, { recursive: true });
51
51
  if (!hasManifest(dest)) {
52
52
  throw new Error("Chrome extension install failed (manifest.json missing). Try again.");
53
53
  }
@@ -1,6 +1,6 @@
1
1
  import { replaceCliName, resolveCliName } from "./cli-name.js";
2
2
  import { normalizeProfileName } from "./profile-utils.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/cli/command-format.ts
@@ -17,7 +17,7 @@ function resolveHintCliInvocation(argv = process.argv) {
17
17
  return fallback;
18
18
  }
19
19
  const localRunner = path.resolve(process.cwd(), "scripts", "run-node.mjs");
20
- if (!syncFs.existsSync(localRunner)) {
20
+ if (!fs.existsSync(localRunner)) {
21
21
  return fallback;
22
22
  }
23
23
  return "node scripts/run-node.mjs";
@@ -1,13 +1,11 @@
1
1
  import { theme } from "../terminal/theme.js";
2
2
  import { defaultRuntime } from "../runtime.js";
3
- import { installPluginFromNpmSpec } from "../plugins/install.js";
4
3
  import { loadConfig, writeConfigFile } from "../config/io.js";
5
4
  import "../config/config.js";
6
5
  import { formatDocsLink } from "../terminal/links.js";
6
+ import { buildCapabilityReadinessReport, formatCapabilityReadinessSummary } from "../capabilities/catalog.js";
7
+ import { installCapabilityComponent } from "../capabilities/install.js";
7
8
  import { renderTable } from "../terminal/table.js";
8
- import { buildNpmResolutionInstallFields } from "../plugins/installs.js";
9
- import { finalizeInstalledPluginConfig } from "../plugins/lifecycle.js";
10
- import { buildCapabilityReadinessReport, formatCapabilityReadinessSummary, loadCapabilityCatalog } from "../capabilities/catalog.js";
11
9
 
12
10
  //#region src/cli/components-cli.ts
13
11
  function registerComponentsCli(program) {
@@ -18,36 +16,16 @@ function registerComponentsCli(program) {
18
16
  renderComponentReport(options);
19
17
  });
20
18
  components.command("install").description("Install a cataloged optional component").argument("<id>", "Component id from `fased components`").action(async (id) => {
21
- const entry = loadCapabilityCatalog().find((candidate) => candidate.id === id);
22
- if (!entry) {
23
- throw new Error(`Unknown component: ${id}. Run \`fased components\` to list choices.`);
24
- }
25
- if (entry.delivery !== "npm-addon" || !entry.packageName || !entry.pluginId) {
26
- throw new Error(`${entry.label} is delivered as ${entry.delivery} and cannot be installed as an add-on. See ${entry.docsPath}.`);
27
- }
28
- const result = await installPluginFromNpmSpec({ spec: entry.packageName });
29
- if (!result.ok) {
30
- throw new Error(result.error);
31
- }
32
- const config = loadConfig();
33
- const finalized = finalizeInstalledPluginConfig({
34
- config,
35
- pluginId: result.pluginId,
36
- refreshManifestRegistry: true,
37
- installRecord: {
38
- source: "npm",
39
- spec: entry.packageName,
40
- installPath: result.targetDir,
41
- version: result.version,
42
- ...buildNpmResolutionInstallFields(result.npmResolution)
43
- }
19
+ const result = await installCapabilityComponent({
20
+ id,
21
+ config: loadConfig()
44
22
  });
45
- await writeConfigFile(finalized.config);
46
- for (const warning of finalized.slotWarnings) {
23
+ await writeConfigFile(result.config);
24
+ for (const warning of result.slotWarnings) {
47
25
  defaultRuntime.log(theme.warn(warning));
48
26
  }
49
- defaultRuntime.log(`Installed component: ${entry.label} (${entry.packageName})`);
50
- if (entry.restartRequired !== false) {
27
+ defaultRuntime.log(`Installed component: ${result.entry.label} (${result.entry.packageName})`);
28
+ if (result.entry.restartRequired !== false) {
51
29
  defaultRuntime.log("Restart the gateway to apply the component.");
52
30
  }
53
31
  });
@@ -4,7 +4,7 @@ import { formatCronEscalationContext, formatCronEscalationPasses, formatCronRunL
4
4
  import { withTaskCoordinationRequest } from "../../cron/task-planner.js";
5
5
  import { addGatewayClientOptions, callGatewayFromCli } from "../gateway-rpc.js";
6
6
  import { warnIfCronSchedulerDisabled } from "./shared.js";
7
- import syncFs from "node:fs";
7
+ import fs from "node:fs";
8
8
 
9
9
  //#region src/cli/cron-cli/register.cron-simple.ts
10
10
  const QUEUE_CONTROL_METHODS = {
@@ -100,7 +100,7 @@ function formatUnknownField(value, fallback) {
100
100
  return JSON.stringify(value);
101
101
  }
102
102
  function readWorkflowJsonFile(filePath) {
103
- const raw = syncFs.readFileSync(filePath, "utf8");
103
+ const raw = fs.readFileSync(filePath, "utf8");
104
104
  const parsed = JSON.parse(raw);
105
105
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
106
106
  throw new Error("Workflow file must contain a JSON object.");
@@ -6,7 +6,7 @@ import { pickPrimaryTailnetIPv4, pickPrimaryTailnetIPv6 } from "../infra/tailnet
6
6
  import { formatDocsLink } from "../terminal/links.js";
7
7
  import { renderTable } from "../terminal/table.js";
8
8
  import { getWideAreaZonePath, resolveWideAreaDiscoveryDomain } from "../infra/widearea-dns.js";
9
- import syncFs from "node:fs";
9
+ import fs from "node:fs";
10
10
  import path from "node:path";
11
11
  import { spawnSync } from "node:child_process";
12
12
 
@@ -27,7 +27,7 @@ function run(cmd, args, opts) {
27
27
  }
28
28
  function writeFileSudoIfNeeded(filePath, content) {
29
29
  try {
30
- syncFs.writeFileSync(filePath, content, "utf-8");
30
+ fs.writeFileSync(filePath, content, "utf-8");
31
31
  return;
32
32
  } catch (err) {
33
33
  const code = err.code;
@@ -53,7 +53,7 @@ function writeFileSudoIfNeeded(filePath, content) {
53
53
  }
54
54
  function mkdirSudoIfNeeded(dirPath) {
55
55
  try {
56
- syncFs.mkdirSync(dirPath, { recursive: true });
56
+ fs.mkdirSync(dirPath, { recursive: true });
57
57
  return;
58
58
  } catch (err) {
59
59
  const code = err.code;
@@ -68,11 +68,11 @@ function mkdirSudoIfNeeded(dirPath) {
68
68
  ], { inherit: true });
69
69
  }
70
70
  function zoneFileNeedsBootstrap(zonePath) {
71
- if (!syncFs.existsSync(zonePath)) {
71
+ if (!fs.existsSync(zonePath)) {
72
72
  return true;
73
73
  }
74
74
  try {
75
- const content = syncFs.readFileSync(zonePath, "utf-8");
75
+ const content = fs.readFileSync(zonePath, "utf-8");
76
76
  return !/\bSOA\b/.test(content) || !/\bNS\b/.test(content);
77
77
  } catch {
78
78
  return true;
@@ -87,7 +87,7 @@ function detectBrewPrefix() {
87
87
  return prefix;
88
88
  }
89
89
  function ensureImportLine(corefilePath, importGlob) {
90
- const existing = syncFs.readFileSync(corefilePath, "utf-8");
90
+ const existing = fs.readFileSync(corefilePath, "utf-8");
91
91
  if (existing.includes(importGlob)) {
92
92
  return false;
93
93
  }
@@ -171,7 +171,7 @@ function registerDnsCli(program) {
171
171
  allowFailure: true
172
172
  });
173
173
  mkdirSudoIfNeeded(confDir);
174
- if (!syncFs.existsSync(corefilePath)) {
174
+ if (!fs.existsSync(corefilePath)) {
175
175
  writeFileSudoIfNeeded(corefilePath, `import ${importGlob}\n`);
176
176
  } else {
177
177
  ensureImportLine(corefilePath, importGlob);
@@ -189,7 +189,7 @@ function registerDnsCli(program) {
189
189
  ``
190
190
  ].join("\n");
191
191
  writeFileSudoIfNeeded(serverPath, server);
192
- await syncFs.promises.mkdir(path.dirname(zonePath), { recursive: true });
192
+ await fs.promises.mkdir(path.dirname(zonePath), { recursive: true });
193
193
  if (zoneFileNeedsBootstrap(zonePath)) {
194
194
  const y = new Date().getUTCFullYear();
195
195
  const m = String(new Date().getUTCMonth() + 1).padStart(2, "0");
@@ -205,7 +205,7 @@ function registerDnsCli(program) {
205
205
  tailnetIPv6 ? `ns1 IN AAAA ${tailnetIPv6}` : null,
206
206
  ``
207
207
  ].filter((line) => Boolean(line));
208
- syncFs.writeFileSync(zonePath, zoneLines.join("\n"), "utf-8");
208
+ fs.writeFileSync(zonePath, zoneLines.join("\n"), "utf-8");
209
209
  }
210
210
  defaultRuntime.log("");
211
211
  defaultRuntime.log(theme.heading("Starting CoreDNS (sudo)…"));
@@ -5,7 +5,7 @@ import { resolveDefaultAgentWorkspaceDir } from "../../agents/workspace.js";
5
5
  import { createConfigIO, writeConfigFile } from "../../config/io.js";
6
6
  import "../../config/config.js";
7
7
  import { handleReset } from "../../commands/onboard-helpers.js";
8
- import syncFs from "node:fs";
8
+ import fs from "node:fs";
9
9
  import os from "node:os";
10
10
  import path from "node:path";
11
11
 
@@ -17,7 +17,7 @@ const DEV_AGENT_WORKSPACE_SUFFIX = "dev";
17
17
  async function loadDevTemplate(name, fallback) {
18
18
  try {
19
19
  const templateDir = await resolveWorkspaceTemplateDir();
20
- const raw = await syncFs.promises.readFile(path.join(templateDir, name), "utf-8");
20
+ const raw = await fs.promises.readFile(path.join(templateDir, name), "utf-8");
21
21
  if (!raw.startsWith("---")) {
22
22
  return raw;
23
23
  }
@@ -40,7 +40,7 @@ const resolveDevWorkspaceDir = (env = process.env) => {
40
40
  };
41
41
  async function writeFileIfMissing(filePath, content) {
42
42
  try {
43
- await syncFs.promises.writeFile(filePath, content, {
43
+ await fs.promises.writeFile(filePath, content, {
44
44
  encoding: "utf-8",
45
45
  flag: "wx"
46
46
  });
@@ -53,7 +53,7 @@ async function writeFileIfMissing(filePath, content) {
53
53
  }
54
54
  async function ensureDevWorkspace(dir) {
55
55
  const resolvedDir = resolveUserPath(dir);
56
- await syncFs.promises.mkdir(resolvedDir, { recursive: true });
56
+ await fs.promises.mkdir(resolvedDir, { recursive: true });
57
57
  const [agents, soul, tools, identity, user] = await Promise.all([
58
58
  loadDevTemplate("AGENTS.dev.md", `# AGENTS.md - FasedAgent Dev Workspace\n\nDefault dev workspace for fased gateway --dev.\n`),
59
59
  loadDevTemplate("SOUL.dev.md", `# SOUL.md - Dev Persona\n\nProtocol droid for debugging and operations.\n`),
@@ -74,7 +74,7 @@ async function ensureDevGatewayConfig(opts) {
74
74
  }
75
75
  const io = createConfigIO();
76
76
  const configPath = io.configPath;
77
- const configExists = syncFs.existsSync(configPath);
77
+ const configExists = fs.existsSync(configPath);
78
78
  if (!opts.reset && configExists) {
79
79
  return;
80
80
  }
@@ -20,7 +20,7 @@ import { startGatewayServer } from "../../gateway/server.impl.js";
20
20
  import "../../gateway/server.js";
21
21
  import { ensureDevGatewayConfig } from "./dev.js";
22
22
  import { runGatewayLoop } from "./run-loop.js";
23
- import syncFs from "node:fs";
23
+ import fs from "node:fs";
24
24
  import path from "node:path";
25
25
 
26
26
  //#region src/cli/gateway-cli/run.ts
@@ -145,7 +145,7 @@ async function runGatewayCommand(opts) {
145
145
  const passwordRaw = toOptionString(opts.password);
146
146
  const tokenRaw = toOptionString(opts.token);
147
147
  const snapshot = await readConfigFileSnapshot().catch(() => null);
148
- const configExists = snapshot?.exists ?? syncFs.existsSync(CONFIG_PATH);
148
+ const configExists = snapshot?.exists ?? fs.existsSync(CONFIG_PATH);
149
149
  const configAuditPath = path.join(resolveStateDir(process.env), "logs", "config-audit.jsonl");
150
150
  const mode = cfg.gateway?.mode;
151
151
  if (!opts.allowUnconfigured && mode !== "local") {
@@ -7,16 +7,16 @@ import { resolveArchiveKind } from "../infra/archive.js";
7
7
  import { loadConfig, writeConfigFile } from "../config/io.js";
8
8
  import { promptYesNo } from "./prompt.js";
9
9
  import { formatDocsLink } from "../terminal/links.js";
10
- import { renderTable } from "../terminal/table.js";
11
10
  import { buildPluginStatusReport } from "../plugins/status.js";
11
+ import { renderTable } from "../terminal/table.js";
12
12
  import { loadWorkspaceHookEntries } from "../hooks/workspace.js";
13
13
  import { buildWorkspaceHookStatus } from "../hooks/hooks-status.js";
14
14
  import { installHooksFromNpmSpec, installHooksFromPath, resolveHookInstallDir } from "../hooks/install.js";
15
15
  import { recordHookInstall } from "../hooks/installs.js";
16
16
  import { buildNpmInstallRecordFields, resolvePinnedNpmInstallRecordForCli } from "./npm-resolution.js";
17
- import syncFs from "node:fs";
17
+ import fs from "node:fs";
18
18
  import path from "node:path";
19
- import fs from "node:fs/promises";
19
+ import fs$1 from "node:fs/promises";
20
20
 
21
21
  //#region src/cli/hooks-cli.ts
22
22
  function mergeHookEntries(pluginEntries, workspaceEntries) {
@@ -139,7 +139,7 @@ function logIntegrityDriftWarning(hookId, drift) {
139
139
  }
140
140
  async function readInstalledPackageVersion(dir) {
141
141
  try {
142
- const raw = await fs.readFile(path.join(dir, "package.json"), "utf-8");
142
+ const raw = await fs$1.readFile(path.join(dir, "package.json"), "utf-8");
143
143
  const parsed = JSON.parse(raw);
144
144
  return typeof parsed.version === "string" ? parsed.version : undefined;
145
145
  } catch {
@@ -430,9 +430,9 @@ function registerHooksCli(program) {
430
430
  hooks.command("install").description("Install a hook pack (path, archive, or npm spec)").argument("<path-or-spec>", "Path to a hook pack or npm package spec").option("-l, --link", "Link a local path instead of copying", false).option("--pin", "Record npm installs as exact resolved <name>@<version>", false).action(async (raw, opts) => {
431
431
  const resolved = resolveUserPath(raw);
432
432
  const cfg = loadConfig();
433
- if (syncFs.existsSync(resolved)) {
433
+ if (fs.existsSync(resolved)) {
434
434
  if (opts.link) {
435
- const stat = syncFs.statSync(resolved);
435
+ const stat = fs.statSync(resolved);
436
436
  if (!stat.isDirectory()) {
437
437
  defaultRuntime.error("Linked hook paths must be directories.");
438
438
  process.exit(1);
@@ -1,10 +1,10 @@
1
1
  import { resolvePluginStatusConfigPath } from "../../plugins/status-cache.js";
2
- import syncFs from "node:fs";
2
+ import fs from "node:fs";
3
3
 
4
4
  //#region src/cli/lightweight/gateway-runtime-probe.ts
5
5
  function readGatewayProbeConfig(configPath) {
6
6
  try {
7
- const parsed = JSON.parse(syncFs.readFileSync(configPath, "utf8"));
7
+ const parsed = JSON.parse(fs.readFileSync(configPath, "utf8"));
8
8
  const configuredPort = parsed.gateway?.port;
9
9
  return {
10
10
  port: typeof configuredPort === "number" && Number.isInteger(configuredPort) ? configuredPort : 18789,
@@ -17,10 +17,10 @@ import { formatDocsLink } from "../terminal/links.js";
17
17
  import { withManager } from "./cli-utils.js";
18
18
  import { formatHelpExamples } from "./help-format.js";
19
19
  import { withProgress, withProgressTotals } from "./progress.js";
20
- import syncFs from "node:fs";
20
+ import fs from "node:fs";
21
21
  import os from "node:os";
22
22
  import path from "node:path";
23
- import fs from "node:fs/promises";
23
+ import fs$1 from "node:fs/promises";
24
24
 
25
25
  //#region src/cli/memory-cli.ts
26
26
  function formatSourceLabel(source, workspaceDir, agentId) {
@@ -74,7 +74,7 @@ async function withMemoryManagerForAgent(params) {
74
74
  }
75
75
  async function checkReadableFile(pathname) {
76
76
  try {
77
- await fs.access(pathname, syncFs.constants.R_OK);
77
+ await fs$1.access(pathname, fs.constants.R_OK);
78
78
  return { exists: true };
79
79
  } catch (err) {
80
80
  const code = err.code;
@@ -91,7 +91,7 @@ async function scanSessionFiles(agentId) {
91
91
  const issues = [];
92
92
  const sessionsDir = resolveSessionTranscriptsDirForAgent(agentId);
93
93
  try {
94
- const entries = await fs.readdir(sessionsDir, { withFileTypes: true });
94
+ const entries = await fs$1.readdir(sessionsDir, { withFileTypes: true });
95
95
  const totalFiles = entries.filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl")).length;
96
96
  return {
97
97
  source: "sessions",
@@ -132,7 +132,7 @@ async function scanMemoryFiles(workspaceDir, extraPaths = []) {
132
132
  const resolvedExtraPaths = normalizeExtraMemoryPaths(workspaceDir, extraPaths);
133
133
  for (const extraPath of resolvedExtraPaths) {
134
134
  try {
135
- const stat = await fs.lstat(extraPath);
135
+ const stat = await fs$1.lstat(extraPath);
136
136
  if (stat.isSymbolicLink()) {
137
137
  continue;
138
138
  }
@@ -151,7 +151,7 @@ async function scanMemoryFiles(workspaceDir, extraPaths = []) {
151
151
  }
152
152
  let dirReadable = null;
153
153
  try {
154
- await fs.access(memoryDir, syncFs.constants.R_OK);
154
+ await fs$1.access(memoryDir, fs.constants.R_OK);
155
155
  dirReadable = true;
156
156
  } catch (err) {
157
157
  const code = err.code;
@@ -210,7 +210,7 @@ async function summarizeQmdIndexArtifact(manager) {
210
210
  }
211
211
  let stat;
212
212
  try {
213
- stat = await fs.stat(dbPath);
213
+ stat = await fs$1.stat(dbPath);
214
214
  } catch (err) {
215
215
  const code = err.code;
216
216
  if (code === "ENOENT") {
@@ -1,5 +1,5 @@
1
1
  import { resolvePreferredFasedAgentTmpDir } from "../infra/tmp-fased-dir.js";
2
- import syncFs from "node:fs";
2
+ import fs from "node:fs";
3
3
  import { randomUUID } from "node:crypto";
4
4
 
5
5
  //#region src/cli/nodes-media-utils.ts
@@ -18,7 +18,7 @@ function asBoolean(value) {
18
18
  function resolveTempPathParts(opts) {
19
19
  const tmpDir = opts.tmpDir ?? resolvePreferredFasedAgentTmpDir();
20
20
  if (!opts.tmpDir) {
21
- syncFs.mkdirSync(tmpDir, {
21
+ fs.mkdirSync(tmpDir, {
22
22
  recursive: true,
23
23
  mode: 448
24
24
  });
@@ -7,13 +7,13 @@ import { installPluginFromNpmSpec, installPluginFromPath } from "../plugins/inst
7
7
  import { loadConfig, writeConfigFile } from "../config/io.js";
8
8
  import "../config/config.js";
9
9
  import { promptYesNo } from "./prompt.js";
10
- import { formatDocsLink } from "../terminal/links.js";
11
- import { renderTable } from "../terminal/table.js";
12
- import { findBundledPluginByNpmSpec } from "../plugins/bundled-sources.js";
13
10
  import { setPluginEnabledInConfig } from "../plugins/toggle-config.js";
14
11
  import { enablePluginInConfig } from "../plugins/enable.js";
12
+ import { formatDocsLink } from "../terminal/links.js";
13
+ import { findBundledPluginByNpmSpec } from "../plugins/bundled-sources.js";
15
14
  import { applySlotSelectionForPlugin, buildPluginLifecycleReport, buildPluginUninstallPreview, executePluginUninstallLifecycle, executePluginUpdateLifecycle, finalizeInstalledPluginConfig } from "../plugins/lifecycle.js";
16
15
  import { buildPluginMarketplaceReport } from "../plugins/marketplace.js";
16
+ import { renderTable } from "../terminal/table.js";
17
17
  import { buildPluginMarketplaceUpdateReview, formatPluginMarketplaceUpdateReviewWarnings } from "../plugins/marketplace-update-review.js";
18
18
  import { getPluginRuntimeSessionReadGrant, setPluginRuntimeSessionReadGrant } from "../plugins/runtime-helper-grants.js";
19
19
  import { resolvePinnedNpmInstallRecordForCli } from "./npm-resolution.js";
@@ -22,7 +22,7 @@ import "./plugins-config.js";
22
22
  import { pluginDoctorCommand } from "./plugins-doctor-cli.js";
23
23
  import { pluginInfoCommand } from "./plugins-info-cli.js";
24
24
  import "./plugins-status-cli.js";
25
- import syncFs from "node:fs";
25
+ import fs from "node:fs";
26
26
  import os from "node:os";
27
27
  import path from "node:path";
28
28
 
@@ -428,7 +428,7 @@ function registerPluginsCli(program) {
428
428
  const normalized = fileSpec && fileSpec.ok ? fileSpec.path : raw;
429
429
  const resolved = resolveUserPath(normalized);
430
430
  const cfg = loadConfig();
431
- if (syncFs.existsSync(resolved)) {
431
+ if (fs.existsSync(resolved)) {
432
432
  if (opts.link) {
433
433
  const probe = await installPluginFromPath({
434
434
  path: resolved,
@@ -7,12 +7,12 @@ import { isSecretsApplyPlan } from "../secrets/plan.js";
7
7
  import { runSecretsApply } from "../secrets/apply.js";
8
8
  import { resolveSecretsAuditExitCode, runSecretsAudit } from "../secrets/audit.js";
9
9
  import { runSecretsConfigureInteractive } from "../secrets/configure.js";
10
- import syncFs from "node:fs";
10
+ import fs from "node:fs";
11
11
  import { confirm } from "@clack/prompts";
12
12
 
13
13
  //#region src/cli/secrets-cli.ts
14
14
  function readPlanFile(pathname) {
15
- const raw = syncFs.readFileSync(pathname, "utf8");
15
+ const raw = fs.readFileSync(pathname, "utf8");
16
16
  const parsed = JSON.parse(raw);
17
17
  if (!isSecretsApplyPlan(parsed)) {
18
18
  throw new Error(`Invalid secrets plan file: ${pathname}`);
@@ -71,7 +71,7 @@ function registerSecretsCli(program) {
71
71
  skipProviderSetup: Boolean(opts.skipProviderSetup)
72
72
  });
73
73
  if (opts.planOut) {
74
- syncFs.writeFileSync(opts.planOut, `${JSON.stringify(configured.plan, null, 2)}\n`, "utf8");
74
+ fs.writeFileSync(opts.planOut, `${JSON.stringify(configured.plan, null, 2)}\n`, "utf8");
75
75
  }
76
76
  if (opts.json) {
77
77
  defaultRuntime.log(JSON.stringify({
@@ -9,6 +9,8 @@ import { readConfigFileSnapshot, writeConfigFile } from "../../config/io.js";
9
9
  import "../../config/config.js";
10
10
  import { loadGatewayTlsRuntime } from "../../infra/tls/gateway.js";
11
11
  import { stylePromptMessage } from "../../terminal/prompt-style.js";
12
+ import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../../plugins/update.js";
13
+ import { OPENAI_RUNTIME_COMPONENT_ID, ensureOpenAICodexRuntimeComponent, hasConfiguredOpenAICodexProfile } from "../../agents/openai-codex-runtime-component.js";
12
14
  import { DEFAULT_GIT_CHANNEL, DEFAULT_PACKAGE_CHANNEL, channelToNpmTag, normalizeUpdateChannel } from "../../infra/update-channels.js";
13
15
  import { cleanupGlobalRenameDirs, globalInstallArgs, resolveGlobalPackageRoot, resolveNodeModulesRootForPackageRoot } from "../../infra/update-global.js";
14
16
  import { checkUpdateStatus, compareSemverStrings, resolveNpmChannelTag } from "../../infra/update-check.js";
@@ -18,7 +20,6 @@ import { renderRestartDiagnostics, terminateStaleGatewayPids, waitForGatewayHeal
18
20
  import { runDaemonRestart } from "../daemon-cli/lifecycle.js";
19
21
  import "../../daemon-cli.js";
20
22
  import { installCompletion } from "../completion-cli.js";
21
- import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../../plugins/update.js";
22
23
  import { readPackageName, readPackageVersion } from "../../infra/package-json.js";
23
24
  import { finalizeUpdateTransaction, rollbackUpdateTransaction, runGatewayUpdate } from "../../infra/update-runner.js";
24
25
  import { checkShellCompletionStatus, ensureCompletionCacheExists } from "../../commands/doctor-completion.js";
@@ -422,14 +423,32 @@ async function updatePluginsAfterCoreUpdate(params) {
422
423
  config: params.configSnapshot.config,
423
424
  updateCompleted: true
424
425
  });
425
- const installs = repairResult.config.plugins?.installs ?? {};
426
+ let pluginConfig = repairResult.config;
427
+ let installedOpenAIRuntime = false;
428
+ if (hasConfiguredOpenAICodexProfile(pluginConfig)) {
429
+ const runtimeComponent = await ensureOpenAICodexRuntimeComponent({
430
+ config: pluginConfig,
431
+ version: params.targetVersion
432
+ });
433
+ pluginConfig = runtimeComponent.config;
434
+ installedOpenAIRuntime = runtimeComponent.installed;
435
+ if (runtimeComponent.installed && !params.opts.json) {
436
+ defaultRuntime.log(theme.muted("Installed the managed OpenAI sign-in runtime required by the existing ChatGPT credential."));
437
+ }
438
+ for (const warning of runtimeComponent.slotWarnings) {
439
+ if (!params.opts.json) {
440
+ defaultRuntime.log(theme.warn(warning));
441
+ }
442
+ }
443
+ }
444
+ const installs = pluginConfig.plugins?.installs ?? {};
426
445
  if (Object.keys(installs).length === 0) {
427
- if (repairResult.changed) {
428
- await writeConfigFile(repairResult.config);
446
+ if (repairResult.changed || installedOpenAIRuntime) {
447
+ await writeConfigFile(pluginConfig);
429
448
  }
430
449
  return {
431
- changed: repairResult.changed,
432
- checked: false
450
+ changed: repairResult.changed || installedOpenAIRuntime,
451
+ checked: installedOpenAIRuntime
433
452
  };
434
453
  }
435
454
  const pluginLogger = params.opts.json ? {} : {
@@ -442,25 +461,25 @@ async function updatePluginsAfterCoreUpdate(params) {
442
461
  defaultRuntime.log(theme.heading("Updating plugins..."));
443
462
  }
444
463
  const syncResult = await syncPluginsForUpdateChannel({
445
- config: repairResult.config,
464
+ config: pluginConfig,
446
465
  channel: params.channel,
447
466
  workspaceDir: params.root,
448
467
  logger: pluginLogger
449
468
  });
450
- let pluginConfig = syncResult.config;
469
+ pluginConfig = syncResult.config;
451
470
  const npmResult = await updateNpmInstalledPlugins({
452
471
  config: pluginConfig,
453
- skipIds: new Set(syncResult.summary.switchedToNpm),
472
+ skipIds: new Set([...syncResult.summary.switchedToNpm, ...installedOpenAIRuntime ? [OPENAI_RUNTIME_COMPONENT_ID] : []]),
454
473
  updateChannel: params.channel,
455
474
  logger: pluginLogger
456
475
  });
457
476
  pluginConfig = npmResult.config;
458
- if (repairResult.changed || syncResult.changed || npmResult.changed) {
477
+ if (repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed) {
459
478
  await writeConfigFile(pluginConfig);
460
479
  }
461
480
  if (params.opts.json) {
462
481
  return {
463
- changed: repairResult.changed || syncResult.changed || npmResult.changed,
482
+ changed: repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed,
464
483
  checked: true
465
484
  };
466
485
  }
@@ -511,7 +530,7 @@ async function updatePluginsAfterCoreUpdate(params) {
511
530
  defaultRuntime.log(theme.error(outcome.message));
512
531
  }
513
532
  return {
514
- changed: repairResult.changed || syncResult.changed || npmResult.changed,
533
+ changed: repairResult.changed || installedOpenAIRuntime || syncResult.changed || npmResult.changed,
515
534
  checked: true
516
535
  };
517
536
  }
@@ -802,6 +821,24 @@ async function updateCommand(opts) {
802
821
  }
803
822
  }
804
823
  if (alreadyCurrent && currentVersion && targetVersion) {
824
+ if (configSnapshot.valid && hasConfiguredOpenAICodexProfile(configSnapshot.config)) {
825
+ try {
826
+ const runtimeComponent = await ensureOpenAICodexRuntimeComponent({
827
+ config: configSnapshot.config,
828
+ version: targetVersion
829
+ });
830
+ if (runtimeComponent.installed) {
831
+ await writeConfigFile(runtimeComponent.config);
832
+ if (!opts.json) {
833
+ defaultRuntime.log(theme.muted("Installed the version-matched OpenAI sign-in runtime required by the current release."));
834
+ }
835
+ }
836
+ } catch (error) {
837
+ defaultRuntime.error(`OpenAI sign-in runtime update failed: ${String(error)}`);
838
+ defaultRuntime.exit(1);
839
+ return;
840
+ }
841
+ }
805
842
  const runningRuntime = await probeRunningGatewayRuntimeIdentity({ timeoutMs: 750 });
806
843
  if (runningRuntime.reachable && runningRuntime.version !== currentVersion) {
807
844
  if (!shouldRestart) {
@@ -1000,6 +1037,7 @@ async function updateCommand(opts) {
1000
1037
  const pluginResult = await measureUpdateStage(lifecycleTimings, "plugin updates", () => updatePluginsAfterCoreUpdate({
1001
1038
  root,
1002
1039
  channel,
1040
+ targetVersion: result.after?.version ?? targetVersion ?? undefined,
1003
1041
  configSnapshot,
1004
1042
  opts
1005
1043
  }));
@@ -1,4 +1,4 @@
1
- import syncFs from "node:fs";
1
+ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/cli/windows-argv.ts
@@ -33,7 +33,7 @@ function normalizeWindowsArgv(argv) {
33
33
  return false;
34
34
  }
35
35
  const lower = normalized.toLowerCase();
36
- return lower === execPathLower || path.basename(lower) === execBase || lower.endsWith("\\node.exe") || lower.endsWith("/node.exe") || lower.includes("node.exe") || path.basename(lower) === "node.exe" && syncFs.existsSync(normalized);
36
+ return lower === execPathLower || path.basename(lower) === execBase || lower.endsWith("\\node.exe") || lower.endsWith("/node.exe") || lower.includes("node.exe") || path.basename(lower) === "node.exe" && fs.existsSync(normalized);
37
37
  };
38
38
  const next = [...argv];
39
39
  for (let i = 1; i <= 3 && i < next.length;) {
@@ -19,7 +19,6 @@ import { resolveAndPersistSessionFile } from "../config/sessions/session-file.js
19
19
  import { parseSessionThreadInfo } from "../config/sessions/delivery-info.js";
20
20
  import "../config/sessions.js";
21
21
  import { resolveMessageChannel } from "../utils/message-channel.js";
22
- import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
23
22
  import { clearAgentRunContext, emitAgentEvent, registerAgentRunContext } from "../infra/agent-events.js";
24
23
  import { AGENT_LANE_SUBAGENT } from "../agents/lanes.js";
25
24
  import { buildOutboundSessionContext } from "../infra/outbound/session-context.js";
@@ -27,6 +26,7 @@ import { resolveSendPolicy } from "../sessions/send-policy.js";
27
26
  import { toAcpRuntimeError } from "../acp/runtime/errors.js";
28
27
  import { getAcpSessionManager } from "../acp/control-plane/manager.js";
29
28
  import { resolveAcpAgentPolicyError, resolveAcpDispatchPolicyError } from "../acp/policy.js";
29
+ import { buildCredentialScopedAllowedModelSet } from "../agents/model-catalog-access.js";
30
30
  import { loadModelCatalog } from "../agents/model-catalog.js";
31
31
  import { runWithModelFallback } from "../agents/model-fallback.js";
32
32
  import { applyModelOverrideToSessionEntry } from "../sessions/model-overrides.js";