@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
@@ -3,7 +3,8 @@ import { readWalletProviderRegistry, resolveWalletUserRole } from "../wallet/wal
3
3
  import { listLocalMarketplaceOrders, upsertMarketplaceOrderConfig } from "./offers.js";
4
4
  import { publishFederationSettlementEvidence } from "./settlement-evidence.js";
5
5
  import { createOrExecuteWalletSend } from "../wallet/wallet-send-approvals.js";
6
- import { randomUUID } from "node:crypto";
6
+ import { claimMarketplaceSettlementOrder, reserveMarketplaceSettlementAction, updateMarketplaceSettlementAction } from "./marketplace-settlement-ledger.js";
7
+ import { createHash } from "node:crypto";
7
8
 
8
9
  //#region src/federation/marketplace-direct-payment.ts
9
10
  const DEFAULT_DEPS = {
@@ -13,19 +14,20 @@ const DEFAULT_DEPS = {
13
14
  publishFederationSettlementEvidence
14
15
  };
15
16
  const MAX_SAFE_ON_CHAIN_INTEGER = BigInt(Number.MAX_SAFE_INTEGER);
16
- function fail(statusCode, code, message) {
17
+ function fail(statusCode, code, message, details = {}) {
17
18
  return {
18
19
  ok: false,
19
20
  statusCode,
20
21
  code,
21
- message
22
+ message,
23
+ ...details
22
24
  };
23
25
  }
24
26
  function trimString(value) {
25
27
  return typeof value === "string" ? value.trim() : "";
26
28
  }
27
- function createDefaultId(prefix) {
28
- return `${prefix}-${Date.now()}-${randomUUID().slice(0, 8)}`;
29
+ function createStableOrderId(prefix, orderId) {
30
+ return `${prefix}-${createHash("sha256").update(orderId.trim()).digest("hex").slice(0, 24)}`;
29
31
  }
30
32
  function parseAssetDecimals(params) {
31
33
  if (typeof params.raw === "number" && Number.isFinite(params.raw)) {
@@ -57,14 +59,6 @@ function parseHumanAmountToOnChainInteger(amountInput, decimals) {
57
59
  }
58
60
  function normalizeMarketplacePaymentFailure(message) {
59
61
  const normalized = message.trim();
60
- const lower = normalized.toLowerCase();
61
- if (lower.includes("split-key custody requires an active unlock session") || lower.includes("custody_unlock_required")) {
62
- return [
63
- "Buyer Agent wallet is locked by split-key custody.",
64
- "Open Wallet, select the Agent wallet, unlock custody with passkey/device share, then retry Pay.",
65
- "No funds were moved."
66
- ].join(" ");
67
- }
68
62
  return normalized || "wallet payment failed";
69
63
  }
70
64
  function resolvePaymentAmount(order) {
@@ -142,6 +136,15 @@ function normalizePaymentIntent(params) {
142
136
  updatedAt: params.now
143
137
  };
144
138
  }
139
+ function directInitialPhase(order) {
140
+ if (order.settlement?.status === "settled" || order.paymentIntent?.status === "verified") {
141
+ return "direct_settled";
142
+ }
143
+ return order.settlement?.txRef || order.paymentIntent?.txRef ? "direct_paid" : "open";
144
+ }
145
+ function isAmbiguousSendFailure(code) {
146
+ return code === "wallet_provider_ambiguous" || code === "wallet_send_in_progress";
147
+ }
145
148
  async function payMarketplaceOrderDirect(params) {
146
149
  const env = params.env ?? process.env;
147
150
  const deps = {
@@ -159,6 +162,12 @@ async function payMarketplaceOrderDirect(params) {
159
162
  if (order.paymentIntent?.status === "verified" || order.settlement?.status === "settled") {
160
163
  return fail(409, "already_paid", "marketplace order is already paid");
161
164
  }
165
+ if (order.paymentIntent?.txRef || order.settlement?.txRef) {
166
+ return fail(409, "settlement_unknown", "marketplace order already has a transaction reference but is not settled; reconcile it before retrying", {
167
+ state: "unknown",
168
+ txRef: order.paymentIntent?.txRef ?? order.settlement?.txRef
169
+ });
170
+ }
162
171
  const amount = resolvePaymentAmount(order);
163
172
  if (!amount) {
164
173
  return fail(400, "amount_missing", "marketplace order payment amount is missing");
@@ -213,146 +222,268 @@ async function payMarketplaceOrderDirect(params) {
213
222
  if (!walletConfig.enabled) {
214
223
  return fail(409, "wallet_runtime_disabled", "wallet runtime is disabled");
215
224
  }
216
- const nowDate = new Date();
217
- const now = nowDate.toISOString();
218
- const invoiceId = trimString(order.settlement?.invoiceId) || trimString(order.receipt?.invoiceId) || trimString(order.invoiceId) || createDefaultId("invoice");
219
- const receiptId = trimString(order.settlement?.receiptId) || trimString(order.receipt?.receiptId) || trimString(order.receiptId) || createDefaultId("receipt");
220
- const taskId = trimString(order.id) || trimString(order.offerId) || params.orderId;
221
- const send = await deps.createOrExecuteWalletSend({
222
- payload: {
223
- chain,
224
- to: payeeAddress,
225
- amount: amountBaseUnits.toString(),
226
- ...asset.kind === "spl-token" ? { program: asset.address } : {},
227
- walletId: wallet.id,
228
- walletName: wallet.name,
229
- providerId: wallet.providerId,
230
- memo: invoiceId
231
- },
232
- requestedBy: "marketplace-manual-order",
233
- sendPath: "automation",
234
- settlementContext: {
235
- taskId,
236
- invoiceId,
237
- senderHandle: order.buyerHandle
238
- },
239
- config: walletConfig,
240
- runtimeConfig: params.config,
241
- providerIdOverride: wallet.providerId,
242
- env
243
- });
244
- if (!send.ok) {
245
- return fail(409, "wallet_payment_failed", normalizeMarketplacePaymentFailure(send.message));
246
- }
247
- if (send.mode !== "autonomous") {
248
- return fail(409, "payment_automation_required", "Marketplace payment requires Agent wallet automation to be enabled");
249
- }
250
- const txRef = trimString(send.tx.txHash);
251
- const payerAddress = resolveWalletAddress({
252
- wallet,
253
- chain,
254
- txSigner: typeof send.tx.signer === "string" ? send.tx.signer : undefined
255
- });
256
- const publishSettlement = await deps.publishFederationSettlementEvidence({
257
- taskId,
258
- invoiceId,
259
- senderHandle: order.buyerHandle,
260
- txRef,
261
- chain,
262
- asset,
263
- amount: amountBaseUnits.toString(),
264
- payeeAddress,
265
- providerId: wallet.providerId,
266
- walletId: wallet.id,
267
- walletName: wallet.name,
268
- env
269
- });
270
- if (!publishSettlement.ok) {
271
- return fail(502, "settlement_evidence_failed", `settlement evidence publish failed: ${publishSettlement.message}`);
225
+ const executionIntentId = `marketplace-order:${entry.configId}:direct-payment`;
226
+ let releaseSettlement;
227
+ try {
228
+ releaseSettlement = await claimMarketplaceSettlementOrder(entry.configId, env);
229
+ } catch (error) {
230
+ return fail(409, "settlement_in_progress", error instanceof Error ? error.message : String(error));
272
231
  }
273
- const evidenceRef = typeof publishSettlement.entry?.evidenceRef === "string" ? publishSettlement.entry.evidenceRef : typeof publishSettlement.entry?.settlementId === "string" ? `fased://marketplace/settlements/${publishSettlement.entry.settlementId}` : `tx:${txRef}`;
274
- const paymentIntent = normalizePaymentIntent({
275
- order,
276
- amount,
277
- currency,
278
- chain,
279
- assetKind,
280
- assetAddress,
281
- assetDecimals,
282
- payeeAddress,
283
- payerWalletId: wallet.id,
284
- txRef,
285
- now
286
- });
287
- const result = upsertMarketplaceOrderConfig({
288
- config: params.config,
289
- input: {
290
- ...order,
291
- id: entry.configId,
292
- status: order.status === "delivered" ? "delivered" : "running",
293
- paymentIntent,
294
- settlement: {
295
- ...order.settlement,
296
- mode: "direct",
297
- status: "settled",
298
- amount,
299
- currency,
232
+ try {
233
+ let workflow;
234
+ try {
235
+ workflow = reserveMarketplaceSettlementAction({
236
+ orderId: entry.configId,
237
+ action: "direct",
238
+ executionIntentId,
239
+ initialPhase: directInitialPhase(order),
240
+ intent: {
241
+ chain,
242
+ asset,
243
+ amount: amountBaseUnits.toString(),
244
+ payeeAddress,
245
+ payerWalletId: wallet.id,
246
+ buyerHandle: order.buyerHandle
247
+ },
248
+ env
249
+ });
250
+ } catch (error) {
251
+ return fail(409, "settlement_conflict", error instanceof Error ? error.message : String(error));
252
+ }
253
+ if (workflow.action.state === "unknown") {
254
+ return fail(409, "settlement_unknown", workflow.action.reason || "direct payment is unknown; reconcile it before retrying");
255
+ }
256
+ const nowDate = new Date();
257
+ const now = nowDate.toISOString();
258
+ const invoiceId = trimString(order.settlement?.invoiceId) || trimString(order.receipt?.invoiceId) || trimString(order.invoiceId) || createStableOrderId("invoice", params.orderId);
259
+ const receiptId = trimString(order.settlement?.receiptId) || trimString(order.receipt?.receiptId) || trimString(order.receiptId) || createStableOrderId("receipt", params.orderId);
260
+ const taskId = trimString(order.id) || trimString(order.offerId) || params.orderId;
261
+ const cachedPayment = (workflow.action.state === "executed" || workflow.action.state === "evidence_pending" || workflow.action.state === "complete") && Boolean(workflow.action.txHash);
262
+ let requestId = workflow.action.requestId;
263
+ let txRef = trimString(workflow.action.txHash);
264
+ let payerAddress = resolveWalletAddress({
265
+ wallet,
266
+ chain
267
+ });
268
+ if (!cachedPayment) {
269
+ updateMarketplaceSettlementAction({
270
+ orderId: entry.configId,
271
+ action: "direct",
272
+ expectedStates: [
273
+ "reserved",
274
+ "pending",
275
+ "failed"
276
+ ],
277
+ state: "pending",
278
+ env
279
+ });
280
+ const send = await deps.createOrExecuteWalletSend({
281
+ payload: {
282
+ chain,
283
+ to: payeeAddress,
284
+ amount: amountBaseUnits.toString(),
285
+ ...asset.kind === "spl-token" ? { program: asset.address } : {},
286
+ walletId: wallet.id,
287
+ walletName: wallet.name,
288
+ providerId: wallet.providerId
289
+ },
290
+ requestedBy: "marketplace-manual-order",
291
+ executionIntentId,
292
+ sendPath: "automation",
293
+ settlementContext: {
294
+ taskId,
295
+ invoiceId,
296
+ senderHandle: order.buyerHandle
297
+ },
298
+ config: walletConfig,
299
+ runtimeConfig: params.config,
300
+ providerIdOverride: wallet.providerId,
301
+ env
302
+ });
303
+ if (!send.ok) {
304
+ const ambiguous = isAmbiguousSendFailure(send.code);
305
+ updateMarketplaceSettlementAction({
306
+ orderId: entry.configId,
307
+ action: "direct",
308
+ expectedStates: ["pending"],
309
+ state: ambiguous ? "unknown" : "failed",
310
+ requestId: send.requestId,
311
+ reason: send.message,
312
+ env
313
+ });
314
+ return fail(409, "wallet_payment_failed", normalizeMarketplacePaymentFailure(send.message), {
315
+ state: ambiguous ? "unknown" : undefined,
316
+ requestId: send.requestId,
317
+ invoiceId,
318
+ receiptId
319
+ });
320
+ }
321
+ if (send.mode !== "autonomous") {
322
+ updateMarketplaceSettlementAction({
323
+ orderId: entry.configId,
324
+ action: "direct",
325
+ expectedStates: ["pending"],
326
+ state: "pending",
327
+ requestId: send.request.id,
328
+ reason: "Agent wallet automation approval is pending",
329
+ env
330
+ });
331
+ return fail(409, "payment_automation_required", "Marketplace payment requires Agent wallet automation to be enabled", {
332
+ state: "pending",
333
+ requestId: send.request.id,
334
+ invoiceId,
335
+ receiptId
336
+ });
337
+ }
338
+ requestId = send.requestId;
339
+ txRef = trimString(send.tx.txHash);
340
+ payerAddress = resolveWalletAddress({
341
+ wallet,
300
342
  chain,
301
- assetKind,
302
- ...assetAddress ? { assetAddress } : {},
303
- assetDecimals,
343
+ txSigner: typeof send.tx.signer === "string" ? send.tx.signer : undefined
344
+ });
345
+ updateMarketplaceSettlementAction({
346
+ orderId: entry.configId,
347
+ action: "direct",
348
+ expectedStates: ["pending"],
349
+ state: "executed",
350
+ requestId,
351
+ txHash: txRef,
352
+ env
353
+ });
354
+ }
355
+ let evidenceRef = trimString(workflow.action.evidenceRef);
356
+ if (!evidenceRef) {
357
+ const publishSettlement = await deps.publishFederationSettlementEvidence({
358
+ taskId,
304
359
  invoiceId,
305
- receiptId,
360
+ senderHandle: order.buyerHandle,
306
361
  txRef,
307
- evidenceRef,
308
- payerWalletId: wallet.id,
362
+ chain,
363
+ asset,
364
+ amount: amountBaseUnits.toString(),
309
365
  payeeAddress,
310
- escrow: {
311
- ...order.settlement?.escrow,
312
- status: "not_applicable",
313
- holdPolicy: "none",
314
- releaseRequired: false,
366
+ providerId: wallet.providerId,
367
+ walletId: wallet.id,
368
+ walletName: wallet.name,
369
+ env
370
+ });
371
+ if (!publishSettlement.ok) {
372
+ updateMarketplaceSettlementAction({
373
+ orderId: entry.configId,
374
+ action: "direct",
375
+ expectedStates: ["executed", "evidence_pending"],
376
+ state: "evidence_pending",
377
+ requestId,
378
+ txHash: txRef,
379
+ reason: publishSettlement.message,
380
+ env
381
+ });
382
+ return fail(502, "settlement_evidence_failed", `settlement evidence publish failed: ${publishSettlement.message}`, {
383
+ state: "evidence_pending",
384
+ requestId,
385
+ invoiceId,
386
+ receiptId,
387
+ txRef
388
+ });
389
+ }
390
+ evidenceRef = typeof publishSettlement.entry?.evidenceRef === "string" ? publishSettlement.entry.evidenceRef : typeof publishSettlement.entry?.settlementId === "string" ? `fased://marketplace/settlements/${publishSettlement.entry.settlementId}` : `tx:${txRef}`;
391
+ updateMarketplaceSettlementAction({
392
+ orderId: entry.configId,
393
+ action: "direct",
394
+ expectedStates: ["executed", "evidence_pending"],
395
+ state: "complete",
396
+ requestId,
397
+ txHash: txRef,
398
+ evidenceRef,
399
+ env
400
+ });
401
+ }
402
+ const paymentIntent = normalizePaymentIntent({
403
+ order,
404
+ amount,
405
+ currency,
406
+ chain,
407
+ assetKind,
408
+ assetAddress,
409
+ assetDecimals,
410
+ payeeAddress,
411
+ payerWalletId: wallet.id,
412
+ txRef,
413
+ now
414
+ });
415
+ const result = upsertMarketplaceOrderConfig({
416
+ config: params.config,
417
+ input: {
418
+ ...order,
419
+ id: entry.configId,
420
+ status: order.status === "delivered" ? "delivered" : "running",
421
+ paymentIntent,
422
+ settlement: {
423
+ ...order.settlement,
424
+ mode: "direct",
425
+ status: "settled",
426
+ amount,
427
+ currency,
428
+ chain,
429
+ assetKind,
430
+ ...assetAddress ? { assetAddress } : {},
431
+ assetDecimals,
432
+ invoiceId,
433
+ receiptId,
434
+ txRef,
435
+ evidenceRef,
436
+ payerWalletId: wallet.id,
437
+ payeeAddress,
438
+ escrow: {
439
+ ...order.settlement?.escrow,
440
+ status: "not_applicable",
441
+ holdPolicy: "none",
442
+ releaseRequired: false,
443
+ updatedAt: now
444
+ },
445
+ notes: "Direct Agent-wallet payment settled. Seller manual delivery is pending.",
446
+ verifiedAt: now,
447
+ settledAt: now,
448
+ updatedAt: now
449
+ },
450
+ delivery: {
451
+ ...order.delivery,
452
+ status: order.delivery?.status === "delivered" ? "delivered" : "pending",
453
+ notes: order.delivery?.notes || "Payment verified. Waiting for seller to manually complete delivery.",
454
+ updatedAt: now
455
+ },
456
+ receipt: {
457
+ ...order.receipt,
458
+ status: "issued",
459
+ invoiceId,
460
+ receiptId,
461
+ txRef,
462
+ notes: "Receipt issued after direct Agent-wallet payment. Delivery remains seller-managed.",
315
463
  updatedAt: now
316
464
  },
317
- notes: "Direct Agent-wallet payment settled. Seller manual delivery is pending.",
318
- verifiedAt: now,
319
- settledAt: now,
320
- updatedAt: now
321
- },
322
- delivery: {
323
- ...order.delivery,
324
- status: order.delivery?.status === "delivered" ? "delivered" : "pending",
325
- notes: order.delivery?.notes || "Payment verified. Waiting for seller to manually complete delivery.",
326
- updatedAt: now
327
- },
328
- receipt: {
329
- ...order.receipt,
330
- status: "issued",
331
465
  invoiceId,
332
466
  receiptId,
333
- txRef,
334
- notes: "Receipt issued after direct Agent-wallet payment. Delivery remains seller-managed.",
335
- updatedAt: now
467
+ txRef
336
468
  },
469
+ now
470
+ });
471
+ const updatedOrder = listLocalMarketplaceOrders(result.config).find((candidate) => candidate.configId === result.order.id)?.order ?? result.order;
472
+ return {
473
+ ok: true,
474
+ config: result.config,
475
+ order: updatedOrder,
476
+ mode: "autonomous",
337
477
  invoiceId,
338
478
  receiptId,
339
- txRef
340
- },
341
- now
342
- });
343
- const updatedOrder = listLocalMarketplaceOrders(result.config).find((candidate) => candidate.configId === result.order.id)?.order ?? result.order;
344
- return {
345
- ok: true,
346
- config: result.config,
347
- order: updatedOrder,
348
- mode: "autonomous",
349
- invoiceId,
350
- receiptId,
351
- txRef,
352
- payerAddress,
353
- evidenceRef,
354
- message: "Payment verified. Seller manual delivery is pending."
355
- };
479
+ txRef,
480
+ payerAddress,
481
+ evidenceRef,
482
+ message: "Payment verified. Seller manual delivery is pending."
483
+ };
484
+ } finally {
485
+ await releaseSettlement();
486
+ }
356
487
  }
357
488
 
358
489
  //#endregion