pi-codex-auto-review 0.1.3 → 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 (128) hide show
  1. package/NOTICE +4 -2
  2. package/README.ko.md +85 -0
  3. package/README.md +51 -52
  4. package/dist/approval-commands.d.ts +3 -3
  5. package/dist/approval-commands.js +161 -34
  6. package/dist/approval-commands.js.map +1 -1
  7. package/dist/approval-settings.d.ts +1 -1
  8. package/dist/approval-settings.js +17 -10
  9. package/dist/approval-settings.js.map +1 -1
  10. package/dist/approvals.d.ts +10 -9
  11. package/dist/approvals.js +196 -75
  12. package/dist/approvals.js.map +1 -1
  13. package/dist/audit.d.ts +1 -1
  14. package/dist/audit.js +37 -13
  15. package/dist/audit.js.map +1 -1
  16. package/dist/cli.js +63 -34
  17. package/dist/cli.js.map +1 -1
  18. package/dist/context-files.d.ts +2 -2
  19. package/dist/context-files.js +40 -19
  20. package/dist/context-files.js.map +1 -1
  21. package/dist/contracts.d.ts +39 -39
  22. package/dist/contracts.js +117 -51
  23. package/dist/contracts.js.map +1 -1
  24. package/dist/index.d.ts +9 -9
  25. package/dist/index.js +147 -43
  26. package/dist/index.js.map +1 -1
  27. package/dist/pi-host.js +3 -3
  28. package/dist/pi-host.js.map +1 -1
  29. package/dist/policy/domains.js +17 -7
  30. package/dist/policy/domains.js.map +1 -1
  31. package/dist/policy/index.d.ts +7 -7
  32. package/dist/policy/index.js +382 -139
  33. package/dist/policy/index.js.map +1 -1
  34. package/dist/policy/paths.js +31 -18
  35. package/dist/policy/paths.js.map +1 -1
  36. package/dist/policy/rule-engine.d.ts +2 -0
  37. package/dist/policy/rule-engine.js +283 -0
  38. package/dist/policy/rule-engine.js.map +1 -0
  39. package/dist/policy/rule-types.d.ts +30 -0
  40. package/dist/policy/rule-types.js +2 -0
  41. package/dist/policy/rule-types.js.map +1 -0
  42. package/dist/policy/rules-sync.d.ts +1 -0
  43. package/dist/policy/rules-sync.js +14 -0
  44. package/dist/policy/rules-sync.js.map +1 -0
  45. package/dist/policy/rules-worker.d.ts +1 -0
  46. package/dist/policy/rules-worker.js +14 -0
  47. package/dist/policy/rules-worker.js.map +1 -0
  48. package/dist/policy/rules.d.ts +4 -31
  49. package/dist/policy/rules.js +126 -38
  50. package/dist/policy/rules.js.map +1 -1
  51. package/dist/policy/shell.js +70 -41
  52. package/dist/policy/shell.js.map +1 -1
  53. package/dist/policy/starlark/builtins.d.ts +6 -0
  54. package/dist/policy/starlark/builtins.js +764 -0
  55. package/dist/policy/starlark/builtins.js.map +1 -0
  56. package/dist/policy/starlark/evaluator.d.ts +18 -0
  57. package/dist/policy/starlark/evaluator.js +518 -0
  58. package/dist/policy/starlark/evaluator.js.map +1 -0
  59. package/dist/policy/starlark/lexer.d.ts +14 -0
  60. package/dist/policy/starlark/lexer.js +189 -0
  61. package/dist/policy/starlark/lexer.js.map +1 -0
  62. package/dist/policy/starlark/parser.d.ts +140 -0
  63. package/dist/policy/starlark/parser.js +508 -0
  64. package/dist/policy/starlark/parser.js.map +1 -0
  65. package/dist/policy/starlark/validation.d.ts +4 -0
  66. package/dist/policy/starlark/validation.js +183 -0
  67. package/dist/policy/starlark/validation.js.map +1 -0
  68. package/dist/policy/starlark/values.d.ts +46 -0
  69. package/dist/policy/starlark/values.js +363 -0
  70. package/dist/policy/starlark/values.js.map +1 -0
  71. package/dist/reports.d.ts +1 -1
  72. package/dist/reports.js +66 -30
  73. package/dist/reports.js.map +1 -1
  74. package/dist/review/context.d.ts +16 -3
  75. package/dist/review/context.js +254 -48
  76. package/dist/review/context.js.map +1 -1
  77. package/dist/review/investigation.d.ts +2 -2
  78. package/dist/review/investigation.js +57 -16
  79. package/dist/review/investigation.js.map +1 -1
  80. package/dist/review/lifecycle.d.ts +1 -1
  81. package/dist/review/lifecycle.js +72 -29
  82. package/dist/review/lifecycle.js.map +1 -1
  83. package/dist/review/policy.js +27 -5
  84. package/dist/review/policy.js.map +1 -1
  85. package/dist/review/upstream-policy.js +1 -1
  86. package/dist/review/upstream-policy.js.map +1 -1
  87. package/dist/review/user-input.d.ts +5 -0
  88. package/dist/review/user-input.js +54 -0
  89. package/dist/review/user-input.js.map +1 -0
  90. package/dist/reviewer.d.ts +16 -6
  91. package/dist/reviewer.js +258 -70
  92. package/dist/reviewer.js.map +1 -1
  93. package/dist/signals.js +24 -9
  94. package/dist/signals.js.map +1 -1
  95. package/dist/startup.d.ts +4 -4
  96. package/dist/startup.js +139 -41
  97. package/dist/startup.js.map +1 -1
  98. package/dist/tools/controller.d.ts +19 -13
  99. package/dist/tools/controller.js +460 -118
  100. package/dist/tools/controller.js.map +1 -1
  101. package/dist/tools/environment.d.ts +1 -0
  102. package/dist/tools/environment.js +5 -0
  103. package/dist/tools/environment.js.map +1 -1
  104. package/dist/tools/executor.d.ts +1 -1
  105. package/dist/tools/executor.js +45 -28
  106. package/dist/tools/executor.js.map +1 -1
  107. package/dist/tools/external.d.ts +9 -8
  108. package/dist/tools/external.js +22 -11
  109. package/dist/tools/external.js.map +1 -1
  110. package/dist/tools/mcp.d.ts +6 -6
  111. package/dist/tools/mcp.js +208 -79
  112. package/dist/tools/mcp.js.map +1 -1
  113. package/dist/tools/mutation-queue.js.map +1 -1
  114. package/docs/publishing.ko.md +114 -0
  115. package/docs/publishing.md +49 -47
  116. package/docs/security/dependencies.ko.md +54 -0
  117. package/docs/security/dependencies.md +27 -26
  118. package/docs/testing/auto-review-protection.ko.md +158 -0
  119. package/docs/testing/auto-review-protection.md +105 -97
  120. package/docs/usage.ko.md +242 -0
  121. package/docs/usage.md +127 -111
  122. package/package.json +106 -95
  123. package/dist/native/darwin-arm64/artifact.json +0 -5
  124. package/dist/native/darwin-arm64/pi-guard-execpolicy +0 -0
  125. package/dist/native/linux-x64/artifact.json +0 -5
  126. package/dist/native/linux-x64/pi-guard-execpolicy +0 -0
  127. package/native/execpolicy/LICENSE +0 -201
  128. package/native/execpolicy/NOTICE +0 -6
