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/reviewer.js CHANGED
@@ -1,9 +1,9 @@
1
- import { canonicalJson, digest, GuardError, immutable } from './contracts.js';
2
- import { deadlineSignal, withSignal } from './signals.js';
3
- import { reviewPolicy } from './review/policy.js';
4
- import { safeEvidence } from './review/context.js';
5
- import { INVESTIGATION_TOOLS } from './review/investigation.js';
6
- import { DEFAULT_SETTINGS } from './policy/index.js';
1
+ import { canonicalJson, digest, GuardError, immutable, } from "./contracts.js";
2
+ import { DEFAULT_SETTINGS } from "./policy/index.js";
3
+ import { safeEvidence } from "./review/context.js";
4
+ import { INVESTIGATION_TOOLS, } from "./review/investigation.js";
5
+ import { reviewPolicy } from "./review/policy.js";
6
+ import { deadlineSignal, withSignal } from "./signals.js";
7
7
  export class PiReviewProvider {
8
8
  context;
9
9
  settings;
@@ -15,131 +15,319 @@ export class PiReviewProvider {
15
15
  }
16
16
  async complete(request, options) {
17
17
  const override = this.settings.reviewModel;
18
- const model = override ? this.context.modelRegistry.find(override.provider, override.id) : this.context.model;
18
+ const model = override
19
+ ? this.context.modelRegistry.find(override.provider, override.id)
20
+ : this.context.model;
19
21
  if (!model)
20
- throw new GuardError('REVIEW_PROVIDER', override ? 'Configured review model is unavailable' : 'No current Pi model is available for review');
22
+ throw new GuardError("REVIEW_PROVIDER", override
23
+ ? "Configured review model is unavailable"
24
+ : "No current Pi model is available for review");
21
25
  const maxTokens = Math.min(this.settings.reviewMaxOutputTokens, model.maxTokens ?? this.settings.reviewMaxOutputTokens);
22
- const context = { systemPrompt: request.systemPrompt, messages: [{ role: 'user', content: request.data, timestamp: Date.now() }], tools: this.investigation ? [...INVESTIGATION_TOOLS] : [] };
26
+ const context = {
27
+ systemPrompt: request.systemPrompt,
28
+ messages: [
29
+ { role: "user", content: request.data, timestamp: Date.now() },
30
+ ],
31
+ tools: this.investigation
32
+ ? [
33
+ ...INVESTIGATION_TOOLS,
34
+ ]
35
+ : [],
36
+ };
23
37
  const startedAt = Date.now();
24
38
  for (let round = 0; round < this.settings.reviewMaxRounds; round++) {
25
39
  options.signal.throwIfAborted();
26
- if (model.contextWindow && canonicalJson(context).length > Math.max(0, model.contextWindow - maxTokens) * 3)
27
- throw new GuardError('REVIEW_CONTEXT_OVERFLOW', 'Exact review request exceeds model context capacity');
28
- const response = await withSignal(this.context.modelRegistry.streamSimple(model, context, {
29
- signal: options.signal, timeoutMs: round === 0 ? options.timeoutMs : Math.max(1, options.timeoutMs - (Date.now() - startedAt)),
30
- maxTokens, temperature: 0,
31
- }).result(), options.signal);
40
+ if (model.contextWindow &&
41
+ canonicalJson(context).length >
42
+ Math.max(0, model.contextWindow - maxTokens) * 3)
43
+ throw new GuardError("REVIEW_CONTEXT_OVERFLOW", "Exact review request exceeds model context capacity");
44
+ const response = await withSignal(this.context.modelRegistry
45
+ .streamSimple(model, context, {
46
+ signal: options.signal,
47
+ timeoutMs: round === 0
48
+ ? options.timeoutMs
49
+ : Math.max(1, options.timeoutMs -
50
+ (Date.now() - startedAt)),
51
+ maxTokens,
52
+ temperature: 0,
53
+ })
54
+ .result(), options.signal);
32
55
  options.signal.throwIfAborted();
33
- if (response.stopReason === 'error' || response.stopReason === 'aborted' || response.stopReason === 'length')
34
- throw new GuardError('REVIEW_PROVIDER', 'Review model did not complete its response');
35
- const calls = response.content.filter(item => item.type === 'toolCall');
56
+ if (response.stopReason === "error" ||
57
+ response.stopReason === "aborted" ||
58
+ response.stopReason === "length")
59
+ throw new GuardError("REVIEW_PROVIDER", "Review model did not complete its response");
60
+ const calls = response.content.filter((item) => item.type === "toolCall");
36
61
  if (!calls.length)
37
- return response.content.filter(item => item.type === 'text').map(item => item.text).join('');
38
- if (!this.investigation || calls.length > 4 || round + 1 === this.settings.reviewMaxRounds)
39
- throw new GuardError('REVIEW_INVESTIGATION', 'Unsupported investigation or review round limit exceeded');
62
+ return response.content
63
+ .filter((item) => item.type === "text")
64
+ .map((item) => item.text)
65
+ .join("");
66
+ if (!this.investigation ||
67
+ calls.length > 4 ||
68
+ round + 1 === this.settings.reviewMaxRounds)
69
+ throw new GuardError("REVIEW_INVESTIGATION", "Unsupported investigation or review round limit exceeded");
40
70
  // Keep visible tool calls, never returned private reasoning, in the bounded follow-up.
41
- context.messages.push({ ...response, content: response.content.filter(item => item.type !== 'thinking') });
71
+ context.messages.push({
72
+ ...response,
73
+ content: response.content.filter((item) => item.type !== "thinking"),
74
+ });
42
75
  for (const call of calls) {
43
76
  let text;
44
77
  try {
45
78
  text = await withSignal(this.investigation.execute(call.name, call.arguments, options.signal), options.signal);
46
79
  }
47
80
  catch (cause) {
48
- throw new GuardError('REVIEW_INVESTIGATION', 'Read-only investigation failed', { cause });
81
+ throw new GuardError("REVIEW_INVESTIGATION", "Read-only investigation failed", { cause });
49
82
  }
50
- context.messages.push({ role: 'toolResult', toolCallId: call.id, toolName: call.name, content: [{ type: 'text', text }], isError: false, timestamp: Date.now() });
83
+ context.messages.push({
84
+ role: "toolResult",
85
+ toolCallId: call.id,
86
+ toolName: call.name,
87
+ content: [{ type: "text", text }],
88
+ isError: false,
89
+ timestamp: Date.now(),
90
+ });
51
91
  }
52
92
  }
53
- throw new GuardError('REVIEW_INVESTIGATION', 'Review round limit exceeded');
93
+ throw new GuardError("REVIEW_INVESTIGATION", "Review round limit exceeded");
54
94
  }
55
95
  }
