@davidorex/pi-workflows 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/CHANGELOG.md +7 -4
  2. package/README.md +33 -7
  3. package/agents/architecture-designer.agent.yaml +58 -0
  4. package/agents/architecture-inferrer.agent.yaml +60 -0
  5. package/agents/gap-identifier.agent.yaml +66 -0
  6. package/agents/handoff-writer.agent.yaml +64 -0
  7. package/agents/plan-creator.agent.yaml +63 -0
  8. package/agents/project-definer.agent.yaml +53 -0
  9. package/agents/project-inferrer.agent.yaml +63 -0
  10. package/agents/requirements-gatherer.agent.yaml +58 -0
  11. package/dist/agent-spec.d.ts +27 -0
  12. package/dist/agent-spec.d.ts.map +1 -0
  13. package/dist/agent-spec.js +112 -0
  14. package/dist/agent-spec.js.map +1 -0
  15. package/dist/checkpoint.d.ts +50 -0
  16. package/dist/checkpoint.d.ts.map +1 -0
  17. package/dist/checkpoint.js +109 -0
  18. package/dist/checkpoint.js.map +1 -0
  19. package/dist/completion.d.ts +18 -0
  20. package/dist/completion.d.ts.map +1 -0
  21. package/dist/completion.js +58 -0
  22. package/dist/completion.js.map +1 -0
  23. package/dist/dag.d.ts +56 -0
  24. package/dist/dag.d.ts.map +1 -0
  25. package/dist/dag.js +172 -0
  26. package/dist/dag.js.map +1 -0
  27. package/dist/dispatch.d.ts +35 -0
  28. package/dist/dispatch.d.ts.map +1 -0
  29. package/dist/dispatch.js +311 -0
  30. package/dist/dispatch.js.map +1 -0
  31. package/dist/expression.d.ts +64 -0
  32. package/dist/expression.d.ts.map +1 -0
  33. package/dist/expression.js +294 -0
  34. package/dist/expression.js.map +1 -0
  35. package/dist/format.d.ts +19 -0
  36. package/dist/format.d.ts.map +1 -0
  37. package/dist/format.js +42 -0
  38. package/dist/format.js.map +1 -0
  39. package/dist/index.d.ts +8 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +675 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/output.d.ts +12 -0
  44. package/dist/output.d.ts.map +1 -0
  45. package/dist/output.js +59 -0
  46. package/dist/output.js.map +1 -0
  47. package/dist/state.d.ts +66 -0
  48. package/dist/state.d.ts.map +1 -0
  49. package/dist/state.js +227 -0
  50. package/dist/state.js.map +1 -0
  51. package/dist/step-agent.d.ts +35 -0
  52. package/dist/step-agent.d.ts.map +1 -0
  53. package/dist/step-agent.js +156 -0
  54. package/dist/step-agent.js.map +1 -0
  55. package/dist/step-command.d.ts +21 -0
  56. package/dist/step-command.d.ts.map +1 -0
  57. package/dist/step-command.js +150 -0
  58. package/dist/step-command.js.map +1 -0
  59. package/dist/step-foreach.d.ts +33 -0
  60. package/dist/step-foreach.d.ts.map +1 -0
  61. package/dist/step-foreach.js +112 -0
  62. package/dist/step-foreach.js.map +1 -0
  63. package/dist/step-gate.d.ts +18 -0
  64. package/dist/step-gate.d.ts.map +1 -0
  65. package/dist/step-gate.js +137 -0
  66. package/dist/step-gate.js.map +1 -0
  67. package/dist/step-loop.d.ts +32 -0
  68. package/dist/step-loop.d.ts.map +1 -0
  69. package/dist/step-loop.js +278 -0
  70. package/dist/step-loop.js.map +1 -0
  71. package/dist/step-monitor.d.ts +56 -0
  72. package/dist/step-monitor.d.ts.map +1 -0
  73. package/dist/step-monitor.js +317 -0
  74. package/dist/step-monitor.js.map +1 -0
  75. package/dist/step-parallel.d.ts +43 -0
  76. package/dist/step-parallel.d.ts.map +1 -0
  77. package/dist/step-parallel.js +122 -0
  78. package/dist/step-parallel.js.map +1 -0
  79. package/{src/step-pause.ts → dist/step-pause.d.ts} +3 -13
  80. package/dist/step-pause.d.ts.map +1 -0
  81. package/dist/step-pause.js +22 -0
  82. package/dist/step-pause.js.map +1 -0
  83. package/dist/step-shared.d.ts +57 -0
  84. package/dist/step-shared.d.ts.map +1 -0
  85. package/dist/step-shared.js +125 -0
  86. package/dist/step-shared.js.map +1 -0
  87. package/dist/step-transform.d.ts +11 -0
  88. package/dist/step-transform.d.ts.map +1 -0
  89. package/dist/step-transform.js +41 -0
  90. package/dist/step-transform.js.map +1 -0
  91. package/dist/template.d.ts +51 -0
  92. package/dist/template.d.ts.map +1 -0
  93. package/{src/template.ts → dist/template.js} +32 -38
  94. package/dist/template.js.map +1 -0
  95. package/dist/test-helpers.d.ts +17 -0
  96. package/dist/test-helpers.d.ts.map +1 -0
  97. package/dist/test-helpers.js +46 -0
  98. package/dist/test-helpers.js.map +1 -0
  99. package/dist/tui.d.ts +47 -0
  100. package/dist/tui.d.ts.map +1 -0
  101. package/dist/tui.js +143 -0
  102. package/dist/tui.js.map +1 -0
  103. package/dist/types.d.ts +164 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +3 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/workflow-discovery.d.ts +23 -0
  108. package/dist/workflow-discovery.d.ts.map +1 -0
  109. package/dist/workflow-discovery.js +103 -0
  110. package/dist/workflow-discovery.js.map +1 -0
  111. package/dist/workflow-executor.d.ts +50 -0
  112. package/dist/workflow-executor.d.ts.map +1 -0
  113. package/dist/workflow-executor.js +726 -0
  114. package/dist/workflow-executor.js.map +1 -0
  115. package/dist/workflow-sdk.d.ts +44 -0
  116. package/dist/workflow-sdk.d.ts.map +1 -0
  117. package/dist/workflow-sdk.js +438 -0
  118. package/dist/workflow-sdk.js.map +1 -0
  119. package/dist/workflow-spec.d.ts +33 -0
  120. package/dist/workflow-spec.d.ts.map +1 -0
  121. package/dist/workflow-spec.js +464 -0
  122. package/dist/workflow-spec.js.map +1 -0
  123. package/dist/workflows-dir.d.ts +3 -0
  124. package/dist/workflows-dir.d.ts.map +1 -0
  125. package/dist/workflows-dir.js +3 -0
  126. package/dist/workflows-dir.js.map +1 -0
  127. package/package.json +53 -38
  128. package/schemas/decomposition-specs.schema.json +48 -48
  129. package/schemas/execution-results.schema.json +48 -48
  130. package/schemas/investigation-findings.schema.json +43 -43
  131. package/schemas/pattern-analysis.schema.json +41 -41
  132. package/schemas/phase.schema.json +48 -0
  133. package/schemas/plan-breakdown.schema.json +20 -20
  134. package/schemas/quality-analysis.schema.json +33 -33
  135. package/schemas/research-findings.schema.json +42 -42
  136. package/schemas/structure-analysis.schema.json +40 -40
  137. package/schemas/synthesis.schema.json +31 -31
  138. package/schemas/verifier-output.schema.json +94 -94
  139. package/skill-narrative.md +84 -0
  140. package/skills/pi-workflows/SKILL.md +247 -0
  141. package/templates/architecture-designer/task.md +117 -0
  142. package/templates/architecture-inferrer/task.md +61 -0
  143. package/templates/gap-identifier/task.md +103 -0
  144. package/templates/handoff-writer/task.md +91 -0
  145. package/templates/plan-creator/task.md +143 -0
  146. package/templates/project-definer/task.md +67 -0
  147. package/templates/project-inferrer/task.md +56 -0
  148. package/templates/requirements-gatherer/task.md +90 -0
  149. package/workflows/analyze-existing-project.workflow.yaml +74 -0
  150. package/workflows/create-handoff.workflow.yaml +58 -0
  151. package/workflows/create-phase.workflow.yaml +1 -1
  152. package/workflows/do-gap.workflow.yaml +4 -4
  153. package/workflows/fix-audit.workflow.yaml +1 -1
  154. package/workflows/gap-to-phase.workflow.yaml +1 -1
  155. package/workflows/init-new-project.workflow.yaml +55 -0
  156. package/workflows/plan-from-requirements.workflow.yaml +51 -0
  157. package/workflows/self-implement.workflow.yaml +3 -3
  158. package/workflows/typed-analysis.workflow.yaml +4 -4
  159. package/src/agent-spec.test.ts +0 -289
  160. package/src/agent-spec.ts +0 -122
  161. package/src/block-validation.test.ts +0 -350
  162. package/src/checkpoint.test.ts +0 -237
  163. package/src/checkpoint.ts +0 -139
  164. package/src/completion.test.ts +0 -143
  165. package/src/completion.ts +0 -68
  166. package/src/dag.test.ts +0 -350
  167. package/src/dag.ts +0 -219
  168. package/src/dispatch.test.ts +0 -473
  169. package/src/dispatch.ts +0 -353
  170. package/src/expression.test.ts +0 -353
  171. package/src/expression.ts +0 -332
  172. package/src/format.test.ts +0 -80
  173. package/src/format.ts +0 -41
  174. package/src/graduated-failure.test.ts +0 -556
  175. package/src/index.test.ts +0 -114
  176. package/src/index.ts +0 -488
  177. package/src/loop.test.ts +0 -549
  178. package/src/output.test.ts +0 -213
  179. package/src/output.ts +0 -70
  180. package/src/parallel-integration.test.ts +0 -175
  181. package/src/resume.test.ts +0 -192
  182. package/src/state.test.ts +0 -192
  183. package/src/state.ts +0 -253
  184. package/src/step-agent.test.ts +0 -327
  185. package/src/step-agent.ts +0 -178
  186. package/src/step-command.test.ts +0 -330
  187. package/src/step-command.ts +0 -132
  188. package/src/step-foreach.test.ts +0 -647
  189. package/src/step-foreach.ts +0 -148
  190. package/src/step-gate.test.ts +0 -185
  191. package/src/step-gate.ts +0 -116
  192. package/src/step-loop.test.ts +0 -626
  193. package/src/step-loop.ts +0 -323
  194. package/src/step-parallel.test.ts +0 -475
  195. package/src/step-parallel.ts +0 -168
  196. package/src/step-pause.test.ts +0 -30
  197. package/src/step-shared.test.ts +0 -355
  198. package/src/step-shared.ts +0 -157
  199. package/src/step-transform.test.ts +0 -155
  200. package/src/step-transform.ts +0 -47
  201. package/src/template-integration.test.ts +0 -72
  202. package/src/template.test.ts +0 -162
  203. package/src/test-helpers.ts +0 -51
  204. package/src/tui.test.ts +0 -355
  205. package/src/tui.ts +0 -182
  206. package/src/types.ts +0 -195
  207. package/src/verifier-schema.test.ts +0 -226
  208. package/src/workflow-discovery.test.ts +0 -105
  209. package/src/workflow-discovery.ts +0 -113
  210. package/src/workflow-executor.test.ts +0 -1530
  211. package/src/workflow-executor.ts +0 -810
  212. package/src/workflow-sdk.test.ts +0 -238
  213. package/src/workflow-sdk.ts +0 -262
  214. package/src/workflow-spec.test.ts +0 -576
  215. package/src/workflow-spec.ts +0 -471
