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.
@@ -15,8 +15,57 @@
15
15
  * runtime contract and the compile-time contract cannot drift.
16
16
  */
17
17
  import { z } from "zod";
18
- /** Manifest format version emitted by this build. */
19
- export const MANIFEST_VERSION = 1;
18
+ /**
19
+ * Manifest format version emitted by this build.
20
+ *
21
+ * v2 (2026-07-19) added the two-tier change signal: `key_frames`,
22
+ * `change_points_saturated` and `ssim_thresholds`, all OPTIONAL in the schema
23
+ * (expand-contract, so older files keep parsing) but always emitted, so
24
+ * `version >= 2` reliably signals their presence.
25
+ *
26
+ * v3 (2026-07-19) changed the DETECTOR behind those fields from global SSIM to
27
+ * {@link SSIM_THRESHOLDS} window-min ({@link changeScore}), and re-tuned the
28
+ * thresholds to the new scale (0.999/0.9 -> 0.95/0.6). The field shapes are
29
+ * unchanged, but a v3 `change_points` is not numerically comparable to a v2
30
+ * one — the version is the signal for that, since the values in
31
+ * `ssim_thresholds` alone cannot convey that the underlying metric changed.
32
+ * Readers wanting a uniform view across versions should use {@link changeSignal}.
33
+ */
34
+ export const MANIFEST_VERSION = 3;
35
+ /**
36
+ * Change-detection thresholds for the two-tier signal.
37
+ *
38
+ * These are measured against the {@link changeScore} scale (minimum SSIM over an
39
+ * 8x8 window grid on a 128px signature), NOT global SSIM. The scale is entirely
40
+ * different from a whole-frame metric and the two are not interchangeable — a
41
+ * localized text change reads ~0.87 under changeScore versus ~0.9998 under
42
+ * global SSIM. The producer MUST feed these thresholds changeScore values;
43
+ * `ssim_thresholds` records them in every manifest so a reader never guesses.
44
+ *
45
+ * `CHANGE` (0.95) — "did anything change". Below the practical noise floor
46
+ * (an unchanging page scores exactly 1.0; window-min does not fire on codec
47
+ * noise) and above a 12px counter tick (~0.87), which is the localized change
48
+ * global SSIM could not see at any resolution.
49
+ *
50
+ * `KEY` (0.6) — "did something notable happen". The sparse tier, and the same
51
+ * signal that sets each frame's `anomaly` flag. It sits in the wide gap between
52
+ * a minor tick (~0.87, excluded) and a real interaction like a form fill
53
+ * (~0.21, included), so background chrome does not flood it. Because KEY <
54
+ * CHANGE, `key_frames` is necessarily a subset of `change_points`;
55
+ * {@link changeSignalIssues} checks a manifest honours it.
56
+ *
57
+ * Derived from measurement on five fixtures (static / ticking counter / two
58
+ * form fills / banner toggle / full-viewport animation), 2026-07-19. The
59
+ * counter fixture is why the two tiers matter: change_points fires on every
60
+ * tick and saturates, while key_frames stays empty — so key_frames is the
61
+ * usable signal precisely when change_points is not.
62
+ */
63
+ export const SSIM_THRESHOLDS = { change: 0.95, key: 0.6 };
64
+ /**
65
+ * Fraction of frames above which `change_points` is considered saturated —
66
+ * carrying no discriminating information for that capture.
67
+ */
68
+ export const CHANGE_SATURATION_RATIO = 0.7;
20
69
  // ============================================================================
21
70
  // Primitives
22
71
  // ============================================================================
