@tokenfactory/acc-runner 0.30.0 → 0.34.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 (68) hide show
  1. package/dist/cli.js +3 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/doctor.d.ts +48 -0
  4. package/dist/doctor.d.ts.map +1 -1
  5. package/dist/doctor.js +183 -8
  6. package/dist/doctor.js.map +1 -1
  7. package/dist/engines/claude-code.d.ts +9 -0
  8. package/dist/engines/claude-code.d.ts.map +1 -0
  9. package/dist/engines/claude-code.js +95 -0
  10. package/dist/engines/claude-code.js.map +1 -0
  11. package/dist/engines/codex.d.ts +27 -0
  12. package/dist/engines/codex.d.ts.map +1 -0
  13. package/dist/engines/codex.js +178 -0
  14. package/dist/engines/codex.js.map +1 -0
  15. package/dist/engines/registry.d.ts +18 -0
  16. package/dist/engines/registry.d.ts.map +1 -0
  17. package/dist/engines/registry.js +26 -0
  18. package/dist/engines/registry.js.map +1 -0
  19. package/dist/engines/types.d.ts +73 -0
  20. package/dist/engines/types.d.ts.map +1 -0
  21. package/dist/engines/types.js +2 -0
  22. package/dist/engines/types.js.map +1 -0
  23. package/dist/failure-classifier.d.ts +32 -1
  24. package/dist/failure-classifier.d.ts.map +1 -1
  25. package/dist/failure-classifier.js +193 -1
  26. package/dist/failure-classifier.js.map +1 -1
  27. package/dist/git.d.ts +10 -0
  28. package/dist/git.d.ts.map +1 -1
  29. package/dist/git.js +6 -0
  30. package/dist/git.js.map +1 -1
  31. package/dist/login.d.ts +26 -0
  32. package/dist/login.d.ts.map +1 -1
  33. package/dist/login.js +39 -1
  34. package/dist/login.js.map +1 -1
  35. package/dist/pr-body.d.ts +53 -0
  36. package/dist/pr-body.d.ts.map +1 -0
  37. package/dist/pr-body.js +154 -0
  38. package/dist/pr-body.js.map +1 -0
  39. package/dist/prepr-gate.d.ts +132 -2
  40. package/dist/prepr-gate.d.ts.map +1 -1
  41. package/dist/prepr-gate.js +260 -9
  42. package/dist/prepr-gate.js.map +1 -1
  43. package/dist/provider-auth.d.ts +120 -0
  44. package/dist/provider-auth.d.ts.map +1 -0
  45. package/dist/provider-auth.js +184 -0
  46. package/dist/provider-auth.js.map +1 -0
  47. package/dist/review-diff-guard.d.ts +12 -0
  48. package/dist/review-diff-guard.d.ts.map +1 -0
  49. package/dist/review-diff-guard.js +52 -0
  50. package/dist/review-diff-guard.js.map +1 -0
  51. package/dist/review-worktree-cleanup.d.ts +73 -0
  52. package/dist/review-worktree-cleanup.d.ts.map +1 -0
  53. package/dist/review-worktree-cleanup.js +103 -0
  54. package/dist/review-worktree-cleanup.js.map +1 -0
  55. package/dist/runtime/reviewer.d.ts.map +1 -1
  56. package/dist/runtime/reviewer.js +72 -29
  57. package/dist/runtime/reviewer.js.map +1 -1
  58. package/dist/runtime/worktree.d.ts.map +1 -1
  59. package/dist/runtime/worktree.js +8 -3
  60. package/dist/runtime/worktree.js.map +1 -1
  61. package/dist/task-runner.d.ts +1 -8
  62. package/dist/task-runner.d.ts.map +1 -1
  63. package/dist/task-runner.js +65 -66
  64. package/dist/task-runner.js.map +1 -1
  65. package/dist/watch.d.ts.map +1 -1
  66. package/dist/watch.js +36 -3
  67. package/dist/watch.js.map +1 -1
  68. package/package.json +1 -1
package/dist/git.d.ts CHANGED
@@ -21,6 +21,16 @@ export interface GitRunner {
21
21
  sha: string;
22
22
  ts: string;
23
23
  } | null>;
