@fased/fased 0.1.55 → 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 (453) 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 +3 -2
  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 +6 -3
  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-source.js +2 -2
  20. package/dist/agents/model-catalog.js +1 -1
  21. package/dist/agents/model-metadata.js +34 -6
  22. package/dist/agents/openai-codex-app-server.js +499 -0
  23. package/dist/agents/pi-embedded-runner/compact.js +3 -3
  24. package/dist/agents/pi-embedded-runner/extra-params.js +159 -95
  25. package/dist/agents/pi-embedded-runner/model.js +62 -1
  26. package/dist/agents/pi-embedded-runner/moonshot-stream-wrappers.js +46 -0
  27. package/dist/agents/pi-embedded-runner/openai-stream-wrappers.js +221 -0
  28. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -4
  29. package/dist/agents/pi-embedded-runner/run.js +5 -2
  30. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  31. package/dist/agents/pi-embedded-runner.js +1 -1
  32. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  33. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  34. package/dist/agents/pi-model-discovery.js +6 -6
  35. package/dist/agents/pi-project-settings.js +3 -3
  36. package/dist/agents/pi-tools.js +2 -2
  37. package/dist/agents/sandbox/fs-bridge.js +2 -2
  38. package/dist/agents/session-dirs.js +4 -4
  39. package/dist/agents/session-write-lock.js +13 -13
  40. package/dist/agents/shell-utils.js +5 -5
  41. package/dist/agents/skills/bundled-dir.js +4 -4
  42. package/dist/agents/skills/local-loader.js +6 -6
  43. package/dist/agents/skills/plugin-skills.js +2 -2
  44. package/dist/agents/skills/workspace.js +13 -13
  45. package/dist/agents/skills-install-download.js +7 -7
  46. package/dist/agents/skills-install-plan.js +2 -2
  47. package/dist/agents/skills-install.js +2 -2
  48. package/dist/agents/skills-status.js +2 -2
  49. package/dist/agents/subagent-depth.js +2 -2
  50. package/dist/agents/system-prompt-params.js +2 -2
  51. package/dist/agents/tools/discord-actions-messaging.js +1 -1
  52. package/dist/agents/tools/message-tool.js +1 -1
  53. package/dist/agents/tools/session-status-tool.js +3 -3
  54. package/dist/agents/tools/slack-actions.js +1 -1
  55. package/dist/agents/tools/tts-tool.js +1 -1
  56. package/dist/agents/workspace.js +22 -22
  57. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  58. package/dist/auto-reply/reply/agent-runner.js +2 -2
  59. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  60. package/dist/auto-reply/reply/commands-models.js +1 -1
  61. package/dist/auto-reply/reply/directive-handling.impl.js +4 -1
  62. package/dist/auto-reply/reply/dispatch-acp.js +1 -1
  63. package/dist/auto-reply/reply/dispatch-from-config.js +1 -1
  64. package/dist/auto-reply/reply/get-reply-run.js +20 -2
  65. package/dist/auto-reply/reply/model-selection.js +1 -1
  66. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  67. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  68. package/dist/auto-reply/reply/session-reset-model.js +1 -1
  69. package/dist/auto-reply/reply/session.js +3 -3
  70. package/dist/auto-reply/skill-commands.js +3 -3
  71. package/dist/auto-reply/status.js +7 -7
  72. package/dist/auto-reply/thinking.js +1 -1
  73. package/dist/brand.js +1 -1
  74. package/dist/browser/cdp.helpers.js +2 -2
  75. package/dist/browser/chrome.executables.js +3 -3
  76. package/dist/browser/chrome.js +5 -5
  77. package/dist/browser/chrome.profile-decoration.js +6 -6
  78. package/dist/browser/extension-relay.js +7 -7
  79. package/dist/browser/profiles-service.js +2 -2
  80. package/dist/browser/server-context.js +2 -2
  81. package/dist/browser/trash.js +4 -4
  82. package/dist/build-info.json +3 -3
  83. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  84. package/dist/canvas-host/server.js +4 -4
  85. package/dist/capabilities/catalog.js +3 -3
  86. package/dist/channels/plugins/catalog.js +3 -3
  87. package/dist/cli/browser-cli-extension.js +6 -6
  88. package/dist/cli/command-format.js +2 -2
  89. package/dist/cli/cron-cli/register.cron-add.js +1 -1
  90. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  91. package/dist/cli/dns-cli.js +9 -9
  92. package/dist/cli/gateway-cli/dev.js +5 -5
  93. package/dist/cli/gateway-cli/run.js +2 -2
  94. package/dist/cli/hooks-cli.js +5 -5
  95. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  96. package/dist/cli/memory-cli.js +7 -7
  97. package/dist/cli/nodes-media-utils.js +2 -2
  98. package/dist/cli/plugins-cli.js +2 -2
  99. package/dist/cli/program/register.agent.js +1 -1
  100. package/dist/cli/secrets-cli.js +3 -3
  101. package/dist/cli/windows-argv.js +2 -2
  102. package/dist/commands/agent.js +22 -3
  103. package/dist/commands/dashboard-link.js +3 -3
  104. package/dist/commands/doctor-config-flow.js +1 -1
  105. package/dist/commands/doctor-install.js +5 -5
  106. package/dist/commands/doctor-memory-search.js +2 -2
  107. package/dist/commands/doctor-platform-notes.js +2 -2
  108. package/dist/commands/doctor-sandbox.js +2 -2
  109. package/dist/commands/doctor-state-integrity.js +23 -23
  110. package/dist/commands/doctor-workspace.js +3 -3
  111. package/dist/commands/doctor.js +3 -3
  112. package/dist/commands/hosted-dashboard-probe.js +3 -3
  113. package/dist/commands/managed-up.js +2 -2
  114. package/dist/commands/model-picker.js +4 -3
  115. package/dist/commands/models/list.probe.js +1 -1
  116. package/dist/commands/models/list.registry.js +3 -2
  117. package/dist/commands/models/list.status-command.js +2 -2
  118. package/dist/commands/onboard-auth.credentials.js +3 -3
  119. package/dist/commands/onboarding/plugin-install.js +2 -2
  120. package/dist/commands/openai-codex-model-default.js +3 -2
  121. package/dist/commands/sessions-cleanup.js +2 -2
  122. package/dist/commands/signal-install.js +6 -6
  123. package/dist/commands/status-all/channels.js +2 -2
  124. package/dist/commands/wallet.js +47 -47
  125. package/dist/config/cache-utils.js +2 -2
  126. package/dist/config/includes.js +5 -5
  127. package/dist/config/io.js +2 -2
  128. package/dist/config/paths.js +3 -3
  129. package/dist/config/sat-runtime-ids.js +3 -3
  130. package/dist/config/sessions/disk-budget.js +6 -6
  131. package/dist/config/sessions/paths.js +2 -2
  132. package/dist/config/sessions/store.js +17 -17
  133. package/dist/config/sessions/transcript.js +4 -4
  134. package/dist/config/talk.js +2 -2
  135. package/dist/config/zod-schema.agent-defaults.js +4 -2
  136. package/dist/config/zod-schema.agent-runtime.js +4 -2
  137. package/dist/config/zod-schema.core.js +4 -2
  138. package/dist/control-ui/assets/{app-D2RaTXoV.js → app-D7TXyNRi.js} +390 -383
  139. package/dist/control-ui/assets/chat-model-ref-Djkv93yn.js +2 -0
  140. package/dist/control-ui/assets/{index-D2nC6I-9.js → index-BmSBom-w.js} +3 -3
  141. package/dist/control-ui/assets/{providers-CyjiG5Jw.js → providers-Cc89iMdx.js} +3 -3
  142. package/dist/control-ui/index.html +1 -1
  143. package/dist/control-ui/version.json +1 -1
  144. package/dist/cron/isolated-agent/run.js +6 -2
  145. package/dist/cron/service/jobs.js +11 -1
  146. package/dist/cron/service/store.js +2 -2
  147. package/dist/cron/store.js +6 -6
  148. package/dist/daemon/systemd-system.js +5 -5
  149. package/dist/discord/monitor/gateway-plugin.js +2 -2
  150. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  151. package/dist/discord/voice/manager.js +1 -1
  152. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  153. package/dist/gateway/client.js +4 -4
  154. package/dist/gateway/control-ui-boot-check.js +6 -6
  155. package/dist/gateway/control-ui-login.js +7 -7
  156. package/dist/gateway/control-ui.js +9 -9
  157. package/dist/gateway/hooks-mapping.js +4 -4
  158. package/dist/gateway/protocol/schema/agents-models-skills.js +63 -4
  159. package/dist/gateway/server-discovery.js +2 -2
  160. package/dist/gateway/server-http.js +4 -4
  161. package/dist/gateway/server-methods/chat.js +3 -3
  162. package/dist/gateway/server-methods/models.js +4 -3
  163. package/dist/gateway/server-methods/sessions.js +8 -8
  164. package/dist/gateway/server-methods/tts.js +2 -2
  165. package/dist/gateway/server-methods/usage.js +2 -2
  166. package/dist/gateway/server-model-catalog.js +1 -1
  167. package/dist/gateway/server.impl.js +3 -3
  168. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  169. package/dist/gateway/session-utils.fs.js +24 -24
  170. package/dist/gateway/session-utils.js +6 -6
  171. package/dist/gateway/sessions-patch.js +27 -24
  172. package/dist/hooks/bundled-dir.js +4 -4
  173. package/dist/hooks/gmail-setup-utils.js +6 -6
  174. package/dist/hooks/import-url.js +2 -2
  175. package/dist/hooks/loader.js +4 -4
  176. package/dist/hooks/workspace.js +7 -7
  177. package/dist/infra/archive.js +17 -17
  178. package/dist/infra/boundary-file-read.js +2 -2
  179. package/dist/infra/boundary-path.js +15 -15
  180. package/dist/infra/brew.js +2 -2
  181. package/dist/infra/control-ui-assets.js +14 -14
  182. package/dist/infra/device-auth-store.js +8 -8
  183. package/dist/infra/device-identity.js +8 -8
  184. package/dist/infra/dotenv.js +2 -2
  185. package/dist/infra/exec-approvals.js +8 -8
  186. package/dist/infra/exec-command-resolution.js +4 -4
  187. package/dist/infra/exec-safe-bin-trust.js +2 -2
  188. package/dist/infra/fased-root.js +5 -5
  189. package/dist/infra/fs-safe.js +14 -14
  190. package/dist/infra/gateway-lock.js +11 -11
  191. package/dist/infra/git-commit.js +5 -5
  192. package/dist/infra/git-root.js +4 -4
  193. package/dist/infra/hosted-runtime-artifact.js +3 -3
  194. package/dist/infra/is-main.js +2 -2
  195. package/dist/infra/json-file.js +7 -7
  196. package/dist/infra/outbound/delivery-queue.js +16 -16
  197. package/dist/infra/path-env.js +3 -3
  198. package/dist/infra/ports-lsof.js +4 -4
  199. package/dist/infra/provider-usage.auth.js +3 -3
  200. package/dist/infra/safe-open-sync.js +2 -2
  201. package/dist/infra/session-cost-usage.js +9 -9
  202. package/dist/infra/shell-env.js +2 -2
  203. package/dist/infra/state-migrations.fs.js +6 -6
  204. package/dist/infra/state-migrations.js +23 -23
  205. package/dist/infra/tmp-fased-dir.js +6 -6
  206. package/dist/infra/widearea-dns.js +3 -3
  207. package/dist/infra/wsl.js +2 -2
  208. package/dist/light-update-status.js +11 -11
  209. package/dist/line/accounts.js +2 -2
  210. package/dist/line/download.js +2 -2
  211. package/dist/logging/config.js +3 -3
  212. package/dist/logging/logger.js +7 -7
  213. package/dist/managed/federation.js +3 -3
  214. package/dist/managed/tunnel.js +3 -3
  215. package/dist/media/store.js +13 -13
  216. package/dist/media-understanding/runner.js +3 -3
  217. package/dist/memory/embeddings.js +2 -2
  218. package/dist/memory/internal.js +10 -10
  219. package/dist/memory/manager-sync-ops.js +7 -7
  220. package/dist/memory/repair-executor.js +17 -17
  221. package/dist/node-host/invoke-system-run-plan.js +8 -8
  222. package/dist/node-host/invoke.js +2 -2
  223. package/dist/node-host/runner.js +3 -3
  224. package/dist/pairing/pairing-store.js +3 -3
  225. package/dist/plugin-sdk/{accounts-CeRNo5Ae.js → accounts-DzWlKv1U.js} +1 -1
  226. package/dist/plugin-sdk/{actions-OMRHtXPj.js → actions-BplQVLL6.js} +4 -4
  227. package/dist/plugin-sdk/{active-listener-BlIkS3iR.js → active-listener-x4MLhYUw.js} +1 -1
  228. package/dist/plugin-sdk/{allow-list-BYeKk0Sy.js → allow-list-DyAxs4yw.js} +1 -1
  229. package/dist/plugin-sdk/{audio-preflight-B2n3a2Tj.js → audio-preflight-G8h3Sn8_.js} +43 -47
  230. package/dist/plugin-sdk/{audit-Ppg6dR_b.js → audit-CWknklvI.js} +1 -1
  231. package/dist/plugin-sdk/{channel-access-af8dWWRv.js → channel-access-a9Dnfw7-.js} +1 -1
  232. package/dist/plugin-sdk/{channel-access-configure-B6IAGlE0.js → channel-access-configure-CD4QDN5E.js} +1 -1
  233. package/dist/plugin-sdk/{channel-adapters.discord-IOZP8Cv5.js → channel-adapters.discord-BS4S4Svh.js} +1 -1
  234. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  235. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  236. package/dist/plugin-sdk/{chunk-CD76Byie.js → chunk-B8EZkwiT.js} +1 -1
  237. package/dist/plugin-sdk/{chunk-items-Bu19zrYH.js → chunk-items-CEPklxGe.js} +1 -1
  238. package/dist/plugin-sdk/command-status.d.ts +2 -2
  239. package/dist/plugin-sdk/command-status.js +43 -47
  240. package/dist/plugin-sdk/{commands-registry-DgS55tNj.js → commands-registry-BfEa4tFA.js} +2 -2
  241. package/dist/plugin-sdk/{common-CWvfeiX0.js → common-CbfckC19.js} +1 -1
  242. package/dist/plugin-sdk/{config-CYDETqcF.js → config-Bt5GhnA-.js} +29 -15
  243. package/dist/plugin-sdk/{config-schema-CQ4EVcQG.js → config-schema-B9DKr6J5.js} +95877 -81287
  244. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  245. package/dist/plugin-sdk/device-pair.js +2 -3
  246. package/dist/plugin-sdk/{diagnostic-Dfn1iERm.js → diagnostic-DLL_zekv.js} +3 -3
  247. package/dist/plugin-sdk/{directory-live-DatqU-eS.js → directory-live-CSuYxdwk.js} +1 -1
  248. package/dist/plugin-sdk/{directory-live-ClwN5KKq.js → directory-live-Dw7ZgC9_.js} +1 -1
  249. package/dist/plugin-sdk/discord.d.ts +5 -5
  250. package/dist/plugin-sdk/discord.js +31 -32
  251. package/dist/plugin-sdk/{draft-stream-controls-D4Tb_iS_.js → draft-stream-controls-BqchW1vi.js} +1 -1
  252. package/dist/plugin-sdk/{fetch-guard-BuYrl6q2.js → fetch-guard-CeG6u6ld.js} +1 -1
  253. package/dist/plugin-sdk/{filesystem-manager-B9DDPgfU.js → filesystem-manager-BGGGrkiN.js} +2 -2
  254. package/dist/plugin-sdk/{fs-safe-BG-VzVkL.js → fs-safe-xBqok6yR.js} +1 -1
  255. package/dist/plugin-sdk/{group-mentions-BxDgHCgj.d.ts → group-mentions-BHRff6j8.d.ts} +1 -1
  256. package/dist/plugin-sdk/{guilds-BeT3iHHJ.js → guilds-CDhRIX57.js} +1 -1
  257. package/dist/plugin-sdk/{handle-action-B75UVKxF.js → handle-action-DbzZFYnG.js} +24 -25
  258. package/dist/plugin-sdk/{helpers-BuEwju6y.js → helpers-CluGKuIV.js} +1 -1
  259. package/dist/plugin-sdk/{image-ops-C66HPeAZ.js → image-ops-CUaLtIFj.js} +1 -1
  260. package/dist/plugin-sdk/index.d.ts +7 -7
  261. package/dist/plugin-sdk/index.js +47 -51
  262. package/dist/plugin-sdk/json-store.js +6 -6
  263. package/dist/plugin-sdk/{login-Amr2DpKU.js → login-DJuHYDiK.js} +3 -3
  264. package/dist/plugin-sdk/{login-qr-DMQNEi9m.js → login-qr-CbHL5ayf.js} +3 -3
  265. package/dist/plugin-sdk/{manager-Bvpq49BI.js → manager-oHAvZCT3.js} +7 -7
  266. package/dist/plugin-sdk/{markdown-tables-DmQ7oXOm.js → markdown-tables-Mkx7k92Y.js} +1 -1
  267. package/dist/plugin-sdk/{media-ByLQbEwJ.js → media-CA8sTmVE.js} +4 -4
  268. package/dist/plugin-sdk/{monitor-K_u6daGa.js → monitor-CZrN9pev.js} +51 -55
  269. package/dist/plugin-sdk/{monitor-S_7LrvSj.js → monitor-CmwGqNyV.js} +61 -65
  270. package/dist/plugin-sdk/{openresponses-http-BrDJUZXR.js → openresponses-http-CWOd4war.js} +43 -47
  271. package/dist/plugin-sdk/{optional-runtime-dependency-CbYjAC2b.js → optional-runtime-dependency-DKmk9PZa.js} +1 -1
  272. package/dist/plugin-sdk/{outbound-BuDafBBI.js → outbound-0oN9IfNw.js} +9 -9
  273. package/dist/plugin-sdk/{outbound-attachment-DmZmUqFP.js → outbound-attachment-DdVkqUzE.js} +2 -2
  274. package/dist/plugin-sdk/{pairing-message-D0-UWGFJ.d.ts → pairing-message-BMkkS038.d.ts} +2 -2
  275. package/dist/plugin-sdk/{pairing-message-e4D4eBDA.js → pairing-message-ClqhfCUk.js} +1 -1
  276. package/dist/plugin-sdk/{pairing-store-T3IGoGZg.js → pairing-store-B01mCSct.js} +2 -2
  277. package/dist/plugin-sdk/{pi-model-discovery-DvAG_Png.js → pi-model-discovery-Buz0JC1Y.js} +1 -1
  278. package/dist/plugin-sdk/{pi-model-discovery-runtime-NjkUgjIf.js → pi-model-discovery-runtime-DuwuoteY.js} +2 -2
  279. package/dist/plugin-sdk/{probe-Cyb-DGA3.js → probe--7xtfzMm.js} +3 -3
  280. package/dist/plugin-sdk/{probe-Dlk0Jxpw.js → probe-BFroeK3g.js} +1 -1
  281. package/dist/plugin-sdk/{probe-D8JAILir.js → probe-l_whvGLY.js} +1 -1
  282. package/dist/plugin-sdk/{resolve-channels-zEnvugag.js → probe-xY3Ky0Tx.js} +3 -4
  283. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  284. package/dist/plugin-sdk/{pw-ai-D7eW43DL.js → pw-ai-B0domrii.js} +6 -8
  285. package/dist/plugin-sdk/{qmd-manager-DCUE21Kj.js → qmd-manager-CFFeM4Fl.js} +3 -3
  286. package/dist/plugin-sdk/{query-expansion-Zr9qQixm.js → query-expansion-CAI2kKLQ.js} +1 -1
  287. package/dist/plugin-sdk/{replies-BMIPmEoP.js → replies-1macZ1mZ.js} +4 -4
  288. package/dist/plugin-sdk/{resolve-channels-ChWKWtA9.js → resolve-channels-87LZrFk_.js} +2 -2
  289. package/dist/plugin-sdk/resolve-channels-CwB2_019.js +4 -0
  290. package/dist/plugin-sdk/{resolve-outbound-target-CXCqUUPV.js → resolve-outbound-target-BdH6LUoW.js} +2 -2
  291. package/dist/plugin-sdk/{resolve-route-DJN-SUSt.js → resolve-route-CkNIKKEW.js} +1 -1
  292. package/dist/plugin-sdk/{resolve-users-BTvjQuui.js → resolve-users-Cxb5wpAQ.js} +1 -1
  293. package/dist/plugin-sdk/{resolve-users-CTzoruIZ.js → resolve-users-V6dHh_2B.js} +2 -2
  294. package/dist/plugin-sdk/{retry-policy-CY1qY6d7.js → retry-policy-9ybIh4Fq.js} +1 -1
  295. package/dist/plugin-sdk/{runtime-CgOkQe0w.js → runtime-Dy420wBu.js} +3 -3
  296. package/dist/plugin-sdk/{runtime-dependency-DvdRNMvs.js → runtime-dependency-CIw9t7-k.js} +123 -15
  297. package/dist/plugin-sdk/{sandbox-paths-lj7_EVuA.js → sandbox-paths-w64tYl0v.js} +1 -1
  298. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  299. package/dist/plugin-sdk/sat-runtime.js +44 -10
  300. package/dist/plugin-sdk/{send-BAz22RZr.js → send-2VcOMTN5.js} +9 -9
  301. package/dist/plugin-sdk/{send-2ITqny2W.js → send-BQUtCJFW.js} +10 -10
  302. package/dist/plugin-sdk/{send-Cr-dj6S-.js → send-DPJIIYAs.js} +6 -6
  303. package/dist/plugin-sdk/{send-BG3RWyil.js → send-Dqes9tdU.js} +13 -13
  304. package/dist/plugin-sdk/{send-eTxqFFsw.js → send-J4JWKP62.js} +8 -8
  305. package/dist/plugin-sdk/{session-C8nJmmVE.js → session-C_n2S5ub.js} +3 -3
  306. package/dist/plugin-sdk/{skill-commands-Rm5by9S8.js → skill-commands-B7wx9ax8.js} +102 -102
  307. package/dist/plugin-sdk/{slack-xvIVvyEM.js → slack-BouRQG-W.js} +64 -68
  308. package/dist/plugin-sdk/{slack-actions-BNIALJTA.js → slack-actions-CasHVtiq.js} +20 -21
  309. package/dist/plugin-sdk/slack.d.ts +5 -5
  310. package/dist/plugin-sdk/slack.js +13 -13
  311. package/dist/plugin-sdk/{ssrf-BZG8Ztod.js → ssrf-fG4UHKBw.js} +180 -2
  312. package/dist/plugin-sdk/{sticker-cache-D3oDiu2u.js → sticker-cache-BvGEUas3.js} +3 -3
  313. package/dist/plugin-sdk/{tables-DS5L7lCA.js → tables-CjlQJV4r.js} +2 -2
  314. package/dist/plugin-sdk/{device-pairing-D2Yq-_U6.js → tailscale-status-DwpNdO3Z.js} +104 -2
  315. package/dist/plugin-sdk/{targets-D6lUomJc.js → targets-QfP164Dh.js} +2 -2
  316. package/dist/plugin-sdk/{telegram-actions-MSFkDn0m.js → telegram-actions-CwYjV6Db.js} +48 -52
  317. package/dist/plugin-sdk/telegram.d.ts +5 -5
  318. package/dist/plugin-sdk/telegram.js +11 -11
  319. package/dist/plugin-sdk/{thread-bindings.lifecycle-Ry6Vcgw3.js → thread-bindings.lifecycle-DU4iX_Jr.js} +3 -3
  320. package/dist/plugin-sdk/{thread-bindings.state-C0stmvNk.js → thread-bindings.state-BgYWFjNF.js} +2 -2
  321. package/dist/plugin-sdk/{tmp-fased-dir-D91GExk4.d.ts → tmp-fased-dir-BdFQvrvw.d.ts} +2 -2
  322. package/dist/plugin-sdk/{types-DVTIpopt.d.ts → types-BYDL6dQj.d.ts} +2 -2
  323. package/dist/plugin-sdk/{types-DKvBJHfH.d.ts → types-CLIvQaVg.d.ts} +26 -1
  324. package/dist/plugin-sdk/{types-BzadOItY.d.ts → types-DyhXnYUr.d.ts} +1 -1
  325. package/dist/plugin-sdk/{types.plugin-BiHPaDTF.d.ts → types.plugin-_fbu40Re.d.ts} +7 -5
  326. package/dist/plugin-sdk/{web-DRNJxHXA.js → web-D0yENDve.js} +52 -56
  327. package/dist/plugin-sdk/{whatsapp-actions-BDXZF2R5.js → whatsapp-actions-BT2nPLyo.js} +18 -19
  328. package/dist/plugin-sdk/{whatsapp-heartbeat-CKgmwCGr.js → whatsapp-heartbeat-CiABSZ6G.js} +2 -2
  329. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  330. package/dist/plugin-sdk/whatsapp.js +14 -14
  331. package/dist/plugin-sdk/{wsl-Biw7Mj39.js → wsl-B_ojyEtC.js} +53 -53
  332. package/dist/plugins/bundled-dir.js +3 -3
  333. package/dist/plugins/discovery.js +11 -11
  334. package/dist/plugins/loader.js +13 -13
  335. package/dist/plugins/manifest-registry.js +2 -2
  336. package/dist/plugins/manifest.js +4 -4
  337. package/dist/plugins/path-safety.js +3 -3
  338. package/dist/plugins/runtime/index.js +1 -1
  339. package/dist/plugins/status-cache.js +9 -9
  340. package/dist/plugins/update.js +3 -3
  341. package/dist/plugins/web-search-install-catalog.js +3 -3
  342. package/dist/providers/github-copilot-model-discovery.js +51 -0
  343. package/dist/providers/openai-codex-model-discovery.js +166 -0
  344. package/dist/providers/refresh.js +116 -34
  345. package/dist/providers/registry.js +2 -2
  346. package/dist/providers/runtime-model-catalog.js +97 -28
  347. package/dist/secrets/apply.js +16 -16
  348. package/dist/secrets/audit.js +11 -11
  349. package/dist/secrets/shared.js +9 -9
  350. package/dist/security/scan-paths.js +2 -2
  351. package/dist/shared/config-eval.js +2 -2
  352. package/dist/shared/model-thinking.js +13 -2
  353. package/dist/shared/pid-alive.js +2 -2
  354. package/dist/tasks/standing-orders.js +5 -5
  355. package/dist/tasks/task-flow-registry.js +5 -5
  356. package/dist/tasks/task-registry.js +5 -5
  357. package/dist/tasks/workflow-definitions.js +6 -6
  358. package/dist/telegram/bot-message-context.js +1 -1
  359. package/dist/telegram/token.js +5 -5
  360. package/dist/utils.js +5 -5
  361. package/dist/wallet/local-socket-signer-broker.js +16 -16
  362. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  363. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  364. package/dist/wallet/wallet-approval-auth.js +5 -5
  365. package/dist/wallet/wallet-audit-log.js +5 -5
  366. package/dist/wallet/wallet-custody.js +21 -21
  367. package/dist/wallet/wallet-inbound-events.js +5 -5
  368. package/dist/wallet/wallet-observability.js +5 -5
  369. package/dist/wallet/wallet-policy.js +9 -9
  370. package/dist/wallet/wallet-provider-registry.js +7 -7
  371. package/dist/wallet/wallet-runtime-config.js +3 -3
  372. package/dist/wallet/wallet-secrets-store.js +22 -22
  373. package/dist/wallet/wallet-send-approvals.js +5 -5
  374. package/dist/wallet/wallet-settlement-links.js +5 -5
  375. package/dist/web/accounts.js +3 -3
  376. package/dist/web/auth-store.js +18 -18
  377. package/dist/web/session.js +4 -4
  378. package/dist/wizard/host-security-capability.js +2 -2
  379. package/dist/wizard/onboarding.host-security.js +7 -7
  380. package/dist/wizard/onboarding.js +7 -7
  381. package/dist/wizard/onboarding.wallet.js +44 -44
  382. package/extensions/acpx/package.json +1 -1
  383. package/extensions/bluebubbles/package.json +1 -1
  384. package/extensions/copilot-proxy/package.json +1 -1
  385. package/extensions/diagnostics-otel/package.json +1 -1
  386. package/extensions/fased-federation/package.json +1 -1
  387. package/extensions/google-gemini-cli-auth/package.json +1 -1
  388. package/extensions/imessage/package.json +1 -1
  389. package/extensions/irc/package.json +1 -1
  390. package/extensions/line/package.json +1 -1
  391. package/extensions/llm-task/package.json +1 -1
  392. package/extensions/lobster/package.json +1 -1
  393. package/extensions/matrix/CHANGELOG.md +6 -0
  394. package/extensions/matrix/package.json +1 -1
  395. package/extensions/mattermost/package.json +1 -1
  396. package/extensions/memory-core/package.json +2 -2
  397. package/extensions/memory-lancedb/package.json +1 -1
  398. package/extensions/minimax-portal-auth/package.json +1 -1
  399. package/extensions/msteams/CHANGELOG.md +6 -0
  400. package/extensions/msteams/package.json +1 -1
  401. package/extensions/nextcloud-talk/package.json +1 -1
  402. package/extensions/nostr/CHANGELOG.md +6 -0
  403. package/extensions/nostr/package.json +1 -1
  404. package/extensions/open-prose/package.json +1 -1
  405. package/extensions/sat-mining/package.json +1 -1
  406. package/extensions/signal/package.json +1 -1
  407. package/extensions/synology-chat/package.json +1 -1
  408. package/extensions/tlon/package.json +1 -1
  409. package/extensions/twitch/CHANGELOG.md +6 -0
  410. package/extensions/twitch/package.json +1 -1
  411. package/extensions/voice-call/CHANGELOG.md +6 -0
  412. package/extensions/voice-call/package.json +1 -1
  413. package/extensions/zalo/CHANGELOG.md +6 -0
  414. package/extensions/zalo/package.json +1 -1
  415. package/extensions/zalouser/CHANGELOG.md +6 -0
  416. package/extensions/zalouser/package.json +1 -1
  417. package/package.json +2 -1
  418. package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +0 -2
  419. package/dist/plugin-sdk/ip-C70a-YlD.js +0 -181
  420. package/dist/plugin-sdk/tailscale-status-ClsquRGs.js +0 -104
  421. package/dist/plugin-sdk/wallet-status-f0HagNeO.js +0 -11947
  422. package/dist/plugin-sdk/ws-CocpWGhl.js +0 -114
  423. /package/dist/plugin-sdk/{blocks-input-Dcitfh7h.js → blocks-input-Bg-8S2pl.js} +0 -0
  424. /package/dist/plugin-sdk/{channel-activity-Cg1xRoc2.js → channel-activity-DBDMQ3yI.js} +0 -0
  425. /package/dist/plugin-sdk/{channel-core-BOkyXXLa.js → channel-core-CFRs8LPy.js} +0 -0
  426. /package/dist/plugin-sdk/{client-D2N7hqVu.js → client-pI228AVT.js} +0 -0
  427. /package/dist/plugin-sdk/{command-poll-backoff-NAePk3eL.js → command-poll-backoff-yJU83wEq.js} +0 -0
  428. /package/dist/plugin-sdk/{date-time-CE3Uer3C.js → date-time-uUevHscU.js} +0 -0
  429. /package/dist/plugin-sdk/{diagnostic-session-state-HO94DMou.js → diagnostic-session-state-DqgfGYqZ.js} +0 -0
  430. /package/dist/plugin-sdk/{draft-stream-loop-CKyHn8IX.js → draft-stream-loop-CrOPfV3F.js} +0 -0
  431. /package/dist/plugin-sdk/{fetch-Cu-ahkie.js → fetch-BtmoPIlf.js} +0 -0
  432. /package/dist/plugin-sdk/{gateway-registry-DFsoY6C0.js → gateway-registry-DZDsqicG.js} +0 -0
  433. /package/dist/plugin-sdk/{inbound-context-BFnIdcqI.js → inbound-context-DrAcXE0y.js} +0 -0
  434. /package/dist/plugin-sdk/{internal-qo16nNU1.js → internal-CG_nHo-2.js} +0 -0
  435. /package/dist/plugin-sdk/{memory-search-C3C0bD2H.js → memory-search-VFll-AIb.js} +0 -0
  436. /package/dist/plugin-sdk/{pairing-token-N_6Jbt1L.js → pairing-token-Cs3BRKc0.js} +0 -0
  437. /package/dist/plugin-sdk/{path-alias-guards-Dg3gU-MA.js → path-alias-guards-BJZD5JMJ.js} +0 -0
  438. /package/dist/plugin-sdk/{polls-DQrR-qT3.js → polls-DKQXVfJp.js} +0 -0
  439. /package/dist/plugin-sdk/{proxy-7xs_rsnV.js → proxy-DWpYcsvR.js} +0 -0
  440. /package/dist/plugin-sdk/{qmd-scope-D1sSG_Rx.js → qmd-scope-CdX34VCV.js} +0 -0
  441. /package/dist/plugin-sdk/{redact-identifier-Q3tkvxhm.js → redact-identifier-Lt7t3l7S.js} +0 -0
  442. /package/dist/plugin-sdk/{redact-sensitive-url-dPvnFFsK.js → redact-sensitive-url-g-ukZjwA.js} +0 -0
  443. /package/dist/plugin-sdk/{render-Bwu_WxwA.js → render-e7fENCYH.js} +0 -0
  444. /package/dist/plugin-sdk/{reply-prefix-Bqzm6DC1.js → reply-prefix-ClpxvL_w.js} +0 -0
  445. /package/dist/plugin-sdk/{reply-reference-BkbK_DWT.js → reply-reference-Bqk-7HXE.js} +0 -0
  446. /package/dist/plugin-sdk/{secure-random-Bl-AVLVb.js → secure-random-BIkG-k4s.js} +0 -0
  447. /package/dist/plugin-sdk/{shared-clhhbWN3.js → shared-CBgp_GBw.js} +0 -0
  448. /package/dist/plugin-sdk/{target-errors-C_SVKoEv.js → target-errors-Ckufe179.js} +0 -0
  449. /package/dist/plugin-sdk/{targets-BDvvnlph.js → targets-CoMJ1ry1.js} +0 -0
  450. /package/dist/plugin-sdk/{tokens-BvtlOzVP.js → tokens-BbnqfVuu.js} +0 -0
  451. /package/dist/plugin-sdk/{tool-loop-detection-CWphm1k_.js → tool-loop-detection-Bp8bPJLs.js} +0 -0
  452. /package/dist/plugin-sdk/{ui-e020ouhJ.js → ui-Be8cLHIS.js} +0 -0
  453. /package/dist/plugin-sdk/{with-timeout-BYrRAYFV.js → with-timeout-ckWB8rTo.js} +0 -0
