@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
@@ -5,7 +5,7 @@ import { loadPluginManifest } from "./manifest.js";
5
5
  import { safeRealpathSync } from "./path-safety.js";
6
6
  import { discoverFasedAgentPlugins } from "./discovery.js";
7
7
  import { checkMinHostVersion } from "./min-host-version.js";
8
- import syncFs from "node:fs";
8
+ import fs from "node:fs";
9
9
  import path from "node:path";
10
10
 
11
11
  //#region src/plugins/manifest-registry.ts
@@ -18,6 +18,12 @@ const PLUGIN_ORIGIN_RANK = {
18
18
  const registryCache = new Map();
19
19
  const DEFAULT_MANIFEST_CACHE_MS = 200;
20
20
  const LEGACY_REMOVED_PLUGIN_IDS = new Set();
21
+ function isRuntimeOnlyComponent(params) {
22
+ if (params.manifest.runtimeOnly === true) {
23
+ return true;
24
+ }
25
+ return params.manifest.id === "openai-runtime" && params.candidate.packageName === "@fased/openai-runtime";
26
+ }
21
27
  function clearPluginManifestRegistryCache() {
22
28
  registryCache.clear();
23
29
  }
@@ -49,7 +55,7 @@ function buildCacheKey(params) {
49
55
  }
50
56
  function safeStatMtimeMs(filePath) {
51
57
  try {
52
- return syncFs.statSync(filePath).mtimeMs;
58
+ return fs.statSync(filePath).mtimeMs;
53
59
  } catch {
54
60
  return null;
55
61
  }
@@ -91,6 +97,7 @@ function buildRecord(params) {
91
97
  });
92
98
  return {
93
99
  id: params.manifest.id,
100
+ runtimeOnly: isRuntimeOnlyComponent(params) ? true : undefined,
94
101
  name: normalizeManifestLabel(params.manifest.name) ?? params.candidate.packageName,
95
102
  description: normalizeManifestLabel(params.manifest.description) ?? params.candidate.packageDescription,
96
103
  version: normalizeManifestLabel(params.manifest.version) ?? params.candidate.packageVersion,
@@ -213,6 +220,25 @@ function loadPluginManifestRegistry(params) {
213
220
  }
214
221
  continue;
215
222
  }
223
+ if (isRuntimeOnlyComponent({
224
+ manifest,
225
+ candidate
226
+ }) && records[existing.recordIndex]?.runtimeOnly === true) {
227
+ if (PLUGIN_ORIGIN_RANK[candidate.origin] < PLUGIN_ORIGIN_RANK[existing.candidate.origin]) {
228
+ records[existing.recordIndex] = buildRecord({
229
+ manifest,
230
+ candidate,
231
+ manifestPath: manifestRes.manifestPath,
232
+ schemaCacheKey,
233
+ configSchema
234
+ });
235
+ seenIds.set(manifest.id, {
236
+ candidate,
237
+ recordIndex: existing.recordIndex
238
+ });
239
+ }
240
+ continue;
241
+ }
216
242
  diagnostics.push({
217
243
  level: "warn",
218
244
  pluginId: manifest.id,
@@ -1,7 +1,7 @@
1
1
  import { isRecord } from "../utils.js";
2
2
  import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
3
3
  import { MANIFEST_KEY } from "../project.js";
4
- import syncFs from "node:fs";
4
+ import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import JSON5 from "json5";
7
7
 
@@ -169,7 +169,7 @@ function normalizeChannelConfigs(value) {
169
169
  function resolvePluginManifestPath(rootDir) {
170
170
  for (const filename of PLUGIN_MANIFEST_FILENAMES) {
171
171
  const candidate = path.join(rootDir, filename);
172
- if (syncFs.existsSync(candidate)) {
172
+ if (fs.existsSync(candidate)) {
173
173
  return candidate;
174
174
  }
175
175
  }
@@ -198,7 +198,7 @@ function loadPluginManifest(rootDir) {
198
198
  }
199
199
  let raw;
200
200
  try {
201
- raw = JSON5.parse(syncFs.readFileSync(opened.fd, "utf-8"));
201
+ raw = JSON5.parse(fs.readFileSync(opened.fd, "utf-8"));
202
202
  } catch (err) {
203
203
  return {
204
204
  ok: false,
@@ -206,7 +206,7 @@ function loadPluginManifest(rootDir) {
206
206
  manifestPath
207
207
  };
208
208
  } finally {
209
- syncFs.closeSync(opened.fd);
209
+ fs.closeSync(opened.fd);
210
210
  }
211
211
  if (!isRecord(raw)) {
212
212
  return {
@@ -232,6 +232,7 @@ function loadPluginManifest(rootDir) {
232
232
  };
233
233
  }
234
234
  const enabledByDefault = raw.enabledByDefault === true;
235
+ const runtimeOnly = raw.runtimeOnly === true;
235
236
  const legacyPluginIds = normalizeStringList(raw.legacyPluginIds);
236
237
  const autoEnableWhenConfiguredProviders = normalizeStringList(raw.autoEnableWhenConfiguredProviders);
237
238
  const kind = typeof raw.kind === "string" ? raw.kind : undefined;
@@ -256,6 +257,7 @@ function loadPluginManifest(rootDir) {
256
257
  manifest: {
257
258
  id,
258
259
  configSchema,
260
+ ...runtimeOnly ? { runtimeOnly: true } : {},
259
261
  ...enabledByDefault ? { enabledByDefault } : {},
260
262
  ...legacyPluginIds.length > 0 ? { legacyPluginIds } : {},
261
263
  ...autoEnableWhenConfiguredProviders.length > 0 ? { autoEnableWhenConfiguredProviders } : {},
@@ -2,9 +2,9 @@ import { PLUGIN_ADMIN_RPC_ACTION_METHODS, isPluginRuntimeSessionReadAllowed, nor
2
2
  import { loadPluginManifestRegistry } from "./manifest-registry.js";
3
3
  import { loadConfig } from "../config/io.js";
4
4
  import "../config/config.js";
5
- import { listChannelPluginCatalogEntries } from "../channels/plugins/catalog.js";
6
5
  import { resolveBundledPluginSources } from "./bundled-sources.js";
7
6
  import { buildPluginLifecycleReport } from "./lifecycle.js";
7
+ import { listChannelPluginCatalogEntries } from "../channels/plugins/catalog.js";
8
8
  import path from "node:path";
9
9
 
10
10
  //#region src/plugins/marketplace.ts
@@ -1,5 +1,5 @@
1
1
  import { isPathInside as isPathInside$1 } from "../infra/path-guards.js";
2
- import syncFs from "node:fs";
2
+ import fs from "node:fs";
3
3
 
4
4
  //#region src/plugins/path-safety.ts
5
5
  function isPathInside(baseDir, targetPath) {
@@ -11,7 +11,7 @@ function safeRealpathSync(targetPath, cache) {
11
11
  return cached;
12
12
  }
13
13
  try {
14
- const resolved = syncFs.realpathSync(targetPath);
14
+ const resolved = fs.realpathSync(targetPath);
15
15
  cache?.set(targetPath, resolved);
16
16
  return resolved;
17
17
  } catch {
@@ -20,7 +20,7 @@ function safeRealpathSync(targetPath, cache) {
20
20
  }
21
21
  function safeStatSync(targetPath) {
22
22
  try {
23
- return syncFs.statSync(targetPath);
23
+ return fs.statSync(targetPath);
24
24
  } catch {
25
25
  return null;
26
26
  }
@@ -1,4 +1,4 @@
1
- import syncFs from "node:fs";
1
+ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { createHash } from "node:crypto";
@@ -7,7 +7,7 @@ import { createHash } from "node:crypto";
7
7
  const CACHE_SCHEMA_VERSION = 2;
8
8
  function statMtimeMs(filePath) {
9
9
  try {
10
- return syncFs.statSync(filePath).mtimeMs;
10
+ return fs.statSync(filePath).mtimeMs;
11
11
  } catch {
12
12
  return null;
13
13
  }
@@ -23,7 +23,7 @@ function canonicalize(value) {
23
23
  }
24
24
  function configFingerprint(configPath) {
25
25
  try {
26
- const parsed = JSON.parse(syncFs.readFileSync(configPath, "utf8"));
26
+ const parsed = JSON.parse(fs.readFileSync(configPath, "utf8"));
27
27
  return createHash("sha256").update(JSON.stringify(canonicalize({ plugins: parsed.plugins }))).digest("hex");
28
28
  } catch {
29
29
  return createHash("sha256").update("missing-config").digest("hex");
@@ -41,9 +41,9 @@ function readCurrentPackageVersion(argv1) {
41
41
  return null;
42
42
  }
43
43
  try {
44
- const entry = syncFs.realpathSync(argv1);
44
+ const entry = fs.realpathSync(argv1);
45
45
  const packagePath = path.join(path.dirname(entry), "package.json");
46
- const parsed = JSON.parse(syncFs.readFileSync(packagePath, "utf8"));
46
+ const parsed = JSON.parse(fs.readFileSync(packagePath, "utf8"));
47
47
  return typeof parsed.version === "string" ? parsed.version : null;
48
48
  } catch {
49
49
  return null;
@@ -53,7 +53,7 @@ function readValidPluginStatusCache(params) {
53
53
  const cachePath = params.cachePath ?? resolvePluginStatusCachePath();
54
54
  const configPath = params.configPath ?? resolvePluginStatusConfigPath();
55
55
  try {
56
- const parsed = JSON.parse(syncFs.readFileSync(cachePath, "utf8"));
56
+ const parsed = JSON.parse(fs.readFileSync(cachePath, "utf8"));
57
57
  if (parsed.schemaVersion !== CACHE_SCHEMA_VERSION || parsed.packageVersion !== params.packageVersion || parsed.configPath !== configPath || parsed.configFingerprint !== configFingerprint(configPath) || !Array.isArray(parsed.plugins) || !Array.isArray(parsed.diagnostics)) {
58
58
  return null;
59
59
  }
@@ -96,16 +96,16 @@ function writePluginStatusCache(params) {
96
96
  source: diagnostic.source
97
97
  }))
98
98
  };
99
- syncFs.mkdirSync(path.dirname(cachePath), {
99
+ fs.mkdirSync(path.dirname(cachePath), {
100
100
  recursive: true,
101
101
  mode: 448
102
102
  });
103
103
  const temporaryPath = `${cachePath}.tmp-${process.pid}`;
104
- syncFs.writeFileSync(temporaryPath, `${JSON.stringify(cache)}\n`, {
104
+ fs.writeFileSync(temporaryPath, `${JSON.stringify(cache)}\n`, {
105
105
  encoding: "utf8",
106
106
  mode: 384
107
107
  });
108
- syncFs.renameSync(temporaryPath, cachePath);
108
+ fs.renameSync(temporaryPath, cachePath);
109
109
  }
110
110
 
111
111
  //#endregion
@@ -1,9 +1,9 @@
1
1
  import { resolveUserPath } from "../utils.js";
2
2
  import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
3
3
  import { installPluginFromNpmSpec, resolvePluginInstallDir } from "./install.js";
4
- import { resolveBundledPluginSources } from "./bundled-sources.js";
5
4
  import { buildNpmResolutionInstallFields, recordPluginInstall } from "./installs.js";
6
- import syncFs from "node:fs";
5
+ import { resolveBundledPluginSources } from "./bundled-sources.js";
6
+ import fs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/plugins/update.ts
@@ -86,14 +86,14 @@ async function readInstalledPackageVersion(dir, opts) {
86
86
  return undefined;
87
87
  }
88
88
  try {
89
- const raw = syncFs.readFileSync(opened.fd, "utf-8");
89
+ const raw = fs.readFileSync(opened.fd, "utf-8");
90
90
  const parsed = JSON.parse(raw);
91
91
  return typeof parsed.version === "string" ? parsed.version : undefined;
92
92
  } catch (err) {
93
93
  opts?.logger?.warn?.(`Could not inspect installed package for "${opts.pluginId ?? path.basename(dir)}": package.json is unreadable (${formatUpdateError(err)}). Continuing update with unknown current version.`);
94
94
  return undefined;
95
95
  } finally {
96
- syncFs.closeSync(opened.fd);
96
+ fs.closeSync(opened.fd);
97
97
  }
98
98
  }
99
99
  function pathsEqual(left, right) {
@@ -1,7 +1,7 @@
1
1
  import { CONFIG_DIR, isRecord, resolveUserPath } from "../utils.js";
2
2
  import { resolveFasedAgentPackageRootSync } from "../infra/fased-root.js";
3
3
  import { enablePluginInConfig } from "./enable.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/plugins/web-search-install-catalog.ts
@@ -48,11 +48,11 @@ function parseCatalogEntries(raw) {
48
48
  function loadCatalogEntriesFromPaths(paths) {
49
49
  const entries = [];
50
50
  for (const resolved of paths) {
51
- if (!syncFs.existsSync(resolved)) {
51
+ if (!fs.existsSync(resolved)) {
52
52
  continue;
53
53
  }
54
54
  try {
55
- const payload = JSON.parse(syncFs.readFileSync(resolved, "utf-8"));
55
+ const payload = JSON.parse(fs.readFileSync(resolved, "utf-8"));
56
56
  entries.push(...parseCatalogEntries(payload));
57
57
  } catch {}
58
58
  }
@@ -1,8 +1,11 @@
1
1
  import { normalizeThinkLevel } from "../shared/model-thinking.js";
2
2
  import { listProfilesForProvider } from "../agents/auth-profiles/profiles.js";
3
+ import { writeConfigFile } from "../config/io.js";
4
+ import "../config/config.js";
3
5
  import { resolveApiKeyForProfile } from "../agents/auth-profiles/oauth.js";
4
6
  import "../agents/auth-profiles.js";
5
7
  import { listOpenAICodexAppServerModels } from "../agents/openai-codex-app-server.js";
8
+ import { ensureOpenAICodexRuntimeComponent } from "../agents/openai-codex-runtime-component.js";
6
9
 
7
10
  //#region src/providers/openai-codex-model-discovery.ts
8
11
  const OPENAI_CODEX_MODELS_URL = "https://chatgpt.com/backend-api/codex/models";
@@ -138,7 +141,14 @@ async function discoverOpenAICodexModels(params) {
138
141
  throw new Error("OpenAI sign-in token does not contain a ChatGPT account ID");
139
142
  }
140
143
  if (!params.fetchImpl) {
141
- return parseAppServerModels(await (params.listAppServerModels ?? listOpenAICodexAppServerModels)({ token: resolved.apiKey }));
144
+ const runtime = await (params.ensureRuntime ?? ensureOpenAICodexRuntimeComponent)({ config: params.cfg });
145
+ if (runtime.installed) {
146
+ await writeConfigFile(runtime.config);
147
+ }
148
+ return parseAppServerModels(await (params.listAppServerModels ?? listOpenAICodexAppServerModels)({
149
+ token: resolved.apiKey,
150
+ executable: runtime.executable
151
+ }));
142
152
  }
143
153
  const url = new URL(OPENAI_CODEX_MODELS_URL);
144
154
  url.searchParams.set("client_version", OPENAI_CODEX_CATALOG_CLIENT_VERSION);
@@ -34,8 +34,7 @@ function credentialRoutesForProvider(store, route) {
34
34
  if (!profileProvider) {
35
35
  continue;
36
36
  }
37
- const profileManifest = getProviderBrandManifestForRoute(profileProvider);
38
- if (profileProvider !== normalizedRoute && profileManifest?.id !== manifest?.id) {
37
+ if (profileProvider !== normalizedRoute) {
39
38
  continue;
40
39
  }
41
40
  const authMode = authModeForProfileType(profile.type);
@@ -245,6 +244,7 @@ function filterCatalogToAuthoritativeAvailability(catalog, store) {
245
244
  return models;
246
245
  });
247
246
  }
247
+ const testing = { credentialRoutesForProvider };
248
248
 
249
249
  //#endregion
250
250
  export { applyRuntimeProviderModelDiscovery, filterCatalogToAuthoritativeAvailability, resetRuntimeProviderModelCatalogCache };
@@ -12,7 +12,7 @@ import { listKnownSecretEnvVarNames } from "./provider-env-vars.js";
12
12
  import { createSecretsConfigIO } from "./config-io.js";
13
13
  import { normalizeSecretsPlanOptions, resolveValidatedTargetPathSegments } from "./plan.js";
14
14
  import { prepareSecretsRuntimeSnapshot } from "./runtime.js";
15
- import syncFs from "node:fs";
15
+ import fs from "node:fs";
16
16
  import os from "node:os";
17
17
  import path from "node:path";
18
18
  import { isDeepStrictEqual } from "node:util";
@@ -125,8 +125,8 @@ function collectAuthStorePaths(config, stateDir) {
125
125
  const paths = new Set();
126
126
  paths.add(path.join(resolveUserPath(stateDir), "agents", "main", "agent", "auth-profiles.json"));
127
127
  const agentsRoot = path.join(resolveUserPath(stateDir), "agents");
128
- if (syncFs.existsSync(agentsRoot)) {
129
- for (const entry of syncFs.readdirSync(agentsRoot, { withFileTypes: true })) {
128
+ if (fs.existsSync(agentsRoot)) {
129
+ for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
130
130
  if (!entry.isDirectory()) {
131
131
  continue;
132
132
  }
@@ -146,15 +146,15 @@ function collectAuthStorePaths(config, stateDir) {
146
146
  function collectAuthJsonPaths(stateDir) {
147
147
  const out = [];
148
148
  const agentsRoot = path.join(resolveUserPath(stateDir), "agents");
149
- if (!syncFs.existsSync(agentsRoot)) {
149
+ if (!fs.existsSync(agentsRoot)) {
150
150
  return out;
151
151
  }
152
- for (const entry of syncFs.readdirSync(agentsRoot, { withFileTypes: true })) {
152
+ for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
153
153
  if (!entry.isDirectory()) {
154
154
  continue;
155
155
  }
156
156
  const candidate = path.join(agentsRoot, entry.name, "agent", "auth.json");
157
- if (syncFs.existsSync(candidate)) {
157
+ if (fs.existsSync(candidate)) {
158
158
  out.push(candidate);
159
159
  }
160
160
  }
@@ -249,10 +249,10 @@ async function projectPlanState(params) {
249
249
  const authStoreByPath = new Map();
250
250
  if (options.scrubAuthProfilesForProviderTargets && providerTargets.size > 0) {
251
251
  for (const authStorePath of collectAuthStorePaths(nextConfig, stateDir)) {
252
- if (!syncFs.existsSync(authStorePath)) {
252
+ if (!fs.existsSync(authStorePath)) {
253
253
  continue;
254
254
  }
255
- const raw = syncFs.readFileSync(authStorePath, "utf8");
255
+ const raw = fs.readFileSync(authStorePath, "utf8");
256
256
  const parsed = JSON.parse(raw);
257
257
  if (!isRecord(parsed) || !isRecord(parsed.profiles)) {
258
258
  continue;
@@ -308,7 +308,7 @@ async function projectPlanState(params) {
308
308
  const authJsonByPath = new Map();
309
309
  if (options.scrubLegacyAuthJson) {
310
310
  for (const authJsonPath of collectAuthJsonPaths(stateDir)) {
311
- const raw = syncFs.readFileSync(authJsonPath, "utf8");
311
+ const raw = fs.readFileSync(authJsonPath, "utf8");
312
312
  const parsed = JSON.parse(raw);
313
313
  if (!isRecord(parsed)) {
314
314
  continue;
@@ -333,8 +333,8 @@ async function projectPlanState(params) {
333
333
  const envRawByPath = new Map();
334
334
  if (options.scrubEnv && scrubbedValues.size > 0) {
335
335
  const envPath = path.join(resolveConfigDir(params.env, os.homedir), ".env");
336
- if (syncFs.existsSync(envPath)) {
337
- const current = syncFs.readFileSync(envPath, "utf8");
336
+ if (fs.existsSync(envPath)) {
337
+ const current = fs.readFileSync(envPath, "utf8");
338
338
  const scrubbed = scrubEnvRaw(current, scrubbedValues, new Set(listKnownSecretEnvVarNames()));
339
339
  if (scrubbed.removed > 0 && scrubbed.nextRaw !== current) {
340
340
  envRawByPath.set(envPath, scrubbed.nextRaw);
@@ -387,24 +387,24 @@ async function projectPlanState(params) {
387
387
  };
388
388
  }
389
389
  function captureFileSnapshot(pathname) {
390
- if (!syncFs.existsSync(pathname)) {
390
+ if (!fs.existsSync(pathname)) {
391
391
  return {
392
392
  existed: false,
393
393
  content: "",
394
394
  mode: 384
395
395
  };
396
396
  }
397
- const stat = syncFs.statSync(pathname);
397
+ const stat = fs.statSync(pathname);
398
398
  return {
399
399
  existed: true,
400
- content: syncFs.readFileSync(pathname, "utf8"),
400
+ content: fs.readFileSync(pathname, "utf8"),
401
401
  mode: stat.mode & 511
402
402
  };
403
403
  }
404
404
  function restoreFileSnapshot(pathname, snapshot) {
405
405
  if (!snapshot.existed) {
406
- if (syncFs.existsSync(pathname)) {
407
- syncFs.rmSync(pathname, { force: true });
406
+ if (fs.existsSync(pathname)) {
407
+ fs.rmSync(pathname, { force: true });
408
408
  }
409
409
  return;
410
410
  }
@@ -10,7 +10,7 @@ import { resolveSecretRefValue, resolveSecretRefValues } from "./resolve.js";
10
10
  import { normalizeProviderId } from "../agents/model-selection.js";
11
11
  import { listKnownSecretEnvVarNames } from "./provider-env-vars.js";
12
12
  import { createSecretsConfigIO } from "./config-io.js";
13
- import syncFs from "node:fs";
13
+ import fs from "node:fs";
14
14
  import os from "node:os";
15
15
  import path from "node:path";
16
16
 
@@ -51,12 +51,12 @@ function parseEnvValue(raw) {
51
51
  return trimmed;
52
52
  }
53
53
  function collectEnvPlaintext(params) {
54
- if (!syncFs.existsSync(params.envPath)) {
54
+ if (!fs.existsSync(params.envPath)) {
55
55
  return;
56
56
  }
57
57
  params.collector.filesScanned.add(params.envPath);
58
58
  const knownKeys = new Set(listKnownSecretEnvVarNames());
59
- const raw = syncFs.readFileSync(params.envPath, "utf8");
59
+ const raw = fs.readFileSync(params.envPath, "utf8");
60
60
  const lines = raw.split(/\r?\n/);
61
61
  for (const line of lines) {
62
62
  const match = line.match(/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
@@ -81,11 +81,11 @@ function collectEnvPlaintext(params) {
81
81
  }
82
82
  }
83
83
  function readJsonObject(filePath) {
84
- if (!syncFs.existsSync(filePath)) {
84
+ if (!fs.existsSync(filePath)) {
85
85
  return { value: null };
86
86
  }
87
87
  try {
88
- const raw = syncFs.readFileSync(filePath, "utf8");
88
+ const raw = fs.readFileSync(filePath, "utf8");
89
89
  const parsed = JSON.parse(raw);
90
90
  if (!isRecord(parsed)) {
91
91
  return { value: null };
@@ -196,8 +196,8 @@ function collectAuthStorePaths(config, stateDir) {
196
196
  const paths = new Set();
197
197
  paths.add(path.join(resolveUserPath(stateDir), "agents", "main", "agent", "auth-profiles.json"));
198
198
  const agentsRoot = path.join(resolveUserPath(stateDir), "agents");
199
- if (syncFs.existsSync(agentsRoot)) {
200
- for (const entry of syncFs.readdirSync(agentsRoot, { withFileTypes: true })) {
199
+ if (fs.existsSync(agentsRoot)) {
200
+ for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
201
201
  if (!entry.isDirectory()) {
202
202
  continue;
203
203
  }
@@ -215,7 +215,7 @@ function collectAuthStorePaths(config, stateDir) {
215
215
  return [...paths];
216
216
  }
217
217
  function collectAuthStoreSecrets(params) {
218
- if (!syncFs.existsSync(params.authStorePath)) {
218
+ if (!fs.existsSync(params.authStorePath)) {
219
219
  return;
220
220
  }
221
221
  params.collector.filesScanned.add(params.authStorePath);
@@ -315,15 +315,15 @@ function collectAuthStoreSecrets(params) {
315
315
  }
316
316
  function collectAuthJsonResidue(params) {
317
317
  const agentsRoot = path.join(resolveUserPath(params.stateDir), "agents");
318
- if (!syncFs.existsSync(agentsRoot)) {
318
+ if (!fs.existsSync(agentsRoot)) {
319
319
  return;
320
320
  }
321
- for (const entry of syncFs.readdirSync(agentsRoot, { withFileTypes: true })) {
321
+ for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
322
322
  if (!entry.isDirectory()) {
323
323
  continue;
324
324
  }
325
325
  const authJsonPath = path.join(agentsRoot, entry.name, "agent", "auth.json");
326
- if (!syncFs.existsSync(authJsonPath)) {
326
+ if (!fs.existsSync(authJsonPath)) {
327
327
  continue;
328
328
  }
329
329
  params.collector.filesScanned.add(authJsonPath);
@@ -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/secrets/shared.ts
@@ -15,28 +15,28 @@ function normalizePositiveInt(value, fallback) {
15
15
  return Math.max(1, Math.floor(fallback));
16
16
  }
17
17
  function ensureDirForFile(filePath) {
18
- syncFs.mkdirSync(path.dirname(filePath), {
18
+ fs.mkdirSync(path.dirname(filePath), {
19
19
  recursive: true,
20
20
  mode: 448
21
21
  });
22
22
  }
23
23
  function writeJsonFileSecure(pathname, value) {
24
24
  ensureDirForFile(pathname);
25
- syncFs.writeFileSync(pathname, `${JSON.stringify(value, null, 2)}\n`, "utf8");
26
- syncFs.chmodSync(pathname, 384);
25
+ fs.writeFileSync(pathname, `${JSON.stringify(value, null, 2)}\n`, "utf8");
26
+ fs.chmodSync(pathname, 384);
27
27
  }
28
28
  function readTextFileIfExists(pathname) {
29
- if (!syncFs.existsSync(pathname)) {
29
+ if (!fs.existsSync(pathname)) {
30
30
  return null;
31
31
  }
32
- return syncFs.readFileSync(pathname, "utf8");
32
+ return fs.readFileSync(pathname, "utf8");
33
33
  }
34
34
  function writeTextFileAtomic(pathname, value, mode = 384) {
35
35
  ensureDirForFile(pathname);
36
36
  const tempPath = `${pathname}.tmp-${process.pid}-${Date.now()}`;
37
- syncFs.writeFileSync(tempPath, value, "utf8");
38
- syncFs.chmodSync(tempPath, mode);
39
- syncFs.renameSync(tempPath, pathname);
37
+ fs.writeFileSync(tempPath, value, "utf8");
38
+ fs.chmodSync(tempPath, mode);
39
+ fs.renameSync(tempPath, pathname);
40
40
  }
41
41
 
42
42
  //#endregion
@@ -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/security/scan-paths.ts
@@ -10,7 +10,7 @@ function isPathInside(basePath, candidatePath) {
10
10
  }
11
11
  function safeRealpathSync(filePath) {
12
12
  try {
13
- return syncFs.realpathSync(filePath);
13
+ return fs.realpathSync(filePath);
14
14
  } catch {
15
15
  return null;
16
16
  }
@@ -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/shared/config-eval.ts
@@ -133,7 +133,7 @@ function hasBinary(bin) {
133
133
  for (const ext of extensions) {
134
134
  const candidate = path.join(part, bin + ext);
135
135
  try {
136
- syncFs.accessSync(candidate, syncFs.constants.X_OK);
136
+ fs.accessSync(candidate, fs.constants.X_OK);
137
137
  hasBinaryCache.set(bin, true);
138
138
  return true;
139
139
  } catch {}
@@ -1,4 +1,4 @@
1
- import syncFs from "node:fs";
1
+ import fs from "node:fs";
2
2
 
3
3
  //#region src/shared/pid-alive.ts
4
4
  /**
@@ -10,7 +10,7 @@ function isZombieProcess(pid) {
10
10
  return false;
11
11
  }
12
12
  try {
13
- const status = syncFs.readFileSync(`/proc/${pid}/status`, "utf8");
13
+ const status = fs.readFileSync(`/proc/${pid}/status`, "utf8");
14
14
  const stateMatch = status.match(/^State:\s+(\S)/m);
15
15
  return stateMatch?.[1] === "Z";
16
16
  } catch {
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { createTaskRecord } from "./task-registry.js";
3
- import syncFs from "node:fs";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { randomUUID } from "node:crypto";
6
6
 
@@ -69,7 +69,7 @@ function loadStore(filePath = resolveStandingOrdersPath()) {
69
69
  return cachedStore;
70
70
  }
71
71
  try {
72
- cachedStore = sanitizeStore(JSON.parse(syncFs.readFileSync(filePath, "utf8")));
72
+ cachedStore = sanitizeStore(JSON.parse(fs.readFileSync(filePath, "utf8")));
73
73
  } catch {
74
74
  cachedStore = defaultStore();
75
75
  }
@@ -77,10 +77,10 @@ function loadStore(filePath = resolveStandingOrdersPath()) {
77
77
  return cachedStore;
78
78
  }
79
79
  function saveStore(store, filePath = resolveStandingOrdersPath()) {
80
- syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
80
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
81
81
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
82
- syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
83
- syncFs.renameSync(tmpPath, filePath);
82
+ fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
83
+ fs.renameSync(tmpPath, filePath);
84
84
  cachedStore = store;
85
85
  loadedPath = filePath;
86
86
  }
@@ -1,7 +1,7 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { resolveAgentIdFromSessionKey } from "../routing/session-key.js";
3
3
  import { findTaskRecord, markTaskTerminal, updateTaskRecord } from "./task-registry.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/tasks/task-flow-registry.ts
@@ -85,7 +85,7 @@ function loadStore(filePath = resolveTaskFlowRegistryPath()) {
85
85
  return cachedStore;
86
86
  }
87
87
  try {
88
- cachedStore = sanitizeStore(JSON.parse(syncFs.readFileSync(filePath, "utf8")));
88
+ cachedStore = sanitizeStore(JSON.parse(fs.readFileSync(filePath, "utf8")));
89
89
  } catch {
90
90
  cachedStore = defaultStore();
91
91
  }
@@ -93,10 +93,10 @@ function loadStore(filePath = resolveTaskFlowRegistryPath()) {
93
93
  return cachedStore;
94
94
  }
95
95
  function saveStore(store, filePath = resolveTaskFlowRegistryPath()) {
96
- syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
96
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
97
97
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
98
- syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
99
- syncFs.renameSync(tmpPath, filePath);
98
+ fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
99
+ fs.renameSync(tmpPath, filePath);
100
100
  cachedStore = store;
101
101
  loadedPath = filePath;
102
102
  }