@framers/agentos-ext-browser-automation 0.1.0 → 0.2.1

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 (113) hide show
  1. package/README.md +80 -0
  2. package/dist/BrowserService.js +9 -45
  3. package/dist/BrowserService.js.map +1 -1
  4. package/dist/attach/AttachController.d.ts +183 -0
  5. package/dist/attach/AttachController.d.ts.map +1 -0
  6. package/dist/attach/AttachController.js +286 -0
  7. package/dist/attach/AttachController.js.map +1 -0
  8. package/dist/attach/backends/jxa.d.ts +39 -0
  9. package/dist/attach/backends/jxa.d.ts.map +1 -0
  10. package/dist/attach/backends/jxa.js +155 -0
  11. package/dist/attach/backends/jxa.js.map +1 -0
  12. package/dist/attach/backends/raw-cdp.d.ts +53 -0
  13. package/dist/attach/backends/raw-cdp.d.ts.map +1 -0
  14. package/dist/attach/backends/raw-cdp.js +213 -0
  15. package/dist/attach/backends/raw-cdp.js.map +1 -0
  16. package/dist/attach/daemon/client.d.ts +64 -0
  17. package/dist/attach/daemon/client.d.ts.map +1 -0
  18. package/dist/attach/daemon/client.js +120 -0
  19. package/dist/attach/daemon/client.js.map +1 -0
  20. package/dist/attach/daemon/daemon-lock.d.ts +19 -0
  21. package/dist/attach/daemon/daemon-lock.d.ts.map +1 -0
  22. package/dist/attach/daemon/daemon-lock.js +84 -0
  23. package/dist/attach/daemon/daemon-lock.js.map +1 -0
  24. package/dist/attach/daemon/daemon-main.d.ts +17 -0
  25. package/dist/attach/daemon/daemon-main.d.ts.map +1 -0
  26. package/dist/attach/daemon/daemon-main.js +99 -0
  27. package/dist/attach/daemon/daemon-main.js.map +1 -0
  28. package/dist/attach/daemon/daemon.d.ts +52 -0
  29. package/dist/attach/daemon/daemon.d.ts.map +1 -0
  30. package/dist/attach/daemon/daemon.js +273 -0
  31. package/dist/attach/daemon/daemon.js.map +1 -0
  32. package/dist/attach/daemon/index.d.ts +12 -0
  33. package/dist/attach/daemon/index.d.ts.map +1 -0
  34. package/dist/attach/daemon/index.js +12 -0
  35. package/dist/attach/daemon/index.js.map +1 -0
  36. package/dist/attach/daemon/protocol.d.ts +69 -0
  37. package/dist/attach/daemon/protocol.d.ts.map +1 -0
  38. package/dist/attach/daemon/protocol.js +96 -0
  39. package/dist/attach/daemon/protocol.js.map +1 -0
  40. package/dist/attach/daemon/runner.d.ts +64 -0
  41. package/dist/attach/daemon/runner.d.ts.map +1 -0
  42. package/dist/attach/daemon/runner.js +57 -0
  43. package/dist/attach/daemon/runner.js.map +1 -0
  44. package/dist/attach/daemon/surface.d.ts +31 -0
  45. package/dist/attach/daemon/surface.d.ts.map +1 -0
  46. package/dist/attach/daemon/surface.js +87 -0
  47. package/dist/attach/daemon/surface.js.map +1 -0
  48. package/dist/attach/devtools-port.d.ts +37 -0
  49. package/dist/attach/devtools-port.d.ts.map +1 -0
  50. package/dist/attach/devtools-port.js +47 -0
  51. package/dist/attach/devtools-port.js.map +1 -0
  52. package/dist/attach/errors.d.ts +38 -0
  53. package/dist/attach/errors.d.ts.map +1 -0
  54. package/dist/attach/errors.js +67 -0
  55. package/dist/attach/errors.js.map +1 -0
  56. package/dist/attach/lease.d.ts +43 -0
  57. package/dist/attach/lease.d.ts.map +1 -0
  58. package/dist/attach/lease.js +87 -0
  59. package/dist/attach/lease.js.map +1 -0
  60. package/dist/attach/singleton-lock.d.ts +21 -0
  61. package/dist/attach/singleton-lock.d.ts.map +1 -0
  62. package/dist/attach/singleton-lock.js +27 -0
  63. package/dist/attach/singleton-lock.js.map +1 -0
  64. package/dist/attach/state.d.ts +31 -0
  65. package/dist/attach/state.d.ts.map +1 -0
  66. package/dist/attach/state.js +71 -0
  67. package/dist/attach/state.js.map +1 -0
  68. package/dist/attach/tools.d.ts +208 -0
  69. package/dist/attach/tools.d.ts.map +1 -0
  70. package/dist/attach/tools.js +191 -0
  71. package/dist/attach/tools.js.map +1 -0
  72. package/dist/attach/url-policy.d.ts +41 -0
  73. package/dist/attach/url-policy.d.ts.map +1 -0
  74. package/dist/attach/url-policy.js +55 -0
  75. package/dist/attach/url-policy.js.map +1 -0
  76. package/dist/attach.d.ts +18 -0
  77. package/dist/attach.d.ts.map +1 -0
  78. package/dist/attach.js +18 -0
  79. package/dist/attach.js.map +1 -0
  80. package/dist/captcha/CaptchaSolver.js +4 -7
  81. package/dist/captcha/CaptchaSolver.js.map +1 -1
  82. package/dist/captcha/ICaptchaProvider.js +1 -2
  83. package/dist/captcha/ICaptchaProvider.js.map +1 -1
  84. package/dist/index.d.ts +30 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +73 -65
  87. package/dist/index.js.map +1 -1
  88. package/dist/proxy/IProxyProvider.js +1 -2
  89. package/dist/proxy/IProxyProvider.js.map +1 -1
  90. package/dist/proxy/ProxyManager.js +7 -10
  91. package/dist/proxy/ProxyManager.js.map +1 -1
  92. package/dist/tools/ClickTool.js +17 -20
  93. package/dist/tools/ClickTool.js.map +1 -1
  94. package/dist/tools/EvaluateTool.js +16 -19
  95. package/dist/tools/EvaluateTool.js.map +1 -1
  96. package/dist/tools/ExtractTool.js +23 -26
  97. package/dist/tools/ExtractTool.js.map +1 -1
  98. package/dist/tools/FillTool.js +17 -20
  99. package/dist/tools/FillTool.js.map +1 -1
  100. package/dist/tools/NavigateTool.js +31 -34
  101. package/dist/tools/NavigateTool.js.map +1 -1
  102. package/dist/tools/PageSnapshotTool.js +13 -16
  103. package/dist/tools/PageSnapshotTool.js.map +1 -1
  104. package/dist/tools/ScreenshotTool.js +16 -19
  105. package/dist/tools/ScreenshotTool.js.map +1 -1
  106. package/dist/tools/ScrollTool.js +17 -20
  107. package/dist/tools/ScrollTool.js.map +1 -1
  108. package/dist/tools/SessionTool.js +24 -27
  109. package/dist/tools/SessionTool.js.map +1 -1
  110. package/dist/tools/WaitTool.js +22 -25
  111. package/dist/tools/WaitTool.js.map +1 -1
  112. package/manifest.json +1 -1
  113. package/package.json +23 -7
