taskflow-core 0.2.6 → 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.
Files changed (42) hide show
  1. package/README.md +33 -5
  2. package/dist/analytics.d.ts +30 -0
  3. package/dist/analytics.d.ts.map +1 -0
  4. package/dist/analytics.js +127 -0
  5. package/dist/analytics.js.map +1 -0
  6. package/dist/build-info.json +2 -2
  7. package/dist/exec/step-kinds.d.ts +1 -1
  8. package/dist/exec/step-kinds.d.ts.map +1 -1
  9. package/dist/exec/step-kinds.js +26 -14
  10. package/dist/exec/step-kinds.js.map +1 -1
  11. package/dist/hooks.d.ts +73 -0
  12. package/dist/hooks.d.ts.map +1 -0
  13. package/dist/hooks.js +296 -0
  14. package/dist/hooks.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/preflight.d.ts +69 -0
  20. package/dist/preflight.d.ts.map +1 -0
  21. package/dist/preflight.js +389 -0
  22. package/dist/preflight.js.map +1 -0
  23. package/dist/runtime/phases/approval-wait.d.ts +33 -0
  24. package/dist/runtime/phases/approval-wait.d.ts.map +1 -0
  25. package/dist/runtime/phases/approval-wait.js +95 -0
  26. package/dist/runtime/phases/approval-wait.js.map +1 -0
  27. package/dist/runtime/phases/approval.d.ts +1 -1
  28. package/dist/runtime/phases/approval.d.ts.map +1 -1
  29. package/dist/runtime/phases/approval.js +10 -6
  30. package/dist/runtime/phases/approval.js.map +1 -1
  31. package/dist/runtime.d.ts.map +1 -1
  32. package/dist/runtime.js +40 -11
  33. package/dist/runtime.js.map +1 -1
  34. package/dist/savings.d.ts +36 -0
  35. package/dist/savings.d.ts.map +1 -0
  36. package/dist/savings.js +76 -0
  37. package/dist/savings.js.map +1 -0
  38. package/dist/schema.d.ts +31 -0
  39. package/dist/schema.d.ts.map +1 -1
  40. package/dist/schema.js +123 -0
  41. package/dist/schema.js.map +1 -1
  42. package/package.json +1 -1
