taskflow-core 0.2.3 → 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 (43) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/compile.d.ts +8 -1
  3. package/dist/compile.d.ts.map +1 -1
  4. package/dist/compile.js +75 -9
  5. package/dist/compile.js.map +1 -1
  6. package/dist/exec/driver.d.ts +5 -0
  7. package/dist/exec/driver.d.ts.map +1 -1
  8. package/dist/exec/driver.js +96 -52
  9. package/dist/exec/driver.js.map +1 -1
  10. package/dist/exec/kernel-policy.d.ts.map +1 -1
  11. package/dist/exec/kernel-policy.js +20 -20
  12. package/dist/exec/kernel-policy.js.map +1 -1
  13. package/dist/exec/step-kinds.d.ts.map +1 -1
  14. package/dist/exec/step-kinds.js +59 -22
  15. package/dist/exec/step-kinds.js.map +1 -1
  16. package/dist/exec/step.d.ts.map +1 -1
  17. package/dist/exec/step.js +44 -10
  18. package/dist/exec/step.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/runtime.d.ts +13 -0
  24. package/dist/runtime.d.ts.map +1 -1
  25. package/dist/runtime.js +60 -4
  26. package/dist/runtime.js.map +1 -1
  27. package/dist/verifiers/discover.d.ts +44 -0
  28. package/dist/verifiers/discover.d.ts.map +1 -0
  29. package/dist/verifiers/discover.js +152 -0
  30. package/dist/verifiers/discover.js.map +1 -0
  31. package/dist/verifiers/index.d.ts +12 -0
  32. package/dist/verifiers/index.d.ts.map +1 -0
  33. package/dist/verifiers/index.js +12 -0
  34. package/dist/verifiers/index.js.map +1 -0
  35. package/dist/verifiers/script-lint.d.ts +24 -0
  36. package/dist/verifiers/script-lint.d.ts.map +1 -0
  37. package/dist/verifiers/script-lint.js +311 -0
  38. package/dist/verifiers/script-lint.js.map +1 -0
  39. package/dist/verify.d.ts +55 -3
  40. package/dist/verify.d.ts.map +1 -1
  41. package/dist/verify.js +201 -2
  42. package/dist/verify.js.map +1 -1
  43. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -51,4 +51,5 @@ export * from "./trace.js";
51
51
  export * from "./deterministic.js";
52
52
  export * from "./replay.js";
53
53
  export * from "./exec/index.js";
54
+ export * from "./verifiers/index.js";
54
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,OAAO,EACN,6BAA6B,EAC7B,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,GAChC,MAAM,0BAA0B,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,iFAAiF;AACjF,+EAA+E;AAC/E,iFAAiF;AACjF,mCAAmC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,OAAO,EACN,6BAA6B,EAC7B,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,GAChC,MAAM,0BAA0B,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,iFAAiF;AACjF,+EAA+E;AAC/E,iFAAiF;AACjF,mCAAmC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -17,6 +17,7 @@ type RunTaskFn = SubagentRunner<any>["runTask"];
17
17
  export { PHASE_TIMEOUT_ABORT_GRACE_MS } from "./runner-core.ts";
18
18
  import { type UsageStats } from "./usage.ts";
19
19
  import { type CacheScope, type Phase, type Taskflow } from "./schema.ts";
20
+ import { type TaskflowVerifier } from "./verify.ts";
20
21
  import { parseGateVerdict } from "./deterministic.ts";
21
22
  export { parseTournamentWinner } from "./deterministic.ts";
22
23
  import { type TraceSink } from "./trace.ts";