24
+ /**
25
+ * V96 (R4): the unified diff of `head` (default HEAD) against `baseRef`,
26
+ * using a three-dot (merge-base) range so it matches what GitHub renders for
27
+ * the PR. Powers the auto-generated PR-body "Files changed" table
28
+ * (pr-body.ts) at PR-open, so the body can never disagree with the pushed
29
+ * diff. Optional on the interface so existing GitRunner test stubs keep
30
+ * compiling; the PR-open caller guards the call with `?.` and falls back to
31
+ * the raw report body when it's absent or throws.
32
+ */
33
+ diff?(repoPath: string, baseRef: string, head?: string): Promise<string>;
24
34
  }
25
35
  export type PushErrorKind = "transient" | "terminal";
26
36
  /**
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,kBAAkB,QAAsC,CAAC;AAEtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAChD;AAMD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CA0B7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,wCAAwC;IACxC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAQD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,eAAO,MAAM,GAAG,EAAE,SAkCjB,CAAC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,kBAAkB,QAAsC,CAAC;AAEtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC/C;;;;;;;;OAQG;IACH,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAMD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CA0B7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,wCAAwC;IACxC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAQD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,eAAO,MAAM,GAAG,EAAE,SAwCjB,CAAC"}
package/dist/git.js CHANGED
@@ -123,5 +123,11 @@ export const git = {
123
123
  return null;
124
124
  return { sha: sha.trim(), ts: (ts ?? "").trim() };
125
125
  },
126
+ async diff(repoPath, baseRef, head = "HEAD") {
127
+ // Three-dot range = diff of `head` against the merge-base with `baseRef`,
128
+ // which is exactly the change set GitHub attributes to the PR.
129
+ const { stdout } = await run(repoPath, ["diff", `${baseRef}...${head}`]);
130
+ return stdout;
131
+ },
126
132
  };
127
133
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/login.d.ts CHANGED
@@ -1,5 +1,31 @@
1
1
  import type { RunnerCaps } from "./types.js";
2
2
  export declare const RUNNER_CAPS: RunnerCaps;
3
+ /**
4
+ * Repo-scoped routing — build the register_runner `p_caps` payload with
5
+ * the runner's served-repo scope folded into the `repos` key. The
6
+ * server reads acc.runners.caps.repos via servedReposFromCaps() to route
7
+ * repo-pinned tasks; including the scope here makes it correct from the
8
+ * very first heartbeat (before watch.ts's set_runner_repos refresh runs),
9
+ * so a freshly-registered runner is never briefly repo-blind. Mirrors the
10
+ * jsonb shape the server expects: a string[] of "owner/name" slugs.
11
+ *
12
+ * An empty / undefined scope yields `repos: []`, which servedReposFromCaps
13
+ * treats identically to "absent" — serve every repo, the single-repo
14
+ * default. The capability booleans are preserved verbatim, so this is a
15
+ * pure superset of the previous RUNNER_CAPS payload.
16
+ *
17
+ * M5 (ENGINE-DISPATCH-GATE): `engines` folds the runner's installed+authed
18
+ * coding engines (from detectCapableEngines) into caps.engines. The server's
19
+ * engine-aware dispatch (acc.caps_engines / mig 0229) routes a NON-default
20
+ * engine-pinned task ONLY to a runner that advertises that engine. An empty /
21
+ * undefined set yields `engines: []` — which serves every DEFAULT (claude-code)
22
+ * task exactly as before but no non-default engine task, so the payload stays a
23
+ * pure superset and default dispatch is byte-identical.
24
+ */
25
+ export declare function runnerCapsWithRepos(repos: readonly string[] | undefined, engines?: readonly string[] | undefined): RunnerCaps & {
26
+ repos: string[];
27
+ engines: string[];
28
+ };
3
29
  export declare function machineIdentity(): string;
4
30
  export declare function detectInstalledModels(): Promise<string[]>;
5
31
  export interface LoginOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB,eAAO,MAAM,WAAW,EAAE,UAOzB,CAAC;AAEF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAGD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAe/D;AAiBD,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF5E"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB,eAAO,MAAM,WAAW,EAAE,UAOzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACtC,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAMrD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAGD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAe/D;AAiBD,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF5E"}