package/dist/hooks.js ADDED
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Flow-level hooks — fire-and-forget notifications on terminal run outcomes.
3
+ *
4
+ * Payload is summary-only (never transcripts / phase outputs).
5
+ * Hook failure must never change run status.
6
+ */
7
+ import * as fs from "node:fs";
8
+ import * as path from "node:path";
9
+ import * as http from "node:http";
10
+ import * as https from "node:https";
11
+ import { spawn } from "node:child_process";
12
+ import { countPhaseOutcomes } from "./savings.js";
13
+ import { getBuildInfo } from "./build-info.js";
14
+ const MAX_HOOKS_PER_EVENT = 5;
15
+ const DEFAULT_WEBHOOK_TIMEOUT_MS = 5_000;
16
+ /** Map run status → hook event (or undefined if no hook fires). */
17
+ export function hookEventForStatus(status) {
18
+ if (status === "completed")
19
+ return "complete";
20
+ if (status === "failed")
21
+ return "fail";
22
+ if (status === "blocked" || status === "paused")
23
+ return "blocked";
24
+ return undefined;
25
+ }
26
+ export function actionsForEvent(hooks, event) {
27
+ if (!hooks)
28
+ return [];
29
+ const list = event === "complete" ? hooks.onComplete : event === "fail" ? hooks.onFail : hooks.onBlocked;
30
+ return Array.isArray(list) ? list.slice(0, MAX_HOOKS_PER_EVENT) : [];
31
+ }
32
+ /** Build summary payload — never includes phase outputs. */
33
+ export function buildHookPayload(event, state) {
34
+ const counts = countPhaseOutcomes(state.phases);
35
+ const build = getBuildInfo();
36
+ const errorSummary = firstErrorSummary(state);
37
+ const approvalPhaseId = findApprovalPhase(state);
38
+ return {
39
+ schema: "taskflow.hook.v1",
40
+ event,
41
+ runId: state.runId,
42
+ flowName: state.flowName,
43
+ status: state.status,
44
+ host: state.host,
45
+ packageVersion: state.packageVersion ?? build.packageVersion,
46
+ startedAt: state.createdAt,
47
+ endedAt: state.updatedAt ?? Date.now(),
48
+ phaseCounts: {
49
+ total: counts.total,
50
+ completed: counts.completed,
51
+ failed: counts.failed,
52
+ skipped: counts.skipped,
53
+ cached: counts.cached,
54
+ },
55
+ usage: aggregateUsageLite(state),
56
+ outputSourcePhaseId: state.outputSourcePhaseId,
57
+ ...(errorSummary ? { errorSummary } : {}),
58
+ ...(approvalPhaseId ? { approvalPhaseId } : {}),
59
+ };
60
+ }
61
+ function firstErrorSummary(state) {
62
+ for (const ps of Object.values(state.phases)) {
63
+ if (ps.error)
64
+ return String(ps.error).slice(0, 500);
65
+ if (ps.gate?.verdict === "block" && ps.gate.reason)
66
+ return String(ps.gate.reason).slice(0, 500);
67
+ }
68
+ if (state.finalOutput && state.status !== "completed") {
69
+ return String(state.finalOutput).slice(0, 500);
70
+ }
71
+ return undefined;
72
+ }
73
+ function findApprovalPhase(state) {
74
+ for (const [id, ps] of Object.entries(state.phases)) {
75
+ if (ps.approval)
76
+ return id;
77
+ }
78
+ return undefined;
79
+ }
80
+ function aggregateUsageLite(state) {
81
+ let inputTokens = 0;
82
+ let outputTokens = 0;
83
+ let totalCost = 0;
84
+ let any = false;
85
+ for (const ps of Object.values(state.phases)) {
86
+ const u = ps.usage;
87
+ if (!u)
88
+ continue;
89
+ any = true;
90
+ if (typeof u.input === "number")
91
+ inputTokens += u.input;
92
+ if (typeof u.output === "number")
93
+ outputTokens += u.output;
94
+ if (typeof u.cost === "number")
95
+ totalCost += u.cost;
96
+ }
97
+ if (!any)
98
+ return undefined;
99
+ return { inputTokens, outputTokens, totalCost };
100
+ }
101
+ /** Validate a single hook action; returns error string or null. */
102
+ export function validateHookAction(action, index, event) {
103
+ if (!action || typeof action !== "object" || Array.isArray(action)) {
104
+ return `hooks.${event}[${index}] must be an object`;
105
+ }
106
+ const a = action;
107
+ const type = a.type;
108
+ if (type === "webhook") {
109
+ if (typeof a.url !== "string" || !a.url.trim())
110
+ return `hooks.${event}[${index}].url is required`;
111
+ const err = validateWebhookUrl(a.url.trim());
112
+ if (err)
113
+ return `hooks.${event}[${index}]: ${err}`;
114
+ if (a.timeoutMs !== undefined && (typeof a.timeoutMs !== "number" || a.timeoutMs < 100 || a.timeoutMs > 60_000)) {
115
+ return `hooks.${event}[${index}].timeoutMs must be 100–60000`;
116
+ }
117
+ return null;
118
+ }
119
+ if (type === "file") {
120
+ if (typeof a.path !== "string" || !a.path.trim())
121
+ return `hooks.${event}[${index}].path is required`;
122
+ if (path.isAbsolute(a.path) || a.path.split(/[/\\]/).includes("..")) {
123
+ return `hooks.${event}[${index}].path must be project-relative without '..'`;
124
+ }
125
+ return null;
126
+ }
127
+ if (type === "command") {
128
+ if (!Array.isArray(a.run) || a.run.length === 0 || !a.run.every((x) => typeof x === "string")) {
129
+ return `hooks.${event}[${index}].run must be a non-empty string array (no shell string)`;
130
+ }
131
+ return null;
132
+ }
133
+ return `hooks.${event}[${index}].type must be webhook|file|command`;
134
+ }
135
+ export function validateWebhookUrl(url) {
136
+ let u;
137
+ try {
138
+ u = new URL(url);
139
+ }
140
+ catch {
141
+ return "invalid URL";
142
+ }
143
+ if (u.protocol === "https:")
144
+ return null;
145
+ if (u.protocol === "http:") {
146
+ const host = u.hostname.toLowerCase();
147
+ if (host === "127.0.0.1" || host === "localhost" || host === "[::1]" || host === "::1")
148
+ return null;
149
+ return "http URLs are only allowed for 127.0.0.1 / localhost (use https otherwise)";
150
+ }
151
+ return "URL scheme must be https (or http://127.0.0.1|localhost)";
152
+ }
153
+ /** Validate flow.hooks block; returns error strings. */
154
+ export function validateFlowHooks(hooks) {
155
+ if (hooks === undefined)
156
+ return [];
157
+ if (!hooks || typeof hooks !== "object" || Array.isArray(hooks))
158
+ return ["hooks must be an object"];
159
+ const h = hooks;
160
+ const errors = [];
161
+ for (const event of ["onComplete", "onFail", "onBlocked"]) {
162
+ if (h[event] === undefined)
163
+ continue;
164
+ if (!Array.isArray(h[event])) {
165
+ errors.push(`hooks.${event} must be an array`);
166
+ continue;
167
+ }
168
+ if (h[event].length > MAX_HOOKS_PER_EVENT) {
169
+ errors.push(`hooks.${event} allows at most ${MAX_HOOKS_PER_EVENT} actions`);
170
+ }
171
+ h[event].forEach((a, i) => {
172
+ const e = validateHookAction(a, i, event);
173
+ if (e)
174
+ errors.push(e);
175
+ });
176
+ }
177
+ for (const k of Object.keys(h)) {
178
+ if (!["onComplete", "onFail", "onBlocked"].includes(k)) {
179
+ errors.push(`hooks: unknown key '${k}'`);
180
+ }
181
+ }
182
+ return errors;
183
+ }
184
+ async function dispatchOne(action, payload, cwd) {
185
+ if (action.type === "file") {
186
+ const target = path.resolve(cwd, action.path);
187
+ const root = path.resolve(cwd);
188
+ if (!target.startsWith(root + path.sep) && target !== root) {
189
+ throw new Error(`hook file path escapes project root: ${action.path}`);
190
+ }
191
+ fs.mkdirSync(path.dirname(target), { recursive: true });
192
+ const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
193
+ fs.writeFileSync(tmp, JSON.stringify(payload, null, 2), "utf8");
194
+ fs.renameSync(tmp, target);
195
+ return;
196
+ }
197
+ if (action.type === "webhook") {
198
+ await postWebhook(action.url, payload, action.timeoutMs ?? DEFAULT_WEBHOOK_TIMEOUT_MS);
199
+ return;
200
+ }
201
+ if (action.type === "command") {
202
+ await runCommand(action.run, payload, cwd);
203
+ return;
204
+ }
205
+ }
206
+ function postWebhook(url, payload, timeoutMs) {
207
+ return new Promise((resolve, reject) => {
208
+ const body = JSON.stringify(payload);
209
+ const u = new URL(url);
210
+ const lib = u.protocol === "https:" ? https : http;
211
+ const req = lib.request({
212
+ protocol: u.protocol,
213
+ hostname: u.hostname,
214
+ port: u.port || (u.protocol === "https:" ? 443 : 80),
215
+ path: `${u.pathname}${u.search}`,
216
+ method: "POST",
217
+ headers: {
218
+ "content-type": "application/json",
219
+ "content-length": Buffer.byteLength(body),
220
+ "user-agent": "taskflow-hooks/1",
221
+ },
222
+ timeout: timeoutMs,
223
+ }, (res) => {
224
+ res.resume();
225
+ if (res.statusCode && res.statusCode >= 400) {
226
+ reject(new Error(`webhook HTTP ${res.statusCode}`));
227
+ }
228
+ else {
229
+ resolve();
230
+ }
231
+ });
232
+ req.on("timeout", () => {
233
+ req.destroy();
234
+ reject(new Error("webhook timeout"));
235
+ });
236
+ req.on("error", reject);
237
+ req.write(body);
238
+ req.end();
239
+ });
240
+ }
241
+ function runCommand(argv, payload, cwd) {
242
+ return new Promise((resolve, reject) => {
243
+ const [cmd, ...args] = argv;
244
+ const child = spawn(cmd, args, {
245
+ cwd,
246
+ env: {
247
+ ...process.env,
248
+ TASKFLOW_HOOK_PAYLOAD: JSON.stringify(payload),
249
+ TASKFLOW_HOOK_EVENT: payload.event,
250
+ TASKFLOW_HOOK_RUN_ID: payload.runId,
251
+ TASKFLOW_HOOK_STATUS: payload.status,
252
+ },
253
+ stdio: "ignore",
254
+ });
255
+ const t = setTimeout(() => {
256
+ child.kill("SIGTERM");
257
+ reject(new Error("hook command timeout"));
258
+ }, 30_000);
259
+ child.on("error", (e) => {
260
+ clearTimeout(t);
261
+ reject(e);
262
+ });
263
+ child.on("exit", (code) => {
264
+ clearTimeout(t);
265
+ if (code === 0)
266
+ resolve();
267
+ else
268
+ reject(new Error(`hook command exit ${code}`));
269
+ });
270
+ });
271
+ }
272
+ /**
273
+ * Dispatch hooks for a terminal run. Never throws; collects errors.
274
+ */
275
+ export async function dispatchHooks(state, opts) {
276
+ const event = hookEventForStatus(state.status);
277
+ if (!event)
278
+ return { event: "complete", dispatched: 0, errors: [] };
279
+ const actions = actionsForEvent(opts.hooks ?? state.def.hooks, event);
280
+ if (!actions.length)
281
+ return { event, dispatched: 0, errors: [] };
282
+ const payload = buildHookPayload(event, state);
283
+ const errors = [];
284
+ let dispatched = 0;
285
+ for (const action of actions) {
286
+ try {
287
+ await dispatchOne(action, payload, opts.cwd);
288
+ dispatched++;
289
+ }
290
+ catch (e) {
291
+ errors.push(e instanceof Error ? e.message : String(e));
292
+ }
293
+ }
294
+ return { event, dispatched, errors };
295
+ }
296
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -44,4 +44,8 @@ export * from "./deterministic.ts";
44
44
  export * from "./replay.ts";
