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.
Files changed (82) hide show
  1. package/dist/agent/actions.d.ts.map +1 -1
  2. package/dist/agent/actions.js +7 -1
  3. package/dist/agent/actions.js.map +1 -1
  4. package/dist/agent/agent.d.ts +20 -6
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.js +197 -74
  7. package/dist/agent/agent.js.map +1 -1
  8. package/dist/agent/logger.d.ts +15 -0
  9. package/dist/agent/logger.d.ts.map +1 -0
  10. package/dist/agent/logger.js +70 -0
  11. package/dist/agent/logger.js.map +1 -0
  12. package/dist/agent/loop.d.ts +18 -3
  13. package/dist/agent/loop.d.ts.map +1 -1
  14. package/dist/agent/loop.js +123 -48
  15. package/dist/agent/loop.js.map +1 -1
  16. package/dist/agent/report.d.ts.map +1 -1
  17. package/dist/agent/report.js +41 -29
  18. package/dist/agent/report.js.map +1 -1
  19. package/dist/browser/executor.d.ts.map +1 -1
  20. package/dist/browser/executor.js +65 -11
  21. package/dist/browser/executor.js.map +1 -1
  22. package/dist/browser/pool.d.ts +33 -0
  23. package/dist/browser/pool.d.ts.map +1 -0
  24. package/dist/browser/pool.js +101 -0
  25. package/dist/browser/pool.js.map +1 -0
  26. package/dist/browser/snapshot.d.ts +1 -0
  27. package/dist/browser/snapshot.d.ts.map +1 -1
  28. package/dist/browser/snapshot.js +104 -48
  29. package/dist/browser/snapshot.js.map +1 -1
  30. package/dist/config/defaults.d.ts +6 -0
  31. package/dist/config/defaults.d.ts.map +1 -1
  32. package/dist/config/defaults.js +7 -1
  33. package/dist/config/defaults.js.map +1 -1
  34. package/dist/config/schema.d.ts +107 -0
  35. package/dist/config/schema.d.ts.map +1 -1
  36. package/dist/config/schema.js +29 -0
  37. package/dist/config/schema.js.map +1 -1
  38. package/dist/index.d.ts +3 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +5 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/llm/client.d.ts +1 -1
  43. package/dist/llm/client.d.ts.map +1 -1
  44. package/dist/llm/client.js +74 -37
  45. package/dist/llm/client.js.map +1 -1
  46. package/dist/llm/prompt.d.ts +14 -2
  47. package/dist/llm/prompt.d.ts.map +1 -1
  48. package/dist/llm/prompt.js +52 -6
  49. package/dist/llm/prompt.js.map +1 -1
  50. package/dist/llm/vision-models.d.ts +3 -0
  51. package/dist/llm/vision-models.d.ts.map +1 -0
  52. package/dist/llm/vision-models.js +30 -0
  53. package/dist/llm/vision-models.js.map +1 -0
  54. package/dist/scraper/extractors/content.d.ts +3 -2
  55. package/dist/scraper/extractors/content.d.ts.map +1 -1
  56. package/dist/scraper/extractors/content.js +4 -4
  57. package/dist/scraper/extractors/content.js.map +1 -1
  58. package/dist/scraper/extractors/ssr.d.ts +3 -2
  59. package/dist/scraper/extractors/ssr.d.ts.map +1 -1
  60. package/dist/scraper/extractors/ssr.js +4 -4
  61. package/dist/scraper/extractors/ssr.js.map +1 -1
  62. package/dist/scraper/tiers/tier1-http.d.ts.map +1 -1
  63. package/dist/scraper/tiers/tier1-http.js +7 -13
  64. package/dist/scraper/tiers/tier1-http.js.map +1 -1
  65. package/dist/scraper/tiers/tier2-stealth.d.ts.map +1 -1
  66. package/dist/scraper/tiers/tier2-stealth.js +6 -5
  67. package/dist/scraper/tiers/tier2-stealth.js.map +1 -1
  68. package/dist/scraper/tiers/tier3-browser.d.ts +1 -0
  69. package/dist/scraper/tiers/tier3-browser.d.ts.map +1 -1
  70. package/dist/scraper/tiers/tier3-browser.js +31 -26
  71. package/dist/scraper/tiers/tier3-browser.js.map +1 -1
  72. package/dist/security/action-validator.d.ts +35 -20
  73. package/dist/security/action-validator.d.ts.map +1 -1
  74. package/dist/security/action-validator.js +39 -3
  75. package/dist/security/action-validator.js.map +1 -1
  76. package/dist/security/url-validator.d.ts.map +1 -1
  77. package/dist/security/url-validator.js +10 -1
  78. package/dist/security/url-validator.js.map +1 -1
  79. package/dist/types.d.ts +97 -25
  80. package/dist/types.d.ts.map +1 -1
  81. package/package.json +8 -4
  82. 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":"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"}
@@ -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;AAqC3F,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAwCpE;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CA0CxE;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CA8B7D"}
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"}
@@ -1,23 +1,17 @@
1
1
  import * as cheerio from "cheerio";
