lastlight 0.7.6 → 0.7.7

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.
@@ -3,5 +3,21 @@ export interface GitHubAppClientConfig {
3
3
  appId: string;
4
4
  privateKeyPath: string;
5
5
  installationId: string;
6
+ /**
7
+ * Override the GitHub REST base URL (Octokit `baseUrl`). Prod leaves this
8
+ * unset → `api.github.com`. The evals harness points it at its mock server so
9
+ * harness-side writes land there. Test/eval escape hatch only — mirrors
10
+ * `ExecutorConfig.githubApiBaseUrl`.
11
+ */
12
+ baseUrl?: string;
6
13
  }
7
14
  export declare function githubAppClient(config: GitHubAppClientConfig): Octokit;
15
+ /**
16
+ * Octokit authed with a raw bearer token (a pre-minted installation token) plus
17
+ * an optional `baseUrl`. This is the auth shape the evals mock and the
18
+ * harness-minted scoped token both use — no App JWT / installation-token
19
+ * minting round-trip against the REST base URL. Used by the harness-side
20
+ * `post-review` action so it works identically against api.github.com and the
21
+ * eval mock.
22
+ */
23
+ export declare function githubTokenClient(token: string, baseUrl?: string): Octokit;
@@ -2,8 +2,12 @@ import { createAppAuth } from "@octokit/auth-app";
2
2
  import { readFileSync } from "fs";
3
3
  import { Octokit } from "octokit";
4
4
  import { resolve } from "path";
