@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.
Files changed (353) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +177 -104
  3. package/dist/nax.js +417 -213
  4. package/package.json +1 -3
  5. package/bin/nax.ts +0 -1195
  6. package/src/acceptance/fix-generator.ts +0 -322
  7. package/src/acceptance/generator.ts +0 -415
  8. package/src/acceptance/index.ts +0 -42
  9. package/src/acceptance/refinement.ts +0 -224
  10. package/src/acceptance/templates/cli.ts +0 -47
  11. package/src/acceptance/templates/component.ts +0 -78
  12. package/src/acceptance/templates/e2e.ts +0 -43
  13. package/src/acceptance/templates/index.ts +0 -21
  14. package/src/acceptance/templates/snapshot.ts +0 -50
  15. package/src/acceptance/templates/unit.ts +0 -48
  16. package/src/acceptance/types.ts +0 -138
  17. package/src/agents/acp/adapter.ts +0 -888
  18. package/src/agents/acp/cost.ts +0 -9
  19. package/src/agents/acp/index.ts +0 -7
  20. package/src/agents/acp/interaction-bridge.ts +0 -126
  21. package/src/agents/acp/parser.ts +0 -119
  22. package/src/agents/acp/spawn-client.ts +0 -373
  23. package/src/agents/acp/types.ts +0 -22
  24. package/src/agents/aider/adapter.ts +0 -135
  25. package/src/agents/claude/adapter.ts +0 -258
  26. package/src/agents/claude/complete.ts +0 -80
  27. package/src/agents/claude/cost.ts +0 -16
  28. package/src/agents/claude/execution.ts +0 -215
  29. package/src/agents/claude/index.ts +0 -3
  30. package/src/agents/claude/interactive.ts +0 -77
  31. package/src/agents/claude/plan.ts +0 -179
  32. package/src/agents/codex/adapter.ts +0 -153
  33. package/src/agents/cost/calculate.ts +0 -154
  34. package/src/agents/cost/index.ts +0 -10
  35. package/src/agents/cost/parse.ts +0 -97
  36. package/src/agents/cost/pricing.ts +0 -59
  37. package/src/agents/cost/types.ts +0 -45
  38. package/src/agents/gemini/adapter.ts +0 -177
  39. package/src/agents/index.ts +0 -18
  40. package/src/agents/opencode/adapter.ts +0 -106
  41. package/src/agents/registry.ts +0 -136
  42. package/src/agents/shared/decompose.ts +0 -154
  43. package/src/agents/shared/model-resolution.ts +0 -43
  44. package/src/agents/shared/types-extended.ts +0 -164
  45. package/src/agents/shared/validation.ts +0 -69
  46. package/src/agents/shared/version-detection.ts +0 -109
  47. package/src/agents/types.ts +0 -205
  48. package/src/analyze/classifier.ts +0 -282
  49. package/src/analyze/index.ts +0 -16
  50. package/src/analyze/scanner.ts +0 -171
  51. package/src/analyze/types.ts +0 -51
  52. package/src/cli/accept.ts +0 -108
  53. package/src/cli/agents.ts +0 -87
  54. package/src/cli/analyze-parser.ts +0 -291
  55. package/src/cli/analyze.ts +0 -352
  56. package/src/cli/config-descriptions.ts +0 -219
  57. package/src/cli/config-diff.ts +0 -103
  58. package/src/cli/config-display.ts +0 -285
  59. package/src/cli/config-get.ts +0 -55
  60. package/src/cli/config.ts +0 -14
  61. package/src/cli/constitution.ts +0 -17
  62. package/src/cli/diagnose-analysis.ts +0 -159
  63. package/src/cli/diagnose-formatter.ts +0 -87
  64. package/src/cli/diagnose.ts +0 -203
  65. package/src/cli/generate.ts +0 -250
  66. package/src/cli/index.ts +0 -42
  67. package/src/cli/init-context.ts +0 -405
  68. package/src/cli/init-detect.ts +0 -303
  69. package/src/cli/init.ts +0 -296
  70. package/src/cli/interact.ts +0 -295
  71. package/src/cli/plan.ts +0 -509
  72. package/src/cli/plugins.ts +0 -122
  73. package/src/cli/prompts-export.ts +0 -58
  74. package/src/cli/prompts-init.ts +0 -200
  75. package/src/cli/prompts-main.ts +0 -183
  76. package/src/cli/prompts-shared.ts +0 -70
  77. package/src/cli/prompts-tdd.ts +0 -88
  78. package/src/cli/prompts.ts +0 -17
  79. package/src/cli/runs.ts +0 -174
  80. package/src/cli/status-cost.ts +0 -151
  81. package/src/cli/status-features.ts +0 -405
  82. package/src/cli/status.ts +0 -13
  83. package/src/commands/common.ts +0 -171
  84. package/src/commands/diagnose.ts +0 -17
  85. package/src/commands/index.ts +0 -9
  86. package/src/commands/logs-formatter.ts +0 -201
  87. package/src/commands/logs-reader.ts +0 -171
  88. package/src/commands/logs.ts +0 -103
  89. package/src/commands/precheck.ts +0 -86
  90. package/src/commands/runs.ts +0 -220
  91. package/src/commands/unlock.ts +0 -96
  92. package/src/config/defaults.ts +0 -218
  93. package/src/config/index.ts +0 -22
  94. package/src/config/loader.ts +0 -143
  95. package/src/config/merge.ts +0 -106
  96. package/src/config/merger.ts +0 -147
  97. package/src/config/path-security.ts +0 -121
  98. package/src/config/paths.ts +0 -27
  99. package/src/config/permissions.ts +0 -63
  100. package/src/config/runtime-types.ts +0 -522
  101. package/src/config/schema-types.ts +0 -53
  102. package/src/config/schema.ts +0 -60
  103. package/src/config/schemas.ts +0 -426
  104. package/src/config/test-strategy.ts +0 -71
  105. package/src/config/types.ts +0 -57
  106. package/src/config/validate.ts +0 -103
  107. package/src/constitution/generator.ts +0 -158
  108. package/src/constitution/generators/aider.ts +0 -41
  109. package/src/constitution/generators/claude.ts +0 -35
  110. package/src/constitution/generators/cursor.ts +0 -36
  111. package/src/constitution/generators/opencode.ts +0 -38
  112. package/src/constitution/generators/types.ts +0 -33
  113. package/src/constitution/generators/windsurf.ts +0 -36
  114. package/src/constitution/index.ts +0 -11
  115. package/src/constitution/loader.ts +0 -121
  116. package/src/constitution/types.ts +0 -31
  117. package/src/context/auto-detect.ts +0 -228
  118. package/src/context/builder.ts +0 -299
  119. package/src/context/elements.ts +0 -122
  120. package/src/context/formatter.ts +0 -107
  121. package/src/context/generator.ts +0 -343
  122. package/src/context/generators/aider.ts +0 -34
  123. package/src/context/generators/claude.ts +0 -28
  124. package/src/context/generators/codex.ts +0 -28
  125. package/src/context/generators/cursor.ts +0 -28
  126. package/src/context/generators/gemini.ts +0 -28
  127. package/src/context/generators/opencode.ts +0 -30
  128. package/src/context/generators/windsurf.ts +0 -28
  129. package/src/context/greenfield.ts +0 -114
  130. package/src/context/index.ts +0 -34
  131. package/src/context/injector.ts +0 -279
  132. package/src/context/parent-context.ts +0 -39
  133. package/src/context/test-scanner.ts +0 -370
  134. package/src/context/types.ts +0 -98
  135. package/src/decompose/apply.ts +0 -50
  136. package/src/decompose/builder.ts +0 -181
  137. package/src/decompose/index.ts +0 -8
  138. package/src/decompose/sections/codebase.ts +0 -26
  139. package/src/decompose/sections/constraints.ts +0 -32
  140. package/src/decompose/sections/index.ts +0 -4
  141. package/src/decompose/sections/sibling-stories.ts +0 -25
  142. package/src/decompose/sections/target-story.ts +0 -31
  143. package/src/decompose/types.ts +0 -55
  144. package/src/decompose/validators/complexity.ts +0 -45
  145. package/src/decompose/validators/coverage.ts +0 -134
  146. package/src/decompose/validators/dependency.ts +0 -91
  147. package/src/decompose/validators/index.ts +0 -35
  148. package/src/decompose/validators/overlap.ts +0 -128
  149. package/src/errors.ts +0 -67
  150. package/src/execution/batching.ts +0 -157
  151. package/src/execution/crash-heartbeat.ts +0 -77
  152. package/src/execution/crash-recovery.ts +0 -79
  153. package/src/execution/crash-signals.ts +0 -165
  154. package/src/execution/crash-writer.ts +0 -154
  155. package/src/execution/deferred-review.ts +0 -105
  156. package/src/execution/dry-run.ts +0 -81
  157. package/src/execution/escalation/escalation.ts +0 -46
  158. package/src/execution/escalation/index.ts +0 -13
  159. package/src/execution/escalation/tier-escalation.ts +0 -346
  160. package/src/execution/escalation/tier-outcome.ts +0 -143
  161. package/src/execution/executor-types.ts +0 -73
  162. package/src/execution/helpers.ts +0 -38
  163. package/src/execution/index.ts +0 -27
  164. package/src/execution/iteration-runner.ts +0 -160
  165. package/src/execution/lifecycle/acceptance-loop.ts +0 -309
  166. package/src/execution/lifecycle/headless-formatter.ts +0 -83
  167. package/src/execution/lifecycle/index.ts +0 -11
  168. package/src/execution/lifecycle/parallel-lifecycle.ts +0 -101
  169. package/src/execution/lifecycle/precheck-runner.ts +0 -140
  170. package/src/execution/lifecycle/run-cleanup.ts +0 -81
  171. package/src/execution/lifecycle/run-completion.ts +0 -247
  172. package/src/execution/lifecycle/run-initialization.ts +0 -187
  173. package/src/execution/lifecycle/run-regression.ts +0 -305
  174. package/src/execution/lifecycle/run-setup.ts +0 -240
  175. package/src/execution/lifecycle/story-size-prompts.ts +0 -123
  176. package/src/execution/lock.ts +0 -129
  177. package/src/execution/parallel-coordinator.ts +0 -281
  178. package/src/execution/parallel-executor-rectification-pass.ts +0 -117
  179. package/src/execution/parallel-executor-rectify.ts +0 -136
  180. package/src/execution/parallel-executor.ts +0 -330
  181. package/src/execution/parallel-worker.ts +0 -149
  182. package/src/execution/parallel.ts +0 -13
  183. package/src/execution/pid-registry.ts +0 -275
  184. package/src/execution/pipeline-result-handler.ts +0 -221
  185. package/src/execution/progress.ts +0 -27
  186. package/src/execution/queue-handler.ts +0 -109
  187. package/src/execution/runner-completion.ts +0 -171
  188. package/src/execution/runner-execution.ts +0 -243
  189. package/src/execution/runner-setup.ts +0 -86
  190. package/src/execution/runner.ts +0 -265
  191. package/src/execution/sequential-executor.ts +0 -219
  192. package/src/execution/status-file.ts +0 -264
  193. package/src/execution/status-writer.ts +0 -181
  194. package/src/execution/story-context.ts +0 -266
  195. package/src/execution/story-selector.ts +0 -76
  196. package/src/execution/test-output-parser.ts +0 -14
  197. package/src/execution/timeout-handler.ts +0 -100
  198. package/src/hooks/index.ts +0 -2
  199. package/src/hooks/runner.ts +0 -280
  200. package/src/hooks/types.ts +0 -79
  201. package/src/interaction/chain.ts +0 -170
  202. package/src/interaction/index.ts +0 -61
  203. package/src/interaction/init.ts +0 -84
  204. package/src/interaction/plugins/auto.ts +0 -243
  205. package/src/interaction/plugins/cli.ts +0 -300
  206. package/src/interaction/plugins/telegram.ts +0 -384
  207. package/src/interaction/plugins/webhook.ts +0 -286
  208. package/src/interaction/state.ts +0 -171
  209. package/src/interaction/triggers.ts +0 -250
  210. package/src/interaction/types.ts +0 -170
  211. package/src/logger/formatters.ts +0 -84
  212. package/src/logger/index.ts +0 -16
  213. package/src/logger/logger.ts +0 -296
  214. package/src/logger/types.ts +0 -48
  215. package/src/logging/formatter.ts +0 -355
  216. package/src/logging/index.ts +0 -22
  217. package/src/logging/types.ts +0 -93
  218. package/src/metrics/aggregator.ts +0 -191
  219. package/src/metrics/index.ts +0 -14
  220. package/src/metrics/tracker.ts +0 -200
  221. package/src/metrics/types.ts +0 -115
  222. package/src/optimizer/index.ts +0 -63
  223. package/src/optimizer/noop.optimizer.ts +0 -24
  224. package/src/optimizer/rule-based.optimizer.ts +0 -248
  225. package/src/optimizer/types.ts +0 -53
  226. package/src/pipeline/event-bus.ts +0 -297
  227. package/src/pipeline/events.ts +0 -130
  228. package/src/pipeline/index.ts +0 -19
  229. package/src/pipeline/runner.ts +0 -149
  230. package/src/pipeline/stages/acceptance-setup.ts +0 -144
  231. package/src/pipeline/stages/acceptance.ts +0 -215
  232. package/src/pipeline/stages/autofix.ts +0 -262
  233. package/src/pipeline/stages/completion.ts +0 -110
  234. package/src/pipeline/stages/constitution.ts +0 -63
  235. package/src/pipeline/stages/context.ts +0 -122
  236. package/src/pipeline/stages/execution.ts +0 -359
  237. package/src/pipeline/stages/index.ts +0 -86
  238. package/src/pipeline/stages/optimizer.ts +0 -74
  239. package/src/pipeline/stages/prompt.ts +0 -79
  240. package/src/pipeline/stages/queue-check.ts +0 -103
  241. package/src/pipeline/stages/rectify.ts +0 -101
  242. package/src/pipeline/stages/regression.ts +0 -99
  243. package/src/pipeline/stages/review.ts +0 -94
  244. package/src/pipeline/stages/routing.ts +0 -276
  245. package/src/pipeline/stages/verify.ts +0 -286
  246. package/src/pipeline/subscribers/events-writer.ts +0 -135
  247. package/src/pipeline/subscribers/hooks.ts +0 -179
  248. package/src/pipeline/subscribers/interaction.ts +0 -103
  249. package/src/pipeline/subscribers/registry.ts +0 -73
  250. package/src/pipeline/subscribers/reporters.ts +0 -174
  251. package/src/pipeline/types.ts +0 -220
  252. package/src/plugins/extensions.ts +0 -225
  253. package/src/plugins/index.ts +0 -33
  254. package/src/plugins/loader.ts +0 -352
  255. package/src/plugins/plugin-logger.ts +0 -41
  256. package/src/plugins/registry.ts +0 -168
  257. package/src/plugins/types.ts +0 -206
  258. package/src/plugins/validator.ts +0 -352
  259. package/src/prd/index.ts +0 -220
  260. package/src/prd/schema.ts +0 -268
  261. package/src/prd/types.ts +0 -273
  262. package/src/prd/validate.ts +0 -41
  263. package/src/precheck/checks-agents.ts +0 -63
  264. package/src/precheck/checks-blockers.ts +0 -23
  265. package/src/precheck/checks-cli.ts +0 -68
  266. package/src/precheck/checks-config.ts +0 -102
  267. package/src/precheck/checks-git.ts +0 -117
  268. package/src/precheck/checks-system.ts +0 -101
  269. package/src/precheck/checks-warnings.ts +0 -221
  270. package/src/precheck/checks.ts +0 -36
  271. package/src/precheck/index.ts +0 -374
  272. package/src/precheck/story-size-gate.ts +0 -144
  273. package/src/precheck/types.ts +0 -31
  274. package/src/prompts/builder.ts +0 -166
  275. package/src/prompts/index.ts +0 -2
  276. package/src/prompts/loader.ts +0 -43
  277. package/src/prompts/sections/conventions.ts +0 -19
  278. package/src/prompts/sections/hermetic.ts +0 -41
  279. package/src/prompts/sections/index.ts +0 -12
  280. package/src/prompts/sections/isolation.ts +0 -70
  281. package/src/prompts/sections/role-task.ts +0 -182
  282. package/src/prompts/sections/story.ts +0 -55
  283. package/src/prompts/sections/verdict.ts +0 -70
  284. package/src/prompts/types.ts +0 -21
  285. package/src/queue/index.ts +0 -2
  286. package/src/queue/manager.ts +0 -254
  287. package/src/queue/types.ts +0 -54
  288. package/src/review/index.ts +0 -8
  289. package/src/review/orchestrator.ts +0 -154
  290. package/src/review/runner.ts +0 -303
  291. package/src/review/types.ts +0 -70
  292. package/src/routing/batch-route.ts +0 -35
  293. package/src/routing/builder.ts +0 -81
  294. package/src/routing/chain.ts +0 -75
  295. package/src/routing/content-hash.ts +0 -25
  296. package/src/routing/index.ts +0 -20
  297. package/src/routing/loader.ts +0 -62
  298. package/src/routing/router.ts +0 -305
  299. package/src/routing/strategies/adaptive.ts +0 -215
  300. package/src/routing/strategies/index.ts +0 -8
  301. package/src/routing/strategies/keyword.ts +0 -180
  302. package/src/routing/strategies/llm-prompts.ts +0 -224
  303. package/src/routing/strategies/llm.ts +0 -320
  304. package/src/routing/strategies/manual.ts +0 -50
  305. package/src/routing/strategy.ts +0 -102
  306. package/src/tdd/cleanup.ts +0 -120
  307. package/src/tdd/index.ts +0 -22
  308. package/src/tdd/isolation.ts +0 -117
  309. package/src/tdd/orchestrator.ts +0 -406
  310. package/src/tdd/prompts.ts +0 -40
  311. package/src/tdd/rectification-gate.ts +0 -274
  312. package/src/tdd/session-runner.ts +0 -263
  313. package/src/tdd/types.ts +0 -84
  314. package/src/tdd/verdict-reader.ts +0 -266
  315. package/src/tdd/verdict.ts +0 -152
  316. package/src/tui/App.tsx +0 -265
  317. package/src/tui/components/AgentPanel.tsx +0 -75
  318. package/src/tui/components/CostOverlay.tsx +0 -118
  319. package/src/tui/components/HelpOverlay.tsx +0 -107
  320. package/src/tui/components/StatusBar.tsx +0 -63
  321. package/src/tui/components/StoriesPanel.tsx +0 -177
  322. package/src/tui/hooks/useKeyboard.ts +0 -142
  323. package/src/tui/hooks/useLayout.ts +0 -137
  324. package/src/tui/hooks/usePipelineEvents.ts +0 -183
  325. package/src/tui/hooks/usePty.ts +0 -189
  326. package/src/tui/index.tsx +0 -38
  327. package/src/tui/types.ts +0 -76
  328. package/src/utils/errors.ts +0 -12
  329. package/src/utils/git.ts +0 -245
  330. package/src/utils/json-file.ts +0 -72
  331. package/src/utils/log-test-output.ts +0 -25
  332. package/src/utils/path-security.ts +0 -73
  333. package/src/utils/queue-writer.ts +0 -54
  334. package/src/verification/crash-detector.ts +0 -34
  335. package/src/verification/executor.ts +0 -250
  336. package/src/verification/index.ts +0 -12
  337. package/src/verification/orchestrator-types.ts +0 -154
  338. package/src/verification/orchestrator.ts +0 -76
  339. package/src/verification/parser.ts +0 -220
  340. package/src/verification/rectification-loop.ts +0 -172
  341. package/src/verification/rectification.ts +0 -108
  342. package/src/verification/runners.ts +0 -129
  343. package/src/verification/smart-runner.ts +0 -307
  344. package/src/verification/strategies/acceptance.ts +0 -136
  345. package/src/verification/strategies/regression.ts +0 -90
  346. package/src/verification/strategies/scoped.ts +0 -154
  347. package/src/verification/types.ts +0 -117
  348. package/src/version.ts +0 -40
  349. package/src/worktree/dispatcher.ts +0 -6
  350. package/src/worktree/index.ts +0 -2
  351. package/src/worktree/manager.ts +0 -193
  352. package/src/worktree/merge.ts +0 -302
  353. package/src/worktree/types.ts +0 -4
