demobites 1.30.0 → 1.30.2

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": "demobites",
3
- "version": "1.30.0",
3
+ "version": "1.30.2",
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
  "demobites": "launcher/index.mjs"
@@ -1286,13 +1286,21 @@ try {
1286
1286
  }
1287
1287
  // Closing beat so the last action breathes before the cut ends.
1288
1288
  await page.waitForTimeout(CLOSING_BEAT_MS);
1289
- // THE TAKE SAYS WHAT IT COST (2026-10-18): per step, so a slow take explains itself.
1290
- const glides = manifest.camera.filter((c) => c.glide).map((c) => c.glide.t_end - c.glide.t_start);
1291
- manifest.timing = { filmed_s: Math.round(t() * 100) / 100, steps: manifest.steps.map((st) => ({ n: st.n, action: st.action, s: Math.round(((st.t_end ?? 0) - (st.t_start ?? 0)) * 100) / 100 })), glide_s: Math.round(glides.reduce((a, b) => a + b, 0) * 100) / 100, glides: glides.length };
1292
- console.log(`timing: filmed ${manifest.timing.filmed_s}s; steps ${manifest.timing.steps.map((st) => `${st.n}:${st.s}s`).join(" ")}; glides ${glides.length} totalling ${manifest.timing.glide_s}s`);
1293
1289
  } catch (e) {
1294
1290
  failure = e;
1295
1291
  }
1292
+ // THE TAKE SAYS WHAT IT COST (2026-10-18): per step, so a slow take explains itself. A SUMMARY NEVER FAILS A TAKE
1293
+ // (1.30.1: the founder's first take through the new chain filmed all nine steps and died here, on a key that never
1294
+ // existed — `manifest.camera`; the glides live on the shots). Outside the filming try, in its own.
1295
+ try {
1296
+ if (!failure) {
1297
+ const glides = (manifest.shots ?? []).filter((c) => c.glide).map((c) => c.glide.t_end - c.glide.t_start);
1298
+ manifest.timing = { filmed_s: Math.round(t() * 100) / 100, steps: manifest.steps.map((st) => ({ n: st.n, action: st.action, s: Math.round(((st.t_end ?? 0) - (st.t_start ?? 0)) * 100) / 100 })), glide_s: Math.round(glides.reduce((a, b) => a + b, 0) * 100) / 100, glides: glides.length };
1299
+ console.log(`timing: filmed ${manifest.timing.filmed_s}s; steps ${manifest.timing.steps.map((st) => `${st.n}:${st.s}s`).join(" ")}; glides ${glides.length} totalling ${manifest.timing.glide_s}s`);
1300
+ }
1301
+ } catch (e) {
1302
+ console.log(`timing summary skipped: ${e.message}`);
1303
+ }
1296
1304
 
1297
1305
  clearInterval(sampler);
1298
1306
  clearInterval(framer);
package/scripts/trim.mjs CHANGED
@@ -137,7 +137,10 @@ if (cutAt !== r0 - beaconDelta) console.log("beacon: corrected cut clamped at 0
137
137
  // fit (the identity law stands): a known, deliberate, uniform compression, recorded in the manifest.
138
138
  let speed = 1;
139
139
  try {
140
- const { estimateTake } = await import("../skill/scripts/clock.mjs");
140
+ // The clock sits beside trim.mjs once installed (~/.claude/skills/agentic-recorder/scripts flattens skill/scripts and
141
+ // scripts into one folder) and under skill/scripts in the repository: try the installed layout first (1.30.2: on the
142
+ // founder's Mac the repository path did not exist and the fit was silently skipped, "speed: as filmed").
143
+ const { estimateTake } = await import("./clock.mjs").catch(() => import("../skill/scripts/clock.mjs"));
141
144
  const sb = JSON.parse(fs.readFileSync(path.join(dir, "storyboard.json"), "utf8"));
142
145
  const planned = estimateTake(sb.steps);
143
146
  const filmed = lastStepEnd > r0 ? lastStepEnd - r0 + TAIL_BEAT_S : 0;