@davidorex/pi-workflows 0.14.6 → 0.28.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 (102) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/README.md +12 -9
  3. package/agents/handoff-writer.agent.yaml +1 -1
  4. package/agents/requirements-gatherer.agent.yaml +1 -1
  5. package/dist/agent-spec.d.ts.map +1 -1
  6. package/dist/agent-spec.js +4 -3
  7. package/dist/agent-spec.js.map +1 -1
  8. package/dist/auth-required.d.ts +10 -0
  9. package/dist/auth-required.d.ts.map +1 -0
  10. package/dist/auth-required.js +10 -0
  11. package/dist/auth-required.js.map +1 -0
  12. package/dist/bundled-dirs.d.ts +2 -0
  13. package/dist/bundled-dirs.d.ts.map +1 -0
  14. package/dist/bundled-dirs.js +26 -0
  15. package/dist/bundled-dirs.js.map +1 -0
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +146 -14
  19. package/dist/index.js.map +1 -1
  20. package/dist/render-by-id.d.ts +62 -0
  21. package/dist/render-by-id.d.ts.map +1 -0
  22. package/dist/render-by-id.js +105 -0
  23. package/dist/render-by-id.js.map +1 -0
  24. package/dist/step-agent.js +1 -1
  25. package/dist/step-block.d.ts +5 -1
  26. package/dist/step-block.d.ts.map +1 -1
  27. package/dist/step-block.js +88 -40
  28. package/dist/step-block.js.map +1 -1
  29. package/dist/step-monitor.d.ts +1 -1
  30. package/dist/step-monitor.d.ts.map +1 -1
  31. package/dist/step-monitor.js +1 -1
  32. package/dist/step-monitor.js.map +1 -1
  33. package/dist/step-shared.d.ts +1 -1
  34. package/dist/step-shared.d.ts.map +1 -1
  35. package/dist/step-shared.js +16 -10
  36. package/dist/step-shared.js.map +1 -1
  37. package/dist/template-validation.d.ts.map +1 -1
  38. package/dist/template-validation.js +6 -6
  39. package/dist/template-validation.js.map +1 -1
  40. package/dist/template.d.ts.map +1 -1
  41. package/dist/template.js +2 -1
  42. package/dist/template.js.map +1 -1
  43. package/dist/test-helpers.d.ts +91 -0
  44. package/dist/test-helpers.d.ts.map +1 -1
  45. package/dist/test-helpers.js +185 -1
  46. package/dist/test-helpers.js.map +1 -1
  47. package/dist/tui.d.ts +3 -3
  48. package/dist/tui.d.ts.map +1 -1
  49. package/dist/tui.js +1 -1
  50. package/dist/types.d.ts +36 -1
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/workflow-discovery.d.ts.map +1 -1
  53. package/dist/workflow-discovery.js +2 -1
  54. package/dist/workflow-discovery.js.map +1 -1
  55. package/dist/workflow-executor.d.ts.map +1 -1
  56. package/dist/workflow-executor.js +23 -9
  57. package/dist/workflow-executor.js.map +1 -1
  58. package/dist/workflow-sdk.d.ts.map +1 -1
  59. package/dist/workflow-sdk.js +18 -11
  60. package/dist/workflow-sdk.js.map +1 -1
  61. package/dist/workflow-spec.js +99 -2
  62. package/dist/workflow-spec.js.map +1 -1
  63. package/package.json +17 -7
  64. package/skill-narrative.md +5 -3
  65. package/skills/pi-workflows/SKILL.md +46 -9
  66. package/skills/pi-workflows/references/bundled-resources.md +0 -36
  67. package/workflows/analyze-existing-project.workflow.yaml +1 -1
  68. package/workflows/init-new-project.workflow.yaml +1 -1
  69. package/workflows/plan-from-requirements.workflow.yaml +2 -2
  70. package/templates/analyzers/base-analyzer.md +0 -9
  71. package/templates/analyzers/patterns-task.md +0 -11
  72. package/templates/analyzers/patterns.md +0 -15
  73. package/templates/analyzers/quality-task.md +0 -11
  74. package/templates/analyzers/quality.md +0 -15
  75. package/templates/analyzers/structure-task.md +0 -17
  76. package/templates/analyzers/structure.md +0 -15
  77. package/templates/architecture-designer/task.md +0 -117
  78. package/templates/architecture-inferrer/task.md +0 -61
  79. package/templates/audit-finding-verifier/task.md +0 -59
  80. package/templates/audit-fixer/task.md +0 -67
  81. package/templates/audit-results-router/task.md +0 -37
  82. package/templates/decomposer/task.md +0 -56
  83. package/templates/explorer/system.md +0 -3
  84. package/templates/explorer/task.md +0 -9
  85. package/templates/gap-identifier/task.md +0 -103
  86. package/templates/gap-resolution-assessor/task.md +0 -48
  87. package/templates/handoff-writer/task.md +0 -101
  88. package/templates/investigator/task.md +0 -30
  89. package/templates/phase-author/task.md +0 -82
  90. package/templates/plan-creator/task.md +0 -143
  91. package/templates/plan-decomposer/task.md +0 -46
  92. package/templates/project-definer/task.md +0 -67
  93. package/templates/project-inferrer/task.md +0 -56
  94. package/templates/requirements-gatherer/task.md +0 -90
  95. package/templates/researcher/task.md +0 -26
  96. package/templates/shared/macros.md +0 -152
  97. package/templates/spec-implementer/task.md +0 -53
  98. package/templates/synthesizer/system.md +0 -3
  99. package/templates/synthesizer/task.md +0 -38
  100. package/templates/task-verifier/task.md +0 -44
  101. package/templates/task-worker/task.md +0 -52
  102. package/templates/verifier/task.md +0 -57
