@fased/fased 0.1.62 → 0.1.65

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 (342) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +44 -29
  3. package/config/dependency-ownership.json +1 -1
  4. package/config/signer-policies/README.md +58 -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 +78 -0
  10. package/config/typescript-noemit-baseline.json +680 -0
  11. package/dist/agents/auth-profiles/store.js +267 -31
  12. package/dist/agents/bash-tools.exec.js +10 -4
  13. package/dist/agents/current-model-catalog.js +3 -3
  14. package/dist/agents/memory-search.js +7 -1
  15. package/dist/agents/model-catalog-access.js +1 -2
  16. package/dist/agents/model-catalog-snapshot.js +1 -1
  17. package/dist/agents/model-catalog-source.js +1 -1
  18. package/dist/agents/model-metadata.js +1 -1
  19. package/dist/agents/model-selection.js +2 -28
  20. package/dist/agents/models-config.providers.js +6 -6
  21. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  22. package/dist/agents/pi-embedded-runner/model.js +1 -1
  23. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  24. package/dist/agents/pi-embedded-runner/run.js +2 -0
  25. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  26. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  27. package/dist/agents/pi-tools.js +2 -1
  28. package/dist/agents/sandbox/config.js +1 -1
  29. package/dist/agents/sandbox/context.js +27 -2
  30. package/dist/agents/skills/env-overrides.js +38 -28
  31. package/dist/agents/skills/trust.js +93 -0
  32. package/dist/agents/skills/workspace.js +128 -0
  33. package/dist/agents/skills-clawhub.js +36 -11
  34. package/dist/agents/skills-marketplace-scan.js +49 -0
  35. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  36. package/dist/agents/tools/mining-tool.js +1 -1
  37. package/dist/agents/tools/session-status-tool.js +1 -1
  38. package/dist/agents/tools/wallet-action-tool.js +172 -36
  39. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  40. package/dist/agents/tools/wallet-tool.js +7 -11
  41. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  42. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  43. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  44. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  45. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  46. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  47. package/dist/auto-reply/reply/model-selection.js +7 -4
  48. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  49. package/dist/brand.js +1 -1
  50. package/dist/build-info.json +3 -3
  51. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  52. package/dist/channel-web.js +2 -2
  53. package/dist/cli/gateway-cli/run.js +8 -0
  54. package/dist/cli/program/command-registry.js +1 -1
  55. package/dist/cli/program/register.onboard.js +2 -3
  56. package/dist/cli/program/register.wallet.js +16 -123
  57. package/dist/cli/providers-cli.js +1 -1
  58. package/dist/cli/sat-cli.js +129 -2
  59. package/dist/cli/update-cli/update-command.js +260 -11
  60. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  61. package/dist/commands/doctor-config-flow.js +1 -1
  62. package/dist/commands/doctor-legacy-config.js +2 -13
  63. package/dist/commands/model-picker.js +6 -6
  64. package/dist/commands/models/auth.js +1 -1
  65. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  66. package/dist/commands/onboard-auth.credentials.js +32 -8
  67. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  68. package/dist/commands/onboard-non-interactive/local.js +5 -1
  69. package/dist/commands/wallet.js +568 -1911
  70. package/dist/config/config.js +2 -2
  71. package/dist/config/io.js +64 -2
  72. package/dist/config/schema.help.js +8 -7
  73. package/dist/config/schema.labels.js +5 -4
  74. package/dist/config/zod-schema.agent-runtime.js +1 -0
  75. package/dist/config/zod-schema.js +5 -0
  76. package/dist/control-ui/assets/{app-DLil9VO1.js → app-MaQnPa5G.js} +1511 -1555
  77. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  78. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  79. package/dist/control-ui/assets/{index-DdE_NIXo.js → index-D4YMr1fA.js} +3 -3
  80. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  81. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-qMYs4aD-.js} +70 -50
  82. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  83. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  84. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  85. package/dist/control-ui/index.html +1 -1
  86. package/dist/control-ui/version.json +1 -1
  87. package/dist/daemon/systemd-system.js +56 -50
  88. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  89. package/dist/extensions/sat-mining/src/rpc-read.js +291 -84
  90. package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
  91. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  92. package/dist/extensions/sat-mining/src/solana-submit.js +1274 -390
  93. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  94. package/dist/federation/auto-connect.js +98 -8
  95. package/dist/federation/marketplace-capability-adapter.js +33 -7
  96. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  97. package/dist/federation/marketplace-delivery.js +351 -215
  98. package/dist/federation/marketplace-direct-payment.js +272 -141
  99. package/dist/federation/marketplace-escrow.js +607 -249
  100. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  101. package/dist/federation/offers.js +9 -7
  102. package/dist/federation/peer-auth-v2.js +529 -0
  103. package/dist/gateway/a2a-http.js +425 -96
  104. package/dist/gateway/a2a-settlement.js +259 -153
  105. package/dist/gateway/a2a-task-store.js +524 -0
  106. package/dist/gateway/auth.js +38 -2
  107. package/dist/gateway/config-reload.js +46 -33
  108. package/dist/gateway/durable-capacity.js +31 -0
  109. package/dist/gateway/federation-http.js +540 -135
  110. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  111. package/dist/gateway/federation-marketplace.js +535 -230
  112. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  113. package/dist/gateway/security-path.js +1 -1
  114. package/dist/gateway/server-http.js +1084 -1205
  115. package/dist/gateway/server-methods/models.js +1 -1
  116. package/dist/gateway/server-methods/secrets.js +40 -0
  117. package/dist/gateway/server-methods.js +1 -2
  118. package/dist/gateway/server-reload-handlers.js +196 -66
  119. package/dist/gateway/server-runtime-config.js +1 -1
  120. package/dist/gateway/server-secrets-runtime.js +288 -0
  121. package/dist/gateway/server.impl.js +73 -42
  122. package/dist/gateway/sessions-patch.js +3 -5
  123. package/dist/index.js +4 -2
  124. package/dist/infra/fasedhub.js +64 -1
  125. package/dist/infra/local-source-paired-update.js +538 -0
  126. package/dist/infra/restart.js +41 -10
  127. package/dist/infra/update-runner.js +96 -0
  128. package/dist/light-update-status.js +11 -11
  129. package/dist/memory/backend-config.js +2 -1
  130. package/dist/memory/session-files.js +16 -2
  131. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  132. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  133. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  134. package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-I4IngVlJ.js} +27 -27
  135. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  136. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  137. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  138. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  139. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  140. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  141. package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DLQ6_lLK.js} +1 -1
  142. package/dist/plugin-sdk/command-status.d.ts +2 -2
  143. package/dist/plugin-sdk/command-status.js +27 -27
  144. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  145. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  146. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  147. package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-D_8FVI1C.js} +6798 -3695
  148. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  149. package/dist/plugin-sdk/discord.d.ts +6 -6
  150. package/dist/plugin-sdk/discord.js +19 -19
  151. package/dist/plugin-sdk/file-lock.js +35 -4
  152. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  153. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  154. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  155. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  156. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  157. package/dist/plugin-sdk/index.d.ts +21 -39
  158. package/dist/plugin-sdk/index.js +29 -29
  159. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  160. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  161. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  162. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  163. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  164. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  165. package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-B4KF4Kpo.js} +31 -31
  166. package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-Bb6x1KAG.js} +32 -32
  167. package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DCTO8JkL.js} +27 -27
  168. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  169. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  170. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  171. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  172. package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-DHPDFZbC.d.ts} +2 -2
  173. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  174. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  175. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  176. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  177. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  178. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  179. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  180. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  181. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  182. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  183. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  184. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  185. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  186. package/dist/plugin-sdk/sat-runtime.d.ts +565 -309
  187. package/dist/plugin-sdk/sat-runtime.js +29 -29
  188. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  189. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  190. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  191. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  192. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  193. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  194. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  195. package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BHmvqgjH.js} +39 -39
  196. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  197. package/dist/plugin-sdk/slack.d.ts +6 -6
  198. package/dist/plugin-sdk/slack.js +9 -9
  199. package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-By5AcorL.js} +3 -3
  200. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  201. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  202. package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-DGnBz1YT.js} +30 -30
  203. package/dist/plugin-sdk/telegram.d.ts +6 -6
  204. package/dist/plugin-sdk/telegram.js +8 -8
  205. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  206. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  207. package/dist/plugin-sdk/tmp-fased-dir-EJGTmL1Q.d.ts +486 -0
  208. package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-BdwdFCD6.d.ts} +2 -3
  209. package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-BrCpYMxn.d.ts} +2 -2
  210. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  211. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  212. package/dist/plugin-sdk/{web-CInY-lCv.js → web-DUJwrTYs.js} +32 -32
  213. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  214. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  215. package/dist/plugin-sdk/whatsapp.d.ts +13 -13
  216. package/dist/plugin-sdk/whatsapp.js +12 -12
  217. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  218. package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
  219. package/dist/providers/refresh.js +1 -1
  220. package/dist/providers/registry.js +1 -1
  221. package/dist/secrets/apply.js +1 -1
  222. package/dist/secrets/runtime.js +1 -1
  223. package/dist/wallet/external-submission-ledger.js +376 -0
  224. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  225. package/dist/wallet/local-socket-signer-archive.js +30 -0
  226. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  227. package/dist/wallet/local-socket-signer-policy.js +166 -0
  228. package/dist/wallet/local-socket-signer-protocol.js +578 -117
  229. package/dist/wallet/native-signer-wallet-id.js +25 -0
  230. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  231. package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
  232. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  233. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  234. package/dist/wallet/signer-network-admin.js +184 -0
  235. package/dist/wallet/signer-protocol-v2.generated.js +92 -0
  236. package/dist/wallet/solana-bond-signing.js +157 -69
  237. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  238. package/dist/wallet/solana-swap.js +520 -64
  239. package/dist/wallet/solana-transaction-inspection.js +106 -4
  240. package/dist/wallet/solana-trigger.js +658 -320
  241. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  242. package/dist/wallet/wallet-approval-auth.js +17 -28
  243. package/dist/wallet/wallet-atomic-state.js +53 -0
  244. package/dist/wallet/wallet-canary.js +0 -1
  245. package/dist/wallet/wallet-inbound-events.js +16 -11
  246. package/dist/wallet/wallet-policy-simulation.js +1 -1
  247. package/dist/wallet/wallet-policy.js +93 -37
  248. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  249. package/dist/wallet/wallet-provider-registry.js +57 -44
  250. package/dist/wallet/wallet-provider-resolver.js +62 -63
  251. package/dist/wallet/wallet-runtime-config.js +28 -41
  252. package/dist/wallet/wallet-secrets-store.js +22 -0
  253. package/dist/wallet/wallet-send-approvals.js +1891 -589
  254. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  255. package/dist/wallet/wallet-settlement-links.js +14 -13
  256. package/dist/wallet/wallet-standard-review.js +353 -0
  257. package/dist/wallet/wallet-status.js +0 -9
  258. package/dist/wallet/wallet-task-ledger.js +16 -2
  259. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  260. package/dist/web/auto-reply/monitor.js +2 -2
  261. package/dist/wizard/host-security-capability.js +14 -23
  262. package/dist/wizard/onboarding.finalize.js +63 -184
  263. package/dist/wizard/onboarding.host-security.js +117 -1367
  264. package/dist/wizard/onboarding.js +172 -217
  265. package/dist/wizard/onboarding.wallet.js +232 -785
  266. package/extensions/acpx/package.json +1 -1
  267. package/extensions/bluebubbles/package.json +1 -1
  268. package/extensions/copilot-proxy/package.json +1 -1
  269. package/extensions/diagnostics-otel/package.json +1 -1
  270. package/extensions/fased-federation/package.json +1 -1
  271. package/extensions/google-gemini-cli-auth/package.json +1 -1
  272. package/extensions/imessage/package.json +1 -1
  273. package/extensions/irc/package.json +1 -1
  274. package/extensions/line/package.json +1 -1
  275. package/extensions/llm-task/package.json +1 -1
  276. package/extensions/lobster/package.json +1 -1
  277. package/extensions/matrix/CHANGELOG.md +18 -0
  278. package/extensions/matrix/package.json +1 -1
  279. package/extensions/mattermost/package.json +1 -1
  280. package/extensions/memory-core/package.json +2 -2
  281. package/extensions/memory-lancedb/package.json +1 -1
  282. package/extensions/minimax-portal-auth/package.json +1 -1
  283. package/extensions/msteams/CHANGELOG.md +18 -0
  284. package/extensions/msteams/package.json +1 -1
  285. package/extensions/nextcloud-talk/package.json +1 -1
  286. package/extensions/nostr/CHANGELOG.md +18 -0
  287. package/extensions/nostr/package.json +1 -1
  288. package/extensions/open-prose/package.json +1 -1
  289. package/extensions/sat-mining/index.ts +587 -154
  290. package/extensions/sat-mining/package.json +1 -1
  291. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  292. package/extensions/sat-mining/src/audit-store.ts +91 -5
  293. package/extensions/sat-mining/src/claim-service.ts +85 -14
  294. package/extensions/sat-mining/src/client.ts +13 -0
  295. package/extensions/sat-mining/src/config.ts +9 -0
  296. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  297. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  298. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  299. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  300. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  301. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  302. package/extensions/sat-mining/src/rpc-read.ts +431 -106
  303. package/extensions/sat-mining/src/runtime.ts +16 -0
  304. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  305. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  306. package/extensions/sat-mining/src/solana-submit.ts +1544 -436
  307. package/extensions/sat-mining/src/submission-ledger.ts +434 -0
  308. package/extensions/signal/package.json +1 -1
  309. package/extensions/synology-chat/package.json +1 -1
  310. package/extensions/tlon/package.json +1 -1
  311. package/extensions/twitch/CHANGELOG.md +18 -0
  312. package/extensions/twitch/package.json +1 -1
  313. package/extensions/voice-call/CHANGELOG.md +18 -0
  314. package/extensions/voice-call/package.json +1 -1
  315. package/extensions/zalo/CHANGELOG.md +18 -0
  316. package/extensions/zalo/package.json +1 -1
  317. package/extensions/zalouser/CHANGELOG.md +18 -0
  318. package/extensions/zalouser/package.json +1 -1
  319. package/install.sh +4951 -0
  320. package/package.json +23 -5
  321. package/scripts/fased-host-updater.mjs +1421 -0
  322. package/scripts/fased-host-updaterctl.mjs +186 -0
  323. package/scripts/fased-managed-service.sh +36 -0
  324. package/scripts/fased-managed-updater.mjs +3065 -156
  325. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  326. package/scripts/fased-signer-network-hosting.sh +143 -0
  327. package/scripts/fased-signer-owner-policy.mjs +1442 -0
  328. package/scripts/fased-signer-policy-hosting.sh +50 -0
  329. package/scripts/fased-signer-policy-local.sh +26 -0
  330. package/scripts/hosted-release-manifest.mjs +185 -0
  331. package/scripts/install-fased-signerd.sh +183 -108
  332. package/scripts/install-managed-runtime.mjs +212 -10
  333. package/scripts/managed-runtime-layout.mjs +75 -3
  334. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  335. package/scripts/start-managed.sh +173 -360
  336. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  337. package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
  338. package/dist/wallet/local-socket-signer-broker.js +0 -224
  339. package/dist/wallet/local-socket-signer-custody.js +0 -42
  340. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  341. package/dist/wallet/providers/privy-adapter.js +0 -80
  342. package/dist/wallet/wallet-custody.js +0 -1836
