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