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 +52 -0
- package/dist/consensus/parser.js +81 -0
- package/dist/consensus/parser.js.map +1 -1
- package/dist/converge/attempt-budget.d.ts +57 -0
- package/dist/converge/attempt-budget.js +578 -0
- package/dist/converge/attempt-budget.js.map +1 -0
- package/dist/index.js +109 -22
- package/dist/index.js.map +1 -1
- package/dist/output/progress.d.ts +51 -0
- package/dist/output/progress.js +113 -0
- package/dist/output/progress.js.map +1 -0
- package/package.json +1 -1
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
|
package/dist/consensus/parser.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAEzD;;;;GAIG;AACH,SAAS,cAAc,CAA2C,MAAS;IACzE,OAAO,CAAC,CAAC,UAAU,CACjB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAC3E,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACf,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,cAAc,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvE,QAAQ,EAAE,cAAc,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;CACjC,CAAC,CAAC;AAuBH;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,IAAI,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,YAAY,IAAI,CAAC,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,wCAAwC,CAC/C,SAAiB;IAEjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,QAAQ,GAAG,IAAI,CAAC;gBAChB,gBAAgB,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,IAAI,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,IAAI,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,IAAI,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC1B,OAAO,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,EAAE,CAAC;oBACxE,SAAS,EAAE,CAAC;gBACd,CAAC;gBACD,gEAAgE;gBAChE,mDAAmD;gBACnD,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG;oBAAE,OAAO,SAAS,CAAC;YACrD,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC;YACjB,IAAI,IAAI,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,uEAAuE;IACvE,OAAO,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,yEAAyE;AACzE,SAAS,YAAY,CAAC,QAAmB,EAAE,KAAa,EAAE,IAAY;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACd,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,GAAG,CAAC;gBACF,EAAE,GAAG,GAAG,SAAS,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACtC,MAAM,EAAE,CAAC;YACX,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACzB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,KAAa,EACb,IAAY;IAEZ,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,gBAAgB,CAAC,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,sCAAsC,CAAC,CAAC;QACtE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,cAAuB,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/B,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,wCAAwC,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjC,QAAQ,GAAG,IAAI,CAAC;gBAChB,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,IAAI,IAAI,cAAc,MAAM,CAAC,QAAQ,2DAA2D,CACzG,CAAC;gBACF,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;gBACrE,iEAAiE;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,uBAAuB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,qCAAqC;QACrC,IACE,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,KAAK,IAAI;YACf,UAAU,IAAI,MAAM;YACpB,KAAK,CAAC,OAAO,CAAE,MAAgC,CAAC,QAAQ,CAAC,EACzD,CAAC;YACD,MAAM,WAAW,GAAI,MAAkC,CAAC,QAAQ,CAAC;YACjE,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAe,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;oBACV,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,gCAAgC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtG,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,IAAI,IAAI,wCAAwC,QAAQ,CAAC,MAAM,aAAa,OAAO,GAAG,CAC/F,CAAC;gBACF,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC/F,CAAC;YAED,uEAAuE;YACvE,wEAAwE;YACxE,gDAAgD;YAChD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,SAAS,OAAO,sCAAsC,CAAC,CAAC;gBACtF,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,IAAI,IAAI,+BAA+B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;QACF,uEAAuE;QACvE,sEAAsE;QACtE,0DAA0D;QAC1D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAqB,EAAE,KAAK,EAAE,IAAI,CAAC;QACtE,QAAQ;QACR,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -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
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
concurrency
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
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":"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"}
|
|
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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"}
|