taskflow-core 0.2.2 → 0.2.4

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.
Files changed (59) hide show
  1. package/README.md +4 -3
  2. package/dist/agents.d.ts +2 -2
  3. package/dist/agents.d.ts.map +1 -1
  4. package/dist/build-info.json +2 -2
  5. package/dist/compile.d.ts +8 -1
  6. package/dist/compile.d.ts.map +1 -1
  7. package/dist/compile.js +75 -9
  8. package/dist/compile.js.map +1 -1
  9. package/dist/detached-control.d.ts +52 -0
  10. package/dist/detached-control.d.ts.map +1 -0
  11. package/dist/detached-control.js +251 -0
  12. package/dist/detached-control.js.map +1 -0
  13. package/dist/detached-runner.js +183 -30
  14. package/dist/detached-runner.js.map +1 -1
  15. package/dist/exec/driver.d.ts +5 -0
  16. package/dist/exec/driver.d.ts.map +1 -1
  17. package/dist/exec/driver.js +98 -52
  18. package/dist/exec/driver.js.map +1 -1
  19. package/dist/exec/kernel-policy.d.ts.map +1 -1
  20. package/dist/exec/kernel-policy.js +20 -20
  21. package/dist/exec/kernel-policy.js.map +1 -1
  22. package/dist/exec/step-kinds.d.ts.map +1 -1
  23. package/dist/exec/step-kinds.js +59 -22
  24. package/dist/exec/step-kinds.js.map +1 -1
  25. package/dist/exec/step.d.ts.map +1 -1
  26. package/dist/exec/step.js +44 -10
  27. package/dist/exec/step.js.map +1 -1
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/runner-core.d.ts.map +1 -1
  33. package/dist/runner-core.js +10 -0
  34. package/dist/runner-core.js.map +1 -1
  35. package/dist/runtime.d.ts +13 -0
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/runtime.js +81 -38
  38. package/dist/runtime.js.map +1 -1
  39. package/dist/store.d.ts +41 -2
  40. package/dist/store.d.ts.map +1 -1
  41. package/dist/store.js +489 -180
  42. package/dist/store.js.map +1 -1
  43. package/dist/verifiers/discover.d.ts +44 -0
  44. package/dist/verifiers/discover.d.ts.map +1 -0
  45. package/dist/verifiers/discover.js +152 -0
  46. package/dist/verifiers/discover.js.map +1 -0
  47. package/dist/verifiers/index.d.ts +12 -0
  48. package/dist/verifiers/index.d.ts.map +1 -0
  49. package/dist/verifiers/index.js +12 -0
  50. package/dist/verifiers/index.js.map +1 -0
  51. package/dist/verifiers/script-lint.d.ts +24 -0
  52. package/dist/verifiers/script-lint.d.ts.map +1 -0
  53. package/dist/verifiers/script-lint.js +311 -0
  54. package/dist/verifiers/script-lint.js.map +1 -0
  55. package/dist/verify.d.ts +55 -3
  56. package/dist/verify.d.ts.map +1 -1
  57. package/dist/verify.js +201 -2
  58. package/dist/verify.js.map +1 -1
  59. package/package.json +1 -1
package/README.md CHANGED
@@ -131,7 +131,7 @@ Save it as `.pi/taskflows/audit-api.json`, then run:
131
131
  /tf:audit-api dir=src/api
132
132
  ```
133
133
 
134
- On Codex, Claude Code, OpenCode, and Grok Build, run the same saved definition by name through `taskflow_run`.
134
+ On Codex, Claude Code, OpenCode, and Grok Build, run the same saved definition by name through `taskflow_run`. For long DAGs, use `mode: "background"`, then manage the durable run with `taskflow_runs` (`list` / `status` / `wait` / `cancel`); list output reports active concurrency and can filter `running` or `terminal` runs.
135
135
 
136
136
  [Follow the full quickstart →](https://heggria.github.io/taskflow/en/docs/getting-started)
137
137
 
@@ -315,7 +315,7 @@ claude plugin install claude-taskflow@taskflow
315
315
 
316
316
  ```bash
317
317
  opencode mcp add taskflow -- \
