taskflow-core 0.2.5 → 0.2.7
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 +33 -5
- package/dist/analytics.d.ts +30 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +127 -0
- package/dist/analytics.js.map +1 -0
- package/dist/build-info.json +2 -2
- package/dist/exec/step-kinds.d.ts +1 -1
- package/dist/exec/step-kinds.d.ts.map +1 -1
- package/dist/exec/step-kinds.js +26 -14
- package/dist/exec/step-kinds.js.map +1 -1
- package/dist/hooks.d.ts +73 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +296 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/preflight.d.ts +69 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +389 -0
- package/dist/preflight.js.map +1 -0
- package/dist/runner-core.d.ts +6 -0
- package/dist/runner-core.d.ts.map +1 -1
- package/dist/runner-core.js +75 -19
- package/dist/runner-core.js.map +1 -1
- package/dist/runtime/phases/approval-wait.d.ts +33 -0
- package/dist/runtime/phases/approval-wait.d.ts.map +1 -0
- package/dist/runtime/phases/approval-wait.js +95 -0
- package/dist/runtime/phases/approval-wait.js.map +1 -0
- package/dist/runtime/phases/approval.d.ts +1 -1
- package/dist/runtime/phases/approval.d.ts.map +1 -1
- package/dist/runtime/phases/approval.js +10 -6
- package/dist/runtime/phases/approval.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +40 -11
- package/dist/runtime.js.map +1 -1
- package/dist/savings.d.ts +36 -0
- package/dist/savings.d.ts.map +1 -0
- package/dist/savings.js +76 -0
- package/dist/savings.js.map +1 -0
- package/dist/schema.d.ts +31 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +123 -0
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preflight dry-run — zero-token plan before spend.
|
|
3
|
+
*
|
|
4
|
+
* Binds typed args, runs structural verify, projects a phase plan with
|
|
5
|
+
* static/dynamic binding status, and computes a worst-case agent-call bound.
|
|
6
|
+
*/
|
|
7
|
+
import { asArray, collectRefs, desugar, isShorthand, LOOP_DEFAULT_MAX_ITERATIONS, LOOP_HARD_MAX_ITERATIONS, resolveArgs, topoLayers, validateInvocationArgs, validateTaskflow, } from "./schema.js";
|
|
8
|
+
import { verifyTaskflow, } from "./verify.js";
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// when / binding helpers
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const STEPS_PLACEHOLDER = /\{steps\.[a-zA-Z0-9_-]+/;
|
|
13
|
+
const PREVIOUS_PLACEHOLDER = /\{previous\.|\{item\b|\{reflexion\b/;
|
|
14
|
+
const ARGS_PLACEHOLDER = /\{args\.([a-zA-Z0-9_-]+)(?:\.[a-zA-Z0-9_-]+)*\}/g;
|
|
15
|
+
function templateIsDynamic(s) {
|
|
16
|
+
if (!s)
|
|
17
|
+
return false;
|
|
18
|
+
return STEPS_PLACEHOLDER.test(s) || PREVIOUS_PLACEHOLDER.test(s);
|
|
19
|
+
}
|
|
20
|
+
/** Classify a `when` guard for preflight (args-only static evaluation). */
|
|
21
|
+
export function classifyWhen(when, args) {
|
|
22
|
+
if (!when || !when.trim())
|
|
23
|
+
return "always";
|
|
24
|
+
if (templateIsDynamic(when))
|
|
25
|
+
return "dynamic";
|
|
26
|
+
// Only args — try a tiny static truthiness check for simple forms.
|
|
27
|
+
const onlyArgs = when.replace(ARGS_PLACEHOLDER, (_, name) => {
|
|
28
|
+
const v = args[name];
|
|
29
|
+
if (v === undefined)
|
|
30
|
+
return "{missing}";
|
|
31
|
+
return String(v);
|
|
32
|
+
});
|
|
33
|
+
if (onlyArgs.includes("{"))
|
|
34
|
+
return "dynamic";
|
|
35
|
+
// Simple literals after arg substitution
|
|
36
|
+
const t = onlyArgs.trim().toLowerCase();
|
|
37
|
+
if (t === "true" || t === "1" || t === "yes")
|
|
38
|
+
return "static-true";
|
|
39
|
+
if (t === "false" || t === "0" || t === "no" || t === "")
|
|
40
|
+
return "static-false";
|
|
41
|
+
// Equality on args: `{args.x}==foo` already substituted above if exact
|
|
42
|
+
if (/^(true|false)$/i.test(t))
|
|
43
|
+
return t.toLowerCase() === "true" ? "static-true" : "static-false";
|
|
44
|
+
// Conservative: treat non-trivial static expressions as dynamic (fail-open at plan)
|
|
45
|
+
if (!STEPS_PLACEHOLDER.test(when) && !PREVIOUS_PLACEHOLDER.test(when)) {
|
|
46
|
+
// If no missing args placeholders left, we still may not eval full condition language —
|
|
47
|
+
// mark dynamic so we never skip a phase that should run.
|
|
48
|
+
return "dynamic";
|
|
49
|
+
}
|
|
50
|
+
return "dynamic";
|
|
51
|
+
}
|
|
52
|
+
function collectTemplates(phase) {
|
|
53
|
+
const out = [];
|
|
54
|
+
const push = (s) => {
|
|
55
|
+
if (typeof s === "string" && s.includes("{"))
|
|
56
|
+
out.push(s);
|
|
57
|
+
};
|
|
58
|
+
push(phase.task);
|
|
59
|
+
push(phase.over);
|
|
60
|
+
push(phase.when);
|
|
61
|
+
push(phase.until);
|
|
62
|
+
push(phase.cwd);
|
|
63
|
+
if (Array.isArray(phase.run))
|
|
64
|
+
for (const r of phase.run)
|
|
65
|
+
push(r);
|
|
66
|
+
push(phase.input);
|
|
67
|
+
if (typeof phase.def === "string")
|
|
68
|
+
push(phase.def);
|
|
69
|
+
for (const e of asArray(phase.eval))
|
|
70
|
+
push(e);
|
|
71
|
+
const score = phase.score;
|
|
72
|
+
if (score && typeof score === "object") {
|
|
73
|
+
push(score.target);
|
|
74
|
+
if (score.judge && typeof score.judge === "object")
|
|
75
|
+
push(score.judge.task);
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
function bindingsForPhase(phase, args) {
|
|
80
|
+
const refs = collectRefs(phase);
|
|
81
|
+
const bindings = [];
|
|
82
|
+
for (const a of refs.args) {
|
|
83
|
+
if (a in args && args[a] !== undefined) {
|
|
84
|
+
bindings.push({ path: `args.${a}`, status: "bound", value: stringifyBound(args[a]) });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
bindings.push({ path: `args.${a}`, status: "unresolved" });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
for (const s of refs.steps) {
|
|
91
|
+
bindings.push({ path: `steps.${s}`, status: "dynamic" });
|
|
92
|
+
}
|
|
93
|
+
// Also flag previous/item style dynamics from templates
|
|
94
|
+
for (const t of collectTemplates(phase)) {
|
|
95
|
+
if (PREVIOUS_PLACEHOLDER.test(t) && !bindings.some((b) => b.path.startsWith("previous") || b.path === "item")) {
|
|
96
|
+
if (/\{previous\./.test(t))
|
|
97
|
+
bindings.push({ path: "previous.output", status: "dynamic" });
|
|
98
|
+
if (/\{item\b/.test(t))
|
|
99
|
+
bindings.push({ path: "item", status: "dynamic" });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return bindings;
|
|
103
|
+
}
|
|
104
|
+
function stringifyBound(v) {
|
|
105
|
+
if (typeof v === "string")
|
|
106
|
+
return v.length > 80 ? `${v.slice(0, 77)}…` : v;
|
|
107
|
+
try {
|
|
108
|
+
const s = JSON.stringify(v);
|
|
109
|
+
return s.length > 80 ? `${s.slice(0, 77)}…` : s;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return String(v);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// Budget bound
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
const LLM_TYPES = new Set([
|
|
119
|
+
"agent",
|
|
120
|
+
"gate",
|
|
121
|
+
"reduce",
|
|
122
|
+
"map",
|
|
123
|
+
"parallel",
|
|
124
|
+
"loop",
|
|
125
|
+
"tournament",
|
|
126
|
+
"race",
|
|
127
|
+
]);
|
|
128
|
+
export function computeBudgetBound(phases, args = {}) {
|
|
129
|
+
const assumptions = [];
|
|
130
|
+
let unbounded = false;
|
|
131
|
+
let maxMapFanout;
|
|
132
|
+
let total = 0;
|
|
133
|
+
const byId = new Map(phases.map((p) => [p.id, p]));
|
|
134
|
+
const boundPhase = (p, stack) => {
|
|
135
|
+
if (stack.has(p.id)) {
|
|
136
|
+
assumptions.push(`cycle involving '${p.id}' treated as unbounded`);
|
|
137
|
+
return "unbounded";
|
|
138
|
+
}
|
|
139
|
+
const when = classifyWhen(p.when, args);
|
|
140
|
+
if (when === "static-false")
|
|
141
|
+
return 0;
|
|
142
|
+
const type = p.type ?? "agent";
|
|
143
|
+
const next = new Set(stack);
|
|
144
|
+
next.add(p.id);
|
|
145
|
+
if (type === "script" || type === "approval")
|
|
146
|
+
return 0;
|
|
147
|
+
if (type === "agent" || type === "gate" || type === "reduce") {
|
|
148
|
+
if (type === "reduce" && p.reduceStrategy === "tree") {
|
|
149
|
+
assumptions.push(`phase '${p.id}': tree-reduce worst-case uses TREE cap (bounded as 256)`);
|
|
150
|
+
return 256;
|
|
151
|
+
}
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
if (type === "parallel" || type === "race") {
|
|
155
|
+
const branches = asArray(p.branches);
|
|
156
|
+
// Each branch is one agent call in the common case
|
|
157
|
+
const n = Math.max(branches.length, 1);
|
|
158
|
+
return n;
|
|
159
|
+
}
|
|
160
|
+
if (type === "tournament") {
|
|
161
|
+
const variants = typeof p.variants === "number" && Number.isFinite(p.variants)
|
|
162
|
+
? Math.max(1, Math.floor(p.variants))
|
|
163
|
+
: asArray(p.branches).length || 3;
|
|
164
|
+
return variants + 1; // variants + judge
|
|
165
|
+
}
|
|
166
|
+
if (type === "map") {
|
|
167
|
+
const over = p.over ?? "";
|
|
168
|
+
if (templateIsDynamic(over) || STEPS_PLACEHOLDER.test(over)) {
|
|
169
|
+
assumptions.push(`phase '${p.id}': map.over is dynamic → agent-call bound unbounded`);
|
|
170
|
+
maxMapFanout = "unbounded";
|
|
171
|
+
unbounded = true;
|
|
172
|
+
return "unbounded";
|
|
173
|
+
}
|
|
174
|
+
// args-only array refs are still dynamic without evaluating over JSON
|
|
175
|
+
if (/\{args\./.test(over)) {
|
|
176
|
+
assumptions.push(`phase '${p.id}': map.over depends on args (length unknown) → unbounded`);
|
|
177
|
+
maxMapFanout = "unbounded";
|
|
178
|
+
unbounded = true;
|
|
179
|
+
return "unbounded";
|
|
180
|
+
}
|
|
181
|
+
assumptions.push(`phase '${p.id}': map.over not a static array → treated as unbounded`);
|
|
182
|
+
maxMapFanout = "unbounded";
|
|
183
|
+
unbounded = true;
|
|
184
|
+
return "unbounded";
|
|
185
|
+
}
|
|
186
|
+
if (type === "loop") {
|
|
187
|
+
const maxIter = typeof p.maxIterations === "number" && Number.isFinite(p.maxIterations)
|
|
188
|
+
? Math.min(Math.max(1, Math.floor(p.maxIterations)), LOOP_HARD_MAX_ITERATIONS)
|
|
189
|
+
: LOOP_DEFAULT_MAX_ITERATIONS;
|
|
190
|
+
// Body is one agent call per iteration (loop body is the phase task)
|
|
191
|
+
return maxIter;
|
|
192
|
+
}
|
|
193
|
+
if (type === "flow" || type === "expand") {
|
|
194
|
+
const def = p.def;
|
|
195
|
+
if (def && typeof def === "object" && def !== null) {
|
|
196
|
+
const child = def;
|
|
197
|
+
const childPhases = asArray(child.phases);
|
|
198
|
+
if (childPhases.length) {
|
|
199
|
+
let sum = 0;
|
|
200
|
+
for (const cp of childPhases) {
|
|
201
|
+
const b = boundPhase(cp, next);
|
|
202
|
+
if (b === "unbounded")
|
|
203
|
+
return "unbounded";
|
|
204
|
+
sum += b;
|
|
205
|
+
}
|
|
206
|
+
return sum;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
assumptions.push(`phase '${p.id}': ${type} child def not statically available → unbounded`);
|
|
210
|
+
unbounded = true;
|
|
211
|
+
return "unbounded";
|
|
212
|
+
}
|
|
213
|
+
if (LLM_TYPES.has(type))
|
|
214
|
+
return 1;
|
|
215
|
+
return 0;
|
|
216
|
+
};
|
|
217
|
+
for (const p of phases) {
|
|
218
|
+
const b = boundPhase(p, new Set());
|
|
219
|
+
if (b === "unbounded") {
|
|
220
|
+
unbounded = true;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
total += b;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Silence unused byId (reserved for future dep-aware pruning)
|
|
227
|
+
void byId;
|
|
228
|
+
return {
|
|
229
|
+
maxAgentCalls: unbounded ? "unbounded" : total,
|
|
230
|
+
maxMapFanout,
|
|
231
|
+
phasesCounted: phases.length,
|
|
232
|
+
assumptions,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// Main entry
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
/**
|
|
239
|
+
* Plan a flow without executing any agent. Pure w.r.t. model spend.
|
|
240
|
+
*/
|
|
241
|
+
export function preflightTaskflow(raw, opts = {}) {
|
|
242
|
+
const strictArgs = opts.strictArgs !== false;
|
|
243
|
+
const issues = [];
|
|
244
|
+
let flow;
|
|
245
|
+
try {
|
|
246
|
+
if (isShorthand(raw)) {
|
|
247
|
+
flow = desugar(raw);
|
|
248
|
+
}
|
|
249
|
+
else if (raw && typeof raw === "object" && Array.isArray(raw.phases)) {
|
|
250
|
+
flow = raw;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
// Last chance: treat as shorthand or invalid
|
|
254
|
+
flow = desugar(raw);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
259
|
+
return {
|
|
260
|
+
ok: false,
|
|
261
|
+
issues: [{ message: `desugar failed: ${msg}`, severity: "error", category: "ref-integrity" }],
|
|
262
|
+
flowName: "(invalid)",
|
|
263
|
+
args: {},
|
|
264
|
+
phases: [],
|
|
265
|
+
budget: { maxAgentCalls: 0, phasesCounted: 0, assumptions: [] },
|
|
266
|
+
summary: `Preflight failed: ${msg}`,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
const validation = validateTaskflow(flow, {
|
|
270
|
+
args: opts.args,
|
|
271
|
+
cwd: opts.cwd,
|
|
272
|
+
});
|
|
273
|
+
for (const e of validation.errors) {
|
|
274
|
+
issues.push({ message: e, severity: "error", category: "ref-integrity" });
|
|
275
|
+
}
|
|
276
|
+
for (const w of validation.warnings) {
|
|
277
|
+
issues.push({ message: w, severity: "warning", category: "ref-integrity" });
|
|
278
|
+
}
|
|
279
|
+
const args = resolveArgs(flow, opts.args);
|
|
280
|
+
const invErrs = validateInvocationArgs(flow, args);
|
|
281
|
+
for (const e of invErrs) {
|
|
282
|
+
issues.push({
|
|
283
|
+
message: e,
|
|
284
|
+
severity: strictArgs ? "error" : "warning",
|
|
285
|
+
category: "ref-integrity",
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
const verify = verifyTaskflow(flow, { verifiers: opts.verifiers });
|
|
289
|
+
issues.push(...verify.issues);
|
|
290
|
+
const phases = asArray(flow.phases).filter((p) => !!p && typeof p === "object" && typeof p.id === "string");
|
|
291
|
+
const layers = topoLayers(phases);
|
|
292
|
+
const orderMap = new Map();
|
|
293
|
+
let order = 0;
|
|
294
|
+
for (const layer of layers) {
|
|
295
|
+
for (const p of layer)
|
|
296
|
+
orderMap.set(p.id, order++);
|
|
297
|
+
}
|
|
298
|
+
const plan = phases.map((p) => {
|
|
299
|
+
const when = classifyWhen(p.when, args);
|
|
300
|
+
const bindings = bindingsForPhase(p, args);
|
|
301
|
+
const notes = [];
|
|
302
|
+
if (when === "static-false")
|
|
303
|
+
notes.push("statically skipped by when");
|
|
304
|
+
if (bindings.some((b) => b.status === "unresolved"))
|
|
305
|
+
notes.push("has unresolved args");
|
|
306
|
+
return {
|
|
307
|
+
id: p.id,
|
|
308
|
+
type: p.type ?? "agent",
|
|
309
|
+
order: orderMap.get(p.id) ?? 0,
|
|
310
|
+
when,
|
|
311
|
+
bindings,
|
|
312
|
+
agent: typeof p.agent === "string" ? p.agent : undefined,
|
|
313
|
+
modelHint: typeof p.model === "string" ? p.model : undefined,
|
|
314
|
+
notes: notes.length ? notes : undefined,
|
|
315
|
+
};
|
|
316
|
+
});
|
|
317
|
+
const budget = computeBudgetBound(phases, args);
|
|
318
|
+
if (budget.maxAgentCalls === "unbounded" && flow.budget) {
|
|
319
|
+
issues.push({
|
|
320
|
+
message: "Worst-case agent-call bound is unbounded (dynamic map/flow) while a flow budget is declared — cost ceiling still enforced at runtime but cannot be proven statically.",
|
|
321
|
+
severity: "warning",
|
|
322
|
+
category: "budget-overflow",
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
const ok = !issues.some((i) => i.severity === "error");
|
|
326
|
+
const summary = formatPreflightSummary({
|
|
327
|
+
ok,
|
|
328
|
+
flowName: flow.name,
|
|
329
|
+
phases: plan,
|
|
330
|
+
budget,
|
|
331
|
+
issueCount: issues.length,
|
|
332
|
+
errorCount: issues.filter((i) => i.severity === "error").length,
|
|
333
|
+
});
|
|
334
|
+
return {
|
|
335
|
+
ok,
|
|
336
|
+
issues,
|
|
337
|
+
flowName: flow.name,
|
|
338
|
+
args,
|
|
339
|
+
phases: plan,
|
|
340
|
+
budget,
|
|
341
|
+
summary,
|
|
342
|
+
verify,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
export function formatPreflightSummary(p) {
|
|
346
|
+
const runnable = p.phases.filter((x) => x.when !== "static-false").length;
|
|
347
|
+
const dyn = p.phases.filter((x) => x.when === "dynamic" || x.bindings.some((b) => b.status === "dynamic")).length;
|
|
348
|
+
const calls = p.budget.maxAgentCalls;
|
|
349
|
+
const lines = [
|
|
350
|
+
`plan — flow "${p.flowName}" · ${p.ok ? "OK" : "BLOCKED"}`,
|
|
351
|
+
`phases: ${p.phases.length} total · ${runnable} may run · ${dyn} with dynamic refs`,
|
|
352
|
+
`budget bound: maxAgentCalls=${calls === "unbounded" ? "unbounded" : calls} · phasesCounted=${p.budget.phasesCounted}`,
|
|
353
|
+
`issues: ${p.errorCount} error(s), ${p.issueCount - p.errorCount} warning(s)`,
|
|
354
|
+
];
|
|
355
|
+
if (p.budget.assumptions.length) {
|
|
356
|
+
lines.push(`assumptions: ${p.budget.assumptions.slice(0, 5).join("; ")}${p.budget.assumptions.length > 5 ? "…" : ""}`);
|
|
357
|
+
}
|
|
358
|
+
return lines.join("\n");
|
|
359
|
+
}
|
|
360
|
+
/** Full human report for MCP/CLI. */
|
|
361
|
+
export function formatPreflightReport(r, json = false) {
|
|
362
|
+
if (json)
|
|
363
|
+
return JSON.stringify(r, null, 2);
|
|
364
|
+
const lines = [r.summary, ""];
|
|
365
|
+
lines.push("Phase plan (topo order):");
|
|
366
|
+
const sorted = [...r.phases].sort((a, b) => a.order - b.order);
|
|
367
|
+
for (const p of sorted) {
|
|
368
|
+
const when = p.when === "always" ? "" : ` when=${p.when}`;
|
|
369
|
+
const agent = p.agent ? ` agent=${p.agent}` : "";
|
|
370
|
+
const notes = p.notes?.length ? ` (${p.notes.join("; ")})` : "";
|
|
371
|
+
lines.push(` ${p.order + 1}. ${p.id} [${p.type}]${when}${agent}${notes}`);
|
|
372
|
+
for (const b of p.bindings) {
|
|
373
|
+
const val = b.status === "bound" && b.value !== undefined ? `=${b.value}` : "";
|
|
374
|
+
lines.push(` · {${b.path}} → ${b.status}${val}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
if (r.issues.length) {
|
|
378
|
+
lines.push("");
|
|
379
|
+
lines.push("Issues:");
|
|
380
|
+
for (const i of r.issues) {
|
|
381
|
+
const where = i.phaseId ? ` [${i.phaseId}]` : "";
|
|
382
|
+
lines.push(` ${i.severity === "error" ? "✗" : "!"} ${i.severity}${where}: ${i.message}`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
lines.push("");
|
|
386
|
+
lines.push("Zero tokens. Run with taskflow_run when ready.");
|
|
387
|
+
return lines.join("\n");
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/runner-core.d.ts
CHANGED
|
@@ -138,6 +138,12 @@ export interface RunSubagentProcessOptions<TAcc extends SubagentAccumulator> {
|
|
|
138
138
|
acc: TAcc;
|
|
139
139
|
foldLine: (acc: TAcc, line: string) => LiveUpdate | null;
|
|
140
140
|
completionPolicy?: CompletionPolicy<TAcc>;
|
|
141
|
+
/** Host-specific escape hatch for a known redundant record that can grow
|
|
142
|
+
* without bound. The callback receives only a bounded prefix and must return
|
|
143
|
+
* true only when the accumulator already contains the authoritative data.
|
|
144
|
+
* Accepted records are discarded through their newline and never count as a
|
|
145
|
+
* terminal event; the host must still emit its compact terminal record. */
|
|
146
|
+
canDiscardOversizedLine?: (acc: TAcc, prefix: string) => boolean;
|
|
141
147
|
/** Synchronous notification at the terminal-reap linearization point. */
|
|
142
148
|
onTerminalCommit?: () => void;
|
|
143
149
|
/** Fail closed when the CLI exits zero before its authoritative terminal event. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../src/runner-core.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../src/runner-core.ts"],"names":[],"mappings":"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"}
|
package/dist/runner-core.js
CHANGED
|
@@ -468,6 +468,7 @@ export async function runSubagentProcess(opts) {
|
|
|
468
468
|
if (proc.pid)
|
|
469
469
|
registerProcessTree(proc.pid);
|
|
470
470
|
let buffer = "";
|
|
471
|
+
let discardingOversizedLine = false;
|
|
471
472
|
const stdoutDecoder = new StringDecoder("utf8");
|
|
472
473
|
const stderrDecoder = new StringDecoder("utf8");
|
|
473
474
|
let idleTimer;
|
|
@@ -699,28 +700,78 @@ export async function runSubagentProcess(opts) {
|
|
|
699
700
|
break;
|
|
700
701
|
}
|
|
701
702
|
};
|
|
703
|
+
const canDiscardOversizedLine = (line) => {
|
|
704
|
+
if (!opts.canDiscardOversizedLine)
|
|
705
|
+
return false;
|
|
706
|
+
try {
|
|
707
|
+
// Never hand an unbounded record to host policy code. Pi needs only
|
|
708
|
+
// the fixed JSON event prefix to identify its redundant history.
|
|
709
|
+
return opts.canDiscardOversizedLine(acc, line.slice(0, 256));
|
|
710
|
+
}
|
|
711
|
+
catch (error) {
|
|
712
|
+
failProtocol(`Oversized-line policy failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
713
|
+
return false;
|
|
714
|
+
}
|
|
715
|
+
};
|
|
716
|
+
const discardOversizedLine = () => {
|
|
717
|
+
clearTerminalCandidate();
|
|
718
|
+
armIdle();
|
|
719
|
+
const diagnostic = "[taskflow] Discarded an oversized redundant host record; waiting for the authoritative terminal event.";
|
|
720
|
+
result.stderr += `${result.stderr && !result.stderr.endsWith("\n") ? "\n" : ""}${diagnostic}\n`;
|
|
721
|
+
};
|
|
722
|
+
const consumeStdout = (decoded) => {
|
|
723
|
+
let chunk = decoded;
|
|
724
|
+
while (chunk && !protocolError) {
|
|
725
|
+
if (discardingOversizedLine) {
|
|
726
|
+
const newline = chunk.indexOf("\n");
|
|
727
|
+
if (newline < 0)
|
|
728
|
+
return;
|
|
729
|
+
discardingOversizedLine = false;
|
|
730
|
+
chunk = chunk.slice(newline + 1);
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
733
|
+
buffer += chunk;
|
|
734
|
+
chunk = "";
|
|
735
|
+
let newline = buffer.indexOf("\n");
|
|
736
|
+
while (newline >= 0 && !protocolError) {
|
|
737
|
+
const line = buffer.slice(0, newline);
|
|
738
|
+
buffer = buffer.slice(newline + 1);
|
|
739
|
+
if (Buffer.byteLength(line) > MAX_STDOUT_LINE_BYTES) {
|
|
740
|
+
if (canDiscardOversizedLine(line))
|
|
741
|
+
discardOversizedLine();
|
|
742
|
+
else
|
|
743
|
+
failProtocol(`Subagent emitted a stdout record larger than ${MAX_STDOUT_LINE_BYTES} bytes`);
|
|
744
|
+
}
|
|
745
|
+
else {
|
|
746
|
+
processLine(line);
|
|
747
|
+
}
|
|
748
|
+
newline = buffer.indexOf("\n");
|
|
749
|
+
}
|
|
750
|
+
if (protocolError) {
|
|
751
|
+
buffer = "";
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
if (Buffer.byteLength(buffer) > MAX_STDOUT_LINE_BYTES) {
|
|
755
|
+
if (canDiscardOversizedLine(buffer)) {
|
|
756
|
+
// Retain no history payload while the rest of this record
|
|
757
|
+
// streams. The next newline exits discard mode.
|
|
758
|
+
buffer = "";
|
|
759
|
+
discardingOversizedLine = true;
|
|
760
|
+
discardOversizedLine();
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
buffer = "";
|
|
764
|
+
failProtocol(`Subagent emitted an unterminated stdout record larger than ${MAX_STDOUT_LINE_BYTES} bytes`);
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
};
|
|
702
769
|
proc.stdout.on("data", (data) => {
|
|
703
770
|
// StringDecoder preserves multi-byte UTF-8 characters split across
|
|
704
771
|
// arbitrary pipe chunks. Candidate revocation is event-semantic below:
|
|
705
772
|
// metadata/heartbeat records classified as `ignore` must not disable both
|
|
706
773
|
// terminal grace and the ordinary idle watchdog.
|
|
707
|
-
|
|
708
|
-
if (Buffer.byteLength(buffer) > MAX_STDOUT_LINE_BYTES && !buffer.includes("\n")) {
|
|
709
|
-
// Drop the retained bytes before terminating so the bound remains true
|
|
710
|
-
// even while a non-cooperative child takes time to die.
|
|
711
|
-
buffer = "";
|
|
712
|
-
failProtocol(`Subagent emitted an unterminated stdout record larger than ${MAX_STDOUT_LINE_BYTES} bytes`);
|
|
713
|
-
return;
|
|
714
|
-
}
|
|
715
|
-
const lines = buffer.split("\n");
|
|
716
|
-
buffer = lines.pop() || "";
|
|
717
|
-
for (const line of lines) {
|
|
718
|
-
if (Buffer.byteLength(line) > MAX_STDOUT_LINE_BYTES) {
|
|
719
|
-
failProtocol(`Subagent emitted a stdout record larger than ${MAX_STDOUT_LINE_BYTES} bytes`);
|
|
720
|
-
break;
|
|
721
|
-
}
|
|
722
|
-
processLine(line);
|
|
723
|
-
}
|
|
774
|
+
consumeStdout(stdoutDecoder.write(data));
|
|
724
775
|
if (!completionPolicy)
|
|
725
776
|
armIdle();
|
|
726
777
|
});
|
|
@@ -761,10 +812,15 @@ export async function runSubagentProcess(opts) {
|
|
|
761
812
|
// Flush decoders and classify the final unterminated record before
|
|
762
813
|
// settling. Any force-kill timer created by a malformed tail is cleared
|
|
763
814
|
// below, so no signal can fire after this Promise resolves.
|
|
764
|
-
|
|
815
|
+
consumeStdout(stdoutDecoder.end());
|
|
765
816
|
if (!stderrCapped)
|
|
766
817
|
result.stderr += stderrDecoder.end();
|
|
767
|
-
if (
|
|
818
|
+
if (discardingOversizedLine &&
|
|
819
|
+
killReason !== "abort" && killReason !== "idle-timeout" && killReason !== "fatal-error") {
|
|
820
|
+
failProtocol("Subagent ended during an unterminated oversized stdout record");
|
|
821
|
+
}
|
|
822
|
+
else if (buffer.trim() &&
|
|
823
|
+
killReason !== "abort" && killReason !== "idle-timeout" && killReason !== "fatal-error") {
|
|
768
824
|
processLine(buffer);
|
|
769
825
|
}
|
|
770
826
|
settled = true;
|