review-council 1.8.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -153,6 +153,52 @@ rcl roles show <name> # Show system prompt and details for a role
153
153
 
154
154
  ---
155
155
 
156
+ ### `rcl converge-attempt`
157
+
158
+ Machine-enforced safety guard used by the generated `rcl-converge` skill.
159
+ Each call atomically and durably consumes one per-target attempt under the
160
+ repository's common Git directory, so the budget survives sessions, linked
161
+ worktrees, and abrupt system restarts.
162
+ New targets default to seven attempts, but an explicit invocation can set any
163
+ positive cap with `--max-attempts`. Omitting the flag on resume preserves the
164
+ persisted cap. At the boundary, RCL refuses before provider calls and directs
165
+ the workflow to ask the user; an approved continuation explicitly supplies a
166
+ higher cap.
167
+
168
+ At the skill level, `--max-attempts N` controls this machine launch budget.
169
+ The pre-existing `--max-rounds N` flag retains its original meaning as a
170
+ separate evidence-round limit (1–7), so existing invocations do not silently
171
+ change behavior.
172
+
173
+ Exit code 2 means the configured cap was exhausted and explicit continuation
174
+ approval is required. Exit code 3 means attempt accounting itself failed
175
+ (state, lock, Git, filesystem, or another infrastructure error); increasing
176
+ the cap is not the remedy. With `--json`, failures are emitted as structured
177
+ JSON on stderr. If the attempt is durably recorded but final lock release
178
+ fails, the claim still succeeds with a warning so retrying cannot spend a
179
+ second slot for the same intended launch.
180
+
181
+ The short accounting mutex is fully written as a private owner file and then
182
+ published with an exclusive hard link, which cannot replace an existing file
183
+ or legacy directory. State contents and, where supported, their directory
184
+ entry are synced before a claim succeeds. A dead owner is isolated through a
185
+ token-scoped hard-link tombstone before another claimant can proceed; inode
186
+ checks make that tombstone safe to remove after reclamation. Invalid or legacy
187
+ ownerless locks fail closed, and timeout errors include the manual recovery
188
+ path. When upgrading,
189
+ an evidence ledger seeds only its highest recorded round: historical failed or
190
+ missing-report launches cannot be reconstructed, while every claim after the
191
+ machine state is created is counted exactly. The state remains a same-user
192
+ local safety mechanism, not a tamper-proof store: deliberately deleting
193
+ `.git/rcl-converge-attempts` is an explicit policy bypass.
194
+
195
+ ```bash
196
+ rcl converge-attempt --target owner-repo-123 # default/persisted cap
197
+ rcl converge-attempt --target owner-repo-123 --max-attempts 10 # explicit override
198
+ ```
199
+
200
+ ---
201
+
156
202
  ## Config File
157
203
 
158
204
  Place `.review-council.yml` in your project root (or any parent directory). All fields are optional.
@@ -225,6 +271,12 @@ spec: SPEC.md
225
271
 
226
272
  Supported config file names: `.review-council.yml`, `.review-council.yaml`, `.review-council.json`, `review-council.config.js`.
227
273
 
274
+ Before dispatch, RCL prints the expanded reviewer × chunk call count,
275
+ concurrency, wave count, timeout, and timeout-bound queue estimate. Interactive
276
+ runs update the spinner; redirected runs emit periodic heartbeat and bounded
277
+ completion lines with status counters, so a long queue is distinguishable from
278
+ a hung process.
279
+
228
280
  ---
229
281
 
230
282
  ## How Consensus Works
@@ -60,6 +60,70 @@ function extractJsonCandidates(text) {
60
60
  }
61
61
  return candidates;
62
62
  }
63
+ /**
64
+ * Gemini occasionally emits literal U+0000–U+001F characters inside a JSON
65
+ * string even when responseMimeType is application/json. Those characters
66
+ * have exactly one semantics-preserving JSON representation: a unicode
67
+ * escape. Repair only that unambiguous shape; controls outside strings and
68
+ * every other syntax error remain failures.
69
+ */
70
+ function escapeUnquotedControlCharactersInStrings(candidate) {
71
+ let inString = false;
72
+ let escaped = false;
73
+ let repaired = 0;
74
+ let repairedInString = 0;
75
+ let text = '';
76
+ for (let index = 0; index < candidate.length; index++) {
77
+ const char = candidate[index];
78
+ if (!inString) {
79
+ if (char === '"') {
80
+ inString = true;
81
+ repairedInString = 0;
82
+ }
83
+ text += char;
84
+ continue;
85
+ }
86
+ if (escaped) {
87
+ escaped = false;
88
+ text += char;
89
+ continue;
90
+ }
91
+ if (char === '\\') {
92
+ escaped = true;
93
+ text += char;
94
+ continue;
95
+ }
96
+ if (char === '"') {
97
+ if (repairedInString > 0) {
98
+ let nextIndex = index + 1;
99
+ while (nextIndex < candidate.length && /\s/.test(candidate[nextIndex])) {
100
+ nextIndex++;
101
+ }
102
+ // A quoted token followed by ':' is an object key, not a value.
103
+ // Leave malformed keys on the strict failure path.
104
+ if (candidate[nextIndex] === ':')
105
+ return undefined;
106
+ }
107
+ inString = false;
108
+ text += char;
109
+ continue;
110
+ }
111
+ const code = char.charCodeAt(0);
112
+ if (code <= 0x1f) {
113
+ text += `\\u${code.toString(16).padStart(4, '0')}`;
114
+ repaired++;
115
+ repairedInString++;
116
+ }
117
+ else {
118
+ text += char;
119
+ }
120
+ }
121
+ // Do not present a partial lexical rewrite as a repair. JSON.parse would
122
+ // still reject an unterminated string or dangling escape, but withholding
123
+ // the repaired candidate keeps the fallback deliberately narrow and avoids
124
+ // emitting a misleading repair warning for otherwise malformed output.
125
+ return repaired > 0 && !inString && !escaped ? { text, repaired } : undefined;
126
+ }
63
127
  /** Assign stable, unique ids: empty or colliding ids are regenerated. */
64
128
  function normalizeIds(findings, model, role) {
65
129
  const modelSlug = model.replace(/[^a-z0-9]/gi, '');
@@ -103,6 +167,23 @@ export function parseReviewOutput(rawOutput, model, role) {
103
167
  lastParseError = err;
104
168
  }
105
169
  }
