@catp-protocol/cli 0.2.2 → 0.4.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.
package/dist/cli.js CHANGED
@@ -6,10 +6,11 @@ import { runPostHook } from "./hook/post.js";
6
6
  import { formatSupportedRuntimeAdapters, getRuntimeAdapter, supportedRuntimeAdapters } from "./adapters/index.js";
7
7
  import { cmdInit } from "./commands/init.js";
8
8
  import { cmdValidate } from "./commands/validate.js";
9
- import { cmdLogShow, cmdLogVerify } from "./commands/log.js";
9
+ import { cmdLogExport, cmdLogShow, cmdLogVerify } from "./commands/log.js";
10
10
  import { cmdAnchor } from "./commands/anchor.js";
11
11
  import { cmdWitness } from "./commands/witness.js";
12
12
  import { cmdProveAuthorization, cmdVerifyAuthorization } from "./commands/authorization.js";
13
+ import { cmdReceiptIssue, cmdReceiptKeygen, cmdReceiptSign, cmdReceiptVerify } from "./commands/receipt.js";
13
14
  const require = createRequire(import.meta.url);
14
15
  const { version } = require("../package.json");
15
16
  const program = new Command();
@@ -62,12 +63,26 @@ log
62
63
  .description("Display recent audit log entries")
63
64
  .option("-n, --lines <n>", "number of lines to show", "50")
64
65
  .option("--agent <id>", "agent id (default: from policy file)")
66
+ .option("--commitments", "show full audit entry commitments")
67
+ .option("--json", "write recent audit entries as JSON")
68
+ .option("--tool <name>", "show only entries matching a tool name")
69
+ .option("--decision <allow|deny>", "show only entries matching a decision")
65
70
  .action(cmdLogShow);
66
71
  log
67
72
  .command("verify")
68
73
  .description("Verify commitment chain integrity")
69
74
  .option("--agent <id>", "agent id (default: from policy file)")
70
75
  .action(cmdLogVerify);
76
+ log
77
+ .command("export")
78
+ .description("Export a deterministic audit entry bundle")
79
+ .option("--commitment <hex>", "audit entry commitment to export")
80
+ .option("--latest", "export the latest audit entry")
81
+ .option("--tool <name>", "export the latest audit entry matching a tool name")
82
+ .option("--decision <allow|deny>", "filter --latest or --tool by decision")
83
+ .option("--agent <id>", "agent id (default: from policy file)")
84
+ .option("--out <path>", "write audit export JSON to file instead of stdout")
85
+ .action(cmdLogExport);
71
86
  program
72
87
  .command("anchor")
73
88
  .description("Batch audit commitments into a Merkle root and submit on-chain")
@@ -114,6 +129,43 @@ verify
114
129
  .option("--check-audit", "check that auditCommitment exists in the local audit log")
115
130
  .option("--audit-agent <id>", "agent id to use for --check-audit")
116
131
  .action(cmdVerifyAuthorization);
