@nathapp/nax 0.50.3 → 0.51.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 +30 -0
- package/dist/nax.js +393 -197
- 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,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* System-level precheck implementations
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { existsSync, statSync } from "node:fs";
|
|
6
|
-
import type { NaxConfig } from "../config";
|
|
7
|
-
import type { Check } from "./types";
|
|
8
|
-
|
|
9
|
-
/** Check if dependencies are installed (language-aware). Detects: node_modules, target, venv, vendor */
|
|
10
|
-
export async function checkDependenciesInstalled(workdir: string): Promise<Check> {
|
|
11
|
-
const depPaths = [
|
|
12
|
-
{ path: "node_modules" },
|
|
13
|
-
{ path: "target" },
|
|
14
|
-
{ path: "venv" },
|
|
15
|
-
{ path: ".venv" },
|
|
16
|
-
{ path: "vendor" },
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
const found: string[] = [];
|
|
20
|
-
for (const { path } of depPaths) {
|
|
21
|
-
const fullPath = `${workdir}/${path}`;
|
|
22
|
-
if (existsSync(fullPath)) {
|
|
23
|
-
const stats = statSync(fullPath);
|
|
24
|
-
if (stats.isDirectory()) {
|
|
25
|
-
found.push(path);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const passed = found.length > 0;
|
|
31
|
-
|
|
32
|
-
return {
|
|
33
|
-
name: "dependencies-installed",
|
|
34
|
-
tier: "blocker",
|
|
35
|
-
passed,
|
|
36
|
-
message: passed ? `Dependencies found: ${found.join(", ")}` : "No dependency directories detected",
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Check if test command is configured. Downgraded to warning since the verify stage will catch actual failures. */
|
|
41
|
-
export async function checkTestCommand(config: NaxConfig): Promise<Check> {
|
|
42
|
-
const testCommand = config.execution.testCommand || (config.quality?.commands?.test as string | undefined);
|
|
43
|
-
|
|
44
|
-
if (!testCommand || testCommand === null) {
|
|
45
|
-
return {
|
|
46
|
-
name: "test-command-works",
|
|
47
|
-
tier: "warning",
|
|
48
|
-
passed: true,
|
|
49
|
-
message: "Test command not configured (will use default: bun test)",
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
name: "test-command-works",
|
|
55
|
-
tier: "warning",
|
|
56
|
-
passed: true,
|
|
57
|
-
message: `Test command configured: ${testCommand}`,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Check if lint command is configured. Downgraded to warning since the verify stage will catch actual failures. */
|
|
62
|
-
export async function checkLintCommand(config: NaxConfig): Promise<Check> {
|
|
63
|
-
const lintCommand = config.execution.lintCommand;
|
|
64
|
-
|
|
65
|
-
if (!lintCommand || lintCommand === null) {
|
|
66
|
-
return {
|
|
67
|
-
name: "lint-command-works",
|
|
68
|
-
tier: "warning",
|
|
69
|
-
passed: true,
|
|
70
|
-
message: "Lint command not configured (skipped)",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return {
|
|
75
|
-
name: "lint-command-works",
|
|
76
|
-
tier: "warning",
|
|
77
|
-
passed: true,
|
|
78
|
-
message: `Lint command configured: ${lintCommand}`,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** Check if typecheck command is configured. Downgraded to warning since the verify stage will catch actual failures. */
|
|
83
|
-
export async function checkTypecheckCommand(config: NaxConfig): Promise<Check> {
|
|
84
|
-
const typecheckCommand = config.execution.typecheckCommand;
|
|
85
|
-
|
|
86
|
-
if (!typecheckCommand || typecheckCommand === null) {
|
|
87
|
-
return {
|
|
88
|
-
name: "typecheck-command-works",
|
|
89
|
-
tier: "warning",
|
|
90
|
-
passed: true,
|
|
91
|
-
message: "Typecheck command not configured (skipped)",
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
name: "typecheck-command-works",
|
|
97
|
-
tier: "warning",
|
|
98
|
-
passed: true,
|
|
99
|
-
message: `Typecheck command configured: ${typecheckCommand}`,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Precheck Tier 2 Warnings
|
|
3
|
-
*
|
|
4
|
-
* Extracted from checks.ts: individual check implementations for Tier 2 warnings.
|
|
5
|
-
* These checks produce warnings but do not block execution.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { existsSync } from "node:fs";
|
|
9
|
-
import { isAbsolute } from "node:path";
|
|
10
|
-
import type { NaxConfig } from "../config";
|
|
11
|
-
import type { PRD } from "../prd/types";
|
|
12
|
-
import type { Check } from "./types";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Check if CLAUDE.md exists.
|
|
16
|
-
*/
|
|
17
|
-
export async function checkClaudeMdExists(workdir: string): Promise<Check> {
|
|
18
|
-
const claudeMdPath = `${workdir}/CLAUDE.md`;
|
|
19
|
-
const passed = existsSync(claudeMdPath);
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
name: "claude-md-exists",
|
|
23
|
-
tier: "warning",
|
|
24
|
-
passed,
|
|
25
|
-
message: passed ? "CLAUDE.md found" : "CLAUDE.md not found (recommended for project context)",
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Check if disk space is above 1GB.
|
|
31
|
-
*/
|
|
32
|
-
export async function checkDiskSpace(): Promise<Check> {
|
|
33
|
-
const proc = Bun.spawn(["df", "-k", "."], {
|
|
34
|
-
stdout: "pipe",
|
|
35
|
-
stderr: "pipe",
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const output = await new Response(proc.stdout).text();
|
|
39
|
-
const exitCode = await proc.exited;
|
|
40
|
-
|
|
41
|
-
if (exitCode !== 0) {
|
|
42
|
-
return {
|
|
43
|
-
name: "disk-space-sufficient",
|
|
44
|
-
tier: "warning",
|
|
45
|
-
passed: false,
|
|
46
|
-
message: "Unable to check disk space",
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Parse df output (second line, fourth column is available space in KB)
|
|
51
|
-
const lines = output.trim().split("\n");
|
|
52
|
-
if (lines.length < 2) {
|
|
53
|
-
return {
|
|
54
|
-
name: "disk-space-sufficient",
|
|
55
|
-
tier: "warning",
|
|
56
|
-
passed: false,
|
|
57
|
-
message: "Unable to parse disk space output",
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const parts = lines[1].split(/\s+/);
|
|
62
|
-
const availableKB = Number.parseInt(parts[3], 10);
|
|
63
|
-
const availableGB = availableKB / 1024 / 1024;
|
|
64
|
-
const passed = availableGB >= 1;
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
name: "disk-space-sufficient",
|
|
68
|
-
tier: "warning",
|
|
69
|
-
passed,
|
|
70
|
-
message: passed
|
|
71
|
-
? `Disk space: ${availableGB.toFixed(2)}GB available`
|
|
72
|
-
: `Low disk space: ${availableGB.toFixed(2)}GB available`,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Check if PRD has pending stories.
|
|
78
|
-
*/
|
|
79
|
-
export async function checkPendingStories(prd: PRD): Promise<Check> {
|
|
80
|
-
const pendingStories = prd.userStories.filter((s) => s.status === "pending");
|
|
81
|
-
const passed = pendingStories.length > 0;
|
|
82
|
-
|
|
83
|
-
return {
|
|
84
|
-
name: "has-pending-stories",
|
|
85
|
-
tier: "warning",
|
|
86
|
-
passed,
|
|
87
|
-
message: passed ? `${pendingStories.length} pending stories found` : "no pending stories to execute",
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Check if optional commands are configured.
|
|
93
|
-
*/
|
|
94
|
-
export async function checkOptionalCommands(config: NaxConfig, workdir: string): Promise<Check> {
|
|
95
|
-
const missing: string[] = [];
|
|
96
|
-
|
|
97
|
-
// Check quality.commands first, then execution config, then package.json fallback
|
|
98
|
-
const hasLint =
|
|
99
|
-
config.quality?.commands?.lint || config.execution?.lintCommand || (await hasPackageScript(workdir, "lint"));
|
|
100
|
-
const hasTypecheck =
|
|
101
|
-
config.quality?.commands?.typecheck ||
|
|
102
|
-
config.execution?.typecheckCommand ||
|
|
103
|
-
(await hasPackageScript(workdir, "typecheck"));
|
|
104
|
-
|
|
105
|
-
if (!hasLint) missing.push("lint");
|
|
106
|
-
if (!hasTypecheck) missing.push("typecheck");
|
|
107
|
-
|
|
108
|
-
const passed = missing.length === 0;
|
|
109
|
-
|
|
110
|
-
return {
|
|
111
|
-
name: "optional-commands-configured",
|
|
112
|
-
tier: "warning",
|
|
113
|
-
passed,
|
|
114
|
-
message: passed ? "All optional commands configured" : `Optional commands not configured: ${missing.join(", ")}`,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** Check if package.json has a script by name */
|
|
119
|
-
async function hasPackageScript(workdir: string, name: string): Promise<boolean> {
|
|
120
|
-
try {
|
|
121
|
-
const pkg = await Bun.file(`${workdir}/package.json`).json();
|
|
122
|
-
return Boolean(pkg?.scripts?.[name]);
|
|
123
|
-
} catch {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Check if .gitignore covers nax runtime files.
|
|
130
|
-
* Patterns: nax.lock, runs/, status.json, .nax-pids, .nax-wt/
|
|
131
|
-
*/
|
|
132
|
-
export async function checkGitignoreCoversNax(workdir: string): Promise<Check> {
|
|
133
|
-
const gitignorePath = `${workdir}/.gitignore`;
|
|
134
|
-
const exists = existsSync(gitignorePath);
|
|
135
|
-
|
|
136
|
-
if (!exists) {
|
|
137
|
-
return {
|
|
138
|
-
name: "gitignore-covers-nax",
|
|
139
|
-
tier: "warning",
|
|
140
|
-
passed: false,
|
|
141
|
-
message: ".gitignore not found",
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const file = Bun.file(gitignorePath);
|
|
146
|
-
const content = await file.text();
|
|
147
|
-
const patterns = [
|
|
148
|
-
"nax.lock",
|
|
149
|
-
"nax/**/runs/",
|
|
150
|
-
"nax/metrics.json",
|
|
151
|
-
"nax/features/*/status.json",
|
|
152
|
-
".nax-pids",
|
|
153
|
-
".nax-wt/",
|
|
154
|
-
];
|
|
155
|
-
const missing = patterns.filter((pattern) => !content.includes(pattern));
|
|
156
|
-
const passed = missing.length === 0;
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
name: "gitignore-covers-nax",
|
|
160
|
-
tier: "warning",
|
|
161
|
-
passed,
|
|
162
|
-
message: passed ? ".gitignore covers nax runtime files" : `.gitignore missing patterns: ${missing.join(", ")}`,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Check if configured prompt override files exist.
|
|
168
|
-
*
|
|
169
|
-
* For each role in config.prompts.overrides, verify the file exists.
|
|
170
|
-
* Emits one warning per missing file (non-blocking).
|
|
171
|
-
* Returns empty array if config.prompts is absent or overrides is empty.
|
|
172
|
-
*
|
|
173
|
-
* @param config - nax configuration
|
|
174
|
-
* @param workdir - working directory for resolving relative paths
|
|
175
|
-
* @returns Array of warning checks (one per missing file)
|
|
176
|
-
*/
|
|
177
|
-
export async function checkPromptOverrideFiles(config: NaxConfig, workdir: string): Promise<Check[]> {
|
|
178
|
-
// Skip if prompts config is absent or overrides is empty
|
|
179
|
-
if (!config.prompts?.overrides || Object.keys(config.prompts.overrides).length === 0) {
|
|
180
|
-
return [];
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const checks: Check[] = [];
|
|
184
|
-
|
|
185
|
-
// Check each override file
|
|
186
|
-
for (const [role, relativePath] of Object.entries(config.prompts.overrides)) {
|
|
187
|
-
const resolvedPath = `${workdir}/${relativePath}`;
|
|
188
|
-
const exists = existsSync(resolvedPath);
|
|
189
|
-
|
|
190
|
-
if (!exists) {
|
|
191
|
-
checks.push({
|
|
192
|
-
name: `prompt-override-${role}`,
|
|
193
|
-
tier: "warning",
|
|
194
|
-
passed: false,
|
|
195
|
-
message: `Prompt override file not found for role ${role}: ${resolvedPath}`,
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return checks;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Check if HOME env is set and is an absolute path.
|
|
205
|
-
* An unexpanded "~" in HOME causes agent spawns to create a literal ~/
|
|
206
|
-
* directory inside the repo cwd instead of resolving to the user home dir.
|
|
207
|
-
*/
|
|
208
|
-
export async function checkHomeEnvValid(): Promise<Check> {
|
|
209
|
-
const home = process.env.HOME ?? "";
|
|
210
|
-
const passed = home !== "" && isAbsolute(home);
|
|
211
|
-
return {
|
|
212
|
-
name: "home-env-valid",
|
|
213
|
-
tier: "warning",
|
|
214
|
-
passed,
|
|
215
|
-
message: passed
|
|
216
|
-
? `HOME env is valid: ${home}`
|
|
217
|
-
: home === ""
|
|
218
|
-
? "HOME env is not set — agent may write files to unexpected locations"
|
|
219
|
-
: `HOME env is not an absolute path ("${home}") — may cause literal "~" directories in repo`,
|
|
220
|
-
};
|
|
221
|
-
}
|
package/src/precheck/checks.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Precheck implementation functions
|
|
3
|
-
*
|
|
4
|
-
* Re-export barrel for backward compatibility.
|
|
5
|
-
* Tier 1 blockers: ./checks-blockers
|
|
6
|
-
* Tier 2 warnings: ./checks-warnings
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// Tier 1 Blockers
|
|
10
|
-
export {
|
|
11
|
-
checkGitRepoExists,
|
|
12
|
-
checkWorkingTreeClean,
|
|
13
|
-
checkStaleLock,
|
|
14
|
-
checkPRDValid,
|
|
15
|
-
checkClaudeCLI,
|
|
16
|
-
checkAgentCLI,
|
|
17
|
-
checkDependenciesInstalled,
|
|
18
|
-
checkTestCommand,
|
|
19
|
-
checkLintCommand,
|
|
20
|
-
checkTypecheckCommand,
|
|
21
|
-
checkGitUserConfigured,
|
|
22
|
-
} from "./checks-blockers";
|
|
23
|
-
|
|
24
|
-
// Tier 2 Warnings
|
|
25
|
-
export {
|
|
26
|
-
checkClaudeMdExists,
|
|
27
|
-
checkDiskSpace,
|
|
28
|
-
checkPendingStories,
|
|
29
|
-
checkOptionalCommands,
|
|
30
|
-
checkGitignoreCoversNax,
|
|
31
|
-
checkHomeEnvValid,
|
|
32
|
-
checkPromptOverrideFiles,
|
|
33
|
-
} from "./checks-warnings";
|
|
34
|
-
|
|
35
|
-
// Agent checks
|
|
36
|
-
export { checkMultiAgentHealth } from "./checks-agents";
|