170
+ if (!parsedOk) {
171
+ for (const candidate of candidates) {
172
+ const repair = escapeUnquotedControlCharactersInStrings(candidate);
173
+ if (!repair)
174
+ continue;
175
+ try {
176
+ parsed = JSON.parse(repair.text);
177
+ parsedOk = true;
178
+ warnings.push(`${model}/${role}: repaired ${repair.repaired} unescaped JSON control character(s) inside string values`);
179
+ break;
180
+ }
181
+ catch {
182
+ // The candidate has other damage too. Keep the original strict parse
183
+ // error as the diagnostic and classify the response as unusable.
184
+ }
185
+ }
186
+ }
106
187
  if (!parsedOk) {
107
188
  warnings.push(`${model}/${role}: JSON parse error: ${String(lastParseError)}`);
108
189
  return { findings: [], warnings, dropped: 0, unusable: true };
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/consensus/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/consensus/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export declare const DEFAULT_CONVERGE_ATTEMPT_CAP = 7;
2
+ declare const STATE_VERSION = 2;
3
+ export interface ConvergeAttemptRecord {
4
+ attempt: number;
5
+ claimedAt: string;
6
+ pid: number;
7
+ source: 'claim';
8
+ }
9
+ export interface ConvergeAttemptState {
10
+ version: typeof STATE_VERSION;
11
+ target: string;
12
+ cap: number;
13
+ migratedAttempts: number;
14
+ attemptsUsed: number;
15
+ attempts: ConvergeAttemptRecord[];
16
+ updatedAt: string;
17
+ }
18
+ export interface ConvergeAttemptClaim {
19
+ target: string;
20
+ attempt: number;
21
+ attemptsUsed: number;
22
+ cap: number;
23
+ stateFile: string;
24
+ warning?: string;
25
+ }
26
+ export declare class ConvergeAttemptBudgetExceededError extends Error {
27
+ readonly target: string;
28
+ readonly attemptsUsed: number;
29
+ readonly cap: number;
30
+ readonly code = "RCL_CONVERGE_ATTEMPT_CAP";
31
+ constructor(target: string, attemptsUsed: number, cap: number);
32
+ }
33
+ export declare class ConvergeAttemptStateError extends Error {
34
+ readonly code = "RCL_CONVERGE_ATTEMPT_STATE";
35
+ constructor(message: string, options?: ErrorOptions);
36
+ }
37
+ export declare function convergeAttemptErrorExitCode(err: unknown): 2 | 3;
38
+ interface ClaimOptions {
39
+ gitCommonDir: string;
40
+ target: string;
41
+ maxAttempts?: number;
42
+ now?: () => Date;
43
+ recordPid?: number;
44
+ lockTimeoutMs?: number;
45
+ lockRetryMs?: number;
46
+ }
47
+ export declare function convergeAttemptStatePath(gitCommonDir: string, target: string): string;
48
+ /**
49
+ * Atomically consume one convergence attempt before a council process starts.
50
+ * The claim is intentionally outcome-blind: once returned, a failed launch,
51
+ * timeout, kill, missing report, or inconclusive review has still spent the
52
+ * attempt. This makes the cost ceiling independent of agent bookkeeping.
53
+ */
54
+ export declare function claimConvergeAttempt(options: ClaimOptions): Promise<ConvergeAttemptClaim>;
55
+ export declare function loadConvergeAttemptState(gitCommonDir: string, target: string): Promise<ConvergeAttemptState | undefined>;
56
+ export declare function resolveGitCommonDir(cwd?: string): Promise<string>;
57
+ export {};
@@ -0,0 +1,578 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { link, lstat, mkdir, open, readFile, realpath, rename, rm, unlink, writeFile, } from 'node:fs/promises';
4
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
5
+ import { promisify } from 'node:util';
6
+ export const DEFAULT_CONVERGE_ATTEMPT_CAP = 7;
7
+ const STATE_VERSION = 2;
8
+ const STATE_DIR = 'rcl-converge-attempts';
9
+ const DEFAULT_LOCK_TIMEOUT_MS = 5_000;
10
+ const DEFAULT_LOCK_RETRY_MS = 10;
11
+ const execFileAsync = promisify(execFile);
12
+ export class ConvergeAttemptBudgetExceededError extends Error {
13
+ target;
14
+ attemptsUsed;
15
+ cap;
16
+ code = 'RCL_CONVERGE_ATTEMPT_CAP';
17
+ constructor(target, attemptsUsed, cap) {
18
+ super(`Convergence attempt budget exhausted for ${target}: ${attemptsUsed}/${cap} attempts used. ` +
19
+ 'No provider calls were started. Ask the user whether to continue; only after explicit ' +
20
+ 'approval, retry with a higher --max-attempts value.');
21
+ this.target = target;
22
+ this.attemptsUsed = attemptsUsed;
23
+ this.cap = cap;
24
+ this.name = 'ConvergeAttemptBudgetExceededError';
25
+ }
26
+ }
27
+ export class ConvergeAttemptStateError extends Error {
28
+ code = 'RCL_CONVERGE_ATTEMPT_STATE';
29
+ constructor(message, options) {
30
+ super(message, options);
31
+ this.name = 'ConvergeAttemptStateError';
32
+ }
33
+ }
34
+ export function convergeAttemptErrorExitCode(err) {
35
+ return err instanceof ConvergeAttemptBudgetExceededError ? 2 : 3;
36
+ }
37
+ function validateTarget(target) {
38
+ const trimmed = target.trim();
39
+ if (!trimmed) {
40
+ throw new ConvergeAttemptStateError('Convergence target must not be empty.');
41
+ }
42
+ return trimmed;
43
+ }
44
+ function validateCap(maxAttempts) {
45
+ if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {
46
+ throw new ConvergeAttemptStateError('maxAttempts (--max-attempts) must be a positive safe integer.');
47
+ }
48
+ return maxAttempts;
49
+ }
50
+ function stateBaseName(target) {
51
+ const slug = target.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 48);
52
+ const digest = createHash('sha256').update(target).digest('hex').slice(0, 16);
53
+ return `${slug || 'target'}-${digest}`;
54
+ }
55
+ export function convergeAttemptStatePath(gitCommonDir, target) {
56
+ return join(resolve(gitCommonDir), STATE_DIR, `${stateBaseName(validateTarget(target))}.json`);
57
+ }
58
+ function isNodeError(err, code) {
59
+ return err instanceof Error && err.code === code;
60
+ }
61
+ function validateState(value, expectedTarget, stateFile) {
62
+ if (typeof value !== 'object' || value === null) {
63
+ throw new ConvergeAttemptStateError(`Invalid convergence attempt state: ${stateFile}`);
64
+ }
65
+ const state = value;
66
+ const attempts = state.attempts;
67
+ if (state.version !== STATE_VERSION ||
68
+ state.target !== expectedTarget ||
69
+ !Number.isSafeInteger(state.cap) ||
70
+ (state.cap ?? 0) < 1 ||
71
+ !Number.isSafeInteger(state.migratedAttempts) ||
72
+ (state.migratedAttempts ?? -1) < 0 ||
73
+ !Number.isSafeInteger(state.attemptsUsed) ||
74
+ (state.attemptsUsed ?? -1) < 0 ||
75
+ !Array.isArray(attempts) ||
76
+ attempts.length + (state.migratedAttempts ?? 0) !== state.attemptsUsed ||
77
+ typeof state.updatedAt !== 'string' ||
78
+ attempts.some((record, index) => typeof record !== 'object' ||
79
+ record === null ||
80
+ record.attempt !== (state.migratedAttempts ?? 0) + index + 1 ||
81
+ typeof record.claimedAt !== 'string' ||
82
+ !Number.isInteger(record.pid) ||
83
+ record.source !== 'claim')) {
84
+ throw new ConvergeAttemptStateError(`Invalid convergence attempt state in ${stateFile}; refusing to reset the safety budget.`);
85
+ }
86
+ return state;
87
+ }
88
+ async function stateFromExistingLedger(gitCommonDir, target, timestamp) {
89
+ // The skill already restricts TARGET to this alphabet. For a direct CLI
90
+ // caller with another shape, skip migration rather than deriving a path
91
+ // from untrusted input; the hashed machine-state path remains safe.
92
+ if (!/^[A-Za-z0-9._-]+$/.test(target))
93
+ return undefined;
94
+ const ledgerFile = join(resolve(gitCommonDir), `rcl-converge-${target}-ledger.md`);
95
+ let ledger;
96
+ try {
97
+ ledger = await readFile(ledgerFile, 'utf8');
98
+ }
99
+ catch (err) {
100
+ if (isNodeError(err, 'ENOENT'))
101
+ return undefined;
102
+ throw new ConvergeAttemptStateError(`Could not read existing convergence ledger: ${ledgerFile}`, {
103
+ cause: err,
104
+ });
105
+ }
106
+ let attemptsUsed = 0;
107
+ for (const match of ledger.matchAll(/^## Round\s+(\d+)\b/gm)) {
108
+ const round = Number(match[1]);
109
+ if (!Number.isSafeInteger(round) || round < 1) {
110
+ throw new ConvergeAttemptStateError(`Invalid round number in existing convergence ledger: ${ledgerFile}`);
111
+ }
112
+ attemptsUsed = Math.max(attemptsUsed, round);
113
+ }
114
+ if (attemptsUsed === 0)
115
+ return undefined;
116
+ return {
117
+ version: STATE_VERSION,
118
+ target,
119
+ cap: DEFAULT_CONVERGE_ATTEMPT_CAP,
120
+ migratedAttempts: attemptsUsed,
121
+ attemptsUsed,
122
+ attempts: [],
123
+ updatedAt: timestamp,
124
+ };
125
+ }
126
+ async function readState(stateFile, target) {
127
+ let raw;
128
+ try {
129
+ raw = await readFile(stateFile, 'utf8');
130
+ }
131
+ catch (err) {
132
+ if (isNodeError(err, 'ENOENT'))
133
+ return undefined;
134
+ throw new ConvergeAttemptStateError(`Could not read convergence attempt state: ${stateFile}`, {
135
+ cause: err,
136
+ });
137
+ }
138
+ try {
139
+ return validateState(JSON.parse(raw), target, stateFile);
140
+ }
141
+ catch (err) {
142
+ if (err instanceof ConvergeAttemptStateError)
143
+ throw err;
144
+ throw new ConvergeAttemptStateError(`Invalid JSON in ${stateFile}; refusing to reset the safety budget.`, { cause: err });
145
+ }
146
+ }
147
+ function delay(ms) {
148
+ return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
149
+ }
150
+ function processIsAlive(pid) {
151
+ try {
152
+ process.kill(pid, 0);
153
+ return true;
154
+ }
155
+ catch (err) {
156
+ if (isNodeError(err, 'ESRCH'))
157
+ return false;
158
+ if (isNodeError(err, 'EPERM'))
159
+ return true;
160
+ throw err;
161
+ }
162
+ }
163
+ function parseLockOwner(raw) {
164
+ try {
165
+ const parsed = JSON.parse(raw);
166
+ if (parsed !== null &&
167
+ typeof parsed === 'object' &&
168
+ Number.isInteger(parsed.pid) &&
169
+ (parsed.pid ?? 0) > 0 &&
170
+ typeof parsed.claimedAt === 'string' &&
171
+ typeof parsed.token === 'string' &&
172
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(parsed.token)) {
173
+ return parsed;
174
+ }
175
+ }
176
+ catch (err) {
177
+ if (!(err instanceof SyntaxError))
178
+ throw err;
179
+ }
180
+ return undefined;
181
+ }
182
+ async function readLockSnapshot(lockFile) {
183
+ let handle;
184
+ try {
185
+ handle = await open(lockFile, 'r');
186
+ }
187
+ catch (err) {
188
+ if (isNodeError(err, 'ENOENT') ||
189
+ isNodeError(err, 'EISDIR') ||
190
+ isNodeError(err, 'EPERM')) {
191
+ return undefined;
192
+ }
193
+ throw err;
194
+ }
195
+ let raw;
196
+ let stats;
197
+ let primaryError;
198
+ try {
199
+ raw = await handle.readFile('utf8');
200
+ stats = await handle.stat({ bigint: true });
201
+ }
202
+ catch (err) {
203
+ primaryError = err;
204
+ if (isNodeError(err, 'EISDIR') || isNodeError(err, 'ENOTDIR'))
205
+ return undefined;
206
+ throw err;
207
+ }
208
+ finally {
209
+ try {
210
+ await handle.close();
211
+ }
212
+ catch (closeError) {
213
+ if (primaryError === undefined)
214
+ throw closeError;
215
+ }
216
+ }
217
+ const owner = parseLockOwner(raw);
218
+ return owner ? { owner, dev: stats.dev, ino: stats.ino } : undefined;
219
+ }
220
+ async function lockPathExists(lockFile) {
221
+ try {
222
+ await lstat(lockFile);
223
+ return true;
224
+ }
225
+ catch (err) {
226
+ if (isNodeError(err, 'ENOENT'))
227
+ return false;
228
+ throw err;
229
+ }
230
+ }
231
+ async function isPublicationContention(err, destination) {
232
+ if (isNodeError(err, 'EEXIST') || isNodeError(err, 'ENOTEMPTY'))
233
+ return true;
234
+ // Windows can report an existing destination as EPERM or EACCES. Treat
235
+ // those as contention only when the destination now exists;
236
+ // a genuine permission failure on an absent path remains infrastructure
237
+ // failure and must fail closed.
238
+ return ((isNodeError(err, 'EPERM') || isNodeError(err, 'EACCES')) &&
239
+ (await lockPathExists(destination)));
240
+ }
241
+ async function tryAcquireOwnedLock(lockFile, owner) {
242
+ // Fully write a private regular file, then atomically hard-link it into the
243
+ // canonical path. link(2) never replaces an existing file *or directory*,
244
+ // so this remains safe while an older mkdir-based client is in flight.
245
+ const claimFile = `${lockFile}.claim.${process.pid}.${randomUUID()}`;
246
+ let primaryError;
247
+ let published = false;
248
+ try {
249
+ await writeFile(claimFile, `${JSON.stringify(owner)}\n`, {
250
+ encoding: 'utf8',
251
+ flag: 'wx',
252
+ mode: 0o600,
253
+ });
254
+ try {
255
+ await link(claimFile, lockFile);
256
+ }
257
+ catch (err) {
258
+ if (await isPublicationContention(err, lockFile))
259
+ return false;
260
+ throw err;
261
+ }
262
+ published = true;
263
+ return true;
264
+ }
265
+ catch (err) {
266
+ primaryError = err;
267
+ throw err;
268
+ }
269
+ finally {
270
+ try {
271
+ await rm(claimFile, { force: true });
272
+ }
273
+ catch (cleanupError) {
274
+ // Once linked, the canonical inode is complete and authoritative; an
275
+ // orphaned private hard link is harmless and must not negate success.
276
+ if (!published && primaryError === undefined)
277
+ throw cleanupError;
278
+ }
279
+ }
280
+ }
281
+ async function pathMatchesSnapshot(path, snapshot) {
282
+ try {
283
+ const stats = await lstat(path, { bigint: true });
284
+ return stats.dev === snapshot.dev && stats.ino === snapshot.ino;
285
+ }
286
+ catch (err) {
287
+ if (isNodeError(err, 'ENOENT'))
288
+ return false;
289
+ throw err;
290
+ }
291
+ }
292
+ async function reclaimStaleLock(lockFile, staleSnapshot) {
293
+ const current = await readLockSnapshot(lockFile);
294
+ if (!current ||
295
+ current.owner.token !== staleSnapshot.owner.token ||
296
+ current.dev !== staleSnapshot.dev ||
297
+ current.ino !== staleSnapshot.ino ||
298
+ processIsAlive(current.owner.pid)) {
299
+ return false;
300
+ }
301
+ // Exactly one reclaimer can create this generation's hard-link tombstone.
302
+ // Every delayed peer sees EEXIST and is forbidden from unlinking canonical,
303
+ // so it can never remove a newer generation that appeared later.
304
+ const staleFile = `${lockFile}.stale.${current.owner.token}`;
305
+ try {
306
+ await link(lockFile, staleFile);
307
+ }
308
+ catch (err) {
309
+ if (isNodeError(err, 'ENOENT') || (await isPublicationContention(err, staleFile)))
310
+ return false;
311
+ throw err;
312
+ }
313
+ const stillCanonical = await pathMatchesSnapshot(lockFile, current);
314
+ const ownsTombstone = await pathMatchesSnapshot(staleFile, current);
315
+ if (!stillCanonical || !ownsTombstone || processIsAlive(current.owner.pid)) {
316
+ await rm(staleFile, { force: true });
317
+ return !stillCanonical;
318
+ }
319
+ try {
320
+ await unlink(lockFile);
321
+ }
322
+ catch (err) {
323
+ if (!isNodeError(err, 'ENOENT'))
324
+ throw err;
325
+ }
326
+ // Inode comparison makes even an arbitrarily delayed reclaimer safe after
327
+ // this point, so the tombstone can be removed without reopening the race.
328
+ try {
329
+ await rm(staleFile, { force: true });
330
+ }
331
+ catch {
332
+ // A leftover hard link is harmless and generation-scoped.
333
+ }
334
+ return true;
335
+ }
336
+ async function acquireOwnedLock(lockFile, timeoutMs, retryMs, owner) {
337
+ const deadline = Date.now() + timeoutMs;
338
+ let waitMs = Math.max(1, retryMs);
339
+ while (true) {
340
+ // These reads choose between acquire, reclaim, and fail-closed waiting;
341
+ // they do not provide mutual exclusion. Exclusive hard-link publication
342
+ // and the generation tombstone are the serialization primitives.
343
+ const current = await readLockSnapshot(lockFile);
344
+ if (current && !processIsAlive(current.owner.pid)) {
345
+ if (await reclaimStaleLock(lockFile, current)) {
346
+ continue;
347
+ }
348
+ }
349
+ else if (!current && !(await lockPathExists(lockFile))) {
350
+ if (await tryAcquireOwnedLock(lockFile, owner))
351
+ return;
352
+ }
353
+ if (Date.now() >= deadline) {
354
+ throw new ConvergeAttemptStateError(`Timed out waiting for convergence attempt lock: ${lockFile}. ` +
355
+ 'Refusing to start provider calls while accounting is uncertain. ' +
356
+ 'If no live converge-attempt process owns it, move or remove that lock path and retry.');
357
+ }
358
+ await delay(Math.min(waitMs, Math.max(1, deadline - Date.now())));
359
+ waitMs = Math.min(waitMs * 2, 250);
360
+ }
361
+ }
362
+ async function syncDirectory(path) {
363
+ // Windows does not expose directory handles that Node can fsync. The state
364
+ // file itself is still flushed before the atomic rename; POSIX platforms
365
+ // additionally flush the directory entry here.
366
+ if (process.platform === 'win32')
367
+ return;
368
+ const directory = await open(path, 'r');
369
+ let primaryError;
370
+ try {
371
+ await directory.sync();
372
+ }
373
+ catch (err) {
374
+ primaryError = err;
375
+ throw err;
376
+ }
377
+ finally {
378
+ try {
379
+ await directory.close();
380
+ }
381
+ catch (closeError) {
382
+ if (primaryError === undefined)
383
+ throw closeError;
384
+ }
385
+ }
386
+ }
387
+ async function writeStateAtomically(stateFile, state) {
388
+ const tempFile = `${stateFile}.${process.pid}.${randomUUID()}.tmp`;
389
+ let primaryError;
390
+ let renamed = false;
391
+ try {
392
+ const tempHandle = await open(tempFile, 'wx', 0o600);
393
+ let tempHandleError;
394
+ try {
395
+ await tempHandle.writeFile(`${JSON.stringify(state, null, 2)}\n`, 'utf8');
396
+ await tempHandle.sync();
397
+ }
398
+ catch (err) {
399
+ tempHandleError = err;
400
+ throw err;
401
+ }
402
+ finally {
403
+ try {
404
+ await tempHandle.close();
405
+ }
406
+ catch (closeError) {
407
+ if (tempHandleError === undefined)
408
+ throw closeError;
409
+ }
410
+ }
411
+ await rename(tempFile, stateFile);
412
+ renamed = true;
413
+ // fsyncing the file before rename makes its contents durable; syncing the
414
+ // parent directory makes the atomic name replacement durable too.
415
+ await syncDirectory(dirname(stateFile));
416
+ }
417
+ catch (err) {
418
+ primaryError =
419
+ renamed && !(err instanceof ConvergeAttemptStateError)
420
+ ? new ConvergeAttemptStateError(`Attempt state was replaced but its directory durability sync failed: ${stateFile}. ` +
421
+ 'Treat the attempt as spent and do not retry automatically.', { cause: err })
422
+ : err;
423
+ throw primaryError;
424
+ }
425
+ finally {
426
+ try {
427
+ await rm(tempFile, { force: true });
428
+ }
429
+ catch (cleanupError) {
430
+ if (primaryError === undefined)
431
+ throw cleanupError;
432
+ }
433
+ }
434
+ }
435
+ async function releaseOwnedLock(lockFile, owner) {
436
+ const current = await readLockSnapshot(lockFile);
437
+ if (!current || current.owner.token !== owner.token) {
438
+ throw new ConvergeAttemptStateError(`Convergence attempt lock ownership changed unexpectedly: ${lockFile}. ` +
439
+ 'Refusing to remove a lock that may belong to another process.');
440
+ }
441
+ const releasedFile = `${lockFile}.released.${owner.token}`;
442
+ await rename(lockFile, releasedFile);
443
+ // The canonical lock is already gone. A cleanup failure leaves only a
444
+ // harmless generation-scoped artifact and must not turn a recorded claim
445
+ // into a reported failure that an agent might retry.
446
+ try {
447
+ await rm(releasedFile, { force: true });
448
+ }
449
+ catch {
450
+ // Intentionally retained for later manual cleanup.
451
+ }
452
+ }
453
+ /**
454
+ * Atomically consume one convergence attempt before a council process starts.
455
+ * The claim is intentionally outcome-blind: once returned, a failed launch,
456
+ * timeout, kill, missing report, or inconclusive review has still spent the
457
+ * attempt. This makes the cost ceiling independent of agent bookkeeping.
458
+ */
459
+ export async function claimConvergeAttempt(options) {
460
+ const target = validateTarget(options.target);
461
+ const requestedCap = options.maxAttempts === undefined ? undefined : validateCap(options.maxAttempts);
462
+ const stateFile = convergeAttemptStatePath(options.gitCommonDir, target);
463
+ const stateDir = join(resolve(options.gitCommonDir), STATE_DIR);
464
+ const lockFile = `${stateFile}.lock`;
465
+ const now = options.now ?? (() => new Date());
466
+ const recordPid = options.recordPid ?? process.pid;
467
+ const lockOwner = {
468
+ pid: process.pid,
469
+ claimedAt: now().toISOString(),
470
+ token: randomUUID(),
471
+ };
472
+ await mkdir(stateDir, { recursive: true, mode: 0o700 });
473
+ // Persist a newly created directory entry before relying on state files
474
+ // inside it. Repeating the sync is intentional: if a prior sync failed,
475
+ // the next invocation must not silently skip the durability barrier merely
476
+ // because mkdir now observes the directory.
477
+ await syncDirectory(dirname(stateDir));
478
+ await acquireOwnedLock(lockFile, options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS, options.lockRetryMs ?? DEFAULT_LOCK_RETRY_MS, lockOwner);
479
+ let claim;
480
+ let claimError;
481
+ try {
482
+ const timestamp = now().toISOString();
483
+ const stored = await readState(stateFile, target);
484
+ const previous = stored ?? (await stateFromExistingLedger(options.gitCommonDir, target, timestamp));
485
+ const attemptsUsed = previous?.attemptsUsed ?? 0;
486
+ // Omitting --max-attempts preserves an existing target's configured cap.
487
+ // Supplying it is an explicit invocation-time override: it can raise or
488
+ // lower the persisted boundary after the workflow has obtained approval.
489
+ const effectiveCap = requestedCap ?? previous?.cap ?? DEFAULT_CONVERGE_ATTEMPT_CAP;
490
+ if (attemptsUsed >= effectiveCap) {
491
+ // Persist a migrated ledger even when it already exhausts the cap, so
492
+ // later processes do not depend on reparsing mutable prose. Also
493
+ // persist a newly tightened cap even when the claim itself is refused.
494
+ if (previous && (!stored || previous.cap !== effectiveCap)) {
495
+ await writeStateAtomically(stateFile, {
496
+ ...previous,
497
+ cap: effectiveCap,
498
+ updatedAt: timestamp,
499
+ });
500
+ }
501
+ throw new ConvergeAttemptBudgetExceededError(target, attemptsUsed, effectiveCap);
502
+ }
503
+ const attempt = attemptsUsed + 1;
504
+ const state = {
505
+ version: STATE_VERSION,
506
+ target,
507
+ cap: effectiveCap,
508
+ migratedAttempts: previous?.migratedAttempts ?? 0,
509
+ attemptsUsed: attempt,
510
+ attempts: [
511
+ ...(previous?.attempts ?? []),
512
+ { attempt, claimedAt: timestamp, pid: recordPid, source: 'claim' },
513
+ ],
514
+ updatedAt: timestamp,
515
+ };
516
+ await writeStateAtomically(stateFile, state);
517
+ claim = { target, attempt, attemptsUsed: attempt, cap: effectiveCap, stateFile };
518
+ }
519
+ catch (err) {
520
+ claimError = err;
521
+ }
522
+ let releaseError;
523
+ try {
524
+ await releaseOwnedLock(lockFile, lockOwner);
525
+ }
526
+ catch (err) {
527
+ releaseError = err;
528
+ }
529
+ if (claimError !== undefined) {
530
+ if (releaseError !== undefined) {
531
+ const claimMessage = claimError instanceof Error ? claimError.message : String(claimError);
532
+ const releaseMessage = releaseError instanceof Error ? releaseError.message : String(releaseError);
533
+ // A cap refusal alone is exit 2, but a simultaneous release failure
534
+ // means the accounting lock is unhealthy. Classify the combined outcome
535
+ // as infrastructure failure so raising the cap is never suggested as a
536
+ // remedy for a stranded lock.
537
+ throw new ConvergeAttemptStateError(`${claimMessage} Lock release also failed: ${releaseMessage}`, { cause: releaseError });
538
+ }
539
+ throw claimError;
540
+ }
541
+ if (!claim) {
542
+ throw new ConvergeAttemptStateError('Attempt accounting ended without a claim or error.');
543
+ }
544
+ if (releaseError !== undefined) {
545
+ const releaseMessage = releaseError instanceof Error ? releaseError.message : String(releaseError);
546
+ claim.warning =
547
+ `Attempt ${claim.attempt}/${claim.cap} is durably recorded, but lock release failed: ` +
548
+ `${releaseMessage} Do not retry this claim; the review may proceed.`;
549
+ }
550
+ return claim;
551
+ }
552
+ export async function loadConvergeAttemptState(gitCommonDir, target) {
553
+ return readState(convergeAttemptStatePath(gitCommonDir, target), validateTarget(target));
554
+ }
555
+ export async function resolveGitCommonDir(cwd = process.cwd()) {
556
+ let stdout;
557
+ try {
558
+ const result = await execFileAsync('git', ['rev-parse', '--git-common-dir'], {
559
+ cwd,
560
+ encoding: 'utf8',
561
+ });
562
+ stdout = result.stdout;
563
+ }
564
+ catch (err) {
565
+ throw new ConvergeAttemptStateError('Could not resolve the repository common Git directory.', {
566
+ cause: err,
567
+ });
568
+ }
569
+ const value = stdout.trim();
570
+ if (!value) {
571
+ throw new ConvergeAttemptStateError('Git returned an empty common-directory path.');
572
+ }
573
+ // Worktrees may spell the same directory through a symlinked system path
574
+ // (macOS commonly returns /var from one checkout and /private/var from
575
+ // another). Canonicalize it so one repository cannot acquire two budgets.
576
+ return realpath(isAbsolute(value) ? value : resolve(cwd, value));
577
+ }
578
+ //# sourceMappingURL=attempt-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attempt-budget.js","sourceRoot":"","sources":["../../src/converge/attempt-budget.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -27,7 +27,9 @@ import { printReviewSummary } from './output/terminal.js';
27
27
  import { postGitHubReview } from './output/github.js';
28
28
  import { toJson, writeJsonOutput } from './output/json.js';
29
29
  import { writeMarkdownOutput } from './output/markdown.js';
30
+ import { buildCouncilRunPlan, CouncilProgressReporter, formatCouncilRunPlan, } from './output/progress.js';
30
31
  import { resolveFinding, buildDiscussPrompts, runDiscussion, loadContextDocs, } from './discuss.js';
32
+ import { DEFAULT_CONVERGE_ATTEMPT_CAP, claimConvergeAttempt, ConvergeAttemptBudgetExceededError, convergeAttemptErrorExitCode, ConvergeAttemptStateError, resolveGitCommonDir, } from './converge/attempt-budget.js';
31
33
  const program = new Command();
32
34
  program
33
35
  .name('rcl')
@@ -103,6 +105,69 @@ program
103
105
  .action(async (question, opts) => {
104
106
  await runDiscuss(question, opts);
105
107
  });
108
+ // Machine-enforced cost/safety guard used by the rcl-converge workflow.
109
+ program
110
+ .command('converge-attempt')
111
+ .description('Atomically consume one persisted rcl-converge attempt before starting a review')
112
+ // Optional-value syntax is deliberate: Commander otherwise exits before
113
+ // the action, preventing --json callers from receiving structured errors
114
+ // for a missing value. The action enforces both values as required.
115
+ .option('--target [key]', 'Required stable repository-and-PR/branch convergence target key')
116
+ .option('--max-attempts [n]', `Explicit per-target cap override (default ${DEFAULT_CONVERGE_ATTEMPT_CAP} for a new target)`)
117
+ .option('--json', 'Output the claim as JSON')
118
+ .action(async (opts) => {
119
+ try {
120
+ if (typeof opts.target !== 'string' || opts.target.trim() === '') {
121
+ throw new ConvergeAttemptStateError('--target is required.');
122
+ }
123
+ let maxAttempts;
124
+ if (opts.maxAttempts !== undefined) {
125
+ maxAttempts = typeof opts.maxAttempts === 'string' ? Number(opts.maxAttempts) : NaN;
126
+ if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {
127
+ throw new ConvergeAttemptStateError('maxAttempts (--max-attempts) must be a positive safe integer.');
128
+ }
129
+ }
130
+ const claim = await claimConvergeAttempt({
131
+ gitCommonDir: await resolveGitCommonDir(),
132
+ target: opts.target,
133
+ maxAttempts,
134
+ });
135
+ if (opts.json) {
136
+ console.log(JSON.stringify(claim));
137
+ }
138
+ else {
139
+ console.log(`Convergence attempt ${claim.attempt}/${claim.cap} claimed for ${claim.target}. ` +
140
+ `State: ${claim.stateFile}`);
141
+ if (claim.warning)
142
+ console.error(chalk.yellow(claim.warning));
143
+ }
144
+ }
145
+ catch (err) {
146
+ const message = err instanceof Error ? err.message : String(err);
147
+ const code = err instanceof ConvergeAttemptBudgetExceededError
148
+ ? err.code
149
+ : err instanceof ConvergeAttemptStateError
150
+ ? err.code
151
+ : 'RCL_CONVERGE_ATTEMPT_ERROR';
152
+ if (opts.json) {
153
+ console.error(JSON.stringify({
154
+ error: {
155
+ code,
156
+ message,
157
+ ...(err instanceof ConvergeAttemptBudgetExceededError
158
+ ? { attemptsUsed: err.attemptsUsed, cap: err.cap, target: err.target }
159
+ : {}),
160
+ },
161
+ }));
162
+ }
163
+ else {
164
+ console.error(chalk.red(message));
165
+ }
166
+ // Exit 2 is the expected consent boundary. Exit 3 means accounting or
167
+ // infrastructure failed and raising the cap is not the remediation.
168
+ process.exitCode = convergeAttemptErrorExitCode(err);
169
+ }
170
+ });
106
171
  // roles subcommand
107
172
  const rolesCmd = program.command('roles').description('Manage and inspect roles');
108
173
  rolesCmd
@@ -306,32 +371,54 @@ async function executeCouncil(spinner, prepared, diff, opts, planContext) {
306
371
  contextFiles: contextFiles.length > 0 ? contextFiles : undefined,
307
372
  plan: planContext,
308
373
  })));