132
+ const receipt = program.command("receipt").description("Signed authorization receipt commands");
133
+ receipt
134
+ .command("keygen")
135
+ .description("Generate an Ed25519 key pair for signing CATP receipts")
136
+ .option("--private-key <path>", "private key output path", "catp-receipt-private.pem")
137
+ .option("--public-key <path>", "public key output path", "catp-receipt-public.pem")
138
+ .action(cmdReceiptKeygen);
139
+ receipt
140
+ .command("sign")
141
+ .description("Sign a CATP audit export as an authorization receipt")
142
+ .requiredOption("--audit-export <path>", "catp_audit_export_v1 JSON from catp log export")
143
+ .requiredOption("--private-key <path>", "Ed25519 private key PEM")
144
+ .option("-f, --file <path>", "path to catp-policy.toml to bind into the receipt")
145
+ .option("--out <path>", "write receipt JSON to file instead of stdout")
146
+ .action(cmdReceiptSign);
147
+ receipt
148
+ .command("issue")
149
+ .description("Export an audit entry by commitment and sign it as an authorization receipt")
150
+ .option("--commitment <hex>", "audit entry commitment to issue a receipt for")
151
+ .option("--latest", "issue a receipt for the latest audit entry")
152
+ .option("--tool <name>", "issue a receipt for the latest audit entry matching a tool name")
153
+ .option("--decision <allow|deny>", "filter --latest or --tool by decision")
154
+ .requiredOption("--private-key <path>", "Ed25519 private key PEM")
155
+ .option("--agent <id>", "agent id (default: from policy file)")
156
+ .option("-f, --file <path>", "path to catp-policy.toml to bind into the receipt")
157
+ .option("--audit-export-out <path>", "also write the generated catp_audit_export_v1 JSON")
158
+ .option("--out <path>", "write receipt JSON to file instead of stdout")
159
+ .action(cmdReceiptIssue);
160
+ receipt
161
+ .command("verify")
162
+ .description("Verify a signed CATP authorization receipt")
163
+ .requiredOption("--receipt <path>", "catp_authorization_receipt_v1 JSON")
164
+ .option("--public-key <path>", "Ed25519 public key PEM; defaults to publicKeyPem embedded in the receipt")
165
+ .option("--audit-export <path>", "also check the receipt against a catp_audit_export_v1 JSON bundle")
166
+ .option("-f, --file <path>", "also check the receipt against a catp-policy.toml commitment")
167
+ .option("--json", "write verification summary as JSON")
168
+ .action(cmdReceiptVerify);
117
169
  program.parseAsync(process.argv).catch((err) => {
118
170
  process.stderr.write(`catp: ${err.message}\n`);
119
171
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,49 @@
1
+ import type { AuditEntry } from "../policy/types.js";
2
+ export interface AuditExport {
3
+ exportVersion: "catp_audit_export_v1";
4
+ agentId: string;
5
+ logDate: string;
6
+ entryIndex: number;
7
+ commitment: string;
8
+ entrySha256: string;
9
+ entry: AuditEntry;
10
+ }
11
+ export interface AuditLogFile {
12
+ date: string;
13
+ file: string;
14
+ }
15
+ export declare function auditLogFiles(agentId: string): AuditLogFile[];
1
16
  export declare function cmdLogShow(opts: {
2
17
  lines: string;
3
18
  agent?: string;
19
+ commitments?: boolean;
20
+ json?: boolean;
21
+ tool?: string;
22
+ decision?: "allow" | "deny";
4
23
  }): void;
5
24
  export declare function cmdLogVerify(opts: {
6
25
  agent?: string;
7
26
  }): Promise<void>;
27
+ export declare function cmdLogExport(opts: {
28
+ commitment?: string;
29
+ agent?: string;
30
+ out?: string;
31
+ latest?: boolean;
32
+ tool?: string;
33
+ decision?: "allow" | "deny";
34
+ }): void;
35
+ export declare function buildAuditExport(agentId: string, commitment: string): AuditExport;
36
+ export declare function latestAuditEntry(agentId: string, opts?: {
37
+ tool?: string;
38
+ decision?: "allow" | "deny";
39
+ }): {
40
+ date: string;
41
+ index: number;
42
+ entry: AuditEntry;
43
+ } | null;
44
+ export declare function latestAuditCommitment(agentId: string, opts?: {
45
+ tool?: string;
46
+ decision?: "allow" | "deny";
47
+ }): string;
48
+ export declare function stableStringify(value: unknown, spaces?: number): string;
8
49
  //# sourceMappingURL=log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAkCA,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuBxE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1E"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,sBAAsB,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACnB;AAYD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAO7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B,GAAG,IAAI,CA4CP;AA4CD,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B,GAAG,IAAI,CA6BP;AAaD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAgBjF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAAO,GACxD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAoB3D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAAO,GAAG,MAAM,CAexH;AA6BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,SAAI,GAAG,MAAM,CAElE"}
@@ -1,4 +1,5 @@
1
- import { readFileSync, readdirSync, existsSync } from "node:fs";
1
+ import { createHash } from "node:crypto";
2
+ import { readFileSync, readdirSync, existsSync, writeFileSync } from "node:fs";
2
3
  import { join } from "node:path";
3
4
  import { auditRoot } from "../audit/paths.js";
4
5
  import { findPolicyFile, loadPolicy } from "../policy/loader.js";
@@ -13,63 +14,239 @@ function resolveAgentId(opts) {
13
14
  }
14
15
  return loadPolicy(policyPath).agent.id;
15
16
  }
16
- function latestLogFile(agentId) {
17
- const base = auditRoot(agentId);
18
- if (!existsSync(base))
19
- return null;
20
- const dates = readdirSync(base).sort().reverse();
21
- if (dates.length === 0)
22
- return null;
23
- return join(base, dates[0], "actions.jsonl");
24
- }
25
- function allLogFiles(agentId) {
17
+ export function auditLogFiles(agentId) {
26
18
  const base = auditRoot(agentId);
27
19
  if (!existsSync(base))
28
20
  return [];
29
21
  return readdirSync(base)
30
22
  .sort()
31
- .map((date) => join(base, date, "actions.jsonl"))
32
- .filter((file) => existsSync(file));
23
+ .map((date) => ({ date, file: join(base, date, "actions.jsonl") }))
24
+ .filter(({ file }) => existsSync(file));
33
25
  }
34
26
  export function cmdLogShow(opts) {
27
+ if (opts.decision !== undefined && opts.decision !== "allow" && opts.decision !== "deny") {
28
+ throw new Error("--decision must be allow or deny");
29
+ }
35
30
  const agentId = resolveAgentId(opts);
36
- const logFile = latestLogFile(agentId);
37
- if (!logFile || !existsSync(logFile)) {
31
+ const logFiles = auditLogFiles(agentId);
32
+ const records = auditLineRecords(logFiles);
33
+ if (records.length === 0) {
34
+ if (opts.json) {
35
+ process.stdout.write("[]\n");
36
+ return;
37
+ }
38
38
  process.stdout.write(`No audit log found for agent "${agentId}"\n`);
39
39
  return;
40
40
  }
41
- const lines = readFileSync(logFile, "utf8").trim().split("\n").filter(Boolean);
42
- const n = Math.min(parseInt(opts.lines, 10) || 50, lines.length);
43
- const recent = lines.slice(-n);
44
- for (const line of recent) {
41
+ const n = Math.min(parseInt(opts.lines, 10) || 50, records.length);
42
+ const filteredEntries = opts.tool || opts.decision ? filterAuditRecords(records, opts).slice(-n) : null;
43
+ if (opts.json) {
44
+ const recent = filteredEntries ?? parseAuditRecords(records.slice(-n));
45
+ const entries = recent.map((record) => record.entry);
46
+ process.stdout.write(stableStringify(entries, 2) + "\n");
47
+ return;
48
+ }
49
+ if (filteredEntries) {
50
+ for (const { entry } of filteredEntries) {
51
+ writeAuditEntrySummary(entry, opts);
52
+ }
53
+ process.stdout.write(`\n${filteredEntries.length} matching entries from ${logFiles.length} log file(s)\n`);
54
+ return;
55
+ }
56
+ const recent = records.slice(-n);
57
+ for (const record of recent) {
58
+ try {
59
+ const e = JSON.parse(record.line);
60
+ writeAuditEntrySummary(e, opts);
61
+ }
62
+ catch {
63
+ process.stdout.write(`? ${record.line}\n`);
64
+ }
65
+ }
66
+ process.stdout.write(`\n${recent.length} entries from ${logFiles.length} log file(s)\n`);
67
+ }
68
+ function auditLineRecords(logFiles) {
69
+ return logFiles.flatMap(({ file }) => readFileSync(file, "utf8")
70
+ .split("\n")
71
+ .filter(Boolean)
72
+ .map((line) => ({ line })));
73
+ }
74
+ function parseAuditRecords(records) {
75
+ const entries = [];
76
+ for (const record of records) {
45
77
  try {
46
- const e = JSON.parse(line);
47
- const icon = e.decision === "allow" ? "✓" : "✗";
48
- const rule = e.rule_matched ? ` [${e.rule_matched}]` : "";
49
- process.stdout.write(`${icon} ${e.ts} ${e.tool}${rule}\n ${e.input_summary}\n`);
78
+ entries.push({ record, entry: JSON.parse(record.line) });
50
79
  }
51
80
  catch {
52
- process.stdout.write(`? ${line}\n`);
81
+ // Keep machine-readable output parseable; chain verification reports malformed lines.
53
82
  }
54
83
  }
55
- process.stdout.write(`\n${recent.length} entries from ${logFile}\n`);
84
+ return entries;
85
+ }
86
+ function filterAuditRecords(records, opts) {
87
+ return parseAuditRecords(records).filter(({ entry }) => {
88
+ if (opts.tool && entry.tool !== opts.tool) {
89
+ return false;
90
+ }
91
+ if (opts.decision && entry.decision !== opts.decision) {
92
+ return false;
93
+ }
94
+ return true;
95
+ });
96
+ }
97
+ function writeAuditEntrySummary(e, opts) {
98
+ const icon = e.decision === "allow" ? "✓" : "✗";
99
+ const rule = e.rule_matched ? ` [${e.rule_matched}]` : "";
100
+ process.stdout.write(`${icon} ${e.ts} ${e.tool}${rule}\n ${e.input_summary}\n`);
101
+ if (opts.commitments) {
102
+ process.stdout.write(` commitment=${e.commitment}\n`);
103
+ }
56
104
  }
57
105
  export async function cmdLogVerify(opts) {
58
106
  const agentId = resolveAgentId(opts);
59
- const logFiles = allLogFiles(agentId);
107
+ const logFiles = auditLogFiles(agentId);
60
108
  if (logFiles.length === 0) {
61
109
  process.stdout.write(`No audit log found for agent "${agentId}"\n`);
62
110
  return;
63
111
  }
64
112
  let checked = 0;
65
- for (const logFile of logFiles) {
66
- const result = await verifyChain(logFile);
113
+ for (const { file } of logFiles) {
114
+ const result = await verifyChain(file);
67
115
  checked += result.checked;
68
116
  if (!result.ok) {
69
- process.stderr.write(`✗ Chain broken in ${logFile} at entry ${result.broken_at}: ${result.message}\n`);
117
+ process.stderr.write(`✗ Chain broken in ${file} at entry ${result.broken_at}: ${result.message}\n`);
70
118
  process.exit(1);
71
119
  }
72
120
  }
73
121
  process.stdout.write(`✓ Chain intact — ${checked} entries verified across ${logFiles.length} log file(s)\n`);
74
122
  }
123
+ export function cmdLogExport(opts) {
124
+ const selectorCount = [opts.commitment, opts.latest ? "latest" : undefined, opts.tool].filter(Boolean).length;
125
+ if (selectorCount > 1) {
126
+ throw new Error("use only one of --commitment <hex>, --latest, or --tool <name>");
127
+ }
128
+ if (selectorCount === 0) {
129
+ throw new Error("missing --commitment <hex>, --latest, or --tool <name>");
130
+ }
131
+ if (opts.decision !== undefined && opts.decision !== "allow" && opts.decision !== "deny") {
132
+ throw new Error("--decision must be allow or deny");
133
+ }
134
+ if (opts.commitment && opts.decision) {
135
+ throw new Error("--decision can only be used with --latest or --tool");
136
+ }
137
+ const agentId = resolveAgentId(opts);
138
+ const commitment = resolveLogExportCommitment(agentId, opts);
139
+ const auditExport = buildAuditExport(agentId, commitment);
140
+ const json = stableStringify(auditExport, 2) + "\n";
141
+ if (opts.out) {
142
+ writeFileSync(opts.out, json, "utf8");
143
+ process.stdout.write(`Wrote audit export to ${opts.out}\n`);
144
+ process.stdout.write(`commitment=${auditExport.commitment}\n`);
145
+ process.stdout.write(`entrySha256=${auditExport.entrySha256}\n`);
146
+ return;
147
+ }
148
+ process.stdout.write(json);
149
+ }
150
+ function resolveLogExportCommitment(agentId, opts) {
151
+ if (opts.commitment) {
152
+ assertCommitment(opts.commitment);
153
+ return opts.commitment;
154
+ }
155
+ return latestAuditCommitment(agentId, {
156
+ ...(opts.tool ? { tool: opts.tool } : {}),
157
+ ...(opts.decision ? { decision: opts.decision } : {}),
158
+ });
159
+ }
160
+ export function buildAuditExport(agentId, commitment) {
161
+ assertCommitment(commitment);
162
+ const found = findAuditEntry(agentId, commitment);
163
+ if (!found) {
164
+ throw new Error(`No audit entry found for commitment ${commitment}`);
165
+ }
166
+ return {
167
+ exportVersion: "catp_audit_export_v1",
168
+ agentId,
169
+ logDate: found.date,
170
+ entryIndex: found.index,
171
+ commitment: found.entry.commitment,
172
+ entrySha256: sha256Hex(stableStringify(found.entry)),
173
+ entry: found.entry,
174
+ };
175
+ }
176
+ export function latestAuditEntry(agentId, opts = {}) {
177
+ const files = auditLogFiles(agentId).slice().reverse();
178
+ for (const { date, file } of files) {
179
+ const lines = readFileSync(file, "utf8").split("\n").filter(Boolean);
180
+ for (let index = lines.length - 1; index >= 0; index -= 1) {
181
+ try {
182
+ const entry = JSON.parse(lines[index]);
183
+ if (opts.tool && entry.tool !== opts.tool) {
184
+ continue;
185
+ }
186
+ if (opts.decision && entry.decision !== opts.decision) {
187
+ continue;
188
+ }
189
+ return { date, index, entry };
190
+ }
191
+ catch {
192
+ // skip malformed audit lines; chain verification reports them separately
193
+ }
194
+ }
195
+ }
196
+ return null;
197
+ }
198
+ export function latestAuditCommitment(agentId, opts = {}) {
199
+ const latest = latestAuditEntry(agentId, opts);
200
+ if (!latest) {
201
+ if (opts.tool && opts.decision) {
202
+ throw new Error(`No audit log entry found for agent "${agentId}", tool "${opts.tool}", and decision "${opts.decision}"`);
203
+ }
204
+ if (opts.tool) {
205
+ throw new Error(`No audit log entry found for agent "${agentId}" and tool "${opts.tool}"`);
206
+ }
207
+ if (opts.decision) {
208
+ throw new Error(`No audit log entry found for agent "${agentId}" and decision "${opts.decision}"`);
209
+ }
210
+ throw new Error(`No audit log entry found for agent "${agentId}"`);
211
+ }
212
+ return latest.entry.commitment;
213
+ }
214
+ function findAuditEntry(agentId, commitment) {
215
+ for (const { date, file } of auditLogFiles(agentId)) {
216
+ const lines = readFileSync(file, "utf8").split("\n").filter(Boolean);
217
+ for (const [index, line] of lines.entries()) {
218
+ try {
219
+ const entry = JSON.parse(line);
220
+ if (entry.commitment.toLowerCase() === commitment.toLowerCase()) {
221
+ return { date, index, entry };
222
+ }
223
+ }
224
+ catch {
225
+ // skip malformed audit lines; chain verification reports them separately
226
+ }
227
+ }
228
+ }
229
+ return null;
230
+ }
231
+ function assertCommitment(commitment) {
232
+ if (!/^[0-9a-fA-F]{64}$/.test(commitment)) {
233
+ throw new Error("--commitment must be a 64-character hex commitment");
234
+ }
235
+ }
236
+ function sha256Hex(input) {
237
+ return createHash("sha256").update(input).digest("hex");
238
+ }
239
+ export function stableStringify(value, spaces = 0) {
240
+ return JSON.stringify(sortForJson(value), null, spaces);
241
+ }
242
+ function sortForJson(value) {
243
+ if (Array.isArray(value)) {
244
+ return value.map(sortForJson);
245
+ }
246
+ if (value && typeof value === "object") {
247
+ const record = value;
248
+ return Object.fromEntries(Object.keys(record).sort().map((key) => [key, sortForJson(record[key])]));
249
+ }
250
+ return value;
251
+ }
75
252
  //# sourceMappingURL=log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { type AuditExport } from "./log.js";
2
+ import type { CatpPolicy } from "../policy/types.js";
3
+ export interface AuthorizationReceiptPayload {
4
+ receiptVersion: "catp_authorization_receipt_v1";
5
+ auditExportHash: string;
6
+ auditCommitment: string;
7
+ entrySha256: string;
8
+ agentId: string;
9
+ tool: string;
10
+ decision: "allow" | "deny";
11
+ timestamp: string;
12
+ policyCommitment: string | null;
13
+ signedAt: string;
14
+ signatureAlgorithm: "Ed25519";
15
+ publicKeyPem: string;
16
+ }
17
+ export interface AuthorizationReceipt extends AuthorizationReceiptPayload {
18
+ signature: string;
19
+ }
20
+ export interface ReceiptVerificationSummary {
21
+ authorizationReceipt: "valid";
22
+ auditExport: "matched" | null;
23
+ policy: "matched" | null;
24
+ auditCommitment: string;
25
+ auditExportHash: string;
26
+ policyCommitment: string | null;
27
+ agentId: string;
28
+ tool: string;
29
+ decision: "allow" | "deny";
30
+ timestamp: string;
31
+ signedAt: string;
32
+ }
33
+ export declare function cmdReceiptKeygen(opts: {
34
+ privateKey?: string;
35
+ publicKey?: string;
36
+ }): void;
37
+ export declare function cmdReceiptSign(opts: {
38
+ auditExport?: string;
39
+ privateKey?: string;
40
+ out?: string;
41
+ file?: string;
42
+ }): void;
43
+ export declare function cmdReceiptIssue(opts: {
44
+ commitment?: string;
45
+ agent?: string;
46
+ privateKey?: string;
47
+ out?: string;
48
+ file?: string;
49
+ auditExportOut?: string;
50
+ latest?: boolean;
51
+ tool?: string;
52
+ decision?: "allow" | "deny";
53
+ }): Promise<void>;
54
+ export declare function cmdReceiptVerify(opts: {
55
+ receipt?: string;
56
+ publicKey?: string;
57
+ auditExport?: string;
58
+ file?: string;
59
+ json?: boolean;
60
+ }): void;
61
+ export declare function signAuthorizationReceipt(auditExport: AuditExport, privateKeyPem: string, publicKeyPem: string, opts?: {
62
+ signedAt?: string;
63
+ policyCommitment?: string | null;
64
+ }): AuthorizationReceipt;
65
+ export declare function verifyAuthorizationReceipt(receipt: AuthorizationReceipt, publicKeyPem?: string): void;
66
+ export declare function verifyReceiptAuditExport(receipt: AuthorizationReceipt, auditExport: AuditExport): void;
67
+ export declare function verifyReceiptPolicy(receipt: AuthorizationReceipt, policy: CatpPolicy): void;
68
+ export declare function computePolicyCommitment(policy: CatpPolicy): string;
69
+ //# sourceMappingURL=receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/commands/receipt.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2E,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGrH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,2BAA2B;IAC1C,cAAc,EAAE,+BAA+B,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYxF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6BrH;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhB;AAgFD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAgC1I;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GACjE,oBAAoB,CAqBtB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,GAAE,MAA6B,GAAG,IAAI,CAO3H;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAyBtG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAS3F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAElE"}
@@ -0,0 +1,306 @@
1
+ import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from "node:crypto";
2
+ import { readFileSync, writeFileSync } from "node:fs";
3
+ import { auditLogFiles, buildAuditExport, latestAuditCommitment, stableStringify } from "./log.js";
4
+ import { verifyChain } from "../audit/verifier.js";
5
+ import { findPolicyFile, loadPolicy } from "../policy/loader.js";
6
+ export function cmdReceiptKeygen(opts) {
7
+ const privateKeyPath = opts.privateKey ?? "catp-receipt-private.pem";
8
+ const publicKeyPath = opts.publicKey ?? "catp-receipt-public.pem";
9
+ const { privateKey, publicKey } = generateKeyPairSync("ed25519", {
10
+ privateKeyEncoding: { type: "pkcs8", format: "pem" },
11
+ publicKeyEncoding: { type: "spki", format: "pem" },
12
+ });
13
+ writeFileSync(privateKeyPath, privateKey, { encoding: "utf8", mode: 0o600 });
14
+ writeFileSync(publicKeyPath, publicKey, "utf8");
15
+ process.stdout.write(`Wrote private key to ${privateKeyPath}\n`);
16
+ process.stdout.write(`Wrote public key to ${publicKeyPath}\n`);
17
+ }
18
+ export function cmdReceiptSign(opts) {
19
+ if (!opts.auditExport) {
20
+ throw new Error("missing --audit-export <path>");
21
+ }
22
+ if (!opts.privateKey) {
23
+ throw new Error("missing --private-key <path>");
24
+ }
25
+ const auditExport = readAuditExport(opts.auditExport);
26
+ const privateKeyPem = readFileSync(opts.privateKey, "utf8");
27
+ const publicKeyPem = derivePublicKeyPem(privateKeyPem);
28
+ const policyCommitment = opts.file ? computePolicyCommitment(loadPolicy(opts.file)) : resolvePolicyCommitmentIfPresent();
29
+ const receipt = signAuthorizationReceipt(auditExport, privateKeyPem, publicKeyPem, { policyCommitment });
30
+ const json = stableStringify(receipt, 2) + "\n";
31
+ if (opts.out) {
32
+ writeFileSync(opts.out, json, "utf8");
33
+ process.stdout.write(`Wrote authorization receipt to ${opts.out}\n`);
34
+ process.stdout.write(`auditCommitment=${receipt.auditCommitment}\n`);
35
+ process.stdout.write(`auditExportHash=${receipt.auditExportHash}\n`);
36
+ process.stdout.write(`policyCommitment=${receipt.policyCommitment ?? "none"}\n`);
37
+ process.stdout.write(`selectedTool=${auditExport.entry.tool}\n`);
38
+ process.stdout.write(`selectedDecision=${auditExport.entry.decision}\n`);
39
+ process.stdout.write(`selectedTimestamp=${auditExport.entry.ts}\n`);
40
+ process.stdout.write(`selectedInputSummary=${auditExport.entry.input_summary}\n`);
41
+ return;
42
+ }
43
+ process.stdout.write(json);
44
+ }
45
+ export function cmdReceiptIssue(opts) {
46
+ return issueReceipt(opts);
47
+ }
48
+ async function issueReceipt(opts) {
49
+ const selectorCount = [opts.commitment, opts.latest ? "latest" : undefined, opts.tool].filter(Boolean).length;
50
+ if (selectorCount > 1) {
51
+ throw new Error("use only one of --commitment <hex>, --latest, or --tool <name>");
52
+ }
53
+ if (selectorCount === 0) {
54
+ throw new Error("missing --commitment <hex>, --latest, or --tool <name>");
55
+ }
56
+ if (!opts.privateKey) {
57
+ throw new Error("missing --private-key <path>");
58
+ }
59
+ if (opts.decision !== undefined && opts.decision !== "allow" && opts.decision !== "deny") {
60
+ throw new Error("--decision must be allow or deny");
61
+ }
62
+ if (opts.commitment && opts.decision) {
63
+ throw new Error("--decision can only be used with --latest or --tool");
64
+ }
65
+ const policyPath = opts.file ?? findPolicyFile();
66
+ const policy = policyPath ? loadPolicy(policyPath) : null;
67
+ const agentId = opts.agent ?? policy?.agent.id;
68
+ if (!agentId) {
69
+ throw new Error("missing --agent <id>; no catp-policy.toml found");
70
+ }
71
+ await verifyAuditLogIntegrity(agentId);
72
+ const commitment = resolveIssueCommitment(agentId, opts);
73
+ const auditExport = buildAuditExport(agentId, commitment);
74
+ const privateKeyPem = readFileSync(opts.privateKey, "utf8");
75
+ const publicKeyPem = derivePublicKeyPem(privateKeyPem);
76
+ const receipt = signAuthorizationReceipt(auditExport, privateKeyPem, publicKeyPem, {
77
+ policyCommitment: policy ? computePolicyCommitment(policy) : null,
78
+ });
79
+ if (opts.auditExportOut) {
80
+ writeFileSync(opts.auditExportOut, stableStringify(auditExport, 2) + "\n", "utf8");
81
+ }
82
+ const json = stableStringify(receipt, 2) + "\n";
83
+ if (opts.out) {
84
+ writeFileSync(opts.out, json, "utf8");
85
+ process.stdout.write(`Wrote authorization receipt to ${opts.out}\n`);
86
+ if (opts.auditExportOut) {
87
+ process.stdout.write(`Wrote audit export to ${opts.auditExportOut}\n`);
88
+ }
89
+ process.stdout.write(`auditCommitment=${receipt.auditCommitment}\n`);
90
+ process.stdout.write(`auditExportHash=${receipt.auditExportHash}\n`);
91
+ process.stdout.write(`policyCommitment=${receipt.policyCommitment ?? "none"}\n`);
92
+ process.stdout.write(`selectedTool=${auditExport.entry.tool}\n`);
93
+ process.stdout.write(`selectedDecision=${auditExport.entry.decision}\n`);
94
+ process.stdout.write(`selectedTimestamp=${auditExport.entry.ts}\n`);
95
+ process.stdout.write(`selectedInputSummary=${auditExport.entry.input_summary}\n`);
96
+ return;
97
+ }
98
+ process.stdout.write(json);
99
+ }
100
+ function resolveIssueCommitment(agentId, opts) {
101
+ if (opts.commitment) {
102
+ return opts.commitment;
103
+ }
104
+ return latestAuditCommitment(agentId, {
105
+ ...(opts.tool ? { tool: opts.tool } : {}),
106
+ ...(opts.decision ? { decision: opts.decision } : {}),
107
+ });
108
+ }
109
+ export function cmdReceiptVerify(opts) {
110
+ if (!opts.receipt) {
111
+ throw new Error("missing --receipt <path>");
112
+ }
113
+ const receipt = readAuthorizationReceipt(opts.receipt);
114
+ const publicKeyPem = opts.publicKey ? readFileSync(opts.publicKey, "utf8") : receipt.publicKeyPem;
115
+ verifyAuthorizationReceipt(receipt, publicKeyPem);
116
+ if (opts.auditExport) {
117
+ const auditExport = readAuditExport(opts.auditExport);
118
+ verifyReceiptAuditExport(receipt, auditExport);
119
+ }
120
+ if (opts.file) {
121
+ verifyReceiptPolicy(receipt, loadPolicy(opts.file));
122
+ }
123
+ const summary = receiptVerificationSummary(receipt, {
124
+ auditExportMatched: Boolean(opts.auditExport),
125
+ policyMatched: Boolean(opts.file),
126
+ });
127
+ if (opts.json) {
128
+ process.stdout.write(stableStringify(summary, 2) + "\n");
129
+ return;
130
+ }
131
+ process.stdout.write("authorizationReceipt=valid\n");
132
+ if (opts.auditExport) {
133
+ process.stdout.write("auditExport=matched\n");
134
+ }
135
+ if (opts.file) {
136
+ process.stdout.write("policy=matched\n");
137
+ }
138
+ process.stdout.write(`auditCommitment=${summary.auditCommitment}\n`);
139
+ process.stdout.write(`auditExportHash=${summary.auditExportHash}\n`);
140
+ process.stdout.write(`policyCommitment=${summary.policyCommitment ?? "none"}\n`);
141
+ }
142
+ export function signAuthorizationReceipt(auditExport, privateKeyPem, publicKeyPem, opts = {}) {
143
+ validateAuditExport(auditExport);
144
+ if (opts.policyCommitment !== undefined && opts.policyCommitment !== null) {
145
+ assertHex(opts.policyCommitment, "policyCommitment");
146
+ }
147
+ const payload = {
148
+ receiptVersion: "catp_authorization_receipt_v1",
149
+ auditExportHash: sha256Hex(stableStringify(auditExport)),
150
+ auditCommitment: auditExport.commitment,
151
+ entrySha256: auditExport.entrySha256,
152
+ agentId: auditExport.agentId,
153
+ tool: auditExport.entry.tool,
154
+ decision: auditExport.entry.decision,
155
+ timestamp: auditExport.entry.ts,
156
+ policyCommitment: opts.policyCommitment ?? null,
157
+ signedAt: opts.signedAt ?? new Date().toISOString(),
158
+ signatureAlgorithm: "Ed25519",
159
+ publicKeyPem,
160
+ };
161
+ const signature = sign(null, Buffer.from(stableStringify(payload)), privateKeyPem).toString("base64");
162
+ return { ...payload, signature };
163
+ }
164
+ export function verifyAuthorizationReceipt(receipt, publicKeyPem = receipt.publicKeyPem) {
165
+ validateReceipt(receipt);
166
+ const { signature, ...payload } = receipt;
167
+ const ok = verify(null, Buffer.from(stableStringify(payload)), publicKeyPem, Buffer.from(signature, "base64"));
168
+ if (!ok) {
169
+ throw new Error("authorization receipt signature is invalid");
170
+ }
171
+ }
172
+ export function verifyReceiptAuditExport(receipt, auditExport) {
173
+ validateReceipt(receipt);
174
+ validateAuditExport(auditExport);
175
+ const auditExportHash = sha256Hex(stableStringify(auditExport));
176
+ if (receipt.auditExportHash !== auditExportHash) {
177
+ throw new Error("receipt auditExportHash does not match audit export");
178
+ }
179
+ if (receipt.auditCommitment !== auditExport.commitment) {
180
+ throw new Error("receipt auditCommitment does not match audit export");
181
+ }
182
+ if (receipt.entrySha256 !== auditExport.entrySha256) {
183
+ throw new Error("receipt entrySha256 does not match audit export");
184
+ }
185
+ if (receipt.agentId !== auditExport.agentId) {
186
+ throw new Error("receipt agentId does not match audit export");
187
+ }
188
+ if (receipt.tool !== auditExport.entry.tool) {
189
+ throw new Error("receipt tool does not match audit export");
190
+ }
191
+ if (receipt.decision !== auditExport.entry.decision) {
192
+ throw new Error("receipt decision does not match audit export");
193
+ }
194
+ if (receipt.timestamp !== auditExport.entry.ts) {
195
+ throw new Error("receipt timestamp does not match audit export");
196
+ }
197
+ }
198
+ export function verifyReceiptPolicy(receipt, policy) {
199
+ validateReceipt(receipt);
200
+ const policyCommitment = computePolicyCommitment(policy);
201
+ if (receipt.policyCommitment === null) {
202
+ throw new Error("receipt has no policyCommitment");
203
+ }
204
+ if (receipt.policyCommitment !== policyCommitment) {
205
+ throw new Error("receipt policyCommitment does not match policy");
206
+ }
207
+ }
208
+ export function computePolicyCommitment(policy) {
209
+ return sha256Hex(stableStringify(policy));
210
+ }
211
+ function receiptVerificationSummary(receipt, opts) {
212
+ return {
213
+ authorizationReceipt: "valid",
214
+ auditExport: opts.auditExportMatched ? "matched" : null,
215
+ policy: opts.policyMatched ? "matched" : null,
216
+ auditCommitment: receipt.auditCommitment,
217
+ auditExportHash: receipt.auditExportHash,
218
+ policyCommitment: receipt.policyCommitment,
219
+ agentId: receipt.agentId,
220
+ tool: receipt.tool,
221
+ decision: receipt.decision,
222
+ timestamp: receipt.timestamp,
223
+ signedAt: receipt.signedAt,
224
+ };
225
+ }
226
+ function readAuditExport(path) {
227
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
228
+ validateAuditExport(parsed);
229
+ return parsed;
230
+ }
231
+ function readAuthorizationReceipt(path) {
232
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
233
+ validateReceipt(parsed);
234
+ return parsed;
235
+ }
236
+ function validateAuditExport(value) {
237
+ if (!value || typeof value !== "object") {
238
+ throw new Error("audit export must be an object");
239
+ }
240
+ const auditExport = value;
241
+ if (auditExport.exportVersion !== "catp_audit_export_v1") {
242
+ throw new Error("audit export version must be catp_audit_export_v1");
243
+ }
244
+ if (!auditExport.entry || typeof auditExport.entry !== "object") {
245
+ throw new Error("audit export entry must be an object");
246
+ }
247
+ assertHex(auditExport.commitment, "audit export commitment");
248
+ assertHex(auditExport.entrySha256, "audit export entrySha256");
249
+ if (auditExport.entry.commitment !== auditExport.commitment) {
250
+ throw new Error("audit export commitment must match entry commitment");
251
+ }
252
+ const expectedEntryHash = sha256Hex(stableStringify(auditExport.entry));
253
+ if (auditExport.entrySha256 !== expectedEntryHash) {
254
+ throw new Error("audit export entrySha256 does not match entry");
255
+ }
256
+ }
257
+ function validateReceipt(value) {
258
+ if (!value || typeof value !== "object") {
259
+ throw new Error("authorization receipt must be an object");
260
+ }
261
+ const receipt = value;
262
+ if (receipt.receiptVersion !== "catp_authorization_receipt_v1") {
263
+ throw new Error("receiptVersion must be catp_authorization_receipt_v1");
264
+ }
265
+ if (receipt.signatureAlgorithm !== "Ed25519") {
266
+ throw new Error("signatureAlgorithm must be Ed25519");
267
+ }
268
+ assertHex(receipt.auditExportHash, "auditExportHash");
269
+ assertHex(receipt.auditCommitment, "auditCommitment");
270
+ assertHex(receipt.entrySha256, "entrySha256");
271
+ if (receipt.decision !== "allow" && receipt.decision !== "deny") {
272
+ throw new Error("decision must be allow or deny");
273
+ }
274
+ for (const field of ["agentId", "tool", "timestamp", "signedAt", "publicKeyPem", "signature"]) {
275
+ if (typeof receipt[field] !== "string" || receipt[field] === "") {
276
+ throw new Error(`${field} must be a non-empty string`);
277
+ }
278
+ }
279
+ if (receipt.policyCommitment !== null) {
280
+ assertHex(receipt.policyCommitment, "policyCommitment");
281
+ }
282
+ }
283
+ function derivePublicKeyPem(privateKeyPem) {
284
+ return createPublicKey(createPrivateKey(privateKeyPem)).export({ type: "spki", format: "pem" }).toString();
285
+ }
286
+ function resolvePolicyCommitmentIfPresent() {
287
+ const policyPath = findPolicyFile();
288
+ return policyPath ? computePolicyCommitment(loadPolicy(policyPath)) : null;
289
+ }
290
+ async function verifyAuditLogIntegrity(agentId) {
291
+ for (const { file } of auditLogFiles(agentId)) {
292
+ const result = await verifyChain(file);
293
+ if (!result.ok) {
294
+ throw new Error(`audit log chain is broken in ${file} at entry ${result.broken_at}: ${result.message}`);
295
+ }
296
+ }
297
+ }
298
+ function assertHex(value, field) {
299
+ if (typeof value !== "string" || !/^[0-9a-fA-F]{64}$/.test(value)) {
300
+ throw new Error(`${field} must be a 64-character hex string`);
301
+ }
302
+ }
303
+ function sha256Hex(input) {
304
+ return createHash("sha256").update(input).digest("hex");
305
+ }
306
+ //# sourceMappingURL=receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/commands/receipt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catp-protocol/cli",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "Cryptographic Agent Trust Protocol — local enforcement plugin for Claude Code with TOML policy and tamper-evident audit log",
5
5
  "keywords": [
6
6
  "claude-code",