@fased/fased 0.1.62 → 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 (341) hide show
  1. package/CHANGELOG.md +32 -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/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-bR-fO5ty.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-ckCxHwjy.js} +3 -3
  80. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  81. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  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 +235 -67
  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 +1038 -397
  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-BYxAt775.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-DIRHG2gJ.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-BOT7kHb6.js} +6779 -3696
  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-BCFDaqJ-.js} +31 -31
  166. package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
  167. package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.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-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  172. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  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 +549 -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-BUTt8cxK.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-D0wHVqjt.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-CC_qN4v0.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-xOTGlzBE.d.ts +486 -0
  208. package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
  209. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  210. package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -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-BXsJ1vqe.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 +561 -118
  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 +90 -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 +90 -36
  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 +12 -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 +12 -0
  284. package/extensions/msteams/package.json +1 -1
  285. package/extensions/nextcloud-talk/package.json +1 -1
  286. package/extensions/nostr/CHANGELOG.md +12 -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 +498 -153
  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 +50 -5
  293. package/extensions/sat-mining/src/claim-service.ts +85 -14
  294. package/extensions/sat-mining/src/config.ts +9 -0
  295. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  296. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  297. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  298. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  299. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  300. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  301. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  302. package/extensions/sat-mining/src/runtime.ts +14 -0
  303. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  304. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  305. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  306. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  307. package/extensions/signal/package.json +1 -1
  308. package/extensions/synology-chat/package.json +1 -1
  309. package/extensions/tlon/package.json +1 -1
  310. package/extensions/twitch/CHANGELOG.md +12 -0
  311. package/extensions/twitch/package.json +1 -1
  312. package/extensions/voice-call/CHANGELOG.md +12 -0
  313. package/extensions/voice-call/package.json +1 -1
  314. package/extensions/zalo/CHANGELOG.md +12 -0
  315. package/extensions/zalo/package.json +1 -1
  316. package/extensions/zalouser/CHANGELOG.md +12 -0
  317. package/extensions/zalouser/package.json +1 -1
  318. package/install.sh +4955 -0
  319. package/package.json +23 -5
  320. package/scripts/fased-host-updater.mjs +1421 -0
  321. package/scripts/fased-host-updaterctl.mjs +186 -0
  322. package/scripts/fased-managed-service.sh +36 -0
  323. package/scripts/fased-managed-updater.mjs +3065 -156
  324. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  325. package/scripts/fased-signer-network-hosting.sh +143 -0
  326. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  327. package/scripts/fased-signer-policy-hosting.sh +50 -0
  328. package/scripts/fased-signer-policy-local.sh +26 -0
  329. package/scripts/hosted-release-manifest.mjs +185 -0
  330. package/scripts/install-fased-signerd.sh +183 -108
  331. package/scripts/install-managed-runtime.mjs +212 -10
  332. package/scripts/managed-runtime-layout.mjs +75 -3
  333. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  334. package/scripts/start-managed.sh +169 -360
  335. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  336. package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
  337. package/dist/wallet/local-socket-signer-broker.js +0 -224
  338. package/dist/wallet/local-socket-signer-custody.js +0 -42
  339. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  340. package/dist/wallet/providers/privy-adapter.js +0 -80
  341. package/dist/wallet/wallet-custody.js +0 -1836