@@ -1,24 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClickTool = void 0;
4
- class ClickTool {
1
+ export class ClickTool {
2
+ browser;
3
+ id = 'browserClick';
4
+ name = 'browserClick';
5
+ displayName = 'Click Element';
6
+ description = 'Click an element on the page by CSS selector, text content, or ARIA role.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ selector: { type: 'string', description: 'CSS selector of the element to click' },
14
+ text: { type: 'string', description: 'Text content of the element to click' },
15
+ role: { type: 'string', description: 'ARIA role of the element (e.g., "button", "link")' },
16
+ },
17
+ };
5
18
  constructor(browser) {
6
19
  this.browser = browser;
7
- this.id = 'browserClick';
8
- this.name = 'browserClick';
9
- this.displayName = 'Click Element';
10
- this.description = 'Click an element on the page by CSS selector, text content, or ARIA role.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- selector: { type: 'string', description: 'CSS selector of the element to click' },
18
- text: { type: 'string', description: 'Text content of the element to click' },
19
- role: { type: 'string', description: 'ARIA role of the element (e.g., "button", "link")' },
20
- },
21
- };
22
20
  }
23
21
  async execute(args) {
24
22
  try {
@@ -30,5 +28,4 @@ class ClickTool {
30
28
  }
31
29
  }
32
30
  }
