ai-sdlc 0.2.0-alpha.6 → 0.2.0-alpha.60

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 (135) hide show
  1. package/README.md +53 -1058
  2. package/dist/agents/implementation.d.ts +36 -1
  3. package/dist/agents/implementation.d.ts.map +1 -1
  4. package/dist/agents/implementation.js +259 -30
  5. package/dist/agents/implementation.js.map +1 -1
  6. package/dist/agents/index.d.ts +2 -0
  7. package/dist/agents/index.d.ts.map +1 -1
  8. package/dist/agents/index.js +2 -0
  9. package/dist/agents/index.js.map +1 -1
  10. package/dist/agents/orchestrator.d.ts +61 -0
  11. package/dist/agents/orchestrator.d.ts.map +1 -0
  12. package/dist/agents/orchestrator.js +443 -0
  13. package/dist/agents/orchestrator.js.map +1 -0
  14. package/dist/agents/planning.d.ts +1 -1
  15. package/dist/agents/planning.d.ts.map +1 -1
  16. package/dist/agents/planning.js +55 -4
  17. package/dist/agents/planning.js.map +1 -1
  18. package/dist/agents/refinement.d.ts.map +1 -1
  19. package/dist/agents/refinement.js +22 -3
  20. package/dist/agents/refinement.js.map +1 -1
  21. package/dist/agents/research.d.ts +85 -1
  22. package/dist/agents/research.d.ts.map +1 -1
  23. package/dist/agents/research.js +506 -16
  24. package/dist/agents/research.js.map +1 -1
  25. package/dist/agents/review.d.ts +103 -2
  26. package/dist/agents/review.d.ts.map +1 -1
  27. package/dist/agents/review.js +777 -93
  28. package/dist/agents/review.js.map +1 -1
  29. package/dist/agents/rework.d.ts.map +1 -1
  30. package/dist/agents/rework.js +25 -4
  31. package/dist/agents/rework.js.map +1 -1
  32. package/dist/agents/single-task.d.ts +41 -0
  33. package/dist/agents/single-task.d.ts.map +1 -0
  34. package/dist/agents/single-task.js +357 -0
  35. package/dist/agents/single-task.js.map +1 -0
  36. package/dist/agents/state-assessor.d.ts +3 -3
  37. package/dist/agents/state-assessor.d.ts.map +1 -1
  38. package/dist/agents/state-assessor.js +6 -6
  39. package/dist/agents/state-assessor.js.map +1 -1
  40. package/dist/agents/test-pattern-detector.d.ts +49 -0
  41. package/dist/agents/test-pattern-detector.d.ts.map +1 -0
  42. package/dist/agents/test-pattern-detector.js +273 -0
  43. package/dist/agents/test-pattern-detector.js.map +1 -0
  44. package/dist/agents/verification.d.ts +11 -0
  45. package/dist/agents/verification.d.ts.map +1 -1
  46. package/dist/agents/verification.js +99 -12
  47. package/dist/agents/verification.js.map +1 -1
  48. package/dist/cli/commands/migrate.js +1 -1
  49. package/dist/cli/commands/migrate.js.map +1 -1
  50. package/dist/cli/commands.d.ts +66 -3
  51. package/dist/cli/commands.d.ts.map +1 -1
  52. package/dist/cli/commands.js +1548 -198
  53. package/dist/cli/commands.js.map +1 -1
  54. package/dist/cli/daemon.d.ts.map +1 -1
  55. package/dist/cli/daemon.js +25 -3
  56. package/dist/cli/daemon.js.map +1 -1
  57. package/dist/cli/runner.d.ts.map +1 -1
  58. package/dist/cli/runner.js +35 -12
  59. package/dist/cli/runner.js.map +1 -1
  60. package/dist/core/auth.d.ts +43 -0
  61. package/dist/core/auth.d.ts.map +1 -1
  62. package/dist/core/auth.js +105 -1
  63. package/dist/core/auth.js.map +1 -1
  64. package/dist/core/client.d.ts +25 -1
  65. package/dist/core/client.d.ts.map +1 -1
  66. package/dist/core/client.js +247 -7
  67. package/dist/core/client.js.map +1 -1
  68. package/dist/core/config.d.ts +32 -1
  69. package/dist/core/config.d.ts.map +1 -1
  70. package/dist/core/config.js +146 -3
  71. package/dist/core/config.js.map +1 -1
  72. package/dist/core/conflict-detector.d.ts +108 -0
  73. package/dist/core/conflict-detector.d.ts.map +1 -0
  74. package/dist/core/conflict-detector.js +413 -0
  75. package/dist/core/conflict-detector.js.map +1 -0
  76. package/dist/core/git-utils.d.ts +28 -0
  77. package/dist/core/git-utils.d.ts.map +1 -0
  78. package/dist/core/git-utils.js +146 -0
  79. package/dist/core/git-utils.js.map +1 -0
  80. package/dist/core/index.d.ts +19 -0
  81. package/dist/core/index.d.ts.map +1 -0
  82. package/dist/core/index.js +19 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/core/kanban.d.ts +1 -1
  85. package/dist/core/kanban.d.ts.map +1 -1
  86. package/dist/core/kanban.js +3 -3
  87. package/dist/core/kanban.js.map +1 -1
  88. package/dist/core/llm-utils.d.ts +103 -0
  89. package/dist/core/llm-utils.d.ts.map +1 -0
  90. package/dist/core/llm-utils.js +368 -0
  91. package/dist/core/llm-utils.js.map +1 -0
  92. package/dist/core/logger.d.ts +92 -0
  93. package/dist/core/logger.d.ts.map +1 -0
  94. package/dist/core/logger.js +221 -0
  95. package/dist/core/logger.js.map +1 -0
  96. package/dist/core/process-manager.d.ts +15 -0
  97. package/dist/core/process-manager.d.ts.map +1 -0
  98. package/dist/core/process-manager.js +132 -0
  99. package/dist/core/process-manager.js.map +1 -0
  100. package/dist/core/story-logger.d.ts +102 -0
  101. package/dist/core/story-logger.d.ts.map +1 -0
  102. package/dist/core/story-logger.js +265 -0
  103. package/dist/core/story-logger.js.map +1 -0
  104. package/dist/core/story.d.ts +113 -20
  105. package/dist/core/story.d.ts.map +1 -1
  106. package/dist/core/story.js +328 -40
  107. package/dist/core/story.js.map +1 -1
  108. package/dist/core/task-parser.d.ts +59 -0
  109. package/dist/core/task-parser.d.ts.map +1 -0
  110. package/dist/core/task-parser.js +235 -0
  111. package/dist/core/task-parser.js.map +1 -0
  112. package/dist/core/task-progress.d.ts +92 -0
  113. package/dist/core/task-progress.d.ts.map +1 -0
  114. package/dist/core/task-progress.js +280 -0
  115. package/dist/core/task-progress.js.map +1 -0
  116. package/dist/core/workflow-state.d.ts +45 -6
  117. package/dist/core/workflow-state.d.ts.map +1 -1
  118. package/dist/core/workflow-state.js +201 -12
  119. package/dist/core/workflow-state.js.map +1 -1
  120. package/dist/core/worktree.d.ts +186 -0
  121. package/dist/core/worktree.d.ts.map +1 -0
  122. package/dist/core/worktree.js +554 -0
  123. package/dist/core/worktree.js.map +1 -0
  124. package/dist/index.js +145 -5
  125. package/dist/index.js.map +1 -1
  126. package/dist/services/error-classifier.d.ts +119 -0
  127. package/dist/services/error-classifier.d.ts.map +1 -0
  128. package/dist/services/error-classifier.js +182 -0
  129. package/dist/services/error-classifier.js.map +1 -0
  130. package/dist/types/index.d.ts +381 -1
  131. package/dist/types/index.d.ts.map +1 -1
  132. package/dist/types/index.js +1 -0
  133. package/dist/types/index.js.map +1 -1
  134. package/package.json +5 -2
  135. package/templates/story.md +5 -0
