@kosuke-ai/cli 0.0.38 โ†’ 0.0.39

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.
@@ -1,20 +1,32 @@
1
1
  /**
2
- * Test command - Atomic browser testing (no fixing, no linting)
2
+ * Test command - Atomic testing (web or database, no fixing, no linting)
3
3
  *
4
4
  * This command:
5
- * 1. Loads a ticket OR uses custom prompt
6
- * 2. Runs a single test with Stagehand (AI-driven browser automation)
5
+ * 1. Accepts a test prompt with optional ticket context
6
+ * 2. Runs a single test (web E2E or database validation)
7
7
  * 3. Returns result (success/failure) with logs
8
8
  *
9
+ * Test types:
10
+ * - web-test: Browser E2E testing with Stagehand
11
+ * - db-test: Database schema validation with Claude Code
12
+ *
9
13
  * NOTE: This is ATOMIC - no retries, no fixing, no linting
10
- * For iterative test+fix, use: kosuke ship --test
14
+ * For iterative test+fix, use: kosuke build
11
15
  *
12
16
  * Usage:
13
- * kosuke test --ticket=FRONTEND-1 # Test with ticket
14
- * kosuke test --prompt="Test user login flow" # Test with custom prompt
15
- * kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
16
- * kosuke test --prompt="..." --verbose # Enable verbose output
17
- * kosuke test --prompt="..." --headless # Run in headless mode (invisible)
17
+ * kosuke test --prompt="Test user login" --type=web-test
18
+ * kosuke test --prompt="Validate users table exists" --type=db-test
19
+ * kosuke test --prompt="..." --url=http://localhost:4000
20
+ * kosuke test --prompt="..." --db-url=postgres://...
21
+ * kosuke test --prompt="..." --verbose # Enable verbose output
22
+ * kosuke test --prompt="..." --headless # Run in headless mode (web-test only)
23
+ *
24
+ * Programmatic usage (from build command):
25
+ * const result = await testCore({
26
+ * prompt: "Test login functionality",
27
+ * type: "web-test",
28
+ * context: { ticketId, ticketTitle, ticketDescription },
29
+ * });
18
30
  */
19
31
  import type { TestOptions, TestResult } from '../types.js';
20
32
  /**
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAgB,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsEzE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2KxE;AAuBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrE"}
@@ -1,140 +1,224 @@
1
1
  /**
2
- * Test command - Atomic browser testing (no fixing, no linting)
2
+ * Test command - Atomic testing (web or database, no fixing, no linting)
3
3
  *
4
4
  * This command:
5
- * 1. Loads a ticket OR uses custom prompt
6
- * 2. Runs a single test with Stagehand (AI-driven browser automation)
5
+ * 1. Accepts a test prompt with optional ticket context
6
+ * 2. Runs a single test (web E2E or database validation)
7
7
  * 3. Returns result (success/failure) with logs
8
8
  *
9
+ * Test types:
10
+ * - web-test: Browser E2E testing with Stagehand
11
+ * - db-test: Database schema validation with Claude Code
12
+ *
9
13
  * NOTE: This is ATOMIC - no retries, no fixing, no linting
10
- * For iterative test+fix, use: kosuke ship --test
14
+ * For iterative test+fix, use: kosuke build
11
15
  *
12
16
  * Usage:
13
- * kosuke test --ticket=FRONTEND-1 # Test with ticket
14
- * kosuke test --prompt="Test user login flow" # Test with custom prompt
15
- * kosuke test --ticket=FRONTEND-1 --url=http://localhost:4000
16
- * kosuke test --prompt="..." --verbose # Enable verbose output
17
- * kosuke test --prompt="..." --headless # Run in headless mode (invisible)
17
+ * kosuke test --prompt="Test user login" --type=web-test
18
+ * kosuke test --prompt="Validate users table exists" --type=db-test
19
+ * kosuke test --prompt="..." --url=http://localhost:4000
20
+ * kosuke test --prompt="..." --db-url=postgres://...
21
+ * kosuke test --prompt="..." --verbose # Enable verbose output
22
+ * kosuke test --prompt="..." --headless # Run in headless mode (web-test only)
23
+ *
24
+ * Programmatic usage (from build command):
25
+ * const result = await testCore({
26
+ * prompt: "Test login functionality",
27
+ * type: "web-test",
28
+ * context: { ticketId, ticketTitle, ticketDescription },
29
+ * });
18
30
  */
19
31
  import { Stagehand } from '@browserbasehq/stagehand';
20
- import { join } from 'path';
32
+ import { formatCostBreakdown, runAgent } from '../utils/claude-agent.js';
21
33
  import { logger, setupCancellationHandler } from '../utils/logger.js';
