@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 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 17 flat tools for browser automation.
736
+ * Returns 16 flat tools for browser automation.
694
737
  */
695
738
  getTools() {
696
- return createAgentBrowserTools(this);
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) {