@fased/fased 0.1.48 → 0.1.49

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 (330) hide show
  1. package/dist/acp/client.js +2 -2
  2. package/dist/acp/secret-file.js +2 -2
  3. package/dist/agents/agent-scope.js +2 -2
  4. package/dist/agents/apply-patch.js +8 -8
  5. package/dist/agents/auth-health.js +11 -5
  6. package/dist/agents/auth-profiles/paths.js +2 -2
  7. package/dist/agents/auth-profiles/store.js +2 -2
  8. package/dist/agents/bash-tools.shared.js +2 -2
  9. package/dist/agents/cli-credentials.js +4 -4
  10. package/dist/agents/docs-path.js +3 -3
  11. package/dist/agents/embedded-pi-mcp.js +4 -4
  12. package/dist/agents/identity-avatar.js +3 -3
  13. package/dist/agents/identity-file.js +2 -2
  14. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  15. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  16. package/dist/agents/pi-model-discovery.js +6 -6
  17. package/dist/agents/pi-project-settings.js +3 -3
  18. package/dist/agents/sandbox/fs-bridge.js +2 -2
  19. package/dist/agents/session-dirs.js +4 -4
  20. package/dist/agents/session-write-lock.js +13 -13
  21. package/dist/agents/shell-utils.js +5 -5
  22. package/dist/agents/skills/bundled-dir.js +4 -4
  23. package/dist/agents/skills/local-loader.js +6 -6
  24. package/dist/agents/skills/plugin-skills.js +2 -2
  25. package/dist/agents/skills/workspace.js +13 -13
  26. package/dist/agents/skills-install-download.js +7 -7
  27. package/dist/agents/skills-install-plan.js +2 -2
  28. package/dist/agents/skills-install.js +2 -2
  29. package/dist/agents/skills-status.js +2 -2
  30. package/dist/agents/subagent-depth.js +2 -2
  31. package/dist/agents/system-prompt-params.js +2 -2
  32. package/dist/agents/workspace.js +22 -22
  33. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  34. package/dist/auto-reply/reply/agent-runner.js +2 -2
  35. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  36. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  37. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  38. package/dist/auto-reply/reply/session.js +3 -3
  39. package/dist/auto-reply/skill-commands.js +3 -3
  40. package/dist/auto-reply/status.js +6 -6
  41. package/dist/brand.js +1 -1
  42. package/dist/browser/chrome.executables.js +3 -3
  43. package/dist/browser/chrome.js +3 -3
  44. package/dist/browser/chrome.profile-decoration.js +6 -6
  45. package/dist/browser/profiles-service.js +2 -2
  46. package/dist/browser/server-context.js +2 -2
  47. package/dist/browser/trash.js +4 -4
  48. package/dist/build-info.json +3 -3
  49. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  50. package/dist/canvas-host/server.js +4 -4
  51. package/dist/capabilities/catalog.js +3 -3
  52. package/dist/channels/plugins/catalog.js +3 -3
  53. package/dist/cli/browser-cli-extension.js +6 -6
  54. package/dist/cli/command-format.js +2 -2
  55. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  56. package/dist/cli/dns-cli.js +9 -9
  57. package/dist/cli/gateway-cli/dev.js +5 -5
  58. package/dist/cli/gateway-cli/run.js +2 -2
  59. package/dist/cli/hooks-cli.js +5 -5
  60. package/dist/cli/memory-cli.js +7 -7
  61. package/dist/cli/nodes-media-utils.js +2 -2
  62. package/dist/cli/plugins-cli.js +2 -2
  63. package/dist/cli/secrets-cli.js +3 -3
  64. package/dist/cli/windows-argv.js +2 -2
  65. package/dist/commands/dashboard-link.js +3 -3
  66. package/dist/commands/doctor-install.js +5 -5
  67. package/dist/commands/doctor-memory-search.js +2 -2
  68. package/dist/commands/doctor-platform-notes.js +2 -2
  69. package/dist/commands/doctor-sandbox.js +2 -2
  70. package/dist/commands/doctor-state-integrity.js +48 -25
  71. package/dist/commands/doctor-workspace.js +3 -3
  72. package/dist/commands/doctor.js +3 -3
  73. package/dist/commands/managed-up.js +2 -2
  74. package/dist/commands/onboard-auth.credentials.js +3 -3
  75. package/dist/commands/onboarding/plugin-install.js +2 -2
  76. package/dist/commands/sessions-cleanup.js +2 -2
  77. package/dist/commands/signal-install.js +6 -6
  78. package/dist/commands/status-all/channels.js +2 -2
  79. package/dist/commands/wallet.js +47 -47
  80. package/dist/config/cache-utils.js +2 -2
  81. package/dist/config/includes.js +5 -5
  82. package/dist/config/io.js +2 -2
  83. package/dist/config/paths.js +3 -3
  84. package/dist/config/sat-runtime-ids.js +3 -3
  85. package/dist/config/sessions/disk-budget.js +6 -6
  86. package/dist/config/sessions/paths.js +2 -2
  87. package/dist/config/sessions/store.js +17 -17
  88. package/dist/config/sessions/transcript.js +32 -18
  89. package/dist/config/sessions.js +2 -2
  90. package/dist/config/talk.js +2 -2
  91. package/dist/control-ui/assets/{app-CHqTx3P_.js → app-6iCry787.js} +1274 -1259
  92. package/dist/control-ui/assets/{chat-model-ref-BbrdMKjQ.js → chat-model-ref-C6CFR-GR.js} +2 -2
  93. package/dist/control-ui/assets/{config-FFZLTSLS.js → config-CU5Zi8Dh.js} +2 -2
  94. package/dist/control-ui/assets/{index-CFHfNlLv.js → index-CNFgocD9.js} +3 -3
  95. package/dist/control-ui/assets/{mining-D_VAMFMY.js → mining-BdhMn18r.js} +3 -3
  96. package/dist/control-ui/assets/{providers-DqFL6WrJ.js → providers-WTJ1kMKy.js} +14 -3
  97. package/dist/control-ui/index.html +1 -1
  98. package/dist/cron/service/store.js +2 -2
  99. package/dist/cron/store.js +6 -6
  100. package/dist/daemon/systemd-system.js +5 -5
  101. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  102. package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
  103. package/dist/gateway/control-ui-boot-check.js +6 -6
  104. package/dist/gateway/control-ui-login.js +7 -7
  105. package/dist/gateway/control-ui.js +9 -9
  106. package/dist/gateway/hooks-mapping.js +4 -4
  107. package/dist/gateway/protocol/schema/agents-models-skills.js +1 -0
  108. package/dist/gateway/protocol/schema/frames.js +5 -0
  109. package/dist/gateway/protocol/schema/snapshot.js +1 -0
  110. package/dist/gateway/server/ws-connection/message-handler.js +2 -1
  111. package/dist/gateway/server-discovery.js +2 -2
  112. package/dist/gateway/server-http.js +5 -4
  113. package/dist/gateway/server-methods/chat.js +7 -32
  114. package/dist/gateway/server-methods/sessions.js +6 -6
  115. package/dist/gateway/server-methods/usage.js +2 -2
  116. package/dist/gateway/server.impl.js +3 -3
  117. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  118. package/dist/gateway/session-utils.fs.js +24 -24
  119. package/dist/gateway/session-utils.js +6 -6
  120. package/dist/hooks/bundled-dir.js +4 -4
  121. package/dist/hooks/gmail-setup-utils.js +6 -6
  122. package/dist/hooks/import-url.js +2 -2
  123. package/dist/hooks/loader.js +4 -4
  124. package/dist/hooks/workspace.js +7 -7
  125. package/dist/infra/archive.js +17 -17
  126. package/dist/infra/boundary-file-read.js +2 -2
  127. package/dist/infra/boundary-path.js +15 -15
  128. package/dist/infra/brew.js +2 -2
  129. package/dist/infra/control-ui-assets.js +14 -14
  130. package/dist/infra/device-auth-store.js +8 -8
  131. package/dist/infra/device-identity.js +8 -8
  132. package/dist/infra/dotenv.js +2 -2
  133. package/dist/infra/exec-approvals.js +8 -8
  134. package/dist/infra/exec-command-resolution.js +4 -4
  135. package/dist/infra/exec-safe-bin-trust.js +2 -2
  136. package/dist/infra/fased-root.js +5 -5
  137. package/dist/infra/fs-safe.js +14 -14
  138. package/dist/infra/gateway-lock.js +11 -11
  139. package/dist/infra/git-commit.js +5 -5
  140. package/dist/infra/git-root.js +4 -4
  141. package/dist/infra/hosted-runtime-artifact.js +3 -3
  142. package/dist/infra/is-main.js +2 -2
  143. package/dist/infra/json-file.js +7 -7
  144. package/dist/infra/outbound/delivery-queue.js +16 -16
  145. package/dist/infra/path-env.js +3 -3
  146. package/dist/infra/ports-lsof.js +4 -4
  147. package/dist/infra/provider-usage.auth.js +3 -3
  148. package/dist/infra/safe-open-sync.js +2 -2
  149. package/dist/infra/session-cost-usage.js +9 -9
  150. package/dist/infra/shell-env.js +2 -2
  151. package/dist/infra/state-migrations.fs.js +6 -6
  152. package/dist/infra/state-migrations.js +23 -23
  153. package/dist/infra/system-presence.js +4 -2
  154. package/dist/infra/tmp-fased-dir.js +6 -6
  155. package/dist/infra/widearea-dns.js +3 -3
  156. package/dist/infra/wsl.js +2 -2
  157. package/dist/light-update-status.js +1 -1
  158. package/dist/line/accounts.js +2 -2
  159. package/dist/line/download.js +2 -2
  160. package/dist/logging/config.js +3 -3
  161. package/dist/logging/logger.js +7 -7
  162. package/dist/managed/federation.js +3 -3
  163. package/dist/managed/tunnel.js +3 -3
  164. package/dist/media/store.js +13 -13
  165. package/dist/media-understanding/runner.js +3 -3
  166. package/dist/memory/embeddings.js +2 -2
  167. package/dist/memory/internal.js +10 -10
  168. package/dist/memory/inventory.js +19 -0
  169. package/dist/memory/manager-sync-ops.js +7 -7
  170. package/dist/memory/repair-executor.js +17 -17
  171. package/dist/node-host/invoke-system-run-plan.js +8 -8
  172. package/dist/node-host/invoke.js +2 -2
  173. package/dist/node-host/runner.js +3 -3
  174. package/dist/pairing/pairing-store.js +3 -3
  175. package/dist/plugin-sdk/{accounts-DI5226U8.js → accounts-B5fY9hZy.js} +1 -1
  176. package/dist/plugin-sdk/{actions-CEj4gOU2.js → actions-D-9SsSEy.js} +2 -2
  177. package/dist/plugin-sdk/{active-listener-Ss4UKXZb.js → active-listener-BH7rDR47.js} +1 -1
  178. package/dist/plugin-sdk/{audio-preflight-Cu4alGjb.js → audio-preflight-4faayz5S.js} +26 -26
  179. package/dist/plugin-sdk/{audit-BTskqjJ_.js → audit-BQfsboqd.js} +1 -1
  180. package/dist/plugin-sdk/{channel-access-B1KciKmw.js → channel-access-CDZ-cJPq.js} +1 -1
  181. package/dist/plugin-sdk/{channel-access-configure-Y91FLOJc.js → channel-access-configure-DlpuhlH6.js} +1 -1
  182. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  183. package/dist/plugin-sdk/{chunk-CSUjIQSx.js → chunk-CZuCyS7k.js} +1 -1
  184. package/dist/plugin-sdk/{chunk-items-Q8HhMuSe.js → chunk-items-Cyc4Kl6A.js} +1 -1
  185. package/dist/plugin-sdk/command-status.js +26 -26
  186. package/dist/plugin-sdk/{commands-registry-DJ0pfCcY.js → commands-registry-COIbIjGO.js} +2 -2
  187. package/dist/plugin-sdk/{common-Cjm8psuW.js → common-LMHJe8KW.js} +1 -1
  188. package/dist/plugin-sdk/{config-DutIeFge.js → config-ZMbTT0kM.js} +1 -1
  189. package/dist/plugin-sdk/{config-schema-Cg6PYSHR.js → config-schema-Cku0a8Tm.js} +75 -60
  190. package/dist/plugin-sdk/discord.d.ts +1 -1
  191. package/dist/plugin-sdk/discord.js +19 -19
  192. package/dist/plugin-sdk/{handle-action-Dp2741iu.js → handle-action-C8ZZfORB.js} +13 -13
  193. package/dist/plugin-sdk/{helpers-BCZ9d3fl.js → helpers-vfzH9tBn.js} +1 -1
  194. package/dist/plugin-sdk/{image-ops-B-QR_M9Z.js → image-ops-BnOmQA5d.js} +1 -1
  195. package/dist/plugin-sdk/index.d.ts +13 -13
  196. package/dist/plugin-sdk/index.js +28 -28
  197. package/dist/plugin-sdk/json-store.js +6 -6
  198. package/dist/plugin-sdk/{login-BFvQxf9o.js → login-C73Wpiw8.js} +3 -3
  199. package/dist/plugin-sdk/{login-qr-CERTe_nD.js → login-qr-CRKHA7i8.js} +3 -3
  200. package/dist/plugin-sdk/{manager-Dhq3SXpO.js → manager-CHYhpKHn.js} +2 -2
  201. package/dist/plugin-sdk/{markdown-tables-B1Tx7c77.js → markdown-tables-B84dPWNG.js} +1 -1
  202. package/dist/plugin-sdk/{media-BwsqooWC.js → media-4daDcNER.js} +2 -2
  203. package/dist/plugin-sdk/{monitor-CJiacqtR.js → monitor-CChc6bQV.js} +30 -30
  204. package/dist/plugin-sdk/{monitor-BYzN5Qr4.js → monitor-DJhU-J5u.js} +31 -31
  205. package/dist/plugin-sdk/{openresponses-http-VLSSqCZZ.js → openresponses-http-Dvyczr35.js} +26 -26
  206. package/dist/plugin-sdk/{optional-runtime-dependency-BEBP4VFJ.js → optional-runtime-dependency-BFpqaCzp.js} +1 -1
  207. package/dist/plugin-sdk/{outbound-BqWgaC5M.js → outbound-C1xBxfNb.js} +6 -6
  208. package/dist/plugin-sdk/{outbound-attachment-L1q40kiu.js → outbound-attachment-DvcxPP7b.js} +2 -2
  209. package/dist/plugin-sdk/{pairing-message-CZBahREg.js → pairing-message-DpYT614h.js} +1 -1
  210. package/dist/plugin-sdk/{pairing-store-D7I1Qmiw.js → pairing-store-CprpGco9.js} +2 -2
  211. package/dist/plugin-sdk/{pi-model-discovery-C5klknQZ.js → pi-model-discovery-BQ6fFRBA.js} +1 -1
  212. package/dist/plugin-sdk/{pi-model-discovery-runtime-DIEMhCZ5.js → pi-model-discovery-runtime-BF_89lVj.js} +2 -2
  213. package/dist/plugin-sdk/{pw-ai-Bv-q25gY.js → pw-ai-xgpIbHOr.js} +3 -3
  214. package/dist/plugin-sdk/{replies-Bd9ktEkq.js → replies-AzJ6U6Ut.js} +2 -2
  215. package/dist/plugin-sdk/{resolve-outbound-target-CCIyBb5H.js → resolve-outbound-target-COo_TR7B.js} +1 -1
  216. package/dist/plugin-sdk/{resolve-route-B7vZ3nKp.js → resolve-route-CZFzHOIe.js} +1 -1
  217. package/dist/plugin-sdk/{retry-policy-ChC3G4lv.js → retry-policy-BSdqqXsI.js} +1 -1
  218. package/dist/plugin-sdk/{runtime-BLknHFGz.js → runtime-CeoGffDi.js} +31 -18
  219. package/dist/plugin-sdk/{runtime-dependency-C5rJfC0u.js → runtime-dependency-Cvbs0GXf.js} +2 -2
  220. package/dist/plugin-sdk/sat-runtime.js +5 -5
  221. package/dist/plugin-sdk/{send-Bd3Z-jAd.js → send-B_-UtG9F.js} +6 -6
  222. package/dist/plugin-sdk/{send-Bmtz9ICm.js → send-C0Q1u7N1.js} +8 -8
  223. package/dist/plugin-sdk/{send-mkyZzhCO.js → send-CGE7OgsA.js} +5 -5
  224. package/dist/plugin-sdk/{send-CUGEhiUa.js → send-DCxAv7bV.js} +6 -6
  225. package/dist/plugin-sdk/{send-CMoWt-EX.js → send-DVpCBUuL.js} +7 -7
  226. package/dist/plugin-sdk/{session-D2zmelOL.js → session-ETYBbhLn.js} +2 -2
  227. package/dist/plugin-sdk/{skill-commands-BybEjJ1_.js → skill-commands-BQL6TBIv.js} +2 -2
  228. package/dist/plugin-sdk/{slack-DogXvGG3.js → slack-Bs_4uivd.js} +38 -38
  229. package/dist/plugin-sdk/{slack-actions-uXb55QWW.js → slack-actions-CBPZkfTS.js} +11 -11
  230. package/dist/plugin-sdk/slack.d.ts +1 -1
  231. package/dist/plugin-sdk/slack.js +9 -9
  232. package/dist/plugin-sdk/{sticker-cache-BuPw7fTf.js → sticker-cache-BBZMp-oQ.js} +3 -3
  233. package/dist/plugin-sdk/{tables-CVDOT5dX.js → tables-B-G7Bb0l.js} +1 -1
  234. package/dist/plugin-sdk/{targets-DskkhJAp.js → targets-D8UaoWHd.js} +1 -1
  235. package/dist/plugin-sdk/{telegram-actions-_KQPbjpI.js → telegram-actions-BARLx9zc.js} +29 -29
  236. package/dist/plugin-sdk/telegram.d.ts +1 -1
  237. package/dist/plugin-sdk/telegram.js +8 -8
  238. package/dist/plugin-sdk/{thread-bindings.lifecycle-CrhQXYEU.js → thread-bindings.lifecycle-DwYKCLLq.js} +3 -3
  239. package/dist/plugin-sdk/{thread-bindings.state-ssxdG7xV.js → thread-bindings.state-BNWfHA0f.js} +2 -2
  240. package/dist/plugin-sdk/{wallet-status-CQI89c_6.js → wallet-status-Coekn_SJ.js} +10 -3
  241. package/dist/plugin-sdk/{web-C8DwA0eO.js → web-BwolzGVF.js} +31 -31
  242. package/dist/plugin-sdk/{whatsapp-actions-DfvM-mlZ.js → whatsapp-actions-CSvf6eev.js} +13 -13
  243. package/dist/plugin-sdk/{whatsapp-heartbeat-DyJasLDB.js → whatsapp-heartbeat-Bw7OtTe6.js} +2 -2
  244. package/dist/plugin-sdk/whatsapp.d.ts +10 -10
  245. package/dist/plugin-sdk/whatsapp.js +12 -12
  246. package/dist/plugin-sdk/{wsl-JwmI6Zu8.js → wsl-By1Mc-oS.js} +3 -3
  247. package/dist/plugin-sdk/{zod-schema.providers-core-BE_5DNhj.d.ts → zod-schema.providers-core-TI6sL-6B.d.ts} +82 -82
  248. package/dist/plugins/bundled-dir.js +3 -3
  249. package/dist/plugins/discovery.js +11 -11
  250. package/dist/plugins/loader.js +13 -13
  251. package/dist/plugins/manifest-registry.js +2 -2
  252. package/dist/plugins/manifest.js +4 -4
  253. package/dist/plugins/path-safety.js +3 -3
  254. package/dist/plugins/status-cache.js +9 -9
  255. package/dist/plugins/update.js +3 -3
  256. package/dist/plugins/web-search-install-catalog.js +3 -3
  257. package/dist/providers/registry.js +1 -1
  258. package/dist/secrets/apply.js +16 -16
  259. package/dist/secrets/audit.js +11 -11
  260. package/dist/secrets/shared.js +9 -9
  261. package/dist/security/scan-paths.js +2 -2
  262. package/dist/shared/config-eval.js +2 -2
  263. package/dist/shared/pid-alive.js +2 -2
  264. package/dist/tasks/standing-orders.js +5 -5
  265. package/dist/tasks/task-flow-registry.js +5 -5
  266. package/dist/tasks/task-registry.js +5 -5
  267. package/dist/tasks/workflow-definitions.js +6 -6
  268. package/dist/telegram/token.js +5 -5
  269. package/dist/utils.js +5 -5
  270. package/dist/version.js +11 -1
  271. package/dist/wallet/local-socket-signer-broker.js +16 -16
  272. package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
  273. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
  274. package/dist/wallet/wallet-approval-auth.js +5 -5
  275. package/dist/wallet/wallet-audit-log.js +5 -5
  276. package/dist/wallet/wallet-custody.js +21 -21
  277. package/dist/wallet/wallet-inbound-events.js +5 -5
  278. package/dist/wallet/wallet-observability.js +5 -5
  279. package/dist/wallet/wallet-policy.js +9 -9
  280. package/dist/wallet/wallet-provider-registry.js +7 -7
  281. package/dist/wallet/wallet-runtime-config.js +3 -3
  282. package/dist/wallet/wallet-secrets-store.js +22 -22
  283. package/dist/wallet/wallet-send-approvals.js +5 -5
  284. package/dist/wallet/wallet-settlement-links.js +5 -5
  285. package/dist/web/accounts.js +3 -3
  286. package/dist/web/auth-store.js +18 -18
  287. package/dist/web/session.js +4 -4
  288. package/dist/wizard/host-security-capability.js +2 -2
  289. package/dist/wizard/onboarding.host-security.js +7 -7
  290. package/dist/wizard/onboarding.js +7 -7
  291. package/dist/wizard/onboarding.wallet.js +44 -44
  292. package/extensions/acpx/package.json +1 -1
  293. package/extensions/bluebubbles/package.json +1 -1
  294. package/extensions/copilot-proxy/package.json +1 -1
  295. package/extensions/diagnostics-otel/package.json +1 -1
  296. package/extensions/fased-federation/package.json +1 -1
  297. package/extensions/google-gemini-cli-auth/package.json +1 -1
  298. package/extensions/imessage/package.json +1 -1
  299. package/extensions/irc/package.json +1 -1
  300. package/extensions/line/package.json +1 -1
  301. package/extensions/llm-task/package.json +1 -1
  302. package/extensions/lobster/package.json +1 -1
  303. package/extensions/matrix/CHANGELOG.md +6 -0
  304. package/extensions/matrix/package.json +1 -1
  305. package/extensions/mattermost/package.json +1 -1
  306. package/extensions/memory-core/package.json +2 -2
  307. package/extensions/memory-lancedb/package.json +1 -1
  308. package/extensions/minimax-portal-auth/package.json +1 -1
  309. package/extensions/msteams/CHANGELOG.md +6 -0
  310. package/extensions/msteams/package.json +1 -1
  311. package/extensions/nextcloud-talk/package.json +1 -1
  312. package/extensions/nostr/CHANGELOG.md +6 -0
  313. package/extensions/nostr/package.json +1 -1
  314. package/extensions/open-prose/package.json +1 -1
  315. package/extensions/sat-mining/index.ts +121 -12
  316. package/extensions/sat-mining/package.json +1 -1
  317. package/extensions/sat-mining/src/runtime.ts +9 -3
  318. package/extensions/signal/package.json +1 -1
  319. package/extensions/synology-chat/package.json +1 -1
  320. package/extensions/tlon/package.json +1 -1
  321. package/extensions/twitch/CHANGELOG.md +6 -0
  322. package/extensions/twitch/package.json +1 -1
  323. package/extensions/voice-call/CHANGELOG.md +6 -0
  324. package/extensions/voice-call/package.json +1 -1
  325. package/extensions/zalo/CHANGELOG.md +6 -0
  326. package/extensions/zalo/package.json +1 -1
  327. package/extensions/zalouser/CHANGELOG.md +6 -0
  328. package/extensions/zalouser/package.json +1 -1
  329. package/package.json +1 -1
  330. package/scripts/start-managed.sh +21 -1
