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.
Files changed (127) 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 +112 -58
  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 +9 -9
  11. package/dist/approvals.js +195 -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 +60 -31
  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 +145 -48
  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 +379 -141
  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 +3 -3
  75. package/dist/review/context.js +207 -71
  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 +70 -27
  82. package/dist/review/lifecycle.js.map +1 -1
  83. package/dist/review/policy.js +10 -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 +3 -3
  88. package/dist/review/user-input.js +39 -16
  89. package/dist/review/user-input.js.map +1 -1
  90. package/dist/reviewer.d.ts +8 -8
  91. package/dist/reviewer.js +253 -75
  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 +16 -12
  99. package/dist/tools/controller.js +432 -121
  100. package/dist/tools/controller.js.map +1 -1
  101. package/dist/tools/environment.js +3 -1
  102. package/dist/tools/environment.js.map +1 -1
  103. package/dist/tools/executor.d.ts +1 -1
  104. package/dist/tools/executor.js +45 -28
  105. package/dist/tools/executor.js.map +1 -1
  106. package/dist/tools/external.d.ts +8 -8
  107. package/dist/tools/external.js +22 -11
  108. package/dist/tools/external.js.map +1 -1
  109. package/dist/tools/mcp.d.ts +6 -6
  110. package/dist/tools/mcp.js +208 -80
  111. package/dist/tools/mcp.js.map +1 -1
  112. package/dist/tools/mutation-queue.js.map +1 -1
  113. package/docs/publishing.ko.md +114 -0
  114. package/docs/publishing.md +49 -47
  115. package/docs/security/dependencies.ko.md +54 -0
  116. package/docs/security/dependencies.md +27 -26
  117. package/docs/testing/auto-review-protection.ko.md +158 -0
  118. package/docs/testing/auto-review-protection.md +104 -99
  119. package/docs/usage.ko.md +242 -0
  120. package/docs/usage.md +125 -121
  121. package/package.json +106 -95
  122. package/dist/native/darwin-arm64/artifact.json +0 -5
  123. package/dist/native/darwin-arm64/pi-guard-execpolicy +0 -0
  124. package/dist/native/linux-x64/artifact.json +0 -5
  125. package/dist/native/linux-x64/pi-guard-execpolicy +0 -0
  126. package/native/execpolicy/LICENSE +0 -201
  127. 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,141 +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");
106
212
  if (options.context) {
107
213
  const { digest: contextDigest, ...fields } = options.context;
108
214
  if (contextDigest !== digest(fields))
109
- throw new GuardError('REVIEW_CONTEXT', 'Review context digest does not match its actual contents');
215
+ throw new GuardError("REVIEW_CONTEXT", "Review context digest does not match its actual contents");
110
216
  }
111
- if (options.executionContext && digest(options.executionContext.permissionProfile) !== action.permissionDigest)
112
- throw new GuardError('REVIEW_CONTEXT', 'Review permission context differs from the bound action');
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");
113
221
  // The action must remain exact: refusing a credential-bearing request is safer than silently rewriting it.
114
222
  if (canonicalJson(safeEvidence(action)) !== canonicalJson(action))
115
- 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");
116
224
  const request = {
117
225
  systemPrompt: policy.text,
118
- data: canonicalJson({ context, untrustedAction: action, requestedPermissionDelta: policyDecision.delta, policyReason: policyDecision.reason,
119
- ...(options.executionContext ? { executionContext: options.executionContext } : {}),
120
- approvalRequest: { category: policyDecision.approvalCategory ?? 'sandbox', requiresFreshReview: policyDecision.requiresFreshReview ?? false, requiresUserInput: policyDecision.requiresUserInput ?? false },
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
+ },
121
239
  }),
122
240
  };
123
- if (request.data.length > (options.settings?.reviewContextChars ?? DEFAULT_SETTINGS.reviewContextChars))
124
- throw new GuardError('REVIEW_CONTEXT_OVERFLOW', 'Exact request exceeds review context capacity');
125
- 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);
126
249
  deadline.signal.throwIfAborted();
127
250
  // Existing explicitly supplied providers keep their narrow legacy interface.
128
- if (!(options.provider instanceof PiReviewProvider) && typeof value === 'string' && /"decision"\s*:/.test(value)) {
251
+ if (!(options.provider instanceof PiReviewProvider) &&
252
+ typeof value === "string" &&
253
+ /"decision"\s*:/.test(value)) {
129
254
  let legacy;
130
255
  try {
131
256
  legacy = parseReview(value);
132
257
  }
133
258
  catch {
134
- throw new GuardError('REVIEW_PARSE', 'Invalid legacy review schema');
259
+ throw new GuardError("REVIEW_PARSE", "Invalid legacy review schema");
135
260
  }
136
- if (legacy.decision === 'deny')
137
- return { ...legacy, result: { ...binding, status: 'denied', assessment: { risk_level: 'high', user_authorization: 'unknown', outcome: 'deny', rationale: legacy.reason } } };
138
- if (legacy.decision === 'allow' && Object.values(policyDecision.delta).some(paths => paths.length))
139
- return { ...legacy, decision: options.hasUI ? 'ask' : 'deny', reason: 'Legacy assessment cannot automatically increase permission' };
140
- if (legacy.decision === 'ask' && !options.hasUI)
141
- 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
+ };
142
288
  return legacy;
143
289
  }
