@tokenfactory/acc-runner 0.47.7 → 0.47.8
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/build-info.generated.d.ts +1 -1
- package/dist/build-info.generated.js +2 -2
- package/dist/codex-model-catalog.d.ts +4 -0
- package/dist/codex-model-catalog.d.ts.map +1 -1
- package/dist/codex-model-catalog.js +21 -2
- package/dist/codex-model-catalog.js.map +1 -1
- package/dist/cost-pricing.d.ts.map +1 -1
- package/dist/cost-pricing.js +39 -1
- package/dist/cost-pricing.js.map +1 -1
- package/dist/engines/codex.d.ts +5 -0
- package/dist/engines/codex.d.ts.map +1 -1
- package/dist/engines/codex.js +63 -1
- package/dist/engines/codex.js.map +1 -1
- package/dist/engines/gemini.d.ts +31 -19
- package/dist/engines/gemini.d.ts.map +1 -1
- package/dist/engines/gemini.js +71 -35
- package/dist/engines/gemini.js.map +1 -1
- package/dist/engines/registry.d.ts +9 -1
- package/dist/engines/registry.d.ts.map +1 -1
- package/dist/engines/registry.js +17 -6
- package/dist/engines/registry.js.map +1 -1
- package/dist/prepr-gate.d.ts +52 -0
- package/dist/prepr-gate.d.ts.map +1 -1
- package/dist/prepr-gate.js +91 -16
- package/dist/prepr-gate.js.map +1 -1
- package/dist/process-tree.d.ts +115 -0
- package/dist/process-tree.d.ts.map +1 -0
- package/dist/process-tree.js +272 -0
- package/dist/process-tree.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +21 -1
- package/dist/program.js.map +1 -1
- package/dist/remote-ops/command.d.ts +7 -0
- package/dist/remote-ops/command.d.ts.map +1 -0
- package/dist/remote-ops/command.js +34 -0
- package/dist/remote-ops/command.js.map +1 -0
- package/dist/remote-ops/daemon.d.ts +62 -0
- package/dist/remote-ops/daemon.d.ts.map +1 -0
- package/dist/remote-ops/daemon.js +192 -0
- package/dist/remote-ops/daemon.js.map +1 -0
- package/dist/remote-ops/invocation.d.ts +26 -0
- package/dist/remote-ops/invocation.d.ts.map +1 -0
- package/dist/remote-ops/invocation.js +31 -0
- package/dist/remote-ops/invocation.js.map +1 -0
- package/dist/remote-ops/validate.d.ts +35 -0
- package/dist/remote-ops/validate.d.ts.map +1 -0
- package/dist/remote-ops/validate.js +60 -0
- package/dist/remote-ops/validate.js.map +1 -0
- package/dist/runtime/rework.d.ts.map +1 -1
- package/dist/runtime/rework.js +16 -0
- package/dist/runtime/rework.js.map +1 -1
- package/dist/task-runner.d.ts +3 -3
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +81 -10
- package/dist/task-runner.js.map +1 -1
- package/dist/user-cli/tasks.d.ts +6 -0
- package/dist/user-cli/tasks.d.ts.map +1 -1
- package/dist/user-cli/tasks.js +81 -3
- package/dist/user-cli/tasks.js.map +1 -1
- package/dist/watch.d.ts +77 -0
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +168 -8
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
package/dist/user-cli/tasks.js
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { userClient } from "./client.js";
|
|
13
13
|
/** Columns worth a terminal row. Mirrors the read-only MCP task query. */
|
|
14
|
-
const LIST_COLUMNS = "id, title, status, priority, risk, repo, branch, pr_number, agent_id, runner_id, updated_at";
|
|
14
|
+
const LIST_COLUMNS = "id, title, status, priority, risk, repo, branch, pr_number, agent_id, runner_id, executor, started_at, updated_at";
|
|
15
|
+
const IN_FLIGHT = new Set(["claimed", "running", "needs-review", "changes-requested", "merging"]);
|
|
15
16
|
/** 1..100, defaulting to 25 — the same clamp the MCP read tools use. */
|
|
16
17
|
export function clampLimit(raw, fallback = 25) {
|
|
17
18
|
const n = typeof raw === "string" ? Number.parseInt(raw, 10) : raw;
|
|
@@ -35,6 +36,20 @@ export function statusColour(status) {
|
|
|
35
36
|
return chalk.gray;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
39
|
+
export function executionOwner(row) {
|
|
40
|
+
// started_at is the honest execution-start timestamp (set once by
|
|
41
|
+
// acc.transition_task on the →running move, 0018), not a mutable proxy.
|
|
42
|
+
const started = row.started_at ? ` since ${row.started_at}` : "";
|
|
43
|
+
// An external/human reservation IS ownership the moment it is registered —
|
|
44
|
+
// the fleet is already blocked (migration 0473) — so it is surfaced
|
|
45
|
+
// regardless of status, before the row ever reaches a running state.
|
|
46
|
+
if (row.executor === "external")
|
|
47
|
+
return `EXTERNAL/HUMAN SESSION${started}`;
|
|
48
|
+
// A runner only owns the row while it is actually in flight holding it.
|
|
49
|
+
if (IN_FLIGHT.has(row.status ?? "") && row.runner_id)
|
|
50
|
+
return `RUNNER ${row.runner_id}${started}`;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
38
53
|
/**
|
|
39
54
|
* One task per line, padded to the widest id/status in THIS result set rather
|
|
40
55
|
* than to a fixed width — a board of short ids should not be indented for the
|
|
@@ -46,8 +61,9 @@ export function formatTaskRows(rows) {
|
|
|
46
61
|
return rows.map((r) => {
|
|
47
62
|
const status = (r.status ?? "").padEnd(statusWidth);
|
|
48
63
|
const pr = r.pr_number ? chalk.cyan(`#${r.pr_number}`) : "";
|
|
64
|
+
const owner = executionOwner(r);
|
|
49
65
|
const title = (r.title ?? "(untitled)").slice(0, 72);
|
|
50
|
-
return `${chalk.bold(r.id.padEnd(idWidth))} ${statusColour(r.status)(status)} ${title}${pr ? ` ${pr}` : ""}`;
|
|
66
|
+
return `${chalk.bold(r.id.padEnd(idWidth))} ${statusColour(r.status)(status)} ${title}${pr ? ` ${pr}` : ""}${owner ? ` ${chalk.bgYellow.black(` EXECUTING: ${owner} `)}` : ""}`;
|
|
51
67
|
});
|
|
52
68
|
}
|
|
53
69
|
export async function taskListCommand(opts = {}, deps = {}) {
|
|
@@ -92,8 +108,10 @@ const SHOW_FIELDS = [
|
|
|
92
108
|
"pr_number",
|
|
93
109
|
"agent_id",
|
|
94
110
|
"runner_id",
|
|
111
|
+
"executor",
|
|
95
112
|
"parent_task_id",
|
|
96
113
|
"created_at",
|
|
114
|
+
"started_at",
|
|
97
115
|
"updated_at",
|
|
98
116
|
];
|
|
99
117
|
export async function taskShowCommand(taskId, opts = {}, deps = {}) {
|
|
@@ -112,10 +130,16 @@ export async function taskShowCommand(taskId, opts = {}, deps = {}) {
|
|
|
112
130
|
throw new Error(`No task ${taskId} is visible to you.`);
|
|
113
131
|
}
|
|
114
132
|
const row = data;
|
|
133
|
+
const owner = executionOwner(row);
|
|
115
134
|
if (opts.json) {
|
|
116
|
-
say(JSON.stringify(row, null, 2));
|
|
135
|
+
say(JSON.stringify({ ...row, execution_owner: owner }, null, 2));
|
|
117
136
|
return;
|
|
118
137
|
}
|
|
138
|
+
if (owner) {
|
|
139
|
+
say(chalk.bgYellow.black(` WARNING: ${taskId} is already executing on ${owner}. `));
|
|
140
|
+
say(chalk.yellow("Do not start another session unless you are deliberately taking over."));
|
|
141
|
+
say("");
|
|
142
|
+
}
|
|
119
143
|
const width = Math.max(...SHOW_FIELDS.map((f) => f.length));
|
|
120
144
|
for (const field of SHOW_FIELDS) {
|
|
121
145
|
const value = row[field];
|
|
@@ -128,4 +152,58 @@ export async function taskShowCommand(taskId, opts = {}, deps = {}) {
|
|
|
128
152
|
say(String(row.description).trim());
|
|
129
153
|
}
|
|
130
154
|
}
|
|
155
|
+
export async function taskReserveExternalCommand(taskId, opts = {}, deps = {}) {
|
|
156
|
+
const say = deps.log ?? ((line) => console.log(line));
|
|
157
|
+
const sb = await userClient(deps);
|
|
158
|
+
const { data, error } = await sb
|
|
159
|
+
.from("tasks")
|
|
160
|
+
.select("id,status,runner_id,executor,started_at")
|
|
161
|
+
.eq("id", taskId)
|
|
162
|
+
.maybeSingle();
|
|
163
|
+
if (error)
|
|
164
|
+
throw new Error(`Could not read task ${taskId}: ${error.message}`);
|
|
165
|
+
if (!data)
|
|
166
|
+
throw new Error(`No task ${taskId} is visible to you.`);
|
|
167
|
+
const row = data;
|
|
168
|
+
const owner = executionOwner(row);
|
|
169
|
+
if (owner) {
|
|
170
|
+
throw new Error(`WARNING: ${taskId} is already executing on ${owner}. Refusing to register a second executor.`);
|
|
171
|
+
}
|
|
172
|
+
// Reserving is a record of ownership, never a dispatch. acc.set_task_executor
|
|
173
|
+
// (migration 0473 §4) flips the executor discriminator on a row that is
|
|
174
|
+
// already past the queue leg (queued/running), surrenders runner_id and
|
|
175
|
+
// changes no status: acc.dispatch_queued_tasks skips executor='external'
|
|
176
|
+
// candidates and the claim-lock guards raise external_executor_reserved, so
|
|
177
|
+
// the fleet cannot take the task. A row that has NOT been dispatched is
|
|
178
|
+
// refused here rather than started — starting it would be a second path into
|
|
179
|
+
// the queue outside the dispatcher (AC3). Dispatch it with executor external
|
|
180
|
+
// first (board, or MCP dispatch_task), which runs acc.start_task's fences and
|
|
181
|
+
// reserves it in the same transaction (0473 §4b).
|
|
182
|
+
if (row.status !== "queued" && row.status !== "running") {
|
|
183
|
+
throw new Error(`${taskId} is ${row.status ?? "undispatched"}, not dispatched; reserve-external never starts a task. ` +
|
|
184
|
+
"Dispatch it with executor external first (board, or MCP dispatch_task); that reserves it for you.");
|
|
185
|
+
}
|
|
186
|
+
const { data: rpcData, error: rpcError } = await sb.rpc("set_task_executor", {
|
|
187
|
+
p_task_id: taskId,
|
|
188
|
+
p_executor: "external",
|
|
189
|
+
});
|
|
190
|
+
if (rpcError)
|
|
191
|
+
throw new Error(`Could not reserve ${taskId} for external execution: ${rpcError.message}`);
|
|
192
|
+
// The RPC can refuse by value rather than raising — e.g. a runner already
|
|
193
|
+
// holds the task's claim locks ('claimed_by_runner'). Surface that as a
|
|
194
|
+
// failure instead of claiming a reservation that did not land.
|
|
195
|
+
const result = (rpcData ?? null);
|
|
196
|
+
if (result && result.ok === false) {
|
|
197
|
+
const held = result.runner_id ? ` (held by runner ${result.runner_id})` : "";
|
|
198
|
+
throw new Error(`Could not reserve ${taskId} for external execution: ${result.error ?? "refused"}${held}.`);
|
|
199
|
+
}
|
|
200
|
+
const body = {
|
|
201
|
+
ok: true,
|
|
202
|
+
task_id: taskId,
|
|
203
|
+
executor: "external",
|
|
204
|
+
enforcing: true,
|
|
205
|
+
detail: "Reserved for an external/human session; dispatcher runners will not claim it.",
|
|
206
|
+
};
|
|
207
|
+
say(opts.json ? JSON.stringify(body, null, 2) : `${chalk.bgYellow.black(" EXECUTING ")} ${taskId} reserved for an external/human session. Dispatcher runners will not claim it.`);
|
|
208
|
+
}
|
|
131
209
|
//# sourceMappingURL=tasks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/user-cli/tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAE3D,0EAA0E;AAC1E,MAAM,YAAY,GAChB,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/user-cli/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { ClaimDeadman, type HeartbeatDeadmanFields } from "./claim-deadman/index
|
|
|
18
18
|
import type { EngineAccountIdentity } from "./engines/types.js";
|
|
19
19
|
import type { ClaudeExitClass } from "./failure-classifier.js";
|
|
20
20
|
import type { StoredSession } from "./types.js";
|
|
21
|
+
import { type ProcessTreeRegistry } from "./process-tree.js";
|
|
21
22
|
import { RefreshReuseDetectedError, classifyHeartbeatError, nextHeartbeatDelayMs, type HeartbeatErrorKind } from "./runtime/auth-lifecycle.js";
|
|
22
23
|
import { HeartbeatVerifier } from "./heartbeat/beat.js";
|
|
23
24
|
export { RefreshReuseDetectedError, classifyHeartbeatError, nextHeartbeatDelayMs, type HeartbeatErrorKind, };
|
|
@@ -762,6 +763,48 @@ export declare function reassertRunningClaims(state: WatchState): Promise<void>;
|
|
|
762
763
|
* engine's tasks, and other engines keep claiming.
|
|
763
764
|
*/
|
|
764
765
|
export declare function claimPauseReason(state: Pick<WatchState, "capacityClaimPaused" | "gitAuthFailed" | "capacityProbe">): ClaimPauseReason | null;
|
|
766
|
+
/**
|
|
767
|
+
* RUNNER-TEST-HANG-SLOT-LEAK-1: the number of task slots in use — the live
|
|
768
|
+
* task-controller count, and ONLY that.
|
|
769
|
+
*
|
|
770
|
+
* This is the whole slot-accounting invariant in one place: a slot is a LIVE
|
|
771
|
+
* `runTask` controller in `state.running`, never a surviving process. A leaked
|
|
772
|
+
* process tree whose task has already ended is tracked in `processTreeRegistry`
|
|
773
|
+
* (reaped by `reapTaskProcessTree` when the task leaves) and must NEVER count
|
|
774
|
+
* toward the claim ceiling — otherwise N hung `pnpm run test` children would
|
|
775
|
+
* wedge the runner out of claiming forever, which is exactly the incident this
|
|
776
|
+
* change fixes. Reading `running.size` here (not any process count) is what
|
|
777
|
+
* lets a runner with 4 leaked trees keep claiming.
|
|
778
|
+
*/
|
|
779
|
+
export declare function taskSlotsInUse(state: Pick<WatchState, "running">): number;
|
|
780
|
+
/** RUNNER-TEST-HANG-SLOT-LEAK-1: injectable seams for `reapTaskProcessTree`. */
|
|
781
|
+
export interface ReapTreeOptions {
|
|
782
|
+
/** Registry to reap from. Default: the shared `processTreeRegistry`. */
|
|
783
|
+
registry?: ProcessTreeRegistry;
|
|
784
|
+
/** Per-group kill. Default: SIGTERM→SIGKILL via `terminateProcessGroup`. */
|
|
785
|
+
kill?: (pgid: number) => void;
|
|
786
|
+
/** Breadcrumb sink. Default: a best-effort `log_activity` RPC. */
|
|
787
|
+
emit?: (verb: string, payload: Record<string, unknown>) => void;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* RUNNER-TEST-HANG-SLOT-LEAK-1: kill every process tree a task still owns and,
|
|
791
|
+
* when anything was actually killed, emit a `runner.orphan_reaped` breadcrumb
|
|
792
|
+
* naming the task and the reaped process-group ids. Called immediately for
|
|
793
|
+
* local completion, pause, cancellation and shutdown; the poll detects an
|
|
794
|
+
* external release, rescue or archive on its next tick.
|
|
795
|
+
*
|
|
796
|
+
* Best-effort end to end: a reap never throws into the pump loop, and a failed
|
|
797
|
+
* breadcrumb is swallowed. Returns the reaped pgids (empty when the task owned
|
|
798
|
+
* no tracked tree — the common case, since the guarded runner sweeps its own
|
|
799
|
+
* group on exit; this is the belt-and-braces for an aborted or orphaned run).
|
|
800
|
+
*/
|
|
801
|
+
export declare function reapTaskProcessTree(state: Pick<WatchState, "supabase" | "session">, taskId: string, opts?: ReapTreeOptions): number[];
|
|
802
|
+
/**
|
|
803
|
+
* An external release, rescue or archive can change the server row while the
|
|
804
|
+
* local test gate is still pending. Poll only tasks with a guarded process;
|
|
805
|
+
* fail open on a read error so a transient connection cannot kill live work.
|
|
806
|
+
*/
|
|
807
|
+
export declare function reapInactiveTaskProcessTrees(state: Pick<WatchState, "supabase" | "session" | "running">, registry?: ProcessTreeRegistry): Promise<string[]>;
|
|
765
808
|
/**
|
|
766
809
|
* CLAIM-DEADMAN: parse the pending-dispatch fields off a `heartbeat_runner`
|
|
767
810
|
* response. Tolerant of a scalar row, a single-row array, or null (today's
|
|
@@ -832,4 +875,38 @@ export declare function gracefulShutdown(state: Pick<WatchState, "running" | "su
|
|
|
832
875
|
* already running finishes normally across a pause / resume / account swap.
|
|
833
876
|
*/
|
|
834
877
|
export declare function buildResumeControllerDeps(state: WatchState, factory: typeof runTask): Pick<ResumeControllerDeps, "setServerPause" | "stopClaims" | "clearServerPause" | "restartClaims" | "onLog">;
|
|
878
|
+
/**
|
|
879
|
+
* A stable RunnerSupabaseClient facade that forwards every access to whatever
|
|
880
|
+
* client `getClient()` returns *now*.
|
|
881
|
+
*
|
|
882
|
+
* The access JWT is baked into `global.headers.Authorization` at client
|
|
883
|
+
* creation time (see createRunnerClient in supabase.ts), so a token rotation
|
|
884
|
+
* does not mutate the client in place — it REPLACES the whole object (doRefresh:
|
|
885
|
+
* `state.supabase = createRunnerClient(…)`). A long-running task that captured
|
|
886
|
+
* the pre-rotation client by value therefore kept presenting the expired JWT,
|
|
887
|
+
* and every RPC it made (update_task_signal, transition/report/lock RPCs) died
|
|
888
|
+
* on "JWT expired" until an operator restarted the runner. Handing the task this
|
|
889
|
+
* proxy instead of a snapshot means each `deps.supabase.rpc(…)` re-resolves
|
|
890
|
+
* against the current client, so RPCs issued after a rotation authenticate with
|
|
891
|
+
* the fresh JWT.
|
|
892
|
+
*
|
|
893
|
+
* This creates no additional client — it only ever delegates to the single
|
|
894
|
+
* `state.supabase` the runner already maintains. Methods are bound to the real
|
|
895
|
+
* client so supabase-js's private (`#`) instance fields resolve correctly. It
|
|
896
|
+
* lives here (not in supabase.ts) so the many watch-suite mocks of
|
|
897
|
+
* `../src/supabase.js` do not need to re-export it.
|
|
898
|
+
*/
|
|
899
|
+
export declare function createLiveClientProxy(getClient: () => RunnerSupabaseClient): RunnerSupabaseClient;
|
|
900
|
+
/**
|
|
901
|
+
* The per-task view of the runner session that reads the CURRENT access token
|
|
902
|
+
* on every access. `runnerId` is stable across a rotation, but the access token
|
|
903
|
+
* is not — doRefresh replaces `state.session` wholesale — so anything in the
|
|
904
|
+
* task path that reads `session.accessToken` (the per-task `.mcp.json` bearer
|
|
905
|
+
* handed to acc-mcp-server) must read it live, not a claim-time snapshot. Mirror
|
|
906
|
+
* of createLiveClientProxy for the token.
|
|
907
|
+
*/
|
|
908
|
+
export declare function liveTaskSession(getSession: () => StoredSession): {
|
|
909
|
+
readonly accessToken: string;
|
|
910
|
+
readonly runnerId: string;
|
|
911
|
+
};
|
|
835
912
|
//# sourceMappingURL=watch.d.ts.map
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.js
CHANGED
|
@@ -79,6 +79,7 @@ import { checkVersion, compareSemver } from "./version-check.js";
|
|
|
79
79
|
import { PACKAGE_VERSION } from "./pkg-version.js";
|
|
80
80
|
import { buildFingerprintCaps, publishBuildFingerprintCaps, LOADED_BUILD_FINGERPRINT, } from "./build-fingerprint.js";
|
|
81
81
|
import { recordRunningBuild } from "./runtime/running-build.js";
|
|
82
|
+
import { processTreeRegistry, } from "./process-tree.js";
|
|
82
83
|
import { authPrecedenceHint, servingAuthKind, describeServingAuthKind, forwardsAmbientKey, anthropicApiKey, } from "./provider-auth.js";
|
|
83
84
|
// RUNNER-SERVING-AUTH: the org's subscription-vs-BYOK choice, resolved once
|
|
84
85
|
// per boot and expressed through the same ACC_RUNNER_SERVING_AUTH_KIND var the
|
|
@@ -418,6 +419,7 @@ async function handleTaskPaused(state, payload) {
|
|
|
418
419
|
}
|
|
419
420
|
if (ctrl) {
|
|
420
421
|
ctrl.cancel();
|
|
422
|
+
reapTaskProcessTree(state, taskId);
|
|
421
423
|
console.log(chalk.yellow(`⏸ ${taskId} paused (${msg.reason ?? "preempted"}) — session stopped`));
|
|
422
424
|
}
|
|
423
425
|
else {
|
|
@@ -447,6 +449,7 @@ function subscribeChannel(state, taskRunnerFactory) {
|
|
|
447
449
|
const ctrl = state.running.get(taskId);
|
|
448
450
|
if (ctrl) {
|
|
449
451
|
ctrl.cancel();
|
|
452
|
+
reapTaskProcessTree(state, taskId);
|
|
450
453
|
}
|
|
451
454
|
else {
|
|
452
455
|
state.queue = state.queue.filter((t) => t !== taskId);
|
|
@@ -690,6 +693,7 @@ async function pollOnce(state, factory) {
|
|
|
690
693
|
return;
|
|
691
694
|
state.polling = true;
|
|
692
695
|
try {
|
|
696
|
+
await reapInactiveTaskProcessTrees(state);
|
|
693
697
|
const { data, error } = await state.supabase.rpc("list_assigned_queued_tasks", {
|
|
694
698
|
p_runner_id: state.session.runner_id,
|
|
695
699
|
p_since: state.pollSince,
|
|
@@ -1153,7 +1157,100 @@ function deadmanCanClaim(state) {
|
|
|
1153
1157
|
capacityProbe: state.capacityProbe,
|
|
1154
1158
|
claimPaused: state.capacityClaimPaused,
|
|
1155
1159
|
});
|
|
1156
|
-
return state
|
|
1160
|
+
return taskSlotsInUse(state) < limit;
|
|
1161
|
+
}
|
|
1162
|
+
/**
|
|
1163
|
+
* RUNNER-TEST-HANG-SLOT-LEAK-1: the number of task slots in use — the live
|
|
1164
|
+
* task-controller count, and ONLY that.
|
|
1165
|
+
*
|
|
1166
|
+
* This is the whole slot-accounting invariant in one place: a slot is a LIVE
|
|
1167
|
+
* `runTask` controller in `state.running`, never a surviving process. A leaked
|
|
1168
|
+
* process tree whose task has already ended is tracked in `processTreeRegistry`
|
|
1169
|
+
* (reaped by `reapTaskProcessTree` when the task leaves) and must NEVER count
|
|
1170
|
+
* toward the claim ceiling — otherwise N hung `pnpm run test` children would
|
|
1171
|
+
* wedge the runner out of claiming forever, which is exactly the incident this
|
|
1172
|
+
* change fixes. Reading `running.size` here (not any process count) is what
|
|
1173
|
+
* lets a runner with 4 leaked trees keep claiming.
|
|
1174
|
+
*/
|
|
1175
|
+
export function taskSlotsInUse(state) {
|
|
1176
|
+
return state.running.size;
|
|
1177
|
+
}
|
|
1178
|
+
/**
|
|
1179
|
+
* RUNNER-TEST-HANG-SLOT-LEAK-1: kill every process tree a task still owns and,
|
|
1180
|
+
* when anything was actually killed, emit a `runner.orphan_reaped` breadcrumb
|
|
1181
|
+
* naming the task and the reaped process-group ids. Called immediately for
|
|
1182
|
+
* local completion, pause, cancellation and shutdown; the poll detects an
|
|
1183
|
+
* external release, rescue or archive on its next tick.
|
|
1184
|
+
*
|
|
1185
|
+
* Best-effort end to end: a reap never throws into the pump loop, and a failed
|
|
1186
|
+
* breadcrumb is swallowed. Returns the reaped pgids (empty when the task owned
|
|
1187
|
+
* no tracked tree — the common case, since the guarded runner sweeps its own
|
|
1188
|
+
* group on exit; this is the belt-and-braces for an aborted or orphaned run).
|
|
1189
|
+
*/
|
|
1190
|
+
export function reapTaskProcessTree(state, taskId, opts = {}) {
|
|
1191
|
+
const registry = opts.registry ?? processTreeRegistry;
|
|
1192
|
+
const details = registry.detailsForTask(taskId);
|
|
1193
|
+
const reaped = registry.reapTask(taskId, opts.kill);
|
|
1194
|
+
if (reaped.length === 0)
|
|
1195
|
+
return [];
|
|
1196
|
+
const emit = opts.emit ??
|
|
1197
|
+
((verb, payload) => {
|
|
1198
|
+
try {
|
|
1199
|
+
void Promise.resolve(state.supabase.rpc("log_activity", {
|
|
1200
|
+
p_verb: verb,
|
|
1201
|
+
p_target_id: taskId,
|
|
1202
|
+
p_target_type: "task",
|
|
1203
|
+
p_payload: payload,
|
|
1204
|
+
})).catch(() => {
|
|
1205
|
+
/* best-effort breadcrumb */
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
catch {
|
|
1209
|
+
// Mocked clients and shutdown races can throw before returning a promise.
|
|
1210
|
+
}
|
|
1211
|
+
});
|
|
1212
|
+
emit("runner.orphan_reaped", {
|
|
1213
|
+
task_id: taskId,
|
|
1214
|
+
runner_id: state.session.runner_id,
|
|
1215
|
+
pgids: reaped,
|
|
1216
|
+
count: reaped.length,
|
|
1217
|
+
command: details.map((group) => group.command).join(", "),
|
|
1218
|
+
elapsed_ms: Math.max(0, ...details.map((group) => group.elapsed_ms)),
|
|
1219
|
+
});
|
|
1220
|
+
return reaped;
|
|
1221
|
+
}
|
|
1222
|
+
/**
|
|
1223
|
+
* An external release, rescue or archive can change the server row while the
|
|
1224
|
+
* local test gate is still pending. Poll only tasks with a guarded process;
|
|
1225
|
+
* fail open on a read error so a transient connection cannot kill live work.
|
|
1226
|
+
*/
|
|
1227
|
+
export async function reapInactiveTaskProcessTrees(state, registry = processTreeRegistry) {
|
|
1228
|
+
const reaped = [];
|
|
1229
|
+
for (const taskId of registry.trackedTaskIds()) {
|
|
1230
|
+
const ctrl = state.running.get(taskId);
|
|
1231
|
+
if (!ctrl) {
|
|
1232
|
+
if (reapTaskProcessTree(state, taskId, { registry }).length)
|
|
1233
|
+
reaped.push(taskId);
|
|
1234
|
+
continue;
|
|
1235
|
+
}
|
|
1236
|
+
try {
|
|
1237
|
+
const { data, error } = await state.supabase.rpc("fetch_task_for_runner", {
|
|
1238
|
+
p_task_id: taskId,
|
|
1239
|
+
});
|
|
1240
|
+
if (error || !data)
|
|
1241
|
+
continue;
|
|
1242
|
+
const task = data.task;
|
|
1243
|
+
if (!task || (task.status === "running" && task.runner_id === state.session.runner_id))
|
|
1244
|
+
continue;
|
|
1245
|
+
ctrl.cancel();
|
|
1246
|
+
if (reapTaskProcessTree(state, taskId, { registry }).length)
|
|
1247
|
+
reaped.push(taskId);
|
|
1248
|
+
}
|
|
1249
|
+
catch {
|
|
1250
|
+
// Retry on the next poll; an unavailable status read must not stop work.
|
|
1251
|
+
}
|
|
1252
|
+
}
|
|
1253
|
+
return reaped;
|
|
1157
1254
|
}
|
|
1158
1255
|
/**
|
|
1159
1256
|
* CLAIM-DEADMAN: parse the pending-dispatch fields off a `heartbeat_runner`
|
|
@@ -2366,8 +2463,9 @@ export async function watchCommand(options = {}) {
|
|
|
2366
2463
|
state.resumeController.stop();
|
|
2367
2464
|
state.accountProbe?.stop();
|
|
2368
2465
|
// v0.10 T-49-2: cancel every in-flight task (replaces v0.9 single cancel).
|
|
2369
|
-
for (const ctrl of state.running
|
|
2466
|
+
for (const [taskId, ctrl] of state.running) {
|
|
2370
2467
|
ctrl.cancel();
|
|
2468
|
+
reapTaskProcessTree(state, taskId);
|
|
2371
2469
|
}
|
|
2372
2470
|
// FLEET-SERVE (wire): stop the chat lane (requeues in-flight chat turns for
|
|
2373
2471
|
// the companion / next fleet runner) and restore the acc-mcp config. Best-
|
|
@@ -3538,6 +3636,54 @@ async function wireCapacityResume(state, factory, options) {
|
|
|
3538
3636
|
// pause-tick / heartbeat cadence per its four-trigger schedule).
|
|
3539
3637
|
state.accountProbe.start();
|
|
3540
3638
|
}
|
|
3639
|
+
/**
|
|
3640
|
+
* A stable RunnerSupabaseClient facade that forwards every access to whatever
|
|
3641
|
+
* client `getClient()` returns *now*.
|
|
3642
|
+
*
|
|
3643
|
+
* The access JWT is baked into `global.headers.Authorization` at client
|
|
3644
|
+
* creation time (see createRunnerClient in supabase.ts), so a token rotation
|
|
3645
|
+
* does not mutate the client in place — it REPLACES the whole object (doRefresh:
|
|
3646
|
+
* `state.supabase = createRunnerClient(…)`). A long-running task that captured
|
|
3647
|
+
* the pre-rotation client by value therefore kept presenting the expired JWT,
|
|
3648
|
+
* and every RPC it made (update_task_signal, transition/report/lock RPCs) died
|
|
3649
|
+
* on "JWT expired" until an operator restarted the runner. Handing the task this
|
|
3650
|
+
* proxy instead of a snapshot means each `deps.supabase.rpc(…)` re-resolves
|
|
3651
|
+
* against the current client, so RPCs issued after a rotation authenticate with
|
|
3652
|
+
* the fresh JWT.
|
|
3653
|
+
*
|
|
3654
|
+
* This creates no additional client — it only ever delegates to the single
|
|
3655
|
+
* `state.supabase` the runner already maintains. Methods are bound to the real
|
|
3656
|
+
* client so supabase-js's private (`#`) instance fields resolve correctly. It
|
|
3657
|
+
* lives here (not in supabase.ts) so the many watch-suite mocks of
|
|
3658
|
+
* `../src/supabase.js` do not need to re-export it.
|
|
3659
|
+
*/
|
|
3660
|
+
export function createLiveClientProxy(getClient) {
|
|
3661
|
+
return new Proxy({}, {
|
|
3662
|
+
get(_target, prop) {
|
|
3663
|
+
const client = getClient();
|
|
3664
|
+
const value = Reflect.get(client, prop, client);
|
|
3665
|
+
return typeof value === "function" ? value.bind(client) : value;
|
|
3666
|
+
},
|
|
3667
|
+
});
|
|
3668
|
+
}
|
|
3669
|
+
/**
|
|
3670
|
+
* The per-task view of the runner session that reads the CURRENT access token
|
|
3671
|
+
* on every access. `runnerId` is stable across a rotation, but the access token
|
|
3672
|
+
* is not — doRefresh replaces `state.session` wholesale — so anything in the
|
|
3673
|
+
* task path that reads `session.accessToken` (the per-task `.mcp.json` bearer
|
|
3674
|
+
* handed to acc-mcp-server) must read it live, not a claim-time snapshot. Mirror
|
|
3675
|
+
* of createLiveClientProxy for the token.
|
|
3676
|
+
*/
|
|
3677
|
+
export function liveTaskSession(getSession) {
|
|
3678
|
+
return {
|
|
3679
|
+
get accessToken() {
|
|
3680
|
+
return getSession().access_token;
|
|
3681
|
+
},
|
|
3682
|
+
get runnerId() {
|
|
3683
|
+
return getSession().runner_id;
|
|
3684
|
+
},
|
|
3685
|
+
};
|
|
3686
|
+
}
|
|
3541
3687
|
/**
|
|
3542
3688
|
* v0.10 T-49-2: concurrent task pump.
|
|
3543
3689
|
*
|
|
@@ -3587,7 +3733,9 @@ async function pump(state, factory) {
|
|
|
3587
3733
|
while (!state.stopped &&
|
|
3588
3734
|
!state.quarantined &&
|
|
3589
3735
|
state.queue.length > 0 &&
|
|
3590
|
-
|
|
3736
|
+
// RUNNER-TEST-HANG-SLOT-LEAK-1: count LIVE controllers only (see
|
|
3737
|
+
// taskSlotsInUse) — a leaked process tree must never gate a claim.
|
|
3738
|
+
taskSlotsInUse(state) < effectiveLimit) {
|
|
3591
3739
|
const nextIndex = state.queue.findIndex((id) => !isCapacityPausedFor(state, state.taskEngines.get(id)));
|
|
3592
3740
|
if (nextIndex === -1)
|
|
3593
3741
|
return;
|
|
@@ -3595,12 +3743,17 @@ async function pump(state, factory) {
|
|
|
3595
3743
|
if (!next)
|
|
3596
3744
|
continue;
|
|
3597
3745
|
const ctrl = factory(next, {
|
|
3598
|
-
|
|
3746
|
+
// Hand the task a LIVE view of the runner's Supabase client and session,
|
|
3747
|
+
// not a claim-time snapshot. doRefresh rotates state.supabase/
|
|
3748
|
+
// state.session when the access token expires; a task that outlived its
|
|
3749
|
+
// claim-time JWT used to keep the pre-rotation client forever and die on
|
|
3750
|
+
// "JWT expired" on every RPC (update_task_signal, transitions, locks,
|
|
3751
|
+
// reports). The proxy re-resolves to the current client on each RPC, and
|
|
3752
|
+
// the session getters read the current token — no per-task client is
|
|
3753
|
+
// created.
|
|
3754
|
+
supabase: createLiveClientProxy(() => state.supabase),
|
|
3599
3755
|
cfg: state.cfg,
|
|
3600
|
-
session:
|
|
3601
|
-
accessToken: state.session.access_token,
|
|
3602
|
-
runnerId: state.session.runner_id,
|
|
3603
|
-
},
|
|
3756
|
+
session: liveTaskSession(() => state.session),
|
|
3604
3757
|
publicUrl: state.cfg.publicUrl,
|
|
3605
3758
|
onUnknownAdvertisedEngine: (engineId, err) => repairUnknownAdvertisedEngine(state, engineId, err),
|
|
3606
3759
|
// CLAIM-LOCK-GLOB: hand the per-runner claim-loss map
|
|
@@ -3615,6 +3768,10 @@ async function pump(state, factory) {
|
|
|
3615
3768
|
void ctrl.promise
|
|
3616
3769
|
.then((outcome) => {
|
|
3617
3770
|
state.running.delete(next);
|
|
3771
|
+
// RUNNER-TEST-HANG-SLOT-LEAK-1: the task has left the runner (done,
|
|
3772
|
+
// needs-review, failed, cancelled, requeued, ignored…) — reap any
|
|
3773
|
+
// process tree it still owns so a hung test child can't outlive it.
|
|
3774
|
+
reapTaskProcessTree(state, next);
|
|
3618
3775
|
touchActivity(state); // v0.12.0 (T-52-7): idle clock restarts at task end
|
|
3619
3776
|
// Capacity exhaustion pauses only the refused engine's task claims.
|
|
3620
3777
|
//
|
|
@@ -3763,6 +3920,9 @@ async function pump(state, factory) {
|
|
|
3763
3920
|
})
|
|
3764
3921
|
.catch((err) => {
|
|
3765
3922
|
state.running.delete(next);
|
|
3923
|
+
// RUNNER-TEST-HANG-SLOT-LEAK-1: same reap on the crash path — a task
|
|
3924
|
+
// that threw must not leave a hung test tree pinned behind it.
|
|
3925
|
+
reapTaskProcessTree(state, next);
|
|
3766
3926
|
touchActivity(state); // v0.12.0 (T-52-7): idle clock restarts at task end
|
|
3767
3927
|
process.stderr.write(`[acc-runner] task ${next} crashed: ${err.message}\n`);
|
|
3768
3928
|
// v0.56 (T-56-1): a crash is not a capacity signal — clear the probe
|