@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
@@ -1,10 +1,9 @@
1
- import { resolveLocalSignerBackendSocketPath } from "./wallet-runtime-config.js";
1
+ import { hasLegacyEmbeddedKeystoreConfig, hasLegacyEmbeddedKeystoreMaterialHint, throwLegacyEmbeddedKeystoreMigrationRequired } from "./legacy-embedded-keystore.js";
2
2
  import { readWalletProviderRegistry } from "./wallet-provider-registry.js";
3
3
  import { AlchemyAdapter } from "./providers/alchemy-adapter.js";
4
- import { EmbeddedKeystoreAdapter } from "./providers/embedded-keystore-adapter.js";
5
4
  import { LocalSocketSignerAdapter, requireLocalSocketSignerPath } from "./providers/local-socket-signer-adapter.js";
6
- import { PrivyAdapter } from "./providers/privy-adapter.js";
7
5
  import { TurnkeyAdapter } from "./providers/turnkey-adapter.js";
6
+ import { WalletStandardAdapter } from "./providers/wallet-standard-adapter.js";
8
7
  import { loadWalletProviderSecret } from "./wallet-secrets-store.js";
9
8
 
10
9
  //#region src/wallet/wallet-provider-resolver.ts
@@ -14,10 +13,14 @@ function parseProviderId(input) {
14
13
  case "local-socket-signer":
15
14
  case "alchemy":
16
15
  case "turnkey":
16
+ case "wallet-standard":
17
17
  case "privy": return input;
18
18
  default: return null;
19
19
  }
20
20
  }
