@peac/cli 0.10.0 → 0.10.9

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 (52) hide show
  1. package/README.md +78 -5
  2. package/dist/commands/conformance.d.ts +16 -0
  3. package/dist/commands/conformance.d.ts.map +1 -0
  4. package/dist/commands/conformance.js +301 -0
  5. package/dist/commands/conformance.js.map +1 -0
  6. package/dist/commands/samples.d.ts +17 -0
  7. package/dist/commands/samples.d.ts.map +1 -0
  8. package/dist/commands/samples.js +360 -0
  9. package/dist/commands/samples.js.map +1 -0
  10. package/dist/commands/workflow.d.ts +11 -0
  11. package/dist/commands/workflow.d.ts.map +1 -0
  12. package/dist/commands/workflow.js +214 -0
  13. package/dist/commands/workflow.js.map +1 -0
  14. package/dist/index.js +34 -11
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/conformance/digest.d.ts +64 -0
  17. package/dist/lib/conformance/digest.d.ts.map +1 -0
  18. package/dist/lib/conformance/digest.js +202 -0
  19. package/dist/lib/conformance/digest.js.map +1 -0
  20. package/dist/lib/conformance/index.d.ts +11 -0
  21. package/dist/lib/conformance/index.d.ts.map +1 -0
  22. package/dist/lib/conformance/index.js +30 -0
  23. package/dist/lib/conformance/index.js.map +1 -0
  24. package/dist/lib/conformance/manifest.d.ts +15 -0
  25. package/dist/lib/conformance/manifest.d.ts.map +1 -0
  26. package/dist/lib/conformance/manifest.js +66 -0
  27. package/dist/lib/conformance/manifest.js.map +1 -0
  28. package/dist/lib/conformance/profiles.d.ts +33 -0
  29. package/dist/lib/conformance/profiles.d.ts.map +1 -0
  30. package/dist/lib/conformance/profiles.js +138 -0
  31. package/dist/lib/conformance/profiles.js.map +1 -0
  32. package/dist/lib/conformance/types.d.ts +186 -0
  33. package/dist/lib/conformance/types.d.ts.map +1 -0
  34. package/dist/lib/conformance/types.js +8 -0
  35. package/dist/lib/conformance/types.js.map +1 -0
  36. package/dist/lib/conformance/validators.d.ts +27 -0
  37. package/dist/lib/conformance/validators.d.ts.map +1 -0
  38. package/dist/lib/conformance/validators.js +415 -0
  39. package/dist/lib/conformance/validators.js.map +1 -0
  40. package/dist/lib/conformance-runner.d.ts +29 -0
  41. package/dist/lib/conformance-runner.d.ts.map +1 -0
  42. package/dist/lib/conformance-runner.js +433 -0
  43. package/dist/lib/conformance-runner.js.map +1 -0
  44. package/dist/lib/samples-loader.d.ts +44 -0
  45. package/dist/lib/samples-loader.d.ts.map +1 -0
  46. package/dist/lib/samples-loader.js +311 -0
  47. package/dist/lib/samples-loader.js.map +1 -0
  48. package/dist/lib/version.d.ts +22 -0
  49. package/dist/lib/version.d.ts.map +1 -0
  50. package/dist/lib/version.js +61 -0
  51. package/dist/lib/version.js.map +1 -0
  52. package/package.json +17 -8
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ /**
3
+ * Conformance Category Validators
4
+ *
5
+ * Category-aware validation using the same validators as tests/conformance/*.spec.ts.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.CATEGORY_VALIDATORS = void 0;
9
+ exports.validateReceiptPayload = validateReceiptPayload;
10
+ exports.validateParseReceiptClaims = validateParseReceiptClaims;
11
+ exports.getValidator = getValidator;
12
+ const schema_1 = require("@peac/schema");
13
+ const disc_1 = require("@peac/disc");
14
+ const digest_js_1 = require("./digest.js");
15
+ /**
16
+ * Map Zod issue code to manifest keyword
17
+ */
18
+ function zodCodeToKeyword(code) {
19
+ const mapping = {
20
+ invalid_type: 'type',
21
+ invalid_literal: 'const',
22
+ unrecognized_keys: 'additionalProperties',
23
+ invalid_union: 'anyOf',
24
+ invalid_enum_value: 'enum',
25
+ invalid_string: 'format',
26
+ too_small: 'minLength',
27
+ too_big: 'maxLength',
28
+ custom: 'custom',
29
+ };
30
+ return mapping[code] ?? code;
31
+ }
32
+ /**
33
+ * Validate receipt claims using Zod schema
34
+ */
35
+ function validateReceiptPayload(payload) {
36
+ const result = schema_1.ReceiptClaimsSchema.safeParse(payload);
37
+ if (result.success) {
38
+ return { valid: true };
39
+ }
40
+ const firstIssue = result.error.issues[0];
41
+ const zodPath = firstIssue?.path ?? [];
42
+ const errorPath = (0, digest_js_1.zodPathToJsonPointer)(zodPath);
43
+ const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');
44
+ // Map paths to canonical error codes
45
+ let errorCode = 'E_INVALID_FORMAT';
46
+ const pathStr = zodPath.join('.');
47
+ if (pathStr === 'iss' || pathStr.startsWith('iss.'))
48
+ errorCode = 'E_INVALID_ISSUER';
49
+ else if (pathStr === 'aud' || pathStr.startsWith('aud.'))
50
+ errorCode = 'E_INVALID_AUDIENCE';
51
+ else if (pathStr === 'iat')
52
+ errorCode = 'E_INVALID_IAT';
53
+ else if (pathStr === 'exp')
54
+ errorCode = 'E_INVALID_EXP';
55
+ else if (pathStr === 'rid')
56
+ errorCode = 'E_INVALID_RID';
57
+ else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {
58
+ // For required fields, Zod reports invalid_type when field is undefined
59
+ errorCode = 'E_REQUIRED';
60
+ }
61
+ return {
62
+ valid: false,
63
+ error_code: errorCode,
64
+ error_message: firstIssue?.message ?? 'Unknown validation error',
65
+ error_path: errorPath,
66
+ error_keyword: errorKeyword,
67
+ };
68
+ }
69
+ /**
70
+ * Validate receipt claims using unified parser (parse-level error codes).
71
+ *
72
+ * Separate from validateReceiptPayload which returns path-level codes.
73
+ * Use this for the `parse` conformance category where fixtures assert
74
+ * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).
75
+ */
76
+ function validateParseReceiptClaims(payload) {
77
+ const pr = (0, schema_1.parseReceiptClaims)(payload);
78
+ if (pr.ok) {
79
+ return { valid: true };
80
+ }
81
+ return {
82
+ valid: false,
83
+ error_code: pr.error.code,
84
+ error_message: pr.error.message,
85
+ };
86
+ }
87
+ /**
88
+ * Validate discovery document (peac.txt or peac-issuer.json)
89
+ */
90
+ function validateDiscoveryInput(input) {
91
+ if (typeof input === 'string') {
92
+ // Parse as peac.txt format
93
+ const result = (0, disc_1.parse)(input);
94
+ if (result.valid) {
95
+ return { valid: true };
96
+ }
97
+ return {
98
+ valid: false,
99
+ error_code: 'E_DISCOVERY_PARSE_ERROR',
100
+ error_message: result.errors?.join('; ') ?? 'Discovery parse error',
101
+ };
102
+ }
103
+ // JSON format - validate structure
104
+ if (typeof input === 'object' && input !== null) {
105
+ const obj = input;
106
+ if (!obj.issuer || typeof obj.issuer !== 'string') {
107
+ return {
108
+ valid: false,
109
+ error_code: 'E_MISSING_ISSUER',
110
+ error_message: 'Discovery document missing required issuer field',
111
+ };
112
+ }
113
+ if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {
114
+ return {
115
+ valid: false,
116
+ error_code: 'E_MISSING_JWKS_URI',
117
+ error_message: 'Discovery document missing required jwks_uri field',
118
+ };
119
+ }
120
+ return { valid: true };
121
+ }
122
+ return {
123
+ valid: false,
124
+ error_code: 'E_INVALID_DISCOVERY',
125
+ error_message: 'Discovery input must be string or object',
126
+ };
127
+ }
128
+ /**
129
+ * Validate agent identity attestation
130
+ */
131
+ function validateAgentIdentityInput(input) {
132
+ const result = (0, schema_1.validateAgentIdentityAttestation)(input);
133
+ if (result.ok) {
134
+ return { valid: true };
135
+ }
136
+ return {
137
+ valid: false,
138
+ error_code: 'E_INVALID_AGENT_IDENTITY',
139
+ error_message: result.error,
140
+ };
141
+ }
142
+ /**
143
+ * Validate attribution attestation
144
+ */
145
+ function validateAttributionInput(input) {
146
+ const result = (0, schema_1.validateAttributionAttestation)(input);
147
+ if (result.ok) {
148
+ return { valid: true };
149
+ }
150
+ return {
151
+ valid: false,
152
+ error_code: 'E_INVALID_ATTRIBUTION',
153
+ error_message: result.error,
154
+ };
155
+ }
156
+ /**
157
+ * Validate dispute attestation
158
+ */
159
+ function validateDisputeInput(input) {
160
+ const result = (0, schema_1.validateDisputeAttestation)(input);
161
+ if (result.ok) {
162
+ return { valid: true };
163
+ }
164
+ return {
165
+ valid: false,
166
+ error_code: 'E_INVALID_DISPUTE',
167
+ error_message: result.error,
168
+ };
169
+ }
170
+ /**
171
+ * Validate interaction evidence
172
+ */
173
+ function validateInteractionInput(input) {
174
+ const result = (0, schema_1.validateInteractionOrdered)(input);
175
+ if (result.valid) {
176
+ return {
177
+ valid: true,
178
+ warnings: result.warnings.map((w) => w.message),
179
+ };
180
+ }
181
+ // InteractionValidationResult has errors array when invalid
182
+ const firstError = result.errors[0];
183
+ return {
184
+ valid: false,
185
+ error_code: firstError?.code ?? 'E_INVALID_INTERACTION',
186
+ error_message: firstError?.message ?? 'Interaction validation failed',
187
+ };
188
+ }
189
+ /**
190
+ * Validate workflow context
191
+ */
192
+ function validateWorkflowInput(input) {
193
+ const result = (0, schema_1.validateWorkflowContextOrdered)(input);
194
+ if (result.valid) {
195
+ return { valid: true };
196
+ }
197
+ // WorkflowValidationResult has error_code and error when invalid
198
+ return {
199
+ valid: false,
200
+ error_code: result.error_code,
201
+ error_message: result.error,
202
+ };
203
+ }
204
+ /**
205
+ * Validate obligations extension
206
+ */
207
+ function validateObligationsInput(input) {
208
+ const result = (0, schema_1.validateObligationsExtension)(input);
209
+ if (result.ok) {
210
+ return { valid: true };
211
+ }
212
+ return {
213
+ valid: false,
214
+ error_code: 'E_INVALID_OBLIGATIONS',
215
+ error_message: result.error,
216
+ };
217
+ }
218
+ /**
219
+ * Validate purpose tokens
220
+ */
221
+ function validatePurposeInput(input) {
222
+ if (typeof input === 'object' && input !== null) {
223
+ const obj = input;
224
+ // Check purpose_declared array
225
+ if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {
226
+ for (const p of obj.purpose_declared) {
227
+ if (typeof p === 'string' && !(0, schema_1.isValidPurposeToken)(p) && !(0, schema_1.isCanonicalPurpose)(p)) {
228
+ return {
229
+ valid: false,
230
+ error_code: 'E_INVALID_PURPOSE_TOKEN',
231
+ error_message: `Invalid purpose token: ${p}`,
232
+ };
233
+ }
234
+ }
235
+ }
236
+ // Check purpose_enforced
237
+ if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {
238
+ if (!(0, schema_1.isValidPurposeToken)(obj.purpose_enforced) && !(0, schema_1.isCanonicalPurpose)(obj.purpose_enforced)) {
239
+ return {
240
+ valid: false,
241
+ error_code: 'E_INVALID_PURPOSE_ENFORCED',
242
+ error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,
243
+ };
244
+ }
245
+ }
246
+ return { valid: true };
247
+ }
248
+ return {
249
+ valid: false,
250
+ error_code: 'E_INVALID_PURPOSE',
251
+ error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',
252
+ };
253
+ }
254
+ /**
255
+ * Validate bundle (basic structure check - full verification requires async)
256
+ */
257
+ function validateBundleInput(input) {
258
+ if (typeof input !== 'object' || input === null) {
259
+ return {
260
+ valid: false,
261
+ error_code: 'E_INVALID_BUNDLE',
262
+ error_message: 'Bundle must be an object',
263
+ };
264
+ }
265
+ const obj = input;
266
+ // Check required bundle fields
267
+ if (!obj.version || typeof obj.version !== 'string') {
268
+ return {
269
+ valid: false,
270
+ error_code: 'E_MISSING_VERSION',
271
+ error_message: 'Bundle missing required version field',
272
+ };
273
+ }
274
+ // Check for entries or receipts array
275
+ if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {
276
+ return {
277
+ valid: false,
278
+ error_code: 'E_MISSING_ENTRIES',
279
+ error_message: 'Bundle missing entries or receipts array',
280
+ };
281
+ }
282
+ return { valid: true };
283
+ }
284
+ /**
285
+ * Validate x402 offer/payment structures
286
+ */
287
+ function validateX402Input(input) {
288
+ if (typeof input !== 'object' || input === null) {
289
+ return {
290
+ valid: false,
291
+ error_code: 'E_INVALID_X402',
292
+ error_message: 'x402 input must be an object',
293
+ };
294
+ }
295
+ const obj = input;
296
+ // Check for x402 payment required structure
297
+ if (obj.accepts && Array.isArray(obj.accepts)) {
298
+ // Validate accepts array contains payment options
299
+ for (const accept of obj.accepts) {
300
+ if (typeof accept !== 'object' || accept === null) {
301
+ return {
302
+ valid: false,
303
+ error_code: 'E_INVALID_ACCEPTS',
304
+ error_message: 'x402 accepts must contain payment option objects',
305
+ };
306
+ }
307
+ }
308
+ return { valid: true };
309
+ }
310
+ // Check for x402 payment evidence structure
311
+ if (obj.rail && obj.reference) {
312
+ return { valid: true };
313
+ }
314
+ return {
315
+ valid: false,
316
+ error_code: 'E_INVALID_X402_STRUCTURE',
317
+ error_message: 'x402 input missing required fields (accepts or rail+reference)',
318
+ };
319
+ }
320
+ /**
321
+ * Validate policy-related input
322
+ */
323
+ function validatePolicyInput(input) {
324
+ if (typeof input !== 'object' || input === null) {
325
+ return {
326
+ valid: false,
327
+ error_code: 'E_INVALID_POLICY',
328
+ error_message: 'Policy input must be an object',
329
+ };
330
+ }
331
+ // Basic structure validation for policy
332
+ return { valid: true };
333
+ }
334
+ /**
335
+ * Validate issue-related input (receipt issuance)
336
+ */
337
+ function validateIssueInput(input) {
338
+ // Issue fixtures are typically receipt structures for issuance testing
339
+ if (typeof input === 'object' && input !== null) {
340
+ const obj = input;
341
+ // If it has claims, validate them
342
+ if (obj.claims) {
343
+ return validateReceiptPayload(obj.claims);
344
+ }
345
+ // If it has payload, validate it
346
+ if (obj.payload) {
347
+ return validateReceiptPayload(obj.payload);
348
+ }
349
+ }
350
+ return { valid: true };
351
+ }
352
+ /**
353
+ * Category validator registry
354
+ */
355
+ exports.CATEGORY_VALIDATORS = {
356
+ // Receipt claim validation
357
+ valid: (input) => {
358
+ const obj = input;
359
+ return validateReceiptPayload(obj.payload ?? obj.claims ?? input);
360
+ },
361
+ invalid: (input) => {
362
+ const obj = input;
363
+ return validateReceiptPayload(obj.payload ?? obj.claims ?? input);
364
+ },
365
+ edge: (input) => {
366
+ const obj = input;
367
+ return validateReceiptPayload(obj.payload ?? obj.claims ?? input);
368
+ },
369
+ // Parse-level validation (unified parser, parse-level error codes).
370
+ // The claims/payload ambiguity guard lives in the runner (test-harness concern).
371
+ parse: (input) => {
372
+ const obj = input;
373
+ return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);
374
+ },
375
+ // Category-specific validators
376
+ 'agent-identity': validateAgentIdentityInput,
377
+ attribution: validateAttributionInput,
378
+ bundle: validateBundleInput,
379
+ discovery: validateDiscoveryInput,
380
+ dispute: validateDisputeInput,
381
+ interaction: validateInteractionInput,
382
+ issue: validateIssueInput,
383
+ obligations: validateObligationsInput,
384
+ policy: validatePolicyInput,
385
+ purpose: validatePurposeInput,
386
+ verifier: (input) => {
387
+ const obj = input;
388
+ return validateReceiptPayload(obj.payload ?? obj.claims ?? input);
389
+ },
390
+ workflow: validateWorkflowInput,
391
+ x402: validateX402Input,
392
+ };
393
+ /**
394
+ * Get validator for a category
395
+ */
396
+ function getValidator(category) {
397
+ return (exports.CATEGORY_VALIDATORS[category] ??
398
+ ((input) => {
399
+ // Default: validate as receipt payload
400
+ // Input may be the raw fixture (with payload/claims wrapper) or the payload directly
401
+ if (typeof input === 'object' && input !== null) {
402
+ const obj = input;
403
+ // Check for wrapped payload/claims first
404
+ if (obj.payload || obj.claims) {
405
+ return validateReceiptPayload(obj.payload ?? obj.claims);
406
+ }
407
+ // Otherwise, if it looks like receipt claims (has standard fields), validate directly
408
+ if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {
409
+ return validateReceiptPayload(input);
410
+ }
411
+ }
412
+ return { valid: true };
413
+ }));
414
+ }
415
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/lib/conformance/validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * PEAC Conformance Runner Library
3
+ *
4
+ * Category-aware validation using the same validators as tests/conformance/*.spec.ts:
5
+ * - Receipt validation via @peac/schema (ReceiptClaimsSchema)
6
+ * - Discovery validation via @peac/disc (parse, validate)
7
+ * - Bundle verification via @peac/audit (verifyBundleIntegrity)
8
+ * - Attestation validation via @peac/schema validators
9
+ * - Interaction/Workflow validation via ordered validators
10
+ *
11
+ * This is the CLI's thin wrapper around the conformance suite.
12
+ */
13
+ export type { ConformanceLevel, TestStatus, TestDiagnostics, TestResult, ProfileLevel, ProfileDetail, ConformanceReport, RunnerOptions, RunnerCallbacks, FixturePack, SingleFixture, } from './conformance/types.js';
14
+ export { zodPathToJsonPointer } from './conformance/digest.js';
15
+ import type { ConformanceReport, RunnerOptions, RunnerCallbacks } from './conformance/types.js';
16
+ /**
17
+ * Run conformance tests and generate report
18
+ * Pure function - no console output, uses callbacks for progress
19
+ */
20
+ export declare function runConformance(options: RunnerOptions, callbacks?: RunnerCallbacks): ConformanceReport;
21
+ /**
22
+ * Format report as text
23
+ */
24
+ export declare function formatReportText(report: ConformanceReport): string;
25
+ /**
26
+ * Format report as markdown
27
+ */
28
+ export declare function formatReportMarkdown(report: ConformanceReport): string;
29
+ //# sourceMappingURL=conformance-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance-runner.d.ts","sourceRoot":"","sources":["../../src/lib/conformance-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EAMhB,MAAM,wBAAwB,CAAC;AAmBhC;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,eAAe,GAC1B,iBAAiB,CA8TnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAmClE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAwCtE"}