package/dist/reports.js CHANGED
@@ -1,42 +1,78 @@
1
- import { GuardError } from './contracts.js';
1
+ import { GuardError } from "./contracts.js";
2
2
  export function validateEvidence(evidence, requiredBehavior, expected) {
3
- if (!evidence || !['pass', 'fail', 'environment-blocked', 'not-run'].includes(evidence.status))
4
- throw new GuardError('INVALID_EVIDENCE', 'Unknown evidence status');
5
- if (!evidence.testFiles?.length || new Set(evidence.testFiles).size !== evidence.testFiles.length || !evidence.tests?.length)
6
- throw new GuardError('MISSING_EVIDENCE', 'Missing or duplicate test files / empty suite');
7
- if (new Set(evidence.tests.map(t => t.name)).size !== evidence.tests.length)
8
- throw new GuardError('DUPLICATE_EVIDENCE', 'Duplicate test names');
9
- if (!evidence.contractDigest || !evidence.sourceDigest || !evidence.platform || !evidence.runtimeVersions || !Object.keys(evidence.runtimeVersions).length)
10
- throw new GuardError('STALE_EVIDENCE', 'Missing evidence versions');
11
- if (expected && (expected.contractDigest !== evidence.contractDigest || expected.sourceDigest !== evidence.sourceDigest))
12
- throw new GuardError('STALE_EVIDENCE', 'Evidence does not match current source');
3
+ if (!evidence ||
4
+ !["pass", "fail", "environment-blocked", "not-run"].includes(evidence.status))
5
+ throw new GuardError("INVALID_EVIDENCE", "Unknown evidence status");
6
+ if (!evidence.testFiles?.length ||
7
+ new Set(evidence.testFiles).size !== evidence.testFiles.length ||
8
+ !evidence.tests?.length)
9
+ throw new GuardError("MISSING_EVIDENCE", "Missing or duplicate test files / empty suite");
10
+ if (new Set(evidence.tests.map((t) => t.name)).size !==
11
+ evidence.tests.length)
12
+ throw new GuardError("DUPLICATE_EVIDENCE", "Duplicate test names");
13
+ if (!evidence.contractDigest ||
14
+ !evidence.sourceDigest ||
15
+ !evidence.platform ||
16
+ !evidence.runtimeVersions ||
17
+ !Object.keys(evidence.runtimeVersions).length)
18
+ throw new GuardError("STALE_EVIDENCE", "Missing evidence versions");
19
+ if (expected &&
20
+ (expected.contractDigest !== evidence.contractDigest ||
21
+ expected.sourceDigest !== evidence.sourceDigest))
22
+ throw new GuardError("STALE_EVIDENCE", "Evidence does not match current source");
13
23
  if (expected?.platform && evidence.platform !== expected.platform)
14
- throw new GuardError('WRONG_PLATFORM', 'Evidence does not match the required platform and architecture');
15
- if (expected?.requireRun && (evidence.schemaVersion !== 2 || !evidence.runId || !evidence.artifactPath || !evidence.startedAt || !evidence.recordedAt || evidence.provenance !== 'executed'))
16
- throw new GuardError('MISSING_PROVENANCE', 'Qualification requires an executed, addressable run');
17
- if (evidence.provenance === 'synthetic' && evidence.evidenceKind === 'native-os')
18
- throw new GuardError('FALSE_NATIVE', 'Synthetic storage fixtures cannot qualify native execution');
19
- if (evidence.status === 'pass') {
20
- if (evidence.blockedReasons.length || evidence.tests.some(t => t.status !== 'pass' || t.isSkipped))
21
- throw new GuardError('FALSE_PASS', 'Skipped, blocked or failed tests cannot pass');
24
+ throw new GuardError("WRONG_PLATFORM", "Evidence does not match the required platform and architecture");
25
+ if (expected?.requireRun &&
26
+ (evidence.schemaVersion !== 2 ||
27
+ !evidence.runId ||
28
+ !evidence.artifactPath ||
29
+ !evidence.startedAt ||
30
+ !evidence.recordedAt ||
31
+ evidence.provenance !== "executed"))
32
+ throw new GuardError("MISSING_PROVENANCE", "Qualification requires an executed, addressable run");
33
+ if (evidence.provenance === "synthetic" &&
34
+ evidence.evidenceKind === "native-os")
35
+ throw new GuardError("FALSE_NATIVE", "Synthetic storage fixtures cannot qualify native execution");
36
+ if (evidence.status === "pass") {
37
+ if (evidence.blockedReasons.length ||
38
+ evidence.tests.some((t) => t.status !== "pass" || t.isSkipped))
39
+ throw new GuardError("FALSE_PASS", "Skipped, blocked or failed tests cannot pass");
22
40
  for (const requirement of requiredBehavior) {
23
- if (!evidence.coveredBehavior.includes(requirement) || !evidence.tests.some(t => t.name.includes(`[${requirement}]`) && t.status === 'pass'))
24
- throw new GuardError('MISSING_COVERAGE', `Missing executed proof for ${requirement}`);
41
+ if (!evidence.coveredBehavior.includes(requirement) ||
42
+ !evidence.tests.some((t) => t.name.includes(`[${requirement}]`) &&
43
+ t.status === "pass"))
44
+ throw new GuardError("MISSING_COVERAGE", `Missing executed proof for ${requirement}`);
25
45
  }
26
- if (evidence.suite === 'native' && evidence.evidenceKind !== 'native-os')
27
- throw new GuardError('FALSE_NATIVE', 'Native evidence requires OS controls');
28
- if (evidence.suite === 'native' && (!evidence.nativeControls?.some(control => control.kind === 'allow' && control.isObserved && control.platform === evidence.platform) || !evidence.nativeControls.some(control => control.kind === 'deny' && control.isObserved && control.platform === evidence.platform)))
29
- throw new GuardError('FALSE_NATIVE', 'Native evidence requires observed permitted and denied controls');
46
+ if (evidence.suite === "native" &&
47
+ evidence.evidenceKind !== "native-os")
48
+ throw new GuardError("FALSE_NATIVE", "Native evidence requires OS controls");
49
+ if (evidence.suite === "native" &&
50
+ (!evidence.nativeControls?.some((control) => control.kind === "allow" &&
51
+ control.isObserved &&
52
+ control.platform === evidence.platform) ||
53
+ !evidence.nativeControls.some((control) => control.kind === "deny" &&
54
+ control.isObserved &&
55
+ control.platform === evidence.platform)))
56
+ throw new GuardError("FALSE_NATIVE", "Native evidence requires observed permitted and denied controls");
30
57
  }
31
58
  }
32
59
  export function validatePlatformEvidence(record, requirements, expected) {
33
- if (!record || record.status !== 'pass' || !record.runId || record.platform !== expected.platform || record.sourceDigest !== expected.sourceDigest || record.contractDigest !== expected.contractDigest)
34
- throw new GuardError('STALE_PLATFORM', 'Missing matching platform qualification');
60
+ if (record?.status !== "pass" ||
61
+ !record.runId ||
62
+ record.platform !== expected.platform ||
63
+ record.sourceDigest !== expected.sourceDigest ||
64
+ record.contractDigest !== expected.contractDigest)
65
+ throw new GuardError("STALE_PLATFORM", "Missing matching platform qualification");
35
66
  for (const [name, suite] of Object.entries(requirements)) {
36
67
  const result = record.results?.[name];
37
- validateEvidence(result, suite.behavior, { ...expected, requireRun: true });
38
- if (result.suite !== name || result.runId !== record.runId || result.status !== 'pass')
39
- throw new GuardError('INCOMPLETE_PLATFORM', 'Platform suites must pass in the recorded run');
68
+ validateEvidence(result, suite.behavior, {
69
+ ...expected,
70
+ requireRun: true,
71
+ });
72
+ if (result.suite !== name ||
73
+ result.runId !== record.runId ||
74
+ result.status !== "pass")
75
+ throw new GuardError("INCOMPLETE_PLATFORM", "Platform suites must pass in the recorded run");
40
76
  }
41
77
  }
42
78
  //# sourceMappingURL=reports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,37 @@
1
- import type { BeforeAgentStartEvent, ExtensionContext } from '@earendil-works/pi-coding-agent';
2
- import { type Json, type ReviewContext } from '../contracts.js';
1
+ import type { BeforeAgentStartEvent, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
+ import { type GuardAction, type Json, type ReviewContext, type ReviewContextItem, type ReviewResult } from "../contracts.js";
3
3
  export declare const AUTHORIZATION_ENTRY = "pi-codex-auto-review.authorization.v1";
4
+ export declare const REVIEW_CONTEXT_ENTRY = "pi-codex-auto-review.context.v1";
4
5
  export declare function safeEvidence(value: Json): Json;
5
6
  /** Retains genuine authorization separately from summaries and extension-generated messages. */
6
7
  export declare class ReviewContextStore {
8
+ private readonly persist?;
7
9
  private items;
8
10
  private sessionId;
9
11
  private contextId;
10
12
  private turnId;
11
13
  private authorizationVersion;
14
+ private instructionOptions?;
15
+ private nativeResultIds;
16
+ constructor(persist?: ((item: ReviewContextItem) => void) | undefined);
12
17
  get identity(): string;
13
18
  get turnIdentity(): string;
14
19
  get scopeVersion(): number;
15
- reset(sessionId: string, manager?: ExtensionContext['sessionManager']): void;
20
+ reset(sessionId: string, manager?: ExtensionContext["sessionManager"]): void;
16
21
  startTurn(): void;
17
22
  authorize(text: string, id?: string): void;
18
23
  confirm(content: Json, id?: string): void;
24
+ recordUserAnswer(content: Json): void;
19
25
  instructions(event: BeforeAgentStartEvent): void;
26
+ refreshInstructions(): void;
27
+ finalizeInstructions(): void;
20
28
  message(message: unknown, id?: string): void;
29
+ mainPrompt(text: string): void;
30
+ summary(text: string, id: string): void;
31
+ assessment(action: GuardAction, result: ReviewResult): void;
32
+ callIdentity(toolCallId: string): string;
21
33
  toolCall(content: Json, id: string): void;
34
+ preparedAction(action: GuardAction): void;
22
35
  toolResult(content: Json, id: string): void;
23
36
  private add;
24
37
  snapshot(maxChars: number, exactActionChars?: number): ReviewContext;
@@ -1,96 +1,294 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { canonicalJson, digest, GuardError, immutable } from '../contracts.js';
3
- import { redact } from '../audit.js';
4
- export const AUTHORIZATION_ENTRY = 'pi-codex-auto-review.authorization.v1';
1
+ import { randomUUID } from "node:crypto";
2
+ import { redact } from "../audit.js";
3
+ import { canonicalJson, digest, GuardError, immutable, } from "../contracts.js";
4
+ export const AUTHORIZATION_ENTRY = "pi-codex-auto-review.authorization.v1";
5
+ export const REVIEW_CONTEXT_ENTRY = "pi-codex-auto-review.context.v1";
5
6
  export function safeEvidence(value) {
6
- if (typeof value === 'string')
7
+ if (typeof value === "string")
7
8
  return redact(value);
8
9
  if (Array.isArray(value))
9
10
  return value.map(safeEvidence);
10
- if (value && typeof value === 'object')
11
- return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, /^(authorization|api[_-]?key|token|password|secret)$/i.test(key) ? '[REDACTED]' : safeEvidence(item)]));
11
+ if (value && typeof value === "object")
12
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
13
+ key,
14
+ /^(authorization|api[_-]?key|token|password|secret)$/i.test(key)
15
+ ? "[REDACTED]"
16
+ : safeEvidence(item),
17
+ ]));
12
18
  return value;
