@kosuke-ai/cli 0.0.36 → 0.0.38

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 (39) hide show
  1. package/dist/index.d.ts +0 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +33 -84
  4. package/dist/index.js.map +1 -1
  5. package/dist/kosuke/commands/build.d.ts +7 -3
  6. package/dist/kosuke/commands/build.d.ts.map +1 -1
  7. package/dist/kosuke/commands/build.js +53 -16
  8. package/dist/kosuke/commands/build.js.map +1 -1
  9. package/dist/kosuke/commands/ship.d.ts +22 -15
  10. package/dist/kosuke/commands/ship.d.ts.map +1 -1
  11. package/dist/kosuke/commands/ship.js +49 -151
  12. package/dist/kosuke/commands/ship.js.map +1 -1
  13. package/dist/kosuke/commands/test.d.ts +2 -1
  14. package/dist/kosuke/commands/test.d.ts.map +1 -1
  15. package/dist/kosuke/commands/test.js +75 -23
  16. package/dist/kosuke/commands/test.js.map +1 -1
  17. package/dist/kosuke/commands/tickets.d.ts.map +1 -1
  18. package/dist/kosuke/commands/tickets.js +278 -109
  19. package/dist/kosuke/commands/tickets.js.map +1 -1
  20. package/dist/kosuke/types.d.ts +30 -9
  21. package/dist/kosuke/types.d.ts.map +1 -1
  22. package/dist/kosuke/utils/prompt-generator.d.ts +0 -4
  23. package/dist/kosuke/utils/prompt-generator.d.ts.map +1 -1
  24. package/dist/kosuke/utils/prompt-generator.js +0 -14
  25. package/dist/kosuke/utils/prompt-generator.js.map +1 -1
  26. package/dist/kosuke/utils/test-runner.d.ts +15 -0
  27. package/dist/kosuke/utils/test-runner.d.ts.map +1 -0
  28. package/dist/kosuke/utils/test-runner.js +94 -0
  29. package/dist/kosuke/utils/test-runner.js.map +1 -0
  30. package/dist/lib.d.ts +29 -2
  31. package/dist/lib.d.ts.map +1 -1
  32. package/dist/lib.js +28 -1
  33. package/dist/lib.js.map +1 -1
  34. package/dist/package.json +2 -2
  35. package/package.json +2 -2
  36. package/dist/kosuke/utils/browser-agent.d.ts +0 -33
  37. package/dist/kosuke/utils/browser-agent.d.ts.map +0 -1
  38. package/dist/kosuke/utils/browser-agent.js +0 -102
  39. package/dist/kosuke/utils/browser-agent.js.map +0 -1
@@ -1,26 +1,47 @@
1
1
  /**
2
- * Ship command - Implement a ticket from tickets.json
2
+ * Ship Core - Ticket-agnostic implementation engine
3
3
  *
4
- * This command takes a ticket ID, implements it following CLAUDE.md rules,
5
- * runs linting, and optionally performs code review with ticket context.
4
+ * This module provides the core implementation logic for tickets.
5
+ * It is designed to be called programmatically with ticket data,
6
+ * making it independent of tickets.json or any ticket management system.
6
7
  *
7
- * Note: Ship implements tickets but does NOT commit. Use 'build' command for commits.
8
+ * Features:
9
+ * - Implements tickets following CLAUDE.md rules
10
+ * - Runs comprehensive linting
11
+ * - Optionally performs code review with ticket context
12
+ * - Does NOT manage ticket lifecycle (status updates, commits, etc.)
8
13
  *
9
- * Usage:
10
- * kosuke ship --ticket=SCHEMA-1 # Implement ticket (local only)
11
- * kosuke ship --ticket=BACKEND-2 --review # Implement with code review
12
- * kosuke ship --ticket=FRONTEND-1 --test # Implement and run tests
13
- * kosuke ship --ticket=SCHEMA-1 --tickets=path/to/tickets.json
14
- * kosuke ship --ticket=SCHEMA-1 --db-url=postgres://user:pass@host:5432/db
14
+ * Usage (Programmatic):
15
+ * import { shipCore } from './commands/ship.js';
16
+ *
17
+ * const result = await shipCore({
18
+ * ticketData: { id: 'SCHEMA-1', title: '...', description: '...' },
19
+ * review: true,
20
+ * directory: './my-project',
21
+ * });
22
+ *
23
+ * Note: The CLI command 'kosuke ship' is deprecated.
24
+ * Use 'kosuke build' instead for complete ticket workflow.
15
25
  */
