@pcamarajr/scout 0.9.0 → 0.11.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/dist/cli.js +139 -52
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +26 -2
- package/dist/config.js +28 -1
- package/dist/config.js.map +1 -1
- package/dist/cookies.d.ts +14 -0
- package/dist/cookies.js +121 -0
- package/dist/cookies.js.map +1 -0
- package/dist/engine.d.ts +22 -9
- package/dist/engine.js +68 -44
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/init.js +3 -0
- package/dist/init.js.map +1 -1
- package/dist/mcp/server.js +51 -29
- package/dist/mcp/server.js.map +1 -1
- package/dist/report.d.ts +10 -4
- package/dist/report.js +33 -26
- package/dist/report.js.map +1 -1
- package/dist/runner/ai-runner.d.ts +3 -2
- package/dist/runner/ai-runner.js +12 -1
- package/dist/runner/ai-runner.js.map +1 -1
- package/dist/runner/browser.d.ts +58 -4
- package/dist/runner/browser.js +146 -3
- package/dist/runner/browser.js.map +1 -1
- package/dist/runner/script-runner.d.ts +9 -5
- package/dist/runner/script-runner.js +29 -7
- package/dist/runner/script-runner.js.map +1 -1
- package/dist/runner/video.d.ts +38 -8
- package/dist/runner/video.js +51 -13
- package/dist/runner/video.js.map +1 -1
- package/dist/specs.d.ts +14 -0
- package/dist/specs.js +59 -1
- package/dist/specs.js.map +1 -1
- package/dist/store.d.ts +14 -9
- package/dist/store.js +25 -16
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +54 -1
- package/dist/viewports.d.ts +54 -0
- package/dist/viewports.js +83 -0
- package/dist/viewports.js.map +1 -0
- package/package.json +1 -1
- package/templates/AGENTS.md +40 -3
package/dist/cli.js
CHANGED
|
@@ -9,9 +9,11 @@ import { detectAiCredentials, inferProvider } from "./credentials.js";
|
|
|
9
9
|
import { resolveEngineKind } from "./runner/engines/index.js";
|
|
10
10
|
import { runScenario } from "./engine.js";
|
|
11
11
|
import { runInit } from "./init.js";
|
|
12
|
-
import { buildReport, renderSummary,
|
|
13
|
-
import { addScenario, slugify } from "./specs.js";
|
|
12
|
+
import { buildReport, renderSummary, runStatus } from "./report.js";
|
|
13
|
+
import { addScenario, selectScenarios, slugify } from "./specs.js";
|
|
14
14
|
import { Store } from "./store.js";
|
|
15
|
+
import { defaultViewportName, expandScenarios, resolveViewport, runnableViewports, } from "./viewports.js";
|
|
16
|
+
import { diagnoseFfmpeg, ffmpegRemediation, resolveFont } from "./runner/video.js";
|
|
15
17
|
// Rejeições fora da cadeia de await (SDK/Playwright em subprocesso) não podem
|
|
16
18
|
// derrubar a suíte inteira — logar e deixar o cenário corrente falhar sozinho.
|
|
17
19
|
process.on("unhandledRejection", (reason) => {
|
|
@@ -53,56 +55,93 @@ program
|
|
|
53
55
|
.description("Lists scenarios and status")
|
|
54
56
|
.action(() => {
|
|
55
57
|
const store = new Store();
|
|
58
|
+
const config = loadConfig();
|
|
56
59
|
const latest = store.latestRuns();
|
|
57
|
-
for (const s of store.listScenarios()) {
|
|
58
|
-
const script = store.loadSteps(s.slug) ? "📜" : " ";
|
|
59
|
-
const status =
|
|
60
|
-
console.log(`${script} [${status.padEnd(8)}] ${s.slug} — ${s.name} (${s.profile ?? "anonymous"})`);
|
|
60
|
+
for (const { scenario: s, viewport } of expandScenarios(store.listScenarios(), config)) {
|
|
61
|
+
const script = store.loadSteps(s.slug, viewport) ? "📜" : " ";
|
|
62
|
+
const status = runStatus(s.slug, viewport, latest);
|
|
63
|
+
console.log(`${script} [${status.padEnd(8)}] ${s.slug}@${viewport} — ${s.name} (${s.profile ?? "anonymous"})`);
|
|
61
64
|
}
|
|
62
65
|
});
|
|
63
66
|
program
|
|
64
67
|
.command("go")
|
|
65
68
|
.description("Runs scenarios: cached script replay; AI on first run or when the script breaks")
|
|
66
|
-
.option("-s, --scenario <
|
|
69
|
+
.option("-s, --scenario <slugOrSpec>", "Run one scenario (full slug) or every scenario in a spec (file/dir slug)")
|
|
67
70
|
.option("--ai", "Force AI-driven run (re-records the script)", false)
|
|
68
71
|
.option("--no-heal", "Do not fall back to AI when replay fails (cheap CI)")
|
|
69
72
|
.option("--headed", "Visible browser (local debug)", false)
|
|
70
|
-
.option("--
|
|
73
|
+
.option("--demo-video", "Record a paced MP4 demo of each verified replay, with a synthetic cursor (needs ffmpeg)", false)
|
|
74
|
+
.option("--record-video", "Deprecated alias for --demo-video", false)
|
|
75
|
+
.option("--viewport <name>", "Force this viewport for the run, ad-hoc (must exist in the registry; does not persist a script). Default: SCOUT_VIEWPORT")
|
|
71
76
|
.option("--base-url <url>", "Target app URL for this run (precedence: flag > SCOUT_BASE_URL > scout.config.json)")
|
|
72
77
|
.action(async (opts) => {
|
|
73
78
|
const store = new Store();
|
|
74
|
-
|
|
79
|
+
if (opts.recordVideo)
|
|
80
|
+
console.warn("⚠ --record-video is deprecated; use --demo-video.");
|
|
81
|
+
const config = loadConfig(process.cwd(), {
|
|
82
|
+
baseUrl: opts.baseUrl,
|
|
83
|
+
recordVideo: opts.demoVideo || opts.recordVideo,
|
|
84
|
+
});
|
|
85
|
+
// Ad-hoc viewport override: forces every targeted scenario into this one
|
|
86
|
+
// viewport and runs ephemerally (no script persisted). Validate up front so
|
|
87
|
+
// a typo fails before any browser opens.
|
|
88
|
+
const viewportOverride = opts.viewport ?? process.env.SCOUT_VIEWPORT;
|
|
89
|
+
if (viewportOverride) {
|
|
90
|
+
try {
|
|
91
|
+
resolveViewport(viewportOverride, config);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
75
98
|
const all = store.listScenarios();
|
|
76
|
-
const targets = opts.scenario
|
|
77
|
-
? all.filter((s) => s.slug === opts.scenario || s.name === opts.scenario)
|
|
78
|
-
: all;
|
|
99
|
+
const targets = opts.scenario ? selectScenarios(all, opts.scenario) : all;
|
|
79
100
|
if (!targets.length) {
|
|
80
|
-
console.error(opts.scenario ? `
|
|
101
|
+
console.error(opts.scenario ? `No scenario or spec matched "${opts.scenario}".` : "No scenarios. Use `scout create`.");
|
|
81
102
|
process.exit(1);
|
|
82
103
|
}
|
|
104
|
+
// Preflight the video toolchain up front so the user learns now — not after
|
|
105
|
+
// a full verification run — that an MP4 won't be produced. Best-effort: a
|
|
106
|
+
// verified scenario still keeps the raw .webm, so we warn and continue.
|
|
107
|
+
if (config.recordVideo) {
|
|
108
|
+
const ff = diagnoseFfmpeg();
|
|
109
|
+
if (!ff.ok) {
|
|
110
|
+
console.warn(`⚠ --demo-video: ${ffmpegRemediation(ff)}`);
|
|
111
|
+
console.warn(" Continuing — verified scenarios will keep the raw .webm instead of an MP4.\n");
|
|
112
|
+
}
|
|
113
|
+
else if (!resolveFont()) {
|
|
114
|
+
console.warn("⚠ --demo-video: no overlay font found — the MP4 will have no captions. Set SCOUT_VIDEO_FONT to a .ttf.\n");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
83
117
|
let failed = 0;
|
|
84
118
|
for (const scenario of targets) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
119
|
+
const viewports = runnableViewports(scenario, config, viewportOverride);
|
|
120
|
+
for (const viewport of viewports) {
|
|
121
|
+
process.stdout.write(`▶ ${scenario.slug}@${viewport} ... `);
|
|
122
|
+
try {
|
|
123
|
+
const result = await runScenario(store, scenario, config, {
|
|
124
|
+
forceAi: opts.ai,
|
|
125
|
+
heal: opts.heal,
|
|
126
|
+
headed: opts.headed,
|
|
127
|
+
viewport,
|
|
128
|
+
ephemeral: Boolean(viewportOverride),
|
|
129
|
+
});
|
|
130
|
+
const icon = result.runnerFailure ? "💥" : result.verdict === "verified" ? "✅" : result.verdict === "partial" ? "⚠️" : "❌";
|
|
131
|
+
const tag = result.runnerFailure ? " (runner failure — re-rode, não é veredito de UI)" : "";
|
|
132
|
+
console.log(`${icon} ${result.verdict}${tag} [${result.mode}${result.healed ? "+heal" : ""}] ${(result.durationMs / 1000).toFixed(1)}s`);
|
|
133
|
+
if (result.verdict !== "verified") {
|
|
134
|
+
console.log(` ↳ ${result.reason}`);
|
|
135
|
+
failed++;
|
|
136
|
+
}
|
|
137
|
+
console.log(` ↳ artifacts: ${path.relative(process.cwd(), result.runDir)}`);
|
|
138
|
+
if (result.video)
|
|
139
|
+
console.log(` ↳ demo: ${path.relative(process.cwd(), result.video)}`);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.log(`💥 error: ${error instanceof Error ? error.message : error}`);
|
|
97
143
|
failed++;
|
|
98
144
|
}
|
|
99
|
-
console.log(` ↳ artifacts: ${path.relative(process.cwd(), result.runDir)}`);
|
|
100
|
-
if (result.video)
|
|
101
|
-
console.log(` ↳ preview: ${path.relative(process.cwd(), result.video)}`);
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
console.log(`💥 error: ${error instanceof Error ? error.message : error}`);
|
|
105
|
-
failed++;
|
|
106
145
|
}
|
|
107
146
|
}
|
|
108
147
|
process.exit(failed ? 1 : 0);
|
|
@@ -114,16 +153,20 @@ program
|
|
|
114
153
|
.option("--check", "Exit 1 if any scenario is not verified (CI/PR gate)", false)
|
|
115
154
|
.action((opts) => {
|
|
116
155
|
const store = new Store();
|
|
156
|
+
const config = loadConfig();
|
|
117
157
|
const scenarios = store.listScenarios();
|
|
118
158
|
const latest = store.latestRuns();
|
|
119
159
|
if (opts.json) {
|
|
120
|
-
console.log(JSON.stringify(buildReport(scenarios, latest), null, 2));
|
|
160
|
+
console.log(JSON.stringify(buildReport(scenarios, latest, config), null, 2));
|
|
121
161
|
}
|
|
122
162
|
else {
|
|
123
|
-
console.log(renderSummary(scenarios, latest));
|
|
163
|
+
console.log(renderSummary(scenarios, latest, config));
|
|
124
164
|
}
|
|
125
165
|
if (opts.check) {
|
|
126
|
-
|
|
166
|
+
// Worst-of aggregate: the gate fails if ANY (scenario × viewport) unit is
|
|
167
|
+
// not verified.
|
|
168
|
+
const allVerified = expandScenarios(scenarios, config).every(({ scenario, viewport }) => runStatus(scenario.slug, viewport, latest) === "verified");
|
|
169
|
+
process.exit(allVerified ? 0 : 1);
|
|
127
170
|
}
|
|
128
171
|
});
|
|
129
172
|
program
|
|
@@ -131,6 +174,8 @@ program
|
|
|
131
174
|
.description("Converts a legacy .scout/scenarios.json into .scout/specs/*.scout.md and relocates cached scripts")
|
|
132
175
|
.action(() => {
|
|
133
176
|
const store = new Store();
|
|
177
|
+
const config = loadConfig();
|
|
178
|
+
const legacyViewport = defaultViewportName(config);
|
|
134
179
|
const legacy = path.join(process.cwd(), SCOUT_DIR, "scenarios.json");
|
|
135
180
|
if (!fs.existsSync(legacy)) {
|
|
136
181
|
console.log("Nothing to migrate — no .scout/scenarios.json found.");
|
|
@@ -153,7 +198,7 @@ program
|
|
|
153
198
|
created++;
|
|
154
199
|
const oldScript = path.join(process.cwd(), SCOUT_DIR, "scripts", `${s.slug}.json`);
|
|
155
200
|
if (fs.existsSync(oldScript)) {
|
|
156
|
-
const newScript = store.scriptPath(slug);
|
|
201
|
+
const newScript = store.scriptPath(slug, legacyViewport);
|
|
157
202
|
fs.mkdirSync(path.dirname(newScript), { recursive: true });
|
|
158
203
|
fs.renameSync(oldScript, newScript);
|
|
159
204
|
scripts++;
|
|
@@ -263,43 +308,45 @@ async function livePingAiSdk(provider, model) {
|
|
|
263
308
|
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
264
309
|
}
|
|
265
310
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
311
|
+
/**
|
|
312
|
+
* AI-credential half of `doctor`: detect, then live-ping. Prints its section and
|
|
313
|
+
* returns whether the configured model can actually authenticate. Never exits —
|
|
314
|
+
* the caller combines this with the runtime check for one exit code.
|
|
315
|
+
*/
|
|
316
|
+
async function diagnoseAiCreds(config) {
|
|
271
317
|
const provider = inferProvider(config.model);
|
|
272
318
|
const engine = resolveEngineKind(provider, config.engine);
|
|
273
319
|
const status = detectAiCredentials(provider, { engine });
|
|
274
|
-
console.log(
|
|
275
|
-
console.log(`
|
|
276
|
-
console.log(`
|
|
320
|
+
console.log("AI credentials:");
|
|
321
|
+
console.log(` Model: ${config.model}`);
|
|
322
|
+
console.log(` Provider: ${provider}`);
|
|
323
|
+
console.log(` Engine: ${engine}`);
|
|
277
324
|
if (status.ok) {
|
|
278
|
-
console.log(`Detection: ✓ matched ${status.source}`);
|
|
325
|
+
console.log(` Detection: ✓ matched ${status.source}`);
|
|
279
326
|
}
|
|
280
327
|
else if (provider === "anthropic") {
|
|
281
328
|
// The file/env probe missed — but a macOS keychain-backed Claude Code
|
|
282
329
|
// session is invisible to it, yet the SDK can still authenticate. Don't
|
|
283
330
|
// give up here; let the live ping be the authority for Anthropic.
|
|
284
|
-
console.log("Detection: ✗ no credential file or env var found (a macOS keychain session would not show here).");
|
|
331
|
+
console.log(" Detection: ✗ no credential file or env var found (a macOS keychain session would not show here).");
|
|
285
332
|
}
|
|
286
333
|
else {
|
|
287
334
|
// google/openai have no invisible-credential path: if detection failed,
|
|
288
335
|
// there is nothing to ping. Report remediation and stop.
|
|
289
|
-
console.log(`Detection: ✗ no usable ${provider} credentials found.`);
|
|
336
|
+
console.log(` Detection: ✗ no usable ${provider} credentials found.`);
|
|
290
337
|
console.log(`\n${status.remediation}`);
|
|
291
|
-
|
|
338
|
+
return false;
|
|
292
339
|
}
|
|
293
|
-
process.stdout.write("Live check: pinging the model... ");
|
|
340
|
+
process.stdout.write(" Live check: pinging the model... ");
|
|
294
341
|
const ping = provider === "anthropic"
|
|
295
342
|
? await livePingAnthropic(config.model)
|
|
296
343
|
: await livePingAiSdk(provider, config.model);
|
|
297
344
|
if (ping.ok) {
|
|
298
345
|
console.log("✓ credentials valid");
|
|
299
|
-
|
|
346
|
+
return true;
|
|
300
347
|
}
|
|
301
348
|
console.log("✗");
|
|
302
|
-
console.log(`The live check failed: ${ping.error ?? "unknown error"}`);
|
|
349
|
+
console.log(` The live check failed: ${ping.error ?? "unknown error"}`);
|
|
303
350
|
// When detection passed, the credentials are present but the live key was
|
|
304
351
|
// rejected (invalid/expired key, wrong project, no quota) — the ping error
|
|
305
352
|
// above is the actionable message. Only fall back to detection remediation
|
|
@@ -307,7 +354,47 @@ program
|
|
|
307
354
|
const remediation = status.remediation ?? detectAiCredentials(provider, { engine }).remediation;
|
|
308
355
|
if (remediation)
|
|
309
356
|
console.log(`\n${remediation}`);
|
|
310
|
-
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Runtime half of `doctor`: the local toolchain a run needs. The browser is
|
|
361
|
+
* required (any run); ffmpeg + overlay font are only needed for `--demo-video`
|
|
362
|
+
* and so are reported as warnings, not run-blockers. Returns whether the
|
|
363
|
+
* required pieces are present.
|
|
364
|
+
*/
|
|
365
|
+
function diagnoseRuntime() {
|
|
366
|
+
console.log("\nRuntime:");
|
|
367
|
+
let browserOk = false;
|
|
368
|
+
try {
|
|
369
|
+
const exe = chromium.executablePath();
|
|
370
|
+
browserOk = !!exe && fs.existsSync(exe);
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
browserOk = false;
|
|
374
|
+
}
|
|
375
|
+
console.log(` Browser (Chromium): ${browserOk ? "✓ installed" : "✗ not installed — run: npx playwright install chromium"}`);
|
|
376
|
+
const ff = diagnoseFfmpeg();
|
|
377
|
+
if (ff.ok) {
|
|
378
|
+
console.log(` ffmpeg: ✓ ${ff.bin} (for --demo-video)`);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
console.log(` ffmpeg: ✗ ${ff.reason} — only needed for --demo-video`);
|
|
382
|
+
console.log(` ${ffmpegRemediation(ff)}`);
|
|
383
|
+
}
|
|
384
|
+
const font = resolveFont();
|
|
385
|
+
console.log(font
|
|
386
|
+
? ` Overlay font: ✓ ${font}`
|
|
387
|
+
: " Overlay font: ⚠ none found — video captions are skipped; set SCOUT_VIDEO_FONT to a .ttf");
|
|
388
|
+
return browserOk;
|
|
389
|
+
}
|
|
390
|
+
program
|
|
391
|
+
.command("doctor")
|
|
392
|
+
.description("Diagnoses the setup — AI credentials (model provider auth) and the local runtime (browser, ffmpeg, fonts). CI-usable exit code.")
|
|
393
|
+
.action(async () => {
|
|
394
|
+
const config = loadConfig();
|
|
395
|
+
const aiOk = await diagnoseAiCreds(config);
|
|
396
|
+
const runtimeOk = diagnoseRuntime();
|
|
397
|
+
process.exit(aiOk && runtimeOk ? 0 : 1);
|
|
311
398
|
});
|
|
312
399
|
program
|
|
313
400
|
.command("mcp")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Scenario, ScenarioCookie, Viewport } from "./types.js";
|
|
1
2
|
export interface ScoutProfile {
|
|
2
3
|
/** Shown to the AI agent so it knows what kind of session this is */
|
|
3
4
|
description?: string;
|
|
@@ -11,6 +12,13 @@ export interface ScoutProfile {
|
|
|
11
12
|
* (e.g. credentials for login flows). Values never reach the LLM.
|
|
12
13
|
*/
|
|
13
14
|
env?: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Cookies seeded into the context for every scenario on this profile (the
|
|
17
|
+
* shared base). A scenario's own cookies merge on top, by name. Each is a
|
|
18
|
+
* cookie object ({ name, value, domain?, path?, expires?, httpOnly?, secure?,
|
|
19
|
+
* sameSite? }); `value` may carry a $ENV:VAR placeholder.
|
|
20
|
+
*/
|
|
21
|
+
cookies?: ScenarioCookie[];
|
|
14
22
|
}
|
|
15
23
|
export interface ScoutConfig {
|
|
16
24
|
/** Target app. Override per worktree/CI with SCOUT_BASE_URL. */
|
|
@@ -21,11 +29,19 @@ export interface ScoutConfig {
|
|
|
21
29
|
headless: boolean;
|
|
22
30
|
/** Max agent turns per AI run */
|
|
23
31
|
maxTurns: number;
|
|
32
|
+
/**
|
|
33
|
+
* Named viewports a scenario may run in, keyed by name. Merged over the
|
|
34
|
+
* built-ins (`mobile`/`desktop`/`tablet`) — a same-named entry overrides one.
|
|
35
|
+
* Each is a Viewport descriptor (a `device` preset and/or explicit fields).
|
|
36
|
+
*/
|
|
37
|
+
viewports?: Record<string, Viewport>;
|
|
38
|
+
/** Viewport used when a scenario declares none. Defaults to `mobile`. */
|
|
39
|
+
defaultViewport?: string;
|
|
24
40
|
/** Locale forced on the browser context */
|
|
25
41
|
locale?: string;
|
|
26
|
-
/** Record a paced MP4
|
|
42
|
+
/** Record a paced MP4 demo of the verified replay. Enable with --demo-video or SCOUT_RECORD_VIDEO=1. */
|
|
27
43
|
recordVideo?: boolean;
|
|
28
|
-
/**
|
|
44
|
+
/** Demo pacing in (0,1]; <1 = slower so a human can follow. Default 0.35. */
|
|
29
45
|
videoSpeed?: number;
|
|
30
46
|
/**
|
|
31
47
|
* Agent engine for AI runs. `agent-sdk` (default) uses the trusted
|
|
@@ -60,3 +76,11 @@ export declare function parseHeadersEnv(raw: string): Record<string, string>;
|
|
|
60
76
|
/** Precedence: overrides (flag) > env (SCOUT_*) > scout.config.json > defaults. */
|
|
61
77
|
export declare function loadConfig(cwd?: string, overrides?: ConfigOverrides): ScoutConfig;
|
|
62
78
|
export declare function resolveStorageState(profileName: string | undefined, config: ScoutConfig, cwd?: string): string | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Resolves the cookies for one scenario: the profile's cookies are the shared
|
|
81
|
+
* base, the scenario's own cookies (file frontmatter + section override, already
|
|
82
|
+
* merged in specs.ts) win on top — keyed by cookie name. Profile cookies come
|
|
83
|
+
* from JSON, so they're validated here (lazily, like resolveStorageState) and a
|
|
84
|
+
* bad one fails loud. Returns undefined when neither side declares any.
|
|
85
|
+
*/
|
|
86
|
+
export declare function resolveCookies(scenario: Scenario, config: ScoutConfig): ScenarioCookie[] | undefined;
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { mergeCookiesByName, validateCookie } from "./cookies.js";
|
|
4
|
+
/** Filesystem/report-safe viewport names (mirrors viewports.ts, kept inline so
|
|
5
|
+
* config has no Playwright dependency). */
|
|
6
|
+
const VIEWPORT_NAME_RE = /^[a-z0-9-]+$/;
|
|
3
7
|
export const CONFIG_FILE = "scout.config.json";
|
|
4
8
|
export const SCOUT_DIR = ".scout";
|
|
5
9
|
const DEFAULTS = {
|
|
@@ -9,7 +13,7 @@ const DEFAULTS = {
|
|
|
9
13
|
maxTurns: 40,
|
|
10
14
|
locale: "pt-BR",
|
|
11
15
|
recordVideo: false,
|
|
12
|
-
videoSpeed: 0.
|
|
16
|
+
videoSpeed: 0.35,
|
|
13
17
|
profiles: {},
|
|
14
18
|
};
|
|
15
19
|
/**
|
|
@@ -64,6 +68,13 @@ export function loadConfig(cwd = process.cwd(), overrides = {}) {
|
|
|
64
68
|
merged.baseUrl = overrides.baseUrl;
|
|
65
69
|
if (overrides.recordVideo)
|
|
66
70
|
merged.recordVideo = true;
|
|
71
|
+
// Fail loud on a viewport name that can't serve as a script-file token —
|
|
72
|
+
// catches the typo at config load, not when a run tries to write the path.
|
|
73
|
+
for (const name of Object.keys(merged.viewports ?? {})) {
|
|
74
|
+
if (!VIEWPORT_NAME_RE.test(name)) {
|
|
75
|
+
throw new Error(`Invalid viewport name "${name}" in ${CONFIG_FILE}. Use lowercase letters, digits and hyphens.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
67
78
|
return merged;
|
|
68
79
|
}
|
|
69
80
|
export function resolveStorageState(profileName, config, cwd = process.cwd()) {
|
|
@@ -85,4 +96,20 @@ export function resolveStorageState(profileName, config, cwd = process.cwd()) {
|
|
|
85
96
|
}
|
|
86
97
|
return statePath;
|
|
87
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolves the cookies for one scenario: the profile's cookies are the shared
|
|
101
|
+
* base, the scenario's own cookies (file frontmatter + section override, already
|
|
102
|
+
* merged in specs.ts) win on top — keyed by cookie name. Profile cookies come
|
|
103
|
+
* from JSON, so they're validated here (lazily, like resolveStorageState) and a
|
|
104
|
+
* bad one fails loud. Returns undefined when neither side declares any.
|
|
105
|
+
*/
|
|
106
|
+
export function resolveCookies(scenario, config) {
|
|
107
|
+
const profileName = scenario.profile;
|
|
108
|
+
const profileRaw = profileName ? config.profiles[profileName]?.cookies : undefined;
|
|
109
|
+
const profileCookies = Array.isArray(profileRaw)
|
|
110
|
+
? profileRaw.map((c, i) => validateCookie(c, `${CONFIG_FILE} profile "${profileName}" cookie #${i + 1}`))
|
|
111
|
+
: [];
|
|
112
|
+
const merged = mergeCookiesByName(profileCookies, scenario.cookies ?? []);
|
|
113
|
+
return merged.length ? merged : undefined;
|
|
114
|
+
}
|
|
88
115
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ScenarioCookie } from "./types.js";
|
|
2
|
+
/** Validate + normalize one cookie object (YAML frontmatter or profile config). */
|
|
3
|
+
export declare function validateCookie(raw: unknown, ctx: string): ScenarioCookie;
|
|
4
|
+
/** Parse the YAML `cookies:` block (frontmatter / profile) — a list of objects. */
|
|
5
|
+
export declare function parseCookieList(raw: unknown, ctx: string): ScenarioCookie[];
|
|
6
|
+
/**
|
|
7
|
+
* Parse the per-`##` override form: a single line `cookies: name=value[, n2=v2]`.
|
|
8
|
+
* Only `name=value` (no attributes) — the line-based override parser can't carry
|
|
9
|
+
* a YAML object; attributes belong in the file frontmatter / profile. Values
|
|
10
|
+
* with a literal comma aren't expressible here — use the frontmatter form.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseInlineCookies(raw: string, ctx: string): ScenarioCookie[];
|
|
13
|
+
/** Merge two cookie lists by name; `override` wins over `base`, order preserved. */
|
|
14
|
+
export declare function mergeCookiesByName(base: ScenarioCookie[], override: ScenarioCookie[]): ScenarioCookie[];
|
package/dist/cookies.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cookie support is declarative: cookies are config of a scenario (profile
|
|
3
|
+
* default + per-scenario frontmatter/override, merged by name), applied to the
|
|
4
|
+
* Playwright context via `context.addCookies()` before the flow runs — never a
|
|
5
|
+
* replayable Step, just like `storageState`/`permissions`. `value` may carry a
|
|
6
|
+
* `$ENV:VAR` placeholder, resolved only at launch so the secret never lands in
|
|
7
|
+
* the committed spec nor the LLM context.
|
|
8
|
+
*
|
|
9
|
+
* Validation is curated (not a pass-through to Playwright): unknown fields and
|
|
10
|
+
* a bad `sameSite` fail loudly at parse time instead of silently becoming a
|
|
11
|
+
* no-op — the same house rule as the permission allowlist.
|
|
12
|
+
*/
|
|
13
|
+
const SAME_SITE = new Set(["Strict", "Lax", "None"]);
|
|
14
|
+
const ALLOWED_KEYS = new Set([
|
|
15
|
+
"name",
|
|
16
|
+
"value",
|
|
17
|
+
"domain",
|
|
18
|
+
"path",
|
|
19
|
+
"expires",
|
|
20
|
+
"httpOnly",
|
|
21
|
+
"secure",
|
|
22
|
+
"sameSite",
|
|
23
|
+
]);
|
|
24
|
+
/** Validate + normalize one cookie object (YAML frontmatter or profile config). */
|
|
25
|
+
export function validateCookie(raw, ctx) {
|
|
26
|
+
if (raw == null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
27
|
+
throw new Error(`Invalid cookie in ${ctx}: expected an object with at least "name" and "value".`);
|
|
28
|
+
}
|
|
29
|
+
const o = raw;
|
|
30
|
+
for (const key of Object.keys(o)) {
|
|
31
|
+
if (!ALLOWED_KEYS.has(key)) {
|
|
32
|
+
throw new Error(`Unknown cookie field "${key}" in ${ctx}. Allowed: ${[...ALLOWED_KEYS].join(", ")}.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (typeof o.name !== "string" || !o.name.trim()) {
|
|
36
|
+
throw new Error(`Cookie in ${ctx} needs a non-empty string "name".`);
|
|
37
|
+
}
|
|
38
|
+
if (typeof o.value !== "string") {
|
|
39
|
+
throw new Error(`Cookie "${o.name}" in ${ctx} needs a string "value".`);
|
|
40
|
+
}
|
|
41
|
+
const cookie = { name: o.name, value: o.value };
|
|
42
|
+
if (o.domain !== undefined) {
|
|
43
|
+
if (typeof o.domain !== "string" || !o.domain.trim()) {
|
|
44
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "domain" must be a non-empty string.`);
|
|
45
|
+
}
|
|
46
|
+
cookie.domain = o.domain;
|
|
47
|
+
}
|
|
48
|
+
if (o.path !== undefined) {
|
|
49
|
+
if (typeof o.path !== "string" || !o.path.trim()) {
|
|
50
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "path" must be a non-empty string.`);
|
|
51
|
+
}
|
|
52
|
+
cookie.path = o.path;
|
|
53
|
+
}
|
|
54
|
+
if (o.expires !== undefined) {
|
|
55
|
+
if (typeof o.expires !== "number" || !Number.isFinite(o.expires)) {
|
|
56
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "expires" must be a number (unix seconds).`);
|
|
57
|
+
}
|
|
58
|
+
cookie.expires = o.expires;
|
|
59
|
+
}
|
|
60
|
+
if (o.httpOnly !== undefined) {
|
|
61
|
+
if (typeof o.httpOnly !== "boolean") {
|
|
62
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "httpOnly" must be a boolean.`);
|
|
63
|
+
}
|
|
64
|
+
cookie.httpOnly = o.httpOnly;
|
|
65
|
+
}
|
|
66
|
+
if (o.secure !== undefined) {
|
|
67
|
+
if (typeof o.secure !== "boolean") {
|
|
68
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "secure" must be a boolean.`);
|
|
69
|
+
}
|
|
70
|
+
cookie.secure = o.secure;
|
|
71
|
+
}
|
|
72
|
+
if (o.sameSite !== undefined) {
|
|
73
|
+
if (typeof o.sameSite !== "string" || !SAME_SITE.has(o.sameSite)) {
|
|
74
|
+
throw new Error(`Cookie "${o.name}" in ${ctx}: "sameSite" must be one of Strict, Lax, None.`);
|
|
75
|
+
}
|
|
76
|
+
cookie.sameSite = o.sameSite;
|
|
77
|
+
}
|
|
78
|
+
return cookie;
|
|
79
|
+
}
|
|
80
|
+
/** Parse the YAML `cookies:` block (frontmatter / profile) — a list of objects. */
|
|
81
|
+
export function parseCookieList(raw, ctx) {
|
|
82
|
+
if (raw == null)
|
|
83
|
+
return [];
|
|
84
|
+
if (!Array.isArray(raw)) {
|
|
85
|
+
throw new Error(`"cookies" in ${ctx} must be a list of cookie objects, e.g. [{ name: foo, value: bar }].`);
|
|
86
|
+
}
|
|
87
|
+
return raw.map((c, i) => validateCookie(c, `${ctx} cookie #${i + 1}`));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parse the per-`##` override form: a single line `cookies: name=value[, n2=v2]`.
|
|
91
|
+
* Only `name=value` (no attributes) — the line-based override parser can't carry
|
|
92
|
+
* a YAML object; attributes belong in the file frontmatter / profile. Values
|
|
93
|
+
* with a literal comma aren't expressible here — use the frontmatter form.
|
|
94
|
+
*/
|
|
95
|
+
export function parseInlineCookies(raw, ctx) {
|
|
96
|
+
const pairs = raw.split(",").map((s) => s.trim()).filter(Boolean);
|
|
97
|
+
if (!pairs.length) {
|
|
98
|
+
throw new Error(`Empty "cookies" override in ${ctx}. Use: cookies: name=value[, n2=v2].`);
|
|
99
|
+
}
|
|
100
|
+
return pairs.map((pair) => {
|
|
101
|
+
const eq = pair.indexOf("=");
|
|
102
|
+
if (eq <= 0) {
|
|
103
|
+
throw new Error(`Invalid cookie "${pair}" in ${ctx}. Expected name=value.`);
|
|
104
|
+
}
|
|
105
|
+
const name = pair.slice(0, eq).trim();
|
|
106
|
+
const value = pair.slice(eq + 1).trim();
|
|
107
|
+
if (!name)
|
|
108
|
+
throw new Error(`Invalid cookie "${pair}" in ${ctx}: empty name.`);
|
|
109
|
+
return { name, value };
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/** Merge two cookie lists by name; `override` wins over `base`, order preserved. */
|
|
113
|
+
export function mergeCookiesByName(base, override) {
|
|
114
|
+
const byName = new Map();
|
|
115
|
+
for (const c of base)
|
|
116
|
+
byName.set(c.name, c);
|
|
117
|
+
for (const c of override)
|
|
118
|
+
byName.set(c.name, c);
|
|
119
|
+
return [...byName.values()];
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../src/cookies.ts"],"names":[],"mappings":"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"}
|