33
- exports.ClickTool = ClickTool;
34
31
  //# sourceMappingURL=ClickTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClickTool.js","sourceRoot":"","sources":["../../src/tools/ClickTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,SAAS;IAkBpB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAjBlC,OAAE,GAAG,cAAc,CAAC;QACpB,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GAAG,eAAe,CAAC;QAC9B,gBAAW,GAAG,2EAA2E,CAAC;QAC1F,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;gBACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;gBAC7E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;aAC3F;SACF,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAyD;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA5BD,8BA4BC"}
1
+ {"version":3,"file":"ClickTool.js","sourceRoot":"","sources":["../../src/tools/ClickTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IAkBA;IAjBX,EAAE,GAAG,cAAc,CAAC;IACpB,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,eAAe,CAAC;IAC9B,WAAW,GAAG,2EAA2E,CAAC;IAC1F,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;YACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;YAC7E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;SAC3F;KACF,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAyD;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,23 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EvaluateTool = void 0;
4
- class EvaluateTool {
1
+ export class EvaluateTool {
2
+ browser;
3
+ id = 'browserEvaluate';
4
+ name = 'browserEvaluate';
5
+ displayName = 'Evaluate JavaScript';
6
+ description = 'Execute arbitrary JavaScript code in the browser page context and return the result.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ script: { type: 'string', description: 'JavaScript code to evaluate in the page context' },
14
+ },
15
+ required: ['script'],
16
+ };
5
17
  constructor(browser) {
6
18
  this.browser = browser;
7
- this.id = 'browserEvaluate';
8
- this.name = 'browserEvaluate';
9
- this.displayName = 'Evaluate JavaScript';
10
- this.description = 'Execute arbitrary JavaScript code in the browser page context and return the result.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- script: { type: 'string', description: 'JavaScript code to evaluate in the page context' },
18
- },
19
- required: ['script'],
20
- };
21
19
  }
22
20
  async execute(args) {
23
21
  try {
@@ -29,5 +27,4 @@ class EvaluateTool {
29
27
  }
30
28
  }
31
29
  }
32
- exports.EvaluateTool = EvaluateTool;
33
30
  //# sourceMappingURL=EvaluateTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluateTool.js","sourceRoot":"","sources":["../../src/tools/EvaluateTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAiBvB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAhBlC,OAAE,GAAG,iBAAiB,CAAC;QACvB,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,qBAAqB,CAAC;QACpC,gBAAW,GAAG,sFAAsF,CAAC;QACrG,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;aAC3F;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAwB;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA3BD,oCA2BC"}
1
+ {"version":3,"file":"EvaluateTool.js","sourceRoot":"","sources":["../../src/tools/EvaluateTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IAiBH;IAhBX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,qBAAqB,CAAC;IACpC,WAAW,GAAG,sFAAsF,CAAC;IACrG,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;SAC3F;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAwB;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,30 +1,28 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExtractTool = void 0;
4
- class ExtractTool {
1
+ export class ExtractTool {
2
+ browser;
3
+ id = 'browserExtract';
4
+ name = 'browserExtract';
5
+ displayName = 'Extract Content';
6
+ description = 'Extract text, HTML, or an attribute value from a DOM element matching the given selector.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ selector: { type: 'string', description: 'CSS selector of the element to extract from' },
14
+ mode: {
15
+ type: 'string',
16
+ enum: ['text', 'html', 'attribute'],
17
+ description: 'Extraction mode: "text" for visible text, "html" for innerHTML, "attribute" for a specific attribute',
18
+ default: 'text',
19
+ },
20
+ attribute: { type: 'string', description: 'Attribute name to extract (only used when mode is "attribute")' },
21
+ },
22
+ required: ['selector'],
23
+ };
5
24
  constructor(browser) {
6
25
  this.browser = browser;
7
- this.id = 'browserExtract';
8
- this.name = 'browserExtract';
9
- this.displayName = 'Extract Content';
10
- this.description = 'Extract text, HTML, or an attribute value from a DOM element matching the given selector.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = false;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- selector: { type: 'string', description: 'CSS selector of the element to extract from' },
18
- mode: {
19
- type: 'string',
20
- enum: ['text', 'html', 'attribute'],
21
- description: 'Extraction mode: "text" for visible text, "html" for innerHTML, "attribute" for a specific attribute',
22
- default: 'text',
23
- },
24
- attribute: { type: 'string', description: 'Attribute name to extract (only used when mode is "attribute")' },
25
- },
26
- required: ['selector'],
27
- };
28
26
  }