@@ -1,3 +1,4 @@
1
+ import nunjucks from "nunjucks";
1
2
  import type { StepSpec, WorkflowSpec } from "./types.js";
2
3
  /**
3
4
  * Create a mock extension context for testing.
@@ -7,6 +8,28 @@ export declare function mockCtx(cwd: string): any;
7
8
  * Create a mock pi API for testing.
8
9
  */
9
10
  export declare function mockPi(): any;
11
+ /**
12
+ * Register a pass-through `enforceBudget` Nunjucks global on the supplied env.
13
+ *
14
+ * Per-item macro tests construct their own minimal Nunjucks env (no project
15
+ * cwd, no schema lookup); the macros invoke `enforceBudget(text, block, path)`
16
+ * unconditionally. To keep the macros' rendering byte-identical to the
17
+ * pre-budget output, this helper registers a global that returns its first
18
+ * argument unchanged. Tests that exercise actual budget truncation register
19
+ * the real enforceBudget via `registerEnforceBudgetReal` instead.
20
+ */
21
+ export declare function registerEnforceBudgetPassthrough(env: nunjucks.Environment): void;
22
+ /**
23
+ * Register the real `enforceBudget` Nunjucks global on the supplied env,
24
+ * routing every call through the actual budget-enforcer against schemas in
25
+ * the supplied `cwd/.project/schemas/` directory. Use in budget-overflow
26
+ * tests where the macro must produce the truncation marker.
27
+ *
28
+ * The shorthand-vs-pointer expansion mirrors the production helper inside
29
+ * `compileAgent` (pi-jit-agents/src/compile.ts) so test paths can use the
30
+ * readable shorthand form (`decisions.items.context`) the macros use.
31
+ */
32
+ export declare function registerEnforceBudgetReal(env: nunjucks.Environment, cwd: string): void;
10
33
  /**
11
34
  * Create a minimal WorkflowSpec for testing.
12
35
  * A fresh temp directory is created for filePath.
@@ -14,4 +37,72 @@ export declare function mockPi(): any;
14
37
  export declare function makeSpec(overrides: Partial<WorkflowSpec> & {
15
38
  steps: Record<string, StepSpec>;
16
39
  }): WorkflowSpec;
40
+ /**
41
+ * Absolute path to this package's bundled `templates/` directory — the same
42
+ * Plan 6/7/8 per-item macros that the renderer registry's builtin tier
43
+ * resolves to. Re-exported as a constant so tests can drop the
44
+ * `path.resolve(import.meta.dirname, "..", "templates")` literal.
45
+ */
46
+ export declare const TEMPLATES_DIR: string;
47
+ /**
48
+ * In-memory mirror of the `ItemLocation` shape `buildIdIndex` produces in
49
+ * pi-project. Repeated verbatim across every render-*.test.ts before the
50
+ * Item-4 harness landed; now imported.
51
+ */
52
+ export interface FixtureItemLocation {
53
+ block: string;
54
+ arrayKey: string;
55
+ item: Record<string, unknown>;
56
+ }
57
+ /**
58
+ * Build an in-memory id index from a fixture map of block name → items array.
59
+ * Mirrors the buildIdIndex output shape used by pi-project (one entry per
60
+ * id-bearing item, keyed by `item.id`).
61
+ */
62
+ export declare function buildFixtureIdIndex(blocks: Record<string, Array<Record<string, unknown>>>): Map<string, FixtureItemLocation>;
63
+ /**
64
+ * Construct a Nunjucks env mirroring `registerCompositionGlobals` from
65
+ * pi-jit-agents/compile.ts (the production globals contract).
66
+ *
67
+ * `availableMacros` maps a block kind to the absolute path of its per-item
68
+ * macro file. Kinds NOT in the map produce the `[unrendered: <kind>/<id>]`
69
+ * fallback marker — the same shape the production global emits when the
70
+ * renderer registry has no entry for a kind.
71
+ *
72
+ * Macro-name resolution uses `CANONICAL_MACRO_NAMES` (re-exported from the
73
+ * pi-jit-agents barrel), so kinds picked up by the registry's canonical
74
+ * lookup land on the same name in tests. Unknown kinds fall back to
75
+ * `render_<kind>` with hyphens→underscores, matching the registry default.
76
+ */
77
+ export declare function makeRendererTestEnv(idIndex: Map<string, FixtureItemLocation>, availableMacros: Record<string, string>): nunjucks.Environment;
78
+ /**
79
+ * Render a per-item macro by importing it from `items/<templateBase>.md` and
80
+ * invoking it with `(item, depth)`.
81
+ *
82
+ * `kind` resolves the macro name through the registry's canonical map (with
83
+ * the `render_<kind>` fallback); `templateBase` defaults to `kind` and only
84
+ * needs to be supplied when the on-disk filename diverges from the kind name
85
+ * (e.g. kind `conformance-reference` lives in `templates/items/conformance.md`
86
+ * — its template basename is `conformance`, not `conformance-reference`).
87
+ *
88
+ * Most render-*.test.ts files used a near-identical thin wrapper; this is
89
+ * the canonical surface so per-test wrappers reduce to one call.
90
+ */
91
+ export declare function renderItemMacro(env: nunjucks.Environment, kind: string, item: unknown, depth?: number, templateBase?: string): string;
92
+ /**
93
+ * Render a whole-block macro by importing it from `shared/macros.md`.
94
+ * `wholeName` is the macro name (e.g. `render_tasks`, `render_architecture`,
95
+ * `render_conformance`). The macros take a single `data` argument; this
96
+ * helper threads it through.
97
+ */
98
+ export declare function renderWholeBlockMacro(env: nunjucks.Environment, wholeName: string, data: unknown): string;
99
+ /**
100
+ * Resolve an absolute path to a per-item macro file under
101
+ * `templates/items/<templateBase>.md`. Convenience wrapper so tests skip the
102
+ * `path.resolve(TEMPLATES_DIR, "items", "<base>.md")` literal. The
103
+ * `templateBase` is the on-disk filename basename (e.g. `conformance`,
104
+ * `tasks`) — distinct from the registry kind (`conformance-reference`,
105
+ * `tasks`) when the two names diverge.
106
+ */
107
+ export declare function itemMacroPath(templateBase: string): string;
17
108
  //# sourceMappingURL=test-helpers.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"AAcA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,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;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAIhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAoBtF;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;AAcD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAAuB,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACpD,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAWlC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACzC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,QAAQ,CAAC,WAAW,CA4CtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC9B,GAAG,EAAE,QAAQ,CAAC,WAAW,EACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,KAAK,GAAE,MAAU,EACjB,YAAY,CAAC,EAAE,MAAM,GACnB,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAGzG;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -1,9 +1,13 @@
