@kosuke-ai/cli 0.0.42 โ 0.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +37 -15
- package/dist/index.js.map +1 -1
- package/dist/kosuke/commands/build.d.ts.map +1 -1
- package/dist/kosuke/commands/build.js +3 -1
- package/dist/kosuke/commands/build.js.map +1 -1
- package/dist/kosuke/commands/plan.d.ts.map +1 -1
- package/dist/kosuke/commands/plan.js +57 -36
- package/dist/kosuke/commands/plan.js.map +1 -1
- package/dist/kosuke/commands/test.d.ts +5 -5
- package/dist/kosuke/commands/test.d.ts.map +1 -1
- package/dist/kosuke/commands/test.js +321 -86
- package/dist/kosuke/commands/test.js.map +1 -1
- package/dist/kosuke/commands/tickets.d.ts.map +1 -1
- package/dist/kosuke/commands/tickets.js +28 -14
- package/dist/kosuke/commands/tickets.js.map +1 -1
- package/dist/kosuke/types.d.ts +14 -3
- package/dist/kosuke/types.d.ts.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/kosuke/utils/tickets-manager.d.ts +41 -1
- package/dist/kosuke/utils/tickets-manager.d.ts.map +1 -1
- package/dist/kosuke/utils/tickets-manager.js +278 -1
- package/dist/kosuke/utils/tickets-manager.js.map +1 -1
- package/dist/lib.d.ts +3 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +1 -1
- package/dist/lib.js.map +1 -1
- package/dist/package.json +2 -2
- package/package.json +2 -2
- package/dist/kosuke/utils/ticket-writer.d.ts +0 -48
- package/dist/kosuke/utils/ticket-writer.d.ts.map +0 -1
- package/dist/kosuke/utils/ticket-writer.js +0 -259
- package/dist/kosuke/utils/ticket-writer.js.map +0 -1
|
@@ -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,102 +17,291 @@
|
|
|
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
|
|
48
|
+
*/
|
|
49
|
+
async function executeWithPlaywrightMCP(params) {
|
|
50
|
+
const { testPrompt, context, testIdentifier, url, headless, verbose, trace } = params;
|
|
51
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
52
|
+
console.log(`๐งช Running Browser Test`);
|
|
53
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
54
|
+
console.log(`๐ URL: ${url}`);
|
|
55
|
+
console.log(`๐ Verbose: ${verbose ? 'enabled' : 'disabled'}`);
|
|
56
|
+
console.log(`๐๏ธ Headless: ${headless ? 'enabled' : 'disabled'}`);
|
|
57
|
+
console.log(`๐ญ Browser: chromium (forced)`);
|
|
58
|
+
console.log(`๐น Tracing: ${trace ? 'enabled (video/screenshots will be saved)' : 'disabled'}\n`);
|
|
59
|
+
// Validate ANTHROPIC_API_KEY
|
|
43
60
|
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 ? '...' : ''}`);
|
|
61
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required');
|
|
53
62
|
}
|
|
63
|
+
// Initialize MCP client
|
|
64
|
+
const mcpClient = new PlaywrightMCPClient();
|
|
54
65
|
try {
|
|
55
|
-
//
|
|
56
|
-
console.log(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
console.log('โ
Navigation complete\n');
|
|
76
|
-
// Create agent with system prompt
|
|
77
|
-
const agent = stagehand.agent({
|
|
78
|
-
systemPrompt: `You are a helpful testing assistant that can control a web browser.
|
|
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.`,
|
|
66
|
+
// Connect to MCP server
|
|
67
|
+
console.log('๐ Connecting to Playwright MCP server...');
|
|
68
|
+
await mcpClient.connect({ verbose, trace });
|
|
69
|
+
// Get MCP tools
|
|
70
|
+
const mcpTools = mcpClient.getTools();
|
|
71
|
+
// Start tracing if enabled
|
|
72
|
+
if (trace) {
|
|
73
|
+
console.log('๐น Starting trace recording...');
|
|
74
|
+
try {
|
|
75
|
+
await mcpClient.executeTool('browser_start_tracing', {});
|
|
76
|
+
console.log('โ
Trace recording started\n');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.warn(`โ ๏ธ Failed to start tracing: ${error instanceof Error ? error.message : String(error)}`);
|
|
80
|
+
console.warn('โ ๏ธ Continuing without tracing...\n');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Initialize Anthropic client
|
|
84
|
+
const anthropic = new Anthropic({
|
|
85
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
82
86
|
});
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
// Prepare system prompt
|
|
88
|
+
const systemPrompt = `You are a browser testing assistant using Playwright tools.
|
|
89
|
+
|
|
90
|
+
Execute the test instructions step by step using the available Playwright MCP tools.
|
|
91
|
+
|
|
92
|
+
REQUIREMENTS:
|
|
93
|
+
- Use chromium browser (already configured)
|
|
94
|
+
- Headless mode: ${headless ? 'enabled' : 'disabled'}
|
|
95
|
+
- Target URL: ${url}
|
|
96
|
+
- Be thorough and wait for elements to load when necessary
|
|
97
|
+
- Report success or failure clearly
|
|
98
|
+
|
|
99
|
+
${context ? `\nTest Context:\n- Ticket: ${context.ticketId}\n- Title: ${context.ticketTitle}\n${context.ticketDescription ? `- Description: ${context.ticketDescription}\n` : ''}` : ''}`;
|
|
100
|
+
// Build messages
|
|
101
|
+
let messages = [
|
|
102
|
+
{
|
|
103
|
+
role: 'user',
|
|
104
|
+
content: testPrompt,
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
console.log('๐ค Starting test execution with Claude + Playwright MCP...\n');
|
|
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
|
+
// Truncate old tool results to prevent token overflow
|
|
121
|
+
// Keep only last 3 tool result exchanges (6 messages: 3 assistant + 3 user with results)
|
|
122
|
+
if (messages.length > 13) {
|
|
123
|
+
// Keep initial user message + last 6 messages (3 exchanges)
|
|
124
|
+
const initialMessage = messages[0];
|
|
125
|
+
const recentMessages = messages.slice(-6);
|
|
126
|
+
messages = [initialMessage, ...recentMessages];
|
|
127
|
+
if (verbose) {
|
|
128
|
+
console.log(`\n๐ Truncated message history (keeping last 3 exchanges to prevent token overflow)`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Stream response
|
|
132
|
+
const stream = await anthropic.messages.stream({
|
|
133
|
+
model: 'claude-sonnet-4-20250514',
|
|
134
|
+
max_tokens: 4096,
|
|
135
|
+
system: systemPrompt,
|
|
136
|
+
tools: mcpTools,
|
|
137
|
+
messages,
|
|
138
|
+
});
|
|
139
|
+
let currentText = '';
|
|
140
|
+
const toolUses = [];
|
|
141
|
+
// Process stream
|
|
142
|
+
for await (const event of stream) {
|
|
143
|
+
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
|
|
144
|
+
const delta = event.delta.text;
|
|
145
|
+
currentText += delta;
|
|
146
|
+
if (verbose) {
|
|
147
|
+
process.stdout.write(delta);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
responseText += currentText;
|
|
152
|
+
// Get final message
|
|
153
|
+
const finalMessage = await stream.finalMessage();
|
|
154
|
+
// Track tokens
|
|
155
|
+
const usage = finalMessage.usage;
|
|
156
|
+
totalInputTokens += usage.input_tokens;
|
|
157
|
+
totalOutputTokens += usage.output_tokens;
|
|
158
|
+
totalCacheCreation += usage.cache_creation_input_tokens || 0;
|
|
159
|
+
totalCacheRead += usage.cache_read_input_tokens || 0;
|
|
160
|
+
// Extract tool uses
|
|
161
|
+
for (const block of finalMessage.content) {
|
|
162
|
+
if (block.type === 'tool_use') {
|
|
163
|
+
toolUses.push({
|
|
164
|
+
id: block.id,
|
|
165
|
+
name: block.name,
|
|
166
|
+
input: block.input,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Add assistant message to history
|
|
171
|
+
messages.push({ role: 'assistant', content: finalMessage.content });
|
|
172
|
+
// If no tools called, test is complete
|
|
173
|
+
if (toolUses.length === 0) {
|
|
174
|
+
testSuccess =
|
|
175
|
+
responseText.toLowerCase().includes('success') ||
|
|
176
|
+
responseText.toLowerCase().includes('passed');
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
// Execute tools and collect results
|
|
180
|
+
const toolResults = [];
|
|
181
|
+
for (const toolUse of toolUses) {
|
|
182
|
+
if (verbose) {
|
|
183
|
+
console.log(`\n๐ง Executing: ${toolUse.name}`);
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const result = await mcpClient.executeTool(toolUse.name, toolUse.input);
|
|
187
|
+
toolResults.push({
|
|
188
|
+
type: 'tool_result',
|
|
189
|
+
tool_use_id: toolUse.id,
|
|
190
|
+
content: JSON.stringify(result),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
195
|
+
toolResults.push({
|
|
196
|
+
type: 'tool_result',
|
|
197
|
+
tool_use_id: toolUse.id,
|
|
198
|
+
content: `Error: ${errorMsg}`,
|
|
199
|
+
is_error: true,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Add tool results to messages
|
|
204
|
+
messages.push({ role: 'user', content: toolResults });
|
|
205
|
+
}
|
|
206
|
+
// Stop tracing if enabled
|
|
207
|
+
if (trace) {
|
|
208
|
+
console.log('\n๐น Stopping trace recording...');
|
|
209
|
+
try {
|
|
210
|
+
const traceResult = await mcpClient.executeTool('browser_stop_tracing', {});
|
|
211
|
+
console.log('โ
Trace recording stopped\n');
|
|
212
|
+
// Parse trace result to find output paths
|
|
213
|
+
let traceText = '';
|
|
214
|
+
if (Array.isArray(traceResult)) {
|
|
215
|
+
const textContent = traceResult.find((item) => item.type === 'text');
|
|
216
|
+
if (textContent?.text) {
|
|
217
|
+
traceText = textContent.text;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (typeof traceResult === 'string') {
|
|
221
|
+
traceText = traceResult;
|
|
222
|
+
}
|
|
223
|
+
else if (traceResult && typeof traceResult === 'object' && 'text' in traceResult) {
|
|
224
|
+
traceText = traceResult.text;
|
|
225
|
+
}
|
|
226
|
+
if (traceText) {
|
|
227
|
+
// Extract paths from MCP response
|
|
228
|
+
const actionLogMatch = traceText.match(/Action log:\s*(.+\.trace)/);
|
|
229
|
+
const networkLogMatch = traceText.match(/Network log:\s*(.+\.network)/);
|
|
230
|
+
const resourcesMatch = traceText.match(/Resources.*:\s*(.+resources)/);
|
|
231
|
+
if (actionLogMatch) {
|
|
232
|
+
const tracePath = actionLogMatch[1];
|
|
233
|
+
const networkPath = networkLogMatch ? networkLogMatch[1] : null;
|
|
234
|
+
const resourcesPath = resourcesMatch ? resourcesMatch[1] : null;
|
|
235
|
+
console.log('๐ Trace files:');
|
|
236
|
+
console.log(` ๐น Action log: ${tracePath}`);
|
|
237
|
+
if (networkPath) {
|
|
238
|
+
console.log(` ๐ Network log: ${networkPath}`);
|
|
239
|
+
}
|
|
240
|
+
if (resourcesPath) {
|
|
241
|
+
console.log(` ๐ฆ Resources: ${resourcesPath}`);
|
|
242
|
+
}
|
|
243
|
+
console.log(`\n๐ฌ View trace (with video): npx playwright show-trace ${tracePath}`);
|
|
244
|
+
console.log(' โน๏ธ Video is embedded in the trace file and will play in the viewer');
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
console.log('โ
Trace saved (paths not parsed)');
|
|
248
|
+
console.log(`Raw result: ${traceText}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
console.log('โ ๏ธ Trace saved but location not returned by MCP server');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
console.warn(`โ ๏ธ Failed to stop tracing: ${error instanceof Error ? error.message : String(error)}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Get MCP tool usage
|
|
260
|
+
const toolUsage = mcpClient.getToolUsage();
|
|
261
|
+
// Calculate costs
|
|
262
|
+
const textGenerationCost = calculateTextGenerationCost({
|
|
263
|
+
input_tokens: totalInputTokens,
|
|
264
|
+
output_tokens: totalOutputTokens,
|
|
265
|
+
cache_creation_tokens: totalCacheCreation,
|
|
266
|
+
cache_read_tokens: totalCacheRead,
|
|
87
267
|
});
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
268
|
+
// MCP tool calls cost (estimated: $0.01 per tool call)
|
|
269
|
+
const toolCallCost = toolUsage.total * 0.01;
|
|
270
|
+
const totalCost = textGenerationCost + toolCallCost;
|
|
271
|
+
// Close MCP client
|
|
272
|
+
console.log('\n๐ Closing MCP connection...');
|
|
273
|
+
await mcpClient.close();
|
|
274
|
+
console.log('โ
MCP connection closed\n');
|
|
95
275
|
return {
|
|
96
276
|
ticketId: testIdentifier,
|
|
97
|
-
success:
|
|
98
|
-
output:
|
|
277
|
+
success: testSuccess,
|
|
278
|
+
output: responseText,
|
|
99
279
|
logs: {
|
|
100
|
-
console: [],
|
|
101
|
-
errors:
|
|
280
|
+
console: [],
|
|
281
|
+
errors: testSuccess ? [] : [responseText],
|
|
102
282
|
},
|
|
103
283
|
tokensUsed: {
|
|
104
|
-
input:
|
|
105
|
-
output:
|
|
106
|
-
cacheCreation:
|
|
107
|
-
cacheRead:
|
|
284
|
+
input: totalInputTokens,
|
|
285
|
+
output: totalOutputTokens,
|
|
286
|
+
cacheCreation: totalCacheCreation,
|
|
287
|
+
cacheRead: totalCacheRead,
|
|
108
288
|
},
|
|
109
|
-
cost,
|
|
110
|
-
|
|
289
|
+
cost: totalCost,
|
|
290
|
+
mcpToolUsage: {
|
|
291
|
+
navigations: toolUsage.navigations,
|
|
292
|
+
clicks: toolUsage.clicks,
|
|
293
|
+
types: toolUsage.types,
|
|
294
|
+
extracts: toolUsage.extracts,
|
|
295
|
+
other: toolUsage.other,
|
|
296
|
+
},
|
|
297
|
+
mcpToolCost: toolCallCost,
|
|
298
|
+
error: testSuccess ? undefined : 'Test did not complete successfully',
|
|
111
299
|
};
|
|
112
300
|
}
|
|
113
301
|
catch (error) {
|
|
302
|
+
await mcpClient.close();
|
|
114
303
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
115
|
-
console.error(`\nโ
|
|
304
|
+
console.error(`\nโ Playwright MCP test failed: ${errorMessage}`);
|
|
116
305
|
return {
|
|
117
306
|
ticketId: testIdentifier,
|
|
118
307
|
success: false,
|
|
@@ -133,17 +322,39 @@ Do not ask follow-up questions, trust your judgement to complete the task.`,
|
|
|
133
322
|
}
|
|
134
323
|
}
|
|
135
324
|
/**
|
|
136
|
-
*
|
|
137
|
-
* Pricing (per million tokens):
|
|
138
|
-
* - Input: $3.00
|
|
139
|
-
* - Output: $15.00
|
|
140
|
-
* - Cache read: $0.30
|
|
325
|
+
* Core test logic (atomic - single execution, no retries, no fixes)
|
|
141
326
|
*/
|
|
142
|
-
function
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
327
|
+
export async function testCore(options) {
|
|
328
|
+
const { prompt: testPrompt, context, url = 'http://localhost:3000', headless = false, verbose = false, trace = false, } = options;
|
|
329
|
+
// Validate: prompt is required
|
|
330
|
+
if (!testPrompt || testPrompt.trim().length === 0) {
|
|
331
|
+
throw new Error('Test prompt is required\n' +
|
|
332
|
+
'Examples:\n' +
|
|
333
|
+
' kosuke test --prompt="Test user login"\n' +
|
|
334
|
+
' kosuke test --prompt="Test task creation flow"');
|
|
335
|
+
}
|
|
336
|
+
// Validate ANTHROPIC_API_KEY (required for Playwright MCP)
|
|
337
|
+
if (!process.env.ANTHROPIC_API_KEY) {
|
|
338
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is required for testing');
|
|
339
|
+
}
|
|
340
|
+
const testIdentifier = context?.ticketId || `test-${Date.now()}`;
|
|
341
|
+
// Log context if provided
|
|
342
|
+
if (context) {
|
|
343
|
+
console.log(`๐ซ Testing: ${context.ticketId} - ${context.ticketTitle}`);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
console.log(`๐ Test: ${testPrompt.substring(0, 60)}${testPrompt.length > 60 ? '...' : ''}`);
|
|
347
|
+
}
|
|
348
|
+
// Execute with Playwright MCP
|
|
349
|
+
return await executeWithPlaywrightMCP({
|
|
350
|
+
testPrompt,
|
|
351
|
+
context,
|
|
352
|
+
testIdentifier,
|
|
353
|
+
url,
|
|
354
|
+
headless,
|
|
355
|
+
verbose,
|
|
356
|
+
trace,
|
|
357
|
+
});
|
|
147
358
|
}
|
|
148
359
|
/**
|
|
149
360
|
* Main test command
|
|
@@ -192,7 +403,31 @@ function displayTestSummary(result) {
|
|
|
192
403
|
console.log(`๐ Output: ${result.output}`);
|
|
193
404
|
console.log(`๐ง Console logs: ${result.logs.console.length}`);
|
|
194
405
|
console.log(`โ Errors: ${result.logs.errors.length}`);
|
|
195
|
-
|
|
406
|
+
// Display MCP tool usage
|
|
407
|
+
if (result.mcpToolUsage) {
|
|
408
|
+
console.log(`\n๐ญ Playwright Tool Usage:`);
|
|
409
|
+
console.log(` ๐ Navigations: ${result.mcpToolUsage.navigations}`);
|
|
410
|
+
console.log(` ๐ฑ๏ธ Clicks: ${result.mcpToolUsage.clicks}`);
|
|
411
|
+
console.log(` โจ๏ธ Types: ${result.mcpToolUsage.types}`);
|
|
412
|
+
console.log(` ๐ค Extracts: ${result.mcpToolUsage.extracts}`);
|
|
413
|
+
console.log(` ๐ง Other: ${result.mcpToolUsage.other}`);
|
|
414
|
+
const totalTools = result.mcpToolUsage.navigations +
|
|
415
|
+
result.mcpToolUsage.clicks +
|
|
416
|
+
result.mcpToolUsage.types +
|
|
417
|
+
result.mcpToolUsage.extracts +
|
|
418
|
+
result.mcpToolUsage.other;
|
|
419
|
+
console.log(` ๐ Total: ${totalTools}`);
|
|
420
|
+
}
|
|
421
|
+
// Display cost breakdown
|
|
422
|
+
if (result.mcpToolCost !== undefined) {
|
|
423
|
+
console.log(`\n๐ฐ Cost Breakdown:`);
|
|
424
|
+
console.log(` ๐ฌ Text generation: $${(result.cost - result.mcpToolCost).toFixed(4)}`);
|
|
425
|
+
console.log(` ๐ญ Playwright tool calls: $${result.mcpToolCost.toFixed(4)}`);
|
|
426
|
+
console.log(` ๐ Total: $${result.cost.toFixed(4)}`);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
console.log(`๐ฐ Cost: $${result.cost.toFixed(4)}`);
|
|
430
|
+
}
|
|
196
431
|
console.log('='.repeat(60));
|
|
197
432
|
if (result.success) {
|
|
198
433
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../kosuke/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkTjE;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAiKjF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G3E"}
|