@fased/fased 0.1.54 → 0.1.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/config/capability-catalog.json +12 -0
  2. package/dist/acp/client.js +2 -2
  3. package/dist/acp/secret-file.js +2 -2
  4. package/dist/agents/agent-scope.js +2 -2
  5. package/dist/agents/apply-patch.js +8 -8
  6. package/dist/agents/auth-profiles/paths.js +2 -2
  7. package/dist/agents/auth-profiles/store.js +2 -2
  8. package/dist/agents/authenticated-model-catalog.js +28 -0
  9. package/dist/agents/bash-tools.exec-host-node.js +1 -1
  10. package/dist/agents/bash-tools.exec.js +1 -1
  11. package/dist/agents/bash-tools.shared.js +2 -2
  12. package/dist/agents/cli-credentials.js +4 -4
  13. package/dist/agents/copilot-dynamic-headers.js +37 -0
  14. package/dist/agents/current-model-catalog.js +9 -13
  15. package/dist/agents/docs-path.js +3 -3
  16. package/dist/agents/embedded-pi-mcp.js +4 -4
  17. package/dist/agents/identity-avatar.js +3 -3
  18. package/dist/agents/identity-file.js +2 -2
  19. package/dist/agents/model-catalog-normalized.js +1 -0
  20. package/dist/agents/model-catalog-source.js +2 -2
  21. package/dist/agents/model-catalog.js +1 -1
  22. package/dist/agents/model-metadata.js +58 -9
  23. package/dist/agents/openai-codex-app-server.js +499 -0
  24. package/dist/agents/pi-embedded-runner/compact.js +3 -3
  25. package/dist/agents/pi-embedded-runner/extra-params.js +168 -79
  26. package/dist/agents/pi-embedded-runner/model.js +62 -1
  27. package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
  28. package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
  29. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
  30. package/dist/agents/pi-embedded-runner/run.js +5 -2
  31. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  32. package/dist/agents/pi-embedded-runner.js +1 -1
  33. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  34. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  35. package/dist/agents/pi-model-discovery.js +6 -6
  36. package/dist/agents/pi-project-settings.js +3 -3
  37. package/dist/agents/pi-tools.js +2 -2
  38. package/dist/agents/sandbox/fs-bridge.js +2 -2
  39. package/dist/agents/session-dirs.js +4 -4
  40. package/dist/agents/session-write-lock.js +13 -13
  41. package/dist/agents/shell-utils.js +5 -5
  42. package/dist/agents/skills/bundled-dir.js +4 -4
  43. package/dist/agents/skills/local-loader.js +6 -6
  44. package/dist/agents/skills/plugin-skills.js +2 -2
  45. package/dist/agents/skills/workspace.js +13 -13
  46. package/dist/agents/skills-install-download.js +7 -7
  47. package/dist/agents/skills-install-plan.js +2 -2
  48. package/dist/agents/skills-install.js +2 -2
  49. package/dist/agents/skills-status.js +2 -2
  50. package/dist/agents/subagent-depth.js +2 -2
  51. package/dist/agents/system-prompt-params.js +2 -2
  52. package/dist/agents/tools/discord-actions-messaging.js +1 -1
  53. package/dist/agents/tools/message-tool.js +1 -1
  54. package/dist/agents/tools/session-status-tool.js +3 -3
  55. package/dist/agents/tools/slack-actions.js +1 -1
  56. package/dist/agents/tools/tts-tool.js +1 -1
  57. package/dist/agents/workspace.js +22 -22
  58. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  59. package/dist/auto-reply/reply/agent-runner.js +2 -2
  60. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  61. package/dist/auto-reply/reply/commands-models.js +1 -1
  62. package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
  63. package/dist/auto-reply/reply/dispatch-acp.js +1 -1
  64. package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
  65. package/dist/auto-reply/reply/get-reply-run.js +20 -2
  66. package/dist/auto-reply/reply/model-selection.js +1 -1
  67. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  68. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  69. package/dist/auto-reply/reply/session-reset-model.js +1 -1
  70. package/dist/auto-reply/reply/session.js +3 -3
  71. package/dist/auto-reply/skill-commands.js +3 -3
  72. package/dist/auto-reply/status.js +7 -7
  73. package/dist/auto-reply/thinking.js +1 -1
  74. package/dist/brand.js +1 -1
  75. package/dist/browser/cdp.helpers.js +2 -2
  76. package/dist/browser/chrome.executables.js +3 -3
  77. package/dist/browser/chrome.js +5 -5
  78. package/dist/browser/chrome.profile-decoration.js +6 -6
  79. package/dist/browser/extension-relay.js +7 -7
  80. package/dist/browser/profiles-service.js +2 -2
  81. package/dist/browser/server-context.js +2 -2
  82. package/dist/browser/trash.js +4 -4
  83. package/dist/build-info.json +3 -3
  84. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  85. package/dist/canvas-host/server.js +4 -4
  86. package/dist/capabilities/catalog.js +3 -3
  87. package/dist/channels/plugins/catalog.js +3 -3
  88. package/dist/cli/browser-cli-extension.js +6 -6
  89. package/dist/cli/command-format.js +2 -2
  90. package/dist/cli/cron-cli/register.cron-add.js +1 -1
  91. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  92. package/dist/cli/dns-cli.js +9 -9
  93. package/dist/cli/gateway-cli/dev.js +5 -5
  94. package/dist/cli/gateway-cli/run.js +2 -2
  95. package/dist/cli/hooks-cli.js +5 -5
  96. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  97. package/dist/cli/memory-cli.js +7 -7
  98. package/dist/cli/nodes-media-utils.js +2 -2
  99. package/dist/cli/plugins-cli.js +2 -2
  100. package/dist/cli/program/register.agent.js +1 -1
  101. package/dist/cli/providers-cli.js +3 -2
  102. package/dist/cli/secrets-cli.js +3 -3
  103. package/dist/cli/windows-argv.js +2 -2
  104. package/dist/commands/agent.js +22 -3
  105. package/dist/commands/auth-choice.apply.api-providers.js +3 -8
  106. package/dist/commands/auth-choice.apply.openai.js +13 -7
  107. package/dist/commands/auth-choice.model-check.js +1 -2
  108. package/dist/commands/configure.gateway-auth.js +14 -16
  109. package/dist/commands/dashboard-link.js +3 -3
  110. package/dist/commands/doctor-config-flow.js +1 -1
  111. package/dist/commands/doctor-install.js +5 -5
  112. package/dist/commands/doctor-memory-search.js +2 -2
  113. package/dist/commands/doctor-platform-notes.js +2 -2
  114. package/dist/commands/doctor-sandbox.js +2 -2
  115. package/dist/commands/doctor-state-integrity.js +23 -23
  116. package/dist/commands/doctor-workspace.js +3 -3
  117. package/dist/commands/doctor.js +3 -3
  118. package/dist/commands/hosted-dashboard-probe.js +3 -3
  119. package/dist/commands/managed-up.js +2 -2
  120. package/dist/commands/model-picker.js +27 -8
  121. package/dist/commands/models/list.probe.js +1 -1
  122. package/dist/commands/models/list.registry.js +13 -17
  123. package/dist/commands/models/list.status-command.js +2 -2
  124. package/dist/commands/onboard-auth.config-core.js +1 -1
  125. package/dist/commands/onboard-auth.config-litellm.js +21 -21
  126. package/dist/commands/onboard-auth.credentials.js +3 -4
  127. package/dist/commands/onboard-auth.js +0 -1
  128. package/dist/commands/onboarding/plugin-install.js +2 -2
  129. package/dist/commands/openai-codex-model-default.js +28 -5
  130. package/dist/commands/sessions-cleanup.js +2 -2
  131. package/dist/commands/signal-install.js +6 -6
  132. package/dist/commands/status-all/channels.js +2 -2
  133. package/dist/commands/wallet.js +47 -47
  134. package/dist/config/cache-utils.js +2 -2
  135. package/dist/config/includes.js +5 -5
  136. package/dist/config/io.js +2 -2
  137. package/dist/config/paths.js +3 -3
  138. package/dist/config/sat-runtime-ids.js +3 -3
  139. package/dist/config/sessions/disk-budget.js +6 -6
  140. package/dist/config/sessions/paths.js +2 -2
  141. package/dist/config/sessions/store.js +17 -17
  142. package/dist/config/sessions/transcript.js +4 -4
  143. package/dist/config/talk.js +2 -2
  144. package/dist/config/zod-schema.agent-defaults.js +6 -2
  145. package/dist/config/zod-schema.agent-runtime.js +6 -2
  146. package/dist/config/zod-schema.core.js +6 -2
  147. package/dist/control-ui/assets/{app-BKlu6OKz.js → app-D7TXyNRi.js} +1548 -1540
  148. package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
  149. package/dist/control-ui/assets/{index-nrFcGMv-.js → index-BmSBom-w.js} +3 -3
  150. package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-Cc89iMdx.js} +5 -5
  151. package/dist/control-ui/index.html +1 -1
  152. package/dist/control-ui/version.json +1 -0
  153. package/dist/cron/isolated-agent/run.js +6 -2
  154. package/dist/cron/service/jobs.js +11 -1
  155. package/dist/cron/service/store.js +2 -2
  156. package/dist/cron/store.js +6 -6
  157. package/dist/daemon/systemd-system.js +5 -5
  158. package/dist/discord/monitor/gateway-plugin.js +2 -2
  159. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  160. package/dist/discord/voice/manager.js +1 -1
  161. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  162. package/dist/gateway/client.js +4 -4
  163. package/dist/gateway/control-ui-boot-check.js +6 -6
  164. package/dist/gateway/control-ui-login.js +7 -7
  165. package/dist/gateway/control-ui.js +11 -9
  166. package/dist/gateway/hooks-mapping.js +4 -4
  167. package/dist/gateway/protocol/schema/agents-models-skills.js +66 -4
  168. package/dist/gateway/server-discovery.js +2 -2
  169. package/dist/gateway/server-http.js +4 -4
  170. package/dist/gateway/server-methods/chat.js +3 -3
  171. package/dist/gateway/server-methods/models.js +8 -8
  172. package/dist/gateway/server-methods/sessions.js +8 -8
  173. package/dist/gateway/server-methods/tts.js +2 -2
  174. package/dist/gateway/server-methods/usage.js +2 -2
  175. package/dist/gateway/server-model-catalog.js +3 -0
  176. package/dist/gateway/server.impl.js +3 -3
  177. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  178. package/dist/gateway/session-utils.fs.js +24 -24
  179. package/dist/gateway/session-utils.js +6 -6
  180. package/dist/gateway/sessions-patch.js +27 -24
  181. package/dist/hooks/bundled-dir.js +4 -4
  182. package/dist/hooks/gmail-setup-utils.js +6 -6
  183. package/dist/hooks/import-url.js +2 -2
  184. package/dist/hooks/loader.js +4 -4
  185. package/dist/hooks/workspace.js +7 -7
  186. package/dist/infra/archive.js +17 -17
  187. package/dist/infra/boundary-file-read.js +2 -2
  188. package/dist/infra/boundary-path.js +15 -15
  189. package/dist/infra/brew.js +2 -2
  190. package/dist/infra/control-ui-assets.js +14 -14
  191. package/dist/infra/device-auth-store.js +8 -8
  192. package/dist/infra/device-identity.js +8 -8
  193. package/dist/infra/dotenv.js +2 -2
  194. package/dist/infra/exec-approvals.js +8 -8
  195. package/dist/infra/exec-command-resolution.js +4 -4
  196. package/dist/infra/exec-safe-bin-trust.js +2 -2
  197. package/dist/infra/fased-root.js +5 -5
  198. package/dist/infra/fs-safe.js +14 -14
  199. package/dist/infra/gateway-lock.js +11 -11
  200. package/dist/infra/git-commit.js +5 -5
  201. package/dist/infra/git-root.js +4 -4
  202. package/dist/infra/hosted-runtime-artifact.js +3 -3
  203. package/dist/infra/is-main.js +2 -2
  204. package/dist/infra/json-file.js +7 -7
  205. package/dist/infra/outbound/delivery-queue.js +16 -16
  206. package/dist/infra/path-env.js +3 -3
  207. package/dist/infra/ports-lsof.js +4 -4
  208. package/dist/infra/provider-usage.auth.js +3 -3
  209. package/dist/infra/safe-open-sync.js +2 -2
  210. package/dist/infra/session-cost-usage.js +9 -9
  211. package/dist/infra/shell-env.js +2 -2
  212. package/dist/infra/state-migrations.fs.js +6 -6
  213. package/dist/infra/state-migrations.js +23 -23
  214. package/dist/infra/tmp-fased-dir.js +6 -6
  215. package/dist/infra/update-runner.js +31 -3
  216. package/dist/infra/widearea-dns.js +3 -3
  217. package/dist/infra/wsl.js +2 -2
  218. package/dist/light-update-status.js +1 -1
  219. package/dist/line/accounts.js +2 -2
  220. package/dist/line/download.js +2 -2
  221. package/dist/logging/config.js +3 -3
  222. package/dist/logging/logger.js +7 -7
  223. package/dist/managed/federation.js +3 -3
  224. package/dist/managed/tunnel.js +3 -3
  225. package/dist/media/store.js +13 -13
  226. package/dist/media-understanding/runner.js +3 -3
  227. package/dist/memory/embeddings.js +2 -2
  228. package/dist/memory/internal.js +10 -10
  229. package/dist/memory/inventory.js +19 -2
  230. package/dist/memory/manager-sync-ops.js +7 -7
  231. package/dist/memory/repair-executor.js +17 -17
  232. package/dist/node-host/invoke-system-run-plan.js +8 -8
  233. package/dist/node-host/invoke.js +2 -2
  234. package/dist/node-host/runner.js +3 -3
  235. package/dist/pairing/pairing-store.js +3 -3
  236. package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-DzWlKv1U.js} +1 -1
  237. package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-BplQVLL6.js} +4 -4
  238. package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-x4MLhYUw.js} +1 -1
  239. package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
  240. package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-G8h3Sn8_.js} +43 -47
  241. package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-CWknklvI.js} +1 -1
  242. package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-a9Dnfw7-.js} +1 -1
  243. package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.js → channel-access-configure-CD4QDN5E.js} +1 -1
  244. package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
  245. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  246. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  247. package/dist/plugin-sdk/{chunk-B2ffJ-LR.js → chunk-B8EZkwiT.js} +1 -1
  248. package/dist/plugin-sdk/{chunk-items-jOdkyP53.js → chunk-items-CEPklxGe.js} +1 -1
  249. package/dist/plugin-sdk/command-status.d.ts +2 -2
  250. package/dist/plugin-sdk/command-status.js +43 -47
  251. package/dist/plugin-sdk/{commands-registry-BWb4NcfW.js → commands-registry-BfEa4tFA.js} +2 -2
  252. package/dist/plugin-sdk/{common-C4XrB73N.js → common-CbfckC19.js} +1 -1
  253. package/dist/plugin-sdk/{config-rySyVtKs.js → config-Bt5GhnA-.js} +105 -73
  254. package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-B9DKr6J5.js} +96239 -81587
  255. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  256. package/dist/plugin-sdk/device-pair.js +2 -3
  257. package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
  258. package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
  259. package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
  260. package/dist/plugin-sdk/discord.d.ts +5 -5
  261. package/dist/plugin-sdk/discord.js +31 -32
  262. package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
  263. package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
  264. package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
  265. package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
  266. package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
  267. package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
  268. package/dist/plugin-sdk/{handle-action-CGF-Qnp0.js → handle-action-DbzZFYnG.js} +24 -25
  269. package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-CluGKuIV.js} +1 -1
  270. package/dist/plugin-sdk/{image-ops-CcBfoMLW.js → image-ops-CUaLtIFj.js} +1 -1
  271. package/dist/plugin-sdk/index.d.ts +8 -8
  272. package/dist/plugin-sdk/index.js +47 -51
  273. package/dist/plugin-sdk/json-store.js +6 -6
  274. package/dist/plugin-sdk/{login-DpDQyM7r.js → login-DJuHYDiK.js} +3 -3
  275. package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-CbHL5ayf.js} +3 -3
  276. package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-oHAvZCT3.js} +7 -7
  277. package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-Mkx7k92Y.js} +1 -1
  278. package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-CA8sTmVE.js} +4 -4
  279. package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-CZrN9pev.js} +51 -55
  280. package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-CmwGqNyV.js} +61 -65
  281. package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-CWOd4war.js} +43 -47
  282. package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
  283. package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-0oN9IfNw.js} +9 -9
  284. package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DdVkqUzE.js} +2 -2
  285. package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
  286. package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-ClqhfCUk.js} +1 -1
  287. package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-B01mCSct.js} +2 -2
  288. package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
  289. package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
  290. package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
  291. package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
  292. package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
  293. package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
  294. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  295. package/dist/plugin-sdk/{pw-ai-CMplwiwf.js → pw-ai-B0domrii.js} +6 -8
  296. package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
  297. package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
  298. package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-1macZ1mZ.js} +4 -4
  299. package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
  300. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
  301. package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
  302. package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-CkNIKKEW.js} +1 -1
  303. package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
  304. package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
  305. package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-9ybIh4Fq.js} +1 -1
  306. package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-Dy420wBu.js} +3 -3
  307. package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.js → runtime-dependency-CIw9t7-k.js} +123 -15
  308. package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
  309. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  310. package/dist/plugin-sdk/sat-runtime.js +44 -10
  311. package/dist/plugin-sdk/{send-D264hFVb.js → send-2VcOMTN5.js} +9 -9
  312. package/dist/plugin-sdk/{send-CgyS75Av.js → send-BQUtCJFW.js} +10 -10
  313. package/dist/plugin-sdk/{send-D58yEeH4.js → send-DPJIIYAs.js} +6 -6
  314. package/dist/plugin-sdk/{send-C7x6gzSl.js → send-Dqes9tdU.js} +13 -13
  315. package/dist/plugin-sdk/{send-DrAtUGLM.js → send-J4JWKP62.js} +8 -8
  316. package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C_n2S5ub.js} +3 -3
  317. package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-B7wx9ax8.js} +102 -102
  318. package/dist/plugin-sdk/{slack-C-I6q3NB.js → slack-BouRQG-W.js} +64 -68
  319. package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-CasHVtiq.js} +20 -21
  320. package/dist/plugin-sdk/slack.d.ts +5 -5
  321. package/dist/plugin-sdk/slack.js +13 -13
  322. package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
  323. package/dist/plugin-sdk/{sticker-cache-DCrDTYIi.js → sticker-cache-BvGEUas3.js} +3 -3
  324. package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-CjlQJV4r.js} +2 -2
  325. package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
  326. package/dist/plugin-sdk/{targets-znKHngSk.js → targets-QfP164Dh.js} +2 -2
  327. package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.js → telegram-actions-CwYjV6Db.js} +48 -52
  328. package/dist/plugin-sdk/telegram.d.ts +5 -5
  329. package/dist/plugin-sdk/telegram.js +11 -11
  330. package/dist/plugin-sdk/{thread-bindings.lifecycle-ClzPBK70.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
  331. package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-BgYWFjNF.js} +2 -2
  332. package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
  333. package/dist/plugin-sdk/{types-DV5TNhMK.d.ts → types-BYDL6dQj.d.ts} +2 -2
  334. package/dist/plugin-sdk/{types-BI2njxWJ.d.ts → types-CLIvQaVg.d.ts} +39 -5
  335. package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-DyhXnYUr.d.ts} +1 -1
  336. package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-_fbu40Re.d.ts} +8 -5
  337. package/dist/plugin-sdk/{web-CJMfhGFY.js → web-D0yENDve.js} +52 -56
  338. package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BT2nPLyo.js} +18 -19
  339. package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
  340. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  341. package/dist/plugin-sdk/whatsapp.js +14 -14
  342. package/dist/plugin-sdk/{wsl-D5jDUlms.js → wsl-B_ojyEtC.js} +53 -53
  343. package/dist/plugins/bundled-dir.js +3 -3
  344. package/dist/plugins/discovery.js +11 -11
  345. package/dist/plugins/loader.js +13 -13
  346. package/dist/plugins/manifest-registry.js +2 -2
  347. package/dist/plugins/manifest.js +4 -4
  348. package/dist/plugins/path-safety.js +3 -3
  349. package/dist/plugins/runtime/index.js +1 -1
  350. package/dist/plugins/status-cache.js +9 -9
  351. package/dist/plugins/update.js +3 -3
  352. package/dist/plugins/web-search-install-catalog.js +3 -3
  353. package/dist/providers/github-copilot-model-discovery.js +51 -0
  354. package/dist/providers/litellm-models.js +1 -1
  355. package/dist/providers/openai-codex-model-discovery.js +166 -0
  356. package/dist/providers/refresh.js +311 -67
  357. package/dist/providers/registry.js +16 -6
  358. package/dist/providers/runtime-model-catalog.js +250 -0
  359. package/dist/secrets/apply.js +16 -16
  360. package/dist/secrets/audit.js +11 -11
  361. package/dist/secrets/shared.js +9 -9
  362. package/dist/security/scan-paths.js +2 -2
  363. package/dist/shared/config-eval.js +2 -2
  364. package/dist/shared/model-thinking.js +54 -4
  365. package/dist/shared/pid-alive.js +2 -2
  366. package/dist/tasks/standing-orders.js +5 -5
  367. package/dist/tasks/task-flow-registry.js +5 -5
  368. package/dist/tasks/task-registry.js +5 -5
  369. package/dist/tasks/workflow-definitions.js +6 -6
  370. package/dist/telegram/bot-message-context.js +1 -1
  371. package/dist/telegram/token.js +5 -5
  372. package/dist/utils.js +5 -5
  373. package/dist/wallet/local-socket-signer-broker.js +16 -16
  374. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  375. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  376. package/dist/wallet/wallet-approval-auth.js +5 -5
  377. package/dist/wallet/wallet-audit-log.js +5 -5
  378. package/dist/wallet/wallet-custody.js +21 -21
  379. package/dist/wallet/wallet-inbound-events.js +5 -5
  380. package/dist/wallet/wallet-observability.js +5 -5
  381. package/dist/wallet/wallet-policy.js +9 -9
  382. package/dist/wallet/wallet-provider-registry.js +7 -7
  383. package/dist/wallet/wallet-runtime-config.js +3 -3
  384. package/dist/wallet/wallet-secrets-store.js +22 -22
  385. package/dist/wallet/wallet-send-approvals.js +5 -5
  386. package/dist/wallet/wallet-settlement-links.js +5 -5
  387. package/dist/web/accounts.js +3 -3
  388. package/dist/web/auth-store.js +18 -18
  389. package/dist/web/session.js +4 -4
  390. package/dist/wizard/host-security-capability.js +2 -2
  391. package/dist/wizard/onboarding.host-security.js +7 -7
  392. package/dist/wizard/onboarding.js +31 -13
  393. package/dist/wizard/onboarding.wallet.js +44 -44
  394. package/extensions/acpx/package.json +1 -1
  395. package/extensions/bluebubbles/package.json +1 -1
  396. package/extensions/copilot-proxy/package.json +1 -1
  397. package/extensions/diagnostics-otel/package.json +1 -1
  398. package/extensions/fased-federation/package.json +1 -1
  399. package/extensions/google-gemini-cli-auth/package.json +1 -1
  400. package/extensions/imessage/package.json +1 -1
  401. package/extensions/irc/package.json +1 -1
  402. package/extensions/line/package.json +1 -1
  403. package/extensions/llm-task/package.json +1 -1
  404. package/extensions/lobster/package.json +1 -1
  405. package/extensions/matrix/CHANGELOG.md +12 -0
  406. package/extensions/matrix/package.json +1 -1
  407. package/extensions/mattermost/package.json +1 -1
  408. package/extensions/memory-core/package.json +2 -2
  409. package/extensions/memory-lancedb/package.json +1 -1
  410. package/extensions/minimax-portal-auth/package.json +1 -1
  411. package/extensions/msteams/CHANGELOG.md +12 -0
  412. package/extensions/msteams/package.json +1 -1
  413. package/extensions/nextcloud-talk/package.json +1 -1
  414. package/extensions/nostr/CHANGELOG.md +12 -0
  415. package/extensions/nostr/package.json +1 -1
  416. package/extensions/open-prose/package.json +1 -1
  417. package/extensions/sat-mining/package.json +1 -1
  418. package/extensions/signal/package.json +1 -1
  419. package/extensions/synology-chat/package.json +1 -1
  420. package/extensions/tlon/package.json +1 -1
  421. package/extensions/twitch/CHANGELOG.md +12 -0
  422. package/extensions/twitch/package.json +1 -1
  423. package/extensions/voice-call/CHANGELOG.md +12 -0
  424. package/extensions/voice-call/package.json +1 -1
  425. package/extensions/zalo/CHANGELOG.md +12 -0
  426. package/extensions/zalo/package.json +1 -1
  427. package/extensions/zalouser/CHANGELOG.md +12 -0
  428. package/extensions/zalouser/package.json +1 -1
  429. package/package.json +2 -1
  430. package/dist/control-ui/assets/chat-model-ref-B9sWop67.js +0 -2
  431. package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
  432. package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
  433. package/dist/plugin-sdk/wallet-status-CyovJojz.js +0 -11944
  434. package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
  435. /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
  436. /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
  437. /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
  438. /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
  439. /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
  440. /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
  441. /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
  442. /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
  443. /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
  444. /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
  445. /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
  446. /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
  447. /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
  448. /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
  449. /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
  450. /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
  451. /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
  452. /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
  453. /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
  454. /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
  455. /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
  456. /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
  457. /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
  458. /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
  459. /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
  460. /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
  461. /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
  462. /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
  463. /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
  464. /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
  465. /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { resolveConfigPath, resolveGatewayLockDir, resolveStateDir } from "../config/paths.js";