22
- import { generateTestPrompt } from '../utils/prompt-generator.js';
23
- import { findTicket, loadTicketsFile } from '../utils/tickets-manager.js';
34
+ /**
35
+ * Build system prompt for DB schema validation with Claude Code
36
+ */
37
+ function buildDBTestPrompt(testPrompt, dbUrl) {
38
+ return `You are a database testing expert validating database schema.
39
+
40
+ **Your Task:**
41
+ ${testPrompt}
42
+
43
+ **Database Connection:**
44
+ - Database URL: ${dbUrl}
45
+ - Use the \`postgres\` npm package to connect and query the database
46
+ - Connection is already available via environment (use POSTGRES_URL)
47
+
48
+ **Critical Instructions:**
49
+ 1. Connect to the PostgreSQL database using the URL provided
50
+ 2. Query the database to check if the expected tables exist
51
+ 3. Validate table existence based on the test requirements
52
+ 4. Report success if all expected tables are found
53
+ 5. Report failure with specific missing tables if validation fails
54
+ 6. Use terminal commands to run database queries (e.g., \`POSTGRES_URL="${dbUrl}" psql -c "\\dt"\`)
55
+ 7. Alternatively, write and run a Node.js script to validate schema
56
+
57
+ **Success Criteria:**
58
+ - All expected tables from the test prompt exist in the database
59
+ - No errors during database connection
60
+ - Clear validation output showing which tables were checked
61
+
62
+ Begin by connecting to the database and validating the schema requirements.`;
63
+ }
64
+ /**
65
+ * Run database schema validation test with Claude Code
66
+ */
67
+ async function runDBTest(testPrompt, dbUrl, cwd) {
68
+ console.log('๐Ÿ—„๏ธ Running database validation with Claude Code...\n');
69
+ const systemPrompt = buildDBTestPrompt(testPrompt, dbUrl);
70
+ const result = await runAgent('Validate database schema according to test requirements', {
71
+ systemPrompt,
72
+ cwd,
73
+ maxTurns: 15,
74
+ verbosity: 'normal',
75
+ });
76
+ console.log(`\nโœจ Database validation completed`);
77
+ console.log(`๐Ÿ’ฐ Validation cost: ${formatCostBreakdown(result)}`);
78
+ // Parse validation result from agent output
79
+ // Success if agent completed without errors
80
+ const success = result.fixCount === 0 || result.response.toLowerCase().includes('success');
81
+ return {
82
+ success,
83
+ tablesValidated: [], // Agent handles validation internally
84
+ errors: success ? [] : ['Database validation failed - see agent output above'],
85
+ tokensUsed: result.tokensUsed,
86
+ cost: result.cost,
87
+ };
88
+ }
24
89
  /**
25
90
  * Core test logic (atomic - single execution, no retries, no fixes)
26
91
  */
