@davidorex/pi-workflows 0.1.0 → 0.3.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.
Files changed (215) hide show
  1. package/CHANGELOG.md +7 -4
  2. package/README.md +33 -7
  3. package/agents/architecture-designer.agent.yaml +58 -0
  4. package/agents/architecture-inferrer.agent.yaml +60 -0
  5. package/agents/gap-identifier.agent.yaml +66 -0
  6. package/agents/handoff-writer.agent.yaml +64 -0
  7. package/agents/plan-creator.agent.yaml +63 -0
  8. package/agents/project-definer.agent.yaml +53 -0
  9. package/agents/project-inferrer.agent.yaml +63 -0
  10. package/agents/requirements-gatherer.agent.yaml +58 -0
  11. package/dist/agent-spec.d.ts +27 -0
  12. package/dist/agent-spec.d.ts.map +1 -0
  13. package/dist/agent-spec.js +112 -0
  14. package/dist/agent-spec.js.map +1 -0
  15. package/dist/checkpoint.d.ts +50 -0
  16. package/dist/checkpoint.d.ts.map +1 -0
  17. package/dist/checkpoint.js +109 -0
  18. package/dist/checkpoint.js.map +1 -0
  19. package/dist/completion.d.ts +18 -0
  20. package/dist/completion.d.ts.map +1 -0
  21. package/dist/completion.js +58 -0
  22. package/dist/completion.js.map +1 -0
  23. package/dist/dag.d.ts +56 -0
  24. package/dist/dag.d.ts.map +1 -0
  25. package/dist/dag.js +172 -0
  26. package/dist/dag.js.map +1 -0
  27. package/dist/dispatch.d.ts +35 -0
  28. package/dist/dispatch.d.ts.map +1 -0
  29. package/dist/dispatch.js +311 -0
  30. package/dist/dispatch.js.map +1 -0
  31. package/dist/expression.d.ts +64 -0
  32. package/dist/expression.d.ts.map +1 -0
  33. package/dist/expression.js +294 -0
  34. package/dist/expression.js.map +1 -0
  35. package/dist/format.d.ts +19 -0
  36. package/dist/format.d.ts.map +1 -0
  37. package/dist/format.js +42 -0
  38. package/dist/format.js.map +1 -0
  39. package/dist/index.d.ts +8 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +675 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/output.d.ts +12 -0
  44. package/dist/output.d.ts.map +1 -0
  45. package/dist/output.js +59 -0
  46. package/dist/output.js.map +1 -0
  47. package/dist/state.d.ts +66 -0
  48. package/dist/state.d.ts.map +1 -0
  49. package/dist/state.js +227 -0
  50. package/dist/state.js.map +1 -0
  51. package/dist/step-agent.d.ts +35 -0
  52. package/dist/step-agent.d.ts.map +1 -0
  53. package/dist/step-agent.js +156 -0
  54. package/dist/step-agent.js.map +1 -0
  55. package/dist/step-command.d.ts +21 -0
  56. package/dist/step-command.d.ts.map +1 -0
  57. package/dist/step-command.js +150 -0
  58. package/dist/step-command.js.map +1 -0
  59. package/dist/step-foreach.d.ts +33 -0
  60. package/dist/step-foreach.d.ts.map +1 -0
  61. package/dist/step-foreach.js +112 -0
  62. package/dist/step-foreach.js.map +1 -0
  63. package/dist/step-gate.d.ts +18 -0
  64. package/dist/step-gate.d.ts.map +1 -0
  65. package/dist/step-gate.js +137 -0
  66. package/dist/step-gate.js.map +1 -0
  67. package/dist/step-loop.d.ts +32 -0
  68. package/dist/step-loop.d.ts.map +1 -0
  69. package/dist/step-loop.js +278 -0
  70. package/dist/step-loop.js.map +1 -0
  71. package/dist/step-monitor.d.ts +56 -0
  72. package/dist/step-monitor.d.ts.map +1 -0
  73. package/dist/step-monitor.js +317 -0
  74. package/dist/step-monitor.js.map +1 -0
  75. package/dist/step-parallel.d.ts +43 -0
  76. package/dist/step-parallel.d.ts.map +1 -0
  77. package/dist/step-parallel.js +122 -0
  78. package/dist/step-parallel.js.map +1 -0
  79. package/{src/step-pause.ts → dist/step-pause.d.ts} +3 -13
  80. package/dist/step-pause.d.ts.map +1 -0
  81. package/dist/step-pause.js +22 -0
  82. package/dist/step-pause.js.map +1 -0
  83. package/dist/step-shared.d.ts +57 -0
  84. package/dist/step-shared.d.ts.map +1 -0
  85. package/dist/step-shared.js +125 -0
  86. package/dist/step-shared.js.map +1 -0
  87. package/dist/step-transform.d.ts +11 -0
  88. package/dist/step-transform.d.ts.map +1 -0
  89. package/dist/step-transform.js +41 -0
  90. package/dist/step-transform.js.map +1 -0
  91. package/dist/template.d.ts +51 -0
  92. package/dist/template.d.ts.map +1 -0
  93. package/{src/template.ts → dist/template.js} +32 -38
  94. package/dist/template.js.map +1 -0
  95. package/dist/test-helpers.d.ts +17 -0
  96. package/dist/test-helpers.d.ts.map +1 -0
  97. package/dist/test-helpers.js +46 -0
  98. package/dist/test-helpers.js.map +1 -0
  99. package/dist/tui.d.ts +47 -0
  100. package/dist/tui.d.ts.map +1 -0
  101. package/dist/tui.js +143 -0
  102. package/dist/tui.js.map +1 -0
  103. package/dist/types.d.ts +164 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +3 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/workflow-discovery.d.ts +23 -0
  108. package/dist/workflow-discovery.d.ts.map +1 -0
  109. package/dist/workflow-discovery.js +103 -0
  110. package/dist/workflow-discovery.js.map +1 -0
  111. package/dist/workflow-executor.d.ts +50 -0
  112. package/dist/workflow-executor.d.ts.map +1 -0
  113. package/dist/workflow-executor.js +726 -0
  114. package/dist/workflow-executor.js.map +1 -0
  115. package/dist/workflow-sdk.d.ts +44 -0
  116. package/dist/workflow-sdk.d.ts.map +1 -0
  117. package/dist/workflow-sdk.js +438 -0
  118. package/dist/workflow-sdk.js.map +1 -0
  119. package/dist/workflow-spec.d.ts +33 -0
  120. package/dist/workflow-spec.d.ts.map +1 -0
  121. package/dist/workflow-spec.js +464 -0
  122. package/dist/workflow-spec.js.map +1 -0
  123. package/dist/workflows-dir.d.ts +3 -0
  124. package/dist/workflows-dir.d.ts.map +1 -0
  125. package/dist/workflows-dir.js +3 -0
  126. package/dist/workflows-dir.js.map +1 -0
  127. package/package.json +53 -38
  128. package/schemas/decomposition-specs.schema.json +48 -48
  129. package/schemas/execution-results.schema.json +48 -48
  130. package/schemas/investigation-findings.schema.json +43 -43
  131. package/schemas/pattern-analysis.schema.json +41 -41
  132. package/schemas/phase.schema.json +48 -0
  133. package/schemas/plan-breakdown.schema.json +20 -20
  134. package/schemas/quality-analysis.schema.json +33 -33
  135. package/schemas/research-findings.schema.json +42 -42
  136. package/schemas/structure-analysis.schema.json +40 -40
  137. package/schemas/synthesis.schema.json +31 -31
  138. package/schemas/verifier-output.schema.json +94 -94
  139. package/skill-narrative.md +84 -0
  140. package/skills/pi-workflows/SKILL.md +247 -0
  141. package/templates/architecture-designer/task.md +117 -0
  142. package/templates/architecture-inferrer/task.md +61 -0
  143. package/templates/gap-identifier/task.md +103 -0
  144. package/templates/handoff-writer/task.md +91 -0
  145. package/templates/plan-creator/task.md +143 -0
  146. package/templates/project-definer/task.md +67 -0
  147. package/templates/project-inferrer/task.md +56 -0
  148. package/templates/requirements-gatherer/task.md +90 -0
  149. package/workflows/analyze-existing-project.workflow.yaml +74 -0
  150. package/workflows/create-handoff.workflow.yaml +58 -0
  151. package/workflows/create-phase.workflow.yaml +1 -1
  152. package/workflows/do-gap.workflow.yaml +4 -4
  153. package/workflows/fix-audit.workflow.yaml +1 -1
  154. package/workflows/gap-to-phase.workflow.yaml +1 -1
  155. package/workflows/init-new-project.workflow.yaml +55 -0
  156. package/workflows/plan-from-requirements.workflow.yaml +51 -0
  157. package/workflows/self-implement.workflow.yaml +3 -3
  158. package/workflows/typed-analysis.workflow.yaml +4 -4
  159. package/src/agent-spec.test.ts +0 -289
  160. package/src/agent-spec.ts +0 -122
  161. package/src/block-validation.test.ts +0 -350
  162. package/src/checkpoint.test.ts +0 -237
  163. package/src/checkpoint.ts +0 -139
  164. package/src/completion.test.ts +0 -143
  165. package/src/completion.ts +0 -68
  166. package/src/dag.test.ts +0 -350
  167. package/src/dag.ts +0 -219
  168. package/src/dispatch.test.ts +0 -473
  169. package/src/dispatch.ts +0 -353
  170. package/src/expression.test.ts +0 -353
  171. package/src/expression.ts +0 -332
  172. package/src/format.test.ts +0 -80
  173. package/src/format.ts +0 -41
  174. package/src/graduated-failure.test.ts +0 -556
  175. package/src/index.test.ts +0 -114
  176. package/src/index.ts +0 -488
  177. package/src/loop.test.ts +0 -549
  178. package/src/output.test.ts +0 -213
  179. package/src/output.ts +0 -70
  180. package/src/parallel-integration.test.ts +0 -175
  181. package/src/resume.test.ts +0 -192
  182. package/src/state.test.ts +0 -192
  183. package/src/state.ts +0 -253
  184. package/src/step-agent.test.ts +0 -327
  185. package/src/step-agent.ts +0 -178
  186. package/src/step-command.test.ts +0 -330
  187. package/src/step-command.ts +0 -132
  188. package/src/step-foreach.test.ts +0 -647
  189. package/src/step-foreach.ts +0 -148
  190. package/src/step-gate.test.ts +0 -185
  191. package/src/step-gate.ts +0 -116
  192. package/src/step-loop.test.ts +0 -626
  193. package/src/step-loop.ts +0 -323
  194. package/src/step-parallel.test.ts +0 -475
  195. package/src/step-parallel.ts +0 -168
  196. package/src/step-pause.test.ts +0 -30
  197. package/src/step-shared.test.ts +0 -355
  198. package/src/step-shared.ts +0 -157
  199. package/src/step-transform.test.ts +0 -155
  200. package/src/step-transform.ts +0 -47
  201. package/src/template-integration.test.ts +0 -72
  202. package/src/template.test.ts +0 -162
  203. package/src/test-helpers.ts +0 -51
  204. package/src/tui.test.ts +0 -355
  205. package/src/tui.ts +0 -182
  206. package/src/types.ts +0 -195
  207. package/src/verifier-schema.test.ts +0 -226
  208. package/src/workflow-discovery.test.ts +0 -105
  209. package/src/workflow-discovery.ts +0 -113
  210. package/src/workflow-executor.test.ts +0 -1530
  211. package/src/workflow-executor.ts +0 -810
  212. package/src/workflow-sdk.test.ts +0 -238
  213. package/src/workflow-sdk.ts +0 -262
  214. package/src/workflow-spec.test.ts +0 -576
  215. package/src/workflow-spec.ts +0 -471
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Subprocess dispatch for workflow steps — spawns pi in JSON mode,
3
+ * collects events, usage, and output. Supports cancellation and timeout.
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import fs from "node:fs";
7
+ import os from "node:os";
8
+ import path from "node:path";
9
+ import { SIGKILL_GRACE_MS } from "./step-shared.js";
10
+ /**
11
+ * Prompt length threshold (chars) for switching to @file argument passing.
12
+ * Avoids OS-level argument length limits (typically 128–256 KB) with headroom
13
+ * for the rest of the CLI args. 8000 chars is well under all limits while
14
+ * keeping short prompts as direct args for simplicity.
15
+ */
16
+ const PROMPT_ARG_LIMIT = 8000;
17
+ /** Maximum stdout buffer size (10 MB) to prevent OOM from runaway subprocesses. */
18
+ const MAX_STDOUT_BYTES = 10 * 1024 * 1024;
19
+ export function extractText(content) {
20
+ if (!content || !Array.isArray(content))
21
+ return "";
22
+ for (const part of content) {
23
+ if (part && typeof part === "object" && "type" in part && part.type === "text" && "text" in part) {
24
+ return String(part.text);
25
+ }
26
+ }
27
+ return "";
28
+ }
29
+ export function extractToolArgsPreview(args) {
30
+ if (!args || typeof args !== "object")
31
+ return "";
32
+ const obj = args;
33
+ for (const key of ["command", "path", "pattern", "query", "task"]) {
34
+ if (typeof obj[key] === "string") {
35
+ const val = obj[key];
36
+ return val.length > 60 ? val.slice(0, 57) + "..." : val;
37
+ }
38
+ }
39
+ return "";
40
+ }
41
+ export function buildArgs(step, agentSpec, prompt, options) {
42
+ const args = ["--mode", "json"];
43
+ // Session log
44
+ args.push("--session-dir", options.sessionLogDir);
45
+ // Model: step > agent spec > model-config by role > model-config default
46
+ const model = step.model ??
47
+ agentSpec.model ??
48
+ (agentSpec.role && options.modelConfig?.by_role?.[agentSpec.role]) ??
49
+ options.modelConfig?.default;
50
+ if (model) {
51
+ const modelArg = `${model}:${agentSpec.thinking ?? "off"}`;
52
+ args.push("--models", modelArg);
53
+ }
54
+ // Tool filtering
55
+ if (agentSpec.tools?.length) {
56
+ const builtinTools = [];
57
+ const extensionPaths = [];
58
+ for (const tool of agentSpec.tools) {
59
+ if (tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js")) {
60
+ extensionPaths.push(tool);
61
+ }
62
+ else {
63
+ builtinTools.push(tool);
64
+ }
65
+ }
66
+ if (builtinTools.length > 0)
67
+ args.push("--tools", builtinTools.join(","));
68
+ for (const ext of extensionPaths)
69
+ args.push("--extension", ext);
70
+ }
71
+ // Extension scoping
72
+ if (agentSpec.extensions !== undefined) {
73
+ args.push("--no-extensions");
74
+ for (const ext of agentSpec.extensions)
75
+ args.push("--extension", ext);
76
+ }
77
+ // Skill scoping
78
+ if (agentSpec.skills?.length) {
79
+ args.push("--no-skills");
80
+ // Skills are injected via --append-system-prompt, not CLI flags
81
+ }
82
+ // System prompt (if agent spec has one)
83
+ // Write to temp file if present, pass via --append-system-prompt
84
+ // (handled in dispatch() body, not buildArgs)
85
+ // Prompt — use @file for long prompts
86
+ args.push("-p");
87
+ args.push(prompt); // or @<tmpfile> if prompt > 8000 chars
88
+ return args;
89
+ }
90
+ /**
91
+ * Spawn a pi subprocess for a workflow step and collect the result.
92
+ *
93
+ * Builds CLI args from the step spec and agent spec.
94
+ * Streams stdout as newline-delimited JSON.
95
+ * Collects messages, usage, timing.
96
+ * Returns StepResult when the process exits.
97
+ */
98
+ export async function dispatch(step, agentSpec, prompt, options) {
99
+ const startTime = Date.now();
100
+ const args = buildArgs(step, agentSpec, prompt, options);
101
+ // Handle long prompts: write to temp file
102
+ let tmpDir = null;
103
+ if (prompt.length > PROMPT_ARG_LIMIT) {
104
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-wf-"));
105
+ const promptFile = path.join(tmpDir, "prompt.md");
106
+ fs.writeFileSync(promptFile, prompt, { mode: 0o600 });
107
+ // Replace last two args ("-p", prompt) with ("-p", "@<file>")
108
+ args[args.length - 1] = `@${promptFile}`;
109
+ }
110
+ // Handle system prompt: write to temp file
111
+ if (agentSpec.systemPrompt) {
112
+ if (!tmpDir)
113
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-wf-"));
114
+ const sysFile = path.join(tmpDir, "system.md");
115
+ fs.writeFileSync(sysFile, agentSpec.systemPrompt, { mode: 0o600 });
116
+ // Insert before -p flag
117
+ const pIdx = args.indexOf("-p");
118
+ args.splice(pIdx, 0, "--append-system-prompt", sysFile);
119
+ }
120
+ const proc = spawn("pi", args, {
121
+ cwd: options.cwd,
122
+ env: process.env,
123
+ stdio: ["ignore", "pipe", "pipe"],
124
+ });
125
+ // Cancellation support
126
+ if (options.signal) {
127
+ const kill = () => {
128
+ proc.kill("SIGTERM");
129
+ setTimeout(() => {
130
+ if (!proc.killed)
131
+ proc.kill("SIGKILL");
132
+ }, SIGKILL_GRACE_MS);
133
+ };
134
+ if (options.signal.aborted)
135
+ kill();
136
+ else
137
+ options.signal.addEventListener("abort", kill, { once: true });
138
+ }
139
+ // Timeout support: SIGTERM after deadline, SIGKILL after 5s grace
140
+ let timedOut = false;
141
+ let timeoutTimer;
142
+ let killTimer;
143
+ if (options.timeoutMs) {
144
+ timeoutTimer = setTimeout(() => {
145
+ timedOut = true;
146
+ proc.kill("SIGTERM");
147
+ killTimer = setTimeout(() => {
148
+ if (!proc.killed)
149
+ proc.kill("SIGKILL");
150
+ }, SIGKILL_GRACE_MS);
151
+ }, options.timeoutMs);
152
+ }
153
+ // Collect result
154
+ const messages = [];
155
+ const usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };
156
+ let lastAssistantText = "";
157
+ let stderrBuf = "";
158
+ function processEvent(evt) {
159
+ // Track messages
160
+ if (evt.type === "message_end" && evt.message) {
161
+ messages.push(evt.message);
162
+ if (evt.message.role === "assistant") {
163
+ usage.turns++;
164
+ const u = evt.message.usage;
165
+ if (u) {
166
+ usage.input += u.input || 0;
167
+ usage.output += u.output || 0;
168
+ usage.cacheRead += u.cacheRead || 0;
169
+ usage.cacheWrite += u.cacheWrite || 0;
170
+ usage.cost += u.cost?.total || 0;
171
+ }
172
+ // Extract text from last assistant message
173
+ const text = extractText(evt.message.content);
174
+ if (text)
175
+ lastAssistantText = text;
176
+ }
177
+ }
178
+ // Forward to TUI callback
179
+ if (options.onEvent) {
180
+ options.onEvent({
181
+ type: evt.type || "unknown",
182
+ raw: evt,
183
+ toolName: evt.type === "tool_execution_start" ? evt.toolName : undefined,
184
+ toolArgs: evt.type === "tool_execution_start" ? extractToolArgsPreview(evt.args) : undefined,
185
+ messageText: evt.type === "message_end" && evt.message?.role === "assistant"
186
+ ? extractText(evt.message.content)
187
+ : undefined,
188
+ usage: evt.type === "message_end" && evt.message?.role === "assistant" && evt.message.usage
189
+ ? {
190
+ input: evt.message.usage.input,
191
+ output: evt.message.usage.output,
192
+ cost: evt.message.usage.cost?.total,
193
+ }
194
+ : undefined,
195
+ });
196
+ }
197
+ }
198
+ // Stream stdout as newline-delimited JSON
199
+ let buf = "";
200
+ let bufBytes = 0;
201
+ let stdoutTruncated = false;
202
+ proc.stdout.on("data", (chunk) => {
203
+ bufBytes += chunk.length;
204
+ if (bufBytes > MAX_STDOUT_BYTES) {
205
+ if (!stdoutTruncated) {
206
+ stdoutTruncated = true;
207
+ // Process any remaining partial line in buf before discarding
208
+ if (buf.trim()) {
209
+ try {
210
+ const evt = JSON.parse(buf);
211
+ processEvent(evt);
212
+ }
213
+ catch {
214
+ // incomplete JSON line — discard
215
+ }
216
+ buf = "";
217
+ }
218
+ }
219
+ return;
220
+ }
221
+ buf += chunk.toString();
222
+ const lines = buf.split("\n");
223
+ buf = lines.pop() || "";
224
+ for (const line of lines) {
225
+ if (!line.trim())
226
+ continue;
227
+ try {
228
+ const evt = JSON.parse(line);
229
+ processEvent(evt);
230
+ }
231
+ catch {
232
+ // Skip unparseable lines
233
+ }
234
+ }
235
+ });
236
+ proc.stderr.on("data", (chunk) => {
237
+ stderrBuf += chunk.toString();
238
+ });
239
+ // Wait for process to exit
240
+ const exitCode = await new Promise((resolve) => {
241
+ proc.on("close", (code) => {
242
+ // Process remaining buffer
243
+ if (buf.trim()) {
244
+ try {
245
+ const evt = JSON.parse(buf);
246
+ processEvent(evt);
247
+ }
248
+ catch {
249
+ // Skip unparseable remainder
250
+ }
251
+ }
252
+ resolve(code);
253
+ });
254
+ });
255
+ // Clear timeout timers
256
+ if (timeoutTimer)
257
+ clearTimeout(timeoutTimer);
258
+ if (killTimer)
259
+ clearTimeout(killTimer);
260
+ // Cleanup temp files
261
+ if (tmpDir) {
262
+ try {
263
+ fs.rmSync(tmpDir, { recursive: true, force: true });
264
+ }
265
+ catch {
266
+ // Best-effort cleanup
267
+ }
268
+ }
269
+ // Timeout overrides exit code interpretation
270
+ if (timedOut) {
271
+ const warnings = [];
272
+ if (stdoutTruncated) {
273
+ warnings.push(`Stdout exceeded ${MAX_STDOUT_BYTES / (1024 * 1024)}MB limit — ` +
274
+ `output stream was truncated at ${bufBytes} bytes. ` +
275
+ `Usage counters (tokens, cost, turns) and textOutput may be incomplete.`);
276
+ }
277
+ return {
278
+ step: options.stepName,
279
+ agent: step.agent,
280
+ status: "failed",
281
+ output: undefined,
282
+ textOutput: lastAssistantText,
283
+ sessionLog: options.sessionLogDir,
284
+ usage,
285
+ durationMs: Date.now() - startTime,
286
+ error: `Step timed out after ${options.timeoutMs / 1000}s`,
287
+ truncated: stdoutTruncated || undefined,
288
+ warnings: warnings.length > 0 ? warnings : undefined,
289
+ };
290
+ }
291
+ const warnings = [];
292
+ if (stdoutTruncated) {
293
+ warnings.push(`Stdout exceeded ${MAX_STDOUT_BYTES / (1024 * 1024)}MB limit — ` +
294
+ `output stream was truncated at ${bufBytes} bytes. ` +
295
+ `Usage counters (tokens, cost, turns) and textOutput may be incomplete.`);
296
+ }
297
+ return {
298
+ step: options.stepName,
299
+ agent: step.agent,
300
+ status: exitCode === 0 ? "completed" : "failed",
301
+ output: undefined, // structured output handled by caller (workflow-executor)
302
+ textOutput: lastAssistantText,
303
+ sessionLog: options.sessionLogDir,
304
+ usage,
305
+ durationMs: Date.now() - startTime,
306
+ error: exitCode !== 0 ? stderrBuf.trim() || "Process exited with code " + exitCode : undefined,
307
+ truncated: stdoutTruncated || undefined,
308
+ warnings: warnings.length > 0 ? warnings : undefined,
309
+ };
310
+ }
311
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /** Filter names derived from the FILTERS registry — add a filter above, this updates automatically. */
2
+ export declare const FILTER_NAMES: string[];
3
+ /** Known root-level expression scope keys. */
4
+ export declare const EXPRESSION_ROOTS: readonly ["input", "steps"];
5
+ /**
6
+ * Error class for expression resolution failures.
7
+ * Contains the original expression and a diagnostic reason.
8
+ */
9
+ export declare class ExpressionError extends Error {
10
+ readonly expression: string;
11
+ readonly reason: string;
12
+ constructor(expression: string, reason: string);
13
+ }
14
+ /**
15
+ * Resolve a single expression string (without the ${{ }} delimiters).
16
+ * E.g. "steps.diagnose.output.rootCause" walks scope.steps.diagnose.output.rootCause
17
+ *
18
+ * Supports pipe filters: "totalDurationMs | duration"
19
+ *
20
+ * Scope is Record<string, unknown> — accepts ExpressionScope, CompletionScope, or any object.
21
+ *
22
+ * Throws ExpressionError if any segment of the path is undefined or null,
23
+ * or if a filter name is unknown.
24
+ */
25
+ export declare function resolveExpression(expr: string, scope: Record<string, unknown>): unknown;
26
+ /**
27
+ * Resolve all ${{ }} expressions in a value.
28
+ *
29
+ * - If `value` is a string containing `${{ expr }}`, resolve the expression.
30
+ * - If `value` is a string that IS entirely `${{ expr }}`, return the resolved value
31
+ * (preserving its type -- object, array, number, etc.).
32
+ * - If `value` is a string with `${{ expr }}` embedded in other text,
33
+ * stringify the resolved value and interpolate.
34
+ * - If `value` is an object, recursively resolve all values.
35
+ * - If `value` is an array, recursively resolve all elements.
36
+ * - If `value` is anything else (number, boolean, null), return as-is.
37
+ *
38
+ * Throws ExpressionError if a property path doesn't resolve.
39
+ */
40
+ export declare function resolveExpressions(value: unknown, scope: Record<string, unknown>): unknown;
41
+ /**
42
+ * Parse a right-hand operand string into a typed value.
43
+ * Supports: string literals ('value' or "value"), number literals, boolean literals (true/false),
44
+ * null, undefined, or expression paths resolved against scope.
45
+ */
46
+ export declare function parseRightOperand(str: string, scope: Record<string, unknown>): unknown;
47
+ /**
48
+ * Compare two values using a comparison operator.
49
+ * == and === both use strict equality (===).
50
+ */
51
+ export declare function compare(left: unknown, right: unknown, op: string): boolean;
52
+ /**
53
+ * Evaluate a condition expression for boolean truthiness.
54
+ *
55
+ * Supports:
56
+ * - Simple path expressions: truthy/falsy evaluation of the resolved value
57
+ * - Negation with ! prefix
58
+ * - Comparison operators: ==, !=, ===, !==, >, <, >=, <=
59
+ * - Right operands: string literals, number literals, boolean literals, null, undefined, or expression paths
60
+ *
61
+ * JS truthiness rules: undefined, null, false, 0, "" are falsy; everything else is truthy.
62
+ */
63
+ export declare function evaluateCondition(expr: string, scope: Record<string, unknown>): boolean;
64
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"AAkBA,uGAAuG;AACvG,eAAO,MAAM,YAAY,UAAuB,CAAC;AAEjD,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,6BAA8B,CAAC;AAE5D;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAuDvF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAmB1F;AAmCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAoBtF;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAmB1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAgCvF"}