llm-relay 0.78.0 → 0.80.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.
- package/dist/backend.js +2 -0
- package/dist/backend.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/routing-parser.js +11 -4
- package/dist/config/routing-parser.js.map +1 -1
- package/dist/config-types.d.ts +35 -0
- package/dist/config-types.js.map +1 -1
- package/dist/config.d.ts +18 -2
- package/dist/config.js +31 -1
- package/dist/config.js.map +1 -1
- package/dist/mcp/job-journal.d.ts +46 -0
- package/dist/mcp/job-journal.js +67 -0
- package/dist/mcp/job-journal.js.map +1 -0
- package/dist/mcp/lane-runner.d.ts +112 -9
- package/dist/mcp/lane-runner.js +112 -6
- package/dist/mcp/lane-runner.js.map +1 -1
- package/dist/mcp/readonly-boundary.d.ts +33 -0
- package/dist/mcp/readonly-boundary.js +36 -0
- package/dist/mcp/readonly-boundary.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +51 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/openai-request.d.ts +14 -1
- package/dist/openai-request.js +41 -0
- package/dist/openai-request.js.map +1 -1
- package/dist/setup-claude.d.ts +25 -2
- package/dist/setup-claude.js +18 -6
- package/dist/setup-claude.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { atomicWriteJsonSync, safeReadJsonSync } from "../storage/json-store.js";
|
|
2
|
+
import { relayStatePath } from "../state-paths.js";
|
|
3
|
+
export const JOB_JOURNAL_VERSION = 1;
|
|
4
|
+
export function jobJournalPath(env = process.env) {
|
|
5
|
+
if (env["VITEST"]) {
|
|
6
|
+
return relayStatePath("cache", ["llm-relay-vitest", `mcp-jobs-${process.pid}.json`]);
|
|
7
|
+
}
|
|
8
|
+
return relayStatePath("cache", ["mcp-jobs.json"]);
|
|
9
|
+
}
|
|
10
|
+
export const nullJobJournal = {
|
|
11
|
+
note: () => { },
|
|
12
|
+
clear: () => { },
|
|
13
|
+
orphans: () => [],
|
|
14
|
+
};
|
|
15
|
+
export function createJobJournal(path = jobJournalPath()) {
|
|
16
|
+
const rows = new Map();
|
|
17
|
+
let loaded = false;
|
|
18
|
+
let startupOrphans = [];
|
|
19
|
+
const readOnce = () => {
|
|
20
|
+
if (loaded)
|
|
21
|
+
return;
|
|
22
|
+
loaded = true;
|
|
23
|
+
const parsed = safeReadJsonSync(path, {
|
|
24
|
+
validator: (v) => isRecord(v) && v["version"] === JOB_JOURNAL_VERSION && Array.isArray(v["jobs"]),
|
|
25
|
+
});
|
|
26
|
+
if (!parsed)
|
|
27
|
+
return;
|
|
28
|
+
startupOrphans = parsed.jobs.filter(isJournalRow);
|
|
29
|
+
};
|
|
30
|
+
const flush = () => {
|
|
31
|
+
try {
|
|
32
|
+
atomicWriteJsonSync(path, { version: JOB_JOURNAL_VERSION, jobs: [...rows.values()] });
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
note(row) {
|
|
39
|
+
readOnce();
|
|
40
|
+
rows.set(row.jobId, row);
|
|
41
|
+
flush();
|
|
42
|
+
},
|
|
43
|
+
clear(jobId) {
|
|
44
|
+
readOnce();
|
|
45
|
+
if (!rows.delete(jobId))
|
|
46
|
+
return;
|
|
47
|
+
flush();
|
|
48
|
+
},
|
|
49
|
+
orphans() {
|
|
50
|
+
readOnce();
|
|
51
|
+
return startupOrphans;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function isRecord(value) {
|
|
56
|
+
return typeof value === "object" && value !== null;
|
|
57
|
+
}
|
|
58
|
+
function isJournalRow(value) {
|
|
59
|
+
if (!isRecord(value))
|
|
60
|
+
return false;
|
|
61
|
+
return (typeof value["jobId"] === "string" &&
|
|
62
|
+
typeof value["laneId"] === "string" &&
|
|
63
|
+
typeof value["cwd"] === "string" &&
|
|
64
|
+
typeof value["startedAt"] === "number" &&
|
|
65
|
+
(value["spec"] === undefined || typeof value["spec"] === "string"));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=job-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-journal.js","sourceRoot":"","sources":["../../src/mcp/job-journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type JobJournal } from "./job-journal.js";
|
|
1
2
|
import type { DispatchLaneStatus } from "../dispatch-lane-stats.js";
|
|
2
3
|
/** Depth marker written into every child's environment, read back to bound recursion. */
|
|
3
4
|
export declare const DEPTH_ENV = "LLM_RELAY_DISPATCH_DEPTH";
|
|
@@ -20,22 +21,21 @@ export declare const DEFAULT_LANE_TIMEOUT_MS: number;
|
|
|
20
21
|
* lane vs. maybe poll a little longer next time). `complete()` sets it whenever the run result
|
|
21
22
|
* says `timedOut`, ahead of the exit-code/semantic-failure check.
|
|
22
23
|
*/
|
|
23
|
-
export type JobStatus = "running" | "completed" | "failed" | "cancelled" | "timed_out";
|
|
24
|
+
export type JobStatus = "running" | "completed" | "failed" | "cancelled" | "timed_out" | "killed";
|
|
24
25
|
/**
|
|
25
26
|
* The four states `LaneJobStore.complete()`/`cancel()` can put a job into — `"running"` is the
|
|
26
27
|
* only non-terminal member of `JobStatus`. Exported so a rendering test can iterate every
|
|
27
28
|
* terminal status the store actually knows, rather than hand-copying the list a second time.
|
|
28
29
|
*/
|
|
29
|
-
export declare const TERMINAL_JOB_STATUSES: readonly ["completed", "failed", "cancelled", "timed_out"];
|
|
30
|
+
export declare const TERMINAL_JOB_STATUSES: readonly ["completed", "failed", "cancelled", "timed_out", "killed"];
|
|
30
31
|
export type TerminalJobStatus = (typeof TERMINAL_JOB_STATUSES)[number];
|
|
31
32
|
/**
|
|
32
|
-
* Terminal statuses worth reporting as lane telemetry: every terminal status but
|
|
33
|
-
* `
|
|
34
|
-
* reported. Keyed as a `Record` over `Exclude<…, "cancelled">` so a NEW terminal status is
|
|
33
|
+
* Terminal statuses worth reporting as lane telemetry: every terminal status but `cancelled` and
|
|
34
|
+
* `killed` — a caller cancellation is not lane evidence, so it is discarded, never reported. Keyed as a `Record` over `Exclude<…, "cancelled">` so a NEW terminal status is
|
|
35
35
|
* a compile error HERE, at the classifier, rather than a silent drop at the forwarder (the
|
|
36
36
|
* closed-union gotcha in CLAUDE.md); the forwarder ranges over this list, never a hand copy.
|
|
37
37
|
*/
|
|
38
|
-
declare const REPORTABLE_JOB_STATUS_MAP: Record<Exclude<TerminalJobStatus, "cancelled">, true>;
|
|
38
|
+
declare const REPORTABLE_JOB_STATUS_MAP: Record<Exclude<TerminalJobStatus, "cancelled" | "killed">, true>;
|
|
39
39
|
export type ReportableJobStatus = keyof typeof REPORTABLE_JOB_STATUS_MAP;
|
|
40
40
|
export declare const REPORTABLE_JOB_STATUSES: readonly ("completed" | "failed" | "timed_out")[];
|
|
41
41
|
/**
|
|
@@ -175,6 +175,32 @@ export interface LaneJob {
|
|
|
175
175
|
relay?: RelayAnnouncements;
|
|
176
176
|
/** Set when the job's dispatch view came from a fallback rather than the live daemon. */
|
|
177
177
|
dispatchSource?: "daemon" | "fallback";
|
|
178
|
+
/**
|
|
179
|
+
* What this dispatcher started for this job, and what became of it — written once, when the job
|
|
180
|
+
* reaches a terminal state. See `LaneProcessReport`.
|
|
181
|
+
*/
|
|
182
|
+
process?: LaneProcessReport;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The record of one job's OWNED processes, written at the moment the job goes terminal.
|
|
186
|
+
*
|
|
187
|
+
* ⚠ It exists because ownership is the only reliable signal. A stale lane and a slow lane are
|
|
188
|
+
* indistinguishable from the outside (`docs/backlog.md`: one legitimately ran 29 minutes), so a
|
|
189
|
+
* rule based on age would eventually kill a live lane — which is why the dispatcher terminates what
|
|
190
|
+
* IT started, and why what it started is enumerable by job id rather than by hand.
|
|
191
|
+
*
|
|
192
|
+
* `survivors` is the honest half: a termination that did not take is REPORTED, never assumed away.
|
|
193
|
+
* `terminated: false` means no process was ever registered for this job (a pre-spawn failure, or an
|
|
194
|
+
* answer-mode job whose direct HTTP call owns no OS process), and is distinct from `pids: []` with
|
|
195
|
+
* `terminated: true` — the first says "nothing of ours ran", the second says "ours ran and is gone".
|
|
196
|
+
*/
|
|
197
|
+
export interface LaneProcessReport {
|
|
198
|
+
/** Root pids this dispatcher started for the job. */
|
|
199
|
+
pids: number[];
|
|
200
|
+
/** Pids still alive after termination was attempted. */
|
|
201
|
+
survivors: number[];
|
|
202
|
+
/** Whether a termination was attempted at all. */
|
|
203
|
+
terminated: boolean;
|
|
178
204
|
}
|
|
179
205
|
/** What a completed run looks like to a caller. */
|
|
180
206
|
export interface LaneRunResult {
|
|
@@ -232,10 +258,33 @@ export interface LaneSpawnOptions {
|
|
|
232
258
|
* the same discipline `lane-quota-probe.ts` applies, and the reason its default spawner refuses to
|
|
233
259
|
* run under vitest.
|
|
234
260
|
*/
|
|
235
|
-
|
|
236
|
-
|
|
261
|
+
/**
|
|
262
|
+
* What the store needs in order to REAP what a job owns and to report it: a way to stop it, and a
|
|
263
|
+
* way to name what it started.
|
|
264
|
+
*
|
|
265
|
+
* ⚠ Narrower than a spawn handle on purpose. `startLane` wraps the spawner's promise in its own
|
|
266
|
+
* outcome promise, so the value the walk registers is NOT a `LaneSpawnHandle` — typing this seam as
|
|
267
|
+
* one would have forced the walk to register something other than what it actually holds.
|
|
268
|
+
*/
|
|
269
|
+
export interface OwnedProcess {
|
|
270
|
+
/**
|
|
271
|
+
* Terminate the process TREE this spawn started. Idempotent, and safe to call after the child has
|
|
272
|
+
* already exited — the descendants are the whole reason it exists.
|
|
273
|
+
*/
|
|
237
274
|
kill: () => void;
|
|
238
|
-
|
|
275
|
+
/**
|
|
276
|
+
* The root pids this spawn started, read LAZILY.
|
|
277
|
+
*
|
|
278
|
+
* ⚠ A thunk, not a number: the Windows shell fallback REPLACES the root process (an npm `.cmd`
|
|
279
|
+
* shim answers ENOENT and the real child is spawned through `exec`), so the pid is only knowable
|
|
280
|
+
* after the fact. Optional, so a hand-written test double that owns no OS process can omit it.
|
|
281
|
+
*/
|
|
282
|
+
pids?: () => number[];
|
|
283
|
+
}
|
|
284
|
+
export interface LaneSpawnHandle extends OwnedProcess {
|
|
285
|
+
result: Promise<LaneRunResult>;
|
|
286
|
+
}
|
|
287
|
+
export type LaneSpawner = (command: string, args: readonly string[], opts: LaneSpawnOptions) => LaneSpawnHandle;
|
|
239
288
|
type LaneExecError = Error & {
|
|
240
289
|
killed?: boolean | undefined;
|
|
241
290
|
code?: unknown;
|
|
@@ -317,8 +366,62 @@ export declare function readRelayAnnouncements(headers: Headers): RelayAnnouncem
|
|
|
317
366
|
export declare class LaneJobStore {
|
|
318
367
|
private readonly jobs;
|
|
319
368
|
private readonly kills;
|
|
369
|
+
private readonly owned;
|
|
370
|
+
/**
|
|
371
|
+
* Is this pid still alive? Injected so the suite can prove the survivor path without racing a
|
|
372
|
+
* real termination, and so a platform with no `process.kill(pid, 0)` has one place to change.
|
|
373
|
+
*
|
|
374
|
+
* ⚠ `process.kill(pid, 0)` is an EXISTENCE probe, not a signal: it throws ESRCH when the pid is
|
|
375
|
+
* gone and EPERM when it exists but belongs to another user — both of which mean the process the
|
|
376
|
+
* dispatcher started is no longer a usable child.
|
|
377
|
+
*/
|
|
378
|
+
isAlive: (pid: number) => boolean;
|
|
379
|
+
private readonly journal;
|
|
380
|
+
constructor(journal?: JobJournal);
|
|
381
|
+
/**
|
|
382
|
+
* The jobs a PREVIOUS process died holding. They are adopted as terminal `"killed"` rows rather
|
|
383
|
+
* than dropped, because the measured cost of dropping them was ninety lane-minutes lost behind a
|
|
384
|
+
* bare `unknown jobId: job-0051` on a routine poll (2026-09-06).
|
|
385
|
+
*
|
|
386
|
+
* ⚠ No process is terminated here and none could be: this process holds no handle for those pids,
|
|
387
|
+
* and a pid from a previous process may already belong to something else. `process.terminated` is
|
|
388
|
+
* therefore false, and `ownedProcesses()` reports the job as un-reaped rather than claiming a
|
|
389
|
+
* termination that never happened.
|
|
390
|
+
*/
|
|
391
|
+
private adoptOrphans;
|
|
320
392
|
create(laneId: string, spec: string | undefined, cwd: string, dispatchSource?: "daemon" | "fallback"): LaneJob;
|
|
393
|
+
/**
|
|
394
|
+
* Record the process-handle this dispatcher started for `id`, so the job can be REAPED when it
|
|
395
|
+
* reaches a terminal state and so what it owned is reportable afterwards.
|
|
396
|
+
*/
|
|
397
|
+
registerProcess(id: string, handle: OwnedProcess): void;
|
|
398
|
+
/**
|
|
399
|
+
* Register a bare kill callback — the pre-existing seam, kept because a caller that owns no OS
|
|
400
|
+
* process (an answer-mode job's direct HTTP call, or a test double) still has something to stop.
|
|
401
|
+
*/
|
|
321
402
|
registerKill(id: string, kill: () => void): void;
|
|
403
|
+
/**
|
|
404
|
+
* Terminate everything this dispatcher started for `id`, and record what happened. Called from
|
|
405
|
+
* EVERY terminal transition — `complete`, `fail` and `cancel` alike — because "the job ended" and
|
|
406
|
+
* "the job's processes ended" were two different facts on HEAD, and only the second one is true.
|
|
407
|
+
*
|
|
408
|
+
* ⚠ Never throws. A termination failure is data (`survivors`), not an exception: the job is
|
|
409
|
+
* already terminal, and throwing here would replace a reported outcome with a crashed handler.
|
|
410
|
+
*/
|
|
411
|
+
private reap;
|
|
412
|
+
/**
|
|
413
|
+
* Every process this dispatcher started for a TERMINAL job, keyed by job id — so a stale lane can
|
|
414
|
+
* be found without enumerating the machine's processes by hand, which is the only way the
|
|
415
|
+
* measured case was ever found (four `opencode` processes, ~530 MB, burning CPU hours after their
|
|
416
|
+
* jobs had returned, appearing in no `dispatch_status` listing).
|
|
417
|
+
*
|
|
418
|
+
* A still-running job is deliberately absent: it owns its processes on purpose.
|
|
419
|
+
*/
|
|
420
|
+
ownedProcesses(): Array<{
|
|
421
|
+
jobId: string;
|
|
422
|
+
laneId: string;
|
|
423
|
+
spec: string | undefined;
|
|
424
|
+
} & LaneProcessReport>;
|
|
322
425
|
/**
|
|
323
426
|
* Point a still-RUNNING walk at the lane it has just moved to, so a `dispatch_status` poll
|
|
324
427
|
* names the lane currently doing the work rather than the one already abandoned.
|
package/dist/mcp/lane-runner.js
CHANGED
|
@@ -2,13 +2,20 @@ import { exec, execFile, execSync } from "node:child_process";
|
|
|
2
2
|
import { existsSync, statSync } from "node:fs";
|
|
3
3
|
import { resolve as resolvePath } from "node:path";
|
|
4
4
|
import { quoteCmdArg } from "../lane-probe.js";
|
|
5
|
+
import { nullJobJournal } from "./job-journal.js";
|
|
5
6
|
import { classifyLaneProbeOutput } from "../lane-quota-probe.js";
|
|
6
7
|
import { laneOfRung } from "../lane-manifest.js";
|
|
7
8
|
export const DEPTH_ENV = "LLM_RELAY_DISPATCH_DEPTH";
|
|
8
9
|
export const DEFAULT_MAX_DEPTH = 3;
|
|
9
10
|
export const MAX_OUTPUT_BYTES = 16 * 1024 * 1024;
|
|
10
11
|
export const DEFAULT_LANE_TIMEOUT_MS = 30 * 60 * 1000;
|
|
11
|
-
export const TERMINAL_JOB_STATUSES = [
|
|
12
|
+
export const TERMINAL_JOB_STATUSES = [
|
|
13
|
+
"completed",
|
|
14
|
+
"failed",
|
|
15
|
+
"cancelled",
|
|
16
|
+
"timed_out",
|
|
17
|
+
"killed",
|
|
18
|
+
];
|
|
12
19
|
const REPORTABLE_JOB_STATUS_MAP = {
|
|
13
20
|
completed: true,
|
|
14
21
|
failed: true,
|
|
@@ -208,6 +215,7 @@ export function createLaneSpawner(processApi, hostEnv = process.env) {
|
|
|
208
215
|
}
|
|
209
216
|
child?.kill();
|
|
210
217
|
},
|
|
218
|
+
pids: () => (child?.pid === undefined ? [] : [child.pid]),
|
|
211
219
|
};
|
|
212
220
|
};
|
|
213
221
|
}
|
|
@@ -241,6 +249,18 @@ export function readRelayAnnouncements(headers) {
|
|
|
241
249
|
}
|
|
242
250
|
return out;
|
|
243
251
|
}
|
|
252
|
+
function readOwnedPids(handle) {
|
|
253
|
+
if (handle?.pids === undefined)
|
|
254
|
+
return [];
|
|
255
|
+
let raw;
|
|
256
|
+
try {
|
|
257
|
+
raw = handle.pids();
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
return raw.filter((pid) => Number.isSafeInteger(pid) && pid > 0);
|
|
263
|
+
}
|
|
244
264
|
let jobCounter = 0;
|
|
245
265
|
function nextJobId() {
|
|
246
266
|
jobCounter += 1;
|
|
@@ -249,6 +269,45 @@ function nextJobId() {
|
|
|
249
269
|
export class LaneJobStore {
|
|
250
270
|
jobs = new Map();
|
|
251
271
|
kills = new Map();
|
|
272
|
+
owned = new Map();
|
|
273
|
+
isAlive = (pid) => {
|
|
274
|
+
try {
|
|
275
|
+
process.kill(pid, 0);
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
return e.code === "EPERM";
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
journal;
|
|
283
|
+
constructor(journal = nullJobJournal) {
|
|
284
|
+
this.journal = journal;
|
|
285
|
+
this.adoptOrphans();
|
|
286
|
+
}
|
|
287
|
+
adoptOrphans() {
|
|
288
|
+
for (const row of this.journal.orphans()) {
|
|
289
|
+
if (this.jobs.has(row.jobId))
|
|
290
|
+
continue;
|
|
291
|
+
this.jobs.set(row.jobId, {
|
|
292
|
+
id: row.jobId,
|
|
293
|
+
status: "killed",
|
|
294
|
+
laneId: row.laneId,
|
|
295
|
+
spec: row.spec,
|
|
296
|
+
startedAt: row.startedAt,
|
|
297
|
+
endedAt: row.startedAt,
|
|
298
|
+
exitCode: null,
|
|
299
|
+
stdout: "",
|
|
300
|
+
stderr: "",
|
|
301
|
+
timedOut: false,
|
|
302
|
+
cwd: row.cwd,
|
|
303
|
+
error: `the llm-relay MCP server restarted while ${row.jobId} was running on lane "${row.laneId}", ` +
|
|
304
|
+
"so the lane was killed with it. Nothing was collected from it — check the working " +
|
|
305
|
+
"directory for partial files before re-dispatching.",
|
|
306
|
+
attempts: [],
|
|
307
|
+
process: { pids: [], survivors: [], terminated: false },
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
252
311
|
create(laneId, spec, cwd, dispatchSource) {
|
|
253
312
|
const job = {
|
|
254
313
|
id: nextJobId(),
|
|
@@ -267,10 +326,57 @@ export class LaneJobStore {
|
|
|
267
326
|
...(dispatchSource !== undefined ? { dispatchSource } : {}),
|
|
268
327
|
};
|
|
269
328
|
this.jobs.set(job.id, job);
|
|
329
|
+
this.journal.note({
|
|
330
|
+
jobId: job.id,
|
|
331
|
+
laneId: job.laneId,
|
|
332
|
+
...(job.spec === undefined ? {} : { spec: job.spec }),
|
|
333
|
+
cwd: job.cwd,
|
|
334
|
+
startedAt: job.startedAt,
|
|
335
|
+
});
|
|
270
336
|
return job;
|
|
271
337
|
}
|
|
338
|
+
registerProcess(id, handle) {
|
|
339
|
+
this.kills.set(id, handle.kill);
|
|
340
|
+
this.owned.set(id, handle);
|
|
341
|
+
}
|
|
272
342
|
registerKill(id, kill) {
|
|
273
343
|
this.kills.set(id, kill);
|
|
344
|
+
this.owned.set(id, { kill });
|
|
345
|
+
}
|
|
346
|
+
reap(id) {
|
|
347
|
+
const job = this.jobs.get(id);
|
|
348
|
+
const handle = this.owned.get(id);
|
|
349
|
+
const kill = this.kills.get(id);
|
|
350
|
+
this.kills.delete(id);
|
|
351
|
+
this.owned.delete(id);
|
|
352
|
+
this.journal.clear(id);
|
|
353
|
+
if (!job)
|
|
354
|
+
return;
|
|
355
|
+
const pids = readOwnedPids(handle);
|
|
356
|
+
if (kill === undefined) {
|
|
357
|
+
job.process = { pids, survivors: [], terminated: false };
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
kill();
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
}
|
|
365
|
+
job.process = { pids, survivors: pids.filter((pid) => this.isAlive(pid)), terminated: true };
|
|
366
|
+
}
|
|
367
|
+
ownedProcesses() {
|
|
368
|
+
const rows = [];
|
|
369
|
+
for (const job of this.jobs.values()) {
|
|
370
|
+
if (job.status === "running" || job.process === undefined)
|
|
371
|
+
continue;
|
|
372
|
+
rows.push({
|
|
373
|
+
jobId: job.id,
|
|
374
|
+
laneId: job.laneId,
|
|
375
|
+
spec: job.spec,
|
|
376
|
+
...job.process,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return rows;
|
|
274
380
|
}
|
|
275
381
|
setCurrentLane(id, laneId, spec) {
|
|
276
382
|
const job = this.jobs.get(id);
|
|
@@ -332,7 +438,7 @@ export class LaneJobStore {
|
|
|
332
438
|
if (semanticFailure !== undefined)
|
|
333
439
|
job.error = semanticFailure;
|
|
334
440
|
}
|
|
335
|
-
this.
|
|
441
|
+
this.reap(id);
|
|
336
442
|
}
|
|
337
443
|
fail(id, error) {
|
|
338
444
|
const job = this.jobs.get(id);
|
|
@@ -341,7 +447,7 @@ export class LaneJobStore {
|
|
|
341
447
|
job.status = "failed";
|
|
342
448
|
job.error = error;
|
|
343
449
|
job.endedAt = Date.now();
|
|
344
|
-
this.
|
|
450
|
+
this.reap(id);
|
|
345
451
|
}
|
|
346
452
|
cancel(id) {
|
|
347
453
|
const job = this.jobs.get(id);
|
|
@@ -349,15 +455,15 @@ export class LaneJobStore {
|
|
|
349
455
|
return false;
|
|
350
456
|
if (job.status !== "running")
|
|
351
457
|
return false;
|
|
352
|
-
this.kills.get(id)?.();
|
|
353
|
-
this.kills.delete(id);
|
|
354
458
|
job.status = "cancelled";
|
|
355
459
|
job.endedAt = Date.now();
|
|
460
|
+
this.reap(id);
|
|
356
461
|
return true;
|
|
357
462
|
}
|
|
358
463
|
cancelAll() {
|
|
359
|
-
for (const id of [...this.
|
|
464
|
+
for (const id of [...this.jobs.values()].filter((j) => j.status === "running").map((j) => j.id)) {
|
|
360
465
|
this.cancel(id);
|
|
466
|
+
}
|
|
361
467
|
}
|
|
362
468
|
}
|
|
363
469
|
export function checkCwd(cwd, allowedRoots) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-runner.js","sourceRoot":"","sources":["../../src/mcp/lane-runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lane-runner.js","sourceRoot":"","sources":["../../src/mcp/lane-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Whether a dispatch was declared read-only, and what it was going to run. */
|
|
2
|
+
export interface ReadOnlyRequest {
|
|
3
|
+
/** The caller declared this dispatch must not mutate anything. */
|
|
4
|
+
readOnly: boolean;
|
|
5
|
+
/** `"answer"` posts to the relay and spawns no harness, so it has no filesystem access. */
|
|
6
|
+
mode: "agent" | "answer";
|
|
7
|
+
/** The working directory the dispatch would use, before any default is applied. */
|
|
8
|
+
cwd: string | undefined;
|
|
9
|
+
/** The tree the caller is protecting — its own checkout. */
|
|
10
|
+
callerRoot: string;
|
|
11
|
+
}
|
|
12
|
+
export type ReadOnlyVerdict = {
|
|
13
|
+
ok: true;
|
|
14
|
+
cwd: string;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
refusal: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Decide whether a read-only dispatch may proceed, and say why not when it may not.
|
|
21
|
+
*
|
|
22
|
+
* Containment is tested on RESOLVED paths with a separator boundary, never a bare `startsWith`:
|
|
23
|
+
* `C:/caller/tree-other` shares a prefix with `C:/caller/tree` and is not inside it, and a literal
|
|
24
|
+
* `..` segment resolves at the OS level before the comparison — the `checkCwd` defect closed
|
|
25
|
+
* 2026-09-03 (docs/audit-findings-2026-09-03.md finding 1 / DR-002), applied here in the direction
|
|
26
|
+
* where getting it wrong would WRONGLY PERMIT a mutation.
|
|
27
|
+
*
|
|
28
|
+
* Answer mode is always allowed: `startLane` skips the cwd/spawn path entirely for a `relay` rung
|
|
29
|
+
* in answer mode, so there is no process and no working directory to confine.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readOnlyVerdict(req: ReadOnlyRequest): ReadOnlyVerdict;
|
|
32
|
+
/** Resolve the directory a dispatch will actually run in: the caller's `cwd`, else the default. */
|
|
33
|
+
export declare function resolveReadOnlyCwd(cwd: string | undefined, fallback?: string): string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { resolve as resolvePath } from "node:path";
|
|
2
|
+
export function readOnlyVerdict(req) {
|
|
3
|
+
if (!req.readOnly)
|
|
4
|
+
return { ok: true, cwd: resolveReadOnlyCwd(req.cwd) };
|
|
5
|
+
if (req.mode === "answer")
|
|
6
|
+
return { ok: true, cwd: resolveReadOnlyCwd(req.cwd) };
|
|
7
|
+
const cwd = resolveReadOnlyCwd(req.cwd, req.callerRoot);
|
|
8
|
+
if (!isInside(cwd, req.callerRoot))
|
|
9
|
+
return { ok: true, cwd };
|
|
10
|
+
return {
|
|
11
|
+
ok: false,
|
|
12
|
+
refusal: "dispatch refused: this dispatch is declared read-only, but its working directory " +
|
|
13
|
+
`(${cwd}) is inside the caller's own tree (${resolvePath(req.callerRoot)}). A read-only lane's ` +
|
|
14
|
+
"write tools would reach the files it is only reviewing — the measured case committed and " +
|
|
15
|
+
"pushed the caller's in-progress work, and another silently reverted a staged file. Either " +
|
|
16
|
+
"pass `cwd` pointing at a separate checkout, or use mode \"answer\", which posts straight to " +
|
|
17
|
+
"the relay and spawns no harness so it cannot touch the filesystem at all.",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function resolveReadOnlyCwd(cwd, fallback) {
|
|
21
|
+
return resolvePath(cwd ?? fallback ?? process.cwd());
|
|
22
|
+
}
|
|
23
|
+
function isInside(candidate, root) {
|
|
24
|
+
const c = normalize(candidate);
|
|
25
|
+
const r = normalize(resolvePath(root));
|
|
26
|
+
return c === r || c.startsWith(r.endsWith("/") ? r : `${r}/`);
|
|
27
|
+
}
|
|
28
|
+
function normalize(p) {
|
|
29
|
+
let unified = p.split("\\").join("/");
|
|
30
|
+
let end = unified.length;
|
|
31
|
+
while (end > 0 && unified[end - 1] === "/")
|
|
32
|
+
end -= 1;
|
|
33
|
+
unified = unified.slice(0, end);
|
|
34
|
+
return process.platform === "win32" ? unified.toLowerCase() : unified;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=readonly-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readonly-boundary.js","sourceRoot":"","sources":["../../src/mcp/readonly-boundary.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AA4BnD,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IACjF,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7D,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EACL,mFAAmF;YACnF,IAAI,GAAG,sCAAsC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,wBAAwB;YAChG,2FAA2F;YAC3F,4FAA4F;YAC5F,8FAA8F;YAC9F,2EAA2E;KAC9E,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAAC,GAAuB,EAAE,QAAiB;IAC3E,OAAO,WAAW,CAAC,GAAG,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC;AAMD,SAAS,QAAQ,CAAC,SAAiB,EAAE,IAAY;IAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC;AAGD,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,OAAO,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,IAAI,CAAC,CAAC;IACrD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACxE,CAAC"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type { Config } from "../config.js";
|
|
|
24
24
|
import type { DispatchView } from "../dispatch.js";
|
|
25
25
|
import type { DispatchedTelemetryReport } from "../dispatch-lane-stats.js";
|
|
26
26
|
import { type AnswerFetch, type LaneSpawner, type DispatchedQuotaReport } from "./lane-runner.js";
|
|
27
|
+
import { type JobJournal } from "./job-journal.js";
|
|
27
28
|
export declare const MCP_SERVER_NAME = "llm-relay";
|
|
28
29
|
/** `max_tokens` for an answer-mode call when the caller names none. */
|
|
29
30
|
export declare const DEFAULT_ANSWER_MAX_TOKENS = 4096;
|
|
@@ -67,6 +68,12 @@ export interface McpServerDeps {
|
|
|
67
68
|
* never the lane's output.
|
|
68
69
|
*/
|
|
69
70
|
reportTelemetry?: (report: DispatchedTelemetryReport) => Promise<void> | void;
|
|
71
|
+
/**
|
|
72
|
+
* The running-job journal. Absent ⇒ `nullJobJournal`, which records nothing: a programmatic
|
|
73
|
+
* embed that does not want a file gets the pre-journal behaviour exactly. `cli.ts` passes the
|
|
74
|
+
* real one, so a host-launched server can report the jobs a previous instance died holding.
|
|
75
|
+
*/
|
|
76
|
+
journal?: JobJournal;
|
|
70
77
|
write: (chunk: string) => void;
|
|
71
78
|
}
|
|
72
79
|
/**
|