318
- npx -y -p opencode-taskflow@0.2.2 opencode-taskflow-mcp
318
+ npx -y -p opencode-taskflow@0.2.3 opencode-taskflow-mcp
319
319
  ```
320
320
 
321
321
  [OpenCode guide →](https://heggria.github.io/taskflow/en/docs/guides/opencode)
@@ -324,7 +324,7 @@ opencode mcp add taskflow -- \
324
324
 
325
325
  ```bash
326
326
  grok mcp add taskflow -- \
327
- npx -y -p grok-taskflow@0.2.2 grok-taskflow-mcp
327
+ npx -y -p grok-taskflow@0.2.3 grok-taskflow-mcp
328
328
  ```
329
329
 
330
330
  Grok Build support is new in 0.2. Its CLI stream does not report token/cost usage, so budget-declaring flows are rejected rather than silently running without enforcement.
@@ -365,6 +365,7 @@ The test suite covers orchestration semantics, persistence and file-lock races,
365
365
  | [Host Guides](https://heggria.github.io/taskflow/en/docs/guides/) | Pi, Codex, Claude Code, OpenCode, and Grok setup |
366
366
  | [Reference](https://heggria.github.io/taskflow/en/docs/reference/) | Commands, shorthand, and exact tool surfaces |
367
367
  | [Showcase](https://heggria.github.io/taskflow/en/docs/showcase/) | Real flows and case studies |
368
+ | [0.2.0 Frontier Assessment](https://github.com/heggria/taskflow/blob/main/docs/taskflow-0.2.0-frontier-assessment.zh-CN.md) | Independent, evidence-based technical assessment (Chinese) |
368
369
 
369
370
  Also see [`examples/`](https://github.com/heggria/taskflow/blob/main/examples), the [changelog](https://github.com/heggria/taskflow/blob/main/CHANGELOG.md), and the [release guide](https://github.com/heggria/taskflow/blob/main/RELEASE.md).
370
371
 
package/dist/agents.d.ts CHANGED
@@ -18,9 +18,9 @@ export interface TaskflowSettings {
18
18
  builtInAgents: boolean;
19
19
  /** Whether package-local built-ins are copied into the current project's .pi/agents/. */
20
20
  syncBuiltinAgentsToProject: boolean;
21
- /** Maximum completed/failed runs to keep. 0 disables cleanup. */
21
+ /** Maximum inactive runs to keep. Running runs are never pruned. 0 disables cleanup. */
22
22
  maxKeptRuns: number;
23
- /** Maximum age (days) for completed/failed runs. 0 disables age cleanup. */
23
+ /** Maximum age (days) for inactive runs. Running runs are never pruned. 0 disables age cleanup. */
24
24
  maxRunAgeDays: number;
25
25
  /** Library (reusable-flow asset layer) settings. RFC: docs/rfc-library-reuse.md */
26
26
  library: LibrarySettings;
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  {
2
- "gitCommit": "300da53ea85ef820a49e72827f9f3261f377a9c9",
3
- "buildTime": 1784017618000
2
+ "gitCommit": "3b805248a59b27ec8c7a143e93e316794af2d5a7",
3
+ "buildTime": 1784545634000
4
4
  }
package/dist/compile.d.ts CHANGED
@@ -14,7 +14,7 @@
14
14
  * a structural audit without spending a token. It is a pure function — no I/O.
15
15
  */
16
16
  import type { Taskflow } from "./schema.ts";
17
- import { type VerificationResult } from "./verify.ts";
17
+ import { type TaskflowVerifier, type VerificationResult } from "./verify.ts";
18
18
  export interface CompileResult {
19
19
  /** A Mermaid `flowchart` source block (no fences). */
20
20
  mermaid: string;
@@ -28,6 +28,13 @@ export interface CompileOptions {
28
28
  direction?: "TD" | "LR";
29
29
  /** Document title (defaults to the flow name). */
30
30
  title?: string;
31
+ /** Caller-supplied verifiers forwarded into `verifyTaskflow`; their issues
32
+ * overlay on the Mermaid diagram + report exactly like built-in issues. */
33
+ verifiers?: TaskflowVerifier[];
34
+ /** Include the built-in script-lint verifier. Default `true`. Set `false`
35
+ * to disable (e.g. when the host registers its own verifiers and wants
36
+ * full control). */
37
+ lint?: boolean;
31
38
  }
32
39
  /**
33
40
  * Compile a (already schema-valid) taskflow into a Mermaid diagram + verification
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMnD,OAAO,EAA0C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAM9F,MAAM,WAAW,aAAa;IAC7B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,YAAY,EAAE,kBAAkB,CAAC;IACjC,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AA4TD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAE,cAAmB,GAAG,aAAa,CA8BxF"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMnD,OAAO,EAAkB,KAAK,gBAAgB,EAA0B,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOrH,MAAM,WAAW,aAAa;IAC7B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,YAAY,EAAE,kBAAkB,CAAC;IACjC,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;gFAC4E;IAC5E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B;;yBAEqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAqXD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAE,cAAmB,GAAG,aAAa,CAsCxF"}
package/dist/compile.js CHANGED
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { asArray, LOOP_DEFAULT_MAX_ITERATIONS, TOURNAMENT_DEFAULT_VARIANTS, } from "./schema.js";
17
17
  import { verifyTaskflow } from "./verify.js";
18
+ import { scriptLintVerifier } from "./verifiers/script-lint.js";
18
19
  // ---------------------------------------------------------------------------
19
20
  // Label / id sanitization
20
21
  // ---------------------------------------------------------------------------
@@ -137,6 +138,34 @@ function typeTag(p) {
137
138
  return "▸ agent";
138
139
  }
139
140
  }
141
+ /** Extract an inline flow definition from a flow phase's `def` field (0.2.4
142
+ * subgraph rendering). Returns undefined for saved-use flows or unparseable
143
+ * defs. */
144
+ function extractInlineDef(p) {
145
+ const raw = p.def;
146
+ if (!raw)
147
+ return undefined;
148
+ if (typeof raw === "string") {
149
+ try {
150
+ const parsed = JSON.parse(raw);
151
+ if (Array.isArray(parsed))
152
+ return { phases: parsed };
153
+ if (parsed && typeof parsed === "object" && Array.isArray(parsed.phases)) {
154
+ return parsed;
155
+ }
156
+ }
157
+ catch {
158
+ return undefined;
159
+ }
160
+ return undefined;
161
+ }
162
+ if (Array.isArray(raw))
163
+ return { phases: raw };
164
+ if (raw && typeof raw === "object" && Array.isArray(raw.phases)) {
165
+ return raw;
166
+ }
167
+ return undefined;
168
+ }
140
169
  /** The body text inside a node: id, type tag, a task summary, agent. */
141
170
  function nodeBody(p) {
142
171
  const lines = [];
@@ -250,9 +279,27 @@ function buildMermaid(flow, verification, opts) {
250
279
  const sev = severityByPhase(verification.issues);
251
280
  const lines = [];
252
281
  lines.push(`flowchart ${dir}`);
253
- // Nodes
254
- for (const p of phases)
255
- lines.push(`\t${nodeShape(p, idMap)}`);
282
+ // Nodes — flow phases with inline defs get a subgraph (0.2.4).
283
+ for (const p of phases) {
284
+ const childDef = (p.type ?? "agent") === "flow"
285
+ ? extractInlineDef(p)
286
+ : undefined;
287
+ if (childDef && Array.isArray(childDef.phases) && childDef.phases.length > 0) {
288
+ const subId = idMap.get(p.id) ?? p.id;
289
+ lines.push(`\tsubgraph ${subId} ["${label(p.id)}: ${mdInline(childDef.name ?? p.use ?? "flow")}"]`);
290
+ const childIdMap = buildNodeIds(childDef.phases);
291
+ for (const cp of childDef.phases) {
292
+ lines.push(`\t\t${nodeShape(cp, childIdMap)}`);
293
+ }
294
+ const childEdges = edges(childDef.phases, childIdMap);
295
+ for (const ce of childEdges)
296
+ lines.push(`\t\t${ce}`);
297
+ lines.push("\tend");
298
+ }
299
+ else {
300
+ lines.push(`\t${nodeShape(p, idMap)}`);
301
+ }
302
+ }
256
303
  // Edges
257
304
  const e = edges(phases, idMap);
258
305
  if (e.length) {
@@ -268,11 +315,24 @@ function buildMermaid(flow, verification, opts) {
268
315
  lines.push(`\tclassDef ${CLASS_FINAL} stroke:#43d9ad,stroke-width:3px;`);
