@zigrivers/scaffold 2.45.0 → 3.0.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 (35) hide show
  1. package/README.md +23 -6
  2. package/dist/cli/commands/build.d.ts +8 -1
  3. package/dist/cli/commands/build.d.ts.map +1 -1
  4. package/dist/cli/commands/build.js +166 -145
  5. package/dist/cli/commands/build.js.map +1 -1
  6. package/dist/cli/commands/build.test.js +111 -26
  7. package/dist/cli/commands/build.test.js.map +1 -1
  8. package/dist/cli/commands/init.d.ts.map +1 -1
  9. package/dist/cli/commands/init.js +20 -1
  10. package/dist/cli/commands/init.js.map +1 -1
  11. package/dist/cli/commands/init.test.js +39 -4
  12. package/dist/cli/commands/init.test.js.map +1 -1
  13. package/dist/core/adapters/claude-code.js +1 -1
  14. package/dist/core/adapters/claude-code.js.map +1 -1
  15. package/dist/core/adapters/claude-code.test.js +2 -2
  16. package/dist/core/adapters/claude-code.test.js.map +1 -1
  17. package/dist/core/adapters/codex.js +1 -1
  18. package/dist/core/adapters/codex.js.map +1 -1
  19. package/dist/core/adapters/codex.test.js +3 -3
  20. package/dist/core/adapters/codex.test.js.map +1 -1
  21. package/dist/core/adapters/universal.js +1 -1
  22. package/dist/core/adapters/universal.js.map +1 -1
  23. package/dist/core/adapters/universal.test.js +3 -3
  24. package/dist/core/adapters/universal.test.js.map +1 -1
  25. package/dist/e2e/init.test.js +24 -0
  26. package/dist/e2e/init.test.js.map +1 -1
  27. package/dist/project/gitignore.d.ts +9 -0
  28. package/dist/project/gitignore.d.ts.map +1 -0
  29. package/dist/project/gitignore.js +103 -0
  30. package/dist/project/gitignore.js.map +1 -0
  31. package/dist/project/gitignore.test.d.ts +2 -0
  32. package/dist/project/gitignore.test.d.ts.map +1 -0
  33. package/dist/project/gitignore.test.js +96 -0
  34. package/dist/project/gitignore.test.js.map +1 -0
  35. package/package.json +1 -1
package/README.md CHANGED
@@ -164,7 +164,7 @@ Or: `/plugin marketplace update zigrivers-scaffold`
164
164
 
165
165
  ### Existing projects
166
166
 
167
- After upgrading the CLI, existing projects migrate automatically. Run `scaffold status` in your project directory — the state manager detects and renames old step keys, removes retired steps, normalizes artifact paths, and persists the changes atomically. No manual editing of `.scaffold/state.json` is needed.
167
+ After upgrading the CLI, existing projects still get automatic state migrations. Run `scaffold status` in your project directory — the state manager detects and renames old step keys, removes retired steps, normalizes artifact paths, and persists the changes atomically. No manual editing of `.scaffold/state.json` is needed.
168
168
 
169
169
  **Step migrations handled automatically:**
170
170
  - `add-playwright` / `add-maestro` → `add-e2e-testing`
@@ -176,6 +176,23 @@ After upgrading the CLI, existing projects migrate automatically. Run `scaffold
176
176
 
177
177
  The PRD is always created as `docs/plan.md`. If you have a legacy `docs/prd.md` from an older version, the context gatherer resolves aliased paths so downstream steps find your PRD regardless.
178
178
 
179
+ ### Generated output layout
180
+
181
+ Fresh `scaffold init` now creates committed project state under `.scaffold/` and auto-runs `scaffold build`, which writes inspectable adapter artifacts under `.scaffold/generated/`. Scaffold also manages a dedicated block in `.gitignore` so generated output, `.scaffold/lock.json`, and Scaffold temp files stay out of version control by default.
182
+
183
+ The canonical execution entrypoints are still `scaffold run <step>` and the installed Scaffold plugin. Files under `.scaffold/generated/` are internal build artifacts, not root-level project files.
184
+
185
+ ### Migration for older projects
186
+
187
+ This release is a clean breaking change for generated adapter output. To migrate an existing project:
188
+
189
+ 1. Upgrade Scaffold.
190
+ 2. Remove old root-level generated Scaffold output if present: `commands/`, `prompts/`, `codex-prompts/`, and root `AGENTS.md` only if it was Scaffold-generated.
191
+ 3. Run `scaffold build`.
192
+ 4. Review the Scaffold-managed block in `.gitignore`.
193
+ 5. Commit `.gitignore` plus the intended committed `.scaffold/` state files (`config.yml`, `state.json`, `decisions.jsonl`, `instructions/`).
194
+ 6. Do not commit `.scaffold/generated/` or `.scaffold/lock.json`.
195
+
179
196
  ## Quick Start
180
197
 
181
198
  The fastest way to use Scaffold is through natural language inside Claude Code. The Scaffold Runner skill handles pipeline navigation, surfaces decision points before Claude picks defaults, and tracks your progress automatically. The examples below show what you'd type in a Claude Code session.
@@ -579,14 +596,14 @@ You can change methodology mid-pipeline with `scaffold init --methodology <prese
579
596
 
