xytara 2.5.0 → 2.6.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.
Files changed (61) hide show
  1. package/.env.example +29 -0
  2. package/BSV_TERANODE_SETUP.md +43 -0
  3. package/README.md +66 -7
  4. package/REAL_PAYMENT_SETUP.md +61 -0
  5. package/RELEASE_NOTES.md +12 -6
  6. package/SERVICE_CONTRACT.md +31 -0
  7. package/START_HERE.md +107 -6
  8. package/TREASURY_DESTINATIONS.example.json +66 -0
  9. package/TREASURY_DESTINATIONS.production.template.json +108 -0
  10. package/adapters/examples/langchain-reference-execution-adapter.js +81 -0
  11. package/adapters/examples/langchain-reference-execution-adapter.manifest.json +79 -0
  12. package/adapters/examples/langgraph-reference-execution-adapter.js +81 -0
  13. package/adapters/examples/langgraph-reference-execution-adapter.manifest.json +79 -0
  14. package/bin/xytara-first-run.js +244 -0
  15. package/bin/xytara.js +30 -5
  16. package/integrations/dispatch.js +7 -2
  17. package/integrations/registry.js +123 -2
  18. package/lib/activity_audit_contract.js +322 -0
  19. package/lib/adapter_depth_contract.js +156 -0
  20. package/lib/bolt_lane_contract.js +55 -0
  21. package/lib/bolt_payment_front.js +172 -0
  22. package/lib/capability_execution_truth.js +269 -0
  23. package/lib/capability_registry.js +39 -2
  24. package/lib/checkout_event_security.js +142 -0
  25. package/lib/command_flow.js +169 -36
  26. package/lib/commerce_artifacts.js +23 -4
  27. package/lib/commerce_checkout.js +134 -4
  28. package/lib/commerce_client.js +20 -0
  29. package/lib/commerce_economics.js +109 -9
  30. package/lib/commerce_runtime.js +38 -2
  31. package/lib/commerce_shell.js +4 -2
  32. package/lib/external_execution_runtime.js +132 -0
  33. package/lib/go_live_operator_pack.js +339 -0
  34. package/lib/http_transport.js +32 -0
  35. package/lib/integration_matrix_contract.js +6 -0
  36. package/lib/l402_lane_contract.js +55 -0
  37. package/lib/l402_payment_front.js +192 -0
  38. package/lib/network_transport.js +110 -0
  39. package/lib/operator_intelligence.js +215 -1
  40. package/lib/payment_config.js +80 -3
  41. package/lib/payment_front_registry.js +53 -0
  42. package/lib/payment_protocol_contract.js +165 -0
  43. package/lib/payment_verification.js +23 -3
  44. package/lib/pricing_optimization_contract.js +556 -0
  45. package/lib/release_history.js +15 -0
  46. package/lib/request_rate_limit.js +144 -0
  47. package/lib/runtime_bridge.js +10 -2
  48. package/lib/runtime_operations_worker.js +282 -0
  49. package/lib/settlement_bsv_live.js +79 -4
  50. package/lib/stripe_mpp_lane_contract.js +3 -0
  51. package/lib/stripe_mpp_payment_front.js +158 -0
  52. package/lib/treasury_destinations_contract.js +543 -0
  53. package/lib/treasury_egress_policy_contract.js +91 -0
  54. package/package.json +14 -21
  55. package/server.js +627 -88
  56. package/OPERATIONS_RUNBOOK.md +0 -66
  57. package/OPERATOR_START_HERE.md +0 -63
  58. package/PROGRAM_COMPLETE_RELEASE.md +0 -63
  59. package/PROGRAM_STATUS.md +0 -57
  60. package/PUBLISH_PLAN.md +0 -14
  61. package/RELEASE_CHECKLIST.md +0 -16
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+
3
+ function toArrayFromMap(mapValue) {
4
+ if (!(mapValue instanceof Map)) return [];
5
+ return Array.from(mapValue.values());
6
+ }
7
+
8
+ function normalizeTimestamp(value) {
9
+ if (typeof value !== "string" || !value.trim()) return null;
10
+ const parsed = Date.parse(value);
11
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;
12
+ }
13
+
14
+ function firstTimestamp(record, fieldNames) {
15
+ for (const fieldName of fieldNames) {
16
+ const timestamp = normalizeTimestamp(record && record[fieldName]);
17
+ if (timestamp) return timestamp;
18
+ }
19
+ return null;
20
+ }
21
+
22
+ function sortByTimestampDescending(items) {
23
+ return [...items].sort((left, right) => {
24
+ const leftTime = left && left.at_iso ? Date.parse(left.at_iso) : 0;
25
+ const rightTime = right && right.at_iso ? Date.parse(right.at_iso) : 0;
26
+ return rightTime - leftTime;
27
+ });
28
+ }
29
+
30
+ function buildQuoteActivities(state, accountId) {
31
+ return toArrayFromMap(state.quotes)
32
+ .filter((quote) => !accountId || quote.account_id === accountId)
33
+ .map((quote) => ({
34
+ activity_id: `quote.${quote.quote_id}`,
35
+ activity_kind: "quote",
36
+ activity_family: "commercial_admission",
37
+ at_iso: firstTimestamp(quote, ["executed_at_iso", "payment_recorded_at_iso", "created_at_iso"]),
38
+ account_id: quote.account_id || null,
39
+ actor_ref: quote.account_id || null,
40
+ action: quote.status === "executed" ? "quoted_and_executed" : "quoted",
41
+ status: quote.status || null,
42
+ amount_minor: quote.amount_minor || null,
43
+ currency: quote.currency || null,
44
+ settlement_mode: quote.settlement_mode || null,
45
+ payment_protocol: quote.payment_protocol || null,
46
+ route_ref: "/v1/payment-quotes",
47
+ linked_refs: {
48
+ quote_ref: quote.quote_id ? `/v1/quotes/${encodeURIComponent(quote.quote_id)}` : null
49
+ }
50
+ }));
51
+ }
52
+
53
+ function buildTransactionActivities(state, accountId) {
54
+ return toArrayFromMap(state.transactions)
55
+ .map((entry) => entry && entry.transaction ? entry.transaction : null)
56
+ .filter(Boolean)
57
+ .filter((transaction) => !accountId || transaction.account_id === accountId)
58
+ .map((transaction) => ({
59
+ activity_id: `transaction.${transaction.transaction_id}`,
60
+ activity_kind: "transaction",
61
+ activity_family: "runtime_execution",
62
+ at_iso: firstTimestamp(transaction, ["completed_at_iso", "created_at_iso"]),
63
+ account_id: transaction.account_id || null,
64
+ actor_ref: transaction.account_id || null,
65
+ action: "executed_runtime_work",
66
+ status: transaction.status || null,
67
+ amount_minor: transaction.payment && transaction.payment.amount_minor ? transaction.payment.amount_minor : null,
68
+ currency: transaction.payment && transaction.payment.currency ? transaction.payment.currency : null,
69
+ settlement_mode: transaction.settlement && transaction.settlement.mode ? transaction.settlement.mode : null,
70
+ payment_protocol: transaction.payment && transaction.payment.protocol ? transaction.payment.protocol : null,
71
+ delivery_target_kind: transaction.callback_url ? "callback" : "direct",
72
+ route_ref: "/v1/commands/execute",
73
+ linked_refs: {
74
+ transaction_ref: transaction.transaction_id ? `/v1/transactions/${encodeURIComponent(transaction.transaction_id)}` : null,
75
+ proof_ref: transaction.proof_ref || null
76
+ }
77
+ }));
78
+ }
79
+
80
+ function buildReceiptActivities(state, accountId) {
81
+ return toArrayFromMap(state.receipts)
82
+ .map((entry) => entry && entry.receipt ? entry.receipt : null)
83
+ .filter(Boolean)
84
+ .filter((receipt) => !accountId || receipt.account_id === accountId)
85
+ .map((receipt) => ({
86
+ activity_id: `receipt.${receipt.receipt_id}`,
87
+ activity_kind: "receipt",
88
+ activity_family: "delivery_proof",
89
+ at_iso: firstTimestamp(receipt, ["created_at_iso", "completed_at_iso"]),
90
+ account_id: receipt.account_id || null,
91
+ actor_ref: receipt.account_id || null,
92
+ action: "receipt_issued",
93
+ status: receipt.status || null,
94
+ proof_ref: receipt.proof_ref || null,
95
+ route_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : "/v1/receipts",
96
+ linked_refs: {
97
+ receipt_ref: receipt.receipt_id ? `/v1/receipts/${encodeURIComponent(receipt.receipt_id)}` : null
98
+ }
99
+ }));
100
+ }
101
+
102
+ function buildPaymentActivities(state, accountId) {
103
+ const ledger = Array.isArray(state.paymentLedger) ? state.paymentLedger : [];
104
+ return ledger
105
+ .filter((payment) => !accountId || payment.account_id === accountId)
106
+ .map((payment) => ({
107
+ activity_id: `payment.${payment.payment_id}`,
108
+ activity_kind: "payment",
109
+ activity_family: "funds_in",
110
+ at_iso: firstTimestamp(payment, ["recorded_at_iso"]),
111
+ account_id: payment.account_id || null,
112
+ actor_ref: payment.account_id || null,
113
+ action: "payment_recorded",
114
+ status: payment.payment && payment.payment.status ? payment.payment.status : null,
115
+ amount_minor: payment.amount_minor || null,
116
+ currency: payment.currency || null,
117
+ settlement_mode: payment.settlement && payment.settlement.mode ? payment.settlement.mode : null,
118
+ settlement_adapter: payment.settlement_adapter || null,
119
+ settlement_integration_id: payment.settlement_integration_id || null,
120
+ payment_protocol: payment.payment && payment.payment.protocol ? payment.payment.protocol : null,
121
+ treasury_destination_id: payment.treasury && payment.treasury.destination_id ? payment.treasury.destination_id : null,
122
+ treasury_external_ref: payment.treasury && payment.treasury.custody_external_ref ? payment.treasury.custody_external_ref : null,
123
+ route_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : "/v1/payment-ledger",
124
+ linked_refs: {
125
+ payment_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}` : null,
126
+ operator_pack_ref: payment.payment_id ? `/v1/payment-ledger/${encodeURIComponent(payment.payment_id)}/operator-pack` : null
127
+ }
128
+ }));
129
+ }
130
+
131
+ function buildDeliveryActivities(state, accountId) {
132
+ return toArrayFromMap(state.deliveries)
133
+ .filter((delivery) => !accountId || delivery.account_id === accountId)
134
+ .map((delivery) => ({
135
+ activity_id: `delivery.${delivery.delivery_id}`,
136
+ activity_kind: "delivery",
137
+ activity_family: "delivery_proof",
138
+ at_iso: firstTimestamp(delivery, ["delivered_at_iso", "last_attempt_at_iso", "created_at_iso"]),
139
+ account_id: delivery.account_id || null,
140
+ actor_ref: delivery.account_id || null,
141
+ action: delivery.status === "delivered" ? "delivered_result" : "delivery_pending",
142
+ status: delivery.status || null,
143
+ output_ref: delivery.output_ref || null,
144
+ proof_ref: delivery.proof_ref || null,
145
+ payment_id: delivery.payment_id || null,
146
+ delivery_target_kind: delivery.delivery_target_kind || null,
147
+ route_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
148
+ linked_refs: {
149
+ transaction_ref: delivery.transaction_id ? `/v1/transactions/${encodeURIComponent(delivery.transaction_id)}` : null,
150
+ receipt_ref: delivery.receipt_id ? `/v1/receipts/${encodeURIComponent(delivery.receipt_id)}` : null
151
+ }
152
+ }));
153
+ }
154
+
155
+ function buildHistoryActivities(records, accountId, config) {
156
+ return records.flatMap((record) => {
157
+ const history = Array.isArray(record && record.history) ? record.history : [];
158
+ return history
159
+ .filter((entry) => {
160
+ const recordAccountId = record && record.account_id ? record.account_id : null;
161
+ const transactionId = record && record.transaction_id ? record.transaction_id : null;
162
+ if (!accountId) return true;
163
+ return recordAccountId === accountId || transactionId === accountId || record && record.requested_by === accountId;
164
+ })
165
+ .map((entry, index) => ({
166
+ activity_id: `${config.prefix}.${record[config.idField]}.${index}`,
167
+ activity_kind: config.kind,
168
+ activity_family: config.family,
169
+ at_iso: firstTimestamp(entry, ["at_iso"]) || firstTimestamp(record, ["updated_at_iso", "created_at_iso"]),
170
+ account_id: record && record.account_id ? record.account_id : null,
171
+ actor_ref: entry && entry.actor ? `${entry.actor.type || "actor"}:${entry.actor.role || "unknown"}` : null,
172
+ action: entry && entry.event ? entry.event : config.defaultAction,
173
+ status: entry && entry.next_status ? entry.next_status : record.status || null,
174
+ reason_code: entry && entry.reason_code ? entry.reason_code : record.reason_code || null,
175
+ note: entry && entry.note ? entry.note : null,
176
+ route_ref: config.routeTemplate(record[config.idField]),
177
+ linked_refs: {
178
+ transaction_ref: record && record.transaction_id ? `/v1/transactions/${encodeURIComponent(record.transaction_id)}` : null,
179
+ receipt_ref: record && record.receipt_id ? `/v1/receipts/${encodeURIComponent(record.receipt_id)}` : null
180
+ }
181
+ }));
182
+ });
183
+ }
184
+
185
+ function buildCreditGrantActivities(state, accountId) {
186
+ return toArrayFromMap(state.externalCreditGrants)
187
+ .filter((grant) => !accountId || grant.account_id === accountId)
188
+ .map((grant) => ({
189
+ activity_id: `credit_grant.${grant.grant_id || grant.credit_grant_id || grant.account_id || "unknown"}`,
190
+ activity_kind: "credit_grant",
191
+ activity_family: "funding",
192
+ at_iso: firstTimestamp(grant, ["created_at_iso", "granted_at_iso", "recorded_at_iso"]),
193
+ account_id: grant.account_id || null,
194
+ actor_ref: grant.account_id || null,
195
+ action: "credit_granted",
196
+ status: grant.status || null,
197
+ amount_minor: grant.amount_minor || grant.credit_amount_minor || null,
198
+ currency: grant.currency || null,
199
+ route_ref: "/v1/credit-bridge/grants",
200
+ linked_refs: {}
201
+ }));
202
+ }
203
+
204
+ function buildBridgeActivities(state, accountId) {
205
+ return toArrayFromMap(state.runtimeBridgeDispatches)
206
+ .filter((dispatch) => !accountId || dispatch.account_id === accountId)
207
+ .map((dispatch) => ({
208
+ activity_id: `bridge.${dispatch.dispatch_id || dispatch.bridge_dispatch_id || "unknown"}`,
209
+ activity_kind: "bridge_dispatch",
210
+ activity_family: "runtime_proof_handoff",
211
+ at_iso: firstTimestamp(dispatch, ["created_at_iso", "dispatched_at_iso", "recorded_at_iso"]),
212
+ account_id: dispatch.account_id || null,
213
+ actor_ref: dispatch.account_id || null,
214
+ action: "bridge_dispatched",
215
+ status: dispatch.status || null,
216
+ route_ref: "/v1/proof-bridge",
217
+ linked_refs: {
218
+ proof_ref: dispatch.proof_ref || null,
219
+ receipt_ref: dispatch.receipt_id ? `/v1/receipts/${encodeURIComponent(dispatch.receipt_id)}` : null
220
+ }
221
+ }));
222
+ }
223
+
224
+ function buildParticipantActivities(records, kind, routeRef) {
225
+ return records.map((participant) => ({
226
+ activity_id: `${kind}.${participant.participant_id || participant.operator_id || participant.network_participant_id || "unknown"}`,
227
+ activity_kind: kind,
228
+ activity_family: "third_party_participation",
229
+ at_iso: firstTimestamp(participant, ["created_at_iso", "updated_at_iso", "admitted_at_iso"]),
230
+ account_id: participant.account_id || null,
231
+ actor_ref: participant.account_id || null,
232
+ action: `registered_${kind}`,
233
+ status: participant.status || null,
234
+ route_ref: routeRef,
235
+ linked_refs: {}
236
+ }));
237
+ }
238
+
239
+ function buildActivityLedger(state, options) {
240
+ const accountId = options && options.account_id ? options.account_id : null;
241
+ const activities = sortByTimestampDescending([
242
+ ...buildQuoteActivities(state, accountId),
243
+ ...buildTransactionActivities(state, accountId),
244
+ ...buildReceiptActivities(state, accountId),
245
+ ...buildPaymentActivities(state, accountId),
246
+ ...buildDeliveryActivities(state, accountId),
247
+ ...buildHistoryActivities(toArrayFromMap(state.refunds), accountId, {
248
+ prefix: "refund",
249
+ idField: "refund_id",
250
+ kind: "refund",
251
+ family: "remediation",
252
+ defaultAction: "refund_review",
253
+ routeTemplate: (id) => `/v1/refunds/${encodeURIComponent(id)}`
254
+ }),
255
+ ...buildHistoryActivities(toArrayFromMap(state.disputes), accountId, {
256
+ prefix: "dispute",
257
+ idField: "dispute_id",
258
+ kind: "dispute",
259
+ family: "remediation",
260
+ defaultAction: "dispute_review",
261
+ routeTemplate: (id) => `/v1/disputes/${encodeURIComponent(id)}`
262
+ }),
263
+ ...buildHistoryActivities(toArrayFromMap(state.remediationTickets), accountId, {
264
+ prefix: "remediation_ticket",
265
+ idField: "ticket_id",
266
+ kind: "remediation_ticket",
267
+ family: "remediation",
268
+ defaultAction: "remediation_review",
269
+ routeTemplate: (id) => `/v1/remediation-tickets/${encodeURIComponent(id)}`
270
+ }),
271
+ ...buildCreditGrantActivities(state, accountId),
272
+ ...buildBridgeActivities(state, accountId),
273
+ ...buildParticipantActivities(toArrayFromMap(state.operatorParticipants), "operator_participant", "/v1/multi-operator"),
274
+ ...buildParticipantActivities(toArrayFromMap(state.networkParticipants), "network_participant", "/v1/network-participation")
275
+ ]).slice(0, 300);
276
+
277
+ return {
278
+ product: "xytara",
279
+ category: "machine-commerce-activity-ledger",
280
+ pack_version: "xytara-activity-ledger-v1",
281
+ posture: "operator_facing_runtime_and_funds_activity_visibility",
282
+ audit_posture: "operator_visibility_first",
283
+ account_scope: accountId || "all_accounts",
284
+ counts: {
285
+ activity_count: activities.length,
286
+ payment_count: activities.filter((entry) => entry.activity_kind === "payment").length,
287
+ transaction_count: activities.filter((entry) => entry.activity_kind === "transaction").length,
288
+ delivery_count: activities.filter((entry) => entry.activity_kind === "delivery").length,
289
+ remediation_count: activities.filter((entry) => entry.activity_family === "remediation").length,
290
+ participation_count: activities.filter((entry) => entry.activity_family === "third_party_participation").length
291
+ },
292
+ activities,
293
+ linked_surfaces: {
294
+ payment_ledger_ref: "/v1/payment-ledger",
295
+ reconciliation_report_ref: "/v1/reconciliation-report",
296
+ integration_registry_ref: "/v1/integrations",
297
+ treasury_summary_ref_template: "/v1/economics/accounts/:account_id/treasury-summary",
298
+ rail_summary_ref_template: "/v1/economics/accounts/:account_id/rail-summary",
299
+ proof_bridge_ref: "/v1/proof-bridge",
300
+ activity_summary_ref: "/v1/activity-ledger/summary"
301
+ },
302
+ operator_note: "use this ledger to inspect who did what, what was paid, what was delivered, and how funds and consequence moved through the runtime"
303
+ };
304
+ }
305
+
306
+ function summarizeActivityLedger(state, options) {
307
+ const pack = buildActivityLedger(state, options);
308
+ return {
309
+ product: "xytara",
310
+ category: "machine-commerce-activity-ledger-summary",
311
+ summary_version: "xytara-activity-ledger-summary-v1",
312
+ activity_count: pack.counts.activity_count,
313
+ account_scope: pack.account_scope,
314
+ counts: pack.counts,
315
+ linked_surfaces: pack.linked_surfaces
316
+ };
317
+ }
318
+
319
+ module.exports = {
320
+ buildActivityLedger,
321
+ summarizeActivityLedger
322
+ };
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ const packageJson = require("../package.json");
4
+ const { catalog } = require("../fixtures/catalog");
5
+ const { loadExecutionTargetRegistry } = require("./external_execution_runtime");
6
+
7
+ function normalizeString(value, fallback = "") {
8
+ const raw = typeof value === "string" ? value.trim() : "";
9
+ return raw || fallback;
10
+ }
11
+
12
+ function listAdapterTasks() {
13
+ return (Array.isArray(catalog.tasks) ? catalog.tasks : [])
14
+ .filter((task) => normalizeString(task && task.public_category) === "adapter")
15
+ .map((task) => ({
16
+ task_ref: task.public_task_ref,
17
+ internal_task_ref: task.task_ref,
18
+ public_title: task.public_title,
19
+ execution_mode: task.execution_mode,
20
+ latency_class: task.latency_class
21
+ }));
22
+ }
23
+
24
+ function listTargetsForTask(taskRef) {
25
+ const normalizedTaskRef = normalizeString(taskRef);
26
+ return loadExecutionTargetRegistry().filter((target) => {
27
+ if (!target || target.enabled === false) return false;
28
+ if (normalizeString(target.task_ref) === normalizedTaskRef) return true;
29
+ if (normalizedTaskRef === "adapter.mcp.invoke") {
30
+ return Boolean(normalizeString(target.tool_name) || normalizeString(target.integration_id));
31
+ }
32
+ return false;
33
+ });
34
+ }
35
+
36
+ function summarizeTarget(target) {
37
+ const provider = normalizeString(target && target.provider, "external_execution");
38
+ const toolName = normalizeString(target && target.tool_name);
39
+ return {
40
+ target_id: target.target_id,
41
+ provider,
42
+ task_ref: target.task_ref || null,
43
+ tool_name: toolName || null,
44
+ integration_id: target.integration_id || null,
45
+ enabled: target.enabled !== false,
46
+ timeout_ms: target.timeout_ms,
47
+ endpoint_configured: Boolean(normalizeString(target.endpoint_url)),
48
+ auth_configured: Boolean(normalizeString(target.auth_token)),
49
+ operational_coverage: {
50
+ execute_endpoint: Boolean(normalizeString(target.endpoint_url)),
51
+ bearer_auth: Boolean(normalizeString(target.auth_token)),
52
+ bounded_timeout: Number(target.timeout_ms || 0) >= 500,
53
+ proof_fact_compatible: provider === "xytara_mcp_executor" || toolName === "summarize" || toolName === "zones.lookup",
54
+ deterministic_retry_surface: true,
55
+ tool_level_binding: Boolean(toolName),
56
+ operator_health_surface: provider === "xytara_mcp_executor" ? "/health" : null,
57
+ operator_tool_catalog_surface: provider === "xytara_mcp_executor" ? "/tools" : null
58
+ }
59
+ };
60
+ }
61
+
62
+ function summarizeAdapterTaskDepth(task) {
63
+ const targets = listTargetsForTask(task.task_ref).map(summarizeTarget);
64
+ const enabledTargets = targets.filter((target) => target.enabled);
65
+ const toolNames = Array.from(new Set(enabledTargets.map((target) => target.tool_name).filter(Boolean))).sort();
66
+ const allTargetsCovered = enabledTargets.length > 0 && enabledTargets.every((target) =>
67
+ target.operational_coverage.execute_endpoint
68
+ && target.operational_coverage.bounded_timeout
69
+ && target.operational_coverage.proof_fact_compatible
70
+ );
71
+ const depthState = enabledTargets.length >= 2 && allTargetsCovered
72
+ ? "provider_live_path_deepened"
73
+ : enabledTargets.length > 0
74
+ ? "initial_provider_live_path"
75
+ : "provider_wiring_required";
76
+
77
+ return {
78
+ ...task,
79
+ provider_depth_state: depthState,
80
+ provider_live: enabledTargets.length > 0,
81
+ configured_target_count: targets.length,
82
+ enabled_target_count: enabledTargets.length,
83
+ configured_tool_count: toolNames.length,
84
+ configured_tools: toolNames,
85
+ execution_targets: targets,
86
+ operator_claim_boundary: enabledTargets.length > 0
87
+ ? "claim_only_the_listed_task_and_tool_bindings_as_provider_live"
88
+ : "do_not_claim_provider_live_until_execution_targets_are_configured"
89
+ };
90
+ }
91
+
92
+ function buildAdapterDepthPack() {
93
+ const adapterTasks = listAdapterTasks().map(summarizeAdapterTaskDepth);
94
+ const providerLiveTasks = adapterTasks.filter((task) => task.provider_live);
95
+ const deepenedTasks = adapterTasks.filter((task) => task.provider_depth_state === "provider_live_path_deepened");
96
+ const configuredTargets = loadExecutionTargetRegistry().filter((target) => target && target.enabled !== false);
97
+ return {
98
+ ok: true,
99
+ product: packageJson.name,
100
+ category: "machine-commerce-adapter-depth-pack",
101
+ pack_version: "xytara-adapter-depth-pack-v1",
102
+ adapter_depth_state: deepenedTasks.length > 0
103
+ ? "provider_live_path_deepened"
104
+ : providerLiveTasks.length > 0
105
+ ? "initial_provider_live_path"
106
+ : "provider_wiring_required",
107
+ counts: {
108
+ adapter_task_count: adapterTasks.length,
109
+ provider_live_task_count: providerLiveTasks.length,
110
+ deepened_provider_live_task_count: deepenedTasks.length,
111
+ configured_execution_target_count: configuredTargets.length,
112
+ configured_provider_count: new Set(configuredTargets.map((target) => normalizeString(target.provider))).size,
113
+ configured_tool_count: new Set(configuredTargets.map((target) => normalizeString(target.tool_name)).filter(Boolean)).size
114
+ },
115
+ adapter_tasks: adapterTasks,
116
+ production_depth_requirements: [
117
+ "at_least_one_enabled_execution_target_for_provider_backed_task",
118
+ "tool_or_integration_level_binding_for_claimed_provider_lane",
119
+ "bounded_timeout_and_retry_observability",
120
+ "proof_fact_compatible_result_shape",
121
+ "operator_health_or_catalog_surface_for_target_service"
122
+ ],
123
+ public_claim_boundary: {
124
+ live_provider_claim_allowed: providerLiveTasks.length > 0,
125
+ deep_provider_claim_allowed: deepenedTasks.length > 0,
126
+ live_task_refs: providerLiveTasks.map((task) => task.task_ref),
127
+ deepened_task_refs: deepenedTasks.map((task) => task.task_ref),
128
+ rule: "only_claim_provider_depth_for_task_refs_and_tool_bindings_listed_in_this_pack"
129
+ },
130
+ linked_surfaces: {
131
+ execution_truth_ref: "/v1/capability-registry/execution-truth",
132
+ adapter_depth_summary_ref: "/v1/adapter-depth/summary",
133
+ integrations_ref: "/v1/integrations",
134
+ runtime_bridge_ref: "/v1/runtime-bridge/dispatches"
135
+ }
136
+ };
137
+ }
138
+
139
+ function summarizeAdapterDepthPack() {
140
+ const pack = buildAdapterDepthPack();
141
+ return {
142
+ ok: true,
143
+ product: pack.product,
144
+ category: "machine-commerce-adapter-depth-summary",
145
+ summary_version: "xytara-adapter-depth-summary-v1",
146
+ adapter_depth_state: pack.adapter_depth_state,
147
+ counts: pack.counts,
148
+ public_claim_boundary: pack.public_claim_boundary,
149
+ linked_surfaces: pack.linked_surfaces
150
+ };
151
+ }
152
+
153
+ module.exports = {
154
+ buildAdapterDepthPack,
155
+ summarizeAdapterDepthPack
156
+ };
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ function buildBoltLanePack() {
4
+ return {
5
+ product: "xytara",
6
+ category: "machine-commerce-bolt-lane-pack",
7
+ pack_version: "xytara-bolt-lane-pack-v1",
8
+ lane_state: "adapter_front_contract_present",
9
+ posture: "utxo_native_or_spv_provable_payment_front",
10
+ settlement_family: "utxo_native_settlement",
11
+ proof_family: "spv_or_block_header_verifiable_payment_proof",
12
+ role_in_xytara: "optional_permissionless_payment_and_proof_front",
13
+ supported_surfaces: {
14
+ security_ref: "/v1/bolt/security",
15
+ commands_execute_ref: "/bolt/commands/execute",
16
+ mcp_invoke_ref: "/bolt/mcp/tools/invoke",
17
+ payment_protocols_ref: "/v1/payment-protocols",
18
+ payment_protocol_strategy_ref: "/v1/payment-protocols/strategy",
19
+ settlement_lane_ref: "/v1/settlement",
20
+ execution_truth_ref: "/v1/capability-registry/execution-truth"
21
+ },
22
+ integration_rules: [
23
+ "treat BOLT-style or UTXO-SPV payment fronts as adapter lanes into the same execution core",
24
+ "keep settlement proof and runtime proof composable rather than hardwiring one chain ideology into the package",
25
+ "bind chain-specific proof verification through explicit adapters or settlement runtimes"
26
+ ],
27
+ recommended_uses: [
28
+ "operators who want stronger peer-to-peer payment properties",
29
+ "architectures that value block-header or SPV-verifiable settlement proof",
30
+ "ecosystems that prefer native UTXO payment models"
31
+ ],
32
+ non_claims: [
33
+ "not claimed as a first-party launch-default lane",
34
+ "not claimed as fully bound unless operator-configured against a real runtime"
35
+ ]
36
+ };
37
+ }
38
+
39
+ function summarizeBoltLanePack() {
40
+ const pack = buildBoltLanePack();
41
+ return {
42
+ product: pack.product,
43
+ category: pack.category,
44
+ summary_version: "xytara-bolt-lane-pack-summary-v1",
45
+ lane_state: pack.lane_state,
46
+ posture: pack.posture,
47
+ supported_surface_count: Object.keys(pack.supported_surfaces).length,
48
+ linked_surfaces: pack.supported_surfaces
49
+ };
50
+ }
51
+
52
+ module.exports = {
53
+ buildBoltLanePack,
54
+ summarizeBoltLanePack
55
+ };