@davidorex/pi-workflows 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/CHANGELOG.md +7 -4
  2. package/README.md +12 -2
  3. package/agents/architecture-designer.agent.yaml +58 -0
  4. package/agents/architecture-inferrer.agent.yaml +60 -0
  5. package/agents/gap-identifier.agent.yaml +66 -0
  6. package/agents/handoff-writer.agent.yaml +64 -0
  7. package/agents/plan-creator.agent.yaml +63 -0
  8. package/agents/project-definer.agent.yaml +53 -0
  9. package/agents/project-inferrer.agent.yaml +63 -0
  10. package/agents/requirements-gatherer.agent.yaml +58 -0
  11. package/dist/agent-spec.d.ts +27 -0
  12. package/dist/agent-spec.d.ts.map +1 -0
  13. package/dist/agent-spec.js +112 -0
  14. package/dist/agent-spec.js.map +1 -0
  15. package/dist/checkpoint.d.ts +50 -0
  16. package/dist/checkpoint.d.ts.map +1 -0
  17. package/dist/checkpoint.js +109 -0
  18. package/dist/checkpoint.js.map +1 -0
  19. package/dist/completion.d.ts +18 -0
  20. package/dist/completion.d.ts.map +1 -0
  21. package/dist/completion.js +58 -0
  22. package/dist/completion.js.map +1 -0
  23. package/dist/dag.d.ts +56 -0
  24. package/dist/dag.d.ts.map +1 -0
  25. package/dist/dag.js +178 -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 +724 -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 +171 -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 +63 -0
  84. package/dist/step-shared.d.ts.map +1 -0
  85. package/dist/step-shared.js +136 -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 +165 -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 +738 -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 +457 -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 +476 -0
  122. package/dist/workflow-spec.js.map +1 -0
  123. package/dist/workflows-dir.d.ts +3 -0
  124. package/dist/workflows-dir.d.ts.map +1 -0
  125. package/{src/workflows-dir.ts → dist/workflows-dir.js} +1 -0
  126. package/dist/workflows-dir.js.map +1 -0
  127. package/package.json +53 -38
  128. package/schemas/decomposition-specs.schema.json +48 -48
  129. package/schemas/execution-results.schema.json +48 -48
  130. package/schemas/investigation-findings.schema.json +43 -43
  131. package/schemas/pattern-analysis.schema.json +41 -41
  132. package/schemas/phase.schema.json +48 -0
  133. package/schemas/plan-breakdown.schema.json +20 -20
  134. package/schemas/quality-analysis.schema.json +33 -33
  135. package/schemas/research-findings.schema.json +42 -42
  136. package/schemas/structure-analysis.schema.json +40 -40
  137. package/schemas/synthesis.schema.json +31 -31
  138. package/schemas/verifier-output.schema.json +94 -94
  139. package/skill-narrative.md +107 -0
  140. package/skills/pi-workflows/SKILL.md +185 -0
  141. package/skills/pi-workflows/references/bundled-resources.md +87 -0
  142. package/templates/architecture-designer/task.md +117 -0
  143. package/templates/architecture-inferrer/task.md +61 -0
  144. package/templates/gap-identifier/task.md +103 -0
  145. package/templates/handoff-writer/task.md +91 -0
  146. package/templates/plan-creator/task.md +143 -0
  147. package/templates/project-definer/task.md +67 -0
  148. package/templates/project-inferrer/task.md +56 -0
  149. package/templates/requirements-gatherer/task.md +90 -0
  150. package/workflows/analyze-existing-project.workflow.yaml +94 -0
  151. package/workflows/create-handoff.workflow.yaml +66 -0
  152. package/workflows/create-phase.workflow.yaml +1 -1
  153. package/workflows/do-gap.workflow.yaml +4 -4
  154. package/workflows/fix-audit.workflow.yaml +1 -1
  155. package/workflows/gap-to-phase.workflow.yaml +1 -1
  156. package/workflows/init-new-project.workflow.yaml +81 -0
  157. package/workflows/plan-from-requirements.workflow.yaml +59 -0
  158. package/workflows/self-implement.workflow.yaml +3 -3
  159. package/workflows/typed-analysis.workflow.yaml +4 -4
  160. package/src/agent-spec.test.ts +0 -289
  161. package/src/agent-spec.ts +0 -122
  162. package/src/block-validation.test.ts +0 -350
  163. package/src/checkpoint.test.ts +0 -237
  164. package/src/checkpoint.ts +0 -140
  165. package/src/completion.test.ts +0 -143
  166. package/src/completion.ts +0 -68
  167. package/src/dag.test.ts +0 -350
  168. package/src/dag.ts +0 -219
  169. package/src/dispatch.test.ts +0 -475
  170. package/src/dispatch.ts +0 -353
  171. package/src/expression.test.ts +0 -353
  172. package/src/expression.ts +0 -332
  173. package/src/format.test.ts +0 -80
  174. package/src/format.ts +0 -41
  175. package/src/graduated-failure.test.ts +0 -556
  176. package/src/index.test.ts +0 -114
  177. package/src/index.ts +0 -516
  178. package/src/loop.test.ts +0 -551
  179. package/src/output.test.ts +0 -213
  180. package/src/output.ts +0 -70
  181. package/src/parallel-integration.test.ts +0 -175
  182. package/src/resume.test.ts +0 -192
  183. package/src/state.test.ts +0 -192
  184. package/src/state.ts +0 -254
  185. package/src/step-agent.test.ts +0 -327
  186. package/src/step-agent.ts +0 -178
  187. package/src/step-command.test.ts +0 -330
  188. package/src/step-command.ts +0 -132
  189. package/src/step-foreach.test.ts +0 -647
  190. package/src/step-foreach.ts +0 -148
  191. package/src/step-gate.test.ts +0 -185
  192. package/src/step-gate.ts +0 -116
  193. package/src/step-loop.test.ts +0 -626
  194. package/src/step-loop.ts +0 -323
  195. package/src/step-parallel.test.ts +0 -475
  196. package/src/step-parallel.ts +0 -168
  197. package/src/step-pause.test.ts +0 -30
  198. package/src/step-shared.test.ts +0 -355
  199. package/src/step-shared.ts +0 -157
  200. package/src/step-transform.test.ts +0 -155
  201. package/src/step-transform.ts +0 -47
  202. package/src/template-integration.test.ts +0 -72
  203. package/src/template.test.ts +0 -162
  204. package/src/test-helpers.ts +0 -51
  205. package/src/tui.test.ts +0 -355
  206. package/src/tui.ts +0 -182
  207. package/src/types.ts +0 -195
  208. package/src/verifier-schema.test.ts +0 -226
  209. package/src/workflow-discovery.test.ts +0 -105
  210. package/src/workflow-discovery.ts +0 -114
  211. package/src/workflow-executor.test.ts +0 -1532
  212. package/src/workflow-executor.ts +0 -810
  213. package/src/workflow-sdk.test.ts +0 -238
  214. package/src/workflow-sdk.ts +0 -262
  215. package/src/workflow-spec.test.ts +0 -576
  216. 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,SAoZlC,CAAC;AAEF,eAAe,SAAS,CAAC"}