@@ -0,0 +1,90 @@
1
+ //#region src/wallet/signer-protocol-v2.generated.ts
2
+ const SIGNER_PROTOCOL_V2 = {
3
+ protocol: {
4
+ current: 2,
5
+ min: 2,
6
+ max: 2
7
+ },
8
+ nativeFeeReservationLamports: 5e6,
9
+ intentTypes: [
10
+ "solana.nativeTransfer",
11
+ "solana.splTransferChecked",
12
+ "solana.satAction",
13
+ "solana.vaultBondAction",
14
+ "federation.bondChallenge",
15
+ "solana.jupiter.swap",
16
+ "solana.jupiter.trigger.create",
17
+ "solana.jupiter.trigger.cancel"
18
+ ],
19
+ operationStates: [
20
+ "reserved",
21
+ "broadcast",
22
+ "confirmed",
23
+ "failed",
24
+ "unknown"
25
+ ],
26
+ features: [
27
+ "failClosedPolicies",
28
+ "policyHashes",
29
+ "applicationPolicyTightening",
30
+ "vaultReviewedOnly",
31
+ "durableCaps",
32
+ "atomicMultiAssetCaps",
33
+ "signerControlledNativeFeeCaps",
34
+ "atomicIdempotency",
35
+ "ambiguousBroadcastReconciliation",
36
+ "signerOwnedKeys",
37
+ "signerOwnedSuccessorRotation",
38
+ "permanentRetiredWalletPolicies",
39
+ "signerOwnedRPC",
40
+ "typedSolanaTransactions",
41
+ "typedA2aPaymentMemos",
42
+ "typedA2aRefundMemos",
43
+ "idempotentAssociatedTokenCreation",
44
+ "typedSATActions",
45
+ "typedVaultBondActions",
46
+ "domainSeparatedFederationBondChallenges",
47
+ "federationBondChallengeWrapperV2",
48
+ "signerOwnedWebAuthn",
49
+ "signerOwnedWebAuthnCredentialRevocation",
50
+ "singleUseReviewedAuthorization",
51
+ "typedJupiterSemantics",
52
+ "signerOwnedReviewPrepareExecute",
53
+ "exactPreparedTransactions",
54
+ "legacyOnlyJupiterTransactions",
55
+ "reviewedVaultBondActions",
56
+ "reviewedFederationBondChallenges",
57
+ "signerOwnedStateRecheck",
58
+ "durableReviewAuthorization",
59
+ "signerOwnedJupiterTriggerV2",
60
+ "signerOwnedJupiterTriggerHistory",
61
+ "jupiterTriggerSecretsNeverCrossSocket",
62
+ "jupiterTriggerDurablePhases"
63
+ ]
64
+ };
65
+ const SIGNER_PROTOCOL_V2_REQUIRED_CLIENT_FEATURES = [
66
+ "failClosedPolicies",
67
+ "policyHashes",
68
+ "applicationPolicyTightening",
69
+ "durableCaps",
70
+ "atomicMultiAssetCaps",
71
+ "signerControlledNativeFeeCaps",
72
+ "atomicIdempotency",
73
+ "ambiguousBroadcastReconciliation",
74
+ "signerOwnedKeys",
75
+ "signerOwnedRPC",
76
+ "typedSolanaTransactions",
77
+ "typedA2aPaymentMemos",
78
+ "typedA2aRefundMemos",
79
+ "signerOwnedWebAuthn",
80
+ "singleUseReviewedAuthorization",
81
+ "typedJupiterSemantics",
82
+ "signerOwnedJupiterTriggerV2",
83
+ "signerOwnedJupiterTriggerHistory",
84
+ "signerOwnedReviewPrepareExecute",
85
+ "exactPreparedTransactions",
86
+ "legacyOnlyJupiterTransactions"
87
+ ];
88
+
89
+ //#endregion
90
+ export { SIGNER_PROTOCOL_V2_REQUIRED_CLIENT_FEATURES };
@@ -1,66 +1,99 @@
1
1
  import { readWalletProviderRegistry } from "./wallet-provider-registry.js";
2
2
  import { resolveFederationBondWalletId } from "../federation/runtime.js";
3
- import fs from "node:fs/promises";
4
- import crypto, { scryptSync } from "node:crypto";
3
+ import { assertSecureLocalSignerSocket, callLocalSocketSigner, requireLocalSocketSignerPath } from "./providers/local-socket-signer-adapter.js";
4
+ import { createSignerReviewApprovalRequest } from "./wallet-send-approvals.js";
5
+ import { isDeepStrictEqual } from "node:util";
6
+ import { createHash } from "node:crypto";
5
7
 
6
8
  //#region src/wallet/solana-bond-signing.ts
