@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.
- 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 +172 -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 +675 -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 +156 -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 +57 -0
- package/dist/step-shared.d.ts.map +1 -0
- package/dist/step-shared.js +125 -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 +164 -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 +726 -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 +438 -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 +464 -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 +84 -0
- package/skills/pi-workflows/SKILL.md +247 -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 +74 -0
- package/workflows/create-handoff.workflow.yaml +58 -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 +55 -0
- package/workflows/plan-from-requirements.workflow.yaml +51 -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 @@
|
|
|
1
|
+
{"version":3,"file":"step-monitor.js","sourceRoot":"","sources":["../src/step-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqC7C,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,GAAW;IAC/D,MAAM,UAAU,GAAG;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;KACnD,CAAC;IAEF,4DAA4D;IAC5D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,4CAA4C;IAC7C,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,eAAe,CAAC,CAAC;QAC/D,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACpD,OAAO;oBACN,IAAI,EAAE;wBACL,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,QAAQ,EAAE;4BACT,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,0BAA0B;4BACvD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BACxE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;4BACjC,cAAc,EACb,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;yBAC1F;wBACD,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;wBACrC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;qBAClF;oBACD,GAAG;iBACH,CAAC;YACH,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,8CAA8C;QAC/C,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,gFAAgF;AAEhF,SAAS,YAAY,CAAC,GAAW,EAAE,YAAoB;IACtD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,gBAAyB;IAC/D,IAAI,CAAC,gBAAgB;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,QAA0B;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAkC;IAC7D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,oEAAoE,KAAK,IAAI,CAAC;AACtF,CAAC;AAED,gFAAgF;AAEhF,SAAS,iBAAiB,CAAC,GAAW;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAEpE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtD,gCAAgC;IAChC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACR,mBAAmB;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,YAAY,CACpB,IAAiB,EACjB,GAAW,EACX,KAA8B,EAC9B,WAAiC;IAEjC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEpE,+DAA+D;IAC/D,MAAM,OAAO,GAA4B;QACxC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;QAClC,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;QAC9C,SAAS,EAAE,CAAC;QACZ,GAAG,KAAK;KACR,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACJ,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACR,gCAAgC;YAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;QACxC,CAAC;IACF,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QACxE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,YAAY,CAAC,GAAW;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1G,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5F,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,KAAkC;IACtD,OAAO,KAAK;SACV,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,WAAmB,EACnB,QAAgB,EAChB,KAA8B,EAC9B,OAA2B;IAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,sBAAsB;IACtB,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,YAAY,WAAW,aAAa;SAC3C,CAAC;IACH,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE5B,mBAAmB;IACnB,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,0CAA0C,EAAE;YAC9E,UAAU,EAAE,qBAAqB;YACjC,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAClC,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,yBAAyB;SAC7D,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,yBAAyB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG;SACtD,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,QAA0B,CAAC;IAC/B,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,QAAQ,CACxB,KAAmB,EACnB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAClG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAClD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC7B,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,WAAW,WAAW,EAAE;gBAC/B,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,SAAS,EAAE;gBAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,KAAK,EAAE,kCAAkC;aACzC,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,WAAW,EAAE;YAC/B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,SAAS,EAAE;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,KAAK,EAAE,0BAA0B,GAAG,EAAE;SACtC,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1C,+BAA+B;IAC/B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,sEAAsE;IAEtE,MAAM,MAAM,GAAG;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;IAEF,MAAM,MAAM,GAAe;QAC1B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW,WAAW,EAAE;QAC/B,MAAM,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;QAC5D,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;QAC1B,KAAK;QACL,UAAU;QACV,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpG,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7G,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,gFAAgF;AAEhF,SAAS,cAAc,CAAC,IAAY;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC5C,MAAM,UAAU,GAAG;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;KACnD,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,mBAAmB;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACJ,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,uBAAuB;QACxB,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -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":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAuBhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,KAAqB,EACrB,IAAkB,EAClB,KAAqB,EACrB,iBAAqC,EACrC,OAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;IACF,CAAC;IAED,sDAAsD;IACtD,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,gCAAgC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;YAClE,GAAG,OAAO;YACV,MAAM,EAAE,eAAe,CAAC,MAAM;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjD,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,QAAQ,UAAU,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEnD,qBAAqB;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;YACxB,MAAM;QACP,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC5D,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;YACxB,MAAM;QACP,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,YAAsC,EACtC,QAAgB,EAChB,KAAqB,EACrB,iBAAqC,EACrC,OAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,MAAM,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;IACF,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAA+B,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE;QACjF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;YAChE,GAAG,OAAO;YACV,MAAM,EAAE,kBAAkB,CAAC,MAAM;SACjC,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpD,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa,OAAO,UAAU,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAEtD,8BAA8B;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,GAAG,EAAE,CAAC;YACT,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC;YACnD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS,GAAG,IAAI,CAAC;QAC/C,CAAC;IACF,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;YAAE,SAAS,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;QAC1C,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KAClC,CAAC;AACH,CAAC"}
|
|
@@ -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
|
|
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
|
-
|
|
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"}
|