29
27
  async execute(args) {
30
28
  try {
@@ -36,5 +34,4 @@ class ExtractTool {
36
34
  }
37
35
  }
38
36
  }
39
- exports.ExtractTool = ExtractTool;
40
37
  //# sourceMappingURL=ExtractTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExtractTool.js","sourceRoot":"","sources":["../../src/tools/ExtractTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAwBtB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAvBlC,OAAE,GAAG,gBAAgB,CAAC;QACtB,SAAI,GAAG,gBAAgB,CAAC;QACxB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,gBAAW,GAAG,2FAA2F,CAAC;QAC1G,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QAEvB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;gBACxF,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;oBACnC,WAAW,EAAE,sGAAsG;oBACnH,OAAO,EAAE,MAAM;iBAChB;gBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;aAC7G;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAoF;QAChG,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAlCD,kCAkCC"}
1
+ {"version":3,"file":"ExtractTool.js","sourceRoot":"","sources":["../../src/tools/ExtractTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IAwBF;IAvBX,EAAE,GAAG,gBAAgB,CAAC;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,iBAAiB,CAAC;IAChC,WAAW,GAAG,2FAA2F,CAAC;IAC1G,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACxF,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;gBACnC,WAAW,EAAE,sGAAsG;gBACnH,OAAO,EAAE,MAAM;aAChB;YACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;SAC7G;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAoF;QAChG,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,24 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FillTool = void 0;
4
- class FillTool {
1
+ export class FillTool {
2
+ browser;
3
+ id = 'browserFill';
4
+ name = 'browserFill';
5
+ displayName = 'Fill Input';
6
+ description = 'Fill a form input field with the specified value. Clears existing content first.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ selector: { type: 'string', description: 'CSS selector of the input element' },
14
+ value: { type: 'string', description: 'Value to fill into the input' },
15
+ },
16
+ required: ['selector', 'value'],
17
+ };
5
18
  constructor(browser) {
6
19
  this.browser = browser;
7
- this.id = 'browserFill';
8
- this.name = 'browserFill';
9
- this.displayName = 'Fill Input';
10
- this.description = 'Fill a form input field with the specified value. Clears existing content first.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- selector: { type: 'string', description: 'CSS selector of the input element' },
18
- value: { type: 'string', description: 'Value to fill into the input' },
19
- },
20
- required: ['selector', 'value'],
21
- };
22
20
  }
23
21
  async execute(args) {
24
22
  try {
@@ -30,5 +28,4 @@ class FillTool {
30
28
  }
31
29
  }
32
30
  }
33
- exports.FillTool = FillTool;
34
31
  //# sourceMappingURL=FillTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FillTool.js","sourceRoot":"","sources":["../../src/tools/FillTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,QAAQ;IAkBnB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAjBlC,OAAE,GAAG,aAAa,CAAC;QACnB,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,YAAY,CAAC;QAC3B,gBAAW,GAAG,kFAAkF,CAAC;QACjG,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBAC9E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;aACvE;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;SAChC,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAyC;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA5BD,4BA4BC"}
