@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,311 @@
1
+ "use strict";
2
+ /**
3
+ * PEAC Samples Loader
4
+ *
5
+ * Loads sample definitions from specs/conformance/samples/ when available,
6
+ * falling back to embedded defaults when running outside the repo.
7
+ *
8
+ * This ensures a single source of truth (specs folder is canonical).
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.findSamplesDir = findSamplesDir;
45
+ exports.getSamples = getSamples;
46
+ exports.getSampleById = getSampleById;
47
+ exports.listSampleIds = listSampleIds;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ /**
51
+ * Embedded fallback samples (used when specs folder not available)
52
+ */
53
+ const EMBEDDED_SAMPLES = [
54
+ {
55
+ id: 'basic-receipt',
56
+ name: 'Basic Receipt',
57
+ description: 'Minimal valid PEAC receipt with only required fields',
58
+ category: 'valid',
59
+ claims: {
60
+ iss: 'https://sandbox.peacprotocol.org',
61
+ aud: 'https://example.com',
62
+ iat: 0, // Placeholder - will be set at generation time
63
+ exp: 0, // Placeholder - will be set at generation time
64
+ rid: 'sample-basic-001',
65
+ },
66
+ },
67
+ {
68
+ id: 'full-receipt',
69
+ name: 'Full Receipt',
70
+ description: 'PEAC receipt with all optional claims populated',
71
+ category: 'valid',
72
+ claims: {
73
+ iss: 'https://sandbox.peacprotocol.org',
74
+ aud: 'https://api.example.com',
75
+ sub: 'user:demo-user',
76
+ iat: 0,
77
+ exp: 0,
78
+ rid: 'sample-full-001',
79
+ purpose_declared: ['search', 'index'],
80
+ purpose_enforced: 'search',
81
+ purpose_reason: 'allowed',
82
+ },
83
+ },
84
+ {
85
+ id: 'interaction-evidence',
86
+ name: 'Interaction Evidence',
87
+ description: 'Receipt with InteractionEvidence extension for AI agent calls',
88
+ category: 'valid',
89
+ claims: {
90
+ iss: 'https://sandbox.peacprotocol.org',
91
+ aud: 'https://agent.example.com',
92
+ sub: 'agent:demo-agent-v1',
93
+ iat: 0,
94
+ exp: 0,
95
+ rid: 'sample-ie-001',
96
+ ext: {
97
+ 'org.peacprotocol/interaction@0.1': {
98
+ version: '0.1',
99
+ interaction_id: 'int_sample_001',
100
+ started_at: '2026-01-01T00:00:00.000Z',
101
+ completed_at: '2026-01-01T00:00:01.000Z',
102
+ outcome: { kind: 'success' },
103
+ input: { hash: 'sha256:abc123...', byte_length: 1024 },
104
+ output: { hash: 'sha256:def456...', byte_length: 2048 },
105
+ },
106
+ },
107
+ },
108
+ },
109
+ {
110
+ id: 'payment-evidence',
111
+ name: 'Payment Evidence',
112
+ description: 'Receipt with payment evidence (402 flow)',
113
+ category: 'valid',
114
+ claims: {
115
+ iss: 'https://sandbox.peacprotocol.org',
116
+ aud: 'https://api.example.com',
117
+ iat: 0,
118
+ exp: 0,
119
+ rid: 'sample-payment-001',
120
+ amt: '100',
121
+ cur: 'USD',
122
+ payment: {
123
+ rail: 'x402',
124
+ reference: 'pay_sample_001',
125
+ amount: '100',
126
+ currency: 'USD',
127
+ },
128
+ },
129
+ },
130
+ {
131
+ id: 'long-expiry',
132
+ name: 'Long Expiry',
133
+ description: 'Receipt with 24-hour expiration',
134
+ category: 'valid',
135
+ claims: {
136
+ iss: 'https://sandbox.peacprotocol.org',
137
+ aud: 'https://example.com',
138
+ iat: 0,
139
+ exp: 0, // Will be set to iat + 86400 at generation time
140
+ rid: 'sample-long-expiry-001',
141
+ },
142
+ },
143
+ {
144
+ id: 'expired',
145
+ name: 'Expired Receipt',
146
+ description: 'Receipt that has already expired (for testing rejection)',
147
+ category: 'invalid',
148
+ claims: {
149
+ iss: 'https://sandbox.peacprotocol.org',
150
+ aud: 'https://example.com',
151
+ iat: 0, // Will be set to now - 7200 at generation time
152
+ exp: 0, // Will be set to now - 3600 at generation time
153
+ rid: 'sample-expired-001',
154
+ },
155
+ expectedError: 'E_EXPIRED_RECEIPT',
156
+ },
157
+ {
158
+ id: 'future-iat',
159
+ name: 'Future IAT',
160
+ description: 'Receipt with iat in the future (should be rejected)',
161
+ category: 'invalid',
162
+ claims: {
163
+ iss: 'https://sandbox.peacprotocol.org',
164
+ aud: 'https://example.com',
165
+ iat: 0, // Will be set to now + 3600 at generation time
166
+ exp: 0, // Will be set to now + 7200 at generation time
167
+ rid: 'sample-future-iat-001',
168
+ },
169
+ expectedError: 'E_FUTURE_IAT',
170
+ },
171
+ {
172
+ id: 'missing-iss',
173
+ name: 'Missing Issuer',
174
+ description: 'Receipt missing required iss claim (for testing validation)',
175
+ category: 'invalid',
176
+ claims: {
177
+ aud: 'https://example.com',
178
+ iat: 0,
179
+ exp: 0,
180
+ rid: 'sample-no-iss-001',
181
+ },
182
+ expectedError: 'E_MISSING_CLAIM',
183
+ },
184
+ ];
185
+ /**
186
+ * Find samples directory
187
+ */
188
+ function findSamplesDir(customPath) {
189
+ // Use custom path if provided
190
+ if (customPath) {
191
+ if (fs.existsSync(customPath)) {
192
+ return customPath;
193
+ }
194
+ return null;
195
+ }
196
+ // Try relative to CLI package
197
+ const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');
198
+ if (fs.existsSync(cliPath)) {
199
+ return cliPath;
200
+ }
201
+ // Try relative to repo root
202
+ const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');
203
+ if (fs.existsSync(repoPath)) {
204
+ return repoPath;
205
+ }
206
+ // Try one level up
207
+ const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');
208
+ if (fs.existsSync(upPath)) {
209
+ return upPath;
210
+ }
211
+ return null;
212
+ }
213
+ /**
214
+ * Load sample definition from a JSON file
215
+ */
216
+ function loadSampleFromFile(filePath, id, category) {
217
+ try {
218
+ const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));
219
+ // Handle both formats: fixture-style (header/payload) and claims-only
220
+ const claims = content.payload ?? content.claims ?? content;
221
+ const description = content.$comment ?? content.description ?? `Sample ${id}`;
222
+ return {
223
+ id,
224
+ name: id
225
+ .split('-')
226
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
227
+ .join(' '),
228
+ description,
229
+ category,
230
+ claims,
231
+ header: content.header,
232
+ expectedError: content.expected_error,
233
+ };
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ }
239
+ /**
240
+ * Load samples from specs directory
241
+ */
242
+ function loadSamplesFromDir(samplesDir) {
243
+ const samples = [];
244
+ // Load from valid/ directory
245
+ const validDir = path.join(samplesDir, 'valid');
246
+ if (fs.existsSync(validDir)) {
247
+ const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));
248
+ for (const file of files) {
249
+ const id = file.replace('.json', '');
250
+ const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');
251
+ if (sample)
252
+ samples.push(sample);
253
+ }
254
+ }
255
+ // Load from invalid/ directory
256
+ const invalidDir = path.join(samplesDir, 'invalid');
257
+ if (fs.existsSync(invalidDir)) {
258
+ const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));
259
+ for (const file of files) {
260
+ const id = file.replace('.json', '');
261
+ const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');
262
+ if (sample)
263
+ samples.push(sample);
264
+ }
265
+ }
266
+ // Load from edge/ directory if present
267
+ const edgeDir = path.join(samplesDir, 'edge');
268
+ if (fs.existsSync(edgeDir)) {
269
+ const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));
270
+ for (const file of files) {
271
+ const id = file.replace('.json', '');
272
+ const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');
273
+ if (sample)
274
+ samples.push(sample);
275
+ }
276
+ }
277
+ return samples;
278
+ }
279
+ /**
280
+ * Get sample definitions
281
+ *
282
+ * Loads from specs/conformance/samples/ when available (canonical source),
283
+ * falls back to embedded samples when running outside the repo.
284
+ */
285
+ function getSamples(customSamplesPath) {
286
+ const samplesDir = findSamplesDir(customSamplesPath);
287
+ if (samplesDir) {
288
+ const dirSamples = loadSamplesFromDir(samplesDir);
289
+ if (dirSamples.length > 0) {
290
+ return dirSamples;
291
+ }
292
+ }
293
+ // Fall back to embedded samples
294
+ return EMBEDDED_SAMPLES;
295
+ }
296
+ /**
297
+ * Get a specific sample by ID
298
+ */
299
+ function getSampleById(id, customSamplesPath) {
300
+ const samples = getSamples(customSamplesPath);
301
+ return samples.find((s) => s.id === id) ?? null;
302
+ }
303
+ /**
304
+ * List available sample IDs by category
305
+ */
306
+ function listSampleIds(category, customSamplesPath) {
307
+ const samples = getSamples(customSamplesPath);
308
+ const filtered = category ? samples.filter((s) => s.category === category) : samples;
309
+ return filtered.map((s) => s.id);
310
+ }
311
+ //# sourceMappingURL=samples-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samples-loader.js","sourceRoot":"","sources":["../../src/lib/samples-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * CLI Version Utility
3
+ *
4
+ * Reads version from package.json at runtime to avoid hardcoding.
5
+ */
6
+ /**
7
+ * Get CLI version from package.json
8
+ *
9
+ * Uses multiple strategies to find package.json:
10
+ * 1. __dirname relative path (for CJS)
11
+ * 2. Process.cwd() fallback
12
+ */
13
+ export declare function getVersion(): string;
14
+ /**
15
+ * Get runtime string (e.g., "node-22.0.0")
16
+ */
17
+ export declare function getRuntime(): string;
18
+ /**
19
+ * Get git commit hash if available
20
+ */
21
+ export declare function getCommit(): string | undefined;
22
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAyBnC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAG9C"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Version Utility
4
+ *
5
+ * Reads version from package.json at runtime to avoid hardcoding.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getVersion = getVersion;
9
+ exports.getRuntime = getRuntime;
10
+ exports.getCommit = getCommit;
11
+ const node_path_1 = require("node:path");
12
+ const node_fs_1 = require("node:fs");
13
+ /**
14
+ * Get CLI version from package.json
15
+ *
16
+ * Uses multiple strategies to find package.json:
17
+ * 1. __dirname relative path (for CJS)
18
+ * 2. Process.cwd() fallback
19
+ */
20
+ function getVersion() {
21
+ // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)
22
+ try {
23
+ const pkgPath = (0, node_path_1.join)(__dirname, '..', '..', 'package.json');
24
+ if ((0, node_fs_1.existsSync)(pkgPath)) {
25
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
26
+ if (pkg.version)
27
+ return pkg.version;
28
+ }
29
+ }
30
+ catch {
31
+ // Continue to next strategy
32
+ }
33
+ // Strategy 2: Try from CWD (running in monorepo)
34
+ try {
35
+ const pkgPath = (0, node_path_1.join)(process.cwd(), 'packages', 'cli', 'package.json');
36
+ if ((0, node_fs_1.existsSync)(pkgPath)) {
37
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
38
+ if (pkg.version)
39
+ return pkg.version;
40
+ }
41
+ }
42
+ catch {
43
+ // Continue to fallback
44
+ }
45
+ // Strategy 3: Fallback version (should rarely happen)
46
+ return '0.0.0-unknown';
47
+ }
48
+ /**
49
+ * Get runtime string (e.g., "node-22.0.0")
50
+ */
51
+ function getRuntime() {
52
+ return `node-${process.version.slice(1)}`;
53
+ }
54
+ /**
55
+ * Get git commit hash if available
56
+ */
57
+ function getCommit() {
58
+ // Could be enhanced to read from .git or environment variable
59
+ return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;
60
+ }
61
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAYH,gCAyBC;AAKD,gCAEC;AAKD,8BAGC;AAlDD,yCAAiC;AACjC,qCAAmD;AAEnD;;;;;;GAMG;AACH,SAAgB,UAAU;IACxB,qFAAqF;IACrF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,sDAAsD;IACtD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,8DAA8D;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peac/cli",
3
- "version": "0.10.0",
3
+ "version": "0.10.9",
4
4
  "description": "PEAC protocol command-line tools",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -22,18 +22,27 @@
22
22
  "dist",
23
23
  "README.md"
24
24
  ],
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js",
29
+ "require": "./dist/index.js",
30
+ "default": "./dist/index.js"
31
+ }
32
+ },
25
33
  "publishConfig": {
26
- "access": "public"
34
+ "access": "public",
35
+ "provenance": true
27
36
  },
28
37
  "dependencies": {
29
38
  "chalk": "^4.1.2",
30
39
  "commander": "^11.0.0",
31
- "@peac/crypto": "0.10.0",
32
- "@peac/protocol": "0.10.0",
33
- "@peac/schema": "0.10.0",
34
- "@peac/policy-kit": "0.10.0",
35
- "@peac/audit": "0.10.0",
36
- "@peac/disc": "0.10.0"
40
+ "@peac/audit": "0.10.9",
41
+ "@peac/protocol": "0.10.9",
42
+ "@peac/disc": "0.10.9",
43
+ "@peac/schema": "0.10.9",
44
+ "@peac/crypto": "0.10.9",
45
+ "@peac/policy-kit": "0.10.9"
37
46
  },
38
47
  "devDependencies": {
39
48
  "@types/node": "^20.10.0",