@nathapp/nax 0.50.3 → 0.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +177 -104
- package/dist/nax.js +417 -213
- package/package.json +1 -3
- package/bin/nax.ts +0 -1195
- package/src/acceptance/fix-generator.ts +0 -322
- package/src/acceptance/generator.ts +0 -415
- package/src/acceptance/index.ts +0 -42
- package/src/acceptance/refinement.ts +0 -224
- package/src/acceptance/templates/cli.ts +0 -47
- package/src/acceptance/templates/component.ts +0 -78
- package/src/acceptance/templates/e2e.ts +0 -43
- package/src/acceptance/templates/index.ts +0 -21
- package/src/acceptance/templates/snapshot.ts +0 -50
- package/src/acceptance/templates/unit.ts +0 -48
- package/src/acceptance/types.ts +0 -138
- package/src/agents/acp/adapter.ts +0 -888
- package/src/agents/acp/cost.ts +0 -9
- package/src/agents/acp/index.ts +0 -7
- package/src/agents/acp/interaction-bridge.ts +0 -126
- package/src/agents/acp/parser.ts +0 -119
- package/src/agents/acp/spawn-client.ts +0 -373
- package/src/agents/acp/types.ts +0 -22
- package/src/agents/aider/adapter.ts +0 -135
- package/src/agents/claude/adapter.ts +0 -258
- package/src/agents/claude/complete.ts +0 -80
- package/src/agents/claude/cost.ts +0 -16
- package/src/agents/claude/execution.ts +0 -215
- package/src/agents/claude/index.ts +0 -3
- package/src/agents/claude/interactive.ts +0 -77
- package/src/agents/claude/plan.ts +0 -179
- package/src/agents/codex/adapter.ts +0 -153
- package/src/agents/cost/calculate.ts +0 -154
- package/src/agents/cost/index.ts +0 -10
- package/src/agents/cost/parse.ts +0 -97
- package/src/agents/cost/pricing.ts +0 -59
- package/src/agents/cost/types.ts +0 -45
- package/src/agents/gemini/adapter.ts +0 -177
- package/src/agents/index.ts +0 -18
- package/src/agents/opencode/adapter.ts +0 -106
- package/src/agents/registry.ts +0 -136
- package/src/agents/shared/decompose.ts +0 -154
- package/src/agents/shared/model-resolution.ts +0 -43
- package/src/agents/shared/types-extended.ts +0 -164
- package/src/agents/shared/validation.ts +0 -69
- package/src/agents/shared/version-detection.ts +0 -109
- package/src/agents/types.ts +0 -205
- package/src/analyze/classifier.ts +0 -282
- package/src/analyze/index.ts +0 -16
- package/src/analyze/scanner.ts +0 -171
- package/src/analyze/types.ts +0 -51
- package/src/cli/accept.ts +0 -108
- package/src/cli/agents.ts +0 -87
- package/src/cli/analyze-parser.ts +0 -291
- package/src/cli/analyze.ts +0 -352
- package/src/cli/config-descriptions.ts +0 -219
- package/src/cli/config-diff.ts +0 -103
- package/src/cli/config-display.ts +0 -285
- package/src/cli/config-get.ts +0 -55
- package/src/cli/config.ts +0 -14
- package/src/cli/constitution.ts +0 -17
- package/src/cli/diagnose-analysis.ts +0 -159
- package/src/cli/diagnose-formatter.ts +0 -87
- package/src/cli/diagnose.ts +0 -203
- package/src/cli/generate.ts +0 -250
- package/src/cli/index.ts +0 -42
- package/src/cli/init-context.ts +0 -405
- package/src/cli/init-detect.ts +0 -303
- package/src/cli/init.ts +0 -296
- package/src/cli/interact.ts +0 -295
- package/src/cli/plan.ts +0 -509
- package/src/cli/plugins.ts +0 -122
- package/src/cli/prompts-export.ts +0 -58
- package/src/cli/prompts-init.ts +0 -200
- package/src/cli/prompts-main.ts +0 -183
- package/src/cli/prompts-shared.ts +0 -70
- package/src/cli/prompts-tdd.ts +0 -88
- package/src/cli/prompts.ts +0 -17
- package/src/cli/runs.ts +0 -174
- package/src/cli/status-cost.ts +0 -151
- package/src/cli/status-features.ts +0 -405
- package/src/cli/status.ts +0 -13
- package/src/commands/common.ts +0 -171
- package/src/commands/diagnose.ts +0 -17
- package/src/commands/index.ts +0 -9
- package/src/commands/logs-formatter.ts +0 -201
- package/src/commands/logs-reader.ts +0 -171
- package/src/commands/logs.ts +0 -103
- package/src/commands/precheck.ts +0 -86
- package/src/commands/runs.ts +0 -220
- package/src/commands/unlock.ts +0 -96
- package/src/config/defaults.ts +0 -218
- package/src/config/index.ts +0 -22
- package/src/config/loader.ts +0 -143
- package/src/config/merge.ts +0 -106
- package/src/config/merger.ts +0 -147
- package/src/config/path-security.ts +0 -121
- package/src/config/paths.ts +0 -27
- package/src/config/permissions.ts +0 -63
- package/src/config/runtime-types.ts +0 -522
- package/src/config/schema-types.ts +0 -53
- package/src/config/schema.ts +0 -60
- package/src/config/schemas.ts +0 -426
- package/src/config/test-strategy.ts +0 -71
- package/src/config/types.ts +0 -57
- package/src/config/validate.ts +0 -103
- package/src/constitution/generator.ts +0 -158
- package/src/constitution/generators/aider.ts +0 -41
- package/src/constitution/generators/claude.ts +0 -35
- package/src/constitution/generators/cursor.ts +0 -36
- package/src/constitution/generators/opencode.ts +0 -38
- package/src/constitution/generators/types.ts +0 -33
- package/src/constitution/generators/windsurf.ts +0 -36
- package/src/constitution/index.ts +0 -11
- package/src/constitution/loader.ts +0 -121
- package/src/constitution/types.ts +0 -31
- package/src/context/auto-detect.ts +0 -228
- package/src/context/builder.ts +0 -299
- package/src/context/elements.ts +0 -122
- package/src/context/formatter.ts +0 -107
- package/src/context/generator.ts +0 -343
- package/src/context/generators/aider.ts +0 -34
- package/src/context/generators/claude.ts +0 -28
- package/src/context/generators/codex.ts +0 -28
- package/src/context/generators/cursor.ts +0 -28
- package/src/context/generators/gemini.ts +0 -28
- package/src/context/generators/opencode.ts +0 -30
- package/src/context/generators/windsurf.ts +0 -28
- package/src/context/greenfield.ts +0 -114
- package/src/context/index.ts +0 -34
- package/src/context/injector.ts +0 -279
- package/src/context/parent-context.ts +0 -39
- package/src/context/test-scanner.ts +0 -370
- package/src/context/types.ts +0 -98
- package/src/decompose/apply.ts +0 -50
- package/src/decompose/builder.ts +0 -181
- package/src/decompose/index.ts +0 -8
- package/src/decompose/sections/codebase.ts +0 -26
- package/src/decompose/sections/constraints.ts +0 -32
- package/src/decompose/sections/index.ts +0 -4
- package/src/decompose/sections/sibling-stories.ts +0 -25
- package/src/decompose/sections/target-story.ts +0 -31
- package/src/decompose/types.ts +0 -55
- package/src/decompose/validators/complexity.ts +0 -45
- package/src/decompose/validators/coverage.ts +0 -134
- package/src/decompose/validators/dependency.ts +0 -91
- package/src/decompose/validators/index.ts +0 -35
- package/src/decompose/validators/overlap.ts +0 -128
- package/src/errors.ts +0 -67
- package/src/execution/batching.ts +0 -157
- package/src/execution/crash-heartbeat.ts +0 -77
- package/src/execution/crash-recovery.ts +0 -79
- package/src/execution/crash-signals.ts +0 -165
- package/src/execution/crash-writer.ts +0 -154
- package/src/execution/deferred-review.ts +0 -105
- package/src/execution/dry-run.ts +0 -81
- package/src/execution/escalation/escalation.ts +0 -46
- package/src/execution/escalation/index.ts +0 -13
- package/src/execution/escalation/tier-escalation.ts +0 -346
- package/src/execution/escalation/tier-outcome.ts +0 -143
- package/src/execution/executor-types.ts +0 -73
- package/src/execution/helpers.ts +0 -38
- package/src/execution/index.ts +0 -27
- package/src/execution/iteration-runner.ts +0 -160
- package/src/execution/lifecycle/acceptance-loop.ts +0 -309
- package/src/execution/lifecycle/headless-formatter.ts +0 -83
- package/src/execution/lifecycle/index.ts +0 -11
- package/src/execution/lifecycle/parallel-lifecycle.ts +0 -101
- package/src/execution/lifecycle/precheck-runner.ts +0 -140
- package/src/execution/lifecycle/run-cleanup.ts +0 -81
- package/src/execution/lifecycle/run-completion.ts +0 -247
- package/src/execution/lifecycle/run-initialization.ts +0 -187
- package/src/execution/lifecycle/run-regression.ts +0 -305
- package/src/execution/lifecycle/run-setup.ts +0 -240
- package/src/execution/lifecycle/story-size-prompts.ts +0 -123
- package/src/execution/lock.ts +0 -129
- package/src/execution/parallel-coordinator.ts +0 -281
- package/src/execution/parallel-executor-rectification-pass.ts +0 -117
- package/src/execution/parallel-executor-rectify.ts +0 -136
- package/src/execution/parallel-executor.ts +0 -330
- package/src/execution/parallel-worker.ts +0 -149
- package/src/execution/parallel.ts +0 -13
- package/src/execution/pid-registry.ts +0 -275
- package/src/execution/pipeline-result-handler.ts +0 -221
- package/src/execution/progress.ts +0 -27
- package/src/execution/queue-handler.ts +0 -109
- package/src/execution/runner-completion.ts +0 -171
- package/src/execution/runner-execution.ts +0 -243
- package/src/execution/runner-setup.ts +0 -86
- package/src/execution/runner.ts +0 -265
- package/src/execution/sequential-executor.ts +0 -219
- package/src/execution/status-file.ts +0 -264
- package/src/execution/status-writer.ts +0 -181
- package/src/execution/story-context.ts +0 -266
- package/src/execution/story-selector.ts +0 -76
- package/src/execution/test-output-parser.ts +0 -14
- package/src/execution/timeout-handler.ts +0 -100
- package/src/hooks/index.ts +0 -2
- package/src/hooks/runner.ts +0 -280
- package/src/hooks/types.ts +0 -79
- package/src/interaction/chain.ts +0 -170
- package/src/interaction/index.ts +0 -61
- package/src/interaction/init.ts +0 -84
- package/src/interaction/plugins/auto.ts +0 -243
- package/src/interaction/plugins/cli.ts +0 -300
- package/src/interaction/plugins/telegram.ts +0 -384
- package/src/interaction/plugins/webhook.ts +0 -286
- package/src/interaction/state.ts +0 -171
- package/src/interaction/triggers.ts +0 -250
- package/src/interaction/types.ts +0 -170
- package/src/logger/formatters.ts +0 -84
- package/src/logger/index.ts +0 -16
- package/src/logger/logger.ts +0 -296
- package/src/logger/types.ts +0 -48
- package/src/logging/formatter.ts +0 -355
- package/src/logging/index.ts +0 -22
- package/src/logging/types.ts +0 -93
- package/src/metrics/aggregator.ts +0 -191
- package/src/metrics/index.ts +0 -14
- package/src/metrics/tracker.ts +0 -200
- package/src/metrics/types.ts +0 -115
- package/src/optimizer/index.ts +0 -63
- package/src/optimizer/noop.optimizer.ts +0 -24
- package/src/optimizer/rule-based.optimizer.ts +0 -248
- package/src/optimizer/types.ts +0 -53
- package/src/pipeline/event-bus.ts +0 -297
- package/src/pipeline/events.ts +0 -130
- package/src/pipeline/index.ts +0 -19
- package/src/pipeline/runner.ts +0 -149
- package/src/pipeline/stages/acceptance-setup.ts +0 -144
- package/src/pipeline/stages/acceptance.ts +0 -215
- package/src/pipeline/stages/autofix.ts +0 -262
- package/src/pipeline/stages/completion.ts +0 -110
- package/src/pipeline/stages/constitution.ts +0 -63
- package/src/pipeline/stages/context.ts +0 -122
- package/src/pipeline/stages/execution.ts +0 -359
- package/src/pipeline/stages/index.ts +0 -86
- package/src/pipeline/stages/optimizer.ts +0 -74
- package/src/pipeline/stages/prompt.ts +0 -79
- package/src/pipeline/stages/queue-check.ts +0 -103
- package/src/pipeline/stages/rectify.ts +0 -101
- package/src/pipeline/stages/regression.ts +0 -99
- package/src/pipeline/stages/review.ts +0 -94
- package/src/pipeline/stages/routing.ts +0 -276
- package/src/pipeline/stages/verify.ts +0 -286
- package/src/pipeline/subscribers/events-writer.ts +0 -135
- package/src/pipeline/subscribers/hooks.ts +0 -179
- package/src/pipeline/subscribers/interaction.ts +0 -103
- package/src/pipeline/subscribers/registry.ts +0 -73
- package/src/pipeline/subscribers/reporters.ts +0 -174
- package/src/pipeline/types.ts +0 -220
- package/src/plugins/extensions.ts +0 -225
- package/src/plugins/index.ts +0 -33
- package/src/plugins/loader.ts +0 -352
- package/src/plugins/plugin-logger.ts +0 -41
- package/src/plugins/registry.ts +0 -168
- package/src/plugins/types.ts +0 -206
- package/src/plugins/validator.ts +0 -352
- package/src/prd/index.ts +0 -220
- package/src/prd/schema.ts +0 -268
- package/src/prd/types.ts +0 -273
- package/src/prd/validate.ts +0 -41
- package/src/precheck/checks-agents.ts +0 -63
- package/src/precheck/checks-blockers.ts +0 -23
- package/src/precheck/checks-cli.ts +0 -68
- package/src/precheck/checks-config.ts +0 -102
- package/src/precheck/checks-git.ts +0 -117
- package/src/precheck/checks-system.ts +0 -101
- package/src/precheck/checks-warnings.ts +0 -221
- package/src/precheck/checks.ts +0 -36
- package/src/precheck/index.ts +0 -374
- package/src/precheck/story-size-gate.ts +0 -144
- package/src/precheck/types.ts +0 -31
- package/src/prompts/builder.ts +0 -166
- package/src/prompts/index.ts +0 -2
- package/src/prompts/loader.ts +0 -43
- package/src/prompts/sections/conventions.ts +0 -19
- package/src/prompts/sections/hermetic.ts +0 -41
- package/src/prompts/sections/index.ts +0 -12
- package/src/prompts/sections/isolation.ts +0 -70
- package/src/prompts/sections/role-task.ts +0 -182
- package/src/prompts/sections/story.ts +0 -55
- package/src/prompts/sections/verdict.ts +0 -70
- package/src/prompts/types.ts +0 -21
- package/src/queue/index.ts +0 -2
- package/src/queue/manager.ts +0 -254
- package/src/queue/types.ts +0 -54
- package/src/review/index.ts +0 -8
- package/src/review/orchestrator.ts +0 -154
- package/src/review/runner.ts +0 -303
- package/src/review/types.ts +0 -70
- package/src/routing/batch-route.ts +0 -35
- package/src/routing/builder.ts +0 -81
- package/src/routing/chain.ts +0 -75
- package/src/routing/content-hash.ts +0 -25
- package/src/routing/index.ts +0 -20
- package/src/routing/loader.ts +0 -62
- package/src/routing/router.ts +0 -305
- package/src/routing/strategies/adaptive.ts +0 -215
- package/src/routing/strategies/index.ts +0 -8
- package/src/routing/strategies/keyword.ts +0 -180
- package/src/routing/strategies/llm-prompts.ts +0 -224
- package/src/routing/strategies/llm.ts +0 -320
- package/src/routing/strategies/manual.ts +0 -50
- package/src/routing/strategy.ts +0 -102
- package/src/tdd/cleanup.ts +0 -120
- package/src/tdd/index.ts +0 -22
- package/src/tdd/isolation.ts +0 -117
- package/src/tdd/orchestrator.ts +0 -406
- package/src/tdd/prompts.ts +0 -40
- package/src/tdd/rectification-gate.ts +0 -274
- package/src/tdd/session-runner.ts +0 -263
- package/src/tdd/types.ts +0 -84
- package/src/tdd/verdict-reader.ts +0 -266
- package/src/tdd/verdict.ts +0 -152
- package/src/tui/App.tsx +0 -265
- package/src/tui/components/AgentPanel.tsx +0 -75
- package/src/tui/components/CostOverlay.tsx +0 -118
- package/src/tui/components/HelpOverlay.tsx +0 -107
- package/src/tui/components/StatusBar.tsx +0 -63
- package/src/tui/components/StoriesPanel.tsx +0 -177
- package/src/tui/hooks/useKeyboard.ts +0 -142
- package/src/tui/hooks/useLayout.ts +0 -137
- package/src/tui/hooks/usePipelineEvents.ts +0 -183
- package/src/tui/hooks/usePty.ts +0 -189
- package/src/tui/index.tsx +0 -38
- package/src/tui/types.ts +0 -76
- package/src/utils/errors.ts +0 -12
- package/src/utils/git.ts +0 -245
- package/src/utils/json-file.ts +0 -72
- package/src/utils/log-test-output.ts +0 -25
- package/src/utils/path-security.ts +0 -73
- package/src/utils/queue-writer.ts +0 -54
- package/src/verification/crash-detector.ts +0 -34
- package/src/verification/executor.ts +0 -250
- package/src/verification/index.ts +0 -12
- package/src/verification/orchestrator-types.ts +0 -154
- package/src/verification/orchestrator.ts +0 -76
- package/src/verification/parser.ts +0 -220
- package/src/verification/rectification-loop.ts +0 -172
- package/src/verification/rectification.ts +0 -108
- package/src/verification/runners.ts +0 -129
- package/src/verification/smart-runner.ts +0 -307
- package/src/verification/strategies/acceptance.ts +0 -136
- package/src/verification/strategies/regression.ts +0 -90
- package/src/verification/strategies/scoped.ts +0 -154
- package/src/verification/types.ts +0 -117
- package/src/version.ts +0 -40
- package/src/worktree/dispatcher.ts +0 -6
- package/src/worktree/index.ts +0 -2
- package/src/worktree/manager.ts +0 -193
- package/src/worktree/merge.ts +0 -302
- package/src/worktree/types.ts +0 -4
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI test template builder
|
|
3
|
-
*
|
|
4
|
-
* Generates acceptance test structure for CLI testing strategy.
|
|
5
|
-
* Uses Bun.spawn to run the binary and asserts on stdout text.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { AcceptanceCriterion } from "../types";
|
|
9
|
-
|
|
10
|
-
export interface CliTemplateOptions {
|
|
11
|
-
featureName: string;
|
|
12
|
-
criteria: AcceptanceCriterion[];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Build CLI test template code for the given criteria.
|
|
17
|
-
*
|
|
18
|
-
* @param options - Feature name and criteria list
|
|
19
|
-
* @returns TypeScript test code string
|
|
20
|
-
*/
|
|
21
|
-
export function buildCliTemplate(options: CliTemplateOptions): string {
|
|
22
|
-
const { featureName, criteria } = options;
|
|
23
|
-
|
|
24
|
-
const tests = criteria
|
|
25
|
-
.map(
|
|
26
|
-
(ac) => ` test("${ac.id}: ${ac.text}", async () => {
|
|
27
|
-
const proc = Bun.spawn(["bun", "run", "src/${featureName}.ts"], {
|
|
28
|
-
stdout: "pipe",
|
|
29
|
-
stderr: "pipe",
|
|
30
|
-
});
|
|
31
|
-
const [exitCode, stdout] = await Promise.all([
|
|
32
|
-
proc.exited,
|
|
33
|
-
new Response(proc.stdout).text(),
|
|
34
|
-
]);
|
|
35
|
-
expect(exitCode).toBe(0);
|
|
36
|
-
expect(stdout).toContain(""); // Replace with expected stdout text
|
|
37
|
-
});`,
|
|
38
|
-
)
|
|
39
|
-
.join("\n\n");
|
|
40
|
-
|
|
41
|
-
return `import { describe, expect, test } from "bun:test";
|
|
42
|
-
|
|
43
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
44
|
-
${tests}
|
|
45
|
-
});
|
|
46
|
-
`;
|
|
47
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Component test template builder
|
|
3
|
-
*
|
|
4
|
-
* Generates acceptance test structure for component testing strategy.
|
|
5
|
-
* Supports ink-testing-library (lastFrame) and react (screen.getByText).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { AcceptanceCriterion } from "../types";
|
|
9
|
-
|
|
10
|
-
export interface ComponentTemplateOptions {
|
|
11
|
-
featureName: string;
|
|
12
|
-
criteria: AcceptanceCriterion[];
|
|
13
|
-
/** Test framework: 'ink-testing-library' | 'react' */
|
|
14
|
-
testFramework?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Build component test template code for the given criteria.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Feature name, criteria, and test framework
|
|
21
|
-
* @returns TypeScript test code string
|
|
22
|
-
*/
|
|
23
|
-
export function buildComponentTemplate(options: ComponentTemplateOptions): string {
|
|
24
|
-
const { featureName, criteria, testFramework = "ink-testing-library" } = options;
|
|
25
|
-
|
|
26
|
-
if (testFramework === "react") {
|
|
27
|
-
return buildReactTemplate(featureName, criteria);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return buildInkTemplate(featureName, criteria);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function buildInkTemplate(featureName: string, criteria: AcceptanceCriterion[]): string {
|
|
34
|
-
const tests = criteria
|
|
35
|
-
.map(
|
|
36
|
-
(ac) => ` test("${ac.id}: ${ac.text}", () => {
|
|
37
|
-
const { lastFrame } = render(<${toPascalCase(featureName)} />);
|
|
38
|
-
expect(lastFrame()).toContain(""); // Replace with expected output
|
|
39
|
-
});`,
|
|
40
|
-
)
|
|
41
|
-
.join("\n\n");
|
|
42
|
-
|
|
43
|
-
return `import { describe, expect, test } from "bun:test";
|
|
44
|
-
import { render } from "ink-testing-library";
|
|
45
|
-
import { ${toPascalCase(featureName)} } from "../src/${featureName}";
|
|
46
|
-
|
|
47
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
48
|
-
${tests}
|
|
49
|
-
});
|
|
50
|
-
`;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function buildReactTemplate(featureName: string, criteria: AcceptanceCriterion[]): string {
|
|
54
|
-
const tests = criteria
|
|
55
|
-
.map(
|
|
56
|
-
(ac) => ` test("${ac.id}: ${ac.text}", () => {
|
|
57
|
-
render(<${toPascalCase(featureName)} />);
|
|
58
|
-
expect(screen.getByText("")).toBeTruthy(); // Replace with expected text
|
|
59
|
-
});`,
|
|
60
|
-
)
|
|
61
|
-
.join("\n\n");
|
|
62
|
-
|
|
63
|
-
return `import { describe, expect, test } from "bun:test";
|
|
64
|
-
import { render, screen } from "@testing-library/react";
|
|
65
|
-
import { ${toPascalCase(featureName)} } from "../src/${featureName}";
|
|
66
|
-
|
|
67
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
68
|
-
${tests}
|
|
69
|
-
});
|
|
70
|
-
`;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function toPascalCase(name: string): string {
|
|
74
|
-
return name
|
|
75
|
-
.split(/[-_\s]+/)
|
|
76
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
77
|
-
.join("");
|
|
78
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* E2E test template builder
|
|
3
|
-
*
|
|
4
|
-
* Generates acceptance test structure for end-to-end testing strategy.
|
|
5
|
-
* Uses fetch() against localhost and asserts on response body.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { AcceptanceCriterion } from "../types";
|
|
9
|
-
|
|
10
|
-
export interface E2eTemplateOptions {
|
|
11
|
-
featureName: string;
|
|
12
|
-
criteria: AcceptanceCriterion[];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const DEFAULT_PORT = 3000;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Build E2E test template code for the given criteria.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Feature name and criteria list
|
|
21
|
-
* @returns TypeScript test code string
|
|
22
|
-
*/
|
|
23
|
-
export function buildE2eTemplate(options: E2eTemplateOptions): string {
|
|
24
|
-
const { featureName, criteria } = options;
|
|
25
|
-
|
|
26
|
-
const tests = criteria
|
|
27
|
-
.map(
|
|
28
|
-
(ac) => ` test("${ac.id}: ${ac.text}", async () => {
|
|
29
|
-
const response = await fetch("http://localhost:${DEFAULT_PORT}/api/${featureName}");
|
|
30
|
-
expect(response.ok).toBe(true);
|
|
31
|
-
const body = await response.text();
|
|
32
|
-
expect(body).toContain(""); // Replace with expected response body
|
|
33
|
-
});`,
|
|
34
|
-
)
|
|
35
|
-
.join("\n\n");
|
|
36
|
-
|
|
37
|
-
return `import { describe, expect, test } from "bun:test";
|
|
38
|
-
|
|
39
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
40
|
-
${tests}
|
|
41
|
-
});
|
|
42
|
-
`;
|
|
43
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Acceptance Test Template Builders
|
|
3
|
-
*
|
|
4
|
-
* One builder per test strategy. The generator selects the appropriate
|
|
5
|
-
* builder based on the testStrategy option.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export { buildUnitTemplate } from "./unit";
|
|
9
|
-
export type { UnitTemplateOptions } from "./unit";
|
|
10
|
-
|
|
11
|
-
export { buildComponentTemplate } from "./component";
|
|
12
|
-
export type { ComponentTemplateOptions } from "./component";
|
|
13
|
-
|
|
14
|
-
export { buildCliTemplate } from "./cli";
|
|
15
|
-
export type { CliTemplateOptions } from "./cli";
|
|
16
|
-
|
|
17
|
-
export { buildE2eTemplate } from "./e2e";
|
|
18
|
-
export type { E2eTemplateOptions } from "./e2e";
|
|
19
|
-
|
|
20
|
-
export { buildSnapshotTemplate } from "./snapshot";
|
|
21
|
-
export type { SnapshotTemplateOptions } from "./snapshot";
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Snapshot test template builder
|
|
3
|
-
*
|
|
4
|
-
* Generates acceptance test structure for snapshot testing strategy.
|
|
5
|
-
* Renders the component and uses toMatchSnapshot() for assertions.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { AcceptanceCriterion } from "../types";
|
|
9
|
-
|
|
10
|
-
export interface SnapshotTemplateOptions {
|
|
11
|
-
featureName: string;
|
|
12
|
-
criteria: AcceptanceCriterion[];
|
|
13
|
-
/** Test framework: 'ink-testing-library' | 'react' */
|
|
14
|
-
testFramework?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Build snapshot test template code for the given criteria.
|
|
19
|
-
*
|
|
20
|
-
* @param options - Feature name, criteria, and optional test framework
|
|
21
|
-
* @returns TypeScript test code string
|
|
22
|
-
*/
|
|
23
|
-
export function buildSnapshotTemplate(options: SnapshotTemplateOptions): string {
|
|
24
|
-
const { featureName, criteria } = options;
|
|
25
|
-
|
|
26
|
-
const tests = criteria
|
|
27
|
-
.map(
|
|
28
|
-
(ac) => ` test("${ac.id}: ${ac.text}", () => {
|
|
29
|
-
const { lastFrame } = render(<${toPascalCase(featureName)} />);
|
|
30
|
-
expect(lastFrame()).toMatchSnapshot();
|
|
31
|
-
});`,
|
|
32
|
-
)
|
|
33
|
-
.join("\n\n");
|
|
34
|
-
|
|
35
|
-
return `import { describe, expect, test } from "bun:test";
|
|
36
|
-
import { render } from "ink-testing-library";
|
|
37
|
-
import { ${toPascalCase(featureName)} } from "../src/${featureName}";
|
|
38
|
-
|
|
39
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
40
|
-
${tests}
|
|
41
|
-
});
|
|
42
|
-
`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function toPascalCase(name: string): string {
|
|
46
|
-
return name
|
|
47
|
-
.split(/[-_\s]+/)
|
|
48
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
49
|
-
.join("");
|
|
50
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit test template builder
|
|
3
|
-
*
|
|
4
|
-
* Generates acceptance test structure for unit testing strategy:
|
|
5
|
-
* imports the function under test, calls it, and asserts on the return value.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { AcceptanceCriterion } from "../types";
|
|
9
|
-
|
|
10
|
-
export interface UnitTemplateOptions {
|
|
11
|
-
featureName: string;
|
|
12
|
-
criteria: AcceptanceCriterion[];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Build unit test template code for the given criteria.
|
|
17
|
-
*
|
|
18
|
-
* @param options - Feature name and criteria list
|
|
19
|
-
* @returns TypeScript test code string
|
|
20
|
-
*/
|
|
21
|
-
export function buildUnitTemplate(options: UnitTemplateOptions): string {
|
|
22
|
-
const { featureName, criteria } = options;
|
|
23
|
-
|
|
24
|
-
const tests = criteria
|
|
25
|
-
.map(
|
|
26
|
-
(ac) => ` test("${ac.id}: ${ac.text}", async () => {
|
|
27
|
-
// TODO: import and call the function under test
|
|
28
|
-
expect(true).toBe(true); // Replace with real assertion
|
|
29
|
-
});`,
|
|
30
|
-
)
|
|
31
|
-
.join("\n\n");
|
|
32
|
-
|
|
33
|
-
return `import { describe, expect, test } from "bun:test";
|
|
34
|
-
import { ${toCamelCase(featureName)} } from "../src/${toKebabCase(featureName)}";
|
|
35
|
-
|
|
36
|
-
describe("${featureName} - Acceptance Tests", () => {
|
|
37
|
-
${tests}
|
|
38
|
-
});
|
|
39
|
-
`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function toCamelCase(name: string): string {
|
|
43
|
-
return name.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function toKebabCase(name: string): string {
|
|
47
|
-
return name.toLowerCase().replace(/\s+/g, "-");
|
|
48
|
-
}
|
package/src/acceptance/types.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Acceptance Test Generation Types
|
|
3
|
-
*
|
|
4
|
-
* Types for generating acceptance tests from spec.md acceptance criteria.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { AgentAdapter } from "../agents/types";
|
|
8
|
-
import type { AcceptanceTestStrategy, ModelDef, ModelTier, NaxConfig } from "../config/schema";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* A single refined acceptance criterion produced by the refinement module.
|
|
12
|
-
*/
|
|
13
|
-
export interface RefinedCriterion {
|
|
14
|
-
/** The original criterion text from the PRD */
|
|
15
|
-
original: string;
|
|
16
|
-
/** Concrete, machine-verifiable description produced by LLM */
|
|
17
|
-
refined: string;
|
|
18
|
-
/** False if the LLM determines the criterion cannot be automatically tested */
|
|
19
|
-
testable: boolean;
|
|
20
|
-
/** The story ID this criterion belongs to */
|
|
21
|
-
storyId: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Context passed to refineAcceptanceCriteria.
|
|
26
|
-
*/
|
|
27
|
-
export interface RefinementContext {
|
|
28
|
-
/** Story ID for attribution on each RefinedCriterion */
|
|
29
|
-
storyId: string;
|
|
30
|
-
/** Codebase context string (file tree, dependencies, etc.) */
|
|
31
|
-
codebaseContext: string;
|
|
32
|
-
/** Global config — model tier resolved from config.acceptance.model */
|
|
33
|
-
config: NaxConfig;
|
|
34
|
-
/** Test strategy — controls strategy-specific prompt instructions */
|
|
35
|
-
testStrategy?: AcceptanceTestStrategy;
|
|
36
|
-
/** Test framework — informs LLM which testing library syntax to use */
|
|
37
|
-
testFramework?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* A single acceptance criterion extracted from spec.md.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* const ac: AcceptanceCriterion = {
|
|
46
|
-
* id: "AC-2",
|
|
47
|
-
* text: "set(key, value, ttl) expires after ttl milliseconds",
|
|
48
|
-
* lineNumber: 42,
|
|
49
|
-
* };
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export interface AcceptanceCriterion {
|
|
53
|
-
/** AC identifier (e.g., "AC-1", "AC-2") */
|
|
54
|
-
id: string;
|
|
55
|
-
/** Full criterion text */
|
|
56
|
-
text: string;
|
|
57
|
-
/** Line number in spec.md for reference */
|
|
58
|
-
lineNumber: number;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Options for generating acceptance tests.
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```ts
|
|
66
|
-
* const options: GenerateAcceptanceTestsOptions = {
|
|
67
|
-
* specContent: "# Feature\n\n## Acceptance Criteria\n- AC-1: ...",
|
|
68
|
-
* featureName: "url-shortener",
|
|
69
|
-
* workdir: "/home/user/project",
|
|
70
|
-
* codebaseContext: "File tree:\nsrc/\n index.ts\n",
|
|
71
|
-
* modelTier: "balanced",
|
|
72
|
-
* modelDef: { provider: "anthropic", model: "claude-sonnet-4-5" },
|
|
73
|
-
* };
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
/**
|
|
77
|
-
* Options for generating acceptance tests from PRD stories and refined criteria.
|
|
78
|
-
*/
|
|
79
|
-
export interface GenerateFromPRDOptions {
|
|
80
|
-
/** Feature name for context */
|
|
81
|
-
featureName: string;
|
|
82
|
-
/** Working directory for context scanning */
|
|
83
|
-
workdir: string;
|
|
84
|
-
/** Feature directory where acceptance-refined.json is written */
|
|
85
|
-
featureDir: string;
|
|
86
|
-
/** Codebase context (file tree, dependencies, test patterns) */
|
|
87
|
-
codebaseContext: string;
|
|
88
|
-
/** Model tier to use for test generation */
|
|
89
|
-
modelTier: ModelTier;
|
|
90
|
-
/** Resolved model definition */
|
|
91
|
-
modelDef: ModelDef;
|
|
92
|
-
/** Global config for quality settings */
|
|
93
|
-
config: NaxConfig;
|
|
94
|
-
/** Test strategy to use for template selection (default: 'unit') */
|
|
95
|
-
testStrategy?: AcceptanceTestStrategy;
|
|
96
|
-
/** Test framework for component/snapshot strategies (e.g. 'ink-testing-library', 'react') */
|
|
97
|
-
testFramework?: string;
|
|
98
|
-
/** Agent adapter to use for test generation — overrides _generatorPRDDeps.adapter */
|
|
99
|
-
adapter?: AgentAdapter;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface GenerateAcceptanceTestsOptions {
|
|
103
|
-
/** Full spec.md content */
|
|
104
|
-
specContent: string;
|
|
105
|
-
/** Feature name for context */
|
|
106
|
-
featureName: string;
|
|
107
|
-
/** Working directory for context scanning */
|
|
108
|
-
workdir: string;
|
|
109
|
-
/** Codebase context (file tree, dependencies, test patterns) */
|
|
110
|
-
codebaseContext: string;
|
|
111
|
-
/** Model tier to use for test generation */
|
|
112
|
-
modelTier: ModelTier;
|
|
113
|
-
/** Resolved model definition */
|
|
114
|
-
modelDef: ModelDef;
|
|
115
|
-
/** Global config for quality settings */
|
|
116
|
-
config: NaxConfig;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Result from acceptance test generation.
|
|
121
|
-
*
|
|
122
|
-
* @example
|
|
123
|
-
* ```ts
|
|
124
|
-
* const result: AcceptanceTestResult = {
|
|
125
|
-
* testCode: 'import { describe, test, expect } from "bun:test";\n\n...',
|
|
126
|
-
* criteria: [
|
|
127
|
-
* { id: "AC-1", text: "TTL expires", lineNumber: 12 },
|
|
128
|
-
* { id: "AC-2", text: "set(key, value, ttl) expires after ttl", lineNumber: 13 },
|
|
129
|
-
* ],
|
|
130
|
-
* };
|
|
131
|
-
* ```
|
|
132
|
-
*/
|
|
133
|
-
export interface AcceptanceTestResult {
|
|
134
|
-
/** Generated test code */
|
|
135
|
-
testCode: string;
|
|
136
|
-
/** Acceptance criteria that were processed */
|
|
137
|
-
criteria: AcceptanceCriterion[];
|
|
138
|
-
}
|