cbrowser 18.71.0 → 18.72.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/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import { getStatusInfo, formatStatus, getDataDir, getPaths } from "./config.js";
27
27
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
28
28
  import { dirname, join, resolve } from "node:path";
29
29
  import { VideoCaptureSession } from "./recording/engine.js";
30
- import { parseManifest } from "./recording/types.js";
30
+ import { changeSignal, parseManifest } from "./recording/types.js";
31
31
  import { printEnterpriseStatus } from "./stealth/index.js";
32
32
  import { runCognitiveJourney, getAnthropicApiKey, setAnthropicApiKey, removeAnthropicApiKey, isApiKeyConfigured, } from "./cognitive/index.js";
33
33
  // Lightpanda integration (v18.20.0) - OPT-IN ONLY with security guardrails
@@ -593,7 +593,9 @@ SCREEN CAPTURE (video/GIF — distinct from 'record', which captures actions)
593
593
  --after-delay <500ms> Extra delay after the start trigger
594
594
  --until-element <sel> Stop when the element appears
595
595
  --until-element-gone <sel> Stop when the element disappears
596
- --until-idle <800ms> Stop after this long with no visual change
596
+ --until-idle <800ms> Stop after this long with NO part of the page
597
+ changing. A page with a clock or ticker is always
598
+ changing and will run to --timeout instead.
597
599
  --timeout <30s> Trigger wait budget (default: 30s); a trigger that
598
600
  never fires stops the capture, writes a manifest
599
601
  with trigger_timeout, and exits non-zero
@@ -1640,6 +1642,14 @@ async function runCaptureStatus() {
1640
1642
  console.log(` Started: ${manifest.started_at}`);
1641
1643
  console.log(` Frames: ${manifest.frames.length} over ${manifest.duration_ms}ms (${manifest.actual_fps.toFixed(1)} fps)`);
1642
1644
  console.log(` Capture: ${manifest.capture_method}`);
1645
+ // changeSignal() rather than the optional fields directly: it maps a v1
1646
+ // manifest's change_points onto keyFrames, which is exact rather than a
1647
+ // guess (v1 computed them at the 0.9 bar that v2 calls key_frames). Reading
1648
+ // the raw field would report "no key frames" for a file that has them.
1649
+ const signal = changeSignal(manifest);
1650
+ console.log(` Key frames: ${signal.keyFrames.length}${signal.keyFrames.length > 0 ? ` (${signal.keyFrames.slice(0, 8).join(", ")}${signal.keyFrames.length > 8 ? ", ..." : ""})` : ""}`);
1651
+ console.log(` Change points: ${signal.changePoints.length}` +
1652
+ (signal.saturated ? ` — saturated, use key frames instead` : ""));
1643
1653
  console.log(` Artifacts: ${Object.entries(manifest.artifacts).map(([k, v]) => `${k} -> ${v}`).join(", ") || "none"}`);
1644
1654
  console.log(` Manifest: ${manifests[0]}`);
1645
1655
  }