@pcamarajr/scout 0.11.2 → 0.12.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.
@@ -3,14 +3,14 @@ import { resolveEnvValue } from "./browser.js";
3
3
  import { relativizeUrl } from "./engines/types.js";
4
4
  const ok = (text) => ({ text });
5
5
  const fail = (error) => ({
6
- text: `ERRO: ${error instanceof Error ? error.message : String(error)}`,
6
+ text: `ERROR: ${error instanceof Error ? error.message : String(error)}`,
7
7
  isError: true,
8
8
  });
9
9
  /**
10
- * Builds the browser tools + scout_verdict as engine-neutral definitions.
11
- * The Portuguese descriptions/messages are intentionally verbatim from the
12
- * original ai-runner they are part of the verifier's behavior and are tracked
13
- * for a separate English-sweep chore, NOT to be translated here.
10
+ * Builds the browser tools + scout_verdict as engine-neutral definitions. Each
11
+ * tool wraps a BrowserSession action, records the deterministic Step it produced
12
+ * (via `record`), and returns an updated page snapshot so the agent can decide
13
+ * its next move; scout_verdict writes the run's verdict through `setVerdict`.
14
14
  */
15
15
  export function createScoutTools(ctx) {
16
16
  const { session, config, record, setVerdict } = ctx;
@@ -25,7 +25,7 @@ export function createScoutTools(ctx) {
25
25
  handler: (args) => handler(schema.parse(args)),
26
26
  });