5
+ function normalizeBaseUrl(baseUrl) {
6
+ return baseUrl ? baseUrl.replace(/\/+$/, "") : undefined;
7
+ }
5
8
  export function githubAppClient(config) {
6
9
  const privateKey = readFileSync(resolve(config.privateKeyPath), "utf-8");
10
+ const baseUrl = normalizeBaseUrl(config.baseUrl);
7
11
  return new Octokit({
8
12
  authStrategy: createAppAuth,
9
13
  auth: {
@@ -11,6 +15,19 @@ export function githubAppClient(config) {
11
15
  privateKey,
12
16
  installationId: config.installationId,
13
17
  },
18
+ ...(baseUrl ? { baseUrl } : {}),
14
19
  });
15
20
  }
21
+ /**
22
+ * Octokit authed with a raw bearer token (a pre-minted installation token) plus
23
+ * an optional `baseUrl`. This is the auth shape the evals mock and the
24
+ * harness-minted scoped token both use — no App JWT / installation-token
25
+ * minting round-trip against the REST base URL. Used by the harness-side
26
+ * `post-review` action so it works identically against api.github.com and the
27
+ * eval mock.
28
+ */
29
+ export function githubTokenClient(token, baseUrl) {
30
+ const url = normalizeBaseUrl(baseUrl);
31
+ return new Octokit({ auth: token, ...(url ? { baseUrl: url } : {}) });
32
+ }
16
33
  //# sourceMappingURL=github-app-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-app-client.js","sourceRoot":"","sources":["../../../src/engine/github/github-app-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAQ/B,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,OAAO,IAAI,OAAO,CAAC;QACjB,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU;YACV,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"github-app-client.js","sourceRoot":"","sources":["../../../src/engine/github/github-app-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAe/B,SAAS,gBAAgB,CAAC,OAA2B;IACnD,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC;QACjB,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU;YACV,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC;QACD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,OAAgB;IAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type GitHubAppClientConfig } from "./github-app-client.js";
2
+ import type { InlineComment, ReviewEvent } from "./review-poster.js";
2
3
  /** GitHub reaction emoji values accepted by the reactions API. */
3
4
  export type ReactionContent = "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes";
4
5
  /**
@@ -8,6 +9,15 @@ export type ReactionContent = "+1" | "-1" | "laugh" | "confused" | "heart" | "ho
8
9
  export declare class GitHubClient {
9
10
  private octokit;
10
11
  constructor(config: GitHubAppClientConfig);
12
+ /**
13
+ * Build a client authed with a raw bearer token (a pre-minted installation
14
+ * token) instead of App JWT auth. Used by the harness-side `post-review`
15
+ * action: prod passes the run's scoped review-write token; evals pass the
16
+ * mock's token + `baseUrl`. Avoids the App installation-token minting
17
+ * round-trip (which hard-codes api.github.com and the evals mock doesn't
18
+ * serve).
19
+ */
20
+ static withToken(token: string, baseUrl?: string): GitHubClient;
11
21
  /**
12
22
  * Create a new comment on an issue/PR. Returns the new comment id so callers
13
23
  * that want to edit it later (the in-place status checklist — see
@@ -1139,6 +1149,27 @@ export declare class GitHubClient {
1139
1149
  body: string | null;
1140
1150
  submittedAt: string | null;
1141
1151
  } | null>;
1152
+ /**
1153
+ * Fetch a PR's unified diff (three-dot, base…head) as a string. Used by the
1154
+ * `post-review` action to anchor findings to changed lines — the harness runs
1155
+ * this in-process (not in the sandbox), so the diff comes from the API rather
1156
+ * than a local `git diff`, with no dependency on checkout/fetch state.
1157
+ */
1158
+ getPullRequestDiff(owner: string, repo: string, pullNumber: number): Promise<string>;
1159
+ /**
1160
+ * Submit one formal PR review with an event (APPROVE / REQUEST_CHANGES /
1161
+ * COMMENT) plus optional line-anchored inline comments. `commitId` pins the
1162
+ * review to the reviewed head SHA. This is the single harness-side write for
1163
+ * PR reviews — the reviewer agent never submits; it writes findings and the
1164
+ * `post-review` action calls this. Throws on a non-2xx so the action can fail
1165
+ * the phase visibly (or retry body-only).
1166
+ */
1167
+ createPullRequestReview(owner: string, repo: string, pullNumber: number, review: {
1168
+ body: string;
1169
+ event: ReviewEvent;
1170
+ comments?: InlineComment[];
1171
+ commitId?: string;
1172
+ }): Promise<void>;
1142
1173
  /**
1143
1174
  * Get failed check runs for a PR's head SHA.
1144
1175
  * Fetches the actual job logs (not just annotations) to show real errors.
@@ -1,4 +1,4 @@
1
- import { githubAppClient } from "./github-app-client.js";
1
+ import { githubAppClient, githubTokenClient, } from "./github-app-client.js";
2
2
  /**
3
3
  * GitHub client for the harness — uses GitHub App auth.
4
4
  * Used by the orchestrator to post comments, not by agent sessions.
@@ -8,6 +8,19 @@ export class GitHubClient {
8
8
  constructor(config) {
9
9
  this.octokit = githubAppClient(config);
10
10
  }
11
+ /**
12
+ * Build a client authed with a raw bearer token (a pre-minted installation
13
+ * token) instead of App JWT auth. Used by the harness-side `post-review`
14
+ * action: prod passes the run's scoped review-write token; evals pass the
15
+ * mock's token + `baseUrl`. Avoids the App installation-token minting
16
+ * round-trip (which hard-codes api.github.com and the evals mock doesn't
17
+ * serve).
18
+ */
19
+ static withToken(token, baseUrl) {
20
+ const client = Object.create(GitHubClient.prototype);
21
+ client.octokit = githubTokenClient(token, baseUrl);
22
+ return client;
23
+ }
11
24
  /**
12
25
  * Create a new comment on an issue/PR. Returns the new comment id so callers
13
26
  * that want to edit it later (the in-place status checklist — see
@@ -199,6 +212,42 @@ export class GitHubClient {
199
212
  }
200
213
  return null;
201
214
  }
215
+ /**
216
+ * Fetch a PR's unified diff (three-dot, base…head) as a string. Used by the
217
+ * `post-review` action to anchor findings to changed lines — the harness runs
218
+ * this in-process (not in the sandbox), so the diff comes from the API rather
219
+ * than a local `git diff`, with no dependency on checkout/fetch state.
220
+ */
221
+ async getPullRequestDiff(owner, repo, pullNumber) {
222
+ const res = await this.octokit.rest.pulls.get({
223
+ owner,
224
+ repo,
225
+ pull_number: pullNumber,
226
+ mediaType: { format: "diff" },
227
+ });
228
+ // With `format: diff` Octokit returns the raw diff as the response body,
229
+ // typed as the JSON shape — cast through unknown.
230
+ return res.data;
231
+ }
232
+ /**
233
+ * Submit one formal PR review with an event (APPROVE / REQUEST_CHANGES /
234
+ * COMMENT) plus optional line-anchored inline comments. `commitId` pins the
235
+ * review to the reviewed head SHA. This is the single harness-side write for
236
+ * PR reviews — the reviewer agent never submits; it writes findings and the
237
+ * `post-review` action calls this. Throws on a non-2xx so the action can fail
238
+ * the phase visibly (or retry body-only).
239
+ */
240
+ async createPullRequestReview(owner, repo, pullNumber, review) {
241
+ await this.octokit.rest.pulls.createReview({
242
+ owner,
243
+ repo,
244
+ pull_number: pullNumber,
245
+ body: review.body,
246
+ event: review.event,
247
+ ...(review.comments && review.comments.length ? { comments: review.comments } : {}),
248
+ ...(review.commitId ? { commit_id: review.commitId } : {}),
249
+ });
250
+ }
202
251
  /**
203
252
  * Get failed check runs for a PR's head SHA.
204
253
  * Fetches the actual job logs (not just annotations) to show real errors.
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/engine/github/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/engine/github/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Pure PR-review composition: turn a set of structured findings + the PR diff
3
+ * into the payload for one formal GitHub review (`POST /pulls/{n}/reviews`).
4
+ *
5
+ * This is the tested core of the first-class `post-review` action
6
+ * (`PhaseExecutor.runPostReview`). It replaces the ~150-line JS blob that used
7
+ * to live inline in `workflows/pr-review.yaml` — that script depended on the AI
8
+ * agent hand-writing `pr_number`/`base_ref`/`head_sha` into the findings file
9
+ * and silently `exit 0`'d on any mismatch. Here the harness owns all of that:
10
+ * the agent supplies only *content* (`summary`, `event`, `findings`), and this
11
+ * module anchors each finding to the diff, demoting anything off-diff to the
12
+ * body (GitHub 422s on comments that don't sit on a changed line).
13
+ *
14
+ * No I/O — every function is a pure transform, so the anchoring rules are
15
+ * exercised directly in `review-poster.test.ts` rather than by eval-extracting
16
+ * a function out of a YAML string.
17
+ */
18
+ export type ReviewEvent = "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
19
+ export type ReviewSide = "LEFT" | "RIGHT";
20
+ /** One finding as written by the `pr-review` skill into findings.json. */
21
+ export interface ReviewFinding {
22
+ path: string;
23
+ line: number;
24
+ side?: ReviewSide;
25
+ start_line?: number;
26
+ severity?: string;
27
+ title?: string;
28
+ body?: string;
29
+ suggestion?: string;
30
+ }
31
+ /**
32
+ * The findings document the agent writes. `pr_number` / `base_ref` /
33
+ * `head_sha` are intentionally NOT here — the harness knows them from its own
34
+ * run context and the PR object, so the agent never hand-copies metadata.
35
+ */
36
+ export interface ReviewFindingsDoc {
37
+ skip?: boolean;
38
+ summary?: string;
39
+ event?: ReviewEvent;
40
+ findings?: ReviewFinding[];
41
+ }
42
+ /** An inline review comment in the shape GitHub's create-review API expects. */
43
+ export interface InlineComment {
44
+ path: string;
45
+ line: number;
46
+ side: ReviewSide;
47
+ body: string;
48
+ start_line?: number;
49
+ start_side?: ReviewSide;
50
+ }
51
+ /** Everything needed to POST one review, ready for `createPullRequestReview`. */
52
+ export interface BuiltReview {
53
+ event: ReviewEvent;
54
+ body: string;
55
+ comments: InlineComment[];
56
+ inlineCount: number;
57
+ demotedCount: number;
58
+ }
59
+ /**
60
+ * Map a unified diff to `path -> Set<"SIDE:line">`. Added/`+` and context lines
61
+ * are `RIGHT:<newLine>`; removed/`-` and context lines are `LEFT:<oldLine>` —
62
+ * mirroring GitHub's three-dot PR diff anchoring. A finding may be commented
63
+ * inline only when its `side:line` appears in this set.
64
+ */
65
+ export declare function parseDiff(diff: string): Map<string, Set<string>>;
66
+ /** True when a finding anchors onto a line that appears in the diff. */
67
+ export declare function isAnchored(f: ReviewFinding, commentable: Map<string, Set<string>> | null): boolean;
68
+ /**
69
+ * Partition findings into `inline` (anchor is on the diff) and `demoted`
70
+ * (off-diff, or missing path/line — folded into the body). When `commentable`
71
+ * is null (the diff couldn't be computed) every finding is demoted, so the
72
+ * review still posts and nothing is lost.
73
+ */
74
+ export declare function splitFindings(findings: ReviewFinding[], commentable: Map<string, Set<string>> | null): {
75
+ inline: ReviewFinding[];
76
+ demoted: ReviewFinding[];
77
+ };
78
+ /** The "Additional findings" section appended to the body for demoted findings. */
79
+ export declare function renderDemoted(list: ReviewFinding[]): string;
80
+ /** Build the inline-comment objects GitHub's create-review API expects. */
81
+ export declare function toInlineComments(list: ReviewFinding[]): InlineComment[];
82
+ /**
83
+ * Resolve the review event. An explicit `doc.event` wins; otherwise an empty
84
+ * findings set is an `APPROVE` and anything else is a `COMMENT` (never an
85
+ * automatic `REQUEST_CHANGES` — that stays an explicit, deliberate call).
86
+ */
87
+ export declare function resolveEvent(doc: ReviewFindingsDoc): ReviewEvent;
88
+ /**
89
+ * Compose the full review payload. Pass `commentable = null` to force every
90
+ * finding into the body (the diff-unavailable fallback).
91
+ */
92
+ export declare function buildReview(doc: ReviewFindingsDoc, commentable: Map<string, Set<string>> | null): BuiltReview;
93
+ /**
94
+ * The body-only fallback: when the inline POST is rejected (e.g. a stale diff
95
+ * yields a 422 on a comment line), re-render with ALL findings in the body so
96
+ * the review still lands. Same event as the inline attempt.
97
+ */
98
+ export declare function buildBodyOnlyReview(doc: ReviewFindingsDoc): BuiltReview;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Pure PR-review composition: turn a set of structured findings + the PR diff
3
+ * into the payload for one formal GitHub review (`POST /pulls/{n}/reviews`).
4
+ *
5
+ * This is the tested core of the first-class `post-review` action
6
+ * (`PhaseExecutor.runPostReview`). It replaces the ~150-line JS blob that used
7
+ * to live inline in `workflows/pr-review.yaml` — that script depended on the AI
8
+ * agent hand-writing `pr_number`/`base_ref`/`head_sha` into the findings file
9
+ * and silently `exit 0`'d on any mismatch. Here the harness owns all of that:
10
+ * the agent supplies only *content* (`summary`, `event`, `findings`), and this
11
+ * module anchors each finding to the diff, demoting anything off-diff to the
12
+ * body (GitHub 422s on comments that don't sit on a changed line).
13
+ *
14
+ * No I/O — every function is a pure transform, so the anchoring rules are
15
+ * exercised directly in `review-poster.test.ts` rather than by eval-extracting
16
+ * a function out of a YAML string.
17
+ */
18
+ const FENCE = "```";
19
+ /**
20
+ * Map a unified diff to `path -> Set<"SIDE:line">`. Added/`+` and context lines
21
+ * are `RIGHT:<newLine>`; removed/`-` and context lines are `LEFT:<oldLine>` —
22
+ * mirroring GitHub's three-dot PR diff anchoring. A finding may be commented
23
+ * inline only when its `side:line` appears in this set.
24
+ */
25
+ export function parseDiff(diff) {
26
+ const map = new Map();
27
+ let path = null;
28
+ let right = 0;
29
+ let left = 0;
30
+ let inHunk = false;
31
+ for (const line of diff.split("\n")) {
32
+ if (line.startsWith("+++ ")) {
33
+ const p = line.slice(4).replace(/^b\//, "");
34
+ path = p === "/dev/null" ? null : p;
35
+ if (path && !map.has(path))
36
+ map.set(path, new Set());
37
+ inHunk = false;
38
+ }
39
+ else if (line.startsWith("@@")) {
40
+ const m = /@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(line);
41
+ if (m) {
42
+ left = parseInt(m[1], 10);
43
+ right = parseInt(m[2], 10);
44
+ inHunk = true;
45
+ }
46
+ }
47
+ else if (inHunk && path) {
48
+ const set = map.get(path);
49
+ if (line.startsWith("+")) {
50
+ set.add("RIGHT:" + right);
51
+ right++;
52
+ }
53
+ else if (line.startsWith("-")) {
54
+ set.add("LEFT:" + left);
55
+ left++;
56
+ }
57
+ else if (line.startsWith(" ")) {
58
+ set.add("RIGHT:" + right);
59
+ set.add("LEFT:" + left);
60
+ right++;
61
+ left++;
62
+ }
63
+ else if (line.startsWith("\\")) {
64
+ /* "" */
65
+ }
66
+ else {
67
+ inHunk = false;
68
+ }
69
+ }
70
+ }
71
+ return map;
72
+ }
73
+ /** True when a finding anchors onto a line that appears in the diff. */
74
+ export function isAnchored(f, commentable) {
75
+ if (!commentable)
76
+ return false;
77
+ const side = f.side === "LEFT" ? "LEFT" : "RIGHT";
78
+ const set = commentable.get(f.path);
79
+ if (!set || !set.has(side + ":" + f.line))
80
+ return false;
81
+ if (f.start_line && !set.has(side + ":" + f.start_line))
82
+ return false;
83
+ return true;
84
+ }
85
+ /**
86
+ * Partition findings into `inline` (anchor is on the diff) and `demoted`
87
+ * (off-diff, or missing path/line — folded into the body). When `commentable`
88
+ * is null (the diff couldn't be computed) every finding is demoted, so the
89
+ * review still posts and nothing is lost.
90
+ */
91
+ export function splitFindings(findings, commentable) {
92
+ const inline = [];
93
+ const demoted = [];
94
+ for (const f of findings) {
95
+ if (f && f.path && f.line && isAnchored(f, commentable))
96
+ inline.push(f);
97
+ else if (f)
98
+ demoted.push(f);
99
+ }
100
+ return { inline, demoted };
101
+ }
102
+ function commentBody(f) {
103
+ let b = "**[" + (f.severity || "Important") + "] " + (f.title || "") + "**\n\n" + (f.body || "");
104
+ if (f.suggestion)
105
+ b += "\n\n" + FENCE + "suggestion\n" + f.suggestion + "\n" + FENCE;
106
+ return b;
107
+ }
108
+ /** The "Additional findings" section appended to the body for demoted findings. */
109
+ export function renderDemoted(list) {
110
+ if (!list.length)
111
+ return "";
112
+ return ("\n\n### Additional findings\n" +
113
+ list
114
+ .map((f) => "- **[" +
115
+ (f.severity || "Important") +
116
+ "] " +
117
+ (f.title || "") +
118
+ "** (" +
119
+ f.path +
120
+ ":" +
121
+ f.line +
122
+ ") — " +
123
+ (f.body || ""))
124
+ .join("\n"));
125
+ }
126
+ /** Build the inline-comment objects GitHub's create-review API expects. */
127
+ export function toInlineComments(list) {
128
+ return list.map((f) => {
129
+ const side = f.side === "LEFT" ? "LEFT" : "RIGHT";
130
+ const c = { path: f.path, line: f.line, side, body: commentBody(f) };
131
+ if (f.start_line) {
132
+ c.start_line = f.start_line;
133
+ c.start_side = side;
134
+ }
135
+ return c;
136
+ });
137
+ }
138
+ /**
139
+ * Resolve the review event. An explicit `doc.event` wins; otherwise an empty
140
+ * findings set is an `APPROVE` and anything else is a `COMMENT` (never an
141
+ * automatic `REQUEST_CHANGES` — that stays an explicit, deliberate call).
142
+ */
143
+ export function resolveEvent(doc) {
144
+ const findings = Array.isArray(doc.findings) ? doc.findings : [];
145
+ return doc.event || (findings.length === 0 ? "APPROVE" : "COMMENT");
146
+ }
147
+ /**
148
+ * Compose the full review payload. Pass `commentable = null` to force every
149
+ * finding into the body (the diff-unavailable fallback).
150
+ */
151
+ export function buildReview(doc, commentable) {
152
+ const findings = Array.isArray(doc.findings) ? doc.findings : [];
153
+ const { inline, demoted } = splitFindings(findings, commentable);
154
+ return {
155
+ event: resolveEvent(doc),
156
+ body: (doc.summary || "") + renderDemoted(demoted),
157
+ comments: toInlineComments(inline),
158
+ inlineCount: inline.length,
159
+ demotedCount: demoted.length,
160
+ };
161
+ }
162
+ /**
163
+ * The body-only fallback: when the inline POST is rejected (e.g. a stale diff
164
+ * yields a 422 on a comment line), re-render with ALL findings in the body so
165
+ * the review still lands. Same event as the inline attempt.
166
+ */
167
+ export function buildBodyOnlyReview(doc) {
168
+ const findings = Array.isArray(doc.findings) ? doc.findings : [];
169
+ return {
170
+ event: resolveEvent(doc),
171
+ body: (doc.summary || "") + renderDemoted(findings),
172
+ comments: [],
173
+ inlineCount: 0,
174
+ demotedCount: findings.length,
175
+ };
176
+ }
177
+ //# sourceMappingURL=review-poster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-poster.js","sourceRoot":"","sources":["../../../src/engine/github/review-poster.ts"],"names":[],"mappings":"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"}
@@ -129,6 +129,30 @@ export declare class PhaseExecutor {
129
129
  */
130
130
  execute(node: DagNode, outputs: Readonly<Record<string, unknown>>): Promise<PhaseOutcome>;
131
131
  private runContext;
132
+ /**
133
+ * First-class, in-process PR-review submission (`type: post-review`). The
134
+ * reviewer agent writes only *content* to `.lastlight/pr-review/findings.json`
135
+ * (`{ skip?, summary, event, findings[] }`); THIS action supplies every fact
136
+ * the harness already knows — the PR number (from the run context), the base
137
+ * ref, the head SHA and the diff (from the pre-cloned checkout) — anchors each
138
+ * finding to a changed line, and posts one formal review via `GitHubClient`.
139
+ *
140
+ * This replaces the ~150-line in-sandbox `type: script` blob that depended on
141
+ * the AI hand-copying `pr_number`/`base_ref`/`head_sha` into the JSON and
142
+ * silently `exit 0`'d on any mismatch (the "ran but posted nothing" bug).
143
+ * Here a genuine failure — missing findings after a real review, or a GitHub
144
+ * error that survives the body-only retry — FAILS the phase visibly; only a
145
+ * legitimate `skip` succeeds without posting. Idempotent on resume: it no-ops
146
+ * when a bot review already exists on the current head SHA.
147
+ */
148
+ private runPostReview;
149
+ /** Host path of the run's repo checkout — mirrors sandbox/index.ts layout. */
150
+ private resolveHostRepoDir;
151
+ /** Build the GitHub client for the post: token+baseUrl in evals, App auth in prod. */
152
+ private buildReviewClient;
153
+ private gitHeadSha;
154
+ /** Compute the base…head diff locally and parse it into a commentable set. */
155
+ private gitCommentableDiff;
132
156
  /** Resolve model + variant for a phase/task, honouring YAML templates first. */
133
157
  private resolveModelVariant;
134
158
  private runPhaseCall;