@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,464 @@
1
+ import { parse as parseYaml } from "yaml";
2
+ /** Step type registry — add a step type here, parsing and SDK both see it automatically. */
3
+ export const STEP_TYPES = [
4
+ { name: "agent", field: "agent", retryable: true, supportsInput: true, supportsOutput: true },
5
+ { name: "gate", field: "gate", retryable: false, supportsInput: false, supportsOutput: false },
6
+ { name: "transform", field: "transform", retryable: false, supportsInput: false, supportsOutput: false },
7
+ { name: "loop", field: "loop", retryable: true, supportsInput: false, supportsOutput: false },
8
+ { name: "parallel", field: "parallel", retryable: true, supportsInput: false, supportsOutput: false },
9
+ { name: "pause", field: "pause", retryable: false, supportsInput: false, supportsOutput: false },
10
+ { name: "command", field: "command", retryable: false, supportsInput: true, supportsOutput: true },
11
+ { name: "monitor", field: "monitor", retryable: false, supportsInput: true, supportsOutput: true },
12
+ ];
13
+ /** Set of valid step type field names — derived from STEP_TYPES. */
14
+ export const STEP_TYPE_FIELDS = new Set(STEP_TYPES.map((t) => t.field));
15
+ /**
16
+ * Error class for spec parsing failures.
17
+ */
18
+ export class WorkflowSpecError extends Error {
19
+ filePath;
20
+ reason;
21
+ constructor(filePath, reason) {
22
+ super(`Invalid workflow spec (${filePath}): ${reason}`);
23
+ this.name = "WorkflowSpecError";
24
+ this.filePath = filePath;
25
+ this.reason = reason;
26
+ }
27
+ }
28
+ /**
29
+ * Parse a YAML string into a WorkflowSpec.
30
+ * Validates structure (required fields, types).
31
+ * Does NOT validate JSON Schemas or resolve agent references — that happens at execution time.
32
+ *
33
+ * @param content - raw YAML string
34
+ * @param filePath - absolute path to the file (stored on the spec, used in error messages)
35
+ * @param source - "user" or "project"
36
+ * @throws WorkflowSpecError on invalid structure
37
+ */
38
+ export function parseWorkflowSpec(content, filePath, source) {
39
+ let doc;
40
+ try {
41
+ doc = parseYaml(content);
42
+ }
43
+ catch (err) {
44
+ const msg = err instanceof Error ? err.message : String(err);
45
+ throw new WorkflowSpecError(filePath, `invalid YAML: ${msg}`);
46
+ }
47
+ if (typeof doc !== "object" || doc === null || Array.isArray(doc)) {
48
+ throw new WorkflowSpecError(filePath, "'name' is required");
49
+ }
50
+ const raw = doc;
51
+ // Validate name
52
+ if (!("name" in raw) || raw.name === undefined || raw.name === null) {
53
+ throw new WorkflowSpecError(filePath, "'name' is required");
54
+ }
55
+ if (typeof raw.name !== "string") {
56
+ throw new WorkflowSpecError(filePath, "'name' is required");
57
+ }
58
+ // Validate steps
59
+ if (!("steps" in raw) || raw.steps === undefined || raw.steps === null) {
60
+ throw new WorkflowSpecError(filePath, "'steps' must be a non-empty object");
61
+ }
62
+ if (typeof raw.steps !== "object" || Array.isArray(raw.steps)) {
63
+ throw new WorkflowSpecError(filePath, "'steps' must be a non-empty object");
64
+ }
65
+ const rawSteps = raw.steps;
66
+ if (Object.keys(rawSteps).length === 0) {
67
+ throw new WorkflowSpecError(filePath, "'steps' must be a non-empty object");
68
+ }
69
+ // Validate each step
70
+ const steps = {};
71
+ for (const [stepName, stepValue] of Object.entries(rawSteps)) {
72
+ steps[stepName] = validateStep(stepValue, stepName, filePath);
73
+ }
74
+ // Build the spec with defaults
75
+ const spec = {
76
+ name: raw.name,
77
+ description: typeof raw.description === "string" ? raw.description : "",
78
+ steps,
79
+ source,
80
+ filePath,
81
+ };
82
+ if (raw.version !== undefined)
83
+ spec.version = raw.version;
84
+ if (raw.input !== undefined)
85
+ spec.input = raw.input;
86
+ if (raw.output !== undefined)
87
+ spec.output = raw.output;
88
+ // triggerTurn defaults to true
89
+ if (typeof raw.triggerTurn === "boolean") {
90
+ spec.triggerTurn = raw.triggerTurn;
91
+ }
92
+ else {
93
+ spec.triggerTurn = true;
94
+ }
95
+ // completion (optional)
96
+ if ("completion" in raw && raw.completion !== undefined) {
97
+ if (typeof raw.completion !== "object" || raw.completion === null || Array.isArray(raw.completion)) {
98
+ throw new WorkflowSpecError(filePath, "'completion' must be an object");
99
+ }
100
+ const rawComp = raw.completion;
101
+ // Mutual exclusivity: template and message cannot coexist
102
+ if ("template" in rawComp && "message" in rawComp) {
103
+ throw new WorkflowSpecError(filePath, "'completion' cannot have both 'template' and 'message'");
104
+ }
105
+ // Must have at least one
106
+ if (!("template" in rawComp) && !("message" in rawComp)) {
107
+ throw new WorkflowSpecError(filePath, "'completion' must have either 'template' or 'message'");
108
+ }
109
+ const completion = {};
110
+ if (typeof rawComp.template === "string") {
111
+ completion.template = rawComp.template;
112
+ }
113
+ else if ("template" in rawComp) {
114
+ throw new WorkflowSpecError(filePath, "'completion.template' must be a string");
115
+ }
116
+ if (typeof rawComp.message === "string") {
117
+ completion.message = rawComp.message;
118
+ }
119
+ else if ("message" in rawComp) {
120
+ throw new WorkflowSpecError(filePath, "'completion.message' must be a string");
121
+ }
122
+ if ("include" in rawComp) {
123
+ if (!Array.isArray(rawComp.include)) {
124
+ throw new WorkflowSpecError(filePath, "'completion.include' must be an array of strings");
125
+ }
126
+ for (const item of rawComp.include) {
127
+ if (typeof item !== "string") {
128
+ throw new WorkflowSpecError(filePath, "'completion.include' must be an array of strings");
129
+ }
130
+ }
131
+ completion.include = rawComp.include;
132
+ }
133
+ spec.completion = completion;
134
+ }
135
+ // artifacts (optional)
136
+ if ("artifacts" in raw && raw.artifacts !== undefined) {
137
+ if (typeof raw.artifacts !== "object" || raw.artifacts === null || Array.isArray(raw.artifacts)) {
138
+ throw new WorkflowSpecError(filePath, "'artifacts' must be an object");
139
+ }
140
+ const rawArtifacts = raw.artifacts;
141
+ const artifacts = {};
142
+ for (const [artName, artValue] of Object.entries(rawArtifacts)) {
143
+ if (typeof artValue !== "object" || artValue === null || Array.isArray(artValue)) {
144
+ throw new WorkflowSpecError(filePath, `artifact '${artName}' must be an object`);
145
+ }
146
+ const rawArt = artValue;
147
+ if (typeof rawArt.path !== "string") {
148
+ throw new WorkflowSpecError(filePath, `artifact '${artName}' must have a 'path' string`);
149
+ }
150
+ if (typeof rawArt.from !== "string") {
151
+ throw new WorkflowSpecError(filePath, `artifact '${artName}' must have a 'from' string`);
152
+ }
153
+ const artifact = {
154
+ path: rawArt.path,
155
+ from: rawArt.from,
156
+ };
157
+ if (rawArt.schema !== undefined) {
158
+ if (typeof rawArt.schema !== "string") {
159
+ throw new WorkflowSpecError(filePath, `artifact '${artName}' schema must be a string`);
160
+ }
161
+ artifact.schema = rawArt.schema;
162
+ }
163
+ artifacts[artName] = artifact;
164
+ }
165
+ spec.artifacts = artifacts;
166
+ }
167
+ return spec;
168
+ }
169
+ /**
170
+ * Validate and parse a single step from raw YAML data.
171
+ * Enforces that exactly one of agent, gate, transform, or loop is set.
172
+ * Rejects steps with `workflow` (not yet supported).
173
+ * Recursively validates sub-steps within loops.
174
+ */
175
+ function validateStep(stepValue, stepName, filePath) {
176
+ if (typeof stepValue !== "object" || stepValue === null || Array.isArray(stepValue)) {
177
+ throw new WorkflowSpecError(filePath, `step '${stepName}' must be an object`);
178
+ }
179
+ const rawStep = stepValue;
180
+ // Reject workflow (not yet supported)
181
+ if ("workflow" in rawStep && rawStep.workflow !== undefined) {
182
+ throw new WorkflowSpecError(filePath, `step '${stepName}': nested workflows ('workflow') are not yet supported`);
183
+ }
184
+ // Count step types (derived from STEP_TYPES registry)
185
+ const presentTypes = STEP_TYPES.filter((t) => t.field in rawStep && rawStep[t.field] !== undefined);
186
+ const stepTypeList = STEP_TYPES.map((t) => t.field).join(", ");
187
+ if (presentTypes.length === 0) {
188
+ throw new WorkflowSpecError(filePath, `step '${stepName}' must have exactly one of: ${stepTypeList}`);
189
+ }
190
+ if (presentTypes.length > 1) {
191
+ throw new WorkflowSpecError(filePath, `step '${stepName}' must have exactly one of: ${stepTypeList}`);
192
+ }
193
+ // Individual flags for downstream parsing (derived from presentTypes check above)
194
+ const hasAgent = presentTypes[0].field === "agent";
195
+ const hasGate = presentTypes[0].field === "gate";
196
+ const hasTransform = presentTypes[0].field === "transform";
197
+ const hasLoop = presentTypes[0].field === "loop";
198
+ const hasParallel = presentTypes[0].field === "parallel";
199
+ const hasPause = presentTypes[0].field === "pause";
200
+ const hasCommand = presentTypes[0].field === "command";
201
+ const hasMonitor = presentTypes[0].field === "monitor";
202
+ const step = {};
203
+ // Common optional fields
204
+ if (rawStep.when !== undefined)
205
+ step.when = rawStep.when;
206
+ if (rawStep.timeout !== undefined)
207
+ step.timeout = rawStep.timeout;
208
+ // Retry config (optional)
209
+ if ("retry" in rawStep && rawStep.retry !== undefined) {
210
+ if (typeof rawStep.retry !== "object" || rawStep.retry === null || Array.isArray(rawStep.retry)) {
211
+ throw new WorkflowSpecError(filePath, `step '${stepName}' retry must be an object`);
212
+ }
213
+ const rawRetry = rawStep.retry;
214
+ const retry = {};
215
+ if ("maxAttempts" in rawRetry) {
216
+ if (typeof rawRetry.maxAttempts !== "number" ||
217
+ !Number.isInteger(rawRetry.maxAttempts) ||
218
+ rawRetry.maxAttempts < 1) {
219
+ throw new WorkflowSpecError(filePath, `step '${stepName}' retry.maxAttempts must be a positive integer`);
220
+ }
221
+ retry.maxAttempts = rawRetry.maxAttempts;
222
+ }
223
+ if ("onExhausted" in rawRetry) {
224
+ if (rawRetry.onExhausted !== "fail" && rawRetry.onExhausted !== "skip") {
225
+ throw new WorkflowSpecError(filePath, `step '${stepName}' retry.onExhausted must be 'fail' or 'skip'`);
226
+ }
227
+ retry.onExhausted = rawRetry.onExhausted;
228
+ }
229
+ if ("steeringMessage" in rawRetry) {
230
+ if (typeof rawRetry.steeringMessage !== "string") {
231
+ throw new WorkflowSpecError(filePath, `step '${stepName}' retry.steeringMessage must be a string`);
232
+ }
233
+ retry.steeringMessage = rawRetry.steeringMessage;
234
+ }
235
+ step.retry = retry;
236
+ }
237
+ // forEach and as (can combine with any step type)
238
+ if ("forEach" in rawStep && rawStep.forEach !== undefined) {
239
+ if (typeof rawStep.forEach !== "string") {
240
+ throw new WorkflowSpecError(filePath, `step '${stepName}' forEach must be a string`);
241
+ }
242
+ step.forEach = rawStep.forEach;
243
+ }
244
+ if ("as" in rawStep && rawStep.as !== undefined) {
245
+ if (typeof rawStep.as !== "string") {
246
+ throw new WorkflowSpecError(filePath, `step '${stepName}' as must be a string`);
247
+ }
248
+ step.as = rawStep.as;
249
+ }
250
+ // Pause step
251
+ if (hasPause) {
252
+ if (typeof rawStep.pause !== "string" && rawStep.pause !== true) {
253
+ throw new WorkflowSpecError(filePath, `step '${stepName}' pause must be a string or true`);
254
+ }
255
+ step.pause = rawStep.pause;
256
+ return step;
257
+ }
258
+ // Command step
259
+ if (hasCommand) {
260
+ if (typeof rawStep.command !== "string") {
261
+ throw new WorkflowSpecError(filePath, `step '${stepName}' command must be a string`);
262
+ }
263
+ step.command = rawStep.command;
264
+ // output spec (optional, same as agent)
265
+ if ("output" in rawStep && rawStep.output !== undefined) {
266
+ if (typeof rawStep.output !== "object" || rawStep.output === null || Array.isArray(rawStep.output)) {
267
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output must be an object`);
268
+ }
269
+ const rawOutput = rawStep.output;
270
+ const output = {};
271
+ if ("format" in rawOutput) {
272
+ output.format = rawOutput.format;
273
+ }
274
+ if ("path" in rawOutput) {
275
+ if (typeof rawOutput.path !== "string") {
276
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output.path must be a string`);
277
+ }
278
+ output.path = rawOutput.path;
279
+ }
280
+ step.output = output;
281
+ }
282
+ // input (optional, for expression resolution context)
283
+ if ("input" in rawStep && rawStep.input !== undefined) {
284
+ if (typeof rawStep.input !== "object" || rawStep.input === null || Array.isArray(rawStep.input)) {
285
+ throw new WorkflowSpecError(filePath, `step '${stepName}' input must be an object`);
286
+ }
287
+ step.input = rawStep.input;
288
+ }
289
+ return step;
290
+ }
291
+ // Monitor step
292
+ if (hasMonitor) {
293
+ if (typeof rawStep.monitor !== "string") {
294
+ throw new WorkflowSpecError(filePath, `step '${stepName}' monitor must be a string`);
295
+ }
296
+ step.monitor = rawStep.monitor;
297
+ // input (optional — maps to context collector keys)
298
+ if ("input" in rawStep && rawStep.input !== undefined) {
299
+ if (typeof rawStep.input !== "object" || rawStep.input === null || Array.isArray(rawStep.input)) {
300
+ throw new WorkflowSpecError(filePath, `step '${stepName}' input must be an object`);
301
+ }
302
+ step.input = rawStep.input;
303
+ }
304
+ // output spec (optional)
305
+ if ("output" in rawStep && rawStep.output !== undefined) {
306
+ if (typeof rawStep.output !== "object" || rawStep.output === null || Array.isArray(rawStep.output)) {
307
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output must be an object`);
308
+ }
309
+ const rawOutput = rawStep.output;
310
+ const output = {};
311
+ if ("format" in rawOutput) {
312
+ output.format = rawOutput.format;
313
+ }
314
+ if ("path" in rawOutput) {
315
+ if (typeof rawOutput.path !== "string") {
316
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output.path must be a string`);
317
+ }
318
+ output.path = rawOutput.path;
319
+ }
320
+ step.output = output;
321
+ }
322
+ return step;
323
+ }
324
+ // Agent step
325
+ if (hasAgent) {
326
+ if (typeof rawStep.agent !== "string") {
327
+ throw new WorkflowSpecError(filePath, `step '${stepName}' agent must be a string`);
328
+ }
329
+ step.agent = rawStep.agent;
330
+ // model must be a string if present
331
+ if ("model" in rawStep && rawStep.model !== undefined) {
332
+ if (typeof rawStep.model !== "string") {
333
+ throw new WorkflowSpecError(filePath, `step '${stepName}' model must be a string`);
334
+ }
335
+ step.model = rawStep.model;
336
+ }
337
+ // input must be an object if present
338
+ if ("input" in rawStep && rawStep.input !== undefined) {
339
+ if (typeof rawStep.input !== "object" || rawStep.input === null || Array.isArray(rawStep.input)) {
340
+ throw new WorkflowSpecError(filePath, `step '${stepName}' input must be an object`);
341
+ }
342
+ step.input = rawStep.input;
343
+ }
344
+ // output must be an object if present
345
+ if ("output" in rawStep && rawStep.output !== undefined) {
346
+ if (typeof rawStep.output !== "object" || rawStep.output === null || Array.isArray(rawStep.output)) {
347
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output must be an object`);
348
+ }
349
+ const rawOutput = rawStep.output;
350
+ const output = {};
351
+ if ("format" in rawOutput) {
352
+ output.format = rawOutput.format;
353
+ }
354
+ if ("schema" in rawOutput) {
355
+ if (typeof rawOutput.schema !== "string") {
356
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output.schema must be a string`);
357
+ }
358
+ output.schema = rawOutput.schema;
359
+ }
360
+ if ("path" in rawOutput) {
361
+ if (typeof rawOutput.path !== "string") {
362
+ throw new WorkflowSpecError(filePath, `step '${stepName}' output.path must be a string`);
363
+ }
364
+ output.path = rawOutput.path;
365
+ }
366
+ step.output = output;
367
+ }
368
+ }
369
+ // Gate step
370
+ if (hasGate) {
371
+ if (typeof rawStep.gate !== "object" || rawStep.gate === null || Array.isArray(rawStep.gate)) {
372
+ throw new WorkflowSpecError(filePath, `step '${stepName}' gate must be an object`);
373
+ }
374
+ const rawGate = rawStep.gate;
375
+ if (typeof rawGate.check !== "string") {
376
+ throw new WorkflowSpecError(filePath, `step '${stepName}' gate must have a 'check' string`);
377
+ }
378
+ const gate = { check: rawGate.check };
379
+ if (rawGate.onPass !== undefined)
380
+ gate.onPass = rawGate.onPass;
381
+ if (rawGate.onFail !== undefined)
382
+ gate.onFail = rawGate.onFail;
383
+ step.gate = gate;
384
+ }
385
+ // Transform step
386
+ if (hasTransform) {
387
+ if (typeof rawStep.transform !== "object" || rawStep.transform === null || Array.isArray(rawStep.transform)) {
388
+ throw new WorkflowSpecError(filePath, `step '${stepName}' transform must be an object`);
389
+ }
390
+ const rawTransform = rawStep.transform;
391
+ if (typeof rawTransform.mapping !== "object" ||
392
+ rawTransform.mapping === null ||
393
+ Array.isArray(rawTransform.mapping)) {
394
+ throw new WorkflowSpecError(filePath, `step '${stepName}' transform must have a 'mapping' object`);
395
+ }
396
+ step.transform = { mapping: rawTransform.mapping };
397
+ }
398
+ // Loop step
399
+ if (hasLoop) {
400
+ if (typeof rawStep.loop !== "object" || rawStep.loop === null || Array.isArray(rawStep.loop)) {
401
+ throw new WorkflowSpecError(filePath, `step '${stepName}' loop must be an object`);
402
+ }
403
+ const rawLoop = rawStep.loop;
404
+ // Must have maxAttempts (number or expression string) or attempts (string expression)
405
+ const maxAttemptsRaw = rawLoop.maxAttempts;
406
+ const hasMaxAttemptsNum = typeof maxAttemptsRaw === "number";
407
+ const hasMaxAttemptsExpr = typeof maxAttemptsRaw === "string";
408
+ const hasAttempts = "attempts" in rawLoop && typeof rawLoop.attempts === "string";
409
+ if (!hasMaxAttemptsNum && !hasMaxAttemptsExpr && !hasAttempts) {
410
+ throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have 'maxAttempts' (number or expression) or 'attempts' (expression)`);
411
+ }
412
+ // Must have non-empty steps
413
+ if (!("steps" in rawLoop) ||
414
+ typeof rawLoop.steps !== "object" ||
415
+ rawLoop.steps === null ||
416
+ Array.isArray(rawLoop.steps)) {
417
+ throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have a non-empty 'steps' object`);
418
+ }
419
+ const rawLoopSteps = rawLoop.steps;
420
+ if (Object.keys(rawLoopSteps).length === 0) {
421
+ throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have a non-empty 'steps' object`);
422
+ }
423
+ // Recursively validate sub-steps
424
+ const loopSteps = {};
425
+ for (const [subName, subValue] of Object.entries(rawLoopSteps)) {
426
+ loopSteps[subName] = validateStep(subValue, `${stepName}.loop.${subName}`, filePath);
427
+ }
428
+ const loop = {
429
+ maxAttempts: hasMaxAttemptsNum ? maxAttemptsRaw : 0,
430
+ steps: loopSteps,
431
+ };
432
+ // If maxAttempts is an expression string, treat it as the `attempts` field
433
+ if (hasMaxAttemptsExpr) {
434
+ loop.attempts = maxAttemptsRaw;
435
+ }
436
+ if (hasAttempts)
437
+ loop.attempts = rawLoop.attempts;
438
+ if (hasMaxAttemptsNum)
439
+ loop.maxAttempts = maxAttemptsRaw;
440
+ // onExhausted is an optional step
441
+ if ("onExhausted" in rawLoop && rawLoop.onExhausted !== undefined) {
442
+ loop.onExhausted = validateStep(rawLoop.onExhausted, `${stepName}.loop.onExhausted`, filePath);
443
+ }
444
+ step.loop = loop;
445
+ }
446
+ // Parallel step
447
+ if (hasParallel) {
448
+ if (typeof rawStep.parallel !== "object" || rawStep.parallel === null || Array.isArray(rawStep.parallel)) {
449
+ throw new WorkflowSpecError(filePath, `step '${stepName}' parallel must be a non-empty object`);
450
+ }
451
+ const rawParallel = rawStep.parallel;
452
+ if (Object.keys(rawParallel).length === 0) {
453
+ throw new WorkflowSpecError(filePath, `step '${stepName}' parallel must be a non-empty object`);
454
+ }
455
+ // Recursively validate sub-steps
456
+ const parallelSteps = {};
457
+ for (const [subName, subValue] of Object.entries(rawParallel)) {
458
+ parallelSteps[subName] = validateStep(subValue, `${stepName}.parallel.${subName}`, filePath);
459
+ }
460
+ step.parallel = parallelSteps;
461
+ }
462
+ return step;
463
+ }
464
+ //# sourceMappingURL=workflow-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-spec.js","sourceRoot":"","sources":["../src/workflow-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Workflow directory name — project-level workflow specs and run state */
2
+ export declare const WORKFLOWS_DIR = ".workflows";
3
+ //# sourceMappingURL=workflows-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows-dir.d.ts","sourceRoot":"","sources":["../src/workflows-dir.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,eAAO,MAAM,aAAa,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
1
  /** Workflow directory name — project-level workflow specs and run state */
2
2
  export const WORKFLOWS_DIR = ".workflows";
3
+ //# sourceMappingURL=workflows-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows-dir.js","sourceRoot":"","sources":["../src/workflows-dir.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,40 +1,55 @@
1
1
  {
2
- "name": "@davidorex/pi-workflows",
3
- "version": "0.2.0",
4
- "description": "Workflow orchestration extension for Pi",
5
- "license": "MIT",
6
- "author": "David Ryan",
7
- "type": "module",
8
- "keywords": ["pi-package"],
9
- "repository": {
10
- "type": "git",
11
- "url": "git+https://github.com/davidorex/pi-project-workflows.git",
12
- "directory": "packages/pi-workflows"
13
- },
14
- "homepage": "https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-workflows",
15
- "pi": {
16
- "extensions": ["./src/index.ts"]
17
- },
18
- "files": ["src/", "agents/", "schemas/", "workflows/", "templates/", "*.md"],
19
- "scripts": {
20
- "test": "node --experimental-strip-types run-tests.ts",
21
- "release": "npx changelogen --bump --release",
22
- "release:patch": "npx changelogen --bump --release --patch",
23
- "release:minor": "npx changelogen --bump --release --minor",
24
- "release:major": "npx changelogen --bump --release --major",
25
- "release:push": "git push --follow-tags"
26
- },
27
- "dependencies": {
28
- "nunjucks": "^3.2.4",
29
- "yaml": "^2.7.1"
30
- },
31
- "peerDependencies": {
32
- "@mariozechner/pi-coding-agent": "*",
33
- "@mariozechner/pi-tui": "*",
34
- "@sinclair/typebox": "*",
35
- "@davidorex/pi-project": "*"
36
- },
37
- "devDependencies": {
38
- "@types/nunjucks": "^3.2.6"
39
- }
2
+ "name": "@davidorex/pi-workflows",
3
+ "version": "0.3.0",
4
+ "description": "Workflow orchestration extension for Pi",
5
+ "license": "MIT",
6
+ "author": "David Ryan",
7
+ "type": "module",
8
+ "keywords": [
9
+ "pi-package"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/davidorex/pi-project-workflows.git",
14
+ "directory": "packages/pi-workflows"
15
+ },
16
+ "homepage": "https://github.com/davidorex/pi-project-workflows/tree/main/packages/pi-workflows",
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "pi": {
20
+ "extensions": [
21
+ "./dist/index.js"
22
+ ],
23
+ "skills": [
24
+ "./skills"
25
+ ]
26
+ },
27
+ "files": [
28
+ "dist/",
29
+ "skills/",
30
+ "agents/",
31
+ "schemas/",
32
+ "workflows/",
33
+ "templates/",
34
+ "*.md"
35
+ ],
36
+ "scripts": {
37
+ "clean": "rm -rf dist",
38
+ "build": "tsc -p tsconfig.build.json",
39
+ "prepublishOnly": "npm run clean && npm run build",
40
+ "test": "tsx --test src/*.test.ts"
41
+ },
42
+ "dependencies": {
43
+ "nunjucks": "^3.2.4",
44
+ "yaml": "^2.7.1"
45
+ },
46
+ "peerDependencies": {
47
+ "@mariozechner/pi-coding-agent": "*",
48
+ "@mariozechner/pi-tui": "*",
49
+ "@sinclair/typebox": "*",
50
+ "@davidorex/pi-project": "^0.3.0"
51
+ },
52
+ "devDependencies": {
53
+ "@types/nunjucks": "^3.2.6"
54
+ }
40
55
  }