@@ -0,0 +1,273 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { glob } from 'glob';
4
+ /**
5
+ * Extract function names from file content using regex patterns
6
+ * Supports: function declarations, arrow functions, const functions
7
+ *
8
+ * @param fileContent - Source code to analyze
9
+ * @returns Array of function names found in the file
10
+ */
11
+ export function extractFunctionNames(fileContent) {
12
+ const functionNames = [];
13
+ // Pattern 1: function declarations (function foo() {})
14
+ const functionDeclPattern = /function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/g;
15
+ let match;
16
+ while ((match = functionDeclPattern.exec(fileContent)) !== null) {
17
+ functionNames.push(match[1]);
18
+ }
19
+ // Pattern 2: arrow functions (const foo = () => {})
20
+ const arrowFunctionPattern = /const\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*\(/g;
21
+ while ((match = arrowFunctionPattern.exec(fileContent)) !== null) {
22
+ functionNames.push(match[1]);
23
+ }
24
+ // Pattern 3: function expressions (const foo = function() {})
25
+ const functionExprPattern = /const\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*function/g;
26
+ while ((match = functionExprPattern.exec(fileContent)) !== null) {
27
+ functionNames.push(match[1]);
28
+ }
29
+ return functionNames;
30
+ }
31
+ /**
32
+ * Check if a function name matches legitimate test utility patterns
33
+ * Returns true if the function is a legitimate test helper (should NOT be flagged)
34
+ *
35
+ * Legitimate patterns:
36
+ * - Factory functions: create*, make*, build*, mock*, stub*, fake*
37
+ * - Setup/teardown: setup*, teardown*, before*, after*, cleanup*
38
+ * - Assertion helpers: assert*, expect*, verify*, check*, should*
39
+ * - Test data builders: with*, given*, having*
40
+ *
41
+ * @param functionName - Name of the function to check
42
+ * @returns true if legitimate test utility, false if potential anti-pattern
43
+ */
44
+ export function isLegitimateTestUtility(functionName) {
45
+ const legitimatePatterns = [
46
+ // Factory functions
47
+ /^(create|make|build|mock|stub|fake)/i,
48
+ // Setup/teardown helpers
49
+ /^(setup|teardown|before|after|cleanup)/i,
50
+ // Assertion helpers
51
+ /^(assert|expect|verify|check|should)/i,
52
+ // Test data builders
53
+ /^(with|given|having)/i,
54
+ ];
55
+ // Check if function matches any legitimate pattern
56
+ for (const pattern of legitimatePatterns) {
57
+ if (pattern.test(functionName)) {
58
+ return true;
59
+ }
60
+ }
61
+ // Check for anti-pattern indicators
62
+ const antiPatterns = [
63
+ /Test$/, // Ends with "Test"
64
+ /^test[A-Z]/, // Starts with "test" followed by capital letter
65
+ ];
66
+ for (const pattern of antiPatterns) {
67
+ if (pattern.test(functionName)) {
68
+ return false; // This is a potential anti-pattern
69
+ }
70
+ }
71
+ // Default: consider it legitimate (avoid false positives)
72
+ return true;
73
+ }
74
+ /**
75
+ * Find the corresponding production file for a test file
76
+ * Handles both colocated tests and centralized test directories
77
+ *
78
+ * @param testFilePath - Absolute path to test file
79
+ * @returns Absolute path to production file, or null if not found
80
+ */
81
+ export function findProductionFile(testFilePath) {
82
+ // Remove .test.ts or .test.js extension
83
+ const withoutTestExt = testFilePath.replace(/\.test\.(ts|tsx|js|jsx)$/, '.$1');
84
+ // Case 1: Colocated test (src/core/story.test.ts -> src/core/story.ts)
85
+ if (fs.existsSync(withoutTestExt)) {
86
+ return withoutTestExt;
87
+ }
88
+ // Case 2: Test in tests/ directory (tests/integration/foo.test.ts -> src/integration/foo.ts)
89
+ if (testFilePath.includes('/tests/')) {
90
+ const relativePath = testFilePath.split('/tests/')[1];
91
+ const srcPath = testFilePath.split('/tests/')[0] + '/src/' + relativePath.replace(/\.test\.(ts|tsx|js|jsx)$/, '.$1');
92
+ if (fs.existsSync(srcPath)) {
93
+ return srcPath;
94
+ }
95
+ }
96
+ // Case 3: Try replacing tests/ with src/ in path
97
+ const srcReplaced = testFilePath.replace('/tests/', '/src/').replace(/\.test\.(ts|tsx|js|jsx)$/, '.$1');
98
+ if (fs.existsSync(srcReplaced)) {
99
+ return srcReplaced;
100
+ }
101
+ // Fallback: return the properly transformed path even if it doesn't exist
102
+ // For tests/ directory files, return the src/ mapped path
103
+ // Caller can handle missing files
104
+ if (testFilePath.includes('/tests/')) {
105
+ const relativePath = testFilePath.split('/tests/')[1];
106
+ return testFilePath.split('/tests/')[0] + '/src/' + relativePath.replace(/\.test\.(ts|tsx|js|jsx)$/, '.$1');
107
+ }
108
+ return withoutTestExt;
109
+ }
110
+ /**
111
+ * Get line number for a function in source code
112
+ *
113
+ * @param fileContent - Source code
114
+ * @param functionName - Function to find
115
+ * @returns Line number (1-indexed) or undefined if not found
116
+ */
117
+ function getFunctionLineNumber(fileContent, functionName) {
118
+ const lines = fileContent.split('\n');
119
+ for (let i = 0; i < lines.length; i++) {
120
+ const line = lines[i];
121
+ // Match function declaration with the exact function name
122
+ if (line.includes(`function ${functionName}(`) ||
123
+ line.includes(`function ${functionName} (`) ||
124
+ line.includes(`const ${functionName} =`)) {
125
+ return i + 1; // 1-indexed
126
+ }
127
+ }
128
+ return undefined;
129
+ }
130
+ /**
131
+ * Analyze a single test file for duplication patterns
132
+ *
133
+ * @param testFilePath - Absolute path to test file
134
+ * @param testFileContent - Content of the test file
135
+ * @param productionFileContent - Content of the corresponding production file
136
+ * @returns Array of ReviewIssue objects for detected anti-patterns
137
+ */
138
+ export function analyzeTestFile(testFilePath, testFileContent, productionFileContent) {
139
+ const issues = [];
140
+ // Extract function names from test file
141
+ const testFunctions = extractFunctionNames(testFileContent);
142
+ // Extract exported functions from production file
143
+ const productionExports = extractProductionExports(productionFileContent);
144
+ // Check each test function for anti-patterns
145
+ for (const functionName of testFunctions) {
146
+ // Skip legitimate test utilities
147
+ if (isLegitimateTestUtility(functionName)) {
148
+ continue;
149
+ }
150
+ // Check if this looks like a duplicated production function
151
+ const matchingExport = findMatchingProductionExport(functionName, productionExports);
152
+ if (matchingExport) {
153
+ const lineNumber = getFunctionLineNumber(testFileContent, functionName);
154
+ const productionFile = findProductionFile(testFilePath);
155
+ issues.push({
156
+ severity: 'major',
157
+ category: 'test_antipattern',
158
+ description: `Test helper function "${functionName}" appears to duplicate production logic. Tests should import actual functions instead of reimplementing them.`,
159
+ file: testFilePath,
160
+ line: lineNumber,
161
+ suggestedFix: productionFile
162
+ ? `Export "${matchingExport}" from "${path.basename(productionFile)}" and import it in tests instead of duplicating the logic.`
163
+ : `Export the production version of "${matchingExport}" and import it in tests instead of duplicating the logic.`,
164
+ });
165
+ }
166
+ }
167
+ return issues;
168
+ }
169
+ /**
170
+ * Extract exported function names from production file content
171
+ *
172
+ * @param fileContent - Production file source code
173
+ * @returns Array of exported function names
174
+ */
175
+ function extractProductionExports(fileContent) {
176
+ const exports = [];
177
+ // Pattern 1: export function foo() {}
178
+ const exportFunctionPattern = /export\s+function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/g;
179
+ let match;
180
+ while ((match = exportFunctionPattern.exec(fileContent)) !== null) {
181
+ exports.push(match[1]);
182
+ }
183
+ // Pattern 2: export const foo = () => {}
184
+ const exportConstPattern = /export\s+const\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;
185
+ while ((match = exportConstPattern.exec(fileContent)) !== null) {
186
+ exports.push(match[1]);
187
+ }
188
+ // Pattern 3: export { foo, bar }
189
+ const exportBlockPattern = /export\s*\{\s*([^}]+)\s*\}/g;
190
+ while ((match = exportBlockPattern.exec(fileContent)) !== null) {
191
+ const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/)[0].trim());
192
+ exports.push(...names);
193
+ }
194
+ return exports;
195
+ }
196
+ /**
197
+ * Find matching production export for a test function name
198
+ * Handles naming patterns: fooTest -> foo, testFoo -> foo
199
+ *
200
+ * @param testFunctionName - Name of test helper function
201
+ * @param productionExports - Array of exported function names from production
202
+ * @returns Matching export name or null
203
+ */
204
+ function findMatchingProductionExport(testFunctionName, productionExports) {
205
+ // Pattern 1: fooTest -> foo
206
+ if (testFunctionName.endsWith('Test')) {
207
+ const baseName = testFunctionName.slice(0, -4); // Remove "Test" suffix
208
+ if (productionExports.includes(baseName)) {
209
+ return baseName;
210
+ }
211
+ }
212
+ // Pattern 2: testFoo -> foo
213
+ if (testFunctionName.startsWith('test') && testFunctionName.length > 4) {
214
+ const baseName = testFunctionName.charAt(4).toLowerCase() + testFunctionName.slice(5);
215
+ if (productionExports.includes(baseName)) {
216
+ return baseName;
217
+ }
218
+ }
219
+ return null;
220
+ }
221
+ /**
222
+ * Detect test duplication patterns across all test files in working directory
223
+ * Main entry point for the detection system
224
+ *
225
+ * @param workingDir - Project root directory
226
+ * @returns Array of ReviewIssue objects for all detected anti-patterns
227
+ */
228
+ export async function detectTestDuplicationPatterns(workingDir) {
229
+ const allIssues = [];
230
+ try {
231
+ // Find all test files using glob patterns
232
+ const testPatterns = ['**/*.test.ts', '**/*.test.tsx', '**/*.test.js', '**/*.test.jsx'];
233
+ const testFiles = [];
234
+ for (const pattern of testPatterns) {
235
+ const matches = await glob(pattern, {
236
+ cwd: workingDir,
237
+ absolute: true,
238
+ ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
239
+ });
240
+ testFiles.push(...matches);
241
+ }
242
+ // Analyze each test file
243
+ for (const testFilePath of testFiles) {
244
+ try {
245
+ // Read test file
246
+ const testFileContent = fs.readFileSync(testFilePath, 'utf-8');
247
+ // Find corresponding production file
248
+ const productionFilePath = findProductionFile(testFilePath);
249
+ if (!productionFilePath || !fs.existsSync(productionFilePath)) {
250
+ // No production file found - skip (might be integration test or test utilities)
251
+ continue;
252
+ }
253
+ // Read production file
254
+ const productionFileContent = fs.readFileSync(productionFilePath, 'utf-8');
255
+ // Analyze for anti-patterns
256
+ const issues = analyzeTestFile(testFilePath, testFileContent, productionFileContent);
257
+ allIssues.push(...issues);
258
+ }
259
+ catch (error) {
260
+ // Skip files that can't be read (permissions, encoding issues, etc.)
261
+ console.debug(`Skipping test file ${testFilePath}: ${error}`);
262
+ continue;
263
+ }
264
+ }
265
+ }
266
+ catch (error) {
267
+ // If glob fails or directory doesn't exist, return empty array
268
+ console.debug(`Test pattern detection failed: ${error}`);
269
+ return [];
270
+ }
271
+ return allIssues;
272
+ }
273
+ //# sourceMappingURL=test-pattern-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-pattern-detector.js","sourceRoot":"","sources":["../../src/agents/test-pattern-detector.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,17 @@ export interface VerificationOptions {
16
16
  output: string;
