@catp-protocol/cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/audit/logger.d.ts +3 -2
  2. package/dist/audit/logger.d.ts.map +1 -1
  3. package/dist/audit/logger.js +37 -10
  4. package/dist/audit/logger.js.map +1 -1
  5. package/dist/audit/paths.d.ts +4 -0
  6. package/dist/audit/paths.d.ts.map +1 -0
  7. package/dist/audit/paths.js +12 -0
  8. package/dist/audit/paths.js.map +1 -0
  9. package/dist/audit/verifier.d.ts.map +1 -1
  10. package/dist/audit/verifier.js +1 -1
  11. package/dist/audit/verifier.js.map +1 -1
  12. package/dist/cli.js +49 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/anchor.d.ts +7 -0
  15. package/dist/commands/anchor.d.ts.map +1 -0
  16. package/dist/commands/anchor.js +122 -0
  17. package/dist/commands/anchor.js.map +1 -0
  18. package/dist/commands/authorization.d.ts +68 -0
  19. package/dist/commands/authorization.d.ts.map +1 -0
  20. package/dist/commands/authorization.js +342 -0
  21. package/dist/commands/authorization.js.map +1 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +2 -1
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/log.d.ts.map +1 -1
  26. package/dist/commands/log.js +22 -11
  27. package/dist/commands/log.js.map +1 -1
  28. package/dist/commands/witness.d.ts +39 -0
  29. package/dist/commands/witness.d.ts.map +1 -0
  30. package/dist/commands/witness.js +164 -0
  31. package/dist/commands/witness.js.map +1 -0
  32. package/dist/policy/loader.d.ts.map +1 -1
  33. package/dist/policy/loader.js +36 -1
  34. package/dist/policy/loader.js.map +1 -1
  35. package/dist/policy/types.d.ts +19 -0
  36. package/dist/policy/types.d.ts.map +1 -1
  37. package/package.json +20 -9