package/dist/login.js CHANGED
@@ -12,6 +12,7 @@ import chalk from "chalk";
12
12
  import { execa } from "execa";
13
13
  import open from "open";
14
14
  import { loadConfig } from "./config.js";
15
+ import { detectCapableEngines } from "./doctor.js";
15
16
  import { saveSession } from "./keychain.js";
16
17
  import { createRunnerClient } from "./supabase.js";
17
18
  import { PROTOCOL_VERSION } from "./types.js";
@@ -26,6 +27,35 @@ export const RUNNER_CAPS = {
26
27
  readFiles: true,
27
28
  executeQueue: true,
28
29
  };
30
+ /**
31
+ * Repo-scoped routing — build the register_runner `p_caps` payload with
32
+ * the runner's served-repo scope folded into the `repos` key. The
33
+ * server reads acc.runners.caps.repos via servedReposFromCaps() to route
34
+ * repo-pinned tasks; including the scope here makes it correct from the
35
+ * very first heartbeat (before watch.ts's set_runner_repos refresh runs),
36
+ * so a freshly-registered runner is never briefly repo-blind. Mirrors the
37
+ * jsonb shape the server expects: a string[] of "owner/name" slugs.
38
+ *
39
+ * An empty / undefined scope yields `repos: []`, which servedReposFromCaps
40
+ * treats identically to "absent" — serve every repo, the single-repo
41
+ * default. The capability booleans are preserved verbatim, so this is a
42
+ * pure superset of the previous RUNNER_CAPS payload.
43
+ *
44
+ * M5 (ENGINE-DISPATCH-GATE): `engines` folds the runner's installed+authed
45
+ * coding engines (from detectCapableEngines) into caps.engines. The server's
46
+ * engine-aware dispatch (acc.caps_engines / mig 0229) routes a NON-default
47
+ * engine-pinned task ONLY to a runner that advertises that engine. An empty /
48
+ * undefined set yields `engines: []` — which serves every DEFAULT (claude-code)
49
+ * task exactly as before but no non-default engine task, so the payload stays a
50
+ * pure superset and default dispatch is byte-identical.
51
+ */
52
+ export function runnerCapsWithRepos(repos, engines) {
53
+ return {
54
+ ...RUNNER_CAPS,
55
+ repos: repos ? [...repos] : [],
56
+ engines: engines ? [...engines] : [],
57
+ };
58
+ }
29
59
  export function machineIdentity() {
30
60
  return `${process.platform}-${process.arch}-${os.hostname()}`;
31
61
  }
