@pcamarajr/scout 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/engine.js +6 -0
- package/dist/engine.js.map +1 -1
- package/dist/runner/agent-tools.d.ts +1 -1
- package/dist/runner/agent-tools.js +84 -2
- package/dist/runner/agent-tools.js.map +1 -1
- package/dist/runner/ai-runner.js +4 -2
- package/dist/runner/ai-runner.js.map +1 -1
- package/dist/runner/browser.d.ts +76 -2
- package/dist/runner/browser.js +243 -5
- package/dist/runner/browser.js.map +1 -1
- package/dist/runner/network-match.d.ts +41 -0
- package/dist/runner/network-match.js +0 -0
- package/dist/runner/network-match.js.map +1 -0
- package/dist/runner/script-runner.js +11 -0
- package/dist/runner/script-runner.js.map +1 -1
- package/dist/specs.js +117 -1
- package/dist/specs.js.map +1 -1
- package/dist/types.d.ts +57 -0
- package/package.json +1 -1
- package/templates/AGENTS.md +44 -1
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Scout is self-healing browser QA. You write a scenario in one sentence; an AI ag
|
|
|
9
9
|
|
|
10
10
|
- ✍️ **Author in one sentence** — no selectors, no code. Just the flow and what should happen.
|
|
11
11
|
- 🤖 **Verified in a real browser** — an agent judges behavior ("the paywall must *not* appear"), not just clicks.
|
|
12
|
+
- 🌐 **Sees console & network** — assert "no console errors" or "a POST to `/api/checkout` returned 2xx" — not just the visible DOM.
|
|
12
13
|
- ⚡ **Replays for free** — recorded runs are pure Playwright. ~zero cost, seconds per scenario, CI-ready.
|
|
13
14
|
- 🔧 **Self-heals** — when the UI changes, AI re-verifies and re-records; you review the diff.
|
|
14
15
|
- 🧠 **Works with Claude, Gemini, or OpenAI** — zero-config with Claude Code; one env var for the rest.
|
package/dist/engine.js
CHANGED
|
@@ -28,6 +28,7 @@ export async function runScenario(store, scenario, config = loadConfig(), opts =
|
|
|
28
28
|
storageState,
|
|
29
29
|
locale: config.locale,
|
|
30
30
|
runDir,
|
|
31
|
+
permissions: scenario.permissions,
|
|
31
32
|
});
|
|
32
33
|
let result;
|
|
33
34
|
if (cached?.length) {
|
|
@@ -187,6 +188,7 @@ async function recordPreviewVideo(scenario, steps, config, storageState, runDir)
|
|
|
187
188
|
runDir,
|
|
188
189
|
recordVideo: true,
|
|
189
190
|
slowMoMs: pacing.slowMoMs,
|
|
191
|
+
permissions: scenario.permissions,
|
|
190
192
|
});
|
|
191
193
|
}
|
|
192
194
|
catch {
|
|
@@ -228,6 +230,7 @@ async function runAi(scenario, config, store, runDir, storageState, opts) {
|
|
|
228
230
|
storageState,
|
|
229
231
|
locale: config.locale,
|
|
230
232
|
runDir,
|
|
233
|
+
permissions: scenario.permissions,
|
|
231
234
|
});
|
|
232
235
|
let result;
|
|
233
236
|
try {
|
|
@@ -270,6 +273,9 @@ const INERT_BETWEEN_FILLS = new Set([
|
|
|
270
273
|
"assertVisible",
|
|
271
274
|
"assertNotVisible",
|
|
272
275
|
"assertUrl",
|
|
276
|
+
"assertNetwork",
|
|
277
|
+
"assertNoConsoleErrors",
|
|
278
|
+
"assertConsoleMessage",
|
|
273
279
|
"screenshot",
|
|
274
280
|
]);
|
|
275
281
|
function targetKey(target) {
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export interface ScoutToolContext {
|
|
|
37
37
|
}) => void;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Builds the
|
|
40
|
+
* Builds the browser tools + scout_verdict as engine-neutral definitions.
|
|
41
41
|
* The Portuguese descriptions/messages are intentionally verbatim from the
|
|
42
42
|
* original ai-runner — they are part of the verifier's behavior and are tracked
|
|
43
43
|
* for a separate English-sweep chore, NOT to be translated here.
|
|
@@ -7,7 +7,7 @@ const fail = (error) => ({
|
|
|
7
7
|
isError: true,
|
|
8
8
|
});
|
|
9
9
|
/**
|
|
10
|
-
* Builds the
|
|
10
|
+
* Builds the browser tools + scout_verdict as engine-neutral definitions.
|
|
11
11
|
* The Portuguese descriptions/messages are intentionally verbatim from the
|
|
12
12
|
* original ai-runner — they are part of the verifier's behavior and are tracked
|
|
13
13
|
* for a separate English-sweep chore, NOT to be translated here.
|
|
@@ -45,9 +45,28 @@ export function createScoutTools(ctx) {
|
|
|
45
45
|
}),
|
|
46
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 }) => {
|
|
47
47
|
try {
|
|
48
|
+
const before = session.tabCount();
|
|
48
49
|
const target = await session.click(ref);
|
|
49
50
|
record({ kind: "click", target });
|
|
50
|
-
|
|
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."
|
|
53
|
+
: "";
|
|
54
|
+
return ok(`Cliquei em ${target.description}.${opened}\n\n${await afterAction()}`);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
return fail(e);
|
|
58
|
+
}
|
|
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({
|
|
61
|
+
urlGlob: z
|
|
62
|
+
.string()
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("Glob da URL do tab alvo, ex: **/booking**. Omitido = tab mais recente."),
|
|
65
|
+
}), async ({ urlGlob }) => {
|
|
66
|
+
try {
|
|
67
|
+
await session.switchTab(urlGlob);
|
|
68
|
+
record({ kind: "switchTab", ...(urlGlob ? { urlGlob } : {}) });
|
|
69
|
+
return ok(`Troquei para o tab: ${session.page.url()}.\n\n${await afterAction()}`);
|
|
51
70
|
}
|
|
52
71
|
catch (e) {
|
|
53
72
|
return fail(e);
|
|
@@ -129,6 +148,69 @@ export function createScoutTools(ctx) {
|
|
|
129
148
|
return fail(e);
|
|
130
149
|
}
|
|
131
150
|
}),
|
|
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 () => {
|
|
152
|
+
try {
|
|
153
|
+
return ok(session.formatLogs());
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
return fail(e);
|
|
157
|
+
}
|
|
158
|
+
}),
|
|
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)"),
|
|
162
|
+
status: z
|
|
163
|
+
.union([z.number().int(), z.enum(["2xx", "3xx", "4xx", "5xx"])])
|
|
164
|
+
.optional()
|
|
165
|
+
.describe("Status exato (200) ou classe (2xx)"),
|
|
166
|
+
responseIncludes: z
|
|
167
|
+
.array(z.string())
|
|
168
|
+
.optional()
|
|
169
|
+
.describe("Trechos que DEVEM aparecer no corpo da resposta"),
|
|
170
|
+
}), async ({ urlGlob, method, status, responseIncludes }) => {
|
|
171
|
+
try {
|
|
172
|
+
await session.assertNetwork({ urlGlob, method, status, responseIncludes });
|
|
173
|
+
record({ kind: "assertNetwork", urlGlob, method, status, responseIncludes });
|
|
174
|
+
return ok(`Asserção de rede passou: ${method ?? "ANY"} ${urlGlob}${status ? ` (status ${status})` : ""}.`);
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
return fail(e);
|
|
178
|
+
}
|
|
179
|
+
}),
|
|
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({
|
|
181
|
+
ignore: z
|
|
182
|
+
.array(z.string())
|
|
183
|
+
.optional()
|
|
184
|
+
.describe("Substrings de erros conhecidos a ignorar"),
|
|
185
|
+
}), async ({ ignore }) => {
|
|
186
|
+
try {
|
|
187
|
+
await session.assertNoConsoleErrors(ignore);
|
|
188
|
+
record({ kind: "assertNoConsoleErrors", ignore });
|
|
189
|
+
return ok("Nenhum erro no console.");
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
return fail(e);
|
|
193
|
+
}
|
|
194
|
+
}),
|
|
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({
|
|
196
|
+
includes: z
|
|
197
|
+
.array(z.string().min(1))
|
|
198
|
+
.min(1)
|
|
199
|
+
.describe("Trechos NÃO-VAZIOS que devem TODOS aparecer numa mesma mensagem"),
|
|
200
|
+
type: z
|
|
201
|
+
.string()
|
|
202
|
+
.optional()
|
|
203
|
+
.describe("Tipo do console: log, debug, info, warning, error (omitido = qualquer)"),
|
|
204
|
+
}), async ({ includes, type }) => {
|
|
205
|
+
try {
|
|
206
|
+
await session.assertConsoleMessage(includes, type);
|
|
207
|
+
record({ kind: "assertConsoleMessage", includes, ...(type ? { type } : {}) });
|
|
208
|
+
return ok(`Asserção de console passou: mensagem contendo ${includes.join(" + ")}${type ? ` (tipo ${type})` : ""}.`);
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
return fail(e);
|
|
212
|
+
}
|
|
213
|
+
}),
|
|
132
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 }) => {
|
|
133
215
|
try {
|
|
134
216
|
await session.screenshot(label);
|
|
@@ -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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"}
|
package/dist/runner/ai-runner.js
CHANGED
|
@@ -43,8 +43,9 @@ Método de trabalho:
|
|
|
43
43
|
1. Comece com browser_navigate para a página inicial do fluxo (ou browser_snapshot se já estiver lá).
|
|
44
44
|
2. Execute o fluxo descrito no cenário, passo a passo, sempre lendo o snapshot antes de agir.
|
|
45
45
|
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ê.
|
|
46
|
-
4.
|
|
47
|
-
5.
|
|
46
|
+
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.
|
|
47
|
+
5. Capture browser_screenshot como evidência nos momentos-chave.
|
|
48
|
+
6. Termine SEMPRE com scout_verdict:
|
|
48
49
|
- verified: todo o comportamento esperado foi confirmado por asserções
|
|
49
50
|
- failed: comportamento esperado está quebrado (descreva exatamente o quê)
|
|
50
51
|
- partial: parte funciona, parte não, ou não foi possível verificar tudo
|
|
@@ -55,6 +56,7 @@ Regras:
|
|
|
55
56
|
- Se um elemento não está no snapshot, tire novo snapshot ou role o fluxo de outro jeito — não invente refs.
|
|
56
57
|
- Nunca use segredos literais: use $ENV:VAR_NAME — vale tanto em browser_fill quanto em URLs de browser_navigate (ex: tokens na query string).
|
|
57
58
|
- 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.
|
|
59
|
+
- Asserções de rede/console devem ser TOLERANTES: case requests por método + padrão de URL + status; só use responseIncludes com trechos estáveis (nomes de campos), nunca ids/timestamps. Asserção colada a valor volátil quebra no replay.
|
|
58
60
|
- Seja econômico: não explore além do cenário. Seu orçamento é de ${config.maxTurns} ações.
|
|
59
61
|
- 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.`;
|
|
60
62
|
const userPrompt = `Verifique este cenário de QA:\n\n## ${scenario.name}\n\n${scenario.scenario}${scenario.notes ? `\n\nNotas: ${scenario.notes}` : ""}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-runner.js","sourceRoot":"","sources":["../../src/runner/ai-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,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;IAEnB,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,MAAM,YAAY,GAAG;;YAEX,MAAM,CAAC,OAAO;EACxB,WAAW;EACX,OAAO
|
|
1
|
+
{"version":3,"file":"ai-runner.js","sourceRoot":"","sources":["../../src/runner/ai-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/runner/browser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Page } from "playwright";
|
|
2
|
-
import type { Step, Target } from "../types.js";
|
|
2
|
+
import type { NetworkMatcher, PermissionPolicy, Step, Target } from "../types.js";
|
|
3
3
|
export interface ElementInfo {
|
|
4
4
|
ref: number;
|
|
5
5
|
role: string;
|
|
@@ -25,7 +25,17 @@ export interface LaunchOptions {
|
|
|
25
25
|
recordVideo?: boolean;
|
|
26
26
|
/** Playwright slowMo (ms/action) — paces the preview replay for human viewing */
|
|
27
27
|
slowMoMs?: number;
|
|
28
|
+
/** Browser permission policy resolved from the scenario spec (grant/deny/geo). */
|
|
29
|
+
permissions?: PermissionPolicy;
|
|
28
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Builds an init-script that denies the permissions that would otherwise pop a
|
|
33
|
+
* native prompt (geolocation, notifications, camera, microphone), stubbing the
|
|
34
|
+
* Web APIs so the prompt never reaches the browser. Runs before any page
|
|
35
|
+
* script, in every page of the context (including popups). `deny` only matters
|
|
36
|
+
* in headed runs — headless already denies silently.
|
|
37
|
+
*/
|
|
38
|
+
export declare function denyPermissionsStub(deny: string[]): string;
|
|
29
39
|
/**
|
|
30
40
|
* Thin Playwright wrapper shared by the AI runner and the replay runner.
|
|
31
41
|
* Owns ref→element resolution, tracing and screenshots.
|
|
@@ -33,15 +43,65 @@ export interface LaunchOptions {
|
|
|
33
43
|
export declare class BrowserSession {
|
|
34
44
|
private browser;
|
|
35
45
|
private context;
|
|
36
|
-
readonly page: Page;
|
|
37
46
|
private opts;
|
|
38
47
|
/** Date.now() at video start (context creation); undefined when not recording */
|
|
39
48
|
readonly videoEpoch: number | undefined;
|
|
40
49
|
private refs;
|
|
41
50
|
private screenshotCount;
|
|
42
51
|
readonly screenshots: string[];
|
|
52
|
+
/**
|
|
53
|
+
* Per-page ring-buffered observers (console + network), keyed by Page. A
|
|
54
|
+
* popup's logs/requests stay scoped to its own tab; asserts and formatLogs
|
|
55
|
+
* read the ACTIVE tab's buffer. Listeners are attached when each page is born
|
|
56
|
+
* (incl. popups), so a new tab's early logs are not missed.
|
|
57
|
+
*/
|
|
58
|
+
private pageBuffers;
|
|
59
|
+
/** The tab the agent/replay currently acts on; changed by switchTab. */
|
|
60
|
+
private activePage;
|
|
61
|
+
/** The first page — it owns the recorded video for the whole context. */
|
|
62
|
+
private readonly firstPage;
|
|
43
63
|
private constructor();
|
|
64
|
+
/** The tab currently under control. Switching tabs reassigns it. */
|
|
65
|
+
get page(): Page;
|
|
44
66
|
static launch(opts: LaunchOptions): Promise<BrowserSession>;
|
|
67
|
+
/**
|
|
68
|
+
* Passive observers for console + network. We only LISTEN (never `route()`),
|
|
69
|
+
* so the real app traffic is untouched — these feed the deterministic
|
|
70
|
+
* assertNetwork / assertNoConsoleErrors checks.
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* Starts passive console + network observers on a page and registers its
|
|
74
|
+
* ring-buffered store. Called for the first page and for every popup/new tab
|
|
75
|
+
* the context opens, so a tab's logs are captured from birth — before any
|
|
76
|
+
* switchTab. Idempotent. We only LISTEN (never route()), so app traffic is
|
|
77
|
+
* untouched.
|
|
78
|
+
*/
|
|
79
|
+
private trackPage;
|
|
80
|
+
/** Console + network buffers for a page (the active tab by default). */
|
|
81
|
+
private buffers;
|
|
82
|
+
/** Number of open tabs in the context — lets a click hint that one opened. */
|
|
83
|
+
tabCount(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Switches the active tab. With no glob, waits for and moves to the newest
|
|
86
|
+
* other tab (the one a click just opened). With a glob, waits for a tab whose
|
|
87
|
+
* URL matches it. Then waits for the tab to finish loading so the next
|
|
88
|
+
* snapshot/assert doesn't race the popup's about:blank → real-URL navigation.
|
|
89
|
+
*/
|
|
90
|
+
switchTab(urlGlob?: string): Promise<void>;
|
|
91
|
+
/** The most recently opened tab other than the active one, waiting if none yet. */
|
|
92
|
+
private newestOtherTab;
|
|
93
|
+
/**
|
|
94
|
+
* Resolves a tab whose URL matches the glob, tolerating the about:blank →
|
|
95
|
+
* real-URL transition of a freshly opened popup: it watches both already-open
|
|
96
|
+
* tabs and tabs opened later, re-checking on every navigation until one
|
|
97
|
+
* matches or the step timeout elapses.
|
|
98
|
+
*
|
|
99
|
+
* When several tabs match (the glob is unanchored "contains", so a broad glob
|
|
100
|
+
* like `**\/it-it/**` can match both the opener and the popup), the MOST
|
|
101
|
+
* RECENTLY opened match wins — that is the tab a click just produced, not the
|
|
102
|
+
* opener at index 0.
|
|
103
|
+
*/
|
|
104
|
+
private findTabByUrl;
|
|
45
105
|
resolveUrl(url: string): string;
|
|
46
106
|
navigate(url: string): Promise<void>;
|
|
47
107
|
/**
|
|
@@ -64,6 +124,20 @@ export declare class BrowserSession {
|
|
|
64
124
|
assertVisible(text: string): Promise<void>;
|
|
65
125
|
assertNotVisible(text: string): Promise<void>;
|
|
66
126
|
assertUrl(pattern: string): Promise<void>;
|
|
127
|
+
/** Asserts an expected network call was observed. Throws with a reason on miss. */
|
|
128
|
+
assertNetwork(matcher: NetworkMatcher): Promise<void>;
|
|
129
|
+
/** Asserts no console errors (console.error + uncaught) except ignored substrings. */
|
|
130
|
+
assertNoConsoleErrors(ignore?: string[]): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Asserts the active tab logged at least one console message containing ALL
|
|
133
|
+
* of `includes` within a SINGLE message (not spread across messages),
|
|
134
|
+
* optionally constrained to a console `type` (log, debug, error, ...).
|
|
135
|
+
* Tolerant by design: a specific substring (e.g. a "DEBUG:[FEATURE/x]"
|
|
136
|
+
* prefix) won't match unrelated console noise.
|
|
137
|
+
*/
|
|
138
|
+
assertConsoleMessage(includes: string[], type?: string): Promise<void>;
|
|
139
|
+
/** Compact dump of recent network + console activity for the agent to inspect. */
|
|
140
|
+
formatLogs(): string;
|
|
67
141
|
screenshot(label: string): Promise<string>;
|
|
68
142
|
/** Replays one recorded step (used by the deterministic runner). */
|
|
69
143
|
executeStep(step: Step): Promise<void>;
|
package/dist/runner/browser.js
CHANGED
|
@@ -1,7 +1,35 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { chromium } from "playwright";
|
|
3
|
+
import { findConsoleErrors, globToRegex, matchNetwork, } from "./network-match.js";
|
|
4
|
+
/**
|
|
5
|
+
* Builds an init-script that denies the permissions that would otherwise pop a
|
|
6
|
+
* native prompt (geolocation, notifications, camera, microphone), stubbing the
|
|
7
|
+
* Web APIs so the prompt never reaches the browser. Runs before any page
|
|
8
|
+
* script, in every page of the context (including popups). `deny` only matters
|
|
9
|
+
* in headed runs — headless already denies silently.
|
|
10
|
+
*/
|
|
11
|
+
export function denyPermissionsStub(deny) {
|
|
12
|
+
return `(() => {
|
|
13
|
+
const denied = ${JSON.stringify(deny)};
|
|
14
|
+
if (denied.includes("geolocation") && navigator.geolocation) {
|
|
15
|
+
const fail = (_s, e) => { if (e) e({ code: 1, message: "User denied Geolocation", PERMISSION_DENIED: 1, POSITION_UNAVAILABLE: 2, TIMEOUT: 3 }); };
|
|
16
|
+
navigator.geolocation.getCurrentPosition = fail;
|
|
17
|
+
navigator.geolocation.watchPosition = (s, e) => { fail(s, e); return 0; };
|
|
18
|
+
}
|
|
19
|
+
if (denied.includes("notifications") && "Notification" in window) {
|
|
20
|
+
try { Object.defineProperty(window.Notification, "permission", { configurable: true, get: () => "denied" }); } catch (_e) {}
|
|
21
|
+
window.Notification.requestPermission = () => Promise.resolve("denied");
|
|
22
|
+
}
|
|
23
|
+
if ((denied.includes("camera") || denied.includes("microphone")) && navigator.mediaDevices) {
|
|
24
|
+
navigator.mediaDevices.getUserMedia = () => Promise.reject(new DOMException("Permission denied", "NotAllowedError"));
|
|
25
|
+
}
|
|
26
|
+
})();`;
|
|
27
|
+
}
|
|
3
28
|
const VIDEO_SIZE = { width: 390, height: 844 };
|
|
4
29
|
const STEP_TIMEOUT = 10_000;
|
|
30
|
+
/** Cap the ring buffers so a long-running session can't grow them unbounded. */
|
|
31
|
+
const NETWORK_LOG_CAP = 300;
|
|
32
|
+
const CONSOLE_LOG_CAP = 500;
|
|
5
33
|
/**
|
|
6
34
|
* Thin Playwright wrapper shared by the AI runner and the replay runner.
|
|
7
35
|
* Owns ref→element resolution, tracing and screenshots.
|
|
@@ -9,35 +37,176 @@ const STEP_TIMEOUT = 10_000;
|
|
|
9
37
|
export class BrowserSession {
|
|
10
38
|
browser;
|
|
11
39
|
context;
|
|
12
|
-
page;
|
|
13
40
|
opts;
|
|
14
41
|
videoEpoch;
|
|
15
42
|
refs;
|
|
16
43
|
screenshotCount = 0;
|
|
17
44
|
screenshots = [];
|
|
45
|
+
/**
|
|
46
|
+
* Per-page ring-buffered observers (console + network), keyed by Page. A
|
|
47
|
+
* popup's logs/requests stay scoped to its own tab; asserts and formatLogs
|
|
48
|
+
* read the ACTIVE tab's buffer. Listeners are attached when each page is born
|
|
49
|
+
* (incl. popups), so a new tab's early logs are not missed.
|
|
50
|
+
*/
|
|
51
|
+
pageBuffers = new Map();
|
|
52
|
+
/** The tab the agent/replay currently acts on; changed by switchTab. */
|
|
53
|
+
activePage;
|
|
54
|
+
/** The first page — it owns the recorded video for the whole context. */
|
|
55
|
+
firstPage;
|
|
18
56
|
constructor(browser, context, page, opts,
|
|
19
57
|
/** Date.now() at video start (context creation); undefined when not recording */
|
|
20
58
|
videoEpoch, refs = new Map()) {
|
|
21
59
|
this.browser = browser;
|
|
22
60
|
this.context = context;
|
|
23
|
-
this.page = page;
|
|
24
61
|
this.opts = opts;
|
|
25
62
|
this.videoEpoch = videoEpoch;
|
|
26
63
|
this.refs = refs;
|
|
64
|
+
this.activePage = page;
|
|
65
|
+
this.firstPage = page;
|
|
66
|
+
}
|
|
67
|
+
/** The tab currently under control. Switching tabs reassigns it. */
|
|
68
|
+
get page() {
|
|
69
|
+
return this.activePage;
|
|
27
70
|
}
|
|
28
71
|
static async launch(opts) {
|
|
29
72
|
const browser = await chromium.launch({ headless: opts.headless, slowMo: opts.slowMoMs });
|
|
73
|
+
const perm = opts.permissions;
|
|
30
74
|
const context = await browser.newContext({
|
|
31
75
|
locale: opts.locale ?? "pt-BR",
|
|
32
76
|
viewport: { ...VIDEO_SIZE }, // mobile-first; vertical video product
|
|
33
77
|
storageState: opts.storageState,
|
|
78
|
+
...(perm?.grant?.length ? { permissions: perm.grant } : {}),
|
|
79
|
+
...(perm?.geolocation ? { geolocation: perm.geolocation } : {}),
|
|
34
80
|
...(opts.recordVideo ? { recordVideo: { dir: opts.runDir, size: { ...VIDEO_SIZE } } } : {}),
|
|
35
81
|
});
|
|
82
|
+
// Deny stub must run before any page script and in every page (incl. popups).
|
|
83
|
+
if (perm?.deny?.length)
|
|
84
|
+
await context.addInitScript(denyPermissionsStub(perm.deny));
|
|
36
85
|
const videoEpoch = opts.recordVideo ? Date.now() : undefined;
|
|
37
86
|
await context.tracing.start({ screenshots: true, snapshots: true, sources: false });
|
|
38
87
|
const page = await context.newPage();
|
|
88
|
+
const session = new BrowserSession(browser, context, page, opts, videoEpoch);
|
|
89
|
+
session.trackPage(page); // first page: registered before context.on("page")
|
|
90
|
+
context.on("page", (p) => session.trackPage(p)); // popups/new tabs
|
|
91
|
+
return session;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Passive observers for console + network. We only LISTEN (never `route()`),
|
|
95
|
+
* so the real app traffic is untouched — these feed the deterministic
|
|
96
|
+
* assertNetwork / assertNoConsoleErrors checks.
|
|
97
|
+
*/
|
|
98
|
+
/**
|
|
99
|
+
* Starts passive console + network observers on a page and registers its
|
|
100
|
+
* ring-buffered store. Called for the first page and for every popup/new tab
|
|
101
|
+
* the context opens, so a tab's logs are captured from birth — before any
|
|
102
|
+
* switchTab. Idempotent. We only LISTEN (never route()), so app traffic is
|
|
103
|
+
* untouched.
|
|
104
|
+
*/
|
|
105
|
+
trackPage(page) {
|
|
106
|
+
if (this.pageBuffers.has(page))
|
|
107
|
+
return;
|
|
108
|
+
const buf = { console: [], network: [] };
|
|
109
|
+
this.pageBuffers.set(page, buf);
|
|
39
110
|
page.setDefaultTimeout(STEP_TIMEOUT);
|
|
40
|
-
|
|
111
|
+
page.on("close", () => this.pageBuffers.delete(page)); // release a closed popup's buffer
|
|
112
|
+
const pushConsole = (msg) => {
|
|
113
|
+
buf.console.push(msg);
|
|
114
|
+
if (buf.console.length > CONSOLE_LOG_CAP)
|
|
115
|
+
buf.console.shift();
|
|
116
|
+
};
|
|
117
|
+
page.on("console", (msg) => pushConsole({ type: msg.type(), text: msg.text() }));
|
|
118
|
+
page.on("pageerror", (err) => pushConsole({ type: "error", text: `${err.name}: ${err.message}` }));
|
|
119
|
+
page.on("response", (res) => {
|
|
120
|
+
const req = res.request();
|
|
121
|
+
let body;
|
|
122
|
+
buf.network.push({
|
|
123
|
+
method: req.method(),
|
|
124
|
+
url: res.url(),
|
|
125
|
+
status: res.status(),
|
|
126
|
+
getBody: () => (body ??= res.text().catch(() => "")),
|
|
127
|
+
});
|
|
128
|
+
if (buf.network.length > NETWORK_LOG_CAP)
|
|
129
|
+
buf.network.shift();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/** Console + network buffers for a page (the active tab by default). */
|
|
133
|
+
buffers(page = this.activePage) {
|
|
134
|
+
let buf = this.pageBuffers.get(page);
|
|
135
|
+
if (!buf) {
|
|
136
|
+
buf = { console: [], network: [] };
|
|
137
|
+
this.pageBuffers.set(page, buf);
|
|
138
|
+
}
|
|
139
|
+
return buf;
|
|
140
|
+
}
|
|
141
|
+
/** Number of open tabs in the context — lets a click hint that one opened. */
|
|
142
|
+
tabCount() {
|
|
143
|
+
return this.context.pages().length;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Switches the active tab. With no glob, waits for and moves to the newest
|
|
147
|
+
* other tab (the one a click just opened). With a glob, waits for a tab whose
|
|
148
|
+
* URL matches it. Then waits for the tab to finish loading so the next
|
|
149
|
+
* snapshot/assert doesn't race the popup's about:blank → real-URL navigation.
|
|
150
|
+
*/
|
|
151
|
+
async switchTab(urlGlob) {
|
|
152
|
+
const target = urlGlob ? await this.findTabByUrl(urlGlob) : await this.newestOtherTab();
|
|
153
|
+
this.activePage = target;
|
|
154
|
+
await target.waitForLoadState("load").catch(() => { });
|
|
155
|
+
await target.bringToFront().catch(() => { });
|
|
156
|
+
}
|
|
157
|
+
/** The most recently opened tab other than the active one, waiting if none yet. */
|
|
158
|
+
async newestOtherTab() {
|
|
159
|
+
const others = this.context.pages().filter((p) => p !== this.activePage);
|
|
160
|
+
if (others.length)
|
|
161
|
+
return others[others.length - 1];
|
|
162
|
+
return this.context.waitForEvent("page", { timeout: STEP_TIMEOUT });
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Resolves a tab whose URL matches the glob, tolerating the about:blank →
|
|
166
|
+
* real-URL transition of a freshly opened popup: it watches both already-open
|
|
167
|
+
* tabs and tabs opened later, re-checking on every navigation until one
|
|
168
|
+
* matches or the step timeout elapses.
|
|
169
|
+
*
|
|
170
|
+
* When several tabs match (the glob is unanchored "contains", so a broad glob
|
|
171
|
+
* like `**\/it-it/**` can match both the opener and the popup), the MOST
|
|
172
|
+
* RECENTLY opened match wins — that is the tab a click just produced, not the
|
|
173
|
+
* opener at index 0.
|
|
174
|
+
*/
|
|
175
|
+
async findTabByUrl(urlGlob) {
|
|
176
|
+
const re = globToRegex(urlGlob);
|
|
177
|
+
const found = () => {
|
|
178
|
+
const matches = this.context.pages().filter((p) => re.test(p.url()));
|
|
179
|
+
return matches[matches.length - 1];
|
|
180
|
+
};
|
|
181
|
+
const existing = found();
|
|
182
|
+
if (existing)
|
|
183
|
+
return existing;
|
|
184
|
+
return await new Promise((resolve, reject) => {
|
|
185
|
+
const check = () => {
|
|
186
|
+
const m = found();
|
|
187
|
+
if (m) {
|
|
188
|
+
cleanup();
|
|
189
|
+
resolve(m);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
const onPage = (p) => {
|
|
193
|
+
p.on("framenavigated", check);
|
|
194
|
+
check();
|
|
195
|
+
};
|
|
196
|
+
const cleanup = () => {
|
|
197
|
+
clearTimeout(timer);
|
|
198
|
+
this.context.off("page", onPage);
|
|
199
|
+
for (const p of this.context.pages())
|
|
200
|
+
p.off("framenavigated", check);
|
|
201
|
+
};
|
|
202
|
+
const timer = setTimeout(() => {
|
|
203
|
+
cleanup();
|
|
204
|
+
reject(new Error(`Nenhum tab com URL casando "${urlGlob}" em ${STEP_TIMEOUT}ms.`));
|
|
205
|
+
}, STEP_TIMEOUT);
|
|
206
|
+
this.context.on("page", onPage);
|
|
207
|
+
for (const p of this.context.pages())
|
|
208
|
+
p.on("framenavigated", check);
|
|
209
|
+
});
|
|
41
210
|
}
|
|
42
211
|
resolveUrl(url) {
|
|
43
212
|
return new URL(url, this.opts.baseUrl).toString();
|
|
@@ -142,6 +311,66 @@ export class BrowserSession {
|
|
|
142
311
|
throw new Error(`URL atual "${url}" não contém "${pattern}".`);
|
|
143
312
|
}
|
|
144
313
|
}
|
|
314
|
+
/** Asserts an expected network call was observed. Throws with a reason on miss. */
|
|
315
|
+
async assertNetwork(matcher) {
|
|
316
|
+
const result = await matchNetwork(this.buffers().network, matcher);
|
|
317
|
+
if (!result.ok)
|
|
318
|
+
throw new Error(result.reason ?? "Asserção de rede falhou.");
|
|
319
|
+
}
|
|
320
|
+
/** Asserts no console errors (console.error + uncaught) except ignored substrings. */
|
|
321
|
+
async assertNoConsoleErrors(ignore = []) {
|
|
322
|
+
const errors = findConsoleErrors(this.buffers().console, ignore);
|
|
323
|
+
if (errors.length) {
|
|
324
|
+
const sample = errors.slice(0, 5).map((e) => e.text).join(" | ");
|
|
325
|
+
throw new Error(`${errors.length} erro(s) no console do browser: ${sample}`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Asserts the active tab logged at least one console message containing ALL
|
|
330
|
+
* of `includes` within a SINGLE message (not spread across messages),
|
|
331
|
+
* optionally constrained to a console `type` (log, debug, error, ...).
|
|
332
|
+
* Tolerant by design: a specific substring (e.g. a "DEBUG:[FEATURE/x]"
|
|
333
|
+
* prefix) won't match unrelated console noise.
|
|
334
|
+
*/
|
|
335
|
+
async assertConsoleMessage(includes, type) {
|
|
336
|
+
// An empty substring matches every message, so any "" would make the
|
|
337
|
+
// assertion always pass — false confidence on replay. Reject it here too,
|
|
338
|
+
// mirroring the tool schema, so a hand-edited or legacy script fails closed.
|
|
339
|
+
if (!includes.length || includes.some((s) => s.length === 0)) {
|
|
340
|
+
throw new Error("assertConsoleMessage requer trechos não-vazios.");
|
|
341
|
+
}
|
|
342
|
+
const hit = this.buffers().console.find((m) => (!type || m.type === type) && includes.every((s) => m.text.includes(s)));
|
|
343
|
+
if (!hit) {
|
|
344
|
+
const want = includes.map((s) => `"${s}"`).join(" + ");
|
|
345
|
+
throw new Error(`Nenhuma mensagem de console${type ? ` do tipo "${type}"` : ""} continha ${want}.`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/** Compact dump of recent network + console activity for the agent to inspect. */
|
|
349
|
+
formatLogs() {
|
|
350
|
+
const { console: consoleMessages, network: networkRequests } = this.buffers();
|
|
351
|
+
const net = networkRequests.slice(-30).map((e) => `${e.method} ${e.status} ${e.url}`);
|
|
352
|
+
const isErrLike = (t) => t === "error" || t === "warning" || t === "warn";
|
|
353
|
+
const errs = consoleMessages
|
|
354
|
+
.filter((m) => isErrLike(m.type))
|
|
355
|
+
.slice(-30)
|
|
356
|
+
.map((m) => `[${m.type}] ${m.text}`);
|
|
357
|
+
// Other messages (log/debug/info) are surfaced too so the agent can read a
|
|
358
|
+
// DEBUG line before asserting on it with browser_assert_console_message.
|
|
359
|
+
const other = consoleMessages
|
|
360
|
+
.filter((m) => !isErrLike(m.type))
|
|
361
|
+
.slice(-30)
|
|
362
|
+
.map((m) => `[${m.type}] ${m.text}`);
|
|
363
|
+
return [
|
|
364
|
+
`Network (${networkRequests.length} requests total, últimos ${net.length}):`,
|
|
365
|
+
...(net.length ? net.map((l) => ` ${l}`) : [" (nenhum)"]),
|
|
366
|
+
``,
|
|
367
|
+
`Console errors/warnings (${errs.length}):`,
|
|
368
|
+
...(errs.length ? errs.map((l) => ` ${l}`) : [" (nenhum)"]),
|
|
369
|
+
``,
|
|
370
|
+
`Outras mensagens de console (${other.length}, p/ assert_console_message):`,
|
|
371
|
+
...(other.length ? other.map((l) => ` ${l}`) : [" (nenhum)"]),
|
|
372
|
+
].join("\n");
|
|
373
|
+
}
|
|
145
374
|
async screenshot(label) {
|
|
146
375
|
this.screenshotCount += 1;
|
|
147
376
|
const safe = label.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 40);
|
|
@@ -173,6 +402,14 @@ export class BrowserSession {
|
|
|
173
402
|
return this.assertNotVisible(step.text);
|
|
174
403
|
case "assertUrl":
|
|
175
404
|
return this.assertUrl(step.pattern);
|
|
405
|
+
case "assertNetwork":
|
|
406
|
+
return this.assertNetwork(step);
|
|
407
|
+
case "assertNoConsoleErrors":
|
|
408
|
+
return this.assertNoConsoleErrors(step.ignore);
|
|
409
|
+
case "assertConsoleMessage":
|
|
410
|
+
return this.assertConsoleMessage(step.includes, step.type);
|
|
411
|
+
case "switchTab":
|
|
412
|
+
return this.switchTab(step.urlGlob);
|
|
176
413
|
case "screenshot":
|
|
177
414
|
return void (await this.screenshot(step.label));
|
|
178
415
|
}
|
|
@@ -200,8 +437,9 @@ export class BrowserSession {
|
|
|
200
437
|
trace = undefined;
|
|
201
438
|
}
|
|
202
439
|
// The Video handle must be captured before close(); the file is only
|
|
203
|
-
// finalized once the context is closed (hence close() is awaited).
|
|
204
|
-
|
|
440
|
+
// finalized once the context is closed (hence close() is awaited). The
|
|
441
|
+
// first page owns the context recording, even after switching tabs.
|
|
442
|
+
const video = this.firstPage.video();
|
|
205
443
|
await this.context.close().catch(() => { });
|
|
206
444
|
await this.browser.close().catch(() => { });
|
|
207
445
|
let videoPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/runner/browser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/runner/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { NetworkMatcher, StatusClass } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* A network response observed during a run. The body is fetched lazily (and
|
|
4
|
+
* once) because most assertions only match on method/URL/status and reading
|
|
5
|
+
* every response body would be wasteful — and some bodies are unreadable.
|
|
6
|
+
*/
|
|
7
|
+
export interface CapturedRequest {
|
|
8
|
+
method: string;
|
|
9
|
+
url: string;
|
|
10
|
+
status: number;
|
|
11
|
+
/** Resolves the response body text; should never throw (return "" on failure). */
|
|
12
|
+
getBody: () => Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
/** A console message captured from the page (console.* + uncaught errors). */
|
|
15
|
+
export interface ConsoleMessage {
|
|
16
|
+
type: string;
|
|
17
|
+
text: string;
|
|
18
|
+
}
|
|
19
|
+
export interface MatchResult {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
reason?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compiles a URL glob into a RegExp. `*` matches within a path segment, `**`
|
|
25
|
+
* matches across segments. The pattern is unanchored, so it behaves like
|
|
26
|
+
* "contains" — `**\/api/checkout` matches any URL containing `/api/checkout`.
|
|
27
|
+
* `?` (and every other regex metachar) is treated literally, since query
|
|
28
|
+
* strings legitimately contain `?`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function globToRegex(glob: string): RegExp;
|
|
31
|
+
/** Matches a status against an exact code (200) or a class ("2xx"). */
|
|
32
|
+
export declare function matchStatus(spec: number | StatusClass | undefined, status: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Tolerant network assertion: finds a captured request matching method + URL
|
|
35
|
+
* glob + status, then (if `responseIncludes` is set) requires at least one such
|
|
36
|
+
* response whose body contains every listed substring. Designed to survive
|
|
37
|
+
* replay despite volatile data — match on stable shape, not exact values.
|
|
38
|
+
*/
|
|
39
|
+
export declare function matchNetwork(entries: CapturedRequest[], m: NetworkMatcher): Promise<MatchResult>;
|
|
40
|
+
/** Console errors (console.error + uncaught exceptions) minus ignored substrings. */
|
|
41
|
+
export declare function findConsoleErrors(messages: ConsoleMessage[], ignore?: string[]): ConsoleMessage[];
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-match.js","sourceRoot":"","sources":["../../src/runner/network-match.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@ const ASSERTION_KINDS = new Set([
|
|
|
4
4
|
"assertVisible",
|
|
5
5
|
"assertNotVisible",
|
|
6
6
|
"assertUrl",
|
|
7
|
+
"assertNetwork",
|
|
8
|
+
"assertNoConsoleErrors",
|
|
9
|
+
"assertConsoleMessage",
|
|
7
10
|
]);
|
|
8
11
|
/**
|
|
9
12
|
* Replay dedicated to producing the preview video: identical step execution to
|
|
@@ -53,6 +56,14 @@ export function describeStep(step) {
|
|
|
53
56
|
return `verificar texto AUSENTE "${step.text}"`;
|
|
54
57
|
case "assertUrl":
|
|
55
58
|
return `verificar URL contém "${step.pattern}"`;
|
|
59
|
+
case "assertNetwork":
|
|
60
|
+
return `verificar request ${step.method ?? "ANY"} ${step.urlGlob}${step.status ? ` (status ${step.status})` : ""}${step.responseIncludes?.length ? ` contendo ${step.responseIncludes.join(", ")}` : ""}`;
|
|
61
|
+
case "assertNoConsoleErrors":
|
|
62
|
+
return `verificar ausência de erros no console${step.ignore?.length ? ` (ignorando ${step.ignore.join(", ")})` : ""}`;
|
|
63
|
+
case "assertConsoleMessage":
|
|
64
|
+
return `verificar mensagem de console contendo ${step.includes.map((s) => `"${s}"`).join(" + ")}${step.type ? ` (tipo ${step.type})` : ""}`;
|
|
65
|
+
case "switchTab":
|
|
66
|
+
return `trocar para o tab ${step.urlGlob ? `que casa "${step.urlGlob}"` : "mais recente"}`;
|
|
56
67
|
case "screenshot":
|
|
57
68
|
return `screenshot "${step.label}"`;
|
|
58
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/runner/script-runner.ts"],"names":[],"mappings":"AAWA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAe;IAC5C,aAAa;IACb,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,WAAW;
|
|
1
|
+
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/runner/script-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/specs.js
CHANGED
|
@@ -16,7 +16,121 @@ import { SCOUT_DIR } from "./config.js";
|
|
|
16
16
|
export const SPECS_DIR = "specs";
|
|
17
17
|
const SPEC_EXT = ".scout.md";
|
|
18
18
|
/** Per-scenario override keys allowed under a heading. */
|
|
19
|
-
const OVERRIDE_KEYS = new Set([
|
|
19
|
+
const OVERRIDE_KEYS = new Set([
|
|
20
|
+
"profile",
|
|
21
|
+
"notes",
|
|
22
|
+
"tags",
|
|
23
|
+
"grantPermissions",
|
|
24
|
+
"denyPermissions",
|
|
25
|
+
"geolocation",
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Browser permissions Scout can grant/deny per scenario. Curated (not a
|
|
29
|
+
* pass-through to Playwright) so a typo fails loudly at load time instead of
|
|
30
|
+
* silently becoming a no-op. `deny` is enforced with an init-script stub for
|
|
31
|
+
* the permissions that pop a native prompt (geolocation, notifications,
|
|
32
|
+
* camera, microphone); the rest are denied by the ephemeral context anyway.
|
|
33
|
+
*/
|
|
34
|
+
const PERMISSION_ALLOWLIST = new Set([
|
|
35
|
+
"geolocation",
|
|
36
|
+
"notifications",
|
|
37
|
+
"camera",
|
|
38
|
+
"microphone",
|
|
39
|
+
"clipboard-read",
|
|
40
|
+
"clipboard-write",
|
|
41
|
+
"midi",
|
|
42
|
+
]);
|
|
43
|
+
/** Parse a permission list from YAML (array/string) or a comma-separated override line. */
|
|
44
|
+
function parsePermissionList(raw, ctx) {
|
|
45
|
+
let items;
|
|
46
|
+
if (Array.isArray(raw))
|
|
47
|
+
items = raw.map(String);
|
|
48
|
+
else if (typeof raw === "string") {
|
|
49
|
+
const inner = raw.trim().replace(/^\[|\]$/g, "");
|
|
50
|
+
items = inner.split(",").map((t) => t.trim()).filter(Boolean);
|
|
51
|
+
}
|
|
52
|
+
if (!items?.length)
|
|
53
|
+
return undefined;
|
|
54
|
+
for (const p of items) {
|
|
55
|
+
if (!PERMISSION_ALLOWLIST.has(p)) {
|
|
56
|
+
throw new Error(`Unknown permission "${p}" in ${ctx}. Allowed: ${[...PERMISSION_ALLOWLIST].join(", ")}.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return [...new Set(items)];
|
|
60
|
+
}
|
|
61
|
+
/** Parse geolocation coords from a YAML object or a "<lat>, <lng>" override line. */
|
|
62
|
+
function parseGeolocation(raw, ctx) {
|
|
63
|
+
if (raw == null)
|
|
64
|
+
return undefined;
|
|
65
|
+
let lat;
|
|
66
|
+
let lng;
|
|
67
|
+
if (typeof raw === "object" && !Array.isArray(raw)) {
|
|
68
|
+
const o = raw;
|
|
69
|
+
lat = Number(o.latitude);
|
|
70
|
+
lng = Number(o.longitude);
|
|
71
|
+
}
|
|
72
|
+
else if (typeof raw === "string") {
|
|
73
|
+
const parts = raw.split(",").map((t) => t.trim());
|
|
74
|
+
if (parts.length !== 2) {
|
|
75
|
+
throw new Error(`Invalid geolocation "${raw}" in ${ctx}. Expected "<latitude>, <longitude>".`);
|
|
76
|
+
}
|
|
77
|
+
lat = Number(parts[0]);
|
|
78
|
+
lng = Number(parts[1]);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new Error(`Invalid geolocation in ${ctx}. Expected "<latitude>, <longitude>".`);
|
|
82
|
+
}
|
|
83
|
+
if (!Number.isFinite(lat) || !Number.isFinite(lng)) {
|
|
84
|
+
throw new Error(`Invalid geolocation in ${ctx}: latitude and longitude must be numbers.`);
|
|
85
|
+
}
|
|
86
|
+
return { latitude: lat, longitude: lng };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the permission policy for one scenario: file frontmatter is the
|
|
90
|
+
* default, per-section keys override it, merged per-axis (a section that sets
|
|
91
|
+
* only `denyPermissions` still inherits the file's `grantPermissions`).
|
|
92
|
+
* Granting geolocation requires coordinates; supplying coordinates implies
|
|
93
|
+
* granting geolocation.
|
|
94
|
+
*/
|
|
95
|
+
function resolvePermissions(data, overrides, ctx) {
|
|
96
|
+
const grant = "grantPermissions" in overrides
|
|
97
|
+
? parsePermissionList(overrides.grantPermissions, ctx)
|
|
98
|
+
: parsePermissionList(data.grantPermissions, ctx);
|
|
99
|
+
const deny = "denyPermissions" in overrides
|
|
100
|
+
? parsePermissionList(overrides.denyPermissions, ctx)
|
|
101
|
+
: parsePermissionList(data.denyPermissions, ctx);
|
|
102
|
+
const geolocation = "geolocation" in overrides
|
|
103
|
+
? parseGeolocation(overrides.geolocation, ctx)
|
|
104
|
+
: parseGeolocation(data.geolocation, ctx);
|
|
105
|
+
// Coords imply granting geolocation; granting geolocation needs coords.
|
|
106
|
+
let grantList = grant;
|
|
107
|
+
if (geolocation) {
|
|
108
|
+
grantList = grantList ? [...new Set([...grantList, "geolocation"])] : ["geolocation"];
|
|
109
|
+
}
|
|
110
|
+
if (grantList?.includes("geolocation") && !geolocation) {
|
|
111
|
+
throw new Error(`Granting geolocation in ${ctx} requires coordinates: add a "geolocation: <latitude>, <longitude>" line.`);
|
|
112
|
+
}
|
|
113
|
+
// Grant wins over deny so a scenario can grant a permission the file denies by
|
|
114
|
+
// default (e.g. file denies geolocation, one scenario grants it with coords).
|
|
115
|
+
// This also avoids a silent contradiction at launch, where the deny stub would
|
|
116
|
+
// otherwise override the grant at the JS-API layer.
|
|
117
|
+
let denyList = deny;
|
|
118
|
+
if (denyList && grantList) {
|
|
119
|
+
denyList = denyList.filter((p) => !grantList.includes(p));
|
|
120
|
+
if (!denyList.length)
|
|
121
|
+
denyList = undefined;
|
|
122
|
+
}
|
|
123
|
+
if (!grantList && !denyList && !geolocation)
|
|
124
|
+
return undefined;
|
|
125
|
+
const policy = {};
|
|
126
|
+
if (grantList)
|
|
127
|
+
policy.grant = grantList;
|
|
128
|
+
if (denyList)
|
|
129
|
+
policy.deny = denyList;
|
|
130
|
+
if (geolocation)
|
|
131
|
+
policy.geolocation = geolocation;
|
|
132
|
+
return policy;
|
|
133
|
+
}
|
|
20
134
|
export function slugify(name) {
|
|
21
135
|
return name
|
|
22
136
|
.toLowerCase()
|
|
@@ -126,6 +240,7 @@ export function parseSpec(specFile, root, cwd) {
|
|
|
126
240
|
}
|
|
127
241
|
seen.add(scenarioSlug);
|
|
128
242
|
const tags = parseTags(overrides.tags) ?? fileTags;
|
|
243
|
+
const permissions = resolvePermissions(data, overrides, `${relFile} → "${section.name}"`);
|
|
129
244
|
scenarios.push({
|
|
130
245
|
slug: `${fileSlug}/${scenarioSlug}`,
|
|
131
246
|
name: section.name,
|
|
@@ -134,6 +249,7 @@ export function parseSpec(specFile, root, cwd) {
|
|
|
134
249
|
profile: overrides.profile ?? fileProfile,
|
|
135
250
|
notes: overrides.notes,
|
|
136
251
|
tags,
|
|
252
|
+
permissions,
|
|
137
253
|
file: relFile,
|
|
138
254
|
});
|
|
139
255
|
}
|
package/dist/specs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,6 +8,49 @@ export interface Target {
|
|
|
8
8
|
/** Human-readable label for reports */
|
|
9
9
|
description: string;
|
|
10
10
|
}
|
|
11
|
+
/** HTTP status family used by network assertions when an exact code is too strict. */
|
|
12
|
+
export type StatusClass = "2xx" | "3xx" | "4xx" | "5xx";
|
|
13
|
+
/**
|
|
14
|
+
* Tolerant matcher for a network request observed during the run. Matching is
|
|
15
|
+
* by shape (method + URL glob + status), never by exact volatile values, so the
|
|
16
|
+
* assertion survives deterministic replay despite dynamic ids/timestamps.
|
|
17
|
+
*/
|
|
18
|
+
export interface NetworkMatcher {
|
|
19
|
+
/** HTTP method to match; omit to match any method. */
|
|
20
|
+
method?: string;
|
|
21
|
+
/** Glob over the request URL — `*` within a path segment, `**` across segments. */
|
|
22
|
+
urlGlob: string;
|
|
23
|
+
/** Exact status (e.g. 200) or a class (`2xx`); omit to match any. */
|
|
24
|
+
status?: number | StatusClass;
|
|
25
|
+
/**
|
|
26
|
+
* Substrings that must ALL appear in the response body. Keep these stable
|
|
27
|
+
* (field names like `orderId`), not volatile values (ids, timestamps).
|
|
28
|
+
*/
|
|
29
|
+
responseIncludes?: string[];
|
|
30
|
+
}
|
|
31
|
+
/** Geographic coordinates for a granted geolocation permission. */
|
|
32
|
+
export interface GeoCoords {
|
|
33
|
+
latitude: number;
|
|
34
|
+
longitude: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Browser permission policy resolved from a scenario's spec (file frontmatter
|
|
38
|
+
* is the default, per-section keys override it, merged per-axis). Three states
|
|
39
|
+
* per permission: absent = native browser behavior (untouched); granted =
|
|
40
|
+
* explicitly allowed; denied = explicitly blocked via an init-script stub so no
|
|
41
|
+
* native prompt appears. `deny` only matters in headed runs (headless already
|
|
42
|
+
* denies silently); `grant`/`geolocation` change behavior in both. Resolved
|
|
43
|
+
* fresh from the spec each run — never baked into the recorded script (it is a
|
|
44
|
+
* context-creation parameter, like storageState, not a replayable step).
|
|
45
|
+
*/
|
|
46
|
+
export interface PermissionPolicy {
|
|
47
|
+
/** Permissions to grant explicitly (Playwright newContext `permissions`). */
|
|
48
|
+
grant?: string[];
|
|
49
|
+
/** Permissions to block via an init-script stub (kills the native prompt). */
|
|
50
|
+
deny?: string[];
|
|
51
|
+
/** Coordinates for a granted geolocation permission. */
|
|
52
|
+
geolocation?: GeoCoords;
|
|
53
|
+
}
|
|
11
54
|
export type Step = {
|
|
12
55
|
kind: "navigate";
|
|
13
56
|
url: string;
|
|
@@ -40,6 +83,18 @@ export type Step = {
|
|
|
40
83
|
} | {
|
|
41
84
|
kind: "assertUrl";
|
|
42
85
|
pattern: string;
|
|
86
|
+
} | ({
|
|
87
|
+
kind: "assertNetwork";
|
|
88
|
+
} & NetworkMatcher) | {
|
|
89
|
+
kind: "assertNoConsoleErrors";
|
|
90
|
+
ignore?: string[];
|
|
91
|
+
} | {
|
|
92
|
+
kind: "assertConsoleMessage";
|
|
93
|
+
includes: string[];
|
|
94
|
+
type?: string;
|
|
95
|
+
} | {
|
|
96
|
+
kind: "switchTab";
|
|
97
|
+
urlGlob?: string;
|
|
43
98
|
} | {
|
|
44
99
|
kind: "screenshot";
|
|
45
100
|
label: string;
|
|
@@ -66,6 +121,8 @@ export interface Scenario {
|
|
|
66
121
|
notes?: string;
|
|
67
122
|
/** Free-form tags (file-level + per-scenario, merged) */
|
|
68
123
|
tags?: string[];
|
|
124
|
+
/** Browser permission policy (frontmatter default + per-section override). */
|
|
125
|
+
permissions?: PermissionPolicy;
|
|
69
126
|
/** Source spec file, relative to the project root */
|
|
70
127
|
file: string;
|
|
71
128
|
}
|
package/package.json
CHANGED
package/templates/AGENTS.md
CHANGED
|
@@ -53,10 +53,53 @@ Rules that matter when you author:
|
|
|
53
53
|
|
|
54
54
|
- **Frontmatter** (YAML, optional): `feature` (defaults to the filename), `profile` (default auth profile), `tags`.
|
|
55
55
|
- **Each `## heading` is one scenario.** Its logical slug is `<file-slug>/<scenario-slug>` (e.g. `paywall/free-user-hits-paywall-on-ep-3`) and must be unique across the suite. Duplicate headings in a file, or a scenario with no body text, are hard errors.
|
|
56
|
-
- **Per-scenario overrides:** immediately under a heading you may place `profile:`, `notes:`, and `
|
|
56
|
+
- **Per-scenario overrides:** immediately under a heading you may place `profile:`, `notes:`, `tags:`, `grantPermissions:`, `denyPermissions:`, and `geolocation:` lines (before the prose) to override the file-level defaults.
|
|
57
57
|
- **Body = flow + expected behavior, in plain language.** Describe what the user does and what must (or must not) be true. No CSS selectors, no Playwright code — the agent discovers the real elements at run time and records them.
|
|
58
58
|
- A `.scout.md` whose every `##` lives inside a fenced ```` ``` ```` block parses as **zero scenarios** (that is how `example.scout.md` documents the format without polluting the suite).
|
|
59
59
|
|
|
60
|
+
## Browser permissions
|
|
61
|
+
|
|
62
|
+
Some flows hit native browser permission prompts (geolocation, notifications, camera, microphone) that the agent cannot click — they live outside the page DOM. Declare a permission policy so Scout sets it at browser launch, for both the AI run and deterministic replay. Three states **per permission**:
|
|
63
|
+
|
|
64
|
+
- **Not declared** → native browser behavior, untouched (a headed run may show the prompt).
|
|
65
|
+
- **`grantPermissions:`** → granted explicitly.
|
|
66
|
+
- **`denyPermissions:`** → blocked via an init-script stub, so no native prompt appears.
|
|
67
|
+
|
|
68
|
+
Declarable in the **frontmatter** (default for every scenario in the file) and overridable **per scenario** (merged per-axis: a section that sets only `denyPermissions` still inherits the file's `grantPermissions`). Lists are comma-separated.
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
---
|
|
72
|
+
feature: Store Locator
|
|
73
|
+
denyPermissions: [geolocation] # file default: never prompt for location
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Search falls back to manual when location is blocked
|
|
77
|
+
Open the store locator, search for "Merate", and confirm results appear.
|
|
78
|
+
|
|
79
|
+
## Nearby stores with a fixed location
|
|
80
|
+
grantPermissions: geolocation # this scenario grants instead
|
|
81
|
+
geolocation: 45.69, 9.43 # required when geolocation is granted (lat, lng)
|
|
82
|
+
|
|
83
|
+
Open the store locator; the nearest store to the given coordinates is shown.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Notes:
|
|
87
|
+
|
|
88
|
+
- Allowed permissions: `geolocation`, `notifications`, `camera`, `microphone`, `clipboard-read`, `clipboard-write`, `midi`. An unknown name fails the load with a clear error.
|
|
89
|
+
- Granting `geolocation` **requires** a `geolocation: <latitude>, <longitude>` line; supplying coordinates implies granting it.
|
|
90
|
+
- **Grant wins over deny:** a scenario that grants a permission overrides a file-level deny of the same permission (as in the example above).
|
|
91
|
+
- `denyPermissions` matters mainly in **headed** runs (headless already denies silently). What changes behavior in CI is `grantPermissions` and a granted `geolocation` with coordinates.
|
|
92
|
+
|
|
93
|
+
## New tabs / popups
|
|
94
|
+
|
|
95
|
+
When a click opens a new tab (a `target="_blank"` link or `window.open`), Scout's `browser_click` result flags it. The agent then calls **`browser_switch_tab`** to move control to that tab; with no argument it switches to the newest tab, or pass a `urlGlob` (e.g. `**/booking**`) to target a specific one. The switch waits for the tab to finish loading, then becomes a recorded `switchTab` step that replays deterministically.
|
|
96
|
+
|
|
97
|
+
Console and network observers are **per-tab**: assertions (`browser_assert_no_console_errors`, `browser_assert_network`, and the console-log assertion) always read the **active tab**, so after switching you assert on the right page. The browser permission policy applies to every tab in the context, including popups.
|
|
98
|
+
|
|
99
|
+
## Asserting a console log appeared
|
|
100
|
+
|
|
101
|
+
Beyond *absence* of errors, you can assert a **specific log was emitted** (e.g. a `DEBUG:[...]` line gated behind a debug flag). `browser_assert_console_message` requires a message on the **active tab** that contains **all** of the given substrings **within a single message**, optionally constrained to a `type` (`log`, `debug`, `error`, …). Inspect first (`browser_inspect_logs` now also lists `log`/`debug`/`info` messages), then assert on a **stable** substring — a prefix like `DEBUG:[FEATURE/x]`, never a volatile value — so the check tolerates unrelated console noise. It becomes a recorded step that fails the deterministic replay if the log goes missing.
|
|
102
|
+
|
|
60
103
|
## Base URL and secrets
|
|
61
104
|
|
|
62
105
|
There is a **default base URL** set at `scout init` (in `scout.config.json`). It can be **overridden per run** without editing the file:
|