@ejazullah/browser-mcp 0.0.56 → 0.0.57

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.
Files changed (62) hide show
  1. package/cli.js +1 -18
  2. package/index.js +1 -1060
  3. package/lib/auth.js +1 -82
  4. package/lib/browserContextFactory.js +1 -205
  5. package/lib/browserServerBackend.js +1 -125
  6. package/lib/config.js +1 -266
  7. package/lib/context.js +1 -232
  8. package/lib/databaseLogger.js +1 -264
  9. package/lib/extension/cdpRelay.js +1 -346
  10. package/lib/extension/extensionContextFactory.js +1 -56
  11. package/lib/extension/main.js +1 -26
  12. package/lib/fileUtils.js +1 -32
  13. package/lib/httpServer.js +1 -39
  14. package/lib/index.js +1 -39
  15. package/lib/javascript.js +1 -49
  16. package/lib/log.js +1 -21
  17. package/lib/loop/loop.js +1 -69
  18. package/lib/loop/loopClaude.js +1 -152
  19. package/lib/loop/loopOpenAI.js +1 -143
  20. package/lib/loop/main.js +1 -60
  21. package/lib/loopTools/context.js +1 -66
  22. package/lib/loopTools/main.js +1 -49
  23. package/lib/loopTools/perform.js +1 -32
  24. package/lib/loopTools/snapshot.js +1 -29
  25. package/lib/loopTools/tool.js +1 -18
  26. package/lib/manualPromise.js +1 -111
  27. package/lib/mcp/inProcessTransport.js +1 -72
  28. package/lib/mcp/server.js +1 -93
  29. package/lib/mcp/transport.js +1 -217
  30. package/lib/mongoDBLogger.js +1 -252
  31. package/lib/package.js +1 -20
  32. package/lib/program.js +1 -113
  33. package/lib/response.js +1 -172
  34. package/lib/sessionLog.js +1 -156
  35. package/lib/tab.js +1 -266
  36. package/lib/tools/cdp.js +1 -169
  37. package/lib/tools/common.js +1 -55
  38. package/lib/tools/console.js +1 -33
  39. package/lib/tools/dialogs.js +1 -47
  40. package/lib/tools/evaluate.js +1 -53
  41. package/lib/tools/extraction.js +1 -217
  42. package/lib/tools/files.js +1 -44
  43. package/lib/tools/forms.js +1 -180
  44. package/lib/tools/getext.js +1 -99
  45. package/lib/tools/install.js +1 -53
  46. package/lib/tools/interactions.js +1 -191
  47. package/lib/tools/keyboard.js +1 -86
  48. package/lib/tools/mouse.js +1 -99
  49. package/lib/tools/navigate.js +1 -70
  50. package/lib/tools/network.js +1 -41
  51. package/lib/tools/pdf.js +1 -40
  52. package/lib/tools/screenshot.js +1 -75
  53. package/lib/tools/selectors.js +1 -233
  54. package/lib/tools/snapshot.js +1 -169
  55. package/lib/tools/states.js +1 -147
  56. package/lib/tools/tabs.js +1 -87
  57. package/lib/tools/tool.js +1 -33
  58. package/lib/tools/utils.js +1 -74
  59. package/lib/tools/wait.js +1 -56
  60. package/lib/tools.js +1 -64
  61. package/lib/utils.js +1 -26
  62. package/package.json +5 -2
