gm-orchestrator 0.11.0 → 0.12.1
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 +133 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/heartbeat.d.ts +26 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +170 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/orchestrator.d.ts +7 -1
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +125 -39
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/post-task-hooks.d.ts +39 -0
- package/dist/core/post-task-hooks.d.ts.map +1 -0
- package/dist/core/post-task-hooks.js +92 -0
- package/dist/core/post-task-hooks.js.map +1 -0
- package/dist/core/prompt-builder.d.ts +1 -0
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +9 -0
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/scheduler.d.ts +3 -1
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +3 -1
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/task-utils.d.ts +17 -2
- package/dist/core/task-utils.d.ts.map +1 -1
- package/dist/core/task-utils.js +48 -8
- package/dist/core/task-utils.js.map +1 -1
- package/dist/core/types.d.ts +99 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/claude-runner.d.ts +1 -1
- package/dist/infra/claude-runner.d.ts.map +1 -1
- package/dist/infra/claude-runner.js +3 -3
- package/dist/infra/claude-runner.js.map +1 -1
- package/dist/infra/config.d.ts.map +1 -1
- package/dist/infra/config.js +10 -0
- package/dist/infra/config.js.map +1 -1
- package/dist/infra/gm-client.d.ts +7 -1
- package/dist/infra/gm-client.d.ts.map +1 -1
- package/dist/infra/gm-client.js +3 -0
- package/dist/infra/gm-client.js.map +1 -1
- package/dist/infra/hook-runner.d.ts +9 -0
- package/dist/infra/hook-runner.d.ts.map +1 -0
- package/dist/infra/hook-runner.js +124 -0
- package/dist/infra/hook-runner.js.map +1 -0
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +40 -0
- package/dist/server/api.js.map +1 -1
- package/dist/server/runner-service.d.ts +1 -0
- package/dist/server/runner-service.d.ts.map +1 -1
- package/dist/server/runner-service.js +2 -1
- package/dist/server/runner-service.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -198,6 +198,139 @@ Resolved in order — later sources override earlier:
|
|
|
198
198
|
| `claudeArgs` | `string[]` | `[]` | Extra args for `claude --print` |
|
|
199
199
|
| `model` | `string` | | Claude model override (e.g. `claude-sonnet-4-6`) |
|
|
200
200
|
| `dryRun` | `boolean` | `false` | Preview prompts, don't run |
|
|
201
|
+
| `postTaskHooks` | `PostTaskHook[]` | `[]` | Verification commands run after each task (see [Post-task verification hooks](#post-task-verification-hooks)) |
|
|
202
|
+
| `heartbeat` | `HeartbeatConfig` | | Heartbeat / zombie recovery settings (see [Crash recovery](#crash-recovery-heartbeat)) |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Task dependencies
|
|
207
|
+
|
|
208
|
+
The orchestrator respects task blockers when choosing which task to run next.
|
|
209
|
+
A task whose blockers are unresolved is **skipped** regardless of its priority.
|
|
210
|
+
|
|
211
|
+
### Marking a blocker
|
|
212
|
+
|
|
213
|
+
Use `tasks_link` with `kind="blocks"`:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
tasks_link(fromId="U13", toId="U7", kind="blocks")
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
This means **U13 blocks U7** — the orchestrator will not start U7 until U13 reaches `done` (or `cancelled`).
|
|
220
|
+
|
|
221
|
+
**Concrete example:** task U13 creates a lock helper used by U7 and U9. Link U13→U7 and U13→U9 with `kind="blocks"` so the orchestrator picks U13 first, even if U7 and U9 have higher priority.
|
|
222
|
+
|
|
223
|
+
### Link kinds
|
|
224
|
+
|
|
225
|
+
GraphMemory supports four link kinds between tasks:
|
|
226
|
+
|
|
227
|
+
| Kind | Effect on orchestrator |
|
|
228
|
+
|------|----------------------|
|
|
229
|
+
| `blocks` | **Enforced.** Target task is skipped until the source is terminal (`done` / `cancelled`). Checked by `areBlockersResolved(task)`. |
|
|
230
|
+
| `prefers_after` | **Soft.** Target task is deprioritised while the source is still active, but **not blocked**. If the source is cancelled or stuck, the target can still run. Useful for "ideally A before B" without a hard gate. |
|
|
231
|
+
| `subtask_of` | Structural only — groups tasks under a parent. Does **not** affect scheduling order. |
|
|
232
|
+
| `related_to` | Informational only — no effect on scheduling. |
|
|
233
|
+
|
|
234
|
+
### Cancelled blockers
|
|
235
|
+
|
|
236
|
+
A blocker in `cancelled` state is treated as **resolved**, same as `done`. Semantically, "this work is not going to happen" is equivalent to "this work is already accomplished" from the dependent task's perspective. Cancelling a blocker unblocks everything downstream — no ghost-blocked tasks stalling forever.
|
|
237
|
+
|
|
238
|
+
### Cross-project blockers
|
|
239
|
+
|
|
240
|
+
For multi-project setups, a blocker can live in a different GraphMemory project. Pass `targetProjectId` when linking:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
tasks_link(fromId="U-API-1", toId="U6", kind="blocks", targetProjectId="MixPlacesEcommerce")
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
This means **U-API-1 in the current project blocks U6 in `MixPlacesEcommerce`**. The orchestrator resolves blocker status across all configured projects, so you can run multiple epics in parallel and let the scheduler interleave tasks based on real-time readiness — no need to sequence epics by hand.
|
|
247
|
+
|
|
248
|
+
### Programmatic check
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
import { areBlockersResolved } from 'gm-orchestrator';
|
|
252
|
+
|
|
253
|
+
// Returns true when every task linked with kind="blocks" is done or cancelled
|
|
254
|
+
areBlockersResolved(task); // boolean
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Post-task verification hooks
|
|
260
|
+
|
|
261
|
+
After a task is marked `done`, the orchestrator can run user-configurable verification commands before accepting the `done` state. This provides a hard gate on quality — "task done = runtime verified" is enforced mechanically, not by convention.
|
|
262
|
+
|
|
263
|
+
Hooks run **in the orchestrator process**, not inside the spawned Claude session. A failing session cannot skip its own verification.
|
|
264
|
+
|
|
265
|
+
### Configuration
|
|
266
|
+
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"postTaskHooks": [
|
|
270
|
+
{
|
|
271
|
+
"name": "make-verify",
|
|
272
|
+
"command": "make verify",
|
|
273
|
+
"cwd": "/path/to/project",
|
|
274
|
+
"timeoutMs": 600000,
|
|
275
|
+
"onFailure": "block"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "lint",
|
|
279
|
+
"command": "npm run lint",
|
|
280
|
+
"onFailure": "warn"
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
| Field | Type | Description |
|
|
287
|
+
|-------|------|-------------|
|
|
288
|
+
| `name` | `string` | Human-readable label for logs. |
|
|
289
|
+
| `command` | `string` | Shell command to execute. |
|
|
290
|
+
| `cwd` | `string` | Working directory (default: `process.cwd()`). |
|
|
291
|
+
| `timeoutMs` | `number` | Timeout in ms (default: 600000 = 10 min). |
|
|
292
|
+
| `onFailure` | `'block' \| 'warn'` | `block` halts the sprint, `warn` logs and continues. |
|
|
293
|
+
|
|
294
|
+
### On failure (`onFailure: "block"`)
|
|
295
|
+
|
|
296
|
+
1. Task is moved back from `done` to `in_progress`
|
|
297
|
+
2. An `auto-verify-failed` tag is added
|
|
298
|
+
3. Last 50 lines of stdout/stderr are attached to `task.metadata.verifyFailures`
|
|
299
|
+
4. The sprint halts — orchestrator does **not** pick the next task until the user intervenes
|
|
300
|
+
|
|
301
|
+
Hooks run sequentially in the order declared. Multiple hooks per project (e.g. lint + build + test as separate entries) are supported.
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Crash recovery (heartbeat)
|
|
306
|
+
|
|
307
|
+
If the orchestrator process dies mid-task (OS reboot, OOM, pkill), the task is left stuck in `in_progress` forever. Heartbeats give the orchestrator a way to tell live work from zombie state.
|
|
308
|
+
|
|
309
|
+
While a task is running, the orchestrator writes `metadata.runId` and `metadata.heartbeatAt` on a 30s interval. On startup, it scans all `in_progress` tasks: any task with a stale heartbeat (older than 2× the interval) or no heartbeat at all is treated as a zombie and recovered according to the configured policy.
|
|
310
|
+
|
|
311
|
+
### Configuration
|
|
312
|
+
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"heartbeat": {
|
|
316
|
+
"intervalMs": 30000,
|
|
317
|
+
"staleThresholdMs": 60000,
|
|
318
|
+
"zombiePolicy": "reset-to-todo"
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
| Field | Default | Description |
|
|
324
|
+
|-------|---------|-------------|
|
|
325
|
+
| `intervalMs` | `30000` | How often to write heartbeat metadata. |
|
|
326
|
+
| `staleThresholdMs` | `2 × intervalMs` | Age threshold for zombie detection. |
|
|
327
|
+
| `zombiePolicy` | `reset-to-todo` | `reset-to-todo`, `move-to-review`, or `cancel`. |
|
|
328
|
+
|
|
329
|
+
`reset-to-todo` is the safe default: the zombie task goes back in the queue and will be re-picked with a fresh Claude session. Given per-task isolation, redoing the work is usually fine.
|
|
330
|
+
|
|
331
|
+
### Idempotency (double-spawn safety)
|
|
332
|
+
|
|
333
|
+
Each run gets a unique `runId` UUID, exposed to the spawned Claude session via the `ORCHESTRATOR_RUN_ID` environment variable and written to `task.metadata.runId`. Before making destructive changes, a well-behaved subagent can call `tasks_get` and compare `metadata.runId` to its own `ORCHESTRATOR_RUN_ID` — if they differ, another run has superseded this one and it should exit cleanly. This protects against race conditions between two orchestrator instances or restarts that happen during the narrow window between "pick task" and "move to in_progress".
|
|
201
334
|
|
|
202
335
|
---
|
|
203
336
|
|
package/dist/cli/index.js
CHANGED
|
@@ -199,11 +199,16 @@ async function main() {
|
|
|
199
199
|
projectId: activeProj?.projectId ?? '',
|
|
200
200
|
...(activeProj?.apiKey !== undefined && { apiKey: activeProj.apiKey }),
|
|
201
201
|
});
|
|
202
|
+
// Lazy-import HookRunner only when hooks are configured
|
|
203
|
+
const hookRunner = config.postTaskHooks?.length
|
|
204
|
+
? new (await import('../infra/hook-runner.js')).HookRunner()
|
|
205
|
+
: undefined;
|
|
202
206
|
const ports = {
|
|
203
207
|
gm,
|
|
204
208
|
runner: new ClaudeRunner(),
|
|
205
209
|
poller: new TaskPoller(gm),
|
|
206
210
|
logger: consoleLogger,
|
|
211
|
+
...(hookRunner ? { hookRunner } : {}),
|
|
207
212
|
};
|
|
208
213
|
if (effectiveCommand === 'status') {
|
|
209
214
|
const [todo, inProgress, done] = await Promise.all([
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { GraphMemoryPort, HeartbeatConfig } from './types.js';
|
|
2
|
+
import type { Logger } from '../infra/logger.js';
|
|
3
|
+
export declare const HEARTBEAT_DEFAULTS: HeartbeatConfig;
|
|
4
|
+
/**
|
|
5
|
+
* Resolve heartbeat config by merging user overrides with defaults.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveHeartbeatConfig(partial?: Partial<HeartbeatConfig>): HeartbeatConfig;
|
|
8
|
+
export interface HeartbeatHandle {
|
|
9
|
+
/** Unique run ID for this session. */
|
|
10
|
+
runId: string;
|
|
11
|
+
/** Stop the heartbeat interval and clear metadata from the task. */
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function startHeartbeat(taskId: string, gm: GraphMemoryPort, config: HeartbeatConfig, logger: Logger): HeartbeatHandle;
|
|
15
|
+
/**
|
|
16
|
+
* Detect and recover zombie tasks on startup.
|
|
17
|
+
*
|
|
18
|
+
* Scans all `in_progress` tasks. If a task has heartbeat metadata
|
|
19
|
+
* and `heartbeatAt` is older than `staleThresholdMs`, it's a zombie.
|
|
20
|
+
* Tasks with no heartbeat metadata but `in_progress` status are also
|
|
21
|
+
* treated as zombies (pre-heartbeat era or metadata was lost).
|
|
22
|
+
*
|
|
23
|
+
* Returns the list of recovered task IDs.
|
|
24
|
+
*/
|
|
25
|
+
export declare function recoverZombieTasks(gm: GraphMemoryPort, config: HeartbeatConfig, logger: Logger): Promise<string[]>;
|
|
26
|
+
//# sourceMappingURL=heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/core/heartbeat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAIhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD,eAAO,MAAM,kBAAkB,EAAE,eAIhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACjC,eAAe,CAQjB;AAID,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAiDD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,eAAe,EACnB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAmCjB;AAID;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,eAAe,EACnB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CA4CnB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
// ─── Defaults ────────────────────────────────────────────────────────────
|
|
3
|
+
export const HEARTBEAT_DEFAULTS = {
|
|
4
|
+
intervalMs: 30_000,
|
|
5
|
+
staleThresholdMs: 60_000,
|
|
6
|
+
zombiePolicy: 'reset-to-todo',
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Resolve heartbeat config by merging user overrides with defaults.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveHeartbeatConfig(partial) {
|
|
12
|
+
return {
|
|
13
|
+
intervalMs: partial?.intervalMs ?? HEARTBEAT_DEFAULTS.intervalMs,
|
|
14
|
+
staleThresholdMs: partial?.staleThresholdMs ??
|
|
15
|
+
(partial?.intervalMs ? partial.intervalMs * 2 : HEARTBEAT_DEFAULTS.staleThresholdMs),
|
|
16
|
+
zombiePolicy: partial?.zombiePolicy ?? HEARTBEAT_DEFAULTS.zombiePolicy,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Start a heartbeat for a running task.
|
|
21
|
+
*
|
|
22
|
+
* - Writes `metadata.runId` and `metadata.heartbeatAt` immediately.
|
|
23
|
+
* - Updates `metadata.heartbeatAt` every `intervalMs`.
|
|
24
|
+
* - `stop()` clears the interval and removes heartbeat metadata.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Merge a metadata patch into the task's existing metadata, then PUT the
|
|
28
|
+
* full result. GraphMemory's `updateTask` is REST-PUT semantics — sending
|
|
29
|
+
* `{ metadata: {...partial} }` replaces the whole metadata object, which
|
|
30
|
+
* would clobber fields written by Claude (e.g. `verifyFailedAt`,
|
|
31
|
+
* `verifyFailures`) or by other concurrent writers.
|
|
32
|
+
*
|
|
33
|
+
* This helper reads the latest task, merges the patch on top of the current
|
|
34
|
+
* metadata, and writes the union back. Keys whose value in the patch is
|
|
35
|
+
* `undefined` are removed from the result. This is a client-side merge —
|
|
36
|
+
* there is still a small race window between the GET and the PUT, but it
|
|
37
|
+
* is dramatically smaller than the previous unconditional overwrite.
|
|
38
|
+
*/
|
|
39
|
+
async function mergeMetadata(gm, taskId, patch) {
|
|
40
|
+
let current = {};
|
|
41
|
+
try {
|
|
42
|
+
const task = await gm.getTask(taskId);
|
|
43
|
+
if (task.metadata && typeof task.metadata === 'object') {
|
|
44
|
+
current = { ...task.metadata };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// If we can't read, fall through and write the patch alone — better
|
|
49
|
+
// than dropping the heartbeat update entirely.
|
|
50
|
+
}
|
|
51
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
52
|
+
if (value === undefined) {
|
|
53
|
+
delete current[key];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
current[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
await gm.updateTask(taskId, { metadata: current });
|
|
60
|
+
}
|
|
61
|
+
export function startHeartbeat(taskId, gm, config, logger) {
|
|
62
|
+
const runId = randomUUID();
|
|
63
|
+
let stopped = false;
|
|
64
|
+
const writeMeta = async () => {
|
|
65
|
+
if (stopped)
|
|
66
|
+
return;
|
|
67
|
+
const meta = { runId, heartbeatAt: Date.now() };
|
|
68
|
+
try {
|
|
69
|
+
await mergeMetadata(gm, taskId, { runId: meta.runId, heartbeatAt: meta.heartbeatAt });
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
logger.warn(`Heartbeat write failed for ${taskId}: ${String(err)}`);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
// Initial write
|
|
76
|
+
void writeMeta();
|
|
77
|
+
const timer = setInterval(() => void writeMeta(), config.intervalMs);
|
|
78
|
+
return {
|
|
79
|
+
runId,
|
|
80
|
+
async stop() {
|
|
81
|
+
if (stopped)
|
|
82
|
+
return;
|
|
83
|
+
stopped = true;
|
|
84
|
+
clearInterval(timer);
|
|
85
|
+
// Clear heartbeat metadata so it's not mistaken for a zombie — but
|
|
86
|
+
// preserve any other metadata fields written during the run (e.g.
|
|
87
|
+
// verifyFailedAt, verifyFailures).
|
|
88
|
+
try {
|
|
89
|
+
await mergeMetadata(gm, taskId, { runId: undefined, heartbeatAt: undefined });
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
logger.warn(`Heartbeat clear failed for ${taskId}: ${String(err)}`);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// ─── Zombie recovery ─────────────────────────────────────────────────────
|
|
98
|
+
/**
|
|
99
|
+
* Detect and recover zombie tasks on startup.
|
|
100
|
+
*
|
|
101
|
+
* Scans all `in_progress` tasks. If a task has heartbeat metadata
|
|
102
|
+
* and `heartbeatAt` is older than `staleThresholdMs`, it's a zombie.
|
|
103
|
+
* Tasks with no heartbeat metadata but `in_progress` status are also
|
|
104
|
+
* treated as zombies (pre-heartbeat era or metadata was lost).
|
|
105
|
+
*
|
|
106
|
+
* Returns the list of recovered task IDs.
|
|
107
|
+
*/
|
|
108
|
+
export async function recoverZombieTasks(gm, config, logger) {
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const recovered = [];
|
|
111
|
+
let inProgressTasks;
|
|
112
|
+
try {
|
|
113
|
+
inProgressTasks = await gm.listTasks({ status: 'in_progress' });
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
logger.error(`Zombie recovery: failed to list in_progress tasks: ${String(err)}`);
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
for (const task of inProgressTasks) {
|
|
120
|
+
const heartbeatAt = task.metadata?.['heartbeatAt'];
|
|
121
|
+
// If there's a recent heartbeat, it's alive — skip
|
|
122
|
+
if (typeof heartbeatAt === 'number' && now - heartbeatAt < config.staleThresholdMs) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// This task is a zombie — either stale heartbeat or no heartbeat at all
|
|
126
|
+
const age = typeof heartbeatAt === 'number'
|
|
127
|
+
? `${Math.round((now - heartbeatAt) / 1000)}s ago`
|
|
128
|
+
: 'no heartbeat';
|
|
129
|
+
logger.warn(`Zombie detected: "${task.title}" (${task.id}) — last heartbeat: ${age}`);
|
|
130
|
+
try {
|
|
131
|
+
await applyZombiePolicy(task, config.zombiePolicy, gm, logger);
|
|
132
|
+
recovered.push(task.id);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
logger.error(`Zombie recovery failed for ${task.id}: ${String(err)}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (recovered.length) {
|
|
139
|
+
logger.info(`Zombie recovery: ${recovered.length} task(s) recovered with policy "${config.zombiePolicy}"`);
|
|
140
|
+
}
|
|
141
|
+
else if (inProgressTasks.length === 0) {
|
|
142
|
+
logger.info('Zombie recovery: no in_progress tasks found');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
logger.info(`Zombie recovery: ${inProgressTasks.length} in_progress task(s) are all alive`);
|
|
146
|
+
}
|
|
147
|
+
return recovered;
|
|
148
|
+
}
|
|
149
|
+
async function applyZombiePolicy(task, policy, gm, logger) {
|
|
150
|
+
// Clear heartbeat metadata regardless of policy — preserving any other
|
|
151
|
+
// metadata fields the previous run wrote (e.g. verifyFailedAt).
|
|
152
|
+
await mergeMetadata(gm, task.id, { runId: undefined, heartbeatAt: undefined });
|
|
153
|
+
switch (policy) {
|
|
154
|
+
case 'reset-to-todo':
|
|
155
|
+
logger.info(` → resetting "${task.title}" to todo`);
|
|
156
|
+
await gm.moveTask(task.id, 'todo');
|
|
157
|
+
break;
|
|
158
|
+
case 'cancel':
|
|
159
|
+
logger.info(` → cancelling "${task.title}"`);
|
|
160
|
+
await gm.moveTask(task.id, 'cancelled');
|
|
161
|
+
break;
|
|
162
|
+
case 'move-to-review':
|
|
163
|
+
// Move to cancelled with a note — there's no "review" status,
|
|
164
|
+
// so we cancel + tag for human inspection
|
|
165
|
+
logger.info(` → cancelling "${task.title}" for review (zombie)`);
|
|
166
|
+
await gm.moveTask(task.id, 'cancelled');
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/core/heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GraphMemoryPort, ClaudeRunnerPort, TaskPollerPort, OrchestratorConfig, SprintStats, CrossProjectResolver, CrossProjectTask } from './types.js';
|
|
1
|
+
import type { GraphMemoryPort, ClaudeRunnerPort, TaskPollerPort, HookRunnerPort, OrchestratorConfig, SprintStats, CrossProjectResolver, CrossProjectTask } from './types.js';
|
|
2
2
|
import type { Logger } from '../infra/logger.js';
|
|
3
3
|
interface Ports {
|
|
4
4
|
gm: GraphMemoryPort;
|
|
@@ -11,6 +11,12 @@ interface Ports {
|
|
|
11
11
|
* When provided, `findNextRunnable` will check blockers in other projects.
|
|
12
12
|
*/
|
|
13
13
|
crossProjectResolver?: CrossProjectResolver;
|
|
14
|
+
/**
|
|
15
|
+
* Optional hook runner for post-task verification.
|
|
16
|
+
* When provided along with config.postTaskHooks, hooks are executed
|
|
17
|
+
* after a task is marked done — before the orchestrator accepts completion.
|
|
18
|
+
*/
|
|
19
|
+
hookRunner?: HookRunnerPort;
|
|
14
20
|
}
|
|
15
21
|
/**
|
|
16
22
|
* Orchestrates a full sprint: runs all todo/in_progress tasks in priority
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,WAAW,EAGX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,WAAW,EAGX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,KAAK;IACb,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CAiEtB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CA6FtB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CA0DtB;AA0KD;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,EACvC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,eAAe,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC,CAmC/F"}
|