@@ -1,220 +0,0 @@
1
- /**
2
- * Pipeline Framework Types
3
- *
4
- * Composable stage-based execution pipeline for refactoring the monolithic runner.
5
- */
6
-
7
- import type { AgentResult } from "../agents/types";
8
- import type { NaxConfig } from "../config/schema";
9
- import type { ConstitutionResult } from "../constitution/types";
10
- import type { BuiltContext } from "../context/types";
11
- import type { PidRegistry } from "../execution/pid-registry";
12
- import type { HooksConfig } from "../hooks/types";
13
- import type { InteractionChain } from "../interaction/chain";
14
- import type { StoryMetrics } from "../metrics/types";
15
- import type { PluginRegistry } from "../plugins/registry";
16
- import type { PRD, UserStory } from "../prd/types";
17
- import type { ReviewResult } from "../review/types";
18
- import type { FailureCategory } from "../tdd/types";
19
- import type { VerifyResult } from "../verification/orchestrator-types";
20
-
21
- /**
22
- * Routing result from complexity classification
23
- */
24
- export interface RoutingResult {
25
- /** Classified complexity */
26
- complexity: "simple" | "medium" | "complex" | "expert";
27
- /** Selected model tier */
28
- modelTier: "fast" | "balanced" | "powerful";
29
- /** Test strategy */
30
- testStrategy: "test-after" | "tdd-simple" | "three-session-tdd" | "three-session-tdd-lite";
31
- /** Reasoning for the classification */
32
- reasoning: string;
33
- /** Estimated cost for this story */
34
- estimatedCost?: number;
35
- }
36
-
37
- /**
38
- * Pipeline context — shared state passed through all stages.
39
- *
40
- * Stages read from and write to this context. It accumulates data
41
- * as the pipeline progresses through each stage.
42
- *
43
- * @example
44
- * ```ts
45
- * const ctx: PipelineContext = {
46
- * config: loadedConfig,
47
- * prd: loadedPRD,
48
- * story: currentStory,
49
- * stories: [currentStory],
50
- * routing: { complexity: "simple", modelTier: "fast", ... },
51
- * workdir: "/home/user/project",
52
- * hooks: loadedHooks,
53
- * };
54
- * ```
55
- */
56
- export type AgentGetFn = (name: string) => import("../agents/types").AgentAdapter | undefined;
57
-
58
- export interface PipelineContext {
59
- /** Ngent configuration */
60
- config: NaxConfig;
61
- /**
62
- * Resolved config for this story's package.
63
- * When story.workdir is set, this is root config merged with package config.
64
- * When no workdir, this equals ctx.config (root).
65
- * Set once per story in the iteration runner before pipeline execution.
66
- */
67
- effectiveConfig: NaxConfig;
68
- /** Full PRD document */
69
- prd: PRD;
70
- /** Current story (or batch leader) */
71
- story: UserStory;
72
- /** Batch of stories (length 1 for single-story execution) */
73
- stories: UserStory[];
74
- /** Routing result from complexity classification */
75
- routing: RoutingResult;
76
- /** Working directory (project root) */
77
- workdir: string;
78
- /** Absolute path to the prd.json file (used by routing stage to persist initial classification) */
79
- prdPath?: string;
80
- /** Feature directory (optional, e.g., nax/features/my-feature/) */
81
- featureDir?: string;
82
- /** Hooks configuration */
83
- hooks: HooksConfig;
84
- /** Plugin registry (optional, for plugin-provided extensions) */
85
- plugins?: PluginRegistry;
86
- /**
87
- * Protocol-aware agent resolver. When set (ACP mode), returns AcpAgentAdapter;
88
- * falls back to standalone getAgent (CLI mode) when absent.
89
- */
90
- agentGetFn?: AgentGetFn;
91
- /** PID registry for crash recovery — passed through to agent.run() for child process registration. */
92
- pidRegistry?: PidRegistry;
93
- /** Interaction chain (optional, for human-in-the-loop triggers) */
94
- interaction?: InteractionChain;
95
- /** Constitution result (set by constitutionStage) */
96
- constitution?: ConstitutionResult;
97
- /** Context markdown for the agent (set by contextStage) */
98
- contextMarkdown?: string;
99
- /** Built context with element-level token tracking (set by contextStage) */
100
- builtContext?: BuiltContext;
101
- /** Final prompt sent to agent (set by promptStage) */
102
- prompt?: string;
103
- /** Agent execution result (set by executionStage) */
104
- agentResult?: AgentResult;
105
- /** Verify result (set by verifyStage) */
106
- verifyResult?: VerifyResult;
107
- /** Review result (set by reviewStage) */
108
- reviewResult?: ReviewResult;
109
- /** Acceptance test failures (set by acceptanceStage) */
110
- acceptanceFailures?: {
111
- failedACs: string[];
112
- testOutput: string;
113
- };
114
- /** Story start timestamp (ISO string, set by runner before pipeline) */
115
- storyStartTime?: string;
116
- /** Tracks how many times the rectify stage has run this pipeline (for event attempt numbers). */
117
- rectifyAttempt?: number;
118
- /** Tracks how many times the autofix stage has run this pipeline (for event attempt numbers). */
119
- autofixAttempt?: number;
120
- /** Git HEAD ref captured before agent ran this attempt (FEAT-010: precise smart-runner diff) */
121
- storyGitRef?: string;
122
- /** Collected story metrics (set by completionStage) */
123
- storyMetrics?: StoryMetrics[];
124
- /** Whether to retry the story in lite mode after a failure */
125
- retryAsLite?: boolean;
126
- /** Results from acceptance-setup stage (set by acceptanceSetupStage) */
127
- acceptanceSetup?: {
128
- totalCriteria: number;
129
- testableCount: number;
130
- redFailCount: number;
131
- };
132
- /** Failure category from TDD orchestrator (set by executionStage on TDD failure) */
133
- tddFailureCategory?: FailureCategory;
134
- /** Set to true when TDD full-suite gate already passed — verify stage skips to avoid redundant run (BUG-054) */
135
- fullSuiteGatePassed?: boolean;
136
- /** Number of runtime crashes (RUNTIME_CRASH verify status) encountered for this story (BUG-070) */
137
- storyRuntimeCrashes?: number;
138
- /** Structured review findings from plugin reviewers — passed to escalation for retry context */
139
- reviewFindings?: import("../plugins/types").ReviewFinding[];
140
- /** Accumulated cost across all prior escalation attempts (BUG-067) */
141
- accumulatedAttemptCost?: number;
142
- }
143
-
144
- /**
145
- * Stage action — determines how the pipeline proceeds after a stage executes.
146
- */
147
- export type StageAction =
148
- /** Continue to the next stage */
149
- | { action: "continue"; cost?: number }
150
- /** Skip this story (mark as skipped, don't run further stages) */
151
- | { action: "skip"; reason: string; cost?: number }
152
- /** Story was decomposed into sub-stories — don't consume an iteration, emit story:decomposed event */
153
- | { action: "decomposed"; reason: string; subStoryCount: number; cost?: number }
154
- /** Mark story as failed (don't run further stages) */
155
- | { action: "fail"; reason: string; cost?: number }
156
- /** Escalate to a higher tier and retry the pipeline */
157
- | { action: "escalate"; reason?: string; cost?: number }
158
- /** Pause execution (user intervention required via queue command) */
159
- | { action: "pause"; reason: string; cost?: number }
160
- /** Retry from a specific stage (used by rectify/autofix stages) */
161
- | { action: "retry"; fromStage: string; cost?: number };
162
-
163
- /**
164
- * Result returned by a pipeline stage after execution.
165
- */
166
- export type StageResult = StageAction;
167
-
168
- /**
169
- * A single pipeline stage.
170
- *
171
- * Stages are composable units of work that execute sequentially.
172
- * Each stage can read from and modify the pipeline context, then
173
- * return an action that determines whether to continue, skip, fail,
174
- * escalate, or pause.
175
- *
176
- * @example
177
- * ```ts
178
- * const routingStage: PipelineStage = {
179
- * name: "routing",
180
- * enabled: (ctx) => true,
181
- * execute: async (ctx) => {
182
- * const result = await classifyComplexity(ctx.story);
183
- * ctx.routing = result;
184
- * return { action: "continue" };
185
- * },
186
- * };
187
- * ```
188
- */
189
- export interface PipelineStage {
190
- /** Unique stage identifier (e.g., "routing", "execution", "review") */
191
- name: string;
192
-
193
- /**
194
- * Determines if this stage should run.
195
- *
196
- * If false, the stage is skipped and the pipeline continues to the next stage.
197
- *
198
- * @param ctx - Current pipeline context
199
- * @returns true if the stage should execute, false to skip
200
- */
201
- enabled: (ctx: PipelineContext) => boolean;
202
-
203
- /**
204
- * Optional human-readable reason why the stage was skipped.
205
- * Distinguishes "not needed" (conditions not met) from "disabled" (config).
206
- * Used by the pipeline runner for better observability (BUG-055).
207
- */
208
- skipReason?: (ctx: PipelineContext) => string;
209
-
210
- /**
211
- * Execute the stage logic.
212
- *
213
- * Can read from and modify the pipeline context, then returns a result
214
- * that determines how the pipeline should proceed.
215
- *
216
- * @param ctx - Current pipeline context
217
- * @returns Stage result indicating next action
218
- */
219
- execute: (ctx: PipelineContext) => Promise<StageResult>;
220
- }
@@ -1,225 +0,0 @@
1
- /**
2
- * Plugin extension types
3
- *
4
- * Defines interfaces for specific plugin extensions that can be provided.
5
- */
6
-
7
- import type { UserStory } from "../prd/types";
8
-
9
- // ============================================================================
10
- // Review Extension
11
- // ============================================================================
12
-
13
- /**
14
- * A single structured finding from a review check.
15
- *
16
- * Designed to be service-agnostic — works with Semgrep, ESLint, SonarQube,
17
- * Snyk, CodeQL, and other SAST/DAST/linting tools.
18
- */
19
- export interface ReviewFinding {
20
- /** Rule or check ID (e.g., "detect-non-literal-regexp", "no-unused-vars") */
21
- ruleId: string;
22
- /** Severity level (tool-agnostic scale) */
23
- severity: "critical" | "error" | "warning" | "info" | "low";
24
- /** File path (relative to workdir) */
25
- file: string;
26
- /** Line number (1-indexed) */
27
- line: number;
28
- /** Column number (1-indexed, optional) */
29
- column?: number;
30
- /** End line number (optional, for multi-line findings) */
31
- endLine?: number;
32
- /** End column number (optional) */
33
- endColumn?: number;
34
- /** Human-readable message */
35
- message: string;
36
- /** Optional URL for rule documentation or details */
37
- url?: string;
38
- /** Source tool that produced this finding (e.g., "semgrep", "eslint", "snyk") */
39
- source?: string;
40
- /** Finding category (e.g., "security", "performance", "style", "bug") */
41
- category?: string;
42
- }
43
-
44
- /**
45
- * Result from a review check.
46
- */
47
- export interface ReviewCheckResult {
48
- /** Whether the review check passed */
49
- passed: boolean;
50
- /** Human-readable output or error messages */
51
- output: string;
52
- /** Exit code from the check process (if applicable) */
53
- exitCode?: number;
54
- /** Structured findings (optional — plugins can provide machine-readable results) */
55
- findings?: ReviewFinding[];
56
- }
57
-
58
- /**
59
- * Review plugin interface.
60
- *
61
- * Review plugins run custom checks after agent execution (e.g., security scans,
62
- * license checks, performance tests). Failures trigger retry/escalation.
63
- *
64
- * @example
65
- * ```ts
66
- * const reviewer: IReviewPlugin = {
67
- * name: "security-scan",
68
- * description: "Scans for security vulnerabilities",
69
- * async check(workdir, changedFiles) {
70
- * const result = await securityScanner.scan(workdir, changedFiles);
71
- * return {
72
- * passed: result.vulnerabilities.length === 0,
73
- * output: result.report
74
- * };
75
- * }
76
- * };
77
- * ```
78
- */
79
- export interface IReviewPlugin {
80
- /** Check name (e.g., "security-scan", "license-check") */
81
- name: string;
82
-
83
- /** Human-readable description */
84
- description: string;
85
-
86
- /**
87
- * Run the review check against the working directory.
88
- *
89
- * @param workdir - Project root directory
90
- * @param changedFiles - Files modified by the agent in this story
91
- * @returns Review check result
92
- */
93
- check(workdir: string, changedFiles: string[]): Promise<ReviewCheckResult>;
94
- }
95
-
96
- // ============================================================================
97
- // Context Provider Extension
98
- // ============================================================================
99
-
100
- /**
101
- * Result from a context provider.
102
- */
103
- export interface ContextProviderResult {
104
- /** Markdown content to inject */
105
- content: string;
106
- /** Token estimate for budget tracking */
107
- estimatedTokens: number;
108
- /** Section label in the prompt (e.g., "Jira Context") */
109
- label: string;
110
- }
111
-
112
- /**
113
- * Context provider interface.
114
- *
115
- * Context providers fetch external data (Jira tickets, Confluence docs,
116
- * Linear issues, etc.) and inject it into agent prompts.
117
- *
118
- * @example
119
- * ```ts
120
- * const provider: IContextProvider = {
121
- * name: "jira",
122
- * async getContext(story) {
123
- * const ticket = await jiraApi.getTicket(story.tags[0]);
124
- * return {
125
- * content: `## ${ticket.key}\n\n${ticket.description}`,
126
- * estimatedTokens: estimateTokens(ticket.description),
127
- * label: "Jira Context"
128
- * };
129
- * }
130
- * };
131
- * ```
132
- */
133
- export interface IContextProvider {
134
- /** Provider name (e.g., "jira", "linear", "confluence") */
135
- name: string;
136
-
137
- /**
138
- * Fetch external context relevant to a story.
139
- *
140
- * @param story - The user story being executed
141
- * @returns Markdown content to inject into the agent prompt
142
- */
143
- getContext(story: UserStory): Promise<ContextProviderResult>;
144
- }
145
-
146
- // ============================================================================
147
- // Reporter Extension
148
- // ============================================================================
149
-
150
- /**
151
- * Event emitted when a run starts.
152
- */
153
- export interface RunStartEvent {
154
- runId: string;
155
- feature: string;
156
- totalStories: number;
157
- startTime: string;
158
- }
159
-
160
- /**
161
- * Event emitted when a story completes.
162
- */
163
- export interface StoryCompleteEvent {
164
- runId: string;
165
- storyId: string;
166
- status: "completed" | "failed" | "skipped" | "paused";
167
- runElapsedMs: number;
168
- cost: number;
169
- tier: string;
170
- testStrategy: string;
171
- }
172
-
173
- /**
174
- * Event emitted when a run ends.
175
- */
176
- export interface RunEndEvent {
177
- runId: string;
178
- totalDurationMs: number;
179
- totalCost: number;
180
- storySummary: {
181
- completed: number;
182
- failed: number;
183
- skipped: number;
184
- paused: number;
185
- };
186
- }
187
-
188
- /**
189
- * Reporter interface.
190
- *
191
- * Reporters receive run lifecycle events and can emit them to external
192
- * systems (dashboards, Slack, CI, databases, etc.).
193
- *
194
- * All reporter methods are fire-and-forget — failures are logged but
195
- * never block the pipeline.
196
- *
197
- * @example
198
- * ```ts
199
- * const reporter: IReporter = {
200
- * name: "telegram",
201
- * async onRunStart(event) {
202
- * await telegram.send(`Started ${event.feature}`);
203
- * },
204
- * async onStoryComplete(event) {
205
- * await telegram.send(`${event.storyId} ${event.status}`);
206
- * },
207
- * async onRunEnd(event) {
208
- * await telegram.send(`Completed ${event.storySummary.completed} stories`);
209
- * }
210
- * };
211
- * ```
212
- */
213
- export interface IReporter {
214
- /** Reporter name */
215
- name: string;
216
-
217
- /** Called when a run starts */
218
- onRunStart?(event: RunStartEvent): Promise<void>;
219
-
220
- /** Called when a story completes (success or failure) */
221
- onStoryComplete?(event: StoryCompleteEvent): Promise<void>;
222
-
223
- /** Called when a run ends */
224
- onRunEnd?(event: RunEndEvent): Promise<void>;
225
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Plugin System — Public API
3
- *
4
- * Exports all plugin types, interfaces, and loading utilities.
5
- */
6
-
7
- export type {
8
- NaxPlugin,
9
- PluginType,
10
- PluginExtensions,
11
- PluginConfigEntry,
12
- PluginLogger,
13
- IReviewPlugin,
14
- ReviewCheckResult,
15
- IContextProvider,
16
- ContextProviderResult,
17
- IReporter,
18
- RunStartEvent,
19
- StoryCompleteEvent,
20
- RunEndEvent,
21
- } from "./types";
22
-
23
- // Re-export optimizer types from optimizer module (via types.ts)
24
- export type {
25
- IPromptOptimizer,
26
- PromptOptimizerInput,
27
- PromptOptimizerResult,
28
- } from "./types";
29
-
30
- export { validatePlugin } from "./validator";
31
- export { loadPlugins } from "./loader";
32
- export { PluginRegistry } from "./registry";
33
- export { createPluginLogger } from "./plugin-logger";