@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.
- package/README.md +161 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/services/browserService.d.ts +81 -0
- package/dist/services/browserService.d.ts.map +1 -0
- package/dist/services/browserService.js +381 -0
- package/dist/services/browserService.js.map +1 -0
- package/dist/tools/click.d.ts +42 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/click.js +66 -0
- package/dist/tools/click.js.map +1 -0
- package/dist/tools/navigate.d.ts +44 -0
- package/dist/tools/navigate.d.ts.map +1 -0
- package/dist/tools/navigate.js +100 -0
- package/dist/tools/navigate.js.map +1 -0
- package/dist/tools/scrape.d.ts +43 -0
- package/dist/tools/scrape.d.ts.map +1 -0
- package/dist/tools/scrape.js +86 -0
- package/dist/tools/scrape.js.map +1 -0
- package/dist/tools/screenshot.d.ts +44 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +83 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/snapshot.d.ts +42 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +57 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/type.d.ts +44 -0
- package/dist/tools/type.d.ts.map +1 -0
- package/dist/tools/type.js +82 -0
- package/dist/tools/type.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/manifest.json +93 -0
- 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":"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"}
|
|
@@ -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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"}
|