ai-sdlc 0.1.0-alpha.1 → 0.1.0-alpha.10

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 (58) hide show
  1. package/README.md +367 -70
  2. package/dist/agents/implementation.d.ts +80 -2
  3. package/dist/agents/implementation.d.ts.map +1 -1
  4. package/dist/agents/implementation.js +467 -2
  5. package/dist/agents/implementation.js.map +1 -1
  6. package/dist/agents/planning.d.ts +20 -1
  7. package/dist/agents/planning.d.ts.map +1 -1
  8. package/dist/agents/planning.js +73 -12
  9. package/dist/agents/planning.js.map +1 -1
  10. package/dist/agents/review.d.ts +21 -1
  11. package/dist/agents/review.d.ts.map +1 -1
  12. package/dist/agents/review.js +64 -2
  13. package/dist/agents/review.js.map +1 -1
  14. package/dist/agents/rework.d.ts.map +1 -1
  15. package/dist/agents/rework.js +6 -4
  16. package/dist/agents/rework.js.map +1 -1
  17. package/dist/cli/commands.d.ts +2 -1
  18. package/dist/cli/commands.d.ts.map +1 -1
  19. package/dist/cli/commands.js +23 -16
  20. package/dist/cli/commands.js.map +1 -1
  21. package/dist/cli/daemon.d.ts +87 -0
  22. package/dist/cli/daemon.d.ts.map +1 -0
  23. package/dist/cli/daemon.js +432 -0
  24. package/dist/cli/daemon.js.map +1 -0
  25. package/dist/cli/runner.d.ts +1 -0
  26. package/dist/cli/runner.d.ts.map +1 -1
  27. package/dist/cli/runner.js +1 -1
  28. package/dist/cli/runner.js.map +1 -1
  29. package/dist/cli/story-utils.d.ts.map +1 -1
  30. package/dist/cli/story-utils.js +2 -0
  31. package/dist/cli/story-utils.js.map +1 -1
  32. package/dist/cli/table-renderer.js +1 -1
  33. package/dist/cli/table-renderer.js.map +1 -1
  34. package/dist/core/client.js +1 -1
  35. package/dist/core/client.js.map +1 -1
  36. package/dist/core/config.d.ts +10 -2
  37. package/dist/core/config.d.ts.map +1 -1
  38. package/dist/core/config.js +84 -14
  39. package/dist/core/config.js.map +1 -1
  40. package/dist/core/kanban.d.ts.map +1 -1
  41. package/dist/core/kanban.js +22 -10
  42. package/dist/core/kanban.js.map +1 -1
  43. package/dist/core/story.d.ts +7 -0
  44. package/dist/core/story.d.ts.map +1 -1
  45. package/dist/core/story.js +51 -1
  46. package/dist/core/story.js.map +1 -1
  47. package/dist/core/theme.d.ts.map +1 -1
  48. package/dist/core/theme.js +3 -0
  49. package/dist/core/theme.js.map +1 -1
  50. package/dist/core/workflow-state.d.ts +4 -4
  51. package/dist/core/workflow-state.js +4 -4
  52. package/dist/index.js +4 -3
  53. package/dist/index.js.map +1 -1
  54. package/dist/types/index.d.ts +61 -2
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/types/index.js +3 -1
  57. package/dist/types/index.js.map +1 -1
  58. package/package.json +8 -6
@@ -1,7 +1,85 @@
1
- import { AgentProgressCallback } from '../core/client.js';
2
- import { AgentResult } from '../types/index.js';
1
+ import { runAgentQuery, AgentProgressCallback } from '../core/client.js';
2
+ import { Story, AgentResult, TDDTestCycle } from '../types/index.js';
3
3
  import { AgentOptions } from './research.js';
4
4
  export type { AgentProgressCallback };
