@tokenfactory/acc-runner 0.25.1 → 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.
Files changed (162) hide show
  1. package/README.md +77 -4
  2. package/package.json +1 -1
  3. package/dist/anthropic-auth.d.ts +0 -53
  4. package/dist/anthropic-auth.d.ts.map +0 -1
  5. package/dist/anthropic-auth.js +0 -89
  6. package/dist/anthropic-auth.js.map +0 -1
  7. package/dist/bin-resolve.d.ts +0 -16
  8. package/dist/bin-resolve.d.ts.map +0 -1
  9. package/dist/bin-resolve.js +0 -35
  10. package/dist/bin-resolve.js.map +0 -1
  11. package/dist/cli.d.ts +0 -3
  12. package/dist/cli.d.ts.map +0 -1
  13. package/dist/cli.js +0 -128
  14. package/dist/cli.js.map +0 -1
  15. package/dist/config.d.ts +0 -121
  16. package/dist/config.d.ts.map +0 -1
  17. package/dist/config.js +0 -396
  18. package/dist/config.js.map +0 -1
  19. package/dist/cost-pricing.d.ts +0 -130
  20. package/dist/cost-pricing.d.ts.map +0 -1
  21. package/dist/cost-pricing.js +0 -191
  22. package/dist/cost-pricing.js.map +0 -1
  23. package/dist/doctor.d.ts +0 -37
  24. package/dist/doctor.d.ts.map +0 -1
  25. package/dist/doctor.js +0 -658
  26. package/dist/doctor.js.map +0 -1
  27. package/dist/failure-classifier.d.ts +0 -112
  28. package/dist/failure-classifier.d.ts.map +0 -1
  29. package/dist/failure-classifier.js +0 -353
  30. package/dist/failure-classifier.js.map +0 -1
  31. package/dist/gh.d.ts +0 -22
  32. package/dist/gh.d.ts.map +0 -1
  33. package/dist/gh.js +0 -48
  34. package/dist/gh.js.map +0 -1
  35. package/dist/git.d.ts +0 -50
  36. package/dist/git.d.ts.map +0 -1
  37. package/dist/git.js +0 -127
  38. package/dist/git.js.map +0 -1
  39. package/dist/github-client.d.ts +0 -133
  40. package/dist/github-client.d.ts.map +0 -1
  41. package/dist/github-client.js +0 -234
  42. package/dist/github-client.js.map +0 -1
  43. package/dist/keychain.d.ts +0 -21
  44. package/dist/keychain.d.ts.map +0 -1
  45. package/dist/keychain.js +0 -45
  46. package/dist/keychain.js.map +0 -1
  47. package/dist/login.d.ts +0 -12
  48. package/dist/login.d.ts.map +0 -1
  49. package/dist/login.js +0 -133
  50. package/dist/login.js.map +0 -1
  51. package/dist/logout.d.ts +0 -2
  52. package/dist/logout.d.ts.map +0 -1
  53. package/dist/logout.js +0 -31
  54. package/dist/logout.js.map +0 -1
  55. package/dist/mcp-spawn.d.ts +0 -30
  56. package/dist/mcp-spawn.d.ts.map +0 -1
  57. package/dist/mcp-spawn.js +0 -145
  58. package/dist/mcp-spawn.js.map +0 -1
  59. package/dist/messaging.d.ts +0 -49
  60. package/dist/messaging.d.ts.map +0 -1
  61. package/dist/messaging.js +0 -36
  62. package/dist/messaging.js.map +0 -1
  63. package/dist/pkg-version.d.ts +0 -3
  64. package/dist/pkg-version.d.ts.map +0 -1
  65. package/dist/pkg-version.js +0 -20
  66. package/dist/pkg-version.js.map +0 -1
  67. package/dist/profiles/designer-prompt.d.ts +0 -18
  68. package/dist/profiles/designer-prompt.d.ts.map +0 -1
  69. package/dist/profiles/designer-prompt.js +0 -172
  70. package/dist/profiles/designer-prompt.js.map +0 -1
  71. package/dist/profiles/developer-prompt.d.ts +0 -24
  72. package/dist/profiles/developer-prompt.d.ts.map +0 -1
  73. package/dist/profiles/developer-prompt.js +0 -24
  74. package/dist/profiles/developer-prompt.js.map +0 -1
  75. package/dist/profiles/manager-prompt.d.ts +0 -34
  76. package/dist/profiles/manager-prompt.d.ts.map +0 -1
  77. package/dist/profiles/manager-prompt.js +0 -93
  78. package/dist/profiles/manager-prompt.js.map +0 -1
  79. package/dist/profiles/tester-prompt.d.ts +0 -28
  80. package/dist/profiles/tester-prompt.d.ts.map +0 -1
  81. package/dist/profiles/tester-prompt.js +0 -165
  82. package/dist/profiles/tester-prompt.js.map +0 -1
  83. package/dist/prompt.d.ts +0 -38
  84. package/dist/prompt.d.ts.map +0 -1
  85. package/dist/prompt.js +0 -78
  86. package/dist/prompt.js.map +0 -1
  87. package/dist/runtime/cache-dir.d.ts +0 -2
  88. package/dist/runtime/cache-dir.d.ts.map +0 -1
  89. package/dist/runtime/cache-dir.js +0 -15
  90. package/dist/runtime/cache-dir.js.map +0 -1
  91. package/dist/runtime/conflict-resolver.d.ts +0 -65
  92. package/dist/runtime/conflict-resolver.d.ts.map +0 -1
  93. package/dist/runtime/conflict-resolver.js +0 -477
  94. package/dist/runtime/conflict-resolver.js.map +0 -1
  95. package/dist/runtime/expand-args.d.ts +0 -28
  96. package/dist/runtime/expand-args.d.ts.map +0 -1
  97. package/dist/runtime/expand-args.js +0 -50
  98. package/dist/runtime/expand-args.js.map +0 -1
  99. package/dist/runtime/locks.d.ts +0 -21
  100. package/dist/runtime/locks.d.ts.map +0 -1
  101. package/dist/runtime/locks.js +0 -97
  102. package/dist/runtime/locks.js.map +0 -1
  103. package/dist/runtime/provision-mutex.d.ts +0 -37
  104. package/dist/runtime/provision-mutex.d.ts.map +0 -1
  105. package/dist/runtime/provision-mutex.js +0 -67
  106. package/dist/runtime/provision-mutex.js.map +0 -1
  107. package/dist/runtime/quarantine.d.ts +0 -26
  108. package/dist/runtime/quarantine.d.ts.map +0 -1
  109. package/dist/runtime/quarantine.js +0 -50
  110. package/dist/runtime/quarantine.js.map +0 -1
  111. package/dist/runtime/resolution-integrity.d.ts +0 -86
  112. package/dist/runtime/resolution-integrity.d.ts.map +0 -1
  113. package/dist/runtime/resolution-integrity.js +0 -248
  114. package/dist/runtime/resolution-integrity.js.map +0 -1
  115. package/dist/runtime/reviewer.d.ts +0 -81
  116. package/dist/runtime/reviewer.d.ts.map +0 -1
  117. package/dist/runtime/reviewer.js +0 -374
  118. package/dist/runtime/reviewer.js.map +0 -1
  119. package/dist/runtime/rework.d.ts +0 -48
  120. package/dist/runtime/rework.d.ts.map +0 -1
  121. package/dist/runtime/rework.js +0 -136
  122. package/dist/runtime/rework.js.map +0 -1
  123. package/dist/runtime/singleton.d.ts +0 -47
  124. package/dist/runtime/singleton.d.ts.map +0 -1
  125. package/dist/runtime/singleton.js +0 -200
  126. package/dist/runtime/singleton.js.map +0 -1
  127. package/dist/runtime/version-drift.d.ts +0 -31
  128. package/dist/runtime/version-drift.d.ts.map +0 -1
  129. package/dist/runtime/version-drift.js +0 -114
  130. package/dist/runtime/version-drift.js.map +0 -1
  131. package/dist/runtime/worktree.d.ts +0 -74
  132. package/dist/runtime/worktree.d.ts.map +0 -1
  133. package/dist/runtime/worktree.js +0 -206
  134. package/dist/runtime/worktree.js.map +0 -1
  135. package/dist/secrets/inject.d.ts +0 -70
  136. package/dist/secrets/inject.d.ts.map +0 -1
  137. package/dist/secrets/inject.js +0 -102
  138. package/dist/secrets/inject.js.map +0 -1
  139. package/dist/supabase.d.ts +0 -4
  140. package/dist/supabase.d.ts.map +0 -1
  141. package/dist/supabase.js +0 -36
  142. package/dist/supabase.js.map +0 -1
  143. package/dist/task-runner.d.ts +0 -313
  144. package/dist/task-runner.d.ts.map +0 -1
  145. package/dist/task-runner.js +0 -1766
  146. package/dist/task-runner.js.map +0 -1
  147. package/dist/token-provider.d.ts +0 -50
  148. package/dist/token-provider.d.ts.map +0 -1
  149. package/dist/token-provider.js +0 -177
  150. package/dist/token-provider.js.map +0 -1
  151. package/dist/types.d.ts +0 -120
  152. package/dist/types.d.ts.map +0 -1
  153. package/dist/types.js +0 -16
  154. package/dist/types.js.map +0 -1
  155. package/dist/version-check.d.ts +0 -17
  156. package/dist/version-check.d.ts.map +0 -1
  157. package/dist/version-check.js +0 -56
  158. package/dist/version-check.js.map +0 -1
  159. package/dist/watch.d.ts +0 -295
  160. package/dist/watch.d.ts.map +0 -1
  161. package/dist/watch.js +0 -1532
  162. 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"}