@@ -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 fs from "node:fs";
13
+ import syncFs 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 (!fs.existsSync(params.envPath)) {
54
+ if (!syncFs.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 = fs.readFileSync(params.envPath, "utf8");
59
+ const raw = syncFs.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 (!fs.existsSync(filePath)) {
84
+ if (!syncFs.existsSync(filePath)) {
85
85
  return { value: null };
86
86
  }
87
87
  try {
88
- const raw = fs.readFileSync(filePath, "utf8");
88
+ const raw = syncFs.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 (fs.existsSync(agentsRoot)) {
200
- for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
199
+ if (syncFs.existsSync(agentsRoot)) {
200
+ for (const entry of syncFs.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 (!fs.existsSync(params.authStorePath)) {
218
+ if (!syncFs.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 (!fs.existsSync(agentsRoot)) {
318
+ if (!syncFs.existsSync(agentsRoot)) {
319
319
  return;
320
320
  }
321
- for (const entry of fs.readdirSync(agentsRoot, { withFileTypes: true })) {
321
+ for (const entry of syncFs.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 (!fs.existsSync(authJsonPath)) {
326
+ if (!syncFs.existsSync(authJsonPath)) {
327
327
  continue;
328
328
  }
329
329
  params.collector.filesScanned.add(authJsonPath);
@@ -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/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
- fs.mkdirSync(path.dirname(filePath), {
18
+ syncFs.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
- fs.writeFileSync(pathname, `${JSON.stringify(value, null, 2)}\n`, "utf8");
26
- fs.chmodSync(pathname, 384);
25
+ syncFs.writeFileSync(pathname, `${JSON.stringify(value, null, 2)}\n`, "utf8");
26
+ syncFs.chmodSync(pathname, 384);
27
27
  }
28
28
  function readTextFileIfExists(pathname) {
29
- if (!fs.existsSync(pathname)) {
29
+ if (!syncFs.existsSync(pathname)) {
30
30
  return null;
31
31
  }
32
- return fs.readFileSync(pathname, "utf8");
32
+ return syncFs.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
- fs.writeFileSync(tempPath, value, "utf8");
38
- fs.chmodSync(tempPath, mode);
39
- fs.renameSync(tempPath, pathname);
37
+ syncFs.writeFileSync(tempPath, value, "utf8");
38
+ syncFs.chmodSync(tempPath, mode);
39
+ syncFs.renameSync(tempPath, pathname);
40
40
  }
41
41
 
42
42
  //#endregion
@@ -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/security/scan-paths.ts
@@ -10,7 +10,7 @@ function isPathInside(basePath, candidatePath) {
10
10
  }
11
11
  function safeRealpathSync(filePath) {
12
12
  try {
13
- return fs.realpathSync(filePath);
13
+ return syncFs.realpathSync(filePath);
14
14
  } catch {
15
15
  return null;
16
16
  }
@@ -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/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
- fs.accessSync(candidate, fs.constants.X_OK);
136
+ syncFs.accessSync(candidate, syncFs.constants.X_OK);
137
137
  hasBinaryCache.set(bin, true);
138
138
  return true;
139
139
  } catch {}
@@ -15,6 +15,7 @@ const MAX_THINKING_LEVELS = [
15
15
  "xhigh",
16
16
  "max"
17
17
  ];
18
+ const ULTRA_THINKING_LEVELS = [...MAX_THINKING_LEVELS, "ultra"];
18
19
  const XHIGH_MODEL_REFS = [
19
20
  "openai/gpt-5.6",
20
21
  "openai/gpt-5.6-terra",
@@ -77,6 +78,9 @@ function normalizeThinkLevel(raw) {
77
78
  if (key === "max") {
78
79
  return "max";
79
80
  }
81
+ if (key === "ultra") {
82
+ return "ultra";
83
+ }
80
84
  if (key === "off") {
81
85
  return "off";
82
86
  }
@@ -110,7 +114,6 @@ function normalizeThinkLevel(raw) {
110
114
  }
111
115
  if ([
112
116
  "high",
113
- "ultra",
114
117
  "ultrathink",
115
118
  "think-hard",
116
119
  "thinkhardest",
@@ -159,6 +162,11 @@ function normalizeThinkingLevels(values) {
159
162
  return levels;
160
163
  }
161
164
  function listGenericThinkingLevels(provider, model) {
165
+ const normalizedProvider = normalizeProviderId(provider);
166
+ const normalizedModel = model?.trim().toLowerCase();
167
+ if (normalizedProvider === "openai-codex" && (normalizedModel === "gpt-5.6-sol" || normalizedModel === "gpt-5.6-terra")) {
168
+ return [...ULTRA_THINKING_LEVELS];
169
+ }
162
170
  if (supportsMaxThinking(provider, model)) {
163
171
  return [...MAX_THINKING_LEVELS];
164
172
  }
@@ -283,6 +291,9 @@ function listThinkingLevels(provider, model) {
283
291
  function listThinkingLevelLabels(provider, model) {
284
292
  return listThinkingLevels(provider, model);
285
293
  }
294
+ function supportsThinkingLevel(provider, model, level) {
295
+ return listThinkingLevels(provider, model).includes(level);
296
+ }
286
297
  function formatThinkingLevels(provider, model, separator = ", ") {
287
298
  return listThinkingLevelLabels(provider, model).join(separator);
288
299
  }
@@ -301,4 +312,4 @@ function formatXHighModelHint() {
301
312
  }
302
313
 
303
314
  //#endregion
304
- export { BASE_THINKING_LEVELS, XHIGH_THINKING_LEVELS, formatThinkingLevels, formatXHighModelHint, isBinaryThinkingProvider, listThinkingLevelLabels, listThinkingLevels, normalizeThinkLevel, resolveModelThinkingCapability, supportsXHighThinking };
315
+ export { BASE_THINKING_LEVELS, XHIGH_THINKING_LEVELS, formatThinkingLevels, formatXHighModelHint, isBinaryThinkingProvider, listThinkingLevelLabels, listThinkingLevels, normalizeThinkLevel, resolveModelThinkingCapability, supportsThinkingLevel, supportsXHighThinking };
@@ -1,4 +1,4 @@
1
- import fs from "node:fs";
1
+ import syncFs 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 = fs.readFileSync(`/proc/${pid}/status`, "utf8");
13
+ const status = syncFs.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 fs from "node:fs";
3
+ import syncFs 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(fs.readFileSync(filePath, "utf8")));
72
+ cachedStore = sanitizeStore(JSON.parse(syncFs.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
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
80
+ syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
81
81
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
82
- fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
83
- fs.renameSync(tmpPath, filePath);
82
+ syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
83
+ syncFs.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 fs from "node:fs";
4
+ import syncFs 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(fs.readFileSync(filePath, "utf8")));
88
+ cachedStore = sanitizeStore(JSON.parse(syncFs.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
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
96
+ syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
97
97
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
98
- fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
99
- fs.renameSync(tmpPath, filePath);
98
+ syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
99
+ syncFs.renameSync(tmpPath, filePath);
100
100
  cachedStore = store;
101
101
  loadedPath = filePath;
102
102
  }
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { resolveAgentIdFromSessionKey } from "../routing/session-key.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
6
  //#region src/tasks/task-registry.ts
@@ -41,7 +41,7 @@ function loadStore(filePath = resolveTaskRegistryPath()) {
41
41
  return cachedStore;
42
42
  }
43
43
  try {
44
- const raw = fs.readFileSync(filePath, "utf8");
44
+ const raw = syncFs.readFileSync(filePath, "utf8");
45
45
  cachedStore = sanitizeStore(JSON.parse(raw));
46
46
  } catch {
47
47
  cachedStore = defaultStore();
@@ -50,10 +50,10 @@ function loadStore(filePath = resolveTaskRegistryPath()) {
50
50
  return cachedStore;
51
51
  }
52
52
  function saveStore(store, filePath = resolveTaskRegistryPath()) {
53
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
53
+ syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
54
54
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
55
- fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
56
- fs.renameSync(tmpPath, filePath);
55
+ syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
56
+ syncFs.renameSync(tmpPath, filePath);
57
57
  cachedStore = store;
58
58
  loadedPath = filePath;
59
59
  }
@@ -1,7 +1,7 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
2
  import { normalizeTaskWorkflowGraphInput } from "./workflow-graph.js";
3
3
  import { normalizeSimpleTaskWorkflowInput } from "./workflow.js";
4
- import fs from "node:fs";
4
+ import syncFs from "node:fs";
5
5
  import path from "node:path";
6
6
  import { randomUUID } from "node:crypto";
7
7
 
@@ -154,7 +154,7 @@ function auditTaskWorkflowDefinitions(params) {
154
154
  const filePath = params?.filePath ?? resolveTaskWorkflowDefinitionsPath();
155
155
  let raw;
156
156
  try {
157
- raw = JSON.parse(fs.readFileSync(filePath, "utf8"));
157
+ raw = JSON.parse(syncFs.readFileSync(filePath, "utf8"));
158
158
  } catch (err) {
159
159
  if (err.code === "ENOENT") {
160
160
  return { findings: [] };
@@ -197,7 +197,7 @@ function loadStore(filePath = resolveTaskWorkflowDefinitionsPath()) {
197
197
  return cachedStore;
198
198
  }
199
199
  try {
200
- cachedStore = sanitizeStore(JSON.parse(fs.readFileSync(filePath, "utf8")));
200
+ cachedStore = sanitizeStore(JSON.parse(syncFs.readFileSync(filePath, "utf8")));
201
201
  } catch {
202
202
  cachedStore = defaultStore();
203
203
  }
@@ -205,10 +205,10 @@ function loadStore(filePath = resolveTaskWorkflowDefinitionsPath()) {
205
205
  return cachedStore;
206
206
  }
207
207
  function saveStore(store, filePath = resolveTaskWorkflowDefinitionsPath()) {
208
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
208
+ syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
209
209
  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
210
- fs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
211
- fs.renameSync(tmpPath, filePath);
210
+ syncFs.writeFileSync(tmpPath, `${JSON.stringify(store, null, 2)}\n`, "utf8");
211
+ syncFs.renameSync(tmpPath, filePath);
212
212
  cachedStore = store;
213
213
  loadedPath = filePath;
214
214
  }
@@ -22,9 +22,9 @@ import { resolveAgentRoute } from "../routing/resolve-route.js";
22
22
  import { recordChannelActivity } from "../infra/channel-activity.js";
23
23
  import { formatLocationText, toLocationContext } from "../channels/location.js";
24
24
  import { resolveMentionGatingWithBypass } from "../channels/mention-gating.js";
25
+ import { findModelInCatalog, loadModelCatalog, modelSupportsVision } from "../agents/model-catalog.js";
25
26
  import { isSenderAllowed, normalizeAllowFrom, normalizeDmAllowFromWithStore } from "./bot-access.js";
26
27
  import { buildGroupLabel, buildSenderLabel, buildSenderName, buildTelegramGroupFrom, buildTelegramGroupPeerId, buildTelegramParentPeer, buildTypingThreadParams, describeReplyTarget, expandTextLinks, extractTelegramLocation, hasBotMention, normalizeForwardedContext, resolveTelegramMediaPlaceholder, resolveTelegramThreadSpec } from "./bot/helpers.js";
27
- import { findModelInCatalog, loadModelCatalog, modelSupportsVision } from "../agents/model-catalog.js";
28
28
  import { withTelegramApiErrorLogging } from "./api-logging.js";
29
29
  import { createStatusReactionController } from "../channels/status-reactions.js";
30
30
  import { enforceTelegramDmAccess } from "./dm-access.js";
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/account-id.js";
2
2
  import "../routing/session-key.js";
3
- import fs from "node:fs";
3
+ import syncFs from "node:fs";
4
4
 
5
5
  //#region src/telegram/token.ts
6
6
  function resolveTelegramToken(cfg, opts = {}) {
@@ -21,7 +21,7 @@ function resolveTelegramToken(cfg, opts = {}) {
21
21
  const accountCfg = resolveAccountCfg(accountId !== DEFAULT_ACCOUNT_ID ? accountId : DEFAULT_ACCOUNT_ID);
22
22
  const accountTokenFile = accountCfg?.tokenFile?.trim();
23
23
  if (accountTokenFile) {
24
- if (!fs.existsSync(accountTokenFile)) {
24
+ if (!syncFs.existsSync(accountTokenFile)) {
25
25
  opts.logMissingFile?.(`channels.telegram.accounts.${accountId}.tokenFile not found: ${accountTokenFile}`);
26
26
  return {
27
27
  token: "",
@@ -29,7 +29,7 @@ function resolveTelegramToken(cfg, opts = {}) {
29
29
  };
30
30
  }
31
31
  try {
32
- const token = fs.readFileSync(accountTokenFile, "utf-8").trim();
32
+ const token = syncFs.readFileSync(accountTokenFile, "utf-8").trim();
33
33
  if (token) {
34
34
  return {
35
35
  token,
@@ -58,7 +58,7 @@ function resolveTelegramToken(cfg, opts = {}) {
58
58
  const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
59
59
  const tokenFile = telegramCfg?.tokenFile?.trim();
60
60
  if (tokenFile && allowEnv) {
61
- if (!fs.existsSync(tokenFile)) {
61
+ if (!syncFs.existsSync(tokenFile)) {
62
62
  opts.logMissingFile?.(`channels.telegram.tokenFile not found: ${tokenFile}`);
63
63
  return {
64
64
  token: "",
@@ -66,7 +66,7 @@ function resolveTelegramToken(cfg, opts = {}) {
66
66
  };
67
67
  }
68
68
  try {
69
- const token = fs.readFileSync(tokenFile, "utf-8").trim();
69
+ const token = syncFs.readFileSync(tokenFile, "utf-8").trim();
70
70
  if (token) {
71
71
  return {
72
72
  token,
package/dist/utils.js CHANGED
@@ -2,20 +2,20 @@ import { expandHomePrefix, resolveEffectiveHomeDir, resolveRequiredHomeDir } fro
2
2
  import { resolveOAuthDir } from "./config/paths.js";
3
3
  import { logVerbose, shouldLogVerbose } from "./globals.js";
4
4
  import { isPlainObject } from "./infra/plain-object.js";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/utils.ts
10
10
  async function ensureDir(dir) {
11
- await fs.promises.mkdir(dir, { recursive: true });
11
+ await syncFs.promises.mkdir(dir, { recursive: true });
12
12
  }
13
13
  /**
14
14
  * Check if a file or directory exists at the given path.
15
15
  */
16
16
  async function pathExists(targetPath) {
17
17
  try {
18
- await fs.promises.access(targetPath);
18
+ await syncFs.promises.access(targetPath);
19
19
  return true;
20
20
  } catch {
21
21
  return false;
@@ -129,7 +129,7 @@ function readLidReverseMapping(lid, opts) {
129
129
  for (const dir of mappingDirs) {
130
130
  const mappingPath = path.join(dir, mappingFilename);
131
131
  try {
132
- const data = fs.readFileSync(mappingPath, "utf8");
132
+ const data = syncFs.readFileSync(mappingPath, "utf8");
133
133
  const phone = JSON.parse(data);
134
134
  if (phone === null || phone === undefined) {
135
135
  continue;
@@ -250,7 +250,7 @@ function resolveConfigDir(env = process.env, homedir = os.homedir) {
250
250
  }
251
251
  const newDir = path.join(resolveRequiredHomeDir(env, homedir), ".fased");
252
252
  try {
253
- const hasNew = fs.existsSync(newDir);
253
+ const hasNew = syncFs.existsSync(newDir);
254
254
  if (hasNew) {
255
255
  return newDir;
256
256
  }
@@ -2,7 +2,7 @@ import { resolveLocalSignerBackendSocketPath, resolveLocalSignerSidecarPaths, re
2
2
  import { redactWalletDiagnosticText, walletDiagnosticErrorMessage } from "./wallet-redaction.js";
3
3
  import { parseLocalSocketSignerRequest, parseLocalSocketSignerResponseEnvelope } from "./local-socket-signer-protocol.js";
4
4
  import { requestJsonlSocket } from "../infra/jsonl-socket.js";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
  import net from "node:net";
8
8
 
@@ -34,15 +34,15 @@ function appendAuditLine(auditLog, entry, fileMode) {
34
34
  return;
35
35
  }
36
36
  try {
37
- fs.mkdirSync(path.dirname(auditLog), {
37
+ syncFs.mkdirSync(path.dirname(auditLog), {
38
38
  recursive: true,
39
39
  mode: fileMode === 432 ? 504 : 448
40
40
  });
41
- fs.appendFileSync(auditLog, `${JSON.stringify(entry)}\n`, {
41
+ syncFs.appendFileSync(auditLog, `${JSON.stringify(entry)}\n`, {
42
42
  encoding: "utf8",
43
43
  mode: 384
44
44
  });
45
- fs.chmodSync(auditLog, fileMode);
45
+ syncFs.chmodSync(auditLog, fileMode);
46
46
  } catch {}
47
47
  }
48
48
  function writeJsonLine(socket, payload) {
@@ -138,12 +138,12 @@ function handleConnection(socket, options) {
138
138
  });
139
139
  }
140
140
  function ensurePidLock(pidFile, fileMode) {
141
- fs.mkdirSync(path.dirname(pidFile), {
141
+ syncFs.mkdirSync(path.dirname(pidFile), {
142
142
  recursive: true,
143
143
  mode: 448
144
144
  });
145
- if (fs.existsSync(pidFile)) {
146
- const raw = fs.readFileSync(pidFile, "utf8").trim();
145
+ if (syncFs.existsSync(pidFile)) {
146
+ const raw = syncFs.readFileSync(pidFile, "utf8").trim();
147
147
  const pid = Number.parseInt(raw, 10);
148
148
  if (Number.isFinite(pid) && pid > 1) {
149
149
  try {
@@ -151,20 +151,20 @@ function ensurePidLock(pidFile, fileMode) {
151
151
  throw new Error(`signer broker already running (pid=${pid})`);
152
152
  } catch (err) {
153
153
  if (!(err instanceof Error) || !String(err.message).includes("already running")) {
154
- fs.rmSync(pidFile, { force: true });
154
+ syncFs.rmSync(pidFile, { force: true });
155
155
  } else {
156
156
  throw err;
157
157
  }
158
158
  }
159
159
  } else {
160
- fs.rmSync(pidFile, { force: true });
160
+ syncFs.rmSync(pidFile, { force: true });
161
161
  }
162
162
  }
163
- fs.writeFileSync(pidFile, `${process.pid}\n`, {
163
+ syncFs.writeFileSync(pidFile, `${process.pid}\n`, {
164
164
  encoding: "utf8",
165
165
  mode: fileMode
166
166
  });
167
- fs.chmodSync(pidFile, fileMode);
167
+ syncFs.chmodSync(pidFile, fileMode);
168
168
  }
169
169
  async function startLocalSocketSignerBroker(params) {
170
170
  const env = process.env;
@@ -183,11 +183,11 @@ async function startLocalSocketSignerBroker(params) {
183
183
  readOnly,
184
184
  fileMode
185
185
  };
186
- fs.mkdirSync(path.dirname(socketPath), {
186
+ syncFs.mkdirSync(path.dirname(socketPath), {
187
187
  recursive: true,
188
188
  mode: fileMode === 432 ? 504 : 448
189
189
  });
190
- fs.rmSync(socketPath, { force: true });
190
+ syncFs.rmSync(socketPath, { force: true });
191
191
  ensurePidLock(pidFile, fileMode);
192
192
  const server = net.createServer((socket) => {
193
193
  handleConnection(socket, options);
@@ -196,13 +196,13 @@ async function startLocalSocketSignerBroker(params) {
196
196
  server.once("error", reject);
197
197
  server.listen(socketPath, () => resolve());
198
198
  });
199
- fs.chmodSync(socketPath, fileMode);
199
+ syncFs.chmodSync(socketPath, fileMode);
200
200
  const close = async () => {
201
201
  await new Promise((resolve) => {
202
202
  server.close(() => resolve());
203
203
  });
204
- fs.rmSync(socketPath, { force: true });
205
- fs.rmSync(pidFile, { force: true });
204
+ syncFs.rmSync(socketPath, { force: true });
205
+ syncFs.rmSync(pidFile, { force: true });
206
206
  };
207
207
  const shutdown = () => {
208
208
  void close().finally(() => process.exit(0));
@@ -3,7 +3,7 @@ import { WalletProviderError } from "../wallet-provider-adapter.js";
3
3
  import { buildCreateAssociatedTokenAccountIdempotentInstruction, buildTransferCheckedInstruction, deriveAssociatedTokenAddress, toTransactionInstruction } from "../solana-spl-transfer.js";
4
4
  import { walletDiagnosticErrorString } from "../wallet-redaction.js";
5
5
  import { createRequire } from "node:module";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import { createDecipheriv, randomUUID, scryptSync } from "node:crypto";
8
8
 
9
9
  //#region src/wallet/providers/embedded-keystore-adapter.ts
@@ -118,7 +118,7 @@ var EmbeddedKeystoreAdapter = class {
118
118
  details: "missing embedded keystore config (FASED_WALLET_KEYSTORE_PATH, FASED_WALLET_PASSPHRASE, FASED_WALLET_[EMBEDDED_KEYSTORE_]RPC_URL)"
119
119
  };
120
120
  }
121
- if (!fs.existsSync(this.keystorePath)) {
121
+ if (!syncFs.existsSync(this.keystorePath)) {
122
122
  return {
123
123
  ok: false,
124
124
  provider: this.id,
@@ -128,7 +128,7 @@ var EmbeddedKeystoreAdapter = class {
128
128
  };
129
129
  }
130
130
  try {
131
- const raw = await fs.promises.readFile(this.keystorePath, "utf8");
131
+ const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
132
132
  if (detectKeystoreType(raw) !== "solana-envelope") {
133
133
  throw new Error("keystore file is not a Solana keystore envelope");
134
134
  }
@@ -165,7 +165,7 @@ var EmbeddedKeystoreAdapter = class {
165
165
  return result;
166
166
  }
167
167
  try {
168
- const raw = await fs.promises.readFile(this.keystorePath, "utf8");
168
+ const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
169
169
  const type = detectKeystoreType(raw);
170
170
  if (type === "solana-envelope") {
171
171
  if (this.supportsChain("solana")) {
@@ -375,7 +375,7 @@ var EmbeddedKeystoreAdapter = class {
375
375
  });
376
376
  }
377
377
  this.solanaKeypairPromise ??= (async () => {
378
- const raw = await fs.promises.readFile(this.keystorePath, "utf8");
378
+ const raw = await syncFs.promises.readFile(this.keystorePath, "utf8");
379
379
  const envelope = parseSolanaKeystoreEnvelope(raw);
380
380
  if (!envelope) {
381
381
  throw new WalletProviderError({
@@ -4,7 +4,7 @@ import { WalletProviderError } from "../wallet-provider-adapter.js";
4
4
  import { buildCreateAssociatedTokenAccountIdempotentInstruction, buildTransferCheckedInstruction, deriveAssociatedTokenAddress } from "../solana-spl-transfer.js";
5
5
  import { redactWalletDiagnosticText, walletDiagnosticErrorMessage, walletDiagnosticErrorString } from "../wallet-redaction.js";
6
6
  import { parseLocalSocketSignerResponseEnvelope, validateLocalSocketSignerResult } from "../local-socket-signer-protocol.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
  import path from "node:path";
9
9
  import net from "node:net";
10
10
 
@@ -29,7 +29,7 @@ function signerTimeoutFor(payload) {
29
29
  function assertSecureLocalSignerSocket(socketPath) {
30
30
  let stat;
31
31
  try {
32
- stat = fs.lstatSync(socketPath);
32
+ stat = syncFs.lstatSync(socketPath);
33
33
  } catch (err) {
34
34
  throw new WalletProviderError({
35
35
  code: "wallet_provider_unavailable",
@@ -1,5 +1,5 @@
1
1
  import { ensureWalletStateDir } from "./wallet-runtime-config.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { createHash, createPublicKey, randomBytes, timingSafeEqual, verify } from "node:crypto";
5
5
 
@@ -163,7 +163,7 @@ function normalizeState(input) {
163
163
  }
164
164
  function loadState(env = process.env) {
165
165
  const statePath = resolveStatePath(env);
166
- if (!fs.existsSync(statePath)) {
166
+ if (!syncFs.existsSync(statePath)) {
167
167
  return {
168
168
  version: 2,
169
169
  passkeys: [],
@@ -172,7 +172,7 @@ function loadState(env = process.env) {
172
172
  };
173
173
  }
174
174
  try {
175
- const raw = fs.readFileSync(statePath, "utf8");
175
+ const raw = syncFs.readFileSync(statePath, "utf8");
176
176
  return normalizeState(JSON.parse(raw));
177
177
  } catch {
178
178
  return {
@@ -185,12 +185,12 @@ function loadState(env = process.env) {
185
185
  }
186
186
  function saveState(state, env = process.env) {
187
187
  const statePath = resolveStatePath(env);
188
- fs.writeFileSync(statePath, `${JSON.stringify(state, null, 2)}\n`, {
188
+ syncFs.writeFileSync(statePath, `${JSON.stringify(state, null, 2)}\n`, {
189
189
  encoding: "utf8",
190
190
  mode: 384
191
191
  });
192
192
  try {
193
- fs.chmodSync(statePath, 384);
193
+ syncFs.chmodSync(statePath, 384);
194
194
  } catch {}
195
195
  }
196
196
  function pruneState(state) {