@tokenfactory/acc-runner 0.25.0 → 0.27.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 +77 -4
- package/package.json +1 -1
- package/dist/anthropic-auth.d.ts +0 -53
- package/dist/anthropic-auth.d.ts.map +0 -1
- package/dist/anthropic-auth.js +0 -89
- package/dist/anthropic-auth.js.map +0 -1
- package/dist/bin-resolve.d.ts +0 -16
- package/dist/bin-resolve.d.ts.map +0 -1
- package/dist/bin-resolve.js +0 -35
- package/dist/bin-resolve.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -128
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -121
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -396
- package/dist/config.js.map +0 -1
- package/dist/cost-pricing.d.ts +0 -130
- package/dist/cost-pricing.d.ts.map +0 -1
- package/dist/cost-pricing.js +0 -191
- package/dist/cost-pricing.js.map +0 -1
- package/dist/doctor.d.ts +0 -37
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js +0 -658
- package/dist/doctor.js.map +0 -1
- package/dist/failure-classifier.d.ts +0 -112
- package/dist/failure-classifier.d.ts.map +0 -1
- package/dist/failure-classifier.js +0 -353
- package/dist/failure-classifier.js.map +0 -1
- package/dist/gh.d.ts +0 -22
- package/dist/gh.d.ts.map +0 -1
- package/dist/gh.js +0 -48
- package/dist/gh.js.map +0 -1
- package/dist/git.d.ts +0 -50
- package/dist/git.d.ts.map +0 -1
- package/dist/git.js +0 -127
- package/dist/git.js.map +0 -1
- package/dist/github-client.d.ts +0 -133
- package/dist/github-client.d.ts.map +0 -1
- package/dist/github-client.js +0 -234
- package/dist/github-client.js.map +0 -1
- package/dist/keychain.d.ts +0 -21
- package/dist/keychain.d.ts.map +0 -1
- package/dist/keychain.js +0 -45
- package/dist/keychain.js.map +0 -1
- package/dist/login.d.ts +0 -12
- package/dist/login.d.ts.map +0 -1
- package/dist/login.js +0 -133
- package/dist/login.js.map +0 -1
- package/dist/logout.d.ts +0 -2
- package/dist/logout.d.ts.map +0 -1
- package/dist/logout.js +0 -31
- package/dist/logout.js.map +0 -1
- package/dist/mcp-spawn.d.ts +0 -30
- package/dist/mcp-spawn.d.ts.map +0 -1
- package/dist/mcp-spawn.js +0 -145
- package/dist/mcp-spawn.js.map +0 -1
- package/dist/messaging.d.ts +0 -49
- package/dist/messaging.d.ts.map +0 -1
- package/dist/messaging.js +0 -36
- package/dist/messaging.js.map +0 -1
- package/dist/pkg-version.d.ts +0 -3
- package/dist/pkg-version.d.ts.map +0 -1
- package/dist/pkg-version.js +0 -20
- package/dist/pkg-version.js.map +0 -1
- package/dist/profiles/designer-prompt.d.ts +0 -18
- package/dist/profiles/designer-prompt.d.ts.map +0 -1
- package/dist/profiles/designer-prompt.js +0 -172
- package/dist/profiles/designer-prompt.js.map +0 -1
- package/dist/profiles/developer-prompt.d.ts +0 -24
- package/dist/profiles/developer-prompt.d.ts.map +0 -1
- package/dist/profiles/developer-prompt.js +0 -24
- package/dist/profiles/developer-prompt.js.map +0 -1
- package/dist/profiles/manager-prompt.d.ts +0 -34
- package/dist/profiles/manager-prompt.d.ts.map +0 -1
- package/dist/profiles/manager-prompt.js +0 -93
- package/dist/profiles/manager-prompt.js.map +0 -1
- package/dist/profiles/tester-prompt.d.ts +0 -28
- package/dist/profiles/tester-prompt.d.ts.map +0 -1
- package/dist/profiles/tester-prompt.js +0 -165
- package/dist/profiles/tester-prompt.js.map +0 -1
- package/dist/prompt.d.ts +0 -38
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js +0 -78
- package/dist/prompt.js.map +0 -1
- package/dist/runtime/cache-dir.d.ts +0 -2
- package/dist/runtime/cache-dir.d.ts.map +0 -1
- package/dist/runtime/cache-dir.js +0 -15
- package/dist/runtime/cache-dir.js.map +0 -1
- package/dist/runtime/conflict-resolver.d.ts +0 -65
- package/dist/runtime/conflict-resolver.d.ts.map +0 -1
- package/dist/runtime/conflict-resolver.js +0 -477
- package/dist/runtime/conflict-resolver.js.map +0 -1
- package/dist/runtime/expand-args.d.ts +0 -28
- package/dist/runtime/expand-args.d.ts.map +0 -1
- package/dist/runtime/expand-args.js +0 -50
- package/dist/runtime/expand-args.js.map +0 -1
- package/dist/runtime/locks.d.ts +0 -21
- package/dist/runtime/locks.d.ts.map +0 -1
- package/dist/runtime/locks.js +0 -97
- package/dist/runtime/locks.js.map +0 -1
- package/dist/runtime/provision-mutex.d.ts +0 -37
- package/dist/runtime/provision-mutex.d.ts.map +0 -1
- package/dist/runtime/provision-mutex.js +0 -67
- package/dist/runtime/provision-mutex.js.map +0 -1
- package/dist/runtime/quarantine.d.ts +0 -26
- package/dist/runtime/quarantine.d.ts.map +0 -1
- package/dist/runtime/quarantine.js +0 -50
- package/dist/runtime/quarantine.js.map +0 -1
- package/dist/runtime/resolution-integrity.d.ts +0 -86
- package/dist/runtime/resolution-integrity.d.ts.map +0 -1
- package/dist/runtime/resolution-integrity.js +0 -248
- package/dist/runtime/resolution-integrity.js.map +0 -1
- package/dist/runtime/reviewer.d.ts +0 -81
- package/dist/runtime/reviewer.d.ts.map +0 -1
- package/dist/runtime/reviewer.js +0 -374
- package/dist/runtime/reviewer.js.map +0 -1
- package/dist/runtime/rework.d.ts +0 -48
- package/dist/runtime/rework.d.ts.map +0 -1
- package/dist/runtime/rework.js +0 -136
- package/dist/runtime/rework.js.map +0 -1
- package/dist/runtime/singleton.d.ts +0 -47
- package/dist/runtime/singleton.d.ts.map +0 -1
- package/dist/runtime/singleton.js +0 -200
- package/dist/runtime/singleton.js.map +0 -1
- package/dist/runtime/version-drift.d.ts +0 -31
- package/dist/runtime/version-drift.d.ts.map +0 -1
- package/dist/runtime/version-drift.js +0 -114
- package/dist/runtime/version-drift.js.map +0 -1
- package/dist/runtime/worktree.d.ts +0 -74
- package/dist/runtime/worktree.d.ts.map +0 -1
- package/dist/runtime/worktree.js +0 -206
- package/dist/runtime/worktree.js.map +0 -1
- package/dist/secrets/inject.d.ts +0 -70
- package/dist/secrets/inject.d.ts.map +0 -1
- package/dist/secrets/inject.js +0 -102
- package/dist/secrets/inject.js.map +0 -1
- package/dist/supabase.d.ts +0 -4
- package/dist/supabase.d.ts.map +0 -1
- package/dist/supabase.js +0 -36
- package/dist/supabase.js.map +0 -1
- package/dist/task-runner.d.ts +0 -313
- package/dist/task-runner.d.ts.map +0 -1
- package/dist/task-runner.js +0 -1766
- package/dist/task-runner.js.map +0 -1
- package/dist/token-provider.d.ts +0 -50
- package/dist/token-provider.d.ts.map +0 -1
- package/dist/token-provider.js +0 -177
- package/dist/token-provider.js.map +0 -1
- package/dist/types.d.ts +0 -120
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -16
- package/dist/types.js.map +0 -1
- package/dist/version-check.d.ts +0 -17
- package/dist/version-check.d.ts.map +0 -1
- package/dist/version-check.js +0 -56
- package/dist/version-check.js.map +0 -1
- package/dist/watch.d.ts +0 -295
- package/dist/watch.d.ts.map +0 -1
- package/dist/watch.js +0 -1532
- package/dist/watch.js.map +0 -1
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* v0.57 T-57-2: Conflict-resolution integrity guardrail.
|
|
3
|
-
*
|
|
4
|
-
* A reusable post-resolution assertion the conflict-resolution path MUST pass
|
|
5
|
-
* before a resolution is declared complete / pushed. It exists because agent
|
|
6
|
-
* conflict resolutions in v0.55–v0.56 repeatedly shipped broken merges that
|
|
7
|
-
* were still marked "resolved":
|
|
8
|
-
* - spliced blocks left stale variable names (task-runner.ts) → CI typecheck
|
|
9
|
-
* failure that the runner never re-checked;
|
|
10
|
-
* - duplicate declarations (health.ts) → same;
|
|
11
|
-
* - a silently dropped version bump (#496 reverted package.json
|
|
12
|
-
* 0.14.0 → 0.13.0) → a version REGRESSION nobody noticed.
|
|
13
|
-
*
|
|
14
|
-
* The guardrail re-verifies the resolution from the runner's own vantage point
|
|
15
|
-
* (it never trusts the agent's self-reported gate results):
|
|
16
|
-
* 1. ZERO git conflict markers remain in any tracked file
|
|
17
|
-
* (<<<<<<< / ======= / >>>>>>>).
|
|
18
|
-
* 2. `pnpm typecheck` passes.
|
|
19
|
-
* 3. If a package.json "version" changed in the resolution, it only moved
|
|
20
|
-
* FORWARD (semver-greater than the base, never a regression) AND
|
|
21
|
-
* CHANGELOG.md carries a matching entry for the new version.
|
|
22
|
-
*
|
|
23
|
-
* On ANY failure the caller MUST reject the resolution: do not push, do not
|
|
24
|
-
* mark the task resolved; keep it actionable and emit a diagnostic naming the
|
|
25
|
-
* failed assertion. The default implementations shell out to `git` / `pnpm`,
|
|
26
|
-
* but every I/O boundary is an injectable dep so the three incident replays
|
|
27
|
-
* (version regression, stale-var typecheck fail, marker-left-behind) can be
|
|
28
|
-
* driven without a real worktree.
|
|
29
|
-
*/
|
|
30
|
-
import path from "node:path";
|
|
31
|
-
import fs from "node:fs/promises";
|
|
32
|
-
import { execa } from "execa";
|
|
33
|
-
import { buildEnv } from "../bin-resolve.js";
|
|
34
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
35
|
-
// Pure helpers (exported for direct unit coverage)
|
|
36
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
37
|
-
/**
|
|
38
|
-
* Conflict-marker line shape: 7 of the same marker char at the start of a
|
|
39
|
-
* line. `<<<<<<<` and `>>>>>>>` are unambiguous; the `=======` divider is
|
|
40
|
-
* matched only as a whole line so a 7-equals markdown rule plus trailing text
|
|
41
|
-
* does not trip it.
|
|
42
|
-
*/
|
|
43
|
-
export const CONFLICT_MARKER_RE = /^(?:<{7}|>{7})(?:$|\s)|^={7}\s*$/m;
|
|
44
|
-
export function textHasConflictMarker(text) {
|
|
45
|
-
return CONFLICT_MARKER_RE.test(text);
|
|
46
|
-
}
|
|
47
|
-
/** Semver compare (a-b sign); tolerant of pre-release/build suffixes. */
|
|
48
|
-
export function cmpSemver(a, b) {
|
|
49
|
-
const parts = (s) => s.split(/[.+-]/).map((x) => Number(x) || 0);
|
|
50
|
-
const [pa, pb] = [parts(a), parts(b)];
|
|
51
|
-
const len = Math.max(pa.length, pb.length);
|
|
52
|
-
for (let i = 0; i < len; i++) {
|
|
53
|
-
if ((pa[i] ?? 0) !== (pb[i] ?? 0))
|
|
54
|
-
return (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
55
|
-
}
|
|
56
|
-
return 0;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* True when `changelog` carries an entry for `version`. The version must
|
|
60
|
-
* appear bounded by non-version characters so 0.14.0 does not match inside
|
|
61
|
-
* 0.14.00 or 10.14.0.
|
|
62
|
-
*/
|
|
63
|
-
export function changelogMentionsVersion(changelog, version) {
|
|
64
|
-
const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
65
|
-
return new RegExp(`(^|[^0-9.])${escaped}([^0-9.]|$)`, "m").test(changelog);
|
|
66
|
-
}
|
|
67
|
-
export const DEFAULT_VERSION_TARGET = {
|
|
68
|
-
packageJsonPath: "package.json",
|
|
69
|
-
changelogPath: "CHANGELOG.md",
|
|
70
|
-
};
|
|
71
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
72
|
-
// Default I/O implementations
|
|
73
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
74
|
-
async function defaultFindConflictMarkers(workdir) {
|
|
75
|
-
// `git grep` only scans tracked files. -I skips binaries, -l lists names.
|
|
76
|
-
// -E with the three marker forms; `=======` constrained to a lone line via
|
|
77
|
-
// the `\$` anchors git's POSIX-ERE understands.
|
|
78
|
-
const patterns = ["^<<<<<<<", "^>>>>>>>", "^=======$"];
|
|
79
|
-
const args = ["grep", "-I", "-l", "-E"];
|
|
80
|
-
for (let i = 0; i < patterns.length; i++) {
|
|
81
|
-
args.push(i === 0 ? "-e" : "-e", patterns[i]);
|
|
82
|
-
}
|
|
83
|
-
// `--` guards against a pattern being read as a pathspec.
|
|
84
|
-
args.push("--");
|
|
85
|
-
const { stdout, exitCode } = await execa("git", args, {
|
|
86
|
-
cwd: workdir,
|
|
87
|
-
env: buildEnv(),
|
|
88
|
-
reject: false,
|
|
89
|
-
});
|
|
90
|
-
// git grep exits 1 when there are no matches — that's the clean case.
|
|
91
|
-
if (exitCode === 1)
|
|
92
|
-
return [];
|
|
93
|
-
return stdout
|
|
94
|
-
.split(/\r?\n/)
|
|
95
|
-
.map((l) => l.trim())
|
|
96
|
-
.filter((l) => l.length > 0);
|
|
97
|
-
}
|
|
98
|
-
async function defaultRunTypecheck(workdir, cmd) {
|
|
99
|
-
const result = await execa(cmd, {
|
|
100
|
-
cwd: workdir,
|
|
101
|
-
env: buildEnv(),
|
|
102
|
-
shell: true,
|
|
103
|
-
reject: false,
|
|
104
|
-
});
|
|
105
|
-
const output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`.trim();
|
|
106
|
-
return { ok: result.exitCode === 0, output };
|
|
107
|
-
}
|
|
108
|
-
async function readJsonVersion(text) {
|
|
109
|
-
if (text === null)
|
|
110
|
-
return null;
|
|
111
|
-
try {
|
|
112
|
-
const v = JSON.parse(text).version;
|
|
113
|
-
return typeof v === "string" ? v : null;
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
async function defaultReadResolvedVersion(workdir, target) {
|
|
120
|
-
try {
|
|
121
|
-
const text = await fs.readFile(path.join(workdir, target.packageJsonPath), "utf8");
|
|
122
|
-
return readJsonVersion(text);
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
async function defaultReadBaseVersion(workdir, baseRef, target) {
|
|
129
|
-
try {
|
|
130
|
-
const { stdout, exitCode } = await execa("git", ["show", `${baseRef}:${target.packageJsonPath}`], { cwd: workdir, env: buildEnv(), reject: false });
|
|
131
|
-
if (exitCode !== 0)
|
|
132
|
-
return null;
|
|
133
|
-
return readJsonVersion(stdout);
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
async function defaultReadChangelog(workdir, target) {
|
|
140
|
-
try {
|
|
141
|
-
return await fs.readFile(path.join(workdir, target.changelogPath), "utf8");
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
148
|
-
// The guardrail
|
|
149
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
150
|
-
const OUTPUT_TAIL = 2000;
|
|
151
|
-
/**
|
|
152
|
-
* Assert that a conflict resolution in `workdir` is shippable. Returns a
|
|
153
|
-
* structured result; `ok === false` means the caller MUST reject the
|
|
154
|
-
* resolution (do not push, do not mark resolved).
|
|
155
|
-
*/
|
|
156
|
-
export async function assertResolutionIntegrity(workdir, opts = {}, deps = {}) {
|
|
157
|
-
const findConflictMarkers = deps.findConflictMarkers ?? defaultFindConflictMarkers;
|
|
158
|
-
const runTypecheck = deps.runTypecheck ?? defaultRunTypecheck;
|
|
159
|
-
const readResolvedVersion = deps.readResolvedVersion ?? defaultReadResolvedVersion;
|
|
160
|
-
const readBaseVersion = deps.readBaseVersion ?? defaultReadBaseVersion;
|
|
161
|
-
const readChangelog = deps.readChangelog ?? defaultReadChangelog;
|
|
162
|
-
const typecheckCmd = opts.typecheckCmd?.trim() || "pnpm typecheck";
|
|
163
|
-
const targets = opts.versionTargets?.length
|
|
164
|
-
? opts.versionTargets
|
|
165
|
-
: [DEFAULT_VERSION_TARGET];
|
|
166
|
-
const checked = [];
|
|
167
|
-
const failures = [];
|
|
168
|
-
// ── 1. Conflict markers ────────────────────────────────────────────────────
|
|
169
|
-
checked.push("conflict_markers");
|
|
170
|
-
const markerFiles = await findConflictMarkers(workdir);
|
|
171
|
-
if (markerFiles.length > 0) {
|
|
172
|
-
failures.push({
|
|
173
|
-
assertion: "conflict_markers",
|
|
174
|
-
detail: `unresolved conflict markers remain in ${markerFiles.length} file(s): ${markerFiles.join(", ")}`,
|
|
175
|
-
files: markerFiles,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
// ── 2. Typecheck ────────────────────────────────────────────────────────────
|
|
179
|
-
checked.push("typecheck");
|
|
180
|
-
const tc = await runTypecheck(workdir, typecheckCmd);
|
|
181
|
-
if (!tc.ok) {
|
|
182
|
-
failures.push({
|
|
183
|
-
assertion: "typecheck",
|
|
184
|
-
detail: `\`${typecheckCmd}\` failed:\n${tc.output.slice(-OUTPUT_TAIL)}`,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
// ── 3. Version-forward + CHANGELOG ──────────────────────────────────────────
|
|
188
|
-
// Only meaningful when we have a base to compare against.
|
|
189
|
-
if (opts.baseRef) {
|
|
190
|
-
let ranVersionCheck = false;
|
|
191
|
-
let ranChangelogCheck = false;
|
|
192
|
-
for (const target of targets) {
|
|
193
|
-
const baseVersion = await readBaseVersion(workdir, opts.baseRef, target);
|
|
194
|
-
const resolvedVersion = await readResolvedVersion(workdir, target);
|
|
195
|
-
// Skip silently when either side is unreadable or the file is new on
|
|
196
|
-
// this side — there is nothing to regress.
|
|
197
|
-
if (baseVersion === null || resolvedVersion === null)
|
|
198
|
-
continue;
|
|
199
|
-
if (baseVersion === resolvedVersion)
|
|
200
|
-
continue; // no version change → no checks
|
|
201
|
-
ranVersionCheck = true;
|
|
202
|
-
if (cmpSemver(resolvedVersion, baseVersion) <= 0) {
|
|
203
|
-
failures.push({
|
|
204
|
-
assertion: "version_regression",
|
|
205
|
-
detail: `${target.packageJsonPath} version regressed ${baseVersion} → ${resolvedVersion} ` +
|
|
206
|
-
`(must move forward, never backward)`,
|
|
207
|
-
files: [target.packageJsonPath],
|
|
208
|
-
});
|
|
209
|
-
// A regressed version can't have a forward CHANGELOG entry to require.
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
// Version moved forward → a matching CHANGELOG entry is mandatory.
|
|
213
|
-
ranChangelogCheck = true;
|
|
214
|
-
const changelog = await readChangelog(workdir, target);
|
|
215
|
-
if (changelog === null || !changelogMentionsVersion(changelog, resolvedVersion)) {
|
|
216
|
-
failures.push({
|
|
217
|
-
assertion: "changelog_missing",
|
|
218
|
-
detail: `${target.packageJsonPath} bumped to ${resolvedVersion} but ` +
|
|
219
|
-
`${target.changelogPath} has no entry for it`,
|
|
220
|
-
files: [target.changelogPath],
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (ranVersionCheck)
|
|
225
|
-
checked.push("version_regression");
|
|
226
|
-
if (ranChangelogCheck)
|
|
227
|
-
checked.push("changelog_missing");
|
|
228
|
-
}
|
|
229
|
-
return { ok: failures.length === 0, checked, failures };
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* True when a task that reaches the worktree/push path is a conflict
|
|
233
|
-
* resolution and must clear the integrity guardrail. `conflict_resolution`
|
|
234
|
-
* task types are handled mechanically upstream and never reach the push path,
|
|
235
|
-
* so the live signal here is the title an operator/manager files when the
|
|
236
|
-
* mechanical resolver bails and a Claude session takes over the merge.
|
|
237
|
-
*/
|
|
238
|
-
export function isConflictResolutionTask(task) {
|
|
239
|
-
if (task.type === "conflict_resolution")
|
|
240
|
-
return true;
|
|
241
|
-
const title = (task.title ?? "").toLowerCase();
|
|
242
|
-
return /merge conflict|resolve\s+conflict|conflict\s+resolution/.test(title);
|
|
243
|
-
}
|
|
244
|
-
/** One-line, log-safe summary of which assertions failed. */
|
|
245
|
-
export function summariseFailures(failures) {
|
|
246
|
-
return failures.map((f) => f.assertion).join(", ");
|
|
247
|
-
}
|
|
248
|
-
//# sourceMappingURL=resolution-integrity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolution-integrity.js","sourceRoot":"","sources":["../../src/runtime/resolution-integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* v0.12-REVIEW-LOCAL — Runner-side reviewer-agent runtime.
|
|
3
|
-
*
|
|
4
|
-
* Triggered by a `review_assigned` realtime broadcast on
|
|
5
|
-
* `runner:<id>`. Spawns `claude --print` with the reviewer prompt
|
|
6
|
-
* (mirrors v0.11-B's spawnClaude for task-runner.ts) against the
|
|
7
|
-
* operator's CLI subscription, parses the JSON decision, and posts
|
|
8
|
-
* it back via acc.submit_review. Cost-cap enforcement is identical
|
|
9
|
-
* to api/_lib/reviewer-agent.ts so the cron's downstream merge
|
|
10
|
-
* gate sees consistent ReviewerOutcome shape across the queue and
|
|
11
|
-
* fallback paths.
|
|
12
|
-
*
|
|
13
|
-
* Never throws. Every failure surfaces through acc.submit_review
|
|
14
|
-
* with decision='reviewer_error' so the queue row settles and the
|
|
15
|
-
* cron's poll-merge loop can advance.
|
|
16
|
-
*/
|
|
17
|
-
import { type ExecaChildProcess } from "execa";
|
|
18
|
-
import type { RunnerSupabaseClient } from "../supabase.js";
|
|
19
|
-
export interface ReviewAssignment {
|
|
20
|
-
review_id: string;
|
|
21
|
-
task_id: string;
|
|
22
|
-
pr_number: number;
|
|
23
|
-
}
|
|
24
|
-
export interface ReviewerPolicy {
|
|
25
|
-
model_id: string;
|
|
26
|
-
confidence_threshold: number;
|
|
27
|
-
max_cost_usd_per_review: number;
|
|
28
|
-
}
|
|
29
|
-
export type ReviewerDecision = "approve" | "reject" | "cost_cap_exceeded" | "reviewer_error" | "reviewer_capacity";
|
|
30
|
-
export interface ReviewerOutcome {
|
|
31
|
-
decision: ReviewerDecision;
|
|
32
|
-
reasons: string[];
|
|
33
|
-
confidence: number;
|
|
34
|
-
session_id: string | null;
|
|
35
|
-
cost_usd: number;
|
|
36
|
-
/**
|
|
37
|
-
* v0.56 (T-56-1): set only on `reviewer_capacity` — the stated reset
|
|
38
|
-
* instant (ISO-8601) parsed from claude's "...resets <time>" message, or
|
|
39
|
-
* null when none was present. watch.ts schedules its capacity resume off
|
|
40
|
-
* this.
|
|
41
|
-
*/
|
|
42
|
-
resume_at?: string | null;
|
|
43
|
-
}
|
|
44
|
-
/** Returns true when a claude stderr string indicates a transient API error that is safe to retry. */
|
|
45
|
-
export declare function isRetriableError(stderr: string): boolean;
|
|
46
|
-
export declare function renderReviewerPrompt(args: {
|
|
47
|
-
task_description: string;
|
|
48
|
-
acceptance_criteria: string[];
|
|
49
|
-
pr_title: string;
|
|
50
|
-
pr_body: string;
|
|
51
|
-
pr_diff: string;
|
|
52
|
-
}): string;
|
|
53
|
-
export declare function extractReviewerDecision(text: string): {
|
|
54
|
-
decision: "approve" | "reject";
|
|
55
|
-
reasons: string[];
|
|
56
|
-
confidence: number;
|
|
57
|
-
} | null;
|
|
58
|
-
export interface RunReviewDeps {
|
|
59
|
-
supabase: RunnerSupabaseClient;
|
|
60
|
-
/** Override for tests. Defaults to `gh pr view ... --json title,body`. */
|
|
61
|
-
fetchPRMeta?: (repo: string, prNumber: number) => Promise<{
|
|
62
|
-
title: string;
|
|
63
|
-
body: string;
|
|
64
|
-
}>;
|
|
65
|
-
/** Override for tests. Defaults to `gh pr diff <n> -R <repo>`. */
|
|
66
|
-
fetchPRDiff?: (repo: string, prNumber: number) => Promise<string>;
|
|
67
|
-
/** Override for tests. Defaults to `claude --print --output-format=json --model <modelId>` on stdin. */
|
|
68
|
-
spawnClaude?: (modelId: string) => ExecaChildProcess;
|
|
69
|
-
/** Override the policy resolver (defaults to org_settings.automerge_policy.reviewer). */
|
|
70
|
-
loadPolicy?: (orgId: string) => Promise<ReviewerPolicy | null>;
|
|
71
|
-
/** Override for tests. Defaults to real setTimeout-based sleep. */
|
|
72
|
-
sleep?: (ms: number) => Promise<void>;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Drive one review end-to-end: fetch task spec + PR meta + diff →
|
|
76
|
-
* render prompt → spawn claude → parse decision → submit_review.
|
|
77
|
-
* Always submits a row even on internal failure (reviewer_error) so
|
|
78
|
-
* the cron's poll-merge loop can advance.
|
|
79
|
-
*/
|
|
80
|
-
export declare function runReview(assignment: ReviewAssignment, deps: RunReviewDeps): Promise<ReviewerOutcome>;
|
|
81
|
-
//# sourceMappingURL=reviewer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/runtime/reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAS,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAStD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAI,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,mBAAmB,GACnB,gBAAgB,GAOhB,mBAAmB,CAAC;AAExB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAI,gBAAgB,CAAC;IAC7B,OAAO,EAAK,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAI,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA0CD,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIxD;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAeT;AAQD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG;IACrD,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,OAAO,EAAG,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CA8DP;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3F,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,wGAAwG;IACxG,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,CAAC;IACrD,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,mEAAmE;IACnE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAoED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CAgC1B"}
|