@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.
Files changed (55) hide show
  1. package/dist/index.d.ts +14 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +148 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/kosuke/commands/build.d.ts +22 -0
  6. package/dist/kosuke/commands/build.d.ts.map +1 -0
  7. package/dist/kosuke/commands/build.js +135 -0
  8. package/dist/kosuke/commands/build.js.map +1 -0
  9. package/dist/kosuke/commands/review.d.ts +21 -0
  10. package/dist/kosuke/commands/review.d.ts.map +1 -0
  11. package/dist/kosuke/commands/review.js +185 -0
  12. package/dist/kosuke/commands/review.js.map +1 -0
  13. package/dist/kosuke/commands/ship.d.ts +23 -0
  14. package/dist/kosuke/commands/ship.d.ts.map +1 -0
  15. package/dist/kosuke/commands/ship.js +419 -0
  16. package/dist/kosuke/commands/ship.js.map +1 -0
  17. package/dist/kosuke/commands/test.d.ts +27 -0
  18. package/dist/kosuke/commands/test.d.ts.map +1 -0
  19. package/dist/kosuke/commands/test.js +338 -0
  20. package/dist/kosuke/commands/test.js.map +1 -0
  21. package/dist/kosuke/types.d.ts +82 -2
  22. package/dist/kosuke/types.d.ts.map +1 -1
  23. package/dist/kosuke/utils/error-analyzer.d.ts +32 -0
  24. package/dist/kosuke/utils/error-analyzer.d.ts.map +1 -0
  25. package/dist/kosuke/utils/error-analyzer.js +129 -0
  26. package/dist/kosuke/utils/error-analyzer.js.map +1 -0
  27. package/dist/kosuke/utils/git.d.ts +12 -0
  28. package/dist/kosuke/utils/git.d.ts.map +1 -1
  29. package/dist/kosuke/utils/git.js +39 -0
  30. package/dist/kosuke/utils/git.js.map +1 -1
  31. package/dist/kosuke/utils/log-collector.d.ts +81 -0
  32. package/dist/kosuke/utils/log-collector.d.ts.map +1 -0
  33. package/dist/kosuke/utils/log-collector.js +226 -0
  34. package/dist/kosuke/utils/log-collector.js.map +1 -0
  35. package/dist/kosuke/utils/playwright-agent.d.ts +39 -0
  36. package/dist/kosuke/utils/playwright-agent.d.ts.map +1 -0
  37. package/dist/kosuke/utils/playwright-agent.js +245 -0
  38. package/dist/kosuke/utils/playwright-agent.js.map +1 -0
  39. package/dist/kosuke/utils/test-generator.d.ts +22 -0
  40. package/dist/kosuke/utils/test-generator.d.ts.map +1 -0
  41. package/dist/kosuke/utils/test-generator.js +174 -0
  42. package/dist/kosuke/utils/test-generator.js.map +1 -0
  43. package/dist/kosuke/utils/validator.d.ts +11 -0
  44. package/dist/kosuke/utils/validator.d.ts.map +1 -1
  45. package/dist/kosuke/utils/validator.js +100 -0
  46. package/dist/kosuke/utils/validator.js.map +1 -1
  47. package/dist/kosuke/utils/visual-tester.d.ts +71 -0
  48. package/dist/kosuke/utils/visual-tester.d.ts.map +1 -0
  49. package/dist/kosuke/utils/visual-tester.js +202 -0
  50. package/dist/kosuke/utils/visual-tester.js.map +1 -0
  51. package/dist/lib.d.ts +6 -2
  52. package/dist/lib.d.ts.map +1 -1
  53. package/dist/lib.js +5 -1
  54. package/dist/lib.js.map +1 -1
  55. package/package.json +6 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Ship command - Implement a ticket from tickets.json
