xytara 2.10.0 → 2.12.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 (36) hide show
  1. package/RELEASE_NOTES.md +6 -8
  2. package/START_HERE.md +1 -1
  3. package/bin/xytara-first-run.js +2 -2
  4. package/bin/xytara.js +1 -1
  5. package/fixtures/catalog.js +9 -1
  6. package/index.js +86 -0
  7. package/lib/capability_registry.js +25 -1
  8. package/lib/catalog_contract.js +15 -0
  9. package/lib/catalog_family_model.js +190 -0
  10. package/lib/delivery_summary_contract.js +95 -0
  11. package/lib/first_run_conversion_contract.js +290 -0
  12. package/lib/full_catalog_contract.js +513 -0
  13. package/lib/go_live_operator_pack.js +9 -0
  14. package/lib/market_lane_contract.js +467 -0
  15. package/lib/market_lane_depth_contract.js +182 -0
  16. package/lib/market_lane_promotion_contract.js +210 -0
  17. package/lib/market_lane_trace_contract.js +278 -0
  18. package/lib/provider_lane_contract.js +185 -17
  19. package/lib/provider_runtime_journey_contract.js +183 -0
  20. package/lib/release_history.js +26 -1
  21. package/lib/revenue_launch_path_contract.js +326 -0
  22. package/package.json +13 -2
  23. package/scripts/verify_delivery_summary.js +112 -0
  24. package/scripts/verify_first_run_conversions.js +81 -0
  25. package/scripts/verify_full_catalog.js +174 -0
  26. package/scripts/verify_market_lane_depth.js +94 -0
  27. package/scripts/verify_market_lane_promotion.js +103 -0
  28. package/scripts/verify_market_lane_traces.js +98 -0
  29. package/scripts/verify_market_lanes.js +102 -0
  30. package/scripts/verify_provider_runtime_breadth.js +109 -0
  31. package/scripts/verify_provider_runtime_journeys.js +111 -0
  32. package/scripts/verify_release_candidate.js +5 -6
  33. package/scripts/verify_revenue_launch_paths.js +105 -0
  34. package/scripts/verify_runtime_durability.js +52 -0
  35. package/scripts/verify_service.js +223 -0
  36. package/server.js +307 -0
package/RELEASE_NOTES.md CHANGED
@@ -1,11 +1,9 @@
1
- # xytara 2.10.0 Release Notes
2
-
3
- `xytara` 2.10.0 is the release-hygiene and launch-polish line for current-release-only package notes, safer first-contact docs, and stronger release-candidate packaging checks.
1
+ `xytara` 2.12.0 is the full-catalog public truth line for aligned npm, GitHub, website, code, documentation, and public-copy surfaces.
4
2
 
5
3
  Highlights:
6
4
 
7
- - keeps `RELEASE_NOTES.md` scoped to the current release so npm and GitHub release notes do not read like a rolling changelog
8
- - adds a release-candidate guard that fails when package release notes contain prior release headings or drift from the package version
9
- - replaces the remaining soft-launch wallet-secret and txid example with the quote-first public first-run path
10
- - keeps the canonical `https://naxytra.com/xytara` public product URL and website polish intact
11
- - prepares the synchronized Naxytra 2.10.0 line for a cleaner npm, GitHub, website, and post-deploy verification pass
5
+ - normalizes visible `xytara`, `xoonya`, and `naxytra` product references to the lowercase convention across package docs, CLI copy, release history, and public-facing strings
6
+ - preserves the quote-first first-run path, provider-runtime journeys, revenue-launch paths, adapter-depth boundaries, pricing guardrails, treasury public-claim safety, and read-only operator observability boundaries
7
+ - keeps `RELEASE_NOTES.md` scoped to the current release so npm and GitHub release notes stay clean
8
+ - keeps the canonical `https://naxytra.com/xytara` public product URL and synchronized naxytra release posture intact
9
+ - verifies the lowercase convention through the release candidate, full package verifier, umbrella pre-deploy gates, and clean-consumer release smoke
package/START_HERE.md CHANGED
@@ -40,7 +40,7 @@ xytara first-run --run-quote --account ACCOUNT_REF --pretty
40
40
  The underlying command is:
41
41
 
