@kosuke-ai/cli 0.0.43 โ 0.0.45
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/README.md +94 -1
- package/claude.costs.json +34 -0
- package/dist/index.js +55 -9
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts +5 -1
- package/dist/kosuke/commands/build.d.ts.map +1 -1
- package/dist/kosuke/commands/build.js +300 -4
- package/dist/kosuke/commands/build.js.map +1 -1
- package/dist/kosuke/commands/migrate.d.ts +6 -1
- package/dist/kosuke/commands/migrate.d.ts.map +1 -1
- package/dist/kosuke/commands/migrate.js +124 -37
- package/dist/kosuke/commands/migrate.js.map +1 -1
- package/dist/kosuke/commands/plan.d.ts +4 -20
- package/dist/kosuke/commands/plan.d.ts.map +1 -1
- package/dist/kosuke/commands/plan.js +471 -679
- package/dist/kosuke/commands/plan.js.map +1 -1
- package/dist/kosuke/commands/requirements.js +2 -2
- package/dist/kosuke/commands/requirements.js.map +1 -1
- package/dist/kosuke/commands/review.d.ts +6 -1
- package/dist/kosuke/commands/review.d.ts.map +1 -1
- package/dist/kosuke/commands/review.js +168 -68
- package/dist/kosuke/commands/review.js.map +1 -1
- package/dist/kosuke/commands/serve.d.ts +9 -0
- package/dist/kosuke/commands/serve.d.ts.map +1 -0
- package/dist/kosuke/commands/serve.js +17 -0
- package/dist/kosuke/commands/serve.js.map +1 -0
- package/dist/kosuke/commands/ship.d.ts +6 -1
- package/dist/kosuke/commands/ship.d.ts.map +1 -1
- package/dist/kosuke/commands/ship.js +226 -67
- package/dist/kosuke/commands/ship.js.map +1 -1
- package/dist/kosuke/commands/test.d.ts +11 -6
- package/dist/kosuke/commands/test.d.ts.map +1 -1
- package/dist/kosuke/commands/test.js +438 -105
- package/dist/kosuke/commands/test.js.map +1 -1
- package/dist/kosuke/commands/tickets.d.ts +7 -15
- package/dist/kosuke/commands/tickets.d.ts.map +1 -1
- package/dist/kosuke/commands/tickets.js +17 -61
- package/dist/kosuke/commands/tickets.js.map +1 -1
- package/dist/kosuke/serve/middleware/error-handler.d.ts +13 -0
- package/dist/kosuke/serve/middleware/error-handler.d.ts.map +1 -0
- package/dist/kosuke/serve/middleware/error-handler.js +34 -0
- package/dist/kosuke/serve/middleware/error-handler.js.map +1 -0
- package/dist/kosuke/serve/middleware/validation.d.ts +13 -0
- package/dist/kosuke/serve/middleware/validation.d.ts.map +1 -0
- package/dist/kosuke/serve/middleware/validation.js +39 -0
- package/dist/kosuke/serve/middleware/validation.js.map +1 -0
- package/dist/kosuke/serve/routes/build.d.ts +6 -0
- package/dist/kosuke/serve/routes/build.d.ts.map +1 -0
- package/dist/kosuke/serve/routes/build.js +224 -0
- package/dist/kosuke/serve/routes/build.js.map +1 -0
- package/dist/kosuke/serve/routes/health.d.ts +6 -0
- package/dist/kosuke/serve/routes/health.d.ts.map +1 -0
- package/dist/kosuke/serve/routes/health.js +11 -0
- package/dist/kosuke/serve/routes/health.js.map +1 -0
- package/dist/kosuke/serve/routes/plan.d.ts +6 -0
- package/dist/kosuke/serve/routes/plan.d.ts.map +1 -0
- package/dist/kosuke/serve/routes/plan.js +104 -0
- package/dist/kosuke/serve/routes/plan.js.map +1 -0
- package/dist/kosuke/serve/server.d.ts +16 -0
- package/dist/kosuke/serve/server.d.ts.map +1 -0
- package/dist/kosuke/serve/server.js +63 -0
- package/dist/kosuke/serve/server.js.map +1 -0
- package/dist/kosuke/serve/validation/build.d.ts +41 -0
- package/dist/kosuke/serve/validation/build.d.ts.map +1 -0
- package/dist/kosuke/serve/validation/build.js +20 -0
- package/dist/kosuke/serve/validation/build.js.map +1 -0
- package/dist/kosuke/serve/validation/plan.d.ts +26 -0
- package/dist/kosuke/serve/validation/plan.d.ts.map +1 -0
- package/dist/kosuke/serve/validation/plan.js +15 -0
- package/dist/kosuke/serve/validation/plan.js.map +1 -0
- package/dist/kosuke/types.d.ts +217 -1
- package/dist/kosuke/types.d.ts.map +1 -1
- package/dist/kosuke/utils/claude-agent.d.ts +82 -6
- package/dist/kosuke/utils/claude-agent.d.ts.map +1 -1
- package/dist/kosuke/utils/claude-agent.js +381 -180
- package/dist/kosuke/utils/claude-agent.js.map +1 -1
- package/dist/kosuke/utils/playwright-mcp-client.d.ts +45 -0
- package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +1 -0
- package/dist/kosuke/utils/playwright-mcp-client.js +131 -0
- package/dist/kosuke/utils/playwright-mcp-client.js.map +1 -0
- package/dist/lib.d.ts +4 -4
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +2 -1
- package/dist/lib.js.map +1 -1
- package/dist/package.json +7 -3
- package/package.json +7 -3
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test command - Atomic web E2E testing
|
|
2
|
+
* Test command - Atomic web E2E testing with Playwright MCP
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
5
|
* 1. Accepts a test prompt with optional ticket context
|
|
6
|
-
* 2. Runs a single web E2E test
|
|
7
|
-
* 3. Returns result (success/failure) with logs
|
|
6
|
+
* 2. Runs a single web E2E test using Playwright MCP + Claude AI
|
|
7
|
+
* 3. Returns result (success/failure) with logs and trace files
|
|
8
8
|
*
|
|
9
9
|
* Test type:
|
|
10
|
-
* - web-test: Browser E2E testing with
|
|
10
|
+
* - web-test: Browser E2E testing with Playwright MCP + Claude AI
|
|
11
11
|
*
|
|
12
12
|
* NOTE: This is ATOMIC - no retries, no fixing, no linting
|
|
13
13
|
* For iterative test+fix, use: kosuke build
|
|
@@ -17,133 +17,442 @@
|
|
|
17
17
|
* kosuke test --prompt="..." --url=http://localhost:4000
|
|
18
18
|
* kosuke test --prompt="..." --verbose # Enable verbose output
|
|
19
19
|
* kosuke test --prompt="..." --headless # Run in headless mode
|
|
20
|
+
* kosuke test --prompt="..." --trace # Enable trace recording
|
|
20
21
|
*
|
|
21
22
|
* Programmatic usage (from build command):
|
|
22
23
|
* const result = await testCore({
|
|
23
24
|
* prompt: "Test login functionality",
|
|
24
|
-
* type: "web-test",
|
|
25
25
|
* context: { ticketId, ticketTitle, ticketDescription },
|
|
26
26
|
* });
|
|
27
27
|
*/
|
|
28
|
-
import
|
|
28
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
29
29
|
import { logger, setupCancellationHandler } from '../utils/logger.js';
|
|
30
|
+
import { PlaywrightMCPClient } from '../utils/playwright-mcp-client.js';
|
|
30
31
|
/**
|
|
31
|
-
*
|
|
32
|
+
* Calculate cost from text generation token usage
|
|
33
|
+
* Pricing (per million tokens):
|
|
34
|
+
* - Input: $3.00
|
|
35
|
+
* - Output: $15.00
|
|
36
|
+
* - Cache creation: $3.75
|
|
37
|
+
* - Cache read: $0.30
|
|
32
38
|
*/
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
function calculateTextGenerationCost(usage) {
|
|
40
|
+
const inputCost = (usage.input_tokens / 1000000) * 3.0;
|
|
41
|
+
const outputCost = (usage.output_tokens / 1000000) * 15.0;
|
|
42
|
+
const cacheCreationCost = (usage.cache_creation_tokens / 1000000) * 3.75;
|
|
43
|
+
const cacheReadCost = (usage.cache_read_tokens / 1000000) * 0.3;
|
|
44
|
+
return inputCost + outputCost + cacheCreationCost + cacheReadCost;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute test using Playwright MCP mode (streaming version)
|
|
48
|
+
*/
|
|
49
|
+
async function* executeWithPlaywrightMCPStream(params) {
|
|
50
|
+
const { testPrompt, context, testIdentifier, url, headless, verbose, trace } = params;
|
|
51
|
+
// Yield test started event
|
|
52
|
+
yield {
|
|
53
|
+
type: 'test_started',
|
|
54
|
+
data: { testIdentifier, url, headless },
|
|
55
|
+
};
|
|
56
|
+
// Validate ANTHROPIC_API_KEY
|
|
43
57
|
if (!process.env.ANTHROPIC_API_KEY) {
|
|
44
|
-
throw new Error('ANTHROPIC_API_KEY environment variable is required
|
|
45
|
-
}
|
|
46
|
-
const testIdentifier = context?.ticketId || `test-${Date.now()}`;
|
|
47
|
-
// Log context if provided
|
|
48
|
-
if (context) {
|
|
49
|
-
console.log(`๐ซ Testing: ${context.ticketId} - ${context.ticketTitle}`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.log(`๐ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
|
|
58
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
53
59
|
}
|
|
60
|
+
// Initialize MCP client
|
|
61
|
+
const mcpClient = new PlaywrightMCPClient();
|
|
54
62
|
try {
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
//
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
Execute the given instructions step by step.
|
|
80
|
-
Be thorough and wait for elements to load when necessary.
|
|
81
|
-
Do not ask follow-up questions, trust your judgement to complete the task.`,
|
|
82
|
-
});
|
|
83
|
-
// Execute test instruction
|
|
84
|
-
console.log('๐ค Agent starting execution...\n');
|
|
85
|
-
const result = await agent.execute({
|
|
86
|
-
instruction: testPrompt,
|
|
63
|
+
// Connect to MCP server
|
|
64
|
+
await mcpClient.connect({ verbose, trace });
|
|
65
|
+
// Get MCP tools
|
|
66
|
+
const mcpTools = mcpClient.getTools();
|
|
67
|
+
// Yield MCP connected event
|
|
68
|
+
yield {
|
|
69
|
+
type: 'mcp_connected',
|
|
70
|
+
data: { toolsAvailable: mcpTools.length },
|
|
71
|
+
};
|
|
72
|
+
// Start tracing if enabled
|
|
73
|
+
if (trace) {
|
|
74
|
+
console.log('๐น Starting trace recording...');
|
|
75
|
+
try {
|
|
76
|
+
await mcpClient.executeTool('browser_start_tracing', {});
|
|
77
|
+
console.log('โ
Trace recording started\n');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.warn(`โ ๏ธ Failed to start tracing: ${error instanceof Error ? error.message : String(error)}`);
|
|
81
|
+
console.warn('โ ๏ธ Continuing without tracing...\n');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Initialize Anthropic client
|
|
85
|
+
const anthropic = new Anthropic({
|
|
86
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
87
87
|
});
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
// Prepare system prompt
|
|
89
|
+
const systemPrompt = `You are a browser testing assistant using Playwright tools.
|
|
90
|
+
|
|
91
|
+
Execute the test instructions step by step using the available Playwright MCP tools.
|
|
92
|
+
|
|
93
|
+
REQUIREMENTS:
|
|
94
|
+
- Use chromium browser (already configured)
|
|
95
|
+
- Headless mode: ${headless ? 'enabled' : 'disabled'}
|
|
96
|
+
- Target URL: ${url}
|
|
97
|
+
- Be thorough and wait for elements to load when necessary
|
|
98
|
+
- Report success or failure clearly
|
|
99
|
+
|
|
100
|
+
${context ? `\nTest Context:\n- Ticket: ${context.ticketId}\n- Title: ${context.ticketTitle}\n${context.ticketDescription ? `- Description: ${context.ticketDescription}\n` : ''}` : ''}`;
|
|
101
|
+
// Build messages
|
|
102
|
+
let messages = [
|
|
103
|
+
{
|
|
104
|
+
role: 'user',
|
|
105
|
+
content: testPrompt,
|
|
102
106
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
];
|
|
108
|
+
// Track tokens and cost
|
|
109
|
+
let totalInputTokens = 0;
|
|
110
|
+
let totalOutputTokens = 0;
|
|
111
|
+
let totalCacheCreation = 0;
|
|
112
|
+
let totalCacheRead = 0;
|
|
113
|
+
// Execute test loop (max 20 turns)
|
|
114
|
+
let turnCount = 0;
|
|
115
|
+
const maxTurns = 20;
|
|
116
|
+
let responseText = '';
|
|
117
|
+
let testSuccess = false;
|
|
118
|
+
while (turnCount < maxTurns) {
|
|
119
|
+
turnCount++;
|
|
120
|
+
// Yield test turn event
|
|
121
|
+
yield {
|
|
122
|
+
type: 'test_turn',
|
|
123
|
+
data: { turnNumber: turnCount, maxTurns },
|
|
124
|
+
};
|
|
125
|
+
// Truncate old tool results to prevent token overflow
|
|
126
|
+
// Keep only last 3 tool result exchanges (6 messages: 3 assistant + 3 user with results)
|
|
127
|
+
if (messages.length > 13) {
|
|
128
|
+
// Keep initial user message + last 6 messages (3 exchanges)
|
|
129
|
+
const initialMessage = messages[0];
|
|
130
|
+
const recentMessages = messages.slice(-6);
|
|
131
|
+
messages = [initialMessage, ...recentMessages];
|
|
132
|
+
if (verbose) {
|
|
133
|
+
console.log(`\n๐ Truncated message history (keeping last 3 exchanges to prevent token overflow)`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Stream response
|
|
137
|
+
const stream = await anthropic.messages.stream({
|
|
138
|
+
model: process.env.ANTHROPIC_MODEL || 'claude-haiku-4-5-20251001',
|
|
139
|
+
max_tokens: 4096,
|
|
140
|
+
system: systemPrompt,
|
|
141
|
+
tools: mcpTools,
|
|
142
|
+
messages,
|
|
143
|
+
});
|
|
144
|
+
let currentText = '';
|
|
145
|
+
const toolUses = [];
|
|
146
|
+
// Process stream
|
|
147
|
+
for await (const event of stream) {
|
|
148
|
+
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
|
|
149
|
+
const delta = event.delta.text;
|
|
150
|
+
currentText += delta;
|
|
151
|
+
if (verbose) {
|
|
152
|
+
process.stdout.write(delta);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
responseText += currentText;
|
|
157
|
+
// Get final message
|
|
158
|
+
const finalMessage = await stream.finalMessage();
|
|
159
|
+
// Track tokens
|
|
160
|
+
const usage = finalMessage.usage;
|
|
161
|
+
totalInputTokens += usage.input_tokens;
|
|
162
|
+
totalOutputTokens += usage.output_tokens;
|
|
163
|
+
totalCacheCreation += usage.cache_creation_input_tokens || 0;
|
|
164
|
+
totalCacheRead += usage.cache_read_input_tokens || 0;
|
|
165
|
+
// Extract tool uses
|
|
166
|
+
for (const block of finalMessage.content) {
|
|
167
|
+
if (block.type === 'tool_use') {
|
|
168
|
+
toolUses.push({
|
|
169
|
+
id: block.id,
|
|
170
|
+
name: block.name,
|
|
171
|
+
input: block.input,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Add assistant message to history
|
|
176
|
+
messages.push({ role: 'assistant', content: finalMessage.content });
|
|
177
|
+
// Yield assistant message event
|
|
178
|
+
yield {
|
|
179
|
+
type: 'assistant_message',
|
|
180
|
+
data: {
|
|
181
|
+
text: currentText,
|
|
182
|
+
toolUses: toolUses.map((t) => ({ name: t.name })),
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
// If no tools called, test is complete
|
|
186
|
+
if (toolUses.length === 0) {
|
|
187
|
+
testSuccess =
|
|
188
|
+
responseText.toLowerCase().includes('success') ||
|
|
189
|
+
responseText.toLowerCase().includes('passed');
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
// Execute tools and collect results
|
|
193
|
+
const toolResults = [];
|
|
194
|
+
for (const toolUse of toolUses) {
|
|
195
|
+
let success = false;
|
|
196
|
+
try {
|
|
197
|
+
const result = await mcpClient.executeTool(toolUse.name, toolUse.input);
|
|
198
|
+
toolResults.push({
|
|
199
|
+
type: 'tool_result',
|
|
200
|
+
tool_use_id: toolUse.id,
|
|
201
|
+
content: JSON.stringify(result),
|
|
202
|
+
});
|
|
203
|
+
success = true;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
207
|
+
toolResults.push({
|
|
208
|
+
type: 'tool_result',
|
|
209
|
+
tool_use_id: toolUse.id,
|
|
210
|
+
content: `Error: ${errorMsg}`,
|
|
211
|
+
is_error: true,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Yield tool executed event
|
|
215
|
+
yield {
|
|
216
|
+
type: 'tool_executed',
|
|
217
|
+
data: { toolName: toolUse.name, success },
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// Add tool results to messages
|
|
221
|
+
messages.push({ role: 'user', content: toolResults });
|
|
222
|
+
}
|
|
223
|
+
// Stop tracing if enabled
|
|
224
|
+
if (trace) {
|
|
225
|
+
console.log('\n๐น Stopping trace recording...');
|
|
226
|
+
try {
|
|
227
|
+
const traceResult = await mcpClient.executeTool('browser_stop_tracing', {});
|
|
228
|
+
console.log('โ
Trace recording stopped\n');
|
|
229
|
+
// Parse trace result to find output paths
|
|
230
|
+
let traceText = '';
|
|
231
|
+
if (Array.isArray(traceResult)) {
|
|
232
|
+
const textContent = traceResult.find((item) => item.type === 'text');
|
|
233
|
+
if (textContent?.text) {
|
|
234
|
+
traceText = textContent.text;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else if (typeof traceResult === 'string') {
|
|
238
|
+
traceText = traceResult;
|
|
239
|
+
}
|
|
240
|
+
else if (traceResult && typeof traceResult === 'object' && 'text' in traceResult) {
|
|
241
|
+
traceText = traceResult.text;
|
|
242
|
+
}
|
|
243
|
+
if (traceText) {
|
|
244
|
+
// Extract paths from MCP response
|
|
245
|
+
const actionLogMatch = traceText.match(/Action log:\s*(.+\.trace)/);
|
|
246
|
+
const networkLogMatch = traceText.match(/Network log:\s*(.+\.network)/);
|
|
247
|
+
const resourcesMatch = traceText.match(/Resources.*:\s*(.+resources)/);
|
|
248
|
+
if (actionLogMatch) {
|
|
249
|
+
const tracePath = actionLogMatch[1];
|
|
250
|
+
const networkPath = networkLogMatch ? networkLogMatch[1] : null;
|
|
251
|
+
const resourcesPath = resourcesMatch ? resourcesMatch[1] : null;
|
|
252
|
+
console.log('๐ Trace files:');
|
|
253
|
+
console.log(` ๐น Action log: ${tracePath}`);
|
|
254
|
+
if (networkPath) {
|
|
255
|
+
console.log(` ๐ Network log: ${networkPath}`);
|
|
256
|
+
}
|
|
257
|
+
if (resourcesPath) {
|
|
258
|
+
console.log(` ๐ฆ Resources: ${resourcesPath}`);
|
|
259
|
+
}
|
|
260
|
+
console.log(`\n๐ฌ View trace (with video): npx playwright show-trace ${tracePath}`);
|
|
261
|
+
console.log(' โน๏ธ Video is embedded in the trace file and will play in the viewer');
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
console.log('โ
Trace saved (paths not parsed)');
|
|
265
|
+
console.log(`Raw result: ${traceText}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
console.log('โ ๏ธ Trace saved but location not returned by MCP server');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
console.warn(`โ ๏ธ Failed to stop tracing: ${error instanceof Error ? error.message : String(error)}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Yield test completed event
|
|
277
|
+
yield {
|
|
278
|
+
type: 'test_completed',
|
|
279
|
+
data: { success: testSuccess },
|
|
280
|
+
};
|
|
281
|
+
// Get MCP tool usage
|
|
282
|
+
const toolUsage = mcpClient.getToolUsage();
|
|
283
|
+
// Calculate costs
|
|
284
|
+
const textGenerationCost = calculateTextGenerationCost({
|
|
285
|
+
input_tokens: totalInputTokens,
|
|
286
|
+
output_tokens: totalOutputTokens,
|
|
287
|
+
cache_creation_tokens: totalCacheCreation,
|
|
288
|
+
cache_read_tokens: totalCacheRead,
|
|
289
|
+
});
|
|
290
|
+
// MCP tool calls cost (estimated: $0.01 per tool call)
|
|
291
|
+
const toolCallCost = toolUsage.total * 0.01;
|
|
292
|
+
const totalCost = textGenerationCost + toolCallCost;
|
|
293
|
+
// Close MCP client
|
|
294
|
+
await mcpClient.close();
|
|
295
|
+
// Yield done event
|
|
296
|
+
yield {
|
|
297
|
+
type: 'done',
|
|
298
|
+
data: {
|
|
299
|
+
ticketId: testIdentifier,
|
|
300
|
+
success: testSuccess,
|
|
301
|
+
output: responseText,
|
|
302
|
+
logs: {
|
|
303
|
+
console: [],
|
|
304
|
+
errors: testSuccess ? [] : [responseText],
|
|
305
|
+
},
|
|
306
|
+
tokensUsed: {
|
|
307
|
+
input: totalInputTokens,
|
|
308
|
+
output: totalOutputTokens,
|
|
309
|
+
cacheCreation: totalCacheCreation,
|
|
310
|
+
cacheRead: totalCacheRead,
|
|
311
|
+
},
|
|
312
|
+
cost: totalCost,
|
|
313
|
+
mcpToolUsage: {
|
|
314
|
+
navigations: toolUsage.navigations,
|
|
315
|
+
clicks: toolUsage.clicks,
|
|
316
|
+
types: toolUsage.types,
|
|
317
|
+
extracts: toolUsage.extracts,
|
|
318
|
+
other: toolUsage.other,
|
|
319
|
+
},
|
|
320
|
+
mcpToolCost: toolCallCost,
|
|
321
|
+
error: testSuccess ? undefined : 'Test did not complete successfully',
|
|
108
322
|
},
|
|
109
|
-
cost,
|
|
110
|
-
error: result.success ? undefined : result.message,
|
|
111
323
|
};
|
|
112
324
|
}
|
|
113
325
|
catch (error) {
|
|
326
|
+
await mcpClient.close();
|
|
114
327
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
328
|
+
// Yield done event with error
|
|
329
|
+
yield {
|
|
330
|
+
type: 'done',
|
|
331
|
+
data: {
|
|
332
|
+
ticketId: testIdentifier,
|
|
333
|
+
success: false,
|
|
334
|
+
output: `Test failed: ${errorMessage}`,
|
|
335
|
+
logs: {
|
|
336
|
+
console: [],
|
|
337
|
+
errors: [errorMessage],
|
|
338
|
+
},
|
|
339
|
+
tokensUsed: {
|
|
340
|
+
input: 0,
|
|
341
|
+
output: 0,
|
|
342
|
+
cacheCreation: 0,
|
|
343
|
+
cacheRead: 0,
|
|
344
|
+
},
|
|
345
|
+
cost: 0,
|
|
346
|
+
error: errorMessage,
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Streaming version of testCore - yields events for SSE integration
|
|
353
|
+
*/
|
|
354
|
+
export async function* testCoreStream(options) {
|
|
355
|
+
const { prompt: testPrompt, context, url = 'http://localhost:3000', headless = false, verbose = false, trace = false, } = options;
|
|
356
|
+
// Validate: prompt is required
|
|
357
|
+
if (!testPrompt || testPrompt.trim().length === 0) {
|
|
358
|
+
yield {
|
|
359
|
+
type: 'done',
|
|
360
|
+
data: {
|
|
361
|
+
ticketId: 'error',
|
|
362
|
+
success: false,
|
|
363
|
+
output: 'Test prompt is required',
|
|
364
|
+
logs: { console: [], errors: ['Test prompt is required'] },
|
|
365
|
+
tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
|
|
366
|
+
cost: 0,
|
|
367
|
+
error: 'Test prompt is required',
|
|
123
368
|
},
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
369
|
+
};
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// Validate ANTHROPIC_API_KEY (required for Playwright MCP)
|
|
373
|
+
if (!process.env.ANTHROPIC_API_KEY) {
|
|
374
|
+
yield {
|
|
375
|
+
type: 'done',
|
|
376
|
+
data: {
|
|
377
|
+
ticketId: 'error',
|
|
378
|
+
success: false,
|
|
379
|
+
output: 'ANTHROPIC_API_KEY is required',
|
|
380
|
+
logs: { console: [], errors: ['ANTHROPIC_API_KEY is required'] },
|
|
381
|
+
tokensUsed: { input: 0, output: 0, cacheCreation: 0, cacheRead: 0 },
|
|
382
|
+
cost: 0,
|
|
383
|
+
error: 'ANTHROPIC_API_KEY is required',
|
|
129
384
|
},
|
|
130
|
-
cost: 0,
|
|
131
|
-
error: errorMessage,
|
|
132
385
|
};
|
|
386
|
+
return;
|
|
133
387
|
}
|
|
388
|
+
const testIdentifier = context?.ticketId || `test-${Date.now()}`;
|
|
389
|
+
// Execute with Playwright MCP (streaming)
|
|
390
|
+
yield* executeWithPlaywrightMCPStream({
|
|
391
|
+
testPrompt,
|
|
392
|
+
context,
|
|
393
|
+
testIdentifier,
|
|
394
|
+
url,
|
|
395
|
+
headless,
|
|
396
|
+
verbose,
|
|
397
|
+
trace,
|
|
398
|
+
});
|
|
134
399
|
}
|
|
135
400
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* - Input: $3.00
|
|
139
|
-
* - Output: $15.00
|
|
140
|
-
* - Cache read: $0.30
|
|
401
|
+
* Core test logic (atomic - single execution, no retries, no fixes)
|
|
402
|
+
* Consumes testCoreStream and adds console logging
|
|
141
403
|
*/
|
|
142
|
-
function
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
404
|
+
export async function testCore(options) {
|
|
405
|
+
const { prompt: testPrompt, context } = options;
|
|
406
|
+
// Log context if provided
|
|
407
|
+
if (context) {
|
|
408
|
+
console.log(`๐ซ Testing: ${context.ticketId} - ${context.ticketTitle}`);
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
console.log(`๐ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
|
|
412
|
+
}
|
|
413
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
414
|
+
console.log(`๐งช Running Browser Test`);
|
|
415
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
416
|
+
let result = null;
|
|
417
|
+
// Consume stream and add console logging
|
|
418
|
+
for await (const event of testCoreStream(options)) {
|
|
419
|
+
if (event.type === 'test_started') {
|
|
420
|
+
console.log(`๐ URL: ${event.data.url}`);
|
|
421
|
+
console.log(`๐๏ธ Headless: ${event.data.headless ? 'enabled' : 'disabled'}`);
|
|
422
|
+
console.log(`๐ญ Browser: chromium (forced)\n`);
|
|
423
|
+
}
|
|
424
|
+
else if (event.type === 'mcp_connected') {
|
|
425
|
+
console.log(`โ
Connected to Playwright MCP (${event.data.toolsAvailable} tools available)\n`);
|
|
426
|
+
console.log('๐ค Starting test execution with Claude + Playwright MCP...\n');
|
|
427
|
+
}
|
|
428
|
+
else if (event.type === 'test_turn') {
|
|
429
|
+
if (options.verbose) {
|
|
430
|
+
console.log(`\n๐ Turn ${event.data.turnNumber}/${event.data.maxTurns}`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
else if (event.type === 'assistant_message') {
|
|
434
|
+
if (options.verbose && event.data.text) {
|
|
435
|
+
console.log(event.data.text);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else if (event.type === 'tool_executed') {
|
|
439
|
+
if (options.verbose) {
|
|
440
|
+
console.log(`๐ง Executed: ${event.data.toolName} - ${event.data.success ? 'โ
' : 'โ'}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else if (event.type === 'test_completed') {
|
|
444
|
+
console.log(`\nโ
Test ${event.data.success ? 'passed' : 'failed'}\n`);
|
|
445
|
+
}
|
|
446
|
+
else if (event.type === 'done') {
|
|
447
|
+
result = event.data;
|
|
448
|
+
console.log('๐ Closing MCP connection...');
|
|
449
|
+
console.log('โ
MCP connection closed\n');
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (!result) {
|
|
453
|
+
throw new Error('Test stream ended without result');
|
|
454
|
+
}
|
|
455
|
+
return result;
|
|
147
456
|
}
|
|
148
457
|
/**
|
|
149
458
|
* Main test command
|
|
@@ -192,7 +501,31 @@ function displayTestSummary(result) {
|
|
|
192
501
|
console.log(`๐ Output: ${result.output}`);
|
|
193
502
|
console.log(`๐ง Console logs: ${result.logs.console.length}`);
|
|
194
503
|
console.log(`โ Errors: ${result.logs.errors.length}`);
|
|
195
|
-
|
|
504
|
+
// Display MCP tool usage
|
|
505
|
+
if (result.mcpToolUsage) {
|
|
506
|
+
console.log(`\n๐ญ Playwright Tool Usage:`);
|
|
507
|
+
console.log(` ๐ Navigations: ${result.mcpToolUsage.navigations}`);
|
|
508
|
+
console.log(` ๐ฑ๏ธ Clicks: ${result.mcpToolUsage.clicks}`);
|
|
509
|
+
console.log(` โจ๏ธ Types: ${result.mcpToolUsage.types}`);
|
|
510
|
+
console.log(` ๐ค Extracts: ${result.mcpToolUsage.extracts}`);
|
|
511
|
+
console.log(` ๐ง Other: ${result.mcpToolUsage.other}`);
|
|
512
|
+
const totalTools = result.mcpToolUsage.navigations +
|
|
513
|
+
result.mcpToolUsage.clicks +
|
|
514
|
+
result.mcpToolUsage.types +
|
|
515
|
+
result.mcpToolUsage.extracts +
|
|
516
|
+
result.mcpToolUsage.other;
|
|
517
|
+
console.log(` ๐ Total: ${totalTools}`);
|
|
518
|
+
}
|
|
519
|
+
// Display cost breakdown
|
|
520
|
+
if (result.mcpToolCost !== undefined) {
|
|
521
|
+
console.log(`\n๐ฐ Cost Breakdown:`);
|
|
522
|
+
console.log(` ๐ฌ Text generation: $${(result.cost - result.mcpToolCost).toFixed(4)}`);
|
|
523
|
+
console.log(` ๐ญ Playwright tool calls: $${result.mcpToolCost.toFixed(4)}`);
|
|
524
|
+
console.log(` ๐ Total: $${result.cost.toFixed(4)}`);
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
console.log(`๐ฐ Cost: $${result.cost.toFixed(4)}`);
|
|
528
|
+
}
|
|
196
529
|
console.log('='.repeat(60));
|
|
197
530
|
if (result.success) {
|
|
198
531
|
console.log('\nโ
Test completed successfully!');
|
|
@@ -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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"}
|