demobite 1.8.2 → 1.8.3

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.
@@ -141,6 +141,19 @@ if (needed.length) {
141
141
  if (r.status === 0) ok("Playwright ready");
142
142
  else warn(`Install failed — run: npm install --prefix ~/.claude/skills/agentic-recorder ${needed.join(" ")}`);
143
143
  }
144
+ // Playwright's OWN ffmpeg: recordVideo needs it even when the real Chrome is
145
+ // the browser (founder's test 2026-10-14: the first take failed — the
146
+ // launcher had checked the system ffmpeg, not the one Playwright's capture
147
+ // uses, and with Chrome present `playwright install` never ran). Always.
148
+ {
149
+ const pw = path.join(dest, "node_modules", "playwright", "cli.js");
150
+ const marker = path.join(dest, ".pw-ffmpeg-ready");
151
+ if (!fs.existsSync(marker) && fs.existsSync(pw)) {
152
+ const r = spawnSync("node", [pw, "install", "ffmpeg"], { stdio: "inherit", cwd: dest });
153
+ if (r.status === 0) { fs.writeFileSync(marker, new Date().toISOString()); ok("Playwright's video encoder ready"); }
154
+ else warn(`Playwright's ffmpeg install failed — run: node ${pw} install ffmpeg`);
155
+ } else if (fs.existsSync(marker)) ok("Playwright's video encoder ready");
156
+ }
144
157
  // No Chrome on this machine: fetch Playwright's Chromium once so the first
145
158
  // take has a browser. Linux needs the shared libraries too (--with-deps).
146
159
  if (!haveChrome) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "demobite",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "The DemoBites agentic recorder — you prompt, it films a real browser, and DemoBites turns the take into an editable demo bite.",
5
5
  "bin": {
6
6
  "demobite": "launcher/index.mjs"
package/skill/SKILL.md CHANGED
@@ -24,6 +24,7 @@ The plugin is a product. Every line you say is read by the person who asked for
24
24
  - **Progress you can glance at.** While filming, relay record.mjs's `Filming ████░░ step n of N` line. While writing the storyboard, one dim line of what you are reading.
25
25
  - **Plain words only.** Never on screen: dry run, control, selector, resolves, beat, surface, profile, headed, Playwright, vocab, obstacle, revert, JSON, storyboard.json, manifest, take. Use: step, demo, page, window, sign in, film, deliver, Demos grid.
26
26
  - **Demo, never recording.** The thing the person gets is a demo; the act is filming.
27
+ - **Findings go to us, never to the person.** Anything you learned about the recorder, the installer, the camera or DemoBites itself (a title that got cut, a merge rule, a missing encoder) is written to `.recorder/notes.md` in the project — dated, one paragraph each — and never said in the chat. The person asked for a demo, not a report on our product. (Founder 2026-10-14: "all this nonsense and all this explanation is not relevant.")
27
28
 
28
29
  ## Phase 0: Auth gate, ALWAYS FIRST — announced, never silent
29
30
 
@@ -366,7 +367,7 @@ On the person's "1": say "Filming. About <m:ss>; I'll tell you when it lands." a
366
367
 
367
368
  ## Phase 6: Deliver into DemoBites
368
369
 
369
- When `upload.mjs` prints its last line, say: "✓ Delivered. \"<title>\" (<m:ss>) is landing in your Demos grid now: <base>/demos — watch it come in there. You can change any sentence, the voice and the zooms in the editor." When minutes ran out, relay upload.mjs's "Kept…" line as it is.
370
+ When `upload.mjs` prints its last line, say ONE line: "✓ Delivered. \"<title>\" (<m:ss>) is being prepared — about two minutes; I'll give you the link when it's ready." Then run `node scripts/status.mjs <takeDir>` (it waits until the demo is completed and prints `Studio: <url>`). When it does, say exactly, and only: "✓ Ready — open it: <that url>". That is the LAST line of the whole run: no notes, no findings, no list of what happened (those go to `.recorder/notes.md`, How you talk). When minutes ran out, relay upload.mjs's "Kept…" line as it is, and stop.
370
371
 
371
372
 
372
373
  Send the TRIMMED CLEAN take into DemoBites. The studio owns the look: NO backdrop, NO rounded corners, NO shadow on the uploaded file. Everything (voice, zooms, look, intro, outro) becomes editable there.