demobite 1.7.0 → 1.7.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "demobite",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
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"
@@ -427,6 +427,13 @@ const pushWide = (tStart, tEnd, label, extra) =>
427
427
  // spans the whole landing — the line "you land on the report" plays over it.
428
428
  let wideAfter = null; // { tStart, label, extra }
429
429
  const wantsWide = (step) => step.frame === "wide";
430
+ // Every click keeps its close shot this long past the click (founder
431
+ // 2026-09-29). The export FINISHES a pull-out at the shot's end, so a close
432
+ // shot ending 0.3 s after the click started pulling out ~0.7 s BEFORE it: the
433
+ // last click of bite 1110 (the pause switch) played at 1.12x. 1.1 s puts the
434
+ // whole pull-out after the click lands. A click framed wide (option 2) hands
435
+ // over to its wide landing at the same moment.
436
+ const LANDING_PULL_OUT = 1.1;
430
437
  const wantsClose = (step) => step.frame === "close";
431
438
  // The page as a signature, so a submit that swaps the page IN PLACE (a search
432
439
  // that re-renders a list, a client-side route change) counts as a landing
@@ -967,9 +974,14 @@ try {
967
974
  await page.evaluate(([a, b]) => window.__recSetCursor?.(a, b), [cx, cy]);
968
975
  }
969
976
  // Shot one: the control — beginning near ARRIVAL (see the camera
970
- // choreography law above), never spanning the approach glide.
971
- if (stepWide) wideAfter = { tStart: Math.max(shotStart, arrivalT - 0.3), label: step.label, extra: { n: rec.n } };
972
- else pushShot(userShotBox(step, box), Math.max(shotStart, arrivalT - 0.3), t() + 0.3, step.label, { n: rec.n, glide: { t_start: Math.round(shotStart * 100) / 100, t_end: Math.round(arrivalT * 100) / 100 } });
977
+ // choreography law above), never spanning the approach glide. A click
978
+ // framed `wide` (its line is about where it leads) is STILL filmed
979
+ // close on the click; the landing after it is the wide shot. Before
980
+ // 2026-09-29 the whole step went wide from arrival, so the viewer saw
981
+ // a tiny cursor click a tiny item (bite 1117: all three clicks).
982
+ const closeEnd = Math.max(t() + 0.3, rec.click_at + LANDING_PULL_OUT);
983
+ pushShot(userShotBox(step, box), Math.max(shotStart, arrivalT - 0.3), closeEnd, step.label, { n: rec.n, glide: { t_start: Math.round(shotStart * 100) / 100, t_end: Math.round(arrivalT * 100) / 100 } });
984
+ if (stepWide) wideAfter = { tStart: closeEnd, label: `${step.label ?? "click"}, landing`, extra: { n: rec.n, revealed: true } };
973
985
  // LAW (press physics, founder 2026-08-09): a press has a down and an
974
986
  // up — but the up only exists if the clicked surface is still there.
975
987
  // A menu item or modal button that DESTROYS itself on click gets a
package/skill/SKILL.md CHANGED
@@ -172,6 +172,7 @@ Framing is our job, never the customer's (founder, 2026-09-27). Decide it from t
172
172
  - A field, a button, a menu item, a toggle, a badge, a row = `"close"`.
173
173
  - Landing on a page, a report, a chart, a table, a dashboard, a list of results = `"wide"`. So is every line that says "here is", "you see", "you land on", "the whole".
174
174
  - A `type` step with `enter` is close for the typing. What Enter reveals is wide by itself; the recorder sees the new page. Do not add a beat for it.
175
+ - A `click` whose line is about where it leads ("pick it, and you are on the right screen") = `"wide"`. The recorder still films the click itself close, then goes wide on the landing from the moment of the click (founder, 2026-09-29). The viewer always sees what was clicked, then where it led.
175
176
  - A bare `settle` right after a navigation is wide by itself.
176
177
  - Two consecutive wides on the same page are one shot. Write both; the server joins them.
177
178
  - Never more than 4 seconds of close on a static screen. When the line runs longer, the beat is wide.