@davidorex/pi-workflows 0.2.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 +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 +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/{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 +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 -140
  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 -475
  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 -516
  177. package/src/loop.test.ts +0 -551
  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 -254
  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 -114
  210. package/src/workflow-executor.test.ts +0 -1532
  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 @@
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,57 @@
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 relative to the workflow spec file.
20
+ * If the schema path is absolute, return as-is.
21
+ * If relative, resolve against the directory containing the workflow spec.
22
+ */
23
+ export declare function resolveSchemaPath(schemaPath: string, specFilePath: string): string;
24
+ /**
25
+ * Build the prompt string sent to the subprocess.
26
+ *
27
+ * The prompt includes:
28
+ * 1. The compiled task template (if set), or the resolved input as context
29
+ * 2. Output instructions (if schema-bound)
30
+ */
31
+ export declare function buildPrompt(step: {
32
+ agent?: string;
33
+ input?: Record<string, unknown>;
34
+ output?: {
35
+ format?: string;
36
+ schema?: string;
37
+ };
38
+ }, agentSpec: AgentSpec, resolvedInput: unknown, runDir: string, stepName: string): string;
39
+ /**
40
+ * Persist step result to state and update TUI widget.
41
+ * Replaces the repeated writeState + setWidget pattern.
42
+ */
43
+ export declare function persistStep(state: ExecutionState, stepName: string, result: StepResult, runDir: string, widgetState: ProgressWidgetState, ctx: {
44
+ hasUI: boolean;
45
+ ui: {
46
+ setWidget(id: string, w: unknown): void;
47
+ notify?(msg: string, level: string): void;
48
+ };
49
+ }): void;
50
+ /**
51
+ * Compile an agent spec: render system and task templates through Nunjucks.
52
+ *
53
+ * Every agent's prompts go through Nunjucks. Plain text without template
54
+ * tags renders to itself. The .md that pi receives is compiled output.
55
+ */
56
+ export declare function compileAgentSpec(agentSpec: AgentSpec, resolvedInput: unknown, templateEnv?: nunjucks.Environment): AgentSpec;
57
+ //# 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;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGlF;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,GACd,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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Shared helpers for step executors — constants, usage aggregation,
3
+ * prompt building, schema resolution, state persistence, and template resolution.
4
+ */
5
+ import path from "node:path";
6
+ import { writeState } from "./state.js";
7
+ import { renderTemplate, renderTemplateFile } from "./template.js";
8
+ import { createProgressWidget } from "./tui.js";
9
+ /** Grace period (ms) between SIGTERM and SIGKILL when killing subprocesses. */
10
+ export const SIGKILL_GRACE_MS = 3000;
11
+ /** Widget ID used for the workflow progress widget. */
12
+ export const WIDGET_ID = "workflow-progress";
13
+ /** Default max loop attempts when not specified. */
14
+ export const DEFAULT_MAX_ATTEMPTS = 3;
15
+ /**
16
+ * Helper that returns a StepUsage with all zeroes.
17
+ */
18
+ export function zeroUsage() {
19
+ return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };
20
+ }
21
+ /**
22
+ * Add step usage into a running total (mutates `total`).
23
+ */
24
+ export function addUsage(total, step) {
25
+ total.input += step.input;
26
+ total.output += step.output;
27
+ total.cacheRead += step.cacheRead;
28
+ total.cacheWrite += step.cacheWrite;
29
+ total.cost += step.cost;
30
+ total.turns += step.turns;
31
+ }
32
+ /**
33
+ * Resolve a schema path relative to the workflow spec file.
34
+ * If the schema path is absolute, return as-is.
35
+ * If relative, resolve against the directory containing the workflow spec.
36
+ */
37
+ export function resolveSchemaPath(schemaPath, specFilePath) {
38
+ if (path.isAbsolute(schemaPath))
39
+ return schemaPath;
40
+ return path.resolve(path.dirname(specFilePath), schemaPath);
41
+ }
42
+ /**
43
+ * Build the prompt string sent to the subprocess.
44
+ *
45
+ * The prompt includes:
46
+ * 1. The compiled task template (if set), or the resolved input as context
47
+ * 2. Output instructions (if schema-bound)
48
+ */
49
+ export function buildPrompt(step, agentSpec, resolvedInput, runDir, stepName) {
50
+ const parts = [];
51
+ // Task template was compiled by compileAgentSpec — use it
52
+ if (agentSpec.taskTemplate) {
53
+ parts.push(agentSpec.taskTemplate);
54
+ }
55
+ else if (resolvedInput && typeof resolvedInput === "object" && Object.keys(resolvedInput).length > 0) {
56
+ // No task template — serialize input as JSON
57
+ parts.push("## Input\n");
58
+ parts.push("```json");
59
+ parts.push(JSON.stringify(resolvedInput, null, 2));
60
+ parts.push("```\n");
61
+ }
62
+ else if (typeof resolvedInput === "string") {
63
+ parts.push(resolvedInput);
64
+ }
65
+ // Output instructions (if schema-bound)
66
+ if (step.output?.format === "json" || step.output?.schema) {
67
+ const outputPath = path.join(runDir, "outputs", `${stepName}.json`);
68
+ parts.push("\n---");
69
+ parts.push(`**Output:** Write your result as valid JSON to: ${outputPath}`);
70
+ if (step.output.schema) {
71
+ parts.push(`The output must conform to the JSON Schema at: ${resolveSchemaPath(step.output.schema, "")}`);
72
+ }
73
+ }
74
+ return parts.join("\n");
75
+ }
76
+ /**
77
+ * Persist step result to state and update TUI widget.
78
+ * Replaces the repeated writeState + setWidget pattern.
79
+ */
80
+ export function persistStep(state, stepName, result, runDir, widgetState, ctx) {
81
+ state.steps[stepName] = result;
82
+ // Clear activity buffer for completed step
83
+ widgetState.activities?.delete(stepName);
84
+ try {
85
+ writeState(runDir, state);
86
+ }
87
+ catch (err) {
88
+ if (ctx.hasUI && ctx.ui.notify) {
89
+ const msg = err instanceof Error ? err.message : String(err);
90
+ ctx.ui.notify(`State write failed after step '${stepName}': ${msg}`, "error");
91
+ }
92
+ throw err; // re-throw — state write failure is fatal
93
+ }
94
+ if (ctx.hasUI) {
95
+ ctx.ui.setWidget(WIDGET_ID, createProgressWidget(widgetState));
96
+ }
97
+ }
98
+ /**
99
+ * Compile an agent spec: render system and task templates through Nunjucks.
100
+ *
101
+ * Every agent's prompts go through Nunjucks. Plain text without template
102
+ * tags renders to itself. The .md that pi receives is compiled output.
103
+ */
104
+ export function compileAgentSpec(agentSpec, resolvedInput, templateEnv) {
105
+ if (!templateEnv)
106
+ return agentSpec;
107
+ const ctx = typeof resolvedInput === "object" && resolvedInput !== null ? resolvedInput : {};
108
+ let result = agentSpec;
109
+ // System prompt: file template or inline — always rendered
110
+ if (agentSpec.promptTemplate) {
111
+ const rendered = renderTemplateFile(templateEnv, agentSpec.promptTemplate, ctx);
112
+ result = { ...result, systemPrompt: rendered, promptTemplate: undefined };
113
+ }
114
+ else if (agentSpec.systemPrompt) {
115
+ const rendered = renderTemplate(templateEnv, agentSpec.systemPrompt, ctx);
116
+ result = { ...result, systemPrompt: rendered };
117
+ }
118
+ // Task prompt: file template — rendered from typed input
119
+ if (agentSpec.taskTemplate) {
120
+ const rendered = renderTemplateFile(templateEnv, agentSpec.taskTemplate, ctx);
121
+ result = { ...result, taskTemplate: rendered };
122
+ }
123
+ return result;
124
+ }
125
+ //# sourceMappingURL=step-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-shared.js","sourceRoot":"","sources":["../src/step-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Transform step executor — produces output by resolving expressions in a mapping.
3
+ * No LLM call, no subprocess, no shell command — pure expression resolution.
4
+ */
5
+ import type { StepResult, TransformSpec } from "./types.js";
6
+ /**
7
+ * Execute a transform step: produces output by resolving expressions in the mapping.
8
+ * No LLM call, no subprocess, no shell command — pure expression resolution.
9
+ */
10
+ export declare function executeTransform(transform: TransformSpec, stepName: string, scope: Record<string, unknown>, runDir?: string, outputPath?: string): StepResult;
11
+ //# sourceMappingURL=step-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-transform.d.ts","sourceRoot":"","sources":["../src/step-transform.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GACjB,UAAU,CA2BZ"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Transform step executor — produces output by resolving expressions in a mapping.
3
+ * No LLM call, no subprocess, no shell command — pure expression resolution.
4
+ */
5
+ import { resolveExpressions } from "./expression.js";
6
+ import { persistStepOutput } from "./output.js";
7
+ import { zeroUsage } from "./step-shared.js";
8
+ /**
9
+ * Execute a transform step: produces output by resolving expressions in the mapping.
10
+ * No LLM call, no subprocess, no shell command — pure expression resolution.
11
+ */
12
+ export function executeTransform(transform, stepName, scope, runDir, outputPath) {
13
+ const startTime = Date.now();
14
+ try {
15
+ const output = resolveExpressions(transform.mapping, scope);
16
+ const result = {
17
+ step: stepName,
18
+ agent: "transform",
19
+ status: "completed",
20
+ output,
21
+ textOutput: JSON.stringify(output, null, 2),
22
+ usage: zeroUsage(),
23
+ durationMs: Date.now() - startTime,
24
+ };
25
+ if (runDir) {
26
+ result.outputPath = persistStepOutput(runDir, stepName, output, undefined, outputPath);
27
+ }
28
+ return result;
29
+ }
30
+ catch (err) {
31
+ return {
32
+ step: stepName,
33
+ agent: "transform",
34
+ status: "failed",
35
+ usage: zeroUsage(),
36
+ durationMs: Date.now() - startTime,
37
+ error: err instanceof Error ? err.message : String(err),
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=step-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-transform.js","sourceRoot":"","sources":["../src/step-transform.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,SAAwB,EACxB,QAAgB,EAChB,KAA8B,EAC9B,MAAe,EACf,UAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAe;YAC1B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,WAAW;YACnB,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAClC,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACvD,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Nunjucks template rendering for agent prompts.
3
+ * Provides three-tier template resolution (project > user > builtin)
4
+ * and renders agent system prompts with step input as context.
5
+ */
6
+ import nunjucks from "nunjucks";
7
+ /**
8
+ * Create a Nunjucks environment with three-tier template resolution.
9
+ *
10
+ * Search order (first match wins):
11
+ * 1. .pi/templates/ (project-level)
12
+ * 2. ~/.pi/agent/templates/ (user-level)
13
+ * 3. <package>/templates/ (builtin)
14
+ *
15
+ * Autoescape is disabled — we're rendering markdown, not HTML.
16
+ *
17
+ * @param cwd - project root directory
18
+ * @param builtinDir - optional path to builtin templates (defaults to templates/ relative to package root)
19
+ */
20
+ export declare function createTemplateEnv(cwd: string, builtinDir?: string): nunjucks.Environment;
21
+ /**
22
+ * Render a template string through Nunjucks.
23
+ *
24
+ * Used for agent system prompts (the markdown body after frontmatter).
25
+ * The context object contains the step's resolved input fields as top-level keys.
26
+ *
27
+ * Workflow expressions (${{ }}) are protected from Nunjucks interpretation
28
+ * by escaping them before rendering and restoring them after.
29
+ *
30
+ * @param env - Nunjucks environment (from createTemplateEnv)
31
+ * @param templateStr - the template text to render
32
+ * @param context - variables available in the template
33
+ * @returns rendered string
34
+ */
35
+ export declare function renderTemplate(env: nunjucks.Environment, templateStr: string, context: Record<string, unknown>): string;
36
+ /**
37
+ * Render a named template file through Nunjucks.
38
+ *
39
+ * Used when an agent spec references a template by path:
40
+ * prompt:
41
+ * system: analyzers/base-analyzer.md
42
+ *
43
+ * The file is resolved through the three-tier search (project > user > builtin).
44
+ *
45
+ * @param env - Nunjucks environment
46
+ * @param templateName - relative path to the template file
47
+ * @param context - variables available in the template
48
+ * @returns rendered string
49
+ */
50
+ export declare function renderTemplateFile(env: nunjucks.Environment, templateName: string, context: Record<string, unknown>): string;
51
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,WAAW,CAmBxF;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,QAAQ,CAAC,WAAW,EACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAKR;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,QAAQ,CAAC,WAAW,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAER"}