@@ -129,8 +178,53 @@ export const RecordingManifestSchema = z.object({
129
178
  duration_ms: z.number().nonnegative(),
130
179
  output_dims: DimsSchema,
131
180
  frames: z.array(FrameSchema),
132
- /** Frame indices where SSIM dropped below the change threshold. */
181
+ /**
182
+ * Frame indices whose change score fell below the CHANGE threshold
183
+ * ({@link SSIM_THRESHOLDS}.change). Sensitive tier: catches a localized change
184
+ * like a form fill or a ticking counter, and saturates on a continuously
185
+ * changing page — see `change_points_saturated`.
186
+ */
133
187
  change_points: z.array(z.number().int().nonnegative()),
188
+ /**
189
+ * Frame indices where SSIM dropped below the KEY threshold: the sparse
190
+ * "something notable happened" list, and a subset of `change_points`.
191
+ *
192
+ * v2+. Absent on v1 manifests, where `change_points` was itself computed at
193
+ * the key threshold — see {@link changeSignal}.
194
+ */
195
+ key_frames: z.array(z.number().int().nonnegative()).optional(),
196
+ /**
197
+ * True when `change_points` covers more than
198
+ * {@link CHANGE_SATURATION_RATIO} of frames, i.e. it carries no
199
+ * discriminating information for this capture and a reader should fall back
200
+ * to `key_frames`.
201
+ *
202
+ * Explicit rather than left for the reader to derive, so a saturated field
203
+ * cannot masquerade as a working one. v2+.
204
+ */
205
+ change_points_saturated: z.boolean().optional(),
206
+ /**
207
+ * The thresholds this build actually used, so a reader never has to infer
208
+ * which build produced a file. v2+.
209
+ *
210
+ * `method` names the comparator the scores and thresholds are on, e.g.
211
+ * "changeScore-window-min" — the METRIC, which the threshold values alone
212
+ * cannot convey (0.95 under window-min and 0.95 under global SSIM are entirely
213
+ * different tests). It lives HERE, with the numbers it describes, rather than
214
+ * at the manifest top level where it read as a sibling of `capture_method`.
215
+ */
216
+ ssim_thresholds: z
217
+ .object({ change: z.number(), key: z.number(), method: z.string().optional() })
218
+ .optional(),
219
+ /**
220
+ * @deprecated Provenance moved into `ssim_thresholds.method` (its canonical
221
+ * home). Still admitted so the v3 manifests written before the move — which
222
+ * carry `method` at the top level — keep parsing and stay readable through
223
+ * {@link changeSignal}. Expand-contract: readers accept both locations now;
224
+ * this admission is removed once no top-level-method files remain. The engine
225
+ * writes only the nested location.
226
+ */
227
+ method: z.string().optional(),
134
228
  frame_gaps: z.array(FrameGapSchema),
135
229
  /** Present when a region/element rect had to be clamped into the viewport. */
136
230
  region_clamped: z.boolean().optional(),
@@ -147,6 +241,93 @@ export const RecordingManifestSchema = z.object({
147
241
  * whose message lists every failing path, so a malformed manifest reports all
148
242
  * of its problems at once instead of one per run.
149
243
  */
244
+ /**
245
+ * Uniform view of the change signal across manifest versions.
246
+ *
247
+ * A pre-v2 manifest has only `change_points`, computed with a whole-frame
248
+ * (global) SSIM detector — a DIFFERENT metric from the current window-min
249
+ * {@link SSIM_THRESHOLDS} scale, so the two are not numerically comparable. For
250
+ * such a file this returns the single list it has as both tiers rather than
251
+ * inventing a key/change split it never carried, and marks `legacy: true` so a
252
+ * reader knows the tiers are not really separated and the thresholds are not on
253
+ * the current scale. `saturated` is false because the old global detector could
254
+ * not saturate the way window-min can.
255
+ *
256
+ * This is NOT the exact identity an earlier version of this comment claimed:
257
+ * once the detector changed from global SSIM to window-min, an old file's
258
+ * change points stopped mapping onto today's `key_frames`. Reporting the one
259
+ * list for both tiers is the honest fallback, not a translation.
260
+ *
261
+ * Use this in readers instead of touching the optional fields directly, so a
262
+ * pre-v2 file does not read as "no key frames" when its change_points are the
263
+ * only signal it has.
264
+ */
265
+ export function changeSignal(manifest) {
266
+ const legacy = manifest.key_frames === undefined;
267
+ const st = manifest.ssim_thresholds;
268
+ return {
269
+ changePoints: manifest.change_points,
270
+ keyFrames: manifest.key_frames ?? manifest.change_points,
271
+ saturated: manifest.change_points_saturated ?? false,
272
+ // A legacy file's threshold is unknown and on a different scale; surface
273
+ // its own recorded value if it has one, else NaN rather than a current-scale
274
+ // number that would misrepresent how the list was computed. Strip any nested
275
+ // `method` back out so `thresholds` stays purely numeric.
276
+ thresholds: st ? { change: st.change, key: st.key } : { change: NaN, key: NaN },
277
+ // Read from either home: nested is canonical, top-level is the transitional
278
+ // v3 location still on disk today.
279
+ method: st?.method ?? manifest.method,
280
+ legacy,
281
+ manifestVersion: manifest.version,
282
+ };
283
+ }
284
+ /**
285
+ * Consistency problems in a manifest's change signal, as human-readable
286
+ * strings. Empty means consistent.
287
+ *
288
+ * These are invariants the two-tier design guarantees by construction, so a
289
+ * violation means the producer is miscomputing rather than that the file is
290
+ * merely old. Deliberately NOT enforced inside {@link parseManifest}: readers
291
+ * such as `capture status` open whatever manifest is most recent, and failing
292
+ * the read outright would turn a reporting bug into an unreadable capture. Call
293
+ * this where you want the check — tests, or a diagnostic path.
294
+ */
295
+ export function changeSignalIssues(manifest) {
296
+ const issues = [];
297
+ const frameCount = manifest.frames.length;
298
+ const inRange = (label, indices) => {
299
+ for (const i of indices) {
300
+ if (i >= frameCount)
301
+ issues.push(`${label} contains index ${i} but there are only ${frameCount} frames`);
302
+ }
303
+ };
304
+ inRange("change_points", manifest.change_points);
305
+ if (manifest.key_frames) {
306
+ inRange("key_frames", manifest.key_frames);
307
+ const changeSet = new Set(manifest.change_points);
308
+ const stray = manifest.key_frames.filter((i) => !changeSet.has(i));
309
+ if (stray.length > 0) {
310
+ issues.push(`key_frames must be a subset of change_points (the key threshold is lower, ` +
311
+ `so anything below it is below the change threshold too), but ` +
312
+ `${stray.length} index(es) are missing from change_points: ${stray.slice(0, 5).join(", ")}`);
313
+ }
314
+ }
315
+ if (manifest.ssim_thresholds) {
316
+ const { change, key } = manifest.ssim_thresholds;
317
+ if (key > change) {
318
+ issues.push(`ssim_thresholds.key (${key}) must not exceed ssim_thresholds.change (${change})`);
319
+ }
320
+ }
321
+ if (manifest.change_points_saturated !== undefined && frameCount > 0) {
322
+ const expected = manifest.change_points.length > frameCount * CHANGE_SATURATION_RATIO;
323
+ if (manifest.change_points_saturated !== expected) {
324
+ issues.push(`change_points_saturated is ${manifest.change_points_saturated} but ` +
325
+ `${manifest.change_points.length}/${frameCount} change points ` +
326
+ `(ratio ${(manifest.change_points.length / frameCount).toFixed(3)}) implies ${expected}`);
327
+ }
328
+ }
329
+ return issues;
330
+ }
150
331
  export function parseManifest(input) {
151
332
  let candidate = input;
152
333
  if (typeof candidate === "string") {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recording/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IACzC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACzD,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;KAClC,CAAC;CACH,CAAC,CAAC;AAEH,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,yDAAyD;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,2EAA2E;IAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAC9B,yDAAyD;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,8DAA8D;IAC9D,IAAI,EAAE,UAAU;IAChB,8EAA8E;IAC9E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,gEAAgE;IAChE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,8DAA8D;IAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,YAAY;IACpB,cAAc,EAAE,mBAAmB;IACnC,0CAA0C;IAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,mEAAmE;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACpC,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,2EAA2E;IAC3E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,+EAA+E;IAC/E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,6EAA6E;IAC7E,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE;IAC5B,6CAA6C;IAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACrC,WAAW,EAAE,UAAU;IACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC5B,mEAAmE;IACnE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IACnC,8EAA8E;IAC9E,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,kEAAkE;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;CAC5C,CAAC,CAAC;AAkBH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,+CAAgD,CAAW,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAEvC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;SAChC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,OAAO,OAAO,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recording/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cbrowser",
3
- "version": "18.71.0",
3
+ "version": "18.72.1",
4
4
  "type": "module",
5
5
  "description": "Cognitive browser automation that thinks like your users—and helps AI agents navigate too. Simulate real user cognition with abandonment detection, constitutional safety, chaos engineering, and UX friction discovery. Sites that pass CBrowser's cognitive tests are easier for both humans and AI agents to navigate.",
6
6
  "main": "dist/index.js",