@fased/fased 0.1.61 → 0.1.64

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 (514) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +38 -30
  3. package/config/dependency-ownership.json +1 -1
  4. package/config/signer-policies/README.md +49 -0
  5. package/config/signer-policies/agent.json.template +32 -0
  6. package/config/signer-policies/mining.json.template +69 -0
  7. package/config/signer-policies/network.json.template +5 -0
  8. package/config/signer-policies/vault.json.template +70 -0
  9. package/config/signer-protocol-v2.json +76 -0
  10. package/config/typescript-noemit-baseline.json +680 -0
  11. package/dist/acp/client.js +2 -2
  12. package/dist/acp/secret-file.js +2 -2
  13. package/dist/agents/agent-scope.js +2 -2
  14. package/dist/agents/apply-patch.js +8 -8
  15. package/dist/agents/auth-profiles/paths.js +2 -2
  16. package/dist/agents/auth-profiles/store.js +269 -33
  17. package/dist/agents/bash-tools.exec.js +10 -4
  18. package/dist/agents/bash-tools.shared.js +2 -2
  19. package/dist/agents/cli-credentials.js +4 -4
  20. package/dist/agents/current-model-catalog.js +3 -3
  21. package/dist/agents/docs-path.js +3 -3
  22. package/dist/agents/embedded-pi-mcp.js +4 -4
  23. package/dist/agents/identity-avatar.js +3 -3
  24. package/dist/agents/identity-file.js +2 -2
  25. package/dist/agents/memory-search.js +7 -1
  26. package/dist/agents/model-catalog-access.js +1 -2
  27. package/dist/agents/model-catalog-snapshot.js +1 -1
  28. package/dist/agents/model-catalog-source.js +1 -1
  29. package/dist/agents/model-metadata.js +1 -1
  30. package/dist/agents/model-selection.js +2 -28
  31. package/dist/agents/models-config.providers.js +6 -6
  32. package/dist/agents/openai-codex-app-server.js +5 -5
  33. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  34. package/dist/agents/pi-embedded-runner/model.js +1 -1
  35. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  36. package/dist/agents/pi-embedded-runner/run.js +2 -0
  37. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  38. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  39. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  40. package/dist/agents/pi-model-discovery.js +6 -6
  41. package/dist/agents/pi-project-settings.js +3 -3
  42. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  43. package/dist/agents/pi-tools.js +2 -1
  44. package/dist/agents/sandbox/config.js +1 -1
  45. package/dist/agents/sandbox/context.js +27 -2
  46. package/dist/agents/sandbox/fs-bridge.js +2 -2
  47. package/dist/agents/session-dirs.js +4 -4
  48. package/dist/agents/session-write-lock.js +13 -13
  49. package/dist/agents/shell-utils.js +5 -5
  50. package/dist/agents/skills/bundled-dir.js +4 -4
  51. package/dist/agents/skills/env-overrides.js +38 -28
  52. package/dist/agents/skills/local-loader.js +6 -6
  53. package/dist/agents/skills/plugin-skills.js +2 -2
  54. package/dist/agents/skills/trust.js +93 -0
  55. package/dist/agents/skills/workspace.js +141 -13
  56. package/dist/agents/skills-clawhub.js +36 -11
  57. package/dist/agents/skills-install-download.js +7 -7
  58. package/dist/agents/skills-install-plan.js +2 -2
  59. package/dist/agents/skills-install.js +2 -2
  60. package/dist/agents/skills-marketplace-scan.js +49 -0
  61. package/dist/agents/skills-status.js +2 -2
  62. package/dist/agents/subagent-depth.js +2 -2
  63. package/dist/agents/system-prompt-params.js +2 -2
  64. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  65. package/dist/agents/tools/mining-tool.js +1 -1
  66. package/dist/agents/tools/session-status-tool.js +1 -1
  67. package/dist/agents/tools/wallet-action-tool.js +172 -36
  68. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  69. package/dist/agents/tools/wallet-tool.js +7 -11
  70. package/dist/agents/workspace.js +22 -22
  71. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  72. package/dist/auto-reply/reply/agent-runner.js +2 -2
  73. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  74. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  75. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  76. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  77. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  78. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  79. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  80. package/dist/auto-reply/reply/model-selection.js +7 -4
  81. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  82. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  83. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  84. package/dist/auto-reply/reply/session.js +3 -3
  85. package/dist/auto-reply/skill-commands.js +3 -3
  86. package/dist/auto-reply/status.js +6 -6
  87. package/dist/brand.js +1 -1
  88. package/dist/browser/chrome.executables.js +3 -3
  89. package/dist/browser/chrome.js +3 -3
  90. package/dist/browser/chrome.profile-decoration.js +6 -6
  91. package/dist/browser/profiles-service.js +2 -2
  92. package/dist/browser/server-context.js +2 -2
  93. package/dist/browser/trash.js +4 -4
  94. package/dist/build-info.json +3 -3
  95. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  96. package/dist/canvas-host/server.js +4 -4
  97. package/dist/capabilities/catalog.js +3 -3
  98. package/dist/channel-web.js +2 -2
  99. package/dist/channels/plugins/catalog.js +3 -3
  100. package/dist/cli/browser-cli-extension.js +6 -6
  101. package/dist/cli/command-format.js +2 -2
  102. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  103. package/dist/cli/dns-cli.js +9 -9
  104. package/dist/cli/gateway-cli/dev.js +5 -5
  105. package/dist/cli/gateway-cli/run.js +10 -2
  106. package/dist/cli/hooks-cli.js +5 -5
  107. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  108. package/dist/cli/memory-cli.js +7 -7
  109. package/dist/cli/nodes-media-utils.js +2 -2
  110. package/dist/cli/plugins-cli.js +2 -2
  111. package/dist/cli/program/command-registry.js +1 -1
  112. package/dist/cli/program/register.onboard.js +2 -3
  113. package/dist/cli/program/register.wallet.js +16 -123
  114. package/dist/cli/providers-cli.js +1 -1
  115. package/dist/cli/sat-cli.js +129 -2
  116. package/dist/cli/secrets-cli.js +3 -3
  117. package/dist/cli/update-cli/update-command.js +260 -11
  118. package/dist/cli/windows-argv.js +2 -2
  119. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  120. package/dist/commands/dashboard-link.js +3 -3
  121. package/dist/commands/doctor-config-flow.js +1 -1
  122. package/dist/commands/doctor-install.js +5 -5
  123. package/dist/commands/doctor-legacy-config.js +2 -13
  124. package/dist/commands/doctor-memory-search.js +2 -2
  125. package/dist/commands/doctor-platform-notes.js +2 -2
  126. package/dist/commands/doctor-sandbox.js +2 -2
  127. package/dist/commands/doctor-state-integrity.js +23 -23
  128. package/dist/commands/doctor-workspace.js +3 -3
  129. package/dist/commands/doctor.js +3 -3
  130. package/dist/commands/managed-up.js +2 -2
  131. package/dist/commands/model-picker.js +6 -6
  132. package/dist/commands/models/auth.js +1 -1
  133. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  134. package/dist/commands/onboard-auth.credentials.js +35 -11
  135. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  136. package/dist/commands/onboard-non-interactive/local.js +5 -1
  137. package/dist/commands/onboarding/plugin-install.js +2 -2
  138. package/dist/commands/sessions-cleanup.js +2 -2
  139. package/dist/commands/signal-install.js +6 -6
  140. package/dist/commands/status-all/channels.js +2 -2
  141. package/dist/commands/wallet.js +570 -1913
  142. package/dist/config/cache-utils.js +2 -2
  143. package/dist/config/config.js +2 -2
  144. package/dist/config/includes.js +5 -5
  145. package/dist/config/io.js +66 -4
  146. package/dist/config/paths.js +3 -3
  147. package/dist/config/sat-runtime-ids.js +3 -3
  148. package/dist/config/schema.help.js +8 -7
  149. package/dist/config/schema.labels.js +5 -4
  150. package/dist/config/sessions/disk-budget.js +6 -6
  151. package/dist/config/sessions/paths.js +2 -2
  152. package/dist/config/sessions/store.js +17 -17
  153. package/dist/config/sessions/transcript.js +4 -4
  154. package/dist/config/talk.js +2 -2
  155. package/dist/config/zod-schema.agent-runtime.js +1 -0
  156. package/dist/config/zod-schema.js +5 -0
  157. package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
  158. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  159. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  160. package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
  161. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  162. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  163. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  164. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  165. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  166. package/dist/control-ui/index.html +1 -1
  167. package/dist/control-ui/version.json +1 -1
  168. package/dist/cron/service/store.js +2 -2
  169. package/dist/cron/store.js +6 -6
  170. package/dist/daemon/systemd-system.js +60 -54
  171. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  172. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  173. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  174. package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
  175. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  176. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  177. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  178. package/dist/federation/auto-connect.js +98 -8
  179. package/dist/federation/marketplace-capability-adapter.js +33 -7
  180. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  181. package/dist/federation/marketplace-delivery.js +351 -215
  182. package/dist/federation/marketplace-direct-payment.js +272 -141
  183. package/dist/federation/marketplace-escrow.js +607 -249
  184. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  185. package/dist/federation/offers.js +9 -7
  186. package/dist/federation/peer-auth-v2.js +529 -0
  187. package/dist/gateway/a2a-http.js +425 -96
  188. package/dist/gateway/a2a-settlement.js +259 -153
  189. package/dist/gateway/a2a-task-store.js +524 -0
  190. package/dist/gateway/auth.js +38 -2
  191. package/dist/gateway/config-reload.js +46 -33
  192. package/dist/gateway/control-ui-boot-check.js +6 -6
  193. package/dist/gateway/control-ui-login.js +7 -7
  194. package/dist/gateway/control-ui.js +9 -9
  195. package/dist/gateway/durable-capacity.js +31 -0
  196. package/dist/gateway/federation-http.js +540 -135
  197. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  198. package/dist/gateway/federation-marketplace.js +535 -230
  199. package/dist/gateway/hooks-mapping.js +4 -4
  200. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  201. package/dist/gateway/security-path.js +1 -1
  202. package/dist/gateway/server-discovery.js +2 -2
  203. package/dist/gateway/server-http.js +1088 -1209
  204. package/dist/gateway/server-methods/chat.js +3 -3
  205. package/dist/gateway/server-methods/models.js +1 -1
  206. package/dist/gateway/server-methods/secrets.js +40 -0
  207. package/dist/gateway/server-methods/sessions.js +6 -6
  208. package/dist/gateway/server-methods/usage.js +2 -2
  209. package/dist/gateway/server-methods.js +1 -2
  210. package/dist/gateway/server-reload-handlers.js +196 -66
  211. package/dist/gateway/server-runtime-config.js +1 -1
  212. package/dist/gateway/server-secrets-runtime.js +288 -0
  213. package/dist/gateway/server.impl.js +73 -42
  214. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  215. package/dist/gateway/session-utils.fs.js +24 -24
  216. package/dist/gateway/session-utils.js +6 -6
  217. package/dist/gateway/sessions-patch.js +3 -5
  218. package/dist/hooks/bundled-dir.js +4 -4
  219. package/dist/hooks/gmail-setup-utils.js +6 -6
  220. package/dist/hooks/import-url.js +2 -2
  221. package/dist/hooks/loader.js +4 -4
  222. package/dist/hooks/workspace.js +7 -7
  223. package/dist/index.js +4 -2
  224. package/dist/infra/archive.js +17 -17
  225. package/dist/infra/boundary-file-read.js +2 -2
  226. package/dist/infra/boundary-path.js +15 -15
  227. package/dist/infra/brew.js +2 -2
  228. package/dist/infra/control-ui-assets.js +14 -14
  229. package/dist/infra/device-auth-store.js +8 -8
  230. package/dist/infra/device-identity.js +8 -8
  231. package/dist/infra/dotenv.js +2 -2
  232. package/dist/infra/exec-approvals.js +8 -8
  233. package/dist/infra/exec-command-resolution.js +4 -4
  234. package/dist/infra/exec-safe-bin-trust.js +2 -2
  235. package/dist/infra/fased-root.js +5 -5
  236. package/dist/infra/fasedhub.js +64 -1
  237. package/dist/infra/fs-safe.js +14 -14
  238. package/dist/infra/gateway-lock.js +11 -11
  239. package/dist/infra/git-commit.js +5 -5
  240. package/dist/infra/git-root.js +4 -4
  241. package/dist/infra/hosted-runtime-artifact.js +3 -3
  242. package/dist/infra/is-main.js +2 -2
  243. package/dist/infra/json-file.js +7 -7
  244. package/dist/infra/local-source-paired-update.js +538 -0
  245. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  246. package/dist/infra/outbound/delivery-queue.js +16 -16
  247. package/dist/infra/path-env.js +3 -3
  248. package/dist/infra/ports-lsof.js +4 -4
  249. package/dist/infra/provider-usage.auth.js +3 -3
  250. package/dist/infra/restart.js +41 -10
  251. package/dist/infra/safe-open-sync.js +2 -2
  252. package/dist/infra/session-cost-usage.js +9 -9
  253. package/dist/infra/shell-env.js +2 -2
  254. package/dist/infra/state-migrations.fs.js +6 -6
  255. package/dist/infra/state-migrations.js +23 -23
  256. package/dist/infra/tmp-fased-dir.js +6 -6
  257. package/dist/infra/update-runner.js +96 -0
  258. package/dist/infra/widearea-dns.js +3 -3
  259. package/dist/infra/wsl.js +2 -2
  260. package/dist/light-update-status.js +11 -11
  261. package/dist/line/accounts.js +2 -2
  262. package/dist/line/download.js +2 -2
  263. package/dist/logging/config.js +3 -3
  264. package/dist/logging/logger.js +7 -7
  265. package/dist/managed/federation.js +3 -3
  266. package/dist/managed/tunnel.js +3 -3
  267. package/dist/media/store.js +13 -13
  268. package/dist/media-understanding/runner.js +3 -3
  269. package/dist/memory/backend-config.js +2 -1
  270. package/dist/memory/embeddings.js +2 -2
  271. package/dist/memory/internal.js +10 -10
  272. package/dist/memory/manager-sync-ops.js +7 -7
  273. package/dist/memory/repair-executor.js +17 -17
  274. package/dist/memory/session-files.js +16 -2
  275. package/dist/node-host/invoke-system-run-plan.js +8 -8
  276. package/dist/node-host/invoke.js +2 -2
  277. package/dist/node-host/runner.js +3 -3
  278. package/dist/pairing/pairing-store.js +3 -3
  279. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  280. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  281. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  282. package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
  283. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  284. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  285. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  286. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  287. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  288. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  289. package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
  290. package/dist/plugin-sdk/command-status.d.ts +2 -2
  291. package/dist/plugin-sdk/command-status.js +27 -27
  292. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  293. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  294. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  295. package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
  296. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  297. package/dist/plugin-sdk/discord.d.ts +5 -5
  298. package/dist/plugin-sdk/discord.js +19 -19
  299. package/dist/plugin-sdk/file-lock.js +35 -4
  300. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  301. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  302. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  303. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  304. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  305. package/dist/plugin-sdk/index.d.ts +9 -27
  306. package/dist/plugin-sdk/index.js +29 -29
  307. package/dist/plugin-sdk/json-store.js +6 -6
  308. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  309. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  310. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  311. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  312. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  313. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  314. package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
  315. package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
  316. package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
  317. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  318. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  319. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  320. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  321. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  322. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  323. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  324. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  325. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  326. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  327. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  328. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  329. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  330. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  331. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  332. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  333. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  334. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  335. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  336. package/dist/plugin-sdk/sat-runtime.js +29 -29
  337. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  338. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  339. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  340. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  341. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  342. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  343. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  344. package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
  345. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  346. package/dist/plugin-sdk/slack.d.ts +5 -5
  347. package/dist/plugin-sdk/slack.js +9 -9
  348. package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
  349. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  350. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  351. package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
  352. package/dist/plugin-sdk/telegram.d.ts +5 -5
  353. package/dist/plugin-sdk/telegram.js +8 -8
  354. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  355. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  356. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  357. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
  358. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  359. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
  360. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  361. package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
  362. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  363. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  364. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  365. package/dist/plugin-sdk/whatsapp.js +12 -12
  366. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  367. package/dist/plugins/bundled-dir.js +3 -3
  368. package/dist/plugins/discovery.js +11 -11
  369. package/dist/plugins/loader.js +13 -13
  370. package/dist/plugins/manifest-registry.js +2 -2
  371. package/dist/plugins/manifest.js +4 -4
  372. package/dist/plugins/path-safety.js +3 -3
  373. package/dist/plugins/status-cache.js +9 -9
  374. package/dist/plugins/update.js +3 -3
  375. package/dist/plugins/web-search-install-catalog.js +3 -3
  376. package/dist/providers/refresh.js +1 -1
  377. package/dist/providers/registry.js +1 -1
  378. package/dist/secrets/apply.js +17 -17
  379. package/dist/secrets/audit.js +11 -11
  380. package/dist/secrets/runtime.js +1 -1
  381. package/dist/secrets/shared.js +9 -9
  382. package/dist/security/scan-paths.js +2 -2
  383. package/dist/shared/config-eval.js +2 -2
  384. package/dist/shared/pid-alive.js +2 -2
  385. package/dist/tasks/standing-orders.js +5 -5
  386. package/dist/tasks/task-flow-registry.js +5 -5
  387. package/dist/tasks/task-registry.js +5 -5
  388. package/dist/tasks/workflow-definitions.js +6 -6
  389. package/dist/telegram/token.js +5 -5
  390. package/dist/utils.js +5 -5
  391. package/dist/wallet/external-submission-ledger.js +376 -0
  392. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  393. package/dist/wallet/local-socket-signer-archive.js +30 -0
  394. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  395. package/dist/wallet/local-socket-signer-policy.js +166 -0
  396. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  397. package/dist/wallet/native-signer-wallet-id.js +25 -0
  398. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  399. package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
  400. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  401. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  402. package/dist/wallet/signer-network-admin.js +184 -0
  403. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  404. package/dist/wallet/solana-bond-signing.js +157 -69
  405. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  406. package/dist/wallet/solana-swap.js +520 -64
  407. package/dist/wallet/solana-transaction-inspection.js +106 -4
  408. package/dist/wallet/solana-trigger.js +658 -320
  409. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  410. package/dist/wallet/wallet-approval-auth.js +20 -31
  411. package/dist/wallet/wallet-atomic-state.js +53 -0
  412. package/dist/wallet/wallet-audit-log.js +5 -5
  413. package/dist/wallet/wallet-canary.js +0 -1
  414. package/dist/wallet/wallet-inbound-events.js +19 -14
  415. package/dist/wallet/wallet-observability.js +5 -5
  416. package/dist/wallet/wallet-policy-simulation.js +1 -1
  417. package/dist/wallet/wallet-policy.js +95 -41
  418. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  419. package/dist/wallet/wallet-provider-registry.js +64 -51
  420. package/dist/wallet/wallet-provider-resolver.js +62 -63
  421. package/dist/wallet/wallet-runtime-config.js +31 -44
  422. package/dist/wallet/wallet-secrets-store.js +44 -22
  423. package/dist/wallet/wallet-send-approvals.js +1894 -592
  424. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  425. package/dist/wallet/wallet-settlement-links.js +17 -16
  426. package/dist/wallet/wallet-standard-review.js +353 -0
  427. package/dist/wallet/wallet-status.js +0 -9
  428. package/dist/wallet/wallet-task-ledger.js +16 -2
  429. package/dist/web/accounts.js +3 -3
  430. package/dist/web/auth-store.js +18 -18
  431. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  432. package/dist/web/auto-reply/monitor.js +2 -2
  433. package/dist/web/session.js +4 -4
  434. package/dist/wizard/host-security-capability.js +15 -24
  435. package/dist/wizard/onboarding.finalize.js +63 -184
  436. package/dist/wizard/onboarding.host-security.js +118 -1368
  437. package/dist/wizard/onboarding.js +180 -242
  438. package/dist/wizard/onboarding.wallet.js +323 -829
  439. package/extensions/acpx/package.json +1 -1
  440. package/extensions/bluebubbles/package.json +1 -1
  441. package/extensions/copilot-proxy/package.json +1 -1
  442. package/extensions/diagnostics-otel/package.json +1 -1
  443. package/extensions/fased-federation/package.json +1 -1
  444. package/extensions/google-gemini-cli-auth/package.json +1 -1
  445. package/extensions/imessage/package.json +1 -1
  446. package/extensions/irc/package.json +1 -1
  447. package/extensions/line/package.json +1 -1
  448. package/extensions/llm-task/package.json +1 -1
  449. package/extensions/lobster/package.json +1 -1
  450. package/extensions/matrix/CHANGELOG.md +18 -0
  451. package/extensions/matrix/package.json +1 -1
  452. package/extensions/mattermost/package.json +1 -1
  453. package/extensions/memory-core/package.json +2 -2
  454. package/extensions/memory-lancedb/package.json +1 -1
  455. package/extensions/minimax-portal-auth/package.json +1 -1
  456. package/extensions/msteams/CHANGELOG.md +18 -0
  457. package/extensions/msteams/package.json +1 -1
  458. package/extensions/nextcloud-talk/package.json +1 -1
  459. package/extensions/nostr/CHANGELOG.md +18 -0
  460. package/extensions/nostr/package.json +1 -1
  461. package/extensions/open-prose/package.json +1 -1
  462. package/extensions/sat-mining/index.ts +498 -153
  463. package/extensions/sat-mining/package.json +1 -1
  464. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  465. package/extensions/sat-mining/src/audit-store.ts +50 -5
  466. package/extensions/sat-mining/src/claim-service.ts +85 -14
  467. package/extensions/sat-mining/src/config.ts +9 -0
  468. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  469. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  470. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  471. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  472. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  473. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  474. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  475. package/extensions/sat-mining/src/runtime.ts +14 -0
  476. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  477. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  478. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  479. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  480. package/extensions/signal/package.json +1 -1
  481. package/extensions/synology-chat/package.json +1 -1
  482. package/extensions/tlon/package.json +1 -1
  483. package/extensions/twitch/CHANGELOG.md +18 -0
  484. package/extensions/twitch/package.json +1 -1
  485. package/extensions/voice-call/CHANGELOG.md +18 -0
  486. package/extensions/voice-call/package.json +1 -1
  487. package/extensions/zalo/CHANGELOG.md +18 -0
  488. package/extensions/zalo/package.json +1 -1
  489. package/extensions/zalouser/CHANGELOG.md +18 -0
  490. package/extensions/zalouser/package.json +1 -1
  491. package/install.sh +4955 -0
  492. package/package.json +24 -5
  493. package/scripts/fased-host-updater.mjs +1421 -0
  494. package/scripts/fased-host-updaterctl.mjs +186 -0
  495. package/scripts/fased-managed-service.sh +36 -0
  496. package/scripts/fased-managed-updater.mjs +3065 -156
  497. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  498. package/scripts/fased-signer-network-hosting.sh +143 -0
  499. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  500. package/scripts/fased-signer-policy-hosting.sh +50 -0
  501. package/scripts/fased-signer-policy-local.sh +26 -0
  502. package/scripts/hosted-release-manifest.mjs +185 -0
  503. package/scripts/install-fased-signerd.sh +217 -0
  504. package/scripts/install-managed-runtime.mjs +212 -10
  505. package/scripts/managed-runtime-layout.mjs +75 -3
  506. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  507. package/scripts/start-managed.sh +169 -360
  508. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  509. package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
  510. package/dist/wallet/local-socket-signer-broker.js +0 -224
  511. package/dist/wallet/local-socket-signer-custody.js +0 -42
  512. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  513. package/dist/wallet/providers/privy-adapter.js +0 -80
  514. package/dist/wallet/wallet-custody.js +0 -1836
