@framers/agentos-ext-web-browser 1.1.0

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 (39) hide show
  1. package/README.md +161 -0
  2. package/dist/index.d.ts +50 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +128 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/services/browserService.d.ts +81 -0
  7. package/dist/services/browserService.d.ts.map +1 -0
  8. package/dist/services/browserService.js +381 -0
  9. package/dist/services/browserService.js.map +1 -0
  10. package/dist/tools/click.d.ts +42 -0
  11. package/dist/tools/click.d.ts.map +1 -0
  12. package/dist/tools/click.js +66 -0
  13. package/dist/tools/click.js.map +1 -0
  14. package/dist/tools/navigate.d.ts +44 -0
  15. package/dist/tools/navigate.d.ts.map +1 -0
  16. package/dist/tools/navigate.js +100 -0
  17. package/dist/tools/navigate.js.map +1 -0
  18. package/dist/tools/scrape.d.ts +43 -0
  19. package/dist/tools/scrape.d.ts.map +1 -0
  20. package/dist/tools/scrape.js +86 -0
  21. package/dist/tools/scrape.js.map +1 -0
  22. package/dist/tools/screenshot.d.ts +44 -0
  23. package/dist/tools/screenshot.d.ts.map +1 -0
  24. package/dist/tools/screenshot.js +83 -0
  25. package/dist/tools/screenshot.js.map +1 -0
  26. package/dist/tools/snapshot.d.ts +42 -0
  27. package/dist/tools/snapshot.d.ts.map +1 -0
  28. package/dist/tools/snapshot.js +57 -0
  29. package/dist/tools/snapshot.js.map +1 -0
  30. package/dist/tools/type.d.ts +44 -0
  31. package/dist/tools/type.d.ts.map +1 -0
  32. package/dist/tools/type.js +82 -0
  33. package/dist/tools/type.js.map +1 -0
  34. package/dist/types.d.ts +168 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +6 -0
  37. package/dist/types.js.map +1 -0
  38. package/manifest.json +93 -0
  39. package/package.json +63 -0
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Browser Service
3
+ * Manages browser lifecycle and provides page interaction methods.
4
+ *
5
+ * @module @framers/agentos-ext-web-browser
6
+ */
7
+ // Dynamic import for puppeteer to support environments where it's not available
8
+ let puppeteer = null;
9
+ let cheerio = null;
10
+ /**
11
+ * Lazy load puppeteer-core
12
+ */
13
+ async function getPuppeteer() {
14
+ if (!puppeteer) {
15
+ puppeteer = await import('puppeteer-core');
16
+ }
17
+ return puppeteer;
18
+ }
19
+ /**
20
+ * Lazy load cheerio for HTML parsing
21
+ */
22
+ async function getCheerio() {
23
+ if (!cheerio) {
24
+ cheerio = await import('cheerio');
25
+ }
26
+ return cheerio;
27
+ }
28
+ /**
29
+ * Browser service for managing browser automation
30
+ */
31
+ export class BrowserService {
32
+ browser = null;
33
+ page = null;
34
+ config;
35
+ consoleMessages = [];
36
+ constructor(config = {}) {
37
+ this.config = {
38
+ headless: true,
39
+ timeout: 30000,
40
+ viewport: { width: 1920, height: 1080 },
41
+ ...config,
42
+ };
43
+ }
44
+ /**
45
+ * Initialize browser instance
46
+ */
47
+ async initialize() {
48
+ if (this.browser)
49
+ return;
50
+ const pptr = await getPuppeteer();
51
+ // Try to find Chrome/Chromium executable
52
+ const executablePath = this.config.executablePath || this.findChromePath();
53
+ this.browser = await pptr.launch({
54
+ headless: this.config.headless,
55
+ executablePath,
56
+ args: [
57
+ '--no-sandbox',
58
+ '--disable-setuid-sandbox',
59
+ '--disable-dev-shm-usage',
60
+ '--disable-gpu',
61
+ ],
62
+ });
63
+ this.page = await this.browser.newPage();
64
+ // Set viewport
65
+ if (this.config.viewport) {
66
+ await this.page.setViewport(this.config.viewport);
67
+ }
68
+ // Set user agent
69
+ if (this.config.userAgent) {
70
+ await this.page.setUserAgent(this.config.userAgent);
71
+ }
72
+ // Capture console messages
73
+ this.page.on('console', (msg) => {
74
+ this.consoleMessages.push(`[${msg.type()}] ${msg.text()}`);
75
+ // Keep only last 100 messages
76
+ if (this.consoleMessages.length > 100) {
77
+ this.consoleMessages.shift();
78
+ }
79
+ });
80
+ }
81
+ /**
82
+ * Find Chrome executable path based on OS
83
+ */
84
+ findChromePath() {
85
+ const platform = process.platform;
86
+ if (platform === 'win32') {
87
+ return 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe';
88
+ }
89
+ else if (platform === 'darwin') {
90
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
91
+ }
92
+ else {
93
+ // Linux
94
+ return '/usr/bin/google-chrome';
95
+ }
96
+ }
97
+ /**
98
+ * Navigate to a URL
99
+ */
100
+ async navigate(url, options) {
101
+ await this.initialize();
102
+ const startTime = Date.now();
103
+ this.consoleMessages = []; // Reset console messages
104
+ const response = await this.page.goto(url, {
105
+ waitUntil: options?.waitFor || 'networkidle2',
106
+ timeout: this.config.timeout,
107
+ });
108
+ const loadTime = Date.now() - startTime;
109
+ const [title, html, text] = await Promise.all([
110
+ this.page.title(),
111
+ this.page.content(),
112
+ this.page.evaluate(() => document.body?.innerText || ''),
113
+ ]);
114
+ return {
115
+ url: this.page.url(),
116
+ status: response?.status() || 200,
117
+ title,
118
+ html,
119
+ text,
120
+ loadTime,
121
+ consoleMessages: [...this.consoleMessages],
122
+ };
123
+ }
124
+ /**
125
+ * Scrape content using CSS selector
126
+ */
127
+ async scrape(selector) {
128
+ await this.initialize();
129
+ const $ = (await getCheerio()).load(await this.page.content());
130
+ const elements = [];
131
+ $(selector).each((_, el) => {
132
+ const $el = $(el);
133
+ const attributes = {};
134
+ // Extract all attributes
135
+ const attribs = el.attribs || {};
136
+ for (const [key, value] of Object.entries(attribs)) {
137
+ attributes[key] = String(value);
138
+ }
139
+ elements.push({
140
+ tag: el.tagName || 'unknown',
141
+ text: $el.text().trim(),
142
+ html: $el.html() || '',
143
+ attributes,
144
+ href: $el.attr('href'),
145
+ src: $el.attr('src'),
146
+ });
147
+ });
148
+ return {
149
+ selector,
150
+ count: elements.length,
151
+ elements,
152
+ };
153
+ }
154
+ /**
155
+ * Click on an element
156
+ */
157
+ async click(selector, options) {
158
+ await this.initialize();
159
+ try {
160
+ const beforeUrl = this.page.url();
161
+ if (options?.waitForNavigation) {
162
+ await Promise.all([
163
+ this.page.waitForNavigation({ timeout: this.config.timeout }),
164
+ this.page.click(selector),
165
+ ]);
166
+ }
167
+ else {
168
+ await this.page.click(selector);
169
+ }
170
+ const afterUrl = this.page.url();
171
+ return {
172
+ success: true,
173
+ element: selector,
174
+ newUrl: beforeUrl !== afterUrl ? afterUrl : undefined,
175
+ contentChanged: beforeUrl !== afterUrl,
176
+ };
177
+ }
178
+ catch (error) {
179
+ return {
180
+ success: false,
181
+ element: selector,
182
+ contentChanged: false,
183
+ };
184
+ }
185
+ }
186
+ /**
187
+ * Type text into an input
188
+ */
189
+ async type(selector, text, options) {
190
+ await this.initialize();
191
+ try {
192
+ if (options?.clear) {
193
+ await this.page.click(selector, { clickCount: 3 }); // Select all
194
+ await this.page.keyboard.press('Backspace');
195
+ }
196
+ await this.page.type(selector, text, { delay: options?.delay || 0 });
197
+ return {
198
+ success: true,
199
+ element: selector,
200
+ text,
201
+ };
202
+ }
203
+ catch (error) {
204
+ return {
205
+ success: false,
206
+ element: selector,
207
+ text,
208
+ };
209
+ }
210
+ }
211
+ /**
212
+ * Take a screenshot
213
+ */
214
+ async screenshot(options) {
215
+ await this.initialize();
216
+ const format = options?.format || 'png';
217
+ const screenshotOptions = {
218
+ type: format,
219
+ encoding: 'base64',
220
+ fullPage: options?.fullPage || false,
221
+ };
222
+ if (format === 'jpeg' || format === 'webp') {
223
+ screenshotOptions.quality = options?.quality || 80;
224
+ }
225
+ let data;
226
+ if (options?.selector) {
227
+ const element = await this.page.$(options.selector);
228
+ if (!element) {
229
+ throw new Error(`Element not found: ${options.selector}`);
230
+ }
231
+ data = await element.screenshot(screenshotOptions);
232
+ }
233
+ else {
234
+ data = await this.page.screenshot(screenshotOptions);
235
+ }
236
+ // Get dimensions
237
+ const viewport = this.page.viewport();
238
+ return {
239
+ data,
240
+ format,
241
+ width: viewport?.width || 1920,
242
+ height: viewport?.height || 1080,
243
+ size: Math.ceil((data.length * 3) / 4), // Approximate decoded size
244
+ };
245
+ }
246
+ /**
247
+ * Get page snapshot with accessibility tree
248
+ */
249
+ async getSnapshot() {
250
+ await this.initialize();
251
+ const [url, title, accessibilityTree] = await Promise.all([
252
+ this.page.url(),
253
+ this.page.title(),
254
+ this.page.evaluate(() => {
255
+ const elements = [];
256
+ const links = [];
257
+ const forms = [];
258
+ const interactable = [];
259
+ let refCounter = 0;
260
+ function generateRef() {
261
+ return `e${refCounter++}`;
262
+ }
263
+ // Get all interactive elements
264
+ const interactiveElements = document.querySelectorAll('a, button, input, select, textarea, [role="button"], [role="link"], [tabindex]');
265
+ interactiveElements.forEach((el) => {
266
+ const ref = generateRef();
267
+ const rect = el.getBoundingClientRect();
268
+ const visible = rect.width > 0 && rect.height > 0;
269
+ const label = el.innerText?.slice(0, 100) ||
270
+ el.getAttribute('aria-label') ||
271
+ el.getAttribute('title') ||
272
+ el.getAttribute('placeholder') ||
273
+ el.getAttribute('name') ||
274
+ '';
275
+ const element = {
276
+ ref,
277
+ type: el.tagName.toLowerCase(),
278
+ label: label.trim(),
279
+ role: el.getAttribute('role') || undefined,
280
+ visible,
281
+ };
282
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
283
+ element.value = el.value;
284
+ }
285
+ elements.push(element);
286
+ // Track links
287
+ if (el.tagName === 'A') {
288
+ links.push({
289
+ text: label.trim().slice(0, 100),
290
+ href: el.href,
291
+ ref,
292
+ });
293
+ }
294
+ // Track interactable
295
+ if (['BUTTON', 'A', 'INPUT', 'SELECT', 'TEXTAREA'].includes(el.tagName)) {
296
+ interactable.push({
297
+ ref,
298
+ type: el.tagName.toLowerCase(),
299
+ label: label.trim().slice(0, 50),
300
+ });
301
+ }
302
+ });
303
+ // Get forms
304
+ document.querySelectorAll('form').forEach((form) => {
305
+ const fields = [];
306
+ form.querySelectorAll('input, select, textarea').forEach((field) => {
307
+ fields.push(field.getAttribute('name') ||
308
+ field.getAttribute('id') ||
309
+ field.tagName.toLowerCase());
310
+ });
311
+ forms.push({
312
+ id: form.id || undefined,
313
+ action: form.action || undefined,
314
+ fields,
315
+ });
316
+ });
317
+ return { elements, links, forms, interactable };
318
+ }),
319
+ ]);
320
+ return {
321
+ url,
322
+ title,
323
+ elements: accessibilityTree.elements,
324
+ links: accessibilityTree.links,
325
+ forms: accessibilityTree.forms,
326
+ interactable: accessibilityTree.interactable,
327
+ };
328
+ }
329
+ /**
330
+ * Execute arbitrary JavaScript in page context
331
+ */
332
+ async evaluate(fn) {
333
+ await this.initialize();
334
+ return this.page.evaluate(fn);
335
+ }
336
+ /**
337
+ * Wait for selector to appear
338
+ */
339
+ async waitForSelector(selector, timeout) {
340
+ await this.initialize();
341
+ try {
342
+ await this.page.waitForSelector(selector, { timeout: timeout || this.config.timeout });
343
+ return true;
344
+ }
345
+ catch {
346
+ return false;
347
+ }
348
+ }
349
+ /**
350
+ * Get current URL
351
+ */
352
+ async getCurrentUrl() {
353
+ await this.initialize();
354
+ return this.page.url();
355
+ }
356
+ /**
357
+ * Go back in history
358
+ */
359
+ async goBack() {
360
+ await this.initialize();
361
+ await this.page.goBack({ waitUntil: 'networkidle2' });
362
+ }
363
+ /**
364
+ * Go forward in history
365
+ */
366
+ async goForward() {
367
+ await this.initialize();
368
+ await this.page.goForward({ waitUntil: 'networkidle2' });
369
+ }
370
+ /**
371
+ * Close browser
372
+ */
373
+ async close() {
374
+ if (this.browser) {
375
+ await this.browser.close();
376
+ this.browser = null;
377
+ this.page = null;
378
+ }
379
+ }
380
+ }
381
+ //# sourceMappingURL=browserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserService.js","sourceRoot":"","sources":["../../src/services/browserService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,gFAAgF;AAChF,IAAI,SAAS,GAA2C,IAAI,CAAC;AAC7D,IAAI,OAAO,GAAoC,IAAI,CAAC;AAEpD;;GAEG;AACH,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,OAAO,GAAQ,IAAI,CAAC;IACpB,IAAI,GAAQ,IAAI,CAAC;IACjB,MAAM,CAAgB;IACtB,eAAe,GAAa,EAAE,CAAC;IAEvC,YAAY,SAAwB,EAAE;QACpC,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YACvC,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;QAElC,yCAAyC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,cAAc;YACd,IAAI,EAAE;gBACJ,cAAc;gBACd,0BAA0B;gBAC1B,yBAAyB;gBACzB,eAAe;aAChB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEzC,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3D,8BAA8B;YAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,4DAA4D,CAAC;QACtE,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,8DAA8D,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,OAAO,wBAAwB,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,OAA8B;QACxD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,yBAAyB;QAEpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACzC,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,cAAc;YAC7C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;SACzD,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG;YACjC,KAAK;YACL,IAAI;YACJ,IAAI;YACJ,QAAQ;YACR,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,CAAC,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,UAAU,GAA2B,EAAE,CAAC;YAE9C,yBAAyB;YACzB,MAAM,OAAO,GAAI,EAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAG,EAAU,CAAC,OAAO,IAAI,SAAS;gBACrC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;gBACvB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE;gBACtB,UAAU;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ;YACR,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,OAAyC;QACrE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAElC,IAAI,OAAO,EAAE,iBAAiB,EAAE,CAAC;gBAC/B,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAEjC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACrD,cAAc,EAAE,SAAS,KAAK,QAAQ;aACvC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ;gBACjB,cAAc,EAAE,KAAK;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAY,EAAE,OAA6C;QACtF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa;gBACjE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAErE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ;gBACjB,IAAI;aACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,QAAQ;gBACjB,IAAI;aACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAA2B;QAC1C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;QAExC,MAAM,iBAAiB,GAAQ;YAC7B,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK;SACrC,CAAC;QAEF,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3C,iBAAiB,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,IAAY,CAAC;QAEjB,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;QAED,iBAAiB;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtC,OAAO;YACL,IAAI;YACJ,MAAM;YACN,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI;YAC9B,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B;SACpE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACtB,MAAM,QAAQ,GAAU,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAU,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAU,EAAE,CAAC;gBACxB,MAAM,YAAY,GAAU,EAAE,CAAC;gBAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;gBAEnB,SAAS,WAAW;oBAClB,OAAO,IAAI,UAAU,EAAE,EAAE,CAAC;gBAC5B,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAgB,CACnD,gFAAgF,CACjF,CAAC;gBAEF,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACjC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAElD,MAAM,KAAK,GACR,EAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC5C,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;wBAC7B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;wBACxB,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;wBAC9B,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;wBACvB,EAAE,CAAC;oBAEL,MAAM,OAAO,GAAQ;wBACnB,GAAG;wBACH,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;wBAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;wBACnB,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC1C,OAAO;qBACR,CAAC;oBAEF,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;wBACxD,OAAO,CAAC,KAAK,GAAI,EAAuB,CAAC,KAAK,CAAC;oBACjD,CAAC;oBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEvB,cAAc;oBACd,IAAI,EAAE,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;4BAChC,IAAI,EAAG,EAAwB,CAAC,IAAI;4BACpC,GAAG;yBACJ,CAAC,CAAC;oBACL,CAAC;oBAED,qBAAqB;oBACrB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;wBACxE,YAAY,CAAC,IAAI,CAAC;4BAChB,GAAG;4BACH,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;4BAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;yBACjC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,YAAY;gBACZ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjD,MAAM,MAAM,GAAa,EAAE,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBACjE,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;4BACxB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;4BACxB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAC9B,CAAC;oBACJ,CAAC,CAAC,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC;wBACT,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,SAAS;wBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;wBAChC,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAClD,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO;YACL,GAAG;YACH,KAAK;YACL,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;YACpC,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,YAAY,EAAE,iBAAiB,CAAC,YAAY;SAC7C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAI,EAAsB;QACtC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,OAAgB;QACtD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Click Tool
3
+ * Click on elements in the current page.
4
+ *
5
+ * @module @framers/agentos-ext-web-browser
6
+ */
7
+ import type { ITool } from '@framers/agentos';
8
+ import type { BrowserService } from '../services/browserService';
9
+ import type { ClickResult } from '../types';
10
+ /**
11
+ * Tool for clicking elements
12
+ */
13
+ export declare class ClickTool implements ITool {
14
+ private browserService;
15
+ readonly id = "browserClick";
16
+ readonly name = "Click Element";
17
+ readonly description = "Click on an element in the current page";
18
+ constructor(browserService: BrowserService);
19
+ /**
20
+ * Execute click
21
+ */
22
+ execute(input: {
23
+ selector: string;
24
+ waitForNavigation?: boolean;
25
+ }): Promise<{
26
+ success: boolean;
27
+ output?: ClickResult;
28
+ error?: string;
29
+ }>;
30
+ /**
31
+ * Validate input
32
+ */
33
+ validate(input: any): {
34
+ valid: boolean;
35
+ errors: string[];
36
+ };
37
+ /**
38
+ * Get JSON schema for tool
39
+ */
40
+ getSchema(): any;
41
+ }
42
+ //# sourceMappingURL=click.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../src/tools/click.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;GAEG;AACH,qBAAa,SAAU,YAAW,KAAK;IAKzB,OAAO,CAAC,cAAc;IAJlC,SAAgB,EAAE,kBAAkB;IACpC,SAAgB,IAAI,mBAAmB;IACvC,SAAgB,WAAW,6CAA6C;gBAEpD,cAAc,EAAE,cAAc;IAElD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYvE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAY1D;;OAEG;IACH,SAAS,IAAI,GAAG;CAiBjB"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Click Tool
3
+ * Click on elements in the current page.
4
+ *
5
+ * @module @framers/agentos-ext-web-browser
6
+ */
7
+ /**
8
+ * Tool for clicking elements
9
+ */
10
+ export class ClickTool {
11
+ browserService;
12
+ id = 'browserClick';
13
+ name = 'Click Element';
14
+ description = 'Click on an element in the current page';
15
+ constructor(browserService) {
16
+ this.browserService = browserService;
17
+ }
18
+ /**
19
+ * Execute click
20
+ */
21
+ async execute(input) {
22
+ try {
23
+ const result = await this.browserService.click(input.selector, {
24
+ waitForNavigation: input.waitForNavigation,
25
+ });
26
+ return { success: result.success, output: result };
27
+ }
28
+ catch (error) {
29
+ return { success: false, error: error.message };
30
+ }
31
+ }
32
+ /**
33
+ * Validate input
34
+ */
35
+ validate(input) {
36
+ const errors = [];
37
+ if (!input.selector) {
38
+ errors.push('Selector is required');
39
+ }
40
+ else if (typeof input.selector !== 'string') {
41
+ errors.push('Selector must be a string');
42
+ }
43
+ return { valid: errors.length === 0, errors };
44
+ }
45
+ /**
46
+ * Get JSON schema for tool
47
+ */
48
+ getSchema() {
49
+ return {
50
+ type: 'object',
51
+ required: ['selector'],
52
+ properties: {
53
+ selector: {
54
+ type: 'string',
55
+ description: 'CSS selector for the element to click',
56
+ },
57
+ waitForNavigation: {
58
+ type: 'boolean',
59
+ default: false,
60
+ description: 'Wait for page navigation after click',
61
+ },
62
+ },
63
+ };
64
+ }
65
+ }
66
+ //# sourceMappingURL=click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click.js","sourceRoot":"","sources":["../../src/tools/click.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,OAAO,SAAS;IAKA;IAJJ,EAAE,GAAG,cAAc,CAAC;IACpB,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,yCAAyC,CAAC;IAExE,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAEtD;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAGb;QACC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC7D,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;aAC3C,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAU;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,UAAU,CAAC;YACtB,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uCAAuC;iBACrD;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,sCAAsC;iBACpD;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Navigate Tool
3
+ * Navigate browser to a URL and retrieve page content.
4
+ *
5
+ * @module @framers/agentos-ext-web-browser
6
+ */
7
+ import type { ITool } from '@framers/agentos';
8
+ import type { BrowserService } from '../services/browserService';
9
+ import type { NavigationResult } from '../types';
10
+ /**
11
+ * Tool for navigating to URLs
12
+ */
13
+ export declare class NavigateTool implements ITool {
14
+ private browserService;
15
+ readonly id = "browserNavigate";
16
+ readonly name = "Navigate to URL";
17
+ readonly description = "Navigate browser to a URL and get page content";
18
+ constructor(browserService: BrowserService);
19
+ /**
20
+ * Execute navigation
21
+ */
22
+ execute(input: {
23
+ url: string;
24
+ waitFor?: 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2';
25
+ returnHtml?: boolean;
26
+ returnText?: boolean;
27
+ }): Promise<{
28
+ success: boolean;
29
+ output?: NavigationResult;
30
+ error?: string;
31
+ }>;
32
+ /**
33
+ * Validate input
34
+ */
35
+ validate(input: any): {
36
+ valid: boolean;
37
+ errors: string[];
38
+ };
39
+ /**
40
+ * Get JSON schema for tool
41
+ */
42
+ getSchema(): any;
43
+ }
44
+ //# sourceMappingURL=navigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;GAEG;AACH,qBAAa,YAAa,YAAW,KAAK;IAK5B,OAAO,CAAC,cAAc;IAJlC,SAAgB,EAAE,qBAAqB;IACvC,SAAgB,IAAI,qBAAqB;IACzC,SAAgB,WAAW,oDAAoD;gBAE3D,cAAc,EAAE,cAAc;IAElD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;QACxE,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B5E;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAkB1D;;OAEG;IACH,SAAS,IAAI,GAAG;CA4BjB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Navigate Tool
3
+ * Navigate browser to a URL and retrieve page content.
4
+ *
5
+ * @module @framers/agentos-ext-web-browser
6
+ */
7
+ /**
8
+ * Tool for navigating to URLs
9
+ */
10
+ export class NavigateTool {
11
+ browserService;
12
+ id = 'browserNavigate';
13
+ name = 'Navigate to URL';
14
+ description = 'Navigate browser to a URL and get page content';
15
+ constructor(browserService) {
16
+ this.browserService = browserService;
17
+ }
18
+ /**
19
+ * Execute navigation
20
+ */
21
+ async execute(input) {
22
+ try {
23
+ const result = await this.browserService.navigate(input.url, {
24
+ waitFor: input.waitFor,
25
+ });
26
+ // Optionally strip html/text to reduce response size
27
+ const output = {
28
+ url: result.url,
29
+ status: result.status,
30
+ title: result.title,
31
+ loadTime: result.loadTime,
32
+ consoleMessages: result.consoleMessages,
33
+ };
34
+ if (input.returnHtml) {
35
+ output.html = result.html;
36
+ }
37
+ if (input.returnText !== false) {
38
+ // Default to returning text
39
+ output.text = result.text?.slice(0, 10000); // Limit text size
40
+ }
41
+ return { success: true, output };
42
+ }
43
+ catch (error) {
44
+ return { success: false, error: error.message };
45
+ }
46
+ }
47
+ /**
48
+ * Validate input
49
+ */
50
+ validate(input) {
51
+ const errors = [];
52
+ if (!input.url) {
53
+ errors.push('URL is required');
54
+ }
55
+ else if (typeof input.url !== 'string') {
56
+ errors.push('URL must be a string');
57
+ }
58
+ else {
59
+ try {
60
+ new URL(input.url);
61
+ }
62
+ catch {
63
+ errors.push('Invalid URL format');
64
+ }
65
+ }
66
+ return { valid: errors.length === 0, errors };
67
+ }
68
+ /**
69
+ * Get JSON schema for tool
70
+ */
71
+ getSchema() {
72
+ return {
73
+ type: 'object',
74
+ required: ['url'],
75
+ properties: {
76
+ url: {
77
+ type: 'string',
78
+ description: 'The URL to navigate to',
79
+ },
80
+ waitFor: {
81
+ type: 'string',
82
+ enum: ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'],
83
+ default: 'networkidle2',
84
+ description: 'When to consider navigation complete',
85
+ },
86
+ returnHtml: {
87
+ type: 'boolean',
88
+ default: false,
89
+ description: 'Include full HTML in response',
90
+ },
91
+ returnText: {
92
+ type: 'boolean',
93
+ default: true,
94
+ description: 'Include extracted text in response',
95
+ },
96
+ },
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=navigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"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"}