@@ -0,0 +1,294 @@
1
+ import { formatCost, formatDuration } from "./format.js";
2
+ const EXPR_PATTERN = /\$\{\{\s*(.*?)\s*\}\}/g;
3
+ /**
4
+ * Built-in filters for expressions.
5
+ * Applied via pipe syntax: ${{ totalDurationMs | duration }}
6
+ */
7
+ const FILTERS = {
8
+ duration: (v) => formatDuration(Number(v)),
9
+ currency: (v) => formatCost(Number(v)),
10
+ json: (v) => JSON.stringify(v, null, 2),
11
+ length: (v) => (Array.isArray(v) ? v.length : typeof v === "string" ? v.length : 0),
12
+ keys: (v) => (typeof v === "object" && v !== null ? Object.keys(v) : []),
13
+ filter: (v) => (Array.isArray(v) ? v.filter(Boolean) : v),
14
+ };
15
+ /** Filter names derived from the FILTERS registry — add a filter above, this updates automatically. */
16
+ export const FILTER_NAMES = Object.keys(FILTERS);
17
+ /** Known root-level expression scope keys. */
18
+ export const EXPRESSION_ROOTS = ["input", "steps"];
19
+ /**
20
+ * Error class for expression resolution failures.
21
+ * Contains the original expression and a diagnostic reason.
22
+ */
23
+ export class ExpressionError extends Error {
24
+ expression;
25
+ reason;
26
+ constructor(expression, reason) {
27
+ super(`Expression error in '\${{ ${expression} }}': ${reason}`);
28
+ this.name = "ExpressionError";
29
+ this.expression = expression;
30
+ this.reason = reason;
31
+ }
32
+ }
33
+ /**
34
+ * Resolve a single expression string (without the ${{ }} delimiters).
35
+ * E.g. "steps.diagnose.output.rootCause" walks scope.steps.diagnose.output.rootCause
36
+ *
37
+ * Supports pipe filters: "totalDurationMs | duration"
38
+ *
39
+ * Scope is Record<string, unknown> — accepts ExpressionScope, CompletionScope, or any object.
40
+ *
41
+ * Throws ExpressionError if any segment of the path is undefined or null,
42
+ * or if a filter name is unknown.
43
+ */
44
+ export function resolveExpression(expr, scope) {
45
+ // Parse optional filter: "path | filterName"
46
+ const pipeIdx = expr.indexOf("|");
47
+ let pathExpr;
48
+ let filterName;
49
+ if (pipeIdx !== -1) {
50
+ pathExpr = expr.slice(0, pipeIdx).trim();
51
+ filterName = expr.slice(pipeIdx + 1).trim();
52
+ }
53
+ else {
54
+ pathExpr = expr;
55
+ }
56
+ const segments = pathExpr.split(".");
57
+ let current = scope;
58
+ const traversed = [];
59
+ for (const segment of segments) {
60
+ // Container is undefined/null — can't traverse further. This is a broken reference.
61
+ if (current === undefined || current === null) {
62
+ const reason = buildErrorReason(segments, traversed, scope);
63
+ throw new ExpressionError(expr, reason);
64
+ }
65
+ current = current[segment];
66
+ traversed.push(segment);
67
+ // Property doesn't exist on the container — return undefined (optional field).
68
+ // But if this is the first segment (root lookup like "steps" or "input"),
69
+ // or if we're looking up a step name that hasn't executed, that's an error.
70
+ if (current === undefined) {
71
+ // Root-level miss (e.g. "typo.something") — always an error
72
+ if (traversed.length === 1) {
73
+ const reason = buildErrorReason(segments, traversed, scope);
74
+ throw new ExpressionError(expr, reason);
75
+ }
76
+ // Step reference that doesn't exist (e.g. "steps.nonexistent") — error
77
+ if (segments[0] === "steps" && traversed.length === 2) {
78
+ const reason = buildErrorReason(segments, traversed, scope);
79
+ throw new ExpressionError(expr, reason);
80
+ }
81
+ // Otherwise: optional field on an existing object — return undefined
82
+ return undefined;
83
+ }
84
+ }
85
+ // Apply filter if specified
86
+ if (filterName) {
87
+ const filterFn = FILTERS[filterName];
88
+ if (!filterFn) {
89
+ throw new ExpressionError(expr, `unknown filter '${filterName}'`);
90
+ }
91
+ current = filterFn(current);
92
+ }
93
+ return current;
94
+ }
95
+ /**
96
+ * Resolve all ${{ }} expressions in a value.
97
+ *
98
+ * - If `value` is a string containing `${{ expr }}`, resolve the expression.
99
+ * - If `value` is a string that IS entirely `${{ expr }}`, return the resolved value
100
+ * (preserving its type -- object, array, number, etc.).
101
+ * - If `value` is a string with `${{ expr }}` embedded in other text,
102
+ * stringify the resolved value and interpolate.
103
+ * - If `value` is an object, recursively resolve all values.
104
+ * - If `value` is an array, recursively resolve all elements.
105
+ * - If `value` is anything else (number, boolean, null), return as-is.
106
+ *
107
+ * Throws ExpressionError if a property path doesn't resolve.
108
+ */
109
+ export function resolveExpressions(value, scope) {
110
+ if (typeof value === "string") {
111
+ return resolveStringExpressions(value, scope);
112
+ }
113
+ if (Array.isArray(value)) {
114
+ return value.map((element) => resolveExpressions(element, scope));
115
+ }
116
+ if (value !== null && typeof value === "object") {
117
+ const result = {};
118
+ for (const [key, val] of Object.entries(value)) {
119
+ result[key] = resolveExpressions(val, scope);
120
+ }
121
+ return result;
122
+ }
123
+ // number, boolean, null, undefined — pass through
124
+ return value;
125
+ }
126
+ /**
127
+ * Resolve expressions within a string value.
128
+ * Handles whole-value expressions (type-preserving) and embedded expressions (string interpolation).
129
+ */
130
+ function resolveStringExpressions(value, scope) {
131
+ // Check if the entire string is a single whole-value expression
132
+ const wholeMatch = value.match(/^\$\{\{\s*(.*?)\s*\}\}$/);
133
+ if (wholeMatch) {
134
+ return resolveExpression(wholeMatch[1], scope);
135
+ }
136
+ // Check if there are any expressions at all
137
+ if (!value.includes("${{")) {
138
+ return value;
139
+ }
140
+ // Embedded expressions: resolve each and interpolate as strings
141
+ return value.replace(EXPR_PATTERN, (_match, expr) => {
142
+ const resolved = resolveExpression(expr, scope);
143
+ if (resolved === undefined || resolved === null)
144
+ return "";
145
+ return stringify(resolved);
146
+ });
147
+ }
148
+ /**
149
+ * Comparison operators, ordered from longest to shortest.
150
+ * Order matters: the first-match scan in evaluateCondition must try
151
+ * longer operators before shorter ones to avoid matching "!=" when
152
+ * the actual operator is "!==" (or "==" when "===" is intended).
153
+ */
154
+ const COMPARISON_OPS = ["!==", "===", "!=", "==", ">=", "<=", ">", "<"];
155
+ /**
156
+ * Parse a right-hand operand string into a typed value.
157
+ * Supports: string literals ('value' or "value"), number literals, boolean literals (true/false),
158
+ * null, undefined, or expression paths resolved against scope.
159
+ */
160
+ export function parseRightOperand(str, scope) {
161
+ // String literals (single or double quoted)
162
+ if ((str.startsWith("'") && str.endsWith("'")) || (str.startsWith('"') && str.endsWith('"'))) {
163
+ return str.slice(1, -1);
164
+ }
165
+ // Boolean literals
166
+ if (str === "true")
167
+ return true;
168
+ if (str === "false")
169
+ return false;
170
+ // null / undefined
171
+ if (str === "null")
172
+ return null;
173
+ if (str === "undefined")
174
+ return undefined;
175
+ // Number literals
176
+ const num = Number(str);
177
+ if (!Number.isNaN(num) && str !== "")
178
+ return num;
179
+ // Otherwise treat as expression path
180
+ return resolveExpression(str, scope);
181
+ }
182
+ /**
183
+ * Compare two values using a comparison operator.
184
+ * == and === both use strict equality (===).
185
+ */
186
+ export function compare(left, right, op) {
187
+ switch (op) {
188
+ case "==":
189
+ case "===":
190
+ return left === right;
191
+ case "!=":
192
+ case "!==":
193
+ return left !== right;
194
+ case ">":
195
+ return left > right;
196
+ case "<":
197
+ return left < right;
198
+ case ">=":
199
+ return left >= right;
200
+ case "<=":
201
+ return left <= right;
202
+ default:
203
+ throw new ExpressionError(op, `unknown comparison operator '${op}'`);
204
+ }
205
+ }
206
+ /**
207
+ * Evaluate a condition expression for boolean truthiness.
208
+ *
209
+ * Supports:
210
+ * - Simple path expressions: truthy/falsy evaluation of the resolved value
211
+ * - Negation with ! prefix
212
+ * - Comparison operators: ==, !=, ===, !==, >, <, >=, <=
213
+ * - Right operands: string literals, number literals, boolean literals, null, undefined, or expression paths
214
+ *
215
+ * JS truthiness rules: undefined, null, false, 0, "" are falsy; everything else is truthy.
216
+ */
217
+ export function evaluateCondition(expr, scope) {
218
+ const trimmed = expr.trim();
219
+ // Check for comparison operators (split on first occurrence)
220
+ for (const op of COMPARISON_OPS) {
221
+ const opIdx = trimmed.indexOf(op);
222
+ if (opIdx !== -1) {
223
+ const leftExpr = trimmed.slice(0, opIdx).trim();
224
+ const rightStr = trimmed.slice(opIdx + op.length).trim();
225
+ // Resolve left side
226
+ let leftValue;
227
+ if (leftExpr.startsWith("!")) {
228
+ leftValue = !resolveExpressionSafe(leftExpr.slice(1).trim(), scope);
229
+ }
230
+ else {
231
+ leftValue = resolveExpressionSafe(leftExpr, scope);
232
+ }
233
+ const rightValue = parseRightOperand(rightStr, scope);
234
+ return compare(leftValue, rightValue, op);
235
+ }
236
+ }
237
+ // No comparison operator — evaluate as truthy/falsy
238
+ if (trimmed.startsWith("!")) {
239
+ const innerExpr = trimmed.slice(1).trim();
240
+ const value = resolveExpressionSafe(innerExpr, scope);
241
+ return !value;
242
+ }
243
+ const value = resolveExpressionSafe(trimmed, scope);
244
+ return !!value;
245
+ }
246
+ /**
247
+ * Resolve an expression, returning undefined for missing optional fields
248
+ * instead of throwing. Root-level misses and missing step references still throw.
249
+ */
250
+ function resolveExpressionSafe(expr, scope) {
251
+ return resolveExpression(expr, scope);
252
+ }
253
+ /**
254
+ * Stringify a resolved value for embedding in a larger string.
255
+ * Objects and arrays use JSON.stringify; primitives use String().
256
+ */
257
+ function stringify(value) {
258
+ if (value !== null && typeof value === "object") {
259
+ return JSON.stringify(value);
260
+ }
261
+ return String(value);
262
+ }
263
+ /**
264
+ * Build a diagnostic error reason based on the path traversal state.
265
+ * Provides context about step status when the path starts with "steps.".
266
+ */
267
+ function buildErrorReason(segments, traversed, scope) {
268
+ const failedSegment = traversed[traversed.length - 1];
269
+ const parentPath = traversed.slice(0, -1).join(".");
270
+ // Special case: referencing a step that doesn't exist in scope.steps
271
+ if (segments[0] === "steps" && traversed.length === 2) {
272
+ const stepName = segments[1];
273
+ const stepsObj = scope.steps;
274
+ if (stepsObj && !(stepName in stepsObj)) {
275
+ return `step '${stepName}' has not been executed yet`;
276
+ }
277
+ }
278
+ // When the path starts with "steps.", include step status context if available
279
+ if (segments[0] === "steps" && segments.length >= 2) {
280
+ const stepName = segments[1];
281
+ const stepsObj = scope.steps;
282
+ if (stepsObj) {
283
+ const stepResult = stepsObj[stepName];
284
+ if (stepResult && parentPath) {
285
+ return `property '${failedSegment}' is undefined on ${parentPath} (step '${stepName}' status: ${stepResult.status})`;
286
+ }
287
+ }
288
+ }
289
+ if (parentPath) {
290
+ return `property '${failedSegment}' is undefined on ${parentPath}`;
291
+ }
292
+ return `property '${failedSegment}' is undefined`;
293
+ }
294
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared formatting utilities for duration and cost display.
3
+ * Used by state.ts (formatResult), expression.ts (filters), and tui.ts (widget).
4
+ */
5
+ /**
6
+ * Format duration in milliseconds to human-readable string.
7
+ * <60s -> "42s", <60m -> "1m32s", >=60m -> "1h02m"
8
+ */
9
+ export declare function formatDuration(ms: number): string;
10
+ /**
11
+ * Format cost as a dollar string.
12
+ */
13
+ export declare function formatCost(cost: number): string;
14
+ /**
15
+ * Format token count as compact human-readable string.
16
+ * <1000 -> "123 tok", <10000 -> "1.2k tok", <1000000 -> "42k tok", >=1000000 -> "1.2M tok"
17
+ */
18
+ export declare function formatTokens(count: number): string;
19
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAajD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlD"}
package/dist/format.js ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared formatting utilities for duration and cost display.
3
+ * Used by state.ts (formatResult), expression.ts (filters), and tui.ts (widget).
4
+ */
5
+ /**
6
+ * Format duration in milliseconds to human-readable string.
7
+ * <60s -> "42s", <60m -> "1m32s", >=60m -> "1h02m"
8
+ */
9
+ export function formatDuration(ms) {
10
+ const totalSeconds = Math.round(ms / 1000);
11
+ if (totalSeconds < 60) {
12
+ return `${totalSeconds}s`;
13
+ }
14
+ const minutes = Math.floor(totalSeconds / 60);
15
+ const seconds = totalSeconds % 60;
16
+ if (minutes < 60) {
17
+ return `${minutes}m${seconds.toString().padStart(2, "0")}s`;
18
+ }
19
+ const hours = Math.floor(minutes / 60);
20
+ const remainingMinutes = minutes % 60;
21
+ return `${hours}h${remainingMinutes.toString().padStart(2, "0")}m`;
22
+ }
23
+ /**
24
+ * Format cost as a dollar string.
25
+ */
26
+ export function formatCost(cost) {
27
+ return `$${cost.toFixed(2)}`;
28
+ }
29
+ /**
30
+ * Format token count as compact human-readable string.
31
+ * <1000 -> "123 tok", <10000 -> "1.2k tok", <1000000 -> "42k tok", >=1000000 -> "1.2M tok"
32
+ */
33
+ export function formatTokens(count) {
34
+ if (count < 1000)
35
+ return `${count} tok`;
36
+ if (count < 10000)
37
+ return `${(count / 1000).toFixed(1)}k tok`;
38
+ if (count < 1000000)
39
+ return `${Math.round(count / 1000)}k tok`;
40
+ return `${(count / 1000000).toFixed(1)}M tok`;
41
+ }
42
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACvB,OAAO,GAAG,YAAY,GAAG,CAAC;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QAClB,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAC7D,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;IACtC,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACzC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,MAAM,CAAC;IACxC,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9D,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/D,OAAO,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Extension entry point — registers workflow tools and the `/workflow` command
3
+ * for discovering, executing, and managing multi-step workflow runs.
4
+ */
5
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
6
+ declare const extension: (pi: ExtensionAPI) => void;
7
+ export default extension;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAGX,YAAY,EAGZ,MAAM,+BAA+B,CAAC;AAmcvC,QAAA,MAAM,SAAS,GAAI,IAAI,YAAY,SAgVlC,CAAC;AAEF,eAAe,SAAS,CAAC"}