@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
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
* Provides three-tier template resolution (project > user > builtin)
|
|
4
4
|
* and renders agent system prompts with step input as context.
|
|
5
5
|
*/
|
|
6
|
-
import nunjucks from "nunjucks";
|
|
7
|
-
import path from "node:path";
|
|
8
|
-
import os from "node:os";
|
|
9
6
|
import fs from "node:fs";
|
|
10
|
-
|
|
7
|
+
import os from "node:os";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import nunjucks from "nunjucks";
|
|
11
10
|
/**
|
|
12
11
|
* Create a Nunjucks environment with three-tier template resolution.
|
|
13
12
|
*
|
|
@@ -21,32 +20,28 @@ import fs from "node:fs";
|
|
|
21
20
|
* @param cwd - project root directory
|
|
22
21
|
* @param builtinDir - optional path to builtin templates (defaults to templates/ relative to package root)
|
|
23
22
|
*/
|
|
24
|
-
export function createTemplateEnv(cwd
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
? new nunjucks.FileSystemLoader(searchPaths)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
throwOnUndefined: false,
|
|
44
|
-
});
|
|
23
|
+
export function createTemplateEnv(cwd, builtinDir) {
|
|
24
|
+
const projectDir = path.join(cwd, ".pi", "templates");
|
|
25
|
+
const userDir = path.join(os.homedir(), ".pi", "agent", "templates");
|
|
26
|
+
const defaultBuiltinDir = builtinDir ?? path.resolve(import.meta.dirname, "..", "templates");
|
|
27
|
+
// Nunjucks FileSystemLoader searches directories in order — first match wins.
|
|
28
|
+
// Only include directories that exist to avoid noisy warnings.
|
|
29
|
+
const searchPaths = [];
|
|
30
|
+
if (fs.existsSync(projectDir))
|
|
31
|
+
searchPaths.push(projectDir);
|
|
32
|
+
if (fs.existsSync(userDir))
|
|
33
|
+
searchPaths.push(userDir);
|
|
34
|
+
if (fs.existsSync(defaultBuiltinDir))
|
|
35
|
+
searchPaths.push(defaultBuiltinDir);
|
|
36
|
+
// If no template directories exist, use a no-op loader — plain text passes through.
|
|
37
|
+
const loader = searchPaths.length > 0 ? new nunjucks.FileSystemLoader(searchPaths) : undefined;
|
|
38
|
+
return new nunjucks.Environment(loader, {
|
|
39
|
+
autoescape: false,
|
|
40
|
+
throwOnUndefined: false,
|
|
41
|
+
});
|
|
45
42
|
}
|
|
46
|
-
|
|
47
43
|
/** Sentinel used to protect ${{ }} workflow expressions from Nunjucks rendering. */
|
|
48
44
|
const WORKFLOW_EXPR_PLACEHOLDER = "\x00__PI_WORKFLOW_EXPR__";
|
|
49
|
-
|
|
50
45
|
/**
|
|
51
46
|
* Render a template string through Nunjucks.
|
|
52
47
|
*
|
|
@@ -61,18 +56,16 @@ const WORKFLOW_EXPR_PLACEHOLDER = "\x00__PI_WORKFLOW_EXPR__";
|
|
|
61
56
|
* @param context - variables available in the template
|
|
62
57
|
* @returns rendered string
|
|
63
58
|
*/
|
|
64
|
-
export function renderTemplate(env
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
export function renderTemplate(env, templateStr, context) {
|
|
60
|
+
// Protect ${{ }} workflow expressions from Nunjucks
|
|
61
|
+
const escaped = templateStr.replace(/\$\{\{/g, WORKFLOW_EXPR_PLACEHOLDER);
|
|
62
|
+
const rendered = env.renderString(escaped, context);
|
|
63
|
+
return rendered.replace(new RegExp(escapeRegExp(WORKFLOW_EXPR_PLACEHOLDER), "g"), "${{");
|
|
69
64
|
}
|
|
70
|
-
|
|
71
65
|
/** Escape special regex characters in a string. */
|
|
72
|
-
function escapeRegExp(s
|
|
73
|
-
|
|
66
|
+
function escapeRegExp(s) {
|
|
67
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
74
68
|
}
|
|
75
|
-
|
|
76
69
|
/**
|
|
77
70
|
* Render a named template file through Nunjucks.
|
|
78
71
|
*
|
|
@@ -87,6 +80,7 @@ function escapeRegExp(s: string): string {
|
|
|
87
80
|
* @param context - variables available in the template
|
|
88
81
|
* @returns rendered string
|
|
89
82
|
*/
|
|
90
|
-
export function renderTemplateFile(env
|
|
91
|
-
|
|
83
|
+
export function renderTemplateFile(env, templateName, context) {
|
|
84
|
+
return env.render(templateName, context);
|
|
92
85
|
}
|
|
86
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,UAAmB;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAE7F,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,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;IACtD,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE1E,oFAAoF;IACpF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/F,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE;QACvC,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,KAAK;KACvB,CAAC,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAC7B,GAAyB,EACzB,WAAmB,EACnB,OAAgC;IAEhC,oDAAoD;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,mDAAmD;AACnD,SAAS,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CACjC,GAAyB,EACzB,YAAoB,EACpB,OAAgC;IAEhC,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { StepSpec, WorkflowSpec } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create a mock extension context for testing.
|
|
4
|
+
*/
|
|
5
|
+
export declare function mockCtx(cwd: string): any;
|
|
6
|
+
/**
|
|
7
|
+
* Create a mock pi API for testing.
|
|
8
|
+
*/
|
|
9
|
+
export declare function mockPi(): any;
|
|
10
|
+
/**
|
|
11
|
+
* Create a minimal WorkflowSpec for testing.
|
|
12
|
+
* A fresh temp directory is created for filePath.
|
|
13
|
+
*/
|
|
14
|
+
export declare function makeSpec(overrides: Partial<WorkflowSpec> & {
|
|
15
|
+
steps: Record<string, StepSpec>;
|
|
16
|
+
}): WorkflowSpec;
|
|
17
|
+
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAS7B,GAAG,CACR;AAED;;GAEG;AACH,wBAAgB,MAAM,IAKhB,GAAG,CACR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAAE,GAAG,YAAY,CAU7G"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared test helpers — mock factories for ctx, pi, and workflow specs.
|
|
3
|
+
*/
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
/**
|
|
8
|
+
* Create a mock extension context for testing.
|
|
9
|
+
*/
|
|
10
|
+
export function mockCtx(cwd) {
|
|
11
|
+
return {
|
|
12
|
+
cwd,
|
|
13
|
+
hasUI: false,
|
|
14
|
+
ui: {
|
|
15
|
+
setWidget: () => { },
|
|
16
|
+
notify: () => { },
|
|
17
|
+
setStatus: () => { },
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a mock pi API for testing.
|
|
23
|
+
*/
|
|
24
|
+
export function mockPi() {
|
|
25
|
+
const messages = [];
|
|
26
|
+
return {
|
|
27
|
+
sendMessage: (msg, opts) => messages.push({ msg, opts }),
|
|
28
|
+
_messages: messages,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a minimal WorkflowSpec for testing.
|
|
33
|
+
* A fresh temp directory is created for filePath.
|
|
34
|
+
*/
|
|
35
|
+
export function makeSpec(overrides) {
|
|
36
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wf-test-"));
|
|
37
|
+
return {
|
|
38
|
+
name: "test-workflow",
|
|
39
|
+
description: "Test workflow",
|
|
40
|
+
version: "1",
|
|
41
|
+
source: "project",
|
|
42
|
+
filePath: path.join(tmpDir, "test.workflow.yaml"),
|
|
43
|
+
...overrides,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IAClC,OAAO;QACN,GAAG;QACH,KAAK,EAAE,KAAK;QACZ,EAAE,EAAE;YACH,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;YACnB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;SACnB;KACM,CAAC;AACV,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM;IACrB,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,OAAO;QACN,WAAW,EAAE,CAAC,GAAQ,EAAE,IAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAClE,SAAS,EAAE,QAAQ;KACZ,CAAC;AACV,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAsE;IAC9F,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAClE,OAAO;QACN,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,SAAkB;QAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACjD,GAAG,SAAS;KACZ,CAAC;AACH,CAAC"}
|
package/dist/tui.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI progress widget for workflow execution.
|
|
3
|
+
* Shows step status, timing, cost, and parallel execution indicators.
|
|
4
|
+
*/
|
|
5
|
+
import type { Theme } from "@mariozechner/pi-coding-agent";
|
|
6
|
+
import type { Component, TUI } from "@mariozechner/pi-tui";
|
|
7
|
+
import type { ExecutionState, WorkflowSpec } from "./types.js";
|
|
8
|
+
export interface StepActivity {
|
|
9
|
+
tool: string;
|
|
10
|
+
preview: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
export interface StepOutputSummary {
|
|
14
|
+
tasks?: Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
status: string;
|
|
17
|
+
files?: string[];
|
|
18
|
+
}>;
|
|
19
|
+
testCount?: number;
|
|
20
|
+
note?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ProgressWidgetState {
|
|
23
|
+
spec: WorkflowSpec;
|
|
24
|
+
state: ExecutionState;
|
|
25
|
+
currentStep?: string;
|
|
26
|
+
startTime: number;
|
|
27
|
+
parallelSubSteps?: Record<string, import("./types.js").StepResult>;
|
|
28
|
+
resumedSteps?: number;
|
|
29
|
+
activities: Map<string, StepActivity[]>;
|
|
30
|
+
outputSummaries: Map<string, StepOutputSummary>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a widget factory for ctx.ui.setWidget().
|
|
34
|
+
* Returns a function that pi calls to get the component.
|
|
35
|
+
*
|
|
36
|
+
* The returned component renders a compact progress view:
|
|
37
|
+
* ─────────────────────────────────────
|
|
38
|
+
* ● bugfix step 2/3 1m32s
|
|
39
|
+
* ✓ diagnose 42s $0.03 12k tok
|
|
40
|
+
* ▸ fix 50s 8k tok...
|
|
41
|
+
* · verify
|
|
42
|
+
* ─────────────────────────────────────
|
|
43
|
+
*/
|
|
44
|
+
export declare function createProgressWidget(widgetState: ProgressWidgetState): (tui: TUI, theme: Theme) => Component & {
|
|
45
|
+
dispose?(): void;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,UAAU,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CACnC,WAAW,EAAE,mBAAmB,GAC9B,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,SAAS,GAAG;IAAE,OAAO,CAAC,IAAI,IAAI,CAAA;CAAE,CAuI9D"}
|
package/dist/tui.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { formatCost, formatDuration, formatTokens } from "./format.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create a widget factory for ctx.ui.setWidget().
|
|
4
|
+
* Returns a function that pi calls to get the component.
|
|
5
|
+
*
|
|
6
|
+
* The returned component renders a compact progress view:
|
|
7
|
+
* ─────────────────────────────────────
|
|
8
|
+
* ● bugfix step 2/3 1m32s
|
|
9
|
+
* ✓ diagnose 42s $0.03 12k tok
|
|
10
|
+
* ▸ fix 50s 8k tok...
|
|
11
|
+
* · verify
|
|
12
|
+
* ─────────────────────────────────────
|
|
13
|
+
*/
|
|
14
|
+
export function createProgressWidget(widgetState) {
|
|
15
|
+
return (tui, theme) => {
|
|
16
|
+
/** Pulse interval (ms) for the elapsed-time ticker. Balances update frequency vs overhead. */
|
|
17
|
+
const PULSE_INTERVAL_MS = 800;
|
|
18
|
+
let pulseOn = true;
|
|
19
|
+
const interval = setInterval(() => {
|
|
20
|
+
pulseOn = !pulseOn;
|
|
21
|
+
tui.requestRender();
|
|
22
|
+
}, PULSE_INTERVAL_MS);
|
|
23
|
+
return {
|
|
24
|
+
render(width) {
|
|
25
|
+
const lines = [];
|
|
26
|
+
const stepNames = Object.keys(widgetState.spec.steps);
|
|
27
|
+
const totalSteps = stepNames.length;
|
|
28
|
+
// Parse current steps (may be comma-separated for parallel)
|
|
29
|
+
const currentSteps = widgetState.currentStep?.split(", ") ?? [];
|
|
30
|
+
const parallelCount = currentSteps.length;
|
|
31
|
+
// Determine current step number
|
|
32
|
+
let currentStepNum = 0;
|
|
33
|
+
if (currentSteps.length > 0 && currentSteps[0]) {
|
|
34
|
+
const idx = stepNames.indexOf(currentSteps[0]);
|
|
35
|
+
currentStepNum = idx >= 0 ? idx + 1 : 0;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Count completed steps
|
|
39
|
+
currentStepNum = Object.values(widgetState.state.steps).filter((s) => s.status === "completed").length;
|
|
40
|
+
}
|
|
41
|
+
const elapsed = formatDuration(Date.now() - widgetState.startTime);
|
|
42
|
+
const workflowName = theme.bold(widgetState.spec.name);
|
|
43
|
+
const indicator = pulseOn ? theme.fg("accent", "\u25cf") : theme.fg("dim", "\u25cf");
|
|
44
|
+
const parallelTag = parallelCount > 1 ? ` [${parallelCount} parallel]` : "";
|
|
45
|
+
const headerLine = `${indicator} ${workflowName} step ${currentStepNum}/${totalSteps}${parallelTag} ${theme.fg("dim", elapsed)}`;
|
|
46
|
+
lines.push(headerLine.length > width ? headerLine.slice(0, width) : headerLine);
|
|
47
|
+
// Resumed indicator
|
|
48
|
+
if (widgetState.resumedSteps) {
|
|
49
|
+
const resumedLine = ` ${theme.fg("dim", "\u21bb")} Resumed: ${widgetState.resumedSteps} steps from prior run`;
|
|
50
|
+
lines.push(resumedLine.length > width ? resumedLine.slice(0, width) : resumedLine);
|
|
51
|
+
}
|
|
52
|
+
// Paused indicator
|
|
53
|
+
if (widgetState.state.status === "paused") {
|
|
54
|
+
const pausedLine = ` ${theme.fg("accent", "\u23f8")} Paused`;
|
|
55
|
+
lines.push(pausedLine.length > width ? pausedLine.slice(0, width) : pausedLine);
|
|
56
|
+
}
|
|
57
|
+
// Step lines
|
|
58
|
+
for (const stepName of stepNames) {
|
|
59
|
+
const stepResult = widgetState.state.steps[stepName];
|
|
60
|
+
let line;
|
|
61
|
+
if (stepResult && stepResult.status === "skipped") {
|
|
62
|
+
// Skipped step: ⊘ stepName [skipped]
|
|
63
|
+
line = ` ${theme.fg("dim", "\u2298")} ${stepName} ${theme.fg("dim", "[skipped]")}`;
|
|
64
|
+
}
|
|
65
|
+
else if (stepResult && stepResult.status === "completed") {
|
|
66
|
+
const dur = formatDuration(stepResult.durationMs);
|
|
67
|
+
const cost = formatCost(stepResult.usage.cost);
|
|
68
|
+
const tok = formatTokens(stepResult.usage.input + stepResult.usage.output);
|
|
69
|
+
// Show step type indicator for gate/transform
|
|
70
|
+
const typeTag = stepResult.agent === "gate" ? " [gate]" : stepResult.agent === "transform" ? " [transform]" : "";
|
|
71
|
+
const truncTag = stepResult.truncated ? ` ${theme.fg("warning", "[truncated]")}` : "";
|
|
72
|
+
line = ` ${theme.fg("success", "\u2713")} ${stepName}${typeTag} ${theme.fg("dim", dur)} ${theme.fg("dim", cost)} ${theme.fg("dim", tok)}${truncTag}`;
|
|
73
|
+
lines.push(line.length > width ? line.slice(0, width) : line);
|
|
74
|
+
// Render output summary sub-lines (capped at 3)
|
|
75
|
+
const summary = widgetState.outputSummaries?.get(stepName);
|
|
76
|
+
if (summary) {
|
|
77
|
+
let summaryLines = 0;
|
|
78
|
+
const MAX_SUMMARY_LINES = 3;
|
|
79
|
+
if (summary.tasks) {
|
|
80
|
+
for (const task of summary.tasks) {
|
|
81
|
+
if (summaryLines >= MAX_SUMMARY_LINES)
|
|
82
|
+
break;
|
|
83
|
+
const files = task.files?.join(", ") || "";
|
|
84
|
+
const statusIcon = task.status === "done" ? "\u2713" : task.status === "failed" ? "\u2717" : "\u00b7";
|
|
85
|
+
const taskLine = ` ${theme.fg("dim", statusIcon)} ${theme.fg("dim", task.name)}${files ? " " + theme.fg("dim", files) : ""}`;
|
|
86
|
+
lines.push(taskLine.length > width ? taskLine.slice(0, width) : taskLine);
|
|
87
|
+
summaryLines++;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (summary.testCount && summaryLines < MAX_SUMMARY_LINES) {
|
|
91
|
+
const testLine = ` ${theme.fg("dim", `${summary.testCount} tests pass`)}`;
|
|
92
|
+
lines.push(testLine.length > width ? testLine.slice(0, width) : testLine);
|
|
93
|
+
summaryLines++;
|
|
94
|
+
}
|
|
95
|
+
if (summary.note && summaryLines < MAX_SUMMARY_LINES) {
|
|
96
|
+
const noteLine = ` ${theme.fg("dim", summary.note)}`;
|
|
97
|
+
lines.push(noteLine.length > width ? noteLine.slice(0, width) : noteLine);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
continue; // skip the push below, already pushed
|
|
101
|
+
}
|
|
102
|
+
else if (stepResult && stepResult.status === "failed") {
|
|
103
|
+
const dur = formatDuration(stepResult.durationMs);
|
|
104
|
+
const errorPreview = stepResult.error || "Unknown error";
|
|
105
|
+
line = ` ${theme.fg("error", "\u2717")} ${stepName} ${theme.fg("dim", dur)} ${errorPreview}`;
|
|
106
|
+
}
|
|
107
|
+
else if (stepResult && stepResult.agent === "parallel") {
|
|
108
|
+
// Completed parallel step — show with sub-step count
|
|
109
|
+
const dur = formatDuration(stepResult.durationMs);
|
|
110
|
+
const cost = formatCost(stepResult.usage.cost);
|
|
111
|
+
const tok = formatTokens(stepResult.usage.input + stepResult.usage.output);
|
|
112
|
+
line = ` ${theme.fg("success", "\u2713")} ${stepName} [parallel] ${theme.fg("dim", dur)} ${theme.fg("dim", cost)} ${theme.fg("dim", tok)}`;
|
|
113
|
+
}
|
|
114
|
+
else if (currentSteps.includes(stepName)) {
|
|
115
|
+
const stepElapsed = formatDuration(Date.now() - widgetState.startTime);
|
|
116
|
+
line = ` ${theme.fg("accent", "\u25b8")} ${theme.fg("accent", stepName)} ${theme.fg("dim", stepElapsed + "...")}`;
|
|
117
|
+
lines.push(line.length > width ? line.slice(0, width) : line);
|
|
118
|
+
// Render most recent tool activity under running step
|
|
119
|
+
const activities = widgetState.activities?.get(stepName);
|
|
120
|
+
if (activities && activities.length > 0) {
|
|
121
|
+
const latest = activities[activities.length - 1];
|
|
122
|
+
const actLine = ` ${theme.fg("dim", latest.tool)} ${theme.fg("dim", latest.preview)}`;
|
|
123
|
+
lines.push(actLine.length > width ? actLine.slice(0, width) : actLine);
|
|
124
|
+
}
|
|
125
|
+
continue; // skip the push below, already pushed
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
line = ` ${theme.fg("dim", "\u00b7")} ${stepName}`;
|
|
129
|
+
}
|
|
130
|
+
lines.push(line.length > width ? line.slice(0, width) : line);
|
|
131
|
+
}
|
|
132
|
+
return lines;
|
|
133
|
+
},
|
|
134
|
+
invalidate() {
|
|
135
|
+
/* no cached state to clear */
|
|
136
|
+
},
|
|
137
|
+
dispose() {
|
|
138
|
+
clearInterval(interval);
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=tui.js.map
|
package/dist/tui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
export interface WorkflowSpec {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
input?: Record<string, unknown>;
|
|
6
|
+
output?: Record<string, unknown>;
|
|
7
|
+
triggerTurn?: boolean;
|
|
8
|
+
completion?: CompletionSpec;
|
|
9
|
+
steps: Record<string, StepSpec>;
|
|
10
|
+
artifacts?: Record<string, ArtifactSpec>;
|
|
11
|
+
source: "user" | "project";
|
|
12
|
+
filePath: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ArtifactSpec {
|
|
15
|
+
path: string;
|
|
16
|
+
from: string;
|
|
17
|
+
schema?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface RetryConfig {
|
|
20
|
+
maxAttempts?: number;
|
|
21
|
+
onExhausted?: "fail" | "skip";
|
|
22
|
+
steeringMessage?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface StepSpec {
|
|
25
|
+
agent?: string;
|
|
26
|
+
model?: string;
|
|
27
|
+
input?: Record<string, unknown>;
|
|
28
|
+
output?: StepOutputSpec;
|
|
29
|
+
when?: string;
|
|
30
|
+
timeout?: {
|
|
31
|
+
seconds: number;
|
|
32
|
+
};
|
|
33
|
+
retry?: RetryConfig;
|
|
34
|
+
loop?: LoopSpec;
|
|
35
|
+
gate?: GateSpec;
|
|
36
|
+
transform?: TransformSpec;
|
|
37
|
+
parallel?: Record<string, StepSpec>;
|
|
38
|
+
pause?: string | boolean;
|
|
39
|
+
monitor?: string;
|
|
40
|
+
command?: string;
|
|
41
|
+
forEach?: string;
|
|
42
|
+
as?: string;
|
|
43
|
+
workflow?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface LoopSpec {
|
|
46
|
+
maxAttempts: number;
|
|
47
|
+
attempts?: string;
|
|
48
|
+
steps: Record<string, StepSpec>;
|
|
49
|
+
onExhausted?: StepSpec;
|
|
50
|
+
}
|
|
51
|
+
export interface GateSpec {
|
|
52
|
+
check: string;
|
|
53
|
+
onPass?: "continue" | "break";
|
|
54
|
+
onFail?: "continue" | "break" | "fail";
|
|
55
|
+
}
|
|
56
|
+
export interface TransformSpec {
|
|
57
|
+
/**
|
|
58
|
+
* A mapping of output field names to ${{ }} expressions.
|
|
59
|
+
* The result is an object with each field resolved.
|
|
60
|
+
* No LLM invocation — pure data transformation.
|
|
61
|
+
*/
|
|
62
|
+
mapping: Record<string, unknown>;
|
|
63
|
+
}
|
|
64
|
+
export interface StepOutputSpec {
|
|
65
|
+
format?: "json" | "text";
|
|
66
|
+
schema?: string;
|
|
67
|
+
path?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface AgentSpec {
|
|
70
|
+
name: string;
|
|
71
|
+
description?: string;
|
|
72
|
+
role?: string;
|
|
73
|
+
systemPrompt?: string;
|
|
74
|
+
promptTemplate?: string;
|
|
75
|
+
taskTemplate?: string;
|
|
76
|
+
model?: string;
|
|
77
|
+
thinking?: string;
|
|
78
|
+
tools?: string[];
|
|
79
|
+
extensions?: string[];
|
|
80
|
+
skills?: string[];
|
|
81
|
+
output?: string;
|
|
82
|
+
inputSchema?: Record<string, unknown>;
|
|
83
|
+
outputFormat?: "json" | "text";
|
|
84
|
+
outputSchema?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface ExecutionState {
|
|
87
|
+
input: unknown;
|
|
88
|
+
steps: Record<string, StepResult>;
|
|
89
|
+
status: "running" | "completed" | "failed" | "paused";
|
|
90
|
+
loop?: LoopState;
|
|
91
|
+
workflowName?: string;
|
|
92
|
+
specVersion?: string;
|
|
93
|
+
startedAt?: string;
|
|
94
|
+
updatedAt?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface LoopState {
|
|
97
|
+
stepName: string;
|
|
98
|
+
iteration: number;
|
|
99
|
+
maxAttempts: number;
|
|
100
|
+
priorAttempts: LoopAttempt[];
|
|
101
|
+
}
|
|
102
|
+
export interface LoopAttempt {
|
|
103
|
+
iteration: number;
|
|
104
|
+
steps: Record<string, StepResult>;
|
|
105
|
+
}
|
|
106
|
+
export interface StepResult {
|
|
107
|
+
step: string;
|
|
108
|
+
agent: string;
|
|
109
|
+
status: "completed" | "failed" | "skipped";
|
|
110
|
+
output?: unknown;
|
|
111
|
+
textOutput?: string;
|
|
112
|
+
outputPath?: string;
|
|
113
|
+
sessionLog?: string;
|
|
114
|
+
usage: StepUsage;
|
|
115
|
+
durationMs: number;
|
|
116
|
+
error?: string;
|
|
117
|
+
truncated?: boolean;
|
|
118
|
+
warnings?: string[];
|
|
119
|
+
attempt?: number;
|
|
120
|
+
totalAttempts?: number;
|
|
121
|
+
priorErrors?: string[];
|
|
122
|
+
}
|
|
123
|
+
export interface StepUsage {
|
|
124
|
+
input: number;
|
|
125
|
+
output: number;
|
|
126
|
+
cacheRead: number;
|
|
127
|
+
cacheWrite: number;
|
|
128
|
+
cost: number;
|
|
129
|
+
turns: number;
|
|
130
|
+
}
|
|
131
|
+
export interface WorkflowResult {
|
|
132
|
+
workflow: string;
|
|
133
|
+
runId: string;
|
|
134
|
+
status: "completed" | "failed" | "paused";
|
|
135
|
+
steps: Record<string, StepResult>;
|
|
136
|
+
output?: unknown;
|
|
137
|
+
totalUsage: StepUsage;
|
|
138
|
+
totalDurationMs: number;
|
|
139
|
+
runDir: string;
|
|
140
|
+
artifacts?: Record<string, string>;
|
|
141
|
+
}
|
|
142
|
+
export interface CompletionSpec {
|
|
143
|
+
message?: string;
|
|
144
|
+
include?: string[];
|
|
145
|
+
template?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface ExpressionScope {
|
|
148
|
+
input: unknown;
|
|
149
|
+
steps: Record<string, StepResult>;
|
|
150
|
+
[key: string]: unknown;
|
|
151
|
+
}
|
|
152
|
+
export interface CompletionScope {
|
|
153
|
+
input: unknown;
|
|
154
|
+
steps: Record<string, StepResult>;
|
|
155
|
+
totalUsage: StepUsage;
|
|
156
|
+
totalDurationMs: number;
|
|
157
|
+
runDir: string;
|
|
158
|
+
runId: string;
|
|
159
|
+
workflow: string;
|
|
160
|
+
status: "completed" | "failed";
|
|
161
|
+
output?: unknown;
|
|
162
|
+
[key: string]: unknown;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yCAAyC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WorkflowSpec } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Discover all workflow specs from project, user, and builtin directories.
|
|
4
|
+
*
|
|
5
|
+
* Scans (highest priority first):
|
|
6
|
+
* 1. .workflows/ (project-level, source: "project")
|
|
7
|
+
* 2. ~/.pi/agent/workflows/ (user-level, source: "user")
|
|
8
|
+
* 3. <package>/workflows/ (builtin workflows, source: "user")
|
|
9
|
+
*
|
|
10
|
+
* Higher-priority specs shadow lower-priority specs with the same name.
|
|
11
|
+
*
|
|
12
|
+
* @param cwd - current working directory (project root)
|
|
13
|
+
* @param builtinDir - optional path to builtin workflows (defaults to workflows/ relative to package root)
|
|
14
|
+
* @returns Array of parsed WorkflowSpec objects. Specs that fail parsing are
|
|
15
|
+
* skipped with a warning (logged to stderr), not thrown.
|
|
16
|
+
*/
|
|
17
|
+
export declare function discoverWorkflows(cwd: string, builtinDir?: string): WorkflowSpec[];
|
|
18
|
+
/**
|
|
19
|
+
* Find a workflow by name from discovered workflows.
|
|
20
|
+
* Returns undefined if not found.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findWorkflow(name: string, cwd: string, builtinDir?: string): WorkflowSpec | undefined;
|
|
23
|
+
//# sourceMappingURL=workflow-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-discovery.d.ts","sourceRoot":"","sources":["../src/workflow-discovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CA0BlF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAGrG"}
|