@@ -0,0 +1,164 @@
1
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { auditRoot } from "../audit/paths.js";
4
+ import { findPolicyFile, loadPolicy } from "../policy/loader.js";
5
+ const MAX_U64 = (1n << 64n) - 1n;
6
+ const ACTION_TYPE = {
7
+ swap: "0",
8
+ transfer: "1",
9
+ deposit: "2",
10
+ withdraw: "3",
11
+ };
12
+ export function buildGroth16Witness(policy, action, opts = {}) {
13
+ if (!policy.authorization) {
14
+ throw new Error("catp-policy.toml is missing [authorization]");
15
+ }
16
+ const auth = normalizeAuthorization(policy.authorization);
17
+ const actionType = normalizeActionType(action.actionType, "actionType");
18
+ const value = normalizeU64(action.value, "value");
19
+ const currentTimestamp = normalizeU64(opts.currentTimestamp ?? action.currentTimestamp ?? Math.floor(Date.now() / 1000), "currentTimestamp");
20
+ const cumulativeSpend = normalizeU64(opts.cumulativeSpend ?? action.cumulativeSpend ?? "0", "cumulativeSpend");
21
+ const protocol = normalizeBytes32(action.protocol, "protocol");
22
+ const token = normalizeBytes32(action.token, "token");
23
+ if (actionType !== auth.allowedAction) {
24
+ throw new Error("actionType must match authorization.allowed_action");
25
+ }
26
+ if (protocol.toLowerCase() !== auth.allowedProtocol.toLowerCase()) {
27
+ throw new Error("protocol must match authorization.allowed_protocol");
28
+ }
29
+ if (token.toLowerCase() !== auth.allowedToken.toLowerCase()) {
30
+ throw new Error("token must match authorization.allowed_token");
31
+ }
32
+ return {
33
+ actionType,
34
+ protocol,
35
+ token,
36
+ value,
37
+ currentTimestamp,
38
+ cumulativeSpend,
39
+ allowedAction: auth.allowedAction,
40
+ allowedProtocol: auth.allowedProtocol,
41
+ allowedToken: auth.allowedToken,
42
+ maxValuePerTx: auth.maxValuePerTx,
43
+ maxValueTotal: auth.maxValueTotal,
44
+ validFrom: auth.validFrom,
45
+ validUntil: auth.validUntil,
46
+ };
47
+ }
48
+ export function cmdWitness(opts) {
49
+ const witness = buildGroth16WitnessFromSources(opts);
50
+ const encoded = `${JSON.stringify(witness, null, 2)}\n`;
51
+ if (opts.out) {
52
+ writeFileSync(opts.out, encoded, "utf8");
53
+ process.stdout.write(`Wrote Groth16 witness to ${opts.out}\n`);
54
+ }
55
+ else {
56
+ process.stdout.write(encoded);
57
+ }
58
+ }
59
+ export function buildGroth16WitnessFromSources(opts) {
60
+ if (!opts.action && !opts.auditCommitment) {
61
+ throw new Error("missing --action <path> or --audit-commitment <hex>");
62
+ }
63
+ if (opts.action && opts.auditCommitment) {
64
+ throw new Error("use only one of --action or --audit-commitment");
65
+ }
66
+ const policyPath = opts.file ?? findPolicyFile();
67
+ if (!policyPath) {
68
+ throw new Error("Could not find catp-policy.toml. Specify --file <path>.");
69
+ }
70
+ const policy = loadPolicy(policyPath);
71
+ const action = opts.action
72
+ ? JSON.parse(readFileSync(opts.action, "utf8"))
73
+ : readAuthorizationActionFromAudit(resolveAgentId(policy, opts.agent), opts.auditCommitment);
74
+ return buildGroth16Witness(policy, action, {
75
+ currentTimestamp: opts.currentTimestamp,
76
+ cumulativeSpend: opts.cumulativeSpend,
77
+ });
78
+ }
79
+ function resolveAgentId(policy, agent) {
80
+ return agent ?? policy.agent.id;
81
+ }
82
+ function readAuthorizationActionFromAudit(agentId, commitment) {
83
+ if (!/^[0-9a-fA-F]{64}$/.test(commitment)) {
84
+ throw new Error("--audit-commitment must be a 64-character hex commitment");
85
+ }
86
+ const entry = findAuditEntry(agentId, commitment);
87
+ if (!entry) {
88
+ throw new Error(`No audit entry found for commitment ${commitment}`);
89
+ }
90
+ if (!entry.authorization) {
91
+ throw new Error(`Audit entry ${commitment} does not contain authorization action data`);
92
+ }
93
+ return entry.authorization;
94
+ }
95
+ function findAuditEntry(agentId, commitment) {
96
+ const root = auditRoot(agentId);
97
+ if (!existsSync(root))
98
+ return null;
99
+ for (const date of readdirSync(root).sort()) {
100
+ const file = join(root, date, "actions.jsonl");
101
+ if (!existsSync(file))
102
+ continue;
103
+ const lines = readFileSync(file, "utf8").trimEnd().split("\n").filter(Boolean);
104
+ for (const line of lines) {
105
+ try {
106
+ const entry = JSON.parse(line);
107
+ if (entry.commitment.toLowerCase() === commitment.toLowerCase()) {
108
+ return entry;
109
+ }
110
+ }
111
+ catch {
112
+ // skip malformed audit lines
113
+ }
114
+ }
115
+ }
116
+ return null;
117
+ }
118
+ function normalizeAuthorization(auth) {
119
+ return {
120
+ allowedAction: normalizeActionType(auth.allowed_action, "authorization.allowed_action"),
121
+ allowedProtocol: normalizeBytes32(auth.allowed_protocol, "authorization.allowed_protocol"),
122
+ allowedToken: normalizeBytes32(auth.allowed_token, "authorization.allowed_token"),
123
+ maxValuePerTx: normalizeU64(auth.max_value_per_tx, "authorization.max_value_per_tx"),
124
+ maxValueTotal: normalizeU64(auth.max_value_total, "authorization.max_value_total"),
125
+ validFrom: normalizeU64(auth.valid_from, "authorization.valid_from"),
126
+ validUntil: normalizeU64(auth.valid_until, "authorization.valid_until"),
127
+ };
128
+ }
129
+ function normalizeActionType(value, field) {
130
+ if (typeof value === "string" && ACTION_TYPE[value.toLowerCase()] !== undefined) {
131
+ return ACTION_TYPE[value.toLowerCase()];
132
+ }
133
+ const parsed = normalizeU64(value, field);
134
+ if (!["0", "1", "2", "3"].includes(parsed)) {
135
+ throw new Error(`${field} must be Swap, Transfer, Deposit, Withdraw, or 0..3`);
136
+ }
137
+ return parsed;
138
+ }
139
+ function normalizeBytes32(value, field) {
140
+ if (!/^0x[0-9a-fA-F]{64}$/.test(value)) {
141
+ throw new Error(`${field} must be a 0x-prefixed 32-byte hex string`);
142
+ }
143
+ return value;
144
+ }
145
+ function normalizeU64(value, field) {
146
+ let parsed;
147
+ if (typeof value === "number") {
148
+ if (!Number.isSafeInteger(value)) {
149
+ throw new Error(`${field} must be a safe integer`);
150
+ }
151
+ parsed = BigInt(value);
152
+ }
153
+ else if (/^0x[0-9a-fA-F]+$/.test(value) || /^[0-9]+$/.test(value)) {
154
+ parsed = BigInt(value);
155
+ }
156
+ else {
157
+ throw new Error(`${field} must be an integer string`);
158
+ }
159
+ if (parsed < 0n || parsed > MAX_U64) {
160
+ throw new Error(`${field} must fit in u64`);
161
+ }
162
+ return parsed.toString();
163
+ }
164
+ //# sourceMappingURL=witness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.js","sourceRoot":"","sources":["../../src/commands/witness.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAIzD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,YAAY,CAAC;AAIlE,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAIzD"}
@@ -57,7 +57,11 @@ function validate(raw, path) {
57
57
  reason: typeof rule.reason === "string" ? rule.reason : undefined,
58
58
  };
