review-council 2.1.3 → 2.1.4

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.
@@ -100,10 +100,10 @@ export declare const DEFAULT_GATING_CONFIG: {
100
100
  export declare function resolveGatingConfig(input: GatingConfigInput | undefined, rosterModels?: readonly string[]): ResolvedGatingConfig;
101
101
  /**
102
102
  * Reduce a unified diff to the hunks that overlap the findings' line ranges.
103
- * Blind tail-truncation could cut the exact hunk a finding refers to and let
104
- * the verifier judge (and refute) from unrelated context. Returns the whole
105
- * patch when it has no hunk headers (plan pseudo-files), and '' when no hunk
106
- * overlaps — the caller then treats the finding as having no usable context.
103
+ * Oversized hunks are excerpted around every requested range with accurate
104
+ * synthetic headers. Returns short non-hunk content unchanged for backward
105
+ * compatibility, and '' when trustworthy context cannot fit in the bound —
106
+ * the caller then keeps the finding gating without invoking the verifier.
107
107
  */
108
108
  export declare function relevantPatchExcerpt(patch: string, ranges: Array<{
109
109
  start: number;
@@ -1,6 +1,7 @@
1
1
  import { defaultAdapterFactory } from '../dispatch/runner.js';
2
2
  import { detectProvider } from '../roles/dispatcher.js';
3
3
  import { neutralizeDelimiters, wrapDiff } from '../prompts/hardening.js';
4
+ import { formatSyntheticHunkHeader, parseUnifiedDiff, } from '../prepare/unified-diff.js';
4
5
  const DIRECT_PROVIDERS = new Set(['anthropic', 'openai', 'google']);
5
6
  export const DEFAULT_GATING_CONFIG = {
6
7
  mode: 'verified-consensus',
@@ -69,35 +70,225 @@ When unsure, answer "confirmed".`;
69
70
  const MAX_PATCH_CHARS = 4_000;
70
71
  /** Lines of slack when matching a finding's range against a hunk's span. */
71
72
  const HUNK_MARGIN_LINES = 16;
73
+ function isChangedLine(line) {
74
+ return !line.marker && line.oldCount !== line.newCount;
75
+ }
76
+ function replacementBlock(body, index) {
77
+ let start = index;
78
+ while (start > 0) {
79
+ const previous = body[start - 1];
80
+ if (isChangedLine(previous)) {
81
+ start -= 1;
82
+ }
83
+ else if (previous.marker && start > 1 && isChangedLine(body[start - 2])) {
84
+ start -= 2;
85
+ }
86
+ else {
87
+ break;
88
+ }
89
+ }
90
+ let end = index + 1;
91
+ while (end < body.length) {
92
+ const next = body[end];
93
+ if (isChangedLine(next)) {
94
+ end += 1;
95
+ }
96
+ else if (next.marker && end > start && isChangedLine(body[end - 1])) {
97
+ end += 1;
98
+ }
99
+ else {
100
+ break;
101
+ }
102
+ }
103
+ return {
104
+ start,
105
+ end,
106
+ hasDeletion: body
107
+ .slice(start, end)
108
+ .some((line) => line.oldCount === 1 && line.newCount === 0),
109
+ };
110
+ }
111
+ function windowForMatches(hunk, hunkIndex, matches) {
112
+ const first = matches[0];
113
+ const last = matches.at(-1);
114
+ if (first === undefined || last === undefined)
115
+ return undefined;
116
+ let start = first;
117
+ let end = last + 1;
118
+ let processedBlockEnd = 0;
119
+ for (const index of matches) {
120
+ // requiredWindow collects matches in body order. Once one changed line
121
+ // expands to its contiguous replacement block, later matches inside that
122
+ // block cannot widen the required evidence and must not rescan it.
123
+ if (index < processedBlockEnd)
124
+ continue;
125
+ const line = hunk.body[index];
126
+ if (!isChangedLine(line))
127
+ continue;
128
+ const block = replacementBlock(hunk.body, index);
129
+ processedBlockEnd = block.end;
130
+ if (block.hasDeletion) {
131
+ start = Math.min(start, block.start);
132
+ end = Math.max(end, block.end);
133
+ }
134
+ }
135
+ return { hunkIndex, start, end };
136
+ }
137
+ function hunkDistance(hunk, range) {
138
+ // A zero-count range is anchored after newStart and its deletion body uses
139
+ // newStart + 1 as the effective new-file coordinate. Treat both sides of
140
+ // that boundary as adjacent so either conventional line reference keeps
141
+ // the complete removal in view.
142
+ const hunkStart = hunk.newStart;
143
+ let hunkEnd = hunk.newCount === 0 ? hunk.newStart + 1 : hunk.newStart + hunk.newCount - 1;
144
+ // A deletion after the hunk's final new-file line is anchored at the next
145
+ // coordinate. Parsed body coordinates are monotonic; only a legal trailing
146
+ // no-newline marker can follow the last real line.
147
+ const last = hunk.body.at(-1);
148
+ const lastBodyLine = last?.marker ? hunk.body.at(-2) : last;
149
+ if (lastBodyLine)
150
+ hunkEnd = Math.max(hunkEnd, lastBodyLine.newLine);
151
+ if (range.end < hunkStart)
152
+ return hunkStart - range.end;
153
+ if (range.start > hunkEnd)
154
+ return range.start - hunkEnd;
155
+ return 0;
156
+ }
157
+ function requiredWindow(hunk, hunkIndex, range) {
158
+ const exact = [];
159
+ for (let index = 0; index < hunk.body.length; index += 1) {
160
+ const line = hunk.body[index];
161
+ if (!line.marker && line.newLine >= range.start && line.newLine <= range.end) {
162
+ exact.push(index);
163
+ }
164
+ }
165
+ // Deletions and the following new-file line share a coordinate. Keep the
166
+ // whole span: omitting either side can let a verifier refute a finding from
167
+ // incomplete replacement evidence. If it cannot fit, the caller fails
168
+ // closed instead of sending a partial removal.
169
+ if (exact.length > 0) {
170
+ return windowForMatches(hunk, hunkIndex, exact);
171
+ }
172
+ const closest = [];
173
+ let closestDistance = Number.POSITIVE_INFINITY;
174
+ for (let index = 0; index < hunk.body.length; index += 1) {
175
+ const line = hunk.body[index];
176
+ if (line.marker)
177
+ continue;
178
+ const distance = line.newLine < range.start
179
+ ? range.start - line.newLine
180
+ : line.newLine > range.end
181
+ ? line.newLine - range.end
182
+ : 0;
183
+ if (distance < closestDistance) {
184
+ closestDistance = distance;
185
+ closest.length = 0;
186
+ closest.push(index);
187
+ }
188
+ else if (distance === closestDistance) {
189
+ closest.push(index);
190
+ }
191
+ }
192
+ return windowForMatches(hunk, hunkIndex, closest);
193
+ }
194
+ function mergeWindows(windows) {
195
+ const sorted = [...windows].sort((left, right) => left.hunkIndex - right.hunkIndex || left.start - right.start);
196
+ const merged = [];
197
+ for (const window of sorted) {
198
+ const previous = merged.at(-1);
199
+ if (previous && previous.hunkIndex === window.hunkIndex && window.start <= previous.end) {
200
+ previous.end = Math.max(previous.end, window.end);
201
+ }
202
+ else {
203
+ merged.push({ ...window });
204
+ }
205
+ }
206
+ return merged;
207
+ }
208
+ function expandWindows(hunks, required, margin) {
209
+ const expanded = required.map((window) => {
210
+ const body = hunks[window.hunkIndex].body;
211
+ let start = Math.max(0, window.start - margin);
212
+ let end = Math.min(body.length, window.end + margin);
213
+ while (start > 0 && body[start].marker)
214
+ start -= 1;
215
+ while (end < body.length && body[end].marker)
216
+ end += 1;
217
+ return { hunkIndex: window.hunkIndex, start, end };
218
+ });
219
+ return mergeWindows(expanded);
220
+ }
221
+ function renderWindows(hunks, windows) {
222
+ return windows
223
+ .map((window) => {
224
+ const hunk = hunks[window.hunkIndex];
225
+ const body = hunk.body.slice(window.start, window.end);
226
+ const header = formatSyntheticHunkHeader(body);
227
+ if (!header)
228
+ return '';
229
+ return [header, ...body.map((line) => line.text)].join('\n');
230
+ })
231
+ .join('\n');
232
+ }
72
233
  /**
73
234
  * Reduce a unified diff to the hunks that overlap the findings' line ranges.
74
- * Blind tail-truncation could cut the exact hunk a finding refers to and let
75
- * the verifier judge (and refute) from unrelated context. Returns the whole
76
- * patch when it has no hunk headers (plan pseudo-files), and '' when no hunk
77
- * overlaps — the caller then treats the finding as having no usable context.
235
+ * Oversized hunks are excerpted around every requested range with accurate
236
+ * synthetic headers. Returns short non-hunk content unchanged for backward
237
+ * compatibility, and '' when trustworthy context cannot fit in the bound —
238
+ * the caller then keeps the finding gating without invoking the verifier.
78
239
  */
79
240
  export function relevantPatchExcerpt(patch, ranges) {
80
- const hunks = [];
81
- let current;
82
- for (const line of patch.split('\n')) {
83
- const header = /^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(line);
84
- if (header) {
85
- current = {
86
- startNew: Number(header[1]),
87
- countNew: header[2] !== undefined ? Number(header[2]) : 1,
88
- text: [line],
89
- };
90
- hunks.push(current);
91
- }
92
- else if (current) {
93
- current.text.push(line);
241
+ if (ranges.length === 0)
242
+ return '';
243
+ if (!/^@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@/m.test(patch)) {
244
+ return patch.length <= MAX_PATCH_CHARS ? patch : '';
245
+ }
246
+ if (ranges.some(({ start, end }) => !Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 1 || end < start)) {
247
+ return '';
248
+ }
249
+ const parsed = parseUnifiedDiff(patch);
250
+ if (!parsed.ok)
251
+ return '';
252
+ const { hunks } = parsed.diff;
253
+ const required = [];
254
+ const selectedHunks = new Set();
255
+ for (const range of ranges) {
256
+ const distances = hunks.map((hunk) => hunkDistance(hunk, range));
257
+ const overlapping = distances
258
+ .map((distance, index) => ({ distance, index }))
259
+ .filter(({ distance }) => distance === 0);
260
+ const closestDistance = distances.reduce((closest, distance) => Math.min(closest, distance), Number.POSITIVE_INFINITY);
261
+ const matches = overlapping.length > 0
262
+ ? overlapping
263
+ : distances
264
+ .map((distance, index) => ({ distance, index }))
265
+ .filter(({ distance }) => distance === closestDistance && distance <= HUNK_MARGIN_LINES);
266
+ if (matches.length === 0)
267
+ return '';
268
+ for (const { index } of matches) {
269
+ const window = requiredWindow(hunks[index], index, range);
270
+ if (!window)
271
+ return '';
272
+ required.push(window);
273
+ selectedHunks.add(index);
94
274
  }
95
275
  }
96
- if (hunks.length === 0)
97
- return patch;
98
- const selected = hunks.filter((h) => ranges.some((r) => h.startNew - HUNK_MARGIN_LINES <= r.end &&
99
- r.start - HUNK_MARGIN_LINES <= h.startNew + h.countNew));
100
- return selected.map((h) => h.text.join('\n')).join('\n');
276
+ const selected = [...selectedHunks]
277
+ .sort((left, right) => left - right)
278
+ .map((index) => {
279
+ const hunk = hunks[index];
280
+ return [hunk.originalHeader, ...hunk.body.map((line) => line.text)].join('\n');
281
+ })
282
+ .join('\n');
283
+ if (selected.length <= MAX_PATCH_CHARS)
284
+ return selected;
285
+ const minimal = mergeWindows(required);
286
+ for (let margin = HUNK_MARGIN_LINES; margin >= 0; margin -= 1) {
287
+ const excerpt = renderWindows(hunks, expandWindows(hunks, minimal, margin));
288
+ if (excerpt.length <= MAX_PATCH_CHARS)
289
+ return excerpt;
290
+ }
291
+ return '';
101
292
  }
102
293
  function buildVerifierPrompt(candidates, patches) {
103
294
  // Finding text originates from council models reading an untrusted diff —
@@ -108,8 +299,7 @@ function buildVerifierPrompt(candidates, patches) {
108
299
  });
109
300
  lines.push('## The change under review (relevant files, untrusted content)', '');
110
301
  for (const [filename, patch] of patches) {
111
- const bounded = patch.length > MAX_PATCH_CHARS ? `${patch.slice(0, MAX_PATCH_CHARS)}\n… (truncated)` : patch;
112
- lines.push(`### ${neutralizeDelimiters(filename)}`, wrapDiff(bounded), '');
302
+ lines.push(`### ${neutralizeDelimiters(filename)}`, wrapDiff(patch), '');
113
303
  }
114
304
  return lines.join('\n');
115
305
  }
@@ -239,7 +429,7 @@ export async function applyGating(findings, options) {
239
429
  }
240
430
  else {
241
431
  markUnavailable(findingIndex, fullPatches.has(f.file)
242
- ? 'finding lines match no hunk in the diff — not sent to the verifier'
432
+ ? 'no hunk context fits the safe verifier bound — not sent to the verifier'
243
433
  : 'no diff context for this file — not sent to the verifier');
244
434
  }
245
435
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gating.js","sourceRoot":"","sources":["../../src/consensus/gating.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gating.js","sourceRoot":"","sources":["../../src/consensus/gating.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,4BAA4B,CAAC;AA8FpC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,oBAAoB;IAC1B,SAAS,EAAE,CAAC;IACZ,uEAAuE;IACvE,wEAAwE;IACxE,iBAAiB,EAAE,yBAAyB;IAC5C,qBAAqB,EAAE,MAAM;CACrB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAoC,EACpC,YAAgC;IAEhC,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,qBAAqB,CAAC,SAAS,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,iBAAqC,CAAC;IAC1C,IAAI,KAAK,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC3C,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAC5C,sEAAsE;QACtE,qEAAqE;QACrE,SAAS;QACT,IAAI,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,6DAA6D,iBAAiB,GAAG,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,iBAAiB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;YACjF,iBAAiB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,qBAAqB,CAAC,IAAI;QAC/C,SAAS;QACT,iBAAiB;QACjB,qBAAqB,EACnB,KAAK,EAAE,mBAAmB,IAAI,qBAAqB,CAAC,qBAAqB;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;iCAaE,CAAC;AAElC,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAQ7B,SAAS,aAAa,CAAC,IAAqB;IAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgC,EAChC,KAAa;IAEb,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;QAClC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;YAC3E,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC;QACxB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;YACvE,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,GAAG;QACH,WAAW,EAAE,IAAI;aACd,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;aACjB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAqB,EACrB,SAAiB,EACjB,OAA0B;IAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhE,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;IACnB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,uEAAuE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,KAAK,GAAG,iBAAiB;YAAE,SAAS;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC;QAC9B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CACnB,IAAqB,EACrB,KAAqC;IAErC,2EAA2E;IAC3E,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1F,0EAA0E;IAC1E,2EAA2E;IAC3E,mDAAmD;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,IAAI,YAAY;QAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,GAAG,GAAG,SAAS;QAAE,OAAO,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO;QAAE,OAAO,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;IACxD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CACrB,IAAqB,EACrB,SAAiB,EACjB,KAAqC;IAErC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,sEAAsE;IACtE,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1B,MAAM,QAAQ,GACZ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK;YACxB,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG;gBACxB,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG;gBAC1B,CAAC,CAAC,CAAC,CAAC;QACV,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;YAC/B,eAAe,GAAG,QAAQ,CAAC;YAC3B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,OAAqB;IACzC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAC9E,CAAC;IACF,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YACxF,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,KAAwB,EACxB,QAAsB,EACtB,MAAc;IAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;QACrD,OAAO,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAE,CAAC,MAAM;YAAE,KAAK,IAAI,CAAC,CAAC;QACpD,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAE,CAAC,MAAM;YAAE,GAAG,IAAI,CAAC,CAAC;QACxD,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB,EAAE,OAAqB;IACpE,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,MAA6C;IAE7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,IACE,MAAM,CAAC,IAAI,CACT,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACjB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CACzF,EACD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAE9B,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,SAAS;aAC1B,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CACtC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,EAClD,MAAM,CAAC,iBAAiB,CACzB,CAAC;QACF,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,SAAS;iBACN,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,eAAe,IAAI,QAAQ,IAAI,iBAAiB,CAAC,CAAC;QACjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC;SAChC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,QAAQ,CAAC,MAAM,IAAI,eAAe;QAAE,OAAO,QAAQ,CAAC;IAExD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,KAAK,IAAI,MAAM,GAAG,iBAAiB,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,MAAM,IAAI,eAAe;YAAE,OAAO,OAAO,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA8B,EAAE,OAA4B;IACvF,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,KAAK,GAAa,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACtD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,GAAG,CAAC,EAAE,EACf,WAAW,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,EACrE,eAAe,CAAC,CAAC,QAAQ,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EACrD,YAAY,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAC3C,YAAY,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EACjD,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,gEAAgE,EAAE,EAAE,CAAC,CAAC;IACjF,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+C,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAA8D,CAAC;QAC/F,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,SAAS;QACrC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,WAAW;YAAE,SAAS;QAC/D,iEAAiE;QACjE,gCAAgC;QAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;YACf,OAAO,EAAE,OAAO,KAAK,SAAS;YAC9B,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAA4B,EAC5B,OAAsB;IAEtB,MAAM,SAAS,GAAuB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IACrC,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAU,EAAE,CAC5D,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC;QACrF,kEAAkE;QAClE,qEAAqE;QACrE,uEAAuE;QACvE,kEAAkE;QAClE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QACxC,MAAM,cAAc,GAClB,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;QACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QAC5D,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QACjE,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC3C,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC;IAC5D,MAAM,KAAK,GAAsB;QAC/B,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE,gBAAgB,CAAC,MAAM;QACnC,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,SAAS,eAAe,CAAC,YAAoB,EAAE,IAAY;QACzD,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,SAAS,CAAC,YAAY,CAAC,GAAG;YACxB,GAAG,QAAQ,CAAC,YAAY,CAAE;YAC1B,MAAM,EAAE;gBACN,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;aACrE;SACF,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,mEAAmE;IACnE,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAiD,CAAC;IACvF,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAE,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAE,CAAC;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,eAAe,CACb,YAAY,EACZ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrB,CAAC,CAAC,yEAAyE;gBAC3E,CAAC,CAAC,0DAA0D,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,KAAK,MAAM,YAAY,IAAI,UAAU,EAAE,CAAC;YACtC,eAAe,CAAC,YAAY,EAAE,2DAA2D,CAAC,CAAC;QAC7F,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,QAAQ,GAAG,IAAI,GAAG,EAA+C,CAAC;IACtE,IAAI,OAA2B,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CACtF,CAAC;QACF,IAAI,CAAC;YACH,oEAAoE;YACpE,qEAAqE;YACrE,uCAAuC;YACvC,MAAM,GAAG,GACP,OAAO,CAAC,GAAG;gBACX,CAAC,GAAU,EAAE;oBACX,MAAM,OAAO,GAAG,qBAAqB,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAkB,CAAC,CAAC,CAAC;oBAClF,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC/F,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,OAAO,CAAC,iBAAiB,EACzB,sBAAsB,EACtB,mBAAmB,CAAC,UAAU,EAAE,eAAe,CAAC,EAChD,EAAE,SAAS,EAAE,OAAO,CAAC,qBAAqB,EAAE,UAAU,EAAE,CAAC,EAAE,CAC5D,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAE,CAAC;QACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,eAAe,CACb,YAAY,EACZ,OAAO,IAAI,8CAA8C,CAC1D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,MAAkB,CAAC;QACvB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,GAAG;gBACP,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE;oBACZ,KAAK,EAAE,aAAa;oBACpB,OAAO,EAAE,SAAS;oBAClB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,GAAG;gBACP,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE;oBACZ,KAAK,EAAE,aAAa;oBACpB,OAAO,EAAE,WAAW;oBACpB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;aACF,CAAC;QACJ,CAAC;QACD,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC"}
@@ -5,13 +5,14 @@ import type { ModelReview } from '../consensus/types.js';
5
5
  * review per reviewer before consensus, or a single reviewer would be
6
6
  * counted once per chunk — inflating `total`, diversity, and vote counts.
7
7
  *
8
- * A reviewer counts as successful if it succeeded on at least one chunk;
9
- * findings from every successful chunk are concatenated. When no chunk
10
- * succeeded, the first non-success status and error are preserved.
8
+ * A blocking reviewer counts as successful only when every returned chunk
9
+ * succeeded. One failed or canceled part makes its coverage incomplete, so
10
+ * findings from its successful parts must not vote in consensus. Async-only
11
+ * results remain opportunistic: any arrived success may contribute, while an
12
+ * async result can neither rescue nor poison a same-key blocking reviewer.
11
13
  *
12
- * Dropped-finding counts and parser warnings are summed across ALL chunks,
13
- * including the ones that failed: a reviewer that parsed cleanly on chunk 1
14
- * and lost everything on chunk 2 is only partially covered, and the merged
15
- * review is the last place that can still say so.
14
+ * Accounting and diagnostics cover ALL returned parts, including failed and
15
+ * async ones: those calls still consumed time and produced diagnostics even
16
+ * when they do not affect the blocking reviewer's status or findings.
16
17
  */
17
18
  export declare function mergeChunkReviews(reviews: ModelReview[]): ModelReview[];
@@ -4,14 +4,15 @@
4
4
  * review per reviewer before consensus, or a single reviewer would be
5
5
  * counted once per chunk — inflating `total`, diversity, and vote counts.
6
6
  *
7
- * A reviewer counts as successful if it succeeded on at least one chunk;
8
- * findings from every successful chunk are concatenated. When no chunk
9
- * succeeded, the first non-success status and error are preserved.
7
+ * A blocking reviewer counts as successful only when every returned chunk
8
+ * succeeded. One failed or canceled part makes its coverage incomplete, so
9
+ * findings from its successful parts must not vote in consensus. Async-only
10
+ * results remain opportunistic: any arrived success may contribute, while an
11
+ * async result can neither rescue nor poison a same-key blocking reviewer.
10
12
  *
11
- * Dropped-finding counts and parser warnings are summed across ALL chunks,
12
- * including the ones that failed: a reviewer that parsed cleanly on chunk 1
13
- * and lost everything on chunk 2 is only partially covered, and the merged
14
- * review is the last place that can still say so.
13
+ * Accounting and diagnostics cover ALL returned parts, including failed and
14
+ * async ones: those calls still consumed time and produced diagnostics even
15
+ * when they do not affect the blocking reviewer's status or findings.
15
16
  */
16
17
  export function mergeChunkReviews(reviews) {
17
18
  const byReviewer = new Map();
@@ -32,18 +33,22 @@ export function mergeChunkReviews(reviews) {
32
33
  if (parts.length === 1)
33
34
  return parts[0];
34
35
  const first = parts[0];
35
- const successes = parts.filter((p) => p.status === 'success');
36
- const durationMs = parts.reduce((sum, p) => sum + p.durationMs, 0);
37
- const dropped = parts.reduce((sum, p) => sum + (p.droppedFindings ?? 0), 0);
38
- const warnings = parts.flatMap((p) => p.warnings ?? []);
36
+ const blockingParts = parts.filter((part) => part.async !== true);
37
+ const outcomeParts = blockingParts.length > 0 ? blockingParts : parts;
38
+ const successes = outcomeParts.filter((part) => part.status === 'success');
39
+ const requireComplete = blockingParts.length > 0;
40
+ const successful = requireComplete
41
+ ? successes.length === outcomeParts.length
42
+ : successes.length > 0;
43
+ const durationMs = parts.reduce((sum, part) => sum + part.durationMs, 0);
44
+ const dropped = parts.reduce((sum, part) => sum + (part.droppedFindings ?? 0), 0);
45
+ const warnings = parts.flatMap((part) => part.warnings ?? []);
39
46
  const degraded = {
40
47
  ...(dropped > 0 ? { droppedFindings: dropped } : {}),
41
48
  ...(warnings.length > 0 ? { warnings } : {}),
42
- // A reviewer is homogeneous across chunks, so any async part means the
43
- // whole merged review came from the async lane.
44
- ...(parts.some((p) => p.async) ? { async: true } : {}),
49
+ ...(blockingParts.length === 0 ? { async: true } : {}),
45
50
  };
46
- if (successes.length > 0) {
51
+ if (successful) {
47
52
  return {
48
53
  model: first.model,
49
54
  role: first.role,
@@ -54,7 +59,13 @@ export function mergeChunkReviews(reviews) {
54
59
  ...degraded,
55
60
  };
56
61
  }
57
- const failed = parts.find((p) => p.error) ?? first;
62
+ const failed = outcomeParts.find((part) => part.status !== 'success' && part.error) ??
63
+ outcomeParts.find((part) => part.status !== 'success') ??
64
+ first;
65
+ const incompleteError = requireComplete && successes.length > 0
66
+ ? `Incomplete chunk coverage: ${successes.length}/${outcomeParts.length} parts succeeded; ` +
67
+ `${failed.status}${failed.error ? `: ${failed.error}` : ''}`
68
+ : failed.error;
58
69
  return {
59
70
  model: first.model,
60
71
  role: first.role,
@@ -62,7 +73,7 @@ export function mergeChunkReviews(reviews) {
62
73
  findings: [],
63
74
  durationMs,
64
75
  status: failed.status,
65
- error: failed.error,
76
+ ...(incompleteError ? { error: incompleteError } : {}),
66
77
  ...degraded,
67
78
  };
68
79
  });
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/dispatch/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/dispatch/merge.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ import { printReviewSummary } from './output/terminal.js';
29
29
  import { postGitHubReview } from './output/github.js';
30
30
  import { toJson, writeJsonOutput } from './output/json.js';
31
31
  import { writeMarkdownOutput } from './output/markdown.js';
32
- import { buildCouncilRunPlan, CouncilProgressReporter, formatCouncilRunPlan, } from './output/progress.js';
32
+ import { assertReviewWorkWithinLimit, buildCouncilRunPlan, CouncilProgressReporter, formatCouncilRunPlan, } from './output/progress.js';
33
33
  import { resolveFinding, buildDiscussPrompts, runDiscussion, loadContextDocs, } from './discuss.js';
34
34
  import { DEFAULT_CONVERGE_ATTEMPT_CAP, claimConvergeAttempt, ConvergeAttemptBudgetExceededError, convergeAttemptErrorExitCode, ConvergeAttemptStateError, resolveGitCommonDir, } from './converge/attempt-budget.js';
35
35
  import { DEFAULT_CONVERGE_ROUND_CAP, HARD_CONVERGE_ROUND_CAP, processRoundReport, recordVerdicts, findingGatingReason, ConvergeRoundCapError, ConvergeRunStateError, } from './converge/run-state.js';
@@ -700,6 +700,7 @@ async function executeCouncil(spinner, prepared, diff, opts, extra) {
700
700
  const planContext = extra?.focus !== undefined ? { focus: extra.focus } : undefined;
701
701
  // Chunk the diff
702
702
  const chunks = chunkDiff(diff.files);
703
+ assertReviewWorkWithinLimit(chunks.length, assignments.length);
703
704
  spinner.text = `Building prompts (${chunks.length} chunk(s), ${assignments.length} reviewer(s))...`;
704
705
  // Fan out every assignment across every chunk so the whole diff is
705
706
  // reviewed, not just the first ~2000 lines. The spec is NOT passed as a