@gaunt-sloth/review 2.0.0-beta.12 → 2.0.0-beta.14
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 +3 -1
- package/cli.js +36 -10
- package/dist/middleware/reviewRateMiddleware.js +32 -0
- package/dist/middleware/reviewRateMiddleware.js.map +1 -1
- package/dist/modules/reviewFailureReport.d.ts +28 -0
- package/dist/modules/reviewFailureReport.js +125 -0
- package/dist/modules/reviewFailureReport.js.map +1 -0
- package/dist/modules/reviewHeading.js +2 -1
- package/dist/modules/reviewHeading.js.map +1 -1
- package/dist/modules/reviewModule.js +20 -1
- package/dist/modules/reviewModule.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -73,7 +73,9 @@ by default, so anything posting this output identifies its reviewer without addi
|
|
|
73
73
|
own; `output.header: "none"` on the config you pass to `review()` is the one setting that removes
|
|
74
74
|
it, for a caller piping the review into a template of their own. With rating enabled, `review()`
|
|
75
75
|
sets `process.exitCode = 1` when the rating comes back below `passThreshold` (or when the model
|
|
76
|
-
fails to produce a rating)
|
|
76
|
+
fails to produce a rating); a run that fails inside the agent — a provider error, a context
|
|
77
|
+
overflow — sets it whatever the rating settings say, because there is no verdict to configure. So
|
|
78
|
+
the script exits non-zero exactly when `gth review` would. Those
|
|
77
79
|
two — the attributed text on stdout and the exit code — are the whole embed contract.
|
|
78
80
|
Configuration (provider, prompts, rating thresholds) is the standard Gaunt Sloth config, see
|
|
79
81
|
[the configuration guide](https://github.com/pukeko-robotics/gaunt-sloth/blob/main/docs/configuration/index.md).
|
package/cli.js
CHANGED
|
@@ -24,6 +24,7 @@ setEntryPoint(import.meta.url);
|
|
|
24
24
|
|
|
25
25
|
import { initConfig } from '@gaunt-sloth/core/config.js';
|
|
26
26
|
import { review } from '#src/modules/reviewModule.js';
|
|
27
|
+
import { writeReviewFailureReport } from '#src/modules/reviewFailureReport.js';
|
|
27
28
|
import { displayError } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
28
29
|
import {
|
|
29
30
|
getContentFromSource,
|
|
@@ -32,14 +33,31 @@ import {
|
|
|
32
33
|
resolvePrIdFromArg,
|
|
33
34
|
} from '#src/commands/commandUtils.js';
|
|
34
35
|
|
|
36
|
+
/** The source label this bin passes to `review()`, and therefore names its report file with. */
|
|
37
|
+
const REVIEW_SOURCE = 'pr-review';
|
|
38
|
+
|
|
35
39
|
async function main() {
|
|
40
|
+
// REL-20 — the run is in two phases with two catches, because only the first one owes a report.
|
|
41
|
+
//
|
|
42
|
+
// Everything up to `review()` happens before the report file exists, so a failure there is the
|
|
43
|
+
// one that leaves a workflow reading `review.md` with nothing to read; it writes the report
|
|
44
|
+
// itself. Once `review()` is running the file is already open and captures its own failures, so
|
|
45
|
+
// the second catch stays as it was — writing a report over that one would replace a review that
|
|
46
|
+
// got part-way with a bare error.
|
|
47
|
+
//
|
|
48
|
+
// `gth pr` / `gth review` keep the same promise through the same helper. A second copy of the
|
|
49
|
+
// report-writing here is how the two entry points would drift apart.
|
|
50
|
+
let config;
|
|
51
|
+
let diffWithReqs;
|
|
52
|
+
let contentArg;
|
|
53
|
+
let preambleText;
|
|
36
54
|
try {
|
|
37
|
-
|
|
55
|
+
config = await initConfig({
|
|
38
56
|
identityProfile: process.env.GSLOTH_IDENTITY_PROFILE,
|
|
39
57
|
});
|
|
40
58
|
|
|
41
59
|
// First arg is content (e.g. PR number), rest are requirements
|
|
42
|
-
|
|
60
|
+
contentArg = args[0];
|
|
43
61
|
const requirementArgs = args.slice(1);
|
|
44
62
|
|
|
45
63
|
// Get content (e.g. PR diff)
|
|
@@ -57,18 +75,26 @@ async function main() {
|
|
|
57
75
|
}
|
|
58
76
|
}
|
|
59
77
|
|
|
60
|
-
// Build the review preamble (backstory + guidelines + review instructions + optional
|
|
61
|
-
// system prompt), the same composition `gth review` / `gth pr` use.
|
|
62
|
-
const preambleText = getReviewPreamble(config);
|
|
63
|
-
|
|
64
78
|
// Combine requirements and content for the review
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
79
|
+
diffWithReqs = requirements ? `Requirements:\n${requirements}\nDiff:\n${content}` : content;
|
|
80
|
+
|
|
81
|
+
// Build the review preamble (backstory + guidelines + review instructions + optional
|
|
82
|
+
// system prompt), the same composition `gth review` / `gth pr` use. In this phase because it
|
|
83
|
+
// reads files off disk and can fail, and a failure there is still a run that never reached the
|
|
84
|
+
// agent.
|
|
85
|
+
preambleText = getReviewPreamble(config);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
displayError(error instanceof Error ? error.message : String(error));
|
|
88
|
+
// `config` is undefined when `initConfig` itself threw; the helper knows there is no path to
|
|
89
|
+
// write to in that case and does nothing.
|
|
90
|
+
writeReviewFailureReport(config, REVIEW_SOURCE, 'pr', error);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
68
93
|
|
|
94
|
+
try {
|
|
69
95
|
// Pass the PR id on so GitHub-only tools address the PR explicitly instead of trying to
|
|
70
96
|
// resolve it from the checked-out branch, which a CI runner's detached HEAD cannot provide.
|
|
71
|
-
await review(
|
|
97
|
+
await review(REVIEW_SOURCE, preambleText, diffWithReqs, config, 'pr', undefined, {
|
|
72
98
|
prId: resolvePrIdFromArg(contentArg),
|
|
73
99
|
});
|
|
74
100
|
} catch (error) {
|
|
@@ -46,6 +46,38 @@ const REVIEW_RATE_TOOL_NAME = 'gth_review_rate';
|
|
|
46
46
|
* Override per command with `commands.<review|pr>.rating.timeoutMs`.
|
|
47
47
|
*/
|
|
48
48
|
export const DEFAULT_REVIEW_RATE_TIMEOUT_MS = 120_000;
|
|
49
|
+
// [[EXT-183]] — the review GENERATION has no budget of its own. That is a decision deferred on a
|
|
50
|
+
// named measurement, not an oversight, and the asymmetry with the cap above is deliberate.
|
|
51
|
+
//
|
|
52
|
+
// The budget above bounds the rating call only. The generation that runs before it is bounded by
|
|
53
|
+
// nothing: its runnable config carries a recursion limit and a thread id, the agent adds only
|
|
54
|
+
// `streamFromInput`'s Esc `AbortController`, and gth sets no call timeout on any provider. Nor is a
|
|
55
|
+
// runaway there rare — across the recorded gate windows the runaways split about evenly between the
|
|
56
|
+
// two calls, and in the most recent one all three of them were generation.
|
|
57
|
+
//
|
|
58
|
+
// WHY NO NUMBER WAS CHOSEN. The seam exists: `wrapModelCall` wraps each model call individually, so
|
|
59
|
+
// a budget could bound ONE call without capping a legitimate many-turn review, and a value in the
|
|
60
|
+
// 120-240 s band would sit below the integration suite's 300 s per-test ceiling while clearing every
|
|
61
|
+
// healthy call measured here by a wide margin. What is missing is the measurement that would set it.
|
|
62
|
+
// Every healthy sample is a sub-kilobyte fixture reviewed by a local `gemma4:12b` at ~31.5 tokens a
|
|
63
|
+
// second, and none is the case a default has to survive: one call, a real diff, a remote provider,
|
|
64
|
+
// thinking enabled. Wall clock does not carry across providers — the same number is a few thousand
|
|
65
|
+
// tokens locally and something else entirely on a fast model with a large thinking budget — and
|
|
66
|
+
// GS2-105 could pick 120 s only because it had a healthy baseline for the call it was bounding.
|
|
67
|
+
// Truncating a real review is the failure a review tool can least afford, so the number waits for
|
|
68
|
+
// its measurement: legitimate single-call durations for `review` and `pr` across the providers
|
|
69
|
+
// people actually run, at real diff sizes.
|
|
70
|
+
//
|
|
71
|
+
// WHY THE GAP IS TOLERABLE MEANWHILE. What makes an unbounded RATING call the failure GS2-105 exists
|
|
72
|
+
// to prevent is that it renders NOTHING while it runs — a finished review followed by an unexplained
|
|
73
|
+
// pause. The generation is the opposite: it streams token by token (`streamOutput` defaults true),
|
|
74
|
+
// so a user watching it can see what it is doing and judge when it has gone wrong, and on a TTY
|
|
75
|
+
// `streamFromInput` has Esc armed to stop it.
|
|
76
|
+
//
|
|
77
|
+
// Two cases that reasoning does not cover, neither of them claimed harmless: `streamOutput: false`,
|
|
78
|
+
// whose non-streaming `invoke` path arms no Esc at all and so IS the silent shape described above;
|
|
79
|
+
// and any caller whose stdin is not a TTY — CI, a piped diff, the batch pipeline — where Esc is off
|
|
80
|
+
// by construction.
|
|
49
81
|
export function createReviewRateMiddleware(settings, gthConfig) {
|
|
50
82
|
const normalizedConfig = normalizeRatingConfig(settings);
|
|
51
83
|
const rateTool = tool((input) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewRateMiddleware.js","sourceRoot":"","sources":["../../src/middleware/reviewRateMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAwB,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC9D,CAAC,CAAC;AAaH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE7D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAYjC,MAAM,UAAU,qBAAqB,CAAC,MAAgC;IACpE,MAAM,GAAG,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;IACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,EAAE,aAAa,IAAI,sBAAsB,CAAC;IAElE,OAAO;QACL,SAAS;QACT,SAAS;QACT,aAAa,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAEtD,MAAM,UAAU,0BAA0B,CACxC,QAAsC,EACtC,SAAoB;IAEpB,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,IAAI,CACnB,CAAC,KAAmB,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAyB;YACrC,GAAG,KAAK;YACR,GAAG,gBAAgB;SACpB,CAAC;QACF,WAAW,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QAEhD,OAAO,iBAAiB,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;IACrE,CAAC,EACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE,UAAU;KACnB,CACF,CAAC;IAEF,qDAAqD;IACrD,EAAE;IACF,kGAAkG;IAClG,mGAAmG;IACnG,kGAAkG;IAClG,gGAAgG;IAChG,gGAAgG;IAChG,0CAA0C;IAC1C,MAAM,UAAU,GACd,OAAO,SAAS,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU;QAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,SAAS,CAAC;IAEhB,oFAAoF;IACpF,gGAAgG;IAChG,sDAAsD;IACtD,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,8BAA8B,CAAC;IAExE,OAAO,OAAO,CAAC,OAAO,CACpB,gBAAgB,CAAC;QACf,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,cAAc,CAAC,wBAAwB,CAAC,CAAC;YAEzC,MAAM,YAAY,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;YAE/D,QAAQ,CAAC,oDAAoD,CAAC,CAAC;YAE/D,4FAA4F;YAC5F,4FAA4F;YAC5F,uEAAuE;YACvE,WAAW,CAAC,uBAAuB,CAAC,CAAC;YAErC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,cAAc,CACZ,iFAAiF;oBAC/E,qBAAqB,CACxB,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;gBAE3E,kEAAkE;gBAClE,EAAE;gBACF,2FAA2F;gBAC3F,oFAAoF;gBACpF,wFAAwF;gBACxF,0FAA0F;gBAC1F,oEAAoE;gBACpE,EAAE;gBACF,qFAAqF;gBACrF,oFAAoF;gBACpF,sFAAsF;gBACtF,+DAA+D;gBAC/D,IAAI,aAAwD,CAAC;gBAC7D,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;oBACvD,aAAa,GAAG,UAAU,CACxB,GAAG,EAAE,CACH,MAAM,CACJ,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAC9E,EACH,SAAS,CACV,CAAC;oBACF,oEAAoE;oBACpE,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;wBAC1B,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE;4BAChC,GAAG,oBAAoB,EAAE;4BACzB,OAAO,EAAE,SAAS;yBACnB,CAAC;wBACF,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,kFAAkF;oBAClF,qFAAqF;oBACrF,oFAAoF;oBACpF,uFAAuF;oBACvF,8CAA8C;oBAC9C,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;gBAED,oFAAoF;gBACpF,sFAAsF;gBACtF,yDAAyD;gBACzD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAC7C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAC9C,CAAC;gBACF,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAoB,CAAC,CAAC;gBACvD,CAAC;gBAED,MAAM,QAAQ,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;gBACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,cAAc,CACZ,iFAAiF;wBAC/E,uDAAuD;wBACvD,qBAAqB;wBACrB,GAAG,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wFAAwF;gBACxF,0FAA0F;gBAC1F,kFAAkF;gBAClF,cAAc,CACZ,YAAY,CAAC,KAAK,CAAC;oBACjB,CAAC,CAAC,+DAA+D,SAAS,aAAa;wBACnF,mCAAmC;oBACvC,CAAC,CAAC,8CAA8C;wBAC5C,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC/D,CAAC;gBACF,aAAa,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA8B;IAC7D,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1E,OAAO;QACL,mDAAmD;QACnD,mHAAmH;QACnH,eAAe,GAAG,qBAAqB,GAAG,qBAAqB;QAC/D,0BAA0B,YAAY,IAAI,YAAY,uCAAuC;QAC7F,qBAAqB,kBAAkB,+CAA+C;QACtF,EAAE;QACF,wBAAwB;QACxB,gBAAgB,kBAAkB,IAAI,YAAY,yDAAyD;QAC3G,4BAA4B,YAAY,IAAI,YAAY,EAAE;QAC1D,uCAAuC,MAAM,IAAI,YAAY,EAAE;QAC/D,4FAA4F;KAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,cAAc,CAAC;AAC1D,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
1
|
+
{"version":3,"file":"reviewRateMiddleware.js","sourceRoot":"","sources":["../../src/middleware/reviewRateMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { GthConfig } from '@gaunt-sloth/core/config.js';
|
|
2
|
+
/**
|
|
3
|
+
* The one line that tells a reader of the report why there is no verdict under the heading.
|
|
4
|
+
*
|
|
5
|
+
* Exported so the specs assert on the same string production writes, rather than on a copy of it
|
|
6
|
+
* that can drift out of agreement without anything going red.
|
|
7
|
+
*/
|
|
8
|
+
export declare const REVIEW_DID_NOT_RUN = "This review did not run. The error that stopped it follows; there is no verdict below it.";
|
|
9
|
+
/**
|
|
10
|
+
* Write the promised report for a run that ended before the agent was reached.
|
|
11
|
+
*
|
|
12
|
+
* Call it from every exit that fails a `review`/`pr` run before `review()` is invoked, passing the
|
|
13
|
+
* SAME source label that call would have used (`PR-42`, `PR-discovery`, `REVIEW`, `pr-review`) so
|
|
14
|
+
* the file lands where the successful run would have put it — the label picks the generated file
|
|
15
|
+
* name when `writeOutputToFile` is `true`.
|
|
16
|
+
*
|
|
17
|
+
* A no-op when the config asks for no file, so the default stdout-only run is untouched. It never
|
|
18
|
+
* throws: it runs inside a catch, and a report that cannot be written must not replace the error
|
|
19
|
+
* the caller is already reporting.
|
|
20
|
+
*
|
|
21
|
+
* @param config - The resolved config, or `undefined` when the run failed before config loaded
|
|
22
|
+
* (nothing can be written then — the path is a config field).
|
|
23
|
+
* @param source - The source label the successful run would have passed to `review()`.
|
|
24
|
+
* @param command - `review` or `pr`; names the command in the heading.
|
|
25
|
+
* @param error - The failure, as an `Error` or as text already rendered for the terminal.
|
|
26
|
+
* @returns The path written, or `null` when no report was asked for or the write failed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function writeReviewFailureReport(config: GthConfig | undefined, source: string, command: 'pr' | 'review', error: unknown): string | null;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REL-20 — the report a review still owes its caller when the run ends before the agent.
|
|
3
|
+
*
|
|
4
|
+
* `writeOutputToFile` is a promise about a path: a workflow reads the file back and posts it. That
|
|
5
|
+
* promise was kept only by runs that reached inference, because the file is created inside
|
|
6
|
+
* `review()` and every content-fetch failure returns before it. A PR over GitHub's 300-file diff
|
|
7
|
+
* limit therefore ended as `ENOENT: no such file or directory, open 'review.md'` in the *next* CI
|
|
8
|
+
* step — a crash about a missing file, several steps away from the HTTP 406 that caused it.
|
|
9
|
+
*
|
|
10
|
+
* So a failed run writes the report too: the same heading a successful review opens with, one line
|
|
11
|
+
* saying the review did not run, and the error exactly as the source produced it. The exit code
|
|
12
|
+
* does not change — the run still failed — but what the workflow posts now names the failure
|
|
13
|
+
* instead of dying on its absence.
|
|
14
|
+
*
|
|
15
|
+
* ## Why a shared helper rather than opening the report before the fetch
|
|
16
|
+
*
|
|
17
|
+
* Both were open (the file name is known before the fetch), and opening early was measured and
|
|
18
|
+
* rejected. The report file is a capture of console output, so opening it before the fetch puts
|
|
19
|
+
* everything the fetch prints into every SUCCESSFUL review: `fileSource` alone emits
|
|
20
|
+
* `Reading file …` through `display`, and the requirement sources, the discovery agent and the
|
|
21
|
+
* scoped-prompt warnings all write through the same channel. That is a visible change to the
|
|
22
|
+
* document every existing user already reads, paid on every run, to fix the runs that fail.
|
|
23
|
+
*
|
|
24
|
+
* A helper called from each failing exit costs one line per exit and cannot touch the success path
|
|
25
|
+
* at all — the success path never calls it.
|
|
26
|
+
*
|
|
27
|
+
* ## Why it writes synchronously, and why it truncates
|
|
28
|
+
*
|
|
29
|
+
* The session log is a `WriteStream`, and `stopSessionLogging()` ends it asynchronously. One of the
|
|
30
|
+
* two callers here — the `gaunt-sloth-review` bin — follows its failure with `process.exit(1)`,
|
|
31
|
+
* which tears the process down without waiting for a pending flush, so a report written through the
|
|
32
|
+
* stream could simply not exist. A single `writeFileSync` has completed by the time it returns.
|
|
33
|
+
*
|
|
34
|
+
* It truncates where the session log appends. Appending would leave CI posting the previous run's
|
|
35
|
+
* verdict with a failure notice stapled underneath it, which reads as a review that happened.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { writeFileSync } from 'node:fs';
|
|
40
|
+
import { displayDebug, displayError } from '@gaunt-sloth/core/utils/consoleUtils.js';
|
|
41
|
+
import { reviewHeadingBlock } from '#src/modules/reviewHeading.js';
|
|
42
|
+
import { getCommandOutputFilePath } from '#src/utils/fileUtils.js';
|
|
43
|
+
/**
|
|
44
|
+
* The one line that tells a reader of the report why there is no verdict under the heading.
|
|
45
|
+
*
|
|
46
|
+
* Exported so the specs assert on the same string production writes, rather than on a copy of it
|
|
47
|
+
* that can drift out of agreement without anything going red.
|
|
48
|
+
*/
|
|
49
|
+
export const REVIEW_DID_NOT_RUN = 'This review did not run. The error that stopped it follows; there is no verdict below it.';
|
|
50
|
+
/**
|
|
51
|
+
* Write the promised report for a run that ended before the agent was reached.
|
|
52
|
+
*
|
|
53
|
+
* Call it from every exit that fails a `review`/`pr` run before `review()` is invoked, passing the
|
|
54
|
+
* SAME source label that call would have used (`PR-42`, `PR-discovery`, `REVIEW`, `pr-review`) so
|
|
55
|
+
* the file lands where the successful run would have put it — the label picks the generated file
|
|
56
|
+
* name when `writeOutputToFile` is `true`.
|
|
57
|
+
*
|
|
58
|
+
* A no-op when the config asks for no file, so the default stdout-only run is untouched. It never
|
|
59
|
+
* throws: it runs inside a catch, and a report that cannot be written must not replace the error
|
|
60
|
+
* the caller is already reporting.
|
|
61
|
+
*
|
|
62
|
+
* @param config - The resolved config, or `undefined` when the run failed before config loaded
|
|
63
|
+
* (nothing can be written then — the path is a config field).
|
|
64
|
+
* @param source - The source label the successful run would have passed to `review()`.
|
|
65
|
+
* @param command - `review` or `pr`; names the command in the heading.
|
|
66
|
+
* @param error - The failure, as an `Error` or as text already rendered for the terminal.
|
|
67
|
+
* @returns The path written, or `null` when no report was asked for or the write failed.
|
|
68
|
+
*/
|
|
69
|
+
export function writeReviewFailureReport(config, source, command, error) {
|
|
70
|
+
if (!config) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const filePath = getCommandOutputFilePath(config, source);
|
|
74
|
+
if (!filePath) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// The same gate the successful report is under: `review()` opens the file with
|
|
78
|
+
// `initSessionLogging(filePath, config.streamSessionInferenceLog)`, which writes nothing at all
|
|
79
|
+
// when that flag is off. A failure report appearing for a user whose successful runs write none
|
|
80
|
+
// would be a second, contradictory answer to "does this config produce a file".
|
|
81
|
+
if (!config.streamSessionInferenceLog) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const body = `${REVIEW_DID_NOT_RUN}\n\n${errorText(error)}\n`;
|
|
85
|
+
// GS2-93 — `output.header: 'none'` silences the heading here exactly as it does in `review()`. A
|
|
86
|
+
// caller who turned it off to get a byte-clean stream did not ask for a clean stream only on the
|
|
87
|
+
// days the review succeeds.
|
|
88
|
+
//
|
|
89
|
+
// The trailing blank line matches what the success path produces: `display()` appends a newline
|
|
90
|
+
// to a heading block that already ends in one, so a report opens with the heading, a blank line,
|
|
91
|
+
// and then its content.
|
|
92
|
+
const report = config.output?.header === 'none'
|
|
93
|
+
? body
|
|
94
|
+
: `${reviewHeadingBlock(command, config.modelDisplayName, config.modelProviderType)}\n${body}`;
|
|
95
|
+
try {
|
|
96
|
+
writeFileSync(filePath, stripAnsi(report), { encoding: 'utf8' });
|
|
97
|
+
return filePath;
|
|
98
|
+
}
|
|
99
|
+
catch (writeError) {
|
|
100
|
+
displayDebug(writeError instanceof Error ? writeError : String(writeError));
|
|
101
|
+
displayError(`Failed to write review to file: ${filePath}`);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The failure as the report should carry it: an `Error`'s message, or text a caller has already
|
|
107
|
+
* rendered. Nothing is reformatted — the 406 a large PR produces already names the 300-file limit
|
|
108
|
+
* and both ways around it, and a summary of it would lose exactly that.
|
|
109
|
+
*/
|
|
110
|
+
function errorText(error) {
|
|
111
|
+
return error instanceof Error ? error.message : String(error);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The colour codes out, as the session log does to every line it writes.
|
|
115
|
+
*
|
|
116
|
+
* The report is read as a document — attached to a ticket, posted as a pull request comment — so a
|
|
117
|
+
* successful one has never contained an escape sequence, and this path must not be the one that
|
|
118
|
+
* starts. The text here is not ours: an error from a content source carries the child process's
|
|
119
|
+
* stderr, and a `gh` that decided it was talking to a terminal colours that. Same treatment on both
|
|
120
|
+
* paths is the only way the two cannot diverge, since only one of them is ever looked at.
|
|
121
|
+
*/
|
|
122
|
+
function stripAnsi(text) {
|
|
123
|
+
return text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=reviewFailureReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewFailureReport.js","sourceRoot":"","sources":["../../src/modules/reviewFailureReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,2FAA2F,CAAC;AAE9F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA6B,EAC7B,MAAc,EACd,OAAwB,EACxB,KAAc;IAEd,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,gGAAgG;IAChG,gGAAgG;IAChG,gFAAgF;IAChF,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,kBAAkB,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAE9D,iGAAiG;IACjG,iGAAiG;IACjG,4BAA4B;IAC5B,EAAE;IACF,gGAAgG;IAChG,iGAAiG;IACjG,wBAAwB;IACxB,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM;QAC9B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC;IAEnG,IAAI,CAAC;QACH,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,YAAY,CAAC,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5E,YAAY,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module reviewHeading
|
|
3
2
|
* REL-12 — the line every `gth review` / `gth pr` run opens with, so a reader of the output knows
|
|
4
3
|
* whose review it is and what produced it.
|
|
5
4
|
*
|
|
@@ -32,6 +31,8 @@
|
|
|
32
31
|
* site in `reviewModule.ts`, not here — this module builds the line and does not decide whether it
|
|
33
32
|
* is shown), because a caller piping a review into their own template needs a byte-clean stream.
|
|
34
33
|
* That rung is opt-in precisely so the reasoning above survives for everyone who does not set it.
|
|
34
|
+
*
|
|
35
|
+
* @module
|
|
35
36
|
*/
|
|
36
37
|
import { modelProviderLabel } from '@gaunt-sloth/core/core/modelLabel.js';
|
|
37
38
|
import { runHeaderLine } from '@gaunt-sloth/core/core/runHeader.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewHeading.js","sourceRoot":"","sources":["../../src/modules/reviewHeading.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reviewHeading.js","sourceRoot":"","sources":["../../src/modules/reviewHeading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAwB,EACxB,KAAc,EACd,QAAiB;IAEjB,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;AAC9C,CAAC"}
|
|
@@ -12,6 +12,7 @@ import { deleteArtifact, getArtifact } from '@gaunt-sloth/core/state/artifactSto
|
|
|
12
12
|
import { setExitCode, stdout } from '@gaunt-sloth/core/utils/systemUtils.js';
|
|
13
13
|
import { ApprovalStopError, approvalStopRows } from '@gaunt-sloth/core/core/shell/approvalStop.js';
|
|
14
14
|
import { displayTermination } from '@gaunt-sloth/core/core/terminationNotice.js';
|
|
15
|
+
import { displayOutstandingWork } from '@gaunt-sloth/core/core/outstandingWork.js';
|
|
15
16
|
import { get as getGhReadFileTool, GTH_GH_READ_FILE_TOOL_NAME } from '#src/tools/ghReadFileTool.js';
|
|
16
17
|
/**
|
|
17
18
|
* Run a review of `diff` and print the verdict.
|
|
@@ -124,6 +125,19 @@ _preamble, diff, config, command = 'review', resolvers, reviewContext) {
|
|
|
124
125
|
await runner.processMessages(messages);
|
|
125
126
|
}
|
|
126
127
|
catch (error) {
|
|
128
|
+
// REL-24 — the run failed, so the PROCESS says it failed. Reporting a failure is not the
|
|
129
|
+
// same as signalling one: `_review-shared.yml` keys its "Check review step result" step on
|
|
130
|
+
// the review step's OUTCOME, so a review that printed a provider error and exited 0 posted
|
|
131
|
+
// what reads as a verdict on a build CI called green.
|
|
132
|
+
//
|
|
133
|
+
// Deliberately NOT gated on `commands.<cmd>.rating.errorOnReviewFail`. That flag governs a
|
|
134
|
+
// VERDICT — exit 1 when the review scores below its threshold — and a run that never
|
|
135
|
+
// reached a verdict has no score to configure. The rating path below already draws the same
|
|
136
|
+
// line: its missing-artifact branch sets the code without consulting the flag, because a
|
|
137
|
+
// rating that did not happen is a malfunction rather than a low score.
|
|
138
|
+
//
|
|
139
|
+
// Set before the branches, so an approvals stop and an ordinary agent error signal alike.
|
|
140
|
+
setExitCode(1);
|
|
127
141
|
displayDebug(error instanceof Error ? error : String(error));
|
|
128
142
|
// [[TUI-C71]] — `review` and `pr` wire no tool-approval callback, so an escalation here is
|
|
129
143
|
// always the §6.2 error and an `attack` verdict is always the halt: the untrusted text this
|
|
@@ -153,7 +167,12 @@ _preamble, diff, config, command = 'review', resolvers, reviewContext) {
|
|
|
153
167
|
// snapshots at cleanup: the agent is gone by here, and its own sites are the innermost ones.
|
|
154
168
|
// A run that produced a review says nothing — an ordinary completion is not news.
|
|
155
169
|
try {
|
|
156
|
-
|
|
170
|
+
const reason = runner.getTerminationReason();
|
|
171
|
+
displayTermination(reason);
|
|
172
|
+
// [[EXT-158]] — and whether the run finished its own checklist. `review` and `pr` are
|
|
173
|
+
// long multi-step runs with no prompt to come back to, so a review that stopped halfway
|
|
174
|
+
// through its plan and wrote a partial report is exactly the silent ending this fills.
|
|
175
|
+
displayOutstandingWork(runner.getOutstandingWork(), reason);
|
|
157
176
|
}
|
|
158
177
|
catch {
|
|
159
178
|
/* fail-soft: explaining a run must never be what breaks it */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewModule.js","sourceRoot":"","sources":["../../src/modules/reviewModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GAEzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewModule.js","sourceRoot":"","sources":["../../src/modules/reviewModule.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaunt-sloth/review",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.14",
|
|
4
4
|
"description": "Review functionality for Gaunt Sloth",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Andrew Kondratev",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@langchain/langgraph": "^1.4.15",
|
|
39
39
|
"langchain": "^1.5.11",
|
|
40
40
|
"zod": "^4.6.3",
|
|
41
|
-
"@gaunt-sloth/core": "2.0.0-beta.
|
|
41
|
+
"@gaunt-sloth/core": "2.0.0-beta.14"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"./dist/*",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"tag": "beta"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
|
-
"build": "tsc"
|
|
51
|
+
"build": "tsc",
|
|
52
|
+
"value-surface:generate": "node scripts/generate-value-surface.mjs"
|
|
52
53
|
}
|
|
53
54
|
}
|