package/lib/tab.js CHANGED
@@ -1,266 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { EventEmitter } from 'events';
17
- import { callOnPageNoTrace, waitForCompletion } from './tools/utils.js';
18
- import { logUnhandledError } from './log.js';
19
- import { ManualPromise } from './manualPromise.js';
20
- export const TabEvents = {
21
- modalState: 'modalState'
22
- };
23
- export class Tab extends EventEmitter {
24
- context;
25
- page;
26
- _lastTitle = 'about:blank';
27
- _consoleMessages = [];
28
- _recentConsoleMessages = [];
29
- _requests = new Map();
30
- _onPageClose;
31
- _modalStates = [];
32
- _downloads = [];
33
- constructor(context, page, onPageClose) {
34
- super();
35
- this.context = context;
36
- this.page = page;
37
- this._onPageClose = onPageClose;
38
- page.on('console', event => this._handleConsoleMessage(messageToConsoleMessage(event)));
39
- page.on('pageerror', error => this._handleConsoleMessage(pageErrorToConsoleMessage(error)));
40
- page.on('request', request => this._requests.set(request, null));
41
- page.on('response', response => this._requests.set(response.request(), response));
42
- page.on('close', () => this._onClose());
43
- page.on('filechooser', chooser => {
44
- this.setModalState({
45
- type: 'fileChooser',
46
- description: 'File chooser',
47
- fileChooser: chooser,
48
- });
49
- });
50
- page.on('dialog', dialog => this._dialogShown(dialog));
51
- page.on('download', download => {
52
- void this._downloadStarted(download);
53
- });
54
- page.setDefaultNavigationTimeout(60000);
55
- page.setDefaultTimeout(5000);
56
- page[tabSymbol] = this;
57
- }
58
- static forPage(page) {
59
- return page[tabSymbol];
60
- }
61
- modalStates() {
62
- return this._modalStates;
63
- }
64
- setModalState(modalState) {
65
- this._modalStates.push(modalState);
66
- this.emit(TabEvents.modalState, modalState);
67
- }
68
- clearModalState(modalState) {
69
- this._modalStates = this._modalStates.filter(state => state !== modalState);
70
- }
71
- modalStatesMarkdown() {
72
- return renderModalStates(this.context, this.modalStates());
73
- }
74
- _dialogShown(dialog) {
75
- this.setModalState({
76
- type: 'dialog',
77
- description: `"${dialog.type()}" dialog with message "${dialog.message()}"`,
78
- dialog,
79
- });
80
- }
81
- async _downloadStarted(download) {
82
- const entry = {
83
- download,
84
- finished: false,
85
- outputFile: await this.context.outputFile(download.suggestedFilename())
86
- };
87
- this._downloads.push(entry);
88
- await download.saveAs(entry.outputFile);
89
- entry.finished = true;
90
- }
91
- _clearCollectedArtifacts() {
92
- this._consoleMessages.length = 0;
93
- this._recentConsoleMessages.length = 0;
94
- this._requests.clear();
95
- }
96
- _handleConsoleMessage(message) {
97
- this._consoleMessages.push(message);
98
- this._recentConsoleMessages.push(message);
99
- }
100
- _onClose() {
101
- this._clearCollectedArtifacts();
102
- this._onPageClose(this);
103
- }
104
- async updateTitle() {
105
- await this._raceAgainstModalStates(async () => {
106
- this._lastTitle = await callOnPageNoTrace(this.page, page => page.title());
107
- });
108
- }
109
- lastTitle() {
110
- return this._lastTitle;
111
- }
112
- isCurrentTab() {
113
- return this === this.context.currentTab();
114
- }
115
- async waitForLoadState(state, options) {
116
- await callOnPageNoTrace(this.page, page => page.waitForLoadState(state, options).catch(logUnhandledError));
117
- }
118
- async navigate(url) {
119
- this._clearCollectedArtifacts();
120
- const downloadEvent = callOnPageNoTrace(this.page, page => page.waitForEvent('download').catch(logUnhandledError));
121
- try {
122
- await this.page.goto(url, { waitUntil: 'domcontentloaded' });
123
- }
124
- catch (_e) {
125
- const e = _e;
126
- const mightBeDownload = e.message.includes('net::ERR_ABORTED') // chromium
127
- || e.message.includes('Download is starting'); // firefox + webkit
128
- if (!mightBeDownload)
129
- throw e;
130
- // on chromium, the download event is fired *after* page.goto rejects, so we wait a lil bit
131
- const download = await Promise.race([
132
- downloadEvent,
133
- new Promise(resolve => setTimeout(resolve, 3000)),
134
- ]);
135
- if (!download)
136
- throw e;
137
- // Make sure other "download" listeners are notified first.
138
- await new Promise(resolve => setTimeout(resolve, 500));
139
- return;
140
- }
141
- // Cap load event to 5 seconds, the page is operational at this point.
142
- await this.waitForLoadState('load', { timeout: 5000 });
143
- }
144
- consoleMessages() {
145
- return this._consoleMessages;
146
- }
147
- requests() {
148
- return this._requests;
149
- }
150
- async captureSnapshot() {
151
- let tabSnapshot;
152
- const modalStates = await this._raceAgainstModalStates(async () => {
153
- const snapshot = await this.page._snapshotForAI();
154
- tabSnapshot = {
155
- url: this.page.url(),
156
- title: await this.page.title(),
157
- ariaSnapshot: snapshot,
158
- modalStates: [],
159
- consoleMessages: [],
160
- downloads: this._downloads,
161
- };
162
- });
163
- if (tabSnapshot) {
164
- // Assign console message late so that we did not lose any to modal state.
165
- tabSnapshot.consoleMessages = this._recentConsoleMessages;
166
- this._recentConsoleMessages = [];
167
- }
168
- return tabSnapshot ?? {
169
- url: this.page.url(),
170
- title: '',
171
- ariaSnapshot: '',
172
- modalStates,
173
- consoleMessages: [],
174
- downloads: [],
175
- };
176
- }
177
- _javaScriptBlocked() {
178
- return this._modalStates.some(state => state.type === 'dialog');
179
- }
180
- async _raceAgainstModalStates(action) {
181
- if (this.modalStates().length)
182
- return this.modalStates();
183
- const promise = new ManualPromise();
184
- const listener = (modalState) => promise.resolve([modalState]);
185
- this.once(TabEvents.modalState, listener);
186
- return await Promise.race([
187
- action().then(() => {
188
- this.off(TabEvents.modalState, listener);
189
- return [];
190
- }),
191
- promise,
192
- ]);
193
- }
194
- async waitForCompletion(callback) {
195
- await this._raceAgainstModalStates(() => waitForCompletion(this, callback));
196
- }
197
- async refLocator(params) {
198
- return (await this.refLocators([params]))[0];
199
- }
200
- async refLocators(params) {
201
- const snapshot = await this.page._snapshotForAI();
202
- return params.map(param => {
203
- if (!snapshot.includes(`[ref=${param.ref}]`))
204
- throw new Error(`Ref ${param.ref} not found in the current page snapshot. Try capturing new snapshot.`);
205
- return this.page.locator(`aria-ref=${param.ref}`).describe(param.element);
206
- });
207
- }
208
- async refLocatorWithSelector(params) {
209
- const snapshot = await this.page._snapshotForAI();
210
- if (!snapshot.includes(`[ref=${params.ref}]`))
211
- throw new Error(`Ref ${params.ref} not found in the current page snapshot. Try capturing new snapshot.`);
212
- const locator = this.page.locator(`aria-ref=${params.ref}`).describe(params.element);
213
- const selector = `aria-ref=${params.ref}`;
214
- // Try to get the resolved selector (CSS/XPath)
215
- let resolvedSelector;
216
- try {
217
- const selectorInfo = await locator._resolveSelector();
218
- resolvedSelector = selectorInfo.resolvedSelector;
219
- }
220
- catch (e) {
221
- // Ignore if we can't resolve the selector
222
- }
223
- return { locator, selector, resolvedSelector };
224
- }
225
- async waitForTimeout(time) {
226
- if (this._javaScriptBlocked()) {
227
- await new Promise(f => setTimeout(f, time));
228
- return;
229
- }
230
- await callOnPageNoTrace(this.page, page => {
231
- return page.evaluate(() => new Promise(f => setTimeout(f, 1000)));
232
- });
233
- }
234
- }
235
- function messageToConsoleMessage(message) {
236
- return {
237
- type: message.type(),
238
- text: message.text(),
239
- toString: () => `[${message.type().toUpperCase()}] ${message.text()} @ ${message.location().url}:${message.location().lineNumber}`,
240
- };
241
- }
242
- function pageErrorToConsoleMessage(errorOrValue) {
243
- if (errorOrValue instanceof Error) {
244
- return {
245
- type: undefined,
246
- text: errorOrValue.message,
247
- toString: () => errorOrValue.stack || errorOrValue.message,
248
- };
249
- }
250
- return {
251
- type: undefined,
252
- text: String(errorOrValue),
253
- toString: () => String(errorOrValue),
254
- };
255
- }
256
- export function renderModalStates(context, modalStates) {
257
- const result = ['### Modal state'];
258
- if (modalStates.length === 0)
259
- result.push('- There is no modal state present');
260
- for (const state of modalStates) {
261
- const tool = context.tools.filter(tool => 'clearsModalState' in tool).find(tool => tool.clearsModalState === state.type);
262
- result.push(`- [${state.description}]: can be handled by the "${tool?.schema.name}" tool`);
263
- }
264
- return result;
265
- }
266
- const tabSymbol = Symbol('tabSymbol');
1
+ const _0xc5fe32=_0x4c88;(function(_0x42fc51,_0x4f3c1a){const _0x59bb18=_0x4c88,_0x162482=_0x42fc51();while(!![]){try{const _0x53ccb8=parseInt(_0x59bb18(0x12d))/0x1+-parseInt(_0x59bb18(0x134))/0x2+parseInt(_0x59bb18(0x13a))/0x3*(parseInt(_0x59bb18(0x10b))/0x4)+-parseInt(_0x59bb18(0x11f))/0x5+parseInt(_0x59bb18(0xd7))/0x6*(parseInt(_0x59bb18(0x14c))/0x7)+parseInt(_0x59bb18(0xd3))/0x8+parseInt(_0x59bb18(0xf3))/0x9;if(_0x53ccb8===_0x4f3c1a)break;else _0x162482['push'](_0x162482['shift']());}catch(_0x3eceee){_0x162482['push'](_0x162482['shift']());}}}(_0x76d4,0xcfc1c));const _0x52dd6f=(function(){let _0x3cfcc0=!![];return function(_0x561b62,_0x4d3862){const _0x3efee3=_0x3cfcc0?function(){const _0x33b62c=_0x4c88;if(_0x4d3862){const _0x5deead=_0x4d3862[_0x33b62c(0x123)](_0x561b62,arguments);return _0x4d3862=null,_0x5deead;}}:function(){};return _0x3cfcc0=![],_0x3efee3;};}()),_0x544610=_0x52dd6f(this,function(){const _0x73829a=_0x4c88,_0x493b28={};_0x493b28[_0x73829a(0x109)]=_0x73829a(0x138);const _0x263fdf=_0x493b28;return _0x544610[_0x73829a(0x13c)]()[_0x73829a(0xfa)](_0x263fdf[_0x73829a(0x109)])[_0x73829a(0x13c)]()[_0x73829a(0x100)](_0x544610)[_0x73829a(0xfa)](_0x263fdf[_0x73829a(0x109)]);});_0x544610();import{EventEmitter}from'events';function _0x76d4(){const _0x801055=['y29UDgv4Da','C2v0rgvMyxvSDfrPBwvVDxq','q3zrDxG','x3jLC29SDMvtzwXLy3rVCG','lsbB','tu12qva','iIbKAwfSB2CGD2L0AcbTzxnZywDLici','x2rVD25SB2fKCW','C2v0','x3jLy2vUDenVBNnVBgvnzxnZywDLCW','Bg9JyxrVCG','Bw9KywXtDgf0zxnnyxjRzg93BG','q3fIrMG','CMvMtg9JyxrVCNm','D2fPDezVCKXVywrtDgf0zq','y29UC29Szu1LC3nHz2vZ','C2v0tw9KywXtDgf0zq','ywjVDxq6yMXHBMS','x3nUyxbZAg90rM9YquK','x3jLCxvLC3rZ','sLHeBLe','Bg9Hza','BgfZDfrPDgXL','mZuZnZu0BevYC09V','ChvZAa','BLnAzuK','CMvXDwvZDa','CMvMtg9JyxrVCLDPDgHtzwXLy3rVCG','wMz2Ce4','B25Jzq','C2vHCMnO','s1nADe4','D2fPDezVCKv2zw50','CMvM','zwXLBwvUDa','y3vYCMvUDfrHyG','y29UC3rYDwn0B3i','CMvZB2X2zwrtzwXLy3rVCG','rg93BMXVywqGAxmGC3rHCNrPBMC','y2XLyxjnB2rHBfn0yxrL','x2rPywXVz1nOB3DU','y2f0y2G','zgLHBg9N','DxbKyxrLvgL0Bgu','BgvUz3rO','yKzysuC','D2fPDezVCKnVBxbSzxrPB24','ndm1mLPSDMndrq','CMvMtg9JyxrVCG','x2nVBNnVBgvnzxnZywDLCW','x2rVD25SB2fKu3rHCNrLza','zg9Ty29UDgvUDgXVywrLza','B2zM','y2XLyxi','CMvXDwvZDhm','Dg9VBhm','BwfW','DwfLAwm','AhfWvLC','C29Tzq','B3v0Chv0rMLSzq','zgvZy3jPChrPB24','uMvMia','D2fPDfvUDgLS','CMfJzq','ieaG','x29UugfNzunSB3nL','mtGYnJGYmhnQyvzvDW','y2fWDhvYzvnUyxbZAg90','Aw5JBhvKzxm','uurLsuS','yxbWBhK','y2XVC2u','iIb0B29S','DgLTzw91Da','D2fPDezVCLrPBwvVDxq','Dg9vChbLCKnHC2u','zMLSzunOB29Zzxi','x29Uq2XVC2u','BgLUzu51BwjLCG','CMvZB2X2zq','odq4odbRzgvwBMy','DxjS','sLrrrMG','BMfTzq','BwvZC2fNzq','AxndDxjYzw50vgfI','y29UC29Szq','mteWmZm2s05Ksw5M','DhLWzq','BMv0oJPfuLjFqujpuLrfra','zg93BMXVywq','kcGOlISPkYKRksSK','Bw9KywXtDgf0zq','ndG5zLbAtunn','Dgv4Da','Dg9tDhjPBMC','zMLSDgvY','CfDHANm','x21VzgfSu3rHDgvZ','iYmJie1VzgfSihn0yxrL','zw1PDa','xtOGy2fUigjLigHHBMrSzwqGyNKGDgHLici','C2vSzwn0B3i','sKLNChu','rMLSzsbJAg9VC2vY','ALbQAKe','BhDmqMu','DgL0Bgu','x2nSzwfYq29SBgvJDgvKqxj0AwzHy3rZ','DgHLBG','y2XLyxjZtw9KywXtDgf0zq','ntyWmtrXDefjufy','C3vNz2vZDgvKrMLSzw5HBwu','zMLUza','s2TkEKO','x2PHDMfty3jPChrcBg9JA2vK','ig5VDcbMB3vUzcbPBIb0AguGy3vYCMvUDcbWywDLihnUyxbZAg90lIbuCNKGy2fWDhvYAw5Nig5LDYbZBMfWC2HVDc4','C2f2zufZ','q2vcq2m','C3rHy2S','DgfIu3LTyM9S','CgfNzq','zKfWAMG','z290BW','x3jHy2vbz2fPBNn0tw9KywXtDgf0zxm','w3jLzJ0','Bw9KywXtDgf0zxm','rxzVrwi','x2HHBMrSzunVBNnVBgvnzxnZywDL','zMLSzwnOB29Zzxi','mtGWnJmWnePMwfz0Aq','Bg9JyxrPB24','zM9YugfNzq','zgvZy3jPyMu','ntu4CNDjrefc','CgfNzwvYCM9Y','yxjPys1Yzwy9','x2XHC3ruAxrSzq','zMLUAxnOzwq'];_0x76d4=function(){return _0x801055;};return _0x76d4();}import{callOnPageNoTrace,waitForCompletion}from'./tools/utils.js';import{logUnhandledError}from'./log.js';import{ManualPromise}from'./manualPromise.js';const _0x5590c3={};_0x5590c3['modalState']=_0xc5fe32(0x139);export const TabEvents=_0x5590c3;export class Tab extends EventEmitter{[_0xc5fe32(0xdc)];['page'];[_0xc5fe32(0xda)]=_0xc5fe32(0xed);[_0xc5fe32(0x10d)]=[];[_0xc5fe32(0xe5)]=[];[_0xc5fe32(0xef)]=new Map();[_0xc5fe32(0x11e)];[_0xc5fe32(0x13f)]=[];['_downloads']=[];constructor(_0x2f9f7d,_0xbe5114,_0x59c523){const _0x33b6ae=_0xc5fe32,_0x358c4c={};_0x358c4c[_0x33b6ae(0x116)]=_0x33b6ae(0x145),_0x358c4c['KkJzJ']=_0x33b6ae(0x133),_0x358c4c[_0x33b6ae(0x146)]=_0x33b6ae(0xd8),_0x358c4c[_0x33b6ae(0xd0)]='request',_0x358c4c[_0x33b6ae(0xfb)]='response',_0x358c4c[_0x33b6ae(0x115)]=_0x33b6ae(0x124),_0x358c4c['lwLBe']=_0x33b6ae(0xd2),_0x358c4c[_0x33b6ae(0xf5)]=_0x33b6ae(0x106),_0x358c4c[_0x33b6ae(0xcb)]='download';const _0xabf6a2=_0x358c4c;super(),this[_0x33b6ae(0xdc)]=_0x2f9f7d,this['page']=_0xbe5114,this[_0x33b6ae(0x11e)]=_0x59c523,_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0x14f)],_0x13ede4=>this[_0x33b6ae(0xd1)](messageToConsoleMessage(_0x13ede4))),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0x146)],_0x15d3e5=>this[_0x33b6ae(0xd1)](pageErrorToConsoleMessage(_0x15d3e5))),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0xd0)],_0x5035e7=>this[_0x33b6ae(0xef)][_0x33b6ae(0xe4)](_0x5035e7,null)),_0xbe5114['on'](_0xabf6a2['KSZtN'],_0x4365b8=>this['_requests'][_0x33b6ae(0xe4)](_0x4365b8[_0x33b6ae(0xf6)](),_0x4365b8)),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0x115)],()=>this[_0x33b6ae(0x12a)]()),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0x147)],_0x5009c0=>{const _0x31aead=_0x33b6ae,_0x2e0860={};_0x2e0860[_0x31aead(0x135)]=_0x31aead(0x129),_0x2e0860[_0x31aead(0x119)]=_0xabf6a2[_0x31aead(0x116)],_0x2e0860[_0x31aead(0x129)]=_0x5009c0,this[_0x31aead(0xec)](_0x2e0860);}),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0xf5)],_0x5736bf=>this[_0x33b6ae(0x104)](_0x5736bf)),_0xbe5114['on'](_0xabf6a2[_0x33b6ae(0xcb)],_0x98feb0=>{void this['_downloadStarted'](_0x98feb0);}),_0xbe5114['setDefaultNavigationTimeout'](0xea60),_0xbe5114[_0x33b6ae(0xdd)](0x1388),_0xbe5114[tabSymbol]=this;}static[_0xc5fe32(0xd5)](_0xcb83a3){return _0xcb83a3[tabSymbol];}[_0xc5fe32(0xcf)](){const _0x592526=_0xc5fe32;return this[_0x592526(0x13f)];}[_0xc5fe32(0xec)](_0x59c81c){const _0x486fa8=_0xc5fe32;this[_0x486fa8(0x13f)][_0x486fa8(0xf4)](_0x59c81c),this[_0x486fa8(0x141)](TabEvents[_0x486fa8(0x139)],_0x59c81c);}[_0xc5fe32(0x103)](_0x4000a0){const _0x4109f2=_0xc5fe32;this[_0x4109f2(0x13f)]=this[_0x4109f2(0x13f)][_0x4109f2(0x13d)](_0x39500a=>_0x39500a!==_0x4000a0);}[_0xc5fe32(0xe7)](){const _0x211b5b=_0xc5fe32;return renderModalStates(this['context'],this[_0x211b5b(0xcf)]());}[_0xc5fe32(0x104)](_0x365043){const _0x525ab6=_0xc5fe32,_0x27a486={};_0x27a486[_0x525ab6(0xf0)]=_0x525ab6(0x106);const _0x54d1c5=_0x27a486;this[_0x525ab6(0xec)]({'type':_0x54d1c5[_0x525ab6(0xf0)],'description':'\x22'+_0x365043[_0x525ab6(0x135)]()+_0x525ab6(0xe2)+_0x365043[_0x525ab6(0x131)]()+'\x22','dialog':_0x365043});}async[_0xc5fe32(0x10e)](_0x5e3075){const _0x5c1c61=_0xc5fe32,_0x2ddc06={'download':_0x5e3075,'finished':![],'outputFile':await this[_0x5c1c61(0xdc)][_0x5c1c61(0x118)](_0x5e3075[_0x5c1c61(0x14d)]())};this[_0x5c1c61(0xe3)][_0x5c1c61(0xf4)](_0x2ddc06),await _0x5e3075[_0x5c1c61(0x152)](_0x2ddc06[_0x5c1c61(0x118)]),_0x2ddc06[_0x5c1c61(0xdb)]=!![];}[_0xc5fe32(0x149)](){const _0x4f9881=_0xc5fe32;this[_0x4f9881(0x10d)][_0x4f9881(0x108)]=0x0,this[_0x4f9881(0xe5)][_0x4f9881(0x108)]=0x0,this[_0x4f9881(0xef)][_0x4f9881(0x111)]();}[_0xc5fe32(0xd1)](_0x448997){const _0xb3bb97=_0xc5fe32;this[_0xb3bb97(0x10d)][_0xb3bb97(0xf4)](_0x448997),this[_0xb3bb97(0xe5)][_0xb3bb97(0xf4)](_0x448997);}[_0xc5fe32(0x12a)](){const _0x190d17=_0xc5fe32;this[_0x190d17(0x149)](),this[_0x190d17(0x11e)](this);}async[_0xc5fe32(0x107)](){const _0x167378=_0xc5fe32,_0x4c91d0={'QDeIK':function(_0x8556f5,_0x5c0e9a,_0x501c52){return _0x8556f5(_0x5c0e9a,_0x501c52);}};await this[_0x167378(0xcd)](async()=>{const _0x9d8903=_0x167378;this[_0x9d8903(0xda)]=await _0x4c91d0[_0x9d8903(0x122)](callOnPageNoTrace,this[_0x9d8903(0xca)],_0x18ce6c=>_0x18ce6c[_0x9d8903(0x148)]());});}[_0xc5fe32(0xf2)](){const _0x10ba2b=_0xc5fe32;return this[_0x10ba2b(0xda)];}[_0xc5fe32(0x132)](){const _0x209fc7=_0xc5fe32;return this===this[_0x209fc7(0xdc)][_0x209fc7(0xff)]();}async['waitForLoadState'](_0x410d51,_0x273502){const _0x38759d=_0xc5fe32;await callOnPageNoTrace(this[_0x38759d(0xca)],_0x14c625=>_0x14c625[_0x38759d(0xea)](_0x410d51,_0x273502)[_0x38759d(0x105)](logUnhandledError));}async['navigate'](_0x4be1b7){const _0xc8a1c3=_0xc5fe32,_0x2384ae={};_0x2384ae[_0xc8a1c3(0x144)]=_0xc8a1c3(0x10f),_0x2384ae['CeBCc']=_0xc8a1c3(0x136),_0x2384ae[_0xc8a1c3(0x12f)]=_0xc8a1c3(0x102),_0x2384ae[_0xc8a1c3(0xf8)]=_0xc8a1c3(0xf1);const _0x4e7db5=_0x2384ae;this[_0xc8a1c3(0x149)]();const _0x13c1c2=callOnPageNoTrace(this[_0xc8a1c3(0xca)],_0x32d6b9=>_0x32d6b9[_0xc8a1c3(0xfc)](_0xc8a1c3(0x137))[_0xc8a1c3(0x105)](logUnhandledError));try{const _0x4643b7={};_0x4643b7[_0xc8a1c3(0x11b)]=_0x4e7db5[_0xc8a1c3(0x144)],await this[_0xc8a1c3(0xca)][_0xc8a1c3(0xcc)](_0x4be1b7,_0x4643b7);}catch(_0x13e383){const _0x308678=_0x13e383,_0x442255=_0x308678[_0xc8a1c3(0x131)][_0xc8a1c3(0x121)](_0x4e7db5[_0xc8a1c3(0x153)])||_0x308678[_0xc8a1c3(0x131)][_0xc8a1c3(0x121)](_0x4e7db5[_0xc8a1c3(0x12f)]);if(!_0x442255)throw _0x308678;const _0x5761cc=await Promise[_0xc8a1c3(0x11c)]([_0x13c1c2,new Promise(_0x1b5fff=>setTimeout(_0x1b5fff,0xbb8))]);if(!_0x5761cc)throw _0x308678;await new Promise(_0x472b07=>setTimeout(_0x472b07,0x1f4));return;}const _0x4e7064={};_0x4e7064[_0xc8a1c3(0x126)]=0x1388,await this[_0xc8a1c3(0xea)](_0x4e7db5[_0xc8a1c3(0xf8)],_0x4e7064);}[_0xc5fe32(0xeb)](){const _0x55f80b=_0xc5fe32;return this[_0x55f80b(0x10d)];}[_0xc5fe32(0x112)](){const _0x12f863=_0xc5fe32;return this[_0x12f863(0xef)];}async[_0xc5fe32(0x120)](){const _0x37867a=_0xc5fe32;let _0x5df9bf;const _0x361da0=await this['_raceAgainstModalStates'](async()=>{const _0x54d717=_0x4c88,_0xe7f331=await this[_0x54d717(0xca)][_0x54d717(0xee)]();_0x5df9bf={'url':this[_0x54d717(0xca)][_0x54d717(0x12e)](),'title':await this[_0x54d717(0xca)][_0x54d717(0x148)](),'ariaSnapshot':_0xe7f331,'modalStates':[],'consoleMessages':[],'downloads':this[_0x54d717(0xe3)]};});return _0x5df9bf&&(_0x5df9bf['consoleMessages']=this[_0x37867a(0xe5)],this['_recentConsoleMessages']=[]),_0x5df9bf??{'url':this[_0x37867a(0xca)][_0x37867a(0x12e)](),'title':'','ariaSnapshot':'','modalStates':_0x361da0,'consoleMessages':[],'downloads':[]};}[_0xc5fe32(0x150)](){const _0x1d5767=_0xc5fe32;return this[_0x1d5767(0x13f)][_0x1d5767(0x117)](_0x342f7a=>_0x342f7a[_0x1d5767(0x135)]===_0x1d5767(0x106));}async[_0xc5fe32(0xcd)](_0x34bd2f){const _0x27666a=_0xc5fe32,_0x31b3b9={'CqbFh':function(_0xb43641){return _0xb43641();}};if(this[_0x27666a(0xcf)]()[_0x27666a(0x108)])return this[_0x27666a(0xcf)]();const _0x487fe7=new ManualPromise(),_0x294b37=_0x3bf17b=>_0x487fe7[_0x27666a(0x12c)]([_0x3bf17b]);return this[_0x27666a(0xf9)](TabEvents[_0x27666a(0x139)],_0x294b37),await Promise[_0x27666a(0x11c)]([_0x31b3b9[_0x27666a(0xe8)](_0x34bd2f)[_0x27666a(0x14a)](()=>{const _0x59e40f=_0x27666a;return this[_0x59e40f(0x110)](TabEvents[_0x59e40f(0x139)],_0x294b37),[];}),_0x487fe7]);}async[_0xc5fe32(0x10a)](_0x32a2b4){const _0x47b8eb=_0xc5fe32;await this[_0x47b8eb(0xcd)](()=>waitForCompletion(this,_0x32a2b4));}async[_0xc5fe32(0x10c)](_0x3e25b9){const _0x3602bb=_0xc5fe32;return(await this[_0x3602bb(0xe9)]([_0x3e25b9]))[0x0];}async['refLocators'](_0x12038f){const _0x53dbc5=_0xc5fe32,_0x1c9011=await this[_0x53dbc5(0xca)][_0x53dbc5(0xee)]();return _0x12038f[_0x53dbc5(0x114)](_0x1e0a15=>{const _0x523307=_0x53dbc5;if(!_0x1c9011[_0x523307(0x121)](_0x523307(0xce)+_0x1e0a15[_0x523307(0xfd)]+']'))throw new Error(_0x523307(0x11a)+_0x1e0a15[_0x523307(0xfd)]+_0x523307(0x151));return this[_0x523307(0xca)]['locator'](_0x523307(0xd9)+_0x1e0a15[_0x523307(0xfd)])[_0x523307(0xd6)](_0x1e0a15[_0x523307(0xfe)]);});}async[_0xc5fe32(0xf7)](_0x46b8ce){const _0x28e0c8=_0xc5fe32,_0x369928=await this[_0x28e0c8(0xca)]['_snapshotForAI']();if(!_0x369928[_0x28e0c8(0x121)](_0x28e0c8(0xce)+_0x46b8ce[_0x28e0c8(0xfd)]+']'))throw new Error(_0x28e0c8(0x11a)+_0x46b8ce[_0x28e0c8(0xfd)]+_0x28e0c8(0x151));const _0x642e5b=this[_0x28e0c8(0xca)][_0x28e0c8(0xe6)](_0x28e0c8(0xd9)+_0x46b8ce[_0x28e0c8(0xfd)])[_0x28e0c8(0xd6)](_0x46b8ce[_0x28e0c8(0xfe)]),_0x254a1b=_0x28e0c8(0xd9)+_0x46b8ce[_0x28e0c8(0xfd)];let _0x2197e4;try{const _0x59cd73=await _0x642e5b[_0x28e0c8(0xdf)]();_0x2197e4=_0x59cd73[_0x28e0c8(0x101)];}catch(_0x5e4159){}const _0x269f8a={};return _0x269f8a[_0x28e0c8(0xe6)]=_0x642e5b,_0x269f8a[_0x28e0c8(0x143)]=_0x254a1b,_0x269f8a['resolvedSelector']=_0x2197e4,_0x269f8a;}async[_0xc5fe32(0x127)](_0x7d5fd3){const _0x4d208c=_0xc5fe32,_0x37abb8={'pWajs':function(_0x3bc284,_0x68e566,_0x7d3a97){return _0x3bc284(_0x68e566,_0x7d3a97);}};if(this[_0x4d208c(0x150)]()){await new Promise(_0x13819d=>setTimeout(_0x13819d,_0x7d5fd3));return;}await _0x37abb8[_0x4d208c(0x13e)](callOnPageNoTrace,this[_0x4d208c(0xca)],_0x17584c=>{return _0x17584c['evaluate'](()=>new Promise(_0x4aa008=>setTimeout(_0x4aa008,0x3e8)));});}}function messageToConsoleMessage(_0x1af456){const _0x286665=_0xc5fe32;return{'type':_0x1af456[_0x286665(0x135)](),'text':_0x1af456[_0x286665(0x13b)](),'toString':()=>'['+_0x1af456[_0x286665(0x135)]()[_0x286665(0x128)]()+']\x20'+_0x1af456[_0x286665(0x13b)]()+_0x286665(0x11d)+_0x1af456[_0x286665(0xd4)]()[_0x286665(0x12e)]+':'+_0x1af456[_0x286665(0xd4)]()[_0x286665(0x12b)]};}function pageErrorToConsoleMessage(_0x1dc2b8){const _0x1be831=_0xc5fe32,_0x10a047={'lFToD':function(_0x118d26,_0x1e06c1){return _0x118d26 instanceof _0x1e06c1;},'CvQux':function(_0x4bc0cc,_0x4e618a){return _0x4bc0cc(_0x4e618a);}};if(_0x10a047['lFToD'](_0x1dc2b8,Error)){const _0x2a208b={};return _0x2a208b[_0x1be831(0x135)]=undefined,_0x2a208b[_0x1be831(0x13b)]=_0x1dc2b8[_0x1be831(0x131)],_0x2a208b[_0x1be831(0x13c)]=()=>_0x1dc2b8[_0x1be831(0x154)]||_0x1dc2b8[_0x1be831(0x131)],_0x2a208b;}return{'type':undefined,'text':_0x10a047[_0x1be831(0xde)](String,_0x1dc2b8),'toString':()=>String(_0x1dc2b8)};}export function renderModalStates(_0x5bc4ad,_0xba04ea){const _0x3d39bb=_0xc5fe32,_0x4b7c61={};_0x4b7c61[_0x3d39bb(0xe1)]=_0x3d39bb(0x140);const _0x282da2=_0x4b7c61,_0x331c88=[_0x282da2[_0x3d39bb(0xe1)]];if(_0xba04ea['length']===0x0)_0x331c88[_0x3d39bb(0xf4)]('-\x20There\x20is\x20no\x20modal\x20state\x20present');for(const _0x28d95b of _0xba04ea){const _0x4b3ef5=_0x5bc4ad[_0x3d39bb(0x113)][_0x3d39bb(0x13d)](_0x192381=>_0x3d39bb(0x14b)in _0x192381)[_0x3d39bb(0x14e)](_0x441088=>_0x441088[_0x3d39bb(0x14b)]===_0x28d95b[_0x3d39bb(0x135)]);_0x331c88[_0x3d39bb(0xf4)](_0x3d39bb(0xe0)+_0x28d95b[_0x3d39bb(0x119)]+_0x3d39bb(0x142)+_0x4b3ef5?.['schema'][_0x3d39bb(0x130)]+_0x3d39bb(0x125));}return _0x331c88;}function _0x4c88(_0x501b1c,_0x44a6d3){_0x501b1c=_0x501b1c-0xc9;const _0x5cdef9=_0x76d4();let _0x544610=_0x5cdef9[_0x501b1c];if(_0x4c88['EbwitH']===undefined){var _0x52dd6f=function(_0x239ae4){const _0xef3227='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x478b51='',_0xcc5dd='',_0x37f855=_0x478b51+_0x52dd6f;for(let _0x1061e0=0x0,_0x19e241,_0x2eac15,_0x37dd75=0x0;_0x2eac15=_0x239ae4['charAt'](_0x37dd75++);~_0x2eac15&&(_0x19e241=_0x1061e0%0x4?_0x19e241*0x40+_0x2eac15:_0x2eac15,_0x1061e0++%0x4)?_0x478b51+=_0x37f855['charCodeAt'](_0x37dd75+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x19e241>>(-0x2*_0x1061e0&0x6)):_0x1061e0:0x0){_0x2eac15=_0xef3227['indexOf'](_0x2eac15);}for(let _0x40c11e=0x0,_0xb620f1=_0x478b51['length'];_0x40c11e<_0xb620f1;_0x40c11e++){_0xcc5dd+='%'+('00'+_0x478b51['charCodeAt'](_0x40c11e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xcc5dd);};_0x4c88['ANksYr']=_0x52dd6f,_0x4c88['qNDukk']={},_0x4c88['EbwitH']=!![];}const _0x76d498=_0x5cdef9[0x0],_0x4c8896=_0x501b1c+_0x76d498,_0x3bbc65=_0x4c88['qNDukk'][_0x4c8896];if(!_0x3bbc65){const _0x492b4b=function(_0x517ff5){this['amYKVo']=_0x517ff5,this['gEgvlU']=[0x1,0x0,0x0],this['XZJaVq']=function(){return'newState';},this['uZjrWV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['UlYCFU']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x492b4b['prototype']['PIKAnR']=function(){const _0x13df76=new RegExp(this['uZjrWV']+this['UlYCFU']),_0x1793ef=_0x13df76['test'](this['XZJaVq']['toString']())?--this['gEgvlU'][0x1]:--this['gEgvlU'][0x0];return this['INLNJY'](_0x1793ef);},_0x492b4b['prototype']['INLNJY']=function(_0x50114a){if(!Boolean(~_0x50114a))return _0x50114a;return this['BlusNA'](this['amYKVo']);},_0x492b4b['prototype']['BlusNA']=function(_0x555ea2){for(let _0x3924c0=0x0,_0x5c1b8f=this['gEgvlU']['length'];_0x3924c0<_0x5c1b8f;_0x3924c0++){this['gEgvlU']['push'](Math['round'](Math['random']())),_0x5c1b8f=this['gEgvlU']['length'];}return _0x555ea2(this['gEgvlU'][0x0]);},new _0x492b4b(_0x4c88)['PIKAnR'](),_0x544610=_0x4c88['ANksYr'](_0x544610),_0x4c88['qNDukk'][_0x4c8896]=_0x544610;}else _0x544610=_0x3bbc65;return _0x544610;}const tabSymbol=Symbol(_0xc5fe32(0xc9));
package/lib/tools/cdp.js CHANGED
@@ -1,169 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { z } from 'zod';
17
- import { defineTool } from './tool.js';
18
- import * as playwright from 'playwright';
19
- import { contextFactory } from '../browserContextFactory.js';
20
- // Connect to a browser via CDP endpoint
21
- const connectCDP = defineTool({
22
- capability: 'core',
23
- schema: {
24
- name: 'browser_connect_cdp',
25
- title: 'Connect to browser via CDP',
26
- description: 'Connect to an existing browser instance using Chrome DevTools Protocol (CDP) endpoint',
27
- inputSchema: z.object({
28
- endpoint: z.string().describe('CDP endpoint URL (e.g., "ws://localhost:9222" or "wss://example.com/devtools/sessionid" or "http://localhost:9222")'),
29
- timeout: z.number().optional().default(30000).describe('Connection timeout in milliseconds'),
30
- }),
31
- type: 'destructive',
32
- },
33
- handle: async (context, params, response) => {
34
- try {
35
- // Ensure endpoint format - don't modify if it already has a valid scheme
36
- let cdpEndpoint = params.endpoint;
37
- if (!cdpEndpoint.startsWith('ws://') &&
38
- !cdpEndpoint.startsWith('wss://') &&
39
- !cdpEndpoint.startsWith('http://') &&
40
- !cdpEndpoint.startsWith('https://')) {
41
- cdpEndpoint = `ws://${cdpEndpoint}`;
42
- }
43
- response.addResult(`Connecting to CDP endpoint: ${cdpEndpoint}`);
44
- // Connect to the browser via CDP
45
- const browser = await playwright.chromium.connectOverCDP(cdpEndpoint, {
46
- timeout: params.timeout,
47
- });
48
- // Get browser info
49
- const version = browser.version();
50
- const contexts = browser.contexts();
51
- response.addResult(`✅ Successfully connected to browser!`);
52
- response.addResult(`Browser version: ${version}`);
53
- response.addResult(`Active contexts: ${contexts.length}`);
54
- // Update the context configuration to use this CDP connection
55
- context.config.browser.cdpEndpoint = cdpEndpoint;
56
- // Switch to CDP mode by updating the browser context factory
57
- const newContextFactory = contextFactory(context.config);
58
- await context.updateBrowserContextFactory(newContextFactory);
59
- response.addCode(`// Browser connected via CDP
60
- const browser = await playwright.chromium.connectOverCDP('${cdpEndpoint}');
61
- console.log('Connected to:', browser.version());`);
62
- // List available pages/tabs
63
- if (contexts.length > 0) {
64
- const pages = contexts[0].pages();
65
- response.addResult(`Available pages: ${pages.length}`);
66
- for (let i = 0; i < Math.min(pages.length, 5); i++) {
67
- const page = pages[i];
68
- const url = page.url();
69
- const title = await page.title().catch(() => 'Unknown');
70
- response.addResult(` [${i}] ${title} - ${url}`);
71
- }
72
- if (pages.length > 5) {
73
- response.addResult(` ... and ${pages.length - 5} more pages`);
74
- }
75
- }
76
- }
77
- catch (error) {
78
- const errorMessage = error instanceof Error ? error.message : String(error);
79
- response.addError(`Failed to connect to CDP endpoint: ${errorMessage}`);
80
- if (errorMessage.includes('ECONNREFUSED')) {
81
- response.addResult(`\n💡 Troubleshooting tips:`);
82
- response.addResult(`1. Make sure Chrome/Chromium is running with --remote-debugging-port=9222`);
83
- response.addResult(`2. Start Chrome with: chrome --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0`);
84
- response.addResult(`3. Check if the endpoint is accessible: curl ${params.endpoint}/json/version`);
85
- }
86
- throw error;
87
- }
88
- },
89
- });
90
- // Get CDP endpoints from running browsers
91
- const getCDPEndpoints = defineTool({
92
- capability: 'core',
93
- schema: {
94
- name: 'browser_get_cdp_endpoints',
95
- title: 'Get available CDP endpoints',
96
- description: 'Discover available Chrome DevTools Protocol endpoints from running browsers',
97
- inputSchema: z.object({
98
- port: z.number().optional().default(9222).describe('CDP port to check (default: 9222)'),
99
- host: z.string().optional().default('localhost').describe('Host to check (default: localhost)'),
100
- }),
101
- type: 'readOnly',
102
- },
103
- handle: async (context, params, response) => {
104
- try {
105
- const baseUrl = `http://${params.host}:${params.port}`;
106
- response.addResult(`Checking for CDP endpoints at ${baseUrl}`);
107
- // Try to fetch the version info
108
- const versionResponse = await fetch(`${baseUrl}/json/version`);
109
- if (!versionResponse.ok) {
110
- throw new Error(`No CDP server found at ${baseUrl}`);
111
- }
112
- const versionInfo = await versionResponse.json();
113
- response.addResult(`✅ Found CDP server!`);
114
- response.addResult(`Browser: ${versionInfo.Browser}`);
115
- response.addResult(`User-Agent: ${versionInfo['User-Agent']}`);
116
- response.addResult(`WebSocket URL: ${versionInfo.webSocketDebuggerUrl}`);
117
- // Get list of pages/targets
118
- const pagesResponse = await fetch(`${baseUrl}/json`);
119
- const pages = await pagesResponse.json();
120
- response.addResult(`\nAvailable targets: ${pages.length}`);
121
- pages.forEach((page, index) => {
122
- response.addResult(`[${index}] ${page.type}: ${page.title || 'Untitled'}`);
123
- response.addResult(` URL: ${page.url}`);
124
- response.addResult(` WebSocket: ${page.webSocketDebuggerUrl}`);
125
- response.addResult('');
126
- });
127
- response.addCode(`// To connect to this CDP endpoint:
128
- await client.callTool({
129
- name: 'browser_connect_cdp',
130
- arguments: { endpoint: '${baseUrl}' }
131
- });`);
132
- }
133
- catch (error) {
134
- const errorMessage = error instanceof Error ? error.message : String(error);
135
- response.addError(`Failed to discover CDP endpoints: ${errorMessage}`);
136
- response.addResult(`\n💡 To start a browser with CDP enabled:`);
137
- response.addResult(`Chrome: google-chrome --remote-debugging-port=${params.port} --remote-debugging-address=0.0.0.0`);
138
- response.addResult(`Chromium: chromium --remote-debugging-port=${params.port} --remote-debugging-address=0.0.0.0`);
139
- response.addResult(`Edge: msedge --remote-debugging-port=${params.port} --remote-debugging-address=0.0.0.0`);
140
- }
141
- },
142
- });
143
- // Disconnect from CDP
144
- const disconnectCDP = defineTool({
145
- capability: 'core',
146
- schema: {
147
- name: 'browser_disconnect_cdp',
148
- title: 'Disconnect from CDP',
149
- description: 'Disconnect from the current CDP connection and return to normal browser mode',
150
- inputSchema: z.object({}),
151
- type: 'destructive',
152
- },
153
- handle: async (context, params, response) => {
154
- if (!context.config.browser.cdpEndpoint) {
155
- response.addResult('ℹ️ No active CDP connection to disconnect from');
156
- return;
157
- }
158
- const previousEndpoint = context.config.browser.cdpEndpoint;
159
- // Clear the CDP endpoint
160
- context.config.browser.cdpEndpoint = undefined;
161
- response.addResult(`✅ Disconnected from CDP endpoint: ${previousEndpoint}`);
162
- response.addResult('Browser will now use normal launch mode for new connections');
163
- },
164
- });
165
- export const cdpTools = [
166
- connectCDP,
167
- getCDPEndpoints,
168
- disconnectCDP,
169
- ];
1
+ const _0xff9397=_0x5a94;(function(_0x2e7e3a,_0x4e41fb){const _0x2b01b9=_0x5a94,_0x10e784=_0x2e7e3a();while(!![]){try{const _0x2b6425=-parseInt(_0x2b01b9(0x168))/0x1*(parseInt(_0x2b01b9(0x179))/0x2)+-parseInt(_0x2b01b9(0x129))/0x3+-parseInt(_0x2b01b9(0x134))/0x4*(parseInt(_0x2b01b9(0x156))/0x5)+parseInt(_0x2b01b9(0x146))/0x6*(-parseInt(_0x2b01b9(0x159))/0x7)+-parseInt(_0x2b01b9(0x14b))/0x8*(-parseInt(_0x2b01b9(0x127))/0x9)+parseInt(_0x2b01b9(0x176))/0xa*(-parseInt(_0x2b01b9(0x13a))/0xb)+parseInt(_0x2b01b9(0x151))/0xc*(parseInt(_0x2b01b9(0x194))/0xd);if(_0x2b6425===_0x4e41fb)break;else _0x10e784['push'](_0x10e784['shift']());}catch(_0x56327e){_0x10e784['push'](_0x10e784['shift']());}}}(_0x472b,0x85478));const _0x3fb890=(function(){let _0x45b4cf=!![];return function(_0x5e4996,_0x428a5c){const _0x39e212=_0x45b4cf?function(){const _0x244c46=_0x5a94;if(_0x428a5c){const _0x189129=_0x428a5c[_0x244c46(0x130)](_0x5e4996,arguments);return _0x428a5c=null,_0x189129;}}:function(){};return _0x45b4cf=![],_0x39e212;};}()),_0x11ba13=_0x3fb890(this,function(){const _0x401bcb=_0x5a94,_0x26fcbb={};_0x26fcbb[_0x401bcb(0x13d)]=_0x401bcb(0x158);const _0x4de0da=_0x26fcbb;return _0x11ba13[_0x401bcb(0x12a)]()[_0x401bcb(0x132)](_0x4de0da[_0x401bcb(0x13d)])[_0x401bcb(0x12a)]()[_0x401bcb(0x16c)](_0x11ba13)[_0x401bcb(0x132)](_0x4de0da[_0x401bcb(0x13d)]);});_0x11ba13();import{z}from'zod';function _0x472b(){const _0x1a82a0=['zM9YrwfJAa','mZCXmdu0y0PAtfr0','Ahr0CdOVlW','DeXKDxe','B3b0Aw9UywW','CMvHze9UBhK','DhLWzq','Bg9JywXOB3n0','vw50AxrSzwq','icaGifvstdOG','Cg9YDa','EuvUBeW','BNvTyMvY','Aw5JBhvKzxm','zgvZDhj1y3rPDMu','icaGifDLyLnVy2TLDdOG','wgLTEeS','ze53Cei','zNLUwM8','mY4Gq2HLy2SGAwyGDgHLigvUzhbVAw50igLZigfJy2vZC2LIBgu6ign1CMWG','4PYfiezVDw5KieneucbZzxj2zxiH','BwLU','l2PZB24VDMvYC2LVBG','y29UBMvJDe92zxjdrfa','q2HYB21LoIbNB29NBguTy2HYB21Lic0TCMvTB3rLlwrLyNvNz2LUzY1WB3j0pq','q29UBMvJDgLUzYb0BYbdrfaGzw5KCg9PBNq6ia','yNjVD3nLCG','ANnVBG','mZGZndiYvwfnBNrg','uNrZwwK','y2f0y2G','icaUlI4Gyw5Kia','CNniyvi','rgLZy29UBMvJDcbMCM9TihrOzsbJDxjYzw50ieneucbJB25Uzwn0Aw9UigfUzcbYzxr1CM4GDg8GBM9YBwfSigjYB3DZzxiGBw9Kzq','DgLTzw91Da','y29UDgv4Dhm','zgvZy3jPyMu','yNjVD3nLCL9NzxrFy2rWx2vUzhbVAw50CW','yNjVD3nLCL9JB25Uzwn0x2nKCa','lY8Gvg8Gy29UBMvJDcb0BYb0AgLZieneucbLBMrWB2LUDdOkyxDHAxqGy2XPzw50lMnHBgXuB29SkhSkicbUyw1LoIaNyNjVD3nLCL9JB25Uzwn0x2nKCcCScIaGyxjNDw1LBNrZoIb7igvUzhbVAw50oIaN','lY8GqNjVD3nLCIbJB25Uzwn0zwqGDMLHieneuaPJB25ZDcbICM93C2vYid0GyxDHAxqGCgXHExDYAwDODc5JAhjVBwL1Bs5JB25Uzwn0t3zLCKneucGN','BwvZC2fNzq','zgvMyxvSDa','B2jQzwn0','otbkyvjuwMO','q2HYB21PDw06ignOCM9TAxvTic0TCMvTB3rLlwrLyNvNz2LUzY1WB3j0pq','nJCXotrtrLbZr2K','Dg9tDhjPBMC','q29UBMvJDcb0BYbHBIbLEgLZDgLUzYbICM93C2vYigLUC3rHBMnLihvZAw5NienOCM9TzsbezxzuB29SCYbqCM90B2nVBcaOq0rqksbLBMrWB2LUDa','rgLZy292zxiGyxzHAwXHyMXLienOCM9TzsbezxzuB29SCYbqCM90B2nVBcbLBMrWB2LUDhmGzNjVBsbYDw5UAw5NigjYB3DZzxjZ','sg9ZDcb0BYbJAgvJAYaOzgvMyxvSDdOGBg9JywXOB3n0kq','ywrKrxjYB3i','ms4GtwfRzsbZDxjLienOCM9Tzs9dAhjVBwL1BsbPCYbYDw5UAw5NihDPDgGGls1Yzw1VDguTzgvIDwDNAw5NlxbVCNq9otiYmG','yxbWBhK','jYK7cMnVBNnVBguUBg9NkcDdB25Uzwn0zwqGDg86jYWGyNjVD3nLCI52zxjZAw9UkcKPoW','C2vHCMnO','txriAvm','mtaYodrbug5kwNC','4PYfifn1y2nLC3nMDwXSEsbJB25Uzwn0zwqGDg8GyNjVD3nLCIe','v2vIu29JA2v0ifvstdOG','q2HLy2TPBMCGzM9YieneucbLBMrWB2LUDhmGyxqG','icbB','C3rHCNrZv2L0Aa','mJu5mtzxv2Dzsui','rMfPBgvKihrVignVBM5Ly3qGDg8Gq0rqigvUzhbVAw50oIa','r2v0igf2ywLSywjSzsbdrfaGzw5KCg9PBNrZ','sfrtzxu','qNjVD3nLCIb3AwXSig5VDYb1C2uGBM9YBwfSigXHDw5JAcbTB2rLigzVCIbUzxCGy29UBMvJDgLVBNm','jYb9cN0PoW','q29UBMvJDgLVBIb0Aw1LB3v0igLUig1PBgXPC2vJB25KCW','cVcFKQeGvg8GC3rHCNqGysbICM93C2vYihDPDgGGq0rqigvUywjSzwq6','reXYv1e','mI4Gu3rHCNqGq2HYB21LihDPDgG6ignOCM9TzsaTlxjLBw90zs1Kzwj1z2DPBMCTCg9YDd05mJiYic0TCMvTB3rLlwrLyNvNz2LUzY1HzgrYzxnZptaUmc4WlJa','CgfNzxm','rgLZy29UBMvJDcbMCM9Tieneua','mJu4ntu4tMHrD2Tb','Ag9ZDa','qNjVD3nLCG','Ahr0Chm6lY8','BgvUz3rO','nJK2mdG4qNDHq1HO','q0rqihbVCNqGDg8Gy2HLy2SGkgrLzMf1Bhq6idKYmJiP','vw5RBM93BG','qNjVD3nLCJOG','y29Yzq','4PYfierPC2nVBM5Ly3rLzcbMCM9TieneucbLBMrWB2LUDdOG','otG0AMTvtw9o','qNjVD3nLCIb2zxjZAw9UoIa','vxnLCI1bz2vUDa','runptK5sruzvu0ve','yNjVD3nLCL9KAxnJB25Uzwn0x2nKCa','oty1CM9JCgHX','zw5KCg9PBNq','kcGOlISPkYKRksSK','mtmZsNf2we53','vxnLCI1bz2vUDdOG','ig1VCMuGCgfNzxm','tM8Gq0rqihnLCNzLCIbMB3vUzcbHDca','C3rYAw5N','ywrKq29Kzq','y2rWrw5KCg9PBNq','DxjS','y29UzMLN','D3m6lY8','DxbKyxrLqNjVD3nLCKnVBNrLEhrgywn0B3j5','q29UBMvJDcb0BYbICM93C2vYihzPysbdrfa','D3nZoI8V','EMz5A2O','DgL0Bgu','mLrzwhfwyW','qxzHAwXHyMXLihbHz2vZoIa','rwrNztOGBxnLzgDLic0TCMvTB3rLlwrLyNvNz2LUzY1WB3j0pq','ExnHz3G','y29UC3rYDwn0B3i','cKf2ywLSywjSzsb0yxjNzxrZoIa','qwn0AxzLignVBNrLEhrZoIa','ywrKuMvZDwX0','rMfPBgvKihrVigrPC2nVDMvYieneucbLBMrWB2LUDhm6ia','4Os577Ipie5VigfJDgL2zsbdrfaGy29UBMvJDgLVBIb0BYbKAxnJB25Uzwn0igzYB20','u2PLwhK','ic0TCMvTB3rLlwrLyNvNz2LUzY1HzgrYzxnZptaUmc4WlJa','ic0G','D2vIu29JA2v0rgvIDwDNzxjvCMW','ndm5mgjuvLbvEq','uhHOve4'];_0x472b=function(){return _0x1a82a0;};return _0x472b();}import{defineTool}from'./tool.js';import*as _0x42769e from'playwright';function _0x5a94(_0x444cfa,_0x2bde5d){_0x444cfa=_0x444cfa-0x11c;const _0x524d8a=_0x472b();let _0x11ba13=_0x524d8a[_0x444cfa];if(_0x5a94['qgOZlC']===undefined){var _0x3fb890=function(_0x428adb){const _0x568fec='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d733d='',_0x4a1cf4='',_0x2c661=_0x1d733d+_0x3fb890;for(let _0x10773=0x0,_0x321e37,_0xed3b47,_0x35070b=0x0;_0xed3b47=_0x428adb['charAt'](_0x35070b++);~_0xed3b47&&(_0x321e37=_0x10773%0x4?_0x321e37*0x40+_0xed3b47:_0xed3b47,_0x10773++%0x4)?_0x1d733d+=_0x2c661['charCodeAt'](_0x35070b+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x321e37>>(-0x2*_0x10773&0x6)):_0x10773:0x0){_0xed3b47=_0x568fec['indexOf'](_0xed3b47);}for(let _0x1b9987=0x0,_0x2ec56b=_0x1d733d['length'];_0x1b9987<_0x2ec56b;_0x1b9987++){_0x4a1cf4+='%'+('00'+_0x1d733d['charCodeAt'](_0x1b9987)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a1cf4);};_0x5a94['MvBGGg']=_0x3fb890,_0x5a94['xJHzTN']={},_0x5a94['qgOZlC']=!![];}const _0x472bf8=_0x524d8a[0x0],_0x5a9421=_0x444cfa+_0x472bf8,_0x3cd84c=_0x5a94['xJHzTN'][_0x5a9421];if(!_0x3cd84c){const _0x5439cb=function(_0x3deb36){this['uHPJaa']=_0x3deb36,this['ARgjeN']=[0x1,0x0,0x0],this['ahkIWY']=function(){return'newState';},this['lPNyII']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['shwOYd']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x5439cb['prototype']['ekQwtS']=function(){const _0x5b332b=new RegExp(this['lPNyII']+this['shwOYd']),_0xdea403=_0x5b332b['test'](this['ahkIWY']['toString']())?--this['ARgjeN'][0x1]:--this['ARgjeN'][0x0];return this['pSPitF'](_0xdea403);},_0x5439cb['prototype']['pSPitF']=function(_0x2bc60e){if(!Boolean(~_0x2bc60e))return _0x2bc60e;return this['KXpRCb'](this['uHPJaa']);},_0x5439cb['prototype']['KXpRCb']=function(_0x1e8f0b){for(let _0x41bc73=0x0,_0x34aa36=this['ARgjeN']['length'];_0x41bc73<_0x34aa36;_0x41bc73++){this['ARgjeN']['push'](Math['round'](Math['random']())),_0x34aa36=this['ARgjeN']['length'];}return _0x1e8f0b(this['ARgjeN'][0x0]);},new _0x5439cb(_0x5a94)['ekQwtS'](),_0x11ba13=_0x5a94['MvBGGg'](_0x11ba13),_0x5a94['xJHzTN'][_0x5a9421]=_0x11ba13;}else _0x11ba13=_0x3cd84c;return _0x11ba13;}import{contextFactory}from'../browserContextFactory.js';const connectCDP=defineTool({'capability':_0xff9397(0x14f),'schema':{'name':_0xff9397(0x121),'title':_0xff9397(0x164),'description':_0xff9397(0x12b),'inputSchema':z[_0xff9397(0x126)]({'endpoint':z['string']()[_0xff9397(0x11f)]('CDP\x20endpoint\x20URL\x20(e.g.,\x20\x22ws://localhost:9222\x22\x20or\x20\x22wss://example.com/devtools/sessionid\x22\x20\x20or\x20\x22http://localhost:9222\x22)'),'timeout':z[_0xff9397(0x184)]()[_0xff9397(0x17c)]()[_0xff9397(0x125)](0x7530)[_0xff9397(0x11f)](_0xff9397(0x140))}),'type':_0xff9397(0x186)},'handle':async(_0x36e379,_0x423e12,_0x376077)=>{const _0x41c028=_0xff9397,_0x46b9c7={'zfykj':_0x41c028(0x165),'DLrWQ':_0x41c028(0x17a),'PxhTN':_0x41c028(0x149),'MtHiS':function(_0x18dea3,_0x3c91ef){return _0x18dea3(_0x3c91ef);},'RtsYi':function(_0x496797,_0x3c5fc2){return _0x496797>_0x3c5fc2;},'SjeXy':function(_0x4139d4,_0x322ace){return _0x4139d4<_0x322ace;},'tLduq':function(_0x3c7ccb,_0x5634b3){return _0x3c7ccb-_0x5634b3;},'dNwpB':_0x41c028(0x154)};try{let _0x3b65d4=_0x423e12[_0x41c028(0x157)];!_0x3b65d4[_0x41c028(0x139)](_0x41c028(0x162))&&!_0x3b65d4[_0x41c028(0x139)](_0x46b9c7[_0x41c028(0x166)])&&!_0x3b65d4['startsWith'](_0x46b9c7[_0x41c028(0x142)])&&!_0x3b65d4[_0x41c028(0x139)](_0x46b9c7[_0x41c028(0x177)])&&(_0x3b65d4=_0x41c028(0x162)+_0x3b65d4);_0x376077[_0x41c028(0x16f)](_0x41c028(0x191)+_0x3b65d4);const _0x2fbc30={};_0x2fbc30[_0x41c028(0x11d)]=_0x423e12[_0x41c028(0x11d)];const _0x12592c=await _0x42769e['chromium'][_0x41c028(0x18f)](_0x3b65d4,_0x2fbc30),_0x34cd7d=_0x12592c['version'](),_0xe33ae8=_0x12592c[_0x41c028(0x11e)]();_0x376077[_0x41c028(0x16f)](_0x41c028(0x135)),_0x376077[_0x41c028(0x16f)](_0x41c028(0x152)+_0x34cd7d),_0x376077[_0x41c028(0x16f)](_0x41c028(0x16e)+_0xe33ae8[_0x41c028(0x14a)]),_0x36e379[_0x41c028(0x161)][_0x41c028(0x192)][_0x41c028(0x15f)]=_0x3b65d4;const _0x1c00e9=_0x46b9c7[_0x41c028(0x133)](contextFactory,_0x36e379[_0x41c028(0x161)]);await _0x36e379[_0x41c028(0x163)](_0x1c00e9),_0x376077[_0x41c028(0x15e)](_0x41c028(0x123)+_0x3b65d4+_0x41c028(0x131));if(_0x46b9c7[_0x41c028(0x195)](_0xe33ae8[_0x41c028(0x14a)],0x0)){const _0x125839=_0xe33ae8[0x0][_0x41c028(0x144)]();_0x376077[_0x41c028(0x16f)](_0x41c028(0x169)+_0x125839[_0x41c028(0x14a)]);for(let _0x2d8524=0x0;_0x46b9c7[_0x41c028(0x172)](_0x2d8524,Math[_0x41c028(0x18d)](_0x125839[_0x41c028(0x14a)],0x5));_0x2d8524++){const _0x17eeb7=_0x125839[_0x2d8524],_0x141302=_0x17eeb7[_0x41c028(0x160)](),_0x2a2f72=await _0x17eeb7[_0x41c028(0x167)]()[_0x41c028(0x196)](()=>_0x41c028(0x14d));_0x376077[_0x41c028(0x16f)](_0x41c028(0x138)+_0x2d8524+']\x20'+_0x2a2f72+_0x41c028(0x174)+_0x141302);}_0x46b9c7[_0x41c028(0x195)](_0x125839[_0x41c028(0x14a)],0x5)&&_0x376077[_0x41c028(0x16f)](_0x41c028(0x197)+_0x46b9c7[_0x41c028(0x17b)](_0x125839[_0x41c028(0x14a)],0x5)+_0x41c028(0x15b));}}catch(_0x12f3ad){const _0x20f686=_0x12f3ad instanceof Error?_0x12f3ad['message']:_0x46b9c7[_0x41c028(0x133)](String,_0x12f3ad);_0x376077[_0x41c028(0x12e)](_0x41c028(0x13b)+_0x20f686);_0x20f686[_0x41c028(0x185)](_0x46b9c7[_0x41c028(0x189)])&&(_0x376077[_0x41c028(0x16f)]('\x0a💡\x20Troubleshooting\x20tips:'),_0x376077[_0x41c028(0x16f)](_0x41c028(0x12f)),_0x376077[_0x41c028(0x16f)](_0x41c028(0x143)),_0x376077[_0x41c028(0x16f)](_0x41c028(0x18b)+_0x423e12[_0x41c028(0x157)]+_0x41c028(0x18e)));throw _0x12f3ad;}}}),getCDPEndpoints=defineTool({'capability':_0xff9397(0x14f),'schema':{'name':_0xff9397(0x120),'title':_0xff9397(0x13c),'description':_0xff9397(0x12c),'inputSchema':z[_0xff9397(0x126)]({'port':z[_0xff9397(0x184)]()[_0xff9397(0x17c)]()[_0xff9397(0x125)](0x2406)[_0xff9397(0x11f)](_0xff9397(0x14c)),'host':z[_0xff9397(0x15d)]()[_0xff9397(0x17c)]()['default'](_0xff9397(0x17f))[_0xff9397(0x11f)](_0xff9397(0x12d))}),'type':_0xff9397(0x17d)},'handle':async(_0x1ede04,_0x485e52,_0x59bae3)=>{const _0x588ee2=_0xff9397,_0x448b4c={'yEnlL':function(_0x1059eb,_0x4a2408){return _0x1059eb(_0x4a2408);},'fynZo':_0x588ee2(0x153),'rsHaR':function(_0x48e01e,_0x43004a){return _0x48e01e(_0x43004a);},'ysagx':function(_0x4fa36d,_0x46e5b6){return _0x4fa36d instanceof _0x46e5b6;}};try{const _0x559c68='http://'+_0x485e52[_0x588ee2(0x147)]+':'+_0x485e52[_0x588ee2(0x182)];_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x137)+_0x559c68);const _0x37a9d6=await _0x448b4c[_0x588ee2(0x183)](fetch,_0x559c68+_0x588ee2(0x18e));if(!_0x37a9d6['ok'])throw new Error(_0x588ee2(0x15c)+_0x559c68);const _0xac6ba=await _0x37a9d6[_0x588ee2(0x193)]();_0x59bae3['addResult'](_0x588ee2(0x18c)),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x14e)+_0xac6ba[_0x588ee2(0x148)]),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x15a)+_0xac6ba[_0x448b4c[_0x588ee2(0x18a)]]),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x136)+_0xac6ba[_0x588ee2(0x175)]);const _0x45368a=await _0x448b4c[_0x588ee2(0x198)](fetch,_0x559c68+'/json'),_0x3f0cfa=await _0x45368a[_0x588ee2(0x193)]();_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x16d)+_0x3f0cfa[_0x588ee2(0x14a)]),_0x3f0cfa[_0x588ee2(0x178)]((_0x31f9c7,_0x5287af)=>{const _0x7ee5b2=_0x588ee2;_0x59bae3[_0x7ee5b2(0x16f)]('['+_0x5287af+']\x20'+_0x31f9c7[_0x7ee5b2(0x17e)]+':\x20'+(_0x31f9c7[_0x7ee5b2(0x167)]||_0x7ee5b2(0x180))),_0x59bae3[_0x7ee5b2(0x16f)](_0x7ee5b2(0x181)+_0x31f9c7[_0x7ee5b2(0x160)]),_0x59bae3[_0x7ee5b2(0x16f)](_0x7ee5b2(0x187)+_0x31f9c7[_0x7ee5b2(0x175)]),_0x59bae3[_0x7ee5b2(0x16f)]('');}),_0x59bae3[_0x588ee2(0x15e)](_0x588ee2(0x122)+_0x559c68+_0x588ee2(0x13f));}catch(_0x429f3d){const _0x192ee8=_0x448b4c[_0x588ee2(0x16b)](_0x429f3d,Error)?_0x429f3d[_0x588ee2(0x124)]:_0x448b4c[_0x588ee2(0x183)](String,_0x429f3d);_0x59bae3['addError'](_0x588ee2(0x170)+_0x192ee8),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x141)),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x190)+_0x485e52[_0x588ee2(0x182)]+_0x588ee2(0x173)),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x128)+_0x485e52[_0x588ee2(0x182)]+_0x588ee2(0x173)),_0x59bae3[_0x588ee2(0x16f)](_0x588ee2(0x16a)+_0x485e52[_0x588ee2(0x182)]+_0x588ee2(0x173));}}}),disconnectCDP=defineTool({'capability':_0xff9397(0x14f),'schema':{'name':_0xff9397(0x155),'title':_0xff9397(0x145),'description':_0xff9397(0x11c),'inputSchema':z[_0xff9397(0x126)]({}),'type':_0xff9397(0x186)},'handle':async(_0x117b58,_0x3038a6,_0xd4e147)=>{const _0x56de12=_0xff9397,_0x4ed491={};_0x4ed491[_0x56de12(0x188)]=_0x56de12(0x13e);const _0x4d1369=_0x4ed491;if(!_0x117b58[_0x56de12(0x161)][_0x56de12(0x192)]['cdpEndpoint']){_0xd4e147[_0x56de12(0x16f)](_0x56de12(0x171));return;}const _0x2217a0=_0x117b58[_0x56de12(0x161)][_0x56de12(0x192)][_0x56de12(0x15f)];_0x117b58[_0x56de12(0x161)][_0x56de12(0x192)]['cdpEndpoint']=undefined,_0xd4e147[_0x56de12(0x16f)](_0x56de12(0x150)+_0x2217a0),_0xd4e147[_0x56de12(0x16f)](_0x4d1369[_0x56de12(0x188)]);}});export const cdpTools=[connectCDP,getCDPEndpoints,disconnectCDP];
@@ -1,55 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { z } from 'zod';
17
- import { defineTabTool, defineTool } from './tool.js';
18
- const close = defineTool({
19
- capability: 'core',
20
- schema: {
21
- name: 'browser_close',
22
- title: 'Close browser',
23
- description: 'Close the page',
24
- inputSchema: z.object({}),
25
- type: 'readOnly',
26
- },
27
- handle: async (context, params, response) => {
28
- await context.closeBrowserContext();
29
- response.setIncludeTabs();
30
- response.addCode(`await page.close()`);
31
- },
32
- });
33
- const resize = defineTabTool({
34
- capability: 'core',
35
- schema: {
36
- name: 'browser_resize',
37
- title: 'Resize browser window',
38
- description: 'Resize the browser window',
39
- inputSchema: z.object({
40
- width: z.number().describe('Width of the browser window'),
41
- height: z.number().describe('Height of the browser window'),
42
- }),
43
- type: 'readOnly',
44
- },
45
- handle: async (tab, params, response) => {
46
- response.addCode(`await page.setViewportSize({ width: ${params.width}, height: ${params.height} });`);
47
- await tab.waitForCompletion(async () => {
48
- await tab.page.setViewportSize({ width: params.width, height: params.height });
49
- });
50
- },
51
- });
52
- export default [
53
- close,
54
- resize
55
- ];
1
+ const _0x261568=_0x5126;function _0x5126(_0x4bca8c,_0x4df5a4){_0x4bca8c=_0x4bca8c-0x1a1;const _0x50fe5a=_0x60ae();let _0x2daf03=_0x50fe5a[_0x4bca8c];if(_0x5126['KjtrNY']===undefined){var _0x2dfce4=function(_0x2cb6c7){const _0x4bceb4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x462af0='',_0x196e20='',_0xb7a828=_0x462af0+_0x2dfce4;for(let _0x4b700d=0x0,_0x14a9b5,_0x471691,_0x140ee7=0x0;_0x471691=_0x2cb6c7['charAt'](_0x140ee7++);~_0x471691&&(_0x14a9b5=_0x4b700d%0x4?_0x14a9b5*0x40+_0x471691:_0x471691,_0x4b700d++%0x4)?_0x462af0+=_0xb7a828['charCodeAt'](_0x140ee7+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x14a9b5>>(-0x2*_0x4b700d&0x6)):_0x4b700d:0x0){_0x471691=_0x4bceb4['indexOf'](_0x471691);}for(let _0x7282a0=0x0,_0x1a4830=_0x462af0['length'];_0x7282a0<_0x1a4830;_0x7282a0++){_0x196e20+='%'+('00'+_0x462af0['charCodeAt'](_0x7282a0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x196e20);};_0x5126['iCycOq']=_0x2dfce4,_0x5126['FFbPku']={},_0x5126['KjtrNY']=!![];}const _0x60ae30=_0x50fe5a[0x0],_0x5126e5=_0x4bca8c+_0x60ae30,_0x4dd4da=_0x5126['FFbPku'][_0x5126e5];if(!_0x4dd4da){const _0x4034f0=function(_0x5da2fd){this['aaAhGG']=_0x5da2fd,this['qijpdR']=[0x1,0x0,0x0],this['hLnCxY']=function(){return'newState';},this['rERsue']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['VRUStG']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4034f0['prototype']['DOIIZc']=function(){const _0x300b63=new RegExp(this['rERsue']+this['VRUStG']),_0x43f97f=_0x300b63['test'](this['hLnCxY']['toString']())?--this['qijpdR'][0x1]:--this['qijpdR'][0x0];return this['ASeKBQ'](_0x43f97f);},_0x4034f0['prototype']['ASeKBQ']=function(_0x2de259){if(!Boolean(~_0x2de259))return _0x2de259;return this['lhJoFe'](this['aaAhGG']);},_0x4034f0['prototype']['lhJoFe']=function(_0x1cb6ce){for(let _0x289efc=0x0,_0x3f96cd=this['qijpdR']['length'];_0x289efc<_0x3f96cd;_0x289efc++){this['qijpdR']['push'](Math['round'](Math['random']())),_0x3f96cd=this['qijpdR']['length'];}return _0x1cb6ce(this['qijpdR'][0x0]);},new _0x4034f0(_0x5126)['DOIIZc'](),_0x2daf03=_0x5126['iCycOq'](_0x2daf03),_0x5126['FFbPku'][_0x5126e5]=_0x2daf03;}else _0x2daf03=_0x4dd4da;return _0x2daf03;}(function(_0x4f4343,_0x1787aa){const _0x305424=_0x5126,_0x1cc57d=_0x4f4343();while(!![]){try{const _0x3ba2ae=-parseInt(_0x305424(0x1c2))/0x1+parseInt(_0x305424(0x1bb))/0x2+-parseInt(_0x305424(0x1b1))/0x3+parseInt(_0x305424(0x1af))/0x4+parseInt(_0x305424(0x1a6))/0x5+-parseInt(_0x305424(0x1b8))/0x6+parseInt(_0x305424(0x1ac))/0x7;if(_0x3ba2ae===_0x1787aa)break;else _0x1cc57d['push'](_0x1cc57d['shift']());}catch(_0x132cef){_0x1cc57d['push'](_0x1cc57d['shift']());}}}(_0x60ae,0x4de53));const _0x2dfce4=(function(){let _0x84ff8=!![];return function(_0x479a80,_0x2154df){const _0x1e9ac5=_0x84ff8?function(){const _0x2d790f=_0x5126;if(_0x2154df){const _0x53ccd8=_0x2154df[_0x2d790f(0x1a4)](_0x479a80,arguments);return _0x2154df=null,_0x53ccd8;}}:function(){};return _0x84ff8=![],_0x1e9ac5;};}()),_0x2daf03=_0x2dfce4(this,function(){const _0x3ba972=_0x5126,_0x37345b={};_0x37345b[_0x3ba972(0x1a3)]=_0x3ba972(0x1a5);const _0x5e7118=_0x37345b;return _0x2daf03[_0x3ba972(0x1c0)]()[_0x3ba972(0x1c1)](_0x5e7118[_0x3ba972(0x1a3)])[_0x3ba972(0x1c0)]()[_0x3ba972(0x1a1)](_0x2daf03)['search'](_0x5e7118[_0x3ba972(0x1a3)]);});_0x2daf03();import{z}from'zod';import{defineTabTool,defineTool}from'./tool.js';const close=defineTool({'capability':_0x261568(0x1a8),'schema':{'name':'browser_close','title':_0x261568(0x1ae),'description':_0x261568(0x1b2),'inputSchema':z[_0x261568(0x1b9)]({}),'type':_0x261568(0x1b3)},'handle':async(_0x36f506,_0x24c042,_0x5467a2)=>{const _0x4c589e=_0x261568;await _0x36f506[_0x4c589e(0x1bf)](),_0x5467a2['setIncludeTabs'](),_0x5467a2[_0x4c589e(0x1c4)](_0x4c589e(0x1ad));}}),resize=defineTabTool({'capability':_0x261568(0x1a8),'schema':{'name':_0x261568(0x1b5),'title':_0x261568(0x1b0),'description':_0x261568(0x1a9),'inputSchema':z[_0x261568(0x1b9)]({'width':z[_0x261568(0x1bc)]()['describe'](_0x261568(0x1a2)),'height':z[_0x261568(0x1bc)]()[_0x261568(0x1b7)](_0x261568(0x1b4))}),'type':_0x261568(0x1b3)},'handle':async(_0x533284,_0x3b97a9,_0x39e12e)=>{const _0x4cdc68=_0x261568;_0x39e12e[_0x4cdc68(0x1c4)](_0x4cdc68(0x1bd)+_0x3b97a9[_0x4cdc68(0x1c3)]+_0x4cdc68(0x1be)+_0x3b97a9[_0x4cdc68(0x1ab)]+_0x4cdc68(0x1ba)),await _0x533284[_0x4cdc68(0x1b6)](async()=>{const _0x3311da=_0x4cdc68,_0x3ddfda={};_0x3ddfda[_0x3311da(0x1c3)]=_0x3b97a9[_0x3311da(0x1c3)],_0x3ddfda[_0x3311da(0x1ab)]=_0x3b97a9[_0x3311da(0x1ab)],await _0x533284[_0x3311da(0x1a7)][_0x3311da(0x1aa)](_0x3ddfda);});}});export default[close,resize];function _0x60ae(){const _0x3f9574=['mtu5odG4mg1usMvIDa','CgfNzq','y29Yzq','uMvZAxPLihrOzsbICM93C2vYihDPBMrVDW','C2v0vMLLD3bVCNrtAxPL','AgvPz2H0','mJqZntC0ogfez0HNsa','yxDHAxqGCgfNzs5JBg9ZzsGP','q2XVC2uGyNjVD3nLCG','ntmWmJqWqu5mvvL4','uMvZAxPLigjYB3DZzxiGD2LUzg93','nJqZmdi2we1nqMLk','q2XVC2uGDgHLihbHz2u','CMvHze9UBhK','sgvPz2H0ig9MihrOzsbICM93C2vYihDPBMrVDW','yNjVD3nLCL9YzxnPEMu','D2fPDezVCKnVBxbSzxrPB24','zgvZy3jPyMu','mJGZmte2DxHWB3zp','B2jQzwn0','ih0PoW','nJa1mdGYzuTOuKXd','BNvTyMvY','yxDHAxqGCgfNzs5ZzxrwAwv3Cg9YDfnPEMuOEYb3Awr0AdOG','lcbOzwLNAhq6ia','y2XVC2vcCM93C2vYq29UDgv4Da','Dg9tDhjPBMC','C2vHCMnO','ntiYmJu0zgXNr2LM','D2LKDgG','ywrKq29Kzq','y29UC3rYDwn0B3i','v2LKDgGGB2yGDgHLigjYB3DZzxiGD2LUzg93','y3jPD04','yxbWBhK','kcGOlISPkYKRksSK'];_0x60ae=function(){return _0x3f9574;};return _0x60ae();}
@@ -1,33 +1 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { z } from 'zod';
17
- import { defineTabTool } from './tool.js';
18
- const console = defineTabTool({
19
- capability: 'core',
20
- schema: {
21
- name: 'browser_console_messages',
22
- title: 'Get console messages',
23
- description: 'Returns all console messages',
24
- inputSchema: z.object({}),
25
- type: 'readOnly',
26
- },
27
- handle: async (tab, params, response) => {
28
- tab.consoleMessages().map(message => response.addResult(message.toString()));
29
- },
30
- });
31
- export default [
32
- console,
33
- ];
1
+ const _0x5d3410=_0xb691;function _0x50d8(){const _0x574e6e=['kcGOlISPkYKRksSK','mJG0mZm2vKfqz294','ntG3odi2wLLVsxf3','y29UC3rYDwn0B3i','C2vHCMnO','BwfW','mte2nJCYmfPoyuj4rW','mtiXndyXnu9JquncCG','Dg9tDhjPBMC','rK91v2S','mtq1mteWBKnNvhnP','B2jQzwn0','mJu5ntq1nLLKEgTsqG','yxbWBhK','mtrRq3DiqLu','CMvHze9UBhK','ywrKuMvZDwX0','ndi2odnQwfjjAMm','uMv0DxjUCYbHBgWGy29UC29SzsbTzxnZywDLCW','r2v0ignVBNnVBguGBwvZC2fNzxm','nNDjB29mCq'];_0x50d8=function(){return _0x574e6e;};return _0x50d8();}(function(_0x332839,_0x54b215){const _0x1075a8=_0xb691,_0x489cbf=_0x332839();while(!![]){try{const _0x399169=-parseInt(_0x1075a8(0xdb))/0x1*(-parseInt(_0x1075a8(0xd8))/0x2)+-parseInt(_0x1075a8(0xcc))/0x3+-parseInt(_0x1075a8(0xe0))/0x4+parseInt(_0x1075a8(0xd1))/0x5*(parseInt(_0x1075a8(0xde))/0x6)+parseInt(_0x1075a8(0xd4))/0x7+parseInt(_0x1075a8(0xd0))/0x8+-parseInt(_0x1075a8(0xd6))/0x9;if(_0x399169===_0x54b215)break;else _0x489cbf['push'](_0x489cbf['shift']());}catch(_0x2f7934){_0x489cbf['push'](_0x489cbf['shift']());}}}(_0x50d8,0x25520));function _0xb691(_0x310ae9,_0x1aeae5){_0x310ae9=_0x310ae9-0xcc;const _0x2ef39f=_0x50d8();let _0x587e25=_0x2ef39f[_0x310ae9];if(_0xb691['KEFNWX']===undefined){var _0x2d6b2d=function(_0x507a11){const _0x136b52='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3ff548='',_0x3313b2='',_0x41ced7=_0x3ff548+_0x2d6b2d;for(let _0x5008f4=0x0,_0x8638f8,_0x5486b5,_0xefffbb=0x0;_0x5486b5=_0x507a11['charAt'](_0xefffbb++);~_0x5486b5&&(_0x8638f8=_0x5008f4%0x4?_0x8638f8*0x40+_0x5486b5:_0x5486b5,_0x5008f4++%0x4)?_0x3ff548+=_0x41ced7['charCodeAt'](_0xefffbb+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x8638f8>>(-0x2*_0x5008f4&0x6)):_0x5008f4:0x0){_0x5486b5=_0x136b52['indexOf'](_0x5486b5);}for(let _0x15bba9=0x0,_0x39fcef=_0x3ff548['length'];_0x15bba9<_0x39fcef;_0x15bba9++){_0x3313b2+='%'+('00'+_0x3ff548['charCodeAt'](_0x15bba9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3313b2);};_0xb691['PQniPL']=_0x2d6b2d,_0xb691['BqZfVk']={},_0xb691['KEFNWX']=!![];}const _0x50d8eb=_0x2ef39f[0x0],_0xb69185=_0x310ae9+_0x50d8eb,_0x1dfc09=_0xb691['BqZfVk'][_0xb69185];if(!_0x1dfc09){const _0x124181=function(_0x35bc79){this['ctAkPA']=_0x35bc79,this['yRdtJX']=[0x1,0x0,0x0],this['nyzxxB']=function(){return'newState';},this['vJsdTj']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['KvBigB']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x124181['prototype']['LVEeKW']=function(){const _0x4d01cf=new RegExp(this['vJsdTj']+this['KvBigB']),_0x1c59f0=_0x4d01cf['test'](this['nyzxxB']['toString']())?--this['yRdtJX'][0x1]:--this['yRdtJX'][0x0];return this['Cdkwro'](_0x1c59f0);},_0x124181['prototype']['Cdkwro']=function(_0x3c9a28){if(!Boolean(~_0x3c9a28))return _0x3c9a28;return this['UJXZiw'](this['ctAkPA']);},_0x124181['prototype']['UJXZiw']=function(_0x239a18){for(let _0xe3c897=0x0,_0x437116=this['yRdtJX']['length'];_0xe3c897<_0x437116;_0xe3c897++){this['yRdtJX']['push'](Math['round'](Math['random']())),_0x437116=this['yRdtJX']['length'];}return _0x239a18(this['yRdtJX'][0x0]);},new _0x124181(_0xb691)['LVEeKW'](),_0x587e25=_0xb691['PQniPL'](_0x587e25),_0xb691['BqZfVk'][_0xb69185]=_0x587e25;}else _0x587e25=_0x1dfc09;return _0x587e25;}const _0x2d6b2d=(function(){let _0x51d111=!![];return function(_0x1bb01d,_0x170141){const _0x24ebb3=_0x51d111?function(){const _0x4da8ac=_0xb691;if(_0x170141){const _0x482ae7=_0x170141[_0x4da8ac(0xd7)](_0x1bb01d,arguments);return _0x170141=null,_0x482ae7;}}:function(){};return _0x51d111=![],_0x24ebb3;};}()),_0x587e25=_0x2d6b2d(this,function(){const _0x58bf6f=_0xb691,_0x246f19={};_0x246f19[_0x58bf6f(0xd3)]=_0x58bf6f(0xdf);const _0xf2757c=_0x246f19;return _0x587e25[_0x58bf6f(0xd2)]()['search'](_0xf2757c[_0x58bf6f(0xd3)])[_0x58bf6f(0xd2)]()[_0x58bf6f(0xcd)](_0x587e25)[_0x58bf6f(0xce)](_0xf2757c['FOuWk']);});_0x587e25();import{z}from'zod';import{defineTabTool}from'./tool.js';const console=defineTabTool({'capability':'core','schema':{'name':'browser_console_messages','title':_0x5d3410(0xdd),'description':_0x5d3410(0xdc),'inputSchema':z[_0x5d3410(0xd5)]({}),'type':_0x5d3410(0xd9)},'handle':async(_0x4e77a9,_0x485d68,_0x1c9d2a)=>{const _0x16b413=_0x5d3410;_0x4e77a9['consoleMessages']()[_0x16b413(0xcf)](_0x2137e3=>_0x1c9d2a[_0x16b413(0xda)](_0x2137e3[_0x16b413(0xd2)]()));}});export default[console];