@@ -6,7 +6,6 @@ import { resolveWalletPolicyConfig } from "./wallet-policy.js";
6
6
  import { redactWalletDiagnosticText, walletDiagnosticErrorMessage, walletDiagnosticErrorString } from "./wallet-redaction.js";
7
7
  import { createWalletProviderAdapter, resolveWalletProviderId } from "./wallet-provider-resolver.js";
8
8
  import { readWalletApprovalAuthSnapshot } from "./wallet-approval-auth.js";
9
- import { readWalletCustodyStatus } from "./wallet-custody.js";
10
9
 
11
10
  //#region src/wallet/wallet-status.ts
12
11
  async function readWalletStatusSnapshot(params) {
@@ -27,13 +26,6 @@ async function readWalletStatusSnapshot(params) {
27
26
  const statePaths = resolveWalletStatePaths(effectiveEnv);
28
27
  const approvalAuth = readWalletApprovalAuthSnapshot(effectiveEnv, cfg);
29
28
  const checkedAt = new Date().toISOString();
30
- const custody = readWalletCustodyStatus({
31
- wallet: resolved,
32
- env: effectiveEnv,
33
- cfg,
34
- walletId: params?.walletId,
35
- approvalHost: params?.approvalHost
36
- });
37
29
  let providerHealth = {
38
30
  ok: false,
39
31
  details: "provider health probe unavailable"
@@ -98,7 +90,6 @@ async function readWalletStatusSnapshot(params) {
98
90
  }
99
91
  },
100
92
  approvalAuth,
101
- custody,
102
93
  addresses,
103
94
  paths: {
104
95
  rootDir: paths.rootDir,
@@ -39,7 +39,9 @@ function normalizeAgentIdFromRequester(requestedBy) {
39
39
  function approvalStatusToTaskStatus(request) {
40
40
  switch (request.status) {
41
41
  case "pending": return "blocked";
42
+ case "executing":
42
43
  case "approved": return "running";
44
+ case "unknown": return "blocked";
43
45
  case "executed": return "succeeded";
44
46
  case "failed": return "failed";
45
47
  case "rejected": return "cancelled";
@@ -50,7 +52,9 @@ function approvalStatusToTaskStatus(request) {
50
52
  function approvalStatusToSummary(request) {
51
53
  switch (request.status) {
52
54
  case "pending": return { progressSummary: "Waiting for wallet approval." };
55
+ case "executing": return { progressSummary: "Wallet approval claimed; execution is in progress." };
53
56
  case "approved": return { progressSummary: "Wallet approval accepted; broadcast is in progress." };
57
+ case "unknown": return { progressSummary: request.reason ?? "Wallet execution is unknown; reconcile it before any retry." };
54
58
  case "executed": return { terminalSummary: request.result?.txHash ? `Wallet action executed: ${request.result.txHash}` : "Wallet action executed." };
55
59
  case "failed": return {
56
60
  terminalSummary: request.reason ?? request.result?.error ?? "Wallet action failed.",
@@ -62,6 +66,9 @@ function approvalStatusToSummary(request) {
62
66
  }
63
67
  }
64
68
  function policyStepStatus(request) {
69
+ if (request.payload.actionKind === "signer_review" && request.payload.signerPolicyHash) {
70
+ return "succeeded";
71
+ }
65
72
  if (!request.simulation) {
66
73
  return "queued";
67
74
  }
@@ -70,7 +77,9 @@ function policyStepStatus(request) {
70
77
  function approvalStepStatus(request) {
71
78
  switch (request.status) {
72
79
  case "pending": return "blocked";
80
+ case "executing":
73
81
  case "approved":
82
+ case "unknown":
74
83
  case "executed": return "succeeded";
75
84
  case "rejected": return "cancelled";
76
85
  case "expired": return "lost";
@@ -81,7 +90,9 @@ function approvalStepStatus(request) {
81
90
  function broadcastStepStatus(request) {
82
91
  switch (request.status) {
83
92
  case "pending": return "queued";
93
+ case "executing":
84
94
  case "approved": return "running";
95
+ case "unknown": return "blocked";
85
96
  case "executed": return "succeeded";
86
97
  case "failed": return request.simulation && !request.simulation.ok ? "skipped" : "failed";
87
98
  case "rejected":
@@ -94,7 +105,7 @@ function buildApprovalSteps(request) {
94
105
  return [
95
106
  {
96
107
  id: "policy",
97
- label: "Policy simulation",
108
+ label: request.payload.actionKind === "signer_review" ? "Signer policy binding" : "Policy simulation",
98
109
  status: policyStepStatus(request),
99
110
  updatedAt: request.simulation ? parseTime(request.createdAt) : undefined,
100
111
  error: request.simulation?.checks.find((check) => check.status === "fail")?.detail
@@ -108,7 +119,7 @@ function buildApprovalSteps(request) {
108
119
  },
109
120
  {
110
121
  id: "broadcast",
111
- label: "Broadcast transaction",
122
+ label: request.payload.signerArtifactKind === "domain-separated-message" ? "Complete reviewed signature" : "Broadcast transaction",
112
123
  status: broadcastStepStatus(request),
113
124
  updatedAt: request.status === "executed" || request.status === "failed" ? decisionAt : undefined,
114
125
  error: request.status === "failed" ? request.result?.error ?? request.reason : undefined
@@ -116,6 +127,9 @@ function buildApprovalSteps(request) {
116
127
  ];
117
128
  }
118
129
  function formatApprovalTaskTitle(request) {
130
+ if (request.payload.actionKind === "signer_review" && request.payload.memo?.trim()) {
131
+ return `Wallet approval: ${request.payload.memo.trim()}`;
132
+ }
119
133
  const diff = request.approvalDiff ?? request.simulation?.diff;
120
134
  const amount = diff?.amountDisplay || request.payload.amountDisplay || diff?.amount || request.payload.amount || "amount";
121
135
  const token = diff?.token || request.payload.assetSymbol || request.payload.inputSymbol || request.payload.outputSymbol || diff?.mint || request.payload.program || request.payload.contract || request.payload.chain;
@@ -5,7 +5,7 @@ import "../routing/session-key.js";
5
5
  import { resolveAccountEntry } from "../routing/account-lookup.js";
6
6
  import { createAccountListHelpers } from "../channels/plugins/account-helpers.js";
7
7
  import { hasWebCredsSync } from "./auth-store.js";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
  import path from "node:path";
10
10
 
11
11
  //#region src/web/accounts.ts
@@ -24,7 +24,7 @@ function listWhatsAppAuthDirs(cfg) {
24
24
  }).authDir);
25
25
  }
26
26
  try {
27
- const entries = fs.readdirSync(whatsappDir, { withFileTypes: true });
27
+ const entries = syncFs.readdirSync(whatsappDir, { withFileTypes: true });
28
28
  for (const entry of entries) {
29
29
  if (!entry.isDirectory()) {
30
30
  continue;
@@ -48,7 +48,7 @@ function resolveLegacyAuthDir() {
48
48
  }
49
49
  function legacyAuthExists(authDir) {
50
50
  try {
51
- return fs.existsSync(path.join(authDir, "creds.json"));
51
+ return syncFs.existsSync(path.join(authDir, "creds.json"));
52
52
  } catch {
53
53
  return false;
54
54
  }
@@ -4,10 +4,10 @@ import { info, success } from "../globals.js";
4
4
  import { defaultRuntime } from "../runtime.js";
5
5
  import { formatCliCommand } from "../cli/command-format.js";
6
6
  import "../logging.js";
7
- import fs from "node:fs";
7
+ import syncFs from "node:fs";
8
8
  import os from "node:os";
9
9
  import path from "node:path";
10
- import fs$1 from "node:fs/promises";
10
+ import fs from "node:fs/promises";
11
11
 
12
12
  //#region src/web/auth-store.ts
13
13
  const DEFAULT_WEB_AUTH_ACCOUNT_ID = "default";
@@ -65,7 +65,7 @@ function readAuthStoreLidReverseMapping(lid, opts) {
65
65
  for (const dir of dirs) {
66
66
  const mappingPath = path.join(dir, mappingFilename);
67
67
  try {
68
- const data = fs.readFileSync(mappingPath, "utf8");
68
+ const data = syncFs.readFileSync(mappingPath, "utf8");
69
69
  const phone = JSON.parse(data);
70
70
  if (phone !== null && phone !== undefined) {
71
71
  return normalizeAuthStoreE164(String(phone));
@@ -97,7 +97,7 @@ function resolveWebCredsBackupPath(authDir) {
97
97
  }
98
98
  function hasWebCredsSync(authDir) {
99
99
  try {
100
- const stats = fs.statSync(resolveWebCredsPath(authDir));
100
+ const stats = syncFs.statSync(resolveWebCredsPath(authDir));
101
101
  return stats.isFile() && stats.size > 1;
102
102
  } catch {
103
103
  return false;
@@ -105,14 +105,14 @@ function hasWebCredsSync(authDir) {
105
105
  }
106
106
  function readCredsJsonRaw(filePath) {
107
107
  try {
108
- if (!fs.existsSync(filePath)) {
108
+ if (!syncFs.existsSync(filePath)) {
109
109
  return null;
110
110
  }
111
- const stats = fs.statSync(filePath);
111
+ const stats = syncFs.statSync(filePath);
112
112
  if (!stats.isFile() || stats.size <= 1) {
113
113
  return null;
114
114
  }
115
- return fs.readFileSync(filePath, "utf-8");
115
+ return syncFs.readFileSync(filePath, "utf-8");
116
116
  } catch {
117
117
  return null;
118
118
  }
@@ -132,9 +132,9 @@ function maybeRestoreCredsFromBackup(authDir) {
132
132
  return;
133
133
  }
134
134
  JSON.parse(backupRaw);
135
- fs.copyFileSync(backupPath, credsPath);
135
+ syncFs.copyFileSync(backupPath, credsPath);
136
136
  try {
137
- fs.chmodSync(credsPath, 384);
137
+ syncFs.chmodSync(credsPath, 384);
138
138
  } catch {}
139
139
  logger.warn({ credsPath }, "restored corrupted WhatsApp creds.json from backup");
140
140
  } catch {}
@@ -144,16 +144,16 @@ async function webAuthExists(authDir = resolveDefaultWebAuthDir()) {
144
144
  maybeRestoreCredsFromBackup(resolvedAuthDir);
145
145
  const credsPath = resolveWebCredsPath(resolvedAuthDir);
146
146
  try {
147
- await fs$1.access(resolvedAuthDir);
147
+ await fs.access(resolvedAuthDir);
148
148
  } catch {
149
149
  return false;
150
150
  }
151
151
  try {
152
- const stats = await fs$1.stat(credsPath);
152
+ const stats = await fs.stat(credsPath);
153
153
  if (!stats.isFile() || stats.size <= 1) {
154
154
  return false;
155
155
  }
156
- const raw = await fs$1.readFile(credsPath, "utf-8");
156
+ const raw = await fs.readFile(credsPath, "utf-8");
157
157
  JSON.parse(raw);
158
158
  return true;
159
159
  } catch {
@@ -161,7 +161,7 @@ async function webAuthExists(authDir = resolveDefaultWebAuthDir()) {
161
161
  }
162
162
  }
163
163
  async function clearLegacyBaileysAuthState(authDir) {
164
- const entries = await fs$1.readdir(authDir, { withFileTypes: true });
164
+ const entries = await fs.readdir(authDir, { withFileTypes: true });
165
165
  const shouldDelete = (name) => {
166
166
  if (name === "oauth.json") {
167
167
  return false;
@@ -181,7 +181,7 @@ async function clearLegacyBaileysAuthState(authDir) {
181
181
  if (!shouldDelete(entry.name)) {
182
182
  return;
183
183
  }
184
- await fs$1.rm(path.join(authDir, entry.name), { force: true });
184
+ await fs.rm(path.join(authDir, entry.name), { force: true });
185
185
  }));
186
186
  }
187
187
  async function logoutWeb(params) {
@@ -195,7 +195,7 @@ async function logoutWeb(params) {
195
195
  if (params.isLegacyAuthDir) {
196
196
  await clearLegacyBaileysAuthState(resolvedAuthDir);
197
197
  } else {
198
- await fs$1.rm(resolvedAuthDir, {
198
+ await fs.rm(resolvedAuthDir, {
199
199
  recursive: true,
200
200
  force: true
201
201
  });
@@ -206,13 +206,13 @@ async function logoutWeb(params) {
206
206
  function readWebSelfId(authDir = resolveDefaultWebAuthDir()) {
207
207
  try {
208
208
  const credsPath = resolveWebCredsPath(resolveAuthStoreUserPath(authDir));
209
- if (!fs.existsSync(credsPath)) {
209
+ if (!syncFs.existsSync(credsPath)) {
210
210
  return {
211
211
  e164: null,
212
212
  jid: null
213
213
  };
214
214
  }
215
- const raw = fs.readFileSync(credsPath, "utf-8");
215
+ const raw = syncFs.readFileSync(credsPath, "utf-8");
216
216
  const parsed = JSON.parse(raw);
217
217
  const jid = parsed?.me?.id ?? null;
218
218
  const e164 = jid ? jidToE164ForAuthStore(jid, { authDir }) : null;
@@ -233,7 +233,7 @@ function readWebSelfId(authDir = resolveDefaultWebAuthDir()) {
233
233
  */
234
234
  function getWebAuthAgeMs(authDir = resolveDefaultWebAuthDir()) {
235
235
  try {
236
- const stats = fs.statSync(resolveWebCredsPath(resolveAuthStoreUserPath(authDir)));
236
+ const stats = syncFs.statSync(resolveWebCredsPath(resolveAuthStoreUserPath(authDir)));
237
237
  return Date.now() - stats.mtimeMs;
238
238
  } catch {
239
239
  return null;
@@ -16,9 +16,9 @@ import { emitHeartbeatEvent, resolveIndicatorType } from "../../infra/heartbeat-
16
16
  import { resolveHeartbeatVisibility } from "../../infra/heartbeat-visibility.js";
17
17
  import { getReplyFromConfig } from "../../auto-reply/reply/get-reply.js";
18
18
  import "../../auto-reply/reply.js";
19
- import { resolveWhatsAppHeartbeatRecipients } from "../../channels/plugins/whatsapp-heartbeat.js";
20
19
  import { formatError } from "../session.js";
21
20
  import { sendMessageWhatsApp } from "../outbound.js";
21
+ import { resolveWhatsAppHeartbeatRecipients } from "../../channels/plugins/whatsapp-heartbeat.js";
22
22
  import { newConnectionId } from "../reconnect.js";
23
23
  import { whatsappHeartbeatLog } from "./loggers.js";
24
24
  import { getSessionSnapshot } from "./session-snapshot.js";
@@ -18,11 +18,11 @@ import { formatDurationPrecise } from "../../infra/format-time/format-duration.j
18
18
  import { registerUnhandledRejectionHandler } from "../../infra/unhandled-rejections.js";
19
19
  import { getReplyFromConfig } from "../../auto-reply/reply/get-reply.js";
20
20
  import "../../auto-reply/reply.js";
21
- import { DEFAULT_WEB_MEDIA_BYTES } from "./constants.js";
21
+ import { waitForever } from "../../cli/wait.js";
22
22
  import { formatError } from "../session.js";
23
+ import { DEFAULT_WEB_MEDIA_BYTES } from "./constants.js";
23
24
  import { newConnectionId, resolveHeartbeatSeconds, resolveReconnectPolicy } from "../reconnect.js";
24
25
  import { whatsappHeartbeatLog, whatsappLog } from "./loggers.js";
25
- import { waitForever } from "../../cli/wait.js";
26
26
  import { monitorWebInbox } from "../inbound/monitor.js";
27
27
  import "../inbound.js";
28
28
  import { buildMentionConfig } from "./mentions.js";
@@ -7,7 +7,7 @@ import { redactSensitiveText } from "../logging/redact.js";
7
7
  import "../logging.js";
8
8
  import { WA_WEB_AUTH_DIR, getWebAuthAgeMs, logWebSelfId, logoutWeb, maybeRestoreCredsFromBackup, pickWebChannel, readCredsJsonRaw, readWebSelfId, resolveDefaultWebAuthDir, resolveWebCredsBackupPath, resolveWebCredsPath, webAuthExists } from "./auth-store.js";
9
9
  import { redactSensitiveUrlLikeString } from "../shared/net/redact-sensitive-url.js";
10
- import fs from "node:fs";
10
+ import syncFs from "node:fs";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, useMultiFileAuthState } from "@whiskeysockets/baileys";
13
13
  import qrcode from "qrcode-terminal";
@@ -27,9 +27,9 @@ async function safeSaveCreds(authDir, saveCreds, logger) {
27
27
  if (raw) {
28
28
  try {
29
29
  JSON.parse(raw);
30
- fs.copyFileSync(credsPath, backupPath);
30
+ syncFs.copyFileSync(credsPath, backupPath);
31
31
  try {
32
- fs.chmodSync(backupPath, 384);
32
+ syncFs.chmodSync(backupPath, 384);
33
33
  } catch {}
34
34
  } catch {}
35
35
  }
@@ -37,7 +37,7 @@ async function safeSaveCreds(authDir, saveCreds, logger) {
37
37
  try {
38
38
  await Promise.resolve(saveCreds());
39
39
  try {
40
- fs.chmodSync(resolveWebCredsPath(authDir), 384);
40
+ syncFs.chmodSync(resolveWebCredsPath(authDir), 384);
41
41
  } catch {}
42
42
  } catch (err) {
43
43
  logger.warn({ error: formatError(err) }, "failed saving WhatsApp creds");
@@ -1,35 +1,26 @@
1
- import fs from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { spawnSync } from "node:child_process";
1
+ import syncFs from "node:fs";
5
2
 
6
3
  //#region src/wizard/host-security-capability.ts
7
- function currentUserName() {
8
- return process.env.USER?.trim() || process.env.LOGNAME?.trim() || process.env.SUDO_USER?.trim() || os.userInfo().username;
9
- }
10
- function canRunHostedMaintenanceCommand(command) {
11
- const probe = spawnSync("bash", ["-lc", command], { stdio: "ignore" });
12
- return probe.status === 0;
4
+ const HOSTING_PREREQUISITES = "/etc/fased/hosting-prerequisites";
5
+ function hasRootPreparedHostingMarker() {
6
+ try {
7
+ const stat = syncFs.lstatSync(HOSTING_PREREQUISITES);
8
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.uid !== 0 || stat.nlink !== 1 || (stat.mode & 18) !== 0 || stat.size <= 0 || stat.size > 4096) {
9
+ return false;
10
+ }
11
+ const content = syncFs.readFileSync(HOSTING_PREREQUISITES, "utf8");
12
+ return /^schemaVersion=2$/m.test(content) && /^release=\d+\.\d+\.\d+$/m.test(content) && /^gatewayPort=18789$/m.test(content) && /^tailscaleDns=[a-z0-9.-]+$/m.test(content) && /^tailnetSshConfirmed=true$/m.test(content) && /^tailscaleServeReady=true$/m.test(content) && /^firewallReady=true$/m.test(content) && /^sshHardened=true$/m.test(content) && /^fail2banReady=true$/m.test(content) && /^automaticUpdatesReady=true$/m.test(content) && /^signerReady=true$/m.test(content) && /^appSudoDisabled=true$/m.test(content) && /^preparedBy=root$/m.test(content);
13
+ } catch {
14
+ return false;
15
+ }
13
16
  }
14
17
  function isHostedSecurityCapableSession(explicitFlag = false) {
15
- if (explicitFlag) {
16
- return true;
17
- }
18
18
  if (typeof process.getuid === "function" && process.getuid() === 0) {
19
19
  return true;
20
20
  }
21
- if (process.platform !== "linux") {
22
- return false;
23
- }
24
- const currentUser = currentUserName();
25
- if (currentUser) {
26
- const sudoersPath = path.join("/etc/sudoers.d", `fased-host-maintenance-${currentUser}`);
27
- if (fs.existsSync(sudoersPath)) {
28
- return true;
29
- }
30
- }
31
- return canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance tailscale-status >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance tailnet-ssh-ingress >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n /usr/local/sbin/fased-host-maintenance firewall-baseline >/dev/null 2>&1") || canRunHostedMaintenanceCommand("sudo -n systemctl status fased-gateway.service >/dev/null 2>&1");
21
+ return process.platform === "linux" && explicitFlag && process.env.FASED_HOST_ROOT_PREPARED?.trim() === "1" && hasRootPreparedHostingMarker();
32
22
  }
23
+ const __testing = { hasRootPreparedHostingMarker };
33
24
 
34
25
  //#endregion
35
26
  export { isHostedSecurityCapableSession };