1
1
  /**
2
- * Shared test helpers — mock factories for ctx, pi, and workflow specs.
2
+ * Shared test helpers — mock factories for ctx, pi, and workflow specs,
3
+ * plus Nunjucks-environment helpers for the per-item-macro test suites.
3
4
  */
4
5
  import fs from "node:fs";
5
6
  import os from "node:os";
6
7
  import path from "node:path";
8
+ import { schemaPath } from "@davidorex/pi-context/context-dir";
9
+ import { bundledTemplateDir, CANONICAL_MACRO_NAMES, expandFieldPathShorthand, enforceBudget as realEnforceBudget, } from "@davidorex/pi-jit-agents";
10
+ import nunjucks from "nunjucks";
7
11
  /**
8
12
  * Create a mock extension context for testing.
9
13
  */
@@ -28,6 +32,53 @@ export function mockPi() {
28
32
  _messages: messages,
29
33
  };
30
34
  }
35
+ /**
36
+ * Register a pass-through `enforceBudget` Nunjucks global on the supplied env.
37
+ *
38
+ * Per-item macro tests construct their own minimal Nunjucks env (no project
39
+ * cwd, no schema lookup); the macros invoke `enforceBudget(text, block, path)`
40
+ * unconditionally. To keep the macros' rendering byte-identical to the
41
+ * pre-budget output, this helper registers a global that returns its first
42
+ * argument unchanged. Tests that exercise actual budget truncation register
43
+ * the real enforceBudget via `registerEnforceBudgetReal` instead.
44
+ */
45
+ export function registerEnforceBudgetPassthrough(env) {
46
+ env.addGlobal("enforceBudget", (rendered) => typeof rendered === "string" ? rendered : rendered === undefined || rendered === null ? "" : String(rendered));
47
+ }
48
+ /**
49
+ * Register the real `enforceBudget` Nunjucks global on the supplied env,
50
+ * routing every call through the actual budget-enforcer against schemas in
51
+ * the supplied `cwd/.project/schemas/` directory. Use in budget-overflow
52
+ * tests where the macro must produce the truncation marker.
53
+ *
54
+ * The shorthand-vs-pointer expansion mirrors the production helper inside
55
+ * `compileAgent` (pi-jit-agents/src/compile.ts) so test paths can use the
56
+ * readable shorthand form (`decisions.items.context`) the macros use.
57
+ */
58
+ export function registerEnforceBudgetReal(env, cwd) {
59
+ env.addGlobal("enforceBudget", (rendered, blockName, fieldPathOrShorthand) => {
60
+ const text = typeof rendered === "string" ? rendered : rendered === undefined || rendered === null ? "" : String(rendered);
61
+ if (typeof blockName !== "string" || typeof fieldPathOrShorthand !== "string")
62
+ return text;
63
+ const schemaFile = schemaPath(cwd, blockName);
64
+ if (!fs.existsSync(schemaFile))
65
+ return text;
66
+ let schema;
67
+ try {
68
+ schema = JSON.parse(fs.readFileSync(schemaFile, "utf-8"));
69
+ }
70
+ catch {
71
+ return text;
72
+ }
73
+ const fp = expandFieldPathShorthand(fieldPathOrShorthand);
74
+ try {
75
+ return realEnforceBudget(text, schema, fp).output;
76
+ }
77
+ catch {
78
+ return text;
79
+ }
80
+ });
81
+ }
31
82
  /**
32
83
  * Create a minimal WorkflowSpec for testing.
33
84
  * A fresh temp directory is created for filePath.
@@ -43,4 +94,137 @@ export function makeSpec(overrides) {
43
94
  ...overrides,
44
95
  };
45
96
  }
97
+ // ─────────────────────────────────────────────────────────────────────────────
98
+ // Per-item-macro test harness (Item 4 of 2026-05-02 residual-debt patch).
99
+ //
100
+ // Every render-*.test.ts previously hand-rolled the same Nunjucks env wiring
101
+ // (ItemLocation type, buildFixtureIdIndex, makeEnv with resolve /
102
+ // render_recursive / enforceBudget globals, plus inline-by-source dispatch
103
+ // mirroring `registerCompositionGlobals` from pi-jit-agents). The harness
104
+ // below consolidates that scaffolding so each per-macro test file holds only
105
+ // the kind-specific assertions and (where relevant) a tiny per-kind
106
+ // renderItem/renderWhole closure.
107
+ // ─────────────────────────────────────────────────────────────────────────────
108
+ /**
109
+ * Absolute path to this package's bundled `templates/` directory — the same
110
+ * Plan 6/7/8 per-item macros that the renderer registry's builtin tier
111
+ * resolves to. Re-exported as a constant so tests can drop the
112
+ * `path.resolve(import.meta.dirname, "..", "templates")` literal.
113
+ */
114
+ export const TEMPLATES_DIR = bundledTemplateDir();
115
+ /**
116
+ * Build an in-memory id index from a fixture map of block name → items array.
117
+ * Mirrors the buildIdIndex output shape used by pi-project (one entry per
118
+ * id-bearing item, keyed by `item.id`).
119
+ */
120
+ export function buildFixtureIdIndex(blocks) {
121
+ const index = new Map();
122
+ for (const [block, items] of Object.entries(blocks)) {
123
+ for (const item of items) {
124
+ const id = item.id;
125
+ if (typeof id === "string") {
126
+ index.set(id, { block, arrayKey: block, item });
127
+ }
128
+ }
129
+ }
130
+ return index;
131
+ }
132
+ /**
133
+ * Construct a Nunjucks env mirroring `registerCompositionGlobals` from
134
+ * pi-jit-agents/compile.ts (the production globals contract).
135
+ *
136
+ * `availableMacros` maps a block kind to the absolute path of its per-item
137
+ * macro file. Kinds NOT in the map produce the `[unrendered: <kind>/<id>]`
138
+ * fallback marker — the same shape the production global emits when the
139
+ * renderer registry has no entry for a kind.
140
+ *
141
+ * Macro-name resolution uses `CANONICAL_MACRO_NAMES` (re-exported from the
142
+ * pi-jit-agents barrel), so kinds picked up by the registry's canonical
143
+ * lookup land on the same name in tests. Unknown kinds fall back to
144
+ * `render_<kind>` with hyphens→underscores, matching the registry default.
145
+ */
146
+ export function makeRendererTestEnv(idIndex, availableMacros) {
147
+ const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(TEMPLATES_DIR), {
148
+ autoescape: false,
149
+ throwOnUndefined: false,
150
+ });
151
+ env.addGlobal("resolve", (id) => {
152
+ if (typeof id !== "string" || id.length === 0)
153
+ return null;
154
+ return idIndex.get(id) ?? null;
155
+ });
156
+ const visited = new Set();
157
+ env.addGlobal("render_recursive", (loc, depth) => {
158
+ if (!loc || typeof loc !== "object")
159
+ return "";
160
+ const location = loc;
161
+ const itemId = location.item?.id;
162
+ const idStr = typeof itemId === "string" ? itemId : "";
163
+ const blockName = typeof location.block === "string" ? location.block : "?";
164
+ if (idStr.length > 0 && visited.has(idStr)) {
165
+ return `[cycle: ${idStr}]`;
166
+ }
167
+ const macroPath = availableMacros[blockName];
168
+ if (!macroPath) {
169
+ return `[unrendered: ${blockName}/${idStr}]`;
170
+ }
171
+ const macroName = CANONICAL_MACRO_NAMES[blockName]?.macro_name ?? `render_${blockName.replace(/-/g, "_")}`;
172
+ const depthNum = typeof depth === "number" && Number.isFinite(depth) ? depth : 0;
173
+ if (idStr.length > 0)
174
+ visited.add(idStr);
175
+ try {
176
+ const macroSource = fs.readFileSync(macroPath, "utf-8");
177
+ const inline = `${macroSource}\n{{ ${macroName}(item, depth) }}`;
178
+ return env.renderString(inline, { item: location.item, depth: depthNum });
179
+ }
180
+ catch (err) {
181
+ return `[render_error: ${blockName}/${idStr}: ${err instanceof Error ? err.message : String(err)}]`;
182
+ }
183
+ finally {
184
+ if (idStr.length > 0)
185
+ visited.delete(idStr);
186
+ }
187
+ });
188
+ registerEnforceBudgetPassthrough(env);
189
+ return env;
190
+ }
191
+ /**
192
+ * Render a per-item macro by importing it from `items/<templateBase>.md` and
193
+ * invoking it with `(item, depth)`.
194
+ *
195
+ * `kind` resolves the macro name through the registry's canonical map (with
196
+ * the `render_<kind>` fallback); `templateBase` defaults to `kind` and only
197
+ * needs to be supplied when the on-disk filename diverges from the kind name
198
+ * (e.g. kind `conformance-reference` lives in `templates/items/conformance.md`
199
+ * — its template basename is `conformance`, not `conformance-reference`).
200
+ *
201
+ * Most render-*.test.ts files used a near-identical thin wrapper; this is
202
+ * the canonical surface so per-test wrappers reduce to one call.
203
+ */
204
+ export function renderItemMacro(env, kind, item, depth = 0, templateBase) {
205
+ const macroName = CANONICAL_MACRO_NAMES[kind]?.macro_name ?? `render_${kind.replace(/-/g, "_")}`;
206
+ const tpl = `{% from "items/${templateBase ?? kind}.md" import ${macroName} %}{{ ${macroName}(item, depth) }}`;
207
+ return env.renderString(tpl, { item, depth });
208
+ }
209
+ /**
210
+ * Render a whole-block macro by importing it from `shared/macros.md`.
211
+ * `wholeName` is the macro name (e.g. `render_tasks`, `render_architecture`,
212
+ * `render_conformance`). The macros take a single `data` argument; this
213
+ * helper threads it through.
214
+ */
215
+ export function renderWholeBlockMacro(env, wholeName, data) {
216
+ const tpl = `{% from "shared/macros.md" import ${wholeName} %}{{ ${wholeName}(data) }}`;
217
+ return env.renderString(tpl, { data });
218
+ }
219
+ /**
220
+ * Resolve an absolute path to a per-item macro file under
221
+ * `templates/items/<templateBase>.md`. Convenience wrapper so tests skip the
222
+ * `path.resolve(TEMPLATES_DIR, "items", "<base>.md")` literal. The
223
+ * `templateBase` is the on-disk filename basename (e.g. `conformance`,
224
+ * `tasks`) — distinct from the registry kind (`conformance-reference`,
225
+ * `tasks`) when the two names diverge.
226
+ */
227
+ export function itemMacroPath(templateBase) {
228
+ return path.resolve(TEMPLATES_DIR, "items", `${templateBase}.md`);
229
+ }
46
230
  //# sourceMappingURL=test-helpers.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../src/test-helpers.ts"],"names":[],"mappings":"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"}