59
59
  });
60
- return { agent: { id: agent.id, version: agent.version }, rules };
60
+ return {
61
+ agent: { id: agent.id, version: agent.version },
62
+ rules,
63
+ authorization: validateAuthorization(obj.authorization, path),
64
+ };
61
65
  }
62
66
  function toStringArray(v) {
63
67
  if (v === undefined || v === null)
@@ -66,4 +70,35 @@ function toStringArray(v) {
66
70
  return undefined;
67
71
  return v.filter((x) => typeof x === "string");
68
72
  }
73
+ function validateAuthorization(raw, path) {
74
+ if (raw === undefined || raw === null)
75
+ return undefined;
76
+ if (typeof raw !== "object") {
77
+ throw new Error(`${path}: [authorization] must be an object`);
78
+ }
79
+ const auth = raw;
80
+ const required = [
81
+ "allowed_action",
82
+ "allowed_protocol",
83
+ "allowed_token",
84
+ "max_value_per_tx",
85
+ "max_value_total",
86
+ "valid_from",
87
+ "valid_until",
88
+ ];
89
+ for (const field of required) {
90
+ if (typeof auth[field] !== "string" || auth[field] === "") {
91
+ throw new Error(`${path}: authorization.${field} must be a non-empty string`);
92
+ }
93
+ }
94
+ return {
95
+ allowed_action: auth.allowed_action,
96
+ allowed_protocol: auth.allowed_protocol,
97
+ allowed_token: auth.allowed_token,
98
+ max_value_per_tx: auth.max_value_per_tx,
99
+ max_value_total: auth.max_value_total,
100
+ valid_from: auth.valid_from,
101
+ valid_until: auth.valid_until,
102
+ };
103
+ }
69
104
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGlC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,MAAM,UAAU,cAAc,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC7D,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAY,CAAC;IACrC,OAAO,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY,EAAE,IAAY;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uCAAuC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,CAAS,EAAE,EAAE;QACpD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,GAAG,CAA4B,CAAC;QAC1C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW,CAAC,mCAAmC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAClE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,KAAK,EAAE,IAAI,CAAC,KAAgB;YAC5B,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;YAClD,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;YAChD,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAClE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAiB,EAAE,EAAE,KAAK,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export interface Rule {
13
13
  export interface CatpPolicy {
14
14
  agent: AgentMeta;
15
15
  rules: Rule[];
16
+ authorization?: AuthorizationConfig;
16
17
  }
17
18
  export interface HookInput {
18
19
  session_id?: string;
@@ -26,5 +27,23 @@ export interface AuditEntry {
26
27
  rule_matched: string | null;
27
28
  commitment: string;
28
29
  input_summary: string;
30
+ authorization?: AuthorizationAction;
31
+ }
32
+ export interface AuthorizationConfig {
33
+ allowed_action: string;
34
+ allowed_protocol: string;
35
+ allowed_token: string;
36
+ max_value_per_tx: string;
37
+ max_value_total: string;
38
+ valid_from: string;
39
+ valid_until: string;
40
+ }
41
+ export interface AuthorizationAction {
42
+ actionType: string | number;
43
+ protocol: string;
44
+ token: string;
45
+ value: string | number;
46
+ currentTimestamp?: string | number;
47
+ cumulativeSpend?: string | number;
29
48
  }
30
49
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/policy/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/policy/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC"}
package/package.json CHANGED
@@ -1,37 +1,48 @@
1
1
  {
2
2
  "name": "@catp-protocol/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Cryptographic Agent Trust Protocol — local enforcement plugin for Claude Code with TOML policy and tamper-evident audit log",
5
- "keywords": ["claude-code", "ai-agents", "policy", "audit", "hooks", "trust", "zk"],
5
+ "keywords": [
6
+ "claude-code",
7
+ "ai-agents",
8
+ "policy",
9
+ "audit",
10
+ "hooks",
11
+ "trust",
12
+ "zk"
13
+ ],
6
14
  "license": "MIT",
7
15
  "homepage": "https://github.com/lfzkoala/catp#readme",
8
16
  "bugs": "https://github.com/lfzkoala/catp/issues",
9
17
  "repository": {
10
18
  "type": "git",
11
- "url": "https://github.com/lfzkoala/catp.git"
19
+ "url": "git+https://github.com/lfzkoala/catp.git"
12
20
  },
13
21
  "type": "module",
14
22
  "bin": {
15
- "catp": "./dist/cli.js"
23
+ "catp": "dist/cli.js"
16
24
  },
17
- "files": ["dist"],
25
+ "files": [
26
+ "dist"
27
+ ],
18
28
  "engines": {
19
29
  "node": ">=20"
20
30
  },
21
31
  "scripts": {
22
32
  "build": "tsc",
23
33
  "typecheck": "tsc --noEmit",
24
- "test": "node --experimental-vm-modules node_modules/.bin/jest",
25
- "test:coverage": "node --experimental-vm-modules node_modules/.bin/jest --coverage --ci"
34
+ "test": "node --experimental-vm-modules ../node_modules/.bin/jest --config jest.config.cjs",
35
+ "test:coverage": "node --experimental-vm-modules ../node_modules/.bin/jest --config jest.config.cjs --coverage --ci"
26
36
  },
27
37
  "dependencies": {
28
38
  "commander": "^12.0.0",
29
39
  "micromatch": "^4.0.5",
30
- "smol-toml": "^1.3.0"
40
+ "smol-toml": "^1.3.0",
41
+ "viem": "^2"
31
42
  },
32
43
  "devDependencies": {
33
44
  "@types/micromatch": "^4.0.6",
34
- "@types/node": "^20.0.0",
45
+ "@types/node": "^20.19.39",
35
46
  "jest": "^29.0.0",
36
47
  "ts-jest": "^29.0.0",
37
48
  "typescript": "^5.4.0"