@mastra/agent-browser 0.2.1 → 0.2.2
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/CHANGELOG.md +34 -0
- package/dist/index.cjs +72 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +51 -23
- package/dist/index.d.ts +51 -23
- package/dist/index.js +72 -2
- package/dist/index.js.map +1 -1
- package/package.json +7 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @mastra/agent-browser
|
|
2
2
|
|
|
3
|
+
## 0.2.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Added `screenshot` tool to `@mastra/stagehand` (`stagehand_screenshot`) and `@mastra/agent-browser` (`browser_screenshot`). Captures a PNG screenshot and returns image content for vision-capable models. ([#16074](https://github.com/mastra-ai/mastra/pull/16074))
|
|
8
|
+
|
|
9
|
+
Added `excludeTools` config option to opt out of specific tools:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const browser = new StagehandBrowser({
|
|
13
|
+
excludeTools: ['stagehand_screenshot'],
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [[`9f17410`](https://github.com/mastra-ai/mastra/commit/9f1741080def23d42ee50b39887a385ae316a3c6), [`7ad5585`](https://github.com/mastra-ai/mastra/commit/7ad55856406f1de398dc713f6a9eaa78b2784bb6), [`ac47842`](https://github.com/mastra-ai/mastra/commit/ac478427aa7a5f5fdaed633a911218689b438c60), [`cc189cc`](https://github.com/mastra-ai/mastra/commit/cc189cc0128eb7af233476b5e421ec6888bffde7), [`d1fdbd0`](https://github.com/mastra-ai/mastra/commit/d1fdbd012add5623cb7e6b7f882b605ab358bbb4), [`210ea7a`](https://github.com/mastra-ai/mastra/commit/210ea7af559791b73a44fc9c12179908aaa3183f), [`7c275a8`](https://github.com/mastra-ai/mastra/commit/7c275a810595e1a6c41ccc39720531ab65734700), [`bae019e`](https://github.com/mastra-ai/mastra/commit/bae019ecb6694da96909f7ec7b9eb3a0a33aa887), [`890b24c`](https://github.com/mastra-ai/mastra/commit/890b24cc7d32ed6aa4dfe253e54dc6bf4099f690), [`f984b4d`](https://github.com/mastra-ai/mastra/commit/f984b4d6c60bf2ae2a9b156f0e8c35a66fe96c91), [`6742347`](https://github.com/mastra-ai/mastra/commit/6742347d71955d7639adc9ddf6ff8282de7ee3ba), [`b59316f`](https://github.com/mastra-ai/mastra/commit/b59316ffa0f7688165b0f9c81ccdf85da461e5b2), [`0f48ebf`](https://github.com/mastra-ai/mastra/commit/0f48ebfc7ac7897b2092a189f45751924cf56d1c), [`37c0dc5`](https://github.com/mastra-ai/mastra/commit/37c0dc5697d343db98628bf867bf71ce6deec6d7), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`83218c8`](https://github.com/mastra-ai/mastra/commit/83218c88b37773c9424fbe733b37be556e55e94d), [`ef6b584`](https://github.com/mastra-ai/mastra/commit/ef6b5847ac33c0a7e80af3a86e8801e2933dd3ee), [`c6eb39e`](https://github.com/mastra-ai/mastra/commit/c6eb39ea6dca381c6563cb240237fbe608e02f93), [`7b0ad1f`](https://github.com/mastra-ai/mastra/commit/7b0ad1f5c53dc118c6da12ae82ae2587037dc2b8), [`d91ebe2`](https://github.com/mastra-ai/mastra/commit/d91ebe28ee065d8f2ed6df741c3c07f58d359529), [`62666c3`](https://github.com/mastra-ai/mastra/commit/62666c367eaeac3941ead454b1d38810cc855721), [`33f5061`](https://github.com/mastra-ai/mastra/commit/33f5061cd1c0335020c3faae61ce96de822854fa), [`4af2160`](https://github.com/mastra-ai/mastra/commit/4af2160322f4718cac421930cce85641e9512389), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`265ec9f`](https://github.com/mastra-ai/mastra/commit/265ec9f887b5c81255c873a76ff7796f16e4f99b), [`ce01024`](https://github.com/mastra-ai/mastra/commit/ce010242eee9bdfc09e4c26725b9d37998679a8d), [`6ce80bf`](https://github.com/mastra-ai/mastra/commit/6ce80bf4872a891e0bddf8b80561a80584efb14b), [`f984b4d`](https://github.com/mastra-ai/mastra/commit/f984b4d6c60bf2ae2a9b156f0e8c35a66fe96c91), [`136c959`](https://github.com/mastra-ai/mastra/commit/136c9592fb0eeb0cd212f28629d8a29b7557a2fc), [`9268531`](https://github.com/mastra-ai/mastra/commit/9268531e7ec4be98beeba3b3ae8be0a7ea380662), [`13ead79`](https://github.com/mastra-ai/mastra/commit/13ead79149486b88144db7e11e6ff551caef5be1), [`dccd8f1`](https://github.com/mastra-ai/mastra/commit/dccd8f1f8b8f1ad203b77556207e5529567c616d), [`4df7cc7`](https://github.com/mastra-ai/mastra/commit/4df7cc79342fd065fe7fdeef93c094db14b12bcd), [`f180e49`](https://github.com/mastra-ai/mastra/commit/f180e4990e71b04c9a475b523584071712f0048f), [`9260e01`](https://github.com/mastra-ai/mastra/commit/9260e015276fb1b500f7878ee452b47476bf1583), [`2f6c54e`](https://github.com/mastra-ai/mastra/commit/2f6c54e17c041cac1def54baaa6b771647836414), [`aca3121`](https://github.com/mastra-ai/mastra/commit/aca31211233dac25459f140ea4fcfb3a5af64c18), [`e06a159`](https://github.com/mastra-ai/mastra/commit/e06a1598ca07a6c3778aefc2a2d288363c6294ff), [`4dd900d`](https://github.com/mastra-ai/mastra/commit/4dd900d75dfe9be89f8c15188b368a8622aa1e18), [`b560d6f`](https://github.com/mastra-ai/mastra/commit/b560d6f88b9b904b15c10f75c949eb145bc27684), [`99869ec`](https://github.com/mastra-ai/mastra/commit/99869ecb1f2aa6dfcc44fa4e843e5ee0344efa64), [`900d086`](https://github.com/mastra-ai/mastra/commit/900d086bb737b9cf2fcf68f11b0389b801a2738c), [`4c0e286`](https://github.com/mastra-ai/mastra/commit/4c0e28637c9cfb4f416549b55e97ebfa13319dfc), [`55f1e2d`](https://github.com/mastra-ai/mastra/commit/55f1e2d65425b95a49ae788053b266f256e38c96), [`4ff5bdf`](https://github.com/mastra-ai/mastra/commit/4ff5bdfe170cba6dfb5260c6af0f4ba668430772), [`9cdf38e`](https://github.com/mastra-ai/mastra/commit/9cdf38e58506e1109c8b38f97cd7770978a4218e), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`db34bc6`](https://github.com/mastra-ai/mastra/commit/db34bc6fb36cf125bda0c46be4d3fdc774b70cc4), [`990851e`](https://github.com/mastra-ai/mastra/commit/990851edcb0e30be5c2c18b6532f1a876cc2d335), [`bbcd93c`](https://github.com/mastra-ai/mastra/commit/bbcd93cf7d8aa1007d6d84bfd033b8015c912087), [`8373ff4`](https://github.com/mastra-ai/mastra/commit/8373ff46745d77af79f183c4470f80fa2727a6b2), [`d48a705`](https://github.com/mastra-ai/mastra/commit/d48a705ff3dfbdc7a996e07ecd8293b5effd9a2a), [`308bd07`](https://github.com/mastra-ai/mastra/commit/308bd074f35cef0c75d82fc1eb19382fe04ecf6f), [`6068a6c`](https://github.com/mastra-ai/mastra/commit/6068a6c42950fad3ebfc92346417896ba60803d2), [`36b3bbf`](https://github.com/mastra-ai/mastra/commit/36b3bbf5a8d59f7e23d47e29340e76c681b4929c), [`d86f031`](https://github.com/mastra-ai/mastra/commit/d86f031eb6b0b2570145afafea664e59bf688962), [`b275631`](https://github.com/mastra-ai/mastra/commit/b275631dc10541a482b2e2d4a3e3cfa843bd5fa1), [`00106be`](https://github.com/mastra-ai/mastra/commit/00106bede59b81e5b0e9cd6aad8d3b5dbc336387), [`bd36d8e`](https://github.com/mastra-ai/mastra/commit/bd36d8eb6de8c9a0310352649dbd4b06703c2299), [`11c1528`](https://github.com/mastra-ai/mastra/commit/11c152848c5d0ef227184853b5040f5b41ee7b1e), [`4999667`](https://github.com/mastra-ai/mastra/commit/49996678b68356cad7f088430009690406c50fbd), [`e2a079c`](https://github.com/mastra-ai/mastra/commit/e2a079cc3755b1895f7bd5dc36e9be81b11c7c22), [`8ac9141`](https://github.com/mastra-ai/mastra/commit/8ac9141439caa8fdd674944c4d84f29b3c730296), [`25184ff`](https://github.com/mastra-ai/mastra/commit/25184ffaf1293ec95119426eb1a1f8d38831b96c), [`534a456`](https://github.com/mastra-ai/mastra/commit/534a456a25e4df1e5407e7e632f4cb3b1fa14f9d), [`105e454`](https://github.com/mastra-ai/mastra/commit/105e454c95af06a7c741c15969d8f9b0f02463a7), [`aebde9c`](https://github.com/mastra-ai/mastra/commit/aebde9cfacf56592c6b6350cae721740fe090b8a), [`36bae07`](https://github.com/mastra-ai/mastra/commit/36bae07c0e70b1b3006f2fd20830e8883dcbd066), [`5688881`](https://github.com/mastra-ai/mastra/commit/5688881669c7ed157f31ac77f6fc5f8d95ceea32)]:
|
|
18
|
+
- @mastra/core@1.33.0
|
|
19
|
+
|
|
20
|
+
## 0.2.2-alpha.0
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Added `screenshot` tool to `@mastra/stagehand` (`stagehand_screenshot`) and `@mastra/agent-browser` (`browser_screenshot`). Captures a PNG screenshot and returns image content for vision-capable models. ([#16074](https://github.com/mastra-ai/mastra/pull/16074))
|
|
25
|
+
|
|
26
|
+
Added `excludeTools` config option to opt out of specific tools:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
const browser = new StagehandBrowser({
|
|
30
|
+
excludeTools: ['stagehand_screenshot'],
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- Updated dependencies [[`b59316f`](https://github.com/mastra-ai/mastra/commit/b59316ffa0f7688165b0f9c81ccdf85da461e5b2), [`55f1e2d`](https://github.com/mastra-ai/mastra/commit/55f1e2d65425b95a49ae788053b266f256e38c96), [`d48a705`](https://github.com/mastra-ai/mastra/commit/d48a705ff3dfbdc7a996e07ecd8293b5effd9a2a)]:
|
|
35
|
+
- @mastra/core@1.33.0-alpha.12
|
|
36
|
+
|
|
3
37
|
## 0.2.1
|
|
4
38
|
|
|
5
39
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -220,6 +220,9 @@ var dragInputSchema = zod.z.object({
|
|
|
220
220
|
});
|
|
221
221
|
}
|
|
222
222
|
});
|
|
223
|
+
var screenshotInputSchema = zod.z.object({
|
|
224
|
+
fullPage: zod.z.boolean().optional().describe("Capture the full scrollable page instead of just the viewport (default: false)")
|
|
225
|
+
});
|
|
223
226
|
var evaluateInputSchema = zod.z.object({
|
|
224
227
|
script: zod.z.string().describe(
|
|
225
228
|
"JavaScript expression to evaluate in the browser and return the result. Do not use `return` \u2014 write a bare expression like `document.title` or `1 + 1`. For async code, wrap in an async IIFE: `(async () => { ... })()`."
|
|
@@ -243,6 +246,8 @@ var browserSchemas = {
|
|
|
243
246
|
wait: waitInputSchema,
|
|
244
247
|
tabs: tabsInputSchema,
|
|
245
248
|
drag: dragInputSchema,
|
|
249
|
+
// Utility
|
|
250
|
+
screenshot: screenshotInputSchema,
|
|
246
251
|
// Escape hatch
|
|
247
252
|
evaluate: evaluateInputSchema
|
|
248
253
|
};
|
|
@@ -265,6 +270,8 @@ var BROWSER_TOOLS = {
|
|
|
265
270
|
WAIT: "browser_wait",
|
|
266
271
|
TABS: "browser_tabs",
|
|
267
272
|
DRAG: "browser_drag",
|
|
273
|
+
// Utility
|
|
274
|
+
SCREENSHOT: "browser_screenshot",
|
|
268
275
|
// Escape hatch
|
|
269
276
|
EVALUATE: "browser_evaluate"
|
|
270
277
|
};
|
|
@@ -393,6 +400,38 @@ function createPressTool(browser) {
|
|
|
393
400
|
}
|
|
394
401
|
});
|
|
395
402
|
}
|
|
403
|
+
function createScreenshotTool(browser) {
|
|
404
|
+
return tools.createTool({
|
|
405
|
+
id: BROWSER_TOOLS.SCREENSHOT,
|
|
406
|
+
description: "Capture a screenshot of the current viewport as a visible PNG (set fullPage: true for full-page capture). Use snapshot when you only need text or interactive elements \u2014 screenshots are expensive. Use this when you need to visually inspect the page, e.g. evaluating images, product photos, layout, design, or colors.",
|
|
407
|
+
inputSchema: screenshotInputSchema,
|
|
408
|
+
execute: async (input, { agent }) => {
|
|
409
|
+
const threadId = agent?.threadId;
|
|
410
|
+
browser.setCurrentThread(threadId);
|
|
411
|
+
await browser.ensureReady();
|
|
412
|
+
return await browser.screenshot(input, threadId);
|
|
413
|
+
},
|
|
414
|
+
toModelOutput(output) {
|
|
415
|
+
const result = output;
|
|
416
|
+
if (typeof result.base64 !== "string") {
|
|
417
|
+
return {
|
|
418
|
+
type: "content",
|
|
419
|
+
value: [{ type: "text", text: result.message ?? "Failed to capture screenshot." }]
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
return {
|
|
423
|
+
type: "content",
|
|
424
|
+
value: [
|
|
425
|
+
{
|
|
426
|
+
type: "media",
|
|
427
|
+
mediaType: "image/png",
|
|
428
|
+
data: result.base64
|
|
429
|
+
}
|
|
430
|
+
]
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
}
|
|
396
435
|
function createScrollTool(browser) {
|
|
397
436
|
return tools.createTool({
|
|
398
437
|
id: BROWSER_TOOLS.SCROLL,
|
|
@@ -484,6 +523,8 @@ function createAgentBrowserTools(browser) {
|
|
|
484
523
|
[BROWSER_TOOLS.SELECT]: createSelectTool(browser),
|
|
485
524
|
[BROWSER_TOOLS.SCROLL]: createScrollTool(browser),
|
|
486
525
|
[BROWSER_TOOLS.CLOSE]: createCloseTool(browser),
|
|
526
|
+
// Utility
|
|
527
|
+
[BROWSER_TOOLS.SCREENSHOT]: createScreenshotTool(browser),
|
|
487
528
|
// Extended
|
|
488
529
|
[BROWSER_TOOLS.HOVER]: createHoverTool(browser),
|
|
489
530
|
[BROWSER_TOOLS.BACK]: createBackTool(browser),
|
|
@@ -526,8 +567,10 @@ var AgentBrowser = class extends browser.MastraBrowser {
|
|
|
526
567
|
defaultTimeout = 3e4;
|
|
527
568
|
/** Pending PID lookups — awaited in disconnect handlers to avoid racing. */
|
|
528
569
|
pidLookups = /* @__PURE__ */ new Set();
|
|
570
|
+
browserConfig;
|
|
529
571
|
constructor(config = {}) {
|
|
530
572
|
super(config);
|
|
573
|
+
this.browserConfig = config;
|
|
531
574
|
this.id = `agent-browser-${Date.now()}`;
|
|
532
575
|
if (config.timeout) {
|
|
533
576
|
this.defaultTimeout = config.timeout;
|
|
@@ -690,10 +733,17 @@ var AgentBrowser = class extends browser.MastraBrowser {
|
|
|
690
733
|
// ---------------------------------------------------------------------------
|
|
691
734
|
/**
|
|
692
735
|
* Get the browser tools for this provider.
|
|
693
|
-
* Returns
|
|
736
|
+
* Returns 16 flat tools for browser automation.
|
|
694
737
|
*/
|
|
695
738
|
getTools() {
|
|
696
|
-
|
|
739
|
+
const tools = createAgentBrowserTools(this);
|
|
740
|
+
const exclude = this.browserConfig.excludeTools;
|
|
741
|
+
if (exclude?.length) {
|
|
742
|
+
for (const name of exclude) {
|
|
743
|
+
delete tools[name];
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
return tools;
|
|
697
747
|
}
|
|
698
748
|
// ---------------------------------------------------------------------------
|
|
699
749
|
// Helpers
|
|
@@ -1006,6 +1056,26 @@ var AgentBrowser = class extends browser.MastraBrowser {
|
|
|
1006
1056
|
}
|
|
1007
1057
|
}
|
|
1008
1058
|
// ---------------------------------------------------------------------------
|
|
1059
|
+
// browser_screenshot - Capture a screenshot of the current page
|
|
1060
|
+
// ---------------------------------------------------------------------------
|
|
1061
|
+
async screenshot(input, threadId) {
|
|
1062
|
+
try {
|
|
1063
|
+
const page = await this.getPage(threadId);
|
|
1064
|
+
const buffer = await page.screenshot({
|
|
1065
|
+
fullPage: input.fullPage ?? false,
|
|
1066
|
+
type: "png"
|
|
1067
|
+
});
|
|
1068
|
+
const base64 = Buffer.from(buffer).toString("base64");
|
|
1069
|
+
return {
|
|
1070
|
+
base64,
|
|
1071
|
+
url: page.url(),
|
|
1072
|
+
title: await page.title()
|
|
1073
|
+
};
|
|
1074
|
+
} catch (error) {
|
|
1075
|
+
return this.createErrorFromException(error, "Screenshot");
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
// ---------------------------------------------------------------------------
|
|
1009
1079
|
// 3. browser_click - Click on element
|
|
1010
1080
|
// ---------------------------------------------------------------------------
|
|
1011
1081
|
async click(input, threadId) {
|