@superblocksteam/vite-plugin-file-sync 2.0.67 → 2.0.68-next.1
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/ai-service/agent/tools/apis/analysis.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/analysis.js +4 -0
- package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-executor.d.ts +9 -1
- package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-executor.js +4 -1
- package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +1 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +1 -1
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +5 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +37 -18
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-delete-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-delete-file.js +29 -0
- package/dist/ai-service/agent/tools/build-delete-file.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.js +5 -4
- package/dist/ai-service/agent/tools/integrations/execute-request.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +17 -6
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts +23 -20
- package/dist/ai-service/agent/tools2/entity-permissions.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/entity-permissions.js +15 -11
- package/dist/ai-service/agent/tools2/entity-permissions.js.map +1 -1
- package/dist/ai-service/agent/tools2/example.js +2 -2
- package/dist/ai-service/agent/tools2/example.js.map +1 -1
- package/dist/ai-service/agent/tools2/index.d.ts +1 -1
- package/dist/ai-service/agent/tools2/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/index.js +1 -1
- package/dist/ai-service/agent/tools2/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts +4 -4
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +42 -29
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/read.d.ts +1 -1
- package/dist/ai-service/agent/tools2/types.d.ts +36 -15
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts +5 -7
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +36 -17
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/extract-history.d.ts +0 -85
- package/dist/ai-service/chat/extract-history.d.ts.map +1 -1
- package/dist/ai-service/chat/extract-history.js +3 -239
- package/dist/ai-service/chat/extract-history.js.map +1 -1
- package/dist/ai-service/index.d.ts +26 -4
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +125 -4
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/judge/debug-browser.d.ts +8 -0
- package/dist/ai-service/judge/debug-browser.d.ts.map +1 -0
- package/dist/ai-service/judge/debug-browser.js +79 -0
- package/dist/ai-service/judge/debug-browser.js.map +1 -0
- package/dist/ai-service/judge/index.d.ts +12 -0
- package/dist/ai-service/judge/index.d.ts.map +1 -0
- package/dist/ai-service/judge/index.js +11 -0
- package/dist/ai-service/judge/index.js.map +1 -0
- package/dist/ai-service/judge/integration/mcp-client.d.ts +82 -0
- package/dist/ai-service/judge/integration/mcp-client.d.ts.map +1 -0
- package/dist/ai-service/judge/integration/mcp-client.js +276 -0
- package/dist/ai-service/judge/integration/mcp-client.js.map +1 -0
- package/dist/ai-service/judge/integration/playwright-bridge.d.ts +142 -0
- package/dist/ai-service/judge/integration/playwright-bridge.d.ts.map +1 -0
- package/dist/ai-service/judge/integration/playwright-bridge.js +217 -0
- package/dist/ai-service/judge/integration/playwright-bridge.js.map +1 -0
- package/dist/ai-service/judge/judge-eval-http.d.ts +3 -0
- package/dist/ai-service/judge/judge-eval-http.d.ts.map +1 -0
- package/dist/ai-service/judge/judge-eval-http.js +541 -0
- package/dist/ai-service/judge/judge-eval-http.js.map +1 -0
- package/dist/ai-service/judge/judge-eval-service-runner.d.ts +35 -0
- package/dist/ai-service/judge/judge-eval-service-runner.d.ts.map +1 -0
- package/dist/ai-service/judge/judge-eval-service-runner.js +124 -0
- package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -0
- package/dist/ai-service/judge/judge-executor.d.ts +65 -0
- package/dist/ai-service/judge/judge-executor.d.ts.map +1 -0
- package/dist/ai-service/judge/judge-executor.js +334 -0
- package/dist/ai-service/judge/judge-executor.js.map +1 -0
- package/dist/ai-service/judge/judge-service.d.ts +161 -0
- package/dist/ai-service/judge/judge-service.d.ts.map +1 -0
- package/dist/ai-service/judge/judge-service.js +241 -0
- package/dist/ai-service/judge/judge-service.js.map +1 -0
- package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts +37 -0
- package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts.map +1 -0
- package/dist/ai-service/judge/prompts/evaluation-criteria.js +283 -0
- package/dist/ai-service/judge/prompts/evaluation-criteria.js.map +1 -0
- package/dist/ai-service/judge/prompts/system-prompt.d.ts +30 -0
- package/dist/ai-service/judge/prompts/system-prompt.d.ts.map +1 -0
- package/dist/ai-service/judge/prompts/system-prompt.js +212 -0
- package/dist/ai-service/judge/prompts/system-prompt.js.map +1 -0
- package/dist/ai-service/judge/storage/csv-storage.d.ts +99 -0
- package/dist/ai-service/judge/storage/csv-storage.d.ts.map +1 -0
- package/dist/ai-service/judge/storage/csv-storage.js +274 -0
- package/dist/ai-service/judge/storage/csv-storage.js.map +1 -0
- package/dist/ai-service/judge/storage/index.d.ts +9 -0
- package/dist/ai-service/judge/storage/index.d.ts.map +1 -0
- package/dist/ai-service/judge/storage/index.js +7 -0
- package/dist/ai-service/judge/storage/index.js.map +1 -0
- package/dist/ai-service/judge/storage/interface.d.ts +51 -0
- package/dist/ai-service/judge/storage/interface.d.ts.map +1 -0
- package/dist/ai-service/judge/storage/interface.js +8 -0
- package/dist/ai-service/judge/storage/interface.js.map +1 -0
- package/dist/ai-service/judge/storage/types.d.ts +54 -0
- package/dist/ai-service/judge/storage/types.d.ts.map +1 -0
- package/dist/ai-service/judge/storage/types.js +7 -0
- package/dist/ai-service/judge/storage/types.js.map +1 -0
- package/dist/ai-service/judge/tools/index.d.ts +22 -0
- package/dist/ai-service/judge/tools/index.d.ts.map +1 -0
- package/dist/ai-service/judge/tools/index.js +29 -0
- package/dist/ai-service/judge/tools/index.js.map +1 -0
- package/dist/ai-service/judge/tools/playwright-action.d.ts +18 -0
- package/dist/ai-service/judge/tools/playwright-action.d.ts.map +1 -0
- package/dist/ai-service/judge/tools/playwright-action.js +171 -0
- package/dist/ai-service/judge/tools/playwright-action.js.map +1 -0
- package/dist/ai-service/judge/tools/submit-feedback.d.ts +41 -0
- package/dist/ai-service/judge/tools/submit-feedback.d.ts.map +1 -0
- package/dist/ai-service/judge/tools/submit-feedback.js +150 -0
- package/dist/ai-service/judge/tools/submit-feedback.js.map +1 -0
- package/dist/ai-service/judge/types.d.ts +169 -0
- package/dist/ai-service/judge/types.d.ts.map +1 -0
- package/dist/ai-service/judge/types.js +8 -0
- package/dist/ai-service/judge/types.js.map +1 -0
- package/dist/ai-service/llm/context/constants.d.ts +7 -0
- package/dist/ai-service/llm/context/constants.d.ts.map +1 -1
- package/dist/ai-service/llm/context/constants.js +7 -0
- package/dist/ai-service/llm/context/constants.js.map +1 -1
- package/dist/ai-service/llm/context/context.d.ts +8 -1
- package/dist/ai-service/llm/context/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context/context.js +47 -12
- package/dist/ai-service/llm/context/context.js.map +1 -1
- package/dist/ai-service/llm/context/internal-types.d.ts +1 -0
- package/dist/ai-service/llm/context/internal-types.d.ts.map +1 -1
- package/dist/ai-service/llm/context/internal-types.js.map +1 -1
- package/dist/ai-service/llm/context/manager.d.ts +2 -1
- package/dist/ai-service/llm/context/manager.d.ts.map +1 -1
- package/dist/ai-service/llm/context/manager.js +2 -1
- package/dist/ai-service/llm/context/manager.js.map +1 -1
- package/dist/ai-service/llm/context/utils/message-utils.d.ts +10 -0
- package/dist/ai-service/llm/context/utils/message-utils.d.ts.map +1 -1
- package/dist/ai-service/llm/context/utils/message-utils.js +74 -0
- package/dist/ai-service/llm/context/utils/message-utils.js.map +1 -1
- package/dist/ai-service/llm/error.d.ts +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
- package/dist/ai-service/llm/interaction/provider.d.ts +10 -9
- package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts +8 -8
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
- package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
- package/dist/ai-service/llmobs/tracer.js +2 -1
- package/dist/ai-service/llmobs/tracer.js.map +1 -1
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts +53 -0
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts.map +1 -0
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +541 -0
- package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -0
- package/dist/ai-service/mcp/playwright-server.d.ts +114 -0
- package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -0
- package/dist/ai-service/mcp/playwright-server.js +109 -0
- package/dist/ai-service/mcp/playwright-server.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts +4 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +3 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.js +3 -1
- package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +4 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/context-id.d.ts +1 -1
- package/dist/ai-service/state-machine/helpers/context-id.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/context-id.js +6 -7
- package/dist/ai-service/state-machine/helpers/context-id.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts +1 -0
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +5 -1
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/server-rpc/client.js +1 -1
- package/dist/server-rpc/client.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +26 -6
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/index.d.ts +5 -0
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +13 -1
- package/dist/sync-service/index.js.map +1 -1
- package/package.json +7 -6
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) client for Playwright server integration.
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with the Playwright MCP server to enable
|
|
5
|
+
* browser automation capabilities for the judge system.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP client for communicating with Playwright MCP server.
|
|
9
|
+
*
|
|
10
|
+
* Implements the Model Context Protocol to interact with
|
|
11
|
+
* a Playwright automation server for browser testing.
|
|
12
|
+
*/
|
|
13
|
+
export class MCPClient {
|
|
14
|
+
serverUrl;
|
|
15
|
+
logger;
|
|
16
|
+
nextId = 1;
|
|
17
|
+
connected = false;
|
|
18
|
+
tools = new Map();
|
|
19
|
+
constructor(serverUrl, logger) {
|
|
20
|
+
this.serverUrl = serverUrl;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Connects to the MCP server and discovers available tools.
|
|
25
|
+
*
|
|
26
|
+
* @throws Error if connection fails
|
|
27
|
+
*/
|
|
28
|
+
async connect() {
|
|
29
|
+
if (this.connected) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
// Discover available tools (skip initialize for simple JSON-RPC servers)
|
|
34
|
+
const tools = await this.listTools();
|
|
35
|
+
for (const tool of tools) {
|
|
36
|
+
this.tools.set(tool.name, tool);
|
|
37
|
+
}
|
|
38
|
+
this.connected = true;
|
|
39
|
+
this.logger.info(`Connected to MCP server at ${this.serverUrl} with ${this.tools.size} tools`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.logger.error("Failed to connect to MCP server", {
|
|
43
|
+
error: {
|
|
44
|
+
kind: "MCPConnectionError",
|
|
45
|
+
message: String(error),
|
|
46
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
throw new Error(`MCP connection failed: ${error}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Lists available tools from the MCP server.
|
|
54
|
+
*
|
|
55
|
+
* @returns Array of tool definitions
|
|
56
|
+
*/
|
|
57
|
+
async listTools() {
|
|
58
|
+
const response = await this.sendRequest("tools/list", {});
|
|
59
|
+
return response.tools || [];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Calls a tool on the MCP server.
|
|
63
|
+
*
|
|
64
|
+
* @param toolName - Name of the tool to call
|
|
65
|
+
* @param args - Arguments for the tool
|
|
66
|
+
* @returns Tool execution result
|
|
67
|
+
*/
|
|
68
|
+
async callTool(toolName, args) {
|
|
69
|
+
if (!this.connected) {
|
|
70
|
+
await this.connect();
|
|
71
|
+
}
|
|
72
|
+
const tool = this.tools.get(toolName);
|
|
73
|
+
if (!tool) {
|
|
74
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const response = await this.sendRequest("tools/call", {
|
|
78
|
+
name: toolName,
|
|
79
|
+
arguments: args,
|
|
80
|
+
});
|
|
81
|
+
if (response.error) {
|
|
82
|
+
throw new Error(`Tool execution failed: ${response.error.message}`);
|
|
83
|
+
}
|
|
84
|
+
return response.content;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// If the error looks like an import statement error, provide a helpful message
|
|
88
|
+
const errorMsg = String(error);
|
|
89
|
+
if (errorMsg.includes("import") && errorMsg.includes("module")) {
|
|
90
|
+
throw new Error("Browser evaluation failed: Cannot use import/export/require statements in browser context. " +
|
|
91
|
+
"Please use plain JavaScript that can run in a browser console.");
|
|
92
|
+
}
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Executes a Playwright action via MCP.
|
|
98
|
+
*
|
|
99
|
+
* @param params - Playwright action parameters
|
|
100
|
+
* @returns Action execution result
|
|
101
|
+
*/
|
|
102
|
+
async executePlaywrightAction(params) {
|
|
103
|
+
this.logger.info(`Executing Playwright action ${params.action}, params: ${params.params ? Object.keys(params.params).join(", ") : "none"}`);
|
|
104
|
+
try {
|
|
105
|
+
const toolArgs = {
|
|
106
|
+
action: params.action,
|
|
107
|
+
...params.params,
|
|
108
|
+
};
|
|
109
|
+
this.logger.info(`Calling playwright_action tool for action: ${params.action}`);
|
|
110
|
+
const result = await this.callTool("playwright_action", toolArgs);
|
|
111
|
+
this.logger.info(`Tool call succeeded for ${params.action}, hasResult: ${!!result}`);
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
data: result,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
this.logger.error("Playwright action failed", {
|
|
119
|
+
error: {
|
|
120
|
+
kind: "PlaywrightActionError",
|
|
121
|
+
message: `Action ${params.action} failed: ${String(error)}`,
|
|
122
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
error: String(error),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parses SSE (Server-Sent Events) response text.
|
|
133
|
+
*
|
|
134
|
+
* @param text - Raw SSE response text
|
|
135
|
+
* @param requestId - Expected request ID
|
|
136
|
+
* @returns Parsed MCP response
|
|
137
|
+
*/
|
|
138
|
+
parseSSEResponse(text, requestId) {
|
|
139
|
+
// SSE format: lines starting with "data: " contain JSON
|
|
140
|
+
const lines = text.split("\n");
|
|
141
|
+
for (const line of lines) {
|
|
142
|
+
if (line.startsWith("data: ")) {
|
|
143
|
+
const jsonStr = line.substring(6); // Remove "data: " prefix
|
|
144
|
+
try {
|
|
145
|
+
const data = JSON.parse(jsonStr);
|
|
146
|
+
// Verify this response matches our request
|
|
147
|
+
if (data.id === requestId || data.id === null) {
|
|
148
|
+
return data;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Continue to next line if parsing fails
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// If we didn't find a matching response, throw error
|
|
157
|
+
throw new Error(`No valid JSON-RPC response found in SSE stream for request ${requestId}`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Sends a request to the MCP server.
|
|
161
|
+
*
|
|
162
|
+
* @param method - RPC method name
|
|
163
|
+
* @param params - Method parameters
|
|
164
|
+
* @returns Server response
|
|
165
|
+
*/
|
|
166
|
+
async sendRequest(method, params) {
|
|
167
|
+
const request = {
|
|
168
|
+
jsonrpc: "2.0",
|
|
169
|
+
method,
|
|
170
|
+
params,
|
|
171
|
+
id: this.nextId++,
|
|
172
|
+
};
|
|
173
|
+
try {
|
|
174
|
+
const response = await fetch(this.serverUrl, {
|
|
175
|
+
method: "POST",
|
|
176
|
+
headers: {
|
|
177
|
+
"Content-Type": "application/json",
|
|
178
|
+
Accept: "application/json, text/event-stream",
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify(request),
|
|
181
|
+
// Add timeout to prevent hanging if server crashes
|
|
182
|
+
signal: AbortSignal.timeout(30000), // 30 second timeout
|
|
183
|
+
});
|
|
184
|
+
if (!response.ok) {
|
|
185
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
186
|
+
}
|
|
187
|
+
const contentType = response.headers.get("content-type") || "";
|
|
188
|
+
// Handle SSE response
|
|
189
|
+
if (contentType.includes("text/event-stream")) {
|
|
190
|
+
const text = await response.text();
|
|
191
|
+
const data = this.parseSSEResponse(text, request.id);
|
|
192
|
+
if (data.error) {
|
|
193
|
+
throw new Error(data.error.message);
|
|
194
|
+
}
|
|
195
|
+
return data.result;
|
|
196
|
+
}
|
|
197
|
+
// Handle regular JSON response (fallback)
|
|
198
|
+
const data = await response.json();
|
|
199
|
+
if (data.error) {
|
|
200
|
+
throw new Error(data.error.message);
|
|
201
|
+
}
|
|
202
|
+
return data.result;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const errorMsg = String(error);
|
|
206
|
+
// Check for connection issues that might indicate server crash
|
|
207
|
+
if (errorMsg.includes("ECONNREFUSED") ||
|
|
208
|
+
errorMsg.includes("ECONNRESET")) {
|
|
209
|
+
this.logger.error("MCP server connection failed - server may have crashed", {
|
|
210
|
+
error: {
|
|
211
|
+
kind: "MCPServerCrash",
|
|
212
|
+
message: `MCP server appears to be down: ${errorMsg}`,
|
|
213
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
this.connected = false;
|
|
217
|
+
throw new Error("MCP server connection lost. The server may have crashed due to invalid JavaScript code.");
|
|
218
|
+
}
|
|
219
|
+
// Check for timeout
|
|
220
|
+
if (errorMsg.includes("AbortError") || errorMsg.includes("timeout")) {
|
|
221
|
+
this.logger.error("MCP request timed out", {
|
|
222
|
+
error: {
|
|
223
|
+
kind: "MCPTimeout",
|
|
224
|
+
message: `Method ${method} timed out after 30 seconds`,
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
throw new Error("MCP server request timed out. The server may be unresponsive.");
|
|
228
|
+
}
|
|
229
|
+
this.logger.error("MCP request failed", {
|
|
230
|
+
error: {
|
|
231
|
+
kind: "MCPRequestError",
|
|
232
|
+
message: `Method ${method} failed: ${errorMsg}`,
|
|
233
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Disconnects from the MCP server.
|
|
241
|
+
*/
|
|
242
|
+
async disconnect() {
|
|
243
|
+
if (!this.connected) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
// Send disconnect notification if supported
|
|
248
|
+
await this.sendRequest("disconnect", {});
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Ignore disconnect errors
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
this.connected = false;
|
|
255
|
+
this.tools.clear();
|
|
256
|
+
this.logger.info("Disconnected from MCP server");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Checks if the client is connected.
|
|
261
|
+
*
|
|
262
|
+
* @returns True if connected
|
|
263
|
+
*/
|
|
264
|
+
isConnected() {
|
|
265
|
+
return this.connected;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Gets available tool names.
|
|
269
|
+
*
|
|
270
|
+
* @returns Array of tool names
|
|
271
|
+
*/
|
|
272
|
+
getAvailableTools() {
|
|
273
|
+
return Array.from(this.tools.keys());
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../../src/ai-service/judge/integration/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge between judge system and Playwright MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Provides a high-level interface for browser automation
|
|
5
|
+
* through the MCP protocol.
|
|
6
|
+
*/
|
|
7
|
+
import type { Logger } from "../../../util/logger.js";
|
|
8
|
+
import type { PlaywrightActionParams, PlaywrightActionResult } from "../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* High-level Playwright action parameters.
|
|
11
|
+
*/
|
|
12
|
+
export interface PlaywrightAction {
|
|
13
|
+
navigate?: {
|
|
14
|
+
url: string;
|
|
15
|
+
};
|
|
16
|
+
click?: {
|
|
17
|
+
selector: string;
|
|
18
|
+
};
|
|
19
|
+
fill?: {
|
|
20
|
+
selector: string;
|
|
21
|
+
value: string;
|
|
22
|
+
};
|
|
23
|
+
screenshot?: {
|
|
24
|
+
fullPage?: boolean;
|
|
25
|
+
};
|
|
26
|
+
getText?: {
|
|
27
|
+
selector: string;
|
|
28
|
+
};
|
|
29
|
+
waitForSelector?: {
|
|
30
|
+
selector: string;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
};
|
|
33
|
+
evaluate?: {
|
|
34
|
+
script: string;
|
|
35
|
+
};
|
|
36
|
+
getUrl?: Record<string, never>;
|
|
37
|
+
reload?: Record<string, never>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Bridge to Playwright MCP server for browser automation.
|
|
41
|
+
*
|
|
42
|
+
* Provides a simplified interface for common browser
|
|
43
|
+
* automation tasks used by the judge system.
|
|
44
|
+
*/
|
|
45
|
+
export declare class PlaywrightBridge {
|
|
46
|
+
private logger;
|
|
47
|
+
private mcpClient;
|
|
48
|
+
constructor(serverUrl: string, logger: Logger);
|
|
49
|
+
/**
|
|
50
|
+
* Initializes the bridge connection.
|
|
51
|
+
*/
|
|
52
|
+
initialize(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Navigates to a URL.
|
|
55
|
+
*
|
|
56
|
+
* @param url - Target URL
|
|
57
|
+
* @returns Navigation result
|
|
58
|
+
*/
|
|
59
|
+
navigate(url: string): Promise<PlaywrightActionResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Clicks an element.
|
|
62
|
+
*
|
|
63
|
+
* @param selector - Element selector
|
|
64
|
+
* @returns Click result
|
|
65
|
+
*/
|
|
66
|
+
click(selector: string): Promise<PlaywrightActionResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Fills an input field.
|
|
69
|
+
*
|
|
70
|
+
* @param selector - Input selector
|
|
71
|
+
* @param value - Value to fill
|
|
72
|
+
* @returns Fill result
|
|
73
|
+
*/
|
|
74
|
+
fill(selector: string, value: string): Promise<PlaywrightActionResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Captures a screenshot.
|
|
77
|
+
*
|
|
78
|
+
* @param fullPage - Whether to capture full page
|
|
79
|
+
* @returns Screenshot result with base64 data
|
|
80
|
+
*/
|
|
81
|
+
screenshot(fullPage?: boolean): Promise<PlaywrightActionResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Gets text content from an element.
|
|
84
|
+
*
|
|
85
|
+
* @param selector - Element selector
|
|
86
|
+
* @returns Text content
|
|
87
|
+
*/
|
|
88
|
+
getText(selector: string): Promise<PlaywrightActionResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Waits for a selector to appear.
|
|
91
|
+
*
|
|
92
|
+
* @param selector - Element selector
|
|
93
|
+
* @param timeout - Wait timeout in milliseconds
|
|
94
|
+
* @returns Wait result
|
|
95
|
+
*/
|
|
96
|
+
waitForSelector(selector: string, timeout?: number): Promise<PlaywrightActionResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Evaluates JavaScript in the page context.
|
|
99
|
+
*
|
|
100
|
+
* @param script - JavaScript to execute
|
|
101
|
+
* @returns Evaluation result
|
|
102
|
+
*/
|
|
103
|
+
evaluate(script: string): Promise<PlaywrightActionResult>;
|
|
104
|
+
/**
|
|
105
|
+
* Gets the current page URL.
|
|
106
|
+
*
|
|
107
|
+
* @returns Current URL
|
|
108
|
+
*/
|
|
109
|
+
getUrl(): Promise<PlaywrightActionResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Reloads the current page.
|
|
112
|
+
*
|
|
113
|
+
* @returns Reload result
|
|
114
|
+
*/
|
|
115
|
+
reload(): Promise<PlaywrightActionResult>;
|
|
116
|
+
/**
|
|
117
|
+
* Executes a generic Playwright action.
|
|
118
|
+
*
|
|
119
|
+
* @param action - Action name
|
|
120
|
+
* @param params - Action parameters
|
|
121
|
+
* @returns Action result
|
|
122
|
+
*/
|
|
123
|
+
executeAction(action: PlaywrightActionParams["action"], params: Record<string, any>): Promise<PlaywrightActionResult>;
|
|
124
|
+
/**
|
|
125
|
+
* Executes multiple actions in sequence.
|
|
126
|
+
*
|
|
127
|
+
* @param actions - Array of actions to execute
|
|
128
|
+
* @returns Results of all actions
|
|
129
|
+
*/
|
|
130
|
+
executeSequence(actions: PlaywrightAction[]): Promise<PlaywrightActionResult[]>;
|
|
131
|
+
/**
|
|
132
|
+
* Cleans up the bridge connection.
|
|
133
|
+
*/
|
|
134
|
+
cleanup(): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Checks if the bridge is connected.
|
|
137
|
+
*
|
|
138
|
+
* @returns True if connected
|
|
139
|
+
*/
|
|
140
|
+
isConnected(): boolean;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=playwright-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-bridge.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/judge/integration/playwright-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpC,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,SAAS,CAAY;gBAG3B,SAAS,EAAE,MAAM,EACT,MAAM,EAAE,MAAM;IAKxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI5D;;;;;OAKG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI9D;;;;;;OAMG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI5E;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAInE;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIhE;;;;;;OAMG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAQ,GACd,OAAO,CAAC,sBAAsB,CAAC;IAIlC;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4B/D;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI/C;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI/C;;;;;;OAMG;IACG,aAAa,CACjB,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,sBAAsB,CAAC;IA2BlC;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,OAAO,CAAC,sBAAsB,EAAE,CAAC;IA6CpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACH,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge between judge system and Playwright MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Provides a high-level interface for browser automation
|
|
5
|
+
* through the MCP protocol.
|
|
6
|
+
*/
|
|
7
|
+
import { MCPClient } from "./mcp-client.js";
|
|
8
|
+
/**
|
|
9
|
+
* Bridge to Playwright MCP server for browser automation.
|
|
10
|
+
*
|
|
11
|
+
* Provides a simplified interface for common browser
|
|
12
|
+
* automation tasks used by the judge system.
|
|
13
|
+
*/
|
|
14
|
+
export class PlaywrightBridge {
|
|
15
|
+
logger;
|
|
16
|
+
mcpClient;
|
|
17
|
+
constructor(serverUrl, logger) {
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
this.mcpClient = new MCPClient(serverUrl, logger);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initializes the bridge connection.
|
|
23
|
+
*/
|
|
24
|
+
async initialize() {
|
|
25
|
+
await this.mcpClient.connect();
|
|
26
|
+
this.logger.info("Playwright bridge initialized");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Navigates to a URL.
|
|
30
|
+
*
|
|
31
|
+
* @param url - Target URL
|
|
32
|
+
* @returns Navigation result
|
|
33
|
+
*/
|
|
34
|
+
async navigate(url) {
|
|
35
|
+
return this.executeAction("navigate", { url });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Clicks an element.
|
|
39
|
+
*
|
|
40
|
+
* @param selector - Element selector
|
|
41
|
+
* @returns Click result
|
|
42
|
+
*/
|
|
43
|
+
async click(selector) {
|
|
44
|
+
return this.executeAction("click", { selector });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fills an input field.
|
|
48
|
+
*
|
|
49
|
+
* @param selector - Input selector
|
|
50
|
+
* @param value - Value to fill
|
|
51
|
+
* @returns Fill result
|
|
52
|
+
*/
|
|
53
|
+
async fill(selector, value) {
|
|
54
|
+
return this.executeAction("fill", { selector, value });
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Captures a screenshot.
|
|
58
|
+
*
|
|
59
|
+
* @param fullPage - Whether to capture full page
|
|
60
|
+
* @returns Screenshot result with base64 data
|
|
61
|
+
*/
|
|
62
|
+
async screenshot(fullPage = false) {
|
|
63
|
+
return this.executeAction("screenshot", { fullPage });
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Gets text content from an element.
|
|
67
|
+
*
|
|
68
|
+
* @param selector - Element selector
|
|
69
|
+
* @returns Text content
|
|
70
|
+
*/
|
|
71
|
+
async getText(selector) {
|
|
72
|
+
return this.executeAction("getText", { selector });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Waits for a selector to appear.
|
|
76
|
+
*
|
|
77
|
+
* @param selector - Element selector
|
|
78
|
+
* @param timeout - Wait timeout in milliseconds
|
|
79
|
+
* @returns Wait result
|
|
80
|
+
*/
|
|
81
|
+
async waitForSelector(selector, timeout = 30000) {
|
|
82
|
+
return this.executeAction("waitForSelector", { selector, timeout });
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Evaluates JavaScript in the page context.
|
|
86
|
+
*
|
|
87
|
+
* @param script - JavaScript to execute
|
|
88
|
+
* @returns Evaluation result
|
|
89
|
+
*/
|
|
90
|
+
async evaluate(script) {
|
|
91
|
+
this.logger.info(`Evaluate called - length: ${script.length}, preview: ${script.substring(0, 100)}`);
|
|
92
|
+
// Validate script doesn't contain module syntax
|
|
93
|
+
if (script.includes("import ") ||
|
|
94
|
+
script.includes("export ") ||
|
|
95
|
+
script.includes("require(")) {
|
|
96
|
+
this.logger.warn("Script contains module syntax", `Script preview: ${script.substring(0, 200)}`);
|
|
97
|
+
// Return error to the model instead of throwing
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: "Cannot use import/export/require statements in browser evaluate context. Use plain JavaScript only. For example, use 'document.querySelector' instead of importing libraries.",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
this.logger.info("Script validation passed, executing action");
|
|
104
|
+
return this.executeAction("evaluate", { script });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Gets the current page URL.
|
|
108
|
+
*
|
|
109
|
+
* @returns Current URL
|
|
110
|
+
*/
|
|
111
|
+
async getUrl() {
|
|
112
|
+
return this.executeAction("getUrl", {});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Reloads the current page.
|
|
116
|
+
*
|
|
117
|
+
* @returns Reload result
|
|
118
|
+
*/
|
|
119
|
+
async reload() {
|
|
120
|
+
return this.executeAction("reload", {});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Executes a generic Playwright action.
|
|
124
|
+
*
|
|
125
|
+
* @param action - Action name
|
|
126
|
+
* @param params - Action parameters
|
|
127
|
+
* @returns Action result
|
|
128
|
+
*/
|
|
129
|
+
async executeAction(action, params) {
|
|
130
|
+
this.logger.info(`Executing action: ${action}, params: ${Object.keys(params).join(", ")}`);
|
|
131
|
+
const actionParams = {
|
|
132
|
+
action,
|
|
133
|
+
params,
|
|
134
|
+
};
|
|
135
|
+
this.logger.info("Calling MCP client");
|
|
136
|
+
const result = await this.mcpClient.executePlaywrightAction(actionParams);
|
|
137
|
+
if (!result.success) {
|
|
138
|
+
this.logger.error("Action failed", {
|
|
139
|
+
error: {
|
|
140
|
+
kind: "PlaywrightActionError",
|
|
141
|
+
message: `Action ${action} failed: ${result.error || "Unknown error"}`,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.logger.info(`Action succeeded: ${action}`);
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Executes multiple actions in sequence.
|
|
152
|
+
*
|
|
153
|
+
* @param actions - Array of actions to execute
|
|
154
|
+
* @returns Results of all actions
|
|
155
|
+
*/
|
|
156
|
+
async executeSequence(actions) {
|
|
157
|
+
const results = [];
|
|
158
|
+
for (const action of actions) {
|
|
159
|
+
let result;
|
|
160
|
+
if (action.navigate) {
|
|
161
|
+
result = await this.navigate(action.navigate.url);
|
|
162
|
+
}
|
|
163
|
+
else if (action.click) {
|
|
164
|
+
result = await this.click(action.click.selector);
|
|
165
|
+
}
|
|
166
|
+
else if (action.fill) {
|
|
167
|
+
result = await this.fill(action.fill.selector, action.fill.value);
|
|
168
|
+
}
|
|
169
|
+
else if (action.screenshot) {
|
|
170
|
+
result = await this.screenshot(action.screenshot.fullPage);
|
|
171
|
+
}
|
|
172
|
+
else if (action.getText) {
|
|
173
|
+
result = await this.getText(action.getText.selector);
|
|
174
|
+
}
|
|
175
|
+
else if (action.waitForSelector) {
|
|
176
|
+
result = await this.waitForSelector(action.waitForSelector.selector, action.waitForSelector.timeout);
|
|
177
|
+
}
|
|
178
|
+
else if (action.evaluate) {
|
|
179
|
+
result = await this.evaluate(action.evaluate.script);
|
|
180
|
+
}
|
|
181
|
+
else if (action.getUrl) {
|
|
182
|
+
result = await this.getUrl();
|
|
183
|
+
}
|
|
184
|
+
else if (action.reload) {
|
|
185
|
+
result = await this.reload();
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
result = {
|
|
189
|
+
success: false,
|
|
190
|
+
error: "Unknown action type",
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
results.push(result);
|
|
194
|
+
// Stop sequence on failure
|
|
195
|
+
if (!result.success) {
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return results;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Cleans up the bridge connection.
|
|
203
|
+
*/
|
|
204
|
+
async cleanup() {
|
|
205
|
+
await this.mcpClient.disconnect();
|
|
206
|
+
this.logger.info("Playwright bridge cleaned up");
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Checks if the bridge is connected.
|
|
210
|
+
*
|
|
211
|
+
* @returns True if connected
|
|
212
|
+
*/
|
|
213
|
+
isConnected() {
|
|
214
|
+
return this.mcpClient.isConnected();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=playwright-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-bridge.js","sourceRoot":"","sources":["../../../../src/ai-service/judge/integration/playwright-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-eval-http.d.ts","sourceRoot":"","sources":["../../../src/ai-service/judge/judge-eval-http.ts"],"names":[],"mappings":""}
|