56
96
  export function parseAssessment(value) {
57
- if (typeof value !== 'string' || value.length > 16000)
58
- throw new GuardError('REVIEW_PARSE', 'Invalid review output');
97
+ if (typeof value !== "string" || value.length > 16000)
98
+ throw new GuardError("REVIEW_PARSE", "Invalid review output");
59
99
  let data;
60
100
  try {
61
101
  data = JSON.parse(value);
62
102
  }
63
103
  catch {
64
- const first = value.indexOf('{'), last = value.lastIndexOf('}');
104
+ const first = value.indexOf("{"), last = value.lastIndexOf("}");
65
105
  if (first < 0 || last < first)
66
- throw new GuardError('REVIEW_PARSE', 'Invalid review JSON');
106
+ throw new GuardError("REVIEW_PARSE", "Invalid review JSON");
67
107
  try {
68
108
  data = JSON.parse(value.slice(first, last + 1));
69
109
  }
70
110
  catch {
71
- throw new GuardError('REVIEW_PARSE', 'Invalid review JSON');
111
+ throw new GuardError("REVIEW_PARSE", "Invalid review JSON");
72
112
  }
73
113
  }
74
- if (!data || typeof data !== 'object' || Array.isArray(data) || Object.keys(data).some(key => !['risk_level', 'user_authorization', 'outcome', 'rationale'].includes(key)) || typeof data.outcome !== 'string' || !['allow', 'deny'].includes(data.outcome))
75
- throw new GuardError('REVIEW_PARSE', 'Invalid review schema');
76
- const risk = data.risk_level === undefined ? (data.outcome === 'allow' ? 'low' : 'high') : data.risk_level;
77
- const authorization = data.user_authorization === undefined ? 'unknown' : data.user_authorization;
78
- if (typeof risk !== 'string' || !['low', 'medium', 'high', 'critical'].includes(risk) || typeof authorization !== 'string' || !['unknown', 'low', 'medium', 'high'].includes(authorization) || (data.rationale !== undefined && (typeof data.rationale !== 'string' || data.rationale.length > 4000)))
79
- throw new GuardError('REVIEW_PARSE', 'Invalid risk assessment');
80
- const rationale = typeof data.rationale === 'string' && data.rationale.trim() ? data.rationale : data.outcome === 'allow' ? 'Auto-review returned a low-risk allow decision.' : 'Auto-review denied the action without a rationale.';
81
- const cannotAllow = risk === 'critical' || (risk === 'high' && !['medium', 'high'].includes(authorization));
82
- return immutable({ risk_level: risk, user_authorization: authorization, outcome: cannotAllow ? 'deny' : data.outcome, rationale: cannotAllow && data.outcome === 'allow' ? 'Assessment contradicts the mandatory risk threshold' : rationale });
114
+ if (!data ||
115
+ typeof data !== "object" ||
116
+ Array.isArray(data) ||
117
+ Object.keys(data).some((key) => ![
118
+ "risk_level",
119
+ "user_authorization",
120
+ "outcome",
121
+ "rationale",
122
+ ].includes(key)) ||
123
+ typeof data.outcome !== "string" ||
124
+ !["allow", "deny"].includes(data.outcome))
125
+ throw new GuardError("REVIEW_PARSE", "Invalid review schema");
126
+ const risk = data.risk_level === undefined
127
+ ? data.outcome === "allow"
128
+ ? "low"
129
+ : "high"
130
+ : data.risk_level;
131
+ const authorization = data.user_authorization === undefined
132
+ ? "unknown"
133
+ : data.user_authorization;
134
+ if (typeof risk !== "string" ||
135
+ !["low", "medium", "high", "critical"].includes(risk) ||
136
+ typeof authorization !== "string" ||
137
+ !["unknown", "low", "medium", "high"].includes(authorization) ||
138
+ (data.rationale !== undefined &&
139
+ (typeof data.rationale !== "string" ||
140
+ data.rationale.length > 4000)))
141
+ throw new GuardError("REVIEW_PARSE", "Invalid risk assessment");
142
+ const rationale = typeof data.rationale === "string" && data.rationale.trim()
143
+ ? data.rationale
144
+ : data.outcome === "allow"
145
+ ? "Auto-review returned a low-risk allow decision."
146
+ : "Auto-review denied the action without a rationale.";
147
+ const cannotAllow = risk === "critical" ||
148
+ (risk === "high" && !["medium", "high"].includes(authorization));
149
+ return immutable({
150
+ risk_level: risk,
151
+ user_authorization: authorization,
152
+ outcome: cannotAllow ? "deny" : data.outcome,
153
+ rationale: cannotAllow && data.outcome === "allow"
154
+ ? "Assessment contradicts the mandatory risk threshold"
155
+ : rationale,
156
+ });
83
157
  }