2
- // ─── Limites do snapshot (calibrados para economizar tokens) ──────────────────
3
- const TEXT_LIMIT = 3_500; // chars de texto da página enviados ao LLM
4
- const LINKS_LIMIT = 25; // máximo de links por snapshot
5
- const FORMS_LIMIT = 5; // máximo de forms por snapshot
6
- const INPUTS_LIMIT = 10; // máximo de inputs por form
7
- // ─── Filtro de links ruído ────────────────────────────────────────────────────
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|pdf)(\?.*)?$/i;
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; // sem texto visível → irrelevante pro LLM
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 { /* URL relativa ou inválidamantém */ }
28
+ catch { /* relative or invalid URLkeep */ }
35
29
  return false;
36
30
  }
37
- // ─── Snapshot via Playwright (página renderizada com JS) ─────────────────────
38
- export async function takeSnapshot(page) {
39
- const url = page.url();
40
- const title = await page.title();
41
- const text = await page.evaluate((limit) => {
42
- return document.body?.innerText?.slice(0, limit) ?? "";
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
- }, LINKS_LIMIT);
53
- const links = rawLinks
54
- .filter(l => !isNoiseLink(l.href, l.text))
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.inputs)
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 { name: input.name || input.id || "", type: input.type || tag, placeholder: input.placeholder || "", selector };
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
- }, { forms: FORMS_LIMIT, inputs: INPUTS_LIMIT });
72
- return { url, title, text, links, forms };
62
+ return { text, rawLinks, forms };
63
+ }, EVALUATE_LIMITS);
73
64
  }
74
- // ─── Snapshot via Cheerio (HTML estático, sem browser) ───────────────────────
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
- const text = $(el).text().trim().slice(0, 80);
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 { /* href relativo inválido */ }
92
- if (!isNoiseLink(absoluteHref, text)) {
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
- const tag = ("name" in inputEl ? inputEl.name : "input").toLowerCase();
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
- // ─── Formata snapshot para envio ao LLM ──────────────────────────────────────
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, // já truncado em TEXT_LIMIT no momento da coleta
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":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/browser/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,gFAAgF;AAChF,MAAM,UAAU,GAAK,KAAK,CAAC,CAAC,iCAAiC;AAC7D,MAAM,WAAW,GAAI,EAAE,CAAC,CAAI,yBAAyB;AACrD,MAAM,WAAW,GAAI,CAAC,CAAC,CAAK,yBAAyB;AACrD,MAAM,YAAY,GAAG,EAAE,CAAC,CAAI,sBAAsB;AAClD,MAAM,UAAU,GAAK,KAAK,CAAC,CAAC,mCAAmC;AAE/D,gFAAgF;AAChF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe;IACvD,cAAc,EAAE,aAAa,EAAE,YAAY;IAC3C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY;CAC5C,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,+DAA+D,CAAC;AAEzF,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC;AAUD,MAAM,eAAe,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAE/H,SAAS,gBAAgB,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAExE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;aAC9D,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;aAC/B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,IAAI,EAAG,EAAwB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7D,IAAI,EAAG,EAAwB,CAAC,IAAI;YACpC,KAAK,EAAE,CAAC;SACT,CAAC,CAAC,CAAC;QAEN,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aACxD,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;aAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;iBACjE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;iBAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACV,MAAM,KAAK,GAAG,EAAsB,CAAC;gBACrC,MAAM,EAAE,GAAS,KAAK,CAAC,EAAE,CAAG,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAY,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,GAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAG,CAAC,CAAC,EAAE,CAAC;gBAC9D,MAAM,GAAG,GAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtD,OAAO;oBACL,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE;oBAClC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;oBACvB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;oBACpC,QAAQ;iBACT,CAAC;YACJ,CAAC,CAAC;SACL,CAAC,CAAC,CAAC;QAEN,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC,EAAE,eAAe,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,MAAM,GAAG,GAAK,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAElD,uEAAuE;IACvE,IAAI,IAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;QACtE,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SACzC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvC,yCAAyC;IACzC,IAAI,QAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI;YAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC,CAAC,gDAAgD,CAAC,CAAC;IAE5D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW;IACxD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAEvC,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAEvF,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;QAC1B,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,KAAK,CAAC,CAAC,QAAQ;QACvD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,2EAA2E;QAC3E,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAClE,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACnF,MAAM,EAAE,GAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAW,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,GAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,gEAAgE;YAChE,MAAM,IAAI,GAAG,OAA+B,CAAC;YAC7C,MAAM,GAAG,GAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;YACrC,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACnE,IAAI,EAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG;gBAC3C,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBACjD,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,OAAe;IACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,gFAAgF;AAEhF,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,GAAG,CAAC,MAAM,IAAI,WAAW;QAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAsB;IACnD,MAAM,KAAK,GAAa;QACtB,iBAAiB;QACjB,QAAQ,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAChC,UAAU,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACxC,EAAE;QACF,eAAe;QACf,QAAQ,CAAC,IAAI;QACb,EAAE;KACH,CAAC;IAEF,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,WAAW,eAAe,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -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;;;;;;;;;CASX,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAeX,CAAC"}
@@ -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, // limite de completion tokens por chamada LLM
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,8CAA8C;IAChE,aAAa,EAAE,MAAM;CACb,CAAC"}
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"}
@@ -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,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,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"}