@@ -17,7 +17,8 @@ import { startDiagnosticHeartbeat, stopDiagnosticHeartbeat } from "../logging/di
17
17
  import { getTotalQueueSize } from "../process/command-queue.js";
18
18
  import { clearAgentRunContext, onAgentEvent } from "../infra/agent-events.js";
19
19
  import { initSubagentRegistry } from "../agents/subagent-registry.js";
20
- import { resolveLocalSignerMaterialRootDir, resolveWalletRuntimeConfig } from "../wallet/wallet-runtime-config.js";
20
+ import { resolveWalletRuntimeConfig } from "../wallet/wallet-runtime-config.js";
21
+ import { readWalletProviderRegistry } from "../wallet/wallet-provider-registry.js";
21
22
  import { createWalletProviderAdapter, resolveWalletProviderId } from "../wallet/wallet-provider-resolver.js";
22
23
  import { getTotalPendingReplies } from "../auto-reply/reply/dispatcher-registry.js";
23
24
  import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js";
@@ -38,6 +39,7 @@ import { createDefaultDeps } from "../cli/deps.js";
38
39
  import { ensureFasedAgentCliOnPath } from "../infra/path-env.js";
39
40
  import { createExecApprovalForwarder } from "../infra/exec-approval-forwarder.js";
40
41
  import { scheduleGatewayUpdateCheck } from "../infra/update-startup.js";