2
2
  import { isPidAlive } from "../shared/pid-alive.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
- import fs$1 from "node:fs/promises";
5
+ import fs from "node:fs/promises";
6
6
  import { createHash } from "node:crypto";
7
7
  import net from "node:net";
8
8
 
@@ -44,7 +44,7 @@ function isGatewayArgv(args) {
44
44
  }
45
45
  function readLinuxCmdline(pid) {
46
46
  try {
47
- const raw = fs.readFileSync(`/proc/${pid}/cmdline`, "utf8");
47
+ const raw = syncFs.readFileSync(`/proc/${pid}/cmdline`, "utf8");
48
48
  return parseProcCmdline(raw);
49
49
  } catch {
50
50
  return null;
@@ -52,7 +52,7 @@ function readLinuxCmdline(pid) {
52
52
  }
53
53
  function readLinuxStartTime(pid) {
54
54
  try {
55
- const raw = fs.readFileSync(`/proc/${pid}/stat`, "utf8").trim();
55
+ const raw = syncFs.readFileSync(`/proc/${pid}/stat`, "utf8").trim();
56
56
  const closeParen = raw.lastIndexOf(")");
57
57
  if (closeParen < 0) {
58
58
  return null;
@@ -122,7 +122,7 @@ async function resolveGatewayOwnerStatus(pid, payload, platform, port) {
122
122
  }
123
123
  async function readLockPayload(lockPath) {
124
124
  try {
125
- const raw = await fs$1.readFile(lockPath, "utf8");
125
+ const raw = await fs.readFile(lockPath, "utf8");
126
126
  const parsed = JSON.parse(raw);
127
127
  if (typeof parsed.pid !== "number") {
128
128
  return null;
@@ -167,12 +167,12 @@ async function acquireGatewayLock(opts = {}) {
167
167
  const platform = opts.platform ?? process.platform;
168
168
  const port = opts.port;
169
169
  const { lockPath, configPath } = resolveGatewayLockPath(env);
170
- await fs$1.mkdir(path.dirname(lockPath), { recursive: true });
170
+ await fs.mkdir(path.dirname(lockPath), { recursive: true });
171
171
  const startedAt = Date.now();
172
172
  let lastPayload = null;
173
173
  while (Date.now() - startedAt < timeoutMs) {
174
174
  try {
175
- const handle = await fs$1.open(lockPath, "wx");
175
+ const handle = await fs.open(lockPath, "wx");
176
176
  const startTime = platform === "linux" ? readLinuxStartTime(process.pid) : null;
177
177
  const payload = {
178
178
  pid: process.pid,
@@ -188,7 +188,7 @@ async function acquireGatewayLock(opts = {}) {
188
188
  configPath,
189
189
  release: async () => {
190
190
  await handle.close().catch(() => undefined);
191
- await fs$1.rm(lockPath, { force: true });
191
+ await fs.rm(lockPath, { force: true });
192
192
  }
193
193
  };
194
194
  } catch (err) {
@@ -200,7 +200,7 @@ async function acquireGatewayLock(opts = {}) {
200
200
  const ownerPid = lastPayload?.pid;
201
201
  const ownerStatus = ownerPid ? await resolveGatewayOwnerStatus(ownerPid, lastPayload, platform, port) : "unknown";
202
202
  if (ownerStatus === "dead" && ownerPid) {
203
- await fs$1.rm(lockPath, { force: true });
203
+ await fs.rm(lockPath, { force: true });
204
204
  continue;
205
205
  }
206
206
  if (ownerStatus !== "alive") {
@@ -211,14 +211,14 @@ async function acquireGatewayLock(opts = {}) {
211
211
  }
212
212
  if (!stale) {
213
213
  try {
214
- const st = await fs$1.stat(lockPath);
214
+ const st = await fs.stat(lockPath);
215
215
  stale = Date.now() - st.mtimeMs > staleMs;
216
216
  } catch {
217
217
  stale = false;
218
218
  }
219
219
  }
220
220
  if (stale) {
221
- await fs$1.rm(lockPath, { force: true });
221
+ await fs.rm(lockPath, { force: true });
222
222
  continue;
223
223
  }
224
224
  }
@@ -1,6 +1,6 @@
1
1
  import { resolveGitHeadPath } from "./git-root.js";
2
2
  import { createRequire } from "node:module";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/infra/git-commit.ts
@@ -48,7 +48,7 @@ function isMissingPathError(error) {
48
48
  function resolveGitRefsBase(headPath) {
49
49
  const gitDir = path.dirname(headPath);
50
50
  try {
51
- const commonDirRaw = fs.readFileSync(path.join(gitDir, "commondir"), "utf-8").trim();
51
+ const commonDirRaw = syncFs.readFileSync(path.join(gitDir, "commondir"), "utf-8").trim();
52
52
  if (!commonDirRaw) {
53
53
  return gitDir;
54
54
  }
@@ -79,7 +79,7 @@ function resolveRefPath(refsBase, ref) {
79
79
  }
80
80
  function readCommitFromPackedRefs(refsBase, ref) {
81
81
  try {
82
- const packedRefs = fs.readFileSync(path.join(refsBase, "packed-refs"), "utf-8");
82
+ const packedRefs = syncFs.readFileSync(path.join(refsBase, "packed-refs"), "utf-8");
83
83
  for (const line of packedRefs.split("\n")) {
84
84
  if (!line || line.startsWith("#") || line.startsWith("^")) {
85
85
  continue;
@@ -124,7 +124,7 @@ const resolveCommitHash = (options = {}) => {
124
124
  cachedCommit = null;
125
125
  return cachedCommit;
126
126
  }
127
- const head = fs.readFileSync(headPath, "utf-8").trim();
127
+ const head = syncFs.readFileSync(headPath, "utf-8").trim();
128
128
  if (!head) {
129
129
  cachedCommit = null;
130
130
  return cachedCommit;
@@ -138,7 +138,7 @@ const resolveCommitHash = (options = {}) => {
138
138
  return cachedCommit;
139
139
  }
140
140
  try {
141
- const refHash = fs.readFileSync(refPath, "utf-8").trim();
141
+ const refHash = syncFs.readFileSync(refPath, "utf-8").trim();
142
142
  cachedCommit = formatCommit(refHash);
143
143
  return cachedCommit;
144
144
  } catch (error) {
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/infra/git-root.ts
@@ -22,7 +22,7 @@ function walkUpFrom(startDir, opts, resolveAtDir) {
22
22
  function hasGitMarker(repoRoot) {
23
23
  const gitPath = path.join(repoRoot, ".git");
24
24
  try {
25
- const stat = fs.statSync(gitPath);
25
+ const stat = syncFs.statSync(gitPath);
26
26
  return stat.isDirectory() || stat.isFile();
27
27
  } catch {
28
28
  return false;
@@ -34,14 +34,14 @@ function findGitRoot(startDir, opts = {}) {
34
34
  function resolveGitDirFromMarker(repoRoot) {
35
35
  const gitPath = path.join(repoRoot, ".git");
36
36
  try {
37
- const stat = fs.statSync(gitPath);
37
+ const stat = syncFs.statSync(gitPath);
38
38
  if (stat.isDirectory()) {
39
39
  return gitPath;
40
40
  }
41
41
  if (!stat.isFile()) {
42
42
  return null;
43
43
  }
44
- const raw = fs.readFileSync(gitPath, "utf-8");
44
+ const raw = syncFs.readFileSync(gitPath, "utf-8");
45
45
  const match = raw.match(/gitdir:\s*(.+)/i);
46
46
  if (!match?.[1]) {
47
47
  return null;
@@ -1,6 +1,6 @@
1
1
  import { createReadStream, createWriteStream } from "node:fs";
2
2
  import path from "node:path";
3
- import fs$1 from "node:fs/promises";
3
+ import fs from "node:fs/promises";
4
4
  import { createHash } from "node:crypto";
5
5
  import { Readable } from "node:stream";
6
6
  import { pipeline } from "node:stream/promises";
@@ -141,7 +141,7 @@ async function downloadHostedRuntimeDescriptor(params) {
141
141
  reason: `hosted runtime artifact unavailable (${artifactResponse.status})`
142
142
  };
143
143
  }
144
- await fs$1.mkdir(params.destinationDir, { recursive: true });
144
+ await fs.mkdir(params.destinationDir, { recursive: true });
145
145
  const archivePath = path.join(params.destinationDir, descriptor.assetName);
146
146
  try {
147
147
  await writeResponseBody(artifactResponse, archivePath);
@@ -153,7 +153,7 @@ async function downloadHostedRuntimeDescriptor(params) {
153
153
  }
154
154
  const actualChecksum = await sha256(archivePath);
155
155
  if (actualChecksum !== expectedChecksum) {
156
- await fs$1.rm(archivePath, { force: true });
156
+ await fs.rm(archivePath, { force: true });
157
157
  return {
158
158
  kind: "error",
159
159
  reason: `hosted runtime checksum mismatch for ${descriptor.assetName}`
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/infra/is-main.ts
@@ -8,7 +8,7 @@ function normalizePathCandidate(candidate, cwd) {
8
8
  }
9
9
  const resolved = path.resolve(cwd, candidate);
10
10
  try {
11
- return fs.realpathSync.native(resolved);
11
+ return syncFs.realpathSync.native(resolved);
12
12
  } catch {
13
13
  return resolved;
14
14
  }
@@ -1,13 +1,13 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/infra/json-file.ts
5
5
  function loadJsonFile(pathname) {
6
6
  try {
7
- if (!fs.existsSync(pathname)) {
7
+ if (!syncFs.existsSync(pathname)) {
8
8
  return undefined;
9
9
  }
10
- const raw = fs.readFileSync(pathname, "utf8");
10
+ const raw = syncFs.readFileSync(pathname, "utf8");
11
11
  return JSON.parse(raw);
12
12
  } catch {
13
13
  return undefined;
@@ -15,14 +15,14 @@ function loadJsonFile(pathname) {
15
15
  }
16
16
  function saveJsonFile(pathname, data) {
17
17
  const dir = path.dirname(pathname);
18
- if (!fs.existsSync(dir)) {
19
- fs.mkdirSync(dir, {
18
+ if (!syncFs.existsSync(dir)) {
19
+ syncFs.mkdirSync(dir, {
20
20
  recursive: true,
21
21
  mode: 448
22
22
  });
23
23
  }
24
- fs.writeFileSync(pathname, `${JSON.stringify(data, null, 2)}\n`, "utf8");
25
- fs.chmodSync(pathname, 384);
24
+ syncFs.writeFileSync(pathname, `${JSON.stringify(data, null, 2)}\n`, "utf8");
25
+ syncFs.chmodSync(pathname, 384);
26
26
  }
27
27
 
28
28
  //#endregion
@@ -2,7 +2,7 @@ import { resolveStateDir } from "../../config/paths.js";
2
2
  import { formatErrorMessage } from "../errors.js";
3
3
  import { generateSecureUuid } from "../secure-random.js";
4
4
  import { formatOutboundTargetForLog, redactOutboundTargetInText } from "./format.js";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
 
8
8
  //#region src/infra/outbound/delivery-queue.ts
@@ -26,11 +26,11 @@ function resolveFailedDir(stateDir) {
26
26
  /** Ensure the queue directory (and failed/ subdirectory) exist. */
27
27
  async function ensureQueueDir(stateDir) {
28
28
  const queueDir = resolveQueueDir(stateDir);
29
- await fs.promises.mkdir(queueDir, {
29
+ await syncFs.promises.mkdir(queueDir, {
30
30
  recursive: true,
31
31
  mode: 448
32
32
  });
33
- await fs.promises.mkdir(resolveFailedDir(stateDir), {
33
+ await syncFs.promises.mkdir(resolveFailedDir(stateDir), {
34
34
  recursive: true,
35
35
  mode: 448
36
36
  });
@@ -57,18 +57,18 @@ async function enqueueDelivery(params, stateDir) {
57
57
  const filePath = path.join(queueDir, `${id}.json`);
58
58
  const tmp = `${filePath}.${process.pid}.tmp`;
59
59
  const json = JSON.stringify(entry, null, 2);
60
- await fs.promises.writeFile(tmp, json, {
60
+ await syncFs.promises.writeFile(tmp, json, {
61
61
  encoding: "utf-8",
62
62
  mode: 384
63
63
  });
64
- await fs.promises.rename(tmp, filePath);
64
+ await syncFs.promises.rename(tmp, filePath);
65
65
  return id;
66
66
  }
67
67
  /** Remove a successfully delivered entry from the queue. */
68
68
  async function ackDelivery(id, stateDir) {
69
69
  const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
70
70
  try {
71
- await fs.promises.unlink(filePath);
71
+ await syncFs.promises.unlink(filePath);
72
72
  } catch (err) {
73
73
  const code = err && typeof err === "object" && "code" in err ? String(err.code) : null;
74
74
  if (code !== "ENOENT") {
@@ -79,24 +79,24 @@ async function ackDelivery(id, stateDir) {
79
79
  /** Update a queue entry after a failed delivery attempt. */
80
80
  async function failDelivery(id, error, stateDir) {
81
81
  const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
82
- const raw = await fs.promises.readFile(filePath, "utf-8");
82
+ const raw = await syncFs.promises.readFile(filePath, "utf-8");
83
83
  const entry = JSON.parse(raw);
84
84
  entry.retryCount += 1;
85
85
  entry.lastAttemptAt = Date.now();
86
86
  entry.lastError = error;
87
87
  const tmp = `${filePath}.${process.pid}.tmp`;
88
- await fs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
88
+ await syncFs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
89
89
  encoding: "utf-8",
90
90
  mode: 384
91
91
  });
92
- await fs.promises.rename(tmp, filePath);
92
+ await syncFs.promises.rename(tmp, filePath);
93
93
  }
94
94
  /** Load all pending delivery entries from the queue directory. */
95
95
  async function loadPendingDeliveries(stateDir) {
96
96
  const queueDir = resolveQueueDir(stateDir);
97
97
  let files;
98
98
  try {
99
- files = await fs.promises.readdir(queueDir);
99
+ files = await syncFs.promises.readdir(queueDir);
100
100
  } catch (err) {
101
101
  const code = err && typeof err === "object" && "code" in err ? String(err.code) : null;
102
102
  if (code === "ENOENT") {
@@ -111,20 +111,20 @@ async function loadPendingDeliveries(stateDir) {
111
111
  }
112
112
  const filePath = path.join(queueDir, file);
113
113
  try {
114
- const stat = await fs.promises.stat(filePath);
114
+ const stat = await syncFs.promises.stat(filePath);
115
115
  if (!stat.isFile()) {
116
116
  continue;
117
117
  }
118
- const raw = await fs.promises.readFile(filePath, "utf-8");
118
+ const raw = await syncFs.promises.readFile(filePath, "utf-8");
119
119
  const parsed = JSON.parse(raw);
120
120
  const { entry, migrated } = normalizeLegacyQueuedDeliveryEntry(parsed);
121
121
  if (migrated) {
122
122
  const tmp = `${filePath}.${process.pid}.tmp`;
123
- await fs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
123
+ await syncFs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
124
124
  encoding: "utf-8",
125
125
  mode: 384
126
126
  });
127
- await fs.promises.rename(tmp, filePath);
127
+ await syncFs.promises.rename(tmp, filePath);
128
128
  }
129
129
  entries.push(entry);
130
130
  } catch {}
@@ -135,13 +135,13 @@ async function loadPendingDeliveries(stateDir) {
135
135
  async function moveToFailed(id, stateDir) {
136
136
  const queueDir = resolveQueueDir(stateDir);
137
137
  const failedDir = resolveFailedDir(stateDir);
138
- await fs.promises.mkdir(failedDir, {
138
+ await syncFs.promises.mkdir(failedDir, {
139
139
  recursive: true,
140
140
  mode: 448
141
141
  });
142
142
  const src = path.join(queueDir, `${id}.json`);
143
143
  const dest = path.join(failedDir, `${id}.json`);
144
- await fs.promises.rename(src, dest);
144
+ await syncFs.promises.rename(src, dest);
145
145
  }
146
146
  /** Compute the backoff delay in ms for a given retry count. */
147
147
  function computeBackoffMs(retryCount) {
@@ -1,13 +1,13 @@
1
1
  import { isTruthyEnvValue } from "./env.js";
2
2
  import { resolveBrewPathDirs } from "./brew.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
 
7
7
  //#region src/infra/path-env.ts
8
8
  function isExecutable(filePath) {
9
9
  try {
10
- fs.accessSync(filePath, fs.constants.X_OK);
10
+ syncFs.accessSync(filePath, syncFs.constants.X_OK);
11
11
  return true;
12
12
  } catch {
13
13
  return false;
@@ -15,7 +15,7 @@ function isExecutable(filePath) {
15
15
  }
16
16
  function isDirectory(dirPath) {
17
17
  try {
18
- return fs.statSync(dirPath).isDirectory();
18
+ return syncFs.statSync(dirPath).isDirectory();
19
19
  } catch {
20
20
  return false;
21
21
  }
@@ -1,11 +1,11 @@
1
- import fs from "node:fs";
2
- import fs$1 from "node:fs/promises";
1
+ import syncFs from "node:fs";
2
+ import fs from "node:fs/promises";
3
3
 
4
4
  //#region src/infra/ports-lsof.ts
5
5
  const LSOF_CANDIDATES = process.platform === "darwin" ? ["/usr/sbin/lsof", "/usr/bin/lsof"] : ["/usr/bin/lsof", "/usr/sbin/lsof"];
6
6
  async function canExecute(path) {
7
7
  try {
8
- await fs$1.access(path, fs.constants.X_OK);
8
+ await fs.access(path, syncFs.constants.X_OK);
9
9
  return true;
10
10
  } catch {
11
11
  return false;
@@ -22,7 +22,7 @@ async function resolveLsofCommand() {
22
22
  function resolveLsofCommandSync() {
23
23
  for (const candidate of LSOF_CANDIDATES) {
24
24
  try {
25
- fs.accessSync(candidate, fs.constants.X_OK);
25
+ syncFs.accessSync(candidate, syncFs.constants.X_OK);
26
26
  return candidate;
27
27
  } catch {}
28
28
  }
@@ -9,7 +9,7 @@ import { resolveAuthProfileOrder } from "../agents/auth-profiles/order.js";
9
9
  import "../agents/auth-profiles.js";
10
10
  import { getCustomProviderApiKey } from "../agents/model-auth.js";
11
11
  import { normalizeProviderId } from "../agents/model-selection.js";
12
- import fs from "node:fs";
12
+ import syncFs from "node:fs";
13
13
  import os from "node:os";
14
14
  import path from "node:path";
15
15
 
@@ -43,10 +43,10 @@ function resolveZaiApiKey() {
43
43
  }
44
44
  try {
45
45
  const authPath = path.join(resolveRequiredHomeDir(process.env, os.homedir), ".pi", "agent", "auth.json");
46
- if (!fs.existsSync(authPath)) {
46
+ if (!syncFs.existsSync(authPath)) {
47
47
  return undefined;
48
48
  }
49
- const data = JSON.parse(fs.readFileSync(authPath, "utf-8"));
49
+ const data = JSON.parse(syncFs.readFileSync(authPath, "utf-8"));
50
50
  return data["z-ai"]?.access || data.zai?.access;
51
51
  } catch {
52
52
  return undefined;
@@ -1,5 +1,5 @@
1
1
  import { sameFileIdentity as sameFileIdentity$1 } from "./file-identity.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
 
4
4
  //#region src/infra/safe-open-sync.ts
5
5
  function isExpectedPathError(error) {
@@ -10,7 +10,7 @@ function sameFileIdentity(left, right) {
10
10
  return sameFileIdentity$1(left, right);
11
11
  }
12
12
  function openVerifiedFileSync(params) {
13
- const ioFs = params.ioFs ?? fs;
13
+ const ioFs = params.ioFs ?? syncFs;
14
14
  const openReadFlags = ioFs.constants.O_RDONLY | (typeof ioFs.constants.O_NOFOLLOW === "number" ? ioFs.constants.O_NOFOLLOW : 0);
15
15
  let fd = null;
16
16
  try {
@@ -4,7 +4,7 @@ import { stripInboundMetadata } from "../auto-reply/reply/strip-inbound-meta.js"
4
4
  import { stripEnvelope, stripMessageIdHints } from "../shared/chat-envelope.js";
5
5
  import { normalizeUsage } from "../agents/usage.js";
6
6
  import { estimateUsageCost, resolveModelCostConfig } from "../utils/usage-format.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
  import path from "node:path";
9
9
  import readline from "node:readline";
10
10
 
@@ -145,7 +145,7 @@ const applyCostTotal = (totals, costTotal) => {
145
145
  totals.totalCost += costTotal;
146
146
  };
147
147
  async function* readJsonlRecords(filePath) {
148
- const fileStream = fs.createReadStream(filePath, { encoding: "utf-8" });
148
+ const fileStream = syncFs.createReadStream(filePath, { encoding: "utf-8" });
149
149
  const rl = readline.createInterface({
150
150
  input: fileStream,
151
151
  crlfDelay: Infinity
@@ -225,10 +225,10 @@ async function loadCostUsageSummary(params) {
225
225
  const dailyMap = new Map();
226
226
  const totals = emptyTotals();
227
227
  const sessionsDir = resolveSessionTranscriptsDirForAgent(params?.agentId);
228
- const entries = await fs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
228
+ const entries = await syncFs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
229
229
  const files = (await Promise.all(entries.filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl")).map(async (entry) => {
230
230
  const filePath = path.join(sessionsDir, entry.name);
231
- const stats = await fs.promises.stat(filePath).catch(() => null);
231
+ const stats = await syncFs.promises.stat(filePath).catch(() => null);
232
232
  if (!stats) {
233
233
  return null;
234
234
  }
@@ -279,14 +279,14 @@ async function loadCostUsageSummary(params) {
279
279
  */
280
280
  async function discoverAllSessions(params) {
281
281
  const sessionsDir = resolveSessionTranscriptsDirForAgent(params?.agentId);
282
- const entries = await fs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
282
+ const entries = await syncFs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
283
283
  const discovered = [];
284
284
  for (const entry of entries) {
285
285
  if (!entry.isFile() || !entry.name.endsWith(".jsonl")) {
286
286
  continue;
287
287
  }
288
288
  const filePath = path.join(sessionsDir, entry.name);
289
- const stats = await fs.promises.stat(filePath).catch(() => null);
289
+ const stats = await syncFs.promises.stat(filePath).catch(() => null);
290
290
  if (!stats) {
291
291
  continue;
292
292
  }
@@ -330,7 +330,7 @@ async function discoverAllSessions(params) {
330
330
  }
331
331
  async function loadSessionCostSummary(params) {
332
332
  const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
333
- if (!sessionFile || !fs.existsSync(sessionFile)) {
333
+ if (!sessionFile || !syncFs.existsSync(sessionFile)) {
334
334
  return null;
335
335
  }
336
336
  const totals = emptyTotals();
@@ -547,7 +547,7 @@ async function loadSessionCostSummary(params) {
547
547
  }
548
548
  async function loadSessionUsageTimeSeries(params) {
549
549
  const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
550
- if (!sessionFile || !fs.existsSync(sessionFile)) {
550
+ if (!sessionFile || !syncFs.existsSync(sessionFile)) {
551
551
  return null;
552
552
  }
553
553
  const points = [];
@@ -635,7 +635,7 @@ async function loadSessionUsageTimeSeries(params) {
635
635
  }
636
636
  async function loadSessionLogs(params) {
637
637
  const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
638
- if (!sessionFile || !fs.existsSync(sessionFile)) {
638
+ if (!sessionFile || !syncFs.existsSync(sessionFile)) {
639
639
  return null;
640
640
  }
641
641
  const logs = [];
@@ -1,6 +1,6 @@
1
1
  import { sanitizeHostExecEnv } from "./host-env-security.js";
2
2
  import { isTruthyEnvValue } from "./env.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { execFileSync } from "node:child_process";
@@ -34,7 +34,7 @@ function readEtcShells() {
34
34
  return cachedEtcShells;
35
35
  }
36
36
  try {
37
- const raw = fs.readFileSync("/etc/shells", "utf8");
37
+ const raw = syncFs.readFileSync("/etc/shells", "utf8");
38
38
  const entries = raw.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#") && path.isAbsolute(line));
39
39
  cachedEtcShells = new Set(entries);
40
40
  } catch {
@@ -1,27 +1,27 @@
1
- import fs from "node:fs";
1
+ import syncFs from "node:fs";
2
2
  import JSON5 from "json5";
3
3
 
4
4
  //#region src/infra/state-migrations.fs.ts
5
5
  function safeReadDir(dir) {
6
6
  try {
7
- return fs.readdirSync(dir, { withFileTypes: true });
7
+ return syncFs.readdirSync(dir, { withFileTypes: true });
8
8
  } catch {
9
9
  return [];
10
10
  }
11
11
  }
12
12
  function existsDir(dir) {
13
13
  try {
14
- return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
14
+ return syncFs.existsSync(dir) && syncFs.statSync(dir).isDirectory();
15
15
  } catch {
16
16
  return false;
17
17
  }
18
18
  }
19
19
  function ensureDir(dir) {
20
- fs.mkdirSync(dir, { recursive: true });
20
+ syncFs.mkdirSync(dir, { recursive: true });
21
21
  }
22
22
  function fileExists(p) {
23
23
  try {
24
- return fs.existsSync(p) && fs.statSync(p).isFile();
24
+ return syncFs.existsSync(p) && syncFs.statSync(p).isFile();
25
25
  } catch {
26
26
  return false;
27
27
  }
@@ -37,7 +37,7 @@ function isLegacyWhatsAppAuthFile(name) {
37
37
  }
38
38
  function readSessionStoreJson5(storePath) {
39
39
  try {
40
- const raw = fs.readFileSync(storePath, "utf-8");
40
+ const raw = syncFs.readFileSync(storePath, "utf-8");
41
41
  const parsed = JSON5.parse(raw);
42
42
  if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
43
43
  return {