package/dist/tui.d.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  * TUI progress widget for workflow execution.
3
3
  * Shows per-step colored bars with live activity, metrics, and a progress bar header.
4
4
  */
5
- import type { Theme } from "@mariozechner/pi-coding-agent";
6
- import type { Component, TUI } from "@mariozechner/pi-tui";
5
+ import type { Theme } from "@earendil-works/pi-coding-agent";
6
+ import type { Component, TUI } from "@earendil-works/pi-tui";
7
7
  import type { ExecutionState, WorkflowSpec } from "./types.js";
8
8
  export interface StepActivity {
9
9
  tool: string;
@@ -48,7 +48,7 @@ export interface ProgressWidgetState {
48
48
  * ✓ load 2s
49
49
  * ✓ investigate 42s $0.03 12k tok
50
50
  * ▸ implement 3 turns 8k tok $0.02 50s
51
- * edit packages/pi-project/src/block-api.ts
51
+ * edit packages/pi-context/src/block-api.ts
52
52
  * · verify
53
53
  * ─────────────────────────────────────────────
54
54
  */
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,+BAA+B,CAAC;AACvE,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,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;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,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,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;IAChD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAuBD;;;;;;;;;;;;;GAaG;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,CA8K9D"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAE7D,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,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;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,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,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;IAChD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAuBD;;;;;;;;;;;;;GAaG;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,CA8K9D"}
package/dist/tui.js CHANGED
@@ -28,7 +28,7 @@ let _previousDispose;
28
28
  * ✓ load 2s
29
29
  * ✓ investigate 42s $0.03 12k tok
30
30
  * ▸ implement 3 turns 8k tok $0.02 50s
31
- * edit packages/pi-project/src/block-api.ts
31
+ * edit packages/pi-context/src/block-api.ts
32
32
  * · verify
33
33
  * ─────────────────────────────────────────────
34
34
  */
package/dist/types.d.ts CHANGED
@@ -94,7 +94,42 @@ export interface BlockUpdateSpec {
94
94
  set: Record<string, unknown>;
95
95
  };
96
96
  }