7
- function normalizeWalletIdForEnvSuffix(walletId) {
8
- const raw = String(walletId ?? "").trim().toLowerCase();
9
- if (!raw) {
10
- return undefined;
9
+ const FEDERATION_BOND_INTENT = "federation.bondChallenge";
10
+ const FEDERATION_BOND_POLICY_DOMAIN = "domain:fased:federation-bond-challenge-v1";
11
+ const FEDERATION_BOND_SIGNATURE_DOMAIN = "fased:federation-bond-challenge-signature:v2";
12
+ const REQUIRED_FEDERATION_SIGNER_FEATURES = [
13
+ "failClosedPolicies",
14
+ "policyHashes",
15
+ "durableCaps",
16
+ "atomicIdempotency",
17
+ "signerOwnedKeys",
18
+ "domainSeparatedFederationBondChallenges",
19
+ "federationBondChallengeWrapperV2",
20
+ "signerOwnedWebAuthn",
21
+ "singleUseReviewedAuthorization",
22
+ "signerOwnedReviewPrepareExecute",
23
+ "exactPreparedTransactions",
24
+ "reviewedFederationBondChallenges",
25
+ "durableReviewAuthorization"
26
+ ];
27
+ var FederationBondReviewAuthorizationRequiredError = class extends Error {
28
+ constructor(review, approvalId) {
29
+ super(`federation signer review ${review.requestId} is pending in Wallet Approvals and requires signer-owned WebAuthn authorization`);
30
+ this.name = "FederationBondReviewAuthorizationRequiredError";
31
+ this.review = review;
32
+ this.approvalId = approvalId;
11
33
  }
12
- const normalized = raw.replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
13
- return normalized || undefined;
34
+ };
35
+ function nativeSignerWalletId(walletId) {
36
+ const normalized = walletId.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
37
+ return normalized || "default";
14
38
  }
15
- function resolveScopedSolanaKeystorePath(env, walletId) {
16
- const suffix = normalizeWalletIdForEnvSuffix(walletId)?.toUpperCase();
17
- const scoped = suffix ? String(env[`FASED_WALLET_SOLANA_KEYSTORE_PATH__${suffix}`] ?? "").trim() : "";
18
- return scoped || String(env.FASED_WALLET_SOLANA_KEYSTORE_PATH ?? "").trim();
19
- }
20
- async function resolveWalletPassphrase(env) {
21
- const filePath = String(env.FASED_WALLET_PASSPHRASE_FILE ?? "").trim();
22
- if (filePath) {
23
- return (await fs.readFile(filePath, "utf-8")).trim();
39
+ function federationOrigin(raw) {
40
+ let parsed;
41
+ try {
42
+ parsed = new URL(raw);
43
+ } catch {
44
+ throw new Error("federation bond signing requires a valid HTTPS federation origin");
24
45
  }
25
- return String(env.FASED_WALLET_PASSPHRASE ?? "").trim();
26
- }
27
- function parseSolanaKeystoreEnvelope(raw) {
28
- const parsed = JSON.parse(raw);
29
- if (parsed.kind !== "fased-solana-keypair" || parsed.version !== 1 || parsed.kdf !== "scrypt" || parsed.cipher !== "aes-256-gcm" || typeof parsed.salt !== "string" || typeof parsed.iv !== "string" || typeof parsed.authTag !== "string" || typeof parsed.ciphertext !== "string" || typeof parsed.publicKey !== "string") {
30
- throw new Error("invalid Solana keystore envelope");
46
+ if (parsed.protocol !== "https:" || parsed.username || parsed.password || parsed.search || parsed.hash || parsed.pathname !== "/" && parsed.pathname !== "") {
47
+ throw new Error("federation bond signing requires an HTTPS origin without path, credentials, query, or fragment");
31
48
  }
32
- return parsed;
49
+ return parsed.origin;
33
50
  }
34
- function decryptSolanaKeypairEnvelope(envelope, passphrase) {
35
- const salt = Buffer.from(envelope.salt, "base64url");
36
- const iv = Buffer.from(envelope.iv, "base64url");
37
- const authTag = Buffer.from(envelope.authTag, "base64url");
38
- const ciphertext = Buffer.from(envelope.ciphertext, "base64url");
39
- const key = scryptSync(passphrase, salt, 32);
40
- const decipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
41
- decipher.setAuthTag(authTag);
42
- const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
43
- if (plaintext.length !== 64) {
44
- throw new Error("invalid Solana secret key length");
51
+ function federationBondChallengeRequestId(challengeId) {
52
+ const normalized = challengeId.trim();
53
+ if (!normalized || normalized !== challengeId || normalized.length > 256) {
54
+ throw new Error("federation bond challengeId is invalid");
45
55
  }
46
- return Uint8Array.from(plaintext);
56
+ return `federation-bond:${createHash("sha256").update(normalized, "utf8").digest("hex")}`;
47
57
  }
48
- function base64url(bytes) {
49
- return Buffer.from(bytes).toString("base64url");
58
+ function buildFederationBondChallengeIntent(params) {
59
+ return {
60
+ type: FEDERATION_BOND_INTENT,
61
+ federation: {
62
+ challengeId: params.challengeId,
63
+ federationOrigin: federationOrigin(params.federationOrigin),
64
+ handle: params.handle,
65
+ nodeId: params.nodeId,
66
+ tokenId: params.tokenId,
67
+ bondId: params.bondId,
68
+ tier: params.tier,
69
+ ...params.amountRaw !== undefined ? { amountRaw: params.amountRaw } : {},
70
+ expiresAt: params.expiresAt,
71
+ payloadBase64: params.payloadBase64
72
+ }
73
+ };
50
74
  }
51
- function signEd25519Message(message, secretKey) {
52
- const seed = secretKey.slice(0, 32);
53
- const publicKey = secretKey.slice(32, 64);
54
- const privateKey = crypto.createPrivateKey({
55
- key: {
56
- kty: "OKP",
57
- crv: "Ed25519",
58
- d: base64url(seed),
59
- x: base64url(publicKey)
60
- },
61
- format: "jwk"
75
+ function federationBondSigningMessageBase64(params) {
76
+ const payload = Buffer.from(params.payloadBase64, "base64");
77
+ if (payload.length === 0 || payload.toString("base64") !== params.payloadBase64) {
78
+ throw new Error("federation bond signing payload must be canonical non-empty base64");
79
+ }
80
+ const message = JSON.stringify({
81
+ domain: FEDERATION_BOND_SIGNATURE_DOMAIN,
82
+ challengeId: params.challengeId,
83
+ federationOrigin: federationOrigin(params.federationOrigin),
84
+ payloadBase64: params.payloadBase64
62
85
  });
63
- return crypto.sign(null, message, privateKey).toString("base64");
86
+ return Buffer.from(message, "utf8").toString("base64");
87
+ }
88
+ async function requireFederationSigner(socketPath) {
89
+ assertSecureLocalSignerSocket(socketPath);
90
+ const health = await callLocalSocketSigner(socketPath, { op: "v2.capabilities" });
91
+ const capabilities = health.capabilities;
92
+ const features = new Set(capabilities?.features ?? []);
93
+ const missing = REQUIRED_FEDERATION_SIGNER_FEATURES.filter((feature) => !features.has(feature));
94
+ if (health.ready !== true || capabilities?.protocol?.current !== 2 || typeof capabilities.protocol.min !== "number" || capabilities.protocol.min > 2 || typeof capabilities.protocol.max !== "number" || capabilities.protocol.max < 2 || !capabilities.intentTypes?.includes(FEDERATION_BOND_INTENT) || missing.length > 0) {
95
+ throw new Error(`local-socket-signer does not support secure federation bond challenges${missing.length > 0 ? `; missing features: ${missing.join(", ")}` : ""}`);
96
+ }
64
97
  }
65
98
  async function resolveFederationBondWallet(params) {
66
99
  const env = params?.env ?? process.env;
@@ -70,21 +103,25 @@ async function resolveFederationBondWallet(params) {
70
103
  cfg: params?.cfg
71
104
  }) || "default";
72
105
  const registryWallet = registry.wallets.find((entry) => entry.id === walletId);
73
- const keystorePath = resolveScopedSolanaKeystorePath(env, walletId);
74
- if (!keystorePath) {
75
- throw new Error(`bond Vault ${walletId} has no Solana keystore path configured`);
106
+ const socketPath = requireLocalSocketSignerPath(env);
107
+ await requireFederationSigner(socketPath);
108
+ const wallet = await callLocalSocketSigner(socketPath, {
109
+ op: "v2.wallet.get",
110
+ walletId
111
+ });
112
+ const walletAddress = wallet.publicKey.trim();
113
+ if (!walletAddress || wallet.walletId !== nativeSignerWalletId(walletId)) {
114
+ throw new Error(`bond Vault ${walletId} is not available in the native signer`);
76
115
  }
77
- const raw = await fs.readFile(keystorePath, "utf-8");
78
- const envelope = parseSolanaKeystoreEnvelope(raw);
79
- const walletAddress = registryWallet?.addresses?.solana?.trim() || envelope.publicKey.trim() || "";
80
- if (!walletAddress) {
81
- throw new Error(`bond Vault ${walletId} has no Solana address`);
116
+ const registryAddress = registryWallet?.addresses?.solana?.trim();
117
+ if (registryAddress && registryAddress !== walletAddress) {
118
+ throw new Error(`bond Vault ${walletId} registry address does not match the native signer`);
82
119
  }
83
120
  return {
84
121
  walletId,
85
122
  walletAddress,
86
123
  providerId: registryWallet?.providerId,
87
- keystorePath
124
+ socketPath
88
125
  };
89
126
  }
90
127
  async function signFederationBondChallenge(params) {
@@ -94,21 +131,72 @@ async function signFederationBondChallenge(params) {
94
131
  cfg: params.cfg,
95
132
  walletId: params.walletId
96
133
  });
97
- const passphrase = await resolveWalletPassphrase(env);
98
- if (!passphrase) {
99
- throw new Error("wallet passphrase is required to sign federation bond challenge");
134
+ const requestId = federationBondChallengeRequestId(params.challengeId);
135
+ const policy = await callLocalSocketSigner(resolved.socketPath, {
136
+ op: "v2.policy.get",
137
+ walletId: resolved.walletId
138
+ });
139
+ if (policy.role !== "vault" || !policy.operations.includes(FEDERATION_BOND_INTENT) || !policy.programs.includes(FEDERATION_BOND_POLICY_DOMAIN) || !policy.hash.startsWith("sha256:")) {
140
+ throw new Error(`bond Vault ${resolved.walletId} does not have an explicit reviewed federation challenge policy`);
141
+ }
142
+ const intent = buildFederationBondChallengeIntent(params);
143
+ const signingMessageBase64 = federationBondSigningMessageBase64(intent.federation);
144
+ let review;
145
+ try {
146
+ review = await callLocalSocketSigner(resolved.socketPath, {
147
+ op: "v2.review.get",
148
+ walletId: resolved.walletId,
149
+ request: { requestId }
150
+ });
151
+ } catch (error) {
152
+ if (!String(error).includes("signer review not found; review.prepare is required")) {
153
+ throw error;
154
+ }
155
+ review = await callLocalSocketSigner(resolved.socketPath, {
156
+ op: "v2.review.prepare",
157
+ walletId: resolved.walletId,
158
+ request: {
159
+ requestId,
160
+ policyHash: policy.hash,
161
+ mode: "reviewed",
162
+ intent
163
+ }
164
+ });
100
165
  }
101
- const raw = await fs.readFile(resolved.keystorePath, "utf-8");
102
- const envelope = parseSolanaKeystoreEnvelope(raw);
103
- const secretKey = decryptSolanaKeypairEnvelope(envelope, passphrase);
104
- if (envelope.publicKey.trim() && envelope.publicKey.trim() !== resolved.walletAddress) {
105
- throw new Error("bond Vault address does not match keystore public key");
166
+ if (review.requestId !== requestId || review.walletId !== nativeSignerWalletId(resolved.walletId) || review.walletPublicKey !== resolved.walletAddress || review.intentType !== FEDERATION_BOND_INTENT || !isDeepStrictEqual(review.semanticIntent, intent) || review.policyHash !== policy.hash || review.mode !== "reviewed" || review.artifactKind !== "domain-separated-message" || review.messageBase64 !== signingMessageBase64 || review.asset !== "federation:bond-challenge" || review.amount !== "1" || review.destination !== resolved.walletAddress || review.policyOperation !== FEDERATION_BOND_INTENT || review.requiredPrograms.length !== 1 || review.requiredPrograms[0] !== FEDERATION_BOND_POLICY_DOMAIN || review.requiredRole !== "vault") {
167
+ throw new Error(`federation signer review ${requestId} does not match the exact challenge`);
168
+ }
169
+ if (review.state === "prepared" && !params.authorization) {
170
+ const approval = createSignerReviewApprovalRequest({
171
+ review,
172
+ role: "vault",
173
+ walletId: resolved.walletId,
174
+ requestedBy: "federation-bond",
175
+ walletName: resolved.walletId,
176
+ assetName: "Federation bond proof",
177
+ assetSymbol: "Proof",
178
+ memo: `Federation bond challenge for ${params.handle}`,
179
+ env
180
+ });
181
+ throw new FederationBondReviewAuthorizationRequiredError(review, approval.id);
182
+ }
183
+ const executed = await callLocalSocketSigner(resolved.socketPath, {
184
+ op: "v2.review.execute",
185
+ walletId: resolved.walletId,
186
+ request: {
187
+ requestId,
188
+ authorization: params.authorization
189
+ }
190
+ });
191
+ if (executed.operation.state !== "confirmed" || !executed.signatureBase64 || executed.review.artifactKind !== "domain-separated-message" || executed.review.artifactDigest !== review.artifactDigest) {
192
+ throw new Error(`federation signer request ${requestId} did not complete one exact reviewed message signature`);
106
193
  }
107
194
  return {
108
195
  ...resolved,
109
- signatureBase64: signEd25519Message(Buffer.from(params.payload, "utf-8"), secretKey)
196
+ requestId,
197
+ signatureBase64: executed.signatureBase64
110
198
  };
111
199
  }
112
200
 
113
201
  //#endregion
114
- export { resolveFederationBondWallet, signFederationBondChallenge };
202
+ export { FEDERATION_BOND_SIGNATURE_DOMAIN, federationBondSigningMessageBase64, resolveFederationBondWallet, signFederationBondChallenge };