@tokenfactory/acc-runner 0.28.4 → 0.28.6
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/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +60 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +12 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +129 -2
- package/dist/doctor.js.map +1 -1
- package/dist/prepr-gate.d.ts +81 -0
- package/dist/prepr-gate.d.ts.map +1 -0
- package/dist/prepr-gate.js +173 -0
- package/dist/prepr-gate.js.map +1 -0
- package/dist/runtime/cache-dir.d.ts +8 -0
- package/dist/runtime/cache-dir.d.ts.map +1 -1
- package/dist/runtime/cache-dir.js +29 -2
- package/dist/runtime/cache-dir.js.map +1 -1
- package/dist/runtime/locks.d.ts.map +1 -1
- package/dist/runtime/locks.js +12 -6
- package/dist/runtime/locks.js.map +1 -1
- package/dist/runtime/quarantine.d.ts +5 -1
- package/dist/runtime/quarantine.d.ts.map +1 -1
- package/dist/runtime/quarantine.js +7 -4
- package/dist/runtime/quarantine.js.map +1 -1
- package/dist/runtime/reviewer.d.ts +24 -0
- package/dist/runtime/reviewer.d.ts.map +1 -1
- package/dist/runtime/reviewer.js +99 -13
- package/dist/runtime/reviewer.js.map +1 -1
- package/dist/runtime/singleton.d.ts +27 -8
- package/dist/runtime/singleton.d.ts.map +1 -1
- package/dist/runtime/singleton.js +43 -16
- package/dist/runtime/singleton.js.map +1 -1
- package/dist/runtime/worktree.d.ts +48 -0
- package/dist/runtime/worktree.d.ts.map +1 -1
- package/dist/runtime/worktree.js +92 -9
- package/dist/runtime/worktree.js.map +1 -1
- package/dist/task-runner.d.ts +13 -2
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +182 -10
- package/dist/task-runner.js.map +1 -1
- package/dist/token-provider.d.ts +34 -0
- package/dist/token-provider.d.ts.map +1 -1
- package/dist/token-provider.js +124 -15
- package/dist/token-provider.js.map +1 -1
- package/dist/watch.d.ts +33 -0
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +250 -19
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,9 +2,20 @@ export interface SingletonLockInfo {
|
|
|
2
2
|
pid: number;
|
|
3
3
|
/** Canonical (realpath-resolved where possible) repo path this runner serves. */
|
|
4
4
|
repoPath: string;
|
|
5
|
+
/**
|
|
6
|
+
* v1.02-A: the runner identity (ACC_RUNNER_ID) this lock is keyed to, or
|
|
7
|
+
* "" for the legacy repo-path-only key. Recorded so doctor and the loud
|
|
8
|
+
* duplicate banner can name the holder's identity.
|
|
9
|
+
*/
|
|
10
|
+
runnerId: string;
|
|
5
11
|
acquiredAt: string;
|
|
6
12
|
version: string;
|
|
7
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* v1.02-A: the runner identity that keys the singleton lock. ACC_RUNNER_ID
|
|
16
|
+
* when set, else "" (legacy repo-path-only key). Never the minted acc-eph id.
|
|
17
|
+
*/
|
|
18
|
+
export declare function singletonRunnerId(env?: NodeJS.ProcessEnv): string;
|
|
8
19
|
export interface SingletonLock {
|
|
9
20
|
lockFile: string;
|
|
10
21
|
repoPath: string;
|
|
@@ -22,21 +33,29 @@ export declare class SingletonLockHeldError extends Error {
|
|
|
22
33
|
* realpath fails if the path does not exist yet — fall back to resolve().
|
|
23
34
|
*/
|
|
24
35
|
export declare function canonicalRepoPath(repoPath: string): string;
|
|
25
|
-
/** `<cache>/runner.<hash>.lock`, hash derived from the canonical repo path. */
|
|
26
|
-
export declare function singletonLockPath(repoPath: string): string;
|
|
27
36
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
37
|
+
* `<cache>/runner.<hash>.lock`. The hash is derived from the canonical repo
|
|
38
|
+
* path AND the runner identity (v1.02-A), so two distinct ACC_RUNNER_IDs on
|
|
39
|
+
* one repo get distinct lock files and coexist. An empty `runnerId` keeps the
|
|
40
|
+
* pre-v1.02 hash (repo path alone) so a runner without ACC_RUNNER_ID still
|
|
41
|
+
* detects a pre-upgrade holder for the same repo.
|
|
42
|
+
*/
|
|
43
|
+
export declare function singletonLockPath(repoPath: string, runnerId?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Acquire the single-instance lock for `repoPath` under `runnerId`. Throws
|
|
46
|
+
* SingletonLockHeldError when a *live* process already holds the lock for the
|
|
47
|
+
* same (canonical repo path, runner identity) pair. A stale lock (dead pid,
|
|
48
|
+
* our own pid, or a corrupt file) is reclaimed with a stderr breadcrumb and
|
|
49
|
+
* then re-acquired. A different `runnerId` keys a different lock file, so two
|
|
50
|
+
* distinct identities on one repo never contend (v1.02-A).
|
|
32
51
|
*/
|
|
33
|
-
export declare function acquireSingletonLock(repoPath: string, pid?: number): Promise<SingletonLock>;
|
|
52
|
+
export declare function acquireSingletonLock(repoPath: string, pid?: number, runnerId?: string): Promise<SingletonLock>;
|
|
34
53
|
/**
|
|
35
54
|
* Inspect the lock file for `repoPath` and return its holder iff a *live*
|
|
36
55
|
* process other than `selfPid` owns it. Used by `acc-runner doctor` to
|
|
37
56
|
* report a duplicate runner without trying to acquire the lock.
|
|
38
57
|
*/
|
|
39
|
-
export declare function findLiveLockHolder(repoPath: string, selfPid?: number): Promise<SingletonLockInfo | null>;
|
|
58
|
+
export declare function findLiveLockHolder(repoPath: string, selfPid?: number, runnerId?: string): Promise<SingletonLockInfo | null>;
|
|
40
59
|
/**
|
|
41
60
|
* pgrep-style scan for other `acc-runner watch` processes. Best-effort and
|
|
42
61
|
* offline of the lock file — used by doctor to catch a runner that predates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"AAsCA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE9E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,MAAM,EAAE,iBAAiB;aACzB,QAAQ,EAAE,MAAM;gBADhB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM;CAQnC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAA4B,GACrC,MAAM,CAKR;AA4CD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAoB,EACzB,QAAQ,GAAE,MAA4B,GACrC,OAAO,CAAC,aAAa,CAAC,CA+CxB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAoB,EAC7B,QAAQ,GAAE,MAA4B,GACrC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAMnC;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,MAAoB,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB"}
|
|
@@ -17,6 +17,16 @@
|
|
|
17
17
|
* one runner per repo without contention. The conceptual name in the spec
|
|
18
18
|
* is `<cache>/runner.lock`; the per-repo hash suffix is what makes
|
|
19
19
|
* coexistence possible.
|
|
20
|
+
*
|
|
21
|
+
* v1.02-A — concurrent runners per host. The lock is now keyed by
|
|
22
|
+
* (canonical repo path + runner identity), not the repo path alone, so two
|
|
23
|
+
* DISTINCT ACC_RUNNER_IDs can serve the same repo on one machine at the same
|
|
24
|
+
* time (each gets its own cache dir via `cacheDir()`, so no worktree/ref
|
|
25
|
+
* race). A runner with NO ACC_RUNNER_ID keeps the legacy repo-path-only key
|
|
26
|
+
* — two un-identified runners on one repo still collide, which is the
|
|
27
|
+
* original duplicate-runner footgun the lock exists to catch. The identity
|
|
28
|
+
* deliberately reads ACC_RUNNER_ID directly (never the minted acc-eph id,
|
|
29
|
+
* which is random per process and would make the lock never collide).
|
|
20
30
|
*/
|
|
21
31
|
import fs from "node:fs";
|
|
22
32
|
import fsp from "node:fs/promises";
|
|
@@ -25,11 +35,19 @@ import crypto from "node:crypto";
|
|
|
25
35
|
import { cacheDir } from "./cache-dir.js";
|
|
26
36
|
import { isProcessAlive } from "./locks.js";
|
|
27
37
|
import { PACKAGE_VERSION } from "../pkg-version.js";
|
|
38
|
+
/**
|
|
39
|
+
* v1.02-A: the runner identity that keys the singleton lock. ACC_RUNNER_ID
|
|
40
|
+
* when set, else "" (legacy repo-path-only key). Never the minted acc-eph id.
|
|
41
|
+
*/
|
|
42
|
+
export function singletonRunnerId(env = process.env) {
|
|
43
|
+
return env.ACC_RUNNER_ID?.trim() || "";
|
|
44
|
+
}
|
|
28
45
|
export class SingletonLockHeldError extends Error {
|
|
29
46
|
holder;
|
|
30
47
|
lockFile;
|
|
31
48
|
constructor(holder, lockFile) {
|
|
32
|
-
super(`another acc-runner (pid ${holder.pid}) is already serving repo ${holder.repoPath}`
|
|
49
|
+
super(`another acc-runner (pid ${holder.pid}) is already serving repo ${holder.repoPath}` +
|
|
50
|
+
(holder.runnerId ? ` as ${holder.runnerId}` : ""));
|
|
33
51
|
this.holder = holder;
|
|
34
52
|
this.lockFile = lockFile;
|
|
35
53
|
this.name = "SingletonLockHeldError";
|
|
@@ -49,13 +67,17 @@ export function canonicalRepoPath(repoPath) {
|
|
|
49
67
|
return resolved;
|
|
50
68
|
}
|
|
51
69
|
}
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
/**
|
|
71
|
+
* `<cache>/runner.<hash>.lock`. The hash is derived from the canonical repo
|
|
72
|
+
* path AND the runner identity (v1.02-A), so two distinct ACC_RUNNER_IDs on
|
|
73
|
+
* one repo get distinct lock files and coexist. An empty `runnerId` keeps the
|
|
74
|
+
* pre-v1.02 hash (repo path alone) so a runner without ACC_RUNNER_ID still
|
|
75
|
+
* detects a pre-upgrade holder for the same repo.
|
|
76
|
+
*/
|
|
77
|
+
export function singletonLockPath(repoPath, runnerId = singletonRunnerId()) {
|
|
78
|
+
const canonical = canonicalRepoPath(repoPath);
|
|
79
|
+
const key = runnerId ? `${canonical}\0${runnerId}` : canonical;
|
|
80
|
+
const hash = crypto.createHash("sha1").update(key).digest("hex").slice(0, 12);
|
|
59
81
|
return path.join(cacheDir(), `runner.${hash}.lock`);
|
|
60
82
|
}
|
|
61
83
|
async function readLockInfo(file) {
|
|
@@ -75,6 +97,8 @@ async function readLockInfo(file) {
|
|
|
75
97
|
return {
|
|
76
98
|
pid: parsed.pid,
|
|
77
99
|
repoPath: typeof parsed.repoPath === "string" ? parsed.repoPath : "<unknown>",
|
|
100
|
+
// Absent in pre-v1.02 lock files → "" (legacy repo-path-only key).
|
|
101
|
+
runnerId: typeof parsed.runnerId === "string" ? parsed.runnerId : "",
|
|
78
102
|
acquiredAt: typeof parsed.acquiredAt === "string" ? parsed.acquiredAt : "<unknown>",
|
|
79
103
|
version: typeof parsed.version === "string" ? parsed.version : "<unknown>",
|
|
80
104
|
};
|
|
@@ -104,18 +128,21 @@ function makeLock(file, repoPath, pid) {
|
|
|
104
128
|
};
|
|
105
129
|
}
|
|
106
130
|
/**
|
|
107
|
-
* Acquire the single-instance lock for `repoPath`. Throws
|
|
108
|
-
* SingletonLockHeldError when a *live* process already holds the lock for
|
|
109
|
-
*
|
|
110
|
-
* corrupt file) is reclaimed with a stderr breadcrumb and
|
|
131
|
+
* Acquire the single-instance lock for `repoPath` under `runnerId`. Throws
|
|
132
|
+
* SingletonLockHeldError when a *live* process already holds the lock for the
|
|
133
|
+
* same (canonical repo path, runner identity) pair. A stale lock (dead pid,
|
|
134
|
+
* our own pid, or a corrupt file) is reclaimed with a stderr breadcrumb and
|
|
135
|
+
* then re-acquired. A different `runnerId` keys a different lock file, so two
|
|
136
|
+
* distinct identities on one repo never contend (v1.02-A).
|
|
111
137
|
*/
|
|
112
|
-
export async function acquireSingletonLock(repoPath, pid = process.pid) {
|
|
138
|
+
export async function acquireSingletonLock(repoPath, pid = process.pid, runnerId = singletonRunnerId()) {
|
|
113
139
|
const canonical = canonicalRepoPath(repoPath);
|
|
114
|
-
const file = singletonLockPath(repoPath);
|
|
140
|
+
const file = singletonLockPath(repoPath, runnerId);
|
|
115
141
|
await fsp.mkdir(path.dirname(file), { recursive: true });
|
|
116
142
|
const payload = `${JSON.stringify({
|
|
117
143
|
pid,
|
|
118
144
|
repoPath: canonical,
|
|
145
|
+
runnerId,
|
|
119
146
|
acquiredAt: new Date().toISOString(),
|
|
120
147
|
version: PACKAGE_VERSION,
|
|
121
148
|
}, null, 2)}\n`;
|
|
@@ -159,8 +186,8 @@ export async function acquireSingletonLock(repoPath, pid = process.pid) {
|
|
|
159
186
|
* process other than `selfPid` owns it. Used by `acc-runner doctor` to
|
|
160
187
|
* report a duplicate runner without trying to acquire the lock.
|
|
161
188
|
*/
|
|
162
|
-
export async function findLiveLockHolder(repoPath, selfPid = process.pid) {
|
|
163
|
-
const holder = await readLockInfo(singletonLockPath(repoPath));
|
|
189
|
+
export async function findLiveLockHolder(repoPath, selfPid = process.pid, runnerId = singletonRunnerId()) {
|
|
190
|
+
const holder = await readLockInfo(singletonLockPath(repoPath, runnerId));
|
|
164
191
|
if (holder && holder.pid !== selfPid && isProcessAlive(holder.pid)) {
|
|
165
192
|
return holder;
|
|
166
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,34 @@ export interface PreparedWorktree {
|
|
|
15
15
|
}
|
|
16
16
|
export type GitExec = (args: string[], cwd: string) => Promise<void>;
|
|
17
17
|
export type WorktreeInspector = (repoPath: string, taskId: string) => Promise<WorktreeInspection | null>;
|
|
18
|
+
/** Resolve whether `baseBranch` points at a real commit in `repoPath`. */
|
|
19
|
+
export type BaseRefResolver = (baseBranch: string, repoPath: string) => Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Why a fresh fork was refused. Carried by both `StaleBaseFatalError` and
|
|
22
|
+
* the `onStaleBaseFatal` emitter so the caller can log the
|
|
23
|
+
* `runner.stale_base_fatal` activity event with the same detail.
|
|
24
|
+
*/
|
|
25
|
+
export interface StaleBaseInfo {
|
|
26
|
+
readonly event: "runner.stale_base_fatal";
|
|
27
|
+
readonly taskId: string;
|
|
28
|
+
readonly branch: string;
|
|
29
|
+
readonly base: string;
|
|
30
|
+
readonly reason: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Thrown when a FRESH task branch cannot be cut from a freshly-fetched
|
|
34
|
+
* origin tip. The task must fail rather than silently fork from a stale
|
|
35
|
+
* local ref. `event` is `runner.stale_base_fatal` so the caller can route
|
|
36
|
+
* the activity event without re-deriving it.
|
|
37
|
+
*/
|
|
38
|
+
export declare class StaleBaseFatalError extends Error {
|
|
39
|
+
readonly event: "runner.stale_base_fatal";
|
|
40
|
+
readonly taskId: string;
|
|
41
|
+
readonly branch: string;
|
|
42
|
+
readonly base: string;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
constructor(info: StaleBaseInfo);
|
|
45
|
+
}
|
|
18
46
|
export interface PrepareWorktreeOptions {
|
|
19
47
|
repoPath: string;
|
|
20
48
|
/**
|
|
@@ -39,6 +67,26 @@ export interface PrepareWorktreeOptions {
|
|
|
39
67
|
* exercisable without standing up a real git repo on disk.
|
|
40
68
|
*/
|
|
41
69
|
inspect?: WorktreeInspector;
|
|
70
|
+
/**
|
|
71
|
+
* Stale-base guard — whether the caller's base `git fetch` succeeded.
|
|
72
|
+
* `false` means the freshly-fetched base is unavailable, so a FRESH fork
|
|
73
|
+
* is refused (the task fails) rather than silently forking from a stale
|
|
74
|
+
* local ref. Omitted/true preserves the happy path. The crash-resume
|
|
75
|
+
* path is unaffected.
|
|
76
|
+
*/
|
|
77
|
+
baseFetchOk?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Stale-base guard — optional emitter so the caller can log the
|
|
80
|
+
* `runner.stale_base_fatal` activity event before the throw propagates.
|
|
81
|
+
* Best-effort: a throwing emitter does not mask the fatal error.
|
|
82
|
+
*/
|
|
83
|
+
onStaleBaseFatal?: (info: StaleBaseInfo) => void | Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Stale-base guard — override base-ref resolution for tests. Defaults to
|
|
86
|
+
* `git rev-parse --verify <baseBranch>^{commit}`, used to fail fast when a
|
|
87
|
+
* remote-tracking base ref is absent (e.g. a fetch that produced no ref).
|
|
88
|
+
*/
|
|
89
|
+
baseRefResolves?: BaseRefResolver;
|
|
42
90
|
}
|
|
43
91
|
export declare function worktreePath(taskId: string): string;
|
|
44
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"AAgDA,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAExC,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAG,yBAAyB,CAAU;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,aAAa;CAYhC;AA0BD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAyBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAgDpC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA+F3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B3B"}
|
package/dist/runtime/worktree.js
CHANGED
|
@@ -7,12 +7,20 @@
|
|
|
7
7
|
* the LATEST integration tip, not a stale local ref. `git fetch` is driven
|
|
8
8
|
* by the caller (task-runner.ts), which fetches origin and passes the
|
|
9
9
|
* freshly-fetched remote-tracking ref (`origin/<integration>`) as
|
|
10
|
-
* `baseBranch`.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* `baseBranch`. A PR once conflicted against the real integration because a
|
|
11
|
+
* 13-commit-stale LOCAL ref was used as the base; forking from
|
|
12
|
+
* `origin/<integration>` is the fix.
|
|
13
|
+
*
|
|
14
|
+
* Stale-base guard. A fresh fork must start from a freshly-fetched origin
|
|
15
|
+
* tip or NOT START. When the caller reports a failed base fetch
|
|
16
|
+
* (`baseFetchOk: false`), or hands a base that is not a freshly-fetched
|
|
17
|
+
* remote-tracking ref, or the base ref does not resolve to a commit, this
|
|
18
|
+
* module emits `runner.stale_base_fatal` and throws `StaleBaseFatalError`
|
|
19
|
+
* instead of silently forking from a stale local ref. Forking from a stale
|
|
20
|
+
* ref authors the branch against an old integration tip and drops newer
|
|
21
|
+
* work, so the task fails fast rather than producing a doomed PR. The
|
|
22
|
+
* crash-resume path below is exempt: a registered partial branch is reused
|
|
23
|
+
* as-is and never needs a fresh base.
|
|
16
24
|
*
|
|
17
25
|
* v0.12-RESUME — when a prior runner crashed mid-task and the
|
|
18
26
|
* v0.12 stale-running sweep returned the task to queued, a fresh
|
|
@@ -27,13 +35,53 @@
|
|
|
27
35
|
* partially-committed state instead of restarting from baseBranch.
|
|
28
36
|
*/
|
|
29
37
|
import fs from "node:fs/promises";
|
|
30
|
-
import os from "node:os";
|
|
31
38
|
import path from "node:path";
|
|
32
39
|
import { execa } from "execa";
|
|
33
40
|
import { buildEnv } from "../bin-resolve.js";
|
|
34
|
-
|
|
41
|
+
import { cacheDir } from "./cache-dir.js";
|
|
42
|
+
// Lazy so tests can override ACC_RUNNER_CACHE_DIR / HOME between cases.
|
|
43
|
+
//
|
|
44
|
+
// v1.00-B: resolves through `cacheDir()` (honours ACC_RUNNER_CACHE_DIR)
|
|
45
|
+
// rather than a hardcoded ~/.cache path, so two ephemeral runners with
|
|
46
|
+
// distinct cache dirs get isolated `work/` trees and never race on each
|
|
47
|
+
// other's per-task worktrees.
|
|
35
48
|
export function workDir() {
|
|
36
|
-
return path.join(
|
|
49
|
+
return path.join(cacheDir(), "work");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Thrown when a FRESH task branch cannot be cut from a freshly-fetched
|
|
53
|
+
* origin tip. The task must fail rather than silently fork from a stale
|
|
54
|
+
* local ref. `event` is `runner.stale_base_fatal` so the caller can route
|
|
55
|
+
* the activity event without re-deriving it.
|
|
56
|
+
*/
|
|
57
|
+
export class StaleBaseFatalError extends Error {
|
|
58
|
+
event = "runner.stale_base_fatal";
|
|
59
|
+
taskId;
|
|
60
|
+
branch;
|
|
61
|
+
base;
|
|
62
|
+
reason;
|
|
63
|
+
constructor(info) {
|
|
64
|
+
super(`refusing to fork ${info.branch} from stale/unavailable base ` +
|
|
65
|
+
`"${info.base}" (${info.reason}); a fresh task must fork from a ` +
|
|
66
|
+
`freshly-fetched origin tip or not start`);
|
|
67
|
+
this.name = "StaleBaseFatalError";
|
|
68
|
+
this.taskId = info.taskId;
|
|
69
|
+
this.branch = info.branch;
|
|
70
|
+
this.base = info.base;
|
|
71
|
+
this.reason = info.reason;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A freshly-fetched base is a remote-tracking ref. The caller passes
|
|
76
|
+
* `origin/<integration>` (fresh task) or `origin/<branch>` (rework) on the
|
|
77
|
+
* happy path; the only time it hands a bare local ref is the abandoned
|
|
78
|
+
* stale-fallback path, which this guard now refuses.
|
|
79
|
+
*/
|
|
80
|
+
function isFreshlyFetchedOriginRef(base) {
|
|
81
|
+
return base.startsWith("origin/");
|
|
82
|
+
}
|
|
83
|
+
function defaultBaseRefResolves(baseBranch, repoPath) {
|
|
84
|
+
return execa("git", ["rev-parse", "--verify", "--quiet", `${baseBranch}^{commit}`], { cwd: repoPath, env: buildEnv() }).then(() => true, () => false);
|
|
37
85
|
}
|
|
38
86
|
function defaultGitExec(args, cwd) {
|
|
39
87
|
return execa("git", args, { cwd, env: buildEnv() }).then(() => undefined);
|
|
@@ -143,6 +191,41 @@ export async function prepareTaskWorktree(opts) {
|
|
|
143
191
|
},
|
|
144
192
|
};
|
|
145
193
|
}
|
|
194
|
+
// Stale-base guard (fresh fork only — the resume path returned above and
|
|
195
|
+
// never needs a fresh base). A fresh task branch must fork from a
|
|
196
|
+
// freshly-fetched origin tip or NOT START. Refuse, with a
|
|
197
|
+
// `runner.stale_base_fatal` event + throw, when:
|
|
198
|
+
// - the caller reported a failed base fetch (`baseFetchOk: false`),
|
|
199
|
+
// - the base is not a freshly-fetched remote-tracking ref, or
|
|
200
|
+
// - the base ref does not resolve to a commit.
|
|
201
|
+
// This replaces the abandoned silent fallback to a stale local ref, which
|
|
202
|
+
// authored branches against an old integration tip and dropped newer work.
|
|
203
|
+
const fatal = async (reason) => {
|
|
204
|
+
const info = {
|
|
205
|
+
event: "runner.stale_base_fatal",
|
|
206
|
+
taskId: opts.taskId,
|
|
207
|
+
branch: opts.branch,
|
|
208
|
+
base: opts.baseBranch,
|
|
209
|
+
reason,
|
|
210
|
+
};
|
|
211
|
+
if (opts.onStaleBaseFatal) {
|
|
212
|
+
try {
|
|
213
|
+
await opts.onStaleBaseFatal(info);
|
|
214
|
+
}
|
|
215
|
+
catch { /* best-effort */ }
|
|
216
|
+
}
|
|
217
|
+
throw new StaleBaseFatalError(info);
|
|
218
|
+
};
|
|
219
|
+
if (opts.baseFetchOk === false) {
|
|
220
|
+
await fatal("base fetch failed");
|
|
221
|
+
}
|
|
222
|
+
if (!isFreshlyFetchedOriginRef(opts.baseBranch)) {
|
|
223
|
+
await fatal("base is not a freshly-fetched remote-tracking ref");
|
|
224
|
+
}
|
|
225
|
+
const baseRefResolves = opts.baseRefResolves ?? defaultBaseRefResolves;
|
|
226
|
+
if (!(await baseRefResolves(opts.baseBranch, worktreeBase))) {
|
|
227
|
+
await fatal("freshly-fetched base ref is unavailable");
|
|
228
|
+
}
|
|
146
229
|
await removeWorktree(worktreeBase, target, git);
|
|
147
230
|
// `-B <branch> <path> <baseBranch>` force-creates the task branch at
|
|
148
231
|
// baseBranch's tip, overwriting a stale ref from a prior crashed run.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"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"}
|
package/dist/task-runner.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { type TaskLock } from "./runtime/locks.js";
|
|
|
10
10
|
import { type PreparedWorktree, type PrepareWorktreeOptions } from "./runtime/worktree.js";
|
|
11
11
|
import { type ConflictResolutionDeps } from "./runtime/conflict-resolver.js";
|
|
12
12
|
import { type AssertResolutionOptions, type ResolutionIntegrityDeps, type ResolutionIntegrityResult } from "./runtime/resolution-integrity.js";
|
|
13
|
+
import { type PreprGateResult } from "./prepr-gate.js";
|
|
13
14
|
import type { RunnerSupabaseClient } from "./supabase.js";
|
|
14
15
|
export interface CostEventPayload extends NormalizedUsage {
|
|
15
16
|
task_id: string;
|
|
@@ -142,6 +143,16 @@ export interface RunTaskDeps {
|
|
|
142
143
|
* without a real worktree.
|
|
143
144
|
*/
|
|
144
145
|
assertResolutionIntegrity?: (workdir: string, opts: AssertResolutionOptions, deps?: ResolutionIntegrityDeps) => Promise<ResolutionIntegrityResult>;
|
|
146
|
+
/**
|
|
147
|
+
* RR-1: pre-PR self-check. Runs the repo's own gates
|
|
148
|
+
* (`pnpm typecheck && pnpm lint && pnpm build`, plus `pnpm test` when
|
|
149
|
+
* present) inside the task worktree AFTER the agent's commit and BEFORE the
|
|
150
|
+
* PR is opened, so build/typecheck/lint breaks are caught on the runner
|
|
151
|
+
* instead of burning a full PR+review cycle. Defaults to `runPreprGate`
|
|
152
|
+
* against the worktree; tests inject pass/fail. Skippable via
|
|
153
|
+
* `ACC_RUNNER_SKIP_PREPR=1`.
|
|
154
|
+
*/
|
|
155
|
+
runPreprGate?: (workdir: string, baseRef?: string) => Promise<PreprGateResult>;
|
|
145
156
|
}
|
|
146
157
|
export interface RunTaskController {
|
|
147
158
|
taskId: string;
|
|
@@ -153,10 +164,10 @@ export interface RunTaskController {
|
|
|
153
164
|
* line (REG-294) so an operator can tell whether a multi-minute task
|
|
154
165
|
* died at fetch, git, claude, or push.
|
|
155
166
|
*/
|
|
156
|
-
export type RunTaskPhase = "claim_locks" | "transition_to_running" | "fetch" | "worktree_lock" | "git" | "claude_exit" | "push" | "github";
|
|
167
|
+
export type RunTaskPhase = "claim_locks" | "transition_to_running" | "fetch" | "worktree_lock" | "git" | "claude_exit" | "prepr_gate" | "push" | "github" | "repo_scope";
|
|
157
168
|
export interface RunTaskOutcome {
|
|
158
169
|
taskId: string;
|
|
159
|
-
status: "ok" | "failed" | "cancelled" | "capacity_paused" | "requeued";
|
|
170
|
+
status: "ok" | "failed" | "cancelled" | "capacity_paused" | "requeued" | "ignored";
|
|
160
171
|
prUrl?: string;
|
|
161
172
|
exitCode?: number | null;
|
|
162
173
|
error?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAS,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,
|
|
1
|
+
{"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../src/task-runner.ts"],"names":[],"mappings":"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"}
|