pi-codex-auto-review 0.1.4 → 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.
- package/NOTICE +4 -2
- package/README.ko.md +85 -0
- package/README.md +51 -52
- package/dist/approval-commands.d.ts +3 -3
- package/dist/approval-commands.js +112 -58
- package/dist/approval-commands.js.map +1 -1
- package/dist/approval-settings.d.ts +1 -1
- package/dist/approval-settings.js +17 -10
- package/dist/approval-settings.js.map +1 -1
- package/dist/approvals.d.ts +9 -9
- package/dist/approvals.js +195 -75
- package/dist/approvals.js.map +1 -1
- package/dist/audit.d.ts +1 -1
- package/dist/audit.js +37 -13
- package/dist/audit.js.map +1 -1
- package/dist/cli.js +60 -31
- package/dist/cli.js.map +1 -1
- package/dist/context-files.d.ts +2 -2
- package/dist/context-files.js +40 -19
- package/dist/context-files.js.map +1 -1
- package/dist/contracts.d.ts +39 -39
- package/dist/contracts.js +117 -51
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.js +145 -48
- package/dist/index.js.map +1 -1
- package/dist/pi-host.js +3 -3
- package/dist/pi-host.js.map +1 -1
- package/dist/policy/domains.js +17 -7
- package/dist/policy/domains.js.map +1 -1
- package/dist/policy/index.d.ts +7 -7
- package/dist/policy/index.js +379 -141
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/paths.js +31 -18
- package/dist/policy/paths.js.map +1 -1
- package/dist/policy/rule-engine.d.ts +2 -0
- package/dist/policy/rule-engine.js +283 -0
- package/dist/policy/rule-engine.js.map +1 -0
- package/dist/policy/rule-types.d.ts +30 -0
- package/dist/policy/rule-types.js +2 -0
- package/dist/policy/rule-types.js.map +1 -0
- package/dist/policy/rules-sync.d.ts +1 -0
- package/dist/policy/rules-sync.js +14 -0
- package/dist/policy/rules-sync.js.map +1 -0
- package/dist/policy/rules-worker.d.ts +1 -0
- package/dist/policy/rules-worker.js +14 -0
- package/dist/policy/rules-worker.js.map +1 -0
- package/dist/policy/rules.d.ts +4 -31
- package/dist/policy/rules.js +126 -38
- package/dist/policy/rules.js.map +1 -1
- package/dist/policy/shell.js +70 -41
- package/dist/policy/shell.js.map +1 -1
- package/dist/policy/starlark/builtins.d.ts +6 -0
- package/dist/policy/starlark/builtins.js +764 -0
- package/dist/policy/starlark/builtins.js.map +1 -0
- package/dist/policy/starlark/evaluator.d.ts +18 -0
- package/dist/policy/starlark/evaluator.js +518 -0
- package/dist/policy/starlark/evaluator.js.map +1 -0
- package/dist/policy/starlark/lexer.d.ts +14 -0
- package/dist/policy/starlark/lexer.js +189 -0
- package/dist/policy/starlark/lexer.js.map +1 -0
- package/dist/policy/starlark/parser.d.ts +140 -0
- package/dist/policy/starlark/parser.js +508 -0
- package/dist/policy/starlark/parser.js.map +1 -0
- package/dist/policy/starlark/validation.d.ts +4 -0
- package/dist/policy/starlark/validation.js +183 -0
- package/dist/policy/starlark/validation.js.map +1 -0
- package/dist/policy/starlark/values.d.ts +46 -0
- package/dist/policy/starlark/values.js +363 -0
- package/dist/policy/starlark/values.js.map +1 -0
- package/dist/reports.d.ts +1 -1
- package/dist/reports.js +66 -30
- package/dist/reports.js.map +1 -1
- package/dist/review/context.d.ts +3 -3
- package/dist/review/context.js +207 -71
- package/dist/review/context.js.map +1 -1
- package/dist/review/investigation.d.ts +2 -2
- package/dist/review/investigation.js +57 -16
- package/dist/review/investigation.js.map +1 -1
- package/dist/review/lifecycle.d.ts +1 -1
- package/dist/review/lifecycle.js +70 -27
- package/dist/review/lifecycle.js.map +1 -1
- package/dist/review/policy.js +10 -5
- package/dist/review/policy.js.map +1 -1
- package/dist/review/upstream-policy.js +1 -1
- package/dist/review/upstream-policy.js.map +1 -1
- package/dist/review/user-input.d.ts +3 -3
- package/dist/review/user-input.js +39 -16
- package/dist/review/user-input.js.map +1 -1
- package/dist/reviewer.d.ts +8 -8
- package/dist/reviewer.js +253 -75
- package/dist/reviewer.js.map +1 -1
- package/dist/signals.js +24 -9
- package/dist/signals.js.map +1 -1
- package/dist/startup.d.ts +4 -4
- package/dist/startup.js +139 -41
- package/dist/startup.js.map +1 -1
- package/dist/tools/controller.d.ts +16 -12
- package/dist/tools/controller.js +432 -121
- package/dist/tools/controller.js.map +1 -1
- package/dist/tools/environment.js +3 -1
- package/dist/tools/environment.js.map +1 -1
- package/dist/tools/executor.d.ts +1 -1
- package/dist/tools/executor.js +45 -28
- package/dist/tools/executor.js.map +1 -1
- package/dist/tools/external.d.ts +8 -8
- package/dist/tools/external.js +22 -11
- package/dist/tools/external.js.map +1 -1
- package/dist/tools/mcp.d.ts +6 -6
- package/dist/tools/mcp.js +208 -80
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/mutation-queue.js.map +1 -1
- package/docs/publishing.ko.md +114 -0
- package/docs/publishing.md +49 -47
- package/docs/security/dependencies.ko.md +54 -0
- package/docs/security/dependencies.md +27 -26
- package/docs/testing/auto-review-protection.ko.md +158 -0
- package/docs/testing/auto-review-protection.md +104 -99
- package/docs/usage.ko.md +242 -0
- package/docs/usage.md +125 -121
- package/package.json +106 -95
- package/dist/native/darwin-arm64/artifact.json +0 -5
- package/dist/native/darwin-arm64/pi-guard-execpolicy +0 -0
- package/dist/native/linux-x64/artifact.json +0 -5
- package/dist/native/linux-x64/pi-guard-execpolicy +0 -0
- package/native/execpolicy/LICENSE +0 -201
- package/native/execpolicy/NOTICE +0 -6
package/dist/cli.js
CHANGED
|
@@ -1,70 +1,99 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { homedir } from
|
|
3
|
-
import { join, resolve } from
|
|
4
|
-
import { pathToFileURL } from
|
|
5
|
-
import { InteractiveMode, runPrintMode, runRpcMode } from
|
|
6
|
-
import { createGuardedRuntime } from
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { InteractiveMode, runPrintMode, runRpcMode, } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
import { createGuardedRuntime } from "./startup.js";
|
|
7
7
|
export async function main(argv) {
|
|
8
|
-
let mode =
|
|
8
|
+
let mode = "tui", cwd = process.cwd(), agentDir = process.env.PI_CODING_AGENT_DIR ?? join(homedir(), ".pi", "agent"), settingsPath, isProjectTrusted;
|
|
9
9
|
let provider, modelId;
|
|
10
10
|
const prompts = [], trustedExtensionPaths = [];
|
|
11
11
|
for (let i = 0; i < argv.length; i++) {
|
|
12
12
|
const item = argv[i];
|
|
13
|
-
if (item ===
|
|
14
|
-
|
|
13
|
+
if (item === undefined)
|
|
14
|
+
continue;
|
|
15
|
+
if (item === "--help" || item === "-h") {
|
|
16
|
+
console.log("Usage: pi-codex-auto-review [--cwd path] [--agent-dir path] [--policy file] [--trust-project] [--extension path ...] [--provider provider --model model] [--mode tui|print|json|rpc] [prompt]\n--extension (-e) can be repeated. It trusts each code directory and rejects direct model tool writes to it. Paths are resolved from the invocation directory.");
|
|
15
17
|
return;
|
|
16
18
|
}
|
|
17
|
-
if (item ===
|
|
19
|
+
if (item === "--") {
|
|
18
20
|
prompts.push(...argv.slice(i + 1));
|
|
19
21
|
break;
|
|
20
22
|
}
|
|
21
|
-
if (item ===
|
|
23
|
+
if (item === "--trust-project") {
|
|
22
24
|
isProjectTrusted = true;
|
|
23
25
|
continue;
|
|
24
26
|
}
|
|
25
|
-
if ([
|
|
27
|
+
if ([
|
|
28
|
+
"--mode",
|
|
29
|
+
"--cwd",
|
|
30
|
+
"--agent-dir",
|
|
31
|
+
"--policy",
|
|
32
|
+
"--extension",
|
|
33
|
+
"-e",
|
|
34
|
+
"--provider",
|
|
35
|
+
"--model",
|
|
36
|
+
].includes(item)) {
|
|
26
37
|
const value = argv[++i];
|
|
27
|
-
if (!value || value.startsWith(
|
|
38
|
+
if (!value || value.startsWith("--"))
|
|
28
39
|
throw new Error(`${item}: a value is required`);
|
|
29
|
-
if (item ===
|
|
40
|
+
if (item === "--mode")
|
|
30
41
|
mode = value;
|
|
31
|
-
if (item ===
|
|
42
|
+
if (item === "--cwd")
|
|
32
43
|
cwd = value;
|
|
33
|
-
if (item ===
|
|
44
|
+
if (item === "--agent-dir")
|
|
34
45
|
agentDir = value;
|
|
35
|
-
if (item ===
|
|
46
|
+
if (item === "--policy")
|
|
36
47
|
settingsPath = value;
|
|
37
|
-
if (item ===
|
|
48
|
+
if (item === "--extension" || item === "-e")
|
|
38
49
|
trustedExtensionPaths.push(resolve(value));
|
|
39
|
-
if (item ===
|
|
50
|
+
if (item === "--provider")
|
|
40
51
|
provider = value;
|
|
41
|
-
if (item ===
|
|
52
|
+
if (item === "--model")
|
|
42
53
|
modelId = value;
|
|
43
54
|
}
|
|
44
|
-
else if (item ===
|
|
45
|
-
mode =
|
|
46
|
-
else if (item.startsWith(
|
|
55
|
+
else if (item === "-p")
|
|
56
|
+
mode = "print";
|
|
57
|
+
else if (item.startsWith("-"))
|
|
47
58
|
throw new Error(`Unsupported option: ${item}`);
|
|
48
59
|
else
|
|
49
60
|
prompts.push(item);
|
|
50
61
|
}
|
|
51
|
-
if (![
|
|
62
|
+
if (!["tui", "print", "json", "rpc"].includes(mode))
|
|
52
63
|
throw new Error(`Unsupported mode: ${mode}`);
|
|
53
64
|
if (Boolean(provider) !== Boolean(modelId))
|
|
54
|
-
throw new Error(
|
|
55
|
-
const runtime = await createGuardedRuntime({
|
|
65
|
+
throw new Error("--provider and --model must be specified together");
|
|
66
|
+
const runtime = await createGuardedRuntime({
|
|
67
|
+
cwd: resolve(cwd),
|
|
68
|
+
agentDir: resolve(agentDir),
|
|
69
|
+
settingsPath: settingsPath ? resolve(settingsPath) : undefined,
|
|
70
|
+
isProjectTrusted,
|
|
71
|
+
trustedExtensionPaths,
|
|
72
|
+
...(provider && modelId
|
|
73
|
+
? { modelSelection: { provider, id: modelId } }
|
|
74
|
+
: {}),
|
|
75
|
+
});
|
|
56
76
|
try {
|
|
57
|
-
if (mode ===
|
|
77
|
+
if (mode === "rpc")
|
|
58
78
|
await runRpcMode(runtime);
|
|
59
|
-
else if (mode ===
|
|
60
|
-
await new InteractiveMode(runtime, {
|
|
79
|
+
else if (mode === "tui")
|
|
80
|
+
await new InteractiveMode(runtime, {
|
|
81
|
+
initialMessage: prompts.join(" ") || undefined,
|
|
82
|
+
}).run();
|
|
61
83
|
else
|
|
62
|
-
process.exitCode = await runPrintMode(runtime, {
|
|
84
|
+
process.exitCode = await runPrintMode(runtime, {
|
|
85
|
+
mode: mode === "json" ? "json" : "text",
|
|
86
|
+
initialMessage: prompts.join(" ") || undefined,
|
|
87
|
+
});
|
|
63
88
|
}
|
|
64
89
|
finally {
|
|
65
90
|
await runtime.dispose();
|
|
66
91
|
}
|
|
67
92
|
}
|
|
68
|
-
if (process.argv[1] &&
|
|
69
|
-
|
|
93
|
+
if (process.argv[1] &&
|
|
94
|
+
import.meta.url === pathToFileURL(resolve(process.argv[1])).href)
|
|
95
|
+
main(process.argv.slice(2)).catch((error) => {
|
|
96
|
+
console.error(`pi-codex-auto-review: ${error.message}`);
|
|
97
|
+
process.exitCode = 1;
|
|
98
|
+
});
|
|
70
99
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/context-files.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type PermissionProfile } from
|
|
2
|
-
import type { GuardSettings } from
|
|
1
|
+
import { type PermissionProfile } from "./contracts.js";
|
|
2
|
+
import type { GuardSettings } from "./policy/index.js";
|
|
3
3
|
export interface ContextFile {
|
|
4
4
|
readonly path: string;
|
|
5
5
|
readonly content: string;
|
package/dist/context-files.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { dirname, join, resolve
|
|
3
|
-
import { GuardError } from
|
|
4
|
-
import { isWithin } from
|
|
5
|
-
const NAMES = [
|
|
6
|
-
function isMissing(error) {
|
|
1
|
+
import { closeSync, constants, fstatSync, openSync, readSync, realpathSync, statSync, } from "node:fs";
|
|
2
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
+
import { GuardError } from "./contracts.js";
|
|
4
|
+
import { isWithin } from "./policy/paths.js";
|
|
5
|
+
const NAMES = ["AGENTS.override.md", "AGENTS.md"];
|
|
6
|
+
function isMissing(error) {
|
|
7
|
+
return ["ENOENT", "ENOTDIR"].includes(error.code ?? "");
|
|
8
|
+
}
|
|
7
9
|
function isFilename(name) {
|
|
8
|
-
return !!name &&
|
|
10
|
+
return (!!name &&
|
|
11
|
+
![".", ".."].includes(name) &&
|
|
12
|
+
!name.includes("\0") &&
|
|
13
|
+
basename(name) === name &&
|
|
14
|
+
(process.platform !== "win32" || !/[\\:]/.test(name)));
|
|
9
15
|
}
|
|
10
16
|
function exists(path) {
|
|
11
17
|
try {
|
|
@@ -34,18 +40,26 @@ function choose(directory, names) {
|
|
|
34
40
|
function boundedRead(path, maxBytes, profile, isGlobal, agentDir) {
|
|
35
41
|
const target = realpathSync(path);
|
|
36
42
|
// Only the specifically selected global instruction file is an internal controller read.
|
|
37
|
-
const isGlobalInstruction = isGlobal &&
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
const isGlobalInstruction = isGlobal &&
|
|
44
|
+
target === join(realpathSync(agentDir), basename(path)) &&
|
|
45
|
+
NAMES.includes(basename(path));
|
|
46
|
+
if (!isGlobalInstruction &&
|
|
47
|
+
(profile.denyRead.some((root) => isWithin(target, root)) ||
|
|
48
|
+
!profile.readRoots.some((root) => isWithin(target, root)))) {
|
|
49
|
+
throw new GuardError("CONTEXT_FILE_DENIED", `Instruction file crosses a protected read boundary: ${path}`);
|
|
40
50
|
}
|
|
41
51
|
const expected = statSync(target);
|
|
42
52
|
if (!expected.isFile() || expected.nlink > 1)
|
|
43
|
-
throw new GuardError(
|
|
53
|
+
throw new GuardError("CONTEXT_FILE_DENIED", "Instruction file must be a regular file without hard-link aliases");
|
|
44
54
|
const fd = openSync(target, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
45
55
|
try {
|
|
46
56
|
const actual = fstatSync(fd);
|
|
47
|
-
if (!actual.isFile() ||
|
|
48
|
-
|
|
57
|
+
if (!actual.isFile() ||
|
|
58
|
+
actual.dev !== expected.dev ||
|
|
59
|
+
actual.ino !== expected.ino ||
|
|
60
|
+
actual.nlink > 1 ||
|
|
61
|
+
realpathSync(path) !== target)
|
|
62
|
+
throw new GuardError("CONTEXT_FILE_CHANGED", "Instruction file changed during loading");
|
|
49
63
|
const data = Buffer.alloc(Math.min(actual.size, maxBytes));
|
|
50
64
|
let count = 0;
|
|
51
65
|
while (count < data.length) {
|
|
@@ -54,8 +68,10 @@ function boundedRead(path, maxBytes, profile, isGlobal, agentDir) {
|
|
|
54
68
|
break;
|
|
55
69
|
count += read;
|
|
56
70
|
}
|
|
57
|
-
const content = data.subarray(0, count).toString(
|
|
58
|
-
return content.trim()
|
|
71
|
+
const content = data.subarray(0, count).toString("utf8");
|
|
72
|
+
return content.trim()
|
|
73
|
+
? { file: { path, content }, bytesRead: count }
|
|
74
|
+
: undefined;
|
|
59
75
|
}
|
|
60
76
|
finally {
|
|
61
77
|
closeSync(fd);
|
|
@@ -78,10 +94,10 @@ export function loadContextFiles(options) {
|
|
|
78
94
|
}
|
|
79
95
|
if (!options.isProjectTrusted || settings.projectDocMaxBytes === 0)
|
|
80
96
|
return result;
|
|
81
|
-
const cwd = resolve(options.cwd), markers = (settings.projectRootMarkers ?? [
|
|
97
|
+
const cwd = resolve(options.cwd), markers = (settings.projectRootMarkers ?? [".git"]).filter(isFilename);
|
|
82
98
|
let root;
|
|
83
99
|
for (let dir = cwd; markers.length; dir = dirname(dir)) {
|
|
84
|
-
if (markers.some(name => exists(join(dir, name)))) {
|
|
100
|
+
if (markers.some((name) => exists(join(dir, name)))) {
|
|
85
101
|
root = dir;
|
|
86
102
|
break;
|
|
87
103
|
}
|
|
@@ -94,13 +110,18 @@ export function loadContextFiles(options) {
|
|
|
94
110
|
dir = dirname(dir);
|
|
95
111
|
directories.unshift(dir);
|
|
96
112
|
}
|
|
97
|
-
const names = [
|
|
113
|
+
const names = [
|
|
114
|
+
...new Set([
|
|
115
|
+
...NAMES,
|
|
116
|
+
...settings.projectDocFallbackFilenames.filter(isFilename),
|
|
117
|
+
]),
|
|
118
|
+
];
|
|
98
119
|
let remaining = settings.projectDocMaxBytes;
|
|
99
120
|
for (const directory of directories) {
|
|
100
121
|
if (!remaining)
|
|
101
122
|
break;
|
|
102
123
|
const path = choose(directory, names);
|
|
103
|
-
if (!path || result.some(file => file.path === path))
|
|
124
|
+
if (!path || result.some((file) => file.path === path))
|
|
104
125
|
continue;
|
|
105
126
|
const file = boundedRead(path, remaining, profile, false, options.agentDir);
|
|
106
127
|
if (file) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-files.js","sourceRoot":"","sources":["../src/context-files.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"context-files.js","sourceRoot":"","sources":["../src/context-files.ts"],"names":[],"mappings":"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"}
|
package/dist/contracts.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type { ReadToolOptions } from
|
|
1
|
+
import type { ReadToolOptions } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
export type Json = null | boolean | number | string | Json[] | {
|
|
3
3
|
[key: string]: Json;
|
|
4
4
|
};
|
|
5
|
-
export type DecisionKind =
|
|
6
|
-
export type ActionSource =
|
|
7
|
-
export type EvidenceStatus =
|
|
8
|
-
export type ToolName =
|
|
5
|
+
export type DecisionKind = "allow" | "ask" | "deny";
|
|
6
|
+
export type ActionSource = "model" | "nested" | "user-bash" | "extension";
|
|
7
|
+
export type EvidenceStatus = "pass" | "fail" | "environment-blocked" | "not-run";
|
|
8
|
+
export type ToolName = "bash" | "read" | "edit" | "write" | "grep" | "find" | "ls";
|
|
9
9
|
export declare const TOOL_NAMES: readonly ToolName[];
|
|
10
10
|
export interface PermissionProfile {
|
|
11
|
-
readonly mode:
|
|
11
|
+
readonly mode: "read-only" | "workspace-write";
|
|
12
12
|
readonly readRoots: readonly string[];
|
|
13
13
|
readonly writeRoots: readonly string[];
|
|
14
14
|
readonly denyRead: readonly string[];
|
|
@@ -42,30 +42,30 @@ export interface PolicyDecision {
|
|
|
42
42
|
readonly actionDigest: string;
|
|
43
43
|
readonly delta: PermissionDelta;
|
|
44
44
|
readonly isHardDeny: boolean;
|
|
45
|
-
readonly approvalCategory?:
|
|
45
|
+
readonly approvalCategory?: "sandbox" | "rules" | "mcp_elicitations";
|
|
46
46
|
readonly requiresFreshReview?: boolean;
|
|
47
47
|
readonly requiresUserInput?: boolean;
|
|
48
48
|
readonly authority?: ExecutionAuthority;
|
|
49
49
|
}
|
|
50
|
-
export type ApprovalPolicy =
|
|
50
|
+
export type ApprovalPolicy = "on-request" | "never" | {
|
|
51
51
|
readonly sandbox: boolean;
|
|
52
52
|
readonly rules: boolean;
|
|
53
53
|
readonly mcp_elicitations?: boolean;
|
|
54
54
|
};
|
|
55
|
-
export type RiskLevel =
|
|
56
|
-
export type UserAuthorization =
|
|
55
|
+
export type RiskLevel = "low" | "medium" | "high" | "critical";
|
|
56
|
+
export type UserAuthorization = "unknown" | "low" | "medium" | "high";
|
|
57
57
|
/** Field names intentionally match the pinned Codex assessment wire format. */
|
|
58
58
|
export interface ReviewAssessment {
|
|
59
59
|
readonly risk_level: RiskLevel;
|
|
60
60
|
readonly user_authorization: UserAuthorization;
|
|
61
|
-
readonly outcome:
|
|
61
|
+
readonly outcome: "allow" | "deny";
|
|
62
62
|
readonly rationale: string;
|
|
63
63
|
}
|
|
64
|
-
export type ReviewTerminalState =
|
|
64
|
+
export type ReviewTerminalState = "approved" | "denied" | "timed-out" | "aborted" | "failed";
|
|
65
65
|
export interface ReviewContextItem {
|
|
66
66
|
readonly id: string;
|
|
67
|
-
readonly source:
|
|
68
|
-
readonly trust:
|
|
67
|
+
readonly source: "user" | "developer" | "agents" | "user-confirmation" | "assistant" | "tool-call" | "tool-result";
|
|
68
|
+
readonly trust: "authorization" | "evidence";
|
|
69
69
|
readonly content: Json;
|
|
70
70
|
readonly isTruncated?: boolean;
|
|
71
71
|
}
|
|
@@ -82,22 +82,22 @@ export interface ReviewBinding {
|
|
|
82
82
|
readonly policyDigest: string;
|
|
83
83
|
}
|
|
84
84
|
export type ReviewResult = ReviewBinding & ({
|
|
85
|
-
readonly status:
|
|
85
|
+
readonly status: "approved" | "denied";
|
|
86
86
|
readonly assessment: ReviewAssessment;
|
|
87
87
|
} | {
|
|
88
|
-
readonly status:
|
|
89
|
-
readonly failure:
|
|
88
|
+
readonly status: "timed-out" | "aborted" | "failed";
|
|
89
|
+
readonly failure: "timeout" | "cancelled" | "provider" | "invalid-output" | "investigation" | "context";
|
|
90
90
|
readonly reason: string;
|
|
91
91
|
});
|
|
92
92
|
export type ExecutionAuthority = {
|
|
93
|
-
readonly kind:
|
|
93
|
+
readonly kind: "sandbox" | "scoped-permissions";
|
|
94
94
|
readonly actionDigest: string;
|
|
95
95
|
} | {
|
|
96
|
-
readonly kind:
|
|
96
|
+
readonly kind: "command-rule";
|
|
97
97
|
readonly actionDigest: string;
|
|
98
98
|
readonly ruleDigest: string;
|
|
99
99
|
} | {
|
|
100
|
-
readonly kind:
|
|
100
|
+
readonly kind: "reviewed-command";
|
|
101
101
|
readonly actionDigest: string;
|
|
102
102
|
};
|
|
103
103
|
export interface RetryAuthorization {
|
|
@@ -115,7 +115,7 @@ export interface RecentDenial {
|
|
|
115
115
|
}
|
|
116
116
|
export interface Grant {
|
|
117
117
|
readonly id: string;
|
|
118
|
-
readonly scope:
|
|
118
|
+
readonly scope: "once" | "session" | "persistent";
|
|
119
119
|
readonly actionDigest: string;
|
|
120
120
|
readonly ruleDigest: string;
|
|
121
121
|
readonly sessionId: string;
|
|
@@ -125,10 +125,10 @@ export interface Grant {
|
|
|
125
125
|
}
|
|
126
126
|
export interface ToolResult {
|
|
127
127
|
content: ({
|
|
128
|
-
type:
|
|
128
|
+
type: "text";
|
|
129
129
|
text: string;
|
|
130
130
|
} | {
|
|
131
|
-
type:
|
|
131
|
+
type: "image";
|
|
132
132
|
data: string;
|
|
133
133
|
mimeType: string;
|
|
134
134
|
})[];
|
|
@@ -153,54 +153,54 @@ export interface NetworkApprovalRequest {
|
|
|
153
153
|
readonly port?: number;
|
|
154
154
|
}
|
|
155
155
|
export type WorkerJob = {
|
|
156
|
-
kind:
|
|
156
|
+
kind: "shell";
|
|
157
157
|
command: string;
|
|
158
158
|
cwd: string;
|
|
159
159
|
shellPath?: string;
|
|
160
160
|
timeoutSeconds?: number;
|
|
161
161
|
env?: NodeJS.ProcessEnv;
|
|
162
162
|
} | {
|
|
163
|
-
kind:
|
|
163
|
+
kind: "tool";
|
|
164
164
|
tool: ToolName;
|
|
165
165
|
args: Record<string, Json>;
|
|
166
166
|
cwd: string;
|
|
167
167
|
toolCallId: string;
|
|
168
|
-
options?: Omit<ReadToolOptions,
|
|
168
|
+
options?: Omit<ReadToolOptions, "operations">;
|
|
169
169
|
} | {
|
|
170
|
-
kind:
|
|
171
|
-
operation:
|
|
170
|
+
kind: "file";
|
|
171
|
+
operation: "read" | "write" | "mkdir" | "access" | "stat" | "list";
|
|
172
172
|
path: string;
|
|
173
173
|
content?: string;
|
|
174
174
|
cwd: string;
|
|
175
175
|
};
|
|
176
176
|
export type WorkerFrame = {
|
|
177
177
|
schemaVersion: 1;
|
|
178
|
-
type:
|
|
178
|
+
type: "data";
|
|
179
179
|
data: string;
|
|
180
180
|
} | {
|
|
181
181
|
schemaVersion: 1;
|
|
182
|
-
type:
|
|
182
|
+
type: "update";
|
|
183
183
|
result: ToolResult;
|
|
184
184
|
} | {
|
|
185
185
|
schemaVersion: 1;
|
|
186
|
-
type:
|
|
186
|
+
type: "result";
|
|
187
187
|
result: Json;
|
|
188
188
|
} | {
|
|
189
189
|
schemaVersion: 1;
|
|
190
|
-
type:
|
|
190
|
+
type: "error";
|
|
191
191
|
code: string;
|
|
192
192
|
message: string;
|
|
193
193
|
};
|
|
194
194
|
/** Only the unsandboxed broker's private IPC channel can send this control frame. */
|
|
195
195
|
export interface BrokerControlFrame {
|
|
196
196
|
readonly schemaVersion: 1;
|
|
197
|
-
readonly type:
|
|
197
|
+
readonly type: "workload-started";
|
|
198
198
|
readonly processGroupId: number;
|
|
199
199
|
}
|
|
200
200
|
/** Private controller/broker IPC only. Workload stdout must still reject these frame types. */
|
|
201
201
|
export interface BrokerNetworkRequest {
|
|
202
202
|
readonly schemaVersion: 1;
|
|
203
|
-
readonly type:
|
|
203
|
+
readonly type: "network-request";
|
|
204
204
|
readonly requestId: string;
|
|
205
205
|
readonly destination: NetworkApprovalRequest;
|
|
206
206
|
}
|
|
@@ -208,7 +208,7 @@ export interface TestEvidence {
|
|
|
208
208
|
readonly schemaVersion?: 1 | 2;
|
|
209
209
|
readonly runId?: string;
|
|
210
210
|
readonly artifactPath?: string;
|
|
211
|
-
readonly provenance?:
|
|
211
|
+
readonly provenance?: "executed" | "preserved-legacy" | "synthetic";
|
|
212
212
|
readonly startedAt?: string;
|
|
213
213
|
readonly recordedAt?: string;
|
|
214
214
|
readonly provider?: {
|
|
@@ -233,9 +233,9 @@ export interface TestEvidence {
|
|
|
233
233
|
readonly sourceDigest: string;
|
|
234
234
|
readonly contractDigest: string;
|
|
235
235
|
readonly runtimeVersions: Readonly<Record<string, string>>;
|
|
236
|
-
readonly evidenceKind:
|
|
236
|
+
readonly evidenceKind: "unit-doubles" | "simulated-provider-ui" | "native-os" | "workflow";
|
|
237
237
|
readonly nativeControls?: readonly {
|
|
238
|
-
kind:
|
|
238
|
+
kind: "allow" | "deny";
|
|
239
239
|
effect: string;
|
|
240
240
|
isObserved: boolean;
|
|
241
241
|
platform: string;
|
|
@@ -250,11 +250,11 @@ export declare function canonicalJson(value: unknown): string;
|
|
|
250
250
|
export declare function digest(value: unknown): string;
|
|
251
251
|
export declare function immutable<T>(value: T): T;
|
|
252
252
|
export declare function createProfile(input: PermissionProfile): PermissionProfile;
|
|
253
|
-
export declare function createAction(input: Omit<GuardAction,
|
|
253
|
+
export declare function createAction(input: Omit<GuardAction, "schemaVersion" | "digest" | "permissionDigest">, profile: PermissionProfile): GuardAction;
|
|
254
254
|
/** Reusable grants still bind exact inputs/cwd/source/profile, but not a previous logical call id. */
|
|
255
255
|
export declare function ruleDigest(action: GuardAction): string;
|
|
256
256
|
/** A retry gets a new invocation ID, but cannot change session, semantics or context. */
|
|
257
257
|
export declare function retryIdentity(action: GuardAction, contextId: string): string;
|
|
258
|
-
export declare function approvalEligible(policy: ApprovalPolicy, category:
|
|
258
|
+
export declare function approvalEligible(policy: ApprovalPolicy, category: "sandbox" | "rules" | "mcp_elicitations"): boolean;
|
|
259
259
|
export declare function decision(action: GuardAction, kind: DecisionKind, reason: string, delta?: PermissionDelta, isHardDeny?: boolean): PolicyDecision;
|
|
260
260
|
export declare function validateWorkerFrame(value: unknown): WorkerFrame;
|