@agent-relay/browser-primitive 4.0.9 → 4.0.40
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/actions/extraction.d.ts +6 -0
- package/dist/actions/extraction.d.ts.map +1 -0
- package/dist/actions/extraction.js +91 -0
- package/dist/actions/extraction.js.map +1 -0
- package/dist/actions/interaction.d.ts +17 -0
- package/dist/actions/interaction.d.ts.map +1 -0
- package/dist/actions/interaction.js +159 -0
- package/dist/actions/interaction.js.map +1 -0
- package/dist/actions/navigation.d.ts +6 -0
- package/dist/actions/navigation.d.ts.map +1 -0
- package/dist/actions/navigation.js +37 -0
- package/dist/actions/navigation.js.map +1 -0
- package/dist/actions/script.d.ts +3 -0
- package/dist/actions/script.d.ts.map +1 -0
- package/dist/actions/script.js +35 -0
- package/dist/actions/script.js.map +1 -0
- package/dist/actions/waits.d.ts +5 -0
- package/dist/actions/waits.d.ts.map +1 -0
- package/dist/actions/waits.js +52 -0
- package/dist/actions/waits.js.map +1 -0
- package/dist/browser-client.d.ts +41 -0
- package/dist/browser-client.d.ts.map +1 -0
- package/dist/browser-client.js +435 -0
- package/dist/browser-client.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +95 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +434 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/types.d.ts +364 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workflow-step.d.ts +99 -0
- package/dist/workflow-step.d.ts.map +1 -0
- package/dist/workflow-step.js +419 -0
- package/dist/workflow-step.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { chromium, firefox, webkit, } from 'playwright';
|
|
2
|
+
import { attribute, html, screenshot, text } from './actions/extraction.js';
|
|
3
|
+
import { check, click, fill, hover, press, select, submit, uncheck, upload } from './actions/interaction.js';
|
|
4
|
+
import { back, forward, goto, reload } from './actions/navigation.js';
|
|
5
|
+
import { evaluate } from './actions/script.js';
|
|
6
|
+
import { waitForFunction, waitForNavigation, waitForSelector } from './actions/waits.js';
|
|
7
|
+
const ACTION_HANDLERS = {
|
|
8
|
+
goto: goto,
|
|
9
|
+
navigate: goto,
|
|
10
|
+
back: back,
|
|
11
|
+
forward: forward,
|
|
12
|
+
reload: reload,
|
|
13
|
+
click: click,
|
|
14
|
+
fill: fill,
|
|
15
|
+
check: check,
|
|
16
|
+
uncheck: uncheck,
|
|
17
|
+
select: select,
|
|
18
|
+
hover: hover,
|
|
19
|
+
press: press,
|
|
20
|
+
submit: submit,
|
|
21
|
+
upload: upload,
|
|
22
|
+
text: text,
|
|
23
|
+
getText: text,
|
|
24
|
+
html: html,
|
|
25
|
+
getHTML: html,
|
|
26
|
+
attribute: attribute,
|
|
27
|
+
getAttribute: attribute,
|
|
28
|
+
screenshot: screenshot,
|
|
29
|
+
elementScreenshot: screenshot,
|
|
30
|
+
waitForSelector: waitForSelector,
|
|
31
|
+
waitForElement: waitForSelector,
|
|
32
|
+
waitForNavigation: waitForNavigation,
|
|
33
|
+
waitForFunction: waitForFunction,
|
|
34
|
+
evaluate: evaluate,
|
|
35
|
+
};
|
|
36
|
+
const DEFAULT_CONFIG = {
|
|
37
|
+
browser: 'chromium',
|
|
38
|
+
headless: true,
|
|
39
|
+
viewport: {
|
|
40
|
+
width: 1280,
|
|
41
|
+
height: 720,
|
|
42
|
+
},
|
|
43
|
+
timeout: 30_000,
|
|
44
|
+
args: [],
|
|
45
|
+
captureConsole: true,
|
|
46
|
+
captureNetwork: false,
|
|
47
|
+
persistSession: true,
|
|
48
|
+
screenshotOnError: false,
|
|
49
|
+
};
|
|
50
|
+
export class BrowserClient {
|
|
51
|
+
config;
|
|
52
|
+
session;
|
|
53
|
+
browser;
|
|
54
|
+
context;
|
|
55
|
+
page;
|
|
56
|
+
queueTail = Promise.resolve();
|
|
57
|
+
constructor(options = {}) {
|
|
58
|
+
this.config = normalizeConfig(options.config);
|
|
59
|
+
this.session = {
|
|
60
|
+
id: createSessionId(),
|
|
61
|
+
config: this.config,
|
|
62
|
+
cookies: [],
|
|
63
|
+
consoleLogs: [],
|
|
64
|
+
networkLogs: [],
|
|
65
|
+
startTime: new Date(),
|
|
66
|
+
active: false,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
getSession() {
|
|
70
|
+
return this.session;
|
|
71
|
+
}
|
|
72
|
+
getPage() {
|
|
73
|
+
return this.page && !this.page.isClosed() ? this.page : undefined;
|
|
74
|
+
}
|
|
75
|
+
getCurrentUrl() {
|
|
76
|
+
return this.page && !this.page.isClosed() ? this.page.url() : undefined;
|
|
77
|
+
}
|
|
78
|
+
async launch() {
|
|
79
|
+
if (this.browser?.isConnected() && this.context && this.getPage()) {
|
|
80
|
+
return this.session;
|
|
81
|
+
}
|
|
82
|
+
if (this.browser?.isConnected() && this.context) {
|
|
83
|
+
this.page = await this.createPage();
|
|
84
|
+
return this.session;
|
|
85
|
+
}
|
|
86
|
+
const launcher = this.getBrowserType();
|
|
87
|
+
this.browser = await launcher.launch({
|
|
88
|
+
headless: this.config.headless,
|
|
89
|
+
args: this.config.args,
|
|
90
|
+
timeout: this.config.timeout,
|
|
91
|
+
});
|
|
92
|
+
this.context = await this.browser.newContext({
|
|
93
|
+
viewport: this.config.viewport,
|
|
94
|
+
userAgent: this.config.userAgent,
|
|
95
|
+
extraHTTPHeaders: this.config.extraHTTPHeaders,
|
|
96
|
+
});
|
|
97
|
+
this.page = await this.createPage();
|
|
98
|
+
this.session.active = true;
|
|
99
|
+
return this.session;
|
|
100
|
+
}
|
|
101
|
+
async newPage() {
|
|
102
|
+
if (!this.context || !this.browser?.isConnected()) {
|
|
103
|
+
await this.launch();
|
|
104
|
+
return this.page;
|
|
105
|
+
}
|
|
106
|
+
this.page = await this.createPage();
|
|
107
|
+
return this.page;
|
|
108
|
+
}
|
|
109
|
+
async close() {
|
|
110
|
+
if (this.context) {
|
|
111
|
+
await this.refreshSessionState().catch(() => undefined);
|
|
112
|
+
await this.context.close().catch(() => undefined);
|
|
113
|
+
}
|
|
114
|
+
if (this.browser?.isConnected()) {
|
|
115
|
+
await this.browser.close().catch(() => undefined);
|
|
116
|
+
}
|
|
117
|
+
this.page = undefined;
|
|
118
|
+
this.context = undefined;
|
|
119
|
+
this.browser = undefined;
|
|
120
|
+
this.session.active = false;
|
|
121
|
+
}
|
|
122
|
+
async reset(config) {
|
|
123
|
+
await this.close();
|
|
124
|
+
if (config) {
|
|
125
|
+
Object.assign(this.config, normalizeConfig({ ...this.config, ...config }));
|
|
126
|
+
this.session.config = this.config;
|
|
127
|
+
}
|
|
128
|
+
this.session.cookies = [];
|
|
129
|
+
this.session.consoleLogs = [];
|
|
130
|
+
this.session.networkLogs = [];
|
|
131
|
+
this.session.currentUrl = undefined;
|
|
132
|
+
this.session.startTime = new Date();
|
|
133
|
+
return this.launch();
|
|
134
|
+
}
|
|
135
|
+
execute(action, params) {
|
|
136
|
+
try {
|
|
137
|
+
const request = this.normalizeAction(action, params);
|
|
138
|
+
return this.queueAction(request.name, request.params);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return Promise.resolve(this.normalizationError(error));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
enqueue(action, params) {
|
|
145
|
+
return this.execute(action, params);
|
|
146
|
+
}
|
|
147
|
+
async executeMany(actions) {
|
|
148
|
+
const results = [];
|
|
149
|
+
for (const action of actions) {
|
|
150
|
+
results.push(await this.executeWorkflowAction(action));
|
|
151
|
+
}
|
|
152
|
+
return results;
|
|
153
|
+
}
|
|
154
|
+
executeWorkflowAction(action) {
|
|
155
|
+
try {
|
|
156
|
+
const request = this.normalizeAction(action);
|
|
157
|
+
return this.queueAction(request.name, request.params);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return Promise.resolve(this.normalizationError(error));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
queueAction(action, params) {
|
|
164
|
+
const run = this.queueTail.then(() => this.executeNow(action, params));
|
|
165
|
+
this.queueTail = run.then(() => undefined, () => undefined);
|
|
166
|
+
return run;
|
|
167
|
+
}
|
|
168
|
+
normalizationError(error) {
|
|
169
|
+
const now = new Date().toISOString();
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
error: error instanceof Error ? error.message : String(error),
|
|
173
|
+
metadata: {
|
|
174
|
+
sessionId: this.session.id,
|
|
175
|
+
startedAt: now,
|
|
176
|
+
endedAt: now,
|
|
177
|
+
executionTime: 0,
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
async executeNow(action, params) {
|
|
182
|
+
const handler = ACTION_HANDLERS[action];
|
|
183
|
+
const startedAt = new Date();
|
|
184
|
+
const startTime = Date.now();
|
|
185
|
+
const consoleStart = this.session.consoleLogs.length;
|
|
186
|
+
const networkStart = this.session.networkLogs.length;
|
|
187
|
+
if (!handler) {
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
error: `Unsupported browser action: ${action}`,
|
|
191
|
+
metadata: {
|
|
192
|
+
action,
|
|
193
|
+
sessionId: this.session.id,
|
|
194
|
+
startedAt: startedAt.toISOString(),
|
|
195
|
+
endedAt: new Date().toISOString(),
|
|
196
|
+
executionTime: Date.now() - startTime,
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
let page;
|
|
201
|
+
try {
|
|
202
|
+
page = await this.ensurePage();
|
|
203
|
+
const output = (await handler(this.createActionContext(page), params));
|
|
204
|
+
await this.refreshSessionState();
|
|
205
|
+
return {
|
|
206
|
+
success: true,
|
|
207
|
+
output,
|
|
208
|
+
metadata: this.createMetadata(action, startedAt, startTime, consoleStart, networkStart),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
const errorScreenshot = page ? await this.captureErrorScreenshot(page, action) : undefined;
|
|
213
|
+
await this.refreshSessionState().catch(() => undefined);
|
|
214
|
+
return {
|
|
215
|
+
success: false,
|
|
216
|
+
error: error instanceof Error ? error.message : String(error),
|
|
217
|
+
metadata: this.createMetadata(action, startedAt, startTime, consoleStart, networkStart, errorScreenshot),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
if (!this.config.persistSession) {
|
|
222
|
+
await this.close();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async ensurePage() {
|
|
227
|
+
if (!this.browser?.isConnected() || !this.context) {
|
|
228
|
+
await this.launch();
|
|
229
|
+
}
|
|
230
|
+
if (!this.page || this.page.isClosed()) {
|
|
231
|
+
this.page = await this.createPage();
|
|
232
|
+
}
|
|
233
|
+
return this.page;
|
|
234
|
+
}
|
|
235
|
+
async createPage() {
|
|
236
|
+
if (!this.context) {
|
|
237
|
+
throw new Error('Browser context is not available');
|
|
238
|
+
}
|
|
239
|
+
const page = await this.context.newPage();
|
|
240
|
+
page.setDefaultTimeout(this.config.timeout);
|
|
241
|
+
page.setDefaultNavigationTimeout(this.config.timeout);
|
|
242
|
+
this.attachPageObservers(page);
|
|
243
|
+
return page;
|
|
244
|
+
}
|
|
245
|
+
createActionContext(page) {
|
|
246
|
+
return {
|
|
247
|
+
page,
|
|
248
|
+
config: this.config,
|
|
249
|
+
resolveLocator: (selector) => this.resolveLocator(page, selector),
|
|
250
|
+
waitForElement: async (selector, options) => {
|
|
251
|
+
const normalized = normalizeSelector(selector);
|
|
252
|
+
const locator = this.resolveLocator(page, normalized);
|
|
253
|
+
await locator.waitFor({
|
|
254
|
+
state: options?.state ?? normalized.state ?? 'visible',
|
|
255
|
+
timeout: options?.timeout ?? normalized.timeout ?? this.config.timeout,
|
|
256
|
+
});
|
|
257
|
+
return locator;
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
resolveLocator(page, selector) {
|
|
262
|
+
const normalized = normalizeSelector(selector);
|
|
263
|
+
const root = normalized.frame ? page.frameLocator(normalized.frame) : page;
|
|
264
|
+
let locator = root.locator(normalized.selector);
|
|
265
|
+
if (normalized.hasText !== undefined) {
|
|
266
|
+
locator = locator.filter({ hasText: normalized.hasText });
|
|
267
|
+
}
|
|
268
|
+
if (normalized.index !== undefined) {
|
|
269
|
+
return locator.nth(normalized.index);
|
|
270
|
+
}
|
|
271
|
+
if (normalized.strict === false) {
|
|
272
|
+
return locator.first();
|
|
273
|
+
}
|
|
274
|
+
return locator;
|
|
275
|
+
}
|
|
276
|
+
async refreshSessionState() {
|
|
277
|
+
if (this.page && !this.page.isClosed()) {
|
|
278
|
+
this.session.currentUrl = this.page.url();
|
|
279
|
+
}
|
|
280
|
+
if (this.context) {
|
|
281
|
+
this.session.cookies = await this.context.cookies();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
createMetadata(action, startedAt, startTime, consoleStart, networkStart, errorScreenshot) {
|
|
285
|
+
const endedAt = new Date();
|
|
286
|
+
return {
|
|
287
|
+
action,
|
|
288
|
+
sessionId: this.session.id,
|
|
289
|
+
currentUrl: this.session.currentUrl,
|
|
290
|
+
executionTime: Date.now() - startTime,
|
|
291
|
+
startedAt: startedAt.toISOString(),
|
|
292
|
+
endedAt: endedAt.toISOString(),
|
|
293
|
+
errorScreenshot,
|
|
294
|
+
consoleLogs: this.session.consoleLogs.slice(consoleStart),
|
|
295
|
+
networkActivity: this.session.networkLogs.slice(networkStart),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
async captureErrorScreenshot(page, action) {
|
|
299
|
+
if (!this.config.screenshotOnError || page.isClosed()) {
|
|
300
|
+
return undefined;
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const output = (await screenshot(this.createActionContext(page), {
|
|
304
|
+
type: 'png',
|
|
305
|
+
}));
|
|
306
|
+
return output.base64
|
|
307
|
+
? `data:image/png;base64,${output.base64}`
|
|
308
|
+
: (output.path ?? `browser-error-${action}.png`);
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
attachPageObservers(page) {
|
|
315
|
+
if (this.config.captureConsole) {
|
|
316
|
+
page.on('console', (message) => {
|
|
317
|
+
this.session.consoleLogs.push(toConsoleMessage(message));
|
|
318
|
+
});
|
|
319
|
+
page.on('pageerror', (error) => {
|
|
320
|
+
this.session.consoleLogs.push({
|
|
321
|
+
type: 'error',
|
|
322
|
+
text: error.message,
|
|
323
|
+
timestamp: new Date(),
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
if (this.config.captureNetwork) {
|
|
328
|
+
const started = new Map();
|
|
329
|
+
page.on('request', (request) => {
|
|
330
|
+
started.set(request, Date.now());
|
|
331
|
+
});
|
|
332
|
+
page.on('response', (response) => {
|
|
333
|
+
const request = response.request();
|
|
334
|
+
const startedAt = started.get(request) ?? Date.now();
|
|
335
|
+
started.delete(request);
|
|
336
|
+
this.session.networkLogs.push({
|
|
337
|
+
url: response.url(),
|
|
338
|
+
method: request.method(),
|
|
339
|
+
status: response.status(),
|
|
340
|
+
responseTime: Date.now() - startedAt,
|
|
341
|
+
timestamp: new Date(),
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
page.on('requestfailed', (request) => {
|
|
345
|
+
const startedAt = started.get(request) ?? Date.now();
|
|
346
|
+
started.delete(request);
|
|
347
|
+
this.session.networkLogs.push({
|
|
348
|
+
url: request.url(),
|
|
349
|
+
method: request.method(),
|
|
350
|
+
status: 0,
|
|
351
|
+
responseTime: Date.now() - startedAt,
|
|
352
|
+
timestamp: new Date(),
|
|
353
|
+
error: request.failure()?.errorText,
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
getBrowserType() {
|
|
359
|
+
switch (this.config.browser) {
|
|
360
|
+
case 'firefox':
|
|
361
|
+
return firefox;
|
|
362
|
+
case 'webkit':
|
|
363
|
+
return webkit;
|
|
364
|
+
case 'chromium':
|
|
365
|
+
default:
|
|
366
|
+
return chromium;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
normalizeAction(action, params) {
|
|
370
|
+
if (typeof action === 'string') {
|
|
371
|
+
return {
|
|
372
|
+
name: action,
|
|
373
|
+
params: params ?? {},
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const request = action;
|
|
377
|
+
const name = request.type ?? request.action;
|
|
378
|
+
if (!name) {
|
|
379
|
+
throw new Error('Browser action must include a type or action field');
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
name: name,
|
|
383
|
+
params: request.params ?? params ?? {},
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function normalizeConfig(config = {}) {
|
|
388
|
+
return {
|
|
389
|
+
...DEFAULT_CONFIG,
|
|
390
|
+
...config,
|
|
391
|
+
viewport: config.viewport ?? DEFAULT_CONFIG.viewport,
|
|
392
|
+
args: [...(config.args ?? DEFAULT_CONFIG.args)],
|
|
393
|
+
captureConsole: config.captureConsole ?? DEFAULT_CONFIG.captureConsole,
|
|
394
|
+
captureNetwork: config.captureNetwork ?? DEFAULT_CONFIG.captureNetwork,
|
|
395
|
+
persistSession: config.persistSession ?? DEFAULT_CONFIG.persistSession,
|
|
396
|
+
screenshotOnError: config.screenshotOnError ?? DEFAULT_CONFIG.screenshotOnError,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
function normalizeSelector(selector) {
|
|
400
|
+
return typeof selector === 'string'
|
|
401
|
+
? {
|
|
402
|
+
selector,
|
|
403
|
+
}
|
|
404
|
+
: selector;
|
|
405
|
+
}
|
|
406
|
+
function toConsoleMessage(message) {
|
|
407
|
+
const location = message.location();
|
|
408
|
+
const locationText = location.url
|
|
409
|
+
? `${location.url}:${location.lineNumber}:${location.columnNumber}`
|
|
410
|
+
: undefined;
|
|
411
|
+
return {
|
|
412
|
+
type: normalizeConsoleType(message.type()),
|
|
413
|
+
text: message.text(),
|
|
414
|
+
timestamp: new Date(),
|
|
415
|
+
location: locationText,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
function normalizeConsoleType(type) {
|
|
419
|
+
switch (type) {
|
|
420
|
+
case 'debug':
|
|
421
|
+
case 'error':
|
|
422
|
+
case 'info':
|
|
423
|
+
case 'log':
|
|
424
|
+
return type;
|
|
425
|
+
case 'warning':
|
|
426
|
+
case 'warn':
|
|
427
|
+
return 'warn';
|
|
428
|
+
default:
|
|
429
|
+
return 'log';
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
function createSessionId() {
|
|
433
|
+
return `browser_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=browser-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../src/browser-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { BrowserClient, type BrowserClientOptions } from './browser-client.js';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './workflow-step.js';
|
|
4
|
+
export * from './mcp-server.js';
|
|
5
|
+
export * from './actions/navigation.js';
|
|
6
|
+
export * from './actions/interaction.js';
|
|
7
|
+
export * from './actions/extraction.js';
|
|
8
|
+
export * from './actions/waits.js';
|
|
9
|
+
export * from './actions/script.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { BrowserClient } from './browser-client.js';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './workflow-step.js';
|
|
4
|
+
export * from './mcp-server.js';
|
|
5
|
+
export * from './actions/navigation.js';
|
|
6
|
+
export * from './actions/interaction.js';
|
|
7
|
+
export * from './actions/extraction.js';
|
|
8
|
+
export * from './actions/waits.js';
|
|
9
|
+
export * from './actions/script.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAC/E,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { BrowserClient } from './browser-client.js';
|
|
3
|
+
import type { BrowserActionName, BrowserActionRequest, BrowserConfig, BrowserSession } from './types.js';
|
|
4
|
+
import { type BrowserStepConfig } from './workflow-step.js';
|
|
5
|
+
export type JsonRpcId = string | number | null;
|
|
6
|
+
export interface JsonRpcRequest {
|
|
7
|
+
jsonrpc: '2.0';
|
|
8
|
+
id?: JsonRpcId;
|
|
9
|
+
method: string;
|
|
10
|
+
params?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface JsonRpcError {
|
|
13
|
+
code: number;
|
|
14
|
+
message: string;
|
|
15
|
+
data?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface JsonRpcResponse {
|
|
18
|
+
jsonrpc: '2.0';
|
|
19
|
+
id: JsonRpcId;
|
|
20
|
+
result?: unknown;
|
|
21
|
+
error?: JsonRpcError;
|
|
22
|
+
}
|
|
23
|
+
export interface BrowserMcpServerOptions {
|
|
24
|
+
stdin?: NodeJS.ReadableStream;
|
|
25
|
+
stdout?: NodeJS.WritableStream;
|
|
26
|
+
stderr?: NodeJS.WritableStream;
|
|
27
|
+
serverName?: string;
|
|
28
|
+
serverVersion?: string;
|
|
29
|
+
defaultConfig?: BrowserConfig;
|
|
30
|
+
}
|
|
31
|
+
export interface BrowserSessionCreateParams {
|
|
32
|
+
config?: BrowserConfig;
|
|
33
|
+
}
|
|
34
|
+
export interface BrowserSessionTargetParams {
|
|
35
|
+
sessionId: string;
|
|
36
|
+
}
|
|
37
|
+
export interface BrowserActionExecuteParams {
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
action: BrowserActionName;
|
|
40
|
+
params?: Record<string, unknown>;
|
|
41
|
+
config?: BrowserConfig;
|
|
42
|
+
}
|
|
43
|
+
export interface BrowserActionsExecuteParams {
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
actions: BrowserActionRequest[];
|
|
46
|
+
config?: BrowserConfig;
|
|
47
|
+
}
|
|
48
|
+
export interface BrowserStepExecuteParams {
|
|
49
|
+
step: BrowserStepConfig;
|
|
50
|
+
workspaceId?: string;
|
|
51
|
+
}
|
|
52
|
+
export declare class BrowserMcpSessionManager {
|
|
53
|
+
private readonly defaultConfig;
|
|
54
|
+
private readonly clients;
|
|
55
|
+
private defaultSessionId?;
|
|
56
|
+
constructor(defaultConfig?: BrowserConfig);
|
|
57
|
+
create(config?: BrowserConfig): Promise<BrowserSession>;
|
|
58
|
+
getOrCreate(sessionId?: string, config?: BrowserConfig): Promise<BrowserClient>;
|
|
59
|
+
get(sessionId: string): BrowserSession;
|
|
60
|
+
list(): BrowserSession[];
|
|
61
|
+
close(sessionId: string): Promise<{
|
|
62
|
+
closed: boolean;
|
|
63
|
+
sessionId: string;
|
|
64
|
+
}>;
|
|
65
|
+
reset(sessionId: string, config?: BrowserConfig): Promise<BrowserSession>;
|
|
66
|
+
closeAll(): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
export declare class BrowserMcpServer {
|
|
69
|
+
private readonly stdin;
|
|
70
|
+
private readonly stdout;
|
|
71
|
+
private readonly stderr;
|
|
72
|
+
private readonly serverName;
|
|
73
|
+
private readonly serverVersion;
|
|
74
|
+
private readonly sessions;
|
|
75
|
+
private readonly stepExecutor;
|
|
76
|
+
private rl?;
|
|
77
|
+
constructor(options?: BrowserMcpServerOptions);
|
|
78
|
+
start(): void;
|
|
79
|
+
handleLine(line: string): Promise<void>;
|
|
80
|
+
handleRequest(request: JsonRpcRequest): Promise<JsonRpcResponse | undefined>;
|
|
81
|
+
shutdown(exitCode?: number): Promise<void>;
|
|
82
|
+
private dispatch;
|
|
83
|
+
private handleToolCall;
|
|
84
|
+
private createSession;
|
|
85
|
+
private getSession;
|
|
86
|
+
private closeSession;
|
|
87
|
+
private resetSession;
|
|
88
|
+
private executeAction;
|
|
89
|
+
private executeActions;
|
|
90
|
+
private executeStep;
|
|
91
|
+
private writeResponse;
|
|
92
|
+
}
|
|
93
|
+
export declare function startBrowserMcpServer(options?: BrowserMcpServerOptions): BrowserMcpServer;
|
|
94
|
+
export declare function getBrowserToolDefinitions(): Array<Record<string, unknown>>;
|
|
95
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|