@fased/fased 0.1.61 → 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 (514) hide show
  1. package/CHANGELOG.md +43 -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/acp/client.js +2 -2
  12. package/dist/acp/secret-file.js +2 -2
  13. package/dist/agents/agent-scope.js +2 -2
  14. package/dist/agents/apply-patch.js +8 -8
  15. package/dist/agents/auth-profiles/paths.js +2 -2
  16. package/dist/agents/auth-profiles/store.js +269 -33
  17. package/dist/agents/bash-tools.exec.js +10 -4
  18. package/dist/agents/bash-tools.shared.js +2 -2
  19. package/dist/agents/cli-credentials.js +4 -4
  20. package/dist/agents/current-model-catalog.js +3 -3
  21. package/dist/agents/docs-path.js +3 -3
  22. package/dist/agents/embedded-pi-mcp.js +4 -4
  23. package/dist/agents/identity-avatar.js +3 -3
  24. package/dist/agents/identity-file.js +2 -2
  25. package/dist/agents/memory-search.js +7 -1
  26. package/dist/agents/model-catalog-access.js +1 -2
  27. package/dist/agents/model-catalog-snapshot.js +1 -1
  28. package/dist/agents/model-catalog-source.js +1 -1
  29. package/dist/agents/model-metadata.js +1 -1
  30. package/dist/agents/model-selection.js +2 -28
  31. package/dist/agents/models-config.providers.js +6 -6
  32. package/dist/agents/openai-codex-app-server.js +5 -5
  33. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  34. package/dist/agents/pi-embedded-runner/model.js +1 -1
  35. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  36. package/dist/agents/pi-embedded-runner/run.js +2 -0
  37. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  38. package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
  39. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
  40. package/dist/agents/pi-model-discovery.js +6 -6
  41. package/dist/agents/pi-project-settings.js +3 -3
  42. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  43. package/dist/agents/pi-tools.js +2 -1
  44. package/dist/agents/sandbox/config.js +1 -1
  45. package/dist/agents/sandbox/context.js +27 -2
  46. package/dist/agents/sandbox/fs-bridge.js +2 -2
  47. package/dist/agents/session-dirs.js +4 -4
  48. package/dist/agents/session-write-lock.js +13 -13
  49. package/dist/agents/shell-utils.js +5 -5
  50. package/dist/agents/skills/bundled-dir.js +4 -4
  51. package/dist/agents/skills/env-overrides.js +38 -28
  52. package/dist/agents/skills/local-loader.js +6 -6
  53. package/dist/agents/skills/plugin-skills.js +2 -2
  54. package/dist/agents/skills/trust.js +93 -0
  55. package/dist/agents/skills/workspace.js +141 -13
  56. package/dist/agents/skills-clawhub.js +36 -11
  57. package/dist/agents/skills-install-download.js +7 -7
  58. package/dist/agents/skills-install-plan.js +2 -2
  59. package/dist/agents/skills-install.js +2 -2
  60. package/dist/agents/skills-marketplace-scan.js +49 -0
  61. package/dist/agents/skills-status.js +2 -2
  62. package/dist/agents/subagent-depth.js +2 -2
  63. package/dist/agents/system-prompt-params.js +2 -2
  64. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  65. package/dist/agents/tools/mining-tool.js +1 -1
  66. package/dist/agents/tools/session-status-tool.js +1 -1
  67. package/dist/agents/tools/wallet-action-tool.js +172 -36
  68. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  69. package/dist/agents/tools/wallet-tool.js +7 -11
  70. package/dist/agents/workspace.js +22 -22
  71. package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
  72. package/dist/auto-reply/reply/agent-runner.js +2 -2
  73. package/dist/auto-reply/reply/commands-export-session.js +7 -7
  74. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  75. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  76. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  77. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  78. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  79. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  80. package/dist/auto-reply/reply/model-selection.js +7 -4
  81. package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
  82. package/dist/auto-reply/reply/post-compaction-context.js +3 -3
  83. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  84. package/dist/auto-reply/reply/session.js +3 -3
  85. package/dist/auto-reply/skill-commands.js +3 -3
  86. package/dist/auto-reply/status.js +6 -6
  87. package/dist/brand.js +1 -1
  88. package/dist/browser/chrome.executables.js +3 -3
  89. package/dist/browser/chrome.js +3 -3
  90. package/dist/browser/chrome.profile-decoration.js +6 -6
  91. package/dist/browser/profiles-service.js +2 -2
  92. package/dist/browser/server-context.js +2 -2
  93. package/dist/browser/trash.js +4 -4
  94. package/dist/build-info.json +3 -3
  95. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  96. package/dist/canvas-host/server.js +4 -4
  97. package/dist/capabilities/catalog.js +3 -3
  98. package/dist/channel-web.js +2 -2
  99. package/dist/channels/plugins/catalog.js +3 -3
  100. package/dist/cli/browser-cli-extension.js +6 -6
  101. package/dist/cli/command-format.js +2 -2
  102. package/dist/cli/cron-cli/register.cron-simple.js +2 -2
  103. package/dist/cli/dns-cli.js +9 -9
  104. package/dist/cli/gateway-cli/dev.js +5 -5
  105. package/dist/cli/gateway-cli/run.js +10 -2
  106. package/dist/cli/hooks-cli.js +5 -5
  107. package/dist/cli/lightweight/gateway-runtime-probe.js +2 -2
  108. package/dist/cli/memory-cli.js +7 -7
  109. package/dist/cli/nodes-media-utils.js +2 -2
  110. package/dist/cli/plugins-cli.js +2 -2
  111. package/dist/cli/program/command-registry.js +1 -1
  112. package/dist/cli/program/register.onboard.js +2 -3
  113. package/dist/cli/program/register.wallet.js +16 -123
  114. package/dist/cli/providers-cli.js +1 -1
  115. package/dist/cli/sat-cli.js +129 -2
  116. package/dist/cli/secrets-cli.js +3 -3
  117. package/dist/cli/update-cli/update-command.js +260 -11
  118. package/dist/cli/windows-argv.js +2 -2
  119. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  120. package/dist/commands/dashboard-link.js +3 -3
  121. package/dist/commands/doctor-config-flow.js +1 -1
  122. package/dist/commands/doctor-install.js +5 -5
  123. package/dist/commands/doctor-legacy-config.js +2 -13
  124. package/dist/commands/doctor-memory-search.js +2 -2
  125. package/dist/commands/doctor-platform-notes.js +2 -2
  126. package/dist/commands/doctor-sandbox.js +2 -2
  127. package/dist/commands/doctor-state-integrity.js +23 -23
  128. package/dist/commands/doctor-workspace.js +3 -3
  129. package/dist/commands/doctor.js +3 -3
  130. package/dist/commands/managed-up.js +2 -2
  131. package/dist/commands/model-picker.js +6 -6
  132. package/dist/commands/models/auth.js +1 -1
  133. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  134. package/dist/commands/onboard-auth.credentials.js +35 -11
  135. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  136. package/dist/commands/onboard-non-interactive/local.js +5 -1
  137. package/dist/commands/onboarding/plugin-install.js +2 -2
  138. package/dist/commands/sessions-cleanup.js +2 -2
  139. package/dist/commands/signal-install.js +6 -6
  140. package/dist/commands/status-all/channels.js +2 -2
  141. package/dist/commands/wallet.js +570 -1913
  142. package/dist/config/cache-utils.js +2 -2
  143. package/dist/config/config.js +2 -2
  144. package/dist/config/includes.js +5 -5
  145. package/dist/config/io.js +66 -4
  146. package/dist/config/paths.js +3 -3
  147. package/dist/config/sat-runtime-ids.js +3 -3
  148. package/dist/config/schema.help.js +8 -7
  149. package/dist/config/schema.labels.js +5 -4
  150. package/dist/config/sessions/disk-budget.js +6 -6
  151. package/dist/config/sessions/paths.js +2 -2
  152. package/dist/config/sessions/store.js +17 -17
  153. package/dist/config/sessions/transcript.js +4 -4
  154. package/dist/config/talk.js +2 -2
  155. package/dist/config/zod-schema.agent-runtime.js +1 -0
  156. package/dist/config/zod-schema.js +5 -0
  157. package/dist/control-ui/assets/{app-BXA4gPvN.js → app-bR-fO5ty.js} +1511 -1555
  158. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  159. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  160. package/dist/control-ui/assets/{index-D2QbJhVg.js → index-ckCxHwjy.js} +3 -3
  161. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  162. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  163. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  164. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  165. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  166. package/dist/control-ui/index.html +1 -1
  167. package/dist/control-ui/version.json +1 -1
  168. package/dist/cron/service/store.js +2 -2
  169. package/dist/cron/store.js +6 -6
  170. package/dist/daemon/systemd-system.js +60 -54
  171. package/dist/discord/monitor/thread-bindings.state.js +2 -2
  172. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  173. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  174. package/dist/extensions/sat-mining/src/sat-bond-layout.js +14 -11
  175. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  176. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  177. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  178. package/dist/federation/auto-connect.js +98 -8
  179. package/dist/federation/marketplace-capability-adapter.js +33 -7
  180. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  181. package/dist/federation/marketplace-delivery.js +351 -215
  182. package/dist/federation/marketplace-direct-payment.js +272 -141
  183. package/dist/federation/marketplace-escrow.js +607 -249
  184. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  185. package/dist/federation/offers.js +9 -7
  186. package/dist/federation/peer-auth-v2.js +529 -0
  187. package/dist/gateway/a2a-http.js +425 -96
  188. package/dist/gateway/a2a-settlement.js +259 -153
  189. package/dist/gateway/a2a-task-store.js +524 -0
  190. package/dist/gateway/auth.js +38 -2
  191. package/dist/gateway/config-reload.js +46 -33
  192. package/dist/gateway/control-ui-boot-check.js +6 -6
  193. package/dist/gateway/control-ui-login.js +7 -7
  194. package/dist/gateway/control-ui.js +9 -9
  195. package/dist/gateway/durable-capacity.js +31 -0
  196. package/dist/gateway/federation-http.js +540 -135
  197. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  198. package/dist/gateway/federation-marketplace.js +535 -230
  199. package/dist/gateway/hooks-mapping.js +4 -4
  200. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  201. package/dist/gateway/security-path.js +1 -1
  202. package/dist/gateway/server-discovery.js +2 -2
  203. package/dist/gateway/server-http.js +1088 -1209
  204. package/dist/gateway/server-methods/chat.js +3 -3
  205. package/dist/gateway/server-methods/models.js +1 -1
  206. package/dist/gateway/server-methods/secrets.js +40 -0
  207. package/dist/gateway/server-methods/sessions.js +6 -6
  208. package/dist/gateway/server-methods/usage.js +2 -2
  209. package/dist/gateway/server-methods.js +1 -2
  210. package/dist/gateway/server-reload-handlers.js +196 -66
  211. package/dist/gateway/server-runtime-config.js +1 -1
  212. package/dist/gateway/server-secrets-runtime.js +288 -0
  213. package/dist/gateway/server.impl.js +73 -42
  214. package/dist/gateway/session-compaction-checkpoints.js +4 -4
  215. package/dist/gateway/session-utils.fs.js +24 -24
  216. package/dist/gateway/session-utils.js +6 -6
  217. package/dist/gateway/sessions-patch.js +3 -5
  218. package/dist/hooks/bundled-dir.js +4 -4
  219. package/dist/hooks/gmail-setup-utils.js +6 -6
  220. package/dist/hooks/import-url.js +2 -2
  221. package/dist/hooks/loader.js +4 -4
  222. package/dist/hooks/workspace.js +7 -7
  223. package/dist/index.js +4 -2
  224. package/dist/infra/archive.js +17 -17
  225. package/dist/infra/boundary-file-read.js +2 -2
  226. package/dist/infra/boundary-path.js +15 -15
  227. package/dist/infra/brew.js +2 -2
  228. package/dist/infra/control-ui-assets.js +14 -14
  229. package/dist/infra/device-auth-store.js +8 -8
  230. package/dist/infra/device-identity.js +8 -8
  231. package/dist/infra/dotenv.js +2 -2
  232. package/dist/infra/exec-approvals.js +8 -8
  233. package/dist/infra/exec-command-resolution.js +4 -4
  234. package/dist/infra/exec-safe-bin-trust.js +2 -2
  235. package/dist/infra/fased-root.js +5 -5
  236. package/dist/infra/fasedhub.js +64 -1
  237. package/dist/infra/fs-safe.js +14 -14
  238. package/dist/infra/gateway-lock.js +11 -11
  239. package/dist/infra/git-commit.js +5 -5
  240. package/dist/infra/git-root.js +4 -4
  241. package/dist/infra/hosted-runtime-artifact.js +3 -3
  242. package/dist/infra/is-main.js +2 -2
  243. package/dist/infra/json-file.js +7 -7
  244. package/dist/infra/local-source-paired-update.js +538 -0
  245. package/dist/infra/managed-runtime-bootstrap.js +6 -6
  246. package/dist/infra/outbound/delivery-queue.js +16 -16
  247. package/dist/infra/path-env.js +3 -3
  248. package/dist/infra/ports-lsof.js +4 -4
  249. package/dist/infra/provider-usage.auth.js +3 -3
  250. package/dist/infra/restart.js +41 -10
  251. package/dist/infra/safe-open-sync.js +2 -2
  252. package/dist/infra/session-cost-usage.js +9 -9
  253. package/dist/infra/shell-env.js +2 -2
  254. package/dist/infra/state-migrations.fs.js +6 -6
  255. package/dist/infra/state-migrations.js +23 -23
  256. package/dist/infra/tmp-fased-dir.js +6 -6
  257. package/dist/infra/update-runner.js +96 -0
  258. package/dist/infra/widearea-dns.js +3 -3
  259. package/dist/infra/wsl.js +2 -2
  260. package/dist/light-update-status.js +11 -11
  261. package/dist/line/accounts.js +2 -2
  262. package/dist/line/download.js +2 -2
  263. package/dist/logging/config.js +3 -3
  264. package/dist/logging/logger.js +7 -7
  265. package/dist/managed/federation.js +3 -3
  266. package/dist/managed/tunnel.js +3 -3
  267. package/dist/media/store.js +13 -13
  268. package/dist/media-understanding/runner.js +3 -3
  269. package/dist/memory/backend-config.js +2 -1
  270. package/dist/memory/embeddings.js +2 -2
  271. package/dist/memory/internal.js +10 -10
  272. package/dist/memory/manager-sync-ops.js +7 -7
  273. package/dist/memory/repair-executor.js +17 -17
  274. package/dist/memory/session-files.js +16 -2
  275. package/dist/node-host/invoke-system-run-plan.js +8 -8
  276. package/dist/node-host/invoke.js +2 -2
  277. package/dist/node-host/runner.js +3 -3
  278. package/dist/pairing/pairing-store.js +3 -3
  279. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  280. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  281. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  282. package/dist/plugin-sdk/{audio-preflight-Bv0hUOWL.js → audio-preflight-BYxAt775.js} +27 -27
  283. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  284. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  285. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  286. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  287. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  288. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  289. package/dist/plugin-sdk/{chunk-items-Bk--NU3E.js → chunk-items-DIRHG2gJ.js} +1 -1
  290. package/dist/plugin-sdk/command-status.d.ts +2 -2
  291. package/dist/plugin-sdk/command-status.js +27 -27
  292. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  293. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  294. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  295. package/dist/plugin-sdk/{config-schema-CGW6J3Pv.js → config-schema-BOT7kHb6.js} +6779 -3696
  296. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  297. package/dist/plugin-sdk/discord.d.ts +5 -5
  298. package/dist/plugin-sdk/discord.js +19 -19
  299. package/dist/plugin-sdk/file-lock.js +35 -4
  300. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  301. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  302. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  303. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  304. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  305. package/dist/plugin-sdk/index.d.ts +9 -27
  306. package/dist/plugin-sdk/index.js +29 -29
  307. package/dist/plugin-sdk/json-store.js +6 -6
  308. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  309. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  310. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  311. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  312. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  313. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  314. package/dist/plugin-sdk/{monitor-B9Cmt_Je.js → monitor-BCFDaqJ-.js} +31 -31
  315. package/dist/plugin-sdk/{monitor-B71iwAgC.js → monitor-BgbjRiPM.js} +32 -32
  316. package/dist/plugin-sdk/{openresponses-http-Du4GMmwo.js → openresponses-http-DFf87SMM.js} +27 -27
  317. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  318. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  319. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  320. package/dist/plugin-sdk/{pairing-message-BMkkS038.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  321. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  322. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  323. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  324. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  325. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  326. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  327. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  328. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  329. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  330. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  331. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  332. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  333. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  334. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  335. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  336. package/dist/plugin-sdk/sat-runtime.js +29 -29
  337. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  338. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  339. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  340. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  341. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  342. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  343. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  344. package/dist/plugin-sdk/{slack-D_bbE6Yd.js → slack-BUTt8cxK.js} +39 -39
  345. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  346. package/dist/plugin-sdk/slack.d.ts +5 -5
  347. package/dist/plugin-sdk/slack.js +9 -9
  348. package/dist/plugin-sdk/{sticker-cache-Dqo9nRhi.js → sticker-cache-D0wHVqjt.js} +3 -3
  349. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  350. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  351. package/dist/plugin-sdk/{telegram-actions-Cnag7JTH.js → telegram-actions-CC_qN4v0.js} +30 -30
  352. package/dist/plugin-sdk/telegram.d.ts +5 -5
  353. package/dist/plugin-sdk/telegram.js +8 -8
  354. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  355. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  356. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  357. package/dist/plugin-sdk/{types-CLIvQaVg.d.ts → types-C3avNytw.d.ts} +3 -4
  358. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  359. package/dist/plugin-sdk/{types-BYDL6dQj.d.ts → types-DWfbSAaM.d.ts} +2 -2
  360. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  361. package/dist/plugin-sdk/{web-BInKQkc4.js → web-BXsJ1vqe.js} +32 -32
  362. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  363. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  364. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  365. package/dist/plugin-sdk/whatsapp.js +12 -12
  366. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  367. package/dist/plugins/bundled-dir.js +3 -3
  368. package/dist/plugins/discovery.js +11 -11
  369. package/dist/plugins/loader.js +13 -13
  370. package/dist/plugins/manifest-registry.js +2 -2
  371. package/dist/plugins/manifest.js +4 -4
  372. package/dist/plugins/path-safety.js +3 -3
  373. package/dist/plugins/status-cache.js +9 -9
  374. package/dist/plugins/update.js +3 -3
  375. package/dist/plugins/web-search-install-catalog.js +3 -3
  376. package/dist/providers/refresh.js +1 -1
  377. package/dist/providers/registry.js +1 -1
  378. package/dist/secrets/apply.js +17 -17
  379. package/dist/secrets/audit.js +11 -11
  380. package/dist/secrets/runtime.js +1 -1
  381. package/dist/secrets/shared.js +9 -9
  382. package/dist/security/scan-paths.js +2 -2
  383. package/dist/shared/config-eval.js +2 -2
  384. package/dist/shared/pid-alive.js +2 -2
  385. package/dist/tasks/standing-orders.js +5 -5
  386. package/dist/tasks/task-flow-registry.js +5 -5
  387. package/dist/tasks/task-registry.js +5 -5
  388. package/dist/tasks/workflow-definitions.js +6 -6
  389. package/dist/telegram/token.js +5 -5
  390. package/dist/utils.js +5 -5
  391. package/dist/wallet/external-submission-ledger.js +376 -0
  392. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  393. package/dist/wallet/local-socket-signer-archive.js +30 -0
  394. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  395. package/dist/wallet/local-socket-signer-policy.js +166 -0
  396. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  397. package/dist/wallet/native-signer-wallet-id.js +25 -0
  398. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  399. package/dist/wallet/providers/local-socket-signer-adapter.js +382 -107
  400. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  401. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  402. package/dist/wallet/signer-network-admin.js +184 -0
  403. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  404. package/dist/wallet/solana-bond-signing.js +157 -69
  405. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  406. package/dist/wallet/solana-swap.js +520 -64
  407. package/dist/wallet/solana-transaction-inspection.js +106 -4
  408. package/dist/wallet/solana-trigger.js +658 -320
  409. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  410. package/dist/wallet/wallet-approval-auth.js +20 -31
  411. package/dist/wallet/wallet-atomic-state.js +53 -0
  412. package/dist/wallet/wallet-audit-log.js +5 -5
  413. package/dist/wallet/wallet-canary.js +0 -1
  414. package/dist/wallet/wallet-inbound-events.js +19 -14
  415. package/dist/wallet/wallet-observability.js +5 -5
  416. package/dist/wallet/wallet-policy-simulation.js +1 -1
  417. package/dist/wallet/wallet-policy.js +95 -41
  418. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  419. package/dist/wallet/wallet-provider-registry.js +64 -51
  420. package/dist/wallet/wallet-provider-resolver.js +62 -63
  421. package/dist/wallet/wallet-runtime-config.js +31 -44
  422. package/dist/wallet/wallet-secrets-store.js +44 -22
  423. package/dist/wallet/wallet-send-approvals.js +1894 -592
  424. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  425. package/dist/wallet/wallet-settlement-links.js +17 -16
  426. package/dist/wallet/wallet-standard-review.js +353 -0
  427. package/dist/wallet/wallet-status.js +0 -9
  428. package/dist/wallet/wallet-task-ledger.js +16 -2
  429. package/dist/web/accounts.js +3 -3
  430. package/dist/web/auth-store.js +18 -18
  431. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  432. package/dist/web/auto-reply/monitor.js +2 -2
  433. package/dist/web/session.js +4 -4
  434. package/dist/wizard/host-security-capability.js +15 -24
  435. package/dist/wizard/onboarding.finalize.js +63 -184
  436. package/dist/wizard/onboarding.host-security.js +118 -1368
  437. package/dist/wizard/onboarding.js +180 -242
  438. package/dist/wizard/onboarding.wallet.js +323 -829
  439. package/extensions/acpx/package.json +1 -1
  440. package/extensions/bluebubbles/package.json +1 -1
  441. package/extensions/copilot-proxy/package.json +1 -1
  442. package/extensions/diagnostics-otel/package.json +1 -1
  443. package/extensions/fased-federation/package.json +1 -1
  444. package/extensions/google-gemini-cli-auth/package.json +1 -1
  445. package/extensions/imessage/package.json +1 -1
  446. package/extensions/irc/package.json +1 -1
  447. package/extensions/line/package.json +1 -1
  448. package/extensions/llm-task/package.json +1 -1
  449. package/extensions/lobster/package.json +1 -1
  450. package/extensions/matrix/CHANGELOG.md +18 -0
  451. package/extensions/matrix/package.json +1 -1
  452. package/extensions/mattermost/package.json +1 -1
  453. package/extensions/memory-core/package.json +2 -2
  454. package/extensions/memory-lancedb/package.json +1 -1
  455. package/extensions/minimax-portal-auth/package.json +1 -1
  456. package/extensions/msteams/CHANGELOG.md +18 -0
  457. package/extensions/msteams/package.json +1 -1
  458. package/extensions/nextcloud-talk/package.json +1 -1
  459. package/extensions/nostr/CHANGELOG.md +18 -0
  460. package/extensions/nostr/package.json +1 -1
  461. package/extensions/open-prose/package.json +1 -1
  462. package/extensions/sat-mining/index.ts +498 -153
  463. package/extensions/sat-mining/package.json +1 -1
  464. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  465. package/extensions/sat-mining/src/audit-store.ts +50 -5
  466. package/extensions/sat-mining/src/claim-service.ts +85 -14
  467. package/extensions/sat-mining/src/config.ts +9 -0
  468. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  469. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  470. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  471. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  472. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  473. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  474. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  475. package/extensions/sat-mining/src/runtime.ts +14 -0
  476. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  477. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  478. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  479. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  480. package/extensions/signal/package.json +1 -1
  481. package/extensions/synology-chat/package.json +1 -1
  482. package/extensions/tlon/package.json +1 -1
  483. package/extensions/twitch/CHANGELOG.md +18 -0
  484. package/extensions/twitch/package.json +1 -1
  485. package/extensions/voice-call/CHANGELOG.md +18 -0
  486. package/extensions/voice-call/package.json +1 -1
  487. package/extensions/zalo/CHANGELOG.md +18 -0
  488. package/extensions/zalo/package.json +1 -1
  489. package/extensions/zalouser/CHANGELOG.md +18 -0
  490. package/extensions/zalouser/package.json +1 -1
  491. package/install.sh +4955 -0
  492. package/package.json +24 -5
  493. package/scripts/fased-host-updater.mjs +1421 -0
  494. package/scripts/fased-host-updaterctl.mjs +186 -0
  495. package/scripts/fased-managed-service.sh +36 -0
  496. package/scripts/fased-managed-updater.mjs +3065 -156
  497. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  498. package/scripts/fased-signer-network-hosting.sh +143 -0
  499. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  500. package/scripts/fased-signer-policy-hosting.sh +50 -0
  501. package/scripts/fased-signer-policy-local.sh +26 -0
  502. package/scripts/hosted-release-manifest.mjs +185 -0
  503. package/scripts/install-fased-signerd.sh +217 -0
  504. package/scripts/install-managed-runtime.mjs +212 -10
  505. package/scripts/managed-runtime-layout.mjs +75 -3
  506. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  507. package/scripts/start-managed.sh +169 -360
  508. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  509. package/dist/plugin-sdk/tmp-fased-dir-BdFQvrvw.d.ts +0 -77
  510. package/dist/wallet/local-socket-signer-broker.js +0 -224
  511. package/dist/wallet/local-socket-signer-custody.js +0 -42
  512. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  513. package/dist/wallet/providers/privy-adapter.js +0 -80
  514. package/dist/wallet/wallet-custody.js +0 -1836
@@ -0,0 +1,25 @@
1
+ //#region src/wallet/native-signer-wallet-id.ts
2
+ function normalizeNativeSignerWalletId(value) {
3
+ const normalized = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
4
+ return normalized || "default";
5
+ }
6
+ function resolveNativeSignerWalletId(wallet) {
7
+ if (wallet.providerId !== "local-socket-signer") {
8
+ throw new Error(`wallet ${wallet.id} is not owned by the native signer`);
9
+ }
10
+ const recorded = typeof wallet.metadata?.signerWalletId === "string" ? wallet.metadata.signerWalletId.trim() : "";
11
+ if (recorded) {
12
+ if (recorded.length > 64 || normalizeNativeSignerWalletId(recorded) !== recorded) {
13
+ throw new Error(`wallet ${wallet.id} has a non-canonical native signer wallet ID`);
14
+ }
15
+ return recorded;
16
+ }
17
+ const fallback = normalizeNativeSignerWalletId(wallet.id);
18
+ if (fallback.length > 64) {
19
+ throw new Error(`wallet ${wallet.id} has an overlong native signer wallet ID`);
20
+ }
21
+ return fallback;
22
+ }
23
+
24
+ //#endregion
25
+ export { normalizeNativeSignerWalletId, resolveNativeSignerWalletId };
@@ -18,6 +18,9 @@ var AlchemyAdapter = class {
18
18
  supportsRotateKeys: false,
19
19
  supportsResetKeys: false,
20
20
  supportsPasskeyGate: false,
21
+ signingLocation: "unavailable",
22
+ supportsSignTransaction: false,
23
+ supportsSignMessage: false,
21
24
  supportedExecutionModes: ["manual"],
22
25
  supportedChains: chains
23
26
  };
@@ -1,27 +1,38 @@
1
1
  import { ensureWalletStateDir } from "../wallet-runtime-config.js";
2
- import { fetchSolanaMintInfoViaRpc } from "../solana-assets.js";
3
2
  import { WalletProviderError } from "../wallet-provider-adapter.js";
4
- import { buildCreateAssociatedTokenAccountIdempotentInstruction, buildTransferCheckedInstruction, deriveAssociatedTokenAddress } from "../solana-spl-transfer.js";
3
+ import { LOCAL_SIGNER_NATIVE_FEE_RESERVATION_LAMPORTS_V2, parseLocalSocketSignerRequest, parseLocalSocketSignerResponseEnvelope, validateLocalSocketSignerResult } from "../local-socket-signer-protocol.js";
4
+ import { SIGNER_PROTOCOL_V2_REQUIRED_CLIENT_FEATURES } from "../signer-protocol-v2.generated.js";
5
5
  import { redactWalletDiagnosticText, walletDiagnosticErrorMessage, walletDiagnosticErrorString } from "../wallet-redaction.js";
6
- import { parseLocalSocketSignerResponseEnvelope, validateLocalSocketSignerResult } from "../local-socket-signer-protocol.js";
7
- import fs from "node:fs";
6
+ import syncFs from "node:fs";
8
7
  import path from "node:path";
9
8
  import net from "node:net";
10
9
 
11
10
  //#region src/wallet/providers/local-socket-signer-adapter.ts
11
+ const SOLANA_TOKEN_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
12
12
  const MAX_SIGNER_RESPONSE_BYTES = 1 << 20;
13
+ const REQUIRED_PROTOCOL_V2_FEATURES = SIGNER_PROTOCOL_V2_REQUIRED_CLIENT_FEATURES;
13
14
  const SIGNER_SOCKET_TIMEOUT_MS = {
14
15
  health: 2e3,
16
+ "v2.capabilities": 2e3,
17
+ "v2.jupiter.trigger.history": 3e4,
18
+ "v2.policy.get": 5e3,
19
+ "v2.policy.put": 5e3,
20
+ "v2.policy.tighten": 5e3,
21
+ "v2.wallet.get": 5e3,
22
+ "v2.wallet.create": 1e4,
23
+ "v2.wallet.import": 2e4,
24
+ "v2.wallet.importLegacy": 3e4,
25
+ "v2.wallet.reencrypt": 1e4,
26
+ "v2.execute": 12e4,
27
+ "v2.review.get": 5e3,
28
+ "v2.review.prepare": 15e3,
29
+ "v2.review.execute": 12e4,
30
+ "v2.review.authorization.begin": 15e3,
31
+ "v2.review.authorization.finish": 3e4,
32
+ "v2.operation.get": 5e3,
33
+ "v2.operation.reconcile": 2e4,
15
34
  getAddresses: 1e4,
16
- getBalance: 15e3,
17
- prepareTx: 15e3,
18
- signTx: 2e4,
19
- sendTx: 12e4,
20
- sendSolanaInstruction: 12e4,
21
- sendSolanaInstructions: 12e4,
22
- custodyStatus: 5e3,
23
- unlockCustody: 1e4,
24
- lockCustody: 1e4
35
+ getBalance: 15e3
25
36
  };
26
37
  function signerTimeoutFor(payload) {
27
38
  return SIGNER_SOCKET_TIMEOUT_MS[payload.op] ?? 3e4;
@@ -29,7 +40,7 @@ function signerTimeoutFor(payload) {
29
40
  function assertSecureLocalSignerSocket(socketPath) {
30
41
  let stat;
31
42
  try {
32
- stat = fs.lstatSync(socketPath);
43
+ stat = syncFs.lstatSync(socketPath);
33
44
  } catch (err) {
34
45
  throw new WalletProviderError({
35
46
  code: "wallet_provider_unavailable",
@@ -68,12 +79,13 @@ function assertSecureLocalSignerSocket(socketPath) {
68
79
  }
69
80
  }
70
81
  async function callSocket(socketPath, payload, options) {
82
+ const checkedPayload = parseLocalSocketSignerRequest(payload);
71
83
  return await new Promise((resolve, reject) => {
72
84
  const socket = net.createConnection(socketPath);
73
85
  let buf = "";
74
86
  let settled = false;
75
87
  const maxResponseBytes = options?.maxResponseBytes ?? MAX_SIGNER_RESPONSE_BYTES;
76
- const timeoutMs = options?.timeoutMs ?? signerTimeoutFor(payload);
88
+ const timeoutMs = options?.timeoutMs ?? signerTimeoutFor(checkedPayload);
77
89
  const finish = (err, value) => {
78
90
  if (settled) {
79
91
  return;
@@ -92,11 +104,11 @@ async function callSocket(socketPath, payload, options) {
92
104
  };
93
105
  const timer = setTimeout(() => {
94
106
  socket.destroy();
95
- finish(new Error(`local socket signer timeout after ${timeoutMs}ms for op=${payload.op}`));
107
+ finish(new Error(`local socket signer timeout after ${timeoutMs}ms for op=${checkedPayload.op}`));
96
108
  }, timeoutMs);
97
109
  socket.setEncoding("utf8");
98
110
  socket.on("connect", () => {
99
- socket.write(`${JSON.stringify(payload)}\n`);
111
+ socket.write(`${JSON.stringify(checkedPayload)}\n`);
100
112
  });
101
113
  socket.on("data", (chunk) => {
102
114
  buf += chunk;
@@ -116,8 +128,8 @@ async function callSocket(socketPath, payload, options) {
116
128
  finish(new Error(parsed.error || "local socket signer error"));
117
129
  return;
118
130
  }
119
- if (!validateLocalSocketSignerResult(payload.op, parsed.result)) {
120
- finish(new Error(`invalid local socket signer result for op=${payload.op}`));
131
+ if (!validateLocalSocketSignerResult(checkedPayload.op, parsed.result)) {
132
+ finish(new Error(`invalid local socket signer result for op=${checkedPayload.op}`));
121
133
  return;
122
134
  }
123
135
  finish(undefined, parsed.result);
@@ -139,7 +151,17 @@ async function probeLocalSocketSignerHealth(socketPath) {
139
151
  details: result?.details ? redactWalletDiagnosticText(result.details) : undefined,
140
152
  readOnly: result?.readOnly,
141
153
  keystoreType: result?.keystoreType,
142
- chains: Array.isArray(result?.chains) ? result.chains : undefined
154
+ chains: Array.isArray(result?.chains) ? result.chains : undefined,
155
+ ready: result?.ready,
156
+ release: result?.release,
157
+ schema: result?.schema,
158
+ network: result?.network,
159
+ capabilities: result?.capabilities,
160
+ policies: result?.policies,
161
+ webAuthn: result?.webAuthn,
162
+ jupiter: result?.jupiter,
163
+ audit: result?.audit,
164
+ state: result?.state
143
165
  };
144
166
  } catch (err) {
145
167
  return {
@@ -148,6 +170,24 @@ async function probeLocalSocketSignerHealth(socketPath) {
148
170
  };
149
171
  }
150
172
  }
173
+ async function requireLocalSocketSignerProtocolV2(socketPath, intentType) {
174
+ const result = await callSocket(socketPath, { op: "v2.capabilities" });
175
+ const capabilities = result.capabilities;
176
+ const protocol = capabilities?.protocol;
177
+ const missingFeatures = REQUIRED_PROTOCOL_V2_FEATURES.filter((feature) => !capabilities?.features.includes(feature));
178
+ const intentReviewFeatures = intentType === "solana.vaultBondAction" ? [
179
+ "reviewedVaultBondActions",
180
+ "signerOwnedStateRecheck",
181
+ "durableReviewAuthorization"
182
+ ] : intentType === "federation.bondChallenge" ? ["reviewedFederationBondChallenges", "durableReviewAuthorization"] : [];
183
+ const missingIntentFeatures = intentReviewFeatures.filter((feature) => !capabilities?.features.includes(feature));
184
+ if (result.ready !== true || !protocol || protocol.current !== 2 || protocol.min > 2 || protocol.max < 2 || capabilities.nativeFeeReservationLamports !== LOCAL_SIGNER_NATIVE_FEE_RESERVATION_LAMPORTS_V2 || missingFeatures.length > 0 || missingIntentFeatures.length > 0 || intentType && !capabilities?.intentTypes.includes(intentType)) {
185
+ throw new WalletProviderError({
186
+ code: "wallet_provider_unavailable",
187
+ message: `local-socket-signer protocol-v2 capability negotiation failed${missingFeatures.length > 0 ? `; missing ${missingFeatures.join(",")}` : ""}${missingIntentFeatures.length > 0 ? `; missing intent features ${missingIntentFeatures.join(",")}` : ""}${intentType && !capabilities?.intentTypes.includes(intentType) ? `; unsupported intent ${intentType}` : ""}`
188
+ });
189
+ }
190
+ }
151
191
  var LocalSocketSignerAdapter = class {
152
192
  constructor(socketPath, options) {
153
193
  this.socketPath = socketPath;
@@ -157,11 +197,14 @@ var LocalSocketSignerAdapter = class {
157
197
  this.capabilities = {
158
198
  custodyModel: "self-hosted",
159
199
  supportsCreateWallet: false,
160
- supportsPrepare: true,
200
+ supportsPrepare: false,
161
201
  supportsSend: true,
162
202
  supportsRotateKeys: false,
163
203
  supportsResetKeys: false,
164
204
  supportsPasskeyGate: false,
205
+ signingLocation: "server",
206
+ supportsSignTransaction: false,
207
+ supportsSignMessage: false,
165
208
  supportedExecutionModes: ["manual", "autonomous"],
166
209
  supportedChains: ["solana"]
167
210
  };
@@ -169,6 +212,9 @@ var LocalSocketSignerAdapter = class {
169
212
  supportsChain(chain) {
170
213
  return this.capabilities.supportedChains.includes(chain);
171
214
  }
215
+ async requireProtocolV2(intentType) {
216
+ await requireLocalSocketSignerProtocolV2(this.socketPath, intentType);
217
+ }
172
218
  async health() {
173
219
  try {
174
220
  const details = await probeLocalSocketSignerHealth(this.socketPath);
@@ -180,10 +226,15 @@ var LocalSocketSignerAdapter = class {
180
226
  provider: this.id,
181
227
  configured: true,
182
228
  checkedAt: new Date().toISOString(),
183
- details: details?.details ?? [
184
- details?.readOnly ? "read-only" : "read-write",
185
- details?.keystoreType ? `keystore=${details.keystoreType}` : "",
186
- Array.isArray(details?.chains) ? `chains=${details.chains.join(",")}` : ""
229
+ details: [
230
+ details?.details ?? "",
231
+ ...!details?.details ? [
232
+ details?.readOnly ? "read-only" : "read-write",
233
+ details?.keystoreType ? `keystore=${details.keystoreType}` : "",
234
+ Array.isArray(details?.chains) ? `chains=${details.chains.join(",")}` : ""
235
+ ] : [],
236
+ details?.jupiter ? `jupiter-trigger=${details.jupiter.triggerConfigured ? "configured" : "not-configured"} jupiter-live=${details.jupiter.liveEnabled === true ? "enabled" : "preview-only"}` : "",
237
+ ...details?.state?.capacityWarnings ?? []
187
238
  ].filter(Boolean).join(" ")
188
239
  };
189
240
  } catch (err) {
@@ -198,127 +249,351 @@ var LocalSocketSignerAdapter = class {
198
249
  }
199
250
  async getAddresses(options) {
200
251
  const walletId = options?.walletId?.trim() || this.options?.scopedWalletId?.trim();
201
- return await callSocket(this.socketPath, {
202
- op: "getAddresses",
203
- ...walletId ? { walletId } : {}
204
- });
205
- }
206
- async getBalance(chain, options) {
207
- const walletId = options?.walletId?.trim() || this.options?.scopedWalletId?.trim();
208
- return await callSocket(this.socketPath, {
209
- op: "getBalance",
210
- chain,
211
- ...walletId ? { walletId } : {}
252
+ if (!walletId) {
253
+ throw new WalletProviderError({
254
+ code: "wallet_provider_invalid_config",
255
+ message: "local-socket-signer requires an explicit walletId"
256
+ });
257
+ }
258
+ await this.requireProtocolV2();
259
+ const wallet = await callSocket(this.socketPath, {
260
+ op: "v2.wallet.get",
261
+ walletId
212
262
  });
263
+ return { solana: wallet.publicKey };
213
264
  }
214
- async prepareTx(request) {
265
+ async getSignerPolicy(walletIdRaw) {
266
+ const walletId = walletIdRaw.trim();
267
+ if (!walletId) {
268
+ throw new WalletProviderError({
269
+ code: "wallet_provider_invalid_config",
270
+ message: "local-socket-signer policy lookup requires an explicit walletId"
271
+ });
272
+ }
273
+ assertSecureLocalSignerSocket(this.socketPath);
274
+ await this.requireProtocolV2();
215
275
  return await callSocket(this.socketPath, {
216
- op: "prepareTx",
217
- request
276
+ op: "v2.policy.get",
277
+ walletId
218
278
  });
219
279
  }
220
- async sendTx(request) {
280
+ async tightenSignerPolicy(params) {
281
+ const walletId = params.walletId.trim();
282
+ if (!walletId || !Number.isSafeInteger(params.expectedVersion) || params.expectedVersion < 1) {
283
+ throw new WalletProviderError({
284
+ code: "wallet_provider_invalid_config",
285
+ message: "local-socket-signer policy tightening requires a walletId and positive expected version"
286
+ });
287
+ }
221
288
  assertSecureLocalSignerSocket(this.socketPath);
222
- if (request.chain === "solana" && request.program?.trim()) {
223
- return await this.sendSplTokenTx(request);
289
+ await this.requireProtocolV2();
290
+ const acknowledged = await callSocket(this.socketPath, {
291
+ op: "v2.policy.tighten",
292
+ walletId,
293
+ request: {
294
+ expectedVersion: params.expectedVersion,
295
+ policy: params.policy
296
+ }
297
+ });
298
+ if (acknowledged.walletId !== walletId || acknowledged.role !== params.policy.role || acknowledged.version !== params.expectedVersion + 1) {
299
+ throw new WalletProviderError({
300
+ code: "wallet_provider_unavailable",
301
+ message: "local-socket-signer did not acknowledge the exact next policy version and wallet role",
302
+ retryable: false
303
+ });
224
304
  }
225
- return await callSocket(this.socketPath, {
226
- op: "sendTx",
227
- request
305
+ const durable = await callSocket(this.socketPath, {
306
+ op: "v2.policy.get",
307
+ walletId
228
308
  });
309
+ if (JSON.stringify(durable) !== JSON.stringify(acknowledged)) {
310
+ throw new WalletProviderError({
311
+ code: "wallet_provider_unavailable",
312
+ message: "local-socket-signer policy acknowledgement does not match durable signer state",
313
+ retryable: false
314
+ });
315
+ }
316
+ return acknowledged;
229
317
  }
230
- async signTx(request) {
318
+ async getBalance(chain, options) {
319
+ if (chain !== "solana") {
320
+ throw new WalletProviderError({
321
+ code: "wallet_provider_unsupported_chain",
322
+ message: "local-socket-signer supports Solana only"
323
+ });
324
+ }
325
+ const walletId = options?.walletId?.trim() || this.options?.scopedWalletId?.trim();
326
+ if (!walletId) {
327
+ throw new WalletProviderError({
328
+ code: "wallet_provider_invalid_config",
329
+ message: "local-socket-signer balance lookup requires an explicit walletId"
330
+ });
331
+ }
231
332
  assertSecureLocalSignerSocket(this.socketPath);
333
+ await this.requireProtocolV2();
232
334
  return await callSocket(this.socketPath, {
233
- op: "signTx",
234
- request
335
+ op: "getBalance",
336
+ chain,
337
+ walletId
235
338
  });
236
339
  }
237
- async sendSplTokenTx(request) {
238
- const mint = request.program?.trim();
239
- const destinationOwner = request.to?.trim();
240
- const amountRaw = request.amount?.trim();
241
- if (!mint || !destinationOwner || !amountRaw) {
340
+ async sendTx(request) {
341
+ assertSecureLocalSignerSocket(this.socketPath);
342
+ if (request.chain !== "solana") {
242
343
  throw new WalletProviderError({
243
- code: "wallet_provider_invalid_config",
244
- message: "local-socket-signer SPL send requires mint, destination, and amount"
344
+ code: "wallet_provider_unsupported_chain",
345
+ message: "local-socket-signer supports Solana only"
245
346
  });
246
347
  }
247
- const rpcUrl = this.options?.rpcUrl?.trim();
248
- if (!rpcUrl) {
348
+ const untypedSerializedTransaction = request.serializedTxBase64;
349
+ if (typeof untypedSerializedTransaction === "string" && untypedSerializedTransaction.trim()) {
249
350
  throw new WalletProviderError({
250
351
  code: "wallet_provider_invalid_config",
251
- message: "local-socket-signer SPL send requires a Solana RPC URL"
352
+ message: "local-socket-signer accepts typed SOL/SPL intents, not serialized transactions"
252
353
  });
253
354
  }
254
- const walletId = this.options?.scopedWalletId?.trim();
255
- const addresses = await this.getAddresses(walletId ? { walletId } : undefined);
256
- const authority = addresses.solana?.trim();
257
- if (!authority) {
355
+ const memo = request.memo?.trim();
356
+ if (memo && !/^fased:a2a-(?:payment|refund):v1:[0-9a-f]{64}$/u.test(memo)) {
258
357
  throw new WalletProviderError({
259
- code: "wallet_provider_unavailable",
260
- message: "local-socket-signer wallet has no Solana address"
358
+ code: "wallet_provider_invalid_config",
359
+ message: "local-socket-signer accepts only typed Fased A2A payment or refund memos"
261
360
  });
262
361
  }
263
- const mintInfo = await fetchSolanaMintInfoViaRpc({
264
- rpcUrl,
265
- mint
362
+ return await this.executeTypedTransfer(request);
363
+ }
364
+ async prepareJupiterReview(request) {
365
+ return await this.prepareSignerReview(request);
366
+ }
367
+ async getSignerReview(request) {
368
+ assertSecureLocalSignerSocket(this.socketPath);
369
+ await this.requireProtocolV2();
370
+ return await callSocket(this.socketPath, {
371
+ op: "v2.review.get",
372
+ walletId: request.walletId,
373
+ request: { requestId: request.requestId }
266
374
  });
267
- if (!mintInfo) {
375
+ }
376
+ async prepareSignerReview(request) {
377
+ assertSecureLocalSignerSocket(this.socketPath);
378
+ await this.requireProtocolV2(request.intent.type);
379
+ const policy = await callSocket(this.socketPath, {
380
+ op: "v2.policy.get",
381
+ walletId: request.walletId
382
+ });
383
+ return await callSocket(this.socketPath, {
384
+ op: "v2.review.prepare",
385
+ walletId: request.walletId,
386
+ request: {
387
+ requestId: request.requestId,
388
+ policyHash: policy.hash,
389
+ mode: request.mode,
390
+ intent: request.intent,
391
+ ...request.transaction ? { transaction: request.transaction } : {}
392
+ }
393
+ });
394
+ }
395
+ async executeJupiterReview(request) {
396
+ return await this.executeSignerReview(request);
397
+ }
398
+ async executeSignerIntent(request) {
399
+ assertSecureLocalSignerSocket(this.socketPath);
400
+ await this.requireProtocolV2(request.intent.type);
401
+ const policy = await callSocket(this.socketPath, {
402
+ op: "v2.policy.get",
403
+ walletId: request.walletId
404
+ });
405
+ return await callSocket(this.socketPath, {
406
+ op: "v2.execute",
407
+ walletId: request.walletId,
408
+ request: {
409
+ requestId: request.requestId,
410
+ policyHash: policy.hash,
411
+ intent: request.intent
412
+ }
413
+ });
414
+ }
415
+ async listJupiterTriggerOrders(request) {
416
+ assertSecureLocalSignerSocket(this.socketPath);
417
+ await this.requireProtocolV2();
418
+ const history = await callSocket(this.socketPath, {
419
+ op: "v2.jupiter.trigger.history",
420
+ walletId: request.walletId
421
+ });
422
+ const orders = request.state ? history.orders.filter((order) => request.state === "active" ? order.orderState === "open" : order.orderState !== "open") : history.orders;
423
+ return { orders };
424
+ }
425
+ async prepareTypedTransferReview(request) {
426
+ assertSecureLocalSignerSocket(this.socketPath);
427
+ const mint = request.mint?.trim();
428
+ const memo = request.memo?.trim();
429
+ if (memo && !/^fased:a2a-(?:payment|refund):v1:[0-9a-f]{64}$/u.test(memo)) {
268
430
  throw new WalletProviderError({
269
- code: "wallet_provider_unavailable",
270
- message: "failed to resolve SPL mint metadata from Solana RPC"
431
+ code: "wallet_provider_invalid_config",
432
+ message: "local-socket-signer accepts only typed Fased A2A payment or refund memos"
271
433
  });
272
434
  }
273
- const sourceTokenAccount = await deriveAssociatedTokenAddress({
274
- owner: authority,
275
- mint,
276
- tokenProgramId: mintInfo.tokenProgramId
435
+ let intent;
436
+ if (mint) {
437
+ intent = {
438
+ type: "solana.splTransferChecked",
439
+ tokenProgram: request.tokenProgram?.trim() || SOLANA_TOKEN_PROGRAM_ID,
440
+ mint,
441
+ destination: request.destination,
442
+ amount: request.amount,
443
+ ...memo ? { memo } : {}
444
+ };
445
+ } else {
446
+ intent = {
447
+ type: "solana.nativeTransfer",
448
+ destination: request.destination,
449
+ lamports: request.amount,
450
+ ...memo ? { memo } : {}
451
+ };
452
+ }
453
+ await this.requireProtocolV2(intent.type);
454
+ const policy = await callSocket(this.socketPath, {
455
+ op: "v2.policy.get",
456
+ walletId: request.walletId
277
457
  });
278
- const destinationTokenAccount = await deriveAssociatedTokenAddress({
279
- owner: destinationOwner,
280
- mint,
281
- tokenProgramId: mintInfo.tokenProgramId
458
+ return await callSocket(this.socketPath, {
459
+ op: "v2.review.prepare",
460
+ walletId: request.walletId,
461
+ request: {
462
+ requestId: request.requestId,
463
+ policyHash: policy.hash,
464
+ mode: "reviewed",
465
+ intent
466
+ }
282
467
  });
283
- const createAta = await buildCreateAssociatedTokenAccountIdempotentInstruction({
284
- payer: authority,
285
- owner: destinationOwner,
286
- mint,
287
- tokenProgramId: mintInfo.tokenProgramId
468
+ }
469
+ async executeSignerReview(request) {
470
+ assertSecureLocalSignerSocket(this.socketPath);
471
+ await this.requireProtocolV2();
472
+ return await callSocket(this.socketPath, {
473
+ op: "v2.review.execute",
474
+ walletId: request.walletId,
475
+ request: {
476
+ requestId: request.requestId,
477
+ ...request.authorization ? { authorization: request.authorization } : {}
478
+ }
288
479
  });
289
- const transfer = buildTransferCheckedInstruction({
290
- sourceTokenAccount,
291
- mint,
292
- destinationTokenAccount,
293
- authority,
294
- amountRaw,
295
- decimals: mintInfo.decimals,
296
- tokenProgramId: mintInfo.tokenProgramId
480
+ }
481
+ async beginJupiterReviewAuthorization(request) {
482
+ return await this.beginSignerReviewAuthorization(request);
483
+ }
484
+ async beginSignerReviewAuthorization(request) {
485
+ assertSecureLocalSignerSocket(this.socketPath);
486
+ await this.requireProtocolV2();
487
+ return await callSocket(this.socketPath, {
488
+ op: "v2.review.authorization.begin",
489
+ walletId: request.walletId,
490
+ request: { requestId: request.requestId }
297
491
  });
298
- const preTx = await this.sendSolanaInstruction({
299
- walletId,
300
- ...createAta
492
+ }
493
+ async finishJupiterReviewAuthorization(request) {
494
+ return await this.finishSignerReviewAuthorization(request);
495
+ }
496
+ async getSignerOperation(request) {
497
+ assertSecureLocalSignerSocket(this.socketPath);
498
+ await this.requireProtocolV2();
499
+ return await callSocket(this.socketPath, {
500
+ op: "v2.operation.get",
501
+ walletId: request.walletId,
502
+ request: { requestId: request.requestId }
503
+ });
504
+ }
505
+ async reconcileSignerOperation(request) {
506
+ assertSecureLocalSignerSocket(this.socketPath);
507
+ await this.requireProtocolV2();
508
+ return await callSocket(this.socketPath, {
509
+ op: "v2.operation.reconcile",
510
+ walletId: request.walletId,
511
+ request: { requestId: request.requestId }
512
+ });
513
+ }
514
+ async finishSignerReviewAuthorization(request) {
515
+ assertSecureLocalSignerSocket(this.socketPath);
516
+ await this.requireProtocolV2();
517
+ return await callSocket(this.socketPath, {
518
+ op: "v2.review.authorization.finish",
519
+ walletId: request.walletId,
520
+ request: {
521
+ challengeId: request.challengeId,
522
+ credential: request.credential
523
+ }
301
524
  });
302
- const sent = await this.sendSolanaInstruction({
525
+ }
526
+ async executeTypedTransfer(request) {
527
+ const walletId = request.walletId?.trim() || this.options?.scopedWalletId?.trim();
528
+ const requestId = request.requestId?.trim();
529
+ const destination = request.to?.trim();
530
+ const amount = request.amount?.trim();
531
+ if (!walletId || !requestId || !destination || !amount) {
532
+ throw new WalletProviderError({
533
+ code: "wallet_provider_invalid_config",
534
+ message: "local-socket-signer typed send requires walletId, stable requestId, destination, and raw-unit amount"
535
+ });
536
+ }
537
+ const intentType = request.program?.trim() ? "solana.splTransferChecked" : "solana.nativeTransfer";
538
+ await this.requireProtocolV2(intentType);
539
+ const wallet = await callSocket(this.socketPath, {
540
+ op: "v2.wallet.get",
541
+ walletId
542
+ });
543
+ const policy = await callSocket(this.socketPath, {
544
+ op: "v2.policy.get",
545
+ walletId
546
+ });
547
+ const mint = request.program?.trim();
548
+ let intent;
549
+ if (mint) {
550
+ intent = {
551
+ type: "solana.splTransferChecked",
552
+ destination,
553
+ mint,
554
+ amount,
555
+ ...request.memo?.trim() ? { memo: request.memo.trim() } : {}
556
+ };
557
+ } else {
558
+ intent = {
559
+ type: "solana.nativeTransfer",
560
+ destination,
561
+ lamports: amount,
562
+ ...request.memo?.trim() ? { memo: request.memo.trim() } : {}
563
+ };
564
+ }
565
+ const operation = await callSocket(this.socketPath, {
566
+ op: "v2.execute",
303
567
  walletId,
304
- ...transfer
568
+ request: {
569
+ requestId,
570
+ policyHash: policy.hash,
571
+ intent
572
+ }
305
573
  });
574
+ if (operation.state !== "confirmed" || !operation.signature) {
575
+ const ambiguous = operation.state === "broadcast" || operation.state === "unknown";
576
+ throw new WalletProviderError({
577
+ code: ambiguous ? "wallet_provider_ambiguous" : "wallet_provider_unavailable",
578
+ message: ambiguous ? `signer operation ${requestId} has an ambiguous ${operation.state} result; reconcile it before any new attempt` : `signer operation ${requestId} ended in state=${operation.state}${operation.error ? `: ${operation.error}` : ""}`,
579
+ retryable: false
580
+ });
581
+ }
306
582
  return {
307
- ...sent,
583
+ ok: true,
584
+ chain: "solana",
585
+ txHash: operation.signature,
586
+ signer: wallet.publicKey,
308
587
  metadata: {
309
- ...sent.metadata,
310
588
  provider: this.id,
311
- associatedTokenTxHash: preTx.txHash
589
+ requestId: operation.requestId,
590
+ intentDigest: operation.intentDigest,
591
+ transactionDigest: operation.transactionDigest,
592
+ policyHash: operation.policyHash,
593
+ operationState: operation.state
312
594
  }
313
595
  };
314
596
  }
315
- async sendSolanaInstruction(request) {
316
- assertSecureLocalSignerSocket(this.socketPath);
317
- return await callSocket(this.socketPath, {
318
- op: "sendSolanaInstruction",
319
- request
320
- });
321
- }
322
597
  };
323
598
  function resolveLocalSocketSignerPath(env) {
324
599
  const socketPath = String(env.FASED_WALLET_LOCAL_SIGNER_SOCKET ?? "").trim();
@@ -332,4 +607,4 @@ function requireLocalSocketSignerPath(env) {
332
607
  }
333
608
 
334
609
  //#endregion
335
- export { LocalSocketSignerAdapter, callLocalSocketSigner, probeLocalSocketSignerHealth, requireLocalSocketSignerPath };
610
+ export { LocalSocketSignerAdapter, assertSecureLocalSignerSocket, callLocalSocketSigner, probeLocalSocketSignerHealth, requireLocalSocketSignerPath };