@catp-protocol/cli 0.7.1 → 0.7.3
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/audit/logger.d.ts.map +1 -1
- package/dist/audit/logger.js +32 -4
- package/dist/audit/logger.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/hook/runtime.d.ts +8 -1
- package/dist/hook/runtime.d.ts.map +1 -1
- package/dist/hook/runtime.js +48 -6
- package/dist/hook/runtime.js.map +1 -1
- package/dist/policy/engine.d.ts.map +1 -1
- package/dist/policy/engine.js +31 -5
- package/dist/policy/engine.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAexD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAY,EAClB,WAAW,GAAE,MAAM,GAAG,IAAW,EACjC,YAAY,GAAE,MAAW,EACzB,aAAa,CAAC,EAAE,mBAAmB,EACnC,iBAAiB,GAAE,CAAC,GAAG,CAAC,GAAG,CAAK,EAChC,KAAK,CAAC,EAAE,YAAY,GACnB,MAAM,CASR;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGxD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzD;AAsCD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAKzE;AAED,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,UAAU,CAAA;CAAE,EAC1E,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,CAAC,GACnC,CAAC,CAUH;AAkCD,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,cAAc,GAAE,MAAY,GAC3B,UAAU,CA4BZ;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,UAAU,GAAG,mBAAmB,GAAG,SAAS,CAsB7F"}
|
package/dist/audit/logger.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync,
|
|
2
|
+
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readSync, statSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { lockSync } from "proper-lockfile";
|
|
5
5
|
import { auditDirForDate } from "./paths.js";
|
|
6
6
|
const AUDIT_LOCK_STALE_MS = 5_000;
|
|
7
7
|
const AUDIT_LOCK_WAIT_MS = 2_000;
|
|
8
8
|
const AUDIT_LOCK_RETRY_MS = 10;
|
|
9
|
+
// Tail recovery reads only this suffix of the daily file: audit entries are
|
|
10
|
+
// bounded (input summaries are capped), so the last line always fits, and
|
|
11
|
+
// append cost stays constant as the daily log grows.
|
|
12
|
+
const AUDIT_TAIL_READ_BYTES = 64 * 1024;
|
|
9
13
|
const lockWaitBuffer = new Int32Array(new SharedArrayBuffer(4));
|
|
10
14
|
// Phase 0: SHA-256 audit commitment.
|
|
11
15
|
// Chains on fields stored in the log (tool, decision, ts, prev) so the chain
|
|
@@ -37,16 +41,40 @@ export function getLastCommitment(agentId) {
|
|
|
37
41
|
function getLastCommitmentFromFile(file) {
|
|
38
42
|
if (!existsSync(file))
|
|
39
43
|
return "0";
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
44
|
+
const lastLine = readLastAuditLine(file);
|
|
45
|
+
if (lastLine === null)
|
|
42
46
|
return "0";
|
|
43
|
-
const lastLine = content.split("\n").pop() ?? "";
|
|
44
47
|
const entry = JSON.parse(lastLine);
|
|
45
48
|
if (typeof entry.commitment !== "string" || !/^[0-9a-f]{64}$/i.test(entry.commitment)) {
|
|
46
49
|
throw new Error(`invalid audit log tail in ${file}`);
|
|
47
50
|
}
|
|
48
51
|
return entry.commitment;
|
|
49
52
|
}
|
|
53
|
+
function readLastAuditLine(file) {
|
|
54
|
+
const size = statSync(file).size;
|
|
55
|
+
if (size === 0)
|
|
56
|
+
return null;
|
|
57
|
+
const fd = openSync(file, "r");
|
|
58
|
+
try {
|
|
59
|
+
const chunkSize = Math.min(size, AUDIT_TAIL_READ_BYTES);
|
|
60
|
+
const buffer = Buffer.alloc(chunkSize);
|
|
61
|
+
readSync(fd, buffer, 0, chunkSize, size - chunkSize);
|
|
62
|
+
let text = buffer.toString("utf8");
|
|
63
|
+
// A valid file ends every entry with a newline, so the suffix must
|
|
64
|
+
// contain one unless the whole file is a single oversized line.
|
|
65
|
+
if (size > chunkSize && !text.includes("\n")) {
|
|
66
|
+
throw new Error(`invalid audit log tail in ${file}`);
|
|
67
|
+
}
|
|
68
|
+
text = text.trimEnd();
|
|
69
|
+
if (!text)
|
|
70
|
+
return null;
|
|
71
|
+
const cut = text.lastIndexOf("\n");
|
|
72
|
+
return cut === -1 ? text : text.slice(cut + 1);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
closeSync(fd);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
50
78
|
export function appendAuditEntry(agentId, entry) {
|
|
51
79
|
const dir = auditDir(agentId);
|
|
52
80
|
mkdirSync(dir, { recursive: true });
|
package/dist/audit/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/audit/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA0DA,wBAAgB,cAAc,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAE7E;AAED,wBAAgB,OAAO,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAiBpE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,6 +6,15 @@ version = "1"
|
|
|
6
6
|
|
|
7
7
|
# Rules are evaluated top-to-bottom; first match wins.
|
|
8
8
|
# Omit pattern/path fields to match any invocation of that tool.
|
|
9
|
+
# Command patterns are matched against the raw command string; CATP does not
|
|
10
|
+
# parse shell syntax. Keep the control-operator deny rule below ahead of any
|
|
11
|
+
# Bash allow rule so allowlisted commands cannot be chained into others.
|
|
12
|
+
|
|
13
|
+
[[rules]]
|
|
14
|
+
tool = "Bash"
|
|
15
|
+
allow = false
|
|
16
|
+
pattern = ["&&", ";", "|", "\`", "$("]
|
|
17
|
+
reason = "Compound shell commands are blocked; remove this rule only if you understand the bypass risk"
|
|
9
18
|
|
|
10
19
|
[[rules]]
|
|
11
20
|
tool = "Bash"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ChB,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;CAS9B,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAoC,EAAE;IACnE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,sBAAsB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAoC,EAAE;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa;QAC1C,CAAC,CAAC,sEAAsE;YACtE,qGAAqG;QACvG,CAAC,CAAC,qGAAqG,CAAC;IAC1G,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C;QAC3C,iEAAiE;QACjE,2BAA2B;QAC3B,iBAAiB,CAClB,CAAC;AACJ,CAAC"}
|
package/dist/hook/runtime.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { RuntimeAdapter, RuntimePhase, ToolAction } from "../runtime/types.js";
|
|
2
|
+
export declare const HOOK_STDIN_MAX_BYTES: number;
|
|
3
|
+
export declare const HOOK_STDIN_DEADLINE_MS = 10000;
|
|
4
|
+
export interface ReadStreamOptions {
|
|
5
|
+
maxBytes?: number;
|
|
6
|
+
deadlineMs?: number;
|
|
7
|
+
}
|
|
2
8
|
export declare function parseHookAction(raw: string, adapter: RuntimeAdapter, phase: RuntimePhase): ToolAction | null;
|
|
3
|
-
export declare function readStdin(): Promise<string>;
|
|
9
|
+
export declare function readStdin(opts?: ReadStreamOptions): Promise<string>;
|
|
10
|
+
export declare function readStream(stream: NodeJS.ReadableStream, opts?: ReadStreamOptions): Promise<string>;
|
|
4
11
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/hook/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/hook/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKpF,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAChD,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,GAClB,UAAU,GAAG,IAAI,CAWnB;AAED,wBAAsB,SAAS,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7E;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,CAAC,cAAc,EAC7B,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
|
package/dist/hook/runtime.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
// Hook payloads are small tool-event JSON documents. Cap and deadline keep a
|
|
2
|
+
// hostile or stuck runtime pipe from exhausting enforcement-process memory or
|
|
3
|
+
// hanging the hook; violations reject, and the CLI fail-closed path blocks.
|
|
4
|
+
export const HOOK_STDIN_MAX_BYTES = 1024 * 1024;
|
|
5
|
+
export const HOOK_STDIN_DEADLINE_MS = 10_000;
|
|
1
6
|
export function parseHookAction(raw, adapter, phase) {
|
|
2
7
|
let parsed;
|
|
3
8
|
try {
|
|
@@ -10,13 +15,50 @@ export function parseHookAction(raw, adapter, phase) {
|
|
|
10
15
|
? adapter.fromPreToolUse(parsed)
|
|
11
16
|
: adapter.fromPostToolUse(parsed);
|
|
12
17
|
}
|
|
13
|
-
export async function readStdin() {
|
|
14
|
-
return
|
|
18
|
+
export async function readStdin(opts = {}) {
|
|
19
|
+
return readStream(process.stdin, opts);
|
|
20
|
+
}
|
|
21
|
+
export function readStream(stream, opts = {}) {
|
|
22
|
+
const maxBytes = opts.maxBytes ?? HOOK_STDIN_MAX_BYTES;
|
|
23
|
+
const deadlineMs = opts.deadlineMs ?? HOOK_STDIN_DEADLINE_MS;
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
15
25
|
let data = "";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
let bytes = 0;
|
|
27
|
+
let settled = false;
|
|
28
|
+
const timer = setTimeout(() => {
|
|
29
|
+
finish(() => reject(new Error(`hook stdin deadline exceeded (${deadlineMs}ms)`)));
|
|
30
|
+
}, deadlineMs);
|
|
31
|
+
function finish(settle) {
|
|
32
|
+
if (settled)
|
|
33
|
+
return;
|
|
34
|
+
settled = true;
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
stream.removeListener("data", onData);
|
|
37
|
+
stream.removeListener("end", onEnd);
|
|
38
|
+
stream.removeListener("error", onError);
|
|
39
|
+
if (typeof stream.destroy === "function") {
|
|
40
|
+
stream.destroy();
|
|
41
|
+
}
|
|
42
|
+
settle();
|
|
43
|
+
}
|
|
44
|
+
function onData(chunk) {
|
|
45
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
46
|
+
bytes += Buffer.byteLength(text, "utf8");
|
|
47
|
+
if (bytes > maxBytes) {
|
|
48
|
+
finish(() => reject(new Error(`hook stdin exceeded ${maxBytes} byte limit`)));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
data += text;
|
|
52
|
+
}
|
|
53
|
+
function onEnd() {
|
|
54
|
+
finish(() => resolve(data));
|
|
55
|
+
}
|
|
56
|
+
function onError() {
|
|
57
|
+
finish(() => resolve(""));
|
|
58
|
+
}
|
|
59
|
+
stream.on("data", onData);
|
|
60
|
+
stream.on("end", onEnd);
|
|
61
|
+
stream.on("error", onError);
|
|
20
62
|
});
|
|
21
63
|
}
|
|
22
64
|
//# sourceMappingURL=runtime.js.map
|
package/dist/hook/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/hook/runtime.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,OAAuB,EACvB,KAAmB;IAEnB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,KAAK,KAAK;QACpB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/hook/runtime.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAO7C,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,OAAuB,EACvB,KAAmB;IAEnB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,KAAK,KAAK;QACpB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA0B,EAAE;IAC1D,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAA6B,EAC7B,OAA0B,EAAE;IAE5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,oBAAoB,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,sBAAsB,CAAC;IAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,SAAS,MAAM,CAAC,MAAkB;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,IAAI,OAAQ,MAA4B,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC/D,MAA4B,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,EAAE,CAAC;QACX,CAAC;QAED,SAAS,MAAM,CAAC,KAAsB;YACpC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxE,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,QAAQ,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YACD,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QAED,SAAS,KAAK;YACZ,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,SAAS,OAAO;YACd,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/policy/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/policy/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,QAAQ,CAiBxE"}
|
package/dist/policy/engine.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import micromatch from "micromatch";
|
|
2
|
+
import { posix as posixPath } from "node:path";
|
|
2
3
|
export function evaluate(policy, input) {
|
|
3
4
|
const toolRules = policy.rules.filter((r) => r.tool === "*" || r.tool === input.toolName);
|
|
4
5
|
for (const rule of toolRules) {
|
|
@@ -18,18 +19,22 @@ function matchesRule(rule, input) {
|
|
|
18
19
|
const command = extractCommand(input);
|
|
19
20
|
if (command === null)
|
|
20
21
|
return false;
|
|
21
|
-
return rule.pattern.some((p) =>
|
|
22
|
+
return rule.pattern.some((p) => commandGlobMatches(p, command) || command.includes(p));
|
|
22
23
|
}
|
|
23
24
|
if (rule.path_allowlist || rule.path_denylist) {
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
25
|
+
const rawPath = extractPath(input);
|
|
26
|
+
if (rawPath === null)
|
|
26
27
|
return false;
|
|
28
|
+
// Lexical normalization collapses dot segments and redundant separators on
|
|
29
|
+
// both sides so "src/../secrets/x" cannot slip past an allowlist label.
|
|
30
|
+
// Symlink and runtime-CWD resolution remain host-side residual risk.
|
|
31
|
+
const filePath = normalizePathLabel(rawPath);
|
|
27
32
|
if (rule.path_denylist && rule.path_denylist.length > 0) {
|
|
28
|
-
if (micromatch.isMatch(filePath, rule.path_denylist))
|
|
33
|
+
if (micromatch.isMatch(filePath, rule.path_denylist.map(normalizePathLabel)))
|
|
29
34
|
return true;
|
|
30
35
|
}
|
|
31
36
|
if (rule.path_allowlist && rule.path_allowlist.length > 0) {
|
|
32
|
-
return !micromatch.isMatch(filePath, rule.path_allowlist);
|
|
37
|
+
return !micromatch.isMatch(filePath, rule.path_allowlist.map(normalizePathLabel));
|
|
33
38
|
}
|
|
34
39
|
// path condition present but file didn't match denylist and no allowlist — no match
|
|
35
40
|
return false;
|
|
@@ -49,4 +54,25 @@ function extractPath(input) {
|
|
|
49
54
|
}
|
|
50
55
|
return null;
|
|
51
56
|
}
|
|
57
|
+
function normalizePathLabel(value) {
|
|
58
|
+
return posixPath.normalize(value);
|
|
59
|
+
}
|
|
60
|
+
// Command patterns use shell-style glob semantics: "*" matches any run of
|
|
61
|
+
// characters including "/" and "?" matches any single character. micromatch is
|
|
62
|
+
// deliberately not used here because it treats "/" as a path-segment boundary,
|
|
63
|
+
// so glob patterns like "rm -rf*" silently fail to match commands containing
|
|
64
|
+
// absolute paths ("rm -rf /tmp/x"). Path rules keep micromatch glob semantics.
|
|
65
|
+
const commandGlobCache = new Map();
|
|
66
|
+
function commandGlobMatches(pattern, command) {
|
|
67
|
+
let re = commandGlobCache.get(pattern);
|
|
68
|
+
if (re === undefined) {
|
|
69
|
+
const source = pattern
|
|
70
|
+
.replace(/[.+^${}()|[\]\\*?]/g, "\\$&")
|
|
71
|
+
.replace(/\\\*/g, ".*")
|
|
72
|
+
.replace(/\\\?/g, ".");
|
|
73
|
+
re = new RegExp(`^${source}$`, "s");
|
|
74
|
+
commandGlobCache.set(pattern, re);
|
|
75
|
+
}
|
|
76
|
+
return re.test(command);
|
|
77
|
+
}
|
|
52
78
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/policy/engine.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/policy/engine.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.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"description": "Cryptographic Agent Trust Protocol — local enforcement plugin for Claude Code and OpenAI Codex CLI with TOML policy and tamper-evident audit log",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|