@@ -114,13 +144,21 @@ export async function loginCommand(options = {}) {
114
144
  // the stub row /exchange created (or refreshes an existing one).
115
145
  const supabase = createRunnerClient(cfg, exchanged.access_token);
116
146
  const models = await detectInstalledModels();
147
+ // M5: advertise the installed+authed coding engines so the server's
148
+ // engine-aware dispatch (mig 0229) can route non-default engine-pinned
149
+ // tasks to a capable runner from the very first heartbeat.
150
+ const engines = await detectCapableEngines();
117
151
  const { error } = await supabase.rpc("register_runner", {
118
152
  p_id: exchanged.runner_id,
119
153
  p_name: `${exchanged.email ?? exchanged.user_id}'s ${os.hostname()}`,
120
154
  p_owner: exchanged.email ?? exchanged.user_id,
121
155
  p_machine: machine,
122
156
  p_models: models,
123
- p_caps: RUNNER_CAPS,
157
+ // Repo-scoped routing: publish the served-repo scope on the very
158
+ // first register so the server's repo-aware router has it before
159
+ // watch.ts's set_runner_repos refresh runs. cfg.repos is resolved
160
+ // from ACC_RUNNER_REPOS / config.json `repos` by loadConfig().
161
+ p_caps: runnerCapsWithRepos(cfg.repos, engines),
124
162
  p_version: PACKAGE_VERSION,
125
163
  });
126
164
  if (error) {
package/dist/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * V96 (R4) — PR-body "Files changed" table, auto-generated from the actual diff.
3
+ *
4
+ * The author Claude writes a free-text report that becomes the PR body. When
5
+ * that report hand-lists the files it changed, the list drifts from reality (a
6
+ * file dropped during rework, a stray edit never mentioned) and the reviewer is
7
+ * handed a body that contradicts the diff. This module generates the
8
+ * Files-changed table FROM the diff at PR-open time, so the body and the diff
9
+ * can never disagree: a hand-written "## Files changed" section is replaced with
10
+ * the generated one; if none exists it is appended.
11
+ *
12
+ * Pure + dependency-free: `parseDiffFileStats` turns a unified diff into
13
+ * per-file add/remove counts, `renderFilesChangedTable` renders the markdown,
14
+ * `composePrBody` splices it into the report. The caller (runner PR-open path)
15
+ * supplies the diff it computed for the pushed branch.
16
+ */
17
+ /** Per-file line delta parsed from a unified diff. */
18
+ export interface FileDiffStat {
19
+ /** Repo-relative path (the post-image path; the old path for a pure delete). */
20
+ path: string;
21
+ /** Count of added content lines (`+`, excluding the `+++` header). */
22
+ added: number;
23
+ /** Count of removed content lines (`-`, excluding the `---` header). */
24
+ removed: number;
25
+ /** True when git rendered this file as binary (no line-level diff). */
26
+ binary: boolean;
27
+ }
28
+ /** Heading used for the generated section. Matched case-insensitively on splice. */
29
+ export declare const FILES_CHANGED_HEADING = "## Files changed";
30
+ /**
31
+ * Parse a unified diff into per-file add/remove counts, in first-seen order.
32
+ * Recognizes standard `diff --git a/x b/y` records, `+++`/`---` path markers,
33
+ * binary-file markers, and counts only genuine content lines (`+`/`-`, never the
34
+ * `+++`/`---` headers). Renames/copies with no content change surface as a
35
+ * 0/0 (or binary) row so the table still lists them.
36
+ */
37
+ export declare function parseDiffFileStats(diff: string | null | undefined): FileDiffStat[];
38
+ /**
39
+ * Render the parsed stats as a markdown table under FILES_CHANGED_HEADING.
40
+ * Columns: File | +Added | -Removed. Binary files show `binary` in place of
41
+ * counts. An empty stat list renders a single "_(no file changes detected)_"
42
+ * note so the section is never a bare heading.
43
+ */
44
+ export declare function renderFilesChangedTable(stats: FileDiffStat[]): string;
45
+ /**
46
+ * Splice the generated Files-changed table into a PR body. Any existing
47
+ * `## Files changed` section (up to the next `## ` heading or end of body) is
48
+ * REPLACED so a hand-written list can never contradict the diff; if there is no
49
+ * such section the generated table is appended. The generated table is always
50
+ * derived from `diff`, so the body and the diff are guaranteed consistent.
51
+ */
52
+ export declare function composePrBody(report: string | null | undefined, diff: string | null | undefined): string;
53
+ //# sourceMappingURL=pr-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-body.d.ts","sourceRoot":"","sources":["../src/pr-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAexD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,EAAE,CAqDlF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAkBrE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,MAAM,CA0BR"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * V96 (R4) — PR-body "Files changed" table, auto-generated from the actual diff.
3
+ *
4
+ * The author Claude writes a free-text report that becomes the PR body. When
5
+ * that report hand-lists the files it changed, the list drifts from reality (a
6
+ * file dropped during rework, a stray edit never mentioned) and the reviewer is
7
+ * handed a body that contradicts the diff. This module generates the
8
+ * Files-changed table FROM the diff at PR-open time, so the body and the diff
9
+ * can never disagree: a hand-written "## Files changed" section is replaced with
10
+ * the generated one; if none exists it is appended.
11
+ *
12
+ * Pure + dependency-free: `parseDiffFileStats` turns a unified diff into
13
+ * per-file add/remove counts, `renderFilesChangedTable` renders the markdown,
14
+ * `composePrBody` splices it into the report. The caller (runner PR-open path)
15
+ * supplies the diff it computed for the pushed branch.
16
+ */
17
+ /** Heading used for the generated section. Matched case-insensitively on splice. */
18
+ export const FILES_CHANGED_HEADING = "## Files changed";
19
+ /**
20
+ * Strip a git diff path prefix (`a/`, `b/`) and surrounding quotes. git quotes
21
+ * paths containing unusual bytes; we keep the quoted form readable by dropping
22
+ * the wrapping quotes only (the content is already the reviewer's concern).
23
+ */
24
+ function cleanDiffPath(raw) {
25
+ let p = raw.trim();
26
+ if (p.startsWith('"') && p.endsWith('"') && p.length >= 2)
27
+ p = p.slice(1, -1);
28
+ if (p === "/dev/null")
29
+ return p;
30
+ if (p.startsWith("a/") || p.startsWith("b/"))
31
+ p = p.slice(2);
32
+ return p;
33
+ }
34
+ /**
35
+ * Parse a unified diff into per-file add/remove counts, in first-seen order.
36
+ * Recognizes standard `diff --git a/x b/y` records, `+++`/`---` path markers,
37
+ * binary-file markers, and counts only genuine content lines (`+`/`-`, never the
38
+ * `+++`/`---` headers). Renames/copies with no content change surface as a
39
+ * 0/0 (or binary) row so the table still lists them.
40
+ */
41
+ export function parseDiffFileStats(diff) {
42
+ const text = (diff ?? "").replace(/\r\n/g, "\n");
43
+ const stats = [];
44
+ // Prefer the `b/` (post-image) path from the `diff --git` line; fall back to
45
+ // the `+++`/`---` markers so a diff without a `diff --git` header still parses.
46
+ const push = (path) => {
47
+ const stat = { path, added: 0, removed: 0, binary: false };
48
+ stats.push(stat);
49
+ return stat;
50
+ };
51
+ for (const line of text.split("\n")) {
52
+ const gitHeader = /^diff --git (.+) (.+)$/.exec(line);
53
+ if (gitHeader) {
54
+ // Use the post-image path (second operand) by default.
55
+ push(cleanDiffPath(gitHeader[2]));
56
+ continue;
57
+ }
58
+ // The file currently being parsed is always the last pushed stat. Read it
59
+ // from the array (not a closure-assigned var) so control-flow narrowing to
60
+ // FileDiffStat survives the push() call.
61
+ const current = stats.length > 0 ? stats[stats.length - 1] : null;
62
+ if (!current) {
63
+ // A bare diff (no `diff --git`) — synthesize a record on the first path
64
+ // marker so `git diff --no-prefix` / partial fixtures still parse.
65
+ if (line.startsWith("+++ ") || line.startsWith("--- ")) {
66
+ const p = cleanDiffPath(line.slice(4));
67
+ if (p !== "/dev/null")
68
+ push(p);
69
+ }
70
+ continue;
71
+ }
72
+ if (line.startsWith("+++ ")) {
73
+ const p = cleanDiffPath(line.slice(4));
74
+ // A real post-image path overrides the `diff --git` guess (handles adds
75
+ // where the `a/` side is /dev/null).
76
+ if (p !== "/dev/null")
77
+ current.path = p;
78
+ continue;
79
+ }
80
+ if (line.startsWith("--- ")) {
81
+ const p = cleanDiffPath(line.slice(4));
82
+ // Pure deletion: `+++ /dev/null` follows; keep the old path as the label.
83
+ if (p !== "/dev/null" && current.path === "/dev/null")
84
+ current.path = p;
85
+ continue;
86
+ }
87
+ if (/^Binary files .* differ$/.test(line) || /^GIT binary patch$/.test(line)) {
88
+ current.binary = true;
89
+ continue;
90
+ }
91
+ if (line.startsWith("+"))
92
+ current.added++;
93
+ else if (line.startsWith("-"))
94
+ current.removed++;
95
+ }
96
+ return stats;
97
+ }
98
+ /**
99
+ * Render the parsed stats as a markdown table under FILES_CHANGED_HEADING.
100
+ * Columns: File | +Added | -Removed. Binary files show `binary` in place of
101
+ * counts. An empty stat list renders a single "_(no file changes detected)_"
102
+ * note so the section is never a bare heading.
103
+ */
104
+ export function renderFilesChangedTable(stats) {
105
+ const lines = [FILES_CHANGED_HEADING, ""];
106
+ if (stats.length === 0) {
107
+ lines.push("_(no file changes detected in the diff)_");
108
+ return lines.join("\n");
109
+ }
110
+ lines.push("| File | +Added | -Removed |");
111
+ lines.push("| --- | ---: | ---: |");
112
+ for (const s of stats) {
113
+ // Escape the pipe so a path containing `|` can't break the table.
114
+ const path = s.path.replace(/\|/g, "\\|");
115
+ if (s.binary) {
116
+ lines.push(`| \`${path}\` | binary | binary |`);
117
+ }
118
+ else {
119
+ lines.push(`| \`${path}\` | ${s.added} | ${s.removed} |`);
120
+ }
121
+ }
122
+ return lines.join("\n");
123
+ }
124
+ /**
125
+ * Splice the generated Files-changed table into a PR body. Any existing
126
+ * `## Files changed` section (up to the next `## ` heading or end of body) is
127
+ * REPLACED so a hand-written list can never contradict the diff; if there is no
128
+ * such section the generated table is appended. The generated table is always
129
+ * derived from `diff`, so the body and the diff are guaranteed consistent.
130
+ */
131
+ export function composePrBody(report, diff) {
132
+ const table = renderFilesChangedTable(parseDiffFileStats(diff));
133
+ const body = (report ?? "").replace(/\r\n/g, "\n").trimEnd();
134
+ // Find an existing "## Files changed" heading (case-insensitive, at line start).
135
+ const headingRe = /^##[ \t]+files changed[ \t]*$/im;
136
+ const match = headingRe.exec(body);
137
+ if (!match) {
138
+ const base = body.length > 0 ? `${body}\n\n` : "";
139
+ return `${base}${table}\n`;
140
+ }
141
+ const sectionStart = match.index;
142
+ // The replaced section runs until the next `## ` heading at line start.
143
+ const rest = body.slice(sectionStart + match[0].length);
144
+ const nextHeading = /^##[ \t]+\S/m.exec(rest);
145
+ const sectionEnd = nextHeading != null
146
+ ? sectionStart + match[0].length + nextHeading.index
147
+ : body.length;
148
+ const before = body.slice(0, sectionStart).trimEnd();
149
+ const after = body.slice(sectionEnd).trimStart();
150
+ const head = before.length > 0 ? `${before}\n\n` : "";
151
+ const tail = after.length > 0 ? `\n\n${after}` : "";
152
+ return `${head}${table}${tail}\n`;
153
+ }
154
+ //# sourceMappingURL=pr-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-body.js","sourceRoot":"","sources":["../src/pr-body.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type PreprGateName = "typecheck" | "lint" | "build" | "test" | "migration-lint";
1
+ export type PreprGateName = "nul-check" | "scope" | "typecheck" | "lint" | "build" | "test" | "migration-lint";
2
2
  /**
3
3
  * Run order. typecheck → lint → build → test mirrors the CLAUDE.md quality-gate
4
4
  * order (cheapest / most-likely-to-fail first) so a broken worktree fails on
@@ -25,6 +25,28 @@ export interface PreprGateResult {
25
25
  absent: PreprGateName[];
26
26
  /** Set iff `ok === false`: the first gate that failed + its output tail. */
27
27
  failure?: PreprGateFailure;
28
+ /**
29
+ * SHADOW MODE: set when the migration linter reported findings but the
30
+ * `migration_lint_blocking` knob is OFF — the PR was NOT blocked, but the
31
+ * output is surfaced so the caller can log it (advisory). `ok` stays `true`.
32
+ * Never set in blocking mode (there a finding lands in `failure` instead).
33
+ */
34
+ migrationLintShadow?: {
35
+ exitCode: number | null;
36
+ /** Tail of the linter's findings output — log-safe. */
37
+ outputTail: string;
38
+ };
39
+ /**
40
+ * V96 (R5) SHADOW MODE: set when staged files fell outside the task's
41
+ * `allowed` globs but the scope-enforce knob was OFF — the PR was NOT blocked
42
+ * (advisory only). `ok` stays `true`. In enforce mode the violation lands in
43
+ * `failure` (gate `scope`) instead and this is unset.
44
+ */
45
+ scopeShadow?: {
46
+ /** Repo-relative staged paths that matched none of the allowed globs. */
47
+ offending: string[];
48
+ outputTail: string;
49
+ };
28
50
  }
29
51
  export interface PreprGateDeps {
30
52
  /**
@@ -65,9 +87,117 @@ export interface PreprGateDeps {
65
87
  exitCode: number | null;
66
88
  output: string;
67
89
  }>;
90
+ /**
91
+ * SHADOW-WEEK knob. When the migration linter reports a lint ERROR (exit ≠ 0):
92
+ * • `true` → block the PR (fail the gate) — the linter's output lands in
93
+ * the runner log via `failure.outputTail`.
94
+ * • `false` → advisory: log the findings (`migrationLintShadow`) but open
95
+ * the PR anyway.
96
+ * This mirrors the org `acc.org_settings.migration_lint_blocking` knob, which
97
+ * defaults to `false` (shadow). The task-runner resolves that org setting and
98
+ * passes it here; when unset (dep + `ACC_MIGRATION_LINT_BLOCKING` env both
99
+ * absent) this defaults to `false` (shadow) — defaults ship OFF; blocking is
100
+ * an explicit opt-in via the org knob or the env.
101
+ */
102
+ migrationLintBlocking?: boolean;
103
+ /**
104
+ * V96 (R5): the task's `allowed` file globs. When non-empty, the scope check
105
+ * flags every staged file that matches NONE of these globs. Empty/undefined
106
+ * disables the scope check entirely (a task with no declared scope is not
107
+ * scope-checked). Never enforced-by-default — see `scopeEnforce`.
108
+ */
109
+ allowedGlobs?: string[];
110
+ /**
111
+ * V96 (R5) knob (DEFAULT OFF). When true a scope violation FAILS the gate
112
+ * (HALT — no PR opened). When false/unset the violation is advisory
113
+ * (`scopeShadow`, PR still opens). Precedence mirrors migrationLintBlocking:
114
+ * explicit dep, else `ACC_PREPR_SCOPE_ENFORCE` env, else `false`.
115
+ */
116
+ scopeEnforce?: boolean;
117
+ /**
118
+ * V96 (R4/R5): the staged files (repo-relative) this branch added/changed vs
119
+ * `baseRef`. Default: `git diff --name-only --diff-filter=ACMR <base>...HEAD`.
120
+ * Drives BOTH the NUL/binary check and the scope check. Omitted + no `baseRef`
121
+ * → both checks are skipped (unit suite never shells out to git).
122
+ */
123
+ listStagedFiles?: (workdir: string, baseRef?: string) => Promise<string[]>;
124
+ /**
125
+ * V96 (R4): read a staged file's raw bytes (for the NUL/binary scan). Default:
126
+ * `fs.readFile(join(workdir, file))`. Injectable so the unit suite can feed a
127
+ * NUL fixture without a real file.
128
+ */
129
+ readFileBytes?: (workdir: string, file: string) => Promise<Buffer>;
130
+ }
131
+ /**
132
+ * Text-source extensions the NUL/binary check scans. An allowlist (never a
133
+ * binary denylist) so genuine binary assets — images, fonts, the design export —
134
+ * are never false-positives. Kept in sync with scripts/ci/check-no-binary-source.mjs
135
+ * (the CI backstop for the SAME defect class); the runner package cannot import
136
+ * that .mjs, so the list is duplicated per the standing cross-package convention.
137
+ */
138
+ export declare const TEXT_EXTENSIONS: Set<string>;
139
+ /** True when `p` has a text-source extension the NUL check scans. */
140
+ export declare function isTextSourcePath(p: string): boolean;
141
+ export interface NulHit {
142
+ path: string;
143
+ /** Byte offset of the first NUL. */
144
+ offset: number;
145
+ /** 1-based line of the NUL byte. */
146
+ line: number;
147
+ /** 1-based byte column within the line. */
148
+ col: number;
68
149
  }
69
- /** Escape-hatch flag. Matches the truthy convention in anthropic-auth.ts. */
150
+ /** Offset of the first NUL byte in `buf`, or -1 if there is none. */
151
+ export declare function firstNulOffset(buf: Buffer): number;
152
+ /** 1-based {line, col} of byte `offset` within `buf` (col counts bytes). */
153
+ export declare function lineColOf(buf: Buffer, offset: number): {
154
+ line: number;
155
+ col: number;
156
+ };
157
+ /**
158
+ * Build the log-safe failure message for a NUL hit. Names the file, the byte
159
+ * offset, and the 1-based line:col — the exact pointer the reviewer needed for
160
+ * PR #1059 (a single NUL byte burned two review cycles).
161
+ */
162
+ export declare function formatNulFailure(hit: NulHit): string;
163
+ /**
164
+ * Convert one `allowed`-list glob into a RegExp anchored to a full repo-relative
165
+ * path. Semantics:
166
+ * - `**` matches any run of chars INCLUDING `/`;
167
+ * - `*` matches any run of chars EXCLUDING `/` (within one path segment);
168
+ * - `?` matches a single non-`/` char;
169
+ * - a pattern ending in `/` (or a bare directory with no wildcard) matches
170
+ * everything beneath that directory prefix;
171
+ * - every other char is matched literally.
172
+ */
173
+ export declare function globToRegExp(glob: string): RegExp;
174
+ /**
175
+ * True when `file` (repo-relative) matches ANY of `globs`, OR when a wildcard-free
176
+ * glob names a directory that `file` sits beneath (`api/_lib` matches
177
+ * `api/_lib/x.ts`). Fail-open on an empty glob list — a task that declares no
178
+ * scope is treated as "everything allowed" (the caller gates on non-empty).
179
+ */
180
+ export declare function matchesAllowedGlobs(file: string, globs: string[]): boolean;
181
+ /** Repo-relative staged paths that match NONE of the allowed globs. */
182
+ export declare function scopeViolations(files: string[], globs: string[]): string[];
183
+ /**
184
+ * Resolve whether a scope violation BLOCKS the PR. Precedence:
185
+ * 1. explicit `deps.scopeEnforce`, else
186
+ * 2. the `ACC_PREPR_SCOPE_ENFORCE` env (`1/true/yes/on` → enforce), else
187
+ * 3. `false` — advisory/shadow (defaults ship OFF; enforcement is opt-in).
188
+ */
189
+ export declare function scopeEnforceResolved(explicit: boolean | undefined, env: NodeJS.ProcessEnv): boolean;
190
+ /** Escape-hatch flag. Matches the truthy convention in provider-auth.ts. */
70
191
  export declare function preprSkipRequested(env: NodeJS.ProcessEnv): boolean;
192
+ /**
193
+ * Resolve whether a migration-lint ERROR blocks the PR. Precedence:
194
+ * 1. explicit `deps.migrationLintBlocking` (the resolved org knob), else
195
+ * 2. the `ACC_MIGRATION_LINT_BLOCKING` env (`1/true/yes/on` → blocking), else
196
+ * 3. `false` — shadow (defaults ship OFF; blocking is an explicit opt-in).
197
+ * Matches the org `migration_lint_blocking` default of `false` (shadow), so
198
+ * un-wired callers get the same effective default as wired ones.
199
+ */
200
+ export declare function migrationLintBlockingResolved(explicit: boolean | undefined, env: NodeJS.ProcessEnv): boolean;
71
201
  /**
72
202
  * Run the repo's own quality gates in `workdir` before a PR is opened.
73
203
  * `ok === false` means the caller MUST NOT open a PR — fail the task with
@@ -1 +1 @@
1
- {"version":3,"file":"prepr-gate.d.ts","sourceRoot":"","sources":["../src/prepr-gate.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,GACN,gBAAgB,CAAC;AAErB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,EAA2C,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,IAAI,EAAE,aAAa,CAAC;IACpB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,EAAE,EAAE,OAAO,CAAC;IACZ,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,GAAG,EAAE,aAAa,EAAE,CAAC;IACrB,2EAA2E;IAC3E,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE;;;;OAIG;IACH,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,KAChB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjF;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,KACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAQD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAGlE;AAkFD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,eAAe,CAAC,CA8D1B"}
1
+ {"version":3,"file":"prepr-gate.d.ts","sourceRoot":"","sources":["../src/prepr-gate.ts"],"names":[],"mappings":"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"}