@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.
Files changed (41) hide show
  1. package/dist/actions/extraction.d.ts +6 -0
  2. package/dist/actions/extraction.d.ts.map +1 -0
  3. package/dist/actions/extraction.js +91 -0
  4. package/dist/actions/extraction.js.map +1 -0
  5. package/dist/actions/interaction.d.ts +17 -0
  6. package/dist/actions/interaction.d.ts.map +1 -0
  7. package/dist/actions/interaction.js +159 -0
  8. package/dist/actions/interaction.js.map +1 -0
  9. package/dist/actions/navigation.d.ts +6 -0
  10. package/dist/actions/navigation.d.ts.map +1 -0
  11. package/dist/actions/navigation.js +37 -0
  12. package/dist/actions/navigation.js.map +1 -0
  13. package/dist/actions/script.d.ts +3 -0
  14. package/dist/actions/script.d.ts.map +1 -0
  15. package/dist/actions/script.js +35 -0
  16. package/dist/actions/script.js.map +1 -0
  17. package/dist/actions/waits.d.ts +5 -0
  18. package/dist/actions/waits.d.ts.map +1 -0
  19. package/dist/actions/waits.js +52 -0
  20. package/dist/actions/waits.js.map +1 -0
  21. package/dist/browser-client.d.ts +41 -0
  22. package/dist/browser-client.d.ts.map +1 -0
  23. package/dist/browser-client.js +435 -0
  24. package/dist/browser-client.js.map +1 -0
  25. package/dist/index.d.ts +10 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +10 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp-server.d.ts +95 -0
  30. package/dist/mcp-server.d.ts.map +1 -0
  31. package/dist/mcp-server.js +434 -0
  32. package/dist/mcp-server.js.map +1 -0
  33. package/dist/types.d.ts +364 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +2 -0
  36. package/dist/types.js.map +1 -0
  37. package/dist/workflow-step.d.ts +99 -0
  38. package/dist/workflow-step.d.ts.map +1 -0
  39. package/dist/workflow-step.js +419 -0
  40. package/dist/workflow-step.js.map +1 -0
  41. 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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"}
@@ -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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"}