@mindfoldhq/trellis 0.6.0-beta.17 → 0.6.0-beta.18
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/README.md +1 -1
- package/dist/commands/channel/adapters/claude.d.ts +7 -16
- package/dist/commands/channel/adapters/claude.d.ts.map +1 -1
- package/dist/commands/channel/adapters/claude.js +19 -25
- package/dist/commands/channel/adapters/claude.js.map +1 -1
- package/dist/commands/channel/adapters/codex.d.ts +5 -1
- package/dist/commands/channel/adapters/codex.d.ts.map +1 -1
- package/dist/commands/channel/adapters/codex.js +8 -15
- package/dist/commands/channel/adapters/codex.js.map +1 -1
- package/dist/commands/channel/adapters/index.d.ts +6 -1
- package/dist/commands/channel/adapters/index.d.ts.map +1 -1
- package/dist/commands/channel/adapters/index.js +12 -6
- package/dist/commands/channel/adapters/index.js.map +1 -1
- package/dist/commands/channel/guard.d.ts +150 -0
- package/dist/commands/channel/guard.d.ts.map +1 -0
- package/dist/commands/channel/guard.js +474 -0
- package/dist/commands/channel/guard.js.map +1 -0
- package/dist/commands/channel/index.d.ts +1 -1
- package/dist/commands/channel/index.d.ts.map +1 -1
- package/dist/commands/channel/index.js +38 -10
- package/dist/commands/channel/index.js.map +1 -1
- package/dist/commands/channel/interrupt.d.ts +10 -0
- package/dist/commands/channel/interrupt.d.ts.map +1 -0
- package/dist/commands/channel/interrupt.js +22 -0
- package/dist/commands/channel/interrupt.js.map +1 -0
- package/dist/commands/channel/messages.d.ts +0 -1
- package/dist/commands/channel/messages.d.ts.map +1 -1
- package/dist/commands/channel/messages.js +2 -6
- package/dist/commands/channel/messages.js.map +1 -1
- package/dist/commands/channel/run.d.ts +0 -1
- package/dist/commands/channel/run.d.ts.map +1 -1
- package/dist/commands/channel/run.js +5 -12
- package/dist/commands/channel/run.js.map +1 -1
- package/dist/commands/channel/send.d.ts +0 -2
- package/dist/commands/channel/send.d.ts.map +1 -1
- package/dist/commands/channel/send.js +0 -2
- package/dist/commands/channel/send.js.map +1 -1
- package/dist/commands/channel/spawn.d.ts +10 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -1
- package/dist/commands/channel/spawn.js +57 -7
- package/dist/commands/channel/spawn.js.map +1 -1
- package/dist/commands/channel/supervisor/idle.d.ts +46 -0
- package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/idle.js +72 -0
- package/dist/commands/channel/supervisor/idle.js.map +1 -0
- package/dist/commands/channel/supervisor/inbox.d.ts +4 -4
- package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -1
- package/dist/commands/channel/supervisor/inbox.js +22 -22
- package/dist/commands/channel/supervisor/inbox.js.map +1 -1
- package/dist/commands/channel/supervisor/shutdown.d.ts +3 -1
- package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -1
- package/dist/commands/channel/supervisor/shutdown.js +4 -1
- package/dist/commands/channel/supervisor/shutdown.js.map +1 -1
- package/dist/commands/channel/supervisor/turns.d.ts +11 -0
- package/dist/commands/channel/supervisor/turns.d.ts.map +1 -1
- package/dist/commands/channel/supervisor/turns.js +19 -2
- package/dist/commands/channel/supervisor/turns.js.map +1 -1
- package/dist/commands/channel/supervisor.d.ts +6 -0
- package/dist/commands/channel/supervisor.d.ts.map +1 -1
- package/dist/commands/channel/supervisor.js +43 -3
- package/dist/commands/channel/supervisor.js.map +1 -1
- package/dist/commands/channel/wait.d.ts +0 -1
- package/dist/commands/channel/wait.d.ts.map +1 -1
- package/dist/commands/channel/wait.js +0 -1
- package/dist/commands/channel/wait.js.map +1 -1
- package/dist/migrations/manifests/0.5.16.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
- package/dist/templates/trellis/config.yaml +20 -0
- package/dist/templates/trellis/scripts/common/task_store.py +24 -7
- package/package.json +2 -2
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supervisor-side idle-timeout timer.
|
|
3
|
+
*
|
|
4
|
+
* Complements the spawn-time guard: each running worker self-terminates
|
|
5
|
+
* after its own idle TTL so a long-lived supervisor can't keep an
|
|
6
|
+
* otherwise-idle worker alive indefinitely.
|
|
7
|
+
*
|
|
8
|
+
* Behavior:
|
|
9
|
+
* - Start an idle timer right after `spawned`.
|
|
10
|
+
* - Reset / restart on `turn_finished` and `interrupted` (worker
|
|
11
|
+
* transitioned back to idle).
|
|
12
|
+
* - Pause on `turn_started` (worker is mid-turn; never kill mid-turn).
|
|
13
|
+
* - On idle timeout, call `shutdown.request("SIGTERM", "idle-timeout")`.
|
|
14
|
+
*
|
|
15
|
+
* Lives outside `createShutdown` so the shutdown funnel only owns the
|
|
16
|
+
* kill ladder + `killed` append. Cancellation is via the returned
|
|
17
|
+
* handle (used on supervisor teardown).
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Schedule a self-resetting idle timer. `idleTimeoutMs <= 0` short-
|
|
21
|
+
* circuits to a no-op handle (idle cleanup disabled).
|
|
22
|
+
*/
|
|
23
|
+
export function scheduleSupervisorIdleTimer(args) {
|
|
24
|
+
const { idleTimeoutMs, shutdown, isChildExited, log } = args;
|
|
25
|
+
if (idleTimeoutMs <= 0) {
|
|
26
|
+
return {
|
|
27
|
+
reset: () => undefined,
|
|
28
|
+
pause: () => undefined,
|
|
29
|
+
cancel: () => undefined,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
let timer;
|
|
33
|
+
let cancelled = false;
|
|
34
|
+
const clear = () => {
|
|
35
|
+
if (timer) {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
timer = undefined;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const fire = () => {
|
|
41
|
+
timer = undefined;
|
|
42
|
+
if (cancelled)
|
|
43
|
+
return;
|
|
44
|
+
if (shutdown.isShuttingDown() ||
|
|
45
|
+
shutdown.hasTerminalEvent() ||
|
|
46
|
+
isChildExited()) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
log.write(`[supervisor] idle timeout ${idleTimeoutMs}ms reached, requesting shutdown\n`);
|
|
50
|
+
void shutdown.request("SIGTERM", "idle-timeout");
|
|
51
|
+
};
|
|
52
|
+
const start = () => {
|
|
53
|
+
if (cancelled)
|
|
54
|
+
return;
|
|
55
|
+
clear();
|
|
56
|
+
timer = setTimeout(fire, idleTimeoutMs);
|
|
57
|
+
// Don't keep the supervisor alive solely for the idle timer; if
|
|
58
|
+
// every other handle has gone away the worker has nothing to do.
|
|
59
|
+
timer.unref?.();
|
|
60
|
+
};
|
|
61
|
+
// Initial schedule: worker just spawned, currently idle.
|
|
62
|
+
start();
|
|
63
|
+
return {
|
|
64
|
+
reset: start,
|
|
65
|
+
pause: clear,
|
|
66
|
+
cancel: () => {
|
|
67
|
+
cancelled = true;
|
|
68
|
+
clear();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=idle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/idle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0BH;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAA2B;IAE3B,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7D,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;YACtB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;YACtB,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,KAAgD,CAAC;IACrD,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,KAAK,GAAG,SAAS,CAAC;QAClB,IAAI,SAAS;YAAE,OAAO;QACtB,IACE,QAAQ,CAAC,cAAc,EAAE;YACzB,QAAQ,CAAC,gBAAgB,EAAE;YAC3B,aAAa,EAAE,EACf,CAAC;YACD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,KAAK,CACP,6BAA6B,aAAa,mCAAmC,CAC9E,CAAC;QACF,KAAK,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,SAAS;YAAE,OAAO;QACtB,KAAK,EAAE,CAAC;QACR,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACxC,gEAAgE;QAChE,iEAAiE;QACjE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,yDAAyD;IACzD,KAAK,EAAE,CAAC;IAER,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,GAAG,EAAE;YACX,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inbox watcher: tails events.jsonl for
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Inbox watcher: tails events.jsonl for worker-addressed messages and
|
|
3
|
+
* interrupt requests, then forwards accepted input into the worker's stdin.
|
|
4
|
+
* A persisted cursor file keeps respawns from replaying events the previous
|
|
5
|
+
* supervisor already delivered.
|
|
6
6
|
*
|
|
7
7
|
* Step 3 of the supervisor refactor: pulled out of supervisor.ts so the
|
|
8
8
|
* orchestrator only needs to call `runInboxWatcher(...)`. Cursor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH3E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Inbox watcher: tails events.jsonl for
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Inbox watcher: tails events.jsonl for worker-addressed messages and
|
|
3
|
+
* interrupt requests, then forwards accepted input into the worker's stdin.
|
|
4
|
+
* A persisted cursor file keeps respawns from replaying events the previous
|
|
5
|
+
* supervisor already delivered.
|
|
6
6
|
*
|
|
7
7
|
* Step 3 of the supervisor refactor: pulled out of supervisor.ts so the
|
|
8
8
|
* orchestrator only needs to call `runInboxWatcher(...)`. Cursor
|
|
@@ -21,8 +21,7 @@ export async function runInboxWatcher(args) {
|
|
|
21
21
|
let cursor = readInboxCursor(channelName, workerName);
|
|
22
22
|
for await (const ev of watchEvents(channelName, {
|
|
23
23
|
self: workerName, // ignore our own events
|
|
24
|
-
|
|
25
|
-
kind: "message",
|
|
24
|
+
kind: ["message", "interrupt_requested"],
|
|
26
25
|
},
|
|
27
26
|
// First run with cursor=0 reads backlog from start; subsequent runs
|
|
28
27
|
// use sinceSeq to skip already-processed events. Both cases tail
|
|
@@ -30,15 +29,21 @@ export async function runInboxWatcher(args) {
|
|
|
30
29
|
{ signal, sinceSeq: cursor, fromStart: cursor === 0 ? true : undefined })) {
|
|
31
30
|
if (signal.aborted)
|
|
32
31
|
return;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
if (ev.kind === "message") {
|
|
33
|
+
// Core decides delivery from the worker's inbox policy: explicitOnly
|
|
34
|
+
// (default) consumes only targeted messages; broadcastAndExplicit
|
|
35
|
+
// also consumes broadcasts.
|
|
36
|
+
if (!matchesInboxPolicy(ev, workerName, inboxPolicy))
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
else if (ev.worker !== workerName) {
|
|
37
40
|
continue;
|
|
41
|
+
}
|
|
38
42
|
const text = (ev.text ?? "").trim();
|
|
39
|
-
|
|
43
|
+
const interruptText = (ev.message ?? "").trim();
|
|
44
|
+
const isInterrupt = ev.kind === "interrupt_requested";
|
|
45
|
+
if (!text && (!isInterrupt || !interruptText))
|
|
40
46
|
continue;
|
|
41
|
-
const tag = ev.tag;
|
|
42
47
|
// Block until the adapter says it can accept input (e.g. codex
|
|
43
48
|
// thread/start has produced a threadId). Drop the message if we
|
|
44
49
|
// never get ready before being aborted.
|
|
@@ -57,19 +62,12 @@ export async function runInboxWatcher(args) {
|
|
|
57
62
|
continue;
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
|
-
if (
|
|
65
|
+
if (!isInterrupt) {
|
|
61
66
|
await waitForActiveTurnToFinish(args.turnTracker, signal);
|
|
62
67
|
if (signal.aborted)
|
|
63
68
|
return;
|
|
64
69
|
}
|
|
65
|
-
if (
|
|
66
|
-
await appendEvent(channelName, {
|
|
67
|
-
kind: "interrupt_requested",
|
|
68
|
-
by: ev.by,
|
|
69
|
-
worker: workerName,
|
|
70
|
-
reason: "user",
|
|
71
|
-
message: text,
|
|
72
|
-
});
|
|
70
|
+
if (isInterrupt) {
|
|
73
71
|
const aborted = args.turnTracker?.abortCurrent();
|
|
74
72
|
if (aborted) {
|
|
75
73
|
await appendEvent(channelName, {
|
|
@@ -102,7 +100,9 @@ export async function runInboxWatcher(args) {
|
|
|
102
100
|
turnId: turn.turnId,
|
|
103
101
|
});
|
|
104
102
|
}
|
|
105
|
-
child.stdin.write(
|
|
103
|
+
child.stdin.write(isInterrupt
|
|
104
|
+
? adapter.encodeInterruptMessage(interruptText, ctx)
|
|
105
|
+
: adapter.encodeUserMessage(text, ctx));
|
|
106
106
|
cursor = ev.seq;
|
|
107
107
|
writeInboxCursor(channelName, workerName, cursor);
|
|
108
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBhD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAC7D,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEtD,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,WAAW,CAChC,WAAW,EACX;QACE,IAAI,EAAE,UAAU,EAAE,wBAAwB;QAC1C,
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBhD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAC7D,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEtD,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,WAAW,CAChC,WAAW,EACX;QACE,IAAI,EAAE,UAAU,EAAE,wBAAwB;QAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC;KACzC;IACD,oEAAoE;IACpE,iEAAiE;IACjE,0BAA0B;IAC1B,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CACzE,EAAE,CAAC;QACF,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO;QAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1B,qEAAqE;YACrE,kEAAkE;YAClE,4BAA4B;YAC5B,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC;gBAAE,SAAS;QACjE,CAAC;aAAM,IAAK,EAA0B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,CAAE,EAAwB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,aAAa,GAAG,CAAE,EAA2B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,KAAK,qBAAqB,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC;YAAE,SAAS;QAExD,+DAA+D;QAC/D,gEAAgE;QAChE,wCAAwC;QACxC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YACrC,OACE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;gBACrB,CAAC,MAAM,CAAC,OAAO,EACf,CAAC;gBACD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,4DAA4D;gBAC5D,6CAA6C;gBAC7C,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC1D,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO;QAC7B,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,WAAW,CAAC,WAAW,EAAE;oBAC7B,IAAI,EAAE,eAAe;oBACrB,EAAE,EAAE,UAAU;oBACd,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,WAAW,CAAC,WAAW,EAAE;gBAC7B,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB;aACpD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,WAAW,CAAC,WAAW,EAAE;oBAC7B,IAAI,EAAE,cAAc;oBACpB,EAAE,EAAE,UAAU;oBACd,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,EAAE,CAAC,GAAG;oBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,KAAK,CACf,WAAW;gBACT,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC;gBACpD,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CACzC,CAAC;YACF,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;YAChB,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAC3B,MAAM,WAAW,CAAC,WAAW,EAAE;oBAC7B,IAAI,EAAE,eAAe;oBACrB,EAAE,EAAE,UAAU;oBACd,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;YACD,0CAA0C;YAC1C,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,WAAmB,EAAE,UAAkB;IAC9D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CACzB,UAAU,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,EACnD,OAAO,CACR,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,UAAkB,EAClB,GAAW;IAEX,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CACd,UAAU,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,EACnD,MAAM,CAAC,GAAG,CAAC,EACX,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,WAAoC,EACpC,MAAmB;IAEnB,OAAO,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
import type { ChildProcessByStdio } from "node:child_process";
|
|
23
23
|
import type { Readable, Writable } from "node:stream";
|
|
24
24
|
type Child = ChildProcessByStdio<Writable, Readable, Readable>;
|
|
25
|
-
export type ShutdownReason = "explicit-kill" | "timeout" | "crash";
|
|
25
|
+
export type ShutdownReason = "explicit-kill" | "timeout" | "crash" | "idle-timeout";
|
|
26
26
|
export interface ShutdownController {
|
|
27
27
|
/** Idempotent: only the first call wins. Returns the killed-append
|
|
28
28
|
* promise so callers can await ordering if they need to. */
|
|
@@ -60,6 +60,8 @@ export interface CreateShutdownArgs {
|
|
|
60
60
|
graceMs: number;
|
|
61
61
|
/** Recorded on the `killed` event for the timeout reason. */
|
|
62
62
|
timeoutMs?: number;
|
|
63
|
+
/** Recorded on the `killed` event when reason is `"idle-timeout"`. */
|
|
64
|
+
idleTimeoutMs?: number;
|
|
63
65
|
}
|
|
64
66
|
export declare function createShutdown(args: CreateShutdownArgs): ShutdownController;
|
|
65
67
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,SAAS,GACT,OAAO,GACP,cAAc,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IACjC;iEAC6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE;;;;;4EAKwE;IACxE,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;IACvC,cAAc,IAAI,OAAO,CAAC;IAC1B,MAAM,IAAI,cAAc,GAAG,IAAI,CAAC;IAEhC;wDACoD;IACpD,mBAAmB,IAAI,IAAI,CAAC;IAC5B,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;qEAEiE;IACjE,cAAc,CACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;2EACuE;IACvE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACvC;iEAC6D;IAC7D,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAkJ3E"}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { appendEvent } from "../store/events.js";
|
|
23
23
|
export function createShutdown(args) {
|
|
24
|
-
const { channelName, workerName, log, getChild, graceMs, timeoutMs } = args;
|
|
24
|
+
const { channelName, workerName, log, getChild, graceMs, timeoutMs, idleTimeoutMs, } = args;
|
|
25
25
|
let shutdownReason = null;
|
|
26
26
|
let requestSignal = null;
|
|
27
27
|
let terminalEmitted = false;
|
|
@@ -64,6 +64,9 @@ export function createShutdown(args) {
|
|
|
64
64
|
reason,
|
|
65
65
|
signal,
|
|
66
66
|
...(reason === "timeout" && timeoutMs ? { timeout_ms: timeoutMs } : {}),
|
|
67
|
+
...(reason === "idle-timeout" && idleTimeoutMs
|
|
68
|
+
? { idle_timeout_ms: idleTimeoutMs }
|
|
69
|
+
: {}),
|
|
67
70
|
});
|
|
68
71
|
};
|
|
69
72
|
const claim = (reason) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,15 +3,26 @@ export interface ActiveTurn {
|
|
|
3
3
|
turnId: string;
|
|
4
4
|
}
|
|
5
5
|
export type TurnOutcome = "done" | "error" | "aborted";
|
|
6
|
+
export interface TurnTrackerHooks {
|
|
7
|
+
/** Called when the tracker transitions from idle to mid-turn. */
|
|
8
|
+
onIdleExit?: () => void;
|
|
9
|
+
/** Called when the tracker transitions back to idle. */
|
|
10
|
+
onIdleEnter?: () => void;
|
|
11
|
+
}
|
|
6
12
|
/**
|
|
7
13
|
* Host-local turn tracker for one supervisor process.
|
|
8
14
|
*
|
|
9
15
|
* The durable SOT is events.jsonl. This object only remembers the input
|
|
10
16
|
* message seq long enough for the inbox watcher and stdout pump to emit
|
|
11
17
|
* matching `turn_started` / `turn_finished` events.
|
|
18
|
+
*
|
|
19
|
+
* Optional hooks fire on the idle ↔ mid-turn transition so the
|
|
20
|
+
* supervisor idle-timer (OOM guard) can pause / reset without each
|
|
21
|
+
* inbox or stdout call site having to know about it.
|
|
12
22
|
*/
|
|
13
23
|
export declare class TurnTracker {
|
|
14
24
|
#private;
|
|
25
|
+
constructor(hooks?: TurnTrackerHooks);
|
|
15
26
|
begin(inputSeq: number): ActiveTurn;
|
|
16
27
|
finish(): ActiveTurn | undefined;
|
|
17
28
|
abortCurrent(): ActiveTurn | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;;gBAIV,KAAK,GAAE,gBAAqB;IAIxC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAWnC,MAAM,IAAI,UAAU,GAAG,SAAS;IAMhC,YAAY,IAAI,UAAU,GAAG,SAAS;IAMtC,OAAO,IAAI,UAAU,GAAG,SAAS;CAGlC"}
|
|
@@ -4,22 +4,39 @@
|
|
|
4
4
|
* The durable SOT is events.jsonl. This object only remembers the input
|
|
5
5
|
* message seq long enough for the inbox watcher and stdout pump to emit
|
|
6
6
|
* matching `turn_started` / `turn_finished` events.
|
|
7
|
+
*
|
|
8
|
+
* Optional hooks fire on the idle ↔ mid-turn transition so the
|
|
9
|
+
* supervisor idle-timer (OOM guard) can pause / reset without each
|
|
10
|
+
* inbox or stdout call site having to know about it.
|
|
7
11
|
*/
|
|
8
12
|
export class TurnTracker {
|
|
9
13
|
#turns = [];
|
|
14
|
+
#hooks;
|
|
15
|
+
constructor(hooks = {}) {
|
|
16
|
+
this.#hooks = hooks;
|
|
17
|
+
}
|
|
10
18
|
begin(inputSeq) {
|
|
19
|
+
const wasIdle = this.#turns.length === 0;
|
|
11
20
|
const turn = {
|
|
12
21
|
inputSeq,
|
|
13
22
|
turnId: `msg:${inputSeq}`,
|
|
14
23
|
};
|
|
15
24
|
this.#turns.push(turn);
|
|
25
|
+
if (wasIdle)
|
|
26
|
+
this.#hooks.onIdleExit?.();
|
|
16
27
|
return turn;
|
|
17
28
|
}
|
|
18
29
|
finish() {
|
|
19
|
-
|
|
30
|
+
const turn = this.#turns.pop();
|
|
31
|
+
if (turn && this.#turns.length === 0)
|
|
32
|
+
this.#hooks.onIdleEnter?.();
|
|
33
|
+
return turn;
|
|
20
34
|
}
|
|
21
35
|
abortCurrent() {
|
|
22
|
-
|
|
36
|
+
const turn = this.#turns.pop();
|
|
37
|
+
if (turn && this.#turns.length === 0)
|
|
38
|
+
this.#hooks.onIdleEnter?.();
|
|
39
|
+
return turn;
|
|
23
40
|
}
|
|
24
41
|
current() {
|
|
25
42
|
return this.#turns.at(-1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turns.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"turns.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IACtB,MAAM,GAAiB,EAAE,CAAC;IAC1B,MAAM,CAAmB;IAEzB,YAAY,QAA0B,EAAE;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAe;YACvB,QAAQ;YACR,MAAM,EAAE,OAAO,QAAQ,EAAE;SAC1B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -31,6 +31,12 @@ export interface SupervisorConfig {
|
|
|
31
31
|
timeoutMs?: number;
|
|
32
32
|
/** Emit supervisor_warning this many ms before timeout. `<=0` disables it. */
|
|
33
33
|
warnBeforeMs?: number;
|
|
34
|
+
/**
|
|
35
|
+
* OOM-guard idle-cleanup TTL in ms. When a running worker stays idle
|
|
36
|
+
* for this long (no active turn), the supervisor self-terminates with
|
|
37
|
+
* `killed{reason:"idle-timeout"}`. `<=0` or undefined disables.
|
|
38
|
+
*/
|
|
39
|
+
idleTimeoutMs?: number;
|
|
34
40
|
/** Caller identity recorded on the `spawned` event (default "main"). */
|
|
35
41
|
spawnedBy?: string;
|
|
36
42
|
/** Agent definition name loaded for this worker, if any (recorded on `spawned`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAUhE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ;;;8CAG0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;yCAEqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;2BACuB;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgTf;AAsDD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAKR"}
|
|
@@ -18,6 +18,7 @@ import { DEFAULT_INBOX_POLICY, } from "@mindfoldhq/trellis-core/channel";
|
|
|
18
18
|
import { getAdapter } from "./adapters/index.js";
|
|
19
19
|
import { appendEvent } from "./store/events.js";
|
|
20
20
|
import { workerFile } from "./store/paths.js";
|
|
21
|
+
import { scheduleSupervisorIdleTimer } from "./supervisor/idle.js";
|
|
21
22
|
import { runInboxWatcher } from "./supervisor/inbox.js";
|
|
22
23
|
import { createShutdown } from "./supervisor/shutdown.js";
|
|
23
24
|
import { startStdoutPump } from "./supervisor/stdout.js";
|
|
@@ -68,6 +69,9 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
68
69
|
getChild: () => child,
|
|
69
70
|
graceMs: SHUTDOWN_GRACE_MS,
|
|
70
71
|
timeoutMs: config.timeoutMs,
|
|
72
|
+
...(config.idleTimeoutMs !== undefined
|
|
73
|
+
? { idleTimeoutMs: config.idleTimeoutMs }
|
|
74
|
+
: {}),
|
|
71
75
|
});
|
|
72
76
|
// Gate the `spawned` event behind whichever child lifecycle event fires
|
|
73
77
|
// first: `spawn` (success) or `error` (launch failure, e.g. ENOENT).
|
|
@@ -159,7 +163,9 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
159
163
|
// arriving during the spawn-settle / spawned-append window funnels
|
|
160
164
|
// into `shutdown.request` instead of using Node's default behaviour
|
|
161
165
|
// (which would orphan the child and skip the `killed` event).
|
|
162
|
-
process.on("SIGTERM", () =>
|
|
166
|
+
process.on("SIGTERM", () => {
|
|
167
|
+
void shutdown.request("SIGTERM", readExternalShutdownReason(channelName, workerName, project));
|
|
168
|
+
});
|
|
163
169
|
process.on("SIGINT", () => void shutdown.request("SIGINT", "explicit-kill"));
|
|
164
170
|
// SIGHUP arrives when the parent terminal closes — without this
|
|
165
171
|
// handler Node's default behaviour exits the supervisor before the
|
|
@@ -180,7 +186,6 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
180
186
|
return;
|
|
181
187
|
}
|
|
182
188
|
fs.writeFileSync(workerFile(channelName, workerName, "worker-pid", project), String(child.pid));
|
|
183
|
-
const turnTracker = new TurnTracker();
|
|
184
189
|
await appendEvent(channelName, {
|
|
185
190
|
kind: "spawned",
|
|
186
191
|
by: config.spawnedBy ?? "main",
|
|
@@ -196,6 +201,21 @@ export async function runSupervisor(channelName, workerName, configPath) {
|
|
|
196
201
|
? { manifests: config.contextManifests }
|
|
197
202
|
: {}),
|
|
198
203
|
}, project);
|
|
204
|
+
// OOM-guard idle timer: start only after `spawned` is durable. Hooks
|
|
205
|
+
// wired through the TurnTracker pause it mid-turn and reset it on
|
|
206
|
+
// turn finish / interrupted (the same transitions that drive durable
|
|
207
|
+
// `idleSince`). `<=0` short-circuits the timer to a no-op.
|
|
208
|
+
const idleTimer = scheduleSupervisorIdleTimer({
|
|
209
|
+
idleTimeoutMs: config.idleTimeoutMs ?? 0,
|
|
210
|
+
shutdown,
|
|
211
|
+
isChildExited: () => child.exitCode !== null || child.signalCode !== null,
|
|
212
|
+
log,
|
|
213
|
+
});
|
|
214
|
+
const turnTracker = new TurnTracker({
|
|
215
|
+
onIdleExit: () => idleTimer.pause(),
|
|
216
|
+
onIdleEnter: () => idleTimer.reset(),
|
|
217
|
+
});
|
|
218
|
+
process.on("exit", () => idleTimer.cancel());
|
|
199
219
|
// ── 1. stdout reader ──
|
|
200
220
|
startStdoutPump({
|
|
201
221
|
channelName,
|
|
@@ -282,7 +302,14 @@ async function cleanup(channelName, workerName) {
|
|
|
282
302
|
// Keep `log` (forensic), `session-id` / `thread-id` (future resume).
|
|
283
303
|
// `inbox-cursor` is kept so a respawn (same worker name without
|
|
284
304
|
// killing the channel) doesn't replay messages.
|
|
285
|
-
for (const suffix of [
|
|
305
|
+
for (const suffix of [
|
|
306
|
+
"pid",
|
|
307
|
+
"worker-pid",
|
|
308
|
+
"config",
|
|
309
|
+
"spawnlock",
|
|
310
|
+
"shutdown-reason",
|
|
311
|
+
"reservation",
|
|
312
|
+
]) {
|
|
286
313
|
try {
|
|
287
314
|
fs.unlinkSync(workerFile(channelName, workerName, suffix, process.env.TRELLIS_CHANNEL_PROJECT));
|
|
288
315
|
}
|
|
@@ -291,6 +318,19 @@ async function cleanup(channelName, workerName) {
|
|
|
291
318
|
}
|
|
292
319
|
}
|
|
293
320
|
}
|
|
321
|
+
function readExternalShutdownReason(channelName, workerName, project) {
|
|
322
|
+
const file = workerFile(channelName, workerName, "shutdown-reason", project);
|
|
323
|
+
try {
|
|
324
|
+
const reason = fs.readFileSync(file, "utf-8").trim();
|
|
325
|
+
fs.unlinkSync(file);
|
|
326
|
+
if (reason === "idle-timeout")
|
|
327
|
+
return "idle-timeout";
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// No sidecar: ordinary external SIGTERM remains an explicit kill.
|
|
331
|
+
}
|
|
332
|
+
return "explicit-kill";
|
|
333
|
+
}
|
|
294
334
|
function readConfig(p) {
|
|
295
335
|
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
296
336
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/commands/channel/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAA4B,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EACL,oBAAoB,GAErB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/commands/channel/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/wait.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/wait.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAID,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmBvE"}
|
|
@@ -15,7 +15,6 @@ export async function channelWait(channelName, opts) {
|
|
|
15
15
|
self: opts.as,
|
|
16
16
|
from: fromList,
|
|
17
17
|
kind: parseChannelKinds(opts.kind),
|
|
18
|
-
tag: opts.tag,
|
|
19
18
|
to: opts.to ?? opts.as, // default: broadcasts to me + explicit-to-me
|
|
20
19
|
thread: opts.thread ? normalizeThreadKey(opts.thread) : undefined,
|
|
21
20
|
action: opts.action ? parseThreadAction(opts.action) : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/channel/wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/channel/wait.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.5.16",
|
|
3
|
+
"description": "Patch: align Cursor sessionStart hook output with Cursor's supported schema and remove the unsupported beforeSubmitPrompt injector.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Bug Fixes:**\n- fix(hooks): Cursor `sessionStart` hooks now emit top-level `additional_context`, matching Cursor's supported hook schema.\n- fix(hooks): Cursor templates no longer install the unsupported `beforeSubmitPrompt` workflow-state injector or `.cursor/hooks/inject-workflow-state.py`.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Run `trellis update` to refresh Cursor hook templates. No migration required because Trellis removes the unsupported Cursor workflow-state hook from generated templates."
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.6.0-beta.18",
|
|
3
|
+
"description": "Beta patch: channel worker OOM guard, simplified channel message routing, bundled Trellis spec bootstrap skill docs, and safer task archive auto-commit failures.",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**Enhancements:**\n- feat(channel): default OOM guard for `trellis channel spawn`. Workers that stay continuously idle past `channel.worker_guard.idle_timeout` (default `5m`) are self-terminated with `killed{reason:\"idle-timeout\"}`. Mid-turn workers are not killed by idle cleanup.\n- feat(channel): spawn-time live-worker budget per project/scope. Default `channel.worker_guard.max_live_workers: 6`. Expired idle workers are cleaned first; if the budget is still exhausted, `spawn` rejects with live-worker details and kill / override hints.\n- feat(channel): simplified worker message routing by removing message tags from channel send/wait/run internals.\n- feat(config): `.trellis/config.yaml` gains a `channel.worker_guard` section via `trellis update`.\n- feat(skills): Trellis beta bundle includes the built-in `trellis-spec-bootstarp` skill for bootstrapping `.trellis/spec/` from the real codebase.\n**Bug Fixes:**\n- fix(cli): `task.py archive` now fails when its auto-commit fails instead of reporting a successful archive with uncommitted changes.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"configSectionsAdded": [
|
|
9
|
+
{
|
|
10
|
+
"file": ".trellis/config.yaml",
|
|
11
|
+
"sentinel": "worker_guard:",
|
|
12
|
+
"sectionHeading": "Channel worker OOM guard"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"notes": "Beta patch on top of 0.6.0-beta.17. `trellis update` appends `channel.worker_guard` defaults for existing projects. To opt out, set `channel.worker_guard.idle_timeout: 0` and / or `channel.worker_guard.max_live_workers: 0`, or pass `--idle-timeout 0` / `--max-live-workers 0` per spawn."
|
|
16
|
+
}
|
|
@@ -76,6 +76,26 @@ max_journal_lines: 2000
|
|
|
76
76
|
# Default package used when --package is not specified.
|
|
77
77
|
# default_package: frontend
|
|
78
78
|
|
|
79
|
+
#-------------------------------------------------------------------------------
|
|
80
|
+
# Channel worker OOM guard
|
|
81
|
+
#-------------------------------------------------------------------------------
|
|
82
|
+
# Default safeguards for `trellis channel spawn` workers. The guard runs
|
|
83
|
+
# at spawn time (cleans expired idle workers, then enforces the live-worker
|
|
84
|
+
# budget) and inside each supervisor (self-terminates a worker that stays
|
|
85
|
+
# continuously idle past `idle_timeout`).
|
|
86
|
+
#
|
|
87
|
+
# Precedence: CLI flag > env var (TRELLIS_CHANNEL_WORKER_IDLE_TIMEOUT /
|
|
88
|
+
# TRELLIS_CHANNEL_MAX_LIVE_WORKERS) > this config > built-in default.
|
|
89
|
+
#
|
|
90
|
+
# `idle_timeout: 0` disables idle cleanup (workers can sit idle forever
|
|
91
|
+
# unless explicitly killed or given `--timeout`).
|
|
92
|
+
# `max_live_workers: 0` disables the spawn-time budget check.
|
|
93
|
+
#
|
|
94
|
+
channel:
|
|
95
|
+
worker_guard:
|
|
96
|
+
idle_timeout: 5m
|
|
97
|
+
max_live_workers: 6
|
|
98
|
+
|
|
79
99
|
#-------------------------------------------------------------------------------
|
|
80
100
|
# Codex (dispatch behavior)
|
|
81
101
|
#-------------------------------------------------------------------------------
|