@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
@@ -51,6 +51,41 @@ const SAT_CLAIM_IDLE_INTERVAL_MS = 60_000;
51
51
  const SAT_CLAIM_ACTIVE_INTERVAL_MS = 15_000;
52
52
  const SAT_CLAIM_PENDING_WAIT_INTERVAL_MS = 45_000;
53
53
  const SAT_TOKEN_DECIMALS = 11;
54
+
55
+ type SatClaimGatewayResult = {
56
+ ok?: boolean;
57
+ payload?: {
58
+ resolvedCycleIds?: number[];
59
+ pendingCycleIds?: number[];
60
+ };
61
+ };
62
+
63
+ function resolveClaimGatewayCompletion(
64
+ result: SatClaimGatewayResult,
65
+ requestedCycleIds: readonly number[],
66
+ ): { resolvedCycleIds: number[]; pendingCycleIds: number[] } {
67
+ const requested = new Set(requestedCycleIds);
68
+ const hasExplicitCompletion =
69
+ Array.isArray(result.payload?.resolvedCycleIds) ||
70
+ Array.isArray(result.payload?.pendingCycleIds);
71
+ if (!hasExplicitCompletion) {
72
+ return { resolvedCycleIds: [...requested], pendingCycleIds: [] };
73
+ }
74
+ const resolvedCycleIds = [
75
+ ...new Set(
76
+ (result.payload?.resolvedCycleIds ?? []).filter((cycleId) => requested.has(cycleId)),
77
+ ),
78
+ ];
79
+ const resolved = new Set(resolvedCycleIds);
80
+ const explicitPending = new Set(
81
+ (result.payload?.pendingCycleIds ?? []).filter((cycleId) => requested.has(cycleId)),
82
+ );
83
+ const pendingCycleIds = [...requested].filter(
84
+ (cycleId) => !resolved.has(cycleId) || explicitPending.has(cycleId),
85
+ );
86
+ return { resolvedCycleIds, pendingCycleIds };
87
+ }
88
+
54
89
  function resolveClaimNextDelayMs(hasPendingWork: boolean): number {
55
90
  return hasPendingWork ? SAT_CLAIM_PENDING_WAIT_INTERVAL_MS : SAT_CLAIM_IDLE_INTERVAL_MS;
56
91
  }
