@nathapp/nax 0.28.0 → 0.30.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.
- package/CHANGELOG.md +23 -2
- package/bin/nax.ts +2 -3
- package/dist/nax.js +72753 -0
- package/package.json +11 -3
- package/src/cli/analyze.ts +2 -7
- package/src/cli/config.ts +3 -1
- package/src/config/defaults.ts +1 -0
- package/src/config/schemas.ts +1 -0
- package/src/config/types.ts +1 -0
- package/src/context/builder.ts +10 -1
- package/src/execution/lifecycle/headless-formatter.ts +2 -4
- package/src/prompts/builder.ts +12 -69
- package/src/prompts/sections/isolation.ts +38 -8
- package/src/prompts/sections/role-task.ts +79 -17
- package/src/review/runner.ts +6 -1
- package/src/version.ts +2 -1
- package/.claude/rules/01-project-conventions.md +0 -34
- package/.claude/rules/02-test-architecture.md +0 -39
- package/.claude/rules/03-test-writing.md +0 -58
- package/.claude/rules/04-forbidden-patterns.md +0 -29
- package/.claude/settings.json +0 -15
- package/.githooks/pre-commit +0 -16
- package/.gitlab-ci.yml +0 -103
- package/.mcp.json +0 -8
- package/BRIEF.md +0 -140
- package/CLAUDE.md +0 -143
- package/US-007-IMPLEMENTATION.md +0 -139
- package/biome.json +0 -14
- package/bun.lock +0 -163
- package/bunfig.toml +0 -12
- package/docker-compose.test.yml +0 -15
- package/docs/20260216-fix-plan-context-review.md +0 -56
- package/docs/20260216-relentless-vs-ngent-comparison.md +0 -208
- package/docs/20260216-v02-plan.md +0 -136
- package/docs/20260216-v02-review.md +0 -685
- package/docs/20260217-dogfood-findings.md +0 -56
- package/docs/20260217-p2-plus-plan.md +0 -117
- package/docs/20260217-partial-fixes-plan.md +0 -62
- package/docs/20260217-plan-analyze-spec.md +0 -117
- package/docs/20260217-post-impl-review.md +0 -1137
- package/docs/20260217-quick-wins-plan.md +0 -66
- package/docs/20260217-split-runner-plan.md +0 -75
- package/docs/20260217-v03-impl-plan.md +0 -80
- package/docs/20260217-v03-post-impl-review.md +0 -589
- package/docs/20260217-v04-impl-plan.md +0 -86
- package/docs/20260217-v05-post-impl-review.md +0 -850
- package/docs/20260217-v06-post-impl-review.md +0 -817
- package/docs/20260218-adr003-port-plan.md +0 -151
- package/docs/20260218-review-adr003-verification.md +0 -175
- package/docs/20260219-fix-plan-bug16-19.md +0 -79
- package/docs/20260219-fix-plan-bug20-22.md +0 -114
- package/docs/20260219-plan-llm-routing.md +0 -116
- package/docs/20260219-review-bug20-22-fixes.md +0 -135
- package/docs/20260219-routing-baseline-keyword.md +0 -63
- package/docs/20260220-plan-structured-logging-p1.md +0 -80
- package/docs/20260220-plan-structured-logging-p2.md +0 -37
- package/docs/20260220-review-llm-routing.md +0 -180
- package/docs/20260220-review-post-fix-llm-routing.md +0 -70
- package/docs/20260221-fix-plan-relevantfiles-split.md +0 -101
- package/docs/20260221-fix-plan-routing-mode.md +0 -125
- package/docs/20260221-review-v0.9-implementation.md +0 -379
- package/docs/20260222-fix-plan-v091-routing-isolation.md +0 -197
- package/docs/20260223-fix-plan-prompt-audit.md +0 -62
- package/docs/20260224-nax-roadmap-phases.md +0 -189
- package/docs/20260225-phase2-llm-service-layer.md +0 -401
- package/docs/20260225-review-v0.10.1.md +0 -187
- package/docs/20260303-v010-implementation-plan.md +0 -165
- package/docs/20260304-review-nax.md +0 -492
- package/docs/CLAUDE.md.bak +0 -191
- package/docs/ROADMAP.md +0 -390
- package/docs/SPEC-rectification.md +0 -0
- package/docs/SPEC.md +0 -324
- package/docs/US-001-plugin-loading-verification.md +0 -152
- package/docs/adr/ADR-005-implementation-plan.md +0 -655
- package/docs/adr/ADR-005-pipeline-re-architecture.md +0 -464
- package/docs/architecture-analysis.md +0 -1076
- package/docs/bugs/BUG-21-escalation-null-attempts.md +0 -48
- package/docs/bugs-from-dogfood-run-c.md +0 -243
- package/docs/code-review-20260228.md +0 -612
- package/docs/code-review-v0.15.0.md +0 -629
- package/docs/hook-lifecycle-test-plan.md +0 -149
- package/docs/releases/v0.11.0-and-earlier.md +0 -20
- package/docs/releases/v0.12.0.md +0 -15
- package/docs/releases/v0.13.0.md +0 -14
- package/docs/releases/v0.14.0.md +0 -20
- package/docs/releases/v0.14.1.md +0 -36
- package/docs/releases/v0.14.2.md +0 -51
- package/docs/releases/v0.14.3.md +0 -174
- package/docs/releases/v0.14.4.md +0 -94
- package/docs/releases/v0.15.0.md +0 -502
- package/docs/releases/v0.15.1.md +0 -170
- package/docs/releases/v0.15.3.md +0 -193
- package/docs/specs/bug-039-orphan-processes.md +0 -131
- package/docs/specs/bug-040-review-rectification.md +0 -82
- package/docs/specs/bug-041-cross-story-test-isolation.md +0 -88
- package/docs/specs/bug-042-verifier-failure-capture.md +0 -117
- package/docs/specs/bun-pty-migration.md +0 -171
- package/docs/specs/central-run-registry.md +0 -116
- package/docs/specs/feat-010-smart-runner-git-history.md +0 -96
- package/docs/specs/feat-011-file-context-strategy.md +0 -73
- package/docs/specs/feat-012-tdd-writer-tier.md +0 -79
- package/docs/specs/feat-013-test-after-review.md +0 -89
- package/docs/specs/feat-014-heartbeat-observability.md +0 -127
- package/docs/specs/status-file-consolidation.md +0 -93
- package/docs/specs/status-file-v0.10.1.md +0 -812
- package/docs/specs/trigger-completion.md +0 -145
- package/docs/specs/verification-architecture-v2.md +0 -343
- package/docs/tdd/strategies.md +0 -97
- package/docs/v0.10-global-config.md +0 -206
- package/docs/v0.10-plugin-system.md +0 -415
- package/docs/v0.10-prompt-optimizer.md +0 -234
- package/docs/v0.3-spec.md +0 -244
- package/docs/v0.4-spec.md +0 -140
- package/docs/v0.5-spec.md +0 -237
- package/docs/v0.6-spec.md +0 -371
- package/docs/v0.7-spec.md +0 -177
- package/docs/v0.8-llm-routing.md +0 -206
- package/docs/v0.8-structured-logging.md +0 -132
- package/docs/v0.9.3-prompt-audit.md +0 -112
- package/examples/plugins/console-reporter/index.test.ts +0 -207
- package/examples/plugins/console-reporter/index.ts +0 -110
- package/memory/topic/feat-010-baseref.md +0 -28
- package/memory/topic/feat-013-test-after-deprecation.md +0 -22
- package/nax/config.json +0 -154
- package/nax/features/bug-039-medium/prd.json +0 -45
- package/nax/features/bugfix-v0171/prd.json +0 -52
- package/nax/features/central-run-registry/prd.json +0 -105
- package/nax/features/config-management/prd.json +0 -108
- package/nax/features/config-management/progress.txt +0 -5
- package/nax/features/diagnose/acceptance.test.ts +0 -414
- package/nax/features/diagnose/prd.json +0 -41
- package/nax/features/nax-compliance/prd.json +0 -52
- package/nax/features/nax-compliance/progress.txt +0 -1
- package/nax/features/orchestration-fixes/prd.json +0 -89
- package/nax/features/orchestration-fixes/progress.txt +0 -1
- package/nax/features/plugin-integration/US-007-VERIFICATION.md +0 -259
- package/nax/features/plugin-integration/prd.json +0 -208
- package/nax/features/plugin-integration/progress.txt +0 -5
- package/nax/features/post-rearch-bugfix/prd.json +0 -137
- package/nax/features/precheck/prd.json +0 -205
- package/nax/features/precheck/progress.txt +0 -15
- package/nax/features/prompt-builder/prd.json +0 -152
- package/nax/features/prompt-builder/progress.txt +0 -3
- package/nax/features/review-quality/prd.json +0 -55
- package/nax/features/routing-persistence/prd.json +0 -104
- package/nax/features/routing-persistence/progress.txt +0 -1
- package/nax/features/smart-test-runner/plan.md +0 -7
- package/nax/features/smart-test-runner/prd.json +0 -203
- package/nax/features/smart-test-runner/progress.txt +0 -13
- package/nax/features/smart-test-runner/spec.md +0 -7
- package/nax/features/smart-test-runner/tasks.md +0 -8
- package/nax/features/status-file-consolidation/prd.json +0 -106
- package/nax/features/structured-logging/prd.json +0 -199
- package/nax/features/trigger-completion/prd.json +0 -150
- package/nax/features/trigger-completion/progress.txt +0 -7
- package/nax/features/unlock/prd.json +0 -36
- package/nax/features/v0.18.3-execution-reliability/prd.json +0 -80
- package/nax/features/v0.18.3-execution-reliability/progress.txt +0 -3
- package/nax/features/v0.19.0-hardening/plan.md +0 -7
- package/nax/features/v0.19.0-hardening/prd.json +0 -84
- package/nax/features/v0.19.0-hardening/progress.txt +0 -7
- package/nax/features/v0.19.0-hardening/spec.md +0 -18
- package/nax/features/v0.19.0-hardening/tasks.md +0 -8
- package/nax/features/verify-v2/prd.json +0 -79
- package/nax/features/verify-v2/progress.txt +0 -3
- package/nax/status.json +0 -36
- package/src/prompts/templates/implementer.ts +0 -6
- package/src/prompts/templates/single-session.ts +0 -6
- package/src/prompts/templates/test-writer.ts +0 -6
- package/src/prompts/templates/verifier.ts +0 -6
- package/test/COVERAGE-GAPS.md +0 -333
- package/test/e2e/cm-003-default-view.test.ts +0 -195
- package/test/e2e/plan-analyze-run.test.ts +0 -902
- package/test/helpers/helpers.test.ts +0 -295
- package/test/helpers/timeout.ts +0 -42
- package/test/integration/US-002-TEST-SUMMARY.md +0 -107
- package/test/integration/US-003-TEST-SUMMARY.md +0 -149
- package/test/integration/US-004-TEST-SUMMARY.md +0 -106
- package/test/integration/US-005-TEST-SUMMARY.md +0 -138
- package/test/integration/US-007-TEST-SUMMARY.md +0 -100
- package/test/integration/cli/agent-validation.test.ts +0 -439
- package/test/integration/cli/cli-config-default-edge-cases.test.ts +0 -223
- package/test/integration/cli/cli-config-default-view.test.ts +0 -230
- package/test/integration/cli/cli-config-diff.test.ts +0 -461
- package/test/integration/cli/cli-config-prompts-explain.test.ts +0 -74
- package/test/integration/cli/cli-config.test.ts +0 -737
- package/test/integration/cli/cli-diagnose.test.ts +0 -595
- package/test/integration/cli/cli-logs.test.ts +0 -346
- package/test/integration/cli/cli-plugins.test.ts +0 -679
- package/test/integration/cli/cli-precheck.test.ts +0 -372
- package/test/integration/cli/cli-run-headless.test.ts +0 -174
- package/test/integration/cli/cli.test.ts +0 -76
- package/test/integration/cli/precheck-integration.test.ts +0 -476
- package/test/integration/cli/precheck-orchestrator.test.ts +0 -247
- package/test/integration/cli/precheck.test.ts +0 -806
- package/test/integration/config/config-loader.test.ts +0 -266
- package/test/integration/config/config.test.ts +0 -444
- package/test/integration/config/merger.test.ts +0 -466
- package/test/integration/config/paths.test.ts +0 -52
- package/test/integration/config/security-loader.test.ts +0 -83
- package/test/integration/context/context-integration.test.ts +0 -703
- package/test/integration/context/context-path-security.test.ts +0 -173
- package/test/integration/context/context-provider-injection.test.ts +0 -507
- package/test/integration/context/context-verification-integration.test.ts +0 -296
- package/test/integration/context/s5-greenfield-fallback.test.ts +0 -298
- package/test/integration/execution/execution-isolation.test.ts +0 -143
- package/test/integration/execution/execution.test.ts +0 -634
- package/test/integration/execution/feature-status-write.test.ts +0 -302
- package/test/integration/execution/parallel.test.ts +0 -251
- package/test/integration/execution/prd-pause.test.ts +0 -205
- package/test/integration/execution/prd-resolvers.test.ts +0 -186
- package/test/integration/execution/progress.test.ts +0 -34
- package/test/integration/execution/runner-batching.test.ts +0 -682
- package/test/integration/execution/runner-config-plugins.test.ts +0 -462
- package/test/integration/execution/runner-escalation.test.ts +0 -561
- package/test/integration/execution/runner-fixes.test.ts +0 -400
- package/test/integration/execution/runner-plugin-integration.test.ts +0 -544
- package/test/integration/execution/runner-queue-and-attempts.test.ts +0 -476
- package/test/integration/execution/status-file-integration.test.ts +0 -289
- package/test/integration/execution/status-file.test.ts +0 -380
- package/test/integration/execution/status-writer.test.ts +0 -447
- package/test/integration/execution/story-id-in-events.test.ts +0 -274
- package/test/integration/interaction/interaction-chain-pipeline.test.ts +0 -476
- package/test/integration/pipeline/hooks.test.ts +0 -363
- package/test/integration/pipeline/pipeline-acceptance.test.ts +0 -303
- package/test/integration/pipeline/pipeline-events.test.ts +0 -476
- package/test/integration/pipeline/pipeline.test.ts +0 -660
- package/test/integration/pipeline/reporter-lifecycle.test.ts +0 -862
- package/test/integration/pipeline/verify-stage.test.ts +0 -286
- package/test/integration/plan/analyze-integration.test.ts +0 -262
- package/test/integration/plan/analyze-scanner.test.ts +0 -132
- package/test/integration/plan/logger.test.ts +0 -461
- package/test/integration/plan/plan.test.ts +0 -157
- package/test/integration/plugins/config-integration.test.ts +0 -173
- package/test/integration/plugins/config-resolution.test.ts +0 -523
- package/test/integration/plugins/loader.test.ts +0 -644
- package/test/integration/plugins/plugins-registry.test.ts +0 -747
- package/test/integration/plugins/validator.test.ts +0 -564
- package/test/integration/prompts/pb-004-migration.test.ts +0 -523
- package/test/integration/review/review-config-commands.test.ts +0 -320
- package/test/integration/review/review-config-schema.test.ts +0 -117
- package/test/integration/review/review-plugin-integration.test.ts +0 -729
- package/test/integration/review/review.test.ts +0 -150
- package/test/integration/routing/plugin-routing-advanced.test.ts +0 -461
- package/test/integration/routing/plugin-routing-core.test.ts +0 -527
- package/test/integration/routing/routing-stage-bug-021.test.ts +0 -275
- package/test/integration/routing/routing-stage-greenfield.test.ts +0 -287
- package/test/integration/tdd/tdd-cleanup.test.ts +0 -246
- package/test/integration/tdd/tdd-orchestrator-core.test.ts +0 -565
- package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +0 -355
- package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +0 -311
- package/test/integration/tdd/tdd-orchestrator-lite.test.ts +0 -289
- package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +0 -260
- package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +0 -536
- package/test/integration/tmp/headless-test/test.jsonl +0 -30
- package/test/integration/verification/test-scanner.test.ts +0 -403
- package/test/integration/verification/verification-asset-check.test.ts +0 -143
- package/test/integration/worktree/manager.test.ts +0 -218
- package/test/integration/worktree/worktree-merge.test.ts +0 -341
- package/test/manual/logging-formatter-demo.ts +0 -158
- package/test/ui/tui-agent-panel.test.tsx +0 -99
- package/test/ui/tui-pty-integration.test.tsx +0 -146
- package/test/unit/acceptance.test.ts +0 -187
- package/test/unit/agent-stderr-capture.test.ts +0 -147
- package/test/unit/agents/claude.test.ts +0 -107
- package/test/unit/analyze-classifier.test.ts +0 -216
- package/test/unit/analyze.test.ts +0 -224
- package/test/unit/auto-detect.test.ts +0 -250
- package/test/unit/cli-status-project-level.test.ts +0 -283
- package/test/unit/cli-status.test.ts +0 -418
- package/test/unit/commands/common.test.ts +0 -321
- package/test/unit/commands/logs.test.ts +0 -458
- package/test/unit/commands/runs.test.ts +0 -303
- package/test/unit/commands/unlock.test.ts +0 -320
- package/test/unit/config/defaults.test.ts +0 -70
- package/test/unit/config/quality-commands-schema.test.ts +0 -72
- package/test/unit/config/regression-gate-schema.test.ts +0 -160
- package/test/unit/config/smart-runner-flag.test.ts +0 -250
- package/test/unit/constitution-generators.test.ts +0 -161
- package/test/unit/constitution.test.ts +0 -210
- package/test/unit/context/context-autodetect.test.ts +0 -297
- package/test/unit/context/context-build.test.ts +0 -575
- package/test/unit/context/context-coverage.test.ts +0 -236
- package/test/unit/context/context-error.test.ts +0 -93
- package/test/unit/context/context-estimate-tokens.test.ts +0 -201
- package/test/unit/context/context-format.test.ts +0 -302
- package/test/unit/context/context-isolation.test.ts +0 -267
- package/test/unit/context/context-sort.test.ts +0 -93
- package/test/unit/context/context-story.test.ts +0 -108
- package/test/unit/context/prior-failures.test.ts +0 -463
- package/test/unit/context.test.ts +0 -1726
- package/test/unit/cost.test.ts +0 -231
- package/test/unit/crash-recovery.test.ts +0 -309
- package/test/unit/escalation.test.ts +0 -127
- package/test/unit/execution/lifecycle/run-completion.test.ts +0 -240
- package/test/unit/execution/lifecycle/run-regression.test.ts +0 -420
- package/test/unit/execution/pid-registry.test.ts +0 -241
- package/test/unit/execution/sequential-executor.test.ts +0 -235
- package/test/unit/execution/sfc-004-dead-code-cleanup.test.ts +0 -89
- package/test/unit/execution/structured-failure.test.ts +0 -415
- package/test/unit/execution-logging-stderr.test.ts +0 -157
- package/test/unit/execution-stage.test.ts +0 -123
- package/test/unit/fix-generator.test.ts +0 -276
- package/test/unit/formatters.test.ts +0 -468
- package/test/unit/greenfield.test.ts +0 -180
- package/test/unit/hooks/shell-security.test.ts +0 -40
- package/test/unit/interaction/auto-plugin.test.ts +0 -162
- package/test/unit/interaction/human-review-trigger.test.ts +0 -165
- package/test/unit/interaction-network-failures.test.ts +0 -390
- package/test/unit/interaction-plugins.test.ts +0 -472
- package/test/unit/logging/formatter.test.ts +0 -456
- package/test/unit/merge.test.ts +0 -269
- package/test/unit/metrics/aggregator.test.ts +0 -164
- package/test/unit/metrics/tracker.test.ts +0 -186
- package/test/unit/metrics.test.ts +0 -276
- package/test/unit/optimizer/noop.optimizer.test.ts +0 -125
- package/test/unit/optimizer/rule-based.optimizer.test.ts +0 -358
- package/test/unit/pipeline/event-bus.test.ts +0 -105
- package/test/unit/pipeline/routing-partial-override.test.ts +0 -121
- package/test/unit/pipeline/runner-retry.test.ts +0 -89
- package/test/unit/pipeline/stages/autofix.test.ts +0 -97
- package/test/unit/pipeline/stages/completion-review-gate.test.ts +0 -218
- package/test/unit/pipeline/stages/execution-ambiguity.test.ts +0 -311
- package/test/unit/pipeline/stages/execution-merge-conflict.test.ts +0 -218
- package/test/unit/pipeline/stages/rectify.test.ts +0 -101
- package/test/unit/pipeline/stages/regression-stage.test.ts +0 -69
- package/test/unit/pipeline/stages/review.test.ts +0 -201
- package/test/unit/pipeline/stages/routing-idempotence.test.ts +0 -139
- package/test/unit/pipeline/stages/routing-initial-complexity.test.ts +0 -321
- package/test/unit/pipeline/stages/routing-persistence.test.ts +0 -380
- package/test/unit/pipeline/stages/verify.test.ts +0 -267
- package/test/unit/pipeline/subscribers/events-writer.test.ts +0 -227
- package/test/unit/pipeline/subscribers/hooks.test.ts +0 -84
- package/test/unit/pipeline/subscribers/interaction.test.ts +0 -313
- package/test/unit/pipeline/subscribers/registry.test.ts +0 -149
- package/test/unit/pipeline/subscribers/reporters.test.ts +0 -90
- package/test/unit/pipeline/verify-smart-runner.test.ts +0 -345
- package/test/unit/prd-auto-default.test.ts +0 -291
- package/test/unit/prd-failure-category.test.ts +0 -177
- package/test/unit/prd-get-next-story.test.ts +0 -215
- package/test/unit/precheck/checks-warnings.test.ts +0 -114
- package/test/unit/precheck-checks.test.ts +0 -841
- package/test/unit/precheck-story-size-gate.test.ts +0 -288
- package/test/unit/precheck-types.test.ts +0 -143
- package/test/unit/prompts/builder.test.ts +0 -258
- package/test/unit/prompts/loader.test.ts +0 -355
- package/test/unit/prompts/sections/conventions.test.ts +0 -30
- package/test/unit/prompts/sections/isolation.test.ts +0 -35
- package/test/unit/prompts/sections/role-task.test.ts +0 -40
- package/test/unit/prompts/sections/sections.test.ts +0 -238
- package/test/unit/prompts/sections/story.test.ts +0 -45
- package/test/unit/prompts/sections/verdict.test.ts +0 -58
- package/test/unit/prompts.test.ts +0 -476
- package/test/unit/queue.test.ts +0 -237
- package/test/unit/rectification.test.ts +0 -285
- package/test/unit/registry.test.ts +0 -288
- package/test/unit/review/runner.test.ts +0 -117
- package/test/unit/routing/content-hash.test.ts +0 -99
- package/test/unit/routing/routing-stability.test.ts +0 -208
- package/test/unit/routing/strategies/llm.test.ts +0 -306
- package/test/unit/routing-advanced.test.ts +0 -313
- package/test/unit/routing-core.test.ts +0 -341
- package/test/unit/routing-strategies.test.ts +0 -440
- package/test/unit/storyid-events.test.ts +0 -213
- package/test/unit/tdd-verdict.test.ts +0 -492
- package/test/unit/test-output-parser.test.ts +0 -377
- package/test/unit/ui/tui-controls.test.ts +0 -335
- package/test/unit/ui/tui-cost-and-pty.test.ts +0 -190
- package/test/unit/ui/tui-layout.test.ts +0 -379
- package/test/unit/ui/tui-stories.test.ts +0 -333
- package/test/unit/unit-isolation.test.ts +0 -135
- package/test/unit/utils/git.test.ts +0 -50
- package/test/unit/utils/path-security.test.ts +0 -47
- package/test/unit/utils-helpers.test.ts +0 -318
- package/test/unit/verdict.test.ts +0 -325
- package/test/unit/verification/orchestrator-types.test.ts +0 -54
- package/test/unit/verification/orchestrator.test.ts +0 -66
- package/test/unit/verification/smart-runner-config.test.ts +0 -163
- package/test/unit/verification/smart-runner-discovery.test.ts +0 -354
- package/test/unit/verification/smart-runner.test.ts +0 -262
- package/test/unit/verification/strategies/acceptance.test.ts +0 -33
- package/test/unit/verification/strategies/regression.test.ts +0 -87
- package/test/unit/verification/strategies/scoped.test.ts +0 -100
- package/test/unit/worktree-manager.test.ts +0 -159
- package/tsconfig.json +0 -27
package/.claude/settings.json
DELETED
package/.githooks/pre-commit
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# nax pre-commit hook — runs typecheck + lint
|
|
3
|
-
# Install: git config core.hooksPath .githooks
|
|
4
|
-
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
# Ensure bun is on PATH (git hooks run with minimal PATH)
|
|
8
|
-
export PATH="$HOME/.bun/bin:$PATH"
|
|
9
|
-
|
|
10
|
-
echo "[pre-commit] Running typecheck..."
|
|
11
|
-
bun run typecheck
|
|
12
|
-
|
|
13
|
-
echo "[pre-commit] Running lint..."
|
|
14
|
-
bun run lint
|
|
15
|
-
|
|
16
|
-
echo "[pre-commit] OK"
|
package/.gitlab-ci.yml
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# .gitlab-ci.yml - nax CI/CD
|
|
2
|
-
# Bun-native, single package (no turbo/monorepo)
|
|
3
|
-
#
|
|
4
|
-
# Triggers:
|
|
5
|
-
# - MR: test only (gate for merge)
|
|
6
|
-
# - [run-release] on master: test + release + notify
|
|
7
|
-
# - [run-prerelease] on non-master: test + canary release + notify
|
|
8
|
-
# - release-by-bot commits and tags: skipped entirely
|
|
9
|
-
|
|
10
|
-
stages:
|
|
11
|
-
- test
|
|
12
|
-
- release
|
|
13
|
-
- notify
|
|
14
|
-
|
|
15
|
-
# --- Stage: Test ---
|
|
16
|
-
test:
|
|
17
|
-
stage: test
|
|
18
|
-
image:
|
|
19
|
-
name: nathapp/node-bun:22.21.0-1.3.9-alpine
|
|
20
|
-
pull_policy: always
|
|
21
|
-
before_script:
|
|
22
|
-
- apk add --no-cache git
|
|
23
|
-
- git config --global safe.directory '*'
|
|
24
|
-
- git config --global user.name "CI Runner"
|
|
25
|
-
- git config --global user.email "ci@nathapp.io"
|
|
26
|
-
cache:
|
|
27
|
-
key:
|
|
28
|
-
files:
|
|
29
|
-
- bun.lock
|
|
30
|
-
paths:
|
|
31
|
-
- node_modules/
|
|
32
|
-
policy: pull-push
|
|
33
|
-
script:
|
|
34
|
-
- bun install --frozen-lockfile
|
|
35
|
-
- bun run typecheck
|
|
36
|
-
- bun run lint
|
|
37
|
-
- bun run test
|
|
38
|
-
rules:
|
|
39
|
-
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_TAG'
|
|
40
|
-
when: never
|
|
41
|
-
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
42
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
|
|
43
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-release/ && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
44
|
-
|
|
45
|
-
# --- Stage: Release ---
|
|
46
|
-
release:
|
|
47
|
-
stage: release
|
|
48
|
-
image:
|
|
49
|
-
name: nathapp/node-bun:22.21.0-1.3.9-alpine
|
|
50
|
-
pull_policy: always
|
|
51
|
-
cache:
|
|
52
|
-
key:
|
|
53
|
-
files:
|
|
54
|
-
- bun.lock
|
|
55
|
-
paths:
|
|
56
|
-
- node_modules/
|
|
57
|
-
policy: pull
|
|
58
|
-
variables:
|
|
59
|
-
NPM_REGISTRY: "//registry.npmjs.org/"
|
|
60
|
-
NPM_RELEASE_TOKEN: $NPM_TOKEN
|
|
61
|
-
before_script:
|
|
62
|
-
- apk add --no-cache git
|
|
63
|
-
- git config --global safe.directory '*'
|
|
64
|
-
- git config --global user.name "$GITLAB_USER_NAME"
|
|
65
|
-
- git config --global user.email "$GITLAB_USER_EMAIL"
|
|
66
|
-
script:
|
|
67
|
-
- bun install --frozen-lockfile
|
|
68
|
-
- VERSION=$(bun -e "console.log(require('./package.json').version)")
|
|
69
|
-
- bun run build
|
|
70
|
-
- echo "${NPM_REGISTRY}:_authToken=${NPM_RELEASE_TOKEN}" > .npmrc
|
|
71
|
-
- npm publish --access public
|
|
72
|
-
- git tag -a "v${VERSION}" -m "v${VERSION}"
|
|
73
|
-
- git push "https://${GITLAB_USER_NAME}:${CI_GIT_TOKEN}@${CI_REPOSITORY_URL#*@}" --tags
|
|
74
|
-
rules:
|
|
75
|
-
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_TAG'
|
|
76
|
-
when: never
|
|
77
|
-
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
78
|
-
when: never
|
|
79
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
|
|
80
|
-
variables:
|
|
81
|
-
NPM_REGISTRY: "//npm.nathapp.io/"
|
|
82
|
-
NPM_RELEASE_TOKEN: $NPM_PRIVATE_TOKEN
|
|
83
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-release/ && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
84
|
-
|
|
85
|
-
# --- Stage: Notify ---
|
|
86
|
-
notify:
|
|
87
|
-
stage: notify
|
|
88
|
-
image:
|
|
89
|
-
name: registry-intl.cn-hongkong.aliyuncs.com/gkci/node:22.14.0-alpine-ci
|
|
90
|
-
pull_policy: always
|
|
91
|
-
needs: [release]
|
|
92
|
-
script:
|
|
93
|
-
- VERSION=$(node -e "console.log(require('./package.json').version)")
|
|
94
|
-
- 'curl -s -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"$TELEGRAM_CHAT_ID\", \"text\": \"nax v${VERSION} released\"}" https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage'
|
|
95
|
-
rules:
|
|
96
|
-
- if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_TAG'
|
|
97
|
-
when: never
|
|
98
|
-
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
99
|
-
when: never
|
|
100
|
-
- if: '$TELEGRAM_BOT_TOKEN == null || $TELEGRAM_BOT_TOKEN == ""'
|
|
101
|
-
when: never
|
|
102
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
|
|
103
|
-
- if: '$CI_COMMIT_MESSAGE =~ /run-release/ && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
package/.mcp.json
DELETED
package/BRIEF.md
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
# nax — Brief
|
|
2
|
-
|
|
3
|
-
## What
|
|
4
|
-
AI coding agent orchestrator (CLI, Bun + TypeScript). Takes a feature spec, decomposes into user stories via LLM, routes each to the right model tier by complexity, and executes them with auto-escalation and retry. Supports three-session TDD for quality-critical work. Currently v0.10.1 on master. Published as `@nathapp/nax` (not yet on npm — local/global install only).
|
|
5
|
-
|
|
6
|
-
## Architecture
|
|
7
|
-
|
|
8
|
-
```
|
|
9
|
-
spec.md + tasks.md
|
|
10
|
-
↓
|
|
11
|
-
nax analyze → prd.json (user stories with routing metadata)
|
|
12
|
-
↓
|
|
13
|
-
nax run → pipeline per story:
|
|
14
|
-
routing → context → constitution → prompt → optimizer → execution → review → acceptance → completion
|
|
15
|
-
↑ ↑
|
|
16
|
-
(v0.10 plugin) (v0.10 plugin)
|
|
17
|
-
↑ ↑
|
|
18
|
-
plugin routers plugin context-providers
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
**Key modules:**
|
|
22
|
-
|
|
23
|
-
| Module | Purpose |
|
|
24
|
-
|:-------|:--------|
|
|
25
|
-
| `pipeline/` | Stage-based runner — each stage returns continue/skip/fail/escalate/pause |
|
|
26
|
-
| `routing/` | Strategy chain: keyword → LLM → adaptive → manual → plugin |
|
|
27
|
-
| `context/` | Builds per-story context from PRD + dependencies within token budget |
|
|
28
|
-
| `tdd/` | Three-session orchestrator: test-writer → implementer → verifier with git-diff isolation |
|
|
29
|
-
| `execution/` | Spawns `claude -p` via ClaudeCodeAdapter, handles timeouts and cost tracking |
|
|
30
|
-
| `status-file/` | *(v0.10.1)* Atomic JSON status writer for external monitoring (dashboards/CI) |
|
|
31
|
-
| `acceptance/` | LLM-generated acceptance tests, validates story output |
|
|
32
|
-
| `agents/` | Adapter pattern — currently only Claude Code, designed for Codex/Gemini/OpenCode |
|
|
33
|
-
| `hooks/` | Lifecycle events (on-start, on-complete, on-pause, on-error) via shell commands |
|
|
34
|
-
| `config/` | Layered config: global (`~/.nax/`) → project (`nax/`) with Zod validation + deep merge |
|
|
35
|
-
| `constitution/` | Injected rules/constraints prepended to every agent prompt |
|
|
36
|
-
| `plugins/` | *(v0.10)* Plugin loader, registry, and extension point interfaces |
|
|
37
|
-
| `optimizer/` | *(v0.10)* Prompt optimization stage (rule-based built-in + plugin support) |
|
|
38
|
-
|
|
39
|
-
## Key Decisions
|
|
40
|
-
|
|
41
|
-
| Decision | Why | Date | Ref |
|
|
42
|
-
|:---------|:----|:-----|:----|
|
|
43
|
-
| Classify complexity upfront, not start-cheap | Avoids wasting cycles on wrong model; LLM routing is cheap (~$0.002/story) | 2026-02-16 | SPEC.md |
|
|
44
|
-
| Three-session TDD (not two) | Session 3 (verifier) catches cases where implementer subtly modifies tests; git-diff isolation between all sessions | 2026-02-16 | SPEC.md |
|
|
45
|
-
| LLM outputs testStrategy directly | Keyword matching caused false positives ("endpoint"→TDD). LLM handles nuance better | 2026-02-23 | #11, #12 |
|
|
46
|
-
| Stage-based pipeline over monolithic runner | Composable, testable, each stage can skip/fail independently | 2026-02-17 | v0.3-spec |
|
|
47
|
-
| Bun over Node | Faster test execution, native TypeScript, built-in file APIs | 2026-02-16 | — |
|
|
48
|
-
| Token budget for context | Prevents context overflow (200k window); reserves 100k for agent reasoning | 2026-02-17 | context/builder.ts |
|
|
49
|
-
| Constitution as separate file | Project-level rules (coding standards, forbidden patterns) injected into every prompt without modifying CLAUDE.md | 2026-02-18 | — |
|
|
50
|
-
| Hooks over built-in integrations | Users wire their own notifications/CI via shell commands; nax stays standalone | 2026-02-16 | SPEC.md |
|
|
51
|
-
| Dropped greenfield scaffolding (#13) | Chicken-and-egg: nax/ must exist inside project, but scaffolding creates the project. Manual US-000 works fine. Existing tools (na-cli, nest new) handle scaffolding better. | 2026-03-03 | #13 |
|
|
52
|
-
| Test-writer allowed paths for barrel exports | `src/index.ts` re-exports are common TDD collateral; soft-warn instead of hard-block | 2026-02-22 | #9 |
|
|
53
|
-
| Story pause doesn't block unrelated stories | Dependency graph determines which stories can proceed independently | 2026-02-22 | #10 |
|
|
54
|
-
| Use actual BuiltContext tokens in frontmatter | Re-estimating tokens independently caused mismatches; element-level tracking is more accurate for audit | 2026-02-23 | #15 |
|
|
55
|
-
| Shared TDD prompt module | Extracting TDD prompts from orchestrator ensures consistency between CLI and execution | 2026-02-23 | #15 |
|
|
56
|
-
| Plugin system over ad-hoc extension | Unified registration/loading for all extension points (optimizer, router, agent, reviewer, context, reporter). Reuses existing interfaces. | 2026-03-03 | #8, #14 |
|
|
57
|
-
| Deep merge for global+project config | More intuitive than section replace; users only override what they change. Hooks and constitution concatenate (global first). | 2026-03-03 | #14 |
|
|
58
|
-
| No LLM optimizer built-in | Fast-tier LLM rewrite adds cost/complexity. Rule-based covers deterministic wins. External LLM optimizers (LLMLingua, etc.) can be added via plugins. | 2026-03-03 | #8 |
|
|
59
|
-
| TDD-Lite over removing TDD | TDD is nax's differentiator; instead of dropping it, add a relaxed variant (lite) where only verifier stays isolated. Strict for TS libs, lite for UI/polyglot. | 2026-02-24 | #20 |
|
|
60
|
-
| Fix nax over replacing with dev-orchestrator | dev-orchestrator lacks TDD pipeline, structured logging, PRD workflow. Porting those is more work than fixing nax's weaknesses. | 2026-02-24 | `docs/20260224-nax-roadmap-phases.md` |
|
|
61
|
-
| Dry-run marks stories as passed | Previous dry-run never changed story status, causing infinite loop until maxIterations. Now marks passed + saves PRD for natural completion. | 2026-02-24 | `09996c8` |
|
|
62
|
-
| Targeted git reset for TDD fallback | `git checkout .` was too aggressive; now resets only files touched by the failed session, preserving other local changes. | 2026-02-24 | `d1dc4b9` |
|
|
63
|
-
| Atomic Status File (v0.10.1) | Machine-readable status tracking via JSON. Atomic write (write-then-rename) prevents partial reads during polling. | 2026-02-25 | `status-file-v0.10.1.md` |
|
|
64
|
-
| Category-based TDD routing (v0.10.1) | Isolation violations trigger strategy downgrade (Lite) while mechanical failures trigger tier escalation. Reduces manual pause/resume cycles. | 2026-02-25 | `status-file-v0.10.1.md` |
|
|
65
|
-
|
|
66
|
-
## Config Reference
|
|
67
|
-
|
|
68
|
-
Config loaded from `~/.nax/config.json` (global) deep-merged with `nax/config.json` (project). CLI flags override both.
|
|
69
|
-
|
|
70
|
-
**Resolution order:** Built-in defaults → `~/.nax/config.json` → `nax/config.json` → CLI flags
|
|
71
|
-
|
|
72
|
-
| Section | Key | Type | Default | Purpose |
|
|
73
|
-
|:--------|:----|:-----|:--------|:--------|
|
|
74
|
-
| models | fast/balanced/powerful | ModelDef \| string | haiku/sonnet/opus | Maps abstract tiers to actual models |
|
|
75
|
-
| autoMode | complexityRouting | Record<Complexity, Tier> | simple→fast, medium→balanced, complex/expert→powerful | Which tier handles which complexity |
|
|
76
|
-
| autoMode | escalation.tierOrder | TierConfig[] | fast×5, balanced×3, powerful×2 | Retry budget per tier before escalating |
|
|
77
|
-
| routing | strategy | keyword\|llm\|manual\|adaptive\|custom | keyword | How stories get classified |
|
|
78
|
-
| routing | llm.mode | one-shot\|per-story\|hybrid | hybrid | Batch-route upfront + re-route on retry |
|
|
79
|
-
| execution | costLimit | number (USD) | 5.0 | Pause run when cost exceeds this |
|
|
80
|
-
| execution | sessionTimeoutSeconds | number | 600 | Kill agent session after this |
|
|
81
|
-
| execution | verificationTimeoutSeconds | number | 300 | Kill test/typecheck/lint subprocess |
|
|
82
|
-
| quality | commands.test | string | (auto-detect) | Custom test command |
|
|
83
|
-
| quality | forceExit | boolean | false | Append --forceExit to test command |
|
|
84
|
-
| quality | stripEnvVars | string[] | CLAUDECODE, REPL_ID, AGENT | Env vars removed during verification |
|
|
85
|
-
| tdd | sessionTiers | {testWriter, implementer, verifier} | balanced/story-tier/fast | Per-session model overrides |
|
|
86
|
-
| tdd | testWriterAllowedPaths | string[] | src/index.ts, src/**/index.ts | Soft-allowed paths for test-writer |
|
|
87
|
-
| constitution | path | string | constitution.md | Relative to config dir (~/.nax/ or nax/) |
|
|
88
|
-
| constitution | skipGlobal | boolean | false | *(v0.10)* Skip global constitution for this project |
|
|
89
|
-
| context | testCoverage.detail | names-only\|names-and-counts\|describe-blocks | names-and-counts | How much test info to inject |
|
|
90
|
-
| context | testCoverage.maxTokens | number | 500 | Token budget for test coverage section |
|
|
91
|
-
| context | testCoverage.scopeToStory | boolean | true | Filter test coverage to story-relevant files only |
|
|
92
|
-
| acceptance | enabled | boolean | true | Run LLM acceptance validation |
|
|
93
|
-
| analyze | llmEnhanced | boolean | true | Use LLM for story decomposition |
|
|
94
|
-
| optimizer | enabled | boolean | false | *(v0.10)* Enable prompt optimization stage |
|
|
95
|
-
| optimizer | strategy | noop\|rule-based | noop | *(v0.10)* Built-in optimizer strategy |
|
|
96
|
-
| hooks | skipGlobal | boolean | false | *(v0.10)* Skip global hooks for this project |
|
|
97
|
-
| plugins | (array) | PluginConfigEntry[] | [] | *(v0.10)* Explicit plugin modules + config |
|
|
98
|
-
|
|
99
|
-
Full schema with Zod validation: `src/config/schema.ts`
|
|
100
|
-
|
|
101
|
-
## v0.10 Specs
|
|
102
|
-
|
|
103
|
-
| Feature | Spec File | Stories | Summary |
|
|
104
|
-
|:--------|:----------|:--------|:--------|
|
|
105
|
-
| Plugin System | `docs/v0.10-plugin-system.md` | 9 | Loader, registry, 6 extension point interfaces (optimizer, router, agent, reviewer, context-provider, reporter) |
|
|
106
|
-
| Prompt Optimizer | `docs/v0.10-prompt-optimizer.md` | 5 | NoopOptimizer (default), RuleBasedOptimizer (strip whitespace, compact criteria, dedup context), optimizer pipeline stage |
|
|
107
|
-
| Global Config | `docs/v0.10-global-config.md` | 7 | `~/.nax/` directory, deep merge (project wins), hooks concatenate (global first), constitution concatenate, `nax init --global`, `skipGlobal` opt-out |
|
|
108
|
-
| Status File & Smart Escalation | `docs/specs/status-file-v0.10.1.md` | 9 | Atomic JSON status tracking, failure categorization, retry-as-lite strategy downgrade |
|
|
109
|
-
|
|
110
|
-
**Total: ~30 user stories** across 4 features.
|
|
111
|
-
|
|
112
|
-
## Version History
|
|
113
|
-
|
|
114
|
-
| Version | What Changed | Issues |
|
|
115
|
-
|:--------|:-------------|:-------|
|
|
116
|
-
| v0.10.1 | Status file (machine-readable), Smart TDD escalation (retryAsLite), Verifier Verdicts | #16 |
|
|
117
|
-
| v0.10.0 | Plugin system, Global config layering, Prompt optimizer stage | #8, #14 |
|
|
118
|
-
| v0.9.3 | Prompt Audit CLI (`nax prompts`), context isolation unit tests, scoped test coverage scanner | #15 |
|
|
119
|
-
|
|
120
|
-
## Roadmap
|
|
121
|
-
|
|
122
|
-
| Priority | Feature | Status | Ref |
|
|
123
|
-
|:---------|:--------|:-------|:----|
|
|
124
|
-
| **Done** | Phase 1: TDD-Lite strategy + zero-file fallback | ✅ Done | #20, `docs/20260224-nax-roadmap-phases.md` |
|
|
125
|
-
| **Next** | Phase 2: LLM Service Layer — agent interface with pluggable backends | 📋 Planned | #3 |
|
|
126
|
-
| **Next** | Phase 3: Worktree parallelism — N stories concurrent | 📋 Planned | — |
|
|
127
|
-
| **Backlog** | CLI for paused stories (`nax stories`, `nax resume`) | 📋 Planned | #18 |
|
|
128
|
-
| **Backlog** | Quality flags + review.checks unification | 📋 Planned | #19 |
|
|
129
|
-
|
|
130
|
-
### Phase Dependency Chain
|
|
131
|
-
```
|
|
132
|
-
Phase 1: tdd-lite + fallback ← standalone, no blockers
|
|
133
|
-
↓
|
|
134
|
-
Phase 2: LLM Service Layer (#3) ← abstracts agent spawning (claude-cli, openclaw, api)
|
|
135
|
-
↓
|
|
136
|
-
Phase 3: Worktree parallelism ← needs Phase 2 for multi-agent coordination
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
*Updated 2026-02-25*
|
package/CLAUDE.md
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
# nax — AI Coding Agent Orchestrator
|
|
2
|
-
|
|
3
|
-
Bun + TypeScript CLI that orchestrates AI coding agents (Claude Code) with model-tier routing, TDD strategies, plugin hooks, and a Central Run Registry.
|
|
4
|
-
|
|
5
|
-
## Tech Stack
|
|
6
|
-
|
|
7
|
-
| Layer | Choice |
|
|
8
|
-
|:------|:-------|
|
|
9
|
-
| Runtime | **Bun 1.3.7+** — Bun-native APIs only, no Node.js equivalents |
|
|
10
|
-
| Language | **TypeScript strict** — no `any` without explicit justification |
|
|
11
|
-
| Test | **`bun:test`** — describe/test/expect |
|
|
12
|
-
| Lint/Format | **Biome** (`bun run lint`) |
|
|
13
|
-
| Build | `bun run build` |
|
|
14
|
-
|
|
15
|
-
## Git Identity
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
git config user.name "subrina.tai"
|
|
19
|
-
git config user.email "subrina8080@outlook.com"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Commands
|
|
23
|
-
|
|
24
|
-
| Command | Purpose |
|
|
25
|
-
|:--------|:--------|
|
|
26
|
-
| `bun run typecheck` | tsc --noEmit |
|
|
27
|
-
| `bun run lint` | Biome |
|
|
28
|
-
| `bun test test/unit/foo.test.ts` | Targeted test during iteration |
|
|
29
|
-
| `NAX_SKIP_PRECHECK=1 bun test test/ --timeout=60000 --bail` | Full suite |
|
|
30
|
-
|
|
31
|
-
nax runs lint, typecheck, and tests automatically via the pipeline. Run these manually only when working outside a nax session.
|
|
32
|
-
|
|
33
|
-
## Engineering Persona
|
|
34
|
-
|
|
35
|
-
- **Senior Engineer mindset**: check edge cases, null/undefined, race conditions, and error states.
|
|
36
|
-
- **TDD first**: write or update tests before implementation when the story calls for it.
|
|
37
|
-
- **Stuck rule**: if the same test fails 2+ iterations, stop, summarise failed attempts, reassess approach.
|
|
38
|
-
- **Never push to remote** — the human reviews and pushes.
|
|
39
|
-
|
|
40
|
-
## Architecture
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
Runner.run() [src/execution/runner.ts — thin orchestrator only]
|
|
44
|
-
→ loadPlugins()
|
|
45
|
-
→ for each story:
|
|
46
|
-
→ Pipeline.execute() [src/pipeline/pipeline.ts]
|
|
47
|
-
→ stages: queueCheck → routing → constitution → context → prompt
|
|
48
|
-
→ execution → verify → review → completion
|
|
49
|
-
→ Reporter.emit()
|
|
50
|
-
→ registry.teardownAll()
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Key Source Directories
|
|
54
|
-
|
|
55
|
-
| Directory | Purpose |
|
|
56
|
-
|:----------|:--------|
|
|
57
|
-
| `src/execution/` | Runner loop, agent adapters, escalation, lifecycle hooks |
|
|
58
|
-
| `src/execution/escalation/` | Tier escalation on repeated failures |
|
|
59
|
-
| `src/pipeline/stages/` | One file per pipeline stage |
|
|
60
|
-
| `src/pipeline/subscribers/` | Event-driven hooks (interaction, hooks.ts) |
|
|
61
|
-
| `src/routing/` | Model-tier routing — keyword, LLM, plugin chain |
|
|
62
|
-
| `src/routing/strategies/` | keyword.ts, llm.ts, llm-prompts.ts |
|
|
63
|
-
| `src/interaction/` | Interaction triggers + plugins (Auto, Telegram, Webhook) |
|
|
64
|
-
| `src/plugins/` | Plugin system — loader, registry, validator |
|
|
65
|
-
| `src/verification/` | Test execution, smart runner, scoped runner |
|
|
66
|
-
| `src/metrics/` | StoryMetrics, aggregator, tracker |
|
|
67
|
-
| `src/config/` | Config schema + layered loader (global → project) |
|
|
68
|
-
| `src/agents/adapters/` | Agent integrations (Claude Code) |
|
|
69
|
-
| `src/cli/` + `src/commands/` | CLI commands — check both locations |
|
|
70
|
-
| `src/prd/` | PRD types, loader, story state machine |
|
|
71
|
-
| `src/hooks/` | Lifecycle hook wiring |
|
|
72
|
-
| `src/constitution/` | Constitution loader + injection |
|
|
73
|
-
| `src/analyze/` | `nax analyze` — story classifier |
|
|
74
|
-
|
|
75
|
-
### Plugin Extension Points
|
|
76
|
-
|
|
77
|
-
| Interface | Loaded By | Purpose |
|
|
78
|
-
|:----------|:----------|:--------|
|
|
79
|
-
| `IContextProvider` | `context.ts` stage | Inject context into agent prompts |
|
|
80
|
-
| `IReviewer` | Review stage | Post-verify quality checks |
|
|
81
|
-
| `IReporter` | Runner | onRunStart / onStoryComplete / onRunEnd events |
|
|
82
|
-
| `IRoutingStrategy` | Router chain | Override model-tier routing |
|
|
83
|
-
|
|
84
|
-
### Config
|
|
85
|
-
|
|
86
|
-
- Global: `~/.nax/config.json` → Project: `<workdir>/nax/config.json`
|
|
87
|
-
- Schema: `src/config/schema.ts` — no hardcoded flags or credentials anywhere
|
|
88
|
-
|
|
89
|
-
## Workflow Protocol
|
|
90
|
-
|
|
91
|
-
1. **Explore first**: use `grep`, `cat`, and solograph MCP to understand context before writing code.
|
|
92
|
-
2. **Plan complex tasks**: for multi-file changes, write a short plan before implementing.
|
|
93
|
-
3. **Implement in small chunks**: one logical concern per commit.
|
|
94
|
-
|
|
95
|
-
## Code Intelligence (Solograph MCP) — MANDATORY
|
|
96
|
-
|
|
97
|
-
**Always use solograph MCP tools before writing code or analyzing architecture.** Do NOT use `web_search` or `kb_search` as substitutes.
|
|
98
|
-
|
|
99
|
-
### Tool Selection Guide
|
|
100
|
-
|
|
101
|
-
| Tool | Capability | When to Use | Availability |
|
|
102
|
-
|:-----|:-----------|:-----------|:-------------|
|
|
103
|
-
| `codegraph_query` | Structural queries (Cypher) — find calls, dependencies, imports | **Preferred for dependency analysis, call tracing, symbol lookup** | ✅ Always works (in-memory graph) |
|
|
104
|
-
| `project_code_search` | Semantic search (Redis vector DB) — pattern matching by meaning | Natural language queries like "find auth patterns" | ⚠️ Requires explicit `project_code_reindex` + Redis daemon |
|
|
105
|
-
| `codegraph_explain` | Architecture overview for unfamiliar subsystems | Understand module relationships before major changes | ✅ Always works |
|
|
106
|
-
| `project_code_reindex` | Index project for semantic search | After creating/deleting source files | ✅ Always works |
|
|
107
|
-
|
|
108
|
-
### Recommended Workflow
|
|
109
|
-
|
|
110
|
-
For nax, **prefer `codegraph_query`** for routine tasks:
|
|
111
|
-
- Finding where functions are called (`calculateAggregateMetrics` called by `status-cost.ts`)
|
|
112
|
-
- Analyzing dependencies before refactoring
|
|
113
|
-
- Tracing import/export chains
|
|
114
|
-
- Querying symbol definitions and relationships
|
|
115
|
-
|
|
116
|
-
**Use `project_code_search` only if:**
|
|
117
|
-
- You need semantic similarity ("find authentication patterns")
|
|
118
|
-
- Redis is indexed and running (not guaranteed in all sessions)
|
|
119
|
-
|
|
120
|
-
### Example Queries
|
|
121
|
-
|
|
122
|
-
```cypher
|
|
123
|
-
-- Find files calling calculateAggregateMetrics
|
|
124
|
-
MATCH (f:File)-[:CALLS]->(s:Symbol {name: "calculateAggregateMetrics"})
|
|
125
|
-
RETURN f.path
|
|
126
|
-
|
|
127
|
-
-- Find all imports of aggregator.ts
|
|
128
|
-
MATCH (f:File)-[:IMPORTS]->(target:File {path: "src/metrics/aggregator.ts"})
|
|
129
|
-
RETURN f.path
|
|
130
|
-
|
|
131
|
-
-- Find symbols defined in a file
|
|
132
|
-
MATCH (f:File {path: "src/metrics/aggregator.ts"})-[:DEFINES]->(s:Symbol)
|
|
133
|
-
RETURN s.name, s.type
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
## Coding Standards & Forbidden Patterns
|
|
137
|
-
|
|
138
|
-
Full rules in `.claude/rules/` (loaded automatically):
|
|
139
|
-
|
|
140
|
-
- `01-project-conventions.md` — Bun-native APIs, 400-line limit, barrel imports, logging, commits
|
|
141
|
-
- `02-test-architecture.md` — directory mirroring, placement rules, file naming
|
|
142
|
-
- `03-test-writing.md` — `_deps` injection pattern, mock discipline, CI guards
|
|
143
|
-
- `04-forbidden-patterns.md` — banned APIs and test anti-patterns with alternatives
|
package/US-007-IMPLEMENTATION.md
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# US-007 Implementation Summary
|
|
2
|
-
|
|
3
|
-
## Story: Read plugin config entries from nax config.json
|
|
4
|
-
|
|
5
|
-
**Status:** ✅ COMPLETE
|
|
6
|
-
|
|
7
|
-
## Implementation Details
|
|
8
|
-
|
|
9
|
-
The functionality described in US-007 was already implemented in the codebase. This document verifies that all acceptance criteria are met.
|
|
10
|
-
|
|
11
|
-
### Acceptance Criteria Verification
|
|
12
|
-
|
|
13
|
-
#### ✅ AC1: plugins[] from config.json are passed to loadPlugins() as configPlugins parameter
|
|
14
|
-
|
|
15
|
-
**Implementation:**
|
|
16
|
-
- `src/config/loader.ts`: Config schema includes `plugins?: PluginConfigEntry[]` (line 369)
|
|
17
|
-
- `src/execution/runner.ts`: Reads `config.plugins` and passes to `loadPlugins()` (line 201)
|
|
18
|
-
- `src/execution/run-lifecycle.ts`: Reads `config.plugins` and passes to `loadPlugins()` (line 88)
|
|
19
|
-
- `src/cli/plugins.ts`: Reads `config.plugins` and passes to `loadPlugins()` (line 22)
|
|
20
|
-
|
|
21
|
-
**Test Coverage:**
|
|
22
|
-
- `test/integration/config-loader.test.ts`: New tests verify plugins[] are loaded from config.json
|
|
23
|
-
- `test/integration/plugins/config-integration.test.ts`: End-to-end test with realistic scenario
|
|
24
|
-
- `test/integration/plugins/config-resolution.test.ts`: Comprehensive path resolution tests
|
|
25
|
-
|
|
26
|
-
#### ✅ AC2: Relative module paths in plugins[].module are resolved relative to project root
|
|
27
|
-
|
|
28
|
-
**Implementation:**
|
|
29
|
-
- `src/plugins/loader.ts`: `resolveModulePath()` function (lines 173-186)
|
|
30
|
-
- Relative paths (starting with `./` or `../`) are resolved relative to `projectRoot`
|
|
31
|
-
- Uses `path.resolve(projectRoot, modulePath)` for relative paths
|
|
32
|
-
|
|
33
|
-
**Test Coverage:**
|
|
34
|
-
- `test/integration/plugins/config-resolution.test.ts`:
|
|
35
|
-
- "AC2: Relative module paths resolved relative to project root"
|
|
36
|
-
- "resolves ./custom-plugins/plugin.ts relative to project root"
|
|
37
|
-
|
|
38
|
-
#### ✅ AC3: Absolute module paths and npm package names work as-is
|
|
39
|
-
|
|
40
|
-
**Implementation:**
|
|
41
|
-
- `src/plugins/loader.ts`: `resolveModulePath()` function (lines 173-186)
|
|
42
|
-
- Absolute paths: `path.isAbsolute(modulePath)` returns true → no resolution needed
|
|
43
|
-
- NPM packages: No leading `./` or `../` → treated as package name, passed as-is
|
|
44
|
-
|
|
45
|
-
**Test Coverage:**
|
|
46
|
-
- `test/integration/plugins/config-resolution.test.ts`:
|
|
47
|
-
- "AC3: Absolute paths and npm packages work as-is"
|
|
48
|
-
- "resolves npm package names as-is"
|
|
49
|
-
- "resolves absolute paths as-is"
|
|
50
|
-
|
|
51
|
-
#### ✅ AC4: If a plugin module cannot be found, a clear error message is logged with the path tried
|
|
52
|
-
|
|
53
|
-
**Implementation:**
|
|
54
|
-
- `src/plugins/loader.ts`: `loadAndValidatePlugin()` function (lines 225-241)
|
|
55
|
-
- Catches import errors and provides helpful error messages
|
|
56
|
-
- Lines 230-235: Special handling for "Cannot find module" and "ENOENT" errors
|
|
57
|
-
- Logs both original path and attempted resolved path
|
|
58
|
-
- Provides guidance: "Ensure the module exists and the path is correct (relative paths are resolved from project root)"
|
|
59
|
-
|
|
60
|
-
**Test Coverage:**
|
|
61
|
-
- `test/integration/plugins/config-resolution.test.ts`:
|
|
62
|
-
- "AC4: Clear error message when plugin module not found (relative path)"
|
|
63
|
-
- "AC4: Clear error message when plugin module not found (npm package)"
|
|
64
|
-
|
|
65
|
-
**Example Error Output:**
|
|
66
|
-
```
|
|
67
|
-
[nax] Failed to load plugin module './custom-plugins/missing.ts'
|
|
68
|
-
[nax] Attempted path: /path/to/project/custom-plugins/missing.ts
|
|
69
|
-
[nax] Ensure the module exists and the path is correct (relative paths are resolved from project root)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
#### ✅ AC5: Plugin-specific config (plugins[].config) is passed to the plugin's setup() function
|
|
73
|
-
|
|
74
|
-
**Implementation:**
|
|
75
|
-
- `src/plugins/loader.ts`: `loadAndValidatePlugin()` function (lines 214-221)
|
|
76
|
-
- Calls plugin's `setup()` function with the provided config
|
|
77
|
-
- Config is passed as the first parameter: `await validated.setup(config)`
|
|
78
|
-
|
|
79
|
-
**Test Coverage:**
|
|
80
|
-
- `test/integration/plugins/config-integration.test.ts`:
|
|
81
|
-
- "realistic scenario: project with relative plugin paths in config"
|
|
82
|
-
- Verifies that plugin configs are written to tracker file via setup()
|
|
83
|
-
- `test/integration/plugins/config-resolution.test.ts`:
|
|
84
|
-
- "AC5: Plugin-specific config passed to setup() function"
|
|
85
|
-
|
|
86
|
-
## Test Results
|
|
87
|
-
|
|
88
|
-
All plugin-related tests pass:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
$ bun test test/integration/plugins/ test/integration/config-loader.test.ts test/integration/runner-plugin-integration.test.ts
|
|
92
|
-
|
|
93
|
-
✓ 101 tests passed
|
|
94
|
-
✓ 154 expect() calls
|
|
95
|
-
✓ 0 failures
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### New Tests Added
|
|
99
|
-
|
|
100
|
-
Added 4 new tests to `test/integration/config-loader.test.ts`:
|
|
101
|
-
|
|
102
|
-
1. **"loads plugins[] from config.json"** - Verifies plugins array is loaded correctly
|
|
103
|
-
2. **"handles missing plugins[] array"** - Verifies graceful handling of missing plugins
|
|
104
|
-
3. **"merges plugins[] from global and project config"** - Verifies config merging behavior
|
|
105
|
-
4. **"validates plugin config entries have required fields"** - Verifies validation works
|
|
106
|
-
|
|
107
|
-
## Files Modified
|
|
108
|
-
|
|
109
|
-
1. **test/integration/config-loader.test.ts**
|
|
110
|
-
- Added new test suite: "Config Loader - Plugin Configuration (US-007)"
|
|
111
|
-
- Added 4 tests covering config loading scenarios
|
|
112
|
-
- Tests verify plugins[] array is properly loaded and validated
|
|
113
|
-
|
|
114
|
-
## Architecture Overview
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
config.json
|
|
118
|
-
└─> loadConfig() (src/config/loader.ts)
|
|
119
|
-
└─> NaxConfig { plugins?: PluginConfigEntry[] }
|
|
120
|
-
└─> Runner/CLI reads config.plugins
|
|
121
|
-
└─> loadPlugins(globalDir, projectDir, configPlugins, projectRoot)
|
|
122
|
-
└─> resolveModulePath() for each entry
|
|
123
|
-
└─> loadAndValidatePlugin()
|
|
124
|
-
└─> import module
|
|
125
|
-
└─> validatePlugin()
|
|
126
|
-
└─> plugin.setup(config)
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## Conclusion
|
|
130
|
-
|
|
131
|
-
All acceptance criteria for US-007 are met. The implementation correctly:
|
|
132
|
-
1. Reads plugins[] from config.json
|
|
133
|
-
2. Passes them to loadPlugins() as configPlugins parameter
|
|
134
|
-
3. Resolves relative paths relative to project root
|
|
135
|
-
4. Handles absolute paths and npm packages correctly
|
|
136
|
-
5. Provides clear error messages when modules are not found
|
|
137
|
-
6. Passes plugin-specific config to setup() functions
|
|
138
|
-
|
|
139
|
-
The feature is production-ready and fully tested.
|
package/biome.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
|
3
|
-
"organizeImports": { "enabled": true },
|
|
4
|
-
"linter": {
|
|
5
|
-
"enabled": true,
|
|
6
|
-
"rules": { "recommended": true }
|
|
7
|
-
},
|
|
8
|
-
"formatter": {
|
|
9
|
-
"enabled": true,
|
|
10
|
-
"indentStyle": "space",
|
|
11
|
-
"indentWidth": 2,
|
|
12
|
-
"lineWidth": 120
|
|
13
|
-
}
|
|
14
|
-
}
|