@camstack/addon-post-analysis 1.2.91 → 1.2.92

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.
@@ -21487,20 +21487,6 @@ var VectorStatsResultSchema = object({
21487
21487
  exact: boolean()
21488
21488
  });
21489
21489
  method(VectorDeclareIndexInputSchema, _void(), { kind: "mutation" }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, { kind: "mutation" }), method(VectorQueryInputSchema, VectorQueryResultSchema), method(VectorGetInputSchema, VectorGetResultSchema), method(VectorDeleteInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorStatsInputSchema, VectorStatsResultSchema);
21490
- /**
21491
- * `videoclips` — the unified, navigable-clip surface for a camera.
21492
- *
21493
- * A device-scoped WRAPPER cap (like `pipeline-analytics`): exactly one active
21494
- * provider per device, substitutable. The DEFAULT provider (registered by
21495
- * `addon-post-analysis`, `defaultActive: true`) composes the analytics event
21496
- * log (markers + thumbnails) with the recorder's `getPlaybackManifest` — a clip
21497
- * is a time-WINDOW over existing footage, never a separate file. A camera that
21498
- * exposes NATIVE onboard clips (Reolink/Hikvision NVR) can later substitute the
21499
- * wrapper provider for its device and serve its own clip catalog + URLs.
21500
- *
21501
- * A `Clip` is purely time-based (subtree-blind): playback resolves segments by
21502
- * temporal overlap, so the API never decides `continuous` vs `events`.
21503
- */
21504
21490
  var ClipSchema = object({
21505
21491
  /** Opaque, provider-namespaced id. The default provider encodes the time
21506
21492
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -21526,12 +21512,41 @@ var ClipSchema = object({
21526
21512
  * of the event that owns `kind` (object > motion > audio). Do not extract
21527
21513
  * a keyframe from the recorded segments. Other providers (onboard, HKSV)
21528
21514
  * mint their own stills.
21515
+ *
21516
+ * **VOUCHED, never fabricated.** A provider emits this only for an event it
21517
+ * has CONFIRMED owns at least one media row (its own, or its owning track's).
21518
+ * Absent is meaningful — "this visit has no event still" — never "we did not
21519
+ * look". Stamping it from a URL template made 35% of one camera's clips point
21520
+ * at a 404 (device 3836, 2026-08-17: 64 of 179 clips dead, 63 of them motion).
21521
+ * A read that FAILS drops the claim; it never invents it.
21529
21522
  */
21530
21523
  thumbnail: string().optional(),
21531
- /** Analytics event ids that overlap this visit. Empty on footage-only clips.
21532
- * The default provider's visit grain puts many motion heartbeats on one clip
21533
- * instead of minting one clip per marker. */
21524
+ /**
21525
+ * An instant INSIDE this visit's footage, hole-safe, where a recorded still
21526
+ * can be decoded. Present whenever the visit came from recorded availability;
21527
+ * absent on a per-event padded window (there is no footage to promise).
21528
+ *
21529
+ * This is not a thumbnail and not a second byte path: it is the argument to
21530
+ * the recorder's existing still route. The surface — never the provider —
21531
+ * decides whether to use it. It is the midpoint of the visit's LONGEST
21532
+ * contiguous range, not of the visit: a visit spans its holes by
21533
+ * construction, so a naive midpoint lands in dead air.
21534
+ */
21535
+ stillAtMs: number().optional(),
21536
+ /**
21537
+ * Analytics event ids that overlap this visit — a BOUNDED sample, newest
21538
+ * first within kind (object → motion → audio), capped at
21539
+ * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
21540
+ *
21541
+ * Bounded because it is not a payload the surface pages through: one visit on
21542
+ * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
21543
+ * camera-day. Read {@link eventCount} for the true total.
21544
+ */
21534
21545
  eventIds: array(string()).optional(),
21546
+ /** How many analytics events actually overlap this visit. Differs from
21547
+ * `eventIds.length` exactly when the sample was capped — so a truncated
21548
+ * list is never mistaken for a quiet visit. */
21549
+ eventCount: number().int().nonnegative().optional(),
21535
21550
  /** Intra-visit footage holes (GOP rolls, discarded segments) still shorter
21536
21551
  * than `VISIT_MERGE_GAP_MS`. Playback concatenates around them; the timeline
21537
21552
  * bar keeps showing them via `recording.getAvailability`. */
@@ -21456,20 +21456,6 @@ var VectorStatsResultSchema = object({
21456
21456
  exact: boolean()
21457
21457
  });
21458
21458
  method(VectorDeclareIndexInputSchema, _void(), { kind: "mutation" }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, { kind: "mutation" }), method(VectorQueryInputSchema, VectorQueryResultSchema), method(VectorGetInputSchema, VectorGetResultSchema), method(VectorDeleteInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorStatsInputSchema, VectorStatsResultSchema);
21459
- /**
21460
- * `videoclips` — the unified, navigable-clip surface for a camera.
21461
- *
21462
- * A device-scoped WRAPPER cap (like `pipeline-analytics`): exactly one active
21463
- * provider per device, substitutable. The DEFAULT provider (registered by
21464
- * `addon-post-analysis`, `defaultActive: true`) composes the analytics event
21465
- * log (markers + thumbnails) with the recorder's `getPlaybackManifest` — a clip
21466
- * is a time-WINDOW over existing footage, never a separate file. A camera that
21467
- * exposes NATIVE onboard clips (Reolink/Hikvision NVR) can later substitute the
21468
- * wrapper provider for its device and serve its own clip catalog + URLs.
21469
- *
21470
- * A `Clip` is purely time-based (subtree-blind): playback resolves segments by
21471
- * temporal overlap, so the API never decides `continuous` vs `events`.
21472
- */
21473
21459
  var ClipSchema = object({
21474
21460
  /** Opaque, provider-namespaced id. The default provider encodes the time
21475
21461
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -21495,12 +21481,41 @@ var ClipSchema = object({
21495
21481
  * of the event that owns `kind` (object > motion > audio). Do not extract
21496
21482
  * a keyframe from the recorded segments. Other providers (onboard, HKSV)
21497
21483
  * mint their own stills.
21484
+ *
21485
+ * **VOUCHED, never fabricated.** A provider emits this only for an event it
21486
+ * has CONFIRMED owns at least one media row (its own, or its owning track's).
21487
+ * Absent is meaningful — "this visit has no event still" — never "we did not
21488
+ * look". Stamping it from a URL template made 35% of one camera's clips point
21489
+ * at a 404 (device 3836, 2026-08-17: 64 of 179 clips dead, 63 of them motion).
21490
+ * A read that FAILS drops the claim; it never invents it.
21498
21491
  */
21499
21492
  thumbnail: string().optional(),
21500
- /** Analytics event ids that overlap this visit. Empty on footage-only clips.
21501
- * The default provider's visit grain puts many motion heartbeats on one clip
21502
- * instead of minting one clip per marker. */
21493
+ /**
21494
+ * An instant INSIDE this visit's footage, hole-safe, where a recorded still
21495
+ * can be decoded. Present whenever the visit came from recorded availability;
21496
+ * absent on a per-event padded window (there is no footage to promise).
21497
+ *
21498
+ * This is not a thumbnail and not a second byte path: it is the argument to
21499
+ * the recorder's existing still route. The surface — never the provider —
21500
+ * decides whether to use it. It is the midpoint of the visit's LONGEST
21501
+ * contiguous range, not of the visit: a visit spans its holes by
21502
+ * construction, so a naive midpoint lands in dead air.
21503
+ */
21504
+ stillAtMs: number().optional(),
21505
+ /**
21506
+ * Analytics event ids that overlap this visit — a BOUNDED sample, newest
21507
+ * first within kind (object → motion → audio), capped at
21508
+ * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
21509
+ *
21510
+ * Bounded because it is not a payload the surface pages through: one visit on
21511
+ * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
21512
+ * camera-day. Read {@link eventCount} for the true total.
21513
+ */
21503
21514
  eventIds: array(string()).optional(),
21515
+ /** How many analytics events actually overlap this visit. Differs from
21516
+ * `eventIds.length` exactly when the sample was capped — so a truncated
21517
+ * list is never mistaken for a quiet visit. */
21518
+ eventCount: number().int().nonnegative().optional(),
21504
21519
  /** Intra-visit footage holes (GOP rolls, discarded segments) still shorter
21505
21520
  * than `VISIT_MERGE_GAP_MS`. Playback concatenates around them; the timeline
21506
21521
  * bar keeps showing them via `recording.getAvailability`. */
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CTIUuGRB.js");
5
+ const require_dist = require("../dist-BfrtqGyh.js");
6
6
  let node_fs = require("node:fs");
7
7
  let node_fs$1 = require_dist.__toESM(node_fs, 1);
8
8
  node_fs = require_dist.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { Z as embeddingEncoderCapability, et as hfModelUrl, gt as BaseAddon } from "../dist-CquggoRC.mjs";
1
+ import { Z as embeddingEncoderCapability, et as hfModelUrl, gt as BaseAddon } from "../dist-VnaTfwAL.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import "node:fs";
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.85",
21
+ version: "1.2.86",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.85",
39
+ version: "1.2.86",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,