xytara 3.1.0 → 3.1.2

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 (373) hide show
  1. package/.env.example +67 -58
  2. package/ADAPTER_START_HERE.md +56 -56
  3. package/CARRIED_HANDOFF_DEMO.md +60 -60
  4. package/EXAMPLE_PATHS.md +53 -53
  5. package/FINAL_CONTRACT.md +498 -498
  6. package/LICENSE +201 -201
  7. package/NOTICE +3 -3
  8. package/PARTNER_READY_PATH.md +71 -71
  9. package/PUBLIC_DEMO_SCRIPT.md +78 -78
  10. package/README.md +6 -1
  11. package/REAL_PAYMENT_SETUP.md +32 -3
  12. package/RELEASE_NOTES.md +14 -14
  13. package/SERVICE_CONTRACT.md +419 -419
  14. package/START_HERE.md +1 -1
  15. package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -61
  16. package/TERMINOLOGY.md +50 -50
  17. package/WHY_XYTARA_XOONYA.md +63 -63
  18. package/XT1_EXECUTION_TRUTH_STANDARD.md +78 -78
  19. package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +75 -75
  20. package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +124 -124
  21. package/XYTARA_DEFAULT_PATH_MODEL.md +84 -84
  22. package/XYTARA_EXECUTION_TRUTH_MODEL.md +171 -171
  23. package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +68 -68
  24. package/adapters/AUTHORING_GUIDE.md +243 -243
  25. package/adapters/ONBOARDING_POSTURE.md +61 -61
  26. package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +84 -84
  27. package/adapters/adapter-manifest.schema.json +283 -283
  28. package/adapters/examples/example-execution-adapter.js +61 -61
  29. package/adapters/examples/example-execution-adapter.manifest.json +81 -81
  30. package/adapters/examples/example-settlement-adapter.js +55 -55
  31. package/adapters/examples/example-settlement-adapter.manifest.json +78 -78
  32. package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +124 -124
  33. package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +121 -121
  34. package/adapters/examples/example-third-party-identity-registration.certification-pack.json +22 -22
  35. package/adapters/examples/example-third-party-identity-registration.record.json +26 -26
  36. package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +126 -126
  37. package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +124 -124
  38. package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +120 -120
  39. package/adapters/examples/example-third-party-registration.certification-pack.json +22 -22
  40. package/adapters/examples/example-third-party-registration.record.json +28 -28
  41. package/adapters/examples/example-third-party-registration.submission-bundle.json +126 -126
  42. package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +22 -22
  43. package/adapters/examples/example-third-party-settlement-registration.record.json +26 -26
  44. package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +127 -127
  45. package/adapters/examples/langchain-reference-execution-adapter.js +81 -81
  46. package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -79
  47. package/adapters/examples/langgraph-reference-execution-adapter.js +81 -81
  48. package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -79
  49. package/adapters/examples/minimal-third-party-execution-adapter.js +61 -61
  50. package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -79
  51. package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -26
  52. package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -22
  53. package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -126
  54. package/adapters/integration-certification-pack.schema.json +82 -82
  55. package/adapters/integration-registration-record.schema.json +114 -114
  56. package/adapters/integration-submission-bundle-set.schema.json +39 -39
  57. package/adapters/integration-submission-bundle.schema.json +34 -34
  58. package/adapters/interfaces.js +56 -56
  59. package/bin/xytara-first-run.js +244 -244
  60. package/bin/xytara-release.js +1429 -1429
  61. package/bin/xytara-run.js +186 -186
  62. package/bin/xytara.js +80 -80
  63. package/client.js +3 -3
  64. package/examples/_demo_env.js +40 -0
  65. package/examples/adapter_review_walkthrough.js +54 -53
  66. package/examples/export_carried_handoff.js +81 -80
  67. package/examples/funded_runtime_walkthrough.js +71 -70
  68. package/examples/generated.carried-handoff.json +30 -0
  69. package/examples/partner_launch_walkthrough.js +44 -43
  70. package/examples/quickstart.js +3256 -3255
  71. package/fixtures/catalog.js +1134 -1134
  72. package/index.js +395 -395
  73. package/integrations/dispatch.js +276 -276
  74. package/integrations/registry-snapshot.schema.json +36 -36
  75. package/integrations/registry.js +2261 -2261
  76. package/integrations/views.js +28 -28
  77. package/lib/a2a_lane_contract.js +104 -104
  78. package/lib/a2c_lane_contract.js +111 -111
  79. package/lib/account_auth.js +518 -518
  80. package/lib/acp_lane_contract.js +54 -54
  81. package/lib/activity_audit_contract.js +322 -322
  82. package/lib/adapter_certification_contract.js +130 -130
  83. package/lib/adapter_depth_contract.js +156 -156
  84. package/lib/adapter_pack.js +118 -118
  85. package/lib/adapter_partner_pack.js +89 -89
  86. package/lib/adapter_promotion_pack.js +89 -89
  87. package/lib/adapter_protocol_truth_contract.js +229 -229
  88. package/lib/announcement_pack.js +61 -61
  89. package/lib/artifact_distribution_lane_contract.js +54 -54
  90. package/lib/asyncapi_contract.js +150 -150
  91. package/lib/auth_interop_contract.js +80 -80
  92. package/lib/authority_binding_lifecycle_contract.js +182 -182
  93. package/lib/autonomous_entry_contract.js +409 -409
  94. package/lib/bolt_lane_contract.js +55 -55
  95. package/lib/bolt_payment_front.js +172 -172
  96. package/lib/business_cockpit.js +378 -378
  97. package/lib/capability_execution_truth.js +272 -272
  98. package/lib/capability_registry.js +633 -633
  99. package/lib/catalog_contract.js +966 -966
  100. package/lib/catalog_family_model.js +193 -193
  101. package/lib/catalog_views.js +55 -55
  102. package/lib/checkout_event_security.js +142 -142
  103. package/lib/cloudevents_contract.js +80 -80
  104. package/lib/command_flow.js +411 -406
  105. package/lib/commerce_artifacts.js +503 -503
  106. package/lib/commerce_authority.js +449 -449
  107. package/lib/commerce_cases.js +317 -317
  108. package/lib/commerce_checkout.js +509 -509
  109. package/lib/commerce_client.js +7687 -7676
  110. package/lib/commerce_coordination.js +346 -346
  111. package/lib/commerce_economics.js +4017 -4016
  112. package/lib/commerce_identity.js +578 -578
  113. package/lib/commerce_quotes.js +237 -237
  114. package/lib/commerce_reports.js +14461 -14461
  115. package/lib/commerce_runtime.js +315 -315
  116. package/lib/commerce_shell.js +257 -257
  117. package/lib/crypto_agility_matrix.js +125 -125
  118. package/lib/default_path_contract.js +412 -412
  119. package/lib/delivery_summary_contract.js +95 -95
  120. package/lib/ecosystem_entry.js +64 -64
  121. package/lib/erc8004_lane_contract.js +65 -65
  122. package/lib/event_system_lane_contract.js +75 -75
  123. package/lib/execution_truth_contract.js +234 -234
  124. package/lib/external_credit_bridge.js +142 -142
  125. package/lib/external_execution_runtime.js +132 -132
  126. package/lib/feature_control_lane_contract.js +54 -54
  127. package/lib/first_run_conversion_contract.js +290 -290
  128. package/lib/framework_lane_contract.js +89 -89
  129. package/lib/framework_provider_promotion.js +235 -235
  130. package/lib/full_catalog_contract.js +525 -525
  131. package/lib/go_live_operator_pack.js +391 -391
  132. package/lib/http_transport.js +73 -73
  133. package/lib/identity_auth.js +175 -175
  134. package/lib/identity_interop_contract.js +82 -82
  135. package/lib/integration_matrix_contract.js +102 -102
  136. package/lib/l402_lane_contract.js +55 -55
  137. package/lib/l402_payment_front.js +192 -192
  138. package/lib/launch_narrative.js +53 -53
  139. package/lib/lifecycle_continuity_contract.js +115 -115
  140. package/lib/machine_identity_registry_contract.js +199 -199
  141. package/lib/major_rails_lane_contract.js +150 -150
  142. package/lib/market_lane_contract.js +467 -467
  143. package/lib/market_lane_depth_contract.js +182 -182
  144. package/lib/market_lane_promotion_contract.js +210 -210
  145. package/lib/market_lane_trace_contract.js +278 -278
  146. package/lib/mcp_lane_contract.js +137 -137
  147. package/lib/network_transport.js +110 -110
  148. package/lib/offline_verifiability_recovery_contract.js +155 -155
  149. package/lib/openapi_contract.js +296 -296
  150. package/lib/operational_receipt_contract.js +165 -165
  151. package/lib/operator_intelligence.js +407 -407
  152. package/lib/outreach_copy_pack.js +51 -51
  153. package/lib/outreach_message_pack.js +71 -71
  154. package/lib/outreach_proof.js +71 -71
  155. package/lib/outreach_target_pack.js +60 -60
  156. package/lib/partner_intelligence.js +105 -105
  157. package/lib/payment_config.js +239 -191
  158. package/lib/payment_front_registry.js +53 -53
  159. package/lib/payment_protocol_contract.js +165 -165
  160. package/lib/payment_rail_truth_contract.js +324 -324
  161. package/lib/payment_verification.js +312 -264
  162. package/lib/phase_10_closeout_pack.js +45 -45
  163. package/lib/phase_10_completion_pack.js +76 -76
  164. package/lib/phase_10_decision_record_pack.js +54 -54
  165. package/lib/phase_10_decision_resolution_pack.js +53 -53
  166. package/lib/phase_10_demand_signal_adapters_runtime_pack.js +74 -74
  167. package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +74 -74
  168. package/lib/phase_10_freeze_baseline_pack.js +67 -67
  169. package/lib/phase_10_freeze_review_pack.js +64 -64
  170. package/lib/phase_10_gate_pack.js +57 -57
  171. package/lib/phase_10_long_tail_continuity_pack.js +80 -80
  172. package/lib/phase_10_long_tail_ecosystem_pack.js +66 -66
  173. package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -74
  174. package/lib/phase_1_claude_mcp_pack.js +60 -60
  175. package/lib/phase_1_claude_mcp_runtime_pack.js +52 -52
  176. package/lib/phase_1_ecosystem_pack.js +67 -67
  177. package/lib/phase_1_openai_codex_pack.js +60 -60
  178. package/lib/phase_1_openai_codex_runtime_pack.js +52 -52
  179. package/lib/phase_2_base_runtime_pack.js +71 -71
  180. package/lib/phase_2_base_usdc_runtime_pack.js +72 -72
  181. package/lib/phase_2_closeout_pack.js +65 -65
  182. package/lib/phase_2_completion_pack.js +113 -113
  183. package/lib/phase_2_decision_record_pack.js +66 -66
  184. package/lib/phase_2_decision_resolution_pack.js +69 -69
  185. package/lib/phase_2_eth_runtime_pack.js +70 -70
  186. package/lib/phase_2_evm_base_runtime_pack.js +73 -73
  187. package/lib/phase_2_evm_runtime_pack.js +71 -71
  188. package/lib/phase_2_flip_preview_pack.js +60 -60
  189. package/lib/phase_2_freeze_review_pack.js +99 -99
  190. package/lib/phase_2_gate_pack.js +77 -77
  191. package/lib/phase_2_payment_rails_pack.js +71 -71
  192. package/lib/phase_2_usdc_runtime_pack.js +71 -71
  193. package/lib/phase_3_brc_runtime_pack.js +81 -81
  194. package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -83
  195. package/lib/phase_3_closeout_pack.js +62 -62
  196. package/lib/phase_3_completion_pack.js +94 -94
  197. package/lib/phase_3_decision_record_pack.js +64 -64
  198. package/lib/phase_3_decision_resolution_pack.js +69 -69
  199. package/lib/phase_3_freeze_baseline_pack.js +67 -67
  200. package/lib/phase_3_freeze_review_pack.js +80 -80
  201. package/lib/phase_3_gate_pack.js +76 -76
  202. package/lib/phase_3_metanet_runtime_pack.js +81 -81
  203. package/lib/phase_3_native_bsv_pack.js +91 -91
  204. package/lib/phase_3_native_continuity_pack.js +82 -82
  205. package/lib/phase_4_attestation_runtime_pack.js +75 -75
  206. package/lib/phase_4_closeout_pack.js +45 -45
  207. package/lib/phase_4_completion_pack.js +94 -94
  208. package/lib/phase_4_decision_record_pack.js +54 -54
  209. package/lib/phase_4_decision_resolution_pack.js +45 -45
  210. package/lib/phase_4_erc8004_runtime_pack.js +76 -76
  211. package/lib/phase_4_freeze_baseline_pack.js +67 -67
  212. package/lib/phase_4_freeze_review_pack.js +68 -68
  213. package/lib/phase_4_gate_pack.js +58 -58
  214. package/lib/phase_4_identity_registry_runtime_pack.js +75 -75
  215. package/lib/phase_4_identity_trust_pack.js +73 -73
  216. package/lib/phase_4_trust_continuity_pack.js +86 -86
  217. package/lib/phase_5_antelope_runtime_pack.js +76 -76
  218. package/lib/phase_5_closeout_pack.js +44 -44
  219. package/lib/phase_5_completion_pack.js +82 -82
  220. package/lib/phase_5_constellation_dag_runtime_pack.js +76 -76
  221. package/lib/phase_5_decision_record_pack.js +54 -54
  222. package/lib/phase_5_decision_resolution_pack.js +45 -45
  223. package/lib/phase_5_digibyte_dgb_runtime_pack.js +76 -76
  224. package/lib/phase_5_freeze_baseline_pack.js +67 -67
  225. package/lib/phase_5_freeze_review_pack.js +68 -68
  226. package/lib/phase_5_gate_pack.js +58 -58
  227. package/lib/phase_5_hedera_hbar_runtime_pack.js +76 -76
  228. package/lib/phase_5_kaspa_kas_runtime_pack.js +76 -76
  229. package/lib/phase_5_major_rails_continuity_pack.js +86 -86
  230. package/lib/phase_5_major_rails_pack.js +110 -110
  231. package/lib/phase_5_metal_runtime_pack.js +76 -76
  232. package/lib/phase_5_polkadot_dot_runtime_pack.js +76 -76
  233. package/lib/phase_5_proton_xpr_runtime_pack.js +76 -76
  234. package/lib/phase_5_solana_runtime_pack.js +76 -76
  235. package/lib/phase_6_autogen_runtime_pack.js +72 -72
  236. package/lib/phase_6_closeout_pack.js +46 -46
  237. package/lib/phase_6_completion_pack.js +77 -77
  238. package/lib/phase_6_decision_record_pack.js +54 -54
  239. package/lib/phase_6_decision_resolution_pack.js +53 -53
  240. package/lib/phase_6_framework_continuity_pack.js +81 -81
  241. package/lib/phase_6_framework_runtime_pack.js +68 -68
  242. package/lib/phase_6_freeze_baseline_pack.js +68 -68
  243. package/lib/phase_6_freeze_review_pack.js +65 -65
  244. package/lib/phase_6_gate_pack.js +59 -59
  245. package/lib/phase_6_langchain_runtime_pack.js +72 -72
  246. package/lib/phase_6_langgraph_runtime_pack.js +72 -72
  247. package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -72
  248. package/lib/phase_7_closeout_pack.js +45 -45
  249. package/lib/phase_7_completion_pack.js +85 -85
  250. package/lib/phase_7_decision_record_pack.js +53 -53
  251. package/lib/phase_7_decision_resolution_pack.js +53 -53
  252. package/lib/phase_7_event_system_continuity_pack.js +89 -89
  253. package/lib/phase_7_event_system_pack.js +76 -76
  254. package/lib/phase_7_freeze_baseline_pack.js +74 -74
  255. package/lib/phase_7_freeze_review_pack.js +65 -65
  256. package/lib/phase_7_gate_pack.js +58 -58
  257. package/lib/phase_7_kafka_runtime_pack.js +74 -74
  258. package/lib/phase_7_mqtt_runtime_pack.js +74 -74
  259. package/lib/phase_7_nats_runtime_pack.js +74 -74
  260. package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -74
  261. package/lib/phase_8_closeout_pack.js +46 -46
  262. package/lib/phase_8_completion_pack.js +82 -82
  263. package/lib/phase_8_decision_record_pack.js +54 -54
  264. package/lib/phase_8_decision_resolution_pack.js +53 -53
  265. package/lib/phase_8_external_receipt_import_runtime_pack.js +74 -74
  266. package/lib/phase_8_external_result_import_runtime_pack.js +74 -74
  267. package/lib/phase_8_freeze_baseline_pack.js +71 -71
  268. package/lib/phase_8_freeze_review_pack.js +64 -64
  269. package/lib/phase_8_gate_pack.js +58 -58
  270. package/lib/phase_8_proof_bridge_continuity_pack.js +86 -86
  271. package/lib/phase_8_proof_bridges_pack.js +72 -72
  272. package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +74 -74
  273. package/lib/phase_9_closeout_pack.js +46 -46
  274. package/lib/phase_9_completion_pack.js +82 -82
  275. package/lib/phase_9_custody_refs_runtime_pack.js +74 -74
  276. package/lib/phase_9_decision_record_pack.js +54 -54
  277. package/lib/phase_9_decision_resolution_pack.js +53 -53
  278. package/lib/phase_9_freeze_baseline_pack.js +71 -71
  279. package/lib/phase_9_freeze_review_pack.js +64 -64
  280. package/lib/phase_9_gate_pack.js +58 -58
  281. package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +74 -74
  282. package/lib/phase_9_treasury_connectivity_pack.js +72 -72
  283. package/lib/phase_9_treasury_continuity_pack.js +86 -86
  284. package/lib/phase_9_treasury_destinations_runtime_pack.js +74 -74
  285. package/lib/phase_program_pack.js +120 -120
  286. package/lib/pricing_optimization_contract.js +775 -775
  287. package/lib/protocol_lane_contract.js +117 -117
  288. package/lib/provenance_lane_contract.js +54 -54
  289. package/lib/provider_lane_contract.js +240 -240
  290. package/lib/provider_runtime_journey_contract.js +183 -183
  291. package/lib/public_surface_policy_contract.js +111 -111
  292. package/lib/publish_plan.js +51 -51
  293. package/lib/record_queries.js +48 -48
  294. package/lib/release_candidate.js +50 -50
  295. package/lib/release_center.js +1093 -1093
  296. package/lib/release_history.js +205 -205
  297. package/lib/release_manifest.js +113 -113
  298. package/lib/release_pack.js +453 -453
  299. package/lib/request_rate_limit.js +144 -144
  300. package/lib/resource_views.js +31 -31
  301. package/lib/revenue_launch_path_contract.js +326 -326
  302. package/lib/route_matchers.js +34 -34
  303. package/lib/route_params.js +19 -19
  304. package/lib/runtime_bridge.js +124 -124
  305. package/lib/runtime_operations_worker.js +282 -282
  306. package/lib/runtime_state_store.js +354 -354
  307. package/lib/settlement_lane_contract.js +111 -111
  308. package/lib/shared_signals_lane_contract.js +54 -54
  309. package/lib/signed_audit_provenance_contract.js +83 -83
  310. package/lib/soft_launch_pack.js +78 -78
  311. package/lib/stablecoin_lane_contract.js +76 -76
  312. package/lib/stripe_mpp_lane_contract.js +96 -96
  313. package/lib/stripe_mpp_payment_front.js +158 -158
  314. package/lib/telemetry_lane_contract.js +54 -54
  315. package/lib/treasury_destinations_contract.js +764 -764
  316. package/lib/treasury_egress_policy_contract.js +91 -91
  317. package/lib/treasury_lane_contract.js +84 -84
  318. package/lib/trust_portability_boundary_contract.js +72 -72
  319. package/lib/x402_facilitator.js +155 -0
  320. package/lib/x402_lane_contract.js +118 -118
  321. package/package.json +106 -105
  322. package/scripts/registry_cli.js +275 -275
  323. package/scripts/verify_adapters.js +554 -554
  324. package/scripts/verify_all.js +4962 -4962
  325. package/scripts/verify_control_plane_contracts.js +34 -34
  326. package/scripts/verify_control_plane_routes.js +70 -70
  327. package/scripts/verify_delivery_summary.js +112 -112
  328. package/scripts/verify_examples.js +19 -19
  329. package/scripts/verify_first_run_conversions.js +81 -81
  330. package/scripts/verify_framework_provider_promotion.js +152 -152
  331. package/scripts/verify_full_catalog.js +174 -174
  332. package/scripts/verify_integrations.js +620 -620
  333. package/scripts/verify_lifecycle_continuity.js +96 -96
  334. package/scripts/verify_market_lane_depth.js +94 -94
  335. package/scripts/verify_market_lane_promotion.js +103 -103
  336. package/scripts/verify_market_lane_traces.js +98 -98
  337. package/scripts/verify_market_lanes.js +102 -102
  338. package/scripts/verify_operator_observability_boundary.js +83 -83
  339. package/scripts/verify_pricing_experiment_plan.js +124 -124
  340. package/scripts/verify_provider_runtime_breadth.js +109 -109
  341. package/scripts/verify_provider_runtime_journeys.js +111 -111
  342. package/scripts/verify_revenue_launch_paths.js +105 -105
  343. package/scripts/verify_runtime_durability.js +52 -52
  344. package/scripts/verify_service.js +15410 -15250
  345. package/scripts/verify_tooling.js +1412 -1412
  346. package/scripts/verify_treasury_public_boundary.js +97 -97
  347. package/scripts/verify_x402_facilitator.js +174 -0
  348. package/server.js +11117 -11006
  349. package/.env.production.checklist +0 -77
  350. package/.env.production.template +0 -54
  351. package/.github/workflows/publish-mcp-executor.yml +0 -43
  352. package/ADAPTER_PARTNER_PATH.md +0 -47
  353. package/ADAPTER_PROMOTION_START_HERE.md +0 -44
  354. package/BOLT_BINDINGS.production.worksheet.json +0 -31
  355. package/EXECUTION_TARGETS.production.worksheet.json +0 -73
  356. package/GO_LIVE_OPERATOR_PACK.md +0 -412
  357. package/L402_BINDINGS.production.worksheet.json +0 -30
  358. package/OPERATIONS_RUNBOOK.md +0 -115
  359. package/OPERATOR_START_HERE.md +0 -63
  360. package/OUTREACH_MESSAGES.md +0 -19
  361. package/OUTREACH_START_HERE.md +0 -36
  362. package/PRODUCTION_MANUAL_CLOSEOUT_SEQUENCE.md +0 -172
  363. package/PROGRAM_COMPLETE_RELEASE.md +0 -63
  364. package/PROGRAM_STATUS.md +0 -57
  365. package/PUBLISH_PLAN.md +0 -26
  366. package/RELEASE_CHECKLIST.md +0 -16
  367. package/SOFT_LAUNCH_KIT.md +0 -47
  368. package/services/mcp-execution-target/DISCOVERY_REGISTRY_PLAYBOOK.md +0 -141
  369. package/services/mcp-execution-target/README.md +0 -319
  370. package/services/mcp-execution-target/package.json +0 -14
  371. package/services/mcp-execution-target/server.js +0 -1031
  372. package/services/mcp-execution-target/server.json +0 -16
  373. package/services/mcp-execution-target/verify.js +0 -308
