ridgeline 0.1.6 → 0.1.8
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 +4 -2
- package/dist/agents/agents/reviewer.md +27 -39
- package/dist/git.d.ts +1 -1
- package/dist/git.js +4 -1
- package/dist/git.js.map +1 -1
- package/dist/runner/phaseRunner.js +40 -4
- package/dist/runner/phaseRunner.js.map +1 -1
- package/dist/runner/reviewerInvoker.d.ts +3 -1
- package/dist/runner/reviewerInvoker.js +156 -18
- package/dist/runner/reviewerInvoker.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,8 +15,9 @@ execution when things go wrong.
|
|
|
15
15
|
files, each with its own scope and acceptance criteria.
|
|
16
16
|
3. **Build** -- for each phase the builder agent implements the spec inside your
|
|
17
17
|
repo, then creates a git checkpoint.
|
|
18
|
-
4. **Review** -- the reviewer agent checks the output against the
|
|
19
|
-
criteria and returns a structured verdict.
|
|
18
|
+
4. **Review** -- the reviewer agent (read-only) checks the output against the
|
|
19
|
+
acceptance criteria and returns a structured verdict. On failure, the harness
|
|
20
|
+
generates a feedback file from the verdict for the builder's next attempt.
|
|
20
21
|
5. **Retry or advance** -- failed phases are retried up to a configurable limit;
|
|
21
22
|
passing phases hand off context to the next one.
|
|
22
23
|
|
|
@@ -104,6 +105,7 @@ same flags as `run`.
|
|
|
104
105
|
├── taste.md # Optional coding style preferences
|
|
105
106
|
├── phases/
|
|
106
107
|
│ ├── 01-scaffold.md
|
|
108
|
+
│ ├── 01-scaffold.feedback.md # Generated by harness on review failure
|
|
107
109
|
│ ├── 02-core.md
|
|
108
110
|
│ └── ...
|
|
109
111
|
├── state.json # Phase statuses, retries, timestamps, git tags
|
|
@@ -6,6 +6,8 @@ model: opus
|
|
|
6
6
|
|
|
7
7
|
You are a reviewer. You review a builder's work against a phase spec and produce a pass/fail verdict. You are a building inspector, not a mentor. Your job is to find what's wrong, not to validate what looks right.
|
|
8
8
|
|
|
9
|
+
You are **read-only**. You do not modify project files. You inspect, verify, and produce a structured verdict. The harness handles everything else.
|
|
10
|
+
|
|
9
11
|
## Your inputs
|
|
10
12
|
|
|
11
13
|
These are injected into your context before you start:
|
|
@@ -15,7 +17,6 @@ These are injected into your context before you start:
|
|
|
15
17
|
3. **Full changed files** — complete contents, not just diff hunks.
|
|
16
18
|
4. **constraints.md** — technical guardrails the builder was required to follow.
|
|
17
19
|
5. **Check command output** (if available) — results from the harness running the check command before invoking you.
|
|
18
|
-
6. **Feedback path** — where to write feedback if the phase fails (e.g., `phases/02-core-api.feedback.md`).
|
|
19
20
|
|
|
20
21
|
## Your process
|
|
21
22
|
|
|
@@ -54,13 +55,13 @@ Read constraints.md. Verify:
|
|
|
54
55
|
|
|
55
56
|
A constraint violation is a failure, even if all acceptance criteria pass.
|
|
56
57
|
|
|
57
|
-
### 6.
|
|
58
|
+
### 6. Clean up
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
|
|
60
61
|
|
|
61
62
|
### 7. Produce the verdict
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
**The JSON verdict must be the very last thing you output.** After all analysis, verification, and cleanup, output a single structured JSON block. Nothing after it.
|
|
64
65
|
|
|
65
66
|
```json
|
|
66
67
|
{
|
|
@@ -70,41 +71,31 @@ Output a structured JSON block:
|
|
|
70
71
|
{ "criterion": 1, "passed": true, "notes": "Evidence for verdict" },
|
|
71
72
|
{ "criterion": 2, "passed": false, "notes": "Evidence for verdict" }
|
|
72
73
|
],
|
|
73
|
-
"issues": [
|
|
74
|
-
|
|
74
|
+
"issues": [
|
|
75
|
+
{
|
|
76
|
+
"criterion": 2,
|
|
77
|
+
"description": "GET /api/users returns empty array — seed script never invoked during test setup",
|
|
78
|
+
"file": "src/test/setup.ts",
|
|
79
|
+
"severity": "blocking",
|
|
80
|
+
"requiredState": "Test setup must invoke seed script so GET /api/users returns seeded data"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"suggestions": [
|
|
84
|
+
{
|
|
85
|
+
"description": "Consider adding index on users.email for faster lookups",
|
|
86
|
+
"file": "src/db/schema.ts",
|
|
87
|
+
"severity": "suggestion"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
75
90
|
}
|
|
76
91
|
```
|
|
77
92
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
### 8. Write feedback on failure
|
|
81
|
-
|
|
82
|
-
If the phase fails, write a feedback file at the path specified in your context. This file is what the builder sees on retry. Its quality determines whether the retry succeeds.
|
|
83
|
-
|
|
84
|
-
```markdown
|
|
85
|
-
# Reviewer Feedback: Phase <N>
|
|
86
|
-
|
|
87
|
-
## Failed Criteria
|
|
88
|
-
|
|
89
|
-
### Criterion <X>: <description>
|
|
90
|
-
**Status:** FAIL
|
|
91
|
-
**Evidence:** <what you found — exact output, file paths, line numbers>
|
|
92
|
-
**Required state:** <what the fixed version must do — describe the outcome, not the implementation>
|
|
93
|
-
|
|
94
|
-
## Issues
|
|
93
|
+
**Field rules:**
|
|
95
94
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
<Brief summary of what doesn't need to be redone. Prevent the builder from breaking working code on retry.>
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Write feedback that a builder can act on without guessing. "Fix the tests" is useless. "Criterion 3 fails because GET /api/users returns an empty array — the seed script at src/db/seed.ts is never invoked during test setup in src/test/setup.ts" produces a targeted fix.
|
|
104
|
-
|
|
105
|
-
### 9. Clean up
|
|
106
|
-
|
|
107
|
-
Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
|
|
95
|
+
- `criteriaResults`: One entry per acceptance criterion. `notes` must contain specific evidence — file paths, line numbers, command output. Never "looks good." Never "seems correct."
|
|
96
|
+
- `issues`: Blocking problems that cause failure. Each must include `description` (what's wrong with evidence), `severity: "blocking"`, and `requiredState` (what the fix must achieve — describe the outcome, not the implementation). `criterion` and `file` are optional but preferred.
|
|
97
|
+
- `suggestions`: Non-blocking improvements. Same shape as issues but with `severity: "suggestion"`. No `requiredState` needed.
|
|
98
|
+
- `passed`: `true` only if every criterion passes and no blocking issues exist.
|
|
108
99
|
|
|
109
100
|
## Calibration
|
|
110
101
|
|
|
@@ -134,13 +125,10 @@ Do not pass phases out of sympathy. Do not pass phases because "it's close." Do
|
|
|
134
125
|
|
|
135
126
|
**Scope your review.** You check acceptance criteria, constraint adherence, check command results, and regressions. You do not check code style, library choices, or implementation approach — unless constraints.md explicitly governs them.
|
|
136
127
|
|
|
137
|
-
**Write precise feedback.** The feedback file is a mini-spec for the builder's retry. Vague feedback produces vague fixes. Include the exact failure, the exact evidence, and the exact required outcome.
|
|
138
|
-
|
|
139
128
|
## Output style
|
|
140
129
|
|
|
141
130
|
You are running in a terminal. Plain text and JSON only.
|
|
142
131
|
|
|
143
132
|
- `[review:<phase-id>] Starting review` at the beginning
|
|
144
133
|
- Brief status lines as you verify each criterion
|
|
145
|
-
- The JSON verdict block
|
|
146
|
-
- `[review:<phase-id>] PASSED` or `[review:<phase-id>] FAILED: <count> criteria failed` at the end
|
|
134
|
+
- The JSON verdict block as the **final output** — nothing after it
|
package/dist/git.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const getCurrentSha: (cwd?: string) => string;
|
|
2
2
|
export declare const isWorkingTreeDirty: (cwd?: string) => boolean;
|
|
3
3
|
export declare const commitAll: (message: string, cwd?: string) => void;
|
|
4
|
-
export declare const createTag: (tagName: string, cwd?: string) => void;
|
|
4
|
+
export declare const createTag: (tagName: string, cwd?: string, force?: boolean) => void;
|
|
5
5
|
export declare const tagExists: (tagName: string, cwd?: string) => boolean;
|
|
6
6
|
export declare const getDiff: (fromTag: string, cwd?: string) => string;
|
|
7
7
|
export declare const getChangedFileNames: (fromTag: string, cwd?: string) => string[];
|
package/dist/git.js
CHANGED
|
@@ -17,7 +17,10 @@ const commitAll = (message, cwd) => {
|
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
19
|
exports.commitAll = commitAll;
|
|
20
|
-
const createTag = (tagName, cwd) => {
|
|
20
|
+
const createTag = (tagName, cwd, force) => {
|
|
21
|
+
if (force) {
|
|
22
|
+
(0, exports.deleteTag)(tagName, cwd);
|
|
23
|
+
}
|
|
21
24
|
run(`git tag ${tagName}`, cwd);
|
|
22
25
|
};
|
|
23
26
|
exports.createTag = createTag;
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":";;;AAAA,2DAA6C;AAE7C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAY,EAAU,EAAE,CAChD,IAAA,6BAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AAE5E,MAAM,aAAa,GAAG,CAAC,GAAY,EAAU,EAAE,CACpD,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;AADnB,QAAA,aAAa,iBACM;AAEzB,MAAM,kBAAkB,GAAG,CAAC,GAAY,EAAW,EAAE,CAC1D,GAAG,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AADlC,QAAA,kBAAkB,sBACgB;AAExC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,GAAY,EAAQ,EAAE;IAC/D,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IACtB,IAAI,CAAC;QACH,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;AACH,CAAC,CAAA;AAPY,QAAA,SAAS,aAOrB;AAEM,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,GAAY,EAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.runPhase = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
4
38
|
const node_child_process_1 = require("node:child_process");
|
|
5
39
|
const git_1 = require("../git");
|
|
6
40
|
const budget_1 = require("../state/budget");
|
|
@@ -39,7 +73,7 @@ const runPhase = async (phase, config, state) => {
|
|
|
39
73
|
if ((0, git_1.isWorkingTreeDirty)()) {
|
|
40
74
|
(0, git_1.commitAll)(`chore: pre-phase checkpoint for ${phase.id}`);
|
|
41
75
|
}
|
|
42
|
-
(0, git_1.createTag)(checkpointTag);
|
|
76
|
+
(0, git_1.createTag)(checkpointTag, undefined, true);
|
|
43
77
|
(0, handoff_1.ensureHandoffExists)(config.buildDir);
|
|
44
78
|
let attempt = phaseState.retries;
|
|
45
79
|
const maxAttempts = config.maxRetries + 1; // retries + initial attempt
|
|
@@ -102,7 +136,7 @@ const runPhase = async (phase, config, state) => {
|
|
|
102
136
|
if (verdict.passed) {
|
|
103
137
|
const duration = Date.now() - startTime;
|
|
104
138
|
const completionTag = `ridgeline/phase/${config.buildName}/${phase.id}`;
|
|
105
|
-
(0, git_1.createTag)(completionTag);
|
|
139
|
+
(0, git_1.createTag)(completionTag, undefined, true);
|
|
106
140
|
(0, stateManager_1.updatePhaseStatus)(config.buildDir, state, phase.id, {
|
|
107
141
|
status: "complete",
|
|
108
142
|
completionTag,
|
|
@@ -113,11 +147,13 @@ const runPhase = async (phase, config, state) => {
|
|
|
113
147
|
(0, logging_1.logTrajectory)(config.buildDir, (0, logging_1.makeTrajectoryEntry)("phase_advance", phase.id, "Phase passed"));
|
|
114
148
|
return "passed";
|
|
115
149
|
}
|
|
116
|
-
// Failed
|
|
150
|
+
// Failed — write feedback for builder retry
|
|
117
151
|
(0, logging_1.logPhase)(phase.id, `FAILED: ${verdict.summary}`);
|
|
118
152
|
for (const issue of verdict.issues) {
|
|
119
|
-
(0, logging_1.logPhase)(phase.id, ` - ${issue}`);
|
|
153
|
+
(0, logging_1.logPhase)(phase.id, ` - ${(0, reviewerInvoker_1.formatIssue)(issue)}`);
|
|
120
154
|
}
|
|
155
|
+
const feedbackFilePath = phase.filepath.replace(/\.md$/, ".feedback.md");
|
|
156
|
+
fs.writeFileSync(feedbackFilePath, (0, reviewerInvoker_1.generateFeedback)(phase.id, verdict), "utf-8");
|
|
121
157
|
attempt++;
|
|
122
158
|
if (attempt < maxAttempts) {
|
|
123
159
|
(0, logging_1.logPhase)(phase.id, `Retrying (${attempt}/${config.maxRetries})...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phaseRunner.js","sourceRoot":"","sources":["../../src/runner/phaseRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phaseRunner.js","sourceRoot":"","sources":["../../src/runner/phaseRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { RidgelineConfig, PhaseInfo, ClaudeResult, ReviewVerdict } from "../types";
|
|
1
|
+
import { RidgelineConfig, PhaseInfo, ClaudeResult, ReviewVerdict, ReviewIssue } from "../types";
|
|
2
2
|
export declare const parseVerdict: (text: string) => ReviewVerdict;
|
|
3
|
+
export declare const formatIssue: (issue: ReviewIssue) => string;
|
|
4
|
+
export declare const generateFeedback: (phaseId: string, verdict: ReviewVerdict) => string;
|
|
3
5
|
export declare const invokeReviewer: (config: RidgelineConfig, phase: PhaseInfo, checkpointTag: string, checkOutput: {
|
|
4
6
|
command: string;
|
|
5
7
|
output: string;
|
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.invokeReviewer = exports.parseVerdict = void 0;
|
|
36
|
+
exports.invokeReviewer = exports.generateFeedback = exports.formatIssue = exports.parseVerdict = void 0;
|
|
37
37
|
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
39
|
const claudeInvoker_1 = require("./claudeInvoker");
|
|
@@ -48,38 +48,180 @@ const resolveAgentPrompt = (filename) => {
|
|
|
48
48
|
const rootPath = path.join(__dirname, "..", "..", "src", "agents", filename);
|
|
49
49
|
return fs.readFileSync(rootPath, "utf-8");
|
|
50
50
|
};
|
|
51
|
+
// Normalize an issue entry — accept both string and object forms
|
|
52
|
+
const normalizeIssue = (item, severity) => {
|
|
53
|
+
if (typeof item === "string") {
|
|
54
|
+
return { description: item, severity };
|
|
55
|
+
}
|
|
56
|
+
if (typeof item === "object" && item !== null) {
|
|
57
|
+
const obj = item;
|
|
58
|
+
return {
|
|
59
|
+
criterion: typeof obj.criterion === "number" ? obj.criterion : undefined,
|
|
60
|
+
description: typeof obj.description === "string" ? obj.description : String(obj.description ?? ""),
|
|
61
|
+
file: typeof obj.file === "string" ? obj.file : undefined,
|
|
62
|
+
severity,
|
|
63
|
+
requiredState: typeof obj.requiredState === "string" ? obj.requiredState : undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { description: String(item), severity };
|
|
67
|
+
};
|
|
68
|
+
// Try to parse a raw object as a ReviewVerdict
|
|
69
|
+
const tryParseVerdict = (raw) => {
|
|
70
|
+
if (typeof raw !== "object" || raw === null)
|
|
71
|
+
return null;
|
|
72
|
+
const obj = raw;
|
|
73
|
+
if (typeof obj.passed !== "boolean")
|
|
74
|
+
return null;
|
|
75
|
+
return {
|
|
76
|
+
passed: obj.passed,
|
|
77
|
+
summary: typeof obj.summary === "string" ? obj.summary : "",
|
|
78
|
+
criteriaResults: Array.isArray(obj.criteriaResults)
|
|
79
|
+
? obj.criteriaResults.map((cr) => ({
|
|
80
|
+
criterion: typeof cr.criterion === "number" ? cr.criterion : 0,
|
|
81
|
+
passed: typeof cr.passed === "boolean" ? cr.passed : false,
|
|
82
|
+
notes: typeof cr.notes === "string" ? cr.notes : "",
|
|
83
|
+
}))
|
|
84
|
+
: [],
|
|
85
|
+
issues: Array.isArray(obj.issues)
|
|
86
|
+
? obj.issues.map((i) => normalizeIssue(i, "blocking"))
|
|
87
|
+
: [],
|
|
88
|
+
suggestions: Array.isArray(obj.suggestions)
|
|
89
|
+
? obj.suggestions.map((s) => normalizeIssue(s, "suggestion"))
|
|
90
|
+
: [],
|
|
91
|
+
};
|
|
92
|
+
};
|
|
51
93
|
// Extract the JSON verdict block from reviewer's text output
|
|
52
94
|
const parseVerdict = (text) => {
|
|
53
|
-
//
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
95
|
+
// Try extracting from fenced code block first
|
|
96
|
+
const fencedMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
97
|
+
if (fencedMatch) {
|
|
56
98
|
try {
|
|
57
|
-
|
|
99
|
+
const result = tryParseVerdict(JSON.parse(fencedMatch[1]));
|
|
100
|
+
if (result)
|
|
101
|
+
return result;
|
|
58
102
|
}
|
|
59
103
|
catch {
|
|
60
|
-
// Fall through
|
|
104
|
+
// Fall through
|
|
61
105
|
}
|
|
62
106
|
}
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
107
|
+
// Brute-force: scan every { and try JSON.parse from that position.
|
|
108
|
+
// For each {, first try the full slice, then try to find the matching }
|
|
109
|
+
// by scanning for } from the end of the string backwards.
|
|
110
|
+
for (let i = text.indexOf("{"); i !== -1; i = text.indexOf("{", i + 1)) {
|
|
111
|
+
const slice = text.slice(i);
|
|
66
112
|
try {
|
|
67
|
-
|
|
113
|
+
const result = tryParseVerdict(JSON.parse(slice));
|
|
114
|
+
if (result)
|
|
115
|
+
return result;
|
|
68
116
|
}
|
|
69
117
|
catch {
|
|
70
|
-
//
|
|
118
|
+
// Full slice failed (likely trailing text) — try to find balanced closing brace
|
|
119
|
+
let depth = 0;
|
|
120
|
+
let inString = false;
|
|
121
|
+
let escape = false;
|
|
122
|
+
for (let j = 0; j < slice.length; j++) {
|
|
123
|
+
const ch = slice[j];
|
|
124
|
+
if (escape) {
|
|
125
|
+
escape = false;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (ch === "\\") {
|
|
129
|
+
escape = true;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (ch === '"') {
|
|
133
|
+
inString = !inString;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (inString)
|
|
137
|
+
continue;
|
|
138
|
+
if (ch === "{")
|
|
139
|
+
depth++;
|
|
140
|
+
if (ch === "}") {
|
|
141
|
+
depth--;
|
|
142
|
+
if (depth === 0) {
|
|
143
|
+
try {
|
|
144
|
+
const result = tryParseVerdict(JSON.parse(slice.slice(0, j + 1)));
|
|
145
|
+
if (result)
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Not valid JSON at this brace pair
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
71
155
|
}
|
|
72
156
|
}
|
|
73
|
-
// Default:
|
|
157
|
+
// Default: unparseable
|
|
74
158
|
return {
|
|
75
159
|
passed: false,
|
|
76
160
|
summary: "Could not parse reviewer verdict from output",
|
|
77
161
|
criteriaResults: [],
|
|
78
|
-
issues: ["Reviewer output did not contain a valid JSON verdict"],
|
|
162
|
+
issues: [{ description: "Reviewer output did not contain a valid JSON verdict", severity: "blocking" }],
|
|
79
163
|
suggestions: [],
|
|
80
164
|
};
|
|
81
165
|
};
|
|
82
166
|
exports.parseVerdict = parseVerdict;
|
|
167
|
+
// Format a ReviewIssue for display
|
|
168
|
+
const formatIssue = (issue) => {
|
|
169
|
+
const parts = [];
|
|
170
|
+
if (issue.file)
|
|
171
|
+
parts.push(issue.file);
|
|
172
|
+
parts.push(issue.description);
|
|
173
|
+
return parts.join(": ");
|
|
174
|
+
};
|
|
175
|
+
exports.formatIssue = formatIssue;
|
|
176
|
+
// Generate feedback markdown from a structured verdict
|
|
177
|
+
const generateFeedback = (phaseId, verdict) => {
|
|
178
|
+
const lines = [];
|
|
179
|
+
lines.push(`# Reviewer Feedback: Phase ${phaseId}`);
|
|
180
|
+
lines.push("");
|
|
181
|
+
// Failed criteria
|
|
182
|
+
const failed = verdict.criteriaResults.filter((cr) => !cr.passed);
|
|
183
|
+
if (failed.length > 0) {
|
|
184
|
+
lines.push("## Failed Criteria");
|
|
185
|
+
lines.push("");
|
|
186
|
+
for (const cr of failed) {
|
|
187
|
+
lines.push(`### Criterion ${cr.criterion}`);
|
|
188
|
+
lines.push(`**Status:** FAIL`);
|
|
189
|
+
lines.push(`**Evidence:** ${cr.notes}`);
|
|
190
|
+
// Find matching issue with requiredState
|
|
191
|
+
const matchingIssue = verdict.issues.find((i) => i.criterion === cr.criterion);
|
|
192
|
+
if (matchingIssue?.requiredState) {
|
|
193
|
+
lines.push(`**Required state:** ${matchingIssue.requiredState}`);
|
|
194
|
+
}
|
|
195
|
+
lines.push("");
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Blocking issues
|
|
199
|
+
const blocking = verdict.issues.filter((i) => i.severity === "blocking");
|
|
200
|
+
if (blocking.length > 0) {
|
|
201
|
+
lines.push("## Issues");
|
|
202
|
+
lines.push("");
|
|
203
|
+
for (const issue of blocking) {
|
|
204
|
+
const filePart = issue.file ? ` (${issue.file})` : "";
|
|
205
|
+
lines.push(`- ${issue.description}${filePart}`);
|
|
206
|
+
if (issue.requiredState) {
|
|
207
|
+
lines.push(` - **Required:** ${issue.requiredState}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
lines.push("");
|
|
211
|
+
}
|
|
212
|
+
// What passed
|
|
213
|
+
const passed = verdict.criteriaResults.filter((cr) => cr.passed);
|
|
214
|
+
if (passed.length > 0) {
|
|
215
|
+
lines.push("## What Passed");
|
|
216
|
+
lines.push("");
|
|
217
|
+
for (const cr of passed) {
|
|
218
|
+
lines.push(`- Criterion ${cr.criterion}: ${cr.notes}`);
|
|
219
|
+
}
|
|
220
|
+
lines.push("");
|
|
221
|
+
}
|
|
222
|
+
return lines.join("\n");
|
|
223
|
+
};
|
|
224
|
+
exports.generateFeedback = generateFeedback;
|
|
83
225
|
const assembleUserPrompt = (config, phase, checkpointTag, checkOutput) => {
|
|
84
226
|
const sections = [];
|
|
85
227
|
sections.push("## Phase Spec\n");
|
|
@@ -119,10 +261,6 @@ const assembleUserPrompt = (config, phase, checkpointTag, checkOutput) => {
|
|
|
119
261
|
sections.push("```");
|
|
120
262
|
sections.push("");
|
|
121
263
|
}
|
|
122
|
-
const feedbackPath = phase.filepath.replace(/\.md$/, ".feedback.md");
|
|
123
|
-
sections.push("## Feedback Path\n");
|
|
124
|
-
sections.push(`If this phase fails, write your feedback to: ${feedbackPath}`);
|
|
125
|
-
sections.push("");
|
|
126
264
|
return sections.join("\n");
|
|
127
265
|
};
|
|
128
266
|
const invokeReviewer = async (config, phase, checkpointTag, checkOutput) => {
|
|
@@ -132,7 +270,7 @@ const invokeReviewer = async (config, phase, checkpointTag, checkOutput) => {
|
|
|
132
270
|
systemPrompt,
|
|
133
271
|
userPrompt,
|
|
134
272
|
model: config.model,
|
|
135
|
-
allowedTools: ["Read", "
|
|
273
|
+
allowedTools: ["Read", "Bash", "Glob", "Grep"],
|
|
136
274
|
cwd: process.cwd(),
|
|
137
275
|
verbose: config.verbose,
|
|
138
276
|
timeoutMs: config.timeoutMinutes * 60 * 1000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewerInvoker.js","sourceRoot":"","sources":["../../src/runner/reviewerInvoker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,mDAA8C;AAC9C,gCAAwD;AAExD,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC5E,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED,
|
|
1
|
+
{"version":3,"file":"reviewerInvoker.js","sourceRoot":"","sources":["../../src/runner/reviewerInvoker.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -48,6 +48,13 @@ export type ClaudeResult = {
|
|
|
48
48
|
};
|
|
49
49
|
sessionId: string;
|
|
50
50
|
};
|
|
51
|
+
export type ReviewIssue = {
|
|
52
|
+
criterion?: number;
|
|
53
|
+
description: string;
|
|
54
|
+
file?: string;
|
|
55
|
+
severity: "blocking" | "suggestion";
|
|
56
|
+
requiredState?: string;
|
|
57
|
+
};
|
|
51
58
|
export type ReviewVerdict = {
|
|
52
59
|
passed: boolean;
|
|
53
60
|
summary: string;
|
|
@@ -56,8 +63,8 @@ export type ReviewVerdict = {
|
|
|
56
63
|
passed: boolean;
|
|
57
64
|
notes: string;
|
|
58
65
|
}[];
|
|
59
|
-
issues:
|
|
60
|
-
suggestions:
|
|
66
|
+
issues: ReviewIssue[];
|
|
67
|
+
suggestions: ReviewIssue[];
|
|
61
68
|
};
|
|
62
69
|
export type BudgetEntry = {
|
|
63
70
|
phase: string;
|