@kosuke-ai/cli 0.0.12 ā 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +148 -6
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts +22 -0
- package/dist/kosuke/commands/build.d.ts.map +1 -0
- package/dist/kosuke/commands/build.js +135 -0
- package/dist/kosuke/commands/build.js.map +1 -0
- package/dist/kosuke/commands/review.d.ts +21 -0
- package/dist/kosuke/commands/review.d.ts.map +1 -0
- package/dist/kosuke/commands/review.js +185 -0
- package/dist/kosuke/commands/review.js.map +1 -0
- package/dist/kosuke/commands/ship.d.ts +23 -0
- package/dist/kosuke/commands/ship.d.ts.map +1 -0
- package/dist/kosuke/commands/ship.js +419 -0
- package/dist/kosuke/commands/ship.js.map +1 -0
- package/dist/kosuke/commands/test.d.ts +27 -0
- package/dist/kosuke/commands/test.d.ts.map +1 -0
- package/dist/kosuke/commands/test.js +338 -0
- package/dist/kosuke/commands/test.js.map +1 -0
- package/dist/kosuke/types.d.ts +82 -2
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/error-analyzer.d.ts +32 -0
- package/dist/kosuke/utils/error-analyzer.d.ts.map +1 -0
- package/dist/kosuke/utils/error-analyzer.js +129 -0
- package/dist/kosuke/utils/error-analyzer.js.map +1 -0
- package/dist/kosuke/utils/git.d.ts +12 -0
- package/dist/kosuke/utils/git.d.ts.map +1 -1
- package/dist/kosuke/utils/git.js +39 -0
- package/dist/kosuke/utils/git.js.map +1 -1
- package/dist/kosuke/utils/log-collector.d.ts +81 -0
- package/dist/kosuke/utils/log-collector.d.ts.map +1 -0
- package/dist/kosuke/utils/log-collector.js +226 -0
- package/dist/kosuke/utils/log-collector.js.map +1 -0
- package/dist/kosuke/utils/playwright-agent.d.ts +39 -0
- package/dist/kosuke/utils/playwright-agent.d.ts.map +1 -0
- package/dist/kosuke/utils/playwright-agent.js +245 -0
- package/dist/kosuke/utils/playwright-agent.js.map +1 -0
- package/dist/kosuke/utils/test-generator.d.ts +22 -0
- package/dist/kosuke/utils/test-generator.d.ts.map +1 -0
- package/dist/kosuke/utils/test-generator.js +174 -0
- package/dist/kosuke/utils/test-generator.js.map +1 -0
- package/dist/kosuke/utils/validator.d.ts +11 -0
- package/dist/kosuke/utils/validator.d.ts.map +1 -1
- package/dist/kosuke/utils/validator.js +100 -0
- package/dist/kosuke/utils/validator.js.map +1 -1
- package/dist/kosuke/utils/visual-tester.d.ts +71 -0
- package/dist/kosuke/utils/visual-tester.d.ts.map +1 -0
- package/dist/kosuke/utils/visual-tester.js +202 -0
- package/dist/kosuke/utils/visual-tester.js.map +1 -0
- package/dist/lib.d.ts +6 -2
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +5 -1
- package/dist/lib.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test command - Automated E2E testing with iterative fixing
|
|
3
|
+
*
|
|
4
|
+
* This command:
|
|
5
|
+
* 1. Loads a ticket and generates/locates Playwright tests
|
|
6
|
+
* 2. Runs tests with visual regression, console/network/docker log collection
|
|
7
|
+
* 3. If tests fail: analyzes errors and applies fixes
|
|
8
|
+
* 4. Re-runs tests until passing or max retries reached
|
|
9
|
+
* 5. Runs linting after tests pass
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* kosuke test --ticket=FRONTEND-1 # Test with auto-fix
|
|
13
|
+
* kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
|
|
14
|
+
* kosuke test --ticket=FRONTEND-1 --headed # Show browser
|
|
15
|
+
* kosuke test --ticket=FRONTEND-1 --update-baseline # Update visual baselines
|
|
16
|
+
* kosuke test --ticket=FRONTEND-1 --pr # Create PR with fixes
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync, existsSync } from 'fs';
|
|
19
|
+
import { join } from 'path';
|
|
20
|
+
import { generateTest } from '../utils/test-generator.js';
|
|
21
|
+
import { runPlaywrightTests, isPlaywrightInstalled, installPlaywright, ensurePlaywrightConfig, } from '../utils/playwright-agent.js';
|
|
22
|
+
import { LogCollector } from '../utils/log-collector.js';
|
|
23
|
+
import { VisualTester } from '../utils/visual-tester.js';
|
|
24
|
+
import { analyzeAndFix } from '../utils/error-analyzer.js';
|
|
25
|
+
import { runComprehensiveLinting } from '../utils/validator.js';
|
|
26
|
+
import { runWithPR } from '../utils/pr-orchestrator.js';
|
|
27
|
+
/**
|
|
28
|
+
* Load tickets from file
|
|
29
|
+
*/
|
|
30
|
+
function loadTicketsFile(ticketsPath) {
|
|
31
|
+
if (!existsSync(ticketsPath)) {
|
|
32
|
+
throw new Error(`Tickets file not found: ${ticketsPath}\n` +
|
|
33
|
+
`Please generate tickets first using: kosuke tickets`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const content = readFileSync(ticketsPath, 'utf-8');
|
|
37
|
+
return JSON.parse(content);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new Error(`Failed to parse tickets file: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find ticket by ID
|
|
45
|
+
*/
|
|
46
|
+
function findTicket(ticketsData, ticketId) {
|
|
47
|
+
return ticketsData.tickets.find((t) => t.id === ticketId);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Core test logic (git-agnostic, reusable)
|
|
51
|
+
*/
|
|
52
|
+
export async function testCore(options) {
|
|
53
|
+
const { ticket: ticketId, url = 'http://localhost:3000', headed = false, debug = false, maxRetries = 3, ticketsFile = 'tickets.json', } = options;
|
|
54
|
+
const cwd = process.cwd();
|
|
55
|
+
const ticketsPath = join(cwd, ticketsFile);
|
|
56
|
+
// Track metrics
|
|
57
|
+
let totalInputTokens = 0;
|
|
58
|
+
let totalOutputTokens = 0;
|
|
59
|
+
let totalCacheCreationTokens = 0;
|
|
60
|
+
let totalCacheReadTokens = 0;
|
|
61
|
+
let totalCost = 0;
|
|
62
|
+
let totalFixesApplied = 0;
|
|
63
|
+
let iterations = 0;
|
|
64
|
+
let testsRun = 0;
|
|
65
|
+
let testsPassed = 0;
|
|
66
|
+
let testsFailed = 0;
|
|
67
|
+
let visualDiffs = 0;
|
|
68
|
+
let testFilePath = '';
|
|
69
|
+
let tracePath = '';
|
|
70
|
+
try {
|
|
71
|
+
// 1. Load and validate ticket
|
|
72
|
+
console.log('š Loading ticket...');
|
|
73
|
+
const ticketsData = loadTicketsFile(ticketsPath);
|
|
74
|
+
const ticket = findTicket(ticketsData, ticketId);
|
|
75
|
+
if (!ticket) {
|
|
76
|
+
throw new Error(`Ticket ${ticketId} not found in ${ticketsFile}\n` +
|
|
77
|
+
`Available tickets: ${ticketsData.tickets.map((t) => t.id).join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
if (ticket.status !== 'Done' && ticket.status !== 'InProgress') {
|
|
80
|
+
throw new Error(`Ticket ${ticketId} status is "${ticket.status}".\n` +
|
|
81
|
+
`Tests should only be run on tickets that have been implemented (Done or InProgress).`);
|
|
82
|
+
}
|
|
83
|
+
console.log(` ā
Loaded: ${ticket.id} - ${ticket.title}\n`);
|
|
84
|
+
// 2. Ensure Playwright is set up
|
|
85
|
+
console.log('š Checking Playwright setup...');
|
|
86
|
+
if (!isPlaywrightInstalled(cwd)) {
|
|
87
|
+
console.log(' ā¹ļø Playwright not found, installing...');
|
|
88
|
+
await installPlaywright(cwd);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log(' ā
Playwright is installed\n');
|
|
92
|
+
}
|
|
93
|
+
ensurePlaywrightConfig(cwd);
|
|
94
|
+
// 3. Generate or locate test
|
|
95
|
+
console.log('š Checking for existing tests...');
|
|
96
|
+
testFilePath = join(cwd, '.kosuke', 'tests', `${ticketId}.spec.ts`);
|
|
97
|
+
if (!existsSync(testFilePath)) {
|
|
98
|
+
console.log(' ā¹ļø No test found, generating new test...');
|
|
99
|
+
const genResult = await generateTest(ticket, url, cwd);
|
|
100
|
+
testFilePath = genResult.filePath;
|
|
101
|
+
totalInputTokens += genResult.tokensUsed.input;
|
|
102
|
+
totalOutputTokens += genResult.tokensUsed.output;
|
|
103
|
+
totalCacheCreationTokens += genResult.tokensUsed.cacheCreation;
|
|
104
|
+
totalCacheReadTokens += genResult.tokensUsed.cacheRead;
|
|
105
|
+
totalCost += genResult.cost;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(' ā
Test found:', testFilePath);
|
|
109
|
+
}
|
|
110
|
+
// 4. Test execution loop
|
|
111
|
+
let testsPassing = false;
|
|
112
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
113
|
+
iterations = attempt;
|
|
114
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
115
|
+
console.log(`š§Ŗ Test Execution (Attempt ${attempt}/${maxRetries})`);
|
|
116
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
117
|
+
// Initialize log collector and visual tester
|
|
118
|
+
const logCollector = new LogCollector();
|
|
119
|
+
const visualTester = new VisualTester(cwd);
|
|
120
|
+
// Run tests with Playwright
|
|
121
|
+
const testResult = await runPlaywrightTests({
|
|
122
|
+
testFile: testFilePath,
|
|
123
|
+
baseUrl: url,
|
|
124
|
+
headed,
|
|
125
|
+
debug,
|
|
126
|
+
cwd,
|
|
127
|
+
});
|
|
128
|
+
testsRun = testResult.testsRun;
|
|
129
|
+
testsPassed = testResult.testsPassed;
|
|
130
|
+
testsFailed = testResult.testsFailed;
|
|
131
|
+
tracePath = testResult.tracePath;
|
|
132
|
+
// Collect Docker logs
|
|
133
|
+
await logCollector.collectDockerLogs('30s');
|
|
134
|
+
// Get visual diffs
|
|
135
|
+
visualDiffs = visualTester.getFailedDiffs().length;
|
|
136
|
+
// Display results
|
|
137
|
+
console.log(`\nš Test Results:`);
|
|
138
|
+
console.log(` ā
Passed: ${testResult.testsPassed}`);
|
|
139
|
+
console.log(` ā Failed: ${testResult.testsFailed}`);
|
|
140
|
+
console.log(` šø Visual diffs: ${visualDiffs}`);
|
|
141
|
+
console.log(` ā±ļø Duration: ${(testResult.duration / 1000).toFixed(2)}s`);
|
|
142
|
+
// Check if all tests passed
|
|
143
|
+
if (testResult.success && !visualTester.hasRegressions()) {
|
|
144
|
+
testsPassing = true;
|
|
145
|
+
console.log('\nā
All tests passed!');
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
// If this is the last attempt, don't try to fix
|
|
149
|
+
if (attempt === maxRetries) {
|
|
150
|
+
console.log(`\nā Max retries (${maxRetries}) reached. Tests still failing.`);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
// 5. Analyze errors and apply fixes
|
|
154
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
155
|
+
console.log(`š Phase ${attempt}: Error Analysis & Fixing`);
|
|
156
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
157
|
+
console.log('š Collecting logs...');
|
|
158
|
+
const logs = logCollector.getErrors();
|
|
159
|
+
console.log(` š§ Console errors: ${logs.console.length}`);
|
|
160
|
+
console.log(` š§ Network failures: ${logs.network.length}`);
|
|
161
|
+
console.log(` š§ Docker logs: ${logs.docker.length}`);
|
|
162
|
+
// Analyze and fix
|
|
163
|
+
const analysisResult = await analyzeAndFix(ticket, testResult.failures, logs, testResult.tracePath, cwd);
|
|
164
|
+
totalFixesApplied += analysisResult.fixesApplied;
|
|
165
|
+
totalInputTokens += analysisResult.tokensUsed.input;
|
|
166
|
+
totalOutputTokens += analysisResult.tokensUsed.output;
|
|
167
|
+
totalCacheCreationTokens += analysisResult.tokensUsed.cacheCreation;
|
|
168
|
+
totalCacheReadTokens += analysisResult.tokensUsed.cacheRead;
|
|
169
|
+
totalCost += analysisResult.cost;
|
|
170
|
+
console.log(`\n š§ Applied ${analysisResult.fixesApplied} fixes`);
|
|
171
|
+
console.log(` š° Cost: $${analysisResult.cost.toFixed(4)}`);
|
|
172
|
+
// Continue to next iteration
|
|
173
|
+
console.log(`\nš Re-running tests in next iteration...`);
|
|
174
|
+
}
|
|
175
|
+
// 6. Linting phase (if tests passed)
|
|
176
|
+
if (testsPassing) {
|
|
177
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
178
|
+
console.log(`š§ Linting & Quality Checks`);
|
|
179
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
180
|
+
const lintResult = await runComprehensiveLinting();
|
|
181
|
+
console.log(`\nā
Linting completed (${lintResult.fixCount} fixes applied)`);
|
|
182
|
+
// Return success result
|
|
183
|
+
return {
|
|
184
|
+
ticketId,
|
|
185
|
+
success: true,
|
|
186
|
+
testsRun,
|
|
187
|
+
testsPassed,
|
|
188
|
+
testsFailed: 0,
|
|
189
|
+
visualDiffs: 0,
|
|
190
|
+
fixesApplied: totalFixesApplied,
|
|
191
|
+
lintFixCount: lintResult.fixCount,
|
|
192
|
+
iterations,
|
|
193
|
+
tokensUsed: {
|
|
194
|
+
input: totalInputTokens,
|
|
195
|
+
output: totalOutputTokens,
|
|
196
|
+
cacheCreation: totalCacheCreationTokens,
|
|
197
|
+
cacheRead: totalCacheReadTokens,
|
|
198
|
+
},
|
|
199
|
+
cost: totalCost,
|
|
200
|
+
testFilePath,
|
|
201
|
+
tracePath,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Return failure result
|
|
206
|
+
return {
|
|
207
|
+
ticketId,
|
|
208
|
+
success: false,
|
|
209
|
+
testsRun,
|
|
210
|
+
testsPassed,
|
|
211
|
+
testsFailed,
|
|
212
|
+
visualDiffs,
|
|
213
|
+
fixesApplied: totalFixesApplied,
|
|
214
|
+
lintFixCount: 0,
|
|
215
|
+
iterations,
|
|
216
|
+
tokensUsed: {
|
|
217
|
+
input: totalInputTokens,
|
|
218
|
+
output: totalOutputTokens,
|
|
219
|
+
cacheCreation: totalCacheCreationTokens,
|
|
220
|
+
cacheRead: totalCacheReadTokens,
|
|
221
|
+
},
|
|
222
|
+
cost: totalCost,
|
|
223
|
+
testFilePath,
|
|
224
|
+
tracePath,
|
|
225
|
+
error: 'Tests failed after maximum retry attempts',
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
231
|
+
console.error(`\nā Test execution failed: ${errorMessage}`);
|
|
232
|
+
return {
|
|
233
|
+
ticketId,
|
|
234
|
+
success: false,
|
|
235
|
+
testsRun,
|
|
236
|
+
testsPassed,
|
|
237
|
+
testsFailed,
|
|
238
|
+
visualDiffs,
|
|
239
|
+
fixesApplied: totalFixesApplied,
|
|
240
|
+
lintFixCount: 0,
|
|
241
|
+
iterations,
|
|
242
|
+
tokensUsed: {
|
|
243
|
+
input: totalInputTokens,
|
|
244
|
+
output: totalOutputTokens,
|
|
245
|
+
cacheCreation: totalCacheCreationTokens,
|
|
246
|
+
cacheRead: totalCacheReadTokens,
|
|
247
|
+
},
|
|
248
|
+
cost: totalCost,
|
|
249
|
+
testFilePath,
|
|
250
|
+
tracePath,
|
|
251
|
+
error: errorMessage,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Main test command
|
|
257
|
+
*/
|
|
258
|
+
export async function testCommand(options) {
|
|
259
|
+
const { ticket: ticketId, pr = false } = options;
|
|
260
|
+
console.log(`š§Ŗ Testing Ticket: ${ticketId}\n`);
|
|
261
|
+
try {
|
|
262
|
+
// Validate environment
|
|
263
|
+
if (!process.env.ANTHROPIC_API_KEY) {
|
|
264
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
265
|
+
}
|
|
266
|
+
if (pr && !process.env.GITHUB_TOKEN) {
|
|
267
|
+
throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
|
|
268
|
+
}
|
|
269
|
+
// If --pr flag is provided, wrap with PR workflow
|
|
270
|
+
if (pr) {
|
|
271
|
+
const { result: testResult, prInfo } = await runWithPR({
|
|
272
|
+
branchPrefix: `test/fix-${ticketId}`,
|
|
273
|
+
baseBranch: options.baseBranch,
|
|
274
|
+
commitMessage: `test: fix issues found in ${ticketId}`,
|
|
275
|
+
prTitle: `test: Fix issues in ${ticketId}`,
|
|
276
|
+
prBody: `## š§Ŗ Test Fixes for ${ticketId}
|
|
277
|
+
|
|
278
|
+
This PR contains automated fixes for issues found during E2E testing of ticket ${ticketId}.
|
|
279
|
+
|
|
280
|
+
### š Test Results
|
|
281
|
+
- Tests run: ${0} (will be filled by result)
|
|
282
|
+
- Fixes applied: ${0}
|
|
283
|
+
- Iterations: ${0}
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
š¤ *Generated by Kosuke CLI (\`kosuke test --ticket=${ticketId} --pr\`)*`,
|
|
288
|
+
}, async () => testCore(options));
|
|
289
|
+
// Display summary
|
|
290
|
+
displayTestSummary(testResult, prInfo.prUrl);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// Run core logic without PR
|
|
294
|
+
const result = await testCore(options);
|
|
295
|
+
displayTestSummary(result);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
console.error('\nā Test command failed:', error);
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Display test summary
|
|
305
|
+
*/
|
|
306
|
+
function displayTestSummary(result, prUrl) {
|
|
307
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
308
|
+
console.log('š Test Summary');
|
|
309
|
+
console.log('='.repeat(60));
|
|
310
|
+
if (result.success) {
|
|
311
|
+
console.log('ā
Status: All tests passed');
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
console.log('ā Status: Tests failed');
|
|
315
|
+
}
|
|
316
|
+
console.log(`š§Ŗ Tests: ${result.testsPassed} passed, ${result.testsFailed} failed (${result.testsRun} total)`);
|
|
317
|
+
console.log(`šø Visual: ${result.visualDiffs} regressions found`);
|
|
318
|
+
console.log(`š§ Fixes: ${result.fixesApplied} applied`);
|
|
319
|
+
console.log(`š§¹ Lint: ${result.lintFixCount} fixes applied`);
|
|
320
|
+
console.log(`š Iterations: ${result.iterations}`);
|
|
321
|
+
console.log(`š° Total cost: $${result.cost.toFixed(4)}`);
|
|
322
|
+
console.log(`š Test file: ${result.testFilePath}`);
|
|
323
|
+
console.log(`š Trace: ${result.tracePath}`);
|
|
324
|
+
if (prUrl) {
|
|
325
|
+
console.log(`š PR: ${prUrl}`);
|
|
326
|
+
}
|
|
327
|
+
console.log('='.repeat(60));
|
|
328
|
+
if (result.success) {
|
|
329
|
+
console.log('\nā
Testing completed successfully!');
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.log(`\nā Testing failed: ${result.error || 'Unknown error'}`);
|
|
333
|
+
if (!prUrl) {
|
|
334
|
+
console.log('ā¹ļø Review the logs and trace file above for more details.');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"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"}
|
package/dist/kosuke/types.d.ts
CHANGED
|
@@ -72,7 +72,8 @@ export interface Ticket {
|
|
|
72
72
|
title: string;
|
|
73
73
|
description: string;
|
|
74
74
|
estimatedEffort: number;
|
|
75
|
-
status: 'Todo' | 'Done';
|
|
75
|
+
status: 'Todo' | 'InProgress' | 'Done' | 'Error';
|
|
76
|
+
error?: string;
|
|
76
77
|
}
|
|
77
78
|
export interface TicketsResult {
|
|
78
79
|
schemaTickets: Ticket[];
|
|
@@ -87,5 +88,84 @@ export interface TicketsResult {
|
|
|
87
88
|
};
|
|
88
89
|
cost: number;
|
|
89
90
|
}
|
|
90
|
-
export {
|
|
91
|
+
export interface ShipOptions {
|
|
92
|
+
ticket: string;
|
|
93
|
+
review?: boolean;
|
|
94
|
+
commit?: boolean;
|
|
95
|
+
pr?: boolean;
|
|
96
|
+
baseBranch?: string;
|
|
97
|
+
ticketsFile?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface BuildOptions {
|
|
100
|
+
ticketsFile?: string;
|
|
101
|
+
}
|
|
102
|
+
export interface ReviewOptions {
|
|
103
|
+
}
|
|
104
|
+
export interface ShipResult {
|
|
105
|
+
ticketId: string;
|
|
106
|
+
success: boolean;
|
|
107
|
+
implementationFixCount: number;
|
|
108
|
+
lintFixCount: number;
|
|
109
|
+
reviewPerformed: boolean;
|
|
110
|
+
reviewFixCount: number;
|
|
111
|
+
gitDiffReviewed: boolean;
|
|
112
|
+
gitDiffReviewFixCount: number;
|
|
113
|
+
tokensUsed: {
|
|
114
|
+
input: number;
|
|
115
|
+
output: number;
|
|
116
|
+
cacheCreation: number;
|
|
117
|
+
cacheRead: number;
|
|
118
|
+
};
|
|
119
|
+
cost: number;
|
|
120
|
+
error?: string;
|
|
121
|
+
}
|
|
122
|
+
export interface ReviewResult {
|
|
123
|
+
success: boolean;
|
|
124
|
+
issuesFound: number;
|
|
125
|
+
fixesApplied: number;
|
|
126
|
+
tokensUsed: {
|
|
127
|
+
input: number;
|
|
128
|
+
output: number;
|
|
129
|
+
cacheCreation: number;
|
|
130
|
+
cacheRead: number;
|
|
131
|
+
};
|
|
132
|
+
cost: number;
|
|
133
|
+
}
|
|
134
|
+
export interface TestOptions {
|
|
135
|
+
ticket: string;
|
|
136
|
+
url?: string;
|
|
137
|
+
headed?: boolean;
|
|
138
|
+
debug?: boolean;
|
|
139
|
+
updateBaseline?: boolean;
|
|
140
|
+
maxRetries?: number;
|
|
141
|
+
ticketsFile?: string;
|
|
142
|
+
pr?: boolean;
|
|
143
|
+
baseBranch?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface TestResult {
|
|
146
|
+
ticketId: string;
|
|
147
|
+
success: boolean;
|
|
148
|
+
testsRun: number;
|
|
149
|
+
testsPassed: number;
|
|
150
|
+
testsFailed: number;
|
|
151
|
+
visualDiffs: number;
|
|
152
|
+
fixesApplied: number;
|
|
153
|
+
lintFixCount: number;
|
|
154
|
+
iterations: number;
|
|
155
|
+
tokensUsed: {
|
|
156
|
+
input: number;
|
|
157
|
+
output: number;
|
|
158
|
+
cacheCreation: number;
|
|
159
|
+
cacheRead: number;
|
|
160
|
+
};
|
|
161
|
+
cost: number;
|
|
162
|
+
testFilePath: string;
|
|
163
|
+
tracePath: string;
|
|
164
|
+
error?: string;
|
|
165
|
+
}
|
|
166
|
+
export type { AnalysisResult, TestFailure } from './utils/error-analyzer.js';
|
|
167
|
+
export type { ConsoleLog, NetworkLog, DockerLog, CollectedLogs } from './utils/log-collector.js';
|
|
168
|
+
export type { PlaywrightResult, PlaywrightOptions } from './utils/playwright-agent.js';
|
|
169
|
+
export type { GeneratedTest } from './utils/test-generator.js';
|
|
170
|
+
export type { VisualDiff, VisualTestOptions } from './utils/visual-tester.js';
|
|
91
171
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../kosuke/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,OAAO,GACR,gBAAgB,GAChB,oBAAoB,GACpB,eAAe,GACf,sBAAsB,GACtB,uBAAuB,GACvB,gBAAgB,GAChB,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../kosuke/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Analyzer - Analyze test failures and apply fixes
|
|
3
|
+
*
|
|
4
|
+
* Uses Claude to:
|
|
5
|
+
* - Analyze test failures, console errors, network failures, and backend logs
|
|
6
|
+
* - Identify root causes
|
|
7
|
+
* - Apply fixes to the codebase
|
|
8
|
+
*/
|
|
9
|
+
import type { Ticket } from '../types.js';
|
|
10
|
+
import type { CollectedLogs } from './log-collector.js';
|
|
11
|
+
export interface AnalysisResult {
|
|
12
|
+
rootCause: string;
|
|
13
|
+
fixesApplied: number;
|
|
14
|
+
tokensUsed: {
|
|
15
|
+
input: number;
|
|
16
|
+
output: number;
|
|
17
|
+
cacheCreation: number;
|
|
18
|
+
cacheRead: number;
|
|
19
|
+
};
|
|
20
|
+
cost: number;
|
|
21
|
+
}
|
|
22
|
+
export interface TestFailure {
|
|
23
|
+
testName: string;
|
|
24
|
+
errorMessage: string;
|
|
25
|
+
expected?: string;
|
|
26
|
+
received?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Analyze test failures and apply fixes
|
|
30
|
+
*/
|
|
31
|
+
export declare function analyzeAndFix(ticket: Ticket, testFailures: TestFailure[], logs: CollectedLogs, tracePath: string, cwd?: string): Promise<AnalysisResult>;
|
|
32
|
+
//# sourceMappingURL=error-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-analyzer.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/error-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,EAAE,EAC3B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAuBzB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Analyzer - Analyze test failures and apply fixes
|
|
3
|
+
*
|
|
4
|
+
* Uses Claude to:
|
|
5
|
+
* - Analyze test failures, console errors, network failures, and backend logs
|
|
6
|
+
* - Identify root causes
|
|
7
|
+
* - Apply fixes to the codebase
|
|
8
|
+
*/
|
|
9
|
+
import { runAgent } from './claude-agent.js';
|
|
10
|
+
/**
|
|
11
|
+
* Analyze test failures and apply fixes
|
|
12
|
+
*/
|
|
13
|
+
export async function analyzeAndFix(ticket, testFailures, logs, tracePath, cwd = process.cwd()) {
|
|
14
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
15
|
+
console.log(`š Analyzing Test Failures`);
|
|
16
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
17
|
+
const systemPrompt = buildAnalysisPrompt(ticket, testFailures, logs, tracePath);
|
|
18
|
+
const result = await runAgent(`Analyze and fix test failures for ticket ${ticket.id}`, {
|
|
19
|
+
systemPrompt,
|
|
20
|
+
cwd,
|
|
21
|
+
maxTurns: 30,
|
|
22
|
+
verbosity: 'normal',
|
|
23
|
+
});
|
|
24
|
+
console.log(`\n⨠Analysis complete`);
|
|
25
|
+
console.log(` š§ Fixes applied: ${result.fixCount}`);
|
|
26
|
+
return {
|
|
27
|
+
rootCause: result.response,
|
|
28
|
+
fixesApplied: result.fixCount,
|
|
29
|
+
tokensUsed: result.tokensUsed,
|
|
30
|
+
cost: result.cost,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build system prompt for error analysis
|
|
35
|
+
*/
|
|
36
|
+
function buildAnalysisPrompt(ticket, testFailures, logs, tracePath) {
|
|
37
|
+
const sections = [];
|
|
38
|
+
// Ticket context
|
|
39
|
+
sections.push(`You are debugging failed end-to-end tests for a feature implementation.
|
|
40
|
+
|
|
41
|
+
**Ticket Information:**
|
|
42
|
+
- ID: ${ticket.id}
|
|
43
|
+
- Title: ${ticket.title}
|
|
44
|
+
- Description:
|
|
45
|
+
${ticket.description}
|
|
46
|
+
|
|
47
|
+
**Your Task:**
|
|
48
|
+
1. Analyze the test failures, logs, and errors below
|
|
49
|
+
2. Identify the root cause of the failures
|
|
50
|
+
3. Apply fixes to resolve the issues
|
|
51
|
+
4. Make minimal, targeted changes that align with the ticket requirements`);
|
|
52
|
+
// Test failures
|
|
53
|
+
if (testFailures.length > 0) {
|
|
54
|
+
sections.push(`\n**Test Failures (${testFailures.length}):**`);
|
|
55
|
+
for (const failure of testFailures) {
|
|
56
|
+
sections.push(`\nTest: ${failure.testName}`);
|
|
57
|
+
sections.push(`Error: ${failure.errorMessage}`);
|
|
58
|
+
if (failure.expected) {
|
|
59
|
+
sections.push(`Expected: ${failure.expected}`);
|
|
60
|
+
}
|
|
61
|
+
if (failure.received) {
|
|
62
|
+
sections.push(`Received: ${failure.received}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Console errors
|
|
67
|
+
if (logs.console.length > 0) {
|
|
68
|
+
sections.push(`\n**Console Errors (${logs.console.length}):**`);
|
|
69
|
+
for (const log of logs.console) {
|
|
70
|
+
const location = log.location ? ` (${log.location})` : '';
|
|
71
|
+
sections.push(`[${log.type.toUpperCase()}]${location} ${log.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Network failures
|
|
75
|
+
if (logs.network.length > 0) {
|
|
76
|
+
sections.push(`\n**Network Failures (${logs.network.length}):**`);
|
|
77
|
+
for (const log of logs.network) {
|
|
78
|
+
sections.push(`\n[${log.method}] ${log.url}`);
|
|
79
|
+
sections.push(`Status: ${log.status} ${log.statusText}`);
|
|
80
|
+
if (log.requestBody) {
|
|
81
|
+
sections.push(`Request: ${log.requestBody.substring(0, 300)}`);
|
|
82
|
+
}
|
|
83
|
+
if (log.responseBody) {
|
|
84
|
+
sections.push(`Response: ${log.responseBody.substring(0, 300)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Docker logs
|
|
89
|
+
if (logs.docker.length > 0) {
|
|
90
|
+
sections.push(`\n**Backend Logs (Docker Compose - last ${logs.docker.length} entries):**`);
|
|
91
|
+
for (const log of logs.docker) {
|
|
92
|
+
sections.push(`[${log.service}] ${log.message}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Trace information
|
|
96
|
+
sections.push(`\n**Playwright Trace:**`);
|
|
97
|
+
sections.push(`Available at: ${tracePath}`);
|
|
98
|
+
sections.push(`(Contains detailed timeline, screenshots, network activity)`);
|
|
99
|
+
// Instructions
|
|
100
|
+
sections.push(`\n**Critical Instructions:**
|
|
101
|
+
1. Read the relevant source files in the current workspace
|
|
102
|
+
2. Identify the root cause by correlating:
|
|
103
|
+
- Test failures (what the test expected vs what happened)
|
|
104
|
+
- Console errors (frontend runtime issues)
|
|
105
|
+
- Network failures (API/backend issues)
|
|
106
|
+
- Backend logs (server-side errors)
|
|
107
|
+
3. Determine if the issue is:
|
|
108
|
+
- Frontend code (React components, forms, routing, state)
|
|
109
|
+
- Backend code (tRPC routes, database, validation)
|
|
110
|
+
- Test code (incorrect selectors, wrong assertions, timing issues)
|
|
111
|
+
- Configuration (environment, API endpoints, CORS)
|
|
112
|
+
4. Apply fixes using search_replace or write tools
|
|
113
|
+
5. Focus on the specific feature described in the ticket
|
|
114
|
+
6. Ensure fixes are production-ready and follow best practices
|
|
115
|
+
|
|
116
|
+
**Common Issues to Check:**
|
|
117
|
+
- Mismatched field names between frontend and backend
|
|
118
|
+
- Missing tRPC route definitions
|
|
119
|
+
- Incorrect API endpoint URLs
|
|
120
|
+
- Missing form validation
|
|
121
|
+
- Async timing issues (missing awaits, race conditions)
|
|
122
|
+
- Incorrect Playwright selectors (wrong role, text, or ID)
|
|
123
|
+
- CORS or authentication issues
|
|
124
|
+
- Database schema mismatches
|
|
125
|
+
|
|
126
|
+
Begin by exploring the codebase, then identify and fix the root cause.`);
|
|
127
|
+
return sections.join('\n');
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=error-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-analyzer.js","sourceRoot":"","sources":["../../../kosuke/utils/error-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,4 +26,16 @@ export declare function push(branchName: string): Promise<void>;
|
|
|
26
26
|
* Get the current branch name
|
|
27
27
|
*/
|
|
28
28
|
export declare function getCurrentBranch(): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Commit and push to current branch (no branch creation, no PR)
|
|
31
|
+
*/
|
|
32
|
+
export declare function commitAndPushCurrentBranch(message: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Get git diff of current changes (staged and unstaged)
|
|
35
|
+
*/
|
|
36
|
+
export declare function getGitDiff(): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if there are any uncommitted changes
|
|
39
|
+
*/
|
|
40
|
+
export declare function hasUncommittedChanges(): Promise<boolean>;
|
|
29
41
|
//# sourceMappingURL=git.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAyC3C;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBvD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAejG;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3D;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGxD"}
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAyC3C;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBvD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAejG;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3D;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGxD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/E;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CASlD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG9D"}
|