auspex 0.2.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.
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +7 -1
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/agent.d.ts +20 -6
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +197 -74
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/logger.d.ts +15 -0
- package/dist/agent/logger.d.ts.map +1 -0
- package/dist/agent/logger.js +70 -0
- package/dist/agent/logger.js.map +1 -0
- package/dist/agent/loop.d.ts +18 -3
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +123 -48
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/report.d.ts.map +1 -1
- package/dist/agent/report.js +41 -29
- package/dist/agent/report.js.map +1 -1
- package/dist/browser/executor.d.ts.map +1 -1
- package/dist/browser/executor.js +65 -11
- package/dist/browser/executor.js.map +1 -1
- package/dist/browser/pool.d.ts +33 -0
- package/dist/browser/pool.d.ts.map +1 -0
- package/dist/browser/pool.js +101 -0
- package/dist/browser/pool.js.map +1 -0
- package/dist/browser/snapshot.d.ts +1 -0
- package/dist/browser/snapshot.d.ts.map +1 -1
- package/dist/browser/snapshot.js +104 -48
- package/dist/browser/snapshot.js.map +1 -1
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +7 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +107 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +29 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +1 -1
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +74 -37
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/prompt.d.ts +14 -2
- package/dist/llm/prompt.d.ts.map +1 -1
- package/dist/llm/prompt.js +52 -6
- package/dist/llm/prompt.js.map +1 -1
- package/dist/llm/vision-models.d.ts +3 -0
- package/dist/llm/vision-models.d.ts.map +1 -0
- package/dist/llm/vision-models.js +30 -0
- package/dist/llm/vision-models.js.map +1 -0
- package/dist/scraper/extractors/content.d.ts +3 -2
- package/dist/scraper/extractors/content.d.ts.map +1 -1
- package/dist/scraper/extractors/content.js +4 -4
- package/dist/scraper/extractors/content.js.map +1 -1
- package/dist/scraper/extractors/ssr.d.ts +3 -2
- package/dist/scraper/extractors/ssr.d.ts.map +1 -1
- package/dist/scraper/extractors/ssr.js +4 -4
- package/dist/scraper/extractors/ssr.js.map +1 -1
- package/dist/scraper/tiers/tier1-http.d.ts.map +1 -1
- package/dist/scraper/tiers/tier1-http.js +7 -13
- package/dist/scraper/tiers/tier1-http.js.map +1 -1
- package/dist/scraper/tiers/tier2-stealth.d.ts.map +1 -1
- package/dist/scraper/tiers/tier2-stealth.js +6 -5
- package/dist/scraper/tiers/tier2-stealth.js.map +1 -1
- package/dist/scraper/tiers/tier3-browser.d.ts +1 -0
- package/dist/scraper/tiers/tier3-browser.d.ts.map +1 -1
- package/dist/scraper/tiers/tier3-browser.js +31 -26
- package/dist/scraper/tiers/tier3-browser.js.map +1 -1
- package/dist/security/action-validator.d.ts +35 -20
- package/dist/security/action-validator.d.ts.map +1 -1
- package/dist/security/action-validator.js +39 -3
- package/dist/security/action-validator.js.map +1 -1
- package/dist/security/url-validator.d.ts.map +1 -1
- package/dist/security/url-validator.js +10 -1
- package/dist/security/url-validator.js.map +1 -1
- package/dist/types.d.ts +97 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -4
- package/readme.md +169 -35
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Browser, type LaunchOptions } from "playwright";
|
|
2
|
+
export interface BrowserPoolOptions {
|
|
3
|
+
/** Maximum number of browser instances. Default: 3 */
|
|
4
|
+
maxSize?: number;
|
|
5
|
+
/** Playwright launch options applied to all browsers */
|
|
6
|
+
launchOptions?: LaunchOptions;
|
|
7
|
+
/** Timeout in ms to wait for an available browser. Default: 30000 */
|
|
8
|
+
acquireTimeoutMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class BrowserPool {
|
|
11
|
+
private readonly maxSize;
|
|
12
|
+
private readonly launchOptions;
|
|
13
|
+
private readonly acquireTimeoutMs;
|
|
14
|
+
private readonly browsers;
|
|
15
|
+
private readonly available;
|
|
16
|
+
private readonly waitQueue;
|
|
17
|
+
private closed;
|
|
18
|
+
constructor(options?: BrowserPoolOptions);
|
|
19
|
+
/** Acquire a browser instance. Blocks if all are in use and pool is at max capacity. */
|
|
20
|
+
acquire(): Promise<Browser>;
|
|
21
|
+
/** Release a browser back to the pool. */
|
|
22
|
+
release(browser: Browser): void;
|
|
23
|
+
/** Close all browsers and reject any waiters. */
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
/** Current pool statistics. */
|
|
26
|
+
get stats(): {
|
|
27
|
+
total: number;
|
|
28
|
+
available: number;
|
|
29
|
+
waiting: number;
|
|
30
|
+
maxSize: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,kBAAuB;IAS5C,wFAAwF;IAClF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwCjC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAuB/B,iDAAiD;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,+BAA+B;IAC/B,IAAI,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAOlF;CACF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { chromium } from "playwright";
|
|
2
|
+
export class BrowserPool {
|
|
3
|
+
maxSize;
|
|
4
|
+
launchOptions;
|
|
5
|
+
acquireTimeoutMs;
|
|
6
|
+
browsers = [];
|
|
7
|
+
available = [];
|
|
8
|
+
waitQueue = [];
|
|
9
|
+
closed = false;
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
this.maxSize = options.maxSize ?? 3;
|
|
12
|
+
this.acquireTimeoutMs = options.acquireTimeoutMs ?? 30_000;
|
|
13
|
+
this.launchOptions = options.launchOptions ?? {
|
|
14
|
+
headless: true,
|
|
15
|
+
args: ["--disable-blink-features=AutomationControlled"],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Acquire a browser instance. Blocks if all are in use and pool is at max capacity. */
|
|
19
|
+
async acquire() {
|
|
20
|
+
if (this.closed)
|
|
21
|
+
throw new Error("BrowserPool is closed");
|
|
22
|
+
// 1. Reuse an available (idle) browser
|
|
23
|
+
while (this.available.length > 0) {
|
|
24
|
+
const browser = this.available.pop();
|
|
25
|
+
if (browser.isConnected())
|
|
26
|
+
return browser;
|
|
27
|
+
// Browser died — remove from tracking
|
|
28
|
+
const idx = this.browsers.indexOf(browser);
|
|
29
|
+
if (idx >= 0)
|
|
30
|
+
this.browsers.splice(idx, 1);
|
|
31
|
+
}
|
|
32
|
+
// 2. Launch a new one if under capacity
|
|
33
|
+
if (this.browsers.length < this.maxSize) {
|
|
34
|
+
const browser = await chromium.launch(this.launchOptions);
|
|
35
|
+
this.browsers.push(browser);
|
|
36
|
+
// Auto-remove from pool if browser crashes
|
|
37
|
+
browser.on("disconnected", () => {
|
|
38
|
+
const idx = this.browsers.indexOf(browser);
|
|
39
|
+
if (idx >= 0)
|
|
40
|
+
this.browsers.splice(idx, 1);
|
|
41
|
+
const availIdx = this.available.indexOf(browser);
|
|
42
|
+
if (availIdx >= 0)
|
|
43
|
+
this.available.splice(availIdx, 1);
|
|
44
|
+
});
|
|
45
|
+
return browser;
|
|
46
|
+
}
|
|
47
|
+
// 3. All browsers busy — wait in queue with timeout
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
const timer = setTimeout(() => {
|
|
50
|
+
const idx = this.waitQueue.findIndex((w) => w.resolve === resolve);
|
|
51
|
+
if (idx >= 0)
|
|
52
|
+
this.waitQueue.splice(idx, 1);
|
|
53
|
+
reject(new Error(`BrowserPool acquire timeout after ${this.acquireTimeoutMs}ms`));
|
|
54
|
+
}, this.acquireTimeoutMs);
|
|
55
|
+
this.waitQueue.push({ resolve, reject, timer });
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Release a browser back to the pool. */
|
|
59
|
+
release(browser) {
|
|
60
|
+
if (this.closed) {
|
|
61
|
+
browser.close().catch(() => { });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!browser.isConnected()) {
|
|
65
|
+
const idx = this.browsers.indexOf(browser);
|
|
66
|
+
if (idx >= 0)
|
|
67
|
+
this.browsers.splice(idx, 1);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// If someone is waiting, give it directly
|
|
71
|
+
if (this.waitQueue.length > 0) {
|
|
72
|
+
const waiter = this.waitQueue.shift();
|
|
73
|
+
clearTimeout(waiter.timer);
|
|
74
|
+
waiter.resolve(browser);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.available.push(browser);
|
|
78
|
+
}
|
|
79
|
+
/** Close all browsers and reject any waiters. */
|
|
80
|
+
async close() {
|
|
81
|
+
this.closed = true;
|
|
82
|
+
for (const waiter of this.waitQueue) {
|
|
83
|
+
clearTimeout(waiter.timer);
|
|
84
|
+
waiter.reject(new Error("BrowserPool is closing"));
|
|
85
|
+
}
|
|
86
|
+
this.waitQueue.length = 0;
|
|
87
|
+
await Promise.allSettled(this.browsers.map((b) => b.close()));
|
|
88
|
+
this.browsers.length = 0;
|
|
89
|
+
this.available.length = 0;
|
|
90
|
+
}
|
|
91
|
+
/** Current pool statistics. */
|
|
92
|
+
get stats() {
|
|
93
|
+
return {
|
|
94
|
+
total: this.browsers.length,
|
|
95
|
+
available: this.available.length,
|
|
96
|
+
waiting: this.waitQueue.length,
|
|
97
|
+
maxSize: this.maxSize,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAoC,MAAM,YAAY,CAAC;AAiBxE,MAAM,OAAO,WAAW;IACL,OAAO,CAAS;IAChB,aAAa,CAAgB;IAC7B,gBAAgB,CAAS;IACzB,QAAQ,GAAc,EAAE,CAAC;IACzB,SAAS,GAAc,EAAE,CAAC;IAC1B,SAAS,GAAa,EAAE,CAAC;IAClC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI;YAC5C,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,CAAC,+CAA+C,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,wFAAwF;IACxF,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE1D,uCAAuC;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAC;YACtC,IAAI,OAAO,CAAC,WAAW,EAAE;gBAAE,OAAO,OAAO,CAAC;YAC1C,sCAAsC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE5B,2CAA2C;YAC3C,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,GAAG,IAAI,CAAC;oBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,QAAQ,IAAI,CAAC;oBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,oDAAoD;QACpD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;gBACnE,IAAI,GAAG,IAAI,CAAC;oBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;YACpF,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,OAAO,CAAC,OAAgB;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAG,CAAC;YACvC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK;QACP,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAChC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -2,5 +2,6 @@ import type { Page } from "playwright-core";
|
|
|
2
2
|
import type { PageSnapshot } from "../types.js";
|
|
3
3
|
export declare function takeSnapshot(page: Page): Promise<PageSnapshot>;
|
|
4
4
|
export declare function snapshotFromHtml(html: string, url: string): PageSnapshot;
|
|
5
|
+
export declare function captureScreenshot(page: Page, quality: number): Promise<string>;
|
|
5
6
|
export declare function formatSnapshot(snapshot: PageSnapshot): string;
|
|
6
7
|
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,aAAa,CAAC;AA4E3F,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCpE;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CA+CxE;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAkBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAqC7D"}
|
package/dist/browser/snapshot.js
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
import * as cheerio from "cheerio";
|
|
2
|
-
// ───
|
|
3
|
-
const TEXT_LIMIT = 3_500; // chars
|
|
4
|
-
const LINKS_LIMIT = 25; //
|
|
5
|
-
const FORMS_LIMIT = 5; //
|
|
6
|
-
const INPUTS_LIMIT = 10; //
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// Descarta links que não ajudam o LLM a navegar:
|
|
10
|
-
// - domínios de redes sociais / ícones de compartilhamento
|
|
11
|
-
// - links de assets (imagens, fontes, CSS, JS)
|
|
12
|
-
// - âncoras vazias, javascript: e mailto:
|
|
13
|
-
// - links sem texto visível
|
|
14
|
-
//
|
|
2
|
+
// ─── Snapshot limits (calibrated to save tokens) ─────────────────────────────
|
|
3
|
+
const TEXT_LIMIT = 3_500; // chars of page text sent to LLM
|
|
4
|
+
const LINKS_LIMIT = 25; // max links per snapshot
|
|
5
|
+
const FORMS_LIMIT = 5; // max forms per snapshot
|
|
6
|
+
const INPUTS_LIMIT = 10; // max inputs per form
|
|
7
|
+
const A11Y_LIMIT = 3_000; // chars of accessibility tree YAML
|
|
8
|
+
// ─── Noise link filter ───────────────────────────────────────────────────────
|
|
15
9
|
const NOISE_HOSTS = new Set([
|
|
16
10
|
"twitter.com", "x.com", "facebook.com", "instagram.com",
|
|
17
11
|
"linkedin.com", "youtube.com", "tiktok.com",
|
|
18
12
|
"t.me", "wa.me", "discord.gg", "github.com",
|
|
19
13
|
]);
|
|
20
|
-
const NOISE_EXTENSIONS = /\.(png|jpe?g|gif|svg|ico|webp|css|js|woff2?|ttf|eot
|
|
14
|
+
const NOISE_EXTENSIONS = /\.(png|jpe?g|gif|svg|ico|webp|css|js|woff2?|ttf|eot)(\?.*)?$/i;
|
|
21
15
|
function isNoiseLink(href, text) {
|
|
22
16
|
if (!href || href === "#" || href.startsWith("javascript:") ||
|
|
23
17
|
href.startsWith("mailto:") || href.startsWith("tel:"))
|
|
@@ -25,53 +19,83 @@ function isNoiseLink(href, text) {
|
|
|
25
19
|
if (NOISE_EXTENSIONS.test(href))
|
|
26
20
|
return true;
|
|
27
21
|
if (!text.trim())
|
|
28
|
-
return true;
|
|
22
|
+
return true;
|
|
29
23
|
try {
|
|
30
24
|
const { hostname } = new URL(href);
|
|
31
25
|
if (NOISE_HOSTS.has(hostname.replace(/^www\./, "")))
|
|
32
26
|
return true;
|
|
33
27
|
}
|
|
34
|
-
catch { /*
|
|
28
|
+
catch { /* relative or invalid URL — keep */ }
|
|
35
29
|
return false;
|
|
36
30
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}, TEXT_LIMIT);
|
|
44
|
-
const rawLinks = await page.evaluate((limit) => {
|
|
45
|
-
return Array.from(document.querySelectorAll("a[href]"))
|
|
46
|
-
.slice(0, limit * 3) // coleta mais para filtrar depois no Node.js
|
|
31
|
+
const EVALUATE_LIMITS = { textLimit: TEXT_LIMIT, linksLimit: LINKS_LIMIT, formsLimit: FORMS_LIMIT, inputsLimit: INPUTS_LIMIT };
|
|
32
|
+
function evaluatePageData(page) {
|
|
33
|
+
return page.evaluate((limits) => {
|
|
34
|
+
const text = document.body?.innerText?.slice(0, limits.textLimit) ?? "";
|
|
35
|
+
const rawLinks = Array.from(document.querySelectorAll("a[href]"))
|
|
36
|
+
.slice(0, limits.linksLimit * 3)
|
|
47
37
|
.map((el, i) => ({
|
|
48
38
|
text: el.innerText.trim().slice(0, 80),
|
|
49
39
|
href: el.href,
|
|
50
40
|
index: i,
|
|
51
41
|
}));
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
.slice(0, LINKS_LIMIT)
|
|
56
|
-
.map((l, i) => ({ ...l, index: i }));
|
|
57
|
-
const forms = await page.evaluate((limits) => {
|
|
58
|
-
return Array.from(document.querySelectorAll("form")).slice(0, limits.forms).map((form) => ({
|
|
42
|
+
const forms = Array.from(document.querySelectorAll("form"))
|
|
43
|
+
.slice(0, limits.formsLimit)
|
|
44
|
+
.map((form) => ({
|
|
59
45
|
action: form.action,
|
|
60
46
|
inputs: Array.from(form.querySelectorAll("input, textarea, select"))
|
|
61
|
-
.slice(0, limits.
|
|
47
|
+
.slice(0, limits.inputsLimit)
|
|
62
48
|
.map((el) => {
|
|
63
49
|
const input = el;
|
|
64
50
|
const id = input.id ? `#${input.id}` : "";
|
|
65
51
|
const name = input.name ? `[name="${input.name}"]` : "";
|
|
66
52
|
const tag = el.tagName.toLowerCase();
|
|
67
53
|
const selector = id || (name ? `${tag}${name}` : tag);
|
|
68
|
-
return {
|
|
54
|
+
return {
|
|
55
|
+
name: input.name || input.id || "",
|
|
56
|
+
type: input.type || tag,
|
|
57
|
+
placeholder: input.placeholder || "",
|
|
58
|
+
selector,
|
|
59
|
+
};
|
|
69
60
|
}),
|
|
70
61
|
}));
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
return { text, rawLinks, forms };
|
|
63
|
+
}, EVALUATE_LIMITS);
|
|
73
64
|
}
|
|
74
|
-
|
|
65
|
+
export async function takeSnapshot(page) {
|
|
66
|
+
const url = page.url();
|
|
67
|
+
const title = await page.title().catch(() => url);
|
|
68
|
+
// Retry once if the execution context is destroyed by a mid-navigation
|
|
69
|
+
let data;
|
|
70
|
+
try {
|
|
71
|
+
data = await evaluatePageData(page);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Context was destroyed — wait for the new page to settle, then retry
|
|
75
|
+
await page.waitForLoadState("domcontentloaded", { timeout: 5_000 }).catch(() => { });
|
|
76
|
+
try {
|
|
77
|
+
data = await evaluatePageData(page);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Still failing — return a minimal snapshot so the loop can continue
|
|
81
|
+
return { url: page.url(), title: page.url(), text: "", links: [], forms: [] };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const links = data.rawLinks
|
|
85
|
+
.filter(l => !isNoiseLink(l.href, l.text))
|
|
86
|
+
.slice(0, LINKS_LIMIT)
|
|
87
|
+
.map((l, i) => ({ ...l, index: i }));
|
|
88
|
+
// Capture accessibility tree (non-fatal)
|
|
89
|
+
let ariaTree;
|
|
90
|
+
try {
|
|
91
|
+
const yaml = await page.locator("body").ariaSnapshot({ timeout: 5_000 });
|
|
92
|
+
if (yaml)
|
|
93
|
+
ariaTree = yaml.slice(0, A11Y_LIMIT);
|
|
94
|
+
}
|
|
95
|
+
catch { /* page in transition or not supported — skip */ }
|
|
96
|
+
return { url, title, text: data.text, links, forms: data.forms, ariaTree };
|
|
97
|
+
}
|
|
98
|
+
// ─── Snapshot via Cheerio (static HTML, no browser) ──────────────────────────
|
|
75
99
|
export function snapshotFromHtml(html, url) {
|
|
76
100
|
const $ = cheerio.load(html);
|
|
77
101
|
const title = $("title").text().trim();
|
|
@@ -83,14 +107,18 @@ export function snapshotFromHtml(html, url) {
|
|
|
83
107
|
if (links.length >= LINKS_LIMIT)
|
|
84
108
|
return false; // break
|
|
85
109
|
const href = $(el).attr("href") ?? "";
|
|
86
|
-
|
|
110
|
+
// Pre-filter raw href before URL resolution (# becomes full URL otherwise)
|
|
111
|
+
if (!href || href === "#" || href.startsWith("javascript:") ||
|
|
112
|
+
href.startsWith("mailto:") || href.startsWith("tel:"))
|
|
113
|
+
return;
|
|
114
|
+
const linkText = $(el).text().trim().slice(0, 80);
|
|
87
115
|
let absoluteHref = href;
|
|
88
116
|
try {
|
|
89
117
|
absoluteHref = href.startsWith("http") ? href : new URL(href, url).href;
|
|
90
118
|
}
|
|
91
|
-
catch { /*
|
|
92
|
-
if (!isNoiseLink(absoluteHref,
|
|
93
|
-
links.push({ text, href: absoluteHref, index: linkIndex++ });
|
|
119
|
+
catch { /* invalid relative href */ }
|
|
120
|
+
if (!isNoiseLink(absoluteHref, linkText)) {
|
|
121
|
+
links.push({ text: linkText, href: absoluteHref, index: linkIndex++ });
|
|
94
122
|
}
|
|
95
123
|
});
|
|
96
124
|
const forms = [];
|
|
@@ -100,7 +128,9 @@ export function snapshotFromHtml(html, url) {
|
|
|
100
128
|
$(formEl).find("input, textarea, select").slice(0, INPUTS_LIMIT).each((_, inputEl) => {
|
|
101
129
|
const id = $(inputEl).attr("id") ? `#${$(inputEl).attr("id")}` : "";
|
|
102
130
|
const name = $(inputEl).attr("name") ? `[name="${$(inputEl).attr("name")}"]` : "";
|
|
103
|
-
|
|
131
|
+
// cheerio AnyNode: use type guard for Element which has tagName
|
|
132
|
+
const node = inputEl;
|
|
133
|
+
const tag = node.tagName ?? "input";
|
|
104
134
|
const selector = id || (name ? `${tag}${name}` : tag);
|
|
105
135
|
inputs.push({
|
|
106
136
|
name: $(inputEl).attr("name") || $(inputEl).attr("id") || "",
|
|
@@ -113,21 +143,41 @@ export function snapshotFromHtml(html, url) {
|
|
|
113
143
|
});
|
|
114
144
|
return { url, title, text, links, forms };
|
|
115
145
|
}
|
|
116
|
-
// ───
|
|
146
|
+
// ─── Screenshot capture (vision mode) ────────────────────────────────────────
|
|
147
|
+
export async function captureScreenshot(page, quality) {
|
|
148
|
+
const buffer = await page.screenshot({ type: "jpeg", quality });
|
|
149
|
+
return buffer.toString("base64");
|
|
150
|
+
}
|
|
151
|
+
// ─── Format snapshot for LLM ─────────────────────────────────────────────────
|
|
152
|
+
const MAX_URL_LEN = 150;
|
|
153
|
+
function truncUrl(url) {
|
|
154
|
+
if (url.length <= MAX_URL_LEN)
|
|
155
|
+
return url;
|
|
156
|
+
try {
|
|
157
|
+
const u = new URL(url);
|
|
158
|
+
const base = `${u.origin}${u.pathname}`;
|
|
159
|
+
if (base.length <= MAX_URL_LEN)
|
|
160
|
+
return u.search ? `${base}?...` : base;
|
|
161
|
+
return base.slice(0, MAX_URL_LEN) + "...";
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return url.slice(0, MAX_URL_LEN) + "...";
|
|
165
|
+
}
|
|
166
|
+
}
|
|
117
167
|
export function formatSnapshot(snapshot) {
|
|
118
168
|
const lines = [
|
|
119
169
|
`## Current Page`,
|
|
120
|
-
`URL: ${snapshot.url}`,
|
|
121
|
-
`Title: ${snapshot.title}`,
|
|
170
|
+
`URL: ${truncUrl(snapshot.url)}`,
|
|
171
|
+
`Title: ${snapshot.title.slice(0, 200)}`,
|
|
122
172
|
"",
|
|
123
173
|
`### Page Text`,
|
|
124
|
-
snapshot.text,
|
|
174
|
+
snapshot.text,
|
|
125
175
|
"",
|
|
126
176
|
];
|
|
127
177
|
if (snapshot.links.length > 0) {
|
|
128
178
|
lines.push(`### Links (${snapshot.links.length})`);
|
|
129
179
|
for (const link of snapshot.links) {
|
|
130
|
-
lines.push(`[${link.index}] "${link.text}" -> ${link.href}`);
|
|
180
|
+
lines.push(`[${link.index}] "${link.text}" -> ${truncUrl(link.href)}`);
|
|
131
181
|
}
|
|
132
182
|
lines.push("");
|
|
133
183
|
}
|
|
@@ -139,6 +189,12 @@ export function formatSnapshot(snapshot) {
|
|
|
139
189
|
lines.push(` - ${input.type} name="${input.name}" placeholder="${input.placeholder}" selector="${input.selector}"`);
|
|
140
190
|
}
|
|
141
191
|
}
|
|
192
|
+
lines.push("");
|
|
193
|
+
}
|
|
194
|
+
if (snapshot.ariaTree) {
|
|
195
|
+
lines.push(`### Accessibility Tree`);
|
|
196
|
+
lines.push(snapshot.ariaTree);
|
|
197
|
+
lines.push("");
|
|
142
198
|
}
|
|
143
199
|
return lines.join("\n");
|
|
144
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,11 @@ export declare const DEFAULTS: {
|
|
|
7
7
|
readonly maxTypeLength: 1000;
|
|
8
8
|
readonly maxTokens: 2500;
|
|
9
9
|
readonly gotoTimeoutMs: 15000;
|
|
10
|
+
readonly actionDelayMs: 500;
|
|
11
|
+
readonly maxTotalTokens: 0;
|
|
12
|
+
readonly maxResultLength: 50000;
|
|
13
|
+
readonly maxSelectorLength: 500;
|
|
14
|
+
readonly vision: false;
|
|
15
|
+
readonly screenshotQuality: 75;
|
|
10
16
|
};
|
|
11
17
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAeX,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -5,7 +5,13 @@ export const DEFAULTS = {
|
|
|
5
5
|
timeoutMs: 120_000,
|
|
6
6
|
maxWaitMs: 5_000,
|
|
7
7
|
maxTypeLength: 1_000,
|
|
8
|
-
maxTokens: 2_500,
|
|
8
|
+
maxTokens: 2_500,
|
|
9
9
|
gotoTimeoutMs: 15_000,
|
|
10
|
+
actionDelayMs: 500,
|
|
11
|
+
maxTotalTokens: 0, // 0 = unlimited
|
|
12
|
+
maxResultLength: 50_000, // max chars in done.result
|
|
13
|
+
maxSelectorLength: 500, // max chars in CSS selector (DoS protection)
|
|
14
|
+
vision: false, // send screenshot to LLM (requires vision-capable model)
|
|
15
|
+
screenshotQuality: 75, // JPEG quality 1-100 (lower = smaller payload, fewer tokens)
|
|
10
16
|
};
|
|
11
17
|
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,MAAM;IACrB,aAAa,EAAE,GAAG;IAClB,cAAc,EAAE,CAAC,EAAS,gBAAgB;IAC1C,eAAe,EAAE,MAAM,EAAI,2BAA2B;IACtD,iBAAiB,EAAE,GAAG,EAAK,6CAA6C;IACxE,MAAM,EAAE,KAAK,EAAe,yDAAyD;IACrF,iBAAiB,EAAE,EAAE,EAAO,6DAA6D;CACjF,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -15,6 +15,54 @@ export declare const agentConfigSchema: z.ZodObject<{
|
|
|
15
15
|
gotoTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
16
16
|
allowedDomains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
17
|
blockedDomains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
actionDelayMs: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
maxTotalTokens: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
proxy: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
server: z.ZodString;
|
|
22
|
+
username: z.ZodOptional<z.ZodString>;
|
|
23
|
+
password: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
server: string;
|
|
26
|
+
username?: string | undefined;
|
|
27
|
+
password?: string | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
server: string;
|
|
30
|
+
username?: string | undefined;
|
|
31
|
+
password?: string | undefined;
|
|
32
|
+
}>>;
|
|
33
|
+
cookies: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
34
|
+
name: z.ZodString;
|
|
35
|
+
value: z.ZodString;
|
|
36
|
+
domain: z.ZodOptional<z.ZodString>;
|
|
37
|
+
path: z.ZodOptional<z.ZodString>;
|
|
38
|
+
httpOnly: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
secure: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
+
sameSite: z.ZodOptional<z.ZodEnum<["Strict", "Lax", "None"]>>;
|
|
41
|
+
expires: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
value: string;
|
|
44
|
+
name: string;
|
|
45
|
+
path?: string | undefined;
|
|
46
|
+
domain?: string | undefined;
|
|
47
|
+
httpOnly?: boolean | undefined;
|
|
48
|
+
secure?: boolean | undefined;
|
|
49
|
+
sameSite?: "Strict" | "Lax" | "None" | undefined;
|
|
50
|
+
expires?: number | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
value: string;
|
|
53
|
+
name: string;
|
|
54
|
+
path?: string | undefined;
|
|
55
|
+
domain?: string | undefined;
|
|
56
|
+
httpOnly?: boolean | undefined;
|
|
57
|
+
secure?: boolean | undefined;
|
|
58
|
+
sameSite?: "Strict" | "Lax" | "None" | undefined;
|
|
59
|
+
expires?: number | undefined;
|
|
60
|
+
}>, "many">>;
|
|
61
|
+
extraHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
62
|
+
log: z.ZodDefault<z.ZodBoolean>;
|
|
63
|
+
logDir: z.ZodDefault<z.ZodString>;
|
|
64
|
+
vision: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
screenshotQuality: z.ZodDefault<z.ZodNumber>;
|
|
18
66
|
}, "strip", z.ZodTypeAny, {
|
|
19
67
|
llmApiKey: string;
|
|
20
68
|
port: number;
|
|
@@ -25,12 +73,34 @@ export declare const agentConfigSchema: z.ZodObject<{
|
|
|
25
73
|
timeoutMs: number;
|
|
26
74
|
maxWaitMs: number;
|
|
27
75
|
gotoTimeoutMs: number;
|
|
76
|
+
actionDelayMs: number;
|
|
77
|
+
maxTotalTokens: number;
|
|
78
|
+
log: boolean;
|
|
79
|
+
logDir: string;
|
|
80
|
+
vision: boolean;
|
|
81
|
+
screenshotQuality: number;
|
|
28
82
|
llmBaseUrl?: string | undefined;
|
|
29
83
|
topP?: number | undefined;
|
|
30
84
|
frequencyPenalty?: number | undefined;
|
|
31
85
|
presencePenalty?: number | undefined;
|
|
32
86
|
allowedDomains?: string[] | undefined;
|
|
33
87
|
blockedDomains?: string[] | undefined;
|
|
88
|
+
proxy?: {
|
|
89
|
+
server: string;
|
|
90
|
+
username?: string | undefined;
|
|
91
|
+
password?: string | undefined;
|
|
92
|
+
} | undefined;
|
|
93
|
+
cookies?: {
|
|
94
|
+
value: string;
|
|
95
|
+
name: string;
|
|
96
|
+
path?: string | undefined;
|
|
97
|
+
domain?: string | undefined;
|
|
98
|
+
httpOnly?: boolean | undefined;
|
|
99
|
+
secure?: boolean | undefined;
|
|
100
|
+
sameSite?: "Strict" | "Lax" | "None" | undefined;
|
|
101
|
+
expires?: number | undefined;
|
|
102
|
+
}[] | undefined;
|
|
103
|
+
extraHeaders?: Record<string, string> | undefined;
|
|
34
104
|
}, {
|
|
35
105
|
llmApiKey: string;
|
|
36
106
|
llmBaseUrl?: string | undefined;
|
|
@@ -47,16 +117,53 @@ export declare const agentConfigSchema: z.ZodObject<{
|
|
|
47
117
|
gotoTimeoutMs?: number | undefined;
|
|
48
118
|
allowedDomains?: string[] | undefined;
|
|
49
119
|
blockedDomains?: string[] | undefined;
|
|
120
|
+
actionDelayMs?: number | undefined;
|
|
121
|
+
maxTotalTokens?: number | undefined;
|
|
122
|
+
proxy?: {
|
|
123
|
+
server: string;
|
|
124
|
+
username?: string | undefined;
|
|
125
|
+
password?: string | undefined;
|
|
126
|
+
} | undefined;
|
|
127
|
+
cookies?: {
|
|
128
|
+
value: string;
|
|
129
|
+
name: string;
|
|
130
|
+
path?: string | undefined;
|
|
131
|
+
domain?: string | undefined;
|
|
132
|
+
httpOnly?: boolean | undefined;
|
|
133
|
+
secure?: boolean | undefined;
|
|
134
|
+
sameSite?: "Strict" | "Lax" | "None" | undefined;
|
|
135
|
+
expires?: number | undefined;
|
|
136
|
+
}[] | undefined;
|
|
137
|
+
extraHeaders?: Record<string, string> | undefined;
|
|
138
|
+
log?: boolean | undefined;
|
|
139
|
+
logDir?: string | undefined;
|
|
140
|
+
vision?: boolean | undefined;
|
|
141
|
+
screenshotQuality?: number | undefined;
|
|
50
142
|
}>;
|
|
51
143
|
export declare const runOptionsSchema: z.ZodObject<{
|
|
52
144
|
url: z.ZodString;
|
|
53
145
|
prompt: z.ZodString;
|
|
146
|
+
maxIterations: z.ZodOptional<z.ZodNumber>;
|
|
147
|
+
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
148
|
+
actionDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
149
|
+
schema: z.ZodOptional<z.ZodType<z.ZodType<any, z.ZodTypeDef, any>, z.ZodTypeDef, z.ZodType<any, z.ZodTypeDef, any>>>;
|
|
150
|
+
vision: z.ZodOptional<z.ZodBoolean>;
|
|
54
151
|
}, "strip", z.ZodTypeAny, {
|
|
55
152
|
url: string;
|
|
56
153
|
prompt: string;
|
|
154
|
+
maxIterations?: number | undefined;
|
|
155
|
+
timeoutMs?: number | undefined;
|
|
156
|
+
actionDelayMs?: number | undefined;
|
|
157
|
+
vision?: boolean | undefined;
|
|
158
|
+
schema?: z.ZodType<any, z.ZodTypeDef, any> | undefined;
|
|
57
159
|
}, {
|
|
58
160
|
url: string;
|
|
59
161
|
prompt: string;
|
|
162
|
+
maxIterations?: number | undefined;
|
|
163
|
+
timeoutMs?: number | undefined;
|
|
164
|
+
actionDelayMs?: number | undefined;
|
|
165
|
+
vision?: boolean | undefined;
|
|
166
|
+
schema?: z.ZodType<any, z.ZodTypeDef, any> | undefined;
|
|
60
167
|
}>;
|
|
61
168
|
export type ValidatedConfig = z.infer<typeof agentConfigSchema>;
|
|
62
169
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AAoBtC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;EAQ3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|