@@ -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/cli/windows-argv.ts
@@ -33,7 +33,7 @@ function normalizeWindowsArgv(argv) {
33
33
  return false;
34
34
  }
35
35
  const lower = normalized.toLowerCase();
36
- return lower === execPathLower || path.basename(lower) === execBase || lower.endsWith("\\node.exe") || lower.endsWith("/node.exe") || lower.includes("node.exe") || path.basename(lower) === "node.exe" && fs.existsSync(normalized);
36
+ return lower === execPathLower || path.basename(lower) === execBase || lower.endsWith("\\node.exe") || lower.endsWith("/node.exe") || lower.includes("node.exe") || path.basename(lower) === "node.exe" && syncFs.existsSync(normalized);
37
37
  };
38
38
  const next = [...argv];
39
39
  for (let i = 1; i <= 3 && i < next.length;) {
@@ -4,7 +4,7 @@ import { parseDurationMs } from "../cli/parse-duration.js";
4
4
  import { readConfigFileSnapshot } from "../config/io.js";
5
5
  import "../config/config.js";
6
6
  import { CONTROL_UI_LOGIN_DEFAULT_GRANT_TTL_MS, createLoginGrant, normalizePublicHost } from "../gateway/control-ui-login.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
  import path from "node:path";
9
9
 
10
10
  //#region src/commands/dashboard-link.ts
@@ -12,10 +12,10 @@ const AGENT_DOMAIN_SUFFIX = ".agents.fased.app";
12
12
  function readStateGatewayToken(env = process.env) {
13
13
  try {
14
14
  const filePath = path.join(resolveStateDir(env), "gateway-secret");
15
- if (!fs.existsSync(filePath)) {
15
+ if (!syncFs.existsSync(filePath)) {
16
16
  return "";
17
17
  }
18
- return fs.readFileSync(filePath, "utf8").trim();
18
+ return syncFs.readFileSync(filePath, "utf8").trim();
19
19
  } catch {
20
20
  return "";
21
21
  }
@@ -1,5 +1,5 @@
1
1
  import { note } from "../terminal/note.js";
2
- import fs from "node:fs";
2
+ import syncFs from "node:fs";
3
3
  import path from "node:path";
4
4
 
5
5
  //#region src/commands/doctor-install.ts
@@ -8,7 +8,7 @@ function noteSourceInstallIssues(root) {
8
8
  return;
9
9
  }
10
10
  const workspaceMarker = path.join(root, "pnpm-workspace.yaml");
11
- if (!fs.existsSync(workspaceMarker)) {
11
+ if (!syncFs.existsSync(workspaceMarker)) {
12
12
  return;
13
13
  }
14
14
  const warnings = [];
@@ -16,13 +16,13 @@ function noteSourceInstallIssues(root) {
16
16
  const pnpmStore = path.join(nodeModules, ".pnpm");
17
17
  const tsxBin = path.join(nodeModules, ".bin", "tsx");
18
18
  const srcEntry = path.join(root, "src", "entry.ts");
19
- if (fs.existsSync(nodeModules) && !fs.existsSync(pnpmStore)) {
19
+ if (syncFs.existsSync(nodeModules) && !syncFs.existsSync(pnpmStore)) {
20
20
  warnings.push("- node_modules was not installed by pnpm (missing node_modules/.pnpm). Run: pnpm install");
21
21
  }
22
- if (fs.existsSync(path.join(root, "package-lock.json"))) {
22
+ if (syncFs.existsSync(path.join(root, "package-lock.json"))) {
23
23
  warnings.push("- package-lock.json present in a pnpm workspace. If you ran npm install, remove it and reinstall with pnpm.");
24
24
  }
25
- if (fs.existsSync(srcEntry) && !fs.existsSync(tsxBin)) {
25
+ if (syncFs.existsSync(srcEntry) && !syncFs.existsSync(tsxBin)) {
26
26
  warnings.push("- tsx binary is missing for source runs. Run: pnpm install");
27
27
  }
28
28
  if (warnings.length > 0) {
@@ -5,7 +5,7 @@ import { resolveApiKeyForProvider } from "../agents/model-auth.js";
5
5
  import { resolveMemoryBackendConfig } from "../memory/backend-config.js";
6
6
  import { resolveMemorySearchConfig } from "../agents/memory-search.js";
7
7
  import { note } from "../terminal/note.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
 
10
10
  //#region src/commands/doctor-memory-search.ts
11
11
  /**
@@ -126,7 +126,7 @@ function hasLocalEmbeddings(local) {
126
126
  }
127
127
  const resolved = resolveUserPath(modelPath);
128
128
  try {
129
- return fs.statSync(resolved).isFile();
129
+ return syncFs.statSync(resolved).isFile();
130
130
  } catch {
131
131
  return false;
132
132
  }
@@ -1,6 +1,6 @@
1
1
  import { shortenHomePath } from "../utils.js";
2
2
  import { note } from "../terminal/note.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 { promisify } from "node:util";
@@ -17,7 +17,7 @@ async function noteMacLaunchAgentOverrides() {
17
17
  }
18
18
  const home = resolveHomeDir();
19
19
  const markerCandidates = [path.join(home, ".fased", "disable-launchagent")];
20
- const markerPath = markerCandidates.find((candidate) => fs.existsSync(candidate));
20
+ const markerPath = markerCandidates.find((candidate) => syncFs.existsSync(candidate));
21
21
  if (!markerPath) {
22
22
  return;
23
23
  }
@@ -3,7 +3,7 @@ import { DEFAULT_SANDBOX_BROWSER_IMAGE, DEFAULT_SANDBOX_COMMON_IMAGE, DEFAULT_SA
3
3
  import { resolveSandboxScope } from "../agents/sandbox/config.js";
4
4
  import "../agents/sandbox.js";
5
5
  import { note } from "../terminal/note.js";
6
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
7
7
  import path from "node:path";
8
8
 
9
9
  //#region src/commands/doctor-sandbox.ts
@@ -18,7 +18,7 @@ function resolveSandboxScript(scriptRel) {
18
18
  }
19
19
  for (const root of candidates) {
20
20
  const scriptPath = path.join(root, scriptRel);
21
- if (fs.existsSync(scriptPath)) {
21
+ if (syncFs.existsSync(scriptPath)) {
22
22
  return {
23
23
  scriptPath,
24
24
  cwd: root
@@ -8,30 +8,31 @@ import { formatSessionArchiveTimestamp, isPrimarySessionTranscriptFileName } fro
8
8
  import { resolveMainSessionKey } from "../config/sessions/main-session.js";
9
9
  import { resolveSessionFilePath, resolveSessionFilePathOptions, resolveSessionTranscriptsDirForAgent, resolveStorePath } from "../config/sessions/paths.js";
10
10
  import { loadSessionStore } from "../config/sessions/store.js";
11
+ import { ensureSessionTranscriptHeader } from "../config/sessions/transcript.js";
11
12
  import "../config/sessions.js";
12
13
  import { note } from "../terminal/note.js";
13
- import fs from "node:fs";
14
+ import syncFs from "node:fs";
14
15
  import os from "node:os";
15
16
  import path from "node:path";
16
17
 
17
18
  //#region src/commands/doctor-state-integrity.ts
18
19
  function existsDir(dir) {
19
20
  try {
20
- return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
21
+ return syncFs.existsSync(dir) && syncFs.statSync(dir).isDirectory();
21
22
  } catch {
22
23
  return false;
23
24
  }
24
25
  }
25
26
  function existsFile(filePath) {
26
27
  try {
27
- return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
28
+ return syncFs.existsSync(filePath) && syncFs.statSync(filePath).isFile();
28
29
  } catch {
29
30
  return false;
30
31
  }
31
32
  }
32
33
  function canWriteDir(dir) {
33
34
  try {
34
- fs.accessSync(dir, fs.constants.W_OK);
35
+ syncFs.accessSync(dir, syncFs.constants.W_OK);
35
36
  return true;
36
37
  } catch {
37
38
  return false;
@@ -39,7 +40,7 @@ function canWriteDir(dir) {
39
40
  }
40
41
  function ensureDir(dir) {
41
42
  try {
42
- fs.mkdirSync(dir, { recursive: true });
43
+ syncFs.mkdirSync(dir, { recursive: true });
43
44
  return { ok: true };
44
45
  } catch (err) {
45
46
  return {
@@ -52,7 +53,7 @@ function dirPermissionHint(dir) {
52
53
  const uid = typeof process.getuid === "function" ? process.getuid() : null;
53
54
  const gid = typeof process.getgid === "function" ? process.getgid() : null;
54
55
  try {
55
- const stat = fs.statSync(dir);
56
+ const stat = syncFs.statSync(dir);
56
57
  if (uid !== null && stat.uid !== uid) {
57
58
  return `Owner mismatch (uid ${stat.uid}). Run: sudo chown -R $USER "${dir}"`;
58
59
  }
@@ -70,7 +71,7 @@ function addUserRwx(mode) {
70
71
  }
71
72
  function countJsonlLines(filePath) {
72
73
  try {
73
- const raw = fs.readFileSync(filePath, "utf-8");
74
+ const raw = syncFs.readFileSync(filePath, "utf-8");
74
75
  if (!raw) {
75
76
  return 0;
76
77
  }
@@ -95,7 +96,7 @@ function findOtherStateDirs(stateDir) {
95
96
  for (const root of roots) {
96
97
  let entries = [];
97
98
  try {
98
- entries = fs.readdirSync(root, { withFileTypes: true });
99
+ entries = syncFs.readdirSync(root, { withFileTypes: true });
99
100
  } catch {
100
101
  continue;
101
102
  }
@@ -225,9 +226,9 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
225
226
  });
226
227
  if (repair) {
227
228
  try {
228
- const stat = fs.statSync(stateDir);
229
+ const stat = syncFs.statSync(stateDir);
229
230
  const target = addUserRwx(stat.mode);
230
- fs.chmodSync(stateDir, target);
231
+ syncFs.chmodSync(stateDir, target);
231
232
  changes.push(`- Repaired permissions on ${displayStateDir}`);
232
233
  } catch (err) {
233
234
  warnings.push(`- Failed to repair ${displayStateDir}: ${String(err)}`);
@@ -236,10 +237,10 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
236
237
  }
237
238
  if (stateDirExists && process.platform !== "win32") {
238
239
  try {
239
- const dirLstat = fs.lstatSync(stateDir);
240
+ const dirLstat = syncFs.lstatSync(stateDir);
240
241
  const isDirSymlink = dirLstat.isSymbolicLink();
241
- const stat = isDirSymlink ? fs.statSync(stateDir) : dirLstat;
242
- const resolvedDir = isDirSymlink ? fs.realpathSync(stateDir) : stateDir;
242
+ const stat = isDirSymlink ? syncFs.statSync(stateDir) : dirLstat;
243
+ const resolvedDir = isDirSymlink ? syncFs.realpathSync(stateDir) : stateDir;
243
244
  const isImmutableStore = resolvedDir.startsWith("/nix/store/");
244
245
  if (!isImmutableStore && (stat.mode & 63) !== 0) {
245
246
  warnings.push(`- State directory permissions are too open (${displayStateDir}). Recommend chmod 700.`);
@@ -248,7 +249,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
248
249
  initialValue: true
249
250
  });
250
251
  if (tighten) {
251
- fs.chmodSync(stateDir, 448);
252
+ syncFs.chmodSync(stateDir, 448);
252
253
  changes.push(`- Tightened permissions on ${displayStateDir} to 700`);
253
254
  }
254
255
  }
@@ -258,10 +259,10 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
258
259
  }
259
260
  if (configPath && existsFile(configPath) && process.platform !== "win32") {
260
261
  try {
261
- const configLstat = fs.lstatSync(configPath);
262
+ const configLstat = syncFs.lstatSync(configPath);
262
263
  const isSymlink = configLstat.isSymbolicLink();
263
- const stat = isSymlink ? fs.statSync(configPath) : configLstat;
264
- const resolvedConfig = isSymlink ? fs.realpathSync(configPath) : configPath;
264
+ const stat = isSymlink ? syncFs.statSync(configPath) : configLstat;
265
+ const resolvedConfig = isSymlink ? syncFs.realpathSync(configPath) : configPath;
265
266
  const isImmutableConfig = resolvedConfig.startsWith("/nix/store/");
266
267
  if (!isImmutableConfig && (stat.mode & 63) !== 0) {
267
268
  warnings.push(`- Config file is group/world readable (${displayConfigPath ?? configPath}). Recommend chmod 600.`);
@@ -270,7 +271,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
270
271
  initialValue: true
271
272
  });
272
273
  if (tighten) {
273
- fs.chmodSync(configPath, 384);
274
+ syncFs.chmodSync(configPath, 384);
274
275
  changes.push(`- Tightened permissions on ${displayConfigPath ?? configPath} to 600`);
275
276
  }
276
277
  }
@@ -329,9 +330,9 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
329
330
  });
330
331
  if (repair) {
331
332
  try {
332
- const stat = fs.statSync(dir);
333
+ const stat = syncFs.statSync(dir);
333
334
  const target = addUserRwx(stat.mode);
334
- fs.chmodSync(dir, target);
335
+ syncFs.chmodSync(dir, target);
335
336
  changes.push(`- Repaired permissions on ${label}: ${displayDir}`);
336
337
  } catch (err) {
337
338
  warnings.push(`- Failed to repair ${displayDir}: ${String(err)}`);
@@ -381,9 +382,31 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
381
382
  warnings.push([
382
383
  `- ${missing.length}/${recentTranscriptCandidates.length} recent sessions are missing transcripts.`,
383
384
  ` Verify sessions in store: ${formatCliCommand(`fased sessions --store "${absoluteStorePath}"`)}`,
384
- ` Preview cleanup impact: ${formatCliCommand(`fased sessions cleanup --store "${absoluteStorePath}" --dry-run`)}`,
385
- ` Prune missing entries: ${formatCliCommand(`fased sessions cleanup --store "${absoluteStorePath}" --enforce --fix-missing`)}`
385
+ ` Preserve entries and rebuild empty transcript headers: ${formatCliCommand("fased doctor --fix")}`,
386
+ " Earlier missing transcript content cannot be reconstructed."
386
387
  ].join("\n"));
388
+ const repairMissing = prompter.shouldRepair === true || await prompter.confirmSkipInNonInteractive({
389
+ message: "Recreate missing transcript headers while preserving session entries?",
390
+ initialValue: true
391
+ });
392
+ if (repairMissing) {
393
+ for (const [, entry] of missing) {
394
+ const sessionId = entry.sessionId;
395
+ if (!sessionId) {
396
+ continue;
397
+ }
398
+ const transcriptPath = resolveSessionFilePath(sessionId, entry, sessionPathOpts);
399
+ const repair = ensureSessionTranscriptHeader({
400
+ sessionFile: transcriptPath,
401
+ sessionId
402
+ });
403
+ if (repair.error) {
404
+ warnings.push(`- Failed to recreate transcript header ${shortenHomePath(transcriptPath)}: ${repair.error}`);
405
+ } else if (repair.created) {
406
+ changes.push(`- Recreated missing transcript header for session ${sessionId}; prior transcript content was unavailable`);
407
+ }
408
+ }
409
+ }
387
410
  }
388
411
  const mainKey = resolveMainSessionKey(cfg);
389
412
  const mainEntry = store[mainKey];
@@ -409,7 +432,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
409
432
  referencedTranscriptPaths.add(path.resolve(resolveSessionFilePath(entry.sessionId, entry, sessionPathOpts)));
410
433
  } catch {}
411
434
  }
412
- const sessionDirEntries = fs.readdirSync(sessionsDir, { withFileTypes: true });
435
+ const sessionDirEntries = syncFs.readdirSync(sessionsDir, { withFileTypes: true });
413
436
  const orphanTranscriptPaths = sessionDirEntries.filter((entry) => entry.isFile() && isPrimarySessionTranscriptFileName(entry.name)).map((entry) => path.resolve(path.join(sessionsDir, entry.name))).filter((filePath) => !referencedTranscriptPaths.has(filePath));
414
437
  if (orphanTranscriptPaths.length > 0) {
415
438
  warnings.push(`- Found ${orphanTranscriptPaths.length} orphan transcript file(s) in ${displaySessionsDir}. They are not referenced by sessions.json and can consume disk over time.`);
@@ -423,7 +446,7 @@ async function noteStateIntegrity(cfg, prompter, configPath) {
423
446
  for (const orphanPath of orphanTranscriptPaths) {
424
447
  const archivedPath = `${orphanPath}.deleted.${archivedAt}`;
425
448
  try {
426
- fs.renameSync(orphanPath, archivedPath);
449
+ syncFs.renameSync(orphanPath, archivedPath);
427
450
  archived += 1;
428
451
  } catch (err) {
429
452
  warnings.push(`- Failed to archive orphan transcript ${shortenHomePath(orphanPath)}: ${String(err)}`);
@@ -447,7 +470,7 @@ function noteWorkspaceBackupTip(workspaceDir) {
447
470
  return;
448
471
  }
449
472
  const gitMarker = path.join(workspaceDir, ".git");
450
- if (fs.existsSync(gitMarker)) {
473
+ if (syncFs.existsSync(gitMarker)) {
451
474
  return;
452
475
  }
453
476
  note([
@@ -1,6 +1,6 @@
1
1
  import { shortenHomePath } from "../utils.js";
2
2
  import { DEFAULT_AGENTS_FILENAME } from "../agents/workspace.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/commands/doctor-workspace.ts
@@ -16,13 +16,13 @@ async function shouldSuggestMemorySystem(workspaceDir) {
16
16
  const memoryPaths = [path.join(workspaceDir, "MEMORY.md"), path.join(workspaceDir, "memory.md")];
17
17
  for (const memoryPath of memoryPaths) {
18
18
  try {
19
- await fs.promises.access(memoryPath);
19
+ await syncFs.promises.access(memoryPath);
20
20
  return false;
21
21
  } catch {}
22
22
  }
23
23
  const agentsPath = path.join(workspaceDir, DEFAULT_AGENTS_FILENAME);
24
24
  try {
25
- const content = await fs.promises.readFile(agentsPath, "utf-8");
25
+ const content = await syncFs.promises.readFile(agentsPath, "utf-8");
26
26
  if (/memory\.md/i.test(content)) {
27
27
  return false;
28
28
  }
@@ -37,7 +37,7 @@ import { maybeRepairUiProtocolFreshness } from "./doctor-ui.js";
37
37
  import { maybeOfferUpdateBeforeDoctor } from "./doctor-update.js";
38
38
  import { MEMORY_SYSTEM_PROMPT, shouldSuggestMemorySystem } from "./doctor-workspace.js";
39
39
  import { noteWorkspaceStatus } from "./doctor-workspace-status.js";
40
- import fs from "node:fs";
40
+ import syncFs from "node:fs";
41
41
  import { intro, outro } from "@clack/prompts";
42
42
 
43
43
  //#region src/commands/doctor.ts
@@ -83,7 +83,7 @@ async function doctorCommand(runtime = defaultRuntime, options = {}) {
83
83
  `Fix: run ${formatCliCommand("fased configure")} and set Gateway mode (local/remote).`,
84
84
  `Or set directly: ${formatCliCommand("fased config set gateway.mode local")}`
85
85
  ];
86
- if (!fs.existsSync(configPath)) {
86
+ if (!syncFs.existsSync(configPath)) {
87
87
  lines.push(`Missing config: run ${formatCliCommand("fased setup")} first.`);
88
88
  }
89
89
  note$1(lines.join("\n"), "Gateway");
@@ -233,7 +233,7 @@ async function doctorCommand(runtime = defaultRuntime, options = {}) {
233
233
  await writeConfigFile(cfg);
234
234
  logConfigUpdated(runtime);
235
235
  const backupPath = `${CONFIG_PATH}.bak`;
236
- if (fs.existsSync(backupPath)) {
236
+ if (syncFs.existsSync(backupPath)) {
237
237
  runtime.log(`Backup: ${shortenHomePath(backupPath)}`);
238
238
  }
239
239
  } else if (configResult.hasPendingChanges) {
@@ -2,7 +2,7 @@ import { defaultRuntime } from "../runtime.js";
2
2
  import { readManagedFederationTokenSummary } from "../managed/federation.js";
3
3
  import { readManagedReservationSummaries } from "../managed/tunnel.js";
4
4
  import { fileURLToPath } from "node:url";
5
- import fs from "node:fs";
5
+ import syncFs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { spawn } from "node:child_process";
8
8
 
@@ -44,7 +44,7 @@ function resolveManagedScriptPath() {
44
44
  candidates.push(cwdCandidate);
45
45
  }
46
46
  for (const candidate of candidates) {
47
- if (fs.existsSync(candidate)) {
47
+ if (syncFs.existsSync(candidate)) {
48
48
  return candidate;
49
49
  }
50
50
  }
@@ -12,7 +12,7 @@ import { upsertAuthProfile } from "../agents/auth-profiles/profiles.js";
12
12
  import "../agents/auth-profiles.js";
13
13
  import { PROVIDER_ENV_VARS } from "../secrets/provider-env-vars.js";
14
14
  import { MISTRAL_DEFAULT_MODEL_REF, XAI_DEFAULT_MODEL_REF } from "./onboard-auth.models.js";
15
- import fs from "node:fs";
15
+ import syncFs from "node:fs";
16
16
  import path from "node:path";
17
17
 
18
18
  //#region src/commands/onboard-auth.credentials.ts
@@ -75,7 +75,7 @@ function buildApiKeyCredential(provider, input, metadata, options) {
75
75
  /** Resolve real path, returning null if the target doesn't exist. */
76
76
  function safeRealpathSync(dir) {
77
77
  try {
78
- return fs.realpathSync(path.resolve(dir));
78
+ return syncFs.realpathSync(path.resolve(dir));
79
79
  } catch {
80
80
  return null;
81
81
  }
@@ -88,7 +88,7 @@ function resolveSiblingAgentDirs(primaryAgentDir) {
88
88
  const agentsRoot = looksLikeStandardLayout ? candidateAgentsRoot : path.join(resolveStateDir(), "agents");
89
89
  const entries = (() => {
90
90
  try {
91
- return fs.readdirSync(agentsRoot, { withFileTypes: true });
91
+ return syncFs.readdirSync(agentsRoot, { withFileTypes: true });
92
92
  } catch {
93
93
  return [];
94
94
  }
@@ -7,7 +7,7 @@ import { createPluginLoaderLogger } from "../../plugins/logger.js";
7
7
  import { resolveChannelPluginExpectedPluginIds } from "../../channels/plugins/catalog.js";
8
8
  import { buildNpmResolutionInstallFields } from "../../plugins/installs.js";
9
9
  import { finalizeInstalledPluginConfig } from "../../plugins/lifecycle.js";
10
- import fs from "node:fs";
10
+ import syncFs from "node:fs";
11
11
  import path from "node:path";
12
12
 
13
13
  //#region src/commands/onboarding/plugin-install.ts
@@ -29,7 +29,7 @@ function resolveLocalPath(entry, workspaceDir) {
29
29
  candidates.add(path.resolve(packageRoot, raw));
30
30
  }
31
31
  for (const candidate of candidates) {
32
- if (fs.existsSync(candidate)) {
32
+ if (syncFs.existsSync(candidate)) {
33
33
  return candidate;
34
34
  }
35
35
  }
@@ -7,7 +7,7 @@ import { capEntryCount, loadSessionStore, pruneStaleEntries, resolveMaintenanceC
7
7
  import "../config/sessions.js";
8
8
  import { resolveSessionStoreTargets } from "./session-store-targets.js";
9
9
  import { SESSION_AGE_PAD, SESSION_KEY_PAD, SESSION_MODEL_PAD, formatSessionAgeCell, formatSessionFlagsCell, formatSessionKeyCell, formatSessionModelCell, resolveSessionDisplayDefaults, resolveSessionDisplayModel, toSessionDisplayRows } from "./sessions-table.js";
10
- import fs from "node:fs";
10
+ import syncFs from "node:fs";
11
11
 
12
12
  //#region src/commands/sessions-cleanup.ts
13
13
  const ACTION_PAD = 12;
@@ -65,7 +65,7 @@ function pruneMissingTranscriptEntries(params) {
65
65
  continue;
66
66
  }
67
67
  const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, sessionPathOpts);
68
- if (!fs.existsSync(transcriptPath)) {
68
+ if (!syncFs.existsSync(transcriptPath)) {
69
69
  delete params.store[key];
70
70
  removed += 1;
71
71
  params.onPruned?.(key);
@@ -5,7 +5,7 @@ import { resolveBrewExecutable } from "../infra/brew.js";
5
5
  import { createWriteStream } from "node:fs";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
- import fs$1 from "node:fs/promises";
8
+ import fs from "node:fs/promises";
9
9
  import { pipeline } from "node:stream/promises";
10
10
  import { request } from "node:https";
11
11
 
@@ -79,7 +79,7 @@ async function findSignalCliBinary(root) {
79
79
  if (depth > 3) {
80
80
  return;
81
81
  }
82
- const entries = await fs$1.readdir(dir, { withFileTypes: true }).catch(() => []);
82
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
83
83
  for (const entry of entries) {
84
84
  const full = path.join(dir, entry.name);
85
85
  if (entry.isDirectory()) {
@@ -103,7 +103,7 @@ async function resolveBrewSignalCliPath(brewExe) {
103
103
  const prefix = result.stdout.trim();
104
104
  const candidate = path.join(prefix, "bin", "signal-cli");
105
105
  try {
106
- await fs$1.access(candidate);
106
+ await fs.access(candidate);
107
107
  return candidate;
108
108
  } catch {
109
109
  return findSignalCliBinary(prefix);
@@ -172,12 +172,12 @@ async function installSignalCliFromRelease(runtime) {
172
172
  error: "No compatible release asset found for this platform."
173
173
  };
174
174
  }
175
- const tmpDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "fased-signal-"));
175
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "fased-signal-"));
176
176
  const archivePath = path.join(tmpDir, asset.name);
177
177
  runtime.log(`Downloading signal-cli ${version} (${asset.name})…`);
178
178
  await downloadToFile(asset.browser_download_url, archivePath);
179
179
  const installRoot = path.join(CONFIG_DIR, "tools", "signal-cli", version);
180
- await fs$1.mkdir(installRoot, { recursive: true });
180
+ await fs.mkdir(installRoot, { recursive: true });
181
181
  if (!looksLikeArchive(asset.name.toLowerCase())) {
182
182
  return {
183
183
  ok: false,
@@ -200,7 +200,7 @@ async function installSignalCliFromRelease(runtime) {
200
200
  error: `signal-cli binary not found after extracting ${asset.name}`
201
201
  };
202
202
  }
203
- await fs$1.chmod(cliPath, 493).catch(() => {});
203
+ await fs.chmod(cliPath, 493).catch(() => {});
204
204
  return {
205
205
  ok: true,
206
206
  cliPath,
@@ -4,7 +4,7 @@ import { formatTimeAgo } from "../../infra/format-time/format-relative.js";
4
4
  import { resolveChannelDefaultAccountId } from "../../channels/plugins/helpers.js";
5
5
  import { buildChannelAccountSnapshot, formatChannelAllowFrom } from "../../channels/account-summary.js";
6
6
  import "./format.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
 
9
9
  //#region src/commands/status-all/channels.ts
10
10
  const asRecord = (value) => value && typeof value === "object" ? value : {};
@@ -27,7 +27,7 @@ function existsSyncMaybe(p) {
27
27
  return null;
28
28
  }
29
29
  try {
30
- return fs.existsSync(path);
30
+ return syncFs.existsSync(path);
31
31
  } catch {
32
32
  return null;
33
33
  }