@@ -1,503 +1,503 @@
1
- "use strict";
2
-
3
- const crypto = require("crypto");
4
- const { findTask } = require("../fixtures/catalog");
5
- const { buildDefaultEconomicPath, buildTreasuryDestination } = require("./commerce_quotes");
6
- const {
7
- buildBsvTeranodeSettlementHints,
8
- extractBsvTeranodePaymentReference,
9
- isBsvTeranodeSettlementMode
10
- } = require("./settlement_bsv_teranode");
11
-
12
- function classifyObservedLatency(durationMs) {
13
- if (durationMs <= 1000) return "instant";
14
- if (durationMs <= 15000) return "near_real_time";
15
- return "governed_async";
16
- }
17
-
18
- function assessLatency(declaredLatencyClass, observedLatencyClass) {
19
- const order = {
20
- instant: 1,
21
- near_real_time: 2,
22
- governed_async: 3
23
- };
24
- const declared = order[declaredLatencyClass] || 99;
25
- const observed = order[observedLatencyClass] || 99;
26
- return observed <= declared ? "within_posture" : "outside_posture";
27
- }
28
-
29
- function createCommandArtifacts(payload, quote, options) {
30
- const opts = options || {};
31
- const transactionId = `txn_${crypto.randomBytes(6).toString("hex")}`;
32
- const receiptId = `rcpt_${crypto.randomBytes(6).toString("hex")}`;
33
- const startedAt = new Date();
34
- const durationMs = 250;
35
- const completedAt = new Date(startedAt.getTime() + durationMs);
36
- const requestedTasks = Array.isArray(payload.tasks) && payload.tasks.length > 0
37
- ? payload.tasks.map((task, index) => ({
38
- task_id: task && task.task_id ? String(task.task_id).trim() : `task_${index + 1}`,
39
- task_ref: task && task.task_ref ? String(task.task_ref).trim() : ""
40
- }))
41
- : [{
42
- task_id: "task_1",
43
- task_ref: String(payload.task_ref || "").trim()
44
- }];
45
- const resolvedTasks = requestedTasks
46
- .map((task) => {
47
- const catalogTask = findTask(task.task_ref);
48
- return catalogTask ? { ...task, catalogTask } : null;
49
- })
50
- .filter(Boolean);
51
- const primaryTask = resolvedTasks[0] && resolvedTasks[0].catalogTask ? resolvedTasks[0].catalogTask : null;
52
- const declaredLatencyClass = (primaryTask && primaryTask.latency_class) || "near_real_time";
53
- const observedLatencyClass = classifyObservedLatency(durationMs);
54
- const deferredCompletion = opts.deferredCompletion === true;
55
- const timing = {
56
- declared_latency_class: declaredLatencyClass,
57
- started_at_iso: startedAt.toISOString(),
58
- completed_at_iso: deferredCompletion ? null : completedAt.toISOString(),
59
- duration_ms: deferredCompletion ? null : durationMs,
60
- observed_latency_class: deferredCompletion ? null : observedLatencyClass,
61
- assessment: deferredCompletion ? "pending" : assessLatency(declaredLatencyClass, observedLatencyClass)
62
- };
63
- const resultTasks = resolvedTasks.length > 0 ? resolvedTasks : requestedTasks.map((task) => ({
64
- ...task,
65
- catalogTask: null
66
- }));
67
- const normalizedBody = payload && payload.body && typeof payload.body === "object" && !Array.isArray(payload.body)
68
- ? payload.body
69
- : {};
70
- const externalExecution = opts.externalExecution && typeof opts.externalExecution === "object"
71
- ? opts.externalExecution
72
- : null;
73
- const externalResponse = externalExecution && externalExecution.target_response && typeof externalExecution.target_response === "object"
74
- ? externalExecution.target_response
75
- : null;
76
- const resultsByTaskId = Object.fromEntries(resultTasks.map((task, index) => [
77
- task.task_id,
78
- (() => {
79
- const base = {
80
- task_ref: task.task_ref,
81
- status: "completed",
82
- output_ref: `output_${transactionId}_${index + 1}`
83
- };
84
- if (task.task_ref === "admission.preview") {
85
- base.preview_kind = "admission";
86
- base.admission_ref = `admission_${transactionId}_${index + 1}`;
87
- }
88
- if (task.task_ref === "a2a.negotiate") {
89
- base.negotiation_ref = `a2a_negotiation_${transactionId}_${index + 1}`;
90
- base.interaction_front = "a2a";
91
- }
92
- if (task.task_ref === "a2a.commit") {
93
- base.negotiation_ref = `a2a_negotiation_${transactionId}_${index + 1}`;
94
- base.commitment_ref = `a2a_commitment_${transactionId}_${index + 1}`;
95
- base.interaction_front = "a2a";
96
- }
97
- if (task.task_ref === "a2c.session.open") {
98
- base.session_ref = `a2c_session_${transactionId}_${index + 1}`;
99
- base.interaction_front = "a2c";
100
- }
101
- if (task.task_ref === "a2c.pack.preview") {
102
- base.preview_kind = "a2c_pack";
103
- base.pack_preview_ref = `a2c_pack_preview_${transactionId}_${index + 1}`;
104
- base.interaction_front = "a2c";
105
- }
106
- if (task.task_ref === "trust.handoff.emit") {
107
- base.handoff_kind = "trust";
108
- base.handoff_action = "emit";
109
- base.handoff_ref = `trust_handoff_${transactionId}_${index + 1}`;
110
- }
111
- if (task.task_ref === "trust.handoff.validate") {
112
- base.handoff_kind = "trust";
113
- base.handoff_action = "validate";
114
- base.handoff_ref = `trust_handoff_${transactionId}_${index + 1}`;
115
- }
116
- if (task.task_ref === "execution_receipt.handoff.emit") {
117
- base.handoff_kind = "execution_receipt";
118
- base.handoff_action = "emit";
119
- base.handoff_ref = `execution_receipt_handoff_${transactionId}_${index + 1}`;
120
- }
121
- if (task.task_ref === "execution_receipt.handoff.validate") {
122
- base.handoff_kind = "execution_receipt";
123
- base.handoff_action = "validate";
124
- base.handoff_ref = `execution_receipt_handoff_${transactionId}_${index + 1}`;
125
- }
126
- if (task.task_ref === "receipt_ledger.handoff.emit") {
127
- base.handoff_kind = "receipt_ledger";
128
- base.handoff_action = "emit";
129
- base.handoff_ref = `receipt_ledger_handoff_${transactionId}_${index + 1}`;
130
- }
131
- if (task.task_ref === "receipt_ledger.handoff.validate") {
132
- base.handoff_kind = "receipt_ledger";
133
- base.handoff_action = "validate";
134
- base.handoff_ref = `receipt_ledger_handoff_${transactionId}_${index + 1}`;
135
- }
136
- if (task.task_ref === "runtime.emit") {
137
- base.runtime_ref = `runtime_event_${transactionId}_${index + 1}`;
138
- base.runtime_action = "emit";
139
- }
140
- if (task.task_ref === "runtime.anchor") {
141
- base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
142
- base.runtime_action = "anchor";
143
- }
144
- if (task.task_ref === "runtime.emit_anchor") {
145
- base.runtime_ref = `runtime_event_${transactionId}_${index + 1}`;
146
- base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
147
- base.runtime_action = "emit_anchor";
148
- }
149
- if (task.task_ref === "identity.attest.preview") {
150
- base.preview_kind = "identity_attestation";
151
- base.identity_attestation_ref = `identity_attestation_${transactionId}_${index + 1}`;
152
- }
153
- if (task.task_ref === "identity.registry.link") {
154
- base.identity_link_ref = `identity_link_${transactionId}_${index + 1}`;
155
- base.registry_record_ref = `registry_${transactionId}_${index + 1}`;
156
- }
157
- if (task.task_ref === "registry.register") {
158
- base.registry_record_ref = `registry_${transactionId}_${index + 1}`;
159
- }
160
- if (task.task_ref === "registry.pack.bundle") {
161
- base.registry_pack_ref = `registry_pack_${transactionId}_${index + 1}`;
162
- }
163
- if (task.task_ref === "anchoring.submit") {
164
- base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
165
- }
166
- if (task.task_ref === "anchoring.pack.preview") {
167
- base.preview_kind = "anchoring_pack";
168
- base.anchor_preview_ref = `anchor_preview_${transactionId}_${index + 1}`;
169
- }
170
- if (task.task_ref === "adapter.mcp.invoke") {
171
- base.adapter_lane = "mcp";
172
- base.tool_name = normalizedBody.tool_name || null;
173
- base.invocation_status = externalExecution ? "provider_completed" : "simulated";
174
- }
175
- if (externalExecution) {
176
- base.execution_provider = externalExecution.provider || null;
177
- base.execution_target_id = externalExecution.target_id || null;
178
- if (externalResponse && externalResponse.provider_job_id) base.provider_job_id = externalResponse.provider_job_id;
179
- if (externalResponse && externalResponse.output_payload) base.output_payload = externalResponse.output_payload;
180
- if (externalResponse && externalResponse.output_ref) base.output_ref = externalResponse.output_ref;
181
- base.provider_status = externalResponse && externalResponse.provider_status
182
- ? externalResponse.provider_status
183
- : "completed";
184
- }
185
- return base;
186
- })()
187
- ]));
188
- const capabilityScopes = Array.from(new Set(resultTasks.flatMap((task) =>
189
- Array.isArray(task.catalogTask && task.catalogTask.capabilities) ? task.catalogTask.capabilities : []
190
- )));
191
- const adaptersUsed = Array.from(new Set(resultTasks.flatMap((task) =>
192
- Array.isArray(task.catalogTask && task.catalogTask.adapters) ? task.catalogTask.adapters : []
193
- )));
194
- const remediation = {
195
- status: "none",
196
- reason_code: null,
197
- active_case_type: null,
198
- active_case_id: null,
199
- compensating_action_status: null,
200
- updated_at_iso: completedAt.toISOString()
201
- };
202
- const payment = {
203
- payment_id: `pay_${quote.quote_id}`,
204
- scheme: quote.payment_scheme || "native",
205
- protocol: quote.payment_protocol || null,
206
- status: deferredCompletion ? "authorized" : "recorded",
207
- amount_minor: quote.amount_minor,
208
- currency: quote.currency,
209
- quote_id: quote.quote_id,
210
- wallet_id: opts.paymentVerification && opts.paymentVerification.wallet_id
211
- ? opts.paymentVerification.wallet_id
212
- : null,
213
- verification_mode: opts.paymentVerification && opts.paymentVerification.verification_mode
214
- ? opts.paymentVerification.verification_mode
215
- : null,
216
- recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
217
- };
218
- const bsvHints = buildBsvTeranodeSettlementHints({
219
- settlementMode: quote.settlement_mode,
220
- amountMinor: quote.amount_minor,
221
- currency: quote.currency,
222
- settlementBindingHash: quote.settlement_binding_hash,
223
- treasuryDestination: quote.treasury
224
- });
225
- const bsvPaymentReference = extractBsvTeranodePaymentReference(
226
- opts.paymentVerification && opts.paymentVerification.payment_payload
227
- ? opts.paymentVerification.payment_payload
228
- : null
229
- );
230
- const settlement = {
231
- settlement_id: `settlement_${transactionId}`,
232
- mode: quote.settlement_mode || null,
233
- preference: quote.settlement_preference || null,
234
- adapter: quote.settlement_adapter || null,
235
- integration_id: quote.settlement_integration_id || null,
236
- binding_hash: quote.settlement_binding_hash || null,
237
- rail: isBsvTeranodeSettlementMode(quote.settlement_mode) ? "bsv_teranode" : null,
238
- network: bsvHints ? bsvHints.network : null,
239
- hints: bsvHints,
240
- txid: bsvPaymentReference && bsvPaymentReference.txid ? bsvPaymentReference.txid : null,
241
- raw_tx: bsvPaymentReference && (bsvPaymentReference.raw_tx || bsvPaymentReference.rawTx)
242
- ? (bsvPaymentReference.raw_tx || bsvPaymentReference.rawTx)
243
- : null,
244
- status: deferredCompletion ? "pending_completion" : "recorded",
245
- recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
246
- };
247
- const treasuryDestination = buildTreasuryDestination(quote.account_id, quote.settlement_mode);
248
- const treasury = {
249
- ...treasuryDestination,
250
- treasury_receipt_id: `treasury_${receiptId}`,
251
- status: deferredCompletion ? "pending_settlement" : "recorded",
252
- amount_minor: quote.amount_minor,
253
- currency: quote.currency,
254
- payment_id: payment.payment_id,
255
- settlement_id: settlement.settlement_id,
256
- custody_external_ref: treasuryDestination.external_ref || null,
257
- rail: treasuryDestination.rail || settlement.rail || null,
258
- recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
259
- };
260
- const defaultPath = quote.default_path || buildDefaultEconomicPath(
261
- Array.isArray(quote.integration_ids)
262
- ? quote.integration_ids.find((integrationId) => typeof integrationId === "string" && integrationId.startsWith("builtin.payment."))
263
- : null,
264
- quote.settlement_integration_id || null,
265
- treasury,
266
- {
267
- paymentProtocol: quote.payment_protocol || null,
268
- settlementMode: quote.settlement_mode || null,
269
- status: deferredCompletion ? "pending_completion" : "recorded"
270
- }
271
- );
272
- const transaction = {
273
- transaction_id: transactionId,
274
- account_id: quote.account_id,
275
- status: deferredCompletion ? "accepted" : "completed",
276
- intent: payload.command || "command.execute",
277
- amount_minor: quote.amount_minor,
278
- currency: quote.currency,
279
- quote_id: quote.quote_id,
280
- integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
281
- protocols: Array.isArray(quote.protocols) ? quote.protocols : [],
282
- output_ref: externalResponse && externalResponse.output_ref ? externalResponse.output_ref : `output_${transactionId}`,
283
- callback_url: payload.callback_url || null,
284
- capabilities: quote.capabilities,
285
- adapters: quote.adapters,
286
- payment,
287
- settlement,
288
- treasury,
289
- default_path: {
290
- ...defaultPath,
291
- status: deferredCompletion ? "pending_completion" : "recorded"
292
- },
293
- execution: {
294
- status: deferredCompletion ? "accepted" : "completed",
295
- task_count: resultTasks.length,
296
- capability_scopes: capabilityScopes,
297
- adapters_used: adaptersUsed,
298
- integration_ids: Array.isArray(quote.execution_integration_ids) ? quote.execution_integration_ids : [],
299
- results_by_task_id: resultsByTaskId,
300
- provider: externalExecution ? externalExecution.provider || null : null,
301
- provider_target_id: externalExecution ? externalExecution.target_id || null : null,
302
- provider_job_id: externalResponse && externalResponse.provider_job_id ? externalResponse.provider_job_id : null
303
- },
304
- created_at_iso: startedAt.toISOString(),
305
- completed_at_iso: deferredCompletion ? null : completedAt.toISOString(),
306
- timing,
307
- remediation
308
- };
309
- const receipt = {
310
- receipt_id: receiptId,
311
- transaction_id: transactionId,
312
- account_id: quote.account_id,
313
- status: deferredCompletion ? "pending" : "completed",
314
- amount_minor: quote.amount_minor,
315
- currency: quote.currency,
316
- quote_id: quote.quote_id,
317
- integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
318
- settlement_integration_id: quote.settlement_integration_id || null,
319
- payment,
320
- settlement,
321
- treasury,
322
- default_path: {
323
- ...defaultPath,
324
- status: deferredCompletion ? "pending_completion" : "recorded"
325
- },
326
- proof_ref: externalResponse && externalResponse.proof_ref ? externalResponse.proof_ref : `proof_${receiptId}`,
327
- execution_summary: {
328
- command: payload.command || "command.execute",
329
- task_count: resultTasks.length,
330
- tasks: resultTasks.map((task) => ({
331
- task_id: task.task_id,
332
- task_ref: task.task_ref
333
- }))
334
- },
335
- created_at_iso: deferredCompletion ? startedAt.toISOString() : completedAt.toISOString(),
336
- timing,
337
- remediation
338
- };
339
- const command = {
340
- command: payload.command || "command.execute",
341
- integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
342
- payment,
343
- settlement,
344
- treasury,
345
- default_path: {
346
- ...defaultPath,
347
- status: deferredCompletion ? "pending_completion" : "recorded"
348
- },
349
- deliverables: resultTasks.map((task, index) => ({
350
- kind: task.task_ref === "admission.preview" ? "preview" : "result",
351
- ...(task.task_ref === "a2c.pack.preview"
352
- ? {
353
- kind: "preview"
354
- }
355
- : {}),
356
- task_id: task.task_id,
357
- task_ref: task.task_ref,
358
- ref: `deliverable_${transactionId}_${index + 1}`,
359
- ...(task.task_ref === "admission.preview"
360
- ? {
361
- admission_ref: `admission_${transactionId}_${index + 1}`
362
- }
363
- : {}),
364
- ...(task.task_ref === "identity.attest.preview"
365
- ? {
366
- kind: "preview",
367
- identity_attestation_ref: `identity_attestation_${transactionId}_${index + 1}`
368
- }
369
- : {}),
370
- ...(task.task_ref === "identity.registry.link"
371
- ? {
372
- identity_link_ref: `identity_link_${transactionId}_${index + 1}`,
373
- registry_record_ref: `registry_${transactionId}_${index + 1}`
374
- }
375
- : {}),
376
- ...(task.task_ref === "a2a.negotiate"
377
- ? {
378
- negotiation_ref: `a2a_negotiation_${transactionId}_${index + 1}`,
379
- interaction_front: "a2a"
380
- }
381
- : {}),
382
- ...(task.task_ref === "a2a.commit"
383
- ? {
384
- negotiation_ref: `a2a_negotiation_${transactionId}_${index + 1}`,
385
- commitment_ref: `a2a_commitment_${transactionId}_${index + 1}`,
386
- interaction_front: "a2a"
387
- }
388
- : {}),
389
- ...(task.task_ref === "a2c.session.open"
390
- ? {
391
- session_ref: `a2c_session_${transactionId}_${index + 1}`,
392
- interaction_front: "a2c"
393
- }
394
- : {}),
395
- ...(task.task_ref === "a2c.pack.preview"
396
- ? {
397
- pack_preview_ref: `a2c_pack_preview_${transactionId}_${index + 1}`,
398
- interaction_front: "a2c"
399
- }
400
- : {}),
401
- ...(task.task_ref === "trust.handoff.emit"
402
- ? {
403
- handoff_kind: "trust",
404
- handoff_action: "emit",
405
- handoff_ref: `trust_handoff_${transactionId}_${index + 1}`
406
- }
407
- : {}),
408
- ...(task.task_ref === "trust.handoff.validate"
409
- ? {
410
- handoff_kind: "trust",
411
- handoff_action: "validate",
412
- handoff_ref: `trust_handoff_${transactionId}_${index + 1}`
413
- }
414
- : {}),
415
- ...(task.task_ref === "execution_receipt.handoff.emit"
416
- ? {
417
- handoff_kind: "execution_receipt",
418
- handoff_action: "emit",
419
- handoff_ref: `execution_receipt_handoff_${transactionId}_${index + 1}`
420
- }
421
- : {}),
422
- ...(task.task_ref === "execution_receipt.handoff.validate"
423
- ? {
424
- handoff_kind: "execution_receipt",
425
- handoff_action: "validate",
426
- handoff_ref: `execution_receipt_handoff_${transactionId}_${index + 1}`
427
- }
428
- : {}),
429
- ...(task.task_ref === "receipt_ledger.handoff.emit"
430
- ? {
431
- handoff_kind: "receipt_ledger",
432
- handoff_action: "emit",
433
- handoff_ref: `receipt_ledger_handoff_${transactionId}_${index + 1}`
434
- }
435
- : {}),
436
- ...(task.task_ref === "receipt_ledger.handoff.validate"
437
- ? {
438
- handoff_kind: "receipt_ledger",
439
- handoff_action: "validate",
440
- handoff_ref: `receipt_ledger_handoff_${transactionId}_${index + 1}`
441
- }
442
- : {}),
443
- ...(task.task_ref === "runtime.emit"
444
- ? {
445
- runtime_ref: `runtime_event_${transactionId}_${index + 1}`,
446
- runtime_action: "emit"
447
- }
448
- : {}),
449
- ...(task.task_ref === "runtime.anchor"
450
- ? {
451
- anchor_ref: `anchor_${transactionId}_${index + 1}`,
452
- runtime_action: "anchor"
453
- }
454
- : {}),
455
- ...(task.task_ref === "runtime.emit_anchor"
456
- ? {
457
- runtime_ref: `runtime_event_${transactionId}_${index + 1}`,
458
- anchor_ref: `anchor_${transactionId}_${index + 1}`,
459
- runtime_action: "emit_anchor"
460
- }
461
- : {}),
462
- ...(task.task_ref === "registry.register"
463
- ? {
464
- registry_record_ref: `registry_${transactionId}_${index + 1}`
465
- }
466
- : {}),
467
- ...(task.task_ref === "registry.pack.bundle"
468
- ? {
469
- registry_pack_ref: `registry_pack_${transactionId}_${index + 1}`
470
- }
471
- : {}),
472
- ...(task.task_ref === "anchoring.submit"
473
- ? {
474
- anchor_ref: `anchor_${transactionId}_${index + 1}`
475
- }
476
- : {}),
477
- ...(task.task_ref === "anchoring.pack.preview"
478
- ? {
479
- kind: "preview",
480
- anchor_preview_ref: `anchor_preview_${transactionId}_${index + 1}`
481
- }
482
- : {}),
483
- ...(task.task_ref === "adapter.mcp.invoke"
484
- ? {
485
- adapter_lane: "mcp",
486
- tool_name: normalizedBody.tool_name || null
487
- }
488
- : {})
489
- })),
490
- monitor: {
491
- transaction_id: transactionId,
492
- status_url: `/v1/governed-transactions/${transactionId}`,
493
- receipt_url: `/v1/receipts/${receiptId}`,
494
- delivery_url: `/v1/deliveries/delivery_${transactionId}`,
495
- payment_url: `/v1/payment-ledger/${payment.payment_id}`
496
- }
497
- };
498
- return { transaction, receipt, command };
499
- }
500
-
501
- module.exports = {
502
- createCommandArtifacts
503
- };
1
+ "use strict";
2
+
3
+ const crypto = require("crypto");
4
+ const { findTask } = require("../fixtures/catalog");
5
+ const { buildDefaultEconomicPath, buildTreasuryDestination } = require("./commerce_quotes");
6
+ const {
7
+ buildBsvTeranodeSettlementHints,
8
+ extractBsvTeranodePaymentReference,
9
+ isBsvTeranodeSettlementMode
10
+ } = require("./settlement_bsv_teranode");
11
+
12
+ function classifyObservedLatency(durationMs) {
13
+ if (durationMs <= 1000) return "instant";
14
+ if (durationMs <= 15000) return "near_real_time";
15
+ return "governed_async";
16
+ }
17
+
18
+ function assessLatency(declaredLatencyClass, observedLatencyClass) {
19
+ const order = {
20
+ instant: 1,
21
+ near_real_time: 2,
22
+ governed_async: 3
23
+ };
24
+ const declared = order[declaredLatencyClass] || 99;
25
+ const observed = order[observedLatencyClass] || 99;
26
+ return observed <= declared ? "within_posture" : "outside_posture";
27
+ }
28
+
29
+ function createCommandArtifacts(payload, quote, options) {
30
+ const opts = options || {};
31
+ const transactionId = `txn_${crypto.randomBytes(6).toString("hex")}`;
32
+ const receiptId = `rcpt_${crypto.randomBytes(6).toString("hex")}`;
33
+ const startedAt = new Date();
34
+ const durationMs = 250;
35
+ const completedAt = new Date(startedAt.getTime() + durationMs);
36
+ const requestedTasks = Array.isArray(payload.tasks) && payload.tasks.length > 0
37
+ ? payload.tasks.map((task, index) => ({
38
+ task_id: task && task.task_id ? String(task.task_id).trim() : `task_${index + 1}`,
39
+ task_ref: task && task.task_ref ? String(task.task_ref).trim() : ""
40
+ }))
41
+ : [{
42
+ task_id: "task_1",
43
+ task_ref: String(payload.task_ref || "").trim()
44
+ }];
45
+ const resolvedTasks = requestedTasks
46
+ .map((task) => {
47
+ const catalogTask = findTask(task.task_ref);
48
+ return catalogTask ? { ...task, catalogTask } : null;
49
+ })
50
+ .filter(Boolean);
51
+ const primaryTask = resolvedTasks[0] && resolvedTasks[0].catalogTask ? resolvedTasks[0].catalogTask : null;
52
+ const declaredLatencyClass = (primaryTask && primaryTask.latency_class) || "near_real_time";
53
+ const observedLatencyClass = classifyObservedLatency(durationMs);
54
+ const deferredCompletion = opts.deferredCompletion === true;
55
+ const timing = {
56
+ declared_latency_class: declaredLatencyClass,
57
+ started_at_iso: startedAt.toISOString(),
58
+ completed_at_iso: deferredCompletion ? null : completedAt.toISOString(),
59
+ duration_ms: deferredCompletion ? null : durationMs,
60
+ observed_latency_class: deferredCompletion ? null : observedLatencyClass,
61
+ assessment: deferredCompletion ? "pending" : assessLatency(declaredLatencyClass, observedLatencyClass)
62
+ };
63
+ const resultTasks = resolvedTasks.length > 0 ? resolvedTasks : requestedTasks.map((task) => ({
64
+ ...task,
65
+ catalogTask: null
66
+ }));
67
+ const normalizedBody = payload && payload.body && typeof payload.body === "object" && !Array.isArray(payload.body)
68
+ ? payload.body
69
+ : {};
70
+ const externalExecution = opts.externalExecution && typeof opts.externalExecution === "object"
71
+ ? opts.externalExecution
72
+ : null;
73
+ const externalResponse = externalExecution && externalExecution.target_response && typeof externalExecution.target_response === "object"
74
+ ? externalExecution.target_response
75
+ : null;
76
+ const resultsByTaskId = Object.fromEntries(resultTasks.map((task, index) => [
77
+ task.task_id,
78
+ (() => {
79
+ const base = {
80
+ task_ref: task.task_ref,
81
+ status: "completed",
82
+ output_ref: `output_${transactionId}_${index + 1}`
83
+ };
84
+ if (task.task_ref === "admission.preview") {
85
+ base.preview_kind = "admission";
86
+ base.admission_ref = `admission_${transactionId}_${index + 1}`;
87
+ }
88
+ if (task.task_ref === "a2a.negotiate") {
89
+ base.negotiation_ref = `a2a_negotiation_${transactionId}_${index + 1}`;
90
+ base.interaction_front = "a2a";
91
+ }
92
+ if (task.task_ref === "a2a.commit") {
93
+ base.negotiation_ref = `a2a_negotiation_${transactionId}_${index + 1}`;
94
+ base.commitment_ref = `a2a_commitment_${transactionId}_${index + 1}`;
95
+ base.interaction_front = "a2a";
96
+ }
97
+ if (task.task_ref === "a2c.session.open") {
98
+ base.session_ref = `a2c_session_${transactionId}_${index + 1}`;
99
+ base.interaction_front = "a2c";
100
+ }
101
+ if (task.task_ref === "a2c.pack.preview") {
102
+ base.preview_kind = "a2c_pack";
103
+ base.pack_preview_ref = `a2c_pack_preview_${transactionId}_${index + 1}`;
104
+ base.interaction_front = "a2c";
105
+ }
106
+ if (task.task_ref === "trust.handoff.emit") {
107
+ base.handoff_kind = "trust";
108
+ base.handoff_action = "emit";
109
+ base.handoff_ref = `trust_handoff_${transactionId}_${index + 1}`;
110
+ }
111
+ if (task.task_ref === "trust.handoff.validate") {
112
+ base.handoff_kind = "trust";
113
+ base.handoff_action = "validate";
114
+ base.handoff_ref = `trust_handoff_${transactionId}_${index + 1}`;
115
+ }
116
+ if (task.task_ref === "execution_receipt.handoff.emit") {
117
+ base.handoff_kind = "execution_receipt";
118
+ base.handoff_action = "emit";
119
+ base.handoff_ref = `execution_receipt_handoff_${transactionId}_${index + 1}`;
120
+ }
121
+ if (task.task_ref === "execution_receipt.handoff.validate") {
122
+ base.handoff_kind = "execution_receipt";
123
+ base.handoff_action = "validate";
124
+ base.handoff_ref = `execution_receipt_handoff_${transactionId}_${index + 1}`;
125
+ }
126
+ if (task.task_ref === "receipt_ledger.handoff.emit") {
127
+ base.handoff_kind = "receipt_ledger";
128
+ base.handoff_action = "emit";
129
+ base.handoff_ref = `receipt_ledger_handoff_${transactionId}_${index + 1}`;
130
+ }
131
+ if (task.task_ref === "receipt_ledger.handoff.validate") {
132
+ base.handoff_kind = "receipt_ledger";
133
+ base.handoff_action = "validate";
134
+ base.handoff_ref = `receipt_ledger_handoff_${transactionId}_${index + 1}`;
135
+ }
136
+ if (task.task_ref === "runtime.emit") {
137
+ base.runtime_ref = `runtime_event_${transactionId}_${index + 1}`;
138
+ base.runtime_action = "emit";
139
+ }
140
+ if (task.task_ref === "runtime.anchor") {
141
+ base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
142
+ base.runtime_action = "anchor";
143
+ }
144
+ if (task.task_ref === "runtime.emit_anchor") {
145
+ base.runtime_ref = `runtime_event_${transactionId}_${index + 1}`;
146
+ base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
147
+ base.runtime_action = "emit_anchor";
148
+ }
149
+ if (task.task_ref === "identity.attest.preview") {
150
+ base.preview_kind = "identity_attestation";
151
+ base.identity_attestation_ref = `identity_attestation_${transactionId}_${index + 1}`;
152
+ }
153
+ if (task.task_ref === "identity.registry.link") {
154
+ base.identity_link_ref = `identity_link_${transactionId}_${index + 1}`;
155
+ base.registry_record_ref = `registry_${transactionId}_${index + 1}`;
156
+ }
157
+ if (task.task_ref === "registry.register") {
158
+ base.registry_record_ref = `registry_${transactionId}_${index + 1}`;
159
+ }
160
+ if (task.task_ref === "registry.pack.bundle") {
161
+ base.registry_pack_ref = `registry_pack_${transactionId}_${index + 1}`;
162
+ }
163
+ if (task.task_ref === "anchoring.submit") {
164
+ base.anchor_ref = `anchor_${transactionId}_${index + 1}`;
165
+ }
166
+ if (task.task_ref === "anchoring.pack.preview") {
167
+ base.preview_kind = "anchoring_pack";
168
+ base.anchor_preview_ref = `anchor_preview_${transactionId}_${index + 1}`;
169
+ }
170
+ if (task.task_ref === "adapter.mcp.invoke") {
171
+ base.adapter_lane = "mcp";
172
+ base.tool_name = normalizedBody.tool_name || null;
173
+ base.invocation_status = externalExecution ? "provider_completed" : "simulated";
174
+ }
175
+ if (externalExecution) {
176
+ base.execution_provider = externalExecution.provider || null;
177
+ base.execution_target_id = externalExecution.target_id || null;
178
+ if (externalResponse && externalResponse.provider_job_id) base.provider_job_id = externalResponse.provider_job_id;
179
+ if (externalResponse && externalResponse.output_payload) base.output_payload = externalResponse.output_payload;
180
+ if (externalResponse && externalResponse.output_ref) base.output_ref = externalResponse.output_ref;
181
+ base.provider_status = externalResponse && externalResponse.provider_status
182
+ ? externalResponse.provider_status
183
+ : "completed";
184
+ }
185
+ return base;
186
+ })()
187
+ ]));
188
+ const capabilityScopes = Array.from(new Set(resultTasks.flatMap((task) =>
189
+ Array.isArray(task.catalogTask && task.catalogTask.capabilities) ? task.catalogTask.capabilities : []
190
+ )));
191
+ const adaptersUsed = Array.from(new Set(resultTasks.flatMap((task) =>
192
+ Array.isArray(task.catalogTask && task.catalogTask.adapters) ? task.catalogTask.adapters : []
193
+ )));
194
+ const remediation = {
195
+ status: "none",
196
+ reason_code: null,
197
+ active_case_type: null,
198
+ active_case_id: null,
199
+ compensating_action_status: null,
200
+ updated_at_iso: completedAt.toISOString()
201
+ };
202
+ const payment = {
203
+ payment_id: `pay_${quote.quote_id}`,
204
+ scheme: quote.payment_scheme || "native",
205
+ protocol: quote.payment_protocol || null,
206
+ status: deferredCompletion ? "authorized" : "recorded",
207
+ amount_minor: quote.amount_minor,
208
+ currency: quote.currency,
209
+ quote_id: quote.quote_id,
210
+ wallet_id: opts.paymentVerification && opts.paymentVerification.wallet_id
211
+ ? opts.paymentVerification.wallet_id
212
+ : null,
213
+ verification_mode: opts.paymentVerification && opts.paymentVerification.verification_mode
214
+ ? opts.paymentVerification.verification_mode
215
+ : null,
216
+ recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
217
+ };
218
+ const bsvHints = buildBsvTeranodeSettlementHints({
219
+ settlementMode: quote.settlement_mode,
220
+ amountMinor: quote.amount_minor,
221
+ currency: quote.currency,
222
+ settlementBindingHash: quote.settlement_binding_hash,
223
+ treasuryDestination: quote.treasury
224
+ });
225
+ const bsvPaymentReference = extractBsvTeranodePaymentReference(
226
+ opts.paymentVerification && opts.paymentVerification.payment_payload
227
+ ? opts.paymentVerification.payment_payload
228
+ : null
229
+ );
230
+ const settlement = {
231
+ settlement_id: `settlement_${transactionId}`,
232
+ mode: quote.settlement_mode || null,
233
+ preference: quote.settlement_preference || null,
234
+ adapter: quote.settlement_adapter || null,
235
+ integration_id: quote.settlement_integration_id || null,
236
+ binding_hash: quote.settlement_binding_hash || null,
237
+ rail: isBsvTeranodeSettlementMode(quote.settlement_mode) ? "bsv_teranode" : null,
238
+ network: bsvHints ? bsvHints.network : null,
239
+ hints: bsvHints,
240
+ txid: bsvPaymentReference && bsvPaymentReference.txid ? bsvPaymentReference.txid : null,
241
+ raw_tx: bsvPaymentReference && (bsvPaymentReference.raw_tx || bsvPaymentReference.rawTx)
242
+ ? (bsvPaymentReference.raw_tx || bsvPaymentReference.rawTx)
243
+ : null,
244
+ status: deferredCompletion ? "pending_completion" : "recorded",
245
+ recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
246
+ };
247
+ const treasuryDestination = buildTreasuryDestination(quote.account_id, quote.settlement_mode);
248
+ const treasury = {
249
+ ...treasuryDestination,
250
+ treasury_receipt_id: `treasury_${receiptId}`,
251
+ status: deferredCompletion ? "pending_settlement" : "recorded",
252
+ amount_minor: quote.amount_minor,
253
+ currency: quote.currency,
254
+ payment_id: payment.payment_id,
255
+ settlement_id: settlement.settlement_id,
256
+ custody_external_ref: treasuryDestination.external_ref || null,
257
+ rail: treasuryDestination.rail || settlement.rail || null,
258
+ recorded_at_iso: deferredCompletion ? null : completedAt.toISOString()
259
+ };
260
+ const defaultPath = quote.default_path || buildDefaultEconomicPath(
261
+ Array.isArray(quote.integration_ids)
262
+ ? quote.integration_ids.find((integrationId) => typeof integrationId === "string" && integrationId.startsWith("builtin.payment."))
263
+ : null,
264
+ quote.settlement_integration_id || null,
265
+ treasury,
266
+ {
267
+ paymentProtocol: quote.payment_protocol || null,
268
+ settlementMode: quote.settlement_mode || null,
269
+ status: deferredCompletion ? "pending_completion" : "recorded"
270
+ }
271
+ );
272
+ const transaction = {
273
+ transaction_id: transactionId,
274
+ account_id: quote.account_id,
275
+ status: deferredCompletion ? "accepted" : "completed",
276
+ intent: payload.command || "command.execute",
277
+ amount_minor: quote.amount_minor,
278
+ currency: quote.currency,
279
+ quote_id: quote.quote_id,
280
+ integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
281
+ protocols: Array.isArray(quote.protocols) ? quote.protocols : [],
282
+ output_ref: externalResponse && externalResponse.output_ref ? externalResponse.output_ref : `output_${transactionId}`,
283
+ callback_url: payload.callback_url || null,
284
+ capabilities: quote.capabilities,
285
+ adapters: quote.adapters,
286
+ payment,
287
+ settlement,
288
+ treasury,
289
+ default_path: {
290
+ ...defaultPath,
291
+ status: deferredCompletion ? "pending_completion" : "recorded"
292
+ },
293
+ execution: {
294
+ status: deferredCompletion ? "accepted" : "completed",
295
+ task_count: resultTasks.length,
296
+ capability_scopes: capabilityScopes,
297
+ adapters_used: adaptersUsed,
298
+ integration_ids: Array.isArray(quote.execution_integration_ids) ? quote.execution_integration_ids : [],
299
+ results_by_task_id: resultsByTaskId,
300
+ provider: externalExecution ? externalExecution.provider || null : null,
301
+ provider_target_id: externalExecution ? externalExecution.target_id || null : null,
302
+ provider_job_id: externalResponse && externalResponse.provider_job_id ? externalResponse.provider_job_id : null
303
+ },
304
+ created_at_iso: startedAt.toISOString(),
305
+ completed_at_iso: deferredCompletion ? null : completedAt.toISOString(),
306
+ timing,
307
+ remediation
308
+ };
309
+ const receipt = {
310
+ receipt_id: receiptId,
311
+ transaction_id: transactionId,
312
+ account_id: quote.account_id,
313
+ status: deferredCompletion ? "pending" : "completed",
314
+ amount_minor: quote.amount_minor,
315
+ currency: quote.currency,
316
+ quote_id: quote.quote_id,
317
+ integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
318
+ settlement_integration_id: quote.settlement_integration_id || null,
319
+ payment,
320
+ settlement,
321
+ treasury,
322
+ default_path: {
323
+ ...defaultPath,
324
+ status: deferredCompletion ? "pending_completion" : "recorded"
325
+ },
326
+ proof_ref: externalResponse && externalResponse.proof_ref ? externalResponse.proof_ref : `proof_${receiptId}`,
327
+ execution_summary: {
328
+ command: payload.command || "command.execute",
329
+ task_count: resultTasks.length,
330
+ tasks: resultTasks.map((task) => ({
331
+ task_id: task.task_id,
332
+ task_ref: task.task_ref
333
+ }))
334
+ },
335
+ created_at_iso: deferredCompletion ? startedAt.toISOString() : completedAt.toISOString(),
336
+ timing,
337
+ remediation
338
+ };
339
+ const command = {
340
+ command: payload.command || "command.execute",
341
+ integration_ids: Array.isArray(quote.integration_ids) ? quote.integration_ids : [],
342
+ payment,
343
+ settlement,
344
+ treasury,
345
+ default_path: {
346
+ ...defaultPath,
347
+ status: deferredCompletion ? "pending_completion" : "recorded"
348
+ },
349
+ deliverables: resultTasks.map((task, index) => ({
350
+ kind: task.task_ref === "admission.preview" ? "preview" : "result",
351
+ ...(task.task_ref === "a2c.pack.preview"
352
+ ? {
353
+ kind: "preview"
354
+ }
355
+ : {}),
356
+ task_id: task.task_id,
357
+ task_ref: task.task_ref,
358
+ ref: `deliverable_${transactionId}_${index + 1}`,
359
+ ...(task.task_ref === "admission.preview"
360
+ ? {
361
+ admission_ref: `admission_${transactionId}_${index + 1}`
362
+ }
363
+ : {}),
364
+ ...(task.task_ref === "identity.attest.preview"
365
+ ? {
366
+ kind: "preview",
367
+ identity_attestation_ref: `identity_attestation_${transactionId}_${index + 1}`
368
+ }
369
+ : {}),
370
+ ...(task.task_ref === "identity.registry.link"
371
+ ? {
372
+ identity_link_ref: `identity_link_${transactionId}_${index + 1}`,
373
+ registry_record_ref: `registry_${transactionId}_${index + 1}`
374
+ }
375
+ : {}),
376
+ ...(task.task_ref === "a2a.negotiate"
377
+ ? {
378
+ negotiation_ref: `a2a_negotiation_${transactionId}_${index + 1}`,
379
+ interaction_front: "a2a"
380
+ }
381
+ : {}),
382
+ ...(task.task_ref === "a2a.commit"
383
+ ? {
384
+ negotiation_ref: `a2a_negotiation_${transactionId}_${index + 1}`,
385
+ commitment_ref: `a2a_commitment_${transactionId}_${index + 1}`,
386
+ interaction_front: "a2a"
387
+ }
388
+ : {}),
389
+ ...(task.task_ref === "a2c.session.open"
390
+ ? {
391
+ session_ref: `a2c_session_${transactionId}_${index + 1}`,
392
+ interaction_front: "a2c"
393
+ }
394
+ : {}),
395
+ ...(task.task_ref === "a2c.pack.preview"
396
+ ? {
397
+ pack_preview_ref: `a2c_pack_preview_${transactionId}_${index + 1}`,
398
+ interaction_front: "a2c"
399
+ }
400
+ : {}),
401
+ ...(task.task_ref === "trust.handoff.emit"
402
+ ? {
403
+ handoff_kind: "trust",
404
+ handoff_action: "emit",
405
+ handoff_ref: `trust_handoff_${transactionId}_${index + 1}`
406
+ }
407
+ : {}),
408
+ ...(task.task_ref === "trust.handoff.validate"
409
+ ? {
410
+ handoff_kind: "trust",
411
+ handoff_action: "validate",
412
+ handoff_ref: `trust_handoff_${transactionId}_${index + 1}`
413
+ }
414
+ : {}),
415
+ ...(task.task_ref === "execution_receipt.handoff.emit"
416
+ ? {
417
+ handoff_kind: "execution_receipt",
418
+ handoff_action: "emit",
419
+ handoff_ref: `execution_receipt_handoff_${transactionId}_${index + 1}`
420
+ }
421
+ : {}),
422
+ ...(task.task_ref === "execution_receipt.handoff.validate"
423
+ ? {
424
+ handoff_kind: "execution_receipt",
425
+ handoff_action: "validate",
426
+ handoff_ref: `execution_receipt_handoff_${transactionId}_${index + 1}`
427
+ }
428
+ : {}),
429
+ ...(task.task_ref === "receipt_ledger.handoff.emit"
430
+ ? {
431
+ handoff_kind: "receipt_ledger",
432
+ handoff_action: "emit",
433
+ handoff_ref: `receipt_ledger_handoff_${transactionId}_${index + 1}`
434
+ }
435
+ : {}),
436
+ ...(task.task_ref === "receipt_ledger.handoff.validate"
437
+ ? {
438
+ handoff_kind: "receipt_ledger",
439
+ handoff_action: "validate",
440
+ handoff_ref: `receipt_ledger_handoff_${transactionId}_${index + 1}`
441
+ }
442
+ : {}),
443
+ ...(task.task_ref === "runtime.emit"
444
+ ? {
445
+ runtime_ref: `runtime_event_${transactionId}_${index + 1}`,
446
+ runtime_action: "emit"
447
+ }
448
+ : {}),
449
+ ...(task.task_ref === "runtime.anchor"
450
+ ? {
451
+ anchor_ref: `anchor_${transactionId}_${index + 1}`,
452
+ runtime_action: "anchor"
453
+ }
454
+ : {}),
455
+ ...(task.task_ref === "runtime.emit_anchor"
456
+ ? {
457
+ runtime_ref: `runtime_event_${transactionId}_${index + 1}`,
458
+ anchor_ref: `anchor_${transactionId}_${index + 1}`,
459
+ runtime_action: "emit_anchor"
460
+ }
461
+ : {}),
462
+ ...(task.task_ref === "registry.register"
463
+ ? {
464
+ registry_record_ref: `registry_${transactionId}_${index + 1}`
465
+ }
466
+ : {}),
467
+ ...(task.task_ref === "registry.pack.bundle"
468
+ ? {
469
+ registry_pack_ref: `registry_pack_${transactionId}_${index + 1}`
470
+ }
471
+ : {}),
472
+ ...(task.task_ref === "anchoring.submit"
473
+ ? {
474
+ anchor_ref: `anchor_${transactionId}_${index + 1}`
475
+ }
476
+ : {}),
477
+ ...(task.task_ref === "anchoring.pack.preview"
478
+ ? {
479
+ kind: "preview",
480
+ anchor_preview_ref: `anchor_preview_${transactionId}_${index + 1}`
481
+ }
482
+ : {}),
483
+ ...(task.task_ref === "adapter.mcp.invoke"
484
+ ? {
485
+ adapter_lane: "mcp",
486
+ tool_name: normalizedBody.tool_name || null
487
+ }
488
+ : {})
489
+ })),
490
+ monitor: {
491
+ transaction_id: transactionId,
492
+ status_url: `/v1/governed-transactions/${transactionId}`,
493
+ receipt_url: `/v1/receipts/${receiptId}`,
494
+ delivery_url: `/v1/deliveries/delivery_${transactionId}`,
495
+ payment_url: `/v1/payment-ledger/${payment.payment_id}`
496
+ }
497
+ };
498
+ return { transaction, receipt, command };
499
+ }
500
+
501
+ module.exports = {
502
+ createCommandArtifacts
503
+ };