580
597
  | Command | What It Does |
581
598
  |---------|-------------|
582
- | `scaffold init` | Initialize `.scaffold/` with config, state, and decisions log |
599
+ | `scaffold init` | Initialize `.scaffold/` state, then auto-build hidden adapter artifacts |
583
600
  | `scaffold run <step>` | Execute a pipeline step (assembles and outputs the full prompt) |
584
- | `scaffold build` | Generate platform adapter output (commands/, AGENTS.md, etc.) |
601
+ | `scaffold build` | Generate hidden adapter output under `.scaffold/generated/` and update the managed `.gitignore` block |
585
602
  | `scaffold adopt` | Bootstrap state from existing artifacts (brownfield projects) |
586
603
  | `scaffold skip <step> [<step2>...]` | Skip one or more steps with a reason |
587
604
  | `scaffold complete <step>` | Mark a step as completed (for steps executed outside `scaffold run`) |
588
605
  | `scaffold reset <step>` | Reset a step back to pending |
589
- | `scaffold status [--compact]` | Show pipeline progress (`--compact` shows only remaining work). Warns if commands are stale. |
606
+ | `scaffold status [--compact]` | Show pipeline progress (`--compact` shows only remaining work). Warns if generated adapter output is stale. |
590
607
  | `scaffold next` | List next unblocked step(s) |
591
608
  | `scaffold check <step>` | Check if a conditional step applies to this project |
592
609
  | `scaffold validate` | Validate meta-prompts, config, state, and dependency graph |
@@ -828,7 +845,7 @@ src/
828
845
  - **Assembly engine** (`src/core/assembly/engine.ts`) — Pure orchestrator with no I/O. Constructs 7-section prompts from meta-prompt + knowledge + context + methodology + instructions + depth guidance.
829
846
  - **State manager** (`src/state/state-manager.ts`) — Atomic writes via tmp + `fs.renameSync()`. Tracks step status, in-progress records, and next-eligible cache. Includes migration system for step renames and retired steps.
830
847
  - **Dependency graph** (`src/core/dependency/`) — Kahn's algorithm topological sort with phase-aware ordering and cycle detection.
831
- - **Platform adapters** (`src/core/adapters/`) — 3-step lifecycle (initialize → generateStepWrapper → finalize) producing Claude Code commands, Codex AGENTS.md, or universal markdown.
848
+ - **Platform adapters** (`src/core/adapters/`) — 3-step lifecycle (initialize → generateStepWrapper → finalize) producing hidden adapter artifacts under `.scaffold/generated/claude-code/`, `.scaffold/generated/codex/`, and `.scaffold/generated/universal/`.
832
849
  - **Project detector** (`src/project/detector.ts`) — Scans for file system signals to classify projects as greenfield, brownfield, or v1-migration.
833
850
  - **Check command** (`src/cli/commands/check.ts`) — Applicability detection for conditional steps (platform detection, GitHub remote detection, CLI availability).
834
851
 
@@ -855,7 +872,7 @@ skills/ # 3 Claude Code skills (pipeline reference, runner, multi-
855
872
  ### Contributing
856
873
 
857
874
  1. Meta-prompt content lives in `pipeline/` — edit the relevant `.md` file
858
- 2. Run `scaffold build` to regenerate `commands/` from pipeline meta-prompts. The pre-commit hook will block commits that change `pipeline/` or `knowledge/` without also updating `commands/`.
875
+ 2. If you changed adapter behavior, run `scaffold build` in a test project and inspect the generated artifacts under `.scaffold/generated/`.
859
876
  3. Run `make check-all` (lint + type-check + test + evals) before submitting
