@pcamarajr/scout 0.4.0 → 0.5.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 +13 -2
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/engine.js +74 -3
- package/dist/engine.js.map +1 -1
- package/dist/report.js +4 -0
- package/dist/report.js.map +1 -1
- package/dist/runner/ai-runner.js +3 -3
- package/dist/runner/ai-runner.js.map +1 -1
- package/dist/runner/browser.d.ts +10 -1
- package/dist/runner/browser.js +31 -10
- package/dist/runner/browser.js.map +1 -1
- package/dist/runner/script-runner.d.ts +14 -0
- package/dist/runner/script-runner.js +32 -0
- package/dist/runner/script-runner.js.map +1 -1
- package/dist/runner/video.d.ts +72 -0
- package/dist/runner/video.js +197 -0
- package/dist/runner/video.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -134,6 +134,17 @@ Each run records in `.scout/runs/<timestamp>-<slug>/`:
|
|
|
134
134
|
| `report.md` | Verdict + reason + recorded script + evidence |
|
|
135
135
|
| `result.json` | Structured result (consumable by automation) |
|
|
136
136
|
| `transcript.md` | Agent reasoning (AI runs only) |
|
|
137
|
+
| `video.mp4` | Paced preview of the verified flow with baked step labels + verdict card — only with `--record-video` (see below) |
|
|
138
|
+
| `video.timeline.json` | Step→timestamp map the overlays are burned from |
|
|
139
|
+
|
|
140
|
+
### Preview video (`--record-video`)
|
|
141
|
+
|
|
142
|
+
Opt-in, off by default (zero overhead otherwise). When enabled, a **verified** scenario gets one extra, deterministic replay — recorded, paced for human viewing, and rendered by `ffmpeg` into a GitHub-playable MP4 with the scenario title, per-step captions, and a green/red verdict card burned in. It's meant as a **rich PR artifact**: a reviewer plays it and sees the implemented feature working, no tooling required.
|
|
143
|
+
|
|
144
|
+
- Always sourced from the clean deterministic replay — never the exploratory AI run.
|
|
145
|
+
- Pacing via `videoSpeed` in `scout.config.json` (`(0,1]`, default `0.4` = slower; `1` = natural speed).
|
|
146
|
+
- Requires `ffmpeg` on `PATH` (or `FFMPEG_PATH`). Missing it isn't fatal — scout keeps the raw `.webm` and warns with an install hint. Font autodetected, or set `SCOUT_VIDEO_FONT` to a `.ttf`.
|
|
147
|
+
- Enable per-run with `--record-video`, via `SCOUT_RECORD_VIDEO=1`, or `"recordVideo": true` in the config.
|
|
137
148
|
|
|
138
149
|
## MCP — usage by coding agents (Claude Code, cloud sessions)
|
|
139
150
|
|
|
@@ -178,7 +189,7 @@ With heal in CI: add `ANTHROPIC_API_KEY` and switch to `npx scout go` — when t
|
|
|
178
189
|
scout init # bootstrap in the project (.scout/specs/ + config)
|
|
179
190
|
scout create <name> -f <feature> -c <scenario> [-p profile] [-n notes]
|
|
180
191
|
scout list # scenarios + status + 📜 if cached script exists
|
|
181
|
-
scout go [-s slug|name] [--ai] [--no-heal] [--headed] [--base-url <url>]
|
|
192
|
+
scout go [-s slug|name] [--ai] [--no-heal] [--headed] [--record-video] [--base-url <url>]
|
|
182
193
|
scout report [--json] [--check] # suite summary (markdown default)
|
|
183
194
|
scout migrate # legacy scenarios.json → .scout.md specs
|
|
184
195
|
scout login <profile> [--base-url <url>] # capture storageState in headed browser
|
|
@@ -256,7 +267,7 @@ Design decisions:
|
|
|
256
267
|
- **The agent never writes test code.** It acts in the browser; the script is recorded from actions that actually worked (`getByRole` + accessible name when unique on the page, CSS path as fallback). Eliminates hallucinated selectors.
|
|
257
268
|
- **Assertions are tools.** The agent registers each expectation via `browser_assert` — that's what makes the replay a real test, not just a click macro.
|
|
258
269
|
- **Recorded scripts are pruned before caching.** Agent retries (e.g. re-filling the same field) are deduplicated conservatively: an earlier `fill`/`select` is dropped only when a later one targets the same element and nothing in between (click/press/navigate) could have consumed the value. Clicks are never deduplicated.
|
|
259
|
-
- **Trace
|
|
270
|
+
- **Trace for debugging, video for humans.** Playwright's trace.zip is the deep-debug artifact (per-action screenshots, DOM, network, console). The opt-in preview video is a different job: a low-friction, GitHub-playable clip a reviewer watches in the PR to see the feature working — sourced from the clean replay and paced + annotated so it's worth watching, not "video for the sake of video".
|
|
260
271
|
- **Scenarios are versioned source, not database rows.** One `.scout.md` per feature, reviewed in PRs like a `.test.ts`; the spec is a pure input that a run never mutates (status derives from `.scout/runs/`). The recorded JSON script is a derived sidecar — clean diffs, no run noise in history.
|
|
261
272
|
- **No server/dashboard.** State is the filesystem in the target repo; report is markdown. Pluggable into any project with `npm i` + 2 files.
|
|
262
273
|
|
package/dist/cli.js
CHANGED
|
@@ -78,10 +78,11 @@ program
|
|
|
78
78
|
.option("--ai", "Force AI-driven run (re-records the script)", false)
|
|
79
79
|
.option("--no-heal", "Do not fall back to AI when replay fails (cheap CI)")
|
|
80
80
|
.option("--headed", "Visible browser (local debug)", false)
|
|
81
|
+
.option("--record-video", "Record a paced MP4 preview of each verified replay (needs ffmpeg)", false)
|
|
81
82
|
.option("--base-url <url>", "Target app URL for this run (precedence: flag > SCOUT_BASE_URL > scout.config.json)")
|
|
82
83
|
.action(async (opts) => {
|
|
83
84
|
const store = new Store();
|
|
84
|
-
const config = loadConfig(process.cwd(), { baseUrl: opts.baseUrl });
|
|
85
|
+
const config = loadConfig(process.cwd(), { baseUrl: opts.baseUrl, recordVideo: opts.recordVideo });
|
|
85
86
|
const all = store.listScenarios();
|
|
86
87
|
const targets = opts.scenario
|
|
87
88
|
? all.filter((s) => s.slug === opts.scenario || s.name === opts.scenario)
|
|
@@ -107,6 +108,8 @@ program
|
|
|
107
108
|
failed++;
|
|
108
109
|
}
|
|
109
110
|
console.log(` ↳ artifacts: ${path.relative(process.cwd(), result.runDir)}`);
|
|
111
|
+
if (result.video)
|
|
112
|
+
console.log(` ↳ preview: ${path.relative(process.cwd(), result.video)}`);
|
|
110
113
|
}
|
|
111
114
|
catch (error) {
|
|
112
115
|
console.log(`💥 error: ${error instanceof Error ? error.message : error}`);
|
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":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACzG,CAAC,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAC;AAEpH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,CAAC;IACb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,aAAa,CACd,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;YACE,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,mBAAmB;YAC1B,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE;aAC5C;SACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,yCAAyC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,qEAAqE,CAAC;KAClF,cAAc,CAAC,yBAAyB,EAAE,2DAA2D,CAAC;KACtG,cAAc,CAAC,uBAAuB,EAAE,wDAAwD,CAAC;KACjG,MAAM,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;KAC1E,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC;IACvG,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CAAC,2BAA2B,EAAE,uBAAuB,CAAC;KAC5D,MAAM,CAAC,MAAM,EAAE,6CAA6C,EAAE,KAAK,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;KAC1E,MAAM,CAAC,UAAU,EAAE,+BAA+B,EAAE,KAAK,CAAC;KAC1D,MAAM,CAAC,gBAAgB,EAAE,mEAAmE,EAAE,KAAK,CAAC;KACpG,MAAM,CAAC,kBAAkB,EAAE,qFAAqF,CAAC;KACjH,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnG,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;QAC3B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;QACzE,CAAC,CAAC,GAAG,CAAC;IACR,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACxD,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3H,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzI,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrC,MAAM,EAAE,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3E,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,sDAAsD,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,SAAS,EAAE,qDAAqD,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mGAAmG,CAAC;KAChH,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpD,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,uEAAuE;QACvE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QACnF,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,cAAc,OAAO,2BAA2B,OAAO,oBAAoB,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,CACpI,CAAC;IACF,OAAO,CAAC,GAAG,CACT,gIAAgI,CACjI,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,kBAAkB,EAAE,wEAAwE,CAAC;KACpG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,YAAY,WAAW,uBAAuB,WAAW,iBAAiB,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,WAAW,OAAO,CAAC,CAClG,CAAC;IACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,0BAA0B,CAAC,CAAC;IACnE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,gBAAgB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface ScoutConfig {
|
|
|
23
23
|
maxTurns: number;
|
|
24
24
|
/** Locale forced on the browser context */
|
|
25
25
|
locale?: string;
|
|
26
|
+
/** Record a paced MP4 preview of the verified replay. Enable with --record-video or SCOUT_RECORD_VIDEO=1. */
|
|
27
|
+
recordVideo?: boolean;
|
|
28
|
+
/** Preview pacing in (0,1]; <1 = slower so a human can follow. Default 0.4. */
|
|
29
|
+
videoSpeed?: number;
|
|
26
30
|
profiles: Record<string, ScoutProfile>;
|
|
27
31
|
}
|
|
28
32
|
export declare const CONFIG_FILE = "scout.config.json";
|
|
@@ -30,6 +34,7 @@ export declare const SCOUT_DIR = ".scout";
|
|
|
30
34
|
/** Per-invocation overrides (CLI flags, MCP tool params). Highest precedence. */
|
|
31
35
|
export interface ConfigOverrides {
|
|
32
36
|
baseUrl?: string;
|
|
37
|
+
recordVideo?: boolean;
|
|
33
38
|
}
|
|
34
39
|
/** Precedence: overrides (flag) > env (SCOUT_*) > scout.config.json > defaults. */
|
|
35
40
|
export declare function loadConfig(cwd?: string, overrides?: ConfigOverrides): ScoutConfig;
|
package/dist/config.js
CHANGED
|
@@ -8,6 +8,8 @@ const DEFAULTS = {
|
|
|
8
8
|
headless: true,
|
|
9
9
|
maxTurns: 40,
|
|
10
10
|
locale: "pt-BR",
|
|
11
|
+
recordVideo: false,
|
|
12
|
+
videoSpeed: 0.4,
|
|
11
13
|
profiles: {},
|
|
12
14
|
};
|
|
13
15
|
/** Precedence: overrides (flag) > env (SCOUT_*) > scout.config.json > defaults. */
|
|
@@ -24,8 +26,12 @@ export function loadConfig(cwd = process.cwd(), overrides = {}) {
|
|
|
24
26
|
merged.model = process.env.SCOUT_MODEL;
|
|
25
27
|
if (process.env.SCOUT_HEADED === "1")
|
|
26
28
|
merged.headless = false;
|
|
29
|
+
if (process.env.SCOUT_RECORD_VIDEO === "1")
|
|
30
|
+
merged.recordVideo = true;
|
|
27
31
|
if (overrides.baseUrl)
|
|
28
32
|
merged.baseUrl = overrides.baseUrl;
|
|
33
|
+
if (overrides.recordVideo)
|
|
34
|
+
merged.recordVideo = true;
|
|
29
35
|
return merged;
|
|
30
36
|
}
|
|
31
37
|
export function resolveStorageState(profileName, config, cwd = process.cwd()) {
|
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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"}
|
package/dist/engine.js
CHANGED
|
@@ -4,7 +4,8 @@ import { loadConfig, resolveStorageState } from "./config.js";
|
|
|
4
4
|
import { renderRunReport } from "./report.js";
|
|
5
5
|
import { BrowserSession } from "./runner/browser.js";
|
|
6
6
|
import { runWithAgent } from "./runner/ai-runner.js";
|
|
7
|
-
import { describeStep, replaySteps } from "./runner/script-runner.js";
|
|
7
|
+
import { describeStep, replayForVideo, replaySteps } from "./runner/script-runner.js";
|
|
8
|
+
import { generateVideo, pacingFor } from "./runner/video.js";
|
|
8
9
|
function aiAvailable() {
|
|
9
10
|
return Boolean(process.env.ANTHROPIC_API_KEY ||
|
|
10
11
|
process.env.CLAUDE_CODE_OAUTH_TOKEN ||
|
|
@@ -35,7 +36,7 @@ export async function runScenario(store, scenario, config = loadConfig(), opts =
|
|
|
35
36
|
if (cached?.length) {
|
|
36
37
|
const session = await launch();
|
|
37
38
|
const replay = await replaySteps(session, cached);
|
|
38
|
-
const trace = await session.close();
|
|
39
|
+
const { trace } = await session.close();
|
|
39
40
|
if (replay.passed) {
|
|
40
41
|
result = {
|
|
41
42
|
slug: scenario.slug,
|
|
@@ -84,10 +85,80 @@ export async function runScenario(store, scenario, config = loadConfig(), opts =
|
|
|
84
85
|
const aiResult = await runAi(scenario, config, store, runDir, storageState, opts);
|
|
85
86
|
result = { ...aiResult, startedAt, durationMs: Date.now() - start };
|
|
86
87
|
}
|
|
88
|
+
// Preview video: always sourced from a dedicated clean replay of the
|
|
89
|
+
// recorded script (never the AI run), only when verified and opted-in.
|
|
90
|
+
if (config.recordVideo && result.verdict === "verified") {
|
|
91
|
+
const steps = store.loadSteps(scenario.slug);
|
|
92
|
+
if (steps?.length) {
|
|
93
|
+
result.video = await recordPreviewVideo(scenario, steps, config, storageState, runDir);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
87
96
|
store.saveRunResult(result);
|
|
88
97
|
fs.writeFileSync(path.join(runDir, "report.md"), renderRunReport(result, scenario, store.loadSteps(scenario.slug)));
|
|
89
98
|
return result;
|
|
90
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Runs one extra, paced replay of the verified script with video recording on,
|
|
102
|
+
* then renders it to a GitHub-ready MP4 with baked step labels + verdict card.
|
|
103
|
+
* Best-effort: any failure warns and yields no video — the verdict is untouched.
|
|
104
|
+
*/
|
|
105
|
+
async function recordPreviewVideo(scenario, steps, config, storageState, runDir) {
|
|
106
|
+
const pacing = pacingFor(config.videoSpeed);
|
|
107
|
+
let session;
|
|
108
|
+
try {
|
|
109
|
+
session = await BrowserSession.launch({
|
|
110
|
+
baseUrl: config.baseUrl,
|
|
111
|
+
headless: config.headless,
|
|
112
|
+
storageState,
|
|
113
|
+
locale: config.locale,
|
|
114
|
+
runDir,
|
|
115
|
+
recordVideo: true,
|
|
116
|
+
slowMoMs: pacing.slowMoMs,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
console.warn("[scout] vídeo: não foi possível abrir o browser para o replay de preview.");
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
const preview = await replayForVideo(session, steps, pacing.assertDwellMs, pacing.verdictCardMs);
|
|
124
|
+
const { video: webm } = await session.close();
|
|
125
|
+
if (!preview.passed) {
|
|
126
|
+
console.warn("[scout] vídeo: replay de preview falhou — nenhum vídeo gerado (veredito não afetado).");
|
|
127
|
+
if (webm)
|
|
128
|
+
fs.rmSync(webm, { force: true });
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
if (!webm || !fs.existsSync(webm)) {
|
|
132
|
+
console.warn("[scout] vídeo: replay não produziu arquivo WebM.");
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
fs.writeFileSync(path.join(runDir, "video.timeline.json"), JSON.stringify(preview.timeline, null, 2) + "\n");
|
|
136
|
+
const result = generateVideo({
|
|
137
|
+
webmPath: webm,
|
|
138
|
+
outPath: path.join(runDir, "video.mp4"),
|
|
139
|
+
width: 390,
|
|
140
|
+
height: 844,
|
|
141
|
+
scenarioName: scenario.name,
|
|
142
|
+
verdict: "verified",
|
|
143
|
+
timeline: preview.timeline,
|
|
144
|
+
pacing,
|
|
145
|
+
});
|
|
146
|
+
if (result.warning)
|
|
147
|
+
console.warn(`[scout] vídeo: ${result.warning}`);
|
|
148
|
+
if (result.output && result.output !== webm) {
|
|
149
|
+
fs.rmSync(webm, { force: true }); // MP4 superseded the intermediate WebM
|
|
150
|
+
return result.output;
|
|
151
|
+
}
|
|
152
|
+
// Fallback (no/failed ffmpeg): keep the raw WebM under a stable name.
|
|
153
|
+
const dest = path.join(runDir, "video.webm");
|
|
154
|
+
try {
|
|
155
|
+
fs.renameSync(webm, dest);
|
|
156
|
+
return dest;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return webm;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
91
162
|
/**
|
|
92
163
|
* Runs `attempt` until it produces a real verdict, retrying runner failures
|
|
93
164
|
* (agent died without calling scout_verdict) up to maxAttempts total runs.
|
|
@@ -125,7 +196,7 @@ async function runAi(scenario, config, store, runDir, storageState, opts) {
|
|
|
125
196
|
finally {
|
|
126
197
|
await session.screenshot("final-state").catch(() => { });
|
|
127
198
|
}
|
|
128
|
-
trace = await session.close();
|
|
199
|
+
trace = (await session.close()).trace;
|
|
129
200
|
transcript.push(...result.transcript);
|
|
130
201
|
for (const shot of session.screenshots)
|
|
131
202
|
if (!screenshots.includes(shot))
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/report.js
CHANGED
|
@@ -35,6 +35,10 @@ export function renderRunReport(result, scenario, steps) {
|
|
|
35
35
|
lines.push(``);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
if (result.video) {
|
|
39
|
+
const name = path.basename(result.video);
|
|
40
|
+
lines.push(``, `## Preview`, ``, `<video src="./${name}" controls></video>`, ``, `[▶ ${name}](./${name}) — paced replay of the verified flow.`);
|
|
41
|
+
}
|
|
38
42
|
if (result.trace) {
|
|
39
43
|
lines.push(``, `## Trace`, ``, `\`npx playwright show-trace ${result.trace}\` — screenshots, DOM snapshots, network and console for the entire session.`);
|
|
40
44
|
}
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/runner/ai-runner.js
CHANGED
|
@@ -60,7 +60,7 @@ export async function runWithAgent(session, scenario, config) {
|
|
|
60
60
|
name: "browser",
|
|
61
61
|
version: "1.0.0",
|
|
62
62
|
tools: [
|
|
63
|
-
tool("browser_navigate", "Navega para uma URL (absoluta ou relativa ao baseUrl do app).", { url: z.string().describe("Ex: /login ou https://...") }, async ({ url }) => {
|
|
63
|
+
tool("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ê.", { url: z.string().describe("Ex: /login, /renovar?token=$ENV:TOKEN ou https://...") }, async ({ url }) => {
|
|
64
64
|
try {
|
|
65
65
|
await session.navigate(url);
|
|
66
66
|
record({ kind: "navigate", url: relativizeUrl(url, config.baseUrl) });
|
|
@@ -188,7 +188,7 @@ export async function runWithAgent(session, scenario, config) {
|
|
|
188
188
|
: "Sessão anônima (logged-out).";
|
|
189
189
|
const envVars = scenario.profile ? (config.profiles[scenario.profile]?.env ?? []) : [];
|
|
190
190
|
const envInfo = envVars.length
|
|
191
|
-
? `Env vars disponíveis
|
|
191
|
+
? `Env vars disponíveis via placeholder $ENV:VAR (em browser_fill e em URLs de browser_navigate): ${envVars.map((v) => `$ENV:${v}`).join(", ")}.`
|
|
192
192
|
: "";
|
|
193
193
|
const systemPrompt = `Você é Scout, um agente de QA que verifica cenários em um browser real.
|
|
194
194
|
|
|
@@ -210,7 +210,7 @@ Método de trabalho:
|
|
|
210
210
|
Regras:
|
|
211
211
|
- Aja como um usuário real: um passo de cada vez, espere carregamentos com browser_wait_for.
|
|
212
212
|
- Se um elemento não está no snapshot, tire novo snapshot ou role o fluxo de outro jeito — não invente refs.
|
|
213
|
-
- Nunca
|
|
213
|
+
- Nunca use segredos literais: use $ENV:VAR_NAME — vale tanto em browser_fill quanto em URLs de browser_navigate (ex: tokens na query string).
|
|
214
214
|
- 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.
|
|
215
215
|
- Seja econômico: não explore além do cenário. Seu orçamento é de ${config.maxTurns} ações.
|
|
216
216
|
- 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.`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-runner.js","sourceRoot":"","sources":["../../src/runner/ai-runner.ts"],"names":[],"mappings":"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"}
|
|
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
|
@@ -21,6 +21,10 @@ export interface LaunchOptions {
|
|
|
21
21
|
storageState?: string;
|
|
22
22
|
locale?: string;
|
|
23
23
|
runDir: string;
|
|
24
|
+
/** Record a WebM of the context (used only by the preview-video replay) */
|
|
25
|
+
recordVideo?: boolean;
|
|
26
|
+
/** Playwright slowMo (ms/action) — paces the preview replay for human viewing */
|
|
27
|
+
slowMoMs?: number;
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
30
|
* Thin Playwright wrapper shared by the AI runner and the replay runner.
|
|
@@ -31,6 +35,8 @@ export declare class BrowserSession {
|
|
|
31
35
|
private context;
|
|
32
36
|
readonly page: Page;
|
|
33
37
|
private opts;
|
|
38
|
+
/** Date.now() at video start (context creation); undefined when not recording */
|
|
39
|
+
readonly videoEpoch: number | undefined;
|
|
34
40
|
private refs;
|
|
35
41
|
private screenshotCount;
|
|
36
42
|
readonly screenshots: string[];
|
|
@@ -62,7 +68,10 @@ export declare class BrowserSession {
|
|
|
62
68
|
/** Replays one recorded step (used by the deterministic runner). */
|
|
63
69
|
executeStep(step: Step): Promise<void>;
|
|
64
70
|
private targetLocator;
|
|
65
|
-
close(): Promise<
|
|
71
|
+
close(): Promise<{
|
|
72
|
+
trace?: string;
|
|
73
|
+
video?: string;
|
|
74
|
+
}>;
|
|
66
75
|
}
|
|
67
76
|
/** Replaces $ENV:VAR_NAME placeholders so secrets never live in committed scripts. */
|
|
68
77
|
export declare function resolveEnvValue(value: string): string;
|
package/dist/runner/browser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { chromium } from "playwright";
|
|
3
|
+
const VIDEO_SIZE = { width: 390, height: 844 };
|
|
3
4
|
const STEP_TIMEOUT = 10_000;
|
|
4
5
|
/**
|
|
5
6
|
* Thin Playwright wrapper shared by the AI runner and the replay runner.
|
|
@@ -10,33 +11,41 @@ export class BrowserSession {
|
|
|
10
11
|
context;
|
|
11
12
|
page;
|
|
12
13
|
opts;
|
|
14
|
+
videoEpoch;
|
|
13
15
|
refs;
|
|
14
16
|
screenshotCount = 0;
|
|
15
17
|
screenshots = [];
|
|
16
|
-
constructor(browser, context, page, opts,
|
|
18
|
+
constructor(browser, context, page, opts,
|
|
19
|
+
/** Date.now() at video start (context creation); undefined when not recording */
|
|
20
|
+
videoEpoch, refs = new Map()) {
|
|
17
21
|
this.browser = browser;
|
|
18
22
|
this.context = context;
|
|
19
23
|
this.page = page;
|
|
20
24
|
this.opts = opts;
|
|
25
|
+
this.videoEpoch = videoEpoch;
|
|
21
26
|
this.refs = refs;
|
|
22
27
|
}
|
|
23
28
|
static async launch(opts) {
|
|
24
|
-
const browser = await chromium.launch({ headless: opts.headless });
|
|
29
|
+
const browser = await chromium.launch({ headless: opts.headless, slowMo: opts.slowMoMs });
|
|
25
30
|
const context = await browser.newContext({
|
|
26
31
|
locale: opts.locale ?? "pt-BR",
|
|
27
|
-
viewport: {
|
|
32
|
+
viewport: { ...VIDEO_SIZE }, // mobile-first; vertical video product
|
|
28
33
|
storageState: opts.storageState,
|
|
34
|
+
...(opts.recordVideo ? { recordVideo: { dir: opts.runDir, size: { ...VIDEO_SIZE } } } : {}),
|
|
29
35
|
});
|
|
36
|
+
const videoEpoch = opts.recordVideo ? Date.now() : undefined;
|
|
30
37
|
await context.tracing.start({ screenshots: true, snapshots: true, sources: false });
|
|
31
38
|
const page = await context.newPage();
|
|
32
39
|
page.setDefaultTimeout(STEP_TIMEOUT);
|
|
33
|
-
return new BrowserSession(browser, context, page, opts);
|
|
40
|
+
return new BrowserSession(browser, context, page, opts, videoEpoch);
|
|
34
41
|
}
|
|
35
42
|
resolveUrl(url) {
|
|
36
43
|
return new URL(url, this.opts.baseUrl).toString();
|
|
37
44
|
}
|
|
38
45
|
async navigate(url) {
|
|
39
|
-
|
|
46
|
+
// Resolve $ENV:VAR before resolveUrl so tokens/credentials in the query
|
|
47
|
+
// string (e.g. /renew?token=$ENV:TOKEN) work just like in browser_fill.
|
|
48
|
+
await this.page.goto(this.resolveUrl(resolveEnvValue(url)), { waitUntil: "domcontentloaded" });
|
|
40
49
|
}
|
|
41
50
|
/**
|
|
42
51
|
* Builds a numbered map of visible interactive elements (role + accessible
|
|
@@ -182,17 +191,29 @@ export class BrowserSession {
|
|
|
182
191
|
throw new Error(`Target sem estratégia de localização: ${target.description}`);
|
|
183
192
|
}
|
|
184
193
|
async close() {
|
|
185
|
-
let
|
|
194
|
+
let trace;
|
|
186
195
|
try {
|
|
187
|
-
|
|
188
|
-
await this.context.tracing.stop({ path:
|
|
196
|
+
trace = path.join(this.opts.runDir, "trace.zip");
|
|
197
|
+
await this.context.tracing.stop({ path: trace });
|
|
189
198
|
}
|
|
190
199
|
catch {
|
|
191
|
-
|
|
200
|
+
trace = undefined;
|
|
192
201
|
}
|
|
202
|
+
// The Video handle must be captured before close(); the file is only
|
|
203
|
+
// finalized once the context is closed (hence close() is awaited).
|
|
204
|
+
const video = this.page.video();
|
|
193
205
|
await this.context.close().catch(() => { });
|
|
194
206
|
await this.browser.close().catch(() => { });
|
|
195
|
-
|
|
207
|
+
let videoPath;
|
|
208
|
+
if (video) {
|
|
209
|
+
try {
|
|
210
|
+
videoPath = await video.path();
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
videoPath = undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return { trace, video: videoPath };
|
|
196
217
|
}
|
|
197
218
|
}
|
|
198
219
|
/** Replaces $ENV:VAR_NAME placeholders so secrets never live in committed scripts. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/runner/browser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAA8D,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/runner/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import type { Step } from "../types.js";
|
|
2
2
|
import type { BrowserSession } from "./browser.js";
|
|
3
|
+
import type { TimelineEntry } from "./video.js";
|
|
3
4
|
export interface ReplayOutcome {
|
|
4
5
|
passed: boolean;
|
|
5
6
|
failedStep?: string;
|
|
6
7
|
failedIndex?: number;
|
|
7
8
|
error?: string;
|
|
8
9
|
}
|
|
10
|
+
export interface PreviewReplayOutcome {
|
|
11
|
+
passed: boolean;
|
|
12
|
+
timeline: TimelineEntry[];
|
|
13
|
+
failedIndex?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Replay dedicated to producing the preview video: identical step execution to
|
|
17
|
+
* {@link replaySteps}, but it records each step's wall-clock offset (for burned
|
|
18
|
+
* captions) and dwells after assertions / at the end so a human can read the
|
|
19
|
+
* verified state. It is decoupled from the verdict — this run is never the
|
|
20
|
+
* source of truth, so the pacing pauses cannot affect a pass/fail decision.
|
|
21
|
+
*/
|
|
22
|
+
export declare function replayForVideo(session: BrowserSession, steps: Step[], assertDwellMs: number, endDwellMs: number): Promise<PreviewReplayOutcome>;
|
|
9
23
|
/** Describes a step for reports/errors. */
|
|
10
24
|
export declare function describeStep(step: Step): string;
|
|
11
25
|
/**
|
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
const ASSERTION_KINDS = new Set([
|
|
2
|
+
"waitForText",
|
|
3
|
+
"waitForUrl",
|
|
4
|
+
"assertVisible",
|
|
5
|
+
"assertNotVisible",
|
|
6
|
+
"assertUrl",
|
|
7
|
+
]);
|
|
8
|
+
/**
|
|
9
|
+
* Replay dedicated to producing the preview video: identical step execution to
|
|
10
|
+
* {@link replaySteps}, but it records each step's wall-clock offset (for burned
|
|
11
|
+
* captions) and dwells after assertions / at the end so a human can read the
|
|
12
|
+
* verified state. It is decoupled from the verdict — this run is never the
|
|
13
|
+
* source of truth, so the pacing pauses cannot affect a pass/fail decision.
|
|
14
|
+
*/
|
|
15
|
+
export async function replayForVideo(session, steps, assertDwellMs, endDwellMs) {
|
|
16
|
+
const timeline = [];
|
|
17
|
+
const epoch = session.videoEpoch ?? Date.now();
|
|
18
|
+
for (let i = 0; i < steps.length; i++) {
|
|
19
|
+
const step = steps[i];
|
|
20
|
+
timeline.push({ label: `${i + 1}/${steps.length} · ${describeStep(step)}`, tMs: Date.now() - epoch });
|
|
21
|
+
try {
|
|
22
|
+
await session.executeStep(step);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return { passed: false, timeline, failedIndex: i };
|
|
26
|
+
}
|
|
27
|
+
if (ASSERTION_KINDS.has(step.kind))
|
|
28
|
+
await session.page.waitForTimeout(assertDwellMs);
|
|
29
|
+
}
|
|
30
|
+
await session.page.waitForTimeout(endDwellMs); // hold the final frame for the verdict card
|
|
31
|
+
return { passed: true, timeline };
|
|
32
|
+
}
|
|
1
33
|
/** Describes a step for reports/errors. */
|
|
2
34
|
export function describeStep(step) {
|
|
3
35
|
switch (step.kind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/runner/script-runner.ts"],"names":[],"mappings":"
|
|
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;CACZ,CAAC,CAAC;AAQH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,KAAa,EACb,aAAqB,EACrB,UAAkB;IAElB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,4CAA4C;IAC3F,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,aAAa,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAChD,KAAK,MAAM;YACT,OAAO,aAAa,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAChD,KAAK,QAAQ;YACX,OAAO,eAAe,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACpE,KAAK,OAAO;YACV,OAAO,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,aAAa;YAChB,OAAO,kBAAkB,IAAI,CAAC,IAAI,GAAG,CAAC;QACxC,KAAK,YAAY;YACf,OAAO,uBAAuB,IAAI,CAAC,OAAO,GAAG,CAAC;QAChD,KAAK,eAAe;YAClB,OAAO,4BAA4B,IAAI,CAAC,IAAI,GAAG,CAAC;QAClD,KAAK,kBAAkB;YACrB,OAAO,4BAA4B,IAAI,CAAC,IAAI,GAAG,CAAC;QAClD,KAAK,WAAW;YACd,OAAO,yBAAyB,IAAI,CAAC,OAAO,GAAG,CAAC;QAClD,KAAK,YAAY;YACf,OAAO,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB,EAAE,KAAa;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxE,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;gBAC9B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Verdict } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Preview-video pipeline. The video is sourced from a dedicated, paced replay
|
|
4
|
+
* (never the messy AI run) and post-processed by ffmpeg into a GitHub-ready
|
|
5
|
+
* MP4 with baked-in step labels and a verdict card. ffmpeg is an *optional*
|
|
6
|
+
* system dependency — when it is missing we keep the raw WebM and warn with an
|
|
7
|
+
* install hint instead of bundling a binary into the base install.
|
|
8
|
+
*/
|
|
9
|
+
export interface TimelineEntry {
|
|
10
|
+
/** Caption burned onto the frame while this step runs (e.g. "2/5 · clicar em ...") */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Milliseconds from video start (context creation) to the step's execution */
|
|
13
|
+
tMs: number;
|
|
14
|
+
}
|
|
15
|
+
export interface VideoPacing {
|
|
16
|
+
/** Playwright slowMo (ms added per action) — slows the replay for human viewing */
|
|
17
|
+
slowMoMs: number;
|
|
18
|
+
/** Extra pause after each assertion so the verified state is readable */
|
|
19
|
+
assertDwellMs: number;
|
|
20
|
+
/** Opening card (scenario name) duration */
|
|
21
|
+
titleCardMs: number;
|
|
22
|
+
/** Closing verdict card duration — also the final-frame dwell it overlays */
|
|
23
|
+
verdictCardMs: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Maps the single `videoSpeed` knob (0,1] to concrete pacing. <1 = slower.
|
|
27
|
+
* At 1.0 the replay runs at natural speed; the default 0.4 yields a clip a
|
|
28
|
+
* human can actually follow.
|
|
29
|
+
*/
|
|
30
|
+
export declare function pacingFor(videoSpeed?: number): VideoPacing;
|
|
31
|
+
/** First usable font: SCOUT_VIDEO_FONT override, then common system paths. */
|
|
32
|
+
export declare function resolveFont(): string | undefined;
|
|
33
|
+
/** Resolves the ffmpeg binary (FFMPEG_PATH or PATH), or undefined if absent. */
|
|
34
|
+
export declare function findFfmpeg(): string | undefined;
|
|
35
|
+
export interface OverlaySpec {
|
|
36
|
+
font: string;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
durationMs: number;
|
|
40
|
+
scenarioName: string;
|
|
41
|
+
verdict: Verdict;
|
|
42
|
+
timeline: TimelineEntry[];
|
|
43
|
+
pacing: VideoPacing;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds the ffmpeg `-vf` filtergraph that bakes the overlays. Drawn in array
|
|
47
|
+
* order (later filters sit on top): step captions first, then the opening
|
|
48
|
+
* card, then the verdict card last so it covers the held final frame.
|
|
49
|
+
* Returns "" when no font is available — caller still transcodes, just plain.
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildOverlayFilter(spec: OverlaySpec): string;
|
|
52
|
+
export interface GenerateVideoInput {
|
|
53
|
+
webmPath: string;
|
|
54
|
+
outPath: string;
|
|
55
|
+
width: number;
|
|
56
|
+
height: number;
|
|
57
|
+
scenarioName: string;
|
|
58
|
+
verdict: Verdict;
|
|
59
|
+
timeline: TimelineEntry[];
|
|
60
|
+
pacing: VideoPacing;
|
|
61
|
+
}
|
|
62
|
+
export interface GenerateVideoResult {
|
|
63
|
+
/** Path to the produced artifact (MP4 on success, WebM fallback otherwise) */
|
|
64
|
+
output?: string;
|
|
65
|
+
warning?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Transcodes the paced WebM to an H.264 MP4 (GitHub-playable) with baked
|
|
69
|
+
* overlays. On any ffmpeg problem the raw WebM is returned as a fallback so
|
|
70
|
+
* `--record-video` always yields a playable file.
|
|
71
|
+
*/
|
|
72
|
+
export declare function generateVideo(input: GenerateVideoInput): GenerateVideoResult;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
const BASE_SLOWMO = 200;
|
|
4
|
+
function clamp(n, lo, hi) {
|
|
5
|
+
return Math.min(hi, Math.max(lo, n));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Maps the single `videoSpeed` knob (0,1] to concrete pacing. <1 = slower.
|
|
9
|
+
* At 1.0 the replay runs at natural speed; the default 0.4 yields a clip a
|
|
10
|
+
* human can actually follow.
|
|
11
|
+
*/
|
|
12
|
+
export function pacingFor(videoSpeed = 0.4) {
|
|
13
|
+
const speed = clamp(videoSpeed, 0.1, 1);
|
|
14
|
+
return {
|
|
15
|
+
slowMoMs: Math.round(BASE_SLOWMO * (1 / speed - 1)),
|
|
16
|
+
assertDwellMs: Math.round(500 / speed),
|
|
17
|
+
titleCardMs: 1500,
|
|
18
|
+
verdictCardMs: 1800,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const FONT_CANDIDATES = [
|
|
22
|
+
"/System/Library/Fonts/Supplemental/Arial.ttf",
|
|
23
|
+
"/Library/Fonts/Arial.ttf",
|
|
24
|
+
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
|
25
|
+
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf",
|
|
26
|
+
"/usr/share/fonts/TTF/DejaVuSans.ttf",
|
|
27
|
+
"C:\\Windows\\Fonts\\arial.ttf",
|
|
28
|
+
];
|
|
29
|
+
/** First usable font: SCOUT_VIDEO_FONT override, then common system paths. */
|
|
30
|
+
export function resolveFont() {
|
|
31
|
+
const override = process.env.SCOUT_VIDEO_FONT;
|
|
32
|
+
if (override && fs.existsSync(override))
|
|
33
|
+
return override;
|
|
34
|
+
return FONT_CANDIDATES.find((f) => fs.existsSync(f));
|
|
35
|
+
}
|
|
36
|
+
/** Resolves the ffmpeg binary (FFMPEG_PATH or PATH), or undefined if absent. */
|
|
37
|
+
export function findFfmpeg() {
|
|
38
|
+
const bin = process.env.FFMPEG_PATH || "ffmpeg";
|
|
39
|
+
const probe = spawnSync(bin, ["-version"], { stdio: "ignore" });
|
|
40
|
+
return probe.status === 0 ? bin : undefined;
|
|
41
|
+
}
|
|
42
|
+
function probeDurationMs(ffmpegBin, file) {
|
|
43
|
+
const ffprobe = process.env.FFPROBE_PATH ||
|
|
44
|
+
(ffmpegBin.endsWith("ffmpeg") ? ffmpegBin.replace(/ffmpeg$/, "ffprobe") : "ffprobe");
|
|
45
|
+
const r = spawnSync(ffprobe, ["-v", "error", "-show_entries", "format=duration", "-of", "default=nw=1:nk=1", file], { encoding: "utf8" });
|
|
46
|
+
if (r.status === 0) {
|
|
47
|
+
const seconds = parseFloat(r.stdout.trim());
|
|
48
|
+
if (!Number.isNaN(seconds))
|
|
49
|
+
return Math.round(seconds * 1000);
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const VERDICT_COLOR = {
|
|
54
|
+
verified: "0x2ECC71",
|
|
55
|
+
failed: "0xE74C3C",
|
|
56
|
+
partial: "0xF39C12",
|
|
57
|
+
blocked: "0x95A5A6",
|
|
58
|
+
};
|
|
59
|
+
const VERDICT_LABEL = {
|
|
60
|
+
verified: "VERIFICADO",
|
|
61
|
+
failed: "FALHOU",
|
|
62
|
+
partial: "PARCIAL",
|
|
63
|
+
blocked: "BLOQUEADO",
|
|
64
|
+
};
|
|
65
|
+
/** drawtext text=' ' wraps the value, so only quotes/backslashes must go. */
|
|
66
|
+
function safeText(s) {
|
|
67
|
+
return s.replace(/['\\]/g, "").trim();
|
|
68
|
+
}
|
|
69
|
+
/** Approx Arial glyph advance as a fraction of font size — for width fitting. */
|
|
70
|
+
const GLYPH_RATIO = 0.56;
|
|
71
|
+
/**
|
|
72
|
+
* drawtext can't wrap, so we shrink the font to fit `maxWidth`, and if even the
|
|
73
|
+
* minimum size overflows we truncate with an ellipsis. Keeps long scenario
|
|
74
|
+
* names and step labels inside the portrait frame instead of bleeding off-edge.
|
|
75
|
+
*/
|
|
76
|
+
function fitText(value, maxWidth, maxSize, minSize) {
|
|
77
|
+
const len = Math.max(value.length, 1);
|
|
78
|
+
const size = Math.floor(maxWidth / (len * GLYPH_RATIO));
|
|
79
|
+
if (size >= maxSize)
|
|
80
|
+
return { text: value, size: maxSize };
|
|
81
|
+
if (size >= minSize)
|
|
82
|
+
return { text: value, size };
|
|
83
|
+
const maxChars = Math.max(4, Math.floor(maxWidth / (minSize * GLYPH_RATIO)) - 1);
|
|
84
|
+
return { text: value.length > maxChars ? value.slice(0, maxChars - 1) + "…" : value, size: minSize };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Builds the ffmpeg `-vf` filtergraph that bakes the overlays. Drawn in array
|
|
88
|
+
* order (later filters sit on top): step captions first, then the opening
|
|
89
|
+
* card, then the verdict card last so it covers the held final frame.
|
|
90
|
+
* Returns "" when no font is available — caller still transcodes, just plain.
|
|
91
|
+
*/
|
|
92
|
+
export function buildOverlayFilter(spec) {
|
|
93
|
+
const { font, width, durationMs, pacing } = spec;
|
|
94
|
+
if (!font)
|
|
95
|
+
return "";
|
|
96
|
+
const dur = durationMs / 1000;
|
|
97
|
+
const titleSec = Math.min(pacing.titleCardMs / 1000, dur * 0.4);
|
|
98
|
+
const verdictStart = Math.max(titleSec, dur - pacing.verdictCardMs / 1000);
|
|
99
|
+
const ff = safeText(font);
|
|
100
|
+
const between = (a, b) => `enable='between(t,${a.toFixed(2)},${b.toFixed(2)})'`;
|
|
101
|
+
const text = (value, opts) => [
|
|
102
|
+
`drawtext=fontfile='${ff}'`,
|
|
103
|
+
`text='${safeText(value)}'`,
|
|
104
|
+
`fontcolor=${opts.color}`,
|
|
105
|
+
`fontsize=${opts.size}`,
|
|
106
|
+
opts.box ? "box=1:boxcolor=black@0.55:boxborderw=14" : "",
|
|
107
|
+
"x=(w-text_w)/2",
|
|
108
|
+
`y=${opts.y}`,
|
|
109
|
+
"expansion=none",
|
|
110
|
+
between(opts.a, opts.b),
|
|
111
|
+
]
|
|
112
|
+
.filter(Boolean)
|
|
113
|
+
.join(":");
|
|
114
|
+
const fullBox = (a, b, alpha = "0.6") => `drawbox=x=0:y=0:w=iw:h=ih:color=black@${alpha}:t=fill:${between(a, b)}`;
|
|
115
|
+
const filters = [];
|
|
116
|
+
// Step captions — bounded so a long script can't explode the graph.
|
|
117
|
+
spec.timeline.slice(0, 80).forEach((entry, i) => {
|
|
118
|
+
const a = Math.max(entry.tMs / 1000, titleSec);
|
|
119
|
+
const next = spec.timeline[i + 1];
|
|
120
|
+
const b = next ? next.tMs / 1000 : verdictStart;
|
|
121
|
+
if (a >= b)
|
|
122
|
+
return;
|
|
123
|
+
const fit = fitText(entry.label, width - 68, 26, 14); // box border eats horizontal room
|
|
124
|
+
filters.push(text(fit.text, { size: fit.size, color: "white", y: "h-text_h-60", box: true, a, b }));
|
|
125
|
+
});
|
|
126
|
+
// Opening card.
|
|
127
|
+
const title = fitText(spec.scenarioName, width - 40, 40, 18);
|
|
128
|
+
filters.push(fullBox(0, titleSec));
|
|
129
|
+
filters.push(text(title.text, { size: title.size, color: "white", y: "(h/2)-70", a: 0, b: titleSec }));
|
|
130
|
+
filters.push(text("scout preview", { size: 22, color: "0xBDC3C7", y: "(h/2)+10", a: 0, b: titleSec }));
|
|
131
|
+
// Closing verdict card.
|
|
132
|
+
const verdict = fitText(VERDICT_LABEL[spec.verdict], width - 40, 52, 24);
|
|
133
|
+
filters.push(fullBox(verdictStart, dur));
|
|
134
|
+
filters.push(text(verdict.text, {
|
|
135
|
+
size: verdict.size,
|
|
136
|
+
color: VERDICT_COLOR[spec.verdict],
|
|
137
|
+
y: "(h-text_h)/2",
|
|
138
|
+
a: verdictStart,
|
|
139
|
+
b: dur,
|
|
140
|
+
}));
|
|
141
|
+
return filters.join(",");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Transcodes the paced WebM to an H.264 MP4 (GitHub-playable) with baked
|
|
145
|
+
* overlays. On any ffmpeg problem the raw WebM is returned as a fallback so
|
|
146
|
+
* `--record-video` always yields a playable file.
|
|
147
|
+
*/
|
|
148
|
+
export function generateVideo(input) {
|
|
149
|
+
const ffmpeg = findFfmpeg();
|
|
150
|
+
if (!ffmpeg) {
|
|
151
|
+
return {
|
|
152
|
+
output: input.webmPath,
|
|
153
|
+
warning: "ffmpeg não encontrado — MP4 com overlays não gerado, mantido o WebM cru. Instale ffmpeg (brew install ffmpeg / apt-get install ffmpeg) ou defina FFMPEG_PATH.",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const font = resolveFont();
|
|
157
|
+
const durationMs = probeDurationMs(ffmpeg, input.webmPath) ??
|
|
158
|
+
(input.timeline.at(-1)?.tMs ?? 0) + input.pacing.verdictCardMs;
|
|
159
|
+
const filter = buildOverlayFilter({
|
|
160
|
+
font: font ?? "",
|
|
161
|
+
width: input.width,
|
|
162
|
+
height: input.height,
|
|
163
|
+
durationMs,
|
|
164
|
+
scenarioName: input.scenarioName,
|
|
165
|
+
verdict: input.verdict,
|
|
166
|
+
timeline: input.timeline,
|
|
167
|
+
pacing: input.pacing,
|
|
168
|
+
});
|
|
169
|
+
const args = [
|
|
170
|
+
"-y",
|
|
171
|
+
"-i",
|
|
172
|
+
input.webmPath,
|
|
173
|
+
...(filter ? ["-vf", filter] : []),
|
|
174
|
+
"-c:v",
|
|
175
|
+
"libx264",
|
|
176
|
+
"-pix_fmt",
|
|
177
|
+
"yuv420p",
|
|
178
|
+
"-movflags",
|
|
179
|
+
"+faststart",
|
|
180
|
+
"-an",
|
|
181
|
+
input.outPath,
|
|
182
|
+
];
|
|
183
|
+
const run = spawnSync(ffmpeg, args, { stdio: "ignore" });
|
|
184
|
+
if (run.status !== 0) {
|
|
185
|
+
return {
|
|
186
|
+
output: input.webmPath,
|
|
187
|
+
warning: "ffmpeg falhou ao gerar o MP4 — mantido o WebM cru.",
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
output: input.outPath,
|
|
192
|
+
warning: font
|
|
193
|
+
? undefined
|
|
194
|
+
: "Nenhuma fonte encontrada para os overlays — MP4 gerado sem legendas. Defina SCOUT_VIDEO_FONT apontando para um .ttf.",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/runner/video.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -82,6 +82,8 @@ export interface RunResult {
|
|
|
82
82
|
durationMs: number;
|
|
83
83
|
screenshots: string[];
|
|
84
84
|
trace?: string;
|
|
85
|
+
/** Paced preview clip (MP4, or WebM fallback) — only when --record-video and verified */
|
|
86
|
+
video?: string;
|
|
85
87
|
/** true when this AI run replaced a broken cached script */
|
|
86
88
|
healed?: boolean;
|
|
87
89
|
/**
|
package/package.json
CHANGED