42
+ import { clearSecretsRuntimeSnapshot } from "../secrets/runtime.js";
41
43
  import { runOnboardingWizard } from "../wizard/onboarding.js";
42
44
  import { startGatewayConfigReloader } from "./config-reload.js";
43
45
  import { ExecApprovalManager } from "./exec-approval-manager.js";
@@ -54,6 +56,8 @@ import { startGatewayMaintenanceTimers } from "./server-maintenance.js";
54
56
  import { GATEWAY_EVENTS, listGatewayMethods } from "./server-methods-list.js";
55
57
  import { coreGatewayHandlers } from "./server-methods.js";
56
58
  import { createExecApprovalHandlers } from "./server-methods/exec-approval.js";
59
+ import { createGatewaySecretsRuntimeController, sanitizeGatewaySecretsRuntimeError } from "./server-secrets-runtime.js";
60
+ import { createSecretsHandlers } from "./server-methods/secrets.js";
57
61
  import { hasConnectedMobileNode } from "./server-mobile-nodes.js";
58
62
  import { createNodeSubscriptionManager } from "./server-node-subscriptions.js";
59
63
  import { loadGatewayPlugins } from "./server-plugins.js";
@@ -68,7 +72,6 @@ import { createWizardSessionTracker } from "./server-wizard-sessions.js";
68
72
  import { attachGatewayWsHandlers } from "./server-ws-runtime.js";