42
42
  ```bash
43
- xytara-run --url https://xytara.onrender.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json "{\"tool_name\":\"summarize\",\"arguments\":{\"text\":\"Summarize the Naxytra first-run path in one sentence.\"}}" --quote-only --pretty
43
+ xytara-run --url https://xytara.onrender.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json "{\"tool_name\":\"summarize\",\"arguments\":{\"text\":\"Summarize the naxytra first-run path in one sentence.\"}}" --quote-only --pretty
44
44
  ```
45
45
 
46
46
  Then execute with direct signed payment or a credits-first funded account:
@@ -6,7 +6,7 @@ const { spawnSync } = require("child_process");
6
6
 
7
7
  const DEFAULT_SERVICE_URL = "https://xytara.onrender.com";
8
8
  const DEFAULT_KIT_URL = "https://www.naxytra.com/v1/first-run-kit";
9
- const DEFAULT_TEXT = "Summarize the Naxytra first-run path in one sentence.";
9
+ const DEFAULT_TEXT = "Summarize the naxytra first-run path in one sentence.";
10
10
  const ACCOUNT_PLACEHOLDER = "ACCOUNT_REF";
11
11
 
12
12
  function buildDefaultMcpBody(text) {
@@ -126,7 +126,7 @@ function printUsage() {
126
126
  " --run-quote Execute the safe quote-only path",
127
127
  " --execute-with-credits Execute the default task with account credits",
128
128
  " --account ACCOUNT_REF Account ref for quote or credits-first execution",
129
- ` --url <service_url> Xytara service URL, default ${DEFAULT_SERVICE_URL}`,
129
+ ` --url <service_url> xytara service URL, default ${DEFAULT_SERVICE_URL}`,
130
130
  " --text <text> Text for the default summarize task",
131
131
  " --pretty Pretty-print JSON output",
132
132
  " --help Show this help message"
package/bin/xytara.js CHANGED
@@ -40,7 +40,7 @@ function printStartHere() {
40
40
  "1. Open https://www.naxytra.com/v1/first-run-path",
41
41
  "2. Open https://www.naxytra.com/v1/first-run-kit for copyable commands.",
42
42
  "3. Quote safely first:",
43
- " xytara-run --url https://xytara.onrender.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json \"{\\\"tool_name\\\":\\\"summarize\\\",\\\"arguments\\\":{\\\"text\\\":\\\"Summarize the Naxytra first-run path in one sentence.\\\"}}\" --quote-only --pretty",
43
+ " xytara-run --url https://xytara.onrender.com --account ACCOUNT_REF --task adapter.mcp.invoke --command mcp.invoke:summarize --body-json \"{\\\"tool_name\\\":\\\"summarize\\\",\\\"arguments\\\":{\\\"text\\\":\\\"Summarize the naxytra first-run path in one sentence.\\\"}}\" --quote-only --pretty",
44
44
  "4. Execute with direct signed payment or credits-first on a funded account.",
45
45
  "5. Hand the result into xoonya for proof review and verification.",
46
46
  "",
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ const { decorateTaskMetadata } = require("../lib/catalog_family_model");
4
+
3
5
  function makeTask(definition) {
6
+ const metadata = decorateTaskMetadata(definition);
4
7
  return {
5
8
  task_ref: definition.task_ref,
6
9
  public_task_ref: definition.public_task_ref,
@@ -15,7 +18,12 @@ function makeTask(definition) {
15
18
  failure_posture: definition.failure_posture,
16
19
  input_schema: definition.input_schema,
17
20
  capabilities: definition.capabilities,
18
- adapters: definition.adapters
21
+ adapters: definition.adapters,
22
+ task_family: metadata.task_family,
23
+ lifecycle_stage: metadata.lifecycle_stage,
24
+ market_class: metadata.market_class,
25
+ claim_status: metadata.claim_status,
26
+ evidence_status: metadata.evidence_status
19
27
  };
20
28
  }
21
29
 
package/index.js CHANGED
@@ -35,6 +35,30 @@ const {
35
35
  buildAdapterPack,
36
36
  summarizeAdapterPack
37
37
  } = require("./lib/adapter_pack");
38
+ const {
39
+ buildProviderLanePack,
40
+ getProviderProfileDetail,
41
+ summarizeProviderLanePack
42
+ } = require("./lib/provider_lane_contract");
43
+ const {
44
+ buildProviderRuntimeJourneyPack,
45
+ getProviderRuntimeJourneyDetail,
46
+ summarizeProviderRuntimeJourneyPack
47
+ } = require("./lib/provider_runtime_journey_contract");
48
+ const {
49
+ buildFirstRunConversionPack,
50
+ getFirstRunConversionDetail,
51
+ summarizeFirstRunConversionPack
52
+ } = require("./lib/first_run_conversion_contract");
53
+ const {
54
+ buildDeliverySummaryPack,
55
+ summarizeDeliveryState
56
+ } = require("./lib/delivery_summary_contract");
57
+ const {
58
+ buildRevenueLaunchPathPack,
59
+ getRevenueLaunchPathDetail,
60
+ summarizeRevenueLaunchPathPack
61
+ } = require("./lib/revenue_launch_path_contract");
38
62
  const {
39
63
  buildFrameworkProviderPromotionPack,
40
64
  summarizeFrameworkProviderPromotionPack
@@ -43,6 +67,35 @@ const {
43
67
  buildPricingExperimentPlan,
44
68
  summarizePricingExperimentPlan
45
69
  } = require("./lib/pricing_optimization_contract");
70
+ const {
71
+ buildFullCatalogPack,
72
+ summarizeFullCatalogPack,
73
+ buildFamilyPromotionPack,
74
+ summarizeFamilyPromotionPack
75
+ } = require("./lib/full_catalog_contract");
76
+ const {
77
+ buildMarketLaneActivationPack,
78
+ buildMarketLanePack,
79
+ getMarketLaneDetail,
80
+ summarizeMarketLaneActivationPack,
81
+ summarizeMarketLanePack
82
+ } = require("./lib/market_lane_contract");
83
+ const {
84
+ buildMarketLaneDepthPack,
85
+ getMarketLaneDepthDetail,
86
+ summarizeMarketLaneDepthPack
87
+ } = require("./lib/market_lane_depth_contract");
88
+ const {
89
+ buildMarketLaneTracePack,
90
+ getMarketLaneTraceDetail,
91
+ summarizeMarketLaneTracePack
92
+ } = require("./lib/market_lane_trace_contract");
93
+ const {
94
+ buildMarketLanePromotionPack,
95
+ getMarketLanePromotionDetail,
96
+ summarizeMarketLanePromotionPack,
97
+ validateMarketLanePromotionEvidence
98
+ } = require("./lib/market_lane_promotion_contract");
46
99
  const {
47
100
  buildPublishPlan,
48
101
  summarizePublishPlan
@@ -167,10 +220,43 @@ module.exports = {
167
220
  summarizeReleaseHistory,
168
221
  buildAdapterPack,
169
222
  summarizeAdapterPack,
223
+ buildProviderLanePack,
224
+ getProviderProfileDetail,
225
+ summarizeProviderLanePack,
226
+ buildProviderRuntimeJourneyPack,
227
+ getProviderRuntimeJourneyDetail,
228
+ summarizeProviderRuntimeJourneyPack,
229
+ buildFirstRunConversionPack,
230
+ getFirstRunConversionDetail,
231
+ summarizeFirstRunConversionPack,
232
+ buildDeliverySummaryPack,
233
+ summarizeDeliveryState,
234
+ buildRevenueLaunchPathPack,
235
+ getRevenueLaunchPathDetail,
236
+ summarizeRevenueLaunchPathPack,
170
237
  buildFrameworkProviderPromotionPack,
171
238
  summarizeFrameworkProviderPromotionPack,
172
239
  buildPricingExperimentPlan,
173
240
  summarizePricingExperimentPlan,
241
+ buildFullCatalogPack,
242
+ summarizeFullCatalogPack,
243
+ buildFamilyPromotionPack,
244
+ summarizeFamilyPromotionPack,
245
+ buildMarketLanePack,
246
+ buildMarketLaneActivationPack,
247
+ buildMarketLaneDepthPack,
248
+ buildMarketLaneTracePack,
249
+ buildMarketLanePromotionPack,
250
+ getMarketLaneDetail,
251
+ getMarketLaneDepthDetail,
252
+ getMarketLaneTraceDetail,
253
+ getMarketLanePromotionDetail,
254
+ summarizeMarketLanePack,
255
+ summarizeMarketLaneActivationPack,
256
+ summarizeMarketLaneDepthPack,
257
+ summarizeMarketLaneTracePack,
258
+ summarizeMarketLanePromotionPack,
259
+ validateMarketLanePromotionEvidence,
174
260
  buildPublishPlan,
175
261
  summarizePublishPlan,
176
262
  buildEcosystemEntryPack,
@@ -39,6 +39,10 @@ const {
39
39
  summarizeCapabilityExecutionTruthBundle,
40
40
  buildCapabilityCommercializationSummary
41
41
  } = require("./capability_execution_truth");
42
+ const {
43
+ summarizeFullCatalogPack,
44
+ summarizeFamilyPromotionPack
45
+ } = require("./full_catalog_contract");
42
46
 
43
47
  function buildCapabilityRegistrySummary() {
44
48
  const catalogSummary = summarizeCatalog();
@@ -77,12 +81,15 @@ function buildCapabilityRegistrySummary() {
77
81
  catalog_state: "task_and_workflow_registry_present",
78
82
  execution_pack_state: "task_class_precommit_and_loop_packs_present",
79
83
  continuation_state: "result_package_and_continuation_registry_present",
80
- adapter_state: "adapter_registration_promotion_and_partner_registry_present"
84
+ adapter_state: "adapter_registration_promotion_and_partner_registry_present",
85
+ full_catalog_state: "family_lifecycle_market_registry_present"
81
86
  },
82
87
  linked_surfaces: {
83
88
  capability_registry_ref: "/v1/capability-registry",
84
89
  execution_truth_summary_ref: "/v1/capability-registry/execution-truth/summary",
85
90
  commercialization_summary_ref: "/v1/capability-registry/commercialization-summary",
91
+ full_catalog_summary_ref: "/v1/full-catalog/summary",
92
+ family_promotion_summary_ref: "/v1/full-catalog/family-promotions/summary",
86
93
  catalog_summary_ref: "/v1/catalog/summary",
87
94
  task_packs_summary_ref: "/v1/transaction-center/task-packs/summary",
88
95
  class_packs_summary_ref: "/v1/transaction-center/transaction-class-packs/summary",
@@ -103,6 +110,8 @@ function buildCapabilityRegistryBundle() {
103
110
  capability_registry_summary: buildCapabilityRegistrySummary(),
104
111
  capability_execution_truth: buildCapabilityExecutionTruthBundle(),
105
112
  capability_commercialization_summary: buildCapabilityCommercializationSummary(),
113
+ full_catalog_summary: summarizeFullCatalogPack(),
114
+ family_promotion_summary: summarizeFamilyPromotionPack(),
106
115
  catalog: getCatalog(),
107
116
  catalog_summary: summarizeCatalog(),
108
117
  task_pack_catalog: buildDefaultTransactionTaskPackCatalog(),
@@ -129,6 +138,8 @@ function buildCapabilityRegistryBundle() {
129
138
  capability_registry_summary_ref: "/v1/capability-registry/summary",
130
139
  capability_execution_truth_ref: "/v1/capability-registry/execution-truth",
131
140
  capability_commercialization_summary_ref: "/v1/capability-registry/commercialization-summary",
141
+ full_catalog_summary_ref: "/v1/full-catalog/summary",
142
+ family_promotion_summary_ref: "/v1/full-catalog/family-promotions/summary",
132
143
  catalog_ref: "/v1/catalog",
133
144
  task_pack_catalog_ref: "/v1/transaction-center/task-packs",
134
145
  class_pack_catalog_ref: "/v1/transaction-center/transaction-class-packs",
@@ -146,14 +157,23 @@ function buildCapabilityRegistryClassificationSummary() {
146
157
  const workflowCategories = new Map();
147
158
  const taskLatencies = new Map();
148
159
  const taskFailurePostures = new Map();
160
+ const taskFamilies = new Map();
161
+ const lifecycleStages = new Map();
162
+ const marketClasses = new Map();
149
163
 
150
164
  for (const task of Array.isArray(catalog.tasks) ? catalog.tasks : []) {
151
165
  const category = task && task.public_category ? task.public_category : "unknown";
152
166
  const latency = task && task.latency_class ? task.latency_class : "unknown";
153
167
  const failurePosture = task && task.failure_posture ? task.failure_posture : "unknown";
168
+ const taskFamily = task && task.task_family ? task.task_family : "unknown";
169
+ const lifecycleStage = task && task.lifecycle_stage ? task.lifecycle_stage : "unknown";
170
+ const marketClass = task && task.market_class ? task.market_class : "unknown";
154
171
  taskCategories.set(category, Number(taskCategories.get(category) || 0) + 1);
155
172
  taskLatencies.set(latency, Number(taskLatencies.get(latency) || 0) + 1);
156
173
  taskFailurePostures.set(failurePosture, Number(taskFailurePostures.get(failurePosture) || 0) + 1);
174
+ taskFamilies.set(taskFamily, Number(taskFamilies.get(taskFamily) || 0) + 1);
175
+ lifecycleStages.set(lifecycleStage, Number(lifecycleStages.get(lifecycleStage) || 0) + 1);
176
+ marketClasses.set(marketClass, Number(marketClasses.get(marketClass) || 0) + 1);
157
177
  }
158
178
 
159
179
  for (const workflow of Array.isArray(catalog.workflows) ? catalog.workflows : []) {
@@ -177,6 +197,9 @@ function buildCapabilityRegistryClassificationSummary() {
177
197
  category: "machine-commerce-capability-registry-classification-summary",
178
198
  summary_version: "xytara-capability-registry-classification-summary-v1",
179
199
  task_categories: Array.from(taskCategories.entries()).map(([category, task_count]) => ({ category, task_count })),
200
+ task_families: Array.from(taskFamilies.entries()).map(([task_family, task_count]) => ({ task_family, task_count })),
201
+ lifecycle_stages: Array.from(lifecycleStages.entries()).map(([lifecycle_stage, task_count]) => ({ lifecycle_stage, task_count })),
202
+ market_classes: Array.from(marketClasses.entries()).map(([market_class, task_count]) => ({ market_class, task_count })),
180
203
  workflow_categories: Array.from(workflowCategories.entries()).map(([category, workflow_count]) => ({ category, workflow_count })),
181
204
  task_latency_classes: Array.from(taskLatencies.entries()).map(([latency_class, task_count]) => ({ latency_class, task_count })),
182
205
  task_failure_postures: Array.from(taskFailurePostures.entries()).map(([failure_posture, task_count]) => ({ failure_posture, task_count })),
@@ -186,6 +209,7 @@ function buildCapabilityRegistryClassificationSummary() {
186
209
  capability_registry_ref: "/v1/capability-registry",
187
210
  capability_execution_truth_ref: "/v1/capability-registry/execution-truth",
188
211
  capability_commercialization_summary_ref: "/v1/capability-registry/commercialization-summary",
212
+ full_catalog_summary_ref: "/v1/full-catalog/summary",
189
213
  capability_registry_lineage_summary_ref: "/v1/capability-registry/lineage-summary",
190
214
  catalog_summary_ref: "/v1/catalog/summary"
191
215
  }
@@ -791,6 +791,11 @@ function summarizeCatalog() {
791
791
  pricing_note: task.pricing_note,
792
792
  latency_class: task.latency_class,
793
793
  failure_posture: task.failure_posture,
794
+ task_family: task.task_family,
795
+ lifecycle_stage: task.lifecycle_stage,
796
+ market_class: task.market_class,
797
+ claim_status: task.claim_status,
798
+ evidence_status: task.evidence_status,
794
799
  capabilities: task.capabilities,
795
800
  adapters: task.adapters
796
801
  })),
@@ -828,6 +833,11 @@ function getTaskDetail(ref) {
828
833
  pricing_note: task.pricing_note,
829
834
  latency_class: task.latency_class,
830
835
  failure_posture: task.failure_posture,
836
+ task_family: task.task_family,
837
+ lifecycle_stage: task.lifecycle_stage,
838
+ market_class: task.market_class,
839
+ claim_status: task.claim_status,
840
+ evidence_status: task.evidence_status,
831
841
  input_schema: task.input_schema,
832
842
  capabilities: task.capabilities,
833
843
  adapters: task.adapters
@@ -845,6 +855,11 @@ function buildWorkflowShape(workflow) {
845
855
  category: task.public_category,
846
856
  latency_class: task.latency_class,
847
857
  failure_posture: task.failure_posture,
858
+ task_family: task.task_family,
859
+ lifecycle_stage: task.lifecycle_stage,
860
+ market_class: task.market_class,
861
+ claim_status: task.claim_status,
862
+ evidence_status: task.evidence_status,
848
863
  pricing_band: task.pricing_band,
849
864
  public_launch_price: task.public_launch_price
850
865
  }));
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ const FAMILY_DEFINITIONS = Object.freeze([
4
+ { family_id: "identity", label: "identity" },
5
+ { family_id: "discovery", label: "discovery" },
6
+ { family_id: "negotiation", label: "negotiation" },
7
+ { family_id: "invocation", label: "invocation" },
8
+ { family_id: "sessions_messaging", label: "sessions/messaging" },
9
+ { family_id: "payments_metering", label: "payments/metering" },
10
+ { family_id: "delivery", label: "delivery" },
11
+ { family_id: "disputes", label: "disputes" },
12
+ { family_id: "anchoring_finality", label: "anchoring/finality" }
13
+ ]);
14
+
15
+ const LIFECYCLE_STAGE_DEFINITIONS = Object.freeze([
16
+ { lifecycle_stage: "discover", label: "discover" },
17
+ { lifecycle_stage: "negotiate", label: "negotiate" },
18
+ { lifecycle_stage: "quote_commit", label: "quote/commit" },
19
+ { lifecycle_stage: "invoke", label: "invoke" },
20
+ { lifecycle_stage: "session_send_close", label: "session/send/close" },
21
+ { lifecycle_stage: "meter", label: "meter" },
22
+ { lifecycle_stage: "deliver", label: "deliver" },
23
+ { lifecycle_stage: "settlement_intent", label: "settlement-intent" },
24
+ { lifecycle_stage: "settle_reconcile", label: "settle/reconcile" },
25
+ { lifecycle_stage: "anchor", label: "anchor" },
26
+ { lifecycle_stage: "dispute_open", label: "dispute-open" },
27
+ { lifecycle_stage: "dispute_fetch", label: "dispute-fetch" },
28
+ { lifecycle_stage: "verify", label: "verify" }
29
+ ]);
30
+
31
+ const MARKET_CLASS_DEFINITIONS = Object.freeze([
32
+ { market_class: "compute", label: "compute" },
33
+ { market_class: "data", label: "data" },
34
+ { market_class: "storage", label: "storage" },
35
+ { market_class: "messaging", label: "messaging" },
36
+ { market_class: "device_robotics", label: "device/robotics" },
37
+ { market_class: "treasury_payments", label: "treasury/payments" }
38
+ ]);
39
+
40
+ function mapCategoryDefaults(publicCategory) {
41
+ switch (String(publicCategory || "").trim()) {
42
+ case "trust":
43
+ return { task_family: "identity", lifecycle_stage: "verify", market_class: "data" };
44
+ case "receipt":
45
+ return { task_family: "delivery", lifecycle_stage: "verify", market_class: "data" };
46
+ case "runtime":
47
+ return { task_family: "delivery", lifecycle_stage: "deliver", market_class: "compute" };
48
+ case "jobs":
49
+ return { task_family: "invocation", lifecycle_stage: "quote_commit", market_class: "compute" };
50
+ case "credits":
51
+ return { task_family: "payments_metering", lifecycle_stage: "meter", market_class: "treasury_payments" };
52
+ case "a2a":
53
+ return { task_family: "negotiation", lifecycle_stage: "negotiate", market_class: "messaging" };
54
+ case "a2c":
55
+ return { task_family: "sessions_messaging", lifecycle_stage: "session_send_close", market_class: "messaging" };
56
+ case "policy":
57
+ return { task_family: "payments_metering", lifecycle_stage: "settlement_intent", market_class: "treasury_payments" };
58
+ case "identity":
59
+ return { task_family: "identity", lifecycle_stage: "verify", market_class: "data" };
60
+ case "registry":
61
+ return { task_family: "identity", lifecycle_stage: "deliver", market_class: "storage" };
62
+ case "anchoring":
63
+ return { task_family: "anchoring_finality", lifecycle_stage: "anchor", market_class: "storage" };
64
+ case "discovery":
65
+ return { task_family: "discovery", lifecycle_stage: "discover", market_class: "data" };
66
+ case "admission":
67
+ return { task_family: "negotiation", lifecycle_stage: "settlement_intent", market_class: "treasury_payments" };
68
+ case "settlement":
69
+ return { task_family: "payments_metering", lifecycle_stage: "settle_reconcile", market_class: "treasury_payments" };
70
+ case "adapter":
71
+ return { task_family: "invocation", lifecycle_stage: "invoke", market_class: "compute" };
72
+ default:
73
+ return { task_family: "discovery", lifecycle_stage: "discover", market_class: "data" };
74
+ }
75
+ }
76
+
77
+ function decorateTaskMetadata(definition = {}) {
78
+ const defaults = mapCategoryDefaults(definition.public_category);
79
+ const publicTaskRef = String(definition.public_task_ref || "").trim();
80
+ let task_family = defaults.task_family;
81
+ let lifecycle_stage = defaults.lifecycle_stage;
82
+ let market_class = defaults.market_class;
83
+ let claim_status = "bounded_live";
84
+ let evidence_status = "first_party_runtime";
85
+
86
+ switch (publicTaskRef) {
87
+ case "trust.handoff.emit":
88
+ case "execution_receipt.handoff.emit":
89
+ case "receipt_ledger.handoff.emit":
90
+ case "identity.registry.link":
91
+ case "registry.pack.bundle":
92
+ case "jobs.release":
93
+ lifecycle_stage = "deliver";
94
+ evidence_status = "proof_handoff_ready";
95
+ break;
96
+ case "trust.handoff.validate":
97
+ case "execution_receipt.handoff.validate":
98
+ case "receipt_ledger.handoff.validate":
99
+ case "receipt.validate":
100
+ lifecycle_stage = "verify";
101
+ break;
102
+ case "runtime.anchor":
103
+ case "runtime.emit_anchor":
104
+ task_family = "anchoring_finality";
105
+ lifecycle_stage = "anchor";
106
+ break;
107
+ case "jobs.quote":
108
+ lifecycle_stage = "quote_commit";
109
+ break;
110
+ case "jobs.reserve":
111
+ case "jobs.commit":
112
+ task_family = "invocation";
113
+ lifecycle_stage = "quote_commit";
114
+ break;
115
+ case "credits.apply":
116
+ lifecycle_stage = "settle_reconcile";
117
+ evidence_status = "first_party_ledger";
118
+ break;
119
+ case "a2a.commit":
120
+ lifecycle_stage = "quote_commit";
121
+ break;
122
+ case "policy.simulate":
123
+ case "admission.preview":
124
+ lifecycle_stage = "settlement_intent";
125
+ evidence_status = "first_party_policy_preview";
126
+ break;
127
+ case "settlement.submit":
128
+ lifecycle_stage = "settle_reconcile";
129
+ evidence_status = "first_party_settlement";
130
+ break;
131
+ case "adapter.mcp.invoke":
132
+ claim_status = "live";
133
+ evidence_status = "provider_live";
134
+ break;
135
+ default:
136
+ break;
137
+ }
138
+
139
+ return {
140
+ task_family,
141
+ lifecycle_stage,
142
+ market_class,
143
+ claim_status,
144
+ evidence_status
145
+ };
146
+ }
147
+
148
+ function decorateAdapterMetadata(adapterId) {
149
+ switch (String(adapterId || "").trim()) {
150
+ case "mcp":
151
+ return {
152
+ task_family: "invocation",
153
+ lifecycle_stage: "invoke",
154
+ market_class: "compute",
155
+ claim_status: "live",
156
+ evidence_status: "provider_live"
157
+ };
158
+ case "chain":
159
+ return {
160
+ task_family: "payments_metering",
161
+ lifecycle_stage: "settle_reconcile",
162
+ market_class: "treasury_payments",
163
+ claim_status: "bounded_live",
164
+ evidence_status: "first_party_settlement"
165
+ };
166
+ case "http":
167
+ default:
168
+ return {
169
+ task_family: "discovery",
170
+ lifecycle_stage: "discover",
171
+ market_class: "data",
172
+ claim_status: "bounded_live",
173
+ evidence_status: "first_party_runtime"
174
+ };
175
+ }
176
+ }
177
+
178
+ function definitionLabel(definitions, field, value) {
179
+ const entry = definitions.find((item) => item[field] === value);
180
+ return entry ? entry.label : value;
181
+ }
182
+
183
+ module.exports = {
184
+ FAMILY_DEFINITIONS,
185
+ LIFECYCLE_STAGE_DEFINITIONS,
186
+ MARKET_CLASS_DEFINITIONS,
187
+ decorateAdapterMetadata,
188
+ decorateTaskMetadata,
189
+ definitionLabel
190
+ };
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ const packageJson = require("../package.json");
4
+ const { loadRuntimeOperationsConfig } = require("./runtime_operations_worker");
5
+
6
+ function listDeliveries(state) {
7
+ if (!state || !state.deliveries) return [];
8
+ if (state.deliveries instanceof Map) {
9
+ return Array.from(state.deliveries.values()).filter(Boolean);
10
+ }
11
+ return Array.isArray(state.deliveries) ? state.deliveries.filter(Boolean) : [];
12
+ }
13
+
14
+ function summarizeDeliveryState(state) {
15
+ const config = loadRuntimeOperationsConfig();
16
+ const deliveries = listDeliveries(state);
17
+ const callbackDeliveries = deliveries.filter((delivery) => delivery && delivery.callback_url);
18
+ const directDeliveries = deliveries.filter((delivery) => delivery && !delivery.callback_url);
19
+ const deliveredDeliveries = deliveries.filter((delivery) => delivery && delivery.status === "delivered");
20
+ const pendingDeliveries = deliveries.filter((delivery) => delivery && delivery.status === "pending_delivery");
21
+ const retryingCallbackDeliveries = callbackDeliveries.filter((delivery) => {
22
+ const callbackDelivery = delivery.callback_delivery || {};
23
+ return callbackDelivery.status === "retrying";
24
+ });
25
+ const queuedCallbackDeliveries = callbackDeliveries.filter((delivery) => {
26
+ const callbackDelivery = delivery.callback_delivery || {};
27
+ return callbackDelivery.status === "queued";
28
+ });
29
+ const inProgressCallbackDeliveries = callbackDeliveries.filter((delivery) => {
30
+ const callbackDelivery = delivery.callback_delivery || {};
31
+ return callbackDelivery.status === "in_progress";
32
+ });
33
+ const failedCallbackDeliveries = callbackDeliveries.filter((delivery) => {
34
+ const callbackDelivery = delivery.callback_delivery || {};
35
+ return callbackDelivery.status === "failed";
36
+ });
37
+ const signedCallbackDeliveries = callbackDeliveries.filter((delivery) => {
38
+ const callbackDelivery = delivery.callback_delivery || {};
39
+ return callbackDelivery.signature_mode === "hmac_sha256";
40
+ });
41
+ const callbackSignalingConfigured = config.callback_delivery_enabled === true;
42
+
43
+ return {
44
+ ok: true,
45
+ product: packageJson.name,
46
+ category: "machine-commerce-delivery-summary",
47
+ summary_version: "xytara-delivery-summary-v1",
48
+ callback_delivery_enabled: config.callback_delivery_enabled,
49
+ callback_signing_secret_configured: Boolean(config.callback_signing_secret),
50
+ callback_timeout_ms: config.callback_timeout_ms,
51
+ callback_max_attempts: config.callback_max_attempts,
52
+ callback_retry_base_ms: config.callback_retry_base_ms,
53
+ worker_interval_ms: config.worker_interval_ms,
54
+ settlement_refresh_interval_ms: config.settlement_refresh_interval_ms,
55
+ delivery_count: deliveries.length,
56
+ callback_delivery_count: callbackDeliveries.length,
57
+ direct_delivery_count: directDeliveries.length,
58
+ delivered_delivery_count: deliveredDeliveries.length,
59
+ pending_delivery_count: pendingDeliveries.length,
60
+ queued_callback_delivery_count: queuedCallbackDeliveries.length,
61
+ in_progress_callback_delivery_count: inProgressCallbackDeliveries.length,
62
+ retrying_callback_delivery_count: retryingCallbackDeliveries.length,
63
+ failed_callback_delivery_count: failedCallbackDeliveries.length,
64
+ signed_callback_delivery_count: signedCallbackDeliveries.length,
65
+ delivery_posture: callbackSignalingConfigured ? "callback_enabled" : "callback_disabled",
66
+ ready: callbackSignalingConfigured,
67
+ blockers: callbackSignalingConfigured ? [] : ["callback_delivery_disabled"],
68
+ linked_surfaces: {
69
+ deliveries_ref: "/v1/deliveries",
70
+ go_live_ref: "/v1/go-live",
71
+ go_live_summary_ref: "/v1/go-live/summary",
72
+ runtime_durability_ref: "/v1/runtime/durability"
73
+ }
74
+ };
75
+ }
76
+
77
+ function buildDeliverySummaryPack(state) {
78
+ const summary = summarizeDeliveryState(state);
79
+ return {
80
+ ...summary,
81
+ delivery_statuses: {
82
+ delivered: summary.delivered_delivery_count,
83
+ pending: summary.pending_delivery_count,
84
+ callback_queued: summary.queued_callback_delivery_count,
85
+ callback_in_progress: summary.in_progress_callback_delivery_count,
86
+ callback_retrying: summary.retrying_callback_delivery_count,
87
+ callback_failed: summary.failed_callback_delivery_count
88
+ }
89
+ };
90
+ }
91
+
92
+ module.exports = {
93
+ buildDeliverySummaryPack,
94
+ summarizeDeliveryState
95
+ };