144
290
  const assessment = parseAssessment(value);
145
- const result = { ...binding, status: assessment.outcome === 'allow' ? 'approved' : 'denied', assessment };
146
- 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
+ };
147
301
  }
148
302
  catch (error) {
149
- 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';
150
- const status = failure === 'cancelled' ? 'aborted' : failure === 'timeout' ? 'timed-out' : 'failed';
151
- 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`;
152
- 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
+ };
153
331
  }
154
332
  finally {
155
333
  deadline.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAuK,MAAM,gBAAgB,CAAC;AACnP,OAAO,EAAE,cAAc,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAA4B,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAsB,MAAM,mBAAmB,CAAC;AAezE,MAAM,OAAO,gBAAgB;IACE;IAA6E;IAA6D;IAAvK,YAA6B,OAA0D,EAAmB,WAA0B,gBAAgB,EAAmB,aAAmC;QAA7K,YAAO,GAAP,OAAO,CAAmD;QAAmB,aAAQ,GAAR,QAAQ,CAAkC;QAAmB,kBAAa,GAAb,aAAa,CAAsB;IAAG,CAAC;IAC9M,KAAK,CAAC,QAAQ,CAAC,OAAsB,EAAE,OAAmD;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9G,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;QACzJ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QACxH,MAAM,OAAO,GAAoB,EAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAwC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC;QAClP,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,qDAAqD,CAAC,CAAC;YACpN,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;gBACxF,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;gBAC9H,SAAS,EAAE,WAAW,EAAE,CAAC;aAC1B,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,QAAQ;gBAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,4CAA4C,CAAC,CAAC;YACpM,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChH,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,eAAe;gBAAE,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,0DAA0D,CAAC,CAAC;YACrM,uFAAuF;YACvF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAC,CAAC,CAAC;YACzG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAY,CAAC;gBACjB,IAAI,CAAC;oBAAC,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;gBACvH,OAAO,KAAK,EAAE,CAAC;oBAAC,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,gCAAgC,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC;gBAAC,CAAC;gBAC1G,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;YAChK,CAAC;QACH,CAAC;QACD,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CAAC;IAC9E,CAAC;CACF;AACD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IACrH,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK;YAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QAC3F,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QAAC,CAAC;IACjI,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IAC3T,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3G,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAClG,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;IACvW,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,oDAAoD,CAAC;IACrO,MAAM,WAAW,GAAG,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5G,OAAO,SAAS,CAAC,EAAC,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,CAAC,SAAS,EAAqB,CAAC,CAAC;AACpQ,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAA4B,CAAC;IAC1D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACzU,OAAO,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAwB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACrG,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAIlC;IACC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,IAAI,cAAc,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,UAAU,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IAChM,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;IACjG,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAC,CAAC,EAAC,CAAC;IACnO,MAAM,OAAO,GAAG,EAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;IACtI,IAAI,CAAC;QACH,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,2CAA2C,CAAC,CAAC;QAChI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,EAAC,MAAM,EAAC,aAAa,EAAC,GAAG,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YACzD,IAAI,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,0DAA0D,CAAC,CAAC;QAC3I,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC,gBAAgB;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,yDAAyD,CAAC,CAAC;QAClN,2GAA2G;QAC3G,IAAI,aAAa,CAAC,YAAY,CAAC,MAAkD,CAAC,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,iFAAiF,CAAC,CAAC;QACzO,MAAM,OAAO,GAAG;YACd,YAAY,EAAE,MAAM,CAAC,IAAI;YACzB,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,wBAAwB,EAAE,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM;gBACzI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAC,gBAAgB,EAAC,OAAO,CAAC,gBAAgB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,eAAe,EAAC,EAAC,QAAQ,EAAC,cAAc,CAAC,gBAAgB,IAAI,SAAS,EAAC,mBAAmB,EAAC,cAAc,CAAC,mBAAmB,IAAI,KAAK,EAAC,iBAAiB,EAAC,cAAc,CAAC,iBAAiB,IAAI,KAAK,EAAC;aACpM,CAAC;SACH,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB,CAAC,kBAAkB,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,+CAA+C,CAAC,CAAC;QAC1M,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/I,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACjC,6EAA6E;QAC7E,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,YAAY,gBAAgB,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjH,IAAI,MAAmB,CAAC;YACxB,IAAI,CAAC;gBAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;YAAC,CAAC;YACpH,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM;gBAAE,OAAO,EAAC,GAAG,MAAM,EAAE,MAAM,EAAC,EAAC,GAAG,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,UAAU,EAAC,EAAC,UAAU,EAAC,MAAM,EAAC,kBAAkB,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,CAAC,MAAM,EAAC,EAAC,EAAC,CAAC;YAC3L,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,4DAA4D,EAAC,CAAC;YACvO,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,2CAA2C,EAAC,CAAC;YAC3I,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAiB,EAAC,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAC,CAAC;QACtH,OAAO,EAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;QACzW,MAAM,MAAM,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpG,MAAM,MAAM,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,uBAAuB,OAAO,gCAAgC,CAAC;QACnO,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAC,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAC,EAAC,CAAC;IACnF,CAAC;YAAS,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACnC,CAAC"}
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;