@@ -99,9 +134,7 @@ function resolveWalletEnvValue(
99
134
  function resolveAutoSweepRpcUrl(walletId: string, env: NodeJS.ProcessEnv): string | undefined {
100
135
  return (
101
136
  resolveWalletEnvValue(env, "FASED_WALLET_SOLANA_READ_RPC_URL", walletId) ||
102
- resolveWalletEnvValue(env, "FASED_WALLET_SOLANA_RPC_URL", walletId) ||
103
- resolveWalletEnvValue(env, "FASED_WALLET_EMBEDDED_KEYSTORE_READ_RPC_URL", walletId) ||
104
- resolveWalletEnvValue(env, "FASED_WALLET_EMBEDDED_KEYSTORE_RPC_URL", walletId)
137
+ resolveWalletEnvValue(env, "FASED_WALLET_SOLANA_RPC_URL", walletId)
105
138
  );
106
139
  }
107
140
 
@@ -238,6 +271,7 @@ function resolveAutoSweepDestination(params: {
238
271
  async function maybeAutoSweepClaimedSat(params: {
239
272
  api: FasedAgentPluginApi;
240
273
  state: SatMiningRuntimeState;
274
+ occurrenceId: string;
241
275
  }): Promise<void> {
242
276
  const sweep = params.state.activeConfig.automation?.satSweep;
243
277
  if (!sweep?.enabled) {
@@ -325,7 +359,24 @@ async function maybeAutoSweepClaimedSat(params: {
325
359
  walletId,
326
360
  walletName: resolveAutoSweepSourceWalletName(walletId, process.env),
327
361
  },
328
- requestedBy: "sat-mining",
362
+ requestedBy: "sat-mining:auto-sweep",
363
+ executionIntentId: `sat-auto-sweep:${walletId}:${params.occurrenceId}`,
364
+ satSweepAuthorization: {
365
+ kind: "sat-auto-sweep-v1",
366
+ occurrenceId: params.occurrenceId,
367
+ walletId,
368
+ destination: destination.to,
369
+ mint: satMintAddress,
370
+ sourceBalanceRaw: recipientBalanceRaw.toString(),
371
+ amountRaw: sweepRaw.toString(),
372
+ keepRaw: keepRaw.toString(),
373
+ minRaw: minRaw.toString(),
374
+ mode: sweep.mode === "percentage" ? "percentage" : "all",
375
+ percentage:
376
+ typeof sweep.percentage === "number" && Number.isFinite(sweep.percentage)
377
+ ? Math.max(0, Math.min(100, sweep.percentage))
378
+ : 100,
379
+ },
329
380
  config: effectiveWalletConfig,
330
381
  runtimeConfig: cfg,
331
382
  sendPath: "automation",
@@ -520,11 +571,11 @@ async function collectResolvedInvalidOwnerClaimCycles(params: {
520
571
  resolved.push(cycleId);
521
572
  continue;
522
573
  }
523
- const claimedSat = BigInt(minerCycle.claimedSatRaw ?? "0");
524
- const claimedRebate =
525
- BigInt(minerCycle.claimedDetRebateLamports ?? "0") +
526
- BigInt(minerCycle.claimedPerfRebateLamports ?? "0");
527
- if (minerCycle.capitalLockReleased && (claimedSat > 0n || claimedRebate > 0n)) {
574
+ const claimableSat = BigInt(minerCycle.claimableSatRaw ?? "0");
575
+ const claimableRebate =
576
+ BigInt(minerCycle.claimableDetRebateLamports ?? "0") +
577
+ BigInt(minerCycle.claimablePerfRebateLamports ?? "0");
578
+ if (minerCycle.capitalLockReleased && claimableSat === 0n && claimableRebate === 0n) {
528
579
  resolved.push(cycleId);
529
580
  }
530
581
  }
@@ -766,18 +817,38 @@ export function createSatClaimService(params: {
766
817
  return;
767
818
  }
768
819
  markSatClaimBacklogClaiming(state, readyCycleIds);
769
- await runSatGatewayMethod({
820
+ const result = await runSatGatewayMethod<SatClaimGatewayResult>({
770
821
  api,
771
822
  method: "sat.claimCycleRewardsBatch",
772
823
  payload: { cycleIds: readyCycleIds },
773
824
  });
774
- for (const cycleId of readyCycleIds) {
825
+ const completion = resolveClaimGatewayCompletion(result, readyCycleIds);
826
+ for (const cycleId of completion.resolvedCycleIds) {
775
827
  const execution = getOrCreateRoundExecutionState(state, cycleId, 0);
776
828
  execution.claimSubmitted = true;
777
829
  }
778
- markSatClaimBacklogClaimed(state, readyCycleIds);
779
- await maybeAutoSweepClaimedSat({ api, state });
780
- markWorkerSuccess(state, "claim", `cycles ${readyCycleIds.join(",")} claimed`);
830
+ for (const cycleId of completion.pendingCycleIds) {
831
+ const execution = getOrCreateRoundExecutionState(state, cycleId, 0);
832
+ execution.claimSubmitted = false;
833
+ }
834
+ markSatClaimBacklogClaimed(state, completion.resolvedCycleIds);
835
+ markSatClaimBacklogReady(
836
+ state,
837
+ completion.pendingCycleIds,
838
+ "bounded SAT claim chunk submitted; rewards remain claimable",
839
+ );
840
+ await maybeAutoSweepClaimedSat({
841
+ api,
842
+ state,
843
+ occurrenceId: [...readyCycleIds].toSorted((left, right) => left - right).join(","),
844
+ });
845
+ markWorkerSuccess(
846
+ state,
847
+ "claim",
848
+ completion.pendingCycleIds.length > 0
849
+ ? `claim chunk confirmed; cycles ${completion.pendingCycleIds.join(",")} still have rewards`
850
+ : `cycles ${completion.resolvedCycleIds.join(",")} claimed`,
851
+ );
781
852
  scheduleWorkerNextRun(state, "claim", SAT_CLAIM_ACTIVE_INTERVAL_MS);
782
853
  } catch (error) {
783
854
  if (isSatServiceReadTimeoutError(error)) {
@@ -11,6 +11,7 @@ export const SAT_GATEWAY_METHODS = {
11
11
  finalizeCycleSettlement: "sat.finalizeCycleSettlement",
12
12
  scoreCyclePage: "sat.scoreCyclePage",
13
13
  distributeCyclePage: "sat.distributeCyclePage",
14
+ cleanupDistributionLookupTable: "sat.cleanupDistributionLookupTable",
14
15
  claimCycleRewards: "sat.claimCycleRewards",
15
16
  claimCycleRewardsBatch: "sat.claimCycleRewardsBatch",
16
17
  retargetUnlock: "sat.retargetUnlock",
@@ -128,6 +129,18 @@ export class SatMiningClient {
128
129
  };
129
130
  }
130
131
 
132
+ buildCleanupDistributionLookupTableRequest(params: {
133
+ cycleId: number;
134
+ pageIndex: number;
135
+ action: "deactivate" | "close";
136
+ lookupTableAddress?: string;
137
+ }) {
138
+ return {
139
+ method: SAT_GATEWAY_METHODS.cleanupDistributionLookupTable,
140
+ params,
141
+ };
142
+ }
143
+
131
144
  buildRetargetUnlockRequest(params: { cycleId: number }) {
132
145
  return {
133
146
  method: SAT_GATEWAY_METHODS.retargetUnlock,
@@ -25,6 +25,7 @@ export type SatMiningConfig = {
25
25
  | "safe_fallback";
26
26
  strategyExecution?: "deterministic" | "auto";
27
27
  strategyMode?: "base" | "skill";
28
+ cycleCadence?: 1 | 2 | 6 | 12;
28
29
  commitLamports?: number;
29
30
  minSolBalanceLamports?: number;
30
31
  walletId?: string;
@@ -103,6 +104,9 @@ export const satMiningConfigJsonSchema = Type.Object(
103
104
  Type.Union([Type.Literal("deterministic"), Type.Literal("auto")]),
104
105
  ),
105
106
  strategyMode: Type.Optional(Type.Union([Type.Literal("base"), Type.Literal("skill")])),
107
+ cycleCadence: Type.Optional(
108
+ Type.Union([Type.Literal(1), Type.Literal(2), Type.Literal(6), Type.Literal(12)]),
109
+ ),
106
110
  commitLamports: Type.Optional(Type.Number()),
107
111
  minSolBalanceLamports: Type.Optional(Type.Number()),
108
112
  walletId: Type.Optional(Type.String()),
@@ -326,6 +330,10 @@ export function parseSatMiningConfig(value: unknown): SatMiningConfig {
326
330
  : raw.strategyMode === "skill"
327
331
  ? "skill"
328
332
  : "base";
333
+ const cycleCadence =
334
+ raw.cycleCadence === 2 || raw.cycleCadence === 6 || raw.cycleCadence === 12
335
+ ? raw.cycleCadence
336
+ : 1;
329
337
  const commitLamports =
330
338
  typeof raw.commitLamports === "number" &&
331
339
  Number.isFinite(raw.commitLamports) &&
@@ -486,6 +494,7 @@ export function parseSatMiningConfig(value: unknown): SatMiningConfig {
486
494
  strategyPreset: strategyPreset ?? riskModeToStrategyPreset(riskMode),
487
495
  strategyExecution: strategyExecution ?? strategyModeToExecution(strategyMode),
488
496
  strategyMode,
497
+ cycleCadence,
489
498
  commitLamports,
490
499
  minSolBalanceLamports,
491
500
  walletId,
@@ -23,7 +23,7 @@ const SAT_SETTLEMENT_ACTIONS = new Set([
23
23
  "distributeCyclePage",
24
24
  ]);
25
25
  const SAT_CLOSE_ACTIONS = new Set(["closeResolvedCycleAccounts", "closeResolvedCycleArtifacts"]);
26
- const SAT_SUBMIT_ACTIONS = new Set(["submitCycle", "openCycle"]);
26
+ const SAT_PARTICIPATION_ACTIONS = new Set(["commitCycle", "revealCycle", "submitCycle"]);
27
27
  const SAT_RUNTIME_PENDING_CYCLE_WINDOW = 12;
28
28
 
29
29
  function actionTimeMs(entry: { at?: string }) {
@@ -86,8 +86,13 @@ export function hasSuccessfulClaimOrCloseRecord(
86
86
  cycleId: number,
87
87
  ): boolean {
88
88
  return (
89
- hasSuccessfulCycleAction(state, cycleId, ["claimCycleRewards", "claimCycleRewardsBatch"]) ||
90
- hasAuthoritativeCloseRecord(state, cycleId)
89
+ state.recentActions.some(
90
+ (entry) =>
91
+ entry.status === "success" &&
92
+ entry.complete !== false &&
93
+ entry.cycleId === cycleId &&
94
+ (entry.action === "claimCycleRewards" || entry.action === "claimCycleRewardsBatch"),
95
+ ) || hasAuthoritativeCloseRecord(state, cycleId)
91
96
  );
92
97
  }
93
98
 
@@ -112,7 +117,7 @@ export function hasAuthoritativeCloseRecord(
112
117
  return false;
113
118
  }
114
119
  const latestSettlementAt = latestSuccessfulActionTimeMs(state, cycleId, SAT_SETTLEMENT_ACTIONS);
115
- const latestSubmitAt = latestSuccessfulActionTimeMs(state, cycleId, SAT_SUBMIT_ACTIONS);
120
+ const latestSubmitAt = latestSuccessfulActionTimeMs(state, cycleId, SAT_PARTICIPATION_ACTIONS);
116
121
  const latestProgressAt = Math.max(latestSettlementAt ?? 0, latestSubmitAt ?? 0);
117
122
  return latestCloseAt >= latestProgressAt;
118
123
  }
@@ -152,7 +157,7 @@ export function collectRuntimePendingCycleIds(params: {
152
157
  cycleId == null ||
153
158
  cycleId < minRuntimePendingCycleId ||
154
159
  cycleId >= params.currentCycleId ||
155
- !execution.participationSubmitted ||
160
+ (!execution.commitSubmitted && !execution.participationSubmitted) ||
156
161
  execution.claimSubmitted ||
157
162
  hasSuccessfulClaimOrCloseRecord(params.state, cycleId)
158
163
  ) {
@@ -163,7 +168,7 @@ export function collectRuntimePendingCycleIds(params: {
163
168
  for (const entry of params.state.recentActions) {
164
169
  if (
165
170
  entry.status === "success" &&
166
- entry.action === "submitCycle" &&
171
+ SAT_PARTICIPATION_ACTIONS.has(entry.action) &&
167
172
  typeof entry.cycleId === "number" &&
168
173
  Number.isFinite(entry.cycleId) &&
169
174
  entry.cycleId > 0 &&
@@ -213,7 +218,7 @@ export function derivePendingCycleStage(
213
218
  return "stale-closed";
214
219
  }
215
220
  const execution = state.roundExecution.get(`${cycleId}:0`) ?? null;
216
- if (hasSuccessfulCycleAction(state, cycleId, ["claimCycleRewards", "claimCycleRewardsBatch"])) {
221
+ if (hasSuccessfulClaimOrCloseRecord(state, cycleId)) {
217
222
  return "closing";
218
223
  }
219
224
  if (execution?.claimSubmitted) {
@@ -230,10 +235,13 @@ export function derivePendingCycleStage(
230
235
  }
231
236
  if (
232
237
  execution?.participationSubmitted ||
233
- hasSuccessfulCycleAction(state, cycleId, ["submitCycle", "openCycle"])
238
+ hasSuccessfulCycleAction(state, cycleId, ["revealCycle", "submitCycle"])
234
239
  ) {
235
240
  return "settling";
236
241
  }
242
+ if (execution?.commitSubmitted || hasSuccessfulCycleAction(state, cycleId, ["commitCycle"])) {
243
+ return "submitted";
244
+ }
237
245
  return "unknown";
238
246
  }
239
247
 
@@ -619,17 +619,21 @@ async function selectEpochTargetCycle(params: {
619
619
  execution.openRoundSubmitted = true;
620
620
  }
621
621
  if (!execution.participationSubmitted && authority) {
622
- minerCycleExists = await Promise.resolve(
623
- withEpochReadTimeout("miner-cycle existence", () =>
624
- inspectSatMinerCycleAccountExists(state.activeConfig, {
622
+ const minerCycle = await Promise.resolve(
623
+ withEpochReadTimeout("miner-cycle participation", () =>
624
+ inspectSatMinerCycle(state.activeConfig, {
625
625
  authority,
626
626
  cycleId,
627
627
  }),
628
628
  ),
629
- ).catch(() => false);
630
- if (minerCycleExists) {
629
+ ).catch(swallowSatReadErrorUnlessTimeout);
630
+ minerCycleExists = minerCycle != null;
631
+ if (minerCycle?.validParticipation === true) {
631
632
  execution.openRoundSubmitted = true;
632
633
  execution.participationSubmitted = true;
634
+ } else if (minerCycle) {
635
+ execution.openRoundSubmitted = true;
636
+ execution.commitSubmitted = true;
633
637
  }
634
638
  }
635
639
  if (!execution.participationSubmitted) {
@@ -1,6 +1,7 @@
1
1
  import type { FasedAgentPluginApi } from "fased/plugin-sdk";
2
2
  import { callGatewayScoped, resolveGatewayPort } from "fased/plugin-sdk/sat-runtime";
3
3
  import { consumeSatGatewayMethodChaosOnce } from "./live-chaos.js";
4
+ import { digestSatSubmissionIntent } from "./submission-ledger.js";
4
5
 
5
6
  function chaosError(envName: string, fallback: string): Error {
6
7
  return new Error(process.env[envName]?.trim() || fallback);
@@ -10,6 +11,7 @@ export async function runSatGatewayMethod<T = Record<string, unknown>>(params: {
10
11
  api: FasedAgentPluginApi;
11
12
  method: string;
12
13
  payload: unknown;
14
+ workflowId?: string;
13
15
  }): Promise<T> {
14
16
  if (
15
17
  consumeSatGatewayMethodChaosOnce({
@@ -30,12 +32,30 @@ export async function runSatGatewayMethod<T = Record<string, unknown>>(params: {
30
32
  ? currentConfig.gateway.auth.token.trim() || undefined
31
33
  : undefined;
32
34
  const url = `ws://127.0.0.1:${resolveGatewayPort(currentConfig, process.env)}`;
35
+ const payloadRecord =
36
+ params.payload && typeof params.payload === "object" && !Array.isArray(params.payload)
37
+ ? (params.payload as Record<string, unknown>)
38
+ : null;
39
+ const idempotencyKey =
40
+ params.workflowId?.trim() ||
41
+ `worker:${params.method}:${digestSatSubmissionIntent(params.payload)}`;
42
+ const mutationMethod = !/^sat\.(?:get|list|status)/u.test(params.method);
43
+ const gatewayParams =
44
+ mutationMethod && payloadRecord
45
+ ? {
46
+ ...payloadRecord,
47
+ idempotencyKey:
48
+ typeof payloadRecord.idempotencyKey === "string" && payloadRecord.idempotencyKey.trim()
49
+ ? payloadRecord.idempotencyKey.trim()
50
+ : idempotencyKey,
51
+ }
52
+ : params.payload;
33
53
  const result = await callGatewayScoped<T>({
34
54
  url,
35
55
  token,
36
56
  config: currentConfig,
37
57
  method: params.method,
38
- params: params.payload,
58
+ params: gatewayParams,
39
59
  scopes: ["operator.admin"],
40
60
  timeoutMs: 15_000,
41
61
  });
@@ -36,8 +36,15 @@ export const SAT_INSTRUCTION_DISCRIMINATORS = {
36
36
  requestBondUnlock: 81,
37
37
  cancelBondUnlock: 82,
38
38
  finalizeBondUnlock: 83,
39
+ topUpRegistryReserve: 84,
39
40
  claimProtocolDistributorSat: 85,
40
41
  refillRegistryReserveFromTreasury: 88,
42
+ commitCycle: 89,
43
+ closeCommitPhase: 90,
44
+ sealCycleEntropy: 91,
45
+ revealCycle: 92,
46
+ releaseUnrevealedCommit: 93,
47
+ abortEmptyCycle: 94,
41
48
  miningCrank: 33,
42
49
  } as const;
43
50
 
@@ -53,12 +60,49 @@ export const SAT_BOND_INSTRUCTION_DISCRIMINATORS = {
53
60
  syncStakingRewards: 8,
54
61
  syncStakingPosition: 9,
55
62
  claimStakingRewards: 10,
63
+ claimUnallocatedStakingRewards: 11,
64
+ recordProtocolStakingRewards: 12,
56
65
  } as const;
57
66
 
58
67
  export const SAT_PROTOCOL_CONSTANTS = {
59
68
  allocationBuckets: 25,
60
69
  cycleSeconds: 300,
70
+ cycleOpenGraceSeconds: 30,
71
+ cycleCommitSeconds: 120,
72
+ cycleCommitSlots: 300,
73
+ cycleRevealSlots: 375,
74
+ cycleSettlementBufferSeconds: 30,
75
+ cycleEntropyDelaySlots: 8,
76
+ cycleEntropyHashCount: 8,
77
+ cycleRecoveryRevealSeconds: 120,
61
78
  cycleErosionPpm: 83n,
79
+ cycleNonRevealPenaltyBps: 100,
80
+ cycleUnlockRetargetIntervalCycles: 12,
81
+ cycleUnlockWindowIntervals: 24,
82
+ cycleUnlockMaxStepBps: 1_000,
62
83
  minimumEntryLamports: 250_000_000,
63
- registryReserveTargetLamports: 200_000_000n,
84
+ entropyUnavailableSeedHex: "ff".repeat(32),
64
85
  } as const;
86
+
87
+ export const SAT_GENESIS_PROFILE_CONTRACTS = {
88
+ devnet: {
89
+ cluster: "devnet",
90
+ configSha256: "79c536b73d7682842c9574f6785e7a8ab5916eb0a99e29f98c00bde4b18e3500",
91
+ registryReserveTargetLamports: 200_000_000n,
92
+ registryReserveMaxLamports: 200_000_000n,
93
+ keeperReserveSpendableLamports: 10_000_000n,
94
+ },
95
+ "mainnet-beta": {
96
+ cluster: "mainnet-beta",
97
+ configSha256: "f35ccf88352efc6f86e6ff18b5c6f349e7ba792916ec8a4ae5c3705fde4c963b",
98
+ registryReserveTargetLamports: 500_000_000n,
99
+ registryReserveMaxLamports: 1_000_000_000n,
100
+ keeperReserveSpendableLamports: 10_000_000n,
101
+ },
102
+ } as const;
103
+
104
+ export function resolveSatGenesisProfileContract(network: string | null | undefined) {
105
+ return network === "mainnet-beta"
106
+ ? SAT_GENESIS_PROFILE_CONTRACTS["mainnet-beta"]
107
+ : SAT_GENESIS_PROFILE_CONTRACTS.devnet;
108
+ }