84
158
  export function parseReview(value) {
85
- if (typeof value !== 'string' || value.length > 4096)
86
- throw new Error('Invalid review output');
159
+ if (typeof value !== "string" || value.length > 4096)
160
+ throw new Error("Invalid review output");
87
161
  const data = JSON.parse(value);
88
- if (!data || typeof data !== 'object' || Array.isArray(data) || Object.keys(data).some(key => !['decision', 'reason'].includes(key)) || typeof data.decision !== 'string' || !['allow', 'ask', 'deny'].includes(data.decision) || typeof data.reason !== 'string' || data.reason.length > 1000)
89
- throw new Error('Invalid review schema');
90
- return immutable({ decision: data.decision, reason: data.reason, isLegacy: true });
162
+ if (!data ||
163
+ typeof data !== "object" ||
164
+ Array.isArray(data) ||
165
+ Object.keys(data).some((key) => !["decision", "reason"].includes(key)) ||
166
+ typeof data.decision !== "string" ||
167
+ !["allow", "ask", "deny"].includes(data.decision) ||
168
+ typeof data.reason !== "string" ||
169
+ data.reason.length > 1000)
170
+ throw new Error("Invalid review schema");
171
+ return immutable({
172
+ decision: data.decision,
173
+ reason: data.reason,
174
+ isLegacy: true,
175
+ });
91
176
  }
