@framers/agentos-ext-stealth-browser 1.0.0 → 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/LICENSE +96 -21
- package/dist/StealthBrowserService.d.ts +101 -0
- package/dist/StealthBrowserService.d.ts.map +1 -0
- package/dist/StealthBrowserService.js +558 -0
- package/dist/StealthBrowserService.js.map +1 -0
- package/dist/index.d.ts +115 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/click.d.ts +39 -0
- package/dist/tools/click.d.ts.map +1 -0
- package/dist/tools/click.js +72 -0
- package/dist/tools/click.js.map +1 -0
- package/dist/tools/navigate.d.ts +43 -0
- package/dist/tools/navigate.d.ts.map +1 -0
- package/dist/tools/navigate.js +142 -0
- package/dist/tools/navigate.js.map +1 -0
- package/dist/tools/scrape.d.ts +40 -0
- package/dist/tools/scrape.d.ts.map +1 -0
- package/dist/tools/scrape.js +88 -0
- package/dist/tools/scrape.js.map +1 -0
- package/dist/tools/screenshot.d.ts +41 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +85 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/snapshot.d.ts +39 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +68 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/type.d.ts +41 -0
- package/dist/tools/type.d.ts.map +1 -0
- package/dist/tools/type.js +88 -0
- package/dist/tools/type.js.map +1 -0
- package/dist/types.d.ts +175 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/manifest.json +3 -3
- package/package.json +10 -6
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentOS Stealth Browser Extension
|
|
3
|
+
*
|
|
4
|
+
* Provides stealth browser automation using puppeteer-extra with the stealth plugin
|
|
5
|
+
* to bypass anti-bot detection on sites like Amazon, eBay, LinkedIn, and Cloudflare-
|
|
6
|
+
* protected pages.
|
|
7
|
+
*
|
|
8
|
+
* Key differences from web-browser extension:
|
|
9
|
+
* - Uses puppeteer-extra instead of puppeteer-core
|
|
10
|
+
* - Applies stealth plugin for comprehensive anti-fingerprinting
|
|
11
|
+
* - Extra anti-detection Chromium launch args
|
|
12
|
+
* - Realistic user agent rotation (Chrome 120+ on macOS/Windows)
|
|
13
|
+
* - WebDriver property removal and chrome.runtime injection
|
|
14
|
+
* - Human-like typing delay defaults (50ms between keystrokes)
|
|
15
|
+
*
|
|
16
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
17
|
+
* @version 1.0.0
|
|
18
|
+
* @license MIT
|
|
19
|
+
*/
|
|
20
|
+
import { StealthNavigateTool } from './tools/navigate.js';
|
|
21
|
+
import { StealthScrapeTool } from './tools/scrape.js';
|
|
22
|
+
import { StealthClickTool } from './tools/click.js';
|
|
23
|
+
import { StealthTypeTool } from './tools/type.js';
|
|
24
|
+
import { StealthScreenshotTool } from './tools/screenshot.js';
|
|
25
|
+
import { StealthSnapshotTool } from './tools/snapshot.js';
|
|
26
|
+
import type { StealthBrowserConfig } from './types.js';
|
|
27
|
+
/**
|
|
28
|
+
* Extension configuration options
|
|
29
|
+
*/
|
|
30
|
+
export interface StealthBrowserExtensionOptions extends StealthBrowserConfig {
|
|
31
|
+
/** Extension priority in the stack */
|
|
32
|
+
priority?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates the stealth browser extension pack
|
|
36
|
+
*
|
|
37
|
+
* @param context - The extension context
|
|
38
|
+
* @returns The configured extension pack
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* import { createExtensionPack } from '@framers/agentos-ext-stealth-browser';
|
|
43
|
+
*
|
|
44
|
+
* const pack = createExtensionPack({
|
|
45
|
+
* options: {
|
|
46
|
+
* headless: true,
|
|
47
|
+
* timeout: 30000,
|
|
48
|
+
* viewport: { width: 1920, height: 1080 }
|
|
49
|
+
* },
|
|
50
|
+
* logger: console
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function createExtensionPack(context: {
|
|
55
|
+
options?: Record<string, unknown>;
|
|
56
|
+
secrets?: Record<string, string>;
|
|
57
|
+
logger?: {
|
|
58
|
+
info: (...args: unknown[]) => void;
|
|
59
|
+
};
|
|
60
|
+
onActivate?: () => Promise<void>;
|
|
61
|
+
onDeactivate?: () => Promise<void>;
|
|
62
|
+
[key: string]: unknown;
|
|
63
|
+
}): {
|
|
64
|
+
name: string;
|
|
65
|
+
version: string;
|
|
66
|
+
descriptors: ({
|
|
67
|
+
id: string;
|
|
68
|
+
kind: string;
|
|
69
|
+
priority: number;
|
|
70
|
+
payload: StealthNavigateTool;
|
|
71
|
+
} | {
|
|
72
|
+
id: string;
|
|
73
|
+
kind: string;
|
|
74
|
+
priority: number;
|
|
75
|
+
payload: StealthScrapeTool;
|
|
76
|
+
} | {
|
|
77
|
+
id: string;
|
|
78
|
+
kind: string;
|
|
79
|
+
priority: number;
|
|
80
|
+
payload: StealthClickTool;
|
|
81
|
+
} | {
|
|
82
|
+
id: string;
|
|
83
|
+
kind: string;
|
|
84
|
+
priority: number;
|
|
85
|
+
payload: StealthTypeTool;
|
|
86
|
+
} | {
|
|
87
|
+
id: string;
|
|
88
|
+
kind: string;
|
|
89
|
+
priority: number;
|
|
90
|
+
payload: StealthScreenshotTool;
|
|
91
|
+
} | {
|
|
92
|
+
id: string;
|
|
93
|
+
kind: string;
|
|
94
|
+
priority: number;
|
|
95
|
+
payload: StealthSnapshotTool;
|
|
96
|
+
})[];
|
|
97
|
+
/**
|
|
98
|
+
* Called when extension is activated
|
|
99
|
+
*/
|
|
100
|
+
onActivate: () => Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Called when extension is deactivated
|
|
103
|
+
*/
|
|
104
|
+
onDeactivate: () => Promise<void>;
|
|
105
|
+
};
|
|
106
|
+
export { StealthBrowserService } from './StealthBrowserService.js';
|
|
107
|
+
export { StealthNavigateTool } from './tools/navigate.js';
|
|
108
|
+
export { StealthScrapeTool } from './tools/scrape.js';
|
|
109
|
+
export { StealthClickTool } from './tools/click.js';
|
|
110
|
+
export { StealthTypeTool } from './tools/type.js';
|
|
111
|
+
export { StealthScreenshotTool } from './tools/screenshot.js';
|
|
112
|
+
export { StealthSnapshotTool } from './tools/snapshot.js';
|
|
113
|
+
export * from './types.js';
|
|
114
|
+
export default createExtensionPack;
|
|
115
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,oBAAoB;IAC1E,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+DG;;OAEG;;IAQH;;OAEG;;EASN;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,cAAc,YAAY,CAAC;AAG3B,eAAe,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* AgentOS Stealth Browser Extension
|
|
4
|
+
*
|
|
5
|
+
* Provides stealth browser automation using puppeteer-extra with the stealth plugin
|
|
6
|
+
* to bypass anti-bot detection on sites like Amazon, eBay, LinkedIn, and Cloudflare-
|
|
7
|
+
* protected pages.
|
|
8
|
+
*
|
|
9
|
+
* Key differences from web-browser extension:
|
|
10
|
+
* - Uses puppeteer-extra instead of puppeteer-core
|
|
11
|
+
* - Applies stealth plugin for comprehensive anti-fingerprinting
|
|
12
|
+
* - Extra anti-detection Chromium launch args
|
|
13
|
+
* - Realistic user agent rotation (Chrome 120+ on macOS/Windows)
|
|
14
|
+
* - WebDriver property removal and chrome.runtime injection
|
|
15
|
+
* - Human-like typing delay defaults (50ms between keystrokes)
|
|
16
|
+
*
|
|
17
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
* @license MIT
|
|
20
|
+
*/
|
|
21
|
+
import { StealthBrowserService } from './StealthBrowserService.js';
|
|
22
|
+
import { StealthNavigateTool } from './tools/navigate.js';
|
|
23
|
+
import { StealthScrapeTool } from './tools/scrape.js';
|
|
24
|
+
import { StealthClickTool } from './tools/click.js';
|
|
25
|
+
import { StealthTypeTool } from './tools/type.js';
|
|
26
|
+
import { StealthScreenshotTool } from './tools/screenshot.js';
|
|
27
|
+
import { StealthSnapshotTool } from './tools/snapshot.js';
|
|
28
|
+
/**
|
|
29
|
+
* Creates the stealth browser extension pack
|
|
30
|
+
*
|
|
31
|
+
* @param context - The extension context
|
|
32
|
+
* @returns The configured extension pack
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { createExtensionPack } from '@framers/agentos-ext-stealth-browser';
|
|
37
|
+
*
|
|
38
|
+
* const pack = createExtensionPack({
|
|
39
|
+
* options: {
|
|
40
|
+
* headless: true,
|
|
41
|
+
* timeout: 30000,
|
|
42
|
+
* viewport: { width: 1920, height: 1080 }
|
|
43
|
+
* },
|
|
44
|
+
* logger: console
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function createExtensionPack(context) {
|
|
49
|
+
const options = context.options || {};
|
|
50
|
+
// Initialize stealth browser service with configuration
|
|
51
|
+
const browserService = new StealthBrowserService({
|
|
52
|
+
headless: options.headless,
|
|
53
|
+
timeout: options.timeout,
|
|
54
|
+
userAgent: options.userAgent,
|
|
55
|
+
viewport: options.viewport,
|
|
56
|
+
executablePath: options.executablePath,
|
|
57
|
+
enableEvasions: options.enableEvasions,
|
|
58
|
+
});
|
|
59
|
+
// Create tool instances
|
|
60
|
+
const navigateTool = new StealthNavigateTool(browserService);
|
|
61
|
+
const scrapeTool = new StealthScrapeTool(browserService);
|
|
62
|
+
const clickTool = new StealthClickTool(browserService);
|
|
63
|
+
const typeTool = new StealthTypeTool(browserService);
|
|
64
|
+
const screenshotTool = new StealthScreenshotTool(browserService);
|
|
65
|
+
const snapshotTool = new StealthSnapshotTool(browserService);
|
|
66
|
+
return {
|
|
67
|
+
name: '@framers/agentos-ext-stealth-browser',
|
|
68
|
+
version: '1.0.0',
|
|
69
|
+
descriptors: [
|
|
70
|
+
{
|
|
71
|
+
id: navigateTool.name,
|
|
72
|
+
kind: 'tool',
|
|
73
|
+
priority: options.priority || 50,
|
|
74
|
+
payload: navigateTool,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: scrapeTool.name,
|
|
78
|
+
kind: 'tool',
|
|
79
|
+
priority: options.priority || 50,
|
|
80
|
+
payload: scrapeTool,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: clickTool.name,
|
|
84
|
+
kind: 'tool',
|
|
85
|
+
priority: options.priority || 50,
|
|
86
|
+
payload: clickTool,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: typeTool.name,
|
|
90
|
+
kind: 'tool',
|
|
91
|
+
priority: options.priority || 50,
|
|
92
|
+
payload: typeTool,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: screenshotTool.name,
|
|
96
|
+
kind: 'tool',
|
|
97
|
+
priority: options.priority || 50,
|
|
98
|
+
payload: screenshotTool,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: snapshotTool.name,
|
|
102
|
+
kind: 'tool',
|
|
103
|
+
priority: options.priority || 50,
|
|
104
|
+
payload: snapshotTool,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
/**
|
|
108
|
+
* Called when extension is activated
|
|
109
|
+
*/
|
|
110
|
+
onActivate: async () => {
|
|
111
|
+
if (context.onActivate) {
|
|
112
|
+
await context.onActivate();
|
|
113
|
+
}
|
|
114
|
+
context.logger?.info('Stealth Browser Extension activated');
|
|
115
|
+
},
|
|
116
|
+
/**
|
|
117
|
+
* Called when extension is deactivated
|
|
118
|
+
*/
|
|
119
|
+
onDeactivate: async () => {
|
|
120
|
+
await browserService.close();
|
|
121
|
+
if (context.onDeactivate) {
|
|
122
|
+
await context.onDeactivate();
|
|
123
|
+
}
|
|
124
|
+
context.logger?.info('Stealth Browser Extension deactivated');
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Export types and classes for consumers
|
|
129
|
+
export { StealthBrowserService } from './StealthBrowserService.js';
|
|
130
|
+
export { StealthNavigateTool } from './tools/navigate.js';
|
|
131
|
+
export { StealthScrapeTool } from './tools/scrape.js';
|
|
132
|
+
export { StealthClickTool } from './tools/click.js';
|
|
133
|
+
export { StealthTypeTool } from './tools/type.js';
|
|
134
|
+
export { StealthScreenshotTool } from './tools/screenshot.js';
|
|
135
|
+
export { StealthSnapshotTool } from './tools/snapshot.js';
|
|
136
|
+
export * from './types.js';
|
|
137
|
+
// Default export for convenience
|
|
138
|
+
export default createExtensionPack;
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth Click Tool
|
|
3
|
+
* Click on elements in bot-protected pages with human-like behavior.
|
|
4
|
+
*
|
|
5
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
6
|
+
*/
|
|
7
|
+
import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
|
|
8
|
+
import type { StealthBrowserService } from '../StealthBrowserService.js';
|
|
9
|
+
import type { ClickResult } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Tool for clicking elements in stealth browser
|
|
12
|
+
*/
|
|
13
|
+
export declare class StealthClickTool implements ITool {
|
|
14
|
+
private browserService;
|
|
15
|
+
readonly id = "stealth-browser-click-v1";
|
|
16
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
17
|
+
readonly name = "stealth_click";
|
|
18
|
+
readonly displayName = "Stealth Click";
|
|
19
|
+
readonly description: string;
|
|
20
|
+
readonly category = "research";
|
|
21
|
+
readonly hasSideEffects = true;
|
|
22
|
+
readonly inputSchema: JSONSchemaObject;
|
|
23
|
+
constructor(browserService: StealthBrowserService);
|
|
24
|
+
/**
|
|
25
|
+
* Execute stealth click
|
|
26
|
+
*/
|
|
27
|
+
execute(input: {
|
|
28
|
+
selector: string;
|
|
29
|
+
waitForNavigation?: boolean;
|
|
30
|
+
}, _context: ToolExecutionContext): Promise<ToolExecutionResult<ClickResult>>;
|
|
31
|
+
/**
|
|
32
|
+
* Validate input
|
|
33
|
+
*/
|
|
34
|
+
validateArgs(input: Record<string, any>): {
|
|
35
|
+
isValid: boolean;
|
|
36
|
+
errors?: any[];
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=click.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../src/tools/click.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,qBAAa,gBAAiB,YAAW,KAAK;IA4BhC,OAAO,CAAC,cAAc;IA3BlC,SAAgB,EAAE,8BAA8B;IAChD,qDAAqD;IACrD,SAAgB,IAAI,mBAAmB;IACvC,SAAgB,WAAW,mBAAmB;IAC9C,SAAgB,WAAW,SAEoD;IAC/E,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,QAAQ;IAEtC,SAAgB,WAAW,EAAE,gBAAgB,CAe3C;gBAEkB,cAAc,EAAE,qBAAqB;IAEzD;;OAEG;IACG,OAAO,CACX,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,EACxD,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAgB5C;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAW/E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Stealth Click Tool
|
|
4
|
+
* Click on elements in bot-protected pages with human-like behavior.
|
|
5
|
+
*
|
|
6
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Tool for clicking elements in stealth browser
|
|
10
|
+
*/
|
|
11
|
+
export class StealthClickTool {
|
|
12
|
+
browserService;
|
|
13
|
+
id = 'stealth-browser-click-v1';
|
|
14
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
15
|
+
name = 'stealth_click';
|
|
16
|
+
displayName = 'Stealth Click';
|
|
17
|
+
description = 'Click an element in the stealth browser using a CSS selector. ' +
|
|
18
|
+
'Waits for element visibility before clicking. Use for bot-protected sites.';
|
|
19
|
+
category = 'research';
|
|
20
|
+
hasSideEffects = true;
|
|
21
|
+
inputSchema = {
|
|
22
|
+
type: 'object',
|
|
23
|
+
required: ['selector'],
|
|
24
|
+
properties: {
|
|
25
|
+
selector: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'CSS selector for the element to click',
|
|
28
|
+
},
|
|
29
|
+
waitForNavigation: {
|
|
30
|
+
type: 'boolean',
|
|
31
|
+
default: false,
|
|
32
|
+
description: 'Wait for page navigation after click',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
additionalProperties: false,
|
|
36
|
+
};
|
|
37
|
+
constructor(browserService) {
|
|
38
|
+
this.browserService = browserService;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute stealth click
|
|
42
|
+
*/
|
|
43
|
+
async execute(input, _context) {
|
|
44
|
+
try {
|
|
45
|
+
const result = await this.browserService.click(input.selector, {
|
|
46
|
+
waitForNavigation: input.waitForNavigation,
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
success: result.success,
|
|
50
|
+
output: result,
|
|
51
|
+
error: result.success ? undefined : 'Click failed',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return { success: false, error: error.message };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate input
|
|
60
|
+
*/
|
|
61
|
+
validateArgs(input) {
|
|
62
|
+
const errors = [];
|
|
63
|
+
if (!input.selector) {
|
|
64
|
+
errors.push('Selector is required');
|
|
65
|
+
}
|
|
66
|
+
else if (typeof input.selector !== 'string') {
|
|
67
|
+
errors.push('Selector must be a string');
|
|
68
|
+
}
|
|
69
|
+
return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../src/tools/click.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,OAAO,gBAAgB;IA4BP;IA3BJ,EAAE,GAAG,0BAA0B,CAAC;IAChD,qDAAqD;IACrC,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,eAAe,CAAC;IAC9B,WAAW,GACzB,gEAAgE;QAChE,4EAA4E,CAAC;IAC/D,QAAQ,GAAG,UAAU,CAAC;IACtB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAqB;QAC9C,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,oBAAoB,EAAE,KAAK;KAC5B,CAAC;IAEF,YAAoB,cAAqC;QAArC,mBAAc,GAAd,cAAc,CAAuB;IAAG,CAAC;IAE7D;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAAwD,EACxD,QAA8B;QAE9B,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;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc;aACnD,CAAC;QACJ,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,YAAY,CAAC,KAA0B;QACrC,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,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC9E,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth Navigate Tool
|
|
3
|
+
* Navigate stealth browser to a URL with anti-detection, bypassing bot protection.
|
|
4
|
+
*
|
|
5
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
6
|
+
*/
|
|
7
|
+
import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
|
|
8
|
+
import type { StealthBrowserService } from '../StealthBrowserService.js';
|
|
9
|
+
import type { NavigationResult } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Tool for stealth navigation to URLs on bot-protected sites
|
|
12
|
+
*/
|
|
13
|
+
export declare class StealthNavigateTool implements ITool {
|
|
14
|
+
private browserService;
|
|
15
|
+
readonly id = "stealth-browser-navigate-v1";
|
|
16
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
17
|
+
readonly name = "stealth_navigate";
|
|
18
|
+
readonly displayName = "Stealth Navigate";
|
|
19
|
+
readonly description: string;
|
|
20
|
+
readonly category = "research";
|
|
21
|
+
readonly hasSideEffects = false;
|
|
22
|
+
readonly inputSchema: JSONSchemaObject;
|
|
23
|
+
constructor(browserService: StealthBrowserService);
|
|
24
|
+
/**
|
|
25
|
+
* Execute stealth navigation
|
|
26
|
+
*/
|
|
27
|
+
execute(input: {
|
|
28
|
+
url: string;
|
|
29
|
+
waitFor?: 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2';
|
|
30
|
+
returnHtml?: boolean;
|
|
31
|
+
returnText?: boolean;
|
|
32
|
+
returnLinks?: boolean;
|
|
33
|
+
maxTextLength?: number;
|
|
34
|
+
}, _context: ToolExecutionContext): Promise<ToolExecutionResult<NavigationResult>>;
|
|
35
|
+
/**
|
|
36
|
+
* Validate input
|
|
37
|
+
*/
|
|
38
|
+
validateArgs(input: Record<string, any>): {
|
|
39
|
+
isValid: boolean;
|
|
40
|
+
errors?: any[];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=navigate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,KAAK;IAmDnC,OAAO,CAAC,cAAc;IAlDlC,SAAgB,EAAE,iCAAiC;IACnD,qDAAqD;IACrD,SAAgB,IAAI,sBAAsB;IAC1C,SAAgB,WAAW,sBAAsB;IACjD,SAAgB,WAAW,SAIiC;IAC5D,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CAoC3C;gBAEkB,cAAc,EAAE,qBAAqB;IAEzD;;OAEG;IACG,OAAO,CACX,KAAK,EAAE;QACL,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;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EACD,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IA8DjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAiB/E"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Stealth Navigate Tool
|
|
4
|
+
* Navigate stealth browser to a URL with anti-detection, bypassing bot protection.
|
|
5
|
+
*
|
|
6
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Tool for stealth navigation to URLs on bot-protected sites
|
|
10
|
+
*/
|
|
11
|
+
export class StealthNavigateTool {
|
|
12
|
+
browserService;
|
|
13
|
+
id = 'stealth-browser-navigate-v1';
|
|
14
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
15
|
+
name = 'stealth_navigate';
|
|
16
|
+
displayName = 'Stealth Navigate';
|
|
17
|
+
description = 'Navigate stealth browser to a URL with anti-bot-detection enabled. ' +
|
|
18
|
+
'Use this instead of browser_navigate for sites that block headless browsers ' +
|
|
19
|
+
'(Amazon, eBay, LinkedIn, Cloudflare-protected sites, etc.). ' +
|
|
20
|
+
'Returns full page text, links, and optionally raw HTML.';
|
|
21
|
+
category = 'research';
|
|
22
|
+
hasSideEffects = false;
|
|
23
|
+
inputSchema = {
|
|
24
|
+
type: 'object',
|
|
25
|
+
required: ['url'],
|
|
26
|
+
properties: {
|
|
27
|
+
url: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'The URL to navigate to',
|
|
30
|
+
},
|
|
31
|
+
waitFor: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
enum: ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'],
|
|
34
|
+
default: 'networkidle2',
|
|
35
|
+
description: 'When to consider navigation complete',
|
|
36
|
+
},
|
|
37
|
+
returnHtml: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
default: false,
|
|
40
|
+
description: 'Include full HTML in response',
|
|
41
|
+
},
|
|
42
|
+
returnText: {
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
default: true,
|
|
45
|
+
description: 'Include extracted text in response',
|
|
46
|
+
},
|
|
47
|
+
returnLinks: {
|
|
48
|
+
type: 'boolean',
|
|
49
|
+
default: true,
|
|
50
|
+
description: 'Include all links found on the page (text + href)',
|
|
51
|
+
},
|
|
52
|
+
maxTextLength: {
|
|
53
|
+
type: 'number',
|
|
54
|
+
default: 50000,
|
|
55
|
+
description: 'Maximum characters of page text to return (default 50000)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
additionalProperties: false,
|
|
59
|
+
};
|
|
60
|
+
constructor(browserService) {
|
|
61
|
+
this.browserService = browserService;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Execute stealth navigation
|
|
65
|
+
*/
|
|
66
|
+
async execute(input, _context) {
|
|
67
|
+
try {
|
|
68
|
+
const result = await this.browserService.navigate(input.url, {
|
|
69
|
+
waitFor: input.waitFor,
|
|
70
|
+
});
|
|
71
|
+
const maxLen = typeof input.maxTextLength === 'number' && input.maxTextLength > 0
|
|
72
|
+
? input.maxTextLength
|
|
73
|
+
: 50000;
|
|
74
|
+
const output = {
|
|
75
|
+
url: result.url,
|
|
76
|
+
status: result.status,
|
|
77
|
+
title: result.title,
|
|
78
|
+
loadTime: result.loadTime,
|
|
79
|
+
consoleMessages: result.consoleMessages,
|
|
80
|
+
};
|
|
81
|
+
if (input.returnHtml) {
|
|
82
|
+
output.html = result.html;
|
|
83
|
+
}
|
|
84
|
+
if (input.returnText !== false) {
|
|
85
|
+
const fullLen = result.text?.length || 0;
|
|
86
|
+
if (fullLen > maxLen) {
|
|
87
|
+
output.text = result.text.slice(0, maxLen);
|
|
88
|
+
output.textTruncated = true;
|
|
89
|
+
output.fullTextLength = fullLen;
|
|
90
|
+
output.truncationNote =
|
|
91
|
+
`Page text was ${fullLen.toLocaleString()} characters, truncated to ${maxLen.toLocaleString()}. ` +
|
|
92
|
+
`To get content from specific sections, use stealth_scrape with a CSS selector (e.g. 'footer', 'main', '#content'). ` +
|
|
93
|
+
`Or increase maxTextLength parameter.`;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
output.text = result.text;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Extract and return all links from the page (default: on)
|
|
100
|
+
if (input.returnLinks !== false) {
|
|
101
|
+
try {
|
|
102
|
+
const links = await this.browserService.evaluate(() => Array.from(document.querySelectorAll('a[href]'))
|
|
103
|
+
.map((a) => ({
|
|
104
|
+
text: (a.textContent || '').trim().slice(0, 200),
|
|
105
|
+
href: a.href,
|
|
106
|
+
}))
|
|
107
|
+
.filter((l) => l.href && l.text));
|
|
108
|
+
output.links = links;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Non-fatal — page may have restrictive CSP
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { success: true, output };
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
return { success: false, error: error.message };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Validate input
|
|
122
|
+
*/
|
|
123
|
+
validateArgs(input) {
|
|
124
|
+
const errors = [];
|
|
125
|
+
if (!input.url) {
|
|
126
|
+
errors.push('URL is required');
|
|
127
|
+
}
|
|
128
|
+
else if (typeof input.url !== 'string') {
|
|
129
|
+
errors.push('URL must be a string');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
try {
|
|
133
|
+
new URL(input.url);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
errors.push('Invalid URL format');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# 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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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stealth Scrape Tool
|
|
3
|
+
* Extract content from bot-protected pages using CSS selectors with stealth browser.
|
|
4
|
+
*
|
|
5
|
+
* @module @framers/agentos-ext-stealth-browser
|
|
6
|
+
*/
|
|
7
|
+
import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
|
|
8
|
+
import type { StealthBrowserService } from '../StealthBrowserService.js';
|
|
9
|
+
import type { ScrapeResult } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Tool for scraping content from bot-protected pages
|
|
12
|
+
*/
|
|
13
|
+
export declare class StealthScrapeTool implements ITool {
|
|
14
|
+
private browserService;
|
|
15
|
+
readonly id = "stealth-browser-scrape-v1";
|
|
16
|
+
/** Tool call name used by the LLM / ToolExecutor. */
|
|
17
|
+
readonly name = "stealth_scrape";
|
|
18
|
+
readonly displayName = "Stealth Scrape";
|
|
19
|
+
readonly description: string;
|
|
20
|
+
readonly category = "research";
|
|
21
|
+
readonly hasSideEffects = false;
|
|
22
|
+
readonly inputSchema: JSONSchemaObject;
|
|
23
|
+
constructor(browserService: StealthBrowserService);
|
|
24
|
+
/**
|
|
25
|
+
* Execute stealth scraping
|
|
26
|
+
*/
|
|
27
|
+
execute(input: {
|
|
28
|
+
selector: string;
|
|
29
|
+
limit?: number;
|
|
30
|
+
attributes?: string[];
|
|
31
|
+
}, _context: ToolExecutionContext): Promise<ToolExecutionResult<ScrapeResult>>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate input
|
|
34
|
+
*/
|
|
35
|
+
validateArgs(input: Record<string, any>): {
|
|
36
|
+
isValid: boolean;
|
|
37
|
+
errors?: any[];
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=scrape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.d.ts","sourceRoot":"","sources":["../../src/tools/scrape.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,KAAK;IAiCjC,OAAO,CAAC,cAAc;IAhClC,SAAgB,EAAE,+BAA+B;IACjD,qDAAqD;IACrD,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,WAAW,oBAAoB;IAC/C,SAAgB,WAAW,SAEiD;IAC5E,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CAoB3C;gBAEkB,cAAc,EAAE,qBAAqB;IAEzD;;OAEG;IACG,OAAO,CACX,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAClE,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IA4B7C;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAiB/E"}
|