21
+ function throwPrivyProviderUnavailable() {
22
+ throw new Error("Privy wallet creation and signing are unavailable; no Privy provider selection or credentials are accepted.");
23
+ }
21
24
  function pickCredentialValue(source, keys) {
22
25
  for (const key of keys) {
23
26
  const value = source[key];
@@ -57,7 +60,7 @@ function resolveWalletRpcUrlFromEnv(env, chain, walletId) {
57
60
  const perWalletKey = suffix ? `FASED_WALLET_SOLANA_RPC_URL__${suffix}` : "";
58
61
  const perChainKey = "FASED_WALLET_SOLANA_RPC_URL";
59
62
  const scopedOrChain = (perWalletKey ? String(env[perWalletKey] ?? "").trim() : "") || String(env[perChainKey] ?? "").trim();
60
- return scopedOrChain || String(env.FASED_WALLET_EMBEDDED_KEYSTORE_RPC_URL ?? "").trim();
63
+ return scopedOrChain || String(env.FASED_WALLET_RPC_URL ?? "").trim();
61
64
  }
62
65
  function resolveScopedRpcUrlForWallet(params) {
63
66
  const preferred = inferWalletChainFromRegistry(params.env, params.walletId);
@@ -79,14 +82,6 @@ function inferSelfHostedProviderId(env) {
79
82
  if (String(env.FASED_WALLET_LOCAL_SIGNER_SOCKET ?? "").trim()) {
80
83
  return "local-socket-signer";
81
84
  }
82
- for (const [key, rawValue] of Object.entries(env)) {
83
- if (typeof rawValue !== "string" || rawValue.trim().length === 0) {
84
- continue;
85
- }
86
- if (key === "FASED_WALLET_SOLANA_KEYSTORE_PATH" || key === "FASED_WALLET_PASSPHRASE_FILE" || key.startsWith("FASED_WALLET_SOLANA_KEYSTORE_PATH__")) {
87
- return "local-socket-signer";
88
- }
89
- }
90
85
  return null;
91
86
  }
92
87
  function resolveWalletProviderId(cfg, env = process.env) {
@@ -95,14 +90,19 @@ function resolveWalletProviderId(cfg, env = process.env) {
95
90
  ...cfg.env?.vars
96
91
  };
97
92
  const envProvider = parseProviderId(effectiveEnv.FASED_WALLET_PROVIDER);
98
- if (envProvider) {
99
- return envProvider;
93
+ if (hasLegacyEmbeddedKeystoreConfig(cfg, effectiveEnv)) {
94
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet provider selection detected");
95
+ }
96
+ if (hasLegacyEmbeddedKeystoreMaterialHint(effectiveEnv)) {
97
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet material configuration detected");
100
98
  }
101
99
  const configProvider = parseProviderId(cfg.wallet?.provider?.id);
102
100
  const inferredSelfHostedProvider = inferSelfHostedProviderId(effectiveEnv);
103
101
  let registryProvider = null;
102
+ let registryHasLegacyEmbeddedWallet = false;
104
103
  try {
105
104
  const registry = readWalletProviderRegistry(effectiveEnv);
105
+ registryHasLegacyEmbeddedWallet = Boolean(registry.providers["embedded-keystore"]?.enabled) || registry.wallets.some((entry) => entry.providerId === "embedded-keystore");
106
106
  const satWalletId = typeof cfg.plugins?.entries?.["sat-mining"]?.config?.walletId === "string" ? cfg.plugins.entries["sat-mining"]?.config?.walletId.trim() : "";
107
107
  const satWallet = satWalletId ? registry.wallets.find((entry) => entry.id === satWalletId) : undefined;
108
108
  if (satWallet?.providerId) {
@@ -123,13 +123,28 @@ function resolveWalletProviderId(cfg, env = process.env) {
123
123
  } catch {
124
124
  registryProvider = null;
125
125
  }
126
- if (registryProvider && (!configProvider || configProvider === "embedded-keystore")) {
126
+ if (registryHasLegacyEmbeddedWallet || registryProvider === "embedded-keystore") {
127
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet registry selection detected");
128
+ }
129
+ if (envProvider === "privy") {
130
+ throwPrivyProviderUnavailable();
131
+ }
132
+ if (envProvider) {
133
+ return envProvider;
134
+ }
135
+ if (registryProvider === "privy") {
136
+ throwPrivyProviderUnavailable();
137
+ }
138
+ if (registryProvider && !configProvider) {
127
139
  return registryProvider;
128
140
  }
129
- if (inferredSelfHostedProvider && (!configProvider || configProvider === "embedded-keystore")) {
141
+ if (inferredSelfHostedProvider && !configProvider) {
130
142
  return inferredSelfHostedProvider;
131
143
  }
132
144
  if (configProvider) {
145
+ if (configProvider === "privy") {
146
+ throwPrivyProviderUnavailable();
147
+ }
133
148
  return configProvider;
134
149
  }
135
150
  return inferredSelfHostedProvider ?? "local-socket-signer";
@@ -141,25 +156,10 @@ function createWalletProviderAdapter(params) {
141
156
  };
142
157
  const providerId = params.providerIdOverride ?? resolveWalletProviderId(params.cfg, env);
143
158
  if (providerId === "embedded-keystore") {
144
- const secret = loadWalletProviderSecret(providerId, env);
145
- const secretCredentials = secret?.credentials ?? {};
146
- return new EmbeddedKeystoreAdapter({
147
- chains: params.wallet.chains,
148
- credentials: {
149
- keystorePath: pickCredentialValue(secretCredentials, ["keystorePath", "path"]) || params.cfg.wallet?.keystore?.path?.trim() || String(env.FASED_WALLET_KEYSTORE_PATH ?? "").trim() || undefined,
150
- passphrase: pickCredentialValue(secretCredentials, ["passphrase"]) || String(env.FASED_WALLET_PASSPHRASE ?? "").trim() || undefined,
151
- rpcUrl: pickCredentialValue(secretCredentials, ["rpcUrl", "rpc_url"]) || resolveScopedRpcUrlForWallet({
152
- env,
153
- chains: params.wallet.chains,
154
- walletId: params.walletId
155
- }) || undefined
156
- },
157
- env
158
- });
159
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet adapter selection detected");
159
160
  }
160
161
  if (providerId === "local-socket-signer") {
161
162
  return new LocalSocketSignerAdapter(requireLocalSocketSignerPath(env), {
162
- backendSocketPath: resolveLocalSignerBackendSocketPath(env),
163
163
  rpcUrl: resolveScopedRpcUrlForWallet({
164
164
  env,
165
165
  chains: params.wallet.chains,
@@ -187,9 +187,19 @@ function createWalletProviderAdapter(params) {
187
187
  if (providerId === "turnkey") {
188
188
  const secret = loadWalletProviderSecret(providerId, env);
189
189
  const secretCredentials = secret?.credentials ?? {};
190
+ const registeredWallet = params.walletId ? readWalletProviderRegistry(env).wallets.find((entry) => entry.id === params.walletId) : undefined;
191
+ const registeredProviderWalletId = typeof registeredWallet?.metadata?.turnkeyWalletId === "string" ? registeredWallet.metadata.turnkeyWalletId.trim() : "";
192
+ const registeredSolanaAddress = registeredWallet?.addresses?.solana?.trim() ?? "";
193
+ const configuredSolanaAddress = pickCredentialValue(secretCredentials, ["defaultSolanaAddress", "solanaAddress"]) || String(env.FASED_WALLET_TURNKEY_DEFAULT_SOLANA_ADDRESS ?? "").trim();
194
+ const configuredProviderWalletId = pickCredentialValue(secretCredentials, ["providerWalletId", "turnkeyWalletId"]) || "";
195
+ if (registeredWallet && (registeredSolanaAddress && configuredSolanaAddress && registeredSolanaAddress !== configuredSolanaAddress || registeredProviderWalletId && configuredProviderWalletId && registeredProviderWalletId !== configuredProviderWalletId)) {
196
+ throw new Error(`Turnkey wallet ${registeredWallet.name} does not match the configured provider wallet identity`);
197
+ }
190
198
  return new TurnkeyAdapter({
191
199
  chains: params.wallet.chains,
192
200
  service: params.wallet.service,
201
+ walletName: registeredWallet?.name,
202
+ stateEnv: env,
193
203
  credentials: {
194
204
  apiPublicKey: pickCredentialValue(secretCredentials, [
195
205
  "apiPublicKey",
@@ -206,47 +216,36 @@ function createWalletProviderAdapter(params) {
206
216
  "organizationID",
207
217
  "orgId"
208
218
  ]) || String(env.FASED_WALLET_TURNKEY_ORGANIZATION_ID ?? "").trim() || undefined,
209
- stamp: pickCredentialValue(secretCredentials, [
210
- "stamp",
211
- "xStamp",
212
- "x_stamp",
213
- "apiStamp"
214
- ]) || String(env.FASED_WALLET_TURNKEY_STAMP ?? "").trim() || undefined,
219
+ policyId: pickCredentialValue(secretCredentials, ["policyId", "policyID"]) || String(env.FASED_WALLET_TURNKEY_POLICY_ID ?? "").trim() || undefined,
215
220
  baseUrl: pickCredentialValue(secretCredentials, [
216
221
  "baseUrl",
217
222
  "url",
218
223
  "endpoint"
219
224
  ]) || String(env.FASED_WALLET_TURNKEY_BASE_URL ?? "").trim() || undefined,
220
- defaultSolanaAddress: pickCredentialValue(secretCredentials, ["defaultSolanaAddress", "solanaAddress"]) || String(env.FASED_WALLET_TURNKEY_DEFAULT_SOLANA_ADDRESS ?? "").trim() || undefined
225
+ rpcUrl: pickCredentialValue(secretCredentials, ["rpcUrl", "rpc_url"]) || resolveScopedRpcUrlForWallet({
226
+ env,
227
+ chains: params.wallet.chains,
228
+ walletId: params.walletId
229
+ }) || undefined,
230
+ defaultSolanaAddress: registeredSolanaAddress || configuredSolanaAddress || undefined,
231
+ providerWalletId: registeredProviderWalletId || configuredProviderWalletId || undefined
221
232
  }
222
233
  });
223
234
  }
224
- if (providerId === "privy") {
225
- const secret = loadWalletProviderSecret(providerId, env);
226
- const secretCredentials = secret?.credentials ?? {};
227
- return new PrivyAdapter({
228
- chains: params.wallet.chains,
229
- service: params.wallet.service,
230
- credentials: {
231
- appId: pickCredentialValue(secretCredentials, [
232
- "appId",
233
- "app_id",
234
- "applicationId"
235
- ]) || String(env.FASED_WALLET_PRIVY_APP_ID ?? "").trim(),
236
- appSecret: pickCredentialValue(secretCredentials, [
237
- "appSecret",
238
- "app_secret",
239
- "secret"
240
- ]) || String(env.FASED_WALLET_PRIVY_APP_SECRET ?? "").trim(),
241
- baseUrl: pickCredentialValue(secretCredentials, [
242
- "baseUrl",
243
- "url",
244
- "endpoint"
245
- ]) || String(env.FASED_WALLET_PRIVY_BASE_URL ?? "").trim() || undefined,
246
- defaultSolanaAddress: pickCredentialValue(secretCredentials, ["defaultSolanaAddress", "solanaAddress"]) || String(env.FASED_WALLET_PRIVY_DEFAULT_SOLANA_ADDRESS ?? "").trim() || undefined
247
- }
235
+ if (providerId === "wallet-standard") {
236
+ const registeredWallet = params.walletId ? readWalletProviderRegistry(env).wallets.find((entry) => entry.id === params.walletId) : undefined;
237
+ return new WalletStandardAdapter({
238
+ address: registeredWallet?.addresses?.solana,
239
+ rpcUrl: resolveScopedRpcUrlForWallet({
240
+ env,
241
+ chains: params.wallet.chains,
242
+ walletId: params.walletId
243
+ })
248
244
  });
249
245
  }
246
+ if (providerId === "privy") {
247
+ throwPrivyProviderUnavailable();
248
+ }
250
249
  throw new Error("unsupported wallet provider");
251
250
  }
252
251
 
@@ -7,6 +7,9 @@ const DEFAULT_WALLET_RUNTIME_PORT = 19444;
7
7
  const DEFAULT_WALLET_RUNTIME_HOST = "127.0.0.1";
8
8
  const DEFAULT_WALLET_RUNTIME_VERSION = "0.1.1";
9
9
  const DEFAULT_WALLET_RUNTIME_SOURCE_REF = "v0.2.30";
10
+ function isLocalSignerExternallyManaged(env = process.env) {
11
+ return String(env.FASED_WALLET_LOCAL_SIGNER_LIFECYCLE ?? "").trim().toLowerCase() === "external";
12
+ }
10
13
  const DEFAULT_POLICY_CAPS = { solana: {
11
14
  maxPerTx: "1000000000",
12
15
  maxDaily: "5000000000"
@@ -50,31 +53,6 @@ function normalizeSolanaTokenCaps(raw) {
50
53
  }
51
54
  return out;
52
55
  }
53
- function isPositivePolicyAmount(raw) {
54
- if (typeof raw !== "string") {
55
- return false;
56
- }
57
- try {
58
- return BigInt(raw.trim() || "0") > 0n;
59
- } catch {
60
- return false;
61
- }
62
- }
63
- function hasExplicitPositiveCaps(policy) {
64
- if (!policy || typeof policy !== "object" || Array.isArray(policy)) {
65
- return false;
66
- }
67
- const value = policy;
68
- const solana = value.solana && typeof value.solana === "object" ? value.solana : {};
69
- if (isPositivePolicyAmount(solana.maxPerTx) || isPositivePolicyAmount(solana.maxDaily)) {
70
- return true;
71
- }
72
- const tokenCaps = solana.tokenCaps && typeof solana.tokenCaps === "object" && !Array.isArray(solana.tokenCaps) ? solana.tokenCaps : {};
73
- return Object.values(tokenCaps).some((capRaw) => {
74
- const cap = capRaw && typeof capRaw === "object" ? capRaw : {};
75
- return isPositivePolicyAmount(cap.maxPerTx) || isPositivePolicyAmount(cap.maxDaily);
76
- });
77
- }
78
56
  function resolveWalletStatePaths(env = process.env) {
79
57
  const rootDir = path.join(resolveStateDir(env), "wallet");
80
58
  const stackRootDir = path.join(rootDir, "wallet-stack");
@@ -128,15 +106,31 @@ function resolveLocalSignerMaterialRootDir(env = process.env) {
128
106
  return ensureWalletStateDir(env).rootDir;
129
107
  }
130
108
  function resolveLocalSignerBackendSocketPath(env = process.env) {
131
- const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_BACKEND_SOCKET ?? "").trim();
109
+ return resolveLocalSignerSocketPath(env);
110
+ }
111
+ function resolveLocalSignerControlSocketPath(env = process.env) {
112
+ const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_CONTROL_SOCKET ?? "").trim();
132
113
  if (explicit) {
133
114
  return path.resolve(explicit);
134
115
  }
135
- return resolveLocalSignerSocketPath(env);
116
+ return path.join(resolveLocalSignerMaterialRootDir(env), "local-signer-control.sock");
117
+ }
118
+ function resolveLocalSignerStateDbPath(env = process.env) {
119
+ const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_STATE_DB ?? "").trim();
120
+ if (explicit) {
121
+ return path.resolve(explicit);
122
+ }
123
+ return path.join(resolveLocalSignerMaterialRootDir(env), "signerd-v2.db");
124
+ }
125
+ function resolveLocalSignerMasterKeyPath(env = process.env) {
126
+ const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_MASTER_KEY ?? "").trim();
127
+ if (explicit) {
128
+ return path.resolve(explicit);
129
+ }
130
+ return path.join(resolveLocalSignerMaterialRootDir(env), "signerd-v2.master.key");
136
131
  }
137
- function resolveLocalSignerRunAsUser(env = process.env) {
138
- const explicit = String(env.FASED_WALLET_LOCAL_SIGNER_RUN_AS_USER ?? "").trim();
139
- return explicit || undefined;
132
+ function resolveLocalSignerRunAsUser(_env = process.env) {
133
+ return undefined;
140
134
  }
141
135
  function parseRuntime(value) {
142
136
  switch (value) {
@@ -159,13 +153,6 @@ function inferDefaultWalletProviderId(env) {
159
153
  if (String(env.FASED_WALLET_LOCAL_SIGNER_SOCKET ?? "").trim()) {
160
154
  return "local-socket-signer";
161
155
  }
162
- for (const key of Object.keys(env)) {
163
- if (key === "FASED_WALLET_SOLANA_KEYSTORE_PATH" || key === "FASED_WALLET_PASSPHRASE_FILE" || key.startsWith("FASED_WALLET_SOLANA_KEYSTORE_PATH__")) {
164
- if (String(env[key] ?? "").trim()) {
165
- return "local-socket-signer";
166
- }
167
- }
168
- }
169
156
  return null;
170
157
  }
171
158
  function resolveWalletRuntimeConfig(cfg, env = process.env) {
@@ -203,7 +190,7 @@ function resolveWalletRuntimeConfig(cfg, env = process.env) {
203
190
  enabled,
204
191
  mode,
205
192
  runtime,
206
- execution: { mode: cfg.wallet?.execution?.mode === "autonomous" || cfg.wallet?.execution?.mode !== "manual" && (walletRuntime?.policy?.directSigning ?? true) ? "autonomous" : "manual" },
193
+ execution: { mode: cfg.wallet?.execution?.mode === "autonomous" || cfg.wallet?.execution?.mode !== "manual" && (walletRuntime?.policy?.directSigning ?? false) ? "autonomous" : "manual" },
207
194
  chains,
208
195
  service: {
209
196
  host,
@@ -226,8 +213,8 @@ function resolveWalletRuntimeConfig(cfg, env = process.env) {
226
213
  projectName: "fased-wallet"
227
214
  },
228
215
  policy: {
229
- capsEnabled: typeof walletRuntime?.policy?.capsEnabled === "boolean" ? walletRuntime.policy.capsEnabled : hasExplicitPositiveCaps(walletRuntime?.policy),
230
- directSigning: walletRuntime?.policy?.directSigning ?? true,
216
+ capsEnabled: typeof walletRuntime?.policy?.capsEnabled === "boolean" ? walletRuntime.policy.capsEnabled : true,
217
+ directSigning: walletRuntime?.policy?.directSigning ?? false,
231
218
  skillsEnabled: walletRuntime?.policy?.skillsEnabled === true,
232
219
  solana: {
233
220
  allowPrograms: (walletRuntime?.policy?.solana?.allowPrograms ?? []).map((value) => String(value).trim()).filter(Boolean),
@@ -252,4 +239,4 @@ function resolveWalletRuntimeProviderId(cfg, env = process.env) {
252
239
  }
253
240
 
254
241
  //#endregion
255
- export { ensureWalletStateDir, resolveLocalSignerBackendSocketPath, resolveLocalSignerMaterialRootDir, resolveLocalSignerRunAsUser, resolveLocalSignerSidecarPaths, resolveLocalSignerSocketPath, resolveWalletRuntimeConfig, resolveWalletStatePaths };
242
+ export { ensureWalletStateDir, isLocalSignerExternallyManaged, resolveLocalSignerControlSocketPath, resolveLocalSignerMasterKeyPath, resolveLocalSignerMaterialRootDir, resolveLocalSignerSidecarPaths, resolveLocalSignerSocketPath, resolveLocalSignerStateDbPath, resolveWalletRuntimeConfig, resolveWalletStatePaths };
@@ -1,4 +1,5 @@
1
1
  import { resolveStateDir } from "../config/paths.js";
2
+ import { throwLegacyEmbeddedKeystoreMigrationRequired } from "./legacy-embedded-keystore.js";
2
3
  import syncFs from "node:fs";
3
4
  import path from "node:path";
4
5
  import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
@@ -124,6 +125,7 @@ function decryptProviderPayload(encrypted, env = process.env) {
124
125
  case "local-socket-signer":
125
126
  case "alchemy":
126
127
  case "turnkey":
128
+ case "wallet-standard":
127
129
  case "privy": return parsed.providerId;
128
130
  default: return null;
129
131
  }
@@ -208,6 +210,12 @@ function saveWalletRpcSecret(input, env = process.env) {
208
210
  }
209
211
  function saveWalletProviderSecret(input, env = process.env) {
210
212
  const providerId = input.providerId;
213
+ if (providerId === "embedded-keystore") {
214
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet secret storage is unavailable");
215
+ }
216
+ if (providerId !== "alchemy" && providerId !== "turnkey") {
217
+ throw new Error(`${providerId} does not accept Gateway-held provider credentials; use its signer or wallet authority surface.`);
218
+ }
211
219
  const credentials = {};
212
220
  for (const [keyName, value] of Object.entries(input.credentials ?? {})) {
213
221
  const normalizedKey = keyName.trim();
@@ -256,6 +264,12 @@ function loadWalletRpcSecret(env = process.env, options) {
256
264
  return null;
257
265
  }
258
266
  function loadWalletProviderSecret(providerId, env = process.env) {
267
+ if (providerId === "embedded-keystore") {
268
+ throwLegacyEmbeddedKeystoreMigrationRequired("legacy wallet secret loading is unavailable");
269
+ }
270
+ if (providerId !== "alchemy" && providerId !== "turnkey") {
271
+ return null;
272
+ }
259
273
  const secretPath = resolveWalletProviderSecretPath(providerId, env);
260
274
  if (!syncFs.existsSync(secretPath)) {
261
275
  return null;
@@ -339,6 +353,14 @@ function readWalletRpcSecretStatus(env = process.env, options) {
339
353
  }
340
354
  function readWalletProviderSecretStatus(providerId, env = process.env) {
341
355
  const secretPath = resolveWalletProviderSecretPath(providerId, env);
356
+ if (providerId === "embedded-keystore") {
357
+ return {
358
+ configured: false,
359
+ providerId,
360
+ fields: [],
361
+ path: secretPath
362
+ };
363
+ }
342
364
  const secret = loadWalletProviderSecret(providerId, env);
343
365
  if (!secret) {
344
366
  return {