92
177
  export async function reviewAction(options) {
93
178
  const { action, policyDecision } = options;
94
- if (policyDecision.actionDigest !== action.digest || policyDecision.isHardDeny || policyDecision.kind === 'deny')
95
- return { decision: 'deny', reason: 'Deterministic policy denied the action' };
96
- if (policyDecision.kind === 'allow')
97
- return { decision: 'allow', reason: policyDecision.reason };
179
+ if (policyDecision.actionDigest !== action.digest ||
180
+ policyDecision.isHardDeny ||
181
+ policyDecision.kind === "deny")
182
+ return {
183
+ decision: "deny",
184
+ reason: "Deterministic policy denied the action",
185
+ };
186
+ if (policyDecision.kind === "allow")
187
+ return { decision: "allow", reason: policyDecision.reason };
98
188
  const deadline = deadlineSignal(options.signal, options.timeoutMs, options.clock);
99
189
  const policy = reviewPolicy(options.settings?.reviewPolicy);
100
- const context = options.context ?? { sessionId: action.sessionId, contextId: 'legacy', turnId: 'legacy', items: [{ id: 'legacy-user', source: 'user', trust: 'authorization', content: safeEvidence(options.trustedAuthorization) }] };
101
- const binding = { actionDigest: action.digest, contextDigest: options.context?.digest ?? digest(context), policyDigest: policy.digest };
190
+ const context = options.context ?? {
191
+ sessionId: action.sessionId,
192
+ contextId: "legacy",
193
+ turnId: "legacy",
194
+ items: [
195
+ {
196
+ id: "legacy-user",
197
+ source: "user",
198
+ trust: "authorization",
199
+ content: safeEvidence(options.trustedAuthorization),
200
+ },
201
+ ],
202
+ };
203
+ const binding = {
204
+ actionDigest: action.digest,
205
+ contextDigest: options.context?.digest ?? digest(context),
206
+ policyDigest: policy.digest,
207
+ };
102
208
  try {
103
209
  deadline.signal.throwIfAborted();
104
210
  if (context.sessionId !== action.sessionId)
105
- throw new GuardError('REVIEW_CONTEXT', 'Review context belongs to another session');
211
+ throw new GuardError("REVIEW_CONTEXT", "Review context belongs to another session");
212
+ if (options.context) {
213
+ const { digest: contextDigest, ...fields } = options.context;
214
+ if (contextDigest !== digest(fields))
215
+ throw new GuardError("REVIEW_CONTEXT", "Review context digest does not match its actual contents");
216
+ }
217
+ if (options.executionContext &&
218
+ digest(options.executionContext.permissionProfile) !==
219
+ action.permissionDigest)
220
+ throw new GuardError("REVIEW_CONTEXT", "Review permission context differs from the bound action");
106
221
  // The action must remain exact: refusing a credential-bearing request is safer than silently rewriting it.
107
222
  if (canonicalJson(safeEvidence(action)) !== canonicalJson(action))
108
- throw new GuardError('REVIEW_CONTEXT', 'Exact action contains credential material that cannot enter the reviewer prompt');
223
+ throw new GuardError("REVIEW_CONTEXT", "Exact action contains credential material that cannot enter the reviewer prompt");
109
224
  const request = {
110
225
  systemPrompt: policy.text,
111
- data: canonicalJson({ context, untrustedAction: action, requestedPermissionDelta: policyDecision.delta, policyReason: policyDecision.reason }),
226
+ data: canonicalJson({
227
+ context,
228
+ untrustedAction: action,
229
+ requestedPermissionDelta: policyDecision.delta,
230
+ policyReason: policyDecision.reason,
231
+ ...(options.executionContext
232
+ ? { executionContext: options.executionContext }
233
+ : {}),
234
+ approvalRequest: {
235
+ category: policyDecision.approvalCategory ?? "sandbox",
236
+ requiresFreshReview: policyDecision.requiresFreshReview ?? false,
237
+ requiresUserInput: policyDecision.requiresUserInput ?? false,
238
+ },
239
+ }),
112
240
  };
113
- if (request.data.length > (options.settings?.reviewContextChars ?? DEFAULT_SETTINGS.reviewContextChars))
114
- throw new GuardError('REVIEW_CONTEXT_OVERFLOW', 'Exact request exceeds review context capacity');
115
- const value = await withSignal(options.provider.complete(request, { signal: deadline.signal, timeoutMs: options.timeoutMs }), deadline.signal);
241
+ if (request.data.length >
242
+ (options.settings?.reviewContextChars ??
243
+ DEFAULT_SETTINGS.reviewContextChars))
244
+ throw new GuardError("REVIEW_CONTEXT_OVERFLOW", "Exact request exceeds review context capacity");
245
+ const value = await withSignal(options.provider.complete(request, {
246
+ signal: deadline.signal,
247
+ timeoutMs: options.timeoutMs,
248
+ }), deadline.signal);
116
249
  deadline.signal.throwIfAborted();
117
250
  // Existing explicitly supplied providers keep their narrow legacy interface.
118
- if (typeof value === 'string' && /"decision"\s*:/.test(value)) {
251
+ if (!(options.provider instanceof PiReviewProvider) &&
252
+ typeof value === "string" &&
253
+ /"decision"\s*:/.test(value)) {
119
254
  let legacy;
120
255
  try {
121
256
  legacy = parseReview(value);
122
257
  }
123
258
  catch {
124
- throw new GuardError('REVIEW_PARSE', 'Invalid legacy review schema');
259
+ throw new GuardError("REVIEW_PARSE", "Invalid legacy review schema");
125
260
  }
126
- if (legacy.decision === 'deny')
127
- return { ...legacy, result: { ...binding, status: 'denied', assessment: { risk_level: 'high', user_authorization: 'unknown', outcome: 'deny', rationale: legacy.reason } } };
128
- if (legacy.decision === 'allow' && Object.values(policyDecision.delta).some(paths => paths.length))
129
- return { ...legacy, decision: options.hasUI ? 'ask' : 'deny', reason: 'Legacy assessment cannot automatically increase permission' };
130
- if (legacy.decision === 'ask' && !options.hasUI)
131
- return { ...legacy, decision: 'deny', reason: 'User approval is unavailable in this mode' };
261
+ if (legacy.decision === "deny")
262
+ return {
263
+ ...legacy,
264
+ result: {
265
+ ...binding,
266
+ status: "denied",
267
+ assessment: {
268
+ risk_level: "high",
269
+ user_authorization: "unknown",
270
+ outcome: "deny",
271
+ rationale: legacy.reason,
272
+ },
273
+ },
274
+ };
275
+ if (legacy.decision === "allow" &&
276
+ Object.values(policyDecision.delta).some((paths) => paths.length))
277
+ return {
278
+ ...legacy,
279
+ decision: options.hasUI ? "ask" : "deny",
280
+ reason: "Legacy assessment cannot automatically increase permission",
281
+ };
282
+ if (legacy.decision === "ask" && !options.hasUI)
283
+ return {
284
+ ...legacy,
285
+ decision: "deny",
286
+ reason: "User approval is unavailable in this mode",
287
+ };
132
288
  return legacy;
133
289
  }
134
290
  const assessment = parseAssessment(value);
135
- const result = { ...binding, status: assessment.outcome === 'allow' ? 'approved' : 'denied', assessment };
136
- return { decision: assessment.outcome, reason: assessment.rationale, result };
291
+ const result = {
292
+ ...binding,
293
+ status: assessment.outcome === "allow" ? "approved" : "denied",
294
+ assessment,
295
+ };
296
+ return {
297
+ decision: assessment.outcome,
298
+ reason: assessment.rationale,
299
+ result,
300
+ };
137
301
  }
138
302
  catch (error) {
139
- const failure = options.signal?.aborted ? 'cancelled' : deadline.signal.aborted ? 'timeout' : error instanceof GuardError && error.code === 'REVIEW_PARSE' ? 'invalid-output' : error instanceof GuardError && error.code.startsWith('REVIEW_CONTEXT') ? 'context' : error instanceof GuardError && error.code === 'REVIEW_INVESTIGATION' ? 'investigation' : 'provider';
140
- const status = failure === 'cancelled' ? 'aborted' : failure === 'timeout' ? 'timed-out' : 'failed';
141
- const reason = failure === 'cancelled' ? 'Call cancelled' : failure === 'timeout' ? 'Auto-review timed out; this alone is not evidence that the action is unsafe' : `Auto-review failed (${failure}); the action was not executed`;
142
- return { decision: 'deny', reason, result: { ...binding, status, failure, reason } };
303
+ const failure = options.signal?.aborted
304
+ ? "cancelled"
305
+ : deadline.signal.aborted
306
+ ? "timeout"
307
+ : error instanceof GuardError && error.code === "REVIEW_PARSE"
308
+ ? "invalid-output"
309
+ : error instanceof GuardError &&
310
+ error.code.startsWith("REVIEW_CONTEXT")
311
+ ? "context"
312
+ : error instanceof GuardError &&
313
+ error.code === "REVIEW_INVESTIGATION"
314
+ ? "investigation"
315
+ : "provider";
316
+ const status = failure === "cancelled"
317
+ ? "aborted"
318
+ : failure === "timeout"
319
+ ? "timed-out"
320
+ : "failed";
321
+ const reason = failure === "cancelled"
322
+ ? "Call cancelled"
323
+ : failure === "timeout"
324
+ ? "Auto-review timed out; this alone is not evidence that the action is unsafe"
325
+ : `Auto-review failed (${failure}); the action was not executed`;
326
+ return {
327
+ decision: "deny",
328
+ reason,
329
+ result: { ...binding, status, failure, reason },
330
+ };
143
331
  }
144
332
  finally {
145
333
  deadline.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"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"}
package/dist/signals.js CHANGED
@@ -1,21 +1,36 @@
1
- import { GuardError } from './contracts.js';
2
- export const SYSTEM_CLOCK = { setTimeout: (fn, delayMs) => setTimeout(fn, delayMs), clearTimeout: id => clearTimeout(id) };
1
+ import { GuardError } from "./contracts.js";
2
+ export const SYSTEM_CLOCK = {
3
+ setTimeout: (fn, delayMs) => setTimeout(fn, delayMs),
4
+ clearTimeout: (id) => clearTimeout(id),
5
+ };
3
6
  export function deadlineSignal(caller, timeoutMs, clock = SYSTEM_CLOCK) {
4
7
  const controller = new AbortController();
5
- const onAbort = () => controller.abort(caller?.reason ?? new GuardError('CANCELLED', 'Call cancelled'));
8
+ const onAbort = () => controller.abort(caller?.reason ?? new GuardError("CANCELLED", "Call cancelled"));
6
9
  if (caller?.aborted)
7
10
  onAbort();
8
11
  else
9
- caller?.addEventListener('abort', onAbort, { once: true });
10
- const id = clock.setTimeout(() => controller.abort(new GuardError('TIMEOUT', 'Configured deadline expired')), timeoutMs);
11
- return { signal: controller.signal, dispose() { clock.clearTimeout(id); caller?.removeEventListener('abort', onAbort); } };
12
+ caller?.addEventListener("abort", onAbort, { once: true });
13
+ const id = clock.setTimeout(() => controller.abort(new GuardError("TIMEOUT", "Configured deadline expired")), timeoutMs);
14
+ return {
15
+ signal: controller.signal,
16
+ dispose() {
17
+ clock.clearTimeout(id);
18
+ caller?.removeEventListener("abort", onAbort);
19
+ },
20
+ };
12
21
  }
13
22
  export async function withSignal(work, signal) {
14
23
  signal.throwIfAborted();
15
24
  return new Promise((resolve, reject) => {
16
- const onAbort = () => reject(signal.reason ?? new GuardError('CANCELLED', 'Call cancelled'));
17
- signal.addEventListener('abort', onAbort, { once: true });
18
- work.then(value => { signal.removeEventListener('abort', onAbort); resolve(value); }, error => { signal.removeEventListener('abort', onAbort); reject(error); });
25
+ const onAbort = () => reject(signal.reason ?? new GuardError("CANCELLED", "Call cancelled"));
26
+ signal.addEventListener("abort", onAbort, { once: true });
27
+ work.then((value) => {
28
+ signal.removeEventListener("abort", onAbort);
29
+ resolve(value);
30
+ }, (error) => {
31
+ signal.removeEventListener("abort", onAbort);
32
+ reject(error);
33
+ });
19
34
  });
20
35
  }
21
36
  //# sourceMappingURL=signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAoB,CAAC,EAAE,CAAC;AACpJ,MAAM,UAAU,cAAc,CAAC,MAA+B,EAAE,SAAiB,EAAE,QAAe,YAAY;IAC5G,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxG,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;;QAAM,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChG,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzH,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7H,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,IAAgB,EAAE,MAAmB;IACvE,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnK,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,MAAM,CAAC,MAAM,YAAY,GAAU;IAC/B,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC;IACpD,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,EAAoB,CAAC;CAC3D,CAAC;AACF,MAAM,UAAU,cAAc,CAC1B,MAA+B,EAC/B,SAAiB,EACjB,QAAe,YAAY;IAE3B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,EAAE,CACjB,UAAU,CAAC,KAAK,CACZ,MAAM,EAAE,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAClE,CAAC;IACN,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;;QAC1B,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CACvB,GAAG,EAAE,CACD,UAAU,CAAC,KAAK,CACZ,IAAI,UAAU,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAC3D,EACL,SAAS,CACZ,CAAC;IACF,OAAO;QACH,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO;YACH,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACvB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;KACJ,CAAC;AACN,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,IAAgB,EAChB,MAAmB;IAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,GAAG,EAAE,CACjB,MAAM,CACF,MAAM,CAAC,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,gBAAgB,CAAC,CACjE,CAAC;QACN,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CACL,CAAC,KAAK,EAAE,EAAE;YACN,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACN,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/startup.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { SessionManager, SettingsManager, type ModelRuntime, type InlineExtension, type CreateAgentSessionOptions } from '@earendil-works/pi-coding-agent';
2
- import { type GuardOptions } from './index.js';
3
- import { type ExternalExtension } from './tools/mcp.js';
1
+ import { type CreateAgentSessionOptions, type InlineExtension, type ModelRuntime, SessionManager, SettingsManager } from "@earendil-works/pi-coding-agent";
2
+ import { type GuardOptions } from "./index.js";
3
+ import { type ExternalExtension } from "./tools/mcp.js";
4
4
  export declare function assertSupportedPi(): Promise<string>;
5
5
  export interface GuardedRuntimeOptions extends GuardOptions {
6
6
  cwd: string;
@@ -9,7 +9,7 @@ export interface GuardedRuntimeOptions extends GuardOptions {
9
9
  settingsManager?: SettingsManager;
10
10
  /** Explicit trust for the initially selected project; later cwd changes use their own trust record. */
11
11
  isProjectTrusted?: boolean;
12
- model?: CreateAgentSessionOptions['model'];
12
+ model?: CreateAgentSessionOptions["model"];
13
13
  /** Resolve an explicitly selected model after trusted provider extensions have registered. */
14
14
  modelSelection?: {
15
15
  readonly provider: string;