@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.
- package/CHANGELOG.md +7 -4
- package/README.md +12 -2
- package/agents/architecture-designer.agent.yaml +58 -0
- package/agents/architecture-inferrer.agent.yaml +60 -0
- package/agents/gap-identifier.agent.yaml +66 -0
- package/agents/handoff-writer.agent.yaml +64 -0
- package/agents/plan-creator.agent.yaml +63 -0
- package/agents/project-definer.agent.yaml +53 -0
- package/agents/project-inferrer.agent.yaml +63 -0
- package/agents/requirements-gatherer.agent.yaml +58 -0
- package/dist/agent-spec.d.ts +27 -0
- package/dist/agent-spec.d.ts.map +1 -0
- package/dist/agent-spec.js +112 -0
- package/dist/agent-spec.js.map +1 -0
- package/dist/checkpoint.d.ts +50 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +109 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/completion.d.ts +18 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +58 -0
- package/dist/completion.js.map +1 -0
- package/dist/dag.d.ts +56 -0
- package/dist/dag.d.ts.map +1 -0
- package/dist/dag.js +178 -0
- package/dist/dag.js.map +1 -0
- package/dist/dispatch.d.ts +35 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +311 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/expression.d.ts +64 -0
- package/dist/expression.d.ts.map +1 -0
- package/dist/expression.js +294 -0
- package/dist/expression.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +42 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +724 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +12 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +59 -0
- package/dist/output.js.map +1 -0
- package/dist/state.d.ts +66 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +227 -0
- package/dist/state.js.map +1 -0
- package/dist/step-agent.d.ts +35 -0
- package/dist/step-agent.d.ts.map +1 -0
- package/dist/step-agent.js +171 -0
- package/dist/step-agent.js.map +1 -0
- package/dist/step-command.d.ts +21 -0
- package/dist/step-command.d.ts.map +1 -0
- package/dist/step-command.js +150 -0
- package/dist/step-command.js.map +1 -0
- package/dist/step-foreach.d.ts +33 -0
- package/dist/step-foreach.d.ts.map +1 -0
- package/dist/step-foreach.js +112 -0
- package/dist/step-foreach.js.map +1 -0
- package/dist/step-gate.d.ts +18 -0
- package/dist/step-gate.d.ts.map +1 -0
- package/dist/step-gate.js +137 -0
- package/dist/step-gate.js.map +1 -0
- package/dist/step-loop.d.ts +32 -0
- package/dist/step-loop.d.ts.map +1 -0
- package/dist/step-loop.js +278 -0
- package/dist/step-loop.js.map +1 -0
- package/dist/step-monitor.d.ts +56 -0
- package/dist/step-monitor.d.ts.map +1 -0
- package/dist/step-monitor.js +317 -0
- package/dist/step-monitor.js.map +1 -0
- package/dist/step-parallel.d.ts +43 -0
- package/dist/step-parallel.d.ts.map +1 -0
- package/dist/step-parallel.js +122 -0
- package/dist/step-parallel.js.map +1 -0
- package/{src/step-pause.ts → dist/step-pause.d.ts} +3 -13
- package/dist/step-pause.d.ts.map +1 -0
- package/dist/step-pause.js +22 -0
- package/dist/step-pause.js.map +1 -0
- package/dist/step-shared.d.ts +63 -0
- package/dist/step-shared.d.ts.map +1 -0
- package/dist/step-shared.js +136 -0
- package/dist/step-shared.js.map +1 -0
- package/dist/step-transform.d.ts +11 -0
- package/dist/step-transform.d.ts.map +1 -0
- package/dist/step-transform.js +41 -0
- package/dist/step-transform.js.map +1 -0
- package/dist/template.d.ts +51 -0
- package/dist/template.d.ts.map +1 -0
- package/{src/template.ts → dist/template.js} +32 -38
- package/dist/template.js.map +1 -0
- package/dist/test-helpers.d.ts +17 -0
- package/dist/test-helpers.d.ts.map +1 -0
- package/dist/test-helpers.js +46 -0
- package/dist/test-helpers.js.map +1 -0
- package/dist/tui.d.ts +47 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +143 -0
- package/dist/tui.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/workflow-discovery.d.ts +23 -0
- package/dist/workflow-discovery.d.ts.map +1 -0
- package/dist/workflow-discovery.js +103 -0
- package/dist/workflow-discovery.js.map +1 -0
- package/dist/workflow-executor.d.ts +50 -0
- package/dist/workflow-executor.d.ts.map +1 -0
- package/dist/workflow-executor.js +738 -0
- package/dist/workflow-executor.js.map +1 -0
- package/dist/workflow-sdk.d.ts +44 -0
- package/dist/workflow-sdk.d.ts.map +1 -0
- package/dist/workflow-sdk.js +457 -0
- package/dist/workflow-sdk.js.map +1 -0
- package/dist/workflow-spec.d.ts +33 -0
- package/dist/workflow-spec.d.ts.map +1 -0
- package/dist/workflow-spec.js +476 -0
- package/dist/workflow-spec.js.map +1 -0
- package/dist/workflows-dir.d.ts +3 -0
- package/dist/workflows-dir.d.ts.map +1 -0
- package/{src/workflows-dir.ts → dist/workflows-dir.js} +1 -0
- package/dist/workflows-dir.js.map +1 -0
- package/package.json +53 -38
- package/schemas/decomposition-specs.schema.json +48 -48
- package/schemas/execution-results.schema.json +48 -48
- package/schemas/investigation-findings.schema.json +43 -43
- package/schemas/pattern-analysis.schema.json +41 -41
- package/schemas/phase.schema.json +48 -0
- package/schemas/plan-breakdown.schema.json +20 -20
- package/schemas/quality-analysis.schema.json +33 -33
- package/schemas/research-findings.schema.json +42 -42
- package/schemas/structure-analysis.schema.json +40 -40
- package/schemas/synthesis.schema.json +31 -31
- package/schemas/verifier-output.schema.json +94 -94
- package/skill-narrative.md +107 -0
- package/skills/pi-workflows/SKILL.md +185 -0
- package/skills/pi-workflows/references/bundled-resources.md +87 -0
- package/templates/architecture-designer/task.md +117 -0
- package/templates/architecture-inferrer/task.md +61 -0
- package/templates/gap-identifier/task.md +103 -0
- package/templates/handoff-writer/task.md +91 -0
- package/templates/plan-creator/task.md +143 -0
- package/templates/project-definer/task.md +67 -0
- package/templates/project-inferrer/task.md +56 -0
- package/templates/requirements-gatherer/task.md +90 -0
- package/workflows/analyze-existing-project.workflow.yaml +94 -0
- package/workflows/create-handoff.workflow.yaml +66 -0
- package/workflows/create-phase.workflow.yaml +1 -1
- package/workflows/do-gap.workflow.yaml +4 -4
- package/workflows/fix-audit.workflow.yaml +1 -1
- package/workflows/gap-to-phase.workflow.yaml +1 -1
- package/workflows/init-new-project.workflow.yaml +81 -0
- package/workflows/plan-from-requirements.workflow.yaml +59 -0
- package/workflows/self-implement.workflow.yaml +3 -3
- package/workflows/typed-analysis.workflow.yaml +4 -4
- package/src/agent-spec.test.ts +0 -289
- package/src/agent-spec.ts +0 -122
- package/src/block-validation.test.ts +0 -350
- package/src/checkpoint.test.ts +0 -237
- package/src/checkpoint.ts +0 -140
- package/src/completion.test.ts +0 -143
- package/src/completion.ts +0 -68
- package/src/dag.test.ts +0 -350
- package/src/dag.ts +0 -219
- package/src/dispatch.test.ts +0 -475
- package/src/dispatch.ts +0 -353
- package/src/expression.test.ts +0 -353
- package/src/expression.ts +0 -332
- package/src/format.test.ts +0 -80
- package/src/format.ts +0 -41
- package/src/graduated-failure.test.ts +0 -556
- package/src/index.test.ts +0 -114
- package/src/index.ts +0 -516
- package/src/loop.test.ts +0 -551
- package/src/output.test.ts +0 -213
- package/src/output.ts +0 -70
- package/src/parallel-integration.test.ts +0 -175
- package/src/resume.test.ts +0 -192
- package/src/state.test.ts +0 -192
- package/src/state.ts +0 -254
- package/src/step-agent.test.ts +0 -327
- package/src/step-agent.ts +0 -178
- package/src/step-command.test.ts +0 -330
- package/src/step-command.ts +0 -132
- package/src/step-foreach.test.ts +0 -647
- package/src/step-foreach.ts +0 -148
- package/src/step-gate.test.ts +0 -185
- package/src/step-gate.ts +0 -116
- package/src/step-loop.test.ts +0 -626
- package/src/step-loop.ts +0 -323
- package/src/step-parallel.test.ts +0 -475
- package/src/step-parallel.ts +0 -168
- package/src/step-pause.test.ts +0 -30
- package/src/step-shared.test.ts +0 -355
- package/src/step-shared.ts +0 -157
- package/src/step-transform.test.ts +0 -155
- package/src/step-transform.ts +0 -47
- package/src/template-integration.test.ts +0 -72
- package/src/template.test.ts +0 -162
- package/src/test-helpers.ts +0 -51
- package/src/tui.test.ts +0 -355
- package/src/tui.ts +0 -182
- package/src/types.ts +0 -195
- package/src/verifier-schema.test.ts +0 -226
- package/src/workflow-discovery.test.ts +0 -105
- package/src/workflow-discovery.ts +0 -114
- package/src/workflow-executor.test.ts +0 -1532
- package/src/workflow-executor.ts +0 -810
- package/src/workflow-sdk.test.ts +0 -238
- package/src/workflow-sdk.ts +0 -262
- package/src/workflow-spec.test.ts +0 -576
- package/src/workflow-spec.ts +0 -471
|
@@ -0,0 +1,476 @@
|
|
|
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
|
+
// context must be an array of strings if present (agent steps only)
|
|
345
|
+
if ("context" in rawStep && rawStep.context !== undefined) {
|
|
346
|
+
if (!Array.isArray(rawStep.context)) {
|
|
347
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' context must be an array of step names`);
|
|
348
|
+
}
|
|
349
|
+
for (const ctxName of rawStep.context) {
|
|
350
|
+
if (typeof ctxName !== "string") {
|
|
351
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' context must contain only strings`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
step.context = rawStep.context;
|
|
355
|
+
}
|
|
356
|
+
// output must be an object if present
|
|
357
|
+
if ("output" in rawStep && rawStep.output !== undefined) {
|
|
358
|
+
if (typeof rawStep.output !== "object" || rawStep.output === null || Array.isArray(rawStep.output)) {
|
|
359
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' output must be an object`);
|
|
360
|
+
}
|
|
361
|
+
const rawOutput = rawStep.output;
|
|
362
|
+
const output = {};
|
|
363
|
+
if ("format" in rawOutput) {
|
|
364
|
+
output.format = rawOutput.format;
|
|
365
|
+
}
|
|
366
|
+
if ("schema" in rawOutput) {
|
|
367
|
+
if (typeof rawOutput.schema !== "string") {
|
|
368
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' output.schema must be a string`);
|
|
369
|
+
}
|
|
370
|
+
output.schema = rawOutput.schema;
|
|
371
|
+
}
|
|
372
|
+
if ("path" in rawOutput) {
|
|
373
|
+
if (typeof rawOutput.path !== "string") {
|
|
374
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' output.path must be a string`);
|
|
375
|
+
}
|
|
376
|
+
output.path = rawOutput.path;
|
|
377
|
+
}
|
|
378
|
+
step.output = output;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Gate step
|
|
382
|
+
if (hasGate) {
|
|
383
|
+
if (typeof rawStep.gate !== "object" || rawStep.gate === null || Array.isArray(rawStep.gate)) {
|
|
384
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' gate must be an object`);
|
|
385
|
+
}
|
|
386
|
+
const rawGate = rawStep.gate;
|
|
387
|
+
if (typeof rawGate.check !== "string") {
|
|
388
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' gate must have a 'check' string`);
|
|
389
|
+
}
|
|
390
|
+
const gate = { check: rawGate.check };
|
|
391
|
+
if (rawGate.onPass !== undefined)
|
|
392
|
+
gate.onPass = rawGate.onPass;
|
|
393
|
+
if (rawGate.onFail !== undefined)
|
|
394
|
+
gate.onFail = rawGate.onFail;
|
|
395
|
+
step.gate = gate;
|
|
396
|
+
}
|
|
397
|
+
// Transform step
|
|
398
|
+
if (hasTransform) {
|
|
399
|
+
if (typeof rawStep.transform !== "object" || rawStep.transform === null || Array.isArray(rawStep.transform)) {
|
|
400
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' transform must be an object`);
|
|
401
|
+
}
|
|
402
|
+
const rawTransform = rawStep.transform;
|
|
403
|
+
if (typeof rawTransform.mapping !== "object" ||
|
|
404
|
+
rawTransform.mapping === null ||
|
|
405
|
+
Array.isArray(rawTransform.mapping)) {
|
|
406
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' transform must have a 'mapping' object`);
|
|
407
|
+
}
|
|
408
|
+
step.transform = { mapping: rawTransform.mapping };
|
|
409
|
+
}
|
|
410
|
+
// Loop step
|
|
411
|
+
if (hasLoop) {
|
|
412
|
+
if (typeof rawStep.loop !== "object" || rawStep.loop === null || Array.isArray(rawStep.loop)) {
|
|
413
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' loop must be an object`);
|
|
414
|
+
}
|
|
415
|
+
const rawLoop = rawStep.loop;
|
|
416
|
+
// Must have maxAttempts (number or expression string) or attempts (string expression)
|
|
417
|
+
const maxAttemptsRaw = rawLoop.maxAttempts;
|
|
418
|
+
const hasMaxAttemptsNum = typeof maxAttemptsRaw === "number";
|
|
419
|
+
const hasMaxAttemptsExpr = typeof maxAttemptsRaw === "string";
|
|
420
|
+
const hasAttempts = "attempts" in rawLoop && typeof rawLoop.attempts === "string";
|
|
421
|
+
if (!hasMaxAttemptsNum && !hasMaxAttemptsExpr && !hasAttempts) {
|
|
422
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have 'maxAttempts' (number or expression) or 'attempts' (expression)`);
|
|
423
|
+
}
|
|
424
|
+
// Must have non-empty steps
|
|
425
|
+
if (!("steps" in rawLoop) ||
|
|
426
|
+
typeof rawLoop.steps !== "object" ||
|
|
427
|
+
rawLoop.steps === null ||
|
|
428
|
+
Array.isArray(rawLoop.steps)) {
|
|
429
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have a non-empty 'steps' object`);
|
|
430
|
+
}
|
|
431
|
+
const rawLoopSteps = rawLoop.steps;
|
|
432
|
+
if (Object.keys(rawLoopSteps).length === 0) {
|
|
433
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' loop must have a non-empty 'steps' object`);
|
|
434
|
+
}
|
|
435
|
+
// Recursively validate sub-steps
|
|
436
|
+
const loopSteps = {};
|
|
437
|
+
for (const [subName, subValue] of Object.entries(rawLoopSteps)) {
|
|
438
|
+
loopSteps[subName] = validateStep(subValue, `${stepName}.loop.${subName}`, filePath);
|
|
439
|
+
}
|
|
440
|
+
const loop = {
|
|
441
|
+
maxAttempts: hasMaxAttemptsNum ? maxAttemptsRaw : 0,
|
|
442
|
+
steps: loopSteps,
|
|
443
|
+
};
|
|
444
|
+
// If maxAttempts is an expression string, treat it as the `attempts` field
|
|
445
|
+
if (hasMaxAttemptsExpr) {
|
|
446
|
+
loop.attempts = maxAttemptsRaw;
|
|
447
|
+
}
|
|
448
|
+
if (hasAttempts)
|
|
449
|
+
loop.attempts = rawLoop.attempts;
|
|
450
|
+
if (hasMaxAttemptsNum)
|
|
451
|
+
loop.maxAttempts = maxAttemptsRaw;
|
|
452
|
+
// onExhausted is an optional step
|
|
453
|
+
if ("onExhausted" in rawLoop && rawLoop.onExhausted !== undefined) {
|
|
454
|
+
loop.onExhausted = validateStep(rawLoop.onExhausted, `${stepName}.loop.onExhausted`, filePath);
|
|
455
|
+
}
|
|
456
|
+
step.loop = loop;
|
|
457
|
+
}
|
|
458
|
+
// Parallel step
|
|
459
|
+
if (hasParallel) {
|
|
460
|
+
if (typeof rawStep.parallel !== "object" || rawStep.parallel === null || Array.isArray(rawStep.parallel)) {
|
|
461
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' parallel must be a non-empty object`);
|
|
462
|
+
}
|
|
463
|
+
const rawParallel = rawStep.parallel;
|
|
464
|
+
if (Object.keys(rawParallel).length === 0) {
|
|
465
|
+
throw new WorkflowSpecError(filePath, `step '${stepName}' parallel must be a non-empty object`);
|
|
466
|
+
}
|
|
467
|
+
// Recursively validate sub-steps
|
|
468
|
+
const parallelSteps = {};
|
|
469
|
+
for (const [subName, subValue] of Object.entries(rawParallel)) {
|
|
470
|
+
parallelSteps[subName] = validateStep(subValue, `${stepName}.parallel.${subName}`, filePath);
|
|
471
|
+
}
|
|
472
|
+
step.parallel = parallelSteps;
|
|
473
|
+
}
|
|
474
|
+
return step;
|
|
475
|
+
}
|
|
476
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"workflows-dir.d.ts","sourceRoot":"","sources":["../src/workflows-dir.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,eAAO,MAAM,aAAa,eAAe,CAAC"}
|
|
@@ -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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
2
|
+
"name": "@davidorex/pi-workflows",
|
|
3
|
+
"version": "0.3.1",
|
|
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.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/nunjucks": "^3.2.6"
|
|
54
|
+
}
|
|
40
55
|
}
|