309
- spinner.text = `Running ${chunkAssignments.length} reviews (${assignments.length} reviewers × ${chunks.length} chunk(s))...`;
310
- spinner.start();
311
374
  const startTime = Date.now();
312
- const completedReviews = [];
313
375
  const totalCalls = chunkAssignments.length;
314
- const chunkReviews = await runReviews(chunkAssignments.map((ca) => ca.assignment), prompts, {
315
- // Fall back to the shared constants, never to inline literals:
316
- // duplicated defaults drift (this read 120_000 after the default
317
- // moved to 600_000).
318
- timeoutMs: config.timeout ?? DEFAULT_TIMEOUT_MS,
319
- maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,
320
- concurrency: config.concurrency ?? DEFAULT_CONCURRENCY,
321
- reasoningEffort: config.reasoningEffort ?? DEFAULT_REASONING_EFFORT,
322
- onReviewComplete: (review) => {
323
- completedReviews.push(review);
324
- const done = completedReviews.length;
325
- const icon = review.status === 'success'
326
- ? '✓'
327
- : review.status === 'timeout'
328
- ? '⏱'
329
- : review.status === 'parse_failed'
330
- ? '⚠'
331
- : '✗';
332
- spinner.text = `Reviews: ${done}/${totalCalls} [${icon} ${review.model}/${review.role}]`;
376
+ const timeoutMs = config.timeout ?? DEFAULT_TIMEOUT_MS;
377
+ const concurrency = config.concurrency ?? DEFAULT_CONCURRENCY;
378
+ const runPlan = buildCouncilRunPlan({
379
+ totalCalls,
380
+ reviewers: assignments.length,
381
+ chunks: chunks.length,
382
+ concurrency,
383
+ timeoutMs,
384
+ });
385
+ const planText = formatCouncilRunPlan(runPlan);
386
+ const interactive = process.stderr.isTTY === true;
387
+ if (interactive) {
388
+ spinner.text = planText;
389
+ spinner.start();
390
+ }
391
+ else {
392
+ spinner.stop();
393
+ process.stderr.write(`${planText}\n`);
394
+ }
395
+ const progress = new CouncilProgressReporter({
396
+ totalCalls,
397
+ interactive,
398
+ updateInteractive: (text) => {
399
+ spinner.text = text;
400
+ },
401
+ writeLine: (text) => {
402
+ process.stderr.write(`${text}\n`);
333
403
  },
334
404
  });
405
+ progress.start();
406
+ let chunkReviews;
407
+ try {
408
+ chunkReviews = await runReviews(chunkAssignments.map((ca) => ca.assignment), prompts, {
409
+ // Fall back to the shared constants, never to inline literals:
410
+ // duplicated defaults drift (this read 120_000 after the default
411
+ // moved to 600_000).
412
+ timeoutMs,
413
+ maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,
414
+ concurrency,
415
+ reasoningEffort: config.reasoningEffort ?? DEFAULT_REASONING_EFFORT,
416
+ onReviewComplete: (review) => progress.complete(review),
417
+ });
418
+ }
419
+ finally {
420
+ progress.stop();
421
+ }
335
422
  // Collapse per-chunk reviews back to one per (model, role) reviewer.
336
423
  const reviews = mergeChunkReviews(chunkReviews);
337
424
  spinner.text = 'Computing consensus...';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAc,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AAMtB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CACN,IAAI,CAAC,KAAK,CACR,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7F,CAAC,OAAO,CACV,CAAC;AAEJ,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CACV,2IAA2I,CAC5I;KACA,MAAM,CAAC,UAAU,EAAE,+DAA+D,CAAC;KACnF,MAAM,CAAC,gBAAgB,EAAE,oEAAoE,CAAC;KAC9F,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;KAClD,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CACL,mBAAmB,EACnB,uCAAuC,EACvC,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC,EACD,EAAc,CACf;KACA,MAAM,CACL,kBAAkB,EAClB,mDAAmD,EACnD,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC,EACD,EAAc,CACf;KACA,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;KAC5E,MAAM,CAAC,6BAA6B,EAAE,mEAAmE,CAAC;KAC1G,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,QAAQ,EAAE,kCAAkC,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;KAC5D,MAAM,CAAC,MAAM,EAAE,uDAAuD,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC;KACtG,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;KAClD,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CACL,mBAAmB,EACnB,uCAAuC,EACvC,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC,EACD,EAAc,CACf;KACA,MAAM,CACL,kBAAkB,EAClB,mDAAmD,EACnD,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC,EACD,EAAc,CACf;KACA,MAAM,CAAC,eAAe,EAAE,sEAAsE,CAAC;KAC/F,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;KAC5E,MAAM,CAAC,6BAA6B,EAAE,mEAAmE,CAAC;KAC1G,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;IACnC,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,6FAA6F,CAAC;KAC1G,cAAc,CAAC,iBAAiB,EAAE,kDAAkD,CAAC;KACrF,cAAc,CAAC,gBAAgB,EAAE,iEAAiE,CAAC;KACnG,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;KAC7E,MAAM,CACL,kBAAkB,EAClB,oDAAoD,EACpD,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC,EACD,EAAc,CACf;KACA,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,IAAI,EAAE,EAAE;IACvC,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;AAElF,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;IACvB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AA4BL;;;;GAIG;AACH;;;;GAIG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAgB;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC/C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAgB,EAChB,IAAoB,EACpB,aAAwB;IAExB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7C,2CAA2C;IAC3C,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC9F,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5E,2FAA2F;QAC3F,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChG,CAAC;IAED,yBAAyB;IACzB,IAAI,cAAoC,CAAC;IACzC,IAAI,iBAAqE,CAAC;IAE1E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,oBAAoB,CAAC,0BAA0B,IAAI,2BAA2B,CAAC,CAAC;YAC5F,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAClD,cAAc,GAAG,aAAa,CAAC;IACjC,CAAC;IAED,iBAAiB;IACjB,IAAI,WAA+B,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,6DAA6D;IAC7D,IAAI,cAAc,KAAK,aAAa,IAAI,cAAc,IAAI,WAAW,EAAE,CAAC;QACtE,cAAc,GAAG,CAAC,GAAG,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB;IACrB,MAAM,mBAAmB,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAE5D,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,YAAY,CAC9B,MAAM,EACN,cAAc,EACd,mBAAmB,IAAI,SAAS,EAChC,WAAW,CACZ,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACnC,MAAM;QACN,KAAK;QACL,eAAe;QACf,iBAAiB;QACjB,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAA0B,EAAE,IAIpD;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,8EAA8E;QAC9E,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACnF,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;YACxG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE3F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,OAAO,CAAC,IAAI,GAAG,uBAAuB,MAAM,IAAI,KAAK,OAAO,EAAE,EAAE,CAAC;QAEjE,eAAe;QACf,IAAI,IAAI,CAAC;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,IACL,MAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,MAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,MAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,MAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EACvB,CAAC;YACD,IAAI,GAAG,MAAM,aAAa,CAAC,MAAO,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAO,CAAC,CAAC;YAC5C,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CACV,OAAO,KAAK,QAAQ;gBAClB,CAAC,CAAC,8BAA8B;gBAChC,CAAC,CAAC,OAAO,KAAK,cAAc;oBAC1B,CAAC,CAAC,mCAAmC;oBACrC,CAAC,CAAC,4CAA4C,CACnD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAC3B,OAAgB,EAChB,QAAyB,EACzB,IAAU,EACV,IAAoB,EACpB,WAAmC;IAEnC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAEhE,iBAAiB;IACjB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAErC,OAAO,CAAC,IAAI,GAAG,qBAAqB,MAAM,CAAC,MAAM,cAAc,WAAW,CAAC,MAAM,kBAAkB,CAAC;IAEpG,mEAAmE;IACnE,wEAAwE;IACxE,qEAAqE;IACrE,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChD,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CACzD,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7C,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE;QAClC,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAChE,IAAI,EAAE,WAAW;KAClB,CAAC,CACH,CACF,CAAC;IAEF,OAAO,CAAC,IAAI,GAAG,WAAW,gBAAgB,CAAC,MAAM,aAAa,WAAW,CAAC,MAAM,gBAAgB,MAAM,CAAC,MAAM,eAAe,CAAC;IAC7H,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,gBAAgB,GAAkB,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAE3C,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAC3C,OAAO,EACP;QACE,+DAA+D;QAC/D,iEAAiE;QACjE,qBAAqB;QACrB,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,kBAAkB;QAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,mBAAmB;QACpD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,mBAAmB;QACtD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,wBAAwB;QACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACrC,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAC3B,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;wBAChC,CAAC,CAAC,GAAG;wBACL,CAAC,CAAC,GAAG,CAAC;YACd,OAAO,CAAC,IAAI,GAAG,YAAY,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;QAC3F,CAAC;KACF,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEhD,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC;IAExC,oCAAoC;IACpC,MAAM,MAAM,GAAG,mBAAmB,CAChC,OAAO,EACP,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,kBAAkB,CAAC,gBAAgB,EAC1E,MAAM,CAAC,UAAU,EAAE,gBAAgB,IAAI,kBAAkB,CAAC,gBAAgB,EAC1E,MAAM,CAAC,UAAU,EAAE,iBAAiB,IAAI,kBAAkB,CAAC,iBAAiB,CAC7E,CAAC;IAEF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;QACnE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB;QAC/C,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB;KACtD,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,qBAAqB,CAC9E,iBAAiB,EACjB;QACE,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,aAAa;QAC/C,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,iBAAiB;KACxD,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,IAAI,IAAI,CAAC;IACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAiB;QAC3B,OAAO;QACP,QAAQ,EAAE,cAAc;QACxB,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,EAAE,sBAAsB,EAAE,eAAe,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,EAAE;YACL,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YACvE,gBAAgB;YAChB,YAAY,EAAE,iBAAiB,CAAC,MAAM;YACtC,cAAc,EAAE,eAAe,CAAC,MAAM;YACtC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC;KACF,CAAC;IAEF,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnC,SAAS;IACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9E,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACD,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,IAOC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,MAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAiB,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;YACxB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7D,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,IAAI,GAAG,UAAU,MAAM,CAAC,MAAM,oBAAoB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;QAE3F,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE;YACnD,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,kBAAkB;YAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,mBAAmB;YACpD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,wBAAwB;SACpE,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,wBAAwB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QAE5H,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnI,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9K,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC;QAEjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC3B,GAAG;oBACH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAE3E,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,IAAyC;IAEzC,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,KAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CACV,oBAAoB,IAAI,CAAC,KAAK,kBAAkB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/E,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAEzE,OAAO,CAAC,IAAI,GAAG,iBAAiB,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { ModelReview } from '../consensus/types.js';
2
+ export interface CouncilRunPlan {
3
+ totalCalls: number;
4
+ reviewers: number;
5
+ chunks: number;
6
+ concurrency: number;
7
+ waves: number;
8
+ timeoutMs: number;
9
+ timeoutBoundMs: number;
10
+ }
11
+ export declare function buildCouncilRunPlan(options: {
12
+ totalCalls: number;
13
+ reviewers: number;
14
+ chunks: number;
15
+ concurrency: number;
16
+ timeoutMs: number;
17
+ }): CouncilRunPlan;
18
+ export declare function formatDuration(ms: number): string;
19
+ export declare function formatCouncilRunPlan(plan: CouncilRunPlan): string;
20
+ interface ProgressReporterOptions {
21
+ totalCalls: number;
22
+ interactive: boolean;
23
+ updateInteractive: (text: string) => void;
24
+ writeLine: (text: string) => void;
25
+ now?: () => number;
26
+ heartbeatMs?: number;
27
+ maxCompletionLines?: number;
28
+ }
29
+ /**
30
+ * Keeps the interactive spinner compact while making redirected runs
31
+ * observable. Non-TTY output is bounded to periodic heartbeats plus roughly
32
+ * `maxCompletionLines` completion checkpoints, even for very large councils.
33
+ */
34
+ export declare class CouncilProgressReporter {
35
+ private readonly options;
36
+ private readonly now;
37
+ private readonly heartbeatMs;
38
+ private readonly completionStride;
39
+ private readonly startedAt;
40
+ private lastLineAt;
41
+ private completed;
42
+ private heartbeat;
43
+ private readonly counters;
44
+ constructor(options: ProgressReporterOptions);
45
+ start(): void;
46
+ complete(review: ModelReview): void;
47
+ stop(): void;
48
+ private summary;
49
+ private writeNonInteractive;
50
+ }
51
+ export {};
@@ -0,0 +1,113 @@
1
+ export function buildCouncilRunPlan(options) {
2
+ const concurrency = Math.max(1, Math.floor(options.concurrency));
3
+ const waves = options.totalCalls === 0 ? 0 : Math.ceil(options.totalCalls / concurrency);
4
+ // timeoutMs is the whole adapter-call budget. Provider retry loops share a
5
+ // single AbortController and deadline, so retries do not multiply this
6
+ // timeout-bound queue estimate.
7
+ return {
8
+ ...options,
9
+ concurrency,
10
+ waves,
11
+ timeoutBoundMs: waves * options.timeoutMs,
12
+ };
13
+ }
14
+ export function formatDuration(ms) {
15
+ const seconds = Math.max(0, Math.ceil(ms / 1000));
16
+ if (seconds < 60)
17
+ return `${seconds}s`;
18
+ const minutes = Math.floor(seconds / 60);
19
+ const remainingSeconds = seconds % 60;
20
+ if (minutes < 60) {
21
+ return remainingSeconds === 0 ? `${minutes}m` : `${minutes}m ${remainingSeconds}s`;
22
+ }
23
+ const hours = Math.floor(minutes / 60);
24
+ const remainingMinutes = minutes % 60;
25
+ return remainingMinutes === 0 ? `${hours}h` : `${hours}h ${remainingMinutes}m`;
26
+ }
27
+ export function formatCouncilRunPlan(plan) {
28
+ return (`Review plan: ${plan.totalCalls} calls ` +
29
+ `(${plan.reviewers} reviewers × ${plan.chunks} chunk(s)), ` +
30
+ `concurrency ${plan.concurrency} → ${plan.waves} wave(s); ` +
31
+ `${formatDuration(plan.timeoutMs)} per-call timeout, ` +
32
+ `${formatDuration(plan.timeoutBoundMs)} timeout-bound queue estimate`);
33
+ }
34
+ const STATUS_ICONS = {
35
+ success: '✓',
36
+ timeout: '⏱',
37
+ error: '✗',
38
+ parse_failed: '⚠',
39
+ };
40
+ const DEFAULT_HEARTBEAT_MS = 60_000;
41
+ const DEFAULT_MAX_COMPLETION_LINES = 20;
42
+ /**
43
+ * Keeps the interactive spinner compact while making redirected runs
44
+ * observable. Non-TTY output is bounded to periodic heartbeats plus roughly
45
+ * `maxCompletionLines` completion checkpoints, even for very large councils.
46
+ */
47
+ export class CouncilProgressReporter {
48
+ options;
49
+ now;
50
+ heartbeatMs;
51
+ completionStride;
52
+ startedAt;
53
+ lastLineAt;
54
+ completed = 0;
55
+ heartbeat;
56
+ counters = {
57
+ success: 0,
58
+ timeout: 0,
59
+ error: 0,
60
+ parse_failed: 0,
61
+ };
62
+ constructor(options) {
63
+ this.options = options;
64
+ this.now = options.now ?? Date.now;
65
+ this.heartbeatMs = options.heartbeatMs ?? DEFAULT_HEARTBEAT_MS;
66
+ const maxLines = Math.max(1, options.maxCompletionLines ?? DEFAULT_MAX_COMPLETION_LINES);
67
+ this.completionStride = Math.max(1, Math.ceil(options.totalCalls / maxLines));
68
+ this.startedAt = this.now();
69
+ this.lastLineAt = this.startedAt;
70
+ }
71
+ start() {
72
+ if (this.options.interactive || this.heartbeat !== undefined)
73
+ return;
74
+ this.heartbeat = setInterval(() => {
75
+ const current = this.now();
76
+ if (current - this.lastLineAt >= this.heartbeatMs) {
77
+ this.writeNonInteractive(current);
78
+ }
79
+ }, this.heartbeatMs);
80
+ this.heartbeat.unref?.();
81
+ }
82
+ complete(review) {
83
+ this.completed++;
84
+ this.counters[review.status]++;
85
+ const current = this.now();
86
+ if (this.options.interactive) {
87
+ this.options.updateInteractive(`${this.summary(current)} [${STATUS_ICONS[review.status]} ${review.model}/${review.role}]`);
88
+ return;
89
+ }
90
+ if (this.completed === 1 ||
91
+ this.completed === this.options.totalCalls ||
92
+ this.completed % this.completionStride === 0) {
93
+ this.writeNonInteractive(current);
94
+ }
95
+ }
96
+ stop() {
97
+ if (this.heartbeat !== undefined) {
98
+ clearInterval(this.heartbeat);
99
+ this.heartbeat = undefined;
100
+ }
101
+ }
102
+ summary(current) {
103
+ return (`Reviews ${this.completed}/${this.options.totalCalls} ` +
104
+ `(success ${this.counters.success}, timeout ${this.counters.timeout}, ` +
105
+ `error ${this.counters.error}, parse_failed ${this.counters.parse_failed}) · ` +
106
+ `elapsed ${formatDuration(current - this.startedAt)}`);
107
+ }
108
+ writeNonInteractive(current) {
109
+ this.options.writeLine(this.summary(current));
110
+ this.lastLineAt = current;
111
+ }
112
+ }
113
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/output/progress.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "review-council",
3
- "version": "1.8.2",
3
+ "version": "1.9.0",
4
4
  "description": "Review Council \u2014 multi-model AI code review CLI",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",