@davidorex/pi-workflows 0.2.0 → 0.3.1

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 (216) hide show
  1. package/CHANGELOG.md +7 -4
  2. package/README.md +12 -2
  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 +178 -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 +724 -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 +171 -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 +63 -0
  84. package/dist/step-shared.d.ts.map +1 -0
  85. package/dist/step-shared.js +136 -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 +165 -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 +738 -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 +457 -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 +476 -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/{src/workflows-dir.ts → dist/workflows-dir.js} +1 -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 +107 -0
  140. package/skills/pi-workflows/SKILL.md +185 -0
  141. package/skills/pi-workflows/references/bundled-resources.md +87 -0
  142. package/templates/architecture-designer/task.md +117 -0
  143. package/templates/architecture-inferrer/task.md +61 -0
  144. package/templates/gap-identifier/task.md +103 -0
  145. package/templates/handoff-writer/task.md +91 -0
  146. package/templates/plan-creator/task.md +143 -0
  147. package/templates/project-definer/task.md +67 -0
  148. package/templates/project-inferrer/task.md +56 -0
  149. package/templates/requirements-gatherer/task.md +90 -0
  150. package/workflows/analyze-existing-project.workflow.yaml +94 -0
  151. package/workflows/create-handoff.workflow.yaml +66 -0
  152. package/workflows/create-phase.workflow.yaml +1 -1
  153. package/workflows/do-gap.workflow.yaml +4 -4
  154. package/workflows/fix-audit.workflow.yaml +1 -1
  155. package/workflows/gap-to-phase.workflow.yaml +1 -1
  156. package/workflows/init-new-project.workflow.yaml +81 -0
  157. package/workflows/plan-from-requirements.workflow.yaml +59 -0
  158. package/workflows/self-implement.workflow.yaml +3 -3
  159. package/workflows/typed-analysis.workflow.yaml +4 -4
  160. package/src/agent-spec.test.ts +0 -289
  161. package/src/agent-spec.ts +0 -122
  162. package/src/block-validation.test.ts +0 -350
  163. package/src/checkpoint.test.ts +0 -237
  164. package/src/checkpoint.ts +0 -140
  165. package/src/completion.test.ts +0 -143
  166. package/src/completion.ts +0 -68
  167. package/src/dag.test.ts +0 -350
  168. package/src/dag.ts +0 -219
  169. package/src/dispatch.test.ts +0 -475
  170. package/src/dispatch.ts +0 -353
  171. package/src/expression.test.ts +0 -353
  172. package/src/expression.ts +0 -332
  173. package/src/format.test.ts +0 -80
  174. package/src/format.ts +0 -41
  175. package/src/graduated-failure.test.ts +0 -556
  176. package/src/index.test.ts +0 -114
  177. package/src/index.ts +0 -516
  178. package/src/loop.test.ts +0 -551
  179. package/src/output.test.ts +0 -213
  180. package/src/output.ts +0 -70
  181. package/src/parallel-integration.test.ts +0 -175
  182. package/src/resume.test.ts +0 -192
  183. package/src/state.test.ts +0 -192
  184. package/src/state.ts +0 -254
  185. package/src/step-agent.test.ts +0 -327
  186. package/src/step-agent.ts +0 -178
  187. package/src/step-command.test.ts +0 -330
  188. package/src/step-command.ts +0 -132
  189. package/src/step-foreach.test.ts +0 -647
  190. package/src/step-foreach.ts +0 -148
  191. package/src/step-gate.test.ts +0 -185
  192. package/src/step-gate.ts +0 -116
  193. package/src/step-loop.test.ts +0 -626
  194. package/src/step-loop.ts +0 -323
  195. package/src/step-parallel.test.ts +0 -475
  196. package/src/step-parallel.ts +0 -168
  197. package/src/step-pause.test.ts +0 -30
  198. package/src/step-shared.test.ts +0 -355
  199. package/src/step-shared.ts +0 -157
  200. package/src/step-transform.test.ts +0 -155
  201. package/src/step-transform.ts +0 -47
  202. package/src/template-integration.test.ts +0 -72
  203. package/src/template.test.ts +0 -162
  204. package/src/test-helpers.ts +0 -51
  205. package/src/tui.test.ts +0 -355
  206. package/src/tui.ts +0 -182
  207. package/src/types.ts +0 -195
  208. package/src/verifier-schema.test.ts +0 -226
  209. package/src/workflow-discovery.test.ts +0 -105
  210. package/src/workflow-discovery.ts +0 -114
  211. package/src/workflow-executor.test.ts +0 -1532
  212. package/src/workflow-executor.ts +0 -810
  213. package/src/workflow-sdk.test.ts +0 -238
  214. package/src/workflow-sdk.ts +0 -262
  215. package/src/workflow-spec.test.ts +0 -576
  216. package/src/workflow-spec.ts +0 -471
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Monitor step executor — runs a monitor's classification as a workflow
3
+ * verification gate. Lightweight: reads monitor spec, loads patterns,
4
+ * renders prompt (Nunjucks or inline), calls LLM, parses verdict.
5
+ *
6
+ * Does NOT depend on pi-behavior-monitors — implements just enough to
7
+ * classify. No event handling, steering, ceiling, or escalation.
8
+ */
9
+ import * as fs from "node:fs";
10
+ import * as os from "node:os";
11
+ import * as path from "node:path";
12
+ import { complete } from "@mariozechner/pi-ai";
13
+ import nunjucks from "nunjucks";
14
+ import { persistStepOutput } from "./output.js";
15
+ import { zeroUsage } from "./step-shared.js";
16
+ // ── Discovery ────────────────────────────────────────────────────────────────
17
+ /**
18
+ * Find a monitor spec by name. Searches:
19
+ * 1. .pi/monitors/ (project)
20
+ * 2. ~/.pi/agent/monitors/ (user)
21
+ * 3. pi-behavior-monitors examples (if installed as peer)
22
+ */
23
+ export function findMonitorSpec(monitorName, cwd) {
24
+ const searchDirs = [
25
+ path.join(cwd, ".pi", "monitors"),
26
+ path.join(os.homedir(), ".pi", "agent", "monitors"),
27
+ ];
28
+ // Also check pi-behavior-monitors examples via node_modules
29
+ try {
30
+ const bmPath = require.resolve("@davidorex/pi-behavior-monitors/package.json", { paths: [cwd] });
31
+ searchDirs.push(path.join(path.dirname(bmPath), "examples"));
32
+ }
33
+ catch {
34
+ // pi-behavior-monitors not installed — skip
35
+ }
36
+ for (const dir of searchDirs) {
37
+ const filePath = path.join(dir, `${monitorName}.monitor.json`);
38
+ try {
39
+ const raw = JSON.parse(fs.readFileSync(filePath, "utf-8"));
40
+ if (raw.name && raw.classify && raw.patterns?.path) {
41
+ return {
42
+ spec: {
43
+ name: raw.name,
44
+ classify: {
45
+ model: raw.classify.model ?? "claude-sonnet-4-20250514",
46
+ context: Array.isArray(raw.classify.context) ? raw.classify.context : [],
47
+ prompt: raw.classify.prompt ?? "",
48
+ promptTemplate: typeof raw.classify.promptTemplate === "string" ? raw.classify.promptTemplate : undefined,
49
+ },
50
+ patterns: { path: raw.patterns.path },
51
+ instructions: raw.instructions?.path ? { path: raw.instructions.path } : undefined,
52
+ },
53
+ dir,
54
+ };
55
+ }
56
+ }
57
+ catch {
58
+ // file doesn't exist or is invalid — try next
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ // ── Pattern & instruction loading ────────────────────────────────────────────
64
+ function loadPatterns(dir, patternsPath) {
65
+ try {
66
+ const resolved = path.resolve(dir, patternsPath);
67
+ return JSON.parse(fs.readFileSync(resolved, "utf-8"));
68
+ }
69
+ catch {
70
+ return [];
71
+ }
72
+ }
73
+ function loadInstructions(dir, instructionsPath) {
74
+ if (!instructionsPath)
75
+ return [];
76
+ try {
77
+ const resolved = path.resolve(dir, instructionsPath);
78
+ return JSON.parse(fs.readFileSync(resolved, "utf-8"));
79
+ }
80
+ catch {
81
+ return [];
82
+ }
83
+ }
84
+ function formatPatterns(patterns) {
85
+ return patterns.map((p, i) => `${i + 1}. [${p.severity ?? "warning"}] ${p.description}`).join("\n");
86
+ }
87
+ function formatInstructions(instructions) {
88
+ if (instructions.length === 0)
89
+ return "";
90
+ const lines = instructions.map((i) => `- ${i.text}`).join("\n");
91
+ return `\nOperating instructions from the user (follow these strictly):\n${lines}\n`;
92
+ }
93
+ // ── Template rendering ───────────────────────────────────────────────────────
94
+ function createTemplateEnv(cwd) {
95
+ const searchPaths = [];
96
+ const projectDir = path.join(cwd, ".pi", "monitors");
97
+ const userDir = path.join(os.homedir(), ".pi", "agent", "monitors");
98
+ if (fs.existsSync(projectDir))
99
+ searchPaths.push(projectDir);
100
+ if (fs.existsSync(userDir))
101
+ searchPaths.push(userDir);
102
+ // pi-behavior-monitors examples
103
+ try {
104
+ const bmPath = require.resolve("@davidorex/pi-behavior-monitors/package.json", { paths: [cwd] });
105
+ const exDir = path.join(path.dirname(bmPath), "examples");
106
+ if (fs.existsSync(exDir))
107
+ searchPaths.push(exDir);
108
+ }
109
+ catch {
110
+ /* not installed */
111
+ }
112
+ const loader = searchPaths.length > 0 ? new nunjucks.FileSystemLoader(searchPaths) : undefined;
113
+ return new nunjucks.Environment(loader, { autoescape: false, throwOnUndefined: false });
114
+ }
115
+ function renderPrompt(spec, dir, input, templateEnv) {
116
+ const patterns = loadPatterns(dir, spec.patterns.path);
117
+ if (patterns.length === 0)
118
+ return null;
119
+ const instructions = loadInstructions(dir, spec.instructions?.path);
120
+ // Build context: patterns, instructions, plus any input fields
121
+ const context = {
122
+ patterns: formatPatterns(patterns),
123
+ instructions: formatInstructions(instructions),
124
+ iteration: 0,
125
+ ...input,
126
+ };
127
+ if (spec.classify.promptTemplate) {
128
+ try {
129
+ return templateEnv.render(spec.classify.promptTemplate, context);
130
+ }
131
+ catch {
132
+ // Fall through to inline prompt
133
+ if (!spec.classify.prompt)
134
+ return null;
135
+ }
136
+ }
137
+ if (!spec.classify.prompt)
138
+ return null;
139
+ return spec.classify.prompt.replace(/\{(\w+)\}/g, (match, key) => {
140
+ return String(context[key] ?? match);
141
+ });
142
+ }
143
+ // ── Verdict parsing ──────────────────────────────────────────────────────────
144
+ function parseVerdict(raw) {
145
+ const text = raw.trim();
146
+ if (text.startsWith("CLEAN"))
147
+ return { verdict: "clean" };
148
+ if (text.startsWith("NEW:")) {
149
+ const rest = text.slice(4);
150
+ const pipe = rest.indexOf("|");
151
+ if (pipe !== -1) {
152
+ return { verdict: "new", pattern: rest.slice(0, pipe).trim(), description: rest.slice(pipe + 1).trim() };
153
+ }
154
+ return { verdict: "new", pattern: rest.trim(), description: rest.trim() };
155
+ }
156
+ if (text.startsWith("FLAG:"))
157
+ return { verdict: "flag", description: text.slice(5).trim() };
158
+ return { verdict: "clean" };
159
+ }
160
+ function extractText(parts) {
161
+ return parts
162
+ .filter((b) => b.type === "text")
163
+ .map((b) => b.text)
164
+ .join("");
165
+ }
166
+ /**
167
+ * Execute a monitor step: discover monitor, render prompt, classify, return verdict.
168
+ *
169
+ * - CLEAN → status: "completed", output: { verdict: "clean" }
170
+ * - FLAG → status: "failed", output: { verdict: "flag", description }
171
+ * - NEW → status: "failed", output: { verdict: "new", pattern, description }
172
+ */
173
+ export async function executeMonitor(monitorName, stepName, input, options) {
174
+ const startTime = Date.now();
175
+ // 1. Discover monitor
176
+ const found = findMonitorSpec(monitorName, options.cwd);
177
+ if (!found) {
178
+ return {
179
+ step: stepName,
180
+ agent: `monitor:${monitorName}`,
181
+ status: "failed",
182
+ usage: zeroUsage(),
183
+ durationMs: Date.now() - startTime,
184
+ error: `Monitor '${monitorName}' not found`,
185
+ };
186
+ }
187
+ const { spec, dir } = found;
188
+ // 2. Render prompt
189
+ const templateEnv = createTemplateEnv(options.cwd);
190
+ const prompt = renderPrompt(spec, dir, input, templateEnv);
191
+ if (!prompt) {
192
+ return {
193
+ step: stepName,
194
+ agent: `monitor:${monitorName}`,
195
+ status: "completed",
196
+ output: { verdict: "clean", note: "No patterns loaded — nothing to classify" },
197
+ textOutput: "CLEAN (no patterns)",
198
+ usage: zeroUsage(),
199
+ durationMs: Date.now() - startTime,
200
+ };
201
+ }
202
+ // 3. Resolve model
203
+ const { provider, modelId } = parseModelSpec(spec.classify.model);
204
+ const model = options.ctx.modelRegistry.find(provider, modelId);
205
+ if (!model) {
206
+ return {
207
+ step: stepName,
208
+ agent: `monitor:${monitorName}`,
209
+ status: "failed",
210
+ usage: zeroUsage(),
211
+ durationMs: Date.now() - startTime,
212
+ error: `Model '${spec.classify.model}' not found in registry`,
213
+ };
214
+ }
215
+ const apiKey = await options.ctx.modelRegistry.getApiKey(model);
216
+ if (!apiKey) {
217
+ return {
218
+ step: stepName,
219
+ agent: `monitor:${monitorName}`,
220
+ status: "failed",
221
+ usage: zeroUsage(),
222
+ durationMs: Date.now() - startTime,
223
+ error: `No API key for model '${spec.classify.model}'`,
224
+ };
225
+ }
226
+ // 4. Classify
227
+ let response;
228
+ try {
229
+ response = await complete(model, { messages: [{ role: "user", content: [{ type: "text", text: prompt }], timestamp: Date.now() }] }, { apiKey, maxTokens: 150, signal: options.signal });
230
+ }
231
+ catch (err) {
232
+ if (options.signal?.aborted) {
233
+ return {
234
+ step: stepName,
235
+ agent: `monitor:${monitorName}`,
236
+ status: "failed",
237
+ usage: zeroUsage(),
238
+ durationMs: Date.now() - startTime,
239
+ error: "Monitor classification cancelled",
240
+ };
241
+ }
242
+ const msg = err instanceof Error ? err.message : String(err);
243
+ return {
244
+ step: stepName,
245
+ agent: `monitor:${monitorName}`,
246
+ status: "failed",
247
+ usage: zeroUsage(),
248
+ durationMs: Date.now() - startTime,
249
+ error: `Classification failed: ${msg}`,
250
+ };
251
+ }
252
+ // 5. Parse verdict
253
+ const rawText = extractText(response.content);
254
+ const verdict = parseVerdict(rawText);
255
+ const durationMs = Date.now() - startTime;
256
+ // Estimate usage from response
257
+ const usage = zeroUsage();
258
+ // Token counts not directly available from complete() — leave as zero
259
+ const output = {
260
+ verdict: verdict.verdict,
261
+ ...(verdict.description ? { description: verdict.description } : {}),
262
+ ...(verdict.pattern ? { pattern: verdict.pattern } : {}),
263
+ };
264
+ const result = {
265
+ step: stepName,
266
+ agent: `monitor:${monitorName}`,
267
+ status: verdict.verdict === "clean" ? "completed" : "failed",
268
+ output,
269
+ textOutput: rawText.trim(),
270
+ usage,
271
+ durationMs,
272
+ ...(verdict.verdict !== "clean" ? { error: verdict.description ?? "Monitor flagged an issue" } : {}),
273
+ };
274
+ if (options.runDir) {
275
+ result.outputPath = persistStepOutput(options.runDir, stepName, output, rawText.trim(), options.outputPath);
276
+ }
277
+ return result;
278
+ }
279
+ // ── Utility ──────────────────────────────────────────────────────────────────
280
+ function parseModelSpec(spec) {
281
+ const slashIndex = spec.indexOf("/");
282
+ if (slashIndex !== -1) {
283
+ return { provider: spec.slice(0, slashIndex), modelId: spec.slice(slashIndex + 1) };
284
+ }
285
+ return { provider: "anthropic", modelId: spec };
286
+ }
287
+ /**
288
+ * List all discoverable monitor names for validation.
289
+ */
290
+ export function availableMonitors(cwd) {
291
+ const searchDirs = [
292
+ path.join(cwd, ".pi", "monitors"),
293
+ path.join(os.homedir(), ".pi", "agent", "monitors"),
294
+ ];
295
+ try {
296
+ const bmPath = require.resolve("@davidorex/pi-behavior-monitors/package.json", { paths: [cwd] });
297
+ searchDirs.push(path.join(path.dirname(bmPath), "examples"));
298
+ }
299
+ catch {
300
+ /* not installed */
301
+ }
302
+ const seen = new Set();
303
+ for (const dir of searchDirs) {
304
+ try {
305
+ for (const file of fs.readdirSync(dir)) {
306
+ if (file.endsWith(".monitor.json")) {
307
+ seen.add(file.replace(".monitor.json", ""));
308
+ }
309
+ }
310
+ }
311
+ catch {
312
+ /* dir doesn't exist */
313
+ }
314
+ }
315
+ return Array.from(seen).sort();
316
+ }
317
+ //# sourceMappingURL=step-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-monitor.js","sourceRoot":"","sources":["../src/step-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Parallel step executors — concurrent step execution within a layer
3
+ * or within a single parallel step declaration.
4
+ */
5
+ import type nunjucks from "nunjucks";
6
+ import type { ExecutionLayer } from "./dag.js";
7
+ import type { ProgressWidgetState } from "./tui.js";
8
+ import type { ExecutionState, StepResult, StepSpec, WorkflowSpec } from "./types.js";
9
+ /** Options shared by parallel execution helpers. */
10
+ export interface ParallelOptions {
11
+ ctx: any;
12
+ pi: any;
13
+ signal?: AbortSignal;
14
+ loadAgent: (name: string) => any;
15
+ runDir: string;
16
+ spec: WorkflowSpec;
17
+ widgetState: ProgressWidgetState;
18
+ templateEnv?: nunjucks.Environment;
19
+ }
20
+ /** Callback type for executing a single step — injected to avoid circular imports. */
21
+ export type SingleStepExecutor = (stepName: string, stepSpec: StepSpec, state: ExecutionState, options: ParallelOptions) => Promise<boolean>;
22
+ /**
23
+ * Execute all steps in a layer concurrently.
24
+ *
25
+ * All steps start at the same time. If any step fails, remaining steps
26
+ * are cancelled via a shared AbortController. All results are collected
27
+ * before proceeding to the next layer.
28
+ *
29
+ * Parallel steps write to distinct keys in `state.steps`, which is safe
30
+ * in single-threaded Node.js. `writeState` uses atomic write (tmp + rename),
31
+ * so concurrent calls are safe — last one wins.
32
+ */
33
+ export declare function executeParallelLayer(layer: ExecutionLayer, spec: WorkflowSpec, state: ExecutionState, executeSingleStep: SingleStepExecutor, options: ParallelOptions): Promise<void>;
34
+ /**
35
+ * Execute a parallel step — runs all named sub-steps concurrently.
36
+ *
37
+ * Similar to executeParallelLayer but operates on sub-steps within
38
+ * a single declared step. The parallel step's result aggregates
39
+ * all sub-step results. Sub-step outputs are accessible via
40
+ * `${{ steps.<parallelStepName>.output.<subStepName> }}`.
41
+ */
42
+ export declare function executeParallelStep(parallelSpec: Record<string, StepSpec>, stepName: string, state: ExecutionState, executeSingleStep: SingleStepExecutor, options: ParallelOptions): Promise<StepResult>;
43
+ //# sourceMappingURL=step-parallel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-parallel.d.ts","sourceRoot":"","sources":["../src/step-parallel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErF,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,EAAE,EAAE,GAAG,CAAC;IACR,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC;CACnC;AAED,sFAAsF;AACtF,MAAM,MAAM,kBAAkB,GAAG,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,eAAe,KACpB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,cAAc,EACrB,iBAAiB,EAAE,kBAAkB,EACrC,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,iBAAiB,EAAE,kBAAkB,EACrC,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,UAAU,CAAC,CA0DrB"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Parallel step executors — concurrent step execution within a layer
3
+ * or within a single parallel step declaration.
4
+ */
5
+ import { addUsage, WIDGET_ID, zeroUsage } from "./step-shared.js";
6
+ import { createProgressWidget } from "./tui.js";
7
+ /**
8
+ * Execute all steps in a layer concurrently.
9
+ *
10
+ * All steps start at the same time. If any step fails, remaining steps
11
+ * are cancelled via a shared AbortController. All results are collected
12
+ * before proceeding to the next layer.
13
+ *
14
+ * Parallel steps write to distinct keys in `state.steps`, which is safe
15
+ * in single-threaded Node.js. `writeState` uses atomic write (tmp + rename),
16
+ * so concurrent calls are safe — last one wins.
17
+ */
18
+ export async function executeParallelLayer(layer, spec, state, executeSingleStep, options) {
19
+ const { ctx, signal, widgetState } = options;
20
+ // Create a child AbortController to cancel siblings on failure
21
+ const layerController = new AbortController();
22
+ if (signal) {
23
+ if (signal.aborted) {
24
+ layerController.abort(signal.reason);
25
+ }
26
+ else {
27
+ signal.addEventListener("abort", () => layerController.abort(signal.reason), { once: true });
28
+ }
29
+ }
30
+ // Update widget to show all parallel steps as running
31
+ widgetState.currentStep = layer.steps.join(", ");
32
+ if (ctx.hasUI) {
33
+ ctx.ui.setWidget(WIDGET_ID, createProgressWidget(widgetState));
34
+ }
35
+ // Launch all steps concurrently
36
+ const promises = layer.steps.map(async (stepName) => {
37
+ const stepSpec = spec.steps[stepName];
38
+ const success = await executeSingleStep(stepName, stepSpec, state, {
39
+ ...options,
40
+ signal: layerController.signal,
41
+ });
42
+ if (!success && !layerController.signal.aborted) {
43
+ layerController.abort(new Error(`Step '${stepName}' failed`));
44
+ }
45
+ return { stepName, success };
46
+ });
47
+ const results = await Promise.allSettled(promises);
48
+ // Check for failures
49
+ for (const result of results) {
50
+ if (result.status === "rejected") {
51
+ state.status = "failed";
52
+ break;
53
+ }
54
+ if (result.status === "fulfilled" && !result.value.success) {
55
+ state.status = "failed";
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * Execute a parallel step — runs all named sub-steps concurrently.
62
+ *
63
+ * Similar to executeParallelLayer but operates on sub-steps within
64
+ * a single declared step. The parallel step's result aggregates
65
+ * all sub-step results. Sub-step outputs are accessible via
66
+ * `${{ steps.<parallelStepName>.output.<subStepName> }}`.
67
+ */
68
+ export async function executeParallelStep(parallelSpec, stepName, state, executeSingleStep, options) {
69
+ const startTime = Date.now();
70
+ const { signal } = options;
71
+ const parallelController = new AbortController();
72
+ if (signal) {
73
+ if (signal.aborted) {
74
+ parallelController.abort(signal.reason);
75
+ }
76
+ else {
77
+ signal.addEventListener("abort", () => parallelController.abort(signal.reason), { once: true });
78
+ }
79
+ }
80
+ // Sub-steps share the outer state for reading but write to their own keys
81
+ const subResults = {};
82
+ const subPromises = Object.entries(parallelSpec).map(async ([subName, subSpec]) => {
83
+ const success = await executeSingleStep(subName, subSpec, state, {
84
+ ...options,
85
+ signal: parallelController.signal,
86
+ });
87
+ subResults[subName] = state.steps[subName];
88
+ if (!success && !parallelController.signal.aborted) {
89
+ parallelController.abort(new Error(`Sub-step '${subName}' failed`));
90
+ }
91
+ return success;
92
+ });
93
+ const settled = await Promise.allSettled(subPromises);
94
+ // Aggregate usage and outputs
95
+ const totalUsage = zeroUsage();
96
+ const subOutputs = {};
97
+ let anyFailed = false;
98
+ for (const [subName] of Object.entries(parallelSpec)) {
99
+ const sub = subResults[subName];
100
+ if (sub) {
101
+ addUsage(totalUsage, sub.usage);
102
+ subOutputs[subName] = sub.output ?? sub.textOutput;
103
+ if (sub.status === "failed")
104
+ anyFailed = true;
105
+ }
106
+ }
107
+ // Check for rejected promises too
108
+ for (const s of settled) {
109
+ if (s.status === "rejected")
110
+ anyFailed = true;
111
+ }
112
+ return {
113
+ step: stepName,
114
+ agent: "parallel",
115
+ status: anyFailed ? "failed" : "completed",
116
+ output: subOutputs,
117
+ textOutput: JSON.stringify(subOutputs, null, 2),
118
+ usage: totalUsage,
119
+ durationMs: Date.now() - startTime,
120
+ };
121
+ }
122
+ //# sourceMappingURL=step-parallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-parallel.js","sourceRoot":"","sources":["../src/step-parallel.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,7 @@
2
2
  * Pause step executor — halts workflow execution at a deliberate checkpoint.
3
3
  * The workflow can be resumed later via /workflow resume or Ctrl+J.
4
4
  */
5
- import type { StepResult, StepUsage } from "./types.ts";
6
-
5
+ import type { StepResult } from "./types.js";
7
6
  /**
8
7
  * Execute a pause step.
9
8
  *
@@ -14,14 +13,5 @@ import type { StepResult, StepUsage } from "./types.ts";
14
13
  * @param message - optional message to display (from pause field)
15
14
  * @returns StepResult with status "completed"
16
15
  */
17
- export function executePause(stepName: string, message?: string): StepResult {
18
- return {
19
- step: stepName,
20
- agent: "pause",
21
- status: "completed",
22
- output: message ? { message } : undefined,
23
- textOutput: message || "Workflow paused",
24
- usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 } as StepUsage,
25
- durationMs: 0,
26
- };
27
- }
16
+ export declare function executePause(stepName: string, message?: string): StepResult;
17
+ //# sourceMappingURL=step-pause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-pause.d.ts","sourceRoot":"","sources":["../src/step-pause.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAU3E"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Execute a pause step.
3
+ *
4
+ * Returns a completed result immediately. The executor is responsible
5
+ * for setting state.status = "paused" and stopping the loop.
6
+ *
7
+ * @param stepName - name of the pause step
8
+ * @param message - optional message to display (from pause field)
9
+ * @returns StepResult with status "completed"
10
+ */
11
+ export function executePause(stepName, message) {
12
+ return {
13
+ step: stepName,
14
+ agent: "pause",
15
+ status: "completed",
16
+ output: message ? { message } : undefined,
17
+ textOutput: message || "Workflow paused",
18
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 },
19
+ durationMs: 0,
20
+ };
21
+ }
22
+ //# sourceMappingURL=step-pause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-pause.js","sourceRoot":"","sources":["../src/step-pause.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,OAAgB;IAC9D,OAAO;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QACzC,UAAU,EAAE,OAAO,IAAI,iBAAiB;QACxC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAe;QAC3F,UAAU,EAAE,CAAC;KACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type nunjucks from "nunjucks";
2
+ import type { ProgressWidgetState } from "./tui.js";
3
+ import type { AgentSpec, ExecutionState, StepResult, StepUsage } from "./types.js";
4
+ /** Grace period (ms) between SIGTERM and SIGKILL when killing subprocesses. */
5
+ export declare const SIGKILL_GRACE_MS = 3000;
6
+ /** Widget ID used for the workflow progress widget. */
7
+ export declare const WIDGET_ID = "workflow-progress";
8
+ /** Default max loop attempts when not specified. */
9
+ export declare const DEFAULT_MAX_ATTEMPTS = 3;
10
+ /**
11
+ * Helper that returns a StepUsage with all zeroes.
12
+ */
13
+ export declare function zeroUsage(): StepUsage;
14
+ /**
15
+ * Add step usage into a running total (mutates `total`).
16
+ */
17
+ export declare function addUsage(total: StepUsage, step: StepUsage): void;
18
+ /**
19
+ * Resolve a schema path to an absolute filesystem path.
20
+ *
21
+ * Three resolution modes:
22
+ * - Absolute paths: returned as-is
23
+ * - `block:<name>` prefix: resolves to `.project/schemas/<name>.schema.json` from cwd.
24
+ * This is the portable way to reference project block schemas from any workflow or
25
+ * agent spec regardless of package install location. Uses the user's actual schemas
26
+ * (which may be customized).
27
+ * - Relative paths: resolved against the directory containing the spec file
28
+ */
29
+ export declare function resolveSchemaPath(schemaPath: string, specFilePath: string, cwd?: string): string;
30
+ /**
31
+ * Build the prompt string sent to the subprocess.
32
+ *
33
+ * The prompt includes:
34
+ * 1. The compiled task template (if set), or the resolved input as context
35
+ * 2. Output instructions (if schema-bound)
36
+ */
37
+ export declare function buildPrompt(step: {
38
+ agent?: string;
39
+ input?: Record<string, unknown>;
40
+ output?: {
41
+ format?: string;
42
+ schema?: string;
43
+ };
44
+ }, agentSpec: AgentSpec, resolvedInput: unknown, runDir: string, stepName: string, cwd?: string): string;
45
+ /**
46
+ * Persist step result to state and update TUI widget.
47
+ * Replaces the repeated writeState + setWidget pattern.
48
+ */
49
+ export declare function persistStep(state: ExecutionState, stepName: string, result: StepResult, runDir: string, widgetState: ProgressWidgetState, ctx: {
50
+ hasUI: boolean;
51
+ ui: {
52
+ setWidget(id: string, w: unknown): void;
53
+ notify?(msg: string, level: string): void;
54
+ };
55
+ }): void;
56
+ /**
57
+ * Compile an agent spec: render system and task templates through Nunjucks.
58
+ *
59
+ * Every agent's prompts go through Nunjucks. Plain text without template
60
+ * tags renders to itself. The .md that pi receives is compiled output.
61
+ */
62
+ export declare function compileAgentSpec(agentSpec: AgentSpec, resolvedInput: unknown, templateEnv?: nunjucks.Environment): AgentSpec;
63
+ //# sourceMappingURL=step-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-shared.d.ts","sourceRoot":"","sources":["../src/step-shared.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEnF,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,uDAAuD;AACvD,eAAO,MAAM,SAAS,sBAAsB,CAAC;AAE7C,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAOhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhG;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACxG,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACV,MAAM,CA2BR;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,mBAAmB,EAChC,GAAG,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE;QAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,GACjH,IAAI,CAgBN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,QAAQ,CAAC,WAAW,GAChC,SAAS,CAwBX"}