opera-devtools-mcp 0.2.2 → 0.2.4
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 +85 -33
- package/build/src/WaitForHelper.js +9 -2
- package/build/src/bin/chrome-devtools-cli-options.js +68 -212
- package/build/src/bin/opera-devtools-mcp-main.js +1 -1
- package/build/src/index.js +38 -22
- package/build/src/third_party/THIRD_PARTY_NOTICES +4322 -0
- package/build/src/third_party/bundled-packages.json +11 -0
- package/build/src/third_party/devtools-formatter-worker.js +15299 -7
- package/build/src/third_party/devtools-heap-snapshot-worker.js +9710 -7
- package/build/src/third_party/index.js +185093 -26
- package/build/src/tools/ToolDefinition.js +0 -1
- package/build/src/tools/opera.js +36 -5
- package/build/src/tools/thirdPartyDeveloper.js +1 -1
- package/package.json +1 -1
package/build/src/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Modified by Opera Software AS.
|
|
7
7
|
*/
|
|
8
|
-
import { closeBrowserIfOpen, ensureBrowserConnected, ensureBrowserLaunched, getCurrentBrowser } from './browser.js';
|
|
8
|
+
import { closeBrowserIfOpen, ensureBrowserConnected, ensureBrowserLaunched, getCurrentBrowser, } from './browser.js';
|
|
9
9
|
import { loadIssueDescriptions } from './issue-descriptions.js';
|
|
10
10
|
import { logger } from './logger.js';
|
|
11
11
|
import { McpContext } from './McpContext.js';
|
|
@@ -200,7 +200,8 @@ export async function createMcpServer(serverArgs, options) {
|
|
|
200
200
|
const needsOperaFlags = tool.name === 'opera_do' || tool.name === 'opera_research';
|
|
201
201
|
const browserConnected = getCurrentBrowser()?.connected ?? false;
|
|
202
202
|
if (isLaunchMode) {
|
|
203
|
-
if (needsOperaFlags &&
|
|
203
|
+
if (needsOperaFlags &&
|
|
204
|
+
!(browserHasOperaFlags && browserConnected)) {
|
|
204
205
|
await restartBrowserForOpera();
|
|
205
206
|
}
|
|
206
207
|
else if (!needsOperaFlags &&
|
|
@@ -220,37 +221,52 @@ export async function createMcpServer(serverArgs, options) {
|
|
|
220
221
|
// VS Code, etc.) continue to render it as readable text.
|
|
221
222
|
void extra.sendNotification({
|
|
222
223
|
method: 'notifications/message',
|
|
223
|
-
params: {
|
|
224
|
+
params: {
|
|
225
|
+
level: 'info',
|
|
226
|
+
data: message,
|
|
227
|
+
logger: String(extra.requestId),
|
|
228
|
+
},
|
|
224
229
|
});
|
|
225
230
|
};
|
|
226
231
|
const response = serverArgs.slim
|
|
227
232
|
? new SlimMcpResponse(serverArgs, logCallback)
|
|
228
233
|
: new McpResponse(serverArgs, logCallback);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
234
|
+
try {
|
|
235
|
+
if ('pageScoped' in tool && tool.pageScoped) {
|
|
236
|
+
const page = serverArgs.experimentalPageIdRouting &&
|
|
237
|
+
params.pageId &&
|
|
238
|
+
!serverArgs.slim
|
|
239
|
+
? context.getPageById(params.pageId)
|
|
240
|
+
: context.getSelectedMcpPage();
|
|
241
|
+
response.setPage(page);
|
|
242
|
+
if (tool.blockedByDialog) {
|
|
243
|
+
page.throwIfDialogOpen();
|
|
244
|
+
}
|
|
245
|
+
await tool.handler({
|
|
246
|
+
params,
|
|
247
|
+
page,
|
|
248
|
+
signal: extra.signal,
|
|
249
|
+
}, response, context);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
await tool.handler(
|
|
253
|
+
// @ts-expect-error types do not match.
|
|
254
|
+
{
|
|
255
|
+
params,
|
|
256
|
+
signal: extra.signal,
|
|
257
|
+
}, response, context);
|
|
258
|
+
}
|
|
241
259
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
// @ts-expect-error types do not match.
|
|
245
|
-
{
|
|
246
|
-
params,
|
|
247
|
-
signal: extra.signal,
|
|
248
|
-
}, response, context);
|
|
260
|
+
catch (err) {
|
|
261
|
+
response.setError(err);
|
|
249
262
|
}
|
|
250
263
|
const { content, structuredContent } = await response.handle(tool.name, context);
|
|
251
264
|
const result = {
|
|
252
265
|
content,
|
|
253
266
|
};
|
|
267
|
+
if (response.error) {
|
|
268
|
+
result.isError = true;
|
|
269
|
+
}
|
|
254
270
|
success = true;
|
|
255
271
|
if (serverArgs.experimentalStructuredContent) {
|
|
256
272
|
result.structuredContent = structuredContent;
|