3
+ *
4
+ * This command takes a ticket ID, implements it following CLAUDE.md rules,
5
+ * runs linting and fixing, and optionally performs a review step.
6
+ *
7
+ * Usage:
8
+ * kosuke ship --ticket=SCHEMA-1 # Implement ticket (local only)
9
+ * kosuke ship --ticket=BACKEND-2 --review # Implement with review
10
+ * kosuke ship --ticket=FRONTEND-1 --commit # Implement and commit to current branch
11
+ * kosuke ship --ticket=BACKEND-3 --pr # Implement and create PR (new branch)
12
+ * kosuke ship --ticket=SCHEMA-1 --tickets=path/to/tickets.json
13
+ */
14
+ import type { ShipOptions, ShipResult } from '../types.js';
15
+ /**
16
+ * Core ship logic (git-agnostic, reusable)
17
+ */
18
+ export declare function shipCore(options: ShipOptions): Promise<ShipResult>;
19
+ /**
20
+ * Main ship command
21
+ */
22
+ export declare function shipCommand(options: ShipOptions): Promise<void>;
23
+ //# sourceMappingURL=ship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAuKnE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwKxE;AA4BD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwHrE"}
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Ship command - Implement a ticket from tickets.json
3
+ *
4
+ * This command takes a ticket ID, implements it following CLAUDE.md rules,
5
+ * runs linting and fixing, and optionally performs a review step.
6
+ *
7
+ * Usage:
8
+ * kosuke ship --ticket=SCHEMA-1 # Implement ticket (local only)
9
+ * kosuke ship --ticket=BACKEND-2 --review # Implement with review
10
+ * kosuke ship --ticket=FRONTEND-1 --commit # Implement and commit to current branch
11
+ * kosuke ship --ticket=BACKEND-3 --pr # Implement and create PR (new branch)
12
+ * kosuke ship --ticket=SCHEMA-1 --tickets=path/to/tickets.json
13
+ */
14
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
15
+ import { join } from 'path';
16
+ import { runAgent, formatCostBreakdown } from '../utils/claude-agent.js';
17
+ import { ensureRepoReady } from '../utils/repository-manager.js';
18
+ import { runWithPR } from '../utils/pr-orchestrator.js';
19
+ import { commitAndPushCurrentBranch } from '../utils/git.js';
20
+ import { reviewCore } from './review.js';
21
+ import { runComprehensiveLinting } from '../utils/validator.js';
22
+ /**
23
+ * Load tickets from file
24
+ */
25
+ function loadTicketsFile(ticketsPath) {
26
+ if (!existsSync(ticketsPath)) {
27
+ throw new Error(`Tickets file not found: ${ticketsPath}\n` +
28
+ `Please generate tickets first using: kosuke tickets`);
29
+ }
30
+ try {
31
+ const content = readFileSync(ticketsPath, 'utf-8');
32
+ return JSON.parse(content);
33
+ }
34
+ catch (error) {
35
+ throw new Error(`Failed to parse tickets file: ${error instanceof Error ? error.message : String(error)}`);
36
+ }
37
+ }
38
+ /**
39
+ * Save tickets to file
40
+ */
41
+ function saveTicketsFile(ticketsPath, ticketsData) {
42
+ writeFileSync(ticketsPath, JSON.stringify(ticketsData, null, 2), 'utf-8');
43
+ }
44
+ /**
45
+ * Find ticket by ID
46
+ */
47
+ function findTicket(ticketsData, ticketId) {
48
+ return ticketsData.tickets.find((t) => t.id === ticketId);
49
+ }
50
+ /**
51
+ * Update ticket status in file
52
+ */
53
+ function updateTicketStatus(ticketsPath, ticketId, status, error) {
54
+ const ticketsData = loadTicketsFile(ticketsPath);
55
+ const ticket = findTicket(ticketsData, ticketId);
56
+ if (!ticket) {
57
+ console.warn(`āš ļø Ticket ${ticketId} not found, skipping status update`);
58
+ return;
59
+ }
60
+ ticket.status = status;
61
+ if (error) {
62
+ ticket.error = error;
63
+ }
64
+ else {
65
+ delete ticket.error;
66
+ }
67
+ saveTicketsFile(ticketsPath, ticketsData);
68
+ }
69
+ /**
70
+ * Load CLAUDE.md rules
71
+ */
72
+ function loadClaudeRules(cwd = process.cwd()) {
73
+ const claudePath = join(cwd, 'CLAUDE.md');
74
+ if (!existsSync(claudePath)) {
75
+ throw new Error(`CLAUDE.md not found in workspace root.\n` +
76
+ `Please ensure CLAUDE.md exists at: ${claudePath}`);
77
+ }
78
+ return readFileSync(claudePath, 'utf-8');
79
+ }
80
+ /**
81
+ * Build system prompt for ticket implementation
82
+ */
83
+ function buildImplementationPrompt(ticket, claudeRules, repoPath) {
84
+ return `You are an expert software engineer implementing a feature ticket.
85
+
86
+ **Your Task:**
87
+ Implement the following ticket according to the project's coding standards and architecture patterns.
88
+
89
+ **Ticket Information:**
90
+ - ID: ${ticket.id}
91
+ - Title: ${ticket.title}
92
+ - Description:
93
+ ${ticket.description}
94
+
95
+ **Project Rules (CLAUDE.md):**
96
+ ${claudeRules}
97
+
98
+ **Context:**
99
+ You have access to the kosuke-template repository at: ${repoPath}
100
+ Use this to understand implementation patterns, but DO NOT copy code directly.
101
+ Adapt patterns to fit the current project's needs.
102
+
103
+ **Implementation Requirements:**
104
+ 1. Follow ALL guidelines in CLAUDE.md
105
+ 2. Use appropriate patterns from kosuke-template as reference
106
+ 3. Write clean, well-documented code
107
+ 4. Ensure TypeScript type safety
108
+ 5. Add error handling where appropriate
109
+ 6. Make the implementation production-ready
110
+
111
+ **Critical Instructions:**
112
+ - Read relevant files in the current workspace to understand the codebase
113
+ - Implement ALL requirements from the ticket description
114
+ - Use search_replace or write tools to create/modify files
115
+ - Ensure acceptance criteria are met
116
+ - Do not make assumptions - ask for clarification if needed through comments
117
+
118
+ Begin by exploring the current codebase, then implement the ticket systematically.`;
119
+ }
120
+ /**
121
+ * Build system prompt for review
122
+ */
123
+ function buildReviewPrompt(ticket, claudeRules) {
124
+ return `You are a senior code reviewer ensuring compliance with project standards.
125
+
126
+ **Your Task:**
127
+ Review the implementation of ticket ${ticket.id} and ensure it follows CLAUDE.md rules.
128
+
129
+ **Ticket Context:**
130
+ - ID: ${ticket.id}
131
+ - Title: ${ticket.title}
132
+
133
+ **Project Rules (CLAUDE.md):**
134
+ ${claudeRules}
135
+
136
+ **Review Requirements:**
137
+ 1. Check compliance with CLAUDE.md guidelines
138
+ 2. Verify code quality and best practices
139
+ 3. Ensure TypeScript type safety
140
+ 4. Check error handling
141
+ 5. Verify naming conventions
142
+ 6. Check for security issues
143
+ 7. Ensure proper documentation
144
+
145
+ **If Issues Found:**
146
+ - Use search_replace or write tools to FIX them immediately
147
+ - Don't just report issues - FIX them!
148
+ - Make minimal necessary changes
149
+ - Ensure fixes don't break functionality
150
+
151
+ **Critical Instructions:**
152
+ - Read the files that were recently modified for this ticket
153
+ - Identify any violations of CLAUDE.md rules
154
+ - Fix ALL issues found
155
+ - Ensure the code is production-ready after your review
156
+
157
+ Begin by reading recent changes and reviewing them against the standards.`;
158
+ }
159
+ /**
160
+ * Core ship logic (git-agnostic, reusable)
161
+ */
162
+ export async function shipCore(options) {
163
+ const { ticket: ticketId, review = false, ticketsFile = 'tickets.json' } = options;
164
+ const cwd = process.cwd();
165
+ const ticketsPath = join(cwd, ticketsFile);
166
+ // 1. Load and validate ticket
167
+ console.log('šŸ“‹ Loading ticket...');
168
+ const ticketsData = loadTicketsFile(ticketsPath);
169
+ const ticket = findTicket(ticketsData, ticketId);
170
+ if (!ticket) {
171
+ throw new Error(`Ticket ${ticketId} not found in ${ticketsFile}\n` +
172
+ `Available tickets: ${ticketsData.tickets.map((t) => t.id).join(', ')}`);
173
+ }
174
+ if (ticket.status === 'Done') {
175
+ throw new Error(`Ticket ${ticketId} is already marked as Done.\n` +
176
+ `If you want to re-implement it, manually change its status to "Todo" in ${ticketsFile}`);
177
+ }
178
+ console.log(` āœ… Loaded ticket: ${ticket.id} - ${ticket.title}\n`);
179
+ // 2. Update status to InProgress
180
+ console.log('šŸ“ Updating ticket status to InProgress...');
181
+ updateTicketStatus(ticketsPath, ticketId, 'InProgress');
182
+ console.log(' āœ… Status updated\n');
183
+ // 3. Load CLAUDE.md rules
184
+ console.log('šŸ“– Loading CLAUDE.md rules...');
185
+ const claudeRules = loadClaudeRules(cwd);
186
+ console.log(` āœ… Loaded rules (${claudeRules.length} characters)\n`);
187
+ // 4. Fetch kosuke-template for context
188
+ console.log('šŸ“„ Fetching kosuke-template for context...');
189
+ const repoInfo = await ensureRepoReady('Kosuke-Org/kosuke-template');
190
+ console.log(` āœ… Template repository ready at ${repoInfo.localPath}\n`);
191
+ // Track metrics
192
+ let totalInputTokens = 0;
193
+ let totalOutputTokens = 0;
194
+ let totalCacheCreationTokens = 0;
195
+ let totalCacheReadTokens = 0;
196
+ let totalCost = 0;
197
+ let implementationFixCount = 0;
198
+ let reviewFixCount = 0;
199
+ try {
200
+ // 5. Implementation phase
201
+ console.log(`\n${'='.repeat(60)}`);
202
+ console.log(`šŸš€ Phase 1: Implementation`);
203
+ console.log(`${'='.repeat(60)}\n`);
204
+ const systemPrompt = buildImplementationPrompt(ticket, claudeRules, repoInfo.localPath);
205
+ const implementationResult = await runAgent(`Implement ticket ${ticketId}: ${ticket.title}`, {
206
+ systemPrompt,
207
+ cwd,
208
+ maxTurns: 40,
209
+ verbosity: 'normal',
210
+ });
211
+ implementationFixCount = implementationResult.fixCount;
212
+ totalInputTokens += implementationResult.tokensUsed.input;
213
+ totalOutputTokens += implementationResult.tokensUsed.output;
214
+ totalCacheCreationTokens += implementationResult.tokensUsed.cacheCreation;
215
+ totalCacheReadTokens += implementationResult.tokensUsed.cacheRead;
216
+ totalCost += implementationResult.cost;
217
+ console.log(`\n✨ Implementation completed (${implementationFixCount} changes made)`);
218
+ console.log(`šŸ’° Implementation cost: ${formatCostBreakdown(implementationResult)}`);
219
+ // 6. Linting phase
220
+ console.log(`\n${'='.repeat(60)}`);
221
+ console.log(`šŸ”§ Phase 2: Linting & Quality Checks`);
222
+ console.log(`${'='.repeat(60)}\n`);
223
+ const lintResult = await runComprehensiveLinting();
224
+ console.log(`\nāœ… Linting completed (${lintResult.fixCount} fixes applied)`);
225
+ // 7. Review phase (if review flag is set)
226
+ let reviewPerformed = false;
227
+ if (review) {
228
+ console.log(`\n${'='.repeat(60)}`);
229
+ console.log(`šŸ” Phase 3: Pre-Review (Full Context)`);
230
+ console.log(`${'='.repeat(60)}\n`);
231
+ const reviewSystemPrompt = buildReviewPrompt(ticket, claudeRules);
232
+ const reviewResult = await runAgent(`Review implementation of ticket ${ticketId} against CLAUDE.md rules`, {
233
+ systemPrompt: reviewSystemPrompt,
234
+ cwd,
235
+ maxTurns: 25,
236
+ verbosity: 'normal',
237
+ });
238
+ reviewFixCount = reviewResult.fixCount;
239
+ totalInputTokens += reviewResult.tokensUsed.input;
240
+ totalOutputTokens += reviewResult.tokensUsed.output;
241
+ totalCacheCreationTokens += reviewResult.tokensUsed.cacheCreation;
242
+ totalCacheReadTokens += reviewResult.tokensUsed.cacheRead;
243
+ totalCost += reviewResult.cost;
244
+ console.log(`\n✨ Pre-Review completed (${reviewFixCount} issues fixed)`);
245
+ console.log(`šŸ’° Review cost: ${formatCostBreakdown(reviewResult)}`);
246
+ // Run linting again after review fixes
247
+ if (reviewFixCount > 0) {
248
+ console.log('\nšŸ”§ Running linting after review fixes...');
249
+ await runComprehensiveLinting();
250
+ }
251
+ reviewPerformed = true;
252
+ }
253
+ // 8. Update status to Done
254
+ console.log('\nšŸ“ Updating ticket status to Done...');
255
+ updateTicketStatus(ticketsPath, ticketId, 'Done');
256
+ console.log(' āœ… Ticket marked as Done\n');
257
+ return {
258
+ ticketId,
259
+ success: true,
260
+ implementationFixCount,
261
+ lintFixCount: lintResult.fixCount,
262
+ reviewPerformed,
263
+ reviewFixCount,
264
+ gitDiffReviewed: false,
265
+ gitDiffReviewFixCount: 0,
266
+ tokensUsed: {
267
+ input: totalInputTokens,
268
+ output: totalOutputTokens,
269
+ cacheCreation: totalCacheCreationTokens,
270
+ cacheRead: totalCacheReadTokens,
271
+ },
272
+ cost: totalCost,
273
+ };
274
+ }
275
+ catch (error) {
276
+ // Update ticket status to Error
277
+ const errorMessage = error instanceof Error ? error.message : String(error);
278
+ console.error(`\nāŒ Implementation failed: ${errorMessage}`);
279
+ updateTicketStatus(ticketsPath, ticketId, 'Error', errorMessage);
280
+ return {
281
+ ticketId,
282
+ success: false,
283
+ implementationFixCount,
284
+ lintFixCount: 0,
285
+ reviewPerformed: false,
286
+ reviewFixCount,
287
+ gitDiffReviewed: false,
288
+ gitDiffReviewFixCount: 0,
289
+ tokensUsed: {
290
+ input: totalInputTokens,
291
+ output: totalOutputTokens,
292
+ cacheCreation: totalCacheCreationTokens,
293
+ cacheRead: totalCacheReadTokens,
294
+ },
295
+ cost: totalCost,
296
+ error: errorMessage,
297
+ };
298
+ }
299
+ }
300
+ /**
301
+ * Review git diff after implementation
302
+ */
303
+ async function reviewGitDiff() {
304
+ console.log(`\n${'='.repeat(60)}`);
305
+ console.log(`šŸ” Reviewing Git Diff Against CLAUDE.md`);
306
+ console.log(`${'='.repeat(60)}\n`);
307
+ const result = await reviewCore({});
308
+ return {
309
+ fixCount: result.fixesApplied,
310
+ cost: result.cost,
311
+ tokensUsed: result.tokensUsed,
312
+ };
313
+ }
314
+ /**
315
+ * Main ship command
316
+ */
317
+ export async function shipCommand(options) {
318
+ const { ticket: ticketId, commit = false, pr = false } = options;
319
+ console.log(`🚢 Shipping Ticket: ${ticketId}\n`);
320
+ try {
321
+ // Validate environment
322
+ if (!process.env.ANTHROPIC_API_KEY) {
323
+ throw new Error('ANTHROPIC_API_KEY environment variable is required');
324
+ }
325
+ // Validate mutually exclusive flags
326
+ if (commit && pr) {
327
+ throw new Error('Cannot use --commit and --pr together.\n' +
328
+ 'Use --commit to push to current branch, or --pr to create a new branch with pull request.');
329
+ }
330
+ if (pr && !process.env.GITHUB_TOKEN) {
331
+ throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
332
+ }
333
+ if (commit && !process.env.GITHUB_TOKEN) {
334
+ throw new Error('GITHUB_TOKEN environment variable is required for --commit flag');
335
+ }
336
+ // If --pr flag is provided, wrap with PR workflow
337
+ if (pr) {
338
+ let diffReviewCost = 0;
339
+ let diffReviewFixCount = 0;
340
+ const { result: shipResult, prInfo } = await runWithPR({
341
+ branchPrefix: `feat/ticket-${ticketId}`,
342
+ baseBranch: options.baseBranch,
343
+ commitMessage: `feat: implement ${ticketId}`,
344
+ prTitle: `feat: Implement ${ticketId}`,
345
+ prBody: `## šŸŽ« Ticket Implementation
346
+
347
+ Implements ticket **${ticketId}** from tickets.json.
348
+
349
+ ### šŸ“‹ Details
350
+ - Implementation fixes: ${0} (will be filled by result)
351
+ - Linting fixes: ${0}
352
+ - Review performed: ${options.review ? 'Yes' : 'No'}
353
+
354
+ ---
355
+
356
+ šŸ¤– *Generated by Kosuke CLI (\`kosuke ship --ticket=${ticketId} ${options.review ? '--review ' : ''}--pr\`)*`,
357
+ }, async () => {
358
+ // Run core implementation
359
+ const result = await shipCore(options);
360
+ // Review git diff before committing
361
+ const diffReview = await reviewGitDiff();
362
+ diffReviewCost = diffReview.cost;
363
+ diffReviewFixCount = diffReview.fixCount;
364
+ return result;
365
+ });
366
+ // Display summary with updated values
367
+ console.log('\nāœ… Ship completed successfully!');
368
+ console.log(`šŸ“Š Implementation fixes: ${shipResult.implementationFixCount}`);
369
+ console.log(`šŸ”§ Linting fixes: ${shipResult.lintFixCount}`);
370
+ if (shipResult.reviewPerformed) {
371
+ console.log(`šŸ” Pre-review fixes: ${shipResult.reviewFixCount}`);
372
+ }
373
+ console.log(`šŸ” Git diff review fixes: ${diffReviewFixCount}`);
374
+ console.log(`šŸ’° Total cost: $${(shipResult.cost + diffReviewCost).toFixed(4)}`);
375
+ console.log(`šŸ”— PR: ${prInfo.prUrl}`);
376
+ }
377
+ else if (commit) {
378
+ // Run core logic
379
+ const result = await shipCore(options);
380
+ if (!result.success) {
381
+ throw new Error(result.error || 'Ship failed');
382
+ }
383
+ // Review git diff before committing
384
+ const diffReview = await reviewGitDiff();
385
+ // Commit and push to current branch
386
+ console.log('\nšŸ“ Committing and pushing to current branch...');
387
+ await commitAndPushCurrentBranch(`feat: implement ${ticketId}`);
388
+ console.log(' āœ… Changes committed and pushed\n');
389
+ console.log('\nāœ… Ship completed successfully!');
390
+ console.log(`šŸ“Š Implementation fixes: ${result.implementationFixCount}`);
391
+ console.log(`šŸ”§ Linting fixes: ${result.lintFixCount}`);
392
+ if (result.reviewPerformed) {
393
+ console.log(`šŸ” Pre-review fixes: ${result.reviewFixCount}`);
394
+ }
395
+ console.log(`šŸ” Git diff review fixes: ${diffReview.fixCount}`);
396
+ console.log(`šŸ’° Total cost: $${(result.cost + diffReview.cost).toFixed(4)}`);
397
+ }
398
+ else {
399
+ // Run core logic without any git operations
400
+ const result = await shipCore(options);
401
+ if (!result.success) {
402
+ throw new Error(result.error || 'Ship failed');
403
+ }
404
+ console.log('\nāœ… Ship completed successfully!');
405
+ console.log(`šŸ“Š Implementation fixes: ${result.implementationFixCount}`);
406
+ console.log(`šŸ”§ Linting fixes: ${result.lintFixCount}`);
407
+ if (result.reviewPerformed) {
408
+ console.log(`šŸ” Review fixes: ${result.reviewFixCount}`);
409
+ }
410
+ console.log(`šŸ’° Total cost: $${result.cost.toFixed(4)}`);
411
+ console.log('\nā„¹ļø Changes applied locally. Use --commit to push or --pr to create a pull request.');
412
+ }
413
+ }
414
+ catch (error) {
415
+ console.error('\nāŒ Ship failed:', error);
416
+ throw error;
417
+ }
418
+ }
419
+ //# sourceMappingURL=ship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
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 type { TestOptions, TestResult } from '../types.js';
19
+ /**
20
+ * Core test logic (git-agnostic, reusable)
21
+ */
22
+ export declare function testCore(options: TestOptions): Promise<TestResult>;
23
+ /**
24
+ * Main test command
25
+ */
26
+ export declare function testCommand(options: TestOptions): Promise<void>;
27
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAoCnE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsPxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDrE"}