17
17
  }>;
18
18
  requirePassingTests?: boolean;
19
+ skipDependencyCheck?: boolean;
19
20
  }
21
+ /**
22
+ * Ensures dependencies are installed before running tests/build.
23
+ * Checks if node_modules exists and has packages. If not, runs the appropriate install command.
24
+ * @param workingDir - The directory to check for dependencies
25
+ * @returns Result indicating if install was needed and any error that occurred
26
+ */
27
+ export declare function ensureDependenciesInstalled(workingDir: string): {
28
+ installed: boolean;
29
+ error?: string;
30
+ };
20
31
  export declare function verifyImplementation(story: Story, workingDir: string, options?: VerificationOptions): Promise<VerificationResult>;
21
32
  //# sourceMappingURL=verification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/agents/verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA6ED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAsD7B"}
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/agents/verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO1C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAWD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkDtG;AA+ED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAiF7B"}
@@ -1,5 +1,66 @@
1
1
  import { loadConfig } from '../core/config.js';
2
- import { spawn } from 'child_process';
2
+ import { spawn, spawnSync } from 'child_process';
3
+ import { ProcessManager } from '../core/process-manager.js';
4
+ import { existsSync, readdirSync } from 'fs';
5
+ import path from 'path';
6
+ /**
7
+ * Lock file to package manager mapping
8
+ */
9
+ const LOCK_FILE_TO_PM = {
10
+ 'package-lock.json': 'npm',
11
+ 'yarn.lock': 'yarn',
12
+ 'pnpm-lock.yaml': 'pnpm',
13
+ };
14
+ /**
15
+ * Ensures dependencies are installed before running tests/build.
16
+ * Checks if node_modules exists and has packages. If not, runs the appropriate install command.
17
+ * @param workingDir - The directory to check for dependencies
18
+ * @returns Result indicating if install was needed and any error that occurred
19
+ */
20
+ export function ensureDependenciesInstalled(workingDir) {
21
+ const packageJsonPath = path.join(workingDir, 'package.json');
22
+ // Skip if not a Node.js project
23
+ if (!existsSync(packageJsonPath)) {
24
+ return { installed: false };
25
+ }
26
+ const nodeModulesPath = path.join(workingDir, 'node_modules');
27
+ // Check if node_modules exists and has contents
28
+ let hasNodeModules = false;
29
+ if (existsSync(nodeModulesPath)) {
30
+ try {
31
+ const contents = readdirSync(nodeModulesPath);
32
+ // node_modules should have more than just .bin to be considered populated
33
+ hasNodeModules = contents.length > 1 || (contents.length === 1 && contents[0] !== '.bin');
34
+ }
35
+ catch {
36
+ hasNodeModules = false;
37
+ }
38
+ }
39
+ if (hasNodeModules) {
40
+ return { installed: false };
41
+ }
42
+ // Detect package manager from lock file
43
+ let packageManager = 'npm';
44
+ for (const [lockFile, pm] of Object.entries(LOCK_FILE_TO_PM)) {
45
+ if (existsSync(path.join(workingDir, lockFile))) {
46
+ packageManager = pm;
47
+ break;
48
+ }
49
+ }
50
+ // Run install command
51
+ const result = spawnSync(packageManager, ['install'], {
52
+ cwd: workingDir,
53
+ encoding: 'utf-8',
54
+ shell: false,
55
+ stdio: ['ignore', 'pipe', 'pipe'],
56
+ timeout: 120000, // 2 minute timeout
57
+ });
58
+ if (result.status !== 0) {
59
+ const stderr = result.stderr?.toString() || '';
60
+ return { installed: false, error: `Failed to install dependencies: ${stderr}` };
61
+ }
62
+ return { installed: true };
63
+ }
3
64
  async function runCommandAsync(command, workingDir, timeout) {
4
65
  return new Promise((resolve) => {
5
66
  const outputChunks = [];
@@ -11,6 +72,7 @@ async function runCommandAsync(command, workingDir, timeout) {
11
72
  cwd: workingDir,
12
73
  stdio: ['pipe', 'pipe', 'pipe'],
13
74
  });
75
+ ProcessManager.getInstance().registerChild(child);
14
76
  const timeoutId = setTimeout(() => {
15
77
  killed = true;
16
78
  child.kill('SIGTERM');
@@ -73,18 +135,20 @@ export async function verifyImplementation(story, workingDir, options = {}) {
73
135
  let buildOutput = '';
74
136
  let testsRan = false;
75
137
  let buildRan = false;
76
- if (options.runTests) {
77
- testsRan = true;
78
- const testResult = await options.runTests(workingDir, testTimeout);
79
- testsPassed = testResult.success;
80
- testsOutput = testResult.output;
81
- }
82
- else if (config.testCommand) {
83
- testsRan = true;
84
- const testResult = await runCommandAsync(config.testCommand, workingDir, testTimeout);
85
- testsPassed = testResult.success;
86
- testsOutput = testResult.output;
138
+ // Ensure dependencies are installed before running tests/build
139
+ if (!options.skipDependencyCheck) {
140
+ const depResult = ensureDependenciesInstalled(workingDir);
141
+ if (depResult.error) {
142
+ return {
143
+ passed: false,
144
+ failures: 0,
145
+ timestamp,
146
+ testsOutput: '',
147
+ buildOutput: depResult.error,
148
+ };
149
+ }
87
150
  }
151
+ // Run build first - tests require successful compilation
88
152
  if (options.runBuild) {
89
153
  buildRan = true;
90
154
  const buildResult = await options.runBuild(workingDir, buildTimeout);
@@ -97,6 +161,29 @@ export async function verifyImplementation(story, workingDir, options = {}) {
97
161
  buildPassed = buildResult.success;
98
162
  buildOutput = buildResult.output;
99
163
  }
164
+ // Short-circuit: Don't run tests if build failed
165
+ if (buildRan && !buildPassed) {
166
+ return {
167
+ passed: false,
168
+ failures: 0,
169
+ timestamp,
170
+ testsOutput: 'Build failed - skipping tests. Fix TypeScript errors first.',
171
+ buildOutput,
172
+ };
173
+ }
174
+ // Run tests only after successful build (or when no build command exists)
175
+ if (options.runTests) {
176
+ testsRan = true;
177
+ const testResult = await options.runTests(workingDir, testTimeout);
178
+ testsPassed = testResult.success;
179
+ testsOutput = testResult.output;
180
+ }
181
+ else if (config.testCommand) {
182
+ testsRan = true;
183
+ const testResult = await runCommandAsync(config.testCommand, workingDir, testTimeout);
184
+ testsPassed = testResult.success;
185
+ testsOutput = testResult.output;
186
+ }
100
187
  const failures = testsPassed ? 0 : extractFailureCount(testsOutput);
101
188
  let passed;
102
189
  if (requirePassingTests) {
@@ -1 +1 @@
1
- {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/agents/verification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/agents/verification.ts"],"names":[],"mappings":"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"}
@@ -77,7 +77,7 @@ export async function migrateToFolderPerStory(sdlcRoot, options) {
77
77
  const newFolder = path.dirname(item.newPath);
78
78
  fs.mkdirSync(newFolder, { recursive: true });
79
79
  story.path = item.newPath;
80
- writeStory(story);
80
+ await writeStory(story);
81
81
  fs.unlinkSync(item.oldPath);
82
82
  }
83
83
  for (const folder of oldFolders) {
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Story, ActionType } from '../types/index.js';
1
+ import { Story, ActionType, PreFlightResult } from '../types/index.js';
2
2
  /**
3
3
  * Initialize the .ai-sdlc folder structure
4
4
  */
@@ -12,7 +12,47 @@ export declare function status(options?: {
12
12
  /**
13
13
  * Add a new story to the backlog
14
14
  */
15
- export declare function add(title: string): Promise<void>;
15
+ export declare function add(title?: string, options?: {
16
+ file?: string;
17
+ }): Promise<void>;
18
+ /**
19
+ * Determine if worktree mode should be used based on CLI flags, story frontmatter, and config.
20
+ * Priority order:
21
+ * 1. CLI --no-worktree flag (explicit disable)
22
+ * 2. CLI --worktree flag (explicit enable)
23
+ * 3. Story frontmatter.worktree_path exists (auto-enable for resuming)
24
+ * 4. Config worktree.enabled (default behavior)
25
+ */
26
+ export declare function determineWorktreeMode(options: {
27
+ worktree?: boolean;
28
+ }, worktreeConfig: {
29
+ enabled: boolean;
30
+ }, targetStory: Story | null): boolean;
31
+ /**
32
+ * Perform pre-flight conflict check before starting work on a story in a worktree.
33
+ * Warns about potential file conflicts with active stories and prompts for confirmation.
34
+ *
35
+ * **Race Condition (TOCTOU):** Multiple users can pass this check simultaneously
36
+ * before branches are created. This is an accepted risk - the window is small
37
+ * (~100ms) and git will catch conflicts during merge/PR creation. Adding file
38
+ * locks would significantly increase complexity for minimal security gain.
39
+ *
40
+ * **Security Notes:**
41
+ * - sdlcRoot is normalized and validated (absolute path, no null bytes, max 1024 chars)
42
+ * - All display output is sanitized to prevent terminal injection attacks
43
+ * - Story IDs are validated with sanitizeStoryId() then stripped with sanitizeForDisplay()
44
+ * - Error messages are generic to prevent information leakage
45
+ *
46
+ * @param targetStory - The story to check for conflicts
47
+ * @param sdlcRoot - Root directory of the .ai-sdlc folder (must be absolute, validated)
48
+ * @param options - Command options (force flag)
49
+ * @param options.force - Skip conflict check if true
50
+ * @returns PreFlightResult indicating whether to proceed and any warnings
51
+ * @throws Error if sdlcRoot is invalid (not absolute, null bytes, too long)
52
+ */
53
+ export declare function preFlightConflictCheck(targetStory: Story, sdlcRoot: string, options: {
54
+ force?: boolean;
55
+ }): Promise<PreFlightResult>;
16
56
  /**
17
57
  * Run the workflow (process one action or all)
18
58
  */
@@ -24,6 +64,9 @@ export declare function run(options: {
24
64
  step?: string;
25
65
  maxIterations?: string;
26
66
  watch?: boolean;
67
+ force?: boolean;
68
+ worktree?: boolean;
69
+ clean?: boolean;
27
70
  }): Promise<void>;
28
71
  /**
29
72
  * Phase information for RPIV display
@@ -90,10 +133,30 @@ export declare function details(idOrSlug: string): Promise<void>;
90
133
  */
91
134
  export declare function unblock(storyId: string, options?: {
92
135
  resetRetries?: boolean;
93
- }): void;
136
+ }): Promise<void>;
94
137
  export declare function migrate(options: {
95
138
  dryRun?: boolean;
96
139
  backup?: boolean;
97
140
  force?: boolean;
98
141
  }): Promise<void>;
142
+ /**
143
+ * Security: Escape shell arguments for safe use in commands
144
+ * For use with execSync when shell execution is required
145
+ * @internal Exported for testing
146
+ */
147
+ export declare function escapeShellArg(arg: string): string;
148
+ /**
149
+ * List all ai-sdlc managed worktrees
150
+ */
151
+ export declare function listWorktrees(): Promise<void>;
152
+ /**
153
+ * Create a worktree for a specific story
154
+ */
155
+ export declare function addWorktree(storyId: string): Promise<void>;
156
+ /**
157
+ * Remove a worktree for a specific story
158
+ */
159
+ export declare function removeWorktree(storyId: string, options?: {
160
+ force?: boolean;
161
+ }): Promise<void>;
99
162
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAU,UAAU,EAA4G,MAAM,mBAAmB,CAAC;AAgBxK;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB1C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF1E;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBtD;AA0ED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6blL;AAuPD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAiDlF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAgCA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,CAsBtE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYtD;AA6DD;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkH7D;AA8GD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAgCnF;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G7G"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}