13
19
  }
14
20
  function visibleMessage(message) {
15
- if (!message || typeof message !== 'object')
21
+ if (!message || typeof message !== "object")
16
22
  return;
17
23
  const raw = message;
18
- if (!['assistant', 'toolResult', 'user'].includes(raw.role ?? ''))
24
+ const role = raw.role;
25
+ if (!role || !["assistant", "toolResult", "user"].includes(role))
19
26
  return;
20
- const content = typeof raw.content === 'string' ? raw.content : Array.isArray(raw.content) ? raw.content.flatMap(item => {
21
- if (item.type === 'text')
22
- return [{ type: 'text', text: String(item.text) }];
23
- if (item.type === 'toolCall')
24
- return [{ type: 'toolCall', id: String(item.id), name: String(item.name), arguments: JSON.parse(canonicalJson(item.arguments)) }];
25
- return []; // Private reasoning, signatures and binary payloads never enter review.
26
- }) : [];
27
- return safeEvidence({ role: raw.role, content, ...(raw.toolCallId ? { toolCallId: raw.toolCallId } : {}) });
27
+ const content = typeof raw.content === "string"
28
+ ? raw.content
29
+ : Array.isArray(raw.content)
30
+ ? raw.content.flatMap((item) => {
31
+ if (item.type === "text")
32
+ return [{ type: "text", text: String(item.text) }];
33
+ if (item.type === "toolCall")
34
+ return [
35
+ {
36
+ type: "toolCall",
37
+ id: String(item.id),
38
+ name: String(item.name),
39
+ arguments: JSON.parse(canonicalJson(item.arguments)),
40
+ },
41
+ ];
42
+ return []; // Private reasoning, signatures and binary payloads never enter review.
43
+ })
44
+ : [];
45
+ return safeEvidence({
46
+ role,
47
+ content,
48
+ ...(raw.toolCallId ? { toolCallId: raw.toolCallId } : {}),
49
+ ...(raw.toolName ? { tool: raw.toolName } : {}),
50
+ ...(typeof raw.isError === "boolean" ? { isError: raw.isError } : {}),
51
+ });
28
52
  }