1
+ {"version":3,"file":"FillTool.js","sourceRoot":"","sources":["../../src/tools/FillTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,QAAQ;IAkBC;IAjBX,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,YAAY,CAAC;IAC3B,WAAW,GAAG,kFAAkF,CAAC;IACjG,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;YAC9E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;SACvE;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;KAChC,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAyC;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,38 +1,36 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NavigateTool = void 0;
4
- class NavigateTool {
1
+ export class NavigateTool {
2
+ browser;
3
+ id = 'browserNavigate';
4
+ name = 'browserNavigate';
5
+ displayName = 'Navigate to URL';
6
+ description = 'Navigate the browser to a URL and return the page title, status code, and load time.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ url: { type: 'string', description: 'The URL to navigate to' },
14
+ waitUntil: {
15
+ type: 'string',
16
+ enum: ['domcontentloaded', 'load', 'networkidle'],
17
+ description: 'When to consider navigation complete',
18
+ default: 'domcontentloaded',
19
+ },
20
+ },
21
+ required: ['url'],
22
+ };
23
+ outputSchema = {
24
+ type: 'object',
25
+ properties: {
26
+ url: { type: 'string' },
27
+ title: { type: 'string' },
28
+ status: { type: 'number' },
29
+ loadTimeMs: { type: 'number' },
30
+ },
31
+ };
5
32
  constructor(browser) {
6
33
  this.browser = browser;
7
- this.id = 'browserNavigate';
8
- this.name = 'browserNavigate';
9
- this.displayName = 'Navigate to URL';
10
- this.description = 'Navigate the browser to a URL and return the page title, status code, and load time.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- url: { type: 'string', description: 'The URL to navigate to' },
18
- waitUntil: {
19
- type: 'string',
20
- enum: ['domcontentloaded', 'load', 'networkidle'],
21
- description: 'When to consider navigation complete',
22
- default: 'domcontentloaded',
23
- },
24
- },
25
- required: ['url'],
26
- };
27
- this.outputSchema = {
28
- type: 'object',
29
- properties: {
30
- url: { type: 'string' },
31
- title: { type: 'string' },
32
- status: { type: 'number' },
33
- loadTimeMs: { type: 'number' },
34
- },
35
- };
36
34
  }
37
35
  async execute(args) {
38
36
  try {
@@ -44,5 +42,4 @@ class NavigateTool {
44
42
  }
45
43
  }
46
44
  }
47
- exports.NavigateTool = NavigateTool;
48
45
  //# sourceMappingURL=NavigateTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigateTool.js","sourceRoot":"","sources":["../../src/tools/NavigateTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAiCvB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAhClC,OAAE,GAAG,iBAAiB,CAAC;QACvB,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,iBAAiB,CAAC;QAChC,gBAAW,GAAG,sFAAsF,CAAC;QACrG,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBAC9D,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,aAAa,CAAC;oBACjD,WAAW,EAAE,sCAAsC;oBACnD,OAAO,EAAE,kBAAkB;iBAC5B;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB,CAAC;QAEO,iBAAY,GAAG;YACtB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC/B;SACF,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAqB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA3CD,oCA2CC"}