27
27
  return [
28
- define("browser_navigate", "Navega para uma URL (absoluta ou relativa ao baseUrl do app). Para tokens/segredos na URL use placeholder $ENV:VAR_NAME — resolvido em runtime, nunca passa por você.", z.object({ url: z.string().describe("Ex: /login, /renovar?token=$ENV:TOKEN ou https://...") }), async ({ url }) => {
28
+ define("browser_navigate", "Navigates to a URL (absolute or relative to the app's baseUrl). For tokens/secrets in the URL use the placeholder $ENV:VAR_NAME — resolved at runtime, never passes through you.", z.object({ url: z.string().describe("E.g. /login, /renew?token=$ENV:TOKEN or https://...") }), async ({ url }) => {
29
29
  try {
30
30
  await session.navigate(url);
31
31
  record({ kind: "navigate", url: relativizeUrl(url, config.baseUrl) });
@@ -35,7 +35,7 @@ export function createScoutTools(ctx) {
35
35
  return fail(e);
36
36
  }
37
37
  }),
38
- define("browser_snapshot", "Retorna o estado atual da página: URL, título, elementos interativos numerados [ref] e texto visível. Use sempre que precisar decidir a próxima ação.", z.object({}), async () => {
38
+ define("browser_snapshot", "Returns the current page state: URL, title, numbered interactive elements [ref] and visible text. Use it whenever you need to decide the next action.", z.object({}), async () => {
39
39
  try {
40
40
  return ok(await afterAction());
41
41
  }
@@ -43,59 +43,59 @@ export function createScoutTools(ctx) {
43
43
  return fail(e);
44
44
  }
45
45
  }),
46
- define("browser_click", "Clica no elemento identificado pelo [ref] do último snapshot.", z.object({ ref: z.number().int().describe("Ref numérico do snapshot") }), async ({ ref }) => {
46
+ define("browser_click", "Clicks the element identified by the [ref] from the last snapshot.", z.object({ ref: z.number().int().describe("Numeric ref from the snapshot") }), async ({ ref }) => {
47
47
  try {
48
48
  const before = session.tabCount();
49
49
  const target = await session.click(ref);
50
50
  record({ kind: "click", target });
51
51
  const opened = session.tabCount() > before
52
- ? "\n\n⚠️ Um novo tab/aba foi aberto por esse clique. Use browser_switch_tab para interagir com ele antes de continuar."
52
+ ? "\n\n⚠️ A new tab was opened by this click. Use browser_switch_tab to interact with it before continuing."
53
53
  : "";
54
- return ok(`Cliquei em ${target.description}.${opened}\n\n${await afterAction()}`);
54
+ return ok(`Clicked ${target.description}.${opened}\n\n${await afterAction()}`);
55
55
  }
56
56
  catch (e) {
57
57
  return fail(e);
58
58
  }
59
59
  }),
60
- define("browser_switch_tab", "Troca o controle para outro tab/aba do navegador (ex: após um clique que abre um popup). Sem urlGlob, vai para o tab mais recém-aberto. Com urlGlob, vai para o tab cuja URL casa o padrão (* dentro de um segmento, ** entre segmentos). Espera o tab carregar. Vira passo determinístico.", z.object({
60
+ define("browser_switch_tab", "Switches control to another browser tab (e.g. after a click that opens a popup). Without urlGlob, goes to the most recently opened tab. With urlGlob, goes to the tab whose URL matches the pattern (* within a segment, ** across segments). Waits for the tab to load. Becomes a deterministic step.", z.object({
61
61
  urlGlob: z
62
62
  .string()
63
63
  .optional()
64
- .describe("Glob da URL do tab alvo, ex: **/booking**. Omitido = tab mais recente."),
64
+ .describe("Glob of the target tab's URL, e.g. **/booking**. Omitted = most recent tab."),
65
65
  }), async ({ urlGlob }) => {
66
66
  try {
67
67
  await session.switchTab(urlGlob);
68
68
  record({ kind: "switchTab", ...(urlGlob ? { urlGlob } : {}) });
69
- return ok(`Troquei para o tab: ${session.page.url()}.\n\n${await afterAction()}`);
69
+ return ok(`Switched to tab: ${session.page.url()}.\n\n${await afterAction()}`);
70
70
  }
71
71
  catch (e) {
72
72
  return fail(e);
73
73
  }
74
74
  }),
75
- define("browser_fill", "Preenche um campo. Para credenciais/segredos use placeholder $ENV:VAR_NAME — o valor real vem do ambiente e nunca passa por você.", z.object({
75
+ define("browser_fill", "Fills a field. For credentials/secrets use the placeholder $ENV:VAR_NAME — the real value comes from the environment and never passes through you.", z.object({
76
76
  ref: z.number().int(),
77
- value: z.string().describe("Texto literal ou $ENV:VAR_NAME"),
77
+ value: z.string().describe("Literal text or $ENV:VAR_NAME"),
78
78
  }), async ({ ref, value }) => {
79
79
  try {
80
80
  const target = await session.fill(ref, resolveEnvValue(value));
81
81
  record({ kind: "fill", target, value });
82
- return ok(`Preenchi ${target.description}.`);
82
+ return ok(`Filled ${target.description}.`);
83
83
  }
84
84
  catch (e) {
85
85
  return fail(e);
86
86
  }
87
87
  }),
88
- define("browser_select", "Seleciona uma opção em um <select> pelo value ou label.", z.object({ ref: z.number().int(), value: z.string() }), async ({ ref, value }) => {
88
+ define("browser_select", "Selects an option in a <select> by value or label.", z.object({ ref: z.number().int(), value: z.string() }), async ({ ref, value }) => {
89
89
  try {
90
90
  const target = await session.select(ref, resolveEnvValue(value));
91
91
  record({ kind: "select", target, value });
92
- return ok(`Selecionei "${value}" em ${target.description}.\n\n${await afterAction()}`);
92
+ return ok(`Selected "${value}" in ${target.description}.\n\n${await afterAction()}`);
93
93
  }
94
94
  catch (e) {
95
95
  return fail(e);
96
96
  }
97
97
  }),
98
- define("browser_press", "Pressiona uma tecla (Enter, Escape, Tab, ArrowDown...).", z.object({ key: z.string() }), async ({ key }) => {
98
+ define("browser_press", "Presses a key (Enter, Escape, Tab, ArrowDown...).", z.object({ key: z.string() }), async ({ key }) => {
99
99
  try {
100
100
  await session.press(key);
101
101
  record({ kind: "press", key });
@@ -105,18 +105,64 @@ export function createScoutTools(ctx) {
105
105
  return fail(e);
106
106
  }
107
107
  }),
108
- define("browser_wait_for", "Espera texto aparecer na página OU a URL conter um trecho. Use após ações que disparam carregamento.", z.object({
109
- text: z.string().optional().describe("Texto que deve ficar visível"),
110
- urlContains: z.string().optional().describe("Trecho esperado na URL"),
111
- }), async ({ text, urlContains }) => {
108
+ define("browser_wheel", "Dispatches a scroll gesture (mouse wheel) at position (x, y) — omitted = viewport center. Positive deltaY scrolls down. Use on scroll/gesture-driven UIs (vertical feeds, carousels, swipe pagination) that don't respond to the keyboard.", z.object({
109
+ deltaX: z.number().describe("Horizontal delta in px (positive = right)"),
110
+ deltaY: z.number().describe("Vertical delta in px (positive = down)"),
111
+ x: z.number().int().optional().describe("Gesture X position (omitted = center)"),
112
+ y: z.number().int().optional().describe("Gesture Y position (omitted = center)"),
113
+ }), async ({ deltaX, deltaY, x, y }) => {
114
+ try {
115
+ await session.wheel(deltaX, deltaY, x, y);
116
+ record({
117
+ kind: "wheel",
118
+ deltaX,
119
+ deltaY,
120
+ ...(x !== undefined ? { x } : {}),
121
+ ...(y !== undefined ? { y } : {}),
122
+ });
123
+ return ok(await afterAction());
124
+ }
125
+ catch (e) {
126
+ return fail(e);
127
+ }
128
+ }),
129
+ define("browser_drag", "Drags the mouse from (fromX, fromY) to (toX, toY) — down, movement in intermediate steps, up. Emulates swipe/drag (advancing an item in a feed, closing a bottom-sheet, slider). Coordinates in px relative to the viewport.", z.object({
130
+ fromX: z.number().int(),
131
+ fromY: z.number().int(),
132
+ toX: z.number().int(),
133
+ toY: z.number().int(),
134
+ }), async ({ fromX, fromY, toX, toY }) => {
135
+ try {
136
+ await session.drag(fromX, fromY, toX, toY);
137
+ record({ kind: "drag", fromX, fromY, toX, toY });
138
+ return ok(await afterAction());
139
+ }
140
+ catch (e) {
141
+ return fail(e);
142
+ }
143
+ }),
144
+ define("browser_wait_for", "Waits for text to appear on the page OR the URL to contain a substring. Use after actions that trigger loading.", z.object({
145
+ text: z.string().optional().describe("Text that should become visible"),
146
+ urlContains: z.string().optional().describe("Substring expected in the URL"),
147
+ timeoutMs: z
148
+ .number()
149
+ .int()
150
+ .positive()
151
+ .optional()
152
+ .describe("Timeout in ms for this wait (default 10000)"),
153
+ }), async ({ text, urlContains, timeoutMs }) => {
112
154
  try {
113
155
  if (text) {
114
- await session.waitForText(text);
115
- record({ kind: "waitForText", text });
156
+ await session.waitForText(text, timeoutMs);
157
+ record({ kind: "waitForText", text, ...(timeoutMs ? { timeout: timeoutMs } : {}) });
116
158
  }
117
159
  if (urlContains) {
118
- await session.waitForUrl(urlContains);
119
- record({ kind: "waitForUrl", pattern: urlContains });
160
+ await session.waitForUrl(urlContains, timeoutMs);
161
+ record({
162
+ kind: "waitForUrl",
163
+ pattern: urlContains,
164
+ ...(timeoutMs ? { timeout: timeoutMs } : {}),
165
+ });
120
166
  }
121
167
  return ok(await afterAction());
122
168
  }
@@ -124,31 +170,54 @@ export function createScoutTools(ctx) {
124
170
  return fail(e);
125
171
  }
126
172
  }),
127
- define("browser_assert", "Registra uma verificação do comportamento esperado. Use para CADA expectativa do cenárioessas asserções viram o teste determinístico.", z.object({
128
- visibleText: z.string().optional().describe("Texto que DEVE estar visível"),
129
- notVisibleText: z.string().optional().describe("Texto que NÃO deve estar visível"),
130
- urlContains: z.string().optional().describe("Trecho que a URL deve conter"),
131
- }), async ({ visibleText, notVisibleText, urlContains }) => {
173
+ define("browser_assert", "Records a check of the expected behavior. Use it for EVERY scenario expectationthese assertions become the deterministic test.", z.object({
174
+ visibleText: z.string().optional().describe("Text that MUST be visible"),
175
+ notVisibleText: z.string().optional().describe("Text that must NOT be visible"),
176
+ urlContains: z.string().optional().describe("Substring the URL must contain"),
177
+ timeoutMs: z
178
+ .number()
179
+ .int()
180
+ .positive()
181
+ .optional()
182
+ .describe("Timeout in ms for these assertions (default 10000)"),
183
+ oneShot: z
184
+ .boolean()
185
+ .optional()
186
+ .describe("For visibleText only: waits for the page to settle (network idle, capped at 2s) and checks ONCE instead of polling the whole timeout. Use only when the text should already be present on the loaded page — content that arrives late (streaming, slow hydration) needs the default poll."),
187
+ }), async ({ visibleText, notVisibleText, urlContains, timeoutMs, oneShot }) => {
132
188
  try {
133
189
  if (visibleText) {
134
- await session.assertVisible(visibleText);
135
- record({ kind: "assertVisible", text: visibleText });
190
+ await session.assertVisible(visibleText, { timeout: timeoutMs, oneShot });
191
+ record({
192
+ kind: "assertVisible",
193
+ text: visibleText,
194
+ ...(timeoutMs ? { timeout: timeoutMs } : {}),
195
+ ...(oneShot ? { oneShot: true } : {}),
196
+ });
136
197
  }
137
198
  if (notVisibleText) {
138
- await session.assertNotVisible(notVisibleText);
139
- record({ kind: "assertNotVisible", text: notVisibleText });
199
+ await session.assertNotVisible(notVisibleText, timeoutMs);
200
+ record({
201
+ kind: "assertNotVisible",
202
+ text: notVisibleText,
203
+ ...(timeoutMs ? { timeout: timeoutMs } : {}),
204
+ });
140
205
  }
141
206
  if (urlContains) {
142
- await session.assertUrl(urlContains);
143
- record({ kind: "assertUrl", pattern: urlContains });
207
+ await session.assertUrl(urlContains, timeoutMs);
208
+ record({
209
+ kind: "assertUrl",
210
+ pattern: urlContains,
211
+ ...(timeoutMs ? { timeout: timeoutMs } : {}),
212
+ });
144
213
  }
145
- return ok("Asserção passou.");
214
+ return ok("Assertion passed.");
146
215
  }
147
216
  catch (e) {
148
217
  return fail(e);
149
218
  }
150
219
  }),
151
- define("browser_inspect_logs", "Mostra o que o tab ATIVO registrou: requests de rede (método, status, URL) e mensagens de console — errors/warnings E outras (log/debug/info). Use ANTES de browser_assert_network / browser_assert_no_console_errors / browser_assert_console_message para ver o que de fato aconteceu e escrever uma asserção tolerante (case por padrão de URL + status ou por um trecho ESTÁVEL da mensagem, nunca por valores voláteis).", z.object({}), async () => {
220
+ define("browser_inspect_logs", "Shows what the ACTIVE tab recorded: network requests (method, status, URL) and console messages — errors/warnings AND others (log/debug/info). Use it BEFORE browser_assert_network / browser_assert_no_console_errors / browser_assert_console_message to see what actually happened and write a tolerant assertion (match by URL pattern + status or by a STABLE part of the message, never by volatile values).", z.object({}), async () => {
152
221
  try {
153
222
  return ok(session.formatLogs());
154
223
  }
@@ -156,77 +225,77 @@ export function createScoutTools(ctx) {
156
225
  return fail(e);
157
226
  }
158
227
  }),
159
- define("browser_assert_network", 'Verifica que uma chamada de rede esperada aconteceu. Case o request por método + padrão de URL (urlGlob com * e **) e, opcionalmente, status. Para inspecionar o corpo da resposta use responseIncludes com trechos ESTÁVEIS (nomes de campos como "orderId"), nunca valores voláteis (ids, timestamps). Vira teste determinístico.', z.object({
160
- urlGlob: z.string().describe("Padrão da URL, ex: **/api/checkout/**"),
161
- method: z.string().optional().describe("GET, POST, ... (omitido = qualquer método)"),
228
+ define("browser_assert_network", 'Verifies that an expected network call happened. Match the request by method + URL pattern (urlGlob with * and **) and, optionally, status. To inspect the response body use responseIncludes with STABLE substrings (field names like "orderId"), never volatile values (ids, timestamps). Becomes a deterministic test.', z.object({
229
+ urlGlob: z.string().describe("URL pattern, e.g. **/api/checkout/**"),
230
+ method: z.string().optional().describe("GET, POST, ... (omitted = any method)"),
162
231
  status: z
163
232
  .union([z.number().int(), z.enum(["2xx", "3xx", "4xx", "5xx"])])
164
233
  .optional()
165
- .describe("Status exato (200) ou classe (2xx)"),
234
+ .describe("Exact status (200) or class (2xx)"),
166
235
  responseIncludes: z
167
236
  .array(z.string())
168
237
  .optional()
169
- .describe("Trechos que DEVEM aparecer no corpo da resposta"),
238
+ .describe("Substrings that MUST appear in the response body"),
170
239
  }), async ({ urlGlob, method, status, responseIncludes }) => {
171
240
  try {
172
241
  await session.assertNetwork({ urlGlob, method, status, responseIncludes });
173
242
  record({ kind: "assertNetwork", urlGlob, method, status, responseIncludes });
174
- return ok(`Asserção de rede passou: ${method ?? "ANY"} ${urlGlob}${status ? ` (status ${status})` : ""}.`);
243
+ return ok(`Network assertion passed: ${method ?? "ANY"} ${urlGlob}${status ? ` (status ${status})` : ""}.`);
175
244
  }
176
245
  catch (e) {
177
246
  return fail(e);
178
247
  }
179
248
  }),
180
- define("browser_assert_no_console_errors", "Verifica que NÃO houve erros no console do browser (console.error + exceções não capturadas) durante o fluxo. Use ignore para tolerar erros conhecidos/esperados (casa por substring). Vira teste determinístico.", z.object({
249
+ define("browser_assert_no_console_errors", "Verifies that there were NO errors in the browser console (console.error + uncaught exceptions) during the flow. Use ignore to tolerate known/expected errors (matched by substring). Becomes a deterministic test.", z.object({
181
250
  ignore: z
182
251
  .array(z.string())
183
252
  .optional()
184
- .describe("Substrings de erros conhecidos a ignorar"),
253
+ .describe("Substrings of known errors to ignore"),
185
254
  }), async ({ ignore }) => {
186
255
  try {
187
256
  await session.assertNoConsoleErrors(ignore);
188
257
  record({ kind: "assertNoConsoleErrors", ignore });
189
- return ok("Nenhum erro no console.");
258
+ return ok("No console errors.");
190
259
  }
191
260
  catch (e) {
192
261
  return fail(e);
193
262
  }
194
263
  }),
195
- define("browser_assert_console_message", 'Verifica que o console do tab ATIVO registrou uma mensagem contendo TODOS os trechos informados, casados numa MESMA mensagem (não espalhados). Rode browser_inspect_logs antes para ver o texto real e escolher trechos ESTÁVEIS (ex: o prefixo "DEBUG:[FEATURE/...]"), nunca valores voláteis. Opcionalmente restrinja por tipo. Vira teste determinístico.', z.object({
264
+ define("browser_assert_console_message", 'Verifies that the ACTIVE tab\'s console logged a message containing ALL of the given substrings, matched within a SINGLE message (not spread across messages). Run browser_inspect_logs first to see the real text and pick STABLE substrings (e.g. the prefix "DEBUG:[FEATURE/...]"), never volatile values. Optionally constrain by type. Becomes a deterministic test.', z.object({
196
265
  includes: z
197
266
  .array(z.string().min(1))
198
267
  .min(1)
199
- .describe("Trechos NÃO-VAZIOS que devem TODOS aparecer numa mesma mensagem"),
268
+ .describe("NON-EMPTY substrings that must ALL appear within a single message"),
200
269
  type: z
201
270
  .string()
202
271
  .optional()
203
- .describe("Tipo do console: log, debug, info, warning, error (omitido = qualquer)"),
272
+ .describe("Console type: log, debug, info, warning, error (omitted = any)"),
204
273
  }), async ({ includes, type }) => {
205
274
  try {
206
275
  await session.assertConsoleMessage(includes, type);
207
276
  record({ kind: "assertConsoleMessage", includes, ...(type ? { type } : {}) });
208
- return ok(`Asserção de console passou: mensagem contendo ${includes.join(" + ")}${type ? ` (tipo ${type})` : ""}.`);
277
+ return ok(`Console assertion passed: message containing ${includes.join(" + ")}${type ? ` (type ${type})` : ""}.`);
209
278
  }
210
279
  catch (e) {
211
280
  return fail(e);
212
281
  }
213
282
  }),
214
- define("browser_screenshot", "Captura screenshot como evidência. Use em momentos-chave (estado final, paywall, erro encontrado).", z.object({ label: z.string().describe("Rótulo curto, ex: 'paywall-exibido'") }), async ({ label }) => {
283
+ define("browser_screenshot", "Captures a screenshot as evidence. Use it at key moments (final state, paywall, error encountered).", z.object({ label: z.string().describe("Short label, e.g. 'paywall-shown'") }), async ({ label }) => {
215
284
  try {
216
285
  await session.screenshot(label);
217
286
  record({ kind: "screenshot", label });
218
- return ok(`Screenshot "${label}" salvo.`);
287
+ return ok(`Screenshot "${label}" saved.`);
219
288
  }
220
289
  catch (e) {
221
290
  return fail(e);
222
291
  }
223
292
  }),
224
- define("scout_verdict", "OBRIGATÓRIO ao final: registra o veredito da verificação. Após chamar, encerre.", z.object({
293
+ define("scout_verdict", "MANDATORY at the end: records the verification verdict. After calling it, stop.", z.object({
225
294
  verdict: z.enum(["verified", "failed", "partial", "blocked"]),
226
- reason: z.string().describe("Justificativa objetiva, citando o que foi observado"),
295
+ reason: z.string().describe("Objective justification, citing what was observed"),
227
296
  }), async (args) => {
228
297
  setVerdict(args);
229
- return ok("Veredito registrado. Encerre agora.");
298
+ return ok("Verdict recorded. Stop now.");
230
299
  }),
231
300
  ];
232
301
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/runner/agent-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/runner/agent-tools.ts"],"names":[],"mappings":"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"}
@@ -28,49 +28,50 @@ export async function runWithAgent(session, scenario, config, viewport) {
28
28
  },
29
29
  });
30
30
  const profileInfo = scenario.profile
31
- ? `Sessão autenticada com o profile "${scenario.profile}"${config.profiles[scenario.profile]?.description ? ` (${config.profiles[scenario.profile].description})` : ""}. Você está logadonão faça login de novo a menos que o cenário peça.`
32
- : "Sessão anônima (logged-out).";
31
+ ? `Authenticated session with the profile "${scenario.profile}"${config.profiles[scenario.profile]?.description ? ` (${config.profiles[scenario.profile].description})` : ""}. You are ALREADY logged in don't log in again unless the scenario asks for it.`
32
+ : "Anonymous session (logged-out).";
33
33
  const envVars = scenario.profile ? (config.profiles[scenario.profile]?.env ?? []) : [];
34
34
  const envInfo = envVars.length
35
- ? `Env vars disponíveis via placeholder $ENV:VAR (em browser_fill e em URLs de browser_navigate): ${envVars.map((v) => `$ENV:${v}`).join(", ")}.`
35
+ ? `Env vars available via the $ENV:VAR placeholder (in browser_fill and in browser_navigate URLs): ${envVars.map((v) => `$ENV:${v}`).join(", ")}.`
36
36
  : "";
37
37
  // Cookies are seeded into the context by the runner before the flow. Announce
38
38
  // only the NAMES so the agent treats the precondition as satisfied — values
39
39
  // may be secrets ($ENV) and must never reach the LLM.
40
40
  const presetCookies = resolveCookies(scenario, config);
41
41
  const cookieInfo = presetCookies?.length
42
- ? `Cookies setados no browser antes do fluxo (pré-condição satisfeitaNÃO tente setá-los, você não tem ferramenta pra isso): ${presetCookies.map((c) => c.name).join(", ")}.`
42
+ ? `Cookies already set in the browser before the flow (precondition satisfieddo NOT try to set them, you have no tool for that): ${presetCookies.map((c) => c.name).join(", ")}.`
43
43
  : "";
44
- const viewportInfo = `Viewport: rodando como "${viewport.name}" (${viewport.width}×${viewport.height}${viewport.isMobile ? ", mobile/touch" : ""}). Verifique o layout correspondente a esse tamanho no mobile espere menu hambúrguer/nav compacta; no desktop, nav horizontal.`;
45
- const systemPrompt = `Você é Scout, um agente de QA que verifica cenários em um browser real.
44
+ const viewportInfo = `Viewport: running as "${viewport.name}" (${viewport.width}×${viewport.height}${viewport.isMobile ? ", mobile/touch" : ""}). Verify the layout for that sizeon mobile expect a hamburger menu/compact nav; on desktop, a horizontal nav.`;
45
+ const systemPrompt = `You are Scout, a QA agent that verifies scenarios in a real browser.
46
46
 
47
- App alvo: ${config.baseUrl}
47
+ Target app: ${config.baseUrl}
48
48
  ${viewportInfo}
49
49
  ${profileInfo}
50
50
  ${envInfo}
51
51
  ${cookieInfo}
52
52
 
53
- Método de trabalho:
54
- 1. Comece com browser_navigate para a página inicial do fluxo (ou browser_snapshot se estiver ).
55
- 2. Execute o fluxo descrito no cenário, passo a passo, sempre lendo o snapshot antes de agir.
56
- 3. Para CADA expectativa do cenário, use browser_assert — as asserções gravadas viram o teste determinístico que rodará em CI sem você.
57
- 4. Quando o cenário menciona logs/erros de console ou chamadas de rede/API: use browser_inspect_logs para ver o que ocorreu, depois browser_assert_network e/ou browser_assert_no_console_errors para gravar a verificação.
58
- 5. Capture browser_screenshot como evidência nos momentos-chave.
59
- 6. Termine SEMPRE com scout_verdict:
60
- - verified: todo o comportamento esperado foi confirmado por asserções
61
- - failed: comportamento esperado está quebrado (descreva exatamente o quê)
62
- - partial: parte funciona, parte não, ou não foi possível verificar tudo
63
- - blocked: não conseguiu nem chegar ao fluxo (app fora do ar, login quebrado, etc.)
53
+ Working method:
54
+ 1. Start with browser_navigate to the flow's starting page (or browser_snapshot if you're already there).
55
+ 2. Execute the flow described in the scenario, step by step, always reading the snapshot before acting.
56
+ 3. For EVERY scenario expectation, use browser_assert — the recorded assertions become the deterministic test that will run in CI without you.
57
+ 4. When the scenario mentions console logs/errors or network/API calls: use browser_inspect_logs to see what happened, then browser_assert_network and/or browser_assert_no_console_errors to record the check.
58
+ 5. Capture browser_screenshot as evidence at key moments.
59
+ 6. ALWAYS finish with scout_verdict:
60
+ - verified: all the expected behavior was confirmed by assertions
61
+ - failed: expected behavior is broken (describe exactly what)
62
+ - partial: part works, part doesn't, or not everything could be verified
63
+ - blocked: couldn't even reach the flow (app down, broken login, etc.)
64
64
 
65
- Regras:
66
- - Aja como um usuário real: um passo de cada vez, espere carregamentos com browser_wait_for.
67
- - Se um elemento não está no snapshot, tire novo snapshot ou role o fluxo de outro jeito não invente refs.
68
- - Nunca use segredos literais: use $ENV:VAR_NAME vale tanto em browser_fill quanto em URLs de browser_navigate (ex: tokens na query string).
69
- - Não re-preencha um campo que você já preencheu, a menos que a página tenha limpado o valor cada ação sua vira um passo do script gravado, e passos duplicados são ruído que fragiliza o replay.
70
- - Asserções de rede/console devem ser TOLERANTES: case requests por método + padrão de URL + status; use responseIncludes com trechos estáveis (nomes de campos), nunca ids/timestamps. Asserção colada a valor volátil quebra no replay.
71
- - Seja econômico: não explore além do cenário. Seu orçamento é de ${config.maxTurns} ações.
72
- - Se você está repetindo tentativas sem progresso (overlay bloqueando, elemento que não aparece), PARE e chame scout_verdict (partial ou blocked) explicando o obstáculo — um veredito parcial vale mais que morrer sem veredito.`;
73
- const userPrompt = `Verifique este cenário de QA:\n\n## ${scenario.name}\n\n${scenario.scenario}${scenario.notes ? `\n\nNotas: ${scenario.notes}` : ""}`;
65
+ Rules:
66
+ - Act like a real user: one step at a time, wait for loads with browser_wait_for.
67
+ - If an element isn't in the snapshot, take a new snapshot or advance the flow another waydon't invent refs.
68
+ - Gesture-driven UIs (vertical feed, carousel, swipe between items) often don't respond to the keyboard: use browser_wheel (scroll at a position) or browser_drag (point-to-point drag) and check the result in the next snapshot.
69
+ - Never use literal secrets: use $ENV:VAR_NAMEit works both in browser_fill and in browser_navigate URLs (e.g. tokens in the query string).
70
+ - Don't re-fill a field you already filled, unless the page cleared the value each of your actions becomes a step in the recorded script, and duplicate steps are noise that makes replay fragile.
71
+ - Network/console assertions must be TOLERANT: match requests by method + URL pattern + status; only use responseIncludes with stable substrings (field names), never ids/timestamps. An assertion glued to a volatile value breaks on replay.
72
+ - Be economical: don't explore beyond the scenario. Your budget is ${config.maxTurns} actions.
73
+ - If you're repeating attempts without progress (a blocking overlay, an element that won't appear), STOP and call scout_verdict (partial or blocked) explaining the obstacle — a partial verdict is worth more than dying without a verdict.`;
74
+ const userPrompt = `Verify this QA scenario:\n\n## ${scenario.name}\n\n${scenario.scenario}${scenario.notes ? `\n\nNotes: ${scenario.notes}` : ""}`;
74
75
  const provider = inferProvider(config.model);
75
76
  const engine = selectEngine(provider, config.engine);
76
77
  const run = await engine.run({
@@ -88,21 +89,21 @@ Regras:
88
89
  // with whatever it observed — a partial verdict beats a silent death.
89
90
  const mainCause = verdict ? undefined : describeNoVerdict(endInfo, config.maxTurns);
90
91
  if (!verdict) {
91
- transcript.push(`[scout] Agente encerrou sem veredito (${mainCause}) — resgate: exigindo scout_verdict com o que foi observado.`);
92
+ transcript.push(`[scout] Agent ended without a verdict (${mainCause}) — rescue: demanding scout_verdict with what was observed.`);
92
93
  try {
93
- const rescue = await run.resume("Sua verificação atingiu o limite de ações. NÃO execute mais nenhuma ação de browser. Chame scout_verdict AGORA com base no que você já observou: 'partial' se a verificação ficou incompleta, 'blocked' se você nem chegou ao fluxo, 'failed'/'verified' apenas se tinha evidência suficiente.", 4);
94
+ const rescue = await run.resume("Your verification hit the action limit. Do NOT run any more browser actions. Call scout_verdict NOW based on what you already observed: 'partial' if the verification was incomplete, 'blocked' if you didn't even reach the flow, 'failed'/'verified' only if you already had enough evidence.", 4);
94
95
  transcript.push(...rescue.transcript);
95
96
  endInfo = rescue.end;
96
97
  }
97
98
  catch (error) {
98
- transcript.push(`[scout] Resgate de veredito falhou: ${error instanceof Error ? error.message : String(error)}`);
99
+ transcript.push(`[scout] Verdict rescue failed: ${error instanceof Error ? error.message : String(error)}`);
99
100
  }
100
101
  }
101
102
  if (!verdict) {
102
103
  const cause = mainCause ?? describeNoVerdict(endInfo, config.maxTurns);
103
104
  return {
104
105
  verdict: "blocked",
105
- reason: `Falha do RUNNER, não veredito de UI: ${cause}; scout_verdict não foi chamado nem no resgate de veredito.`,
106
+ reason: `RUNNER failure, not a UI verdict: ${cause}; scout_verdict was not called, even in the verdict rescue.`,
106
107
  steps,
107
108
  transcript,
108
109
  runnerFailure: cause,
@@ -1 +1 @@
1
- {"version":3,"file":"ai-runner.js","sourceRoot":"","sources":["../../src/runner/ai-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,aAAa,GAGd,MAAM,oBAAoB,CAAC;AAG5B,gFAAgF;AAChF,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,CAAC;AAG5C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,QAAkB,EAClB,MAAmB,EACnB,QAA0B;IAE1B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAyD,CAAC;IAE9D,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B,OAAO;QACP,MAAM;QACN,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO;QAClC,CAAC,CAAC,qCAAqC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,4EAA4E;QAClP,CAAC,CAAC,8BAA8B,CAAC;IAEnC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM;QAC5B,CAAC,CAAC,kGAAkG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACjJ,CAAC,CAAC,EAAE,CAAC;IAEP,8EAA8E;IAC9E,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,aAAa,EAAE,MAAM;QACtC,CAAC,CAAC,kIAAkI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAClL,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,2BAA2B,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kIAAkI,CAAC;IAEnR,MAAM,YAAY,GAAG;;YAEX,MAAM,CAAC,OAAO;EACxB,YAAY;EACZ,WAAW;EACX,OAAO;EACP,UAAU;;;;;;;;;;;;;;;;;;;;oEAoBwD,MAAM,CAAC,QAAQ;kOAC+I,CAAC;IAEjO,MAAM,UAAU,GAAG,uCAAuC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEzJ,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;QAC3B,QAAQ;QACR,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY;QACZ,UAAU;QACV,KAAK;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IACH,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,OAAO,GAA6B,GAAG,CAAC,GAAG,CAAC;IAEhD,0EAA0E;IAC1E,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CACb,yCAAyC,SAAS,8DAA8D,CACjH,CAAC;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B,mSAAmS,EACnS,CAAC,CACF,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,SAAS,IAAI,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,wCAAwC,KAAK,6DAA6D;YAClH,KAAK;YACL,UAAU;YACV,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"ai-runner.js","sourceRoot":"","sources":["../../src/runner/ai-runner.ts"],"names":[],"mappings":"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"}
@@ -156,11 +156,42 @@ export declare class BrowserSession {
156
156
  fill(ref: number, value: string): Promise<Target>;
157
157
  select(ref: number, value: string): Promise<Target>;
158
158
  press(key: string): Promise<void>;
159
- waitForText(text: string): Promise<void>;
160
- waitForUrl(pattern: string): Promise<void>;
161
- assertVisible(text: string): Promise<void>;
162
- assertNotVisible(text: string): Promise<void>;
163
- assertUrl(pattern: string): Promise<void>;
159
+ /**
160
+ * Dispatches a wheel gesture at (x, y) — viewport center when omitted, since
161
+ * wheel events fire at the current mouse position and (0,0) may sit outside
162
+ * the scroll container the gesture is meant for. The center is derived from
163
+ * the resolved viewport, so a recorded step without coordinates replays at
164
+ * the same spot (viewport is part of the run identity).
165
+ */
166
+ wheel(deltaX: number, deltaY: number, x?: number, y?: number): Promise<void>;
167
+ /**
168
+ * Drags the mouse from one point to another (down → move → up), emulating a
169
+ * swipe/drag gesture. The move is split into intermediate events so handlers
170
+ * that track movement deltas (drag-to-dismiss, swipe navigation) see a
171
+ * realistic gesture instead of a single jump.
172
+ */
173
+ drag(fromX: number, fromY: number, toX: number, toY: number): Promise<void>;
174
+ waitForText(text: string, timeout?: number): Promise<void>;
175
+ waitForUrl(pattern: string, timeout?: number): Promise<void>;
176
+ /**
177
+ * Asserts a text is visible. Default is Playwright's polling wait (up to
178
+ * `timeout`, STEP_TIMEOUT when omitted) — right for content that may still
179
+ * be loading. `oneShot` is the fast path for content that should already be
180
+ * on a loaded page: let the page settle (network idle, capped so a chatty
181
+ * app can't stall the check) and probe visibility ONCE, so a definitive miss
182
+ * costs ~1-2s instead of the full poll — mirroring assertNotVisible.
183
+ */
184
+ assertVisible(text: string, opts?: {
185
+ timeout?: number;
186
+ oneShot?: boolean;
187
+ }): Promise<void>;
188
+ assertNotVisible(text: string, timeout?: number): Promise<void>;
189
+ /**
190
+ * Asserts the current URL contains the pattern. Instant one-shot by default
191
+ * (backward compatible); with `timeout` it tolerates an in-flight redirect
192
+ * by waiting up to that long for the URL to match.
193
+ */
194
+ assertUrl(pattern: string, timeout?: number): Promise<void>;
164
195
  /** Asserts an expected network call was observed. Throws with a reason on miss. */
165
196
  assertNetwork(matcher: NetworkMatcher): Promise<void>;
166
197
  /** Asserts no console errors (console.error + uncaught) except ignored substrings. */