69
73
  import { loadGatewayTlsRuntime } from "./server/tls.js";
70
74
  import { createSessionEventSubscriberRegistry, createSessionMessageSubscriberRegistry } from "./session-event-subscribers.js";
71
- import syncFs from "node:fs";
72
75
  import path from "node:path";
73
76
 
74
77
  //#region src/gateway/server.impl.ts
@@ -88,25 +91,6 @@ const logWsControl = log.child("ws");
88
91
  const gatewayRuntime = runtimeForLogger(log);
89
92
  const canvasRuntime = runtimeForLogger(logCanvas);
90
93
  const LOCAL_SIGNER_STARTUP_RECOVERY_TIMEOUT_MS = 2e3;
91
- function hasConfiguredLocalSignerKeystoreMaterial(env) {
92
- for (const [key, rawValue] of Object.entries(env)) {
93
- if (typeof rawValue !== "string" || rawValue.trim().length === 0) {
94
- continue;
95
- }
96
- if (key === "FASED_WALLET_SOLANA_KEYSTORE_PATH" || key.startsWith("FASED_WALLET_SOLANA_KEYSTORE_PATH__")) {
97
- return true;
98
- }
99
- }
100
- try {
101
- const materialDir = resolveLocalSignerMaterialRootDir(env);
102
- if (!syncFs.existsSync(materialDir)) {
103
- return false;
104
- }
105
- return syncFs.readdirSync(materialDir, { withFileTypes: true }).some((entry) => entry.isFile() && /^keystore-solana(?:-.+)?\.v1\.enc$/i.test(entry.name));
106
- } catch {
107
- return false;
108
- }
109
- }
110
94
  async function ensureLocalSignerReadyAtGatewayStart(cfg) {
111
95
  const effectiveEnv = {
112
96
  ...process.env,
@@ -116,8 +100,8 @@ async function ensureLocalSignerReadyAtGatewayStart(cfg) {
116
100
  if (providerId !== "local-socket-signer") {
117
101
  return;
118
102
  }
119
- if (!hasConfiguredLocalSignerKeystoreMaterial(effectiveEnv)) {
120
- log.debug("local signer startup check skipped: no self-hosted signer keystore material found");
103
+ if (!readWalletProviderRegistry(effectiveEnv).wallets.some((wallet) => wallet.providerId === "local-socket-signer")) {
104
+ log.debug("local signer startup check skipped: no signer-owned wallet is registered");
121
105
  return;
122
106
  }
123
107
  const wallet = resolveWalletRuntimeConfig(cfg, effectiveEnv);
@@ -152,6 +136,14 @@ async function ensureLocalSignerReadyAtGatewayStart(cfg) {
152
136
  }
153
137
  }
154
138
  async function startGatewayServer(port = 18789, opts = {}) {
139
+ try {
140
+ return await startGatewayServerInternal(port, opts);
141
+ } catch (error) {
142
+ clearSecretsRuntimeSnapshot();
143
+ throw error;
144
+ }
145
+ }
146
+ async function startGatewayServerInternal(port, opts) {
155
147
  const minimalTestGateway = process.env.VITEST === "1" && process.env.FASED_TEST_MINIMAL_GATEWAY === "1";
156
148
  process.env.FASED_GATEWAY_PORT = String(port);
157
149
  logAcceptedEnvOption({
@@ -197,6 +189,19 @@ async function startGatewayServer(port = 18789, opts = {}) {
197
189
  log.warn(`gateway: failed to persist plugin auto-enable changes: ${String(err)}`);
198
190
  }
199
191
  }
192
+ configSnapshot = await startupTrace.measure("config.secrets-source", () => readConfigFileSnapshot());
193
+ if (configSnapshot.exists && !configSnapshot.valid) {
194
+ const issues = configSnapshot.issues.map((issue) => `${issue.path || "<root>"}: ${issue.message}`).join("\n");
195
+ throw new Error(`Invalid config at ${configSnapshot.path}.\n${issues || "Unknown validation issue."}\nRun "${formatCliCommand("fased doctor")}" to repair, then retry.`);
196
+ }
197
+ const secretsRuntime = createGatewaySecretsRuntimeController({
198
+ readConfigSnapshot: readConfigFileSnapshot,
199
+ log: logReload
200
+ });
201
+ const startupSecretsSnapshot = await startupTrace.measure("secrets.activate", () => secretsRuntime.activateStartup(configSnapshot)).catch((error) => {
202
+ const safe = sanitizeGatewaySecretsRuntimeError(error);
203
+ throw new Error(`Startup failed: required secrets are unavailable (${safe.code}). ${safe.message}`);
204
+ });
200
205
  const cfgAtStart = startupTrace.measureSync("config.load", () => loadConfig());
201
206
  const diagnosticsEnabled = isDiagnosticsEnabled(cfgAtStart);
202
207
  if (diagnosticsEnabled) {
@@ -534,6 +539,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
534
539
  const execApprovalForwarder = createExecApprovalForwarder();
535
540
  const execApprovalHandlers = createExecApprovalHandlers(execApprovalManager, { forwarder: execApprovalForwarder });
536
541
  Object.assign(extraGatewayHandlers, execApprovalHandlers);
542
+ Object.assign(extraGatewayHandlers, createSecretsHandlers({ reloadSecrets: secretsRuntime.reloadFromConfig }));
537
543
  const canvasHostServerPort = canvasHostServer?.port;
538
544
  startupTrace.measureSync("ws.attach", () => {
539
545
  attachGatewayWsHandlers({
@@ -653,7 +659,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
653
659
  }
654
660
  }
655
661
  const configReloader = minimalTestGateway ? { stop: async () => {} } : startupTrace.measureSync("config-reload.start", () => {
656
- const { applyHotReload, requestGatewayRestart } = createGatewayReloadHandlers({
662
+ const { cancelPendingGatewayRestart, createHotReloadTransaction, requestGatewayRestart } = createGatewayReloadHandlers({
657
663
  deps,
658
664
  broadcast,
659
665
  getState: () => ({
@@ -679,10 +685,29 @@ async function startGatewayServer(port = 18789, opts = {}) {
679
685
  logReload
680
686
  });
681
687
  return startGatewayConfigReloader({
682
- initialConfig: cfgAtStart,
688
+ initialConfig: startupSecretsSnapshot.sourceConfig,
683
689
  readSnapshot: readConfigFileSnapshot,
684
- onHotReload: applyHotReload,
685
- onRestart: requestGatewayRestart,
690
+ onSourceRevision: () => {
691
+ cancelPendingGatewayRestart();
692
+ },
693
+ onStop: () => {
694
+ cancelPendingGatewayRestart();
695
+ },
696
+ onHotReload: async (plan, _nextConfig, snapshot) => {
697
+ const transaction = createHotReloadTransaction(plan);
698
+ await secretsRuntime.activateHotReload(snapshot, {
699
+ apply: async (preparedConfig) => {
700
+ await transaction.apply(preparedConfig);
701
+ },
702
+ rollback: async (previousConfig) => {
703
+ await transaction.rollback(previousConfig);
704
+ }
705
+ });
706
+ },
707
+ onRestart: async (plan, nextConfig, snapshot) => {
708
+ await secretsRuntime.validateRestart(snapshot);
709
+ requestGatewayRestart(plan, nextConfig);
710
+ },
686
711
  log: {
687
712
  info: (msg) => logReload.info(msg),
688
713
  warn: (msg) => logReload.warn(msg),
@@ -722,22 +747,28 @@ async function startGatewayServer(port = 18789, opts = {}) {
722
747
  }]
723
748
  });
724
749
  return { close: async (opts) => {
725
- await runGlobalGatewayStopSafely({
726
- event: { reason: opts?.reason ?? "gateway stopping" },
727
- ctx: { port },
728
- onError: (err) => log.warn(`gateway_stop hook failed: ${String(err)}`)
729
- });
730
- if (diagnosticsEnabled) {
731
- stopDiagnosticHeartbeat();
732
- stopDiagnosticStabilityRecorder();
733
- }
734
- if (skillsRefreshTimer) {
735
- clearTimeout(skillsRefreshTimer);
736
- skillsRefreshTimer = null;
750
+ try {
751
+ await runGlobalGatewayStopSafely({
752
+ event: { reason: opts?.reason ?? "gateway stopping" },
753
+ ctx: { port },
754
+ onError: (err) => log.warn(`gateway_stop hook failed: ${String(err)}`)
755
+ });
756
+ await configReloader.stop().catch(() => {});
757
+ await secretsRuntime.shutdown();
758
+ if (diagnosticsEnabled) {
759
+ stopDiagnosticHeartbeat();
760
+ stopDiagnosticStabilityRecorder();
761
+ }
762
+ if (skillsRefreshTimer) {
763
+ clearTimeout(skillsRefreshTimer);
764
+ skillsRefreshTimer = null;
765
+ }
766
+ skillsChangeUnsub();
767
+ authRateLimiter?.dispose();
768
+ await close(opts);
769
+ } finally {
770
+ await secretsRuntime.shutdown();
737
771
  }
738
- skillsChangeUnsub();
739
- authRateLimiter?.dispose();
740
- await close(opts);
741
772
  } };
742
773
  }
743
774
 
@@ -3,8 +3,7 @@ import { normalizeElevatedLevel, normalizeReasoningLevel, normalizeUsageDisplay
3
3
  import { isSubagentSessionKey, parseAgentSessionKey } from "../sessions/session-key-utils.js";
4
4
  import { normalizeAgentId } from "../routing/session-key.js";
5
5
  import { resolveDefaultAgentId } from "../agents/agent-scope.js";
6
- import { isStandardProviderModelRef } from "../providers/registry.js";
7
- import { modelKey, resolveAllowedModelRef, resolveDefaultModelForAgent, resolveSubagentConfiguredModelSelection } from "../agents/model-selection.js";
6
+ import { normalizeProviderId, resolveAllowedModelRef, resolveDefaultModelForAgent, resolveSubagentConfiguredModelSelection } from "../agents/model-selection.js";
8
7
  import { parseSessionLabel } from "../sessions/session-label.js";
9
8
  import { ErrorCodes, errorShape } from "./protocol/schema/error-codes.js";
10
9
  import "./protocol/index.js";
@@ -272,13 +271,12 @@ async function applySessionsPatchToStore(params) {
272
271
  catalog,
273
272
  raw: trimmed,
274
273
  defaultProvider: resolvedDefault.provider,
275
- defaultModel: subagentModelHint ?? resolvedDefault.model,
276
- additionalAllowedProviders: params.additionalAllowedModelProviders
274
+ defaultModel: subagentModelHint ?? resolvedDefault.model
277
275
  });
278
276
  if ("error" in resolved) {
279
277
  return invalid(resolved.error);
280
278
  }
281
- if (params.additionalAllowedModelProviders && !catalog.some((entry) => modelKey(entry.provider, entry.id) === modelKey(resolved.ref.provider, resolved.ref.model)) && !isStandardProviderModelRef(resolved.key)) {
279
+ if (params.additionalAllowedModelProviders && !new Set([...params.additionalAllowedModelProviders].map((provider) => normalizeProviderId(provider)).filter(Boolean)).has(normalizeProviderId(resolved.ref.provider))) {
282
280
  return invalid(`Model "${resolved.key}" is not available for signed-in providers.`);
283
281
  }
284
282
  const isDefault = resolved.ref.provider === resolvedDefault.provider && resolved.ref.model === resolvedDefault.model;
package/dist/index.js CHANGED
@@ -22,8 +22,6 @@ import { createDefaultDeps } from "./cli/deps.js";
22
22
  import { getReplyFromConfig } from "./auto-reply/reply/get-reply.js";
23
23
  import "./auto-reply/reply.js";
24
24
  import { waitForever } from "./cli/wait.js";
25
- import { monitorWebChannel } from "./web/auto-reply/monitor.js";
26
- import "./channel-web.js";
27
25
  import { isMainModule } from "./infra/is-main.js";
28
26
  import { ensureFasedAgentCliOnPath } from "./infra/path-env.js";
29
27
  import { buildProgram } from "./cli/program/build-program.js";
@@ -38,6 +36,10 @@ ensureFasedAgentCliOnPath();
38
36
  enableConsoleCapture();
39
37
  assertSupportedRuntime();
40
38
  const program = buildProgram();
39
+ const monitorWebChannel = async (...args) => {
40
+ const channelWeb = await import("./channel-web.js");
41
+ return await channelWeb.monitorWebChannel(...args);
42
+ };
41
43
  const isMain = isMainModule({ currentFile: fileURLToPath(import.meta.url) });
42
44
  if (isMain) {
43
45
  installUnhandledRejectionHandler();
@@ -7,6 +7,7 @@ import { createHash } from "node:crypto";
7
7
  //#region src/infra/fasedhub.ts
8
8
  const DEFAULT_CLAWHUB_REGISTRY = "https://clawhub.com";
9
9
  const DEFAULT_FETCH_TIMEOUT_MS = 3e4;
10
+ const MAX_SKILL_ARCHIVE_BYTES = 25 * 1024 * 1024;
10
11
  var FasedHubRequestError = class extends Error {
11
12
  constructor(params) {
12
13
  super(`ClawHub ${params.path} failed (${params.status}): ${params.body}`);
@@ -123,6 +124,61 @@ function formatSha256Integrity(bytes) {
123
124
  const digest = createHash("sha256").update(bytes).digest("base64");
124
125
  return `sha256-${digest}`;
125
126
  }
127
+ function normalizeExpectedSha256(value) {
128
+ const normalized = value?.trim().toLowerCase();
129
+ return normalized && /^[a-f0-9]{64}$/u.test(normalized) ? normalized : undefined;
130
+ }
131
+ function sha256HexFromIntegrity(value) {
132
+ const normalized = value?.trim();
133
+ if (!normalized?.startsWith("sha256-")) {
134
+ return undefined;
135
+ }
136
+ try {
137
+ const digest = Buffer.from(normalized.slice("sha256-".length), "base64");
138
+ return digest.length === 32 ? digest.toString("hex") : undefined;
139
+ } catch {
140
+ return undefined;
141
+ }
142
+ }
143
+ async function readBoundedResponseBytes(response, maxBytes) {
144
+ const declaredLength = Number(response.headers.get("content-length"));
145
+ if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {
146
+ throw new Error(`ClawHub skill archive exceeds the ${maxBytes}-byte download limit`);
147
+ }
148
+ if (!response.body) {
149
+ const bytes = new Uint8Array(await response.arrayBuffer());
150
+ if (bytes.byteLength > maxBytes) {
151
+ throw new Error(`ClawHub skill archive exceeds the ${maxBytes}-byte download limit`);
152
+ }
153
+ return bytes;
154
+ }
155
+ const chunks = [];
156
+ const reader = response.body.getReader();
157
+ let total = 0;
158
+ try {
159
+ while (true) {
160
+ const { done, value } = await reader.read();
161
+ if (done) {
162
+ break;
163
+ }
164
+ total += value.byteLength;
165
+ if (total > maxBytes) {
166
+ await reader.cancel();
167
+ throw new Error(`ClawHub skill archive exceeds the ${maxBytes}-byte download limit`);
168
+ }
169
+ chunks.push(value);
170
+ }
171
+ } finally {
172
+ reader.releaseLock();
173
+ }
174
+ const bytes = new Uint8Array(total);
175
+ let offset = 0;
176
+ for (const chunk of chunks) {
177
+ bytes.set(chunk, offset);
178
+ offset += chunk.byteLength;
179
+ }
180
+ return bytes;
181
+ }
126
182
  function sanitizeTempFileName(fileName) {
127
183
  const base = path.basename(fileName).replace(/[^a-zA-Z0-9._-]+/g, "-");
128
184
  const normalized = base.replace(/^-+|-+$/g, "");
@@ -193,7 +249,12 @@ async function downloadFasedHubSkillArchive(params) {
193
249
  body: await readErrorBody(response)
194
250
  });
195
251
  }
196
- const bytes = new Uint8Array(await response.arrayBuffer());
252
+ const bytes = await readBoundedResponseBytes(response, MAX_SKILL_ARCHIVE_BYTES);
253
+ const sha256 = createHash("sha256").update(bytes).digest("hex");
254
+ const expectedSha256 = normalizeExpectedSha256(params.expectedSha256) ?? sha256HexFromIntegrity(params.expectedIntegrity);
255
+ if (expectedSha256 && expectedSha256 !== sha256) {
256
+ throw new Error(`ClawHub skill archive digest mismatch: expected ${expectedSha256}, received ${sha256}`);
257
+ }
197
258
  const target = await createTempDownloadTarget({
198
259
  prefix: "clawhub-skill",
199
260
  fileName: `${params.slug}.zip`
@@ -202,6 +263,8 @@ async function downloadFasedHubSkillArchive(params) {
202
263
  return {
203
264
  archivePath: target.path,
204
265
  integrity: formatSha256Integrity(bytes),
266
+ sha256,
267
+ integrityVerified: Boolean(expectedSha256),
205
268
  cleanup: target.cleanup
206
269
  };
207
270
  }