45
45
  export * from "./exec/index.ts";
46
46
  export * from "./verifiers/index.ts";
47
+ export * from "./preflight.ts";
48
+ export * from "./savings.ts";
49
+ export * from "./hooks.ts";
50
+ export * from "./analytics.ts";
47
51
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","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;AAKtC,OAAO,EACN,6BAA6B,EAC7B,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,GAChC,MAAM,0BAA0B,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAK7B,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"}
1
+ {"version":3,"file":"index.d.ts","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;AAKtC,OAAO,EACN,6BAA6B,EAC7B,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,GAChC,MAAM,0BAA0B,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAK7B,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;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -52,4 +52,8 @@ export * from "./deterministic.js";
52
52
  export * from "./replay.js";
53
53
  export * from "./exec/index.js";
54
54
  export * from "./verifiers/index.js";
55
+ export * from "./preflight.js";
56
+ export * from "./savings.js";
57
+ export * from "./hooks.js";
58
+ export * from "./analytics.js";
55
59
  //# 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;AAChC,cAAc,sBAAsB,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;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,69 @@
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 { type Phase } from "./schema.ts";
8
+ import { type VerificationIssue, type VerificationResult, type TaskflowVerifier } from "./verify.ts";
9
+ export interface PreflightOptions {
10
+ /** Invocation arguments (same shape as taskflow_run.args). */
11
+ args?: Record<string, unknown>;
12
+ /** When true (default), missing required typed args → ok:false. */
13
+ strictArgs?: boolean;
14
+ /** Optional plugin verifiers (same as verify/lint). */
15
+ verifiers?: TaskflowVerifier[];
16
+ /** Working directory for validateTaskflow cwd checks. */
17
+ cwd?: string;
18
+ }
19
+ export type PreflightWhenKind = "always" | "static-true" | "static-false" | "dynamic";
20
+ export interface PreflightBinding {
21
+ path: string;
22
+ status: "bound" | "unresolved" | "dynamic";
23
+ value?: string;
24
+ }
25
+ export interface PreflightPhasePlan {
26
+ id: string;
27
+ type: string;
28
+ order: number;
29
+ when: PreflightWhenKind;
30
+ bindings: PreflightBinding[];
31
+ agent?: string;
32
+ modelHint?: string;
33
+ notes?: string[];
34
+ }
35
+ export interface PreflightBudgetBound {
36
+ maxAgentCalls: number | "unbounded";
37
+ maxMapFanout?: number | "unbounded";
38
+ phasesCounted: number;
39
+ assumptions: string[];
40
+ }
41
+ export interface PreflightResult {
42
+ ok: boolean;
43
+ issues: VerificationIssue[];
44
+ flowName: string;
45
+ args: Record<string, unknown>;
46
+ phases: PreflightPhasePlan[];
47
+ budget: PreflightBudgetBound;
48
+ summary: string;
49
+ /** Structural verify result (may be empty if flow failed validation). */
50
+ verify?: VerificationResult;
51
+ }
52
+ /** Classify a `when` guard for preflight (args-only static evaluation). */
53
+ export declare function classifyWhen(when: string | undefined, args: Record<string, unknown>): PreflightWhenKind;
54
+ export declare function computeBudgetBound(phases: Phase[], args?: Record<string, unknown>): PreflightBudgetBound;
55
+ /**
56
+ * Plan a flow without executing any agent. Pure w.r.t. model spend.
57
+ */
58
+ export declare function preflightTaskflow(raw: unknown, opts?: PreflightOptions): PreflightResult;
59
+ export declare function formatPreflightSummary(p: {
60
+ ok: boolean;
61
+ flowName: string;
62
+ phases: PreflightPhasePlan[];
63
+ budget: PreflightBudgetBound;
64
+ issueCount: number;
65
+ errorCount: number;
66
+ }): string;
67
+ /** Full human report for MCP/CLI. */
68
+ export declare function formatPreflightReport(r: PreflightResult, json?: boolean): string;
69
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EASN,KAAK,KAAK,EAIV,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACrB,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,gBAAgB;IAChC,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAeD,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAuBvG;AAwED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,oBAAoB,CAqH5G;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAqB,GAAG,eAAe,CA2G5F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAcT;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,UAAQ,GAAG,MAAM,CA0B9E"}