29
53
  /** Retains genuine authorization separately from summaries and extension-generated messages. */
30
54
  export class ReviewContextStore {
55
+ persist;
31
56
  items = new Map();
32
- sessionId = '';
57
+ sessionId = "";
33
58
  contextId = randomUUID();
34
59
  turnId = randomUUID();
35
60
  authorizationVersion = 0;
36
- get identity() { return this.contextId; }
37
- get turnIdentity() { return this.turnId; }
38
- get scopeVersion() { return this.authorizationVersion; }
61
+ instructionOptions;
62
+ nativeResultIds = new Set();
63
+ constructor(persist) {
64
+ this.persist = persist;
65
+ }
66
+ get identity() {
67
+ return this.contextId;
68
+ }
69
+ get turnIdentity() {
70
+ return this.turnId;
71
+ }
72
+ get scopeVersion() {
73
+ return this.authorizationVersion;
74
+ }
39
75
  reset(sessionId, manager) {
40
76
  this.sessionId = sessionId;
41
77
  this.contextId = randomUUID();
42
78
  this.turnId = randomUUID();
43
79
  this.items.clear();
44
80
  this.authorizationVersion++;
81
+ this.instructionOptions = undefined;
82
+ this.nativeResultIds.clear();
45
83
  for (const entry of manager?.getBranch?.() ?? []) {
46
- if (entry.type === 'custom' && entry.customType === AUTHORIZATION_ENTRY) {
84
+ if (entry.type === "custom" &&
85
+ entry.customType === AUTHORIZATION_ENTRY) {
47
86
  const data = entry.data;
48
- if (typeof data?.text === 'string' && ['interactive', 'rpc'].includes(String(data.source)))
87
+ if (typeof data?.text === "string" &&
88
+ ["interactive", "rpc"].includes(String(data.source)))
49
89
  this.authorize(data.text, entry.id);
50
90
  }
51
- else if (entry.type === 'message')
91
+ else if (entry.type === "custom" &&
92
+ entry.customType === REVIEW_CONTEXT_ENTRY) {
93
+ const item = entry.data;
94
+ const isReview = item?.source === "assistant" &&
95
+ item.content &&
96
+ typeof item.content === "object" &&
97
+ !Array.isArray(item.content) &&
98
+ item.content.role === "previous-review";
99
+ if (item &&
100
+ typeof item.id === "string" &&
101
+ (["tool-call", "tool-result", "user-confirmation"].includes(item.source) ||
102
+ isReview) &&
103
+ item.trust ===
104
+ (item.source === "user-confirmation"
105
+ ? "authorization"
106
+ : "evidence") &&
107
+ item.content !== undefined) {
108
+ this.add(item.source, item.trust, item.content, item.id, false, item.isTruncated);
109
+ if (item.source === "tool-result" &&
110
+ item.content &&
111
+ typeof item.content === "object" &&
112
+ !Array.isArray(item.content) &&
113
+ typeof item.content.toolCallId === "string")
114
+ this.nativeResultIds.add(item.content.toolCallId);
115
+ }
116
+ }
117
+ else if (entry.type === "message")
52
118
  this.message(entry.message, entry.id);
53
- else if (entry.type === 'compaction' || entry.type === 'branch_summary')
54
- this.add('assistant', 'evidence', entry.summary, entry.id);
119
+ else if (entry.type === "compaction" ||
120
+ entry.type === "branch_summary")
121
+ this.summary(entry.summary, entry.id);
55
122
  }
56
123
  }
57
- startTurn() { this.turnId = randomUUID(); }
58
- authorize(text, id = randomUUID()) { this.add('user', 'authorization', text, id); }
59
- confirm(content, id = randomUUID()) { this.add('user-confirmation', 'authorization', content, id); }
124
+ startTurn() {
125
+ this.turnId = randomUUID();
126
+ this.nativeResultIds.clear();
127
+ }
128
+ authorize(text, id = randomUUID()) {
129
+ this.add("user", "authorization", text, id);
130
+ }
131
+ confirm(content, id = randomUUID()) {
132
+ this.add("user-confirmation", "authorization", content, id, true);
133
+ }
134
+ recordUserAnswer(content) {
135
+ this.confirm(content);
136
+ this.authorizationVersion++;
137
+ }
60
138
  instructions(event) {
139
+ // Pi shares this mutable options object across all before_agent_start handlers.
140
+ // Refresh again at admission, after later extensions have finished changing it.
141
+ this.instructionOptions = event.systemPromptOptions;
142
+ this.refreshInstructions();
143
+ }
144
+ refreshInstructions() {
145
+ const options = this.instructionOptions;
146
+ if (!options)
147
+ return;
148
+ const contextFiles = options.forceSystemPrompt !== undefined ? [] : options.contextFiles;
61
149
  // The structured runtime source establishes provenance, never a filename found in tool output.
62
- const current = new Set(event.systemPromptOptions.contextFiles.map(file => `agents:${file.path}`));
150
+ const current = new Set(contextFiles.map((file) => `agents:${file.path}`));
63
151
  for (const [id, item] of this.items)
64
- if (item.source === 'agents' && !current.has(id)) {
152
+ if (item.source === "agents" && !current.has(id)) {
65
153
  this.items.delete(id);
66
154
  this.authorizationVersion++;
67
155
  }
68
- for (const file of event.systemPromptOptions.contextFiles)
69
- this.add('agents', 'authorization', { path: file.path, content: file.content }, `agents:${file.path}`);
70
- for (const [name, content] of [['customPrompt', event.systemPromptOptions.customPrompt], ['appendSystemPrompt', event.systemPromptOptions.appendSystemPrompt]]) {
156
+ for (const file of contextFiles)
157
+ this.add("agents", "authorization", { path: file.path, content: file.content }, `agents:${file.path}`);
158
+ for (const name of [
159
+ "customPrompt",
160
+ "appendSystemPrompt",
161
+ "forceSystemPrompt",
162
+ ]) {
163
+ const content = options.forceSystemPrompt !== undefined &&
164
+ name !== "forceSystemPrompt"
165
+ ? undefined
166
+ : options[name];
71
167
  if (content)
72
- this.add('developer', 'authorization', content, `runtime:${name}`);
168
+ this.add("developer", "authorization", content, `runtime:${name}`);
169
+ else if (this.items.delete(`runtime:${name}`))
170
+ this.authorizationVersion++;
73
171
  }
74
172
  }
173
+ finalizeInstructions() {
174
+ this.refreshInstructions();
175
+ this.instructionOptions = undefined;
176
+ }
75
177
  message(message, id = randomUUID()) {
178
+ const raw = message;
179
+ // tool_execution_end carries the final result plus nested/structured metadata.
180
+ if (raw?.role === "toolResult" &&
181
+ raw.toolCallId &&
182
+ this.nativeResultIds.delete(raw.toolCallId))
183
+ return;
76
184
  const content = visibleMessage(message);
77
185
  if (content !== undefined)
78
- this.add(message.role === 'toolResult' ? 'tool-result' : 'assistant', 'evidence', content, id);
186
+ this.add(message.role === "toolResult"
187
+ ? "tool-result"
188
+ : "assistant", "evidence", content, id);
189
+ }
190
+ mainPrompt(text) {
191
+ this.add("assistant", "evidence", { role: "main-agent-system-prompt", text }, "runtime:main-prompt");
192
+ }
193
+ summary(text, id) {
194
+ this.add("assistant", "evidence", { role: "summary", text }, id);
195
+ }
196
+ assessment(action, result) {
197
+ this.add("assistant", "evidence", {
198
+ role: "previous-review",
199
+ callIdentity: this.callIdentity(action.toolCallId),
200
+ toolCallId: action.toolCallId,
201
+ actionDigest: action.digest,
202
+ result: JSON.parse(canonicalJson(result)),
203
+ }, `review:${this.callIdentity(action.toolCallId)}`, true);
79
204
  }
80
- toolCall(content, id) { this.add('tool-call', 'evidence', content, `call:${id}`); }
81
- toolResult(content, id) { this.add('tool-result', 'evidence', content, `result:${id}`); }
82
- add(source, trust, content, id) {
83
- if (trust === 'authorization' && source !== 'user-confirmation' && canonicalJson(this.items.get(id)?.content ?? null) !== canonicalJson(safeEvidence(content)))
205
+ callIdentity(toolCallId) {
206
+ return `${this.turnId}:${toolCallId}`;
207
+ }
208
+ toolCall(content, id) {
209
+ this.add("tool-call", "evidence", content, `call:${id}`);
210
+ }
211
+ preparedAction(action) {
212
+ const callIdentity = this.callIdentity(action.toolCallId), previous = this.items.get(`call:${callIdentity}`)?.content;
213
+ const metadata = previous && typeof previous === "object" && !Array.isArray(previous)
214
+ ? Object.fromEntries(Object.entries(previous).filter(([key]) => ["parentToolCallId", "parentCallIdentity"].includes(key)))
215
+ : {};
216
+ this.add("tool-call", "evidence", {
217
+ ...metadata,
218
+ stage: "prepared",
219
+ callIdentity,
220
+ toolCallId: action.toolCallId,
221
+ actionDigest: action.digest,
222
+ tool: action.tool,
223
+ args: action.args,
224
+ cwd: action.cwd,
225
+ source: action.source,
226
+ }, `call:${callIdentity}`, true);
227
+ }
228
+ toolResult(content, id) {
229
+ this.add("tool-result", "evidence", content, `result:${id}`, true);
230
+ if (content &&
231
+ typeof content === "object" &&
232
+ !Array.isArray(content) &&
233
+ typeof content.toolCallId === "string")
234
+ this.nativeResultIds.add(content.toolCallId);
235
+ }
236
+ add(source, trust, content, id, shouldPersist = false, isTruncated = false) {
237
+ let safe = safeEvidence(content);
238
+ const text = canonicalJson(safe), maxChars = source === "tool-call" || source === "tool-result"
239
+ ? 4000
240
+ : 20000;
241
+ if (trust === "evidence" && text.length > maxChars) {
242
+ const metadata = safe && typeof safe === "object" && !Array.isArray(safe)
243
+ ? Object.fromEntries(Object.entries(safe).filter(([key]) => [
244
+ "role",
245
+ "tool",
246
+ "toolCallId",
247
+ "parentToolCallId",
248
+ "callIdentity",
249
+ "parentCallIdentity",
250
+ "isError",
251
+ "stage",
252
+ ].includes(key)))
253
+ : {};
254
+ const half = Math.floor((maxChars - 300) / 2);
255
+ safe = {
256
+ ...metadata,
257
+ excerpt: `${text.slice(0, half)}\n<truncated reason="review-entry-budget" />\n${text.slice(-half)}`,
258
+ originalChars: text.length,
259
+ };
260
+ isTruncated = true;
261
+ }
262
+ if (trust === "authorization" &&
263
+ source !== "user-confirmation" &&
264
+ canonicalJson(this.items.get(id)?.content ?? null) !==
265
+ canonicalJson(safe))
84
266
  this.authorizationVersion++;
85
- this.items.set(id, immutable({ id, source, trust, content: safeEvidence(content) }));
267
+ const item = immutable({
268
+ id,
269
+ source,
270
+ trust,
271
+ content: safe,
272
+ ...(isTruncated ? { isTruncated: true } : {}),
273
+ });
274
+ this.items.set(id, item);
275
+ if (shouldPersist)
276
+ this.persist?.(item);
86
277
  }
87
278
  snapshot(maxChars, exactActionChars = 0) {
88
- const authorization = [...this.items.values()].filter(item => item.trust === 'authorization');
89
- const evidence = [...this.items.values()].filter(item => item.trust === 'evidence');
90
- const fields = { sessionId: this.sessionId, contextId: this.contextId, turnId: this.turnId };
91
- let remaining = maxChars - exactActionChars - canonicalJson({ ...fields, items: authorization }).length - 512;
279
+ const authorization = [...this.items.values()].filter((item) => item.trust === "authorization");
280
+ const evidence = [...this.items.values()].filter((item) => item.trust === "evidence");
281
+ const fields = {
282
+ sessionId: this.sessionId,
283
+ contextId: this.contextId,
284
+ turnId: this.turnId,
285
+ };
286
+ let remaining = maxChars -
287
+ exactActionChars -
288
+ canonicalJson({ ...fields, items: authorization }).length -
289
+ 512;
92
290
  if (remaining < 0)
93
- throw new GuardError('REVIEW_CONTEXT_OVERFLOW', 'Required authorization and exact action exceed review context capacity');
291
+ throw new GuardError("REVIEW_CONTEXT_OVERFLOW", "Required authorization and exact action exceed review context capacity");
94
292
  const retained = [];
95
293
  for (const item of evidence.reverse()) {
96
294
  const text = canonicalJson(item);
@@ -99,9 +297,17 @@ export class ReviewContextStore {
99
297
  remaining -= text.length;
100
298
  }
101
299
  }
300
+ const retainedIds = new Set([...authorization, ...retained].map((item) => item.id));
301
+ const ordered = [...this.items.values()].filter((item) => retainedIds.has(item.id));
102
302
  if (retained.length !== evidence.length)
103
- retained.unshift({ id: 'omission', source: 'assistant', trust: 'evidence', content: '<truncated reason="review-context-budget" />', isTruncated: true });
104
- const data = { ...fields, items: [...authorization, ...retained] };
303
+ ordered.unshift({
304
+ id: "omission",
305
+ source: "assistant",
306
+ trust: "evidence",
307
+ content: '<truncated reason="review-context-budget" />',
308
+ isTruncated: true,
309
+ });
310
+ const data = { ...fields, items: ordered };
105
311
  return immutable({ ...data, digest: digest(data) });
106
312
  }
107
313
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/review/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/review/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACH,aAAa,EACb,MAAM,EAEN,UAAU,EACV,SAAS,GAKZ,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,iCAAiC,CAAC;AACtE,MAAM,UAAU,YAAY,CAAC,KAAW;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAClC,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG;YACH,sDAAsD,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5D,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;SAC3B,CAAC,CACL,CAAC;IACN,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,cAAc,CAAC,OAAgB;IACpC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO;IACpD,MAAM,GAAG,GAAG,OAMX,CAAC;IACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACzE,MAAM,OAAO,GACT,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC3B,CAAC,CAAC,GAAG,CAAC,OAAO;QACb,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAC1B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBACpB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;oBACxB,OAAO;wBACH;4BACI,IAAI,EAAE,UAAU;4BAChB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;4BACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;4BACvB,SAAS,EAAE,IAAI,CAAC,KAAK,CACjB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAChC;yBACJ;qBACJ,CAAC;gBACN,OAAO,EAAE,CAAC,CAAC,wEAAwE;YACvF,CAAC,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;IACf,OAAO,YAAY,CAAC;QAChB,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;AACP,CAAC;AAED,gGAAgG;AAChG,MAAM,OAAO,kBAAkB;IAQE;IAPrB,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC7C,SAAS,GAAG,EAAE,CAAC;IACf,SAAS,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,GAAG,UAAU,EAAE,CAAC;IACtB,oBAAoB,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAgD;IAClE,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,YAA6B,OAA2C;QAA3C,YAAO,GAAP,OAAO,CAAoC;IAAG,CAAC;IAC5E,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IACD,KAAK,CACD,SAAiB,EACjB,OAA4C;QAE5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;YAC/C,IACI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACvB,KAAK,CAAC,UAAU,KAAK,mBAAmB,EAC1C,CAAC;gBACC,MAAM,IAAI,GAAG,KAAK,CAAC,IAA4C,CAAC;gBAChE,IACI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ;oBAC9B,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,IACH,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACvB,KAAK,CAAC,UAAU,KAAK,oBAAoB,EAC3C,CAAC;gBACC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAyB,CAAC;gBAC7C,MAAM,QAAQ,GACV,IAAI,EAAE,MAAM,KAAK,WAAW;oBAC5B,IAAI,CAAC,OAAO;oBACZ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;oBAChC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,iBAAiB,CAAC;gBAC5C,IACI,IAAI;oBACJ,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;oBAC3B,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CACvD,IAAI,CAAC,MAAM,CACd;wBACG,QAAQ,CAAC;oBACb,IAAI,CAAC,KAAK;wBACN,CAAC,IAAI,CAAC,MAAM,KAAK,mBAAmB;4BAChC,CAAC,CAAC,eAAe;4BACjB,CAAC,CAAC,UAAU,CAAC;oBACrB,IAAI,CAAC,OAAO,KAAK,SAAS,EAC5B,CAAC;oBACC,IAAI,CAAC,GAAG,CACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,EAAE,EACP,KAAK,EACL,IAAI,CAAC,WAAW,CACnB,CAAC;oBACF,IACI,IAAI,CAAC,MAAM,KAAK,aAAa;wBAC7B,IAAI,CAAC,OAAO;wBACZ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;wBAChC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;wBAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ;wBAE3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;iBACrC,IACD,KAAK,CAAC,IAAI,KAAK,YAAY;gBAC3B,KAAK,CAAC,IAAI,KAAK,gBAAgB;gBAE/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,SAAS;QACL,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IACD,SAAS,CAAC,IAAY,EAAE,KAAa,UAAU,EAAE;QAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,OAAa,EAAE,KAAa,UAAU,EAAE;QAC5C,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,gBAAgB,CAAC,OAAa;QAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IACD,YAAY,CAAC,KAA4B;QACrC,gFAAgF;QAChF,gFAAgF;QAChF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IACD,mBAAmB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,YAAY,GACd,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACxE,+FAA+F;QAC/F,MAAM,OAAO,GAAG,IAAI,GAAG,CACnB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CACpD,CAAC;QACF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAChC,CAAC;QACL,KAAK,MAAM,IAAI,IAAI,YAAY;YAC3B,IAAI,CAAC,GAAG,CACJ,QAAQ,EACR,eAAe,EACf,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAC1C,UAAU,IAAI,CAAC,IAAI,EAAE,CACxB,CAAC;QACN,KAAK,MAAM,IAAI,IAAI;YACf,cAAc;YACd,oBAAoB;YACpB,mBAAmB;SACb,EAAE,CAAC;YACT,MAAM,OAAO,GACT,OAAO,CAAC,iBAAiB,KAAK,SAAS;gBACvC,IAAI,KAAK,mBAAmB;gBACxB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,OAAO;gBACP,IAAI,CAAC,GAAG,CACJ,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,IAAI,EAAE,CACpB,CAAC;iBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;IACD,oBAAoB;QAChB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,OAAgB,EAAE,KAAa,UAAU,EAAE;QAC/C,MAAM,GAAG,GAAG,OAAiD,CAAC;QAC9D,+EAA+E;QAC/E,IACI,GAAG,EAAE,IAAI,KAAK,YAAY;YAC1B,GAAG,CAAC,UAAU;YACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAE3C,OAAO;QACX,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,KAAK,SAAS;YACrB,IAAI,CAAC,GAAG,CACH,OAA4B,CAAC,IAAI,KAAK,YAAY;gBAC/C,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,WAAW,EACjB,UAAU,EACV,OAAO,EACP,EAAE,CACL,CAAC;IACV,CAAC;IACD,UAAU,CAAC,IAAY;QACnB,IAAI,CAAC,GAAG,CACJ,WAAW,EACX,UAAU,EACV,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAC1C,qBAAqB,CACxB,CAAC;IACN,CAAC;IACD,OAAO,CAAC,IAAY,EAAE,EAAU;QAC5B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,UAAU,CAAC,MAAmB,EAAE,MAAoB;QAChD,IAAI,CAAC,GAAG,CACJ,WAAW,EACX,UAAU,EACV;YACI,IAAI,EAAE,iBAAiB;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;YAClD,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;SAC5C,EACD,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAChD,IAAI,CACP,CAAC;IACN,CAAC;IACD,YAAY,CAAC,UAAkB;QAC3B,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;IAC1C,CAAC;IACD,QAAQ,CAAC,OAAa,EAAE,EAAU;QAC9B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,cAAc,CAAC,MAAmB;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EACrD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC;QAC/D,MAAM,QAAQ,GACV,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChE,CAAC,CAAC,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CACtC,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAC/C,GAAG,CACN,CACJ,CACJ;YACH,CAAC,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CACJ,WAAW,EACX,UAAU,EACV;YACI,GAAG,QAAQ;YACX,KAAK,EAAE,UAAU;YACjB,YAAY;YACZ,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAY;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;SACxB,EACD,QAAQ,YAAY,EAAE,EACtB,IAAI,CACP,CAAC;IACN,CAAC;IACD,UAAU,CAAC,OAAa,EAAE,EAAU;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACnE,IACI,OAAO;YACP,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACvB,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YAEtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IACO,GAAG,CACP,MAAmC,EACnC,KAAiC,EACjC,OAAa,EACb,EAAU,EACV,aAAa,GAAG,KAAK,EACrB,WAAW,GAAG,KAAK;QAEnB,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,EAC5B,QAAQ,GACJ,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa;YAC9C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC;QACpB,IAAI,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACjD,MAAM,QAAQ,GACV,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACpD,CAAC,CAAC,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAClC;oBACI,MAAM;oBACN,MAAM;oBACN,YAAY;oBACZ,kBAAkB;oBAClB,cAAc;oBACd,oBAAoB;oBACpB,SAAS;oBACT,OAAO;iBACV,CAAC,QAAQ,CAAC,GAAG,CAAC,CAClB,CACJ;gBACH,CAAC,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,GAAG;gBACH,GAAG,QAAQ;gBACX,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,iDAAiD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;gBACnG,aAAa,EAAE,IAAI,CAAC,MAAM;aAC7B,CAAC;YACF,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IACI,KAAK,KAAK,eAAe;YACzB,MAAM,KAAK,mBAAmB;YAC9B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;gBAC9C,aAAa,CAAC,IAAI,CAAC;YAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,SAAS,CAAC;YACnB,EAAE;YACF,MAAM;YACN,KAAK;YACL,OAAO,EAAE,IAAI;YACb,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,aAAa;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ,CAAC,QAAgB,EAAE,gBAAgB,GAAG,CAAC;QAC3C,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACjD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,eAAe,CAC3C,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,CACtC,CAAC;QACF,MAAM,MAAM,GAAG;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC;QACF,IAAI,SAAS,GACT,QAAQ;YACR,gBAAgB;YAChB,aAAa,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM;YACzD,GAAG,CAAC;QACR,IAAI,SAAS,GAAG,CAAC;YACb,MAAM,IAAI,UAAU,CAChB,yBAAyB,EACzB,wEAAwE,CAC3E,CAAC;QACN,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC3B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,CACvB,CAAC,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CACzD,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAC3B,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YACnC,OAAO,CAAC,OAAO,CAAC;gBACZ,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,8CAA8C;gBACvD,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;QACP,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;CACJ"}
@@ -1,5 +1,5 @@
1
- import { type PermissionProfile } from '../contracts.js';
2
- import type { ToolExecutor } from '../tools/executor.js';
1
+ import { type PermissionProfile } from "../contracts.js";
2
+ import type { ToolExecutor } from "../tools/executor.js";
3
3
  export declare const INVESTIGATION_TOOLS: readonly [{
4
4
  readonly name: "inspect_file";
5
5
  readonly description: "Read local text without modifying it; use only when it changes the review decision.";