taskflow-core 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -25
- package/dist/deterministic.d.ts +8 -0
- package/dist/deterministic.d.ts.map +1 -1
- package/dist/deterministic.js +23 -1
- package/dist/deterministic.js.map +1 -1
- package/dist/exec/driver.d.ts +47 -0
- package/dist/exec/driver.d.ts.map +1 -0
- package/dist/exec/driver.js +397 -0
- package/dist/exec/driver.js.map +1 -0
- package/dist/exec/events.d.ts +76 -0
- package/dist/exec/events.d.ts.map +1 -0
- package/dist/exec/events.js +108 -0
- package/dist/exec/events.js.map +1 -0
- package/dist/exec/fold.d.ts +45 -0
- package/dist/exec/fold.d.ts.map +1 -0
- package/dist/exec/fold.js +122 -0
- package/dist/exec/fold.js.map +1 -0
- package/dist/exec/index.d.ts +17 -0
- package/dist/exec/index.d.ts.map +1 -0
- package/dist/exec/index.js +17 -0
- package/dist/exec/index.js.map +1 -0
- package/dist/exec/kernel-policy.d.ts +35 -0
- package/dist/exec/kernel-policy.d.ts.map +1 -0
- package/dist/exec/kernel-policy.js +184 -0
- package/dist/exec/kernel-policy.js.map +1 -0
- package/dist/exec/step-kinds.d.ts +41 -0
- package/dist/exec/step-kinds.d.ts.map +1 -0
- package/dist/exec/step-kinds.js +574 -0
- package/dist/exec/step-kinds.js.map +1 -0
- package/dist/exec/step.d.ts +93 -0
- package/dist/exec/step.d.ts.map +1 -0
- package/dist/exec/step.js +436 -0
- package/dist/exec/step.js.map +1 -0
- package/dist/flowir/canonical-hash.d.ts +101 -0
- package/dist/flowir/canonical-hash.d.ts.map +1 -0
- package/dist/flowir/canonical-hash.js +219 -0
- package/dist/flowir/canonical-hash.js.map +1 -0
- package/dist/flowir/compile.d.ts +49 -0
- package/dist/flowir/compile.d.ts.map +1 -0
- package/dist/flowir/compile.js +219 -0
- package/dist/flowir/compile.js.map +1 -0
- package/dist/flowir/cond.d.ts +76 -0
- package/dist/flowir/cond.d.ts.map +1 -0
- package/dist/flowir/cond.js +214 -0
- package/dist/flowir/cond.js.map +1 -0
- package/dist/flowir/index.d.ts +20 -23
- package/dist/flowir/index.d.ts.map +1 -1
- package/dist/flowir/index.js +47 -35
- package/dist/flowir/index.js.map +1 -1
- package/dist/flowir/meta.d.ts +4 -4
- package/dist/flowir/meta.d.ts.map +1 -1
- package/dist/flowir/phasefp.d.ts.map +1 -1
- package/dist/flowir/phasefp.js +13 -1
- package/dist/flowir/phasefp.js.map +1 -1
- package/dist/flowir/schema.d.ts +260 -0
- package/dist/flowir/schema.d.ts.map +1 -0
- package/dist/flowir/schema.js +234 -0
- package/dist/flowir/schema.js.map +1 -0
- package/dist/flowir/translate.d.ts.map +1 -1
- package/dist/flowir/translate.js +3 -0
- package/dist/flowir/translate.js.map +1 -1
- package/dist/host/runner-types.d.ts +3 -0
- package/dist/host/runner-types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/rates.d.ts +121 -0
- package/dist/rates.d.ts.map +1 -0
- package/dist/rates.js +187 -0
- package/dist/rates.js.map +1 -0
- package/dist/replay.d.ts +43 -50
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +629 -19
- package/dist/replay.js.map +1 -1
- package/dist/runner-core.d.ts +24 -0
- package/dist/runner-core.d.ts.map +1 -1
- package/dist/runner-core.js +225 -32
- package/dist/runner-core.js.map +1 -1
- package/dist/runtime/phases/approval.d.ts +23 -0
- package/dist/runtime/phases/approval.d.ts.map +1 -0
- package/dist/runtime/phases/approval.js +38 -0
- package/dist/runtime/phases/approval.js.map +1 -0
- package/dist/runtime/phases/expand.d.ts +29 -0
- package/dist/runtime/phases/expand.d.ts.map +1 -0
- package/dist/runtime/phases/expand.js +126 -0
- package/dist/runtime/phases/expand.js.map +1 -0
- package/dist/runtime/phases/parallel.d.ts +26 -0
- package/dist/runtime/phases/parallel.d.ts.map +1 -0
- package/dist/runtime/phases/parallel.js +15 -0
- package/dist/runtime/phases/parallel.js.map +1 -0
- package/dist/runtime/phases/race.d.ts +31 -0
- package/dist/runtime/phases/race.d.ts.map +1 -0
- package/dist/runtime/phases/race.js +220 -0
- package/dist/runtime/phases/race.js.map +1 -0
- package/dist/runtime/phases/script.d.ts +38 -0
- package/dist/runtime/phases/script.d.ts.map +1 -0
- package/dist/runtime/phases/script.js +139 -0
- package/dist/runtime/phases/script.js.map +1 -0
- package/dist/runtime.d.ts +29 -16
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +554 -292
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts +36 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +86 -10
- package/dist/schema.js.map +1 -1
- package/dist/store.d.ts +6 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js.map +1 -1
- package/dist/trace.d.ts +4 -1
- package/dist/trace.d.ts.map +1 -1
- package/dist/trace.js +33 -26
- package/dist/trace.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script phase — zero-token shell command execution.
|
|
3
|
+
* Isolated from runtime.ts so S5 strangler can flip kinds without growing the monolith.
|
|
4
|
+
*/
|
|
5
|
+
import { emptyUsage } from "../../usage.js";
|
|
6
|
+
import { killProcessTree } from "../../runner-core.js";
|
|
7
|
+
const MAX_STDOUT = 1_048_576; // 1 MB cap
|
|
8
|
+
const SIGKILL_GRACE_MS = 5_000;
|
|
9
|
+
/**
|
|
10
|
+
* Spawn the script command and capture stdout/stderr with timeout + size caps.
|
|
11
|
+
*/
|
|
12
|
+
export async function runScriptCommand(opts) {
|
|
13
|
+
const { spawn } = await import("node:child_process");
|
|
14
|
+
const { interpRunText, arrayForm, cwd, signal, stdinInput, timeoutMs } = opts;
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
const spawnOptions = {
|
|
17
|
+
cwd,
|
|
18
|
+
env: process.env,
|
|
19
|
+
detached: process.platform !== "win32",
|
|
20
|
+
};
|
|
21
|
+
const child = arrayForm
|
|
22
|
+
? spawn(interpRunText[0], interpRunText.slice(1), {
|
|
23
|
+
...spawnOptions,
|
|
24
|
+
shell: false,
|
|
25
|
+
})
|
|
26
|
+
: spawn(interpRunText[0], [], {
|
|
27
|
+
...spawnOptions,
|
|
28
|
+
shell: true,
|
|
29
|
+
});
|
|
30
|
+
let stdout = "";
|
|
31
|
+
let stderr = "";
|
|
32
|
+
let stdoutOversize = false;
|
|
33
|
+
let timedOut = false;
|
|
34
|
+
child.stdout?.on("data", (d) => {
|
|
35
|
+
if (stdout.length < MAX_STDOUT) {
|
|
36
|
+
const need = MAX_STDOUT - stdout.length;
|
|
37
|
+
stdout += d.toString().slice(0, need);
|
|
38
|
+
if (stdout.length >= MAX_STDOUT)
|
|
39
|
+
stdoutOversize = true;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
child.stderr?.on("data", (d) => {
|
|
43
|
+
if (stderr.length < 500) {
|
|
44
|
+
stderr += d.toString().slice(0, 500 - stderr.length);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
let sigkillTimer;
|
|
48
|
+
const timer = setTimeout(() => {
|
|
49
|
+
timedOut = true;
|
|
50
|
+
if (child.pid)
|
|
51
|
+
killProcessTree(child.pid, "SIGTERM", child);
|
|
52
|
+
sigkillTimer = setTimeout(() => {
|
|
53
|
+
if (child.pid)
|
|
54
|
+
killProcessTree(child.pid, "SIGKILL", child);
|
|
55
|
+
}, SIGKILL_GRACE_MS);
|
|
56
|
+
}, timeoutMs);
|
|
57
|
+
const onAbort = () => {
|
|
58
|
+
if (child.pid)
|
|
59
|
+
killProcessTree(child.pid, "SIGKILL", child);
|
|
60
|
+
};
|
|
61
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
62
|
+
if (signal?.aborted)
|
|
63
|
+
onAbort();
|
|
64
|
+
child.on("error", (err) => {
|
|
65
|
+
clearTimeout(timer);
|
|
66
|
+
clearTimeout(sigkillTimer);
|
|
67
|
+
signal?.removeEventListener("abort", onAbort);
|
|
68
|
+
reject(err);
|
|
69
|
+
});
|
|
70
|
+
child.once("exit", () => {
|
|
71
|
+
if (child.pid)
|
|
72
|
+
killProcessTree(child.pid, "SIGKILL", child);
|
|
73
|
+
});
|
|
74
|
+
child.on("close", (code) => {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
clearTimeout(sigkillTimer);
|
|
77
|
+
signal?.removeEventListener("abort", onAbort);
|
|
78
|
+
if (child.pid)
|
|
79
|
+
killProcessTree(child.pid, "SIGKILL", child);
|
|
80
|
+
resolve({ stdout, stderr, code, stdoutOversize, timedOut });
|
|
81
|
+
});
|
|
82
|
+
if (child.stdin) {
|
|
83
|
+
child.stdin.on("error", () => { }); // swallow EPIPE when child closes stdin early
|
|
84
|
+
if (stdinInput !== undefined)
|
|
85
|
+
child.stdin.write(stdinInput);
|
|
86
|
+
// A spawned process always receives a pipe for stdin. Close it even when
|
|
87
|
+
// the phase omitted `input`, otherwise commands that wait for EOF (for
|
|
88
|
+
// example `cat`) hang until the script timeout fires.
|
|
89
|
+
child.stdin.end();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** Map a successful/failed script process result to PhaseState. */
|
|
94
|
+
export function scriptResultToPhaseState(phase, result, opts) {
|
|
95
|
+
if (result.code !== 0 || result.timedOut) {
|
|
96
|
+
const ps = {
|
|
97
|
+
id: phase.id,
|
|
98
|
+
status: "failed",
|
|
99
|
+
output: result.stdout,
|
|
100
|
+
error: result.timedOut
|
|
101
|
+
? `Script timed out after ${opts.timeoutMs}ms`
|
|
102
|
+
: `Script exited with code ${result.code}${result.stderr ? ": " + result.stderr.slice(0, 500) : ""}${result.stdoutOversize ? " [stdout truncated at 1 MB]" : ""}`,
|
|
103
|
+
timedOut: result.timedOut || undefined,
|
|
104
|
+
usage: emptyUsage(),
|
|
105
|
+
inputHash: opts.inputHash,
|
|
106
|
+
endedAt: Date.now(),
|
|
107
|
+
};
|
|
108
|
+
if (opts.reads)
|
|
109
|
+
ps.reads = opts.reads;
|
|
110
|
+
return ps;
|
|
111
|
+
}
|
|
112
|
+
const ps = {
|
|
113
|
+
id: phase.id,
|
|
114
|
+
status: "done",
|
|
115
|
+
output: result.stdout.trimEnd() + (result.stdoutOversize ? "\n[stdout truncated at 1 MB]" : ""),
|
|
116
|
+
usage: emptyUsage(),
|
|
117
|
+
inputHash: opts.inputHash,
|
|
118
|
+
endedAt: Date.now(),
|
|
119
|
+
};
|
|
120
|
+
if (opts.reads)
|
|
121
|
+
ps.reads = opts.reads;
|
|
122
|
+
return ps;
|
|
123
|
+
}
|
|
124
|
+
/** Spawn error → failed phase (not cacheable — transient). */
|
|
125
|
+
export function scriptSpawnErrorToPhaseState(phaseId, err, opts) {
|
|
126
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
+
const ps = {
|
|
128
|
+
id: phaseId,
|
|
129
|
+
status: "failed",
|
|
130
|
+
error: `Script error: ${msg}`,
|
|
131
|
+
usage: emptyUsage(),
|
|
132
|
+
inputHash: opts.inputHash,
|
|
133
|
+
endedAt: Date.now(),
|
|
134
|
+
};
|
|
135
|
+
if (opts.reads)
|
|
136
|
+
ps.reads = opts.reads;
|
|
137
|
+
return ps;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../../src/runtime/phases/script.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -14,9 +14,11 @@ import type { SubagentRunner } from "./host/runner-types.ts";
|
|
|
14
14
|
/** The host-neutral subagent runner signature the engine drives. A host adapter
|
|
15
15
|
* (pi, codex) injects a concrete `runTask` via `RuntimeDeps`. */
|
|
16
16
|
type RunTaskFn = SubagentRunner<any>["runTask"];
|
|
17
|
+
export { PHASE_TIMEOUT_ABORT_GRACE_MS } from "./runner-core.ts";
|
|
17
18
|
import { type UsageStats } from "./usage.ts";
|
|
18
19
|
import { type CacheScope, type Taskflow } from "./schema.ts";
|
|
19
20
|
import { parseGateVerdict } from "./deterministic.ts";
|
|
21
|
+
export { parseTournamentWinner } from "./deterministic.ts";
|
|
20
22
|
import { type TraceSink } from "./trace.ts";
|
|
21
23
|
export { parseGateVerdict };
|
|
22
24
|
import { type PhaseState, type RunState } from "./store.ts";
|
|
@@ -38,6 +40,10 @@ export interface RuntimeDeps {
|
|
|
38
40
|
cwd: string;
|
|
39
41
|
agents: AgentConfig[];
|
|
40
42
|
globalThinking?: string;
|
|
43
|
+
/** Whether the host reports authoritative token/cost usage. A host that
|
|
44
|
+
* cannot observe usage must reject every actually-executed budgeted flow,
|
|
45
|
+
* including nested/dynamic flows, rather than silently bypassing the cap. */
|
|
46
|
+
usageAccounting?: "available" | "tokens-only" | "unavailable";
|
|
41
47
|
signal?: AbortSignal;
|
|
42
48
|
/** Persist run state after each phase (for resume). */
|
|
43
49
|
persist?: (state: RunState) => void;
|
|
@@ -58,6 +64,12 @@ export interface RuntimeDeps {
|
|
|
58
64
|
* append-only trace for offline replay. Absent → no-op (runs behave
|
|
59
65
|
* identically to today). See `trace.ts`. */
|
|
60
66
|
trace?: TraceSink;
|
|
67
|
+
/**
|
|
68
|
+
* S2 strangler: when true, eligible flows run on `exec/driver` (event kernel).
|
|
69
|
+
* Covers core kinds except `race`/`expand`; advanced features force imperative
|
|
70
|
+
* fallback. Default false; also set `PI_TASKFLOW_EVENT_KERNEL=1`.
|
|
71
|
+
*/
|
|
72
|
+
eventKernel?: boolean;
|
|
61
73
|
/** Internal: sub-flow call stack, for recursion detection. */
|
|
62
74
|
_stack?: string[];
|
|
63
75
|
/** Internal: pre-resolved Shared Context Tree dir for this run (sub-flows inherit the parent's). */
|
|
@@ -119,6 +131,13 @@ export interface PhaseCacheCtx {
|
|
|
119
131
|
* whether a given branch happens to fold preRead into its task string
|
|
120
132
|
* (previously this was only incidentally true via `fullTask`). */
|
|
121
133
|
preRead?: string;
|
|
134
|
+
/** Flow-level semantics retained even by per-item cache contexts, which
|
|
135
|
+
* deliberately omit phaseFp/flowDefHash for partial reuse. */
|
|
136
|
+
agentScope?: Taskflow["agentScope"];
|
|
137
|
+
contextSharing?: boolean;
|
|
138
|
+
/** Resolved agent content/config. Same name+scope can still change prompt,
|
|
139
|
+
* model, tools, or thinking and must invalidate cached output. */
|
|
140
|
+
agentDefinitions?: string;
|
|
122
141
|
/** Content fingerprint of the desugared flow definition — folded into the
|
|
123
142
|
* key so two structurally-different flows that share a name can never
|
|
124
143
|
* collide, and a changed flow never serves a stale cross-run hit. */
|
|
@@ -135,12 +154,16 @@ export interface PhaseCacheCtx {
|
|
|
135
154
|
* inputHash they miss and re-run, otherwise they hit (early cutoff). */
|
|
136
155
|
forceRerun?: boolean;
|
|
137
156
|
}
|
|
157
|
+
/** Stable cache identity for the fully resolved agent pool. File paths are
|
|
158
|
+
* excluded: content/config, not installation location, determines output. */
|
|
159
|
+
export declare function agentDefinitionsIdentity(agents: readonly AgentConfig[]): string;
|
|
138
160
|
/** Fold the phase fingerprint into the base hash parts to form the final cache key. */
|
|
139
161
|
/** A computed cache identity: the new (versioned) key plus the read-only
|
|
140
162
|
* fallback keys used to honor entries written by older releases. The `key`
|
|
141
163
|
* is what we WRITE under and what `PhaseState.inputHash` carries; the
|
|
142
|
-
* `v2Key`/`bareKey
|
|
143
|
-
*
|
|
164
|
+
* `v2Key`/`bareKey` are consulted READ-ONLY on a miss. `legacyKey` is exposed
|
|
165
|
+
* only for tooling/tests and is never read because it lacks structural
|
|
166
|
+
* identity. See docs/internal/cache-migration.md. */
|
|
144
167
|
export interface CacheKeys {
|
|
145
168
|
/** Current key: folds `v3:phasefp:<subfp>` (the per-phase structural
|
|
146
169
|
* sub-fingerprint; degrades to the whole-flow hash when per-phase
|
|
@@ -157,7 +180,7 @@ export interface CacheKeys {
|
|
|
157
180
|
}
|
|
158
181
|
/** Fold the phase fingerprint into the base hash parts to form the cache keys.
|
|
159
182
|
*
|
|
160
|
-
|
|
183
|
+
* Four keys are derived for tooling/backward compatibility (see
|
|
161
184
|
* docs/internal/cache-migration.md):
|
|
162
185
|
* - `key` : `v3:phasefp:<subfp>` — the current write key (per-phase
|
|
163
186
|
* structural sub-fingerprint; falls back to the whole-flow hash when
|
|
@@ -165,20 +188,10 @@ export interface CacheKeys {
|
|
|
165
188
|
* - `v2Key` : `v2:flowdef:<flowDefHash>` — pre-M6 whole-flow key.
|
|
166
189
|
* - `bareKey` : bare `flowdef:<flowDefHash>` (unversioned) — pre-H1 entries.
|
|
167
190
|
* - `legacyKey`: the flowdef line omitted — pre-flowDefHash entries.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
191
|
+
* `cachedPhase` consults the first three safe tiers READ-ONLY on a miss;
|
|
192
|
+
* `legacyKey` is never read because it has no structural identity.
|
|
193
|
+
* `recordCache` writes only `key`. */
|
|
171
194
|
export declare function cacheKeys(cc: PhaseCacheCtx, baseParts: string[]): CacheKeys;
|
|
172
|
-
/**
|
|
173
|
-
* Parse a judge's pick of the winning variant. Accepts JSON ({"winner":n} or
|
|
174
|
-
* {"best":n}) or a `WINNER: n` line (last match wins). Clamps to [1, count].
|
|
175
|
-
* Fail-open: an unreadable verdict defaults to variant 1 so the work is never
|
|
176
|
-
* lost. Returns the 1-based index plus an optional reason.
|
|
177
|
-
*/
|
|
178
|
-
export declare function parseTournamentWinner(output: string, count: number): {
|
|
179
|
-
winner: number;
|
|
180
|
-
reason?: string;
|
|
181
|
-
};
|
|
182
195
|
/**
|
|
183
196
|
* Execute a full taskflow. Mutates and persists `state` as it progresses.
|
|
184
197
|
*/
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEpF;kEACkE;AAClE,KAAK,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAchD,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAe,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|