5
+ /**
6
+ * Result from a TDD phase execution
7
+ */
8
+ export interface TDDPhaseResult {
9
+ testName: string;
10
+ testFile: string;
11
+ timestamp: string;
12
+ output: string;
13
+ success: boolean;
14
+ }
15
+ /**
16
+ * Options for TDD phase execution (allows mocking for tests)
17
+ */
18
+ export interface TDDPhaseOptions {
19
+ workingDir: string;
20
+ runAgentQuery?: typeof runAgentQuery;
21
+ onProgress?: AgentProgressCallback;
22
+ }
23
+ /**
24
+ * Options for full TDD implementation (allows mocking for tests)
25
+ */
26
+ export interface TDDImplementationOptions {
27
+ runAgentQuery?: typeof runAgentQuery;
28
+ runSingleTest?: typeof runSingleTest;
29
+ runAllTests?: typeof runAllTests;
30
+ onProgress?: AgentProgressCallback;
31
+ }
32
+ export declare const TDD_SYSTEM_PROMPT = "You are practicing strict Test-Driven Development.\n\nYour workflow MUST follow this exact cycle:\n\n**RED Phase**:\n1. Write ONE test that expresses the next acceptance criterion\n2. The test MUST fail because the functionality doesn't exist\n3. Run the test and verify it fails\n4. Explain why it fails and what it's testing\n\n**GREEN Phase**:\n1. Write the MINIMUM code to make this ONE test pass\n2. Do NOT add extra features\n3. Run the test to verify it passes\n4. Run ALL tests to ensure nothing broke\n\n**REFACTOR Phase**:\n1. Look for improvements (DRY, clarity, performance)\n2. Make changes ONLY if tests stay green\n3. Run ALL tests after each change\n\nComplete one full cycle before starting the next test.\nNever write code before writing a test.\nNever write multiple tests before making the first one pass.";
33
+ /**
34
+ * Run a single test file and return pass/fail result
35
+ */
36
+ export declare function runSingleTest(testFile: string, workingDir: string, testTimeout: number): Promise<{
37
+ passed: boolean;
38
+ output: string;
39
+ }>;
40
+ /**
41
+ * Run all tests and return pass/fail result
42
+ */
43
+ export declare function runAllTests(workingDir: string, testTimeout: number): Promise<{
44
+ passed: boolean;
45
+ output: string;
46
+ }>;
47
+ /**
48
+ * RED Phase: Write a failing test
49
+ *
50
+ * Creates a test that expresses the next acceptance criterion.
51
+ * The test MUST fail because the functionality doesn't exist yet.
52
+ */
53
+ export declare function executeRedPhase(story: Story, cycleNumber: number, options: TDDPhaseOptions): Promise<TDDPhaseResult>;
54
+ /**
55
+ * GREEN Phase: Write minimum code to pass the test
56
+ *
57
+ * Implements just enough code to make the failing test pass.
58
+ * Does NOT add extra features or optimizations.
59
+ */
60
+ export declare function executeGreenPhase(story: Story, cycleNumber: number, testFile: string, options: TDDPhaseOptions): Promise<TDDPhaseResult>;
61
+ /**
62
+ * REFACTOR Phase: Improve code while keeping tests green
63
+ *
64
+ * Improves code quality without changing behavior.
65
+ * All tests must remain passing after each change.
66
+ */
67
+ export declare function executeRefactorPhase(story: Story, cycleNumber: number, testFile: string, options: TDDPhaseOptions): Promise<TDDPhaseResult>;
68
+ /**
69
+ * Record a completed TDD cycle to the story frontmatter
70
+ */
71
+ export declare function recordTDDCycle(cycleNumber: number, redResult: TDDPhaseResult, greenResult: TDDPhaseResult, refactorResult: TDDPhaseResult): TDDTestCycle;
72
+ /**
73
+ * Check if all acceptance criteria have been covered (checked off)
74
+ */
75
+ export declare function checkACCoverage(story: Story): boolean;
76
+ /**
77
+ * Run the full TDD implementation loop
78
+ *
79
+ * Executes Red-Green-Refactor cycles until all acceptance criteria are covered
80
+ * or the maximum number of cycles is reached.
81
+ */
82
+ export declare function runTDDImplementation(story: Story, sdlcRoot: string, options?: TDDImplementationOptions): Promise<AgentResult>;
5
83
  /**
6
84
  * Implementation Agent
7
85
  *
@@ -1 +1 @@
1
- {"version":3,"file":"implementation.d.ts","sourceRoot":"","sources":["../../src/agents/implementation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAS,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAgBtC;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA4GtB"}
1
+ {"version":3,"file":"implementation.d.ts","sourceRoot":"","sources":["../../src/agents/implementation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI7C,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC;IACjC,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,8zBAuB+B,CAAC;AAgB9D;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD9C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD9C;AAmDD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAoCzB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAwCzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,cAAc,GAC7B,YAAY,CAYd;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAuBrD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,WAAW,CAAC,CA2HtB;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAgJtB"}
@@ -1,7 +1,32 @@
1
- import { execSync } from 'child_process';
1
+ import { execSync, spawn } from 'child_process';
2
2
  import path from 'path';
3
3
  import { parseStory, writeStory, moveStory, updateStoryField } from '../core/story.js';
4
4
  import { runAgentQuery } from '../core/client.js';
5
+ import { loadConfig, DEFAULT_TDD_CONFIG } from '../core/config.js';
6
+ export const TDD_SYSTEM_PROMPT = `You are practicing strict Test-Driven Development.
7
+
8
+ Your workflow MUST follow this exact cycle:
9
+
10
+ **RED Phase**:
11
+ 1. Write ONE test that expresses the next acceptance criterion
12
+ 2. The test MUST fail because the functionality doesn't exist
13
+ 3. Run the test and verify it fails
14
+ 4. Explain why it fails and what it's testing
15
+
16
+ **GREEN Phase**:
17
+ 1. Write the MINIMUM code to make this ONE test pass
18
+ 2. Do NOT add extra features
19
+ 3. Run the test to verify it passes
20
+ 4. Run ALL tests to ensure nothing broke
21
+
22
+ **REFACTOR Phase**:
23
+ 1. Look for improvements (DRY, clarity, performance)
24
+ 2. Make changes ONLY if tests stay green
25
+ 3. Run ALL tests after each change
26
+
27
+ Complete one full cycle before starting the next test.
28
+ Never write code before writing a test.
29
+ Never write multiple tests before making the first one pass.`;
5
30
  const IMPLEMENTATION_SYSTEM_PROMPT = `You are a senior software engineer implementing features based on a detailed plan. Your job is to execute each phase of the implementation plan.
6
31
 
7
32
  When implementing:
@@ -15,6 +40,415 @@ When implementing:
15
40
  8. Do NOT commit changes - that happens in the review phase
16
41
 
17
42
  You have access to tools for reading and writing files, running commands, and searching the codebase.`;
43
+ /**
44
+ * Run a single test file and return pass/fail result
45
+ */
46
+ export async function runSingleTest(testFile, workingDir, testTimeout) {
47
+ return new Promise((resolve) => {
48
+ const outputChunks = [];
49
+ let killed = false;
50
+ const child = spawn('npm', ['test', '--', testFile], {
51
+ cwd: workingDir,
52
+ stdio: ['pipe', 'pipe', 'pipe'],
53
+ });
54
+ const timeoutId = setTimeout(() => {
55
+ killed = true;
56
+ child.kill('SIGTERM');
57
+ setTimeout(() => child.kill('SIGKILL'), 5000);
58
+ }, testTimeout);
59
+ child.stdout?.on('data', (data) => {
60
+ outputChunks.push(data.toString());
61
+ });
62
+ child.stderr?.on('data', (data) => {
63
+ outputChunks.push(data.toString());
64
+ });
65
+ child.on('close', (code) => {
66
+ clearTimeout(timeoutId);
67
+ const output = outputChunks.join('');
68
+ if (killed) {
69
+ resolve({
70
+ passed: false,
71
+ output: output + `\n[Command timed out after ${Math.round(testTimeout / 1000)} seconds]`,
72
+ });
73
+ }
74
+ else {
75
+ resolve({
76
+ passed: code === 0,
77
+ output,
78
+ });
79
+ }
80
+ });
81
+ child.on('error', (error) => {
82
+ clearTimeout(timeoutId);
83
+ resolve({
84
+ passed: false,
85
+ output: outputChunks.join('') + `\n[Command error: ${error.message}]`,
86
+ });
87
+ });
88
+ });
89
+ }
90
+ /**
91
+ * Run all tests and return pass/fail result
92
+ */
93
+ export async function runAllTests(workingDir, testTimeout) {
94
+ return new Promise((resolve) => {
95
+ const outputChunks = [];
96
+ let killed = false;
97
+ const child = spawn('npm', ['test'], {
98
+ cwd: workingDir,
99
+ stdio: ['pipe', 'pipe', 'pipe'],
100
+ });
101
+ const timeoutId = setTimeout(() => {
102
+ killed = true;
103
+ child.kill('SIGTERM');
104
+ setTimeout(() => child.kill('SIGKILL'), 5000);
105
+ }, testTimeout);
106
+ child.stdout?.on('data', (data) => {
107
+ outputChunks.push(data.toString());
108
+ });
109
+ child.stderr?.on('data', (data) => {
110
+ outputChunks.push(data.toString());
111
+ });
112
+ child.on('close', (code) => {
113
+ clearTimeout(timeoutId);
114
+ const output = outputChunks.join('');
115
+ if (killed) {
116
+ resolve({
117
+ passed: false,
118
+ output: output + `\n[Command timed out after ${Math.round(testTimeout / 1000)} seconds]`,
119
+ });
120
+ }
121
+ else {
122
+ resolve({
123
+ passed: code === 0,
124
+ output,
125
+ });
126
+ }
127
+ });
128
+ child.on('error', (error) => {
129
+ clearTimeout(timeoutId);
130
+ resolve({
131
+ passed: false,
132
+ output: outputChunks.join('') + `\n[Command error: ${error.message}]`,
133
+ });
134
+ });
135
+ });
136
+ }
137
+ /**
138
+ * Extract test file path from agent output
139
+ */
140
+ function extractTestFile(agentOutput) {
141
+ // Look for common patterns in agent output
142
+ const patterns = [
143
+ /(?:created|wrote|added|test file[:\s]+)[\s`'"]*([^\s`'"]+\.test\.[tj]sx?)/i,
144
+ /([^\s`'"]+\.test\.[tj]sx?)/i,
145
+ /([^\s`'"]+\.spec\.[tj]sx?)/i,
146
+ ];
147
+ for (const pattern of patterns) {
148
+ const match = agentOutput.match(pattern);
149
+ if (match) {
150
+ return match[1];
151
+ }
152
+ }
153
+ // Default fallback
154
+ return 'src/unknown.test.ts';
155
+ }
156
+ /**
157
+ * Extract test name from agent output or story content
158
+ */
159
+ function extractTestName(agentOutput, story) {
160
+ // Try to extract from agent output
161
+ const patterns = [
162
+ /(?:test|it|describe)[(\s]+['"`]([^'"`]+)['"`]/i,
163
+ /testing[:\s]+([^\n]+)/i,
164
+ /for[:\s]+([^\n]+)/i,
165
+ ];
166
+ for (const pattern of patterns) {
167
+ const match = agentOutput.match(pattern);
168
+ if (match) {
169
+ return match[1].trim();
170
+ }
171
+ }
172
+ // Fallback: extract first unchecked AC
173
+ const acMatch = story.content.match(/- \[ \] ([^\n]+)/);
174
+ if (acMatch) {
175
+ return acMatch[1].trim();
176
+ }
177
+ return 'Unknown test';
178
+ }
179
+ /**
180
+ * RED Phase: Write a failing test
181
+ *
182
+ * Creates a test that expresses the next acceptance criterion.
183
+ * The test MUST fail because the functionality doesn't exist yet.
184
+ */
185
+ export async function executeRedPhase(story, cycleNumber, options) {
186
+ const agentQuery = options.runAgentQuery || runAgentQuery;
187
+ const timestamp = new Date().toISOString();
188
+ const prompt = `You are in the RED phase of TDD (cycle ${cycleNumber}).
189
+
190
+ Story: ${story.frontmatter.title}
191
+
192
+ Current acceptance criteria (unchecked = not yet implemented):
193
+ ${story.content}
194
+
195
+ Your task:
196
+ 1. Look at the FIRST unchecked acceptance criterion (- [ ])
197
+ 2. Write ONE failing test that validates this criterion
198
+ 3. The test should be minimal but meaningful
199
+ 4. Return the test file path where you created/modified the test
200
+
201
+ Remember: The test MUST fail because no implementation exists yet.
202
+ Write the test now.`;
203
+ const output = await agentQuery({
204
+ prompt,
205
+ systemPrompt: TDD_SYSTEM_PROMPT,
206
+ workingDirectory: options.workingDir,
207
+ onProgress: options.onProgress,
208
+ });
209
+ const testFile = extractTestFile(output);
210
+ const testName = extractTestName(output, story);
211
+ return {
212
+ testName,
213
+ testFile,
214
+ timestamp,
215
+ output,
216
+ success: true,
217
+ };
218
+ }
219
+ /**
220
+ * GREEN Phase: Write minimum code to pass the test
221
+ *
222
+ * Implements just enough code to make the failing test pass.
223
+ * Does NOT add extra features or optimizations.
224
+ */
225
+ export async function executeGreenPhase(story, cycleNumber, testFile, options) {
226
+ const agentQuery = options.runAgentQuery || runAgentQuery;
227
+ const timestamp = new Date().toISOString();
228
+ const prompt = `You are in the GREEN phase of TDD (cycle ${cycleNumber}).
229
+
230
+ Story: ${story.frontmatter.title}
231
+ Test file: ${testFile}
232
+
233
+ The test you wrote in the RED phase is now failing.
234
+
235
+ Your task:
236
+ 1. Write the MINIMUM code to make this ONE test pass
237
+ 2. Do NOT add extra features or optimizations
238
+ 3. Do NOT refactor yet - that comes in the next phase
239
+ 4. Keep the implementation simple and focused
240
+
241
+ Remember: Only write enough code to make the test pass. Nothing more.
242
+ Implement the code now.`;
243
+ const output = await agentQuery({
244
+ prompt,
245
+ systemPrompt: TDD_SYSTEM_PROMPT,
246
+ workingDirectory: options.workingDir,
247
+ onProgress: options.onProgress,
248
+ });
249
+ const testName = extractTestName(output, story);
250
+ return {
251
+ testName,
252
+ testFile,
253
+ timestamp,
254
+ output,
255
+ success: true,
256
+ };
257
+ }
258
+ /**
259
+ * REFACTOR Phase: Improve code while keeping tests green
260
+ *
261
+ * Improves code quality without changing behavior.
262
+ * All tests must remain passing after each change.
263
+ */
264
+ export async function executeRefactorPhase(story, cycleNumber, testFile, options) {
265
+ const agentQuery = options.runAgentQuery || runAgentQuery;
266
+ const timestamp = new Date().toISOString();
267
+ const prompt = `You are in the REFACTOR phase of TDD (cycle ${cycleNumber}).
268
+
269
+ Story: ${story.frontmatter.title}
270
+ Test file: ${testFile}
271
+
272
+ The test is now passing. Time to improve the code.
273
+
274
+ Your task:
275
+ 1. Look for opportunities to improve the code:
276
+ - Remove duplication (DRY)
277
+ - Improve naming and clarity
278
+ - Simplify complex logic
279
+ - Performance improvements (if obvious)
280
+ 2. Make changes incrementally
281
+ 3. Ensure ALL tests stay green after each change
282
+ 4. If no refactoring is needed, that's fine - skip to the next cycle
283
+
284
+ Remember: The goal is cleaner code, not new features.
285
+ Refactor now (or skip if the code is already clean).`;
286
+ const output = await agentQuery({
287
+ prompt,
288
+ systemPrompt: TDD_SYSTEM_PROMPT,
289
+ workingDirectory: options.workingDir,
290
+ onProgress: options.onProgress,
291
+ });
292
+ const testName = extractTestName(output, story);
293
+ return {
294
+ testName,
295
+ testFile,
296
+ timestamp,
297
+ output,
298
+ success: true,
299
+ };
300
+ }
301
+ /**
302
+ * Record a completed TDD cycle to the story frontmatter
303
+ */
304
+ export function recordTDDCycle(cycleNumber, redResult, greenResult, refactorResult) {
305
+ return {
306
+ test_name: redResult.testName,
307
+ test_file: redResult.testFile,
308
+ red_timestamp: redResult.timestamp,
309
+ green_timestamp: greenResult.timestamp,
310
+ refactor_timestamp: refactorResult.timestamp,
311
+ test_output_red: redResult.output,
312
+ test_output_green: greenResult.output,
313
+ all_tests_green: true,
314
+ cycle_number: cycleNumber,
315
+ };
316
+ }
317
+ /**
318
+ * Check if all acceptance criteria have been covered (checked off)
319
+ */
320
+ export function checkACCoverage(story) {
321
+ // Find the Acceptance Criteria section
322
+ const acSectionMatch = story.content.match(/## Acceptance Criteria\s*\n([\s\S]*?)(?=\n##|$)/i);
323
+ if (!acSectionMatch) {
324
+ // No AC section = nothing to check = done
325
+ return true;
326
+ }
327
+ const acSection = acSectionMatch[1];
328
+ // Find all checkbox items
329
+ const uncheckedItems = acSection.match(/- \[ \]/g);
330
+ const checkedItems = acSection.match(/- \[x\]/gi);
331
+ // If there are unchecked items, coverage is incomplete
332
+ if (uncheckedItems && uncheckedItems.length > 0) {
333
+ return false;
334
+ }
335
+ // If there are checked items (and no unchecked), coverage is complete
336
+ // If there are no checkboxes at all, consider it complete
337
+ return true;
338
+ }
339
+ /**
340
+ * Run the full TDD implementation loop
341
+ *
342
+ * Executes Red-Green-Refactor cycles until all acceptance criteria are covered
343
+ * or the maximum number of cycles is reached.
344
+ */
345
+ export async function runTDDImplementation(story, sdlcRoot, options = {}) {
346
+ const workingDir = path.dirname(sdlcRoot);
347
+ const config = loadConfig(workingDir);
348
+ const tddConfig = config.tdd || DEFAULT_TDD_CONFIG;
349
+ const changesMade = [];
350
+ const agentQuery = options.runAgentQuery || runAgentQuery;
351
+ const singleTest = options.runSingleTest || runSingleTest;
352
+ const allTests = options.runAllTests || runAllTests;
353
+ const testTimeout = config.timeouts?.testTimeout || 300000;
354
+ // Get starting cycle number from history
355
+ let cycleNumber = (story.frontmatter.tdd_test_history?.length || 0) + 1;
356
+ while (cycleNumber <= tddConfig.maxCycles) {
357
+ changesMade.push(`Starting TDD cycle ${cycleNumber}`);
358
+ // RED Phase: Write failing test
359
+ const redResult = await executeRedPhase(story, cycleNumber, {
360
+ workingDir,
361
+ runAgentQuery: agentQuery,
362
+ onProgress: options.onProgress,
363
+ });
364
+ // Verify test fails (expected in RED phase)
365
+ const redTestResult = await singleTest(redResult.testFile, workingDir, testTimeout);
366
+ if (redTestResult.passed) {
367
+ return {
368
+ success: false,
369
+ story,
370
+ changesMade,
371
+ error: `TDD Violation: Test passed immediately in RED phase (cycle ${cycleNumber}). Tests must fail before implementation.`,
372
+ };
373
+ }
374
+ changesMade.push(`RED: Test "${redResult.testName}" fails as expected`);
375
+ // GREEN Phase: Write minimum code
376
+ const greenResult = await executeGreenPhase(story, cycleNumber, redResult.testFile, {
377
+ workingDir,
378
+ runAgentQuery: agentQuery,
379
+ onProgress: options.onProgress,
380
+ });
381
+ // Verify test now passes
382
+ const greenTestResult = await singleTest(redResult.testFile, workingDir, testTimeout);
383
+ if (!greenTestResult.passed) {
384
+ return {
385
+ success: false,
386
+ story,
387
+ changesMade,
388
+ error: `TDD Violation: Test still failing in GREEN phase (cycle ${cycleNumber}). Implementation must make test pass.`,
389
+ };
390
+ }
391
+ changesMade.push(`GREEN: Test "${redResult.testName}" now passes`);
392
+ // Verify no regression (all tests still pass)
393
+ const regressionCheck = await allTests(workingDir, testTimeout);
394
+ if (!regressionCheck.passed) {
395
+ return {
396
+ success: false,
397
+ story,
398
+ changesMade,
399
+ error: `TDD Violation: Regression detected after GREEN phase (cycle ${cycleNumber}). New code broke existing tests.`,
400
+ };
401
+ }
402
+ changesMade.push('GREEN: No regression - all tests pass');
403
+ // REFACTOR Phase: Improve code
404
+ const refactorResult = await executeRefactorPhase(story, cycleNumber, redResult.testFile, {
405
+ workingDir,
406
+ runAgentQuery: agentQuery,
407
+ onProgress: options.onProgress,
408
+ });
409
+ // Verify tests still pass after refactoring
410
+ const refactorCheck = await allTests(workingDir, testTimeout);
411
+ if (!refactorCheck.passed) {
412
+ return {
413
+ success: false,
414
+ story,
415
+ changesMade,
416
+ error: `TDD Violation: Refactoring broke tests (cycle ${cycleNumber}). Undo changes and refactor more carefully.`,
417
+ };
418
+ }
419
+ changesMade.push('REFACTOR: All tests still pass');
420
+ // Record the completed cycle
421
+ const cycle = recordTDDCycle(cycleNumber, redResult, greenResult, refactorResult);
422
+ // Update story with cycle history
423
+ const history = story.frontmatter.tdd_test_history || [];
424
+ history.push(cycle);
425
+ // Trim to last 100 cycles to prevent unbounded growth
426
+ story.frontmatter.tdd_test_history = history.slice(-100);
427
+ story.frontmatter.tdd_current_test = cycle;
428
+ // Persist the TDD cycle history to disk
429
+ writeStory(story);
430
+ changesMade.push(`Completed TDD cycle ${cycleNumber}`);
431
+ // Check if all AC are now covered
432
+ // Re-read story to get latest content (agent may have updated checkboxes)
433
+ const updatedStory = parseStory(story.path);
434
+ if (checkACCoverage(updatedStory)) {
435
+ changesMade.push('All acceptance criteria covered');
436
+ return {
437
+ success: true,
438
+ story: updatedStory,
439
+ changesMade,
440
+ };
441
+ }
442
+ cycleNumber++;
443
+ }
444
+ // Max cycles reached
445
+ return {
446
+ success: false,
447
+ story,
448
+ changesMade,
449
+ error: `TDD: Maximum cycles (${tddConfig.maxCycles}) reached without completing all acceptance criteria.`,
450
+ };
451
+ }
18
452
  /**
19
453
  * Implementation Agent
20
454
  *
@@ -27,7 +461,7 @@ export async function runImplementationAgent(storyPath, sdlcRoot, options = {})
27
461
  const workingDir = path.dirname(sdlcRoot);
28
462
  try {
29
463
  // Create a feature branch for this story
30
- const branchName = `agentic-sdlc/${story.slug}`;
464
+ const branchName = `ai-sdlc/${story.slug}`;
31
465
  try {
32
466
  // Check if we're in a git repo
33
467
  execSync('git rev-parse --git-dir', { cwd: workingDir, stdio: 'pipe' });
@@ -59,6 +493,37 @@ export async function runImplementationAgent(storyPath, sdlcRoot, options = {})
59
493
  currentStoryPath = story.path;
60
494
  changesMade.push('Moved story to in-progress/');
61
495
  }
496
+ // Check if TDD is enabled for this story
497
+ const config = loadConfig(workingDir);
498
+ const tddEnabled = story.frontmatter.tdd_enabled ?? config.tdd?.enabled ?? false;
499
+ if (tddEnabled) {
500
+ changesMade.push('TDD mode enabled - using Red-Green-Refactor implementation');
501
+ // Run TDD implementation loop
502
+ const tddResult = await runTDDImplementation(story, sdlcRoot, {
503
+ onProgress: options.onProgress,
504
+ });
505
+ // Merge changes
506
+ changesMade.push(...tddResult.changesMade);
507
+ if (tddResult.success) {
508
+ // Mark implementation as complete
509
+ updateStoryField(tddResult.story, 'implementation_complete', true);
510
+ changesMade.push('Marked implementation_complete: true');
511
+ return {
512
+ success: true,
513
+ story: parseStory(currentStoryPath),
514
+ changesMade,
515
+ };
516
+ }
517
+ else {
518
+ return {
519
+ success: false,
520
+ story: tddResult.story,
521
+ changesMade,
522
+ error: tddResult.error,
523
+ };
524
+ }
525
+ }
526
+ // Standard implementation (non-TDD mode)
62
527
  let prompt = `Implement this story based on the plan:
63
528
 
64
529
  Title: ${story.frontmatter.title}
@@ -1 +1 @@
1
- {"version":3,"file":"implementation.js","sourceRoot":"","sources":["../../src/agents/implementation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"implementation.js","sourceRoot":"","sources":["../../src/agents/implementation.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,24 @@
1
- import { AgentResult } from '../types/index.js';
1
+ import { Story, AgentResult } from '../types/index.js';
2
2
  import { AgentOptions } from './research.js';
3
+ /**
4
+ * System prompt for the planning agent
5
+ */
6
+ export declare const PLANNING_SYSTEM_PROMPT = "You are a technical planning specialist. Your job is to create detailed, step-by-step implementation plans for user stories.\n\nWhen creating a plan, you should:\n1. Break the work into phases (setup, implementation, testing, etc.)\n2. Create specific, actionable tasks within each phase\n3. Use checkbox format for tracking progress\n4. Consider test-driven development (write tests first)\n5. Include verification steps\n\nOutput your plan in markdown format with checkboxes. Each task should be small enough to complete in one focused session.";
7
+ /**
8
+ * TDD-specific planning instructions
9
+ * When TDD is enabled, this is appended to the planning prompt to ensure
10
+ * the plan follows the Red-Green-Refactor cycle structure.
11
+ */
12
+ export declare const TDD_PLANNING_INSTRUCTIONS = "\n**TDD Mode Enabled - Use Red-Green-Refactor Cycle Structure**\n\nStructure your plan using the TDD cycle for EACH feature/acceptance criterion:\n\nFor each task that involves writing code:\n- \uD83D\uDD34 RED: Write a failing test first that expresses the expected behavior\n- \uD83D\uDFE2 GREEN: Write the MINIMUM code to make the test pass\n- \uD83D\uDD35 REFACTOR: Improve the code while keeping all tests green\n\nExample TDD task structure:\n### Feature: User Login\n- [ ] \uD83D\uDD34 Write failing test for successful login with valid credentials (expect fail)\n- [ ] \uD83D\uDFE2 Implement login function to make test pass (expect pass)\n- [ ] \uD83D\uDD35 Refactor login code if needed (keep passing)\n\n- [ ] \uD83D\uDD34 Write failing test for login rejection with invalid password (expect fail)\n- [ ] \uD83D\uDFE2 Implement password validation to make test pass (expect pass)\n- [ ] \uD83D\uDD35 Refactor validation code if needed (keep passing)\n\nIMPORTANT TDD Rules:\n1. NEVER write implementation code before writing a test\n2. Each test should verify ONE specific behavior\n3. Tests must fail before implementation (verify the test is actually testing something)\n4. After GREEN phase, run ALL tests to check for regressions\n5. REFACTOR phase is optional but should not change behavior";
13
+ /**
14
+ * Build a planning prompt for a story, optionally with TDD instructions
15
+ *
16
+ * @param story - The story to create a plan for
17
+ * @param tddEnabledInConfig - Whether TDD is enabled in the global config
18
+ * @param reworkContext - Optional context from a failed review
19
+ * @returns The complete planning prompt
20
+ */
21
+ export declare function buildPlanningPrompt(story: Story, tddEnabledInConfig: boolean, reworkContext?: string): string;
3
22
  /**
4
23
  * Planning Agent
5
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../src/agents/planning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAa7C;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAsEtB"}
1
+ {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../src/agents/planning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,sBAAsB,uiBASuF,CAAC;AAE3H;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,+xCAyBuB,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,OAAO,EAC3B,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CA+CR;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}