@@ -72,6 +73,13 @@ export interface RuntimeDeps {
72
73
  * fallback. Default false; also set `PI_TASKFLOW_EVENT_KERNEL=1`.
73
74
  */
74
75
  eventKernel?: boolean;
76
+ /** Caller-supplied zero-token verifiers (see verify.ts). Threaded into every
77
+ * `verifyTaskflow` preflight the runtime performs — dynamic subflows (spawn +
78
+ * inline `flow{def}`), the event-kernel path, and the top-level pre-execution
79
+ * gate (which blocks only on error-severity plugin issues, leaving built-in
80
+ * detectors advisory at the top level as before). A host embedding the engine
81
+ * registers the verifiers it trusts here. Undefined ⇒ built-in detectors only. */
82
+ verifiers?: TaskflowVerifier[];
75
83
  /** Internal: sub-flow call stack, for recursion detection. */
76
84
  _stack?: string[];
77
85
  /** Internal: pre-resolved Shared Context Tree dir for this run (sub-flows inherit the parent's). */
@@ -102,6 +110,11 @@ export interface RuntimeDeps {
102
110
  /** Internal: one immutable loader view per top-level execution. Saved-flow
103
111
  * definitions must not change between capability scan and execution. */
104
112
  _flowLoaderSnapshot?: Map<string, FlowLoaderSnapshotEntry>;
113
+ /** Internal: a child-flow dispatch site has already run the plugin-verifier
114
+ * preflight on the child's declared def, so executeTaskflow's top-level
115
+ * preflight must NOT re-run it on re-entry (avoids verifying each child 2-3x
116
+ * across the imperative path). Root/ctx_spawn entries leave this unset. */
117
+ _verifierPreflightDone?: boolean;
105
118
  /** Internal phase-scoped W1a execution binding inherited only by descendants
106
119
  * that remain inside the selected cwd capability. */
107
120
  _workspaceBinding?: ResolveOnlyPhaseBinding;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -29,7 +29,7 @@ const noRunnerInjected = async (_cwd, _agents, agentName, task) => ({
29
29
  export { PHASE_TIMEOUT_ABORT_GRACE_MS } from "./runner-core.js";
30
30
  import { aggregateUsage, emptyUsage } from "./usage.js";
31
31
  import { asArray, dependenciesOf, LOOP_DEFAULT_MAX_ITERATIONS, LOOP_HARD_MAX_ITERATIONS, MAX_DYNAMIC_MAP_ITEMS, MAX_DYNAMIC_NESTING, MAX_DYNAMIC_PHASES, parseTtlMs, resolveArgs, topoLayers, TOURNAMENT_DEFAULT_VARIANTS, TOURNAMENT_HARD_MAX_VARIANTS, validateInvocationArgs, validateTaskflow } from "./schema.js";
32
- import { verifyTaskflow } from "./verify.js";
32
+ import { verifyTaskflow, pluginVerifierErrors, formatPluginIssueMessages } from "./verify.js";
33
33
  import { combineScores, combineWithJudge, evaluatePureScorer, formatScorerReport, parseJudgeOutput, SCORE_DEFAULT_THRESHOLD, scoreResultJSON, scorerShapeErrors } from "./scorers.js";
34
34
  import { parseGateVerdict, overBudget as overBudgetCheck, parseTournamentWinner } from "./deterministic.js";
35
35
  export { parseTournamentWinner } from "./deterministic.js";
@@ -653,7 +653,7 @@ async function runInlineSubflow(subflowSpec, defaultAgent, childNodeId, phase, d
653
653
  const error = `spawned subflow failed validation: ${v.errors.join("; ")}`;
654
654
  return { output: `(${error})`, usage: emptyUsage(), failed: true, error };
655
655
  }
656
- const ver = verifyTaskflow({ name: wrapped.name, phases: wrapped.phases, budget: wrapped.budget, concurrency: wrapped.concurrency });
656
+ const ver = verifyTaskflow({ name: wrapped.name, phases: wrapped.phases, budget: wrapped.budget, concurrency: wrapped.concurrency }, { verifiers: deps.verifiers });
657
657
  if (!ver.ok) {
658
658
  const errs = ver.issues.filter((i) => i.severity === "error").map((i) => i.message);
659
659
  const error = `spawned subflow failed verification: ${errs.join("; ")}`;
@@ -686,6 +686,9 @@ async function runInlineSubflow(subflowSpec, defaultAgent, childNodeId, phase, d
686
686
  cwd: dynCwd,
687
687
  _cacheCwdIdentity: phase.cwd !== undefined || deps._cacheCwdIdentity !== undefined ? dynCwd : undefined,
688
688
  _dynamic: true,
689
+ // runInlineSubflow already ran the plugin-verifier preflight on this
690
+ // spawned child (above); don't re-run it on executeTaskflow re-entry.
691
+ _verifierPreflightDone: true,
689
692
  // The parent phase's isolated workspace (if any) applies only to the
690
693
  // parent — each spawned sub-phase resolves its own cwd. Clear the
691
694
  // override so the whole subflow doesn't inherit the parent's dir
@@ -2481,8 +2484,21 @@ async function executePhaseInner(phase, state, deps, prior, emitProgress, _retry
2481
2484
  return defFailOpen(`inline def failed validation: ${v.errors.join("; ")}`);
2482
2485
  }
2483
2486
  // Static verification (dead-ends, unreachable, gate-exhaustion, budget,
2484
- // concurrency). Only error-severity issues block; warnings are advisory.
2485
- const ver = verifyTaskflow({ name: wrapped.name, phases: wrapped.phases, budget: wrapped.budget, concurrency: wrapped.concurrency });
2487
+ // concurrency) + caller-supplied verifiers. Two contracts by issue origin:
2488
+ // - Built-in error-severity issues FAIL-OPEN: a malformed LLM-authored def
2489
+ // resolves as done/empty with a defError diagnostic and never aborts the
2490
+ // run (authors who want a hard failure can gate downstream). Warnings
2491
+ // are advisory.
2492
+ // - Plugin-verifier errors FAIL-CLOSE: a host's trusted policy must block
2493
+ // spend AND surface as a run failure — matching the saved-use path just
2494
+ // below, runInlineSubflow, the event kernel (runNested), and the top-level
2495
+ // preflight. Without this an inline-def child would silently bypass a
2496
+ // plugin block with res.ok=true (review of #84).
2497
+ const ver = verifyTaskflow({ name: wrapped.name, phases: wrapped.phases, budget: wrapped.budget, concurrency: wrapped.concurrency }, { verifiers: deps.verifiers });
2498
+ const inlinePluginErrors = ver.issues.filter((i) => i.category === "plugin" && i.severity === "error");
2499
+ if (inlinePluginErrors.length) {
2500
+ return failPhase(phase.id, `flow phase '${phase.id}': inline def '${wrapped.name}' failed verifier preflight: ${formatPluginIssueMessages(inlinePluginErrors).join("; ")}`);
2501
+ }
2486
2502
  if (!ver.ok) {
2487
2503
  const errs = ver.issues.filter((i) => i.severity === "error").map((i) => i.message);
2488
2504
  return defFailOpen(`inline def failed verification: ${errs.join("; ")}`);
@@ -2527,6 +2543,22 @@ async function executePhaseInner(phase, state, deps, prior, emitProgress, _retry
2527
2543
  const nestedBridgeTree = flowTreeUsesCwdBridge(subDef, deps.loadFlow);
2528
2544
  if (nestedBridgeTree)
2529
2545
  deps._disableCache = true;
2546
+ // Plugin-error verifier preflight (no-spend gate) BEFORE cache/resume reuse,
2547
+ // for SAVED-USE children only. Inline-def children are already gated by the
2548
+ // verifyTaskflow in the hasDef branch above (plugin errors fail-close,
2549
+ // built-in errors fail-open) — which also runs before this cache lookup — so
2550
+ // re-verifying them here would be redundant. A cached saved-use child is
2551
+ // returned just below WITHOUT re-entering executeTaskflow, and a saved-use
2552
+ // child has no earlier verify site, so this is its single plugin gate and
2553
+ // the cache-reuse guard (review
2554
+ // of #84, issue 1). Blocks only on plugin error-severity issues; built-in
2555
+ // detectors stay advisory.
2556
+ if (!hasDef) {
2557
+ const flowPluginErrors = pluginVerifierErrors({ name: subDef.name, phases: subDef.phases, budget: subDef.budget, concurrency: subDef.concurrency }, deps.verifiers);
2558
+ if (flowPluginErrors) {
2559
+ return failPhase(phase.id, `flow phase '${phase.id}': sub-flow '${subDef.name}' failed verifier preflight: ${flowPluginErrors.join("; ")}`);
2560
+ }
2561
+ }
2530
2562
  const flowCc = nestedBridgeTree ? { ...cc, scope: "off" } : cc;
2531
2563
  // Every sub-flow cache identity includes the resolved definition. A saved
2532
2564
  // flow's name alone is insufficient: its contents can change without the
@@ -2578,6 +2610,10 @@ async function executePhaseInner(phase, state, deps, prior, emitProgress, _retry
2578
2610
  cwd: effCwd,
2579
2611
  _cacheCwdIdentity: phase.cwd !== undefined || deps._cacheCwdIdentity !== undefined ? effCwd : undefined,
2580
2612
  _dynamic: hasDef || deps._dynamic === true ? true : undefined,
2613
+ // The flow-phase handler already ran the plugin-verifier preflight on
2614
+ // this child (inline-def via verifyTaskflow at the def branch, saved-use
2615
+ // via pluginVerifierErrors just above); don't re-run it on re-entry.
2616
+ _verifierPreflightDone: true,
2581
2617
  // The workspace override applies only to THIS flow phase, not to the
2582
2618
  // nested sub-phases (each resolves its own cwd). Clear it so the child
2583
2619
  // phases don't all inherit this phase's isolated dir as an override.
@@ -3748,6 +3784,25 @@ export async function executeTaskflow(state, deps) {
3748
3784
  throw new Error("This host reports tokens but not cost, so budget.maxUSD cannot be enforced. " +
3749
3785
  "Use budget.maxTokens or a host with cost accounting.");
3750
3786
  }
3787
+ // Top-level structural preflight (zero-token). Built-in detector findings
3788
+ // (any severity) stay advisory at the top level — a flow may still run even
3789
+ // with structural errors, exactly as before this seam existed. We block ONLY
3790
+ // on error-severity issues from caller-supplied verifiers (deps.verifiers):
3791
+ // category "plugin" is the canonical discriminator (a nameless verifier's
3792
+ // fail-closed issue still carries it, whereas `source` would be undefined).
3793
+ // Existing flows are unaffected and a host's trusted verifiers can gate spend
3794
+ // before any agent is spawned. Plugin warnings never block here. SKIPPED on
3795
+ // re-entry: a child-flow dispatch site (executePhaseInner / runInlineSubflow)
3796
+ // already ran this gate on the child's declared def and sets
3797
+ // _verifierPreflightDone, so we neither re-verify the same child nor re-run
3798
+ // it against the budget-clamped child def that differs from what the
3799
+ // dispatch site saw.
3800
+ if (deps.verifiers?.length && !deps._verifierPreflightDone) {
3801
+ const pluginErrors = pluginVerifierErrors({ name: def.name, phases: def.phases, budget: def.budget, concurrency: def.concurrency }, deps.verifiers);
3802
+ if (pluginErrors) {
3803
+ throw new Error(`Taskflow '${def.name}' failed verifier preflight: ${pluginErrors.join("; ")}`);
3804
+ }
3805
+ }
3751
3806
  // S2 strangler (default OFF): all phase kinds may use the event kernel when enabled.
3752
3807
  const { eventKernelEnabled, canUseEventKernel, runEventKernel } = await import("./exec/driver.js");
3753
3808
  // Existing phase state requires the imperative cache/inputHash machinery to
@@ -3770,6 +3825,7 @@ export async function executeTaskflow(state, deps) {
3770
3825
  persist: deps.persist,
3771
3826
  onProgress: deps.onProgress,
3772
3827
  eventKernel: deps.eventKernel,
3828
+ verifiers: deps.verifiers,
3773
3829
  requestApproval: deps.requestApproval,
3774
3830
  loadFlow: deps.loadFlow,
3775
3831
  _stack: deps._stack,