269
316
  // Final phases get a distinct border (unless they already carry an issue,
270
317
  // where the issue color wins — a final node that's broken should read red).
271
- const finals = phases.filter((p) => p.final && !sev.has(p.id)).map((p) => idMap.get(p.id) ?? p.id);
318
+ // Overlays are applied ONLY to phase ids present in `idMap`: a plugin-supplied
319
+ // `phaseId` that names no real phase (or carries newlines/Mermaid syntax) must
320
+ // never reach a `class` statement, where it could inject extra directives.
321
+ // Such findings still appear as escaped text in the report below.
322
+ const finals = phases
323
+ .filter((p) => p.final && !sev.has(p.id))
324
+ .map((p) => idMap.get(p.id))
325
+ .filter((id) => id !== undefined);
272
326
  if (finals.length)
273
327
  lines.push(`\tclass ${finals.join(",")} ${CLASS_FINAL};`);
274
- const errNodes = [...sev].filter(([, s]) => s === "error").map(([id]) => idMap.get(id) ?? id);
275
- const warnNodes = [...sev].filter(([, s]) => s === "warning").map(([id]) => idMap.get(id) ?? id);
328
+ const errNodes = [...sev]
329
+ .filter(([, s]) => s === "error")
330
+ .map(([id]) => idMap.get(id))
331
+ .filter((id) => id !== undefined);
332
+ const warnNodes = [...sev]
333
+ .filter(([, s]) => s === "warning")
334
+ .map(([id]) => idMap.get(id))
335
+ .filter((id) => id !== undefined);
276
336
  if (errNodes.length)