860
877
  4. Knowledge entries live in `knowledge/` — follow the existing frontmatter schema
861
878
  5. ADRs documenting architectural decisions are in `docs/v2/adrs/`
@@ -1,5 +1,7 @@
1
1
  import type { CommandModule } from 'yargs';
2
- interface BuildArgs {
2
+ import type { OutputContext } from '../output/context.js';
3
+ import type { CommandResult } from '../../types/index.js';
4
+ export interface BuildArgs {
3
5
  'validate-only': boolean;
4
6
  force: boolean;
5
7
  format?: string;
@@ -7,6 +9,11 @@ interface BuildArgs {
7
9
  verbose?: boolean;
8
10
  root?: string;
9
11
  }
12
+ interface RunBuildOptions {
13
+ output?: OutputContext;
14
+ suppressFinalResult?: boolean;
15
+ }
10
16
  declare const buildCommand: CommandModule<Record<string, unknown>, BuildArgs>;
17
+ export declare function runBuild(argv: BuildArgs, options?: RunBuildOptions): Promise<CommandResult>;
11
18
  export default buildCommand;
12
19
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,OAAO,CAAA;AAoBhD,UAAU,SAAS;IACjB,eAAe,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,QAAA,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAuMnE,CAAA;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,OAAO,CAAA;AAKhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAgBzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,QAAA,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAoBnE,CAAA;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwMrG;AAED,eAAe,YAAY,CAAA"}
@@ -11,6 +11,7 @@ import { detectCycles, topologicalSort } from '../../core/dependency/dependency.
11
11
  import { displayErrors } from '../../cli/output/error-display.js';
12
12
  import { buildIndexWithOverrides, loadFullEntries } from '../../core/assembly/knowledge-loader.js';
13
13
  import { createAdapter } from '../../core/adapters/adapter.js';
14
+ import { ensureScaffoldGitignore, findLegacyGeneratedOutputs } from '../../project/gitignore.js';
14
15
  import fs from 'node:fs';
15
16
  const buildCommand = {
16
17
  command: 'build',
@@ -29,157 +30,177 @@ const buildCommand = {
29
30
  });
30
31
  },
31
32
  handler: async (argv) => {
32
- const startTime = Date.now();
33
- // Step 1: Resolve project root
34
- const projectRoot = argv.root ?? findProjectRoot(process.cwd());
35
- if (!projectRoot) {
36
- process.stderr.write('\u2717 error [PROJECT_NOT_INITIALIZED]: No .scaffold/ directory found\n' +
37
- ' Fix: Run `scaffold init` to initialize a project\n');
38
- process.exit(1);
39
- return;
40
- }
41
- const outputMode = resolveOutputMode(argv);
42
- const output = createOutputContext(outputMode);
43
- // Step 2: Load config
44
- const { config, errors: configErrors } = loadConfig(projectRoot, []);
45
- if (configErrors.length > 0) {
46
- displayErrors(configErrors, [], output);
47
- process.exit(1);
48
- return;
49
- }
50
- if (!config) {
51
- output.error('Config not found');
52
- process.exit(1);
53
- return;
54
- }
55
- // Step 3: Discover meta-prompts from both pipeline/ and tools/ directories
56
- const metaPrompts = discoverAllMetaPrompts(getPackagePipelineDir(projectRoot), getPackageToolsDir(projectRoot));
57
- const stepNames = [...metaPrompts.keys()];
58
- // Step 4: Load presets (optional — failures are non-fatal)
59
- try {
60
- const methodologyDir = getPackageMethodologyDir(projectRoot);
61
- loadAllPresets(methodologyDir, stepNames);
62
- }
63
- catch (err) {
64
- process.stderr.write(`[scaffold] Warning: could not load methodology presets: ${err.message}\n`);
65
- }
66
- // Step 5: Build dependency graph
67
- const graph = buildGraph([...metaPrompts.values()].map(m => m.frontmatter), new Map());
68
- // Step 6: Detect cycles
69
- const cycles = detectCycles(graph);
70
- if (cycles.length > 0) {
71
- displayErrors(cycles, [], output);
72
- process.exit(1);
73
- return;
74
- }
75
- // Step 7: Topological sort (pipeline steps only — tools are excluded from graph)
76
- const sorted = topologicalSort(graph);
77
- // Append tools (category: 'tool') after pipeline steps — they aren't in the graph
78
- const toolSteps = [...metaPrompts.values()]
79
- .filter(m => m.frontmatter.category === 'tool')
80
- .map(m => m.frontmatter.name)
81
- .sort();
82
- const enabledSteps = [...sorted, ...toolSteps];
83
- // Step 8: Handle --validate-only
84
- if (argv['validate-only']) {
85
- output.success(`Validation passed: ${stepNames.length} steps, no cycles`);
86
- if (outputMode === 'json') {
87
- output.result({ valid: true, stepCount: stepNames.length, cycles: 0 });
88
- }
89
- process.exit(0);
90
- return;
33
+ const result = await runBuild(argv);
34
+ process.exit(result.exitCode);
35
+ },
36
+ };
37
+ export async function runBuild(argv, options = {}) {
38
+ const startTime = Date.now();
39
+ // Step 1: Resolve project root
40
+ const projectRoot = argv.root ?? findProjectRoot(process.cwd());
41
+ if (!projectRoot) {
42
+ process.stderr.write('\u2717 error [PROJECT_NOT_INITIALIZED]: No .scaffold/ directory found\n' +
43
+ ' Fix: Run `scaffold init` to initialize a project\n');
44
+ return { exitCode: 1 };
45
+ }
46
+ const outputMode = resolveOutputMode(argv);
47
+ const output = options.output ?? createOutputContext(outputMode);
48
+ // Step 2: Load config
49
+ const { config, errors: configErrors } = loadConfig(projectRoot, []);
50
+ if (configErrors.length > 0) {
51
+ displayErrors(configErrors, [], output);
52
+ return { exitCode: 1, errors: configErrors };
53
+ }
54
+ if (!config) {
55
+ output.error('Config not found');
56
+ return { exitCode: 1 };
57
+ }
58
+ // Step 3: Discover meta-prompts from both pipeline/ and tools/ directories
59
+ const metaPrompts = discoverAllMetaPrompts(getPackagePipelineDir(projectRoot), getPackageToolsDir(projectRoot));
60
+ const stepNames = [...metaPrompts.keys()];
61
+ // Step 4: Load presets (optional — failures are non-fatal)
62
+ try {
63
+ const methodologyDir = getPackageMethodologyDir(projectRoot);
64
+ loadAllPresets(methodologyDir, stepNames);
65
+ }
66
+ catch (err) {
67
+ process.stderr.write(`[scaffold] Warning: could not load methodology presets: ${err.message}\n`);
68
+ }
69
+ // Step 5: Build dependency graph
70
+ const graph = buildGraph([...metaPrompts.values()].map(m => m.frontmatter), new Map());
71
+ // Step 6: Detect cycles
72
+ const cycles = detectCycles(graph);
73
+ if (cycles.length > 0) {
74
+ displayErrors(cycles, [], output);
75
+ return { exitCode: 1, errors: cycles };
76
+ }
77
+ // Step 7: Topological sort (pipeline steps only — tools are excluded from graph)
78
+ const sorted = topologicalSort(graph);
79
+ // Append tools (category: 'tool') after pipeline steps — they aren't in the graph
80
+ const toolSteps = [...metaPrompts.values()]
81
+ .filter(m => m.frontmatter.category === 'tool')
82
+ .map(m => m.frontmatter.name)
83
+ .sort();
84
+ const enabledSteps = [...sorted, ...toolSteps];
85
+ // Step 8: Handle --validate-only
86
+ if (argv['validate-only']) {
87
+ const validationResult = { valid: true, stepCount: stepNames.length, cycles: 0 };
88
+ output.success(`Validation passed: ${stepNames.length} steps, no cycles`);
89
+ if (outputMode === 'json' && !options.suppressFinalResult) {
90
+ output.result(validationResult);
91
91
  }
92
- // Step 9: Load knowledge index
93
- const kbIndex = buildIndexWithOverrides(projectRoot, getPackageKnowledgeDir(projectRoot));
94
- // Step 10: Build reverse dependency map (step → steps that come after it)
95
- const forwardDeps = new Map();
96
- for (const [stepName, _node] of graph.nodes) {
97
- // Find steps that list this step as a dependency
98
- const dependents = [];
99
- for (const [otherName, _otherNode] of graph.nodes) {
100
- if (otherName === stepName)
101
- continue;
102
- const otherMeta = metaPrompts.get(otherName);
103
- if (otherMeta?.frontmatter.dependencies.includes(stepName)) {
104
- dependents.push(otherName);
105
- }
92
+ return { exitCode: 0, data: validationResult };
93
+ }
94
+ // Step 9: Load knowledge index
95
+ const kbIndex = buildIndexWithOverrides(projectRoot, getPackageKnowledgeDir(projectRoot));
96
+ // Step 9.5: Ensure .gitignore and warn about legacy root output
97
+ const gitignoreResult = ensureScaffoldGitignore(projectRoot);
98
+ for (const warning of gitignoreResult.warnings) {
99
+ output.warn(warning);
100
+ }
101
+ const legacyOutputs = findLegacyGeneratedOutputs(projectRoot);
102
+ if (legacyOutputs.length > 0) {
103
+ output.warn({
104
+ code: 'LEGACY_GENERATED_OUTPUTS_PRESENT',
105
+ message: [
106
+ `Legacy root Scaffold outputs still exist: ${legacyOutputs.join(', ')}.`,
107
+ 'See README migration instructions.',
108
+ ].join(' '),
109
+ context: { count: legacyOutputs.length },
110
+ });
111
+ }
112
+ // Step 10: Build reverse dependency map (step → steps that come after it)
113
+ const forwardDeps = new Map();
114
+ for (const [stepName, _node] of graph.nodes) {
115
+ // Find steps that list this step as a dependency
116
+ const dependents = [];
117
+ for (const [otherName, _otherNode] of graph.nodes) {
118
+ if (otherName === stepName)
119
+ continue;
120
+ const otherMeta = metaPrompts.get(otherName);
121
+ if (otherMeta?.frontmatter.dependencies.includes(stepName)) {
122
+ dependents.push(otherName);
106
123
  }
107
- forwardDeps.set(stepName, dependents);
108
124
  }
109
- // Step 11: Create adapters and generate
110
- const platforms = config.platforms ?? ['claude-code'];
111
- const allOutputFiles = [];
112
- for (const platformId of platforms) {
113
- const adapter = createAdapter(platformId);
114
- adapter.initialize({
115
- projectRoot,
116
- methodology: config.methodology ?? 'deep',
117
- allSteps: stepNames,
118
- });
119
- const results = [];
120
- for (const stepSlug of enabledSteps) {
121
- const meta = metaPrompts.get(stepSlug);
122
- if (!meta)
123
- continue;
124
- // Load full knowledge entries (Summary + Deep Guidance) for self-contained commands
125
- const kbNames = meta.frontmatter.knowledgeBase ?? [];
126
- const { entries: kbEntries } = loadFullEntries(kbIndex, kbNames);
127
- // Build long description: prefer summary, then Purpose section first line, then description
128
- const purposeSection = meta.sections['Purpose'] ?? '';
129
- const longDescription = meta.frontmatter.summary
130
- ?? purposeSection.split('\n')[0]?.trim()
131
- ?? meta.frontmatter.description;
132
- const input = {
133
- slug: stepSlug,
134
- description: meta.frontmatter.description,
135
- phase: meta.frontmatter.phase,
136
- dependsOn: forwardDeps.get(stepSlug) ?? [],
137
- produces: meta.frontmatter.outputs,
138
- pipelineIndex: enabledSteps.indexOf(stepSlug),
139
- body: meta.body,
140
- sections: meta.sections,
141
- knowledgeEntries: kbEntries.map(e => ({
142
- name: e.name,
143
- description: e.description,
144
- content: e.content,
145
- })),
146
- conditional: meta.frontmatter.conditional,
147
- longDescription,
148
- };
149
- const stepResult = adapter.generateStepWrapper(input);
150
- results.push(stepResult);
151
- allOutputFiles.push(...stepResult.files);
152
- }
153
- adapter.finalize({ results });
125
+ forwardDeps.set(stepName, dependents);
126
+ }
127
+ // Step 11: Create adapters and generate
128
+ const configuredPlatforms = config.platforms ?? ['claude-code'];
129
+ const platforms = [...new Set([...configuredPlatforms, 'universal'])];
130
+ const allOutputFiles = [];
131
+ for (const platformId of platforms) {
132
+ const adapter = createAdapter(platformId);
133
+ adapter.initialize({
134
+ projectRoot,
135
+ methodology: config.methodology ?? 'deep',
136
+ allSteps: stepNames,
137
+ });
138
+ const results = [];
139
+ for (const stepSlug of enabledSteps) {
140
+ const meta = metaPrompts.get(stepSlug);
141
+ if (!meta)
142
+ continue;
143
+ // Load full knowledge entries (Summary + Deep Guidance) for self-contained commands
144
+ const kbNames = meta.frontmatter.knowledgeBase ?? [];
145
+ const { entries: kbEntries } = loadFullEntries(kbIndex, kbNames);
146
+ // Build long description: prefer summary, then Purpose section first line, then description
147
+ const purposeSection = meta.sections['Purpose'] ?? '';
148
+ const longDescription = meta.frontmatter.summary
149
+ ?? purposeSection.split('\n')[0]?.trim()
150
+ ?? meta.frontmatter.description;
151
+ const input = {
152
+ slug: stepSlug,
153
+ description: meta.frontmatter.description,
154
+ phase: meta.frontmatter.phase,
155
+ dependsOn: forwardDeps.get(stepSlug) ?? [],
156
+ produces: meta.frontmatter.outputs,
157
+ pipelineIndex: enabledSteps.indexOf(stepSlug),
158
+ body: meta.body,
159
+ sections: meta.sections,
160
+ knowledgeEntries: kbEntries.map(e => ({
161
+ name: e.name,
162
+ description: e.description,
163
+ content: e.content,
164
+ })),
165
+ conditional: meta.frontmatter.conditional,
166
+ longDescription,
167
+ };
168
+ const stepResult = adapter.generateStepWrapper(input);
169
+ results.push(stepResult);
170
+ allOutputFiles.push(...stepResult.files);
154
171
  }
155
- // Step 12: Write output files
156
- let generatedCount = 0;
157
- for (const file of allOutputFiles) {
158
- const fullPath = path.join(projectRoot, file.relativePath);
159
- const dir = path.dirname(fullPath);
160
- if (!fs.existsSync(dir)) {
161
- fs.mkdirSync(dir, { recursive: true });
162
- }
163
- atomicWriteFile(fullPath, file.content);
164
- generatedCount++;
172
+ const finalizeResult = adapter.finalize({ results });
173
+ allOutputFiles.push(...finalizeResult.files);
174
+ }
175
+ // Step 12: Write output files
176
+ let generatedCount = 0;
177
+ for (const file of allOutputFiles) {
178
+ const fullPath = path.join(projectRoot, file.relativePath);
179
+ const dir = path.dirname(fullPath);
180
+ if (!fs.existsSync(dir)) {
181
+ fs.mkdirSync(dir, { recursive: true });
165
182
  }
166
- // Step 13: Report build stats
167
- const buildResult = {
168
- stepsTotal: stepNames.length,
169
- stepsEnabled: enabledSteps.length,
170
- platforms,
171
- generatedFiles: generatedCount,
172
- buildTimeMs: Date.now() - startTime,
173
- };
174
- if (outputMode === 'json') {
183
+ atomicWriteFile(fullPath, file.content);
184
+ generatedCount++;
185
+ }
186
+ // Step 13: Report build stats
187
+ const buildResult = {
188
+ stepsTotal: stepNames.length,
189
+ stepsEnabled: enabledSteps.length,
190
+ platforms,
191
+ generatedFiles: generatedCount,
192
+ buildTimeMs: Date.now() - startTime,
193
+ };
194
+ if (outputMode === 'json') {
195
+ if (!options.suppressFinalResult) {
175
196
  output.result(buildResult);
176
197
  }
177
- else {
178
- output.success(`Build complete: ${generatedCount} files generated for ${enabledSteps.length} steps`);
179
- output.info(`Platforms: ${platforms.join(', ')}`);
180
- }
181
- process.exit(0);
182
- },
183
- };
198
+ }
199
+ else {
200
+ output.success(`Build complete: ${generatedCount} files generated for ${enabledSteps.length} steps`);
201
+ output.info(`Platforms: ${platforms.join(', ')}`);
202
+ }
203
+ return { exitCode: 0, data: buildResult };
204
+ }
184
205
  export default buildCommand;
185
206
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}