xytara 2.6.0 → 2.7.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.
@@ -0,0 +1,554 @@
1
+ "use strict";
2
+
3
+ const assert = require("assert");
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const manifestSchema = JSON.parse(
8
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "adapter-manifest.schema.json"), "utf8")
9
+ );
10
+ const registrationRecordSchema = JSON.parse(
11
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "integration-registration-record.schema.json"), "utf8")
12
+ );
13
+ const certificationPackSchema = JSON.parse(
14
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "integration-certification-pack.schema.json"), "utf8")
15
+ );
16
+ const submissionBundleSchema = JSON.parse(
17
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "integration-submission-bundle.schema.json"), "utf8")
18
+ );
19
+ const exampleManifest = JSON.parse(
20
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-execution-adapter.manifest.json"), "utf8")
21
+ );
22
+ const exampleSettlementManifest = JSON.parse(
23
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-settlement-adapter.manifest.json"), "utf8")
24
+ );
25
+ const exampleRegistrationRecord = JSON.parse(
26
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-registration.record.json"), "utf8")
27
+ );
28
+ const exampleCertificationPack = JSON.parse(
29
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-registration.certification-pack.json"), "utf8")
30
+ );
31
+ const exampleIdentityRegistrationRecord = JSON.parse(
32
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-identity-registration.record.json"), "utf8")
33
+ );
34
+ const exampleIdentityCertificationPack = JSON.parse(
35
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-identity-registration.certification-pack.json"), "utf8")
36
+ );
37
+ const exampleSettlementRegistrationRecord = JSON.parse(
38
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-settlement-registration.record.json"), "utf8")
39
+ );
40
+ const exampleSettlementCertificationPack = JSON.parse(
41
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-settlement-registration.certification-pack.json"), "utf8")
42
+ );
43
+ const exampleSubmissionBundle = JSON.parse(
44
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-registration.submission-bundle.json"), "utf8")
45
+ );
46
+ const minimalThirdPartyExecutionManifest = JSON.parse(
47
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "minimal-third-party-execution-adapter.manifest.json"), "utf8")
48
+ );
49
+ const langgraphReferenceManifest = JSON.parse(
50
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "langgraph-reference-execution-adapter.manifest.json"), "utf8")
51
+ );
52
+ const langchainReferenceManifest = JSON.parse(
53
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "langchain-reference-execution-adapter.manifest.json"), "utf8")
54
+ );
55
+ const minimalThirdPartyExecutionRegistrationRecord = JSON.parse(
56
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "minimal-third-party-execution-registration.record.json"), "utf8")
57
+ );
58
+ const minimalThirdPartyExecutionCertificationPack = JSON.parse(
59
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "minimal-third-party-execution.certification-pack.json"), "utf8")
60
+ );
61
+ const minimalThirdPartyExecutionSubmissionBundle = JSON.parse(
62
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "minimal-third-party-execution.submission-bundle.json"), "utf8")
63
+ );
64
+ const exampleIdentitySubmissionBundle = JSON.parse(
65
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-identity-registration.submission-bundle.json"), "utf8")
66
+ );
67
+ const exampleSettlementSubmissionBundle = JSON.parse(
68
+ fs.readFileSync(path.resolve(__dirname, "..", "adapters", "examples", "example-third-party-settlement-registration.submission-bundle.json"), "utf8")
69
+ );
70
+ const minimalThirdPartyExecutionAdapter = require("../adapters/examples/minimal-third-party-execution-adapter");
71
+ const langgraphReferenceAdapter = require("../adapters/examples/langgraph-reference-execution-adapter");
72
+ const langchainReferenceAdapter = require("../adapters/examples/langchain-reference-execution-adapter");
73
+ const exampleAdapter = require("../adapters/examples/example-execution-adapter");
74
+ const exampleSettlementAdapter = require("../adapters/examples/example-settlement-adapter");
75
+ const { ADAPTER_INTERFACE_VERSION, validateAdapterImplementation } = require("../adapters/interfaces");
76
+ const {
77
+ createIntegrationSubmissionBundle,
78
+ validateIntegrationCertificationPack,
79
+ validateIntegrationSubmission,
80
+ validateIntegrationSubmissionBundle
81
+ } = require("../integrations/registry");
82
+
83
+ function validateType(value, type) {
84
+ if (type === "array") return Array.isArray(value);
85
+ if (type === "object") return value !== null && typeof value === "object" && !Array.isArray(value);
86
+ if (type === "boolean") return typeof value === "boolean";
87
+ if (type === "string") return typeof value === "string";
88
+ return true;
89
+ }
90
+
91
+ function validateManifest(manifest, schema, pathLabel, errors) {
92
+ const targetPath = pathLabel || "manifest";
93
+ if (!validateType(manifest, schema.type)) {
94
+ errors.push(`${targetPath} should be ${schema.type}`);
95
+ return;
96
+ }
97
+
98
+ if (schema.type === "object") {
99
+ const properties = schema.properties || {};
100
+ const required = Array.isArray(schema.required) ? schema.required : [];
101
+
102
+ for (const key of required) {
103
+ if (!Object.prototype.hasOwnProperty.call(manifest, key)) {
104
+ errors.push(`${targetPath}.${key} is required`);
105
+ }
106
+ }
107
+
108
+ if (schema.additionalProperties === false) {
109
+ for (const key of Object.keys(manifest)) {
110
+ if (!Object.prototype.hasOwnProperty.call(properties, key)) {
111
+ errors.push(`${targetPath}.${key} is not allowed`);
112
+ }
113
+ }
114
+ }
115
+
116
+ for (const [key, propertySchema] of Object.entries(properties)) {
117
+ if (Object.prototype.hasOwnProperty.call(manifest, key)) {
118
+ validateManifest(manifest[key], propertySchema, `${targetPath}.${key}`, errors);
119
+ }
120
+ }
121
+ return;
122
+ }
123
+
124
+ if (schema.type === "array") {
125
+ if (typeof schema.minItems === "number" && manifest.length < schema.minItems) {
126
+ errors.push(`${targetPath} must contain at least ${schema.minItems} item(s)`);
127
+ }
128
+ manifest.forEach((value, index) => {
129
+ validateManifest(value, schema.items || {}, `${targetPath}[${index}]`, errors);
130
+ });
131
+ return;
132
+ }
133
+
134
+ if (schema.type === "string") {
135
+ if (typeof schema.minLength === "number" && manifest.length < schema.minLength) {
136
+ errors.push(`${targetPath} must be at least ${schema.minLength} character(s)`);
137
+ }
138
+ if (Array.isArray(schema.enum) && !schema.enum.includes(manifest)) {
139
+ errors.push(`${targetPath} must be one of: ${schema.enum.join(", ")}`);
140
+ }
141
+ }
142
+ }
143
+
144
+ async function main() {
145
+ const errors = [];
146
+ validateManifest(exampleManifest, manifestSchema, "manifest", errors);
147
+ validateManifest(exampleSettlementManifest, manifestSchema, "settlement_manifest", errors);
148
+ validateManifest(exampleRegistrationRecord, registrationRecordSchema, "registration_record", errors);
149
+ validateManifest(exampleCertificationPack, certificationPackSchema, "certification_pack", errors);
150
+ validateManifest(exampleIdentityRegistrationRecord, registrationRecordSchema, "identity_registration_record", errors);
151
+ validateManifest(exampleIdentityCertificationPack, certificationPackSchema, "identity_certification_pack", errors);
152
+ validateManifest(exampleSettlementRegistrationRecord, registrationRecordSchema, "settlement_registration_record", errors);
153
+ validateManifest(exampleSettlementCertificationPack, certificationPackSchema, "settlement_certification_pack", errors);
154
+ validateManifest(exampleSubmissionBundle, submissionBundleSchema, "submission_bundle", errors);
155
+ validateManifest(minimalThirdPartyExecutionManifest, manifestSchema, "minimal_third_party_execution_manifest", errors);
156
+ validateManifest(langgraphReferenceManifest, manifestSchema, "langgraph_reference_manifest", errors);
157
+ validateManifest(langchainReferenceManifest, manifestSchema, "langchain_reference_manifest", errors);
158
+ validateManifest(minimalThirdPartyExecutionRegistrationRecord, registrationRecordSchema, "minimal_third_party_execution_registration_record", errors);
159
+ validateManifest(minimalThirdPartyExecutionCertificationPack, certificationPackSchema, "minimal_third_party_execution_certification_pack", errors);
160
+ validateManifest(minimalThirdPartyExecutionSubmissionBundle, submissionBundleSchema, "minimal_third_party_execution_submission_bundle", errors);
161
+ validateManifest(exampleIdentitySubmissionBundle, submissionBundleSchema, "identity_submission_bundle", errors);
162
+ validateManifest(exampleSettlementSubmissionBundle, submissionBundleSchema, "settlement_submission_bundle", errors);
163
+ assert.deepStrictEqual(errors, [], `adapter manifest validation failed:\n${errors.join("\n")}`);
164
+
165
+ assert.strictEqual(exampleManifest.adapter_class, "execution_adapter", "example adapter class mismatch");
166
+ assert.strictEqual(exampleManifest.proof_contract.emits_proof_compatible_facts, true, "example adapter proof contract mismatch");
167
+ assert.strictEqual(
168
+ exampleManifest.compatibility.commerce_contract,
169
+ "commerce-repo-final-contract/v1",
170
+ "example adapter commerce compatibility mismatch"
171
+ );
172
+ assert.strictEqual(
173
+ exampleManifest.compatibility.proof_contract,
174
+ "proof-repo-final-contract/v1",
175
+ "example adapter proof compatibility mismatch"
176
+ );
177
+ assert.strictEqual(
178
+ exampleManifest.registration_contract.integration_id,
179
+ exampleManifest.adapter_id,
180
+ "example adapter registration integration_id mismatch"
181
+ );
182
+ assert.strictEqual(
183
+ exampleManifest.registration_contract.integration_maturity,
184
+ "reference_example",
185
+ "example adapter registration maturity mismatch"
186
+ );
187
+ assert.strictEqual(
188
+ exampleManifest.certification_contract.certification_state,
189
+ "reference_example",
190
+ "example adapter certification state mismatch"
191
+ );
192
+ assert.strictEqual(
193
+ exampleManifest.failure_contract.retryable_categories.every((entry) => exampleManifest.failure_contract.categories.includes(entry)),
194
+ true,
195
+ "retryable categories must be declared in categories"
196
+ );
197
+ assert.strictEqual(exampleManifest.interface_version, ADAPTER_INTERFACE_VERSION, "example adapter interface version mismatch");
198
+ assert.strictEqual(exampleSettlementManifest.adapter_class, "settlement_adapter", "example settlement adapter class mismatch");
199
+ assert.strictEqual(exampleSettlementManifest.interface_version, ADAPTER_INTERFACE_VERSION, "example settlement adapter interface version mismatch");
200
+ assert.strictEqual(
201
+ exampleSettlementManifest.registration_contract.integration_id,
202
+ exampleSettlementManifest.adapter_id,
203
+ "example settlement adapter registration integration_id mismatch"
204
+ );
205
+ assert.strictEqual(
206
+ exampleSettlementManifest.certification_contract.certification_state,
207
+ "reference_example",
208
+ "example settlement adapter certification state mismatch"
209
+ );
210
+ assert.strictEqual(
211
+ exampleRegistrationRecord.adapter_class,
212
+ "agent_protocol_adapter",
213
+ "example registration record adapter class mismatch"
214
+ );
215
+ assert.strictEqual(
216
+ exampleRegistrationRecord.registration_state,
217
+ "staging_registered",
218
+ "example registration record state mismatch"
219
+ );
220
+ assert.strictEqual(
221
+ exampleRegistrationRecord.bundled,
222
+ false,
223
+ "example registration record bundled posture mismatch"
224
+ );
225
+ assert.strictEqual(
226
+ exampleRegistrationRecord.requires_explicit_selection,
227
+ true,
228
+ "example registration record explicit-selection posture mismatch"
229
+ );
230
+ assert.strictEqual(
231
+ exampleIdentityRegistrationRecord.adapter_class,
232
+ "identity_registry_adapter",
233
+ "example identity registration record adapter class mismatch"
234
+ );
235
+ assert.strictEqual(
236
+ exampleIdentityRegistrationRecord.registration_state,
237
+ "staging_registered",
238
+ "example identity registration record state mismatch"
239
+ );
240
+ assert.strictEqual(
241
+ exampleIdentityRegistrationRecord.requires_explicit_selection,
242
+ true,
243
+ "example identity registration record explicit-selection posture mismatch"
244
+ );
245
+ assert.strictEqual(
246
+ exampleSettlementRegistrationRecord.adapter_class,
247
+ "settlement_adapter",
248
+ "example settlement registration record adapter class mismatch"
249
+ );
250
+ assert.strictEqual(
251
+ exampleSettlementRegistrationRecord.registration_state,
252
+ "staging_registered",
253
+ "example settlement registration record state mismatch"
254
+ );
255
+ assert.strictEqual(
256
+ exampleSettlementRegistrationRecord.requires_explicit_selection,
257
+ true,
258
+ "example settlement registration record explicit-selection posture mismatch"
259
+ );
260
+ assert.strictEqual(
261
+ exampleCertificationPack.integration_id,
262
+ exampleRegistrationRecord.integration_id,
263
+ "example certification pack integration_id mismatch"
264
+ );
265
+ assert.strictEqual(
266
+ exampleCertificationPack.adapter_class,
267
+ exampleRegistrationRecord.adapter_class,
268
+ "example certification pack adapter class mismatch"
269
+ );
270
+ assert.strictEqual(
271
+ exampleIdentityCertificationPack.integration_id,
272
+ exampleIdentityRegistrationRecord.integration_id,
273
+ "example identity certification pack integration_id mismatch"
274
+ );
275
+ assert.strictEqual(
276
+ exampleIdentityCertificationPack.adapter_class,
277
+ exampleIdentityRegistrationRecord.adapter_class,
278
+ "example identity certification pack adapter class mismatch"
279
+ );
280
+ assert.strictEqual(
281
+ exampleSettlementCertificationPack.integration_id,
282
+ exampleSettlementRegistrationRecord.integration_id,
283
+ "example settlement certification pack integration_id mismatch"
284
+ );
285
+ assert.strictEqual(
286
+ exampleSettlementManifest.failure_contract.retryable_categories.every((entry) => exampleSettlementManifest.failure_contract.categories.includes(entry)),
287
+ true,
288
+ "settlement adapter retryable categories must be declared in categories"
289
+ );
290
+ assert.strictEqual(
291
+ validateIntegrationCertificationPack(exampleCertificationPack).ok,
292
+ true,
293
+ "example certification pack validation mismatch"
294
+ );
295
+ assert.strictEqual(
296
+ validateIntegrationCertificationPack(exampleIdentityCertificationPack).ok,
297
+ true,
298
+ "example identity certification pack validation mismatch"
299
+ );
300
+ assert.strictEqual(
301
+ validateIntegrationCertificationPack(exampleSettlementCertificationPack).ok,
302
+ true,
303
+ "example settlement certification pack validation mismatch"
304
+ );
305
+ assert.strictEqual(
306
+ validateIntegrationSubmission({
307
+ adapter_id: exampleRegistrationRecord.adapter_id,
308
+ adapter_class: exampleRegistrationRecord.adapter_class
309
+ }, exampleRegistrationRecord, exampleCertificationPack).ok,
310
+ true,
311
+ "third-party protocol submission validation mismatch"
312
+ );
313
+ assert.strictEqual(
314
+ validateIntegrationSubmission({
315
+ adapter_id: exampleIdentityRegistrationRecord.adapter_id,
316
+ adapter_class: exampleIdentityRegistrationRecord.adapter_class
317
+ }, exampleIdentityRegistrationRecord, exampleIdentityCertificationPack).ok,
318
+ true,
319
+ "third-party identity submission validation mismatch"
320
+ );
321
+ assert.strictEqual(
322
+ validateIntegrationSubmission({
323
+ adapter_id: exampleSettlementRegistrationRecord.adapter_id,
324
+ adapter_class: exampleSettlementRegistrationRecord.adapter_class
325
+ }, exampleSettlementRegistrationRecord, exampleSettlementCertificationPack).ok,
326
+ true,
327
+ "third-party settlement submission validation mismatch"
328
+ );
329
+ assert.strictEqual(
330
+ validateIntegrationSubmissionBundle(exampleSubmissionBundle).ok,
331
+ true,
332
+ "submission bundle validation mismatch"
333
+ );
334
+ assert.strictEqual(
335
+ validateIntegrationSubmissionBundle(exampleIdentitySubmissionBundle).ok,
336
+ true,
337
+ "identity submission bundle validation mismatch"
338
+ );
339
+ assert.strictEqual(
340
+ validateIntegrationSubmissionBundle(exampleSettlementSubmissionBundle).ok,
341
+ true,
342
+ "settlement submission bundle validation mismatch"
343
+ );
344
+ assert.strictEqual(
345
+ minimalThirdPartyExecutionManifest.adapter_class,
346
+ "execution_adapter",
347
+ "minimal third-party execution manifest adapter class mismatch"
348
+ );
349
+ assert.strictEqual(
350
+ minimalThirdPartyExecutionManifest.registration_contract.bundled,
351
+ false,
352
+ "minimal third-party execution bundled posture mismatch"
353
+ );
354
+ assert.strictEqual(langgraphReferenceManifest.adapter_class, "execution_adapter", "langgraph reference adapter class mismatch");
355
+ assert.strictEqual(langgraphReferenceManifest.registration_contract.bundled, true, "langgraph reference bundled posture mismatch");
356
+ assert.strictEqual(langgraphReferenceManifest.certification_contract.certification_state, "reference_example", "langgraph reference certification mismatch");
357
+ assert.strictEqual(langchainReferenceManifest.adapter_class, "execution_adapter", "langchain reference adapter class mismatch");
358
+ assert.strictEqual(langchainReferenceManifest.registration_contract.bundled, true, "langchain reference bundled posture mismatch");
359
+ assert.strictEqual(langchainReferenceManifest.certification_contract.certification_state, "reference_example", "langchain reference certification mismatch");
360
+ assert.strictEqual(
361
+ minimalThirdPartyExecutionRegistrationRecord.integration_id,
362
+ minimalThirdPartyExecutionManifest.adapter_id,
363
+ "minimal third-party execution registration integration_id mismatch"
364
+ );
365
+ assert.strictEqual(
366
+ minimalThirdPartyExecutionCertificationPack.integration_id,
367
+ minimalThirdPartyExecutionRegistrationRecord.integration_id,
368
+ "minimal third-party execution certification integration_id mismatch"
369
+ );
370
+ assert.strictEqual(
371
+ validateIntegrationCertificationPack(minimalThirdPartyExecutionCertificationPack).ok,
372
+ true,
373
+ "minimal third-party execution certification pack validation mismatch"
374
+ );
375
+ assert.strictEqual(
376
+ validateIntegrationSubmission(minimalThirdPartyExecutionManifest, minimalThirdPartyExecutionRegistrationRecord, minimalThirdPartyExecutionCertificationPack).ok,
377
+ true,
378
+ "minimal third-party execution submission validation mismatch"
379
+ );
380
+ assert.strictEqual(
381
+ validateIntegrationSubmissionBundle(minimalThirdPartyExecutionSubmissionBundle).ok,
382
+ true,
383
+ "minimal third-party execution submission bundle validation mismatch"
384
+ );
385
+ assert.strictEqual(
386
+ createIntegrationSubmissionBundle(minimalThirdPartyExecutionSubmissionBundle, {
387
+ source: "third_party_example",
388
+ protocols: [],
389
+ execution_backends: ["http"],
390
+ adapter_lanes: ["http"],
391
+ task_refs: ["task.execute", "task.preview"]
392
+ }).snapshot_entry.integration_id,
393
+ "partner.execution.minimal_echo",
394
+ "minimal third-party execution submission bundle normalization mismatch"
395
+ );
396
+ assert.strictEqual(
397
+ createIntegrationSubmissionBundle(exampleIdentitySubmissionBundle, {
398
+ source: "third_party_example",
399
+ protocols: [],
400
+ execution_backends: ["http", "chain"],
401
+ adapter_lanes: ["http", "chain"],
402
+ task_refs: ["registry.register", "trust.handoff.emit", "trust.handoff.validate"]
403
+ }).snapshot_entry.integration_id,
404
+ "partner.identity.attest_registry",
405
+ "identity submission bundle normalization mismatch"
406
+ );
407
+ assert.strictEqual(
408
+ createIntegrationSubmissionBundle(exampleSubmissionBundle, {
409
+ source: "third_party_example",
410
+ protocols: ["mcp"],
411
+ execution_backends: ["mcp"],
412
+ adapter_lanes: ["mcp"],
413
+ task_refs: ["adapter.mcp.invoke"]
414
+ }).snapshot_entry.integration_id,
415
+ "partner.protocol.acme_mcp",
416
+ "submission bundle normalization mismatch"
417
+ );
418
+
419
+ const implementationErrors = validateAdapterImplementation(exampleAdapter);
420
+ assert.deepStrictEqual(implementationErrors, [], `adapter implementation validation failed:\n${implementationErrors.join("\n")}`);
421
+ assert.deepStrictEqual(exampleAdapter.manifest, exampleManifest, "example adapter manifest/export mismatch");
422
+ const minimalImplementationErrors = validateAdapterImplementation(minimalThirdPartyExecutionAdapter);
423
+ assert.deepStrictEqual(minimalImplementationErrors, [], `minimal execution adapter implementation validation failed:\n${minimalImplementationErrors.join("\n")}`);
424
+ assert.deepStrictEqual(
425
+ minimalThirdPartyExecutionAdapter.manifest,
426
+ minimalThirdPartyExecutionManifest,
427
+ "minimal third-party execution adapter manifest/export mismatch"
428
+ );
429
+ const langgraphImplementationErrors = validateAdapterImplementation(langgraphReferenceAdapter);
430
+ assert.deepStrictEqual(langgraphImplementationErrors, [], `langgraph reference adapter implementation validation failed:\n${langgraphImplementationErrors.join("\n")}`);
431
+ assert.deepStrictEqual(langgraphReferenceAdapter.manifest, langgraphReferenceManifest, "langgraph reference adapter manifest/export mismatch");
432
+ const langchainImplementationErrors = validateAdapterImplementation(langchainReferenceAdapter);
433
+ assert.deepStrictEqual(langchainImplementationErrors, [], `langchain reference adapter implementation validation failed:\n${langchainImplementationErrors.join("\n")}`);
434
+ assert.deepStrictEqual(langchainReferenceAdapter.manifest, langchainReferenceManifest, "langchain reference adapter manifest/export mismatch");
435
+ const settlementImplementationErrors = validateAdapterImplementation(exampleSettlementAdapter);
436
+ assert.deepStrictEqual(
437
+ settlementImplementationErrors,
438
+ [],
439
+ `settlement adapter implementation validation failed:\n${settlementImplementationErrors.join("\n")}`
440
+ );
441
+ assert.deepStrictEqual(
442
+ exampleSettlementAdapter.manifest,
443
+ exampleSettlementManifest,
444
+ "example settlement adapter manifest/export mismatch"
445
+ );
446
+
447
+ const health = await exampleAdapter.getHealth();
448
+ assert.strictEqual(health.status, "ok", "example adapter health mismatch");
449
+ assert.strictEqual(health.adapter_id, exampleManifest.adapter_id, "example adapter health adapter_id mismatch");
450
+
451
+ const capabilities = exampleAdapter.describeCapabilities();
452
+ assert.deepStrictEqual(capabilities.capabilities, exampleManifest.capabilities, "example adapter capabilities mismatch");
453
+
454
+ const preview = await exampleAdapter.preview({
455
+ task_ref: "trust.verify",
456
+ body: { subject_id: "subject-1" }
457
+ });
458
+ assert.strictEqual(preview.accepted, true, "example adapter preview acceptance mismatch");
459
+ assert.strictEqual(preview.preview.task_ref, "trust.verify", "example adapter preview task_ref mismatch");
460
+
461
+ const minimalHealth = await minimalThirdPartyExecutionAdapter.getHealth();
462
+ assert.strictEqual(minimalHealth.status, "ok", "minimal execution adapter health mismatch");
463
+ assert.strictEqual(minimalHealth.adapter_id, minimalThirdPartyExecutionManifest.adapter_id, "minimal execution adapter health adapter_id mismatch");
464
+
465
+ const minimalPreview = await minimalThirdPartyExecutionAdapter.preview({
466
+ task_ref: "task.execute",
467
+ body: { subject_id: "subject-minimal-1" }
468
+ });
469
+ assert.strictEqual(minimalPreview.accepted, true, "minimal execution adapter preview acceptance mismatch");
470
+ assert.strictEqual(minimalPreview.preview.task_ref, "task.execute", "minimal execution adapter preview task_ref mismatch");
471
+
472
+ const minimalExecution = await minimalThirdPartyExecutionAdapter.execute({
473
+ task_ref: "task.execute",
474
+ body: { subject_id: "subject-minimal-1" }
475
+ });
476
+ assert.strictEqual(minimalExecution.status, "completed", "minimal execution adapter execute status mismatch");
477
+ assert.strictEqual(
478
+ minimalExecution.proof_facts.emits_proof_compatible_facts,
479
+ true,
480
+ "minimal execution adapter execute proof contract mismatch"
481
+ );
482
+
483
+ const langgraphHealth = await langgraphReferenceAdapter.getHealth();
484
+ assert.strictEqual(langgraphHealth.status, "ok", "langgraph reference health mismatch");
485
+ const langgraphExecution = await langgraphReferenceAdapter.execute({
486
+ task_ref: "framework.langgraph.execute",
487
+ body: {
488
+ graph_ref: "graph.demo",
489
+ node_ref: "summarize",
490
+ checkpoint_ref: "checkpoint.demo",
491
+ input: { text: "demo" }
492
+ }
493
+ });
494
+ assert.strictEqual(langgraphExecution.status, "completed", "langgraph reference execution status mismatch");
495
+ assert.strictEqual(langgraphExecution.result.framework, "langgraph", "langgraph reference framework mismatch");
496
+ assert.strictEqual(langgraphExecution.proof_facts.graph_ref, "graph.demo", "langgraph proof graph ref mismatch");
497
+
498
+ const langchainHealth = await langchainReferenceAdapter.getHealth();
499
+ assert.strictEqual(langchainHealth.status, "ok", "langchain reference health mismatch");
500
+ const langchainExecution = await langchainReferenceAdapter.execute({
501
+ task_ref: "framework.langchain.execute",
502
+ body: {
503
+ chain_ref: "chain.demo",
504
+ tool_trace_ref: "trace.demo",
505
+ context_ref: "context.demo",
506
+ input: { text: "demo" }
507
+ }
508
+ });
509
+ assert.strictEqual(langchainExecution.status, "completed", "langchain reference execution status mismatch");
510
+ assert.strictEqual(langchainExecution.result.framework, "langchain", "langchain reference framework mismatch");
511
+ assert.strictEqual(langchainExecution.proof_facts.chain_ref, "chain.demo", "langchain proof chain ref mismatch");
512
+
513
+ const execution = await exampleAdapter.execute({
514
+ task_ref: "trust.verify",
515
+ body: { subject_id: "subject-1" }
516
+ });
517
+ assert.strictEqual(execution.status, "completed", "example adapter execute status mismatch");
518
+ assert.strictEqual(
519
+ execution.proof_facts.emits_proof_compatible_facts,
520
+ true,
521
+ "example adapter execute proof contract mismatch"
522
+ );
523
+
524
+ const settlementHealth = await exampleSettlementAdapter.getHealth();
525
+ assert.strictEqual(settlementHealth.status, "ok", "example settlement adapter health mismatch");
526
+ assert.strictEqual(settlementHealth.adapter_id, exampleSettlementManifest.adapter_id, "example settlement adapter health adapter_id mismatch");
527
+
528
+ const settlementCapabilities = exampleSettlementAdapter.describeCapabilities();
529
+ assert.deepStrictEqual(
530
+ settlementCapabilities.capabilities,
531
+ exampleSettlementManifest.capabilities,
532
+ "example settlement adapter capabilities mismatch"
533
+ );
534
+
535
+ const settlementResult = await exampleSettlementAdapter.settle({
536
+ intent_id: "intent-demo"
537
+ });
538
+ assert.strictEqual(settlementResult.status, "submitted", "example settlement adapter settle status mismatch");
539
+ assert.strictEqual(
540
+ settlementResult.proof_facts.emits_proof_compatible_facts,
541
+ true,
542
+ "example settlement adapter proof contract mismatch"
543
+ );
544
+
545
+ const finality = await exampleSettlementAdapter.getFinality(settlementResult.settlement_ref);
546
+ assert.strictEqual(finality.finality_status, "confirmed", "example settlement adapter finality mismatch");
547
+
548
+ process.stdout.write("xytara verify:adapters passed\n");
549
+ }
550
+
551
+ main().catch((error) => {
552
+ console.error(error);
553
+ process.exitCode = 1;
554
+ });