277
337
  lines.push(`\tclass ${errNodes.join(",")} ${CLASS_ERROR};`);
278
338
  if (warnNodes.length)
@@ -297,13 +357,13 @@ function buildReport(flow, verification) {
297
357
  lines.push("");
298
358
  lines.push(`### ❌ Errors (${errors.length})`);
299
359
  for (const e of errors)
300
- lines.push(`- **${e.category}**${e.phaseId ? ` \`${mdInline(e.phaseId)}\`` : ""}: ${mdInline(e.message)}`);
360
+ lines.push(`- **${e.category}**${e.phaseId ? ` \`${mdInline(e.phaseId)}\`` : ""}${e.source ? ` _(${mdInline(e.source)})_` : ""}: ${mdInline(e.message)}`);
301
361
  }
302
362
  if (warnings.length) {
303
363
  lines.push("");
304
364
  lines.push(`### ⚠️ Warnings (${warnings.length})`);
305
365
  for (const w of warnings)
306
- lines.push(`- **${w.category}**${w.phaseId ? ` \`${mdInline(w.phaseId)}\`` : ""}: ${mdInline(w.message)}`);
366
+ lines.push(`- **${w.category}**${w.phaseId ? ` \`${mdInline(w.phaseId)}\`` : ""}${w.source ? ` _(${mdInline(w.source)})_` : ""}: ${mdInline(w.message)}`);
307
367
  }
308
368
  return lines.join("\n");
309
369
  }
@@ -315,12 +375,18 @@ function buildReport(flow, verification) {
315
375
  * report. Pure function — zero tokens, no LLM, no I/O.
316
376
  */
317
377
  export function compileTaskflow(flow, opts = {}) {
378
+ // Merge built-in script-lint (default ON) with caller-supplied verifiers.
379
+ const verifiers = [];
380
+ if (opts.lint !== false)
381
+ verifiers.push(scriptLintVerifier);
382
+ if (opts.verifiers)
383
+ verifiers.push(...opts.verifiers);
318
384
  const verification = verifyTaskflow({
319
385
  name: flow.name ?? "taskflow",
320
386
  phases: flow.phases ?? [],
321
387
  budget: flow.budget,
322
388
  concurrency: flow.concurrency,
323
- });
389
+ }, { verifiers: verifiers.length ? verifiers : undefined });
324
390
  const mermaid = buildMermaid(flow, verification, opts);
325
391
  const report = buildReport(flow, verification);
326
392
  const title = opts.title ?? flow.name ?? "taskflow";
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * File-backed control plane for detached Taskflow runs.
3
+ *
4
+ * A detached runner cannot rely on an IPC channel surviving its parent MCP
5
+ * process. Cancellation is therefore requested through a small durable marker
6
+ * in a user-private control directory keyed by the canonical invocation root.
7
+ * The child polls that marker and aborts the normal RuntimeDeps signal,
8
+ * preserving the runtime's existing paused semantics and process-tree cleanup.
9
+ */
10
+ export interface DetachedCancelRequest {
11
+ requestedAt: number;
12
+ reason?: string;
13
+ }
14
+ export declare const DETACHED_CONTROL_VERSION = 1;
15
+ export declare const DETACHED_CONTROL_CWD_ENV = "TASKFLOW_DETACHED_CONTROL_CWD";
16
+ export declare const DETACHED_CONTROL_RUN_ID_ENV = "TASKFLOW_DETACHED_CONTROL_RUN_ID";
17
+ export declare const DETACHED_CONTROL_INSTANCE_ENV = "TASKFLOW_DETACHED_CONTROL_INSTANCE";
18
+ export declare const DETACHED_CONTROL_OWNER_PID_ENV = "TASKFLOW_DETACHED_CONTROL_OWNER_PID";
19
+ export declare const DETACHED_CONTROL_SIGNAL_READY_ENV = "TASKFLOW_DETACHED_CONTROL_SIGNAL_READY";
20
+ export interface DetachedProcessRegistry {
21
+ version: number;
22
+ instanceId: string;
23
+ ownerPid: number;
24
+ heartbeatAt: number;
25
+ pids: number[];
26
+ }
27
+ /** Resolve the cancel marker for a run without accepting caller-selected paths. */
28
+ export declare function detachedCancelRequestPath(cwd: string, runId: string): string;
29
+ /** Persist an idempotent cancellation request for a detached runner. */
30
+ export declare function requestDetachedCancel(cwd: string, runId: string, reason?: string): DetachedCancelRequest;
31
+ /** Read a cancellation request. Corrupt markers still mean "cancel" fail-safe. */
32
+ export declare function readDetachedCancelRequest(cwd: string, runId: string): DetachedCancelRequest | null;
33
+ export declare function clearDetachedCancelRequest(cwd: string, runId: string): void;
34
+ export declare function detachedProcessRegistryPath(cwd: string, runId: string): string;
35
+ export declare function readDetachedProcessRegistry(cwd: string, runId: string): DetachedProcessRegistry | null;
36
+ export declare function heartbeatDetachedProcessRegistry(cwd: string, runId: string, instanceId: string, ownerPid?: number): void;
37
+ /** True only after this exact detached owner installed its persistence-aware signal bridge. */
38
+ export declare function isDetachedSignalOwnerReady(): boolean;
39
+ /** Best-effort hook used by runner-core whenever a Host CLI process group starts. */
40
+ export declare function registerDetachedProcessTreeFromEnv(pid: number): void;
41
+ /** Best-effort hook used by runner-core after a Host CLI process group is reaped. */
42
+ export declare function unregisterDetachedProcessTreeFromEnv(pid: number): void;
43
+ /** Reap every Host CLI process group owned by exactly this worker instance. */
44
+ export declare function terminateDetachedProcessTrees(cwd: string, runId: string, instanceId: string): number[];
45
+ export declare function clearDetachedProcessRegistry(cwd: string, runId: string, instanceId?: string): void;
46
+ /**
47
+ * Poll a detached cancellation marker and bridge it into an AbortController.
48
+ * Returns a cleanup callback. The timer is unref'd so it never keeps a
49
+ * completed detached runner alive by itself.
50
+ */
51
+ export declare function watchDetachedCancel(cwd: string, runId: string, controller: AbortController, pollMs?: number, onRequest?: (request: DetachedCancelRequest) => void): () => void;
52
+ //# sourceMappingURL=detached-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detached-control.d.ts","sourceRoot":"","sources":["../src/detached-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,eAAO,MAAM,wBAAwB,IAAkB,CAAC;AACxD,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,2BAA2B,qCAAqC,CAAC;AAC9E,eAAO,MAAM,6BAA6B,uCAAuC,CAAC;AAClF,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AACpF,eAAO,MAAM,iCAAiC,2CAA2C,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAkBD,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAUxG;AAED,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAiBlG;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAO3E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAuBtG;AAOD,wBAAgB,gCAAgC,CAC/C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAc,GACpB,IAAI,CAUN;AAcD,+FAA+F;AAC/F,wBAAgB,0BAA0B,IAAI,OAAO,CAGpD;AAED,qFAAqF;AACrF,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAcpE;AAED,qFAAqF;AACrF,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAYtE;AAmBD,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtG;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAOlG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAC3B,MAAM,SAAkB,EACxB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAClD,MAAM,IAAI,CAaZ"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * File-backed control plane for detached Taskflow runs.
3
+ *
4
+ * A detached runner cannot rely on an IPC channel surviving its parent MCP
5
+ * process. Cancellation is therefore requested through a small durable marker
6
+ * in a user-private control directory keyed by the canonical invocation root.
7
+ * The child polls that marker and aborts the normal RuntimeDeps signal,
8
+ * preserving the runtime's existing paused semantics and process-tree cleanup.
9
+ */
10
+ import * as fs from "node:fs";
11
+ import * as path from "node:path";
12
+ import { spawnSync } from "node:child_process";
13
+ import { detachedControlDir, validateRunId, writeFileAtomic } from "./store.js";
14
+ const DEFAULT_POLL_MS = 250;
15
+ const CONTROL_VERSION = 1;
16
+ export const DETACHED_CONTROL_VERSION = CONTROL_VERSION;
17
+ export const DETACHED_CONTROL_CWD_ENV = "TASKFLOW_DETACHED_CONTROL_CWD";
18
+ export const DETACHED_CONTROL_RUN_ID_ENV = "TASKFLOW_DETACHED_CONTROL_RUN_ID";
19
+ export const DETACHED_CONTROL_INSTANCE_ENV = "TASKFLOW_DETACHED_CONTROL_INSTANCE";
20
+ export const DETACHED_CONTROL_OWNER_PID_ENV = "TASKFLOW_DETACHED_CONTROL_OWNER_PID";
21
+ export const DETACHED_CONTROL_SIGNAL_READY_ENV = "TASKFLOW_DETACHED_CONTROL_SIGNAL_READY";
22
+ function ensureControlDir(cwd) {
23
+ const dir = detachedControlDir(cwd);
24
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
25
+ const stat = fs.lstatSync(dir);
26
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
27
+ throw new Error("Detached control root must be a private physical directory");
28
+ }
29
+ try {
30
+ fs.chmodSync(dir, 0o700);
31
+ }
32
+ catch { /* Windows / restrictive filesystem */ }
33
+ return dir;
34
+ }
35
+ function controlPath(cwd, runId, suffix) {
36
+ if (!validateRunId(runId))
37
+ throw new Error("Invalid runId for detached control");
38
+ return path.join(detachedControlDir(cwd), `${runId}.${suffix}.json`);
39
+ }
40
+ /** Resolve the cancel marker for a run without accepting caller-selected paths. */
41
+ export function detachedCancelRequestPath(cwd, runId) {
42
+ return controlPath(cwd, runId, "cancel");
43
+ }
44
+ /** Persist an idempotent cancellation request for a detached runner. */
45
+ export function requestDetachedCancel(cwd, runId, reason) {
46
+ ensureControlDir(cwd);
47
+ const request = {
48
+ requestedAt: Date.now(),
49
+ ...(typeof reason === "string" && reason.trim()
50
+ ? { reason: reason.trim().slice(0, 500) }
51
+ : {}),
52
+ };
53
+ writeFileAtomic(detachedCancelRequestPath(cwd, runId), `${JSON.stringify(request)}\n`);
54
+ return request;
55
+ }
56
+ /** Read a cancellation request. Corrupt markers still mean "cancel" fail-safe. */
57
+ export function readDetachedCancelRequest(cwd, runId) {
58
+ const filePath = detachedCancelRequestPath(cwd, runId);
59
+ if (!fs.existsSync(filePath))
60
+ return null;
61
+ try {
62
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
63
+ if (typeof parsed === "object" && parsed !== null) {
64
+ const record = parsed;
65
+ return {
66
+ requestedAt: typeof record.requestedAt === "number" ? record.requestedAt : Date.now(),
67
+ ...(typeof record.reason === "string" ? { reason: record.reason } : {}),
68
+ };
69
+ }
70
+ }
71
+ catch {
72
+ // The marker exists, so fail safe and cancel even if its optional metadata
73
+ // was truncated or externally corrupted.
74
+ }
75
+ return { requestedAt: Date.now(), reason: "Cancellation marker was unreadable" };
76
+ }
77
+ export function clearDetachedCancelRequest(cwd, runId) {
78
+ try {
79
+ fs.unlinkSync(detachedCancelRequestPath(cwd, runId));
80
+ }
81
+ catch {
82
+ /* missing/already consumed */
83
+ }
84
+ try {
85
+ fs.rmdirSync(detachedControlDir(cwd));
86
+ }
87
+ catch { /* other markers / missing */ }
88
+ }
89
+ export function detachedProcessRegistryPath(cwd, runId) {
90
+ return controlPath(cwd, runId, "processes");
91
+ }
92
+ export function readDetachedProcessRegistry(cwd, runId) {
93
+ const filePath = detachedProcessRegistryPath(cwd, runId);
94
+ try {
95
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
96
+ if (typeof parsed !== "object" || parsed === null)
97
+ return null;
98
+ const value = parsed;
99
+ if (value.version !== CONTROL_VERSION ||
100
+ typeof value.instanceId !== "string" ||
101
+ !Number.isSafeInteger(value.ownerPid) ||
102
+ typeof value.heartbeatAt !== "number" ||
103
+ !Array.isArray(value.pids))
104
+ return null;
105
+ return {
106
+ version: CONTROL_VERSION,
107
+ instanceId: value.instanceId,
108
+ ownerPid: value.ownerPid,
109
+ heartbeatAt: value.heartbeatAt,
110
+ pids: value.pids.filter((pid) => Number.isSafeInteger(pid) && Number(pid) > 0),
111
+ };
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ }
117
+ function writeDetachedProcessRegistry(cwd, runId, registry) {
118
+ ensureControlDir(cwd);
119
+ writeFileAtomic(detachedProcessRegistryPath(cwd, runId), `${JSON.stringify(registry)}\n`);
120
+ }
121
+ export function heartbeatDetachedProcessRegistry(cwd, runId, instanceId, ownerPid = process.pid) {
122
+ const existing = readDetachedProcessRegistry(cwd, runId);
123
+ const pids = existing?.instanceId === instanceId ? existing.pids : [];
124
+ writeDetachedProcessRegistry(cwd, runId, {
125
+ version: CONTROL_VERSION,
126
+ instanceId,
127
+ ownerPid,
128
+ heartbeatAt: Date.now(),
129
+ pids,
130
+ });
131
+ }
132
+ function processRegistryContextFromEnv() {
133
+ const cwd = process.env[DETACHED_CONTROL_CWD_ENV];
134
+ const runId = process.env[DETACHED_CONTROL_RUN_ID_ENV];
135
+ const instanceId = process.env[DETACHED_CONTROL_INSTANCE_ENV];
136
+ // Host CLIs inherit the detached worker's environment. Only the process that
137
+ // owns this exact PID token may mutate the outer worker's registry; nested
138
+ // Taskflow instances must not overwrite its heartbeat/owner identity.
139
+ if (process.env[DETACHED_CONTROL_OWNER_PID_ENV] !== String(process.pid))
140
+ return null;
141
+ if (!cwd || !runId || !instanceId || !validateRunId(runId))
142
+ return null;
143
+ return { cwd, runId, instanceId };
144
+ }
145
+ /** True only after this exact detached owner installed its persistence-aware signal bridge. */
146
+ export function isDetachedSignalOwnerReady() {
147
+ return process.env[DETACHED_CONTROL_OWNER_PID_ENV] === String(process.pid) &&
148
+ process.env[DETACHED_CONTROL_SIGNAL_READY_ENV] === "1";
149
+ }
150
+ /** Best-effort hook used by runner-core whenever a Host CLI process group starts. */
151
+ export function registerDetachedProcessTreeFromEnv(pid) {
152
+ const context = processRegistryContextFromEnv();
153
+ if (!context || !Number.isSafeInteger(pid) || pid <= 0)
154
+ return;
155
+ try {
156
+ const existing = readDetachedProcessRegistry(context.cwd, context.runId);
157
+ const pids = existing?.instanceId === context.instanceId ? existing.pids : [];
158
+ writeDetachedProcessRegistry(context.cwd, context.runId, {
159
+ version: CONTROL_VERSION,
160
+ instanceId: context.instanceId,
161
+ ownerPid: process.pid,
162
+ heartbeatAt: Date.now(),
163
+ pids: [...new Set([...pids, pid])],
164
+ });
165
+ }
166
+ catch { /* lifecycle diagnostics must never replace phase execution */ }
167
+ }
168
+ /** Best-effort hook used by runner-core after a Host CLI process group is reaped. */
169
+ export function unregisterDetachedProcessTreeFromEnv(pid) {
170
+ const context = processRegistryContextFromEnv();
171
+ if (!context)
172
+ return;
173
+ try {
174
+ const existing = readDetachedProcessRegistry(context.cwd, context.runId);
175
+ if (!existing || existing.instanceId !== context.instanceId)
176
+ return;
177
+ writeDetachedProcessRegistry(context.cwd, context.runId, {
178
+ ...existing,
179
+ heartbeatAt: Date.now(),
180
+ pids: existing.pids.filter((candidate) => candidate !== pid),
181
+ });
182
+ }
183
+ catch { /* lifecycle diagnostics must never replace phase execution */ }
184
+ }
185
+ function killRegisteredProcessTree(pid) {
186
+ if (!Number.isSafeInteger(pid) || pid <= 0 || pid === process.pid)
187
+ return;
188
+ if (process.platform === "win32") {
189
+ try {
190
+ spawnSync("taskkill", ["/PID", String(pid), "/T", "/F"], {
191
+ shell: false,
192
+ stdio: "ignore",
193
+ windowsHide: true,
194
+ });
195
+ }
196
+ catch { /* already gone / taskkill unavailable */ }
197
+ return;
198
+ }
199
+ try {
200
+ process.kill(-pid, "SIGKILL");
201
+ }
202
+ catch {
203
+ try {
204
+ process.kill(pid, "SIGKILL");
205
+ }
206
+ catch { /* already gone */ }
207
+ }
208
+ }
209
+ /** Reap every Host CLI process group owned by exactly this worker instance. */
210
+ export function terminateDetachedProcessTrees(cwd, runId, instanceId) {
211
+ const registry = readDetachedProcessRegistry(cwd, runId);
212
+ if (!registry || registry.instanceId !== instanceId)
213
+ return [];
214
+ for (const pid of registry.pids)
215
+ killRegisteredProcessTree(pid);
216
+ return registry.pids;
217
+ }
218
+ export function clearDetachedProcessRegistry(cwd, runId, instanceId) {
219
+ try {
220
+ const existing = readDetachedProcessRegistry(cwd, runId);
221
+ if (instanceId && existing && existing.instanceId !== instanceId)
222
+ return;
223
+ fs.unlinkSync(detachedProcessRegistryPath(cwd, runId));
224
+ }
225
+ catch { /* missing/already cleared */ }
226
+ try {
227
+ fs.rmdirSync(detachedControlDir(cwd));
228
+ }
229
+ catch { /* other markers / missing */ }
230
+ }
231
+ /**
232
+ * Poll a detached cancellation marker and bridge it into an AbortController.
233
+ * Returns a cleanup callback. The timer is unref'd so it never keeps a
234
+ * completed detached runner alive by itself.
235
+ */
236
+ export function watchDetachedCancel(cwd, runId, controller, pollMs = DEFAULT_POLL_MS, onRequest) {
237
+ const check = () => {
238
+ if (controller.signal.aborted)
239
+ return;
240
+ const request = readDetachedCancelRequest(cwd, runId);
241
+ if (request) {
242
+ onRequest?.(request);
243
+ controller.abort(request);
244
+ }
245
+ };
246
+ check();
247
+ const timer = setInterval(check, Math.max(50, pollMs));
248
+ timer.unref();
249
+ return () => clearInterval(timer);
250
+ }
251
+ //# sourceMappingURL=detached-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detached-control.js","sourceRoot":"","sources":["../src/detached-control.ts"],"names":[],"mappings":"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"}