xytara 3.1.16 → 3.2.0
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.
- package/README.md +120 -92
- package/RELEASE_NOTES.md +7 -3
- package/START_HERE.md +56 -224
- package/bin/xytara.js +21 -8
- package/client.js +79 -1
- package/lib/{delivery_receipt.js → delivery_receipt_verify.js} +14 -100
- package/package.json +25 -35
- package/scripts/verify_client.js +418 -0
- package/scripts/verify_release_candidate.js +146 -45
- package/.env.example +0 -173
- package/ADAPTER_START_HERE.md +0 -56
- package/BSV_TERANODE_PLATFORM_DISCONTINUITY_RUNBOOK.md +0 -126
- package/CARRIED_HANDOFF_DEMO.md +0 -60
- package/EXAMPLE_PATHS.md +0 -53
- package/FINAL_CONTRACT.md +0 -498
- package/PARTNER_READY_PATH.md +0 -71
- package/PUBLIC_DEMO_SCRIPT.md +0 -78
- package/REAL_PAYMENT_SETUP.md +0 -320
- package/SERVICE_CONTRACT.md +0 -419
- package/SUPABASE_RUNTIME_STATE_SETUP.md +0 -61
- package/TERMINOLOGY.md +0 -50
- package/WHY_XYTARA_XOONYA.md +0 -63
- package/XT1_EXECUTION_TRUTH_STANDARD.md +0 -78
- package/XYTARA_ADAPTER_PROTOCOL_TRUTH_MODEL.md +0 -75
- package/XYTARA_AUTONOMOUS_ENTRY_MODEL.md +0 -124
- package/XYTARA_DEFAULT_PATH_MODEL.md +0 -84
- package/XYTARA_EXECUTION_TRUTH_MODEL.md +0 -171
- package/XYTARA_PAYMENT_RAIL_TRUTH_MODEL.md +0 -68
- package/adapters/AUTHORING_GUIDE.md +0 -244
- package/adapters/ONBOARDING_POSTURE.md +0 -61
- package/adapters/THIRD_PARTY_SUBMISSION_PROCESS.md +0 -84
- package/adapters/adapter-manifest.schema.json +0 -283
- package/adapters/examples/example-execution-adapter.js +0 -61
- package/adapters/examples/example-execution-adapter.manifest.json +0 -81
- package/adapters/examples/example-settlement-adapter.js +0 -55
- package/adapters/examples/example-settlement-adapter.manifest.json +0 -78
- package/adapters/examples/example-third-party-acp-registration.submission-bundle.json +0 -124
- package/adapters/examples/example-third-party-erc8004-registration.submission-bundle.json +0 -121
- package/adapters/examples/example-third-party-identity-registration.certification-pack.json +0 -22
- package/adapters/examples/example-third-party-identity-registration.record.json +0 -26
- package/adapters/examples/example-third-party-identity-registration.submission-bundle.json +0 -126
- package/adapters/examples/example-third-party-langchain-registration.submission-bundle.json +0 -124
- package/adapters/examples/example-third-party-mpp-registration.submission-bundle.json +0 -120
- package/adapters/examples/example-third-party-registration.certification-pack.json +0 -22
- package/adapters/examples/example-third-party-registration.record.json +0 -28
- package/adapters/examples/example-third-party-registration.submission-bundle.json +0 -126
- package/adapters/examples/example-third-party-settlement-registration.certification-pack.json +0 -22
- package/adapters/examples/example-third-party-settlement-registration.record.json +0 -26
- package/adapters/examples/example-third-party-settlement-registration.submission-bundle.json +0 -127
- package/adapters/examples/langchain-reference-execution-adapter.js +0 -81
- package/adapters/examples/langchain-reference-execution-adapter.manifest.json +0 -79
- package/adapters/examples/langgraph-reference-execution-adapter.js +0 -81
- package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +0 -79
- package/adapters/examples/minimal-third-party-execution-adapter.js +0 -61
- package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +0 -79
- package/adapters/examples/minimal-third-party-execution-registration.record.json +0 -26
- package/adapters/examples/minimal-third-party-execution.certification-pack.json +0 -22
- package/adapters/examples/minimal-third-party-execution.submission-bundle.json +0 -126
- package/adapters/integration-certification-pack.schema.json +0 -82
- package/adapters/integration-registration-record.schema.json +0 -114
- package/adapters/integration-submission-bundle-set.schema.json +0 -39
- package/adapters/integration-submission-bundle.schema.json +0 -34
- package/adapters/interfaces.js +0 -56
- package/bin/xytara-release.js +0 -1429
- package/examples/_demo_env.js +0 -40
- package/examples/adapter_review_walkthrough.js +0 -54
- package/examples/export_carried_handoff.js +0 -81
- package/examples/funded_runtime_walkthrough.js +0 -71
- package/examples/partner_launch_walkthrough.js +0 -44
- package/examples/quickstart.js +0 -3256
- package/fixtures/catalog.js +0 -1156
- package/index.js +0 -395
- package/integrations/dispatch.js +0 -276
- package/integrations/registry-snapshot.schema.json +0 -36
- package/integrations/registry.js +0 -2261
- package/integrations/views.js +0 -28
- package/lib/a2a_lane_contract.js +0 -104
- package/lib/a2a_rpc.js +0 -287
- package/lib/a2c_lane_contract.js +0 -111
- package/lib/account_auth.js +0 -585
- package/lib/acp_lane_contract.js +0 -54
- package/lib/activity_audit_contract.js +0 -322
- package/lib/adapter_certification_contract.js +0 -130
- package/lib/adapter_depth_contract.js +0 -218
- package/lib/adapter_pack.js +0 -118
- package/lib/adapter_partner_pack.js +0 -89
- package/lib/adapter_promotion_pack.js +0 -89
- package/lib/adapter_protocol_truth_contract.js +0 -229
- package/lib/agent_identity.js +0 -162
- package/lib/announcement_pack.js +0 -61
- package/lib/artifact_distribution_lane_contract.js +0 -54
- package/lib/asyncapi_contract.js +0 -150
- package/lib/auth_interop_contract.js +0 -80
- package/lib/authority_binding_lifecycle_contract.js +0 -182
- package/lib/autonomous_entry_contract.js +0 -409
- package/lib/bolt_adapter.js +0 -187
- package/lib/bolt_lane_contract.js +0 -55
- package/lib/bolt_payment_front.js +0 -224
- package/lib/business_cockpit.js +0 -378
- package/lib/buyer_event_log.js +0 -230
- package/lib/buyer_safety_policy.js +0 -132
- package/lib/capability_execution_truth.js +0 -276
- package/lib/capability_registry.js +0 -633
- package/lib/catalog_contract.js +0 -966
- package/lib/catalog_family_model.js +0 -193
- package/lib/catalog_views.js +0 -55
- package/lib/cdp_jwt.js +0 -57
- package/lib/checkout_event_security.js +0 -142
- package/lib/checkout_processor_adapter.js +0 -217
- package/lib/cloudevents_contract.js +0 -80
- package/lib/command_flow.js +0 -911
- package/lib/commerce_artifacts.js +0 -591
- package/lib/commerce_authority.js +0 -449
- package/lib/commerce_bridge.js +0 -274
- package/lib/commerce_cases.js +0 -399
- package/lib/commerce_checkout.js +0 -509
- package/lib/commerce_coordination.js +0 -346
- package/lib/commerce_economics.js +0 -4017
- package/lib/commerce_identity.js +0 -578
- package/lib/commerce_quotes.js +0 -266
- package/lib/commerce_reports.js +0 -14461
- package/lib/commerce_runtime.js +0 -322
- package/lib/commerce_shell.js +0 -257
- package/lib/crypto_agility_matrix.js +0 -125
- package/lib/default_path_contract.js +0 -412
- package/lib/delivery_summary_contract.js +0 -95
- package/lib/ecosystem_entry.js +0 -64
- package/lib/erc8004_lane_contract.js +0 -65
- package/lib/event_system_lane_contract.js +0 -75
- package/lib/execution_dedupe.js +0 -86
- package/lib/execution_truth_contract.js +0 -234
- package/lib/external_credit_bridge.js +0 -142
- package/lib/external_execution_policy.js +0 -143
- package/lib/external_execution_runtime.js +0 -238
- package/lib/feature_control_lane_contract.js +0 -54
- package/lib/first_run_conversion_contract.js +0 -290
- package/lib/framework_lane_contract.js +0 -89
- package/lib/framework_provider_promotion.js +0 -235
- package/lib/full_catalog_contract.js +0 -525
- package/lib/go_live_operator_pack.js +0 -391
- package/lib/http_transport.js +0 -99
- package/lib/identity_auth.js +0 -175
- package/lib/identity_interop_contract.js +0 -82
- package/lib/integration_matrix_contract.js +0 -102
- package/lib/l402_adapter.js +0 -241
- package/lib/l402_lane_contract.js +0 -55
- package/lib/l402_payment_front.js +0 -265
- package/lib/launch_narrative.js +0 -53
- package/lib/lifecycle_continuity_contract.js +0 -115
- package/lib/machine_identity_registry_contract.js +0 -199
- package/lib/major_rails_lane_contract.js +0 -150
- package/lib/market_lane_contract.js +0 -467
- package/lib/market_lane_depth_contract.js +0 -182
- package/lib/market_lane_promotion_contract.js +0 -210
- package/lib/market_lane_trace_contract.js +0 -278
- package/lib/mcp_lane_contract.js +0 -137
- package/lib/mpp_adapter.js +0 -237
- package/lib/network_transport.js +0 -110
- package/lib/offline_verifiability_recovery_contract.js +0 -155
- package/lib/openapi_contract.js +0 -300
- package/lib/operational_receipt_contract.js +0 -165
- package/lib/operator_intelligence.js +0 -407
- package/lib/outreach_copy_pack.js +0 -51
- package/lib/outreach_message_pack.js +0 -71
- package/lib/outreach_proof.js +0 -71
- package/lib/outreach_target_pack.js +0 -60
- package/lib/partner_intelligence.js +0 -105
- package/lib/payment_config.js +0 -257
- package/lib/payment_front_registry.js +0 -53
- package/lib/payment_protocol_contract.js +0 -165
- package/lib/payment_rail_truth_contract.js +0 -324
- package/lib/payment_verification.js +0 -357
- package/lib/phase_10_closeout_pack.js +0 -45
- package/lib/phase_10_completion_pack.js +0 -76
- package/lib/phase_10_decision_record_pack.js +0 -54
- package/lib/phase_10_decision_resolution_pack.js +0 -53
- package/lib/phase_10_demand_signal_adapters_runtime_pack.js +0 -74
- package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +0 -74
- package/lib/phase_10_freeze_baseline_pack.js +0 -67
- package/lib/phase_10_freeze_review_pack.js +0 -64
- package/lib/phase_10_gate_pack.js +0 -57
- package/lib/phase_10_long_tail_continuity_pack.js +0 -80
- package/lib/phase_10_long_tail_ecosystem_pack.js +0 -66
- package/lib/phase_10_niche_extension_registry_runtime_pack.js +0 -74
- package/lib/phase_1_claude_mcp_pack.js +0 -60
- package/lib/phase_1_claude_mcp_runtime_pack.js +0 -52
- package/lib/phase_1_ecosystem_pack.js +0 -67
- package/lib/phase_1_openai_codex_pack.js +0 -60
- package/lib/phase_1_openai_codex_runtime_pack.js +0 -52
- package/lib/phase_2_base_runtime_pack.js +0 -71
- package/lib/phase_2_base_usdc_runtime_pack.js +0 -72
- package/lib/phase_2_closeout_pack.js +0 -65
- package/lib/phase_2_completion_pack.js +0 -113
- package/lib/phase_2_decision_record_pack.js +0 -66
- package/lib/phase_2_decision_resolution_pack.js +0 -69
- package/lib/phase_2_eth_runtime_pack.js +0 -70
- package/lib/phase_2_evm_base_runtime_pack.js +0 -73
- package/lib/phase_2_evm_runtime_pack.js +0 -71
- package/lib/phase_2_flip_preview_pack.js +0 -60
- package/lib/phase_2_freeze_review_pack.js +0 -99
- package/lib/phase_2_gate_pack.js +0 -77
- package/lib/phase_2_payment_rails_pack.js +0 -71
- package/lib/phase_2_usdc_runtime_pack.js +0 -71
- package/lib/phase_3_brc_runtime_pack.js +0 -81
- package/lib/phase_3_bsv_teranode_runtime_pack.js +0 -83
- package/lib/phase_3_closeout_pack.js +0 -62
- package/lib/phase_3_completion_pack.js +0 -94
- package/lib/phase_3_decision_record_pack.js +0 -64
- package/lib/phase_3_decision_resolution_pack.js +0 -69
- package/lib/phase_3_freeze_baseline_pack.js +0 -67
- package/lib/phase_3_freeze_review_pack.js +0 -80
- package/lib/phase_3_gate_pack.js +0 -76
- package/lib/phase_3_metanet_runtime_pack.js +0 -81
- package/lib/phase_3_native_bsv_pack.js +0 -91
- package/lib/phase_3_native_continuity_pack.js +0 -82
- package/lib/phase_4_attestation_runtime_pack.js +0 -75
- package/lib/phase_4_closeout_pack.js +0 -45
- package/lib/phase_4_completion_pack.js +0 -94
- package/lib/phase_4_decision_record_pack.js +0 -54
- package/lib/phase_4_decision_resolution_pack.js +0 -45
- package/lib/phase_4_erc8004_runtime_pack.js +0 -76
- package/lib/phase_4_freeze_baseline_pack.js +0 -67
- package/lib/phase_4_freeze_review_pack.js +0 -68
- package/lib/phase_4_gate_pack.js +0 -58
- package/lib/phase_4_identity_registry_runtime_pack.js +0 -75
- package/lib/phase_4_identity_trust_pack.js +0 -73
- package/lib/phase_4_trust_continuity_pack.js +0 -86
- package/lib/phase_5_antelope_runtime_pack.js +0 -76
- package/lib/phase_5_closeout_pack.js +0 -44
- package/lib/phase_5_completion_pack.js +0 -82
- package/lib/phase_5_constellation_dag_runtime_pack.js +0 -76
- package/lib/phase_5_decision_record_pack.js +0 -54
- package/lib/phase_5_decision_resolution_pack.js +0 -45
- package/lib/phase_5_digibyte_dgb_runtime_pack.js +0 -76
- package/lib/phase_5_freeze_baseline_pack.js +0 -67
- package/lib/phase_5_freeze_review_pack.js +0 -68
- package/lib/phase_5_gate_pack.js +0 -58
- package/lib/phase_5_hedera_hbar_runtime_pack.js +0 -76
- package/lib/phase_5_kaspa_kas_runtime_pack.js +0 -76
- package/lib/phase_5_major_rails_continuity_pack.js +0 -86
- package/lib/phase_5_major_rails_pack.js +0 -110
- package/lib/phase_5_metal_runtime_pack.js +0 -76
- package/lib/phase_5_polkadot_dot_runtime_pack.js +0 -76
- package/lib/phase_5_proton_xpr_runtime_pack.js +0 -76
- package/lib/phase_5_solana_runtime_pack.js +0 -76
- package/lib/phase_6_autogen_runtime_pack.js +0 -72
- package/lib/phase_6_closeout_pack.js +0 -46
- package/lib/phase_6_completion_pack.js +0 -77
- package/lib/phase_6_decision_record_pack.js +0 -54
- package/lib/phase_6_decision_resolution_pack.js +0 -53
- package/lib/phase_6_framework_continuity_pack.js +0 -81
- package/lib/phase_6_framework_runtime_pack.js +0 -68
- package/lib/phase_6_freeze_baseline_pack.js +0 -68
- package/lib/phase_6_freeze_review_pack.js +0 -65
- package/lib/phase_6_gate_pack.js +0 -59
- package/lib/phase_6_langchain_runtime_pack.js +0 -72
- package/lib/phase_6_langgraph_runtime_pack.js +0 -72
- package/lib/phase_6_semantic_kernel_runtime_pack.js +0 -72
- package/lib/phase_7_closeout_pack.js +0 -45
- package/lib/phase_7_completion_pack.js +0 -85
- package/lib/phase_7_decision_record_pack.js +0 -53
- package/lib/phase_7_decision_resolution_pack.js +0 -53
- package/lib/phase_7_event_system_continuity_pack.js +0 -89
- package/lib/phase_7_event_system_pack.js +0 -76
- package/lib/phase_7_freeze_baseline_pack.js +0 -74
- package/lib/phase_7_freeze_review_pack.js +0 -65
- package/lib/phase_7_gate_pack.js +0 -58
- package/lib/phase_7_kafka_runtime_pack.js +0 -74
- package/lib/phase_7_mqtt_runtime_pack.js +0 -74
- package/lib/phase_7_nats_runtime_pack.js +0 -74
- package/lib/phase_7_webhook_event_bus_runtime_pack.js +0 -74
- package/lib/phase_8_closeout_pack.js +0 -46
- package/lib/phase_8_completion_pack.js +0 -82
- package/lib/phase_8_decision_record_pack.js +0 -54
- package/lib/phase_8_decision_resolution_pack.js +0 -53
- package/lib/phase_8_external_receipt_import_runtime_pack.js +0 -74
- package/lib/phase_8_external_result_import_runtime_pack.js +0 -74
- package/lib/phase_8_freeze_baseline_pack.js +0 -71
- package/lib/phase_8_freeze_review_pack.js +0 -64
- package/lib/phase_8_gate_pack.js +0 -58
- package/lib/phase_8_proof_bridge_continuity_pack.js +0 -86
- package/lib/phase_8_proof_bridges_pack.js +0 -72
- package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +0 -74
- package/lib/phase_9_closeout_pack.js +0 -46
- package/lib/phase_9_completion_pack.js +0 -82
- package/lib/phase_9_custody_refs_runtime_pack.js +0 -74
- package/lib/phase_9_decision_record_pack.js +0 -54
- package/lib/phase_9_decision_resolution_pack.js +0 -53
- package/lib/phase_9_freeze_baseline_pack.js +0 -71
- package/lib/phase_9_freeze_review_pack.js +0 -64
- package/lib/phase_9_gate_pack.js +0 -58
- package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +0 -74
- package/lib/phase_9_treasury_connectivity_pack.js +0 -72
- package/lib/phase_9_treasury_continuity_pack.js +0 -86
- package/lib/phase_9_treasury_destinations_runtime_pack.js +0 -74
- package/lib/phase_program_pack.js +0 -120
- package/lib/pricing_optimization_contract.js +0 -775
- package/lib/protocol_lane_contract.js +0 -117
- package/lib/provenance_lane_contract.js +0 -54
- package/lib/provider_lane_contract.js +0 -240
- package/lib/provider_network_contract.js +0 -149
- package/lib/provider_payout_execution.js +0 -155
- package/lib/provider_registry.js +0 -852
- package/lib/provider_runtime_journey_contract.js +0 -183
- package/lib/public_surface_policy_contract.js +0 -111
- package/lib/publish_plan.js +0 -51
- package/lib/rate_limiter.js +0 -81
- package/lib/record_queries.js +0 -48
- package/lib/release_candidate.js +0 -50
- package/lib/release_center.js +0 -1093
- package/lib/release_history.js +0 -205
- package/lib/release_manifest.js +0 -113
- package/lib/release_pack.js +0 -453
- package/lib/request_rate_limit.js +0 -144
- package/lib/resource_views.js +0 -31
- package/lib/revenue_launch_path_contract.js +0 -326
- package/lib/route_matchers.js +0 -34
- package/lib/route_params.js +0 -19
- package/lib/runtime_bridge.js +0 -124
- package/lib/runtime_operations_worker.js +0 -282
- package/lib/runtime_state_store.js +0 -495
- package/lib/settlement_bsv_live.js +0 -600
- package/lib/settlement_bsv_teranode.js +0 -117
- package/lib/settlement_lane_contract.js +0 -111
- package/lib/shared_signals_lane_contract.js +0 -54
- package/lib/signed_audit_provenance_contract.js +0 -83
- package/lib/soft_launch_pack.js +0 -78
- package/lib/stablecoin_lane_contract.js +0 -76
- package/lib/stripe_mpp_lane_contract.js +0 -96
- package/lib/stripe_mpp_payment_front.js +0 -258
- package/lib/telemetry_lane_contract.js +0 -54
- package/lib/treasury_destinations_contract.js +0 -764
- package/lib/treasury_egress_policy_contract.js +0 -91
- package/lib/treasury_lane_contract.js +0 -84
- package/lib/trust_portability_boundary_contract.js +0 -72
- package/lib/x402_facilitator.js +0 -198
- package/lib/x402_lane_contract.js +0 -136
- package/lib/x402_settlement_recovery.js +0 -175
- package/scripts/buyer_events_daily_report.js +0 -79
- package/scripts/registry_cli.js +0 -275
- package/scripts/state_backup_offsite.js +0 -196
- package/scripts/verify_a2a_rpc.js +0 -131
- package/scripts/verify_adapters.js +0 -554
- package/scripts/verify_agent_identity.js +0 -153
- package/scripts/verify_all.js +0 -4963
- package/scripts/verify_bolt_adapter.js +0 -128
- package/scripts/verify_buyer_event_log.js +0 -128
- package/scripts/verify_buyer_safety.js +0 -141
- package/scripts/verify_cdp_facilitator.js +0 -110
- package/scripts/verify_checkout_processor.js +0 -109
- package/scripts/verify_commerce_bridge.js +0 -177
- package/scripts/verify_control_plane_contracts.js +0 -34
- package/scripts/verify_control_plane_routes.js +0 -70
- package/scripts/verify_delivery_summary.js +0 -112
- package/scripts/verify_examples.js +0 -19
- package/scripts/verify_execution_dedupe.js +0 -189
- package/scripts/verify_execution_surfacing.js +0 -76
- package/scripts/verify_external_execution_retry.js +0 -140
- package/scripts/verify_final_activation.js +0 -191
- package/scripts/verify_first_run_conversions.js +0 -81
- package/scripts/verify_framework_provider_promotion.js +0 -152
- package/scripts/verify_full_catalog.js +0 -174
- package/scripts/verify_integrations.js +0 -620
- package/scripts/verify_l402_adapter.js +0 -86
- package/scripts/verify_lifecycle_continuity.js +0 -96
- package/scripts/verify_lifecycle_spend_binding.js +0 -88
- package/scripts/verify_market_lane_depth.js +0 -94
- package/scripts/verify_market_lane_promotion.js +0 -103
- package/scripts/verify_market_lane_traces.js +0 -98
- package/scripts/verify_market_lanes.js +0 -102
- package/scripts/verify_mpp_adapter.js +0 -128
- package/scripts/verify_operator_observability_boundary.js +0 -83
- package/scripts/verify_pricing_experiment_plan.js +0 -124
- package/scripts/verify_production_readiness.js +0 -268
- package/scripts/verify_provider_network.js +0 -819
- package/scripts/verify_provider_runtime_breadth.js +0 -109
- package/scripts/verify_provider_runtime_journeys.js +0 -111
- package/scripts/verify_rate_limiter.js +0 -52
- package/scripts/verify_refund_credit.js +0 -106
- package/scripts/verify_revenue_launch_paths.js +0 -105
- package/scripts/verify_runtime_durability.js +0 -52
- package/scripts/verify_runtime_state_guard.js +0 -117
- package/scripts/verify_service.js +0 -15421
- package/scripts/verify_settlement.js +0 -116
- package/scripts/verify_tooling.js +0 -1412
- package/scripts/verify_treasury_public_boundary.js +0 -97
- package/scripts/verify_verify_execute_settle.js +0 -209
- package/scripts/verify_x402_facilitator.js +0 -307
- package/scripts/verify_x402_settlement_recovery.js +0 -153
- package/server.js +0 -12245
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const { buildFetchOptionsForPurpose } = require("./network_transport");
|
|
4
|
-
const { clampTargetTimeoutMs, checkEndpointBeforeDispatch } = require("./external_execution_policy");
|
|
5
|
-
|
|
6
|
-
function normalizeString(value, fallback = "") {
|
|
7
|
-
const raw = typeof value === "string" ? value.trim() : "";
|
|
8
|
-
return raw || fallback;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function ensureObject(value) {
|
|
12
|
-
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function loadExecutionTargetRegistry() {
|
|
16
|
-
const raw = String(process.env.XYTARA_EXECUTION_TARGETS_JSON || "").trim();
|
|
17
|
-
if (!raw) return [];
|
|
18
|
-
let parsed = [];
|
|
19
|
-
try {
|
|
20
|
-
parsed = JSON.parse(raw);
|
|
21
|
-
} catch (_) {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
if (!Array.isArray(parsed)) return [];
|
|
25
|
-
return parsed
|
|
26
|
-
.map((entry, index) => {
|
|
27
|
-
const item = ensureObject(entry);
|
|
28
|
-
const targetId = normalizeString(item.target_id, `execution_target_${index + 1}`);
|
|
29
|
-
const endpointUrl = normalizeString(item.endpoint_url);
|
|
30
|
-
if (!endpointUrl) return null;
|
|
31
|
-
return {
|
|
32
|
-
target_id: targetId,
|
|
33
|
-
endpoint_url: endpointUrl,
|
|
34
|
-
task_ref: normalizeString(item.task_ref) || null,
|
|
35
|
-
tool_name: normalizeString(item.tool_name) || null,
|
|
36
|
-
integration_id: normalizeString(item.integration_id) || null,
|
|
37
|
-
provider: normalizeString(item.provider, "external_execution"),
|
|
38
|
-
auth_token: normalizeString(item.auth_token) || null,
|
|
39
|
-
timeout_ms: clampTargetTimeoutMs(item.timeout_ms),
|
|
40
|
-
enabled: item.enabled !== false
|
|
41
|
-
};
|
|
42
|
-
})
|
|
43
|
-
.filter(Boolean);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function resolveExecutionTarget(payload, quote) {
|
|
47
|
-
const registry = loadExecutionTargetRegistry();
|
|
48
|
-
if (registry.length < 1) return null;
|
|
49
|
-
const body = ensureObject(payload && payload.body);
|
|
50
|
-
const taskRefs = Array.isArray(payload && payload.tasks) && payload.tasks.length > 0
|
|
51
|
-
? payload.tasks.map((task) => normalizeString(task && task.task_ref)).filter(Boolean)
|
|
52
|
-
: [normalizeString(payload && payload.task_ref)].filter(Boolean);
|
|
53
|
-
const toolName = normalizeString(body.tool_name) || null;
|
|
54
|
-
const integrationIds = new Set(
|
|
55
|
-
[]
|
|
56
|
-
.concat(normalizeString(payload && payload.integration_id) ? [normalizeString(payload && payload.integration_id)] : [])
|
|
57
|
-
.concat(Array.isArray(payload && payload.integration_ids) ? payload.integration_ids.map((value) => normalizeString(value)).filter(Boolean) : [])
|
|
58
|
-
.concat(Array.isArray(quote && quote.integration_ids) ? quote.integration_ids.map((value) => normalizeString(value)).filter(Boolean) : [])
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
return registry.find((target) => {
|
|
62
|
-
if (!target.enabled) return false;
|
|
63
|
-
if (target.task_ref && !taskRefs.includes(target.task_ref)) return false;
|
|
64
|
-
if (target.tool_name && target.tool_name !== toolName) return false;
|
|
65
|
-
if (target.integration_id && !integrationIds.has(target.integration_id)) return false;
|
|
66
|
-
return true;
|
|
67
|
-
}) || null;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Statuses we retry on. Deliberately NARROW: only codes that prove the provider did NOT
|
|
71
|
-
// process the request (rate-limited / explicitly unavailable / request timeout), so a retry
|
|
72
|
-
// cannot double-execute a side-effectful provider on this open network. Ambiguous gateway
|
|
73
|
-
// errors (502/504) and network failures are NOT retried — the backend may have already done
|
|
74
|
-
// the work, and settlement is deferred so a non-retried failure simply doesn't charge.
|
|
75
|
-
const RETRYABLE_EXECUTION_STATUS = new Set([408, 429, 503]);
|
|
76
|
-
|
|
77
|
-
// Network error codes that prove the request NEVER reached/was-processed-by the provider
|
|
78
|
-
// (connection never established / DNS). These are safe to fail over on. A timeout (AbortError)
|
|
79
|
-
// or a mid-stream reset is NOT here — the provider may already have executed.
|
|
80
|
-
const NOT_PROCESSED_NET_CODES = new Set(["ECONNREFUSED", "ENOTFOUND", "EAI_AGAIN"]);
|
|
81
|
-
|
|
82
|
-
function connectErrorCode(error) {
|
|
83
|
-
if (!error) return "";
|
|
84
|
-
return String(error.code || (error.cause && error.cause.code) || "");
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function sleep(ms) {
|
|
88
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function executionRetryDelayMs(attempt, retryAfterHeader) {
|
|
92
|
-
const retryAfter = Number(retryAfterHeader);
|
|
93
|
-
if (Number.isFinite(retryAfter) && retryAfter >= 0) {
|
|
94
|
-
return Math.min(Math.round(retryAfter * 1000), 10000);
|
|
95
|
-
}
|
|
96
|
-
return Math.min(500 * Math.pow(2, attempt), 5000); // 500ms, 1000, 2000, 4000, cap 5000
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function executeExternalTargetOnce(target, body, timeoutMs) {
|
|
100
|
-
const controller = new AbortController();
|
|
101
|
-
const timer = setTimeout(() => controller.abort(), Math.max(1, Number(timeoutMs) || target.timeout_ms));
|
|
102
|
-
try {
|
|
103
|
-
const response = await fetch(target.endpoint_url, {
|
|
104
|
-
method: "POST",
|
|
105
|
-
headers: {
|
|
106
|
-
"content-type": "application/json",
|
|
107
|
-
...(target.auth_token ? { authorization: `Bearer ${target.auth_token}` } : {})
|
|
108
|
-
},
|
|
109
|
-
body,
|
|
110
|
-
signal: controller.signal,
|
|
111
|
-
// Never follow a redirect: a provider must not be able to bounce the call (and its bearer)
|
|
112
|
-
// to another host, including an internal one.
|
|
113
|
-
redirect: "error",
|
|
114
|
-
...buildFetchOptionsForPurpose("external_execution")
|
|
115
|
-
});
|
|
116
|
-
const text = await response.text();
|
|
117
|
-
let parsed = null;
|
|
118
|
-
try { parsed = text ? JSON.parse(text) : null; } catch (_) { parsed = null; }
|
|
119
|
-
return { ok: response.ok, status: response.status, retry_after: response.headers.get("retry-after"), parsed, text };
|
|
120
|
-
} finally {
|
|
121
|
-
clearTimeout(timer);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async function executeExternalTarget(target, payload, quote, authorizationContext, options) {
|
|
126
|
-
if (!target) return null;
|
|
127
|
-
const opts = ensureObject(options);
|
|
128
|
-
// One shared wall-clock budget for the WHOLE buyer call (every retry of every failover
|
|
129
|
-
// candidate), set by the caller so three candidates can never each burn a full ride-out window
|
|
130
|
-
// and push settlement past the x402 authorization expiry. Absent (direct callers) -> only the
|
|
131
|
-
// ride-out window below bounds this call.
|
|
132
|
-
const budgetDeadline = Number.isFinite(Number(opts.deadline_ms)) ? Number(opts.deadline_ms) : null;
|
|
133
|
-
const budgetExhausted = (attempts) => ({
|
|
134
|
-
ok: false,
|
|
135
|
-
status: 504,
|
|
136
|
-
reason: "external_execution_budget_exhausted",
|
|
137
|
-
provider: target.provider,
|
|
138
|
-
target_id: target.target_id,
|
|
139
|
-
failover_safe: false, // nothing left to spend on another candidate either
|
|
140
|
-
attempts
|
|
141
|
-
});
|
|
142
|
-
if (budgetDeadline !== null && Date.now() >= budgetDeadline) return budgetExhausted(0);
|
|
143
|
-
// Dispatch-time endpoint policy (strict on hosted deploys): refused BEFORE anything is sent, so
|
|
144
|
-
// this is a not-processed failure and failing over to the next candidate is safe.
|
|
145
|
-
const endpointCheck = await checkEndpointBeforeDispatch(target.endpoint_url);
|
|
146
|
-
if (!endpointCheck.ok) {
|
|
147
|
-
return {
|
|
148
|
-
ok: false,
|
|
149
|
-
status: 502,
|
|
150
|
-
reason: "external_execution_endpoint_rejected",
|
|
151
|
-
details: endpointCheck.reason,
|
|
152
|
-
provider: target.provider,
|
|
153
|
-
target_id: target.target_id,
|
|
154
|
-
failover_safe: true,
|
|
155
|
-
attempts: 0
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
const body = JSON.stringify({
|
|
159
|
-
command: payload && payload.command ? payload.command : "command.execute",
|
|
160
|
-
task_ref: payload && payload.task_ref ? payload.task_ref : null,
|
|
161
|
-
tasks: Array.isArray(payload && payload.tasks) ? payload.tasks : [],
|
|
162
|
-
body: ensureObject(payload && payload.body),
|
|
163
|
-
account_id: payload && payload.account_id ? payload.account_id : null,
|
|
164
|
-
quote,
|
|
165
|
-
authorization_context: authorizationContext || null
|
|
166
|
-
});
|
|
167
|
-
// COLD-START RIDE-OUT: a free-tier provider (e.g. Render) can answer 408/429/503 (or refuse the
|
|
168
|
-
// connection) for tens of seconds while it spins up. We keep retrying ONLY not-processed signals
|
|
169
|
-
// (never an ambiguous timeout/reset -> no double-execution) until a time budget runs out, so a
|
|
170
|
-
// cold provider warms up mid-retry instead of failing the UNSETTLED call. The window is bounded
|
|
171
|
-
// to stay inside the x402 settlement window (authorization ~maxTimeoutSeconds + buffer) so a
|
|
172
|
-
// ridden-out call still settles before the authorization expires. Free: no always-on keepalive.
|
|
173
|
-
const retryWindowMs = Math.max(0, Math.min(55000, Number(process.env.XYTARA_EXTERNAL_EXECUTION_RETRY_WINDOW_MS ?? 45000) || 0));
|
|
174
|
-
// XYTARA_EXTERNAL_EXECUTION_MAX_RETRIES is a count of RETRIES (attempts = retries + 1). Default is
|
|
175
|
-
// high so the TIME budget (retryWindowMs) is what actually bounds a cold-start ride-out; set it
|
|
176
|
-
// explicitly (e.g. 0) to cap retries regardless of the window.
|
|
177
|
-
const maxRetries = process.env.XYTARA_EXTERNAL_EXECUTION_MAX_RETRIES !== undefined
|
|
178
|
-
? Math.max(0, Math.min(39, Number(process.env.XYTARA_EXTERNAL_EXECUTION_MAX_RETRIES) || 0))
|
|
179
|
-
: 29;
|
|
180
|
-
const maxAttempts = maxRetries + 1;
|
|
181
|
-
const rideOutDeadline = Date.now() + retryWindowMs;
|
|
182
|
-
const deadline = budgetDeadline !== null ? Math.min(rideOutDeadline, budgetDeadline) : rideOutDeadline;
|
|
183
|
-
const remainingBudgetMs = () => (budgetDeadline !== null ? budgetDeadline - Date.now() : Infinity);
|
|
184
|
-
// A retry sleep never runs past the deadline, and a single attempt never outlives the budget.
|
|
185
|
-
const boundedSleep = (ms) => sleep(Math.max(0, Math.min(ms, deadline - Date.now())));
|
|
186
|
-
|
|
187
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
188
|
-
if (remainingBudgetMs() <= 0) return budgetExhausted(attempt);
|
|
189
|
-
try {
|
|
190
|
-
const r = await executeExternalTargetOnce(target, body, Math.min(target.timeout_ms, remainingBudgetMs()));
|
|
191
|
-
if (r.ok) {
|
|
192
|
-
return { ok: true, provider: target.provider, target_id: target.target_id, target_response: r.parsed || null };
|
|
193
|
-
}
|
|
194
|
-
// Retry only a provider-rejected (not-processed) status, while the ride-out budget lasts.
|
|
195
|
-
if (RETRYABLE_EXECUTION_STATUS.has(r.status) && Date.now() < deadline && attempt + 1 < maxAttempts) {
|
|
196
|
-
await boundedSleep(executionRetryDelayMs(attempt, r.retry_after));
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
return {
|
|
200
|
-
ok: false,
|
|
201
|
-
status: 502,
|
|
202
|
-
reason: "external_execution_target_rejected",
|
|
203
|
-
details: r.parsed || r.text || null,
|
|
204
|
-
provider: target.provider,
|
|
205
|
-
upstream_status: r.status,
|
|
206
|
-
// Safe to fail over only when the provider PROVABLY did not process (rejected us).
|
|
207
|
-
failover_safe: RETRYABLE_EXECUTION_STATUS.has(r.status),
|
|
208
|
-
attempts: attempt + 1
|
|
209
|
-
};
|
|
210
|
-
} catch (error) {
|
|
211
|
-
const isAbort = error && error.name === "AbortError";
|
|
212
|
-
// A connection that never established (refused/DNS during spin-up) did NOT reach the provider
|
|
213
|
-
// -> not processed -> safe to ride out too. A timeout or mid-stream reset is AMBIGUOUS -> stop.
|
|
214
|
-
const notProcessed = !isAbort && NOT_PROCESSED_NET_CODES.has(connectErrorCode(error));
|
|
215
|
-
if (notProcessed && Date.now() < deadline && attempt + 1 < maxAttempts) {
|
|
216
|
-
await boundedSleep(executionRetryDelayMs(attempt, null));
|
|
217
|
-
continue;
|
|
218
|
-
}
|
|
219
|
-
return {
|
|
220
|
-
ok: false,
|
|
221
|
-
status: isAbort ? 504 : 502,
|
|
222
|
-
reason: isAbort ? "external_execution_timeout" : "external_execution_failed",
|
|
223
|
-
details: error && error.message ? error.message : "external execution failed",
|
|
224
|
-
provider: target.provider,
|
|
225
|
-
failover_safe: notProcessed,
|
|
226
|
-
attempts: attempt + 1
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// Attempt budget exhausted on not-processed signals (ride-out never reached the provider).
|
|
231
|
-
return { ok: false, status: 502, reason: "external_execution_target_rejected", provider: target.provider, failover_safe: true, attempts: maxAttempts };
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
module.exports = {
|
|
235
|
-
executeExternalTarget,
|
|
236
|
-
loadExecutionTargetRegistry,
|
|
237
|
-
resolveExecutionTarget
|
|
238
|
-
};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function buildFeatureControlLanePack() {
|
|
4
|
-
return {
|
|
5
|
-
product: "xytara",
|
|
6
|
-
category: "machine-commerce-feature-control-lane-pack",
|
|
7
|
-
pack_version: "xytara-feature-control-lane-pack-v1",
|
|
8
|
-
lane_state: "first_party_feature_control_lane_present",
|
|
9
|
-
posture: "portable_policy_and_rollout_control_lane",
|
|
10
|
-
standards: ["openfeature", "ofrep"],
|
|
11
|
-
focal_controls: ["pricing_policy", "authority_policy", "machine_identity_policy", "trust_policy", "release_candidate_gates"],
|
|
12
|
-
supported_surfaces: {
|
|
13
|
-
pricing_policy_ref: "/v1/economics/accounts/:account_id/pricing-policy-package",
|
|
14
|
-
authority_policy_ref: "/v1/economics/accounts/:account_id/authority-policy-pack",
|
|
15
|
-
machine_identity_policy_ref: "/v1/economics/accounts/:account_id/machine-identity-policy-pack",
|
|
16
|
-
trust_policy_ref: "/v1/economics/accounts/:account_id/trust-layer-policy-pack",
|
|
17
|
-
release_candidate_ref: "/v1/release-candidate"
|
|
18
|
-
},
|
|
19
|
-
first_run_flows: [
|
|
20
|
-
{
|
|
21
|
-
flow_ref: "portable_rollout_control_alignment",
|
|
22
|
-
recommended_reason: "best path for teams that need portable rollout and policy posture without inventing a second control plane around the runtime",
|
|
23
|
-
sequence: [
|
|
24
|
-
"inspect_feature_control_lane_summary",
|
|
25
|
-
"map native policy packs to portable feature-control posture",
|
|
26
|
-
"use release and trust gates as rollout-compatible control surfaces",
|
|
27
|
-
"keep xytara policy truth canonical beneath external control adapters"
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
guardrails: [
|
|
32
|
-
"feature control should expose rollout posture without replacing native pricing, authority, identity, or trust truth",
|
|
33
|
-
"policy portability should remain bounded to avoid accidental split-brain control semantics"
|
|
34
|
-
]
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function summarizeFeatureControlLanePack() {
|
|
39
|
-
const pack = buildFeatureControlLanePack();
|
|
40
|
-
return {
|
|
41
|
-
product: "xytara",
|
|
42
|
-
category: "machine-commerce-feature-control-lane-pack-summary",
|
|
43
|
-
summary_version: "xytara-feature-control-lane-pack-summary-v1",
|
|
44
|
-
lane_state: pack.lane_state,
|
|
45
|
-
standard_count: pack.standards.length,
|
|
46
|
-
focal_control_count: pack.focal_controls.length,
|
|
47
|
-
linked_surfaces: pack.supported_surfaces
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
module.exports = {
|
|
52
|
-
buildFeatureControlLanePack,
|
|
53
|
-
summarizeFeatureControlLanePack
|
|
54
|
-
};
|
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const { buildScenarioPack } = require("./release_pack");
|
|
4
|
-
const { summarizeX402LanePack } = require("./x402_lane_contract");
|
|
5
|
-
const { summarizeProviderRuntimeJourneyPack } = require("./provider_runtime_journey_contract");
|
|
6
|
-
const { summarizeMarketLaneTracePack } = require("./market_lane_trace_contract");
|
|
7
|
-
|
|
8
|
-
function uniqueSorted(values) {
|
|
9
|
-
return Array.from(new Set((Array.isArray(values) ? values : []).filter(Boolean))).sort();
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function buildConversion(entry) {
|
|
13
|
-
const scenario = entry.scenario || {};
|
|
14
|
-
const stages = Array.isArray(entry.stages) ? entry.stages : [];
|
|
15
|
-
return {
|
|
16
|
-
conversion_id: entry.conversion_id,
|
|
17
|
-
conversion_label: entry.conversion_label,
|
|
18
|
-
conversion_posture: entry.conversion_posture,
|
|
19
|
-
claim_status: "bounded_live",
|
|
20
|
-
public_first_contact_ready: Boolean(entry.public_first_contact_ready),
|
|
21
|
-
quote_ready: stages.some((stage) => stage.stage_id === "quote"),
|
|
22
|
-
revenue_ready: Boolean(entry.revenue_ready),
|
|
23
|
-
proof_ready: Boolean(entry.proof_ready),
|
|
24
|
-
operator_inspection_ready: Boolean(entry.operator_inspection_ready),
|
|
25
|
-
payment_posture: entry.payment_posture,
|
|
26
|
-
stage_count: stages.length,
|
|
27
|
-
stages,
|
|
28
|
-
entrypoint: entry.entrypoint,
|
|
29
|
-
scenario_ref: scenario.scenario_ref || null,
|
|
30
|
-
success_signals: Array.isArray(scenario.success_signals) ? scenario.success_signals.slice() : [],
|
|
31
|
-
supporting_surfaces: uniqueSorted([
|
|
32
|
-
...(entry.supporting_surfaces || []),
|
|
33
|
-
...(scenario.surfaces || [])
|
|
34
|
-
]),
|
|
35
|
-
claim_boundary: entry.claim_boundary
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function buildFirstRunConversionPack() {
|
|
40
|
-
const scenarioPack = buildScenarioPack();
|
|
41
|
-
const scenarios = Array.isArray(scenarioPack.scenarios) ? scenarioPack.scenarios : [];
|
|
42
|
-
const x402Summary = summarizeX402LanePack();
|
|
43
|
-
const providerJourneySummary = summarizeProviderRuntimeJourneyPack();
|
|
44
|
-
const traceSummary = summarizeMarketLaneTracePack();
|
|
45
|
-
|
|
46
|
-
const directPayScenario = scenarios.find((entry) => entry && entry.scenario_ref === "scenario.direct_pay.trust_verify") || {};
|
|
47
|
-
const creditsScenario = scenarios.find((entry) => entry && entry.scenario_ref === "scenario.credits_first.repeat_run") || {};
|
|
48
|
-
const proofScenario = scenarios.find((entry) => entry && entry.scenario_ref === "scenario.runtime_to_proof.followthrough") || {};
|
|
49
|
-
|
|
50
|
-
const conversions = [
|
|
51
|
-
buildConversion({
|
|
52
|
-
conversion_id: "direct_x402_paid_proof",
|
|
53
|
-
conversion_label: "direct x402 paid proof",
|
|
54
|
-
conversion_posture: "quote_to_direct_pay_execute_and_proof_pickup",
|
|
55
|
-
public_first_contact_ready: true,
|
|
56
|
-
revenue_ready: true,
|
|
57
|
-
proof_ready: true,
|
|
58
|
-
operator_inspection_ready: true,
|
|
59
|
-
payment_posture: "direct_x402",
|
|
60
|
-
entrypoint: "xytara first-run --run-quote --account ACCOUNT_REF --pretty",
|
|
61
|
-
scenario: directPayScenario,
|
|
62
|
-
stages: [
|
|
63
|
-
{
|
|
64
|
-
stage_index: 1,
|
|
65
|
-
stage_id: "discover",
|
|
66
|
-
posture: "inspect_machine_payment_lane",
|
|
67
|
-
surface_ref: "/v1/x402/summary",
|
|
68
|
-
expected_outcome: "confirm the default machine-payment lane and bounded x402 posture before quoting"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
stage_index: 2,
|
|
72
|
-
stage_id: "quote",
|
|
73
|
-
posture: "secretless_first_contact_quote",
|
|
74
|
-
surface_ref: "xytara first-run --run-quote --account ACCOUNT_REF --pretty",
|
|
75
|
-
expected_outcome: "produce a payment-required challenge without spending funds or requiring wallet secrets"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
stage_index: 3,
|
|
79
|
-
stage_id: "fund",
|
|
80
|
-
posture: "pay_admission_after_quote",
|
|
81
|
-
surface_ref: "/x402/commands/execute",
|
|
82
|
-
expected_outcome: "replay the quoted request through the machine-payment lane with approved payment proof"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
stage_index: 4,
|
|
86
|
-
stage_id: "execute",
|
|
87
|
-
posture: "bounded_paid_runtime_execution",
|
|
88
|
-
surface_ref: "/x402/commands/execute",
|
|
89
|
-
expected_outcome: "execute the paid runtime call and receive transaction, payment, and delivery continuity"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
stage_index: 5,
|
|
93
|
-
stage_id: "prove",
|
|
94
|
-
posture: "result_package_proof_pickup",
|
|
95
|
-
surface_ref: "https://xoonya.onrender.com/v1/proof-center/result-package-handoff/summary",
|
|
96
|
-
expected_outcome: "pick up result-package proof followthrough instead of ending at runtime output"
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
stage_index: 6,
|
|
100
|
-
stage_id: "inspect",
|
|
101
|
-
posture: "operator_and_builder_inspection",
|
|
102
|
-
surface_ref: "/v1/payment-ledger",
|
|
103
|
-
expected_outcome: "inspect payment ledger and settlement-linked runtime consequence after the paid call completes"
|
|
104
|
-
}
|
|
105
|
-
],
|
|
106
|
-
supporting_surfaces: [
|
|
107
|
-
"/v1/settlement/bsv-teranode",
|
|
108
|
-
"/v1/transaction-center/result-packages/export-template",
|
|
109
|
-
"https://xoonya.onrender.com/v1/proof-center/result-package-handoff/review/summary"
|
|
110
|
-
],
|
|
111
|
-
claim_boundary: "claim_direct_x402_first_run_conversion_only_for_the_listed_quote_pay_execute_proof_and_inspection_surfaces_not_as_unbounded_payment_or_custody_control"
|
|
112
|
-
}),
|
|
113
|
-
buildConversion({
|
|
114
|
-
conversion_id: "credits_first_paid_proof",
|
|
115
|
-
conversion_label: "credits-first paid proof",
|
|
116
|
-
conversion_posture: "quote_to_credits_execute_and_proof_pickup",
|
|
117
|
-
public_first_contact_ready: true,
|
|
118
|
-
revenue_ready: true,
|
|
119
|
-
proof_ready: true,
|
|
120
|
-
operator_inspection_ready: true,
|
|
121
|
-
payment_posture: "credits_first",
|
|
122
|
-
entrypoint: "xytara first-run --execute-with-credits --account ACCOUNT_REF --pretty",
|
|
123
|
-
scenario: creditsScenario,
|
|
124
|
-
stages: [
|
|
125
|
-
{
|
|
126
|
-
stage_index: 1,
|
|
127
|
-
stage_id: "discover",
|
|
128
|
-
posture: "inspect_repeat_use_path",
|
|
129
|
-
surface_ref: "/v1/release-pack/scenarios/summary",
|
|
130
|
-
expected_outcome: "confirm the repeat-use credits-first path before funding or execution"
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
stage_index: 2,
|
|
134
|
-
stage_id: "quote",
|
|
135
|
-
posture: "secretless_first_contact_quote",
|
|
136
|
-
surface_ref: "xytara first-run --run-quote --account ACCOUNT_REF --pretty",
|
|
137
|
-
expected_outcome: "establish pricing and admission posture before switching to funded credits-first execution"
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
stage_index: 3,
|
|
141
|
-
stage_id: "fund",
|
|
142
|
-
posture: "approved_credit_funding",
|
|
143
|
-
surface_ref: "/v1/credit-packs/summary",
|
|
144
|
-
expected_outcome: "fund repeat-use credits through an approved money-in path without changing the public execution surface"
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
stage_index: 4,
|
|
148
|
-
stage_id: "execute",
|
|
149
|
-
posture: "bounded_credits_first_runtime_execution",
|
|
150
|
-
surface_ref: "/v1/commands/execute",
|
|
151
|
-
expected_outcome: "reuse the governed runtime surface with payment_preference=credits_first on a funded account"
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
stage_index: 5,
|
|
155
|
-
stage_id: "prove",
|
|
156
|
-
posture: "result_package_proof_pickup",
|
|
157
|
-
surface_ref: "https://xoonya.onrender.com/v1/proof-center/result-package-handoff/review/summary",
|
|
158
|
-
expected_outcome: "continue the funded execution into proof-side review and handoff verification"
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
stage_index: 6,
|
|
162
|
-
stage_id: "inspect",
|
|
163
|
-
posture: "repeat_use_account_inspection",
|
|
164
|
-
surface_ref: "/v1/economics/accounts/:account_id/usage-meters",
|
|
165
|
-
expected_outcome: "inspect repeat-use spend, usage meters, and entitlement continuity after the funded execution"
|
|
166
|
-
}
|
|
167
|
-
],
|
|
168
|
-
supporting_surfaces: [
|
|
169
|
-
"/v1/economics/accounts/:account_id/entitlements",
|
|
170
|
-
"/v1/economics/accounts/:account_id/credit-balance",
|
|
171
|
-
"/v1/transaction-center/result-packages/export-template"
|
|
172
|
-
],
|
|
173
|
-
claim_boundary: "claim_credits_first_conversion_only_for_the_listed_funded_account_runtime_and_proof_followthrough_surfaces_not_as_hidden_money_in_or_global_credit_truth"
|
|
174
|
-
}),
|
|
175
|
-
buildConversion({
|
|
176
|
-
conversion_id: "result_package_proof_pickup",
|
|
177
|
-
conversion_label: "result-package proof pickup",
|
|
178
|
-
conversion_posture: "runtime_delivery_into_xoonya_review_and_run",
|
|
179
|
-
public_first_contact_ready: false,
|
|
180
|
-
revenue_ready: false,
|
|
181
|
-
proof_ready: true,
|
|
182
|
-
operator_inspection_ready: true,
|
|
183
|
-
payment_posture: "carried_from_prior_paid_execution",
|
|
184
|
-
entrypoint: "POST /v1/transaction-center/result-packages/export",
|
|
185
|
-
scenario: proofScenario,
|
|
186
|
-
stages: [
|
|
187
|
-
{
|
|
188
|
-
stage_index: 1,
|
|
189
|
-
stage_id: "discover",
|
|
190
|
-
posture: "inspect_result_package_followthrough",
|
|
191
|
-
surface_ref: "/v1/transaction-center/result-packages/summary",
|
|
192
|
-
expected_outcome: "discover the result-package surface that keeps runtime output proof-ready"
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
stage_index: 2,
|
|
196
|
-
stage_id: "execute",
|
|
197
|
-
posture: "carry_forward_prior_paid_runtime_result",
|
|
198
|
-
surface_ref: "/v1/transaction-center/transaction-class-packs/run",
|
|
199
|
-
expected_outcome: "carry a paid runtime result into the governed result-package export and continuation path"
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
stage_index: 3,
|
|
203
|
-
stage_id: "deliver",
|
|
204
|
-
posture: "export_portable_handoff_bundle",
|
|
205
|
-
surface_ref: "/v1/transaction-center/result-packages/export-template",
|
|
206
|
-
expected_outcome: "export a portable handoff bundle that is ready for proof-side review and run"
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
stage_index: 4,
|
|
210
|
-
stage_id: "prove",
|
|
211
|
-
posture: "xoonya_review_and_run",
|
|
212
|
-
surface_ref: "https://xoonya.onrender.com/v1/proof-center/result-package-handoff/run",
|
|
213
|
-
expected_outcome: "continue the result package into xoonya proof review and deterministic run surfaces"
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
stage_index: 5,
|
|
217
|
-
stage_id: "inspect",
|
|
218
|
-
posture: "proof_service_and_bridge_inspection",
|
|
219
|
-
surface_ref: "https://xoonya.onrender.com/v1/proof-center/verification-services/summary",
|
|
220
|
-
expected_outcome: "inspect the proof-facing service posture that completes the runtime-to-proof conversion path"
|
|
221
|
-
}
|
|
222
|
-
],
|
|
223
|
-
supporting_surfaces: [
|
|
224
|
-
"https://xoonya.onrender.com/v1/proof-center/result-package-handoff/summary",
|
|
225
|
-
"https://xoonya.onrender.com/v1/proof-center/result-package-handoff/review/summary"
|
|
226
|
-
],
|
|
227
|
-
claim_boundary: "claim_result_package_proof_pickup_only_for_the_listed_runtime_export_handoff_review_and_run_surfaces_not_as_generic_external_proof_or_settlement_truth"
|
|
228
|
-
})
|
|
229
|
-
];
|
|
230
|
-
|
|
231
|
-
return {
|
|
232
|
-
ok: true,
|
|
233
|
-
product: "xytara",
|
|
234
|
-
category: "machine-commerce-first-run-conversion-pack",
|
|
235
|
-
pack_version: "xytara-first-run-conversion-pack-v1",
|
|
236
|
-
posture: "launch_grade_quote_fund_execute_proof_conversion_paths",
|
|
237
|
-
doctrine: "first_run_conversion_paths_make_public_discovery_revenue_and_proof_followthrough_stories_machine_readable_before_go_to_market_claims",
|
|
238
|
-
conversion_count: conversions.length,
|
|
239
|
-
public_first_contact_ready_count: conversions.filter((entry) => entry.public_first_contact_ready).length,
|
|
240
|
-
revenue_ready_conversion_count: conversions.filter((entry) => entry.revenue_ready).length,
|
|
241
|
-
proof_ready_conversion_count: conversions.filter((entry) => entry.proof_ready).length,
|
|
242
|
-
operator_inspection_ready_count: conversions.filter((entry) => entry.operator_inspection_ready).length,
|
|
243
|
-
stage_total_count: conversions.reduce((total, entry) => total + Number(entry.stage_count || 0), 0),
|
|
244
|
-
linked_runtime_counts: {
|
|
245
|
-
x402_first_run_flow_count: Number(x402Summary.first_run_flow_count || 0),
|
|
246
|
-
provider_runtime_journey_count: Number(providerJourneySummary.journey_count || 0),
|
|
247
|
-
market_lane_trace_count: Number(traceSummary.market_lane_trace_count || 0)
|
|
248
|
-
},
|
|
249
|
-
conversions,
|
|
250
|
-
linked_surfaces: {
|
|
251
|
-
x402_lane_summary_ref: "/v1/x402/summary",
|
|
252
|
-
providers_summary_ref: "/v1/providers/summary",
|
|
253
|
-
provider_journeys_summary_ref: "/v1/providers/journeys/summary",
|
|
254
|
-
release_scenarios_summary_ref: "/v1/release-pack/scenarios/summary",
|
|
255
|
-
result_packages_summary_ref: "/v1/transaction-center/result-packages/summary",
|
|
256
|
-
result_package_export_template_ref: "/v1/transaction-center/result-packages/export-template",
|
|
257
|
-
xoonya_result_package_handoff_summary_ref: "https://xoonya.onrender.com/v1/proof-center/result-package-handoff/summary",
|
|
258
|
-
xoonya_result_package_review_summary_ref: "https://xoonya.onrender.com/v1/proof-center/result-package-handoff/review/summary",
|
|
259
|
-
xoonya_verification_services_summary_ref: "https://xoonya.onrender.com/v1/proof-center/verification-services/summary"
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
function summarizeFirstRunConversionPack() {
|
|
265
|
-
const pack = buildFirstRunConversionPack();
|
|
266
|
-
return {
|
|
267
|
-
ok: true,
|
|
268
|
-
product: pack.product,
|
|
269
|
-
category: "machine-commerce-first-run-conversion-summary",
|
|
270
|
-
summary_version: "xytara-first-run-conversion-summary-v1",
|
|
271
|
-
conversion_count: pack.conversion_count,
|
|
272
|
-
public_first_contact_ready_count: pack.public_first_contact_ready_count,
|
|
273
|
-
revenue_ready_conversion_count: pack.revenue_ready_conversion_count,
|
|
274
|
-
proof_ready_conversion_count: pack.proof_ready_conversion_count,
|
|
275
|
-
operator_inspection_ready_count: pack.operator_inspection_ready_count,
|
|
276
|
-
stage_total_count: pack.stage_total_count,
|
|
277
|
-
linked_surfaces: pack.linked_surfaces
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function getFirstRunConversionDetail(conversionId) {
|
|
282
|
-
const normalized = String(conversionId || "").trim().toLowerCase();
|
|
283
|
-
return (buildFirstRunConversionPack().conversions || []).find((entry) => entry.conversion_id === normalized) || null;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
module.exports = {
|
|
287
|
-
buildFirstRunConversionPack,
|
|
288
|
-
summarizeFirstRunConversionPack,
|
|
289
|
-
getFirstRunConversionDetail
|
|
290
|
-
};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
buildPhase6FrameworkRuntimePack,
|
|
5
|
-
summarizePhase6FrameworkRuntimePack
|
|
6
|
-
} = require("./phase_6_framework_runtime_pack");
|
|
7
|
-
const {
|
|
8
|
-
summarizePhase6LanggraphRuntimePack
|
|
9
|
-
} = require("./phase_6_langgraph_runtime_pack");
|
|
10
|
-
const {
|
|
11
|
-
summarizePhase6LangchainRuntimePack
|
|
12
|
-
} = require("./phase_6_langchain_runtime_pack");
|
|
13
|
-
const {
|
|
14
|
-
summarizePhase6AutogenRuntimePack
|
|
15
|
-
} = require("./phase_6_autogen_runtime_pack");
|
|
16
|
-
const {
|
|
17
|
-
summarizePhase6SemanticKernelRuntimePack
|
|
18
|
-
} = require("./phase_6_semantic_kernel_runtime_pack");
|
|
19
|
-
|
|
20
|
-
function buildFrameworkLanePack() {
|
|
21
|
-
return {
|
|
22
|
-
product: "xytara",
|
|
23
|
-
category: "machine-commerce-framework-lane-pack",
|
|
24
|
-
pack_version: "xytara-framework-lane-pack-v1",
|
|
25
|
-
lane_state: "first_party_framework_family_present",
|
|
26
|
-
posture: "framework_orchestration_and_execution_family",
|
|
27
|
-
framework_family: {
|
|
28
|
-
pack: buildPhase6FrameworkRuntimePack(),
|
|
29
|
-
summary: summarizePhase6FrameworkRuntimePack()
|
|
30
|
-
},
|
|
31
|
-
featured_frameworks: {
|
|
32
|
-
langgraph: summarizePhase6LanggraphRuntimePack(),
|
|
33
|
-
langchain: summarizePhase6LangchainRuntimePack(),
|
|
34
|
-
autogen: summarizePhase6AutogenRuntimePack(),
|
|
35
|
-
semantic_kernel: summarizePhase6SemanticKernelRuntimePack()
|
|
36
|
-
},
|
|
37
|
-
registry_backed_frameworks: {
|
|
38
|
-
crewai: {
|
|
39
|
-
framework_id: "crewai",
|
|
40
|
-
posture: "registry-backed multi-agent workflow interoperability lane",
|
|
41
|
-
integration_ref: "builtin.execution.crewai"
|
|
42
|
-
},
|
|
43
|
-
llamaindex: {
|
|
44
|
-
framework_id: "llamaindex",
|
|
45
|
-
posture: "registry-backed retrieval and agent interoperability lane",
|
|
46
|
-
integration_ref: "builtin.execution.llamaindex"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
supported_surfaces: {
|
|
50
|
-
phase_6_summary_ref: "/v1/phases/phase-6/summary",
|
|
51
|
-
langgraph_summary_ref: "/v1/phases/phase-6/langgraph/summary",
|
|
52
|
-
langchain_summary_ref: "/v1/phases/phase-6/langchain/summary",
|
|
53
|
-
autogen_summary_ref: "/v1/phases/phase-6/autogen/summary",
|
|
54
|
-
semantic_kernel_summary_ref: "/v1/phases/phase-6/semantic-kernel/summary",
|
|
55
|
-
integrations_ref: "/v1/integrations",
|
|
56
|
-
integration_matrix_ref: "/v1/integration-matrix"
|
|
57
|
-
},
|
|
58
|
-
first_run_flows: [
|
|
59
|
-
{
|
|
60
|
-
flow_ref: "framework_family_selection",
|
|
61
|
-
recommended_reason: "best first path for understanding how orchestration frameworks map into the canonical runtime instead of sitting as disconnected side examples",
|
|
62
|
-
sequence: [
|
|
63
|
-
"inspect_framework_lane_summary",
|
|
64
|
-
"inspect_phase_6_framework_summary",
|
|
65
|
-
"inspect_named_framework_profiles",
|
|
66
|
-
"choose_framework_shape_that_best_matches_runtime_carry_needs"
|
|
67
|
-
]
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function summarizeFrameworkLanePack() {
|
|
74
|
-
const pack = buildFrameworkLanePack();
|
|
75
|
-
return {
|
|
76
|
-
product: "xytara",
|
|
77
|
-
category: "machine-commerce-framework-lane-pack-summary",
|
|
78
|
-
summary_version: "xytara-framework-lane-pack-summary-v1",
|
|
79
|
-
lane_state: pack.lane_state,
|
|
80
|
-
featured_framework_count: Object.keys(pack.featured_frameworks).length + Object.keys(pack.registry_backed_frameworks).length,
|
|
81
|
-
first_run_flow_count: pack.first_run_flows.length,
|
|
82
|
-
linked_surfaces: pack.supported_surfaces
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
module.exports = {
|
|
87
|
-
buildFrameworkLanePack,
|
|
88
|
-
summarizeFrameworkLanePack
|
|
89
|
-
};
|