1
+ {"version":3,"file":"NavigateTool.js","sourceRoot":"","sources":["../../src/tools/NavigateTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IAiCH;IAhCX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,iBAAiB,CAAC;IAChC,WAAW,GAAG,sFAAsF,CAAC;IACrG,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC9D,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,aAAa,CAAC;gBACjD,WAAW,EAAE,sCAAsC;gBACnD,OAAO,EAAE,kBAAkB;aAC5B;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB,CAAC;IAEO,YAAY,GAAG;QACtB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC/B;KACF,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAqB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,20 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PageSnapshotTool = void 0;
4
- class PageSnapshotTool {
1
+ export class PageSnapshotTool {
2
+ browser;
3
+ id = 'browserSnapshot';
4
+ name = 'browserSnapshot';
5
+ displayName = 'Page Snapshot';
6
+ description = 'Get a structured inventory of the current page — all interactive elements, forms, links, and metadata. Essential for agent-driven navigation.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {},
13
+ };
5
14
  constructor(browser) {
6
15
  this.browser = browser;
7
- this.id = 'browserSnapshot';
8
- this.name = 'browserSnapshot';
9
- this.displayName = 'Page Snapshot';
10
- this.description = 'Get a structured inventory of the current page — all interactive elements, forms, links, and metadata. Essential for agent-driven navigation.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = false;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {},
17
- };
18
16
  }
19
17
  async execute() {
20
18
  try {
@@ -26,5 +24,4 @@ class PageSnapshotTool {
26
24
  }
27
25
  }
28
26
  }
29
- exports.PageSnapshotTool = PageSnapshotTool;
30
27
  //# sourceMappingURL=PageSnapshotTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageSnapshotTool.js","sourceRoot":"","sources":["../../src/tools/PageSnapshotTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,gBAAgB;IAc3B,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAblC,OAAE,GAAG,iBAAiB,CAAC;QACvB,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,eAAe,CAAC;QAC9B,gBAAW,GAAG,+IAA+I,CAAC;QAC9J,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QAEvB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,EAAE;SACf,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAxBD,4CAwBC"}
1
+ {"version":3,"file":"PageSnapshotTool.js","sourceRoot":"","sources":["../../src/tools/PageSnapshotTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAcP;IAbX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,eAAe,CAAC;IAC9B,WAAW,GAAG,+IAA+I,CAAC;IAC9J,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,23 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ScreenshotTool = void 0;
4
- class ScreenshotTool {
1
+ export class ScreenshotTool {
2
+ browser;
3
+ id = 'browserScreenshot';
4
+ name = 'browserScreenshot';
5
+ displayName = 'Take Screenshot';
6
+ description = 'Capture a screenshot of the current page or a specific element. Returns base64-encoded PNG.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ selector: { type: 'string', description: 'CSS selector to screenshot a specific element (omit for full page)' },
14
+ fullPage: { type: 'boolean', description: 'Capture the full scrollable page', default: false },
15
+ },
16
+ };
5
17
  constructor(browser) {
6
18
  this.browser = browser;
7
- this.id = 'browserScreenshot';
8
- this.name = 'browserScreenshot';
9
- this.displayName = 'Take Screenshot';
10
- this.description = 'Capture a screenshot of the current page or a specific element. Returns base64-encoded PNG.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = false;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- selector: { type: 'string', description: 'CSS selector to screenshot a specific element (omit for full page)' },
18
- fullPage: { type: 'boolean', description: 'Capture the full scrollable page', default: false },
19
- },
20
- };
21
19
  }
22
20
  async execute(args) {
23
21
  try {
@@ -32,5 +30,4 @@ class ScreenshotTool {
32
30
  }
33
31
  }
34
32
  }
35
- exports.ScreenshotTool = ScreenshotTool;
36
33
  //# sourceMappingURL=ScreenshotTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotTool.js","sourceRoot":"","sources":["../../src/tools/ScreenshotTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,cAAc;IAiBzB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAhBlC,OAAE,GAAG,mBAAmB,CAAC;QACzB,SAAI,GAAG,mBAAmB,CAAC;QAC3B,gBAAW,GAAG,iBAAiB,CAAC;QAChC,gBAAW,GAAG,6FAA6F,CAAC;QAC5G,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QAEvB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oEAAoE,EAAE;gBAC/G,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE,OAAO,EAAE,KAAK,EAAE;aAC/F;SACF,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAA+C;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA9BD,wCA8BC"}
1
+ {"version":3,"file":"ScreenshotTool.js","sourceRoot":"","sources":["../../src/tools/ScreenshotTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IAiBL;IAhBX,EAAE,GAAG,mBAAmB,CAAC;IACzB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,iBAAiB,CAAC;IAChC,WAAW,GAAG,6FAA6F,CAAC;IAC5G,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oEAAoE,EAAE;YAC/G,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE,OAAO,EAAE,KAAK,EAAE;SAC/F;KACF,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAA+C;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,24 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ScrollTool = void 0;
4
- class ScrollTool {
1
+ export class ScrollTool {
2
+ browser;
3
+ id = 'browserScroll';
4
+ name = 'browserScroll';
5
+ displayName = 'Scroll Page';
6
+ description = 'Scroll the page up/down by a pixel amount, or scroll a specific element into view.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ direction: { type: 'string', enum: ['up', 'down'], description: 'Scroll direction', default: 'down' },
14
+ selector: { type: 'string', description: 'CSS selector of element to scroll into view (overrides direction/pixels)' },
15
+ pixels: { type: 'number', description: 'Number of pixels to scroll', default: 500 },
16
+ },
17
+ };
5
18
  constructor(browser) {
6
19
  this.browser = browser;
7
- this.id = 'browserScroll';
8
- this.name = 'browserScroll';
9
- this.displayName = 'Scroll Page';
10
- this.description = 'Scroll the page up/down by a pixel amount, or scroll a specific element into view.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- direction: { type: 'string', enum: ['up', 'down'], description: 'Scroll direction', default: 'down' },
18
- selector: { type: 'string', description: 'CSS selector of element to scroll into view (overrides direction/pixels)' },
19
- pixels: { type: 'number', description: 'Number of pixels to scroll', default: 500 },
20
- },
21
- };
22
20
  }
23
21
  async execute(args) {
24
22
  try {
@@ -30,5 +28,4 @@ class ScrollTool {
30
28
  }
31
29
  }
32
30
  }
33
- exports.ScrollTool = ScrollTool;
34
31
  //# sourceMappingURL=ScrollTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollTool.js","sourceRoot":"","sources":["../../src/tools/ScrollTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IAkBrB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAjBlC,OAAE,GAAG,eAAe,CAAC;QACrB,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,aAAa,CAAC;QAC5B,gBAAW,GAAG,oFAAoF,CAAC;QACnG,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE;gBACrG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0EAA0E,EAAE;gBACrH,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE,OAAO,EAAE,GAAG,EAAE;aACpF;SACF,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAuE;QACnF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA5BD,gCA4BC"}
1
+ {"version":3,"file":"ScrollTool.js","sourceRoot":"","sources":["../../src/tools/ScrollTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAkBD;IAjBX,EAAE,GAAG,eAAe,CAAC;IACrB,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,aAAa,CAAC;IAC5B,WAAW,GAAG,oFAAoF,CAAC;IACnG,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE;YACrG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0EAA0E,EAAE;YACrH,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE,OAAO,EAAE,GAAG,EAAE;SACpF;KACF,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAuE;QACnF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,31 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionTool = void 0;
4
- class SessionTool {
1
+ export class SessionTool {
2
+ browser;
3
+ id = 'browserSession';
4
+ name = 'browserSession';
5
+ displayName = 'Manage Session';
6
+ description = 'Save or restore browser login sessions (cookies + localStorage). Use "save" to persist the current session, "restore" to load a previously saved session.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = true;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ action: {
14
+ type: 'string',
15
+ enum: ['save', 'restore'],
16
+ description: 'Whether to save the current session or restore a previous one',
17
+ },
18
+ sessionData: {
19
+ type: 'object',
20
+ description: 'Session state to restore (required for "restore" action)',
21
+ },
22
+ },
23
+ required: ['action'],
24
+ };
5
25
  constructor(browser) {
6
26
  this.browser = browser;
7
- this.id = 'browserSession';
8
- this.name = 'browserSession';
9
- this.displayName = 'Manage Session';
10
- this.description = 'Save or restore browser login sessions (cookies + localStorage). Use "save" to persist the current session, "restore" to load a previously saved session.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = true;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- action: {
18
- type: 'string',
19
- enum: ['save', 'restore'],
20
- description: 'Whether to save the current session or restore a previous one',
21
- },
22
- sessionData: {
23
- type: 'object',
24
- description: 'Session state to restore (required for "restore" action)',
25
- },
26
- },
27
- required: ['action'],
28
- };
29
27
  }
