cbrowser 18.71.0 → 18.72.0
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 +12 -2
- package/dist/cli.js.map +1 -1
- package/dist/recording/engine.d.ts.map +1 -1
- package/dist/recording/engine.js +40 -34
- package/dist/recording/engine.js.map +1 -1
- package/dist/recording/ssim.d.ts +43 -0
- package/dist/recording/ssim.d.ts.map +1 -1
- package/dist/recording/ssim.js +96 -0
- package/dist/recording/ssim.js.map +1 -1
- package/dist/recording/types.d.ts +105 -2
- package/dist/recording/types.d.ts.map +1 -1
- package/dist/recording/types.js +169 -3
- package/dist/recording/types.js.map +1 -1
- package/package.json +1 -1
package/dist/recording/types.js
CHANGED
|
@@ -15,8 +15,57 @@
|
|
|
15
15
|
* runtime contract and the compile-time contract cannot drift.
|
|
16
16
|
*/
|
|
17
17
|
import { z } from "zod";
|
|
18
|
-
/**
|
|
19
|
-
|
|
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,43 @@ export const RecordingManifestSchema = z.object({
|
|
|
129
178
|
duration_ms: z.number().nonnegative(),
|
|
130
179
|
output_dims: DimsSchema,
|
|
131
180
|
frames: z.array(FrameSchema),
|
|
132
|
-
/**
|
|
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
|
+
ssim_thresholds: z.object({ change: z.number(), key: z.number() }).optional(),
|
|
211
|
+
/**
|
|
212
|
+
* The comparator the scores and thresholds are on, e.g.
|
|
213
|
+
* "changeScore-window-min". Names the METRIC, which the threshold values
|
|
214
|
+
* alone cannot: 0.95 under window-min and 0.95 under global SSIM are entirely
|
|
215
|
+
* different tests. v3+.
|
|
216
|
+
*/
|
|
217
|
+
method: z.string().optional(),
|
|
134
218
|
frame_gaps: z.array(FrameGapSchema),
|
|
135
219
|
/** Present when a region/element rect had to be clamped into the viewport. */
|
|
136
220
|
region_clamped: z.boolean().optional(),
|
|
@@ -147,6 +231,88 @@ export const RecordingManifestSchema = z.object({
|
|
|
147
231
|
* whose message lists every failing path, so a malformed manifest reports all
|
|
148
232
|
* of its problems at once instead of one per run.
|
|
149
233
|
*/
|
|
234
|
+
/**
|
|
235
|
+
* Uniform view of the change signal across manifest versions.
|
|
236
|
+
*
|
|
237
|
+
* A pre-v2 manifest has only `change_points`, computed with a whole-frame
|
|
238
|
+
* (global) SSIM detector — a DIFFERENT metric from the current window-min
|
|
239
|
+
* {@link SSIM_THRESHOLDS} scale, so the two are not numerically comparable. For
|
|
240
|
+
* such a file this returns the single list it has as both tiers rather than
|
|
241
|
+
* inventing a key/change split it never carried, and marks `legacy: true` so a
|
|
242
|
+
* reader knows the tiers are not really separated and the thresholds are not on
|
|
243
|
+
* the current scale. `saturated` is false because the old global detector could
|
|
244
|
+
* not saturate the way window-min can.
|
|
245
|
+
*
|
|
246
|
+
* This is NOT the exact identity an earlier version of this comment claimed:
|
|
247
|
+
* once the detector changed from global SSIM to window-min, an old file's
|
|
248
|
+
* change points stopped mapping onto today's `key_frames`. Reporting the one
|
|
249
|
+
* list for both tiers is the honest fallback, not a translation.
|
|
250
|
+
*
|
|
251
|
+
* Use this in readers instead of touching the optional fields directly, so a
|
|
252
|
+
* pre-v2 file does not read as "no key frames" when its change_points are the
|
|
253
|
+
* only signal it has.
|
|
254
|
+
*/
|
|
255
|
+
export function changeSignal(manifest) {
|
|
256
|
+
const legacy = manifest.key_frames === undefined;
|
|
257
|
+
return {
|
|
258
|
+
changePoints: manifest.change_points,
|
|
259
|
+
keyFrames: manifest.key_frames ?? manifest.change_points,
|
|
260
|
+
saturated: manifest.change_points_saturated ?? false,
|
|
261
|
+
// A legacy file's threshold is unknown and on a different scale; surface
|
|
262
|
+
// its own recorded value if it has one, else NaN rather than a current-scale
|
|
263
|
+
// number that would misrepresent how the list was computed.
|
|
264
|
+
thresholds: manifest.ssim_thresholds ?? { change: NaN, key: NaN },
|
|
265
|
+
legacy,
|
|
266
|
+
manifestVersion: manifest.version,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Consistency problems in a manifest's change signal, as human-readable
|
|
271
|
+
* strings. Empty means consistent.
|
|
272
|
+
*
|
|
273
|
+
* These are invariants the two-tier design guarantees by construction, so a
|
|
274
|
+
* violation means the producer is miscomputing rather than that the file is
|
|
275
|
+
* merely old. Deliberately NOT enforced inside {@link parseManifest}: readers
|
|
276
|
+
* such as `capture status` open whatever manifest is most recent, and failing
|
|
277
|
+
* the read outright would turn a reporting bug into an unreadable capture. Call
|
|
278
|
+
* this where you want the check — tests, or a diagnostic path.
|
|
279
|
+
*/
|
|
280
|
+
export function changeSignalIssues(manifest) {
|
|
281
|
+
const issues = [];
|
|
282
|
+
const frameCount = manifest.frames.length;
|
|
283
|
+
const inRange = (label, indices) => {
|
|
284
|
+
for (const i of indices) {
|
|
285
|
+
if (i >= frameCount)
|
|
286
|
+
issues.push(`${label} contains index ${i} but there are only ${frameCount} frames`);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
inRange("change_points", manifest.change_points);
|
|
290
|
+
if (manifest.key_frames) {
|
|
291
|
+
inRange("key_frames", manifest.key_frames);
|
|
292
|
+
const changeSet = new Set(manifest.change_points);
|
|
293
|
+
const stray = manifest.key_frames.filter((i) => !changeSet.has(i));
|
|
294
|
+
if (stray.length > 0) {
|
|
295
|
+
issues.push(`key_frames must be a subset of change_points (the key threshold is lower, ` +
|
|
296
|
+
`so anything below it is below the change threshold too), but ` +
|
|
297
|
+
`${stray.length} index(es) are missing from change_points: ${stray.slice(0, 5).join(", ")}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (manifest.ssim_thresholds) {
|
|
301
|
+
const { change, key } = manifest.ssim_thresholds;
|
|
302
|
+
if (key > change) {
|
|
303
|
+
issues.push(`ssim_thresholds.key (${key}) must not exceed ssim_thresholds.change (${change})`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (manifest.change_points_saturated !== undefined && frameCount > 0) {
|
|
307
|
+
const expected = manifest.change_points.length > frameCount * CHANGE_SATURATION_RATIO;
|
|
308
|
+
if (manifest.change_points_saturated !== expected) {
|
|
309
|
+
issues.push(`change_points_saturated is ${manifest.change_points_saturated} but ` +
|
|
310
|
+
`${manifest.change_points.length}/${frameCount} change points ` +
|
|
311
|
+
`(ratio ${(manifest.change_points.length / frameCount).toFixed(3)}) implies ${expected}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return issues;
|
|
315
|
+
}
|
|
150
316
|
export function parseManifest(input) {
|
|
151
317
|
let candidate = input;
|
|
152
318
|
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
|
|
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.
|
|
3
|
+
"version": "18.72.0",
|
|
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",
|