27
92
  export async function testCore(options) {
28
- const { ticket: ticketId, prompt: customPrompt, url = 'http://localhost:3000', headless = false, verbose = false, ticketsFile = 'tickets.json', directory, } = options;
93
+ const { prompt: testPrompt, type: manualType, context, url = 'http://localhost:3000', dbUrl = 'postgres://postgres:postgres@localhost:5432/postgres', headless = false, verbose = false, directory, } = options;
29
94
  const cwd = directory || process.cwd();
30
- const ticketsPath = join(cwd, ticketsFile);
31
- // Validate: must provide either ticket OR prompt (not both)
32
- if (!ticketId && !customPrompt) {
33
- throw new Error('Either --ticket or --prompt must be provided\n' +
95
+ // Validate: prompt is required
96
+ if (!testPrompt || testPrompt.trim().length === 0) {
97
+ throw new Error('Test prompt is required\n' +
34
98
  'Examples:\n' +
35
- ' kosuke test --ticket=FRONTEND-1\n' +
36
- ' kosuke test --prompt="Test user login flow"');
99
+ ' kosuke test --prompt="Test user login" --type=web-test\n' +
100
+ ' kosuke test --prompt="Validate users table exists" --type=db-test');
101
+ }
102
+ // Auto-detect test type from context or use manual type
103
+ let testType;
104
+ if (manualType) {
105
+ testType = manualType;
106
+ }
107
+ else if (context?.ticketId.startsWith('DB-TEST-')) {
108
+ testType = 'db-test';
37
109
  }
38
- if (ticketId && customPrompt) {
39
- throw new Error('Cannot provide both --ticket and --prompt. Please use one or the other.');
110
+ else if (context?.ticketId.startsWith('WEB-TEST-')) {
111
+ testType = 'web-test';
40
112
  }
41
- // Validate ANTHROPIC_API_KEY
113
+ else {
114
+ // Default to web-test if no clear indication
115
+ testType = 'web-test';
116
+ }
117
+ // Validate ANTHROPIC_API_KEY (required for both test types now)
42
118
  if (!process.env.ANTHROPIC_API_KEY) {
43
- throw new Error('ANTHROPIC_API_KEY environment variable is required');
119
+ throw new Error('ANTHROPIC_API_KEY environment variable is required for testing');
120
+ }
121
+ const testIdentifier = context?.ticketId || `test-${Date.now()}`;
122
+ // Log context if provided
123
+ if (context) {
124
+ console.log(`๐ŸŽซ Testing: ${context.ticketId} - ${context.ticketTitle}`);
44
125
  }
45
- let ticket;
46
- let testPrompt;
47
- let testIdentifier = '';
126
+ else {
127
+ console.log(`๐Ÿ“‹ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
128
+ }
129
+ console.log(`๐ŸŽฏ Test Type: ${testType}\n`);
48
130
  try {
49
- // 1. Load ticket or create from custom prompt
50
- if (ticketId) {
51
- // Load ticket from file
52
- console.log('๐Ÿ“‹ Loading ticket...');
53
- const ticketsData = loadTicketsFile(ticketsPath);
54
- const foundTicket = findTicket(ticketsData, ticketId);
55
- if (!foundTicket) {
56
- throw new Error(`Ticket ${ticketId} not found in ${ticketsFile}\n` +
57
- `Available tickets: ${ticketsData.tickets.map((t) => t.id).join(', ')}`);
58
- }
59
- if (foundTicket.status !== 'Done' && foundTicket.status !== 'InProgress') {
60
- throw new Error(`Ticket ${ticketId} status is "${foundTicket.status}".\n` +
61
- `Tests should only be run on tickets that have been implemented (Done or InProgress).`);
62
- }
63
- ticket = foundTicket;
64
- testIdentifier = ticketId;
65
- testPrompt = generateTestPrompt(ticket);
66
- console.log(` โœ… Loaded: ${ticket.id} - ${ticket.title}\n`);
131
+ // 2. Run appropriate test based on type
132
+ if (testType === 'db-test') {
133
+ // Database validation test with Claude Code
134
+ console.log(`${'='.repeat(60)}`);
135
+ console.log(`๐Ÿงช Running Database Validation Test`);
136
+ console.log(`${'='.repeat(60)}\n`);
137
+ console.log(`๐Ÿ—„๏ธ Database URL: ${dbUrl.replace(/:[^:@]+@/, ':****@')}\n`); // Hide password
138
+ const dbResult = await runDBTest(testPrompt, dbUrl, cwd);
139
+ return {
140
+ ticketId: testIdentifier,
141
+ testType: 'db-test',
142
+ success: dbResult.success,
143
+ output: dbResult.success
144
+ ? `โœ… Database validation passed`
145
+ : `โŒ Database validation failed\nErrors:\n${dbResult.errors.join('\n')}`,
146
+ logs: {
147
+ console: [],
148
+ errors: dbResult.errors,
149
+ },
150
+ tokensUsed: dbResult.tokensUsed,
151
+ cost: dbResult.cost,
152
+ error: dbResult.success ? undefined : dbResult.errors.join('\n'),
153
+ };
67
154
  }
68
155
  else {
69
- // Use custom prompt directly
70
- console.log('๐Ÿ“‹ Using custom prompt...');
71
- testIdentifier = `custom-${Date.now()}`;
72
- testPrompt = customPrompt;
73
- console.log(` โœ… Prompt: ${testPrompt}\n`);
74
- }
75
- // 2. Initialize Stagehand
76
- console.log(`${'='.repeat(60)}`);
77
- console.log(`๐Ÿงช Running Browser Test`);
78
- console.log(`${'='.repeat(60)}\n`);
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.
156
+ // Web E2E test with Stagehand
157
+ console.log(`${'='.repeat(60)}`);
158
+ console.log(`๐Ÿงช Running Browser Test`);
159
+ console.log(`${'='.repeat(60)}\n`);
160
+ console.log(`๐ŸŒ URL: ${url}`);
161
+ console.log(`๐Ÿ” Verbose: ${verbose ? 'enabled' : 'disabled'}`);
162
+ console.log(`๐Ÿ‘๏ธ Headless: ${headless ? 'enabled' : 'disabled'}\n`);
163
+ const stagehand = new Stagehand({
164
+ env: 'LOCAL',
165
+ verbose: verbose ? 2 : 1, // verbose flag โ†’ level 2, otherwise level 1
166
+ localBrowserLaunchOptions: {
167
+ headless,
168
+ },
169
+ });
170
+ await stagehand.init();
171
+ console.log('โœ… Stagehand initialized\n');
172
+ // 3. Navigate to URL
173
+ const page = stagehand.context.pages()[0];
174
+ console.log(`๐ŸŒ Navigating to ${url}...`);
175
+ await page.goto(url);
176
+ console.log('โœ… Navigation complete\n');
177
+ // 4. Create agent with system prompt
178
+ const agent = stagehand.agent({
179
+ systemPrompt: `You are a helpful testing assistant that can control a web browser.
99
180
  Execute the given instructions step by step.
100
181
  Be thorough and wait for elements to load when necessary.
101
182
  Do not ask follow-up questions, trust your judgement to complete the task.`,
102
- });
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
115
- return {
116
- ticketId: testIdentifier,
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,
131
- };
183
+ });
184
+ // 5. Execute test instruction
185
+ console.log('๐Ÿค– Agent starting execution...\n');
186
+ const result = await agent.execute({
187
+ instruction: testPrompt,
188
+ });
189
+ // 6. Close browser
190
+ console.log('\n๐Ÿ”’ Closing browser session...');
191
+ await stagehand.close();
192
+ console.log('โœ… Browser closed\n');
193
+ // 7. Calculate cost from token usage
194
+ const cost = result.usage ? calculateCost(result.usage) : 0;
195
+ // 8. Return TestResult
196
+ return {
197
+ ticketId: testIdentifier,
198
+ testType: 'web-test',
199
+ success: result.success,
200
+ output: result.message,
201
+ logs: {
202
+ console: [], // Stagehand doesn't expose browser console logs via agent
203
+ errors: result.success ? [] : [result.message],
204
+ },
205
+ tokensUsed: {
206
+ input: result.usage?.input_tokens || 0,
207
+ output: result.usage?.output_tokens || 0,
208
+ cacheCreation: 0, // Not exposed separately by Stagehand
209
+ cacheRead: result.usage?.cached_input_tokens || 0,
210
+ },
211
+ cost,
212
+ error: result.success ? undefined : result.message,
213
+ };
214
+ }
132
215
  }
133
216
  catch (error) {
134
217
  const errorMessage = error instanceof Error ? error.message : String(error);
135
218
  console.error(`\nโŒ Test execution failed: ${errorMessage}`);
136
219
  return {
137
- ticketId: testIdentifier || ticketId || customPrompt || 'unknown',
220
+ ticketId: testIdentifier,
221
+ testType,
138
222
  success: false,
139
223
  output: `Test failed: ${errorMessage}`,
140
224
  logs: {
@@ -169,10 +253,10 @@ function calculateCost(usage) {
169
253
  * Main test command
170
254
  */
171
255
  export async function testCommand(options) {
172
- const { ticket: ticketId, prompt: customPrompt, noLogs = false } = options;
173
- const testDescription = ticketId
174
- ? `Ticket: ${ticketId}`
175
- : `Prompt: "${customPrompt?.substring(0, 60)}${customPrompt && customPrompt.length > 60 ? '...' : ''}"`;
256
+ const { prompt, context, noLogs = false } = options;
257
+ const testDescription = context
258
+ ? `${context.ticketId} - ${context.ticketTitle}`
259
+ : `"${prompt.substring(0, 60)}${prompt.length > 60 ? '...' : ''}"`;
176
260
  console.log(`๐Ÿงช Testing ${testDescription}\n`);
177
261
  // Initialize logging context
178
262
  const logContext = logger.createContext('test', { noLogs });
@@ -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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"}
@@ -2,10 +2,21 @@
2
2
  * Tickets command - Generate tickets from requirements document
3
3
  *
4
4
  * This command analyzes a requirements document (default: docs.md) and generates
5
- * structured tickets in three phases:
6
- * 1. Schema tickets (database design)
7
- * 2. Backend tickets (API, services, business logic)
8
- * 3. Frontend tickets (pages, components, UI)
5
+ * structured tickets with test coverage:
6
+ *
7
+ * SCAFFOLD BATCH:
8
+ * 1. Schema scaffold (database infrastructure)
9
+ * 2. DB test (validate scaffold schema)
10
+ * 3. Backend scaffold (API infrastructure)
11
+ * 4. Frontend scaffold (UI infrastructure)
12
+ * 5. Web tests (validate scaffold E2E)
13
+ *
14
+ * LOGIC BATCHES (1..N):
15
+ * 1. Schema logic (business entities)
16
+ * 2. DB test (validate logic schema)
17
+ * 3. Backend logic (business API)
18
+ * 4. Frontend logic (business UI)
19
+ * 5. Web tests (validate logic E2E)
9
20
  *
10
21
  * Claude Code Agent explores the specified directory (default: current directory)
11
22
  * to understand the existing codebase and generate contextual tickets.
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAyB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqsBxF;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA0YjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F3E"}