30
28
  async execute(args) {
31
29
  try {
@@ -46,5 +44,4 @@ class SessionTool {
46
44
  }
47
45
  }
48
46
  }
49
- exports.SessionTool = SessionTool;
50
47
  //# sourceMappingURL=SessionTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTool.js","sourceRoot":"","sources":["../../src/tools/SessionTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAyBtB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAxBlC,OAAE,GAAG,gBAAgB,CAAC;QACtB,SAAI,GAAG,gBAAgB,CAAC;QACxB,gBAAW,GAAG,gBAAgB,CAAC;QAC/B,gBAAW,GAAG,2JAA2J,CAAC;QAC1K,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,IAAI,CAAC;QAEtB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;oBACzB,WAAW,EAAE,+DAA+D;iBAC7E;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0DAA0D;iBACxE;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAuD;QACnE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;gBACjF,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AA3CD,kCA2CC"}
1
+ {"version":3,"file":"SessionTool.js","sourceRoot":"","sources":["../../src/tools/SessionTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IAyBF;IAxBX,EAAE,GAAG,gBAAgB,CAAC;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,gBAAgB,CAAC;IAC/B,WAAW,GAAG,2JAA2J,CAAC;IAC1K,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;gBACzB,WAAW,EAAE,+DAA+D;aAC7E;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAuD;QACnE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;gBACjF,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -1,29 +1,27 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaitTool = void 0;
4
- class WaitTool {
1
+ export class WaitTool {
2
+ browser;
3
+ id = 'browserWait';
4
+ name = 'browserWait';
5
+ displayName = 'Wait for Condition';
6
+ description = 'Wait for a CSS selector to appear/disappear, or wait for a specified duration.';
7
+ category = 'browser';
8
+ version = '0.1.0';
9
+ hasSideEffects = false;
10
+ inputSchema = {
11
+ type: 'object',
12
+ properties: {
13
+ selector: { type: 'string', description: 'CSS selector to wait for (omit for time-based wait)' },
14
+ timeout: { type: 'number', description: 'Maximum wait time in milliseconds', default: 30000 },
15
+ state: {
16
+ type: 'string',
17
+ enum: ['visible', 'hidden', 'attached', 'detached'],
18
+ description: 'Element state to wait for',
19
+ default: 'visible',
20
+ },
21
+ },
22
+ };
5
23
  constructor(browser) {
6
24
  this.browser = browser;
7
- this.id = 'browserWait';
8
- this.name = 'browserWait';
9
- this.displayName = 'Wait for Condition';
10
- this.description = 'Wait for a CSS selector to appear/disappear, or wait for a specified duration.';
11
- this.category = 'browser';
12
- this.version = '0.1.0';
13
- this.hasSideEffects = false;
14
- this.inputSchema = {
15
- type: 'object',
16
- properties: {
17
- selector: { type: 'string', description: 'CSS selector to wait for (omit for time-based wait)' },
18
- timeout: { type: 'number', description: 'Maximum wait time in milliseconds', default: 30000 },
19
- state: {
20
- type: 'string',
21
- enum: ['visible', 'hidden', 'attached', 'detached'],
22
- description: 'Element state to wait for',
23
- default: 'visible',
24
- },
25
- },
26
- };
27
25
  }
28
26
  async execute(args) {
29
27
  try {
@@ -35,5 +33,4 @@ class WaitTool {
35
33
  }
36
34
  }
37
35
  }
38
- exports.WaitTool = WaitTool;
39
36
  //# sourceMappingURL=WaitTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WaitTool.js","sourceRoot":"","sources":["../../src/tools/WaitTool.ts"],"names":[],"mappings":";;;AAGA,MAAa,QAAQ;IAuBnB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAtBlC,OAAE,GAAG,aAAa,CAAC;QACnB,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,oBAAoB,CAAC;QACnC,gBAAW,GAAG,gFAAgF,CAAC;QAC/F,aAAQ,GAAG,SAAS,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QAEvB,gBAAW,GAAG;YACrB,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;gBAChG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC7F,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;oBACnD,WAAW,EAAE,2BAA2B;oBACxC,OAAO,EAAE,SAAS;iBACnB;aACF;SACF,CAAC;IAE4C,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAqG;QACjH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAjCD,4BAiCC"}
1
+ {"version":3,"file":"WaitTool.js","sourceRoot":"","sources":["../../src/tools/WaitTool.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,QAAQ;IAuBC;IAtBX,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,oBAAoB,CAAC;IACnC,WAAW,GAAG,gFAAgF,CAAC;IAC/F,QAAQ,GAAG,SAAS,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;YAChG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7F,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;gBACnD,WAAW,EAAE,2BAA2B;gBACxC,OAAO,EAAE,SAAS;aACnB;SACF;KACF,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAqG;QACjH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
3
  "id": "com.framers.system.browser-automation",
4
4
  "name": "Browser Automation Extension",
5
- "version": "0.1.0",
5
+ "version": "0.2.1",
6
6
  "description": "Full browser automation for autonomous agents — navigate URLs, interact with DOM elements, capture screenshots, solve captchas, and rotate proxies. Powered by Playwright with persistent session support.",
7
7
  "categories": ["system", "automation", "browser"],
8
8
  "sdk": "playwright",