16
26
  import { existsSync, statSync } from 'fs';
17
- import { join, resolve } from 'path';
27
+ import { resolve } from 'path';
18
28
  import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
19
- import { logger, setupCancellationHandler } from '../utils/logger.js';
20
- import { findTicket, loadTicketsFile, updateTicketStatus } from '../utils/tickets-manager.js';
21
29
  import { runComprehensiveLinting } from '../utils/validator.js';
22
30
  import { reviewCore } from './review.js';
23
- import { testCore } from './test.js';
31
+ /**
32
+ * Validate ticket data has all required fields
33
+ */
34
+ function validateTicketData(ticketData) {
35
+ if (!ticketData.id || typeof ticketData.id !== 'string') {
36
+ throw new Error('Invalid ticket: id is required and must be a string');
37
+ }
38
+ if (!ticketData.title || typeof ticketData.title !== 'string') {
39
+ throw new Error('Invalid ticket: title is required and must be a string');
40
+ }
41
+ if (!ticketData.description || typeof ticketData.description !== 'string') {
42
+ throw new Error('Invalid ticket: description is required and must be a string');
43
+ }
44
+ }
24
45
  /**
25
46
  * Build system prompt for ticket implementation
26
47
  */
@@ -72,17 +93,21 @@ ${ticket.description}
72
93
  Begin by exploring the current codebase, then implement the ticket systematically.`;
73
94
  }
74
95
  /**
75
- * Core ship logic (git-agnostic, reusable)
96
+ * Core ship logic (ticket-agnostic, reusable)
97
+ * Implements a ticket without managing its lifecycle (status updates, etc.)
76
98
  */
77
99
  export async function shipCore(options) {
78
- const { ticket: ticketId, review = false, test = false, ticketsFile = 'tickets.json', directory, dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', } = options;
100
+ // Validate ticket data
101
+ validateTicketData(options.ticketData);
102
+ const ticket = options.ticketData;
103
+ const { review = false, directory, dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', } = options;
79
104
  // 1. Validate and resolve directory
80
105
  const cwd = directory ? resolve(directory) : process.cwd();
81
106
  if (directory) {
82
107
  if (!existsSync(cwd)) {
83
108
  throw new Error(`Directory not found: ${cwd}\n` +
84
109
  `Please provide a valid directory using --directory=<path>\n` +
85
- `Example: kosuke ship --ticket=SCHEMA-1 --directory=./my-project`);
110
+ `Example: shipCore({ ticketData: ticket, directory: './my-project' })`);
86
111
  }
87
112
  const stats = statSync(cwd);
88
113
  if (!stats.isDirectory()) {
@@ -90,26 +115,7 @@ export async function shipCore(options) {
90
115
  }
91
116
  console.log(`📁 Using project directory: ${cwd}\n`);
92
117
  }
93
- const ticketsPath = join(cwd, ticketsFile);
94
- // 1. Load and validate ticket
95
- console.log('📋 Loading ticket...');
96
- const ticketsData = loadTicketsFile(ticketsPath);
97
- const ticket = findTicket(ticketsData, ticketId);
98
- if (!ticket) {
99
- throw new Error(`Ticket ${ticketId} not found in ${ticketsFile}\n` +
100
- `Available tickets: ${ticketsData.tickets.map((t) => t.id).join(', ')}`);
101
- }
102
- if (ticket.status === 'Done') {
103
- throw new Error(`Ticket ${ticketId} is already marked as Done.\n` +
104
- `If you want to re-implement it, manually change its status to "Todo" in ${ticketsFile}`);
105
- }
106
- console.log(` ✅ Loaded ticket: ${ticket.id} - ${ticket.title}\n`);
107
- // 2. Update status to InProgress
108
- console.log('📝 Updating ticket status to InProgress...');
109
- updateTicketStatus(ticketsPath, ticketId, 'InProgress');
110
- console.log(' ✅ Status updated\n');
111
- // 3. Context ready (using current working directory)
112
- console.log('📁 Working in current directory context\n');
118
+ console.log(`📋 Implementing ticket: ${ticket.id} - ${ticket.title}\n`);
113
119
  // Determine ticket type
114
120
  const isSchemaTicket = ticket.id.toUpperCase().startsWith('SCHEMA-');
115
121
  // Track metrics
@@ -121,12 +127,12 @@ export async function shipCore(options) {
121
127
  let implementationFixCount = 0;
122
128
  let reviewFixCount = 0;
123
129
  try {
124
- // 5. Implementation phase
130
+ // 2. Implementation phase
125
131
  console.log(`\n${'='.repeat(60)}`);
126
132
  console.log(`🚀 Phase 1: Implementation`);
127
133
  console.log(`${'='.repeat(60)}\n`);
128
134
  const systemPrompt = buildImplementationPrompt(ticket, dbUrl);
129
- const implementationResult = await runAgent(`Implement ticket ${ticketId}: ${ticket.title}`, {
135
+ const implementationResult = await runAgent(`Implement ticket ${ticket.id}: ${ticket.title}`, {
130
136
  systemPrompt,
131
137
  cwd,
132
138
  maxTurns: 40,
@@ -140,13 +146,13 @@ export async function shipCore(options) {
140
146
  totalCost += implementationResult.cost;
141
147
  console.log(`\n✨ Implementation completed (${implementationFixCount} changes made)`);
142
148
  console.log(`💰 Implementation cost: ${formatCostBreakdown(implementationResult)}`);
143
- // 6. Linting phase
149
+ // 3. Linting phase
144
150
  console.log(`\n${'='.repeat(60)}`);
145
151
  console.log(`🔧 Phase 2: Linting & Quality Checks`);
146
152
  console.log(`${'='.repeat(60)}\n`);
147
153
  const lintResult = await runComprehensiveLinting(cwd);
148
154
  console.log(`\n✅ Linting completed (${lintResult.fixCount} fixes applied)`);
149
- // 7. Review phase (if review flag is set) - SKIP for SCHEMA tickets
155
+ // 4. Review phase (if review flag is set) - SKIP for SCHEMA tickets
150
156
  if (review && !isSchemaTicket) {
151
157
  console.log(`\n${'='.repeat(60)}`);
152
158
  console.log(`🔍 Phase 3: Code Review (Git Diff)`);
@@ -170,70 +176,8 @@ export async function shipCore(options) {
170
176
  else if (review && isSchemaTicket) {
171
177
  console.log('\nℹ️ Skipping code review for SCHEMA ticket (review focuses on application code, not database migrations)');
172
178
  }
173
- // 8. Test phase (if test flag is set) - ITERATIVE
174
- let testFixCount = 0;
175
- let testIterations = 0;
176
- const maxTestRetries = 3;
177
- if (test) {
178
- console.log(`\n${'='.repeat(60)}`);
179
- console.log(`🧪 Phase ${review ? '4' : '3'}: Testing (Iterative)`);
180
- console.log(`${'='.repeat(60)}\n`);
181
- let testsPassing = false;
182
- for (let attempt = 1; attempt <= maxTestRetries; attempt++) {
183
- testIterations = attempt;
184
- console.log(`\n🧪 Test Attempt ${attempt}/${maxTestRetries}\n`);
185
- // Run atomic test
186
- const testResult = await testCore({
187
- ticket: ticketId,
188
- url: options.url,
189
- headed: options.headed,
190
- debug: options.debug,
191
- ticketsFile,
192
- directory: cwd,
193
- });
194
- totalInputTokens += testResult.tokensUsed.input;
195
- totalOutputTokens += testResult.tokensUsed.output;
196
- totalCacheCreationTokens += testResult.tokensUsed.cacheCreation;
197
- totalCacheReadTokens += testResult.tokensUsed.cacheRead;
198
- totalCost += testResult.cost;
199
- if (testResult.success) {
200
- testsPassing = true;
201
- console.log('\n✅ Tests passed!');
202
- break;
203
- }
204
- // If not last attempt, analyze and fix
205
- if (attempt < maxTestRetries) {
206
- console.log('\n🔍 Analyzing test failures...');
207
- // Collect Docker logs for backend debugging
208
- const { LogCollector } = await import('../utils/log-collector.js');
209
- const logCollector = new LogCollector();
210
- await logCollector.collectDockerLogs('30s');
211
- const dockerLogs = logCollector.getErrors();
212
- // Analyze errors and apply fixes
213
- const { analyzeAndFix } = await import('../utils/error-analyzer.js');
214
- const fixResult = await analyzeAndFix(ticket, testResult.output, testResult.logs, dockerLogs, cwd);
215
- testFixCount += fixResult.fixesApplied;
216
- totalInputTokens += fixResult.tokensUsed.input;
217
- totalOutputTokens += fixResult.tokensUsed.output;
218
- totalCacheCreationTokens += fixResult.tokensUsed.cacheCreation;
219
- totalCacheReadTokens += fixResult.tokensUsed.cacheRead;
220
- totalCost += fixResult.cost;
221
- console.log(`\n🔧 Applied ${fixResult.fixesApplied} fixes`);
222
- console.log(`💰 Fix cost: $${fixResult.cost.toFixed(4)}`);
223
- }
224
- }
225
- if (!testsPassing) {
226
- throw new Error(`Tests failed after ${maxTestRetries} attempts`);
227
- }
228
- console.log(`\n✨ Testing completed (${testFixCount} fixes applied over ${testIterations} iterations)`);
229
- console.log(`💰 Testing cost: $${totalCost.toFixed(4)}`);
230
- }
231
- // 9. Update status to Done
232
- console.log('\n📝 Updating ticket status to Done...');
233
- updateTicketStatus(ticketsPath, ticketId, 'Done');
234
- console.log(' ✅ Ticket marked as Done\n');
179
+ // 5. Return success result
235
180
  return {
236
- ticketId,
237
181
  success: true,
238
182
  implementationFixCount,
239
183
  lintFixCount: lintResult.fixCount,
@@ -248,12 +192,10 @@ export async function shipCore(options) {
248
192
  };
249
193
  }
250
194
  catch (error) {
251
- // Update ticket status to Error
195
+ // Return error result
252
196
  const errorMessage = error instanceof Error ? error.message : String(error);
253
197
  console.error(`\n❌ Implementation failed: ${errorMessage}`);
254
- updateTicketStatus(ticketsPath, ticketId, 'Error', errorMessage);
255
198
  return {
256
- ticketId,
257
199
  success: false,
258
200
  implementationFixCount,
259
201
  lintFixCount: 0,
@@ -269,48 +211,4 @@ export async function shipCore(options) {
269
211
  };
270
212
  }
271
213
  }
272
- /**
273
- * Main ship command
274
- */
275
- export async function shipCommand(options) {
276
- const { ticket: ticketId, noLogs = false } = options;
277
- console.log(`🚢 Shipping Ticket: ${ticketId}\n`);
278
- // Initialize logging context
279
- const logContext = logger.createContext('ship', { noLogs });
280
- const cleanupHandler = setupCancellationHandler(logContext);
281
- try {
282
- // Validate environment
283
- if (!process.env.ANTHROPIC_API_KEY) {
284
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
285
- }
286
- // Run core implementation
287
- const result = await shipCore(options);
288
- if (!result.success) {
289
- throw new Error(result.error || 'Ship failed');
290
- }
291
- // Track metrics
292
- logger.trackTokens(logContext, result.tokensUsed);
293
- logContext.fixesApplied =
294
- result.implementationFixCount + result.lintFixCount + result.reviewFixCount;
295
- // Display summary
296
- console.log('\n✅ Ship completed successfully!');
297
- console.log(`📊 Implementation fixes: ${result.implementationFixCount}`);
298
- console.log(`🔧 Linting fixes: ${result.lintFixCount}`);
299
- if (result.reviewFixCount > 0) {
300
- console.log(`🔍 Review fixes: ${result.reviewFixCount}`);
301
- }
302
- console.log(`💰 Total cost: $${result.cost.toFixed(4)}`);
303
- console.log('\nℹ️ Changes applied locally. Commits are handled by the build command.');
304
- // Log successful execution
305
- await logger.complete(logContext, 'success');
306
- cleanupHandler();
307
- }
308
- catch (error) {
309
- console.error('\n❌ Ship failed:', error);
310
- // Log failed execution
311
- await logger.complete(logContext, 'error', error);
312
- cleanupHandler();
313
- throw error;
314
- }
315
- }
316
214
  //# sourceMappingURL=ship.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../kosuke/commands/ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,MAAc,EAAE,KAAa;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAErE,MAAM,2BAA2B,GAAG,cAAc;QAChD,CAAC,CAAC;;;;;uCAKiC,KAAK;;;;yBAInB,KAAK;;;;CAI7B;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;QAMD,MAAM,CAAC,EAAE;WACN,MAAM,CAAC,KAAK;;EAErB,MAAM,CAAC,WAAW;;;;;;;;6CAQyB,2BAA2B;;;;;;;;;;mFAUW,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAoB;IACjD,uBAAuB;IACvB,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAClC,MAAM,EACJ,MAAM,GAAG,KAAK,EACd,SAAS,EACT,KAAK,GAAG,sDAAsD,GAC/D,GAAG,OAAO,CAAC;IAEZ,oCAAoC;IACpC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAE3D,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,IAAI;gBAC7B,6DAA6D;gBAC7D,sEAAsE,CACzE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,IAAI,GAAG,wCAAwC,CAC/E,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAExE,wBAAwB;IACxB,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAErE,gBAAgB;IAChB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,IAAI,CAAC;QACH,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE9D,MAAM,oBAAoB,GAAG,MAAM,QAAQ,CAAC,oBAAoB,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE;YAC5F,YAAY;YACZ,GAAG;YACH,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,sBAAsB,GAAG,oBAAoB,CAAC,QAAQ,CAAC;QACvD,gBAAgB,IAAI,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1D,iBAAiB,IAAI,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5D,wBAAwB,IAAI,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC;QAC1E,oBAAoB,IAAI,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC;QAClE,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,iCAAiC,sBAAsB,gBAAgB,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,2BAA2B,mBAAmB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEpF,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,CAAC,QAAQ,iBAAiB,CAAC,CAAC;QAE5E,oEAAoE;QACpE,IAAI,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAEnC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC;gBACpC,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE;oBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,WAAW,EAAE,MAAM,CAAC,KAAK;oBACzB,iBAAiB,EAAE,MAAM,CAAC,WAAW;iBACtC;aACF,CAAC,CAAC;YAEH,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC;YAC3C,gBAAgB,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;YAClD,iBAAiB,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;YACpD,wBAAwB,IAAI,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC;YAClE,oBAAoB,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1D,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC;YAE/B,OAAO,CAAC,GAAG,CACT,yBAAyB,YAAY,CAAC,WAAW,kBAAkB,cAAc,iBAAiB,CACnG,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,sBAAsB;YACtB,YAAY,EAAE,UAAU,CAAC,QAAQ;YACjC,cAAc;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,aAAa,EAAE,wBAAwB;gBACvC,SAAS,EAAE,oBAAoB;aAChC;YACD,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAE5D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,sBAAsB;YACtB,YAAY,EAAE,CAAC;YACf,cAAc;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,iBAAiB;gBACzB,aAAa,EAAE,wBAAwB;gBACvC,SAAS,EAAE,oBAAoB;aAChC;YACD,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -13,7 +13,8 @@
13
13
  * kosuke test --ticket=FRONTEND-1 # Test with ticket
14
14
  * kosuke test --prompt="Test user login flow" # Test with custom prompt
15
15
  * kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
16
- * kosuke test --prompt="..." --headed # Show browser (visible window)
16
+ * kosuke test --prompt="..." --verbose # Enable verbose output
17
+ * kosuke test --prompt="..." --headless # Run in headless mode (invisible)
17
18
  */
18
19
  import type { TestOptions, TestResult } from '../types.js';
19
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAMnE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6GxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CrE"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAU,MAAM,aAAa,CAAC;AAKnE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA+JxE;AAuBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}
@@ -13,18 +13,19 @@
13
13
  * kosuke test --ticket=FRONTEND-1 # Test with ticket
14
14
  * kosuke test --prompt="Test user login flow" # Test with custom prompt
15
15
  * kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
16
- * kosuke test --prompt="..." --headed # Show browser (visible window)
16
+ * kosuke test --prompt="..." --verbose # Enable verbose output
17
+ * kosuke test --prompt="..." --headless # Run in headless mode (invisible)
17
18
  */
19
+ import { Stagehand } from '@browserbasehq/stagehand';
18
20
  import { join } from 'path';
19
- import { runBrowserTest } from '../utils/browser-agent.js';
20
21
  import { logger, setupCancellationHandler } from '../utils/logger.js';
21
- import { generateCustomTestPrompt, generateTestPrompt } from '../utils/prompt-generator.js';
22
+ import { generateTestPrompt } from '../utils/prompt-generator.js';
22
23
  import { findTicket, loadTicketsFile } from '../utils/tickets-manager.js';
23
24
  /**
24
25
  * Core test logic (atomic - single execution, no retries, no fixes)
25
26
  */
26
27
  export async function testCore(options) {
27
- const { ticket: ticketId, prompt: customPrompt, url = 'http://localhost:3000', headed = false, debug = false, ticketsFile = 'tickets.json', directory, } = options;
28
+ const { ticket: ticketId, prompt: customPrompt, url = 'http://localhost:3000', headless = false, verbose = false, ticketsFile = 'tickets.json', directory, } = options;
28
29
  const cwd = directory || process.cwd();
29
30
  const ticketsPath = join(cwd, ticketsFile);
30
31
  // Validate: must provide either ticket OR prompt (not both)
@@ -37,6 +38,10 @@ export async function testCore(options) {
37
38
  if (ticketId && customPrompt) {
38
39
  throw new Error('Cannot provide both --ticket and --prompt. Please use one or the other.');
39
40
  }
41
+ // Validate ANTHROPIC_API_KEY
42
+ if (!process.env.ANTHROPIC_API_KEY) {
43
+ throw new Error('ANTHROPIC_API_KEY environment variable is required');
44
+ }
40
45
  let ticket;
41
46
  let testPrompt;
42
47
  let testIdentifier = '';
@@ -61,30 +66,68 @@ export async function testCore(options) {
61
66
  console.log(` ✅ Loaded: ${ticket.id} - ${ticket.title}\n`);
62
67
  }
63
68
  else {
64
- // Use custom prompt
69
+ // Use custom prompt directly
65
70
  console.log('📋 Using custom prompt...');
66
71
  testIdentifier = `custom-${Date.now()}`;
67
- testPrompt = generateCustomTestPrompt(customPrompt, url);
68
- console.log(` ✅ Test prompt ready\n`);
72
+ testPrompt = customPrompt;
73
+ console.log(` ✅ Prompt: ${testPrompt}\n`);
69
74
  }
70
- // 2. Run single browser test (NO retries)
75
+ // 2. Initialize Stagehand
71
76
  console.log(`${'='.repeat(60)}`);
72
77
  console.log(`🧪 Running Browser Test`);
73
78
  console.log(`${'='.repeat(60)}\n`);
74
- const browserResult = await runBrowserTest({
75
- url,
76
- task: testPrompt,
77
- headed,
78
- debug,
79
+ console.log(`🌐 URL: ${url}`);
80
+ console.log(`🔍 Verbose: ${verbose ? 'enabled' : 'disabled'}`);
81
+ console.log(`👁️ Headless: ${headless ? 'enabled' : 'disabled'}\n`);
82
+ const stagehand = new Stagehand({
83
+ env: 'LOCAL',
84
+ verbose: verbose ? 2 : 1, // verbose flag → level 2, otherwise level 1
85
+ localBrowserLaunchOptions: {
86
+ headless,
87
+ },
88
+ });
89
+ await stagehand.init();
90
+ console.log('✅ Stagehand initialized\n');
91
+ // 3. Navigate to URL
92
+ const page = stagehand.context.pages()[0];
93
+ console.log(`🌐 Navigating to ${url}...`);
94
+ await page.goto(url);
95
+ console.log('✅ Navigation complete\n');
96
+ // 4. Create agent with system prompt
97
+ const agent = stagehand.agent({
98
+ systemPrompt: `You are a helpful testing assistant that can control a web browser.
99
+ Execute the given instructions step by step.
100
+ Be thorough and wait for elements to load when necessary.
101
+ Do not ask follow-up questions, trust your judgement to complete the task.`,
79
102
  });
80
- // 3. Return result immediately (no fixing, no retries)
103
+ // 5. Execute test instruction
104
+ console.log('🤖 Agent starting execution...\n');
105
+ const result = await agent.execute({
106
+ instruction: testPrompt,
107
+ });
108
+ // 6. Close browser
109
+ console.log('\n🔒 Closing browser session...');
110
+ await stagehand.close();
111
+ console.log('✅ Browser closed\n');
112
+ // 7. Calculate cost from token usage
113
+ const cost = result.usage ? calculateCost(result.usage) : 0;
114
+ // 8. Return TestResult
81
115
  return {
82
116
  ticketId: testIdentifier,
83
- success: browserResult.success,
84
- output: browserResult.output,
85
- logs: browserResult.logs,
86
- tokensUsed: browserResult.tokensUsed,
87
- cost: browserResult.cost,
117
+ success: result.success,
118
+ output: result.message,
119
+ logs: {
120
+ console: [], // Stagehand doesn't expose browser console logs via agent
121
+ errors: result.success ? [] : [result.message],
122
+ },
123
+ tokensUsed: {
124
+ input: result.usage?.input_tokens || 0,
125
+ output: result.usage?.output_tokens || 0,
126
+ cacheCreation: 0, // Not exposed separately by Stagehand
127
+ cacheRead: result.usage?.cached_input_tokens || 0,
128
+ },
129
+ cost,
130
+ error: result.success ? undefined : result.message,
88
131
  };
89
132
  }
90
133
  catch (error) {
@@ -109,6 +152,19 @@ export async function testCore(options) {
109
152
  };
110
153
  }
111
154
  }
155
+ /**
156
+ * Calculate cost from Stagehand token usage
157
+ * Pricing (per million tokens):
158
+ * - Input: $3.00
159
+ * - Output: $15.00
160
+ * - Cache read: $0.30
161
+ */
162
+ function calculateCost(usage) {
163
+ const inputCost = (usage.input_tokens / 1000000) * 3.0;
164
+ const outputCost = (usage.output_tokens / 1000000) * 15.0;
165
+ const cacheReadCost = ((usage.cached_input_tokens || 0) / 1000000) * 0.3;
166
+ return inputCost + outputCost + cacheReadCost;
167
+ }
112
168
  /**
113
169
  * Main test command
114
170
  */
@@ -122,10 +178,6 @@ export async function testCommand(options) {
122
178
  const logContext = logger.createContext('test', { noLogs });
123
179
  const cleanupHandler = setupCancellationHandler(logContext);
124
180
  try {
125
- // Validate environment
126
- if (!process.env.ANTHROPIC_API_KEY) {
127
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
128
- }
129
181
  // Run atomic test
130
182
  const result = await testCore(options);
131
183
  // Track metrics
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,MAAM,aAAa,CAAC;AA8PzE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA2HjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D3E"}
1
+ {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAU,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8XzE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAwLjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF3E"}