97
- export type BlockSpec = BlockReadSpec | BlockReadDirSpec | BlockWriteSpec | BlockAppendSpec | BlockUpdateSpec;
97
+ export interface BlockNestedAppendSpec {
98
+ nestedAppend: {
99
+ name: string;
100
+ key: string;
101
+ match: Record<string, unknown>;
102
+ nestedKey: string;
103
+ item: unknown;
104
+ };
105
+ }
106
+ export interface BlockUpdateNestedItemSpec {
107
+ updateNested: {
108
+ name: string;
109
+ key: string;
110
+ match: Record<string, unknown>;
111
+ nestedKey: string;
112
+ nestedMatch: Record<string, unknown>;
113
+ set: Record<string, unknown>;
114
+ };
115
+ }
116
+ export interface BlockRemoveSpec {
117
+ remove: {
118
+ name: string;
119
+ key: string;
120
+ match: Record<string, unknown>;
121
+ };
122
+ }
123
+ export interface BlockRemoveNestedSpec {
124
+ removeNested: {
125
+ name: string;
126
+ key: string;
127
+ match: Record<string, unknown>;
128
+ nestedKey: string;
129
+ nestedMatch: Record<string, unknown>;
130
+ };
131
+ }
132
+ export type BlockSpec = BlockReadSpec | BlockReadDirSpec | BlockWriteSpec | BlockAppendSpec | BlockUpdateSpec | BlockNestedAppendSpec | BlockUpdateNestedItemSpec | BlockRemoveSpec | BlockRemoveNestedSpec;
98
133
  export interface StepOutputSpec {
99
134
  format?: "json" | "text";
100
135
  schema?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
1
+ {"version":3,"file":"workflow-discovery.d.ts","sourceRoot":"","sources":["../src/workflow-discovery.ts"],"names":[],"mappings":"AAIA,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"}
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
+ import { bundledDir } from "./bundled-dirs.js";
4
5
  import { parseWorkflowSpec } from "./workflow-spec.js";
5
6
  import { WORKFLOWS_DIR } from "./workflows-dir.js";
6
7
  /**
@@ -21,7 +22,7 @@ import { WORKFLOWS_DIR } from "./workflows-dir.js";
21
22
  export function discoverWorkflows(cwd, builtinDir) {
22
23
  const projectDir = path.join(cwd, WORKFLOWS_DIR);
23
24
  const userDir = path.join(os.homedir(), ".pi", "agent", "workflows");
24
- const demoDir = builtinDir ?? path.resolve(import.meta.dirname, "..", "workflows");
25
+ const demoDir = builtinDir ?? bundledDir("workflows");
25
26
  const projectSpecs = scanDirectory(projectDir, "project");
26
27
  const userSpecs = scanDirectory(userDir, "user");
27
28
  const builtinSpecs = scanDirectory(demoDir, "user");
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-discovery.js","sourceRoot":"","sources":["../src/workflow-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,UAAmB;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAEnF,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEpD,wFAAwF;IACxF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAW,EAAE,UAAmB;IAC1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,MAA0B;IACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9G,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE3C,sCAAsC;QACtC,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACJ,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,SAAS;QACV,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,uBAAuB,CAAC,CAAC;YACnF,SAAS;QACV,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"workflow-discovery.js","sourceRoot":"","sources":["../src/workflow-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,UAAmB;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEpD,wFAAwF;IACxF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAW,EAAE,UAAmB;IAC1E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,MAA0B;IACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9G,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE3C,sCAAsC;QACtC,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACJ,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,SAAS;QACV,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,uBAAuB,CAAC,CAAC;YACnF,SAAS;QACV,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../src/workflow-executor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoBzC,OAAO,EAAkC,gBAAgB,EAAwB,MAAM,kBAAkB,CAAC;AAK1G,OAAO,KAAK,EACX,SAAS,EACT,cAAc,EAGd,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAK5B,iFAAiF;AACjF,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAOD,MAAM,WAAW,cAAc;IAC9B,gDAAgD;IAChD,GAAG,EAAE,eAAe,CAAC;IACrB,yCAAyC;IACzC,EAAE,EAAE,UAAU,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACvC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,QAAQ,CAAC;IAC7B,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IAClD,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,cAAc,CAAC;KACtB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAevE;AAsRD,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AA2QD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CA8RzB"}
1
+ {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../src/workflow-executor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoBzC,OAAO,EAAkC,gBAAgB,EAAwB,MAAM,kBAAkB,CAAC;AAK1G,OAAO,KAAK,EACX,SAAS,EACT,cAAc,EAGd,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAK5B,iFAAiF;AACjF,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAOD,MAAM,WAAW,cAAc;IAC9B,gDAAgD;IAChD,GAAG,EAAE,eAAe,CAAC;IACrB,yCAAyC;IACzC,EAAE,EAAE,UAAU,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACvC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,QAAQ,CAAC;IAC7B,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IAClD,+DAA+D;IAC/D,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,cAAc,CAAC;KACtB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAevE;AAsRD,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAmRD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CAqSzB"}
@@ -4,11 +4,11 @@
4
4
  */
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
- import { readBlock, writeBlock } from "@davidorex/pi-project/block-api";
8
- import { rollbackBlockFiles, snapshotBlockFiles, validateChangedBlocks } from "@davidorex/pi-project/block-validation";
9
- import { PROJECT_DIR } from "@davidorex/pi-project/project-dir";
10
- import { validate, validateFromFile } from "@davidorex/pi-project/schema-validator";
11
- import { truncateTail } from "@mariozechner/pi-coding-agent";
7
+ import { readBlock, writeBlock } from "@davidorex/pi-context/block-api";
8
+ import { rollbackBlockFiles, snapshotBlockFiles, validateChangedBlocks } from "@davidorex/pi-context/block-validation";
9
+ import { tryResolveContextDir } from "@davidorex/pi-context/context-dir";
10
+ import { validate, validateFromFile } from "@davidorex/pi-context/schema-validator";
11
+ import { truncateTail } from "@earendil-works/pi-coding-agent";
12
12
  import { resolveCompletion } from "./completion.js";
13
13
  import { buildPlanFromDeps, extractDependencies } from "./dag.js";
14
14
  import { dispatch } from "./dispatch.js";
@@ -408,7 +408,15 @@ async function executeStepByType(stepName, stepSpec, state, scope, options, retr
408
408
  ? "write"
409
409
  : "append" in stepSpec.block
410
410
  ? "append"
411
- : "update";
411
+ : "update" in stepSpec.block
412
+ ? "update"
413
+ : "nestedAppend" in stepSpec.block
414
+ ? "nestedAppend"
415
+ : "updateNested" in stepSpec.block
416
+ ? "updateNested"
417
+ : "remove" in stepSpec.block
418
+ ? "remove"
419
+ : "removeNested";
412
420
  widgetState.activities.set(stepName, [{ tool: "block", preview: blockOp, timestamp: Date.now() }]);
413
421
  if (ctx.hasUI)
414
422
  ctx.ui.setWidget(WIDGET_ID, createProgressWidget(widgetState));
@@ -690,6 +698,13 @@ export async function executeWorkflow(spec, input, options) {
690
698
  runId,
691
699
  runDir,
692
700
  };
701
+ // Resolve the substrate-dir prefix once for artifact block-target classification.
702
+ // Graceful on a missing .pi-context.json pointer (DEC-0015): tryResolveContextDir
703
+ // returns null → no substrate → no artifact is a block target. Only the
704
+ // missing-pointer case degrades; a malformed pointer / read failure still throws
705
+ // from within the primitive. Mirrors the absent-substrate path in step-shared.ts.
706
+ const r = tryResolveContextDir(ctx.cwd);
707
+ const substratePrefix = r === null ? null : r + path.sep;
693
708
  for (const [name, artifactSpec] of Object.entries(spec.artifacts)) {
694
709
  try {
695
710
  // Resolve the output path (may contain expressions)
@@ -710,8 +725,7 @@ export async function executeWorkflow(spec, input, options) {
710
725
  validateFromFile(schemaPath, data, `artifact '${name}'`);
711
726
  }
712
727
  // Route project block JSON targets through block-api for block-schema validation
713
- const workflowPrefix = path.join(ctx.cwd, PROJECT_DIR) + path.sep;
714
- if (absolutePath.startsWith(workflowPrefix) && absolutePath.endsWith(".json")) {
728
+ if (substratePrefix !== null && absolutePath.startsWith(substratePrefix) && absolutePath.endsWith(".json")) {
715
729
  const blockName = path.basename(absolutePath, ".json");
716
730
  writeBlock(ctx.cwd, blockName, data);
717
731
  writtenArtifacts[name] = absolutePath;
@@ -734,7 +748,7 @@ export async function executeWorkflow(spec, input, options) {
734
748
  // Non-block artifact failures remain non-fatal.
735
749
  const resolvedPath = String(resolveExpressions(artifactSpec.path, artifactScope));
736
750
  const absolutePath = path.isAbsolute(resolvedPath) ? resolvedPath : path.resolve(workflowDir, resolvedPath);
737
- const isBlockTarget = absolutePath.startsWith(path.join(ctx.cwd, PROJECT_DIR) + path.sep) && absolutePath.endsWith(".json");
751
+ const isBlockTarget = substratePrefix !== null && absolutePath.startsWith(substratePrefix) && absolutePath.endsWith(".json");
738
752
  if (isBlockTarget) {
739
753
  state.status = "failed";
740
754
  if (ctx.hasUI) {