@camstack/types 1.2.414 → 1.2.415
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/addon.js +4 -1798
- package/dist/addon.mjs +2 -1796
- package/dist/capabilities/camera-grid-layout.cap.d.ts +1 -1
- package/dist/capabilities/device-history.cap.d.ts +1 -1
- package/dist/capabilities/device-manager.cap.d.ts +2 -2
- package/dist/capabilities/notification-rules.cap.d.ts +2 -2
- package/dist/capabilities/osd-manager.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-analytics.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-runner.cap.d.ts +1 -1
- package/dist/capabilities/ptz.cap.d.ts +3 -3
- package/dist/capabilities/recording-export.cap.d.ts +1 -1
- package/dist/capabilities/scene-monitor.cap.d.ts +1 -1
- package/dist/capabilities/stream-signals.cap.d.ts +1 -1
- package/dist/capabilities/videoclips.cap.d.ts +2 -2
- package/dist/capabilities/viewer-ui.cap.d.ts +1 -1
- package/dist/catalogs/index.d.ts +1 -1
- package/dist/catalogs/{frigate-plus-classmap.d.ts → plus-catalog-classmap.d.ts} +25 -25
- package/dist/catalogs/root-model-supply.d.ts +3 -3
- package/dist/client.js +22 -22
- package/dist/client.mjs +22 -22
- package/dist/composition/cards/__fixtures__/stored-compositions.d.ts +2 -2
- package/dist/composition/customize/__fixtures__/refs.d.ts +1 -1
- package/dist/{composition-CSLSFGTO.js → composition-DsmkwP9-.js} +1 -1
- package/dist/{composition-BJ8iAZb3.mjs → composition-kEl9mevu.mjs} +1 -1
- package/dist/device/base-device-provider.d.ts +1 -1
- package/dist/device/device-state-handle.d.ts +1 -1
- package/dist/device/location-icon.d.ts +1 -1
- package/dist/device/site-zone.d.ts +2 -2
- package/dist/enums/event-category.d.ts +1 -1
- package/dist/enums.js +1 -1
- package/dist/enums.mjs +1 -1
- package/dist/{event-category-Ceif8n-v.mjs → event-category-DHXxB8t9.mjs} +1 -1
- package/dist/{event-category-DG6Vir8Z.js → event-category-DXZ3f9Q5.js} +1 -1
- package/dist/ffmpeg/fmp4-fragment-plane.d.ts +1 -1
- package/dist/ffmpeg/gif-derive.d.ts +1 -1
- package/dist/ffmpeg/process.d.ts +1 -1
- package/dist/generated/addon-cap-facts.d.ts +2 -0
- package/dist/geometry/subject-path.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1516 -1516
- package/dist/index.mjs +1510 -1510
- package/dist/interfaces/addon-peer-bytes.d.ts +1 -1
- package/dist/interfaces/agent.d.ts +1 -1
- package/dist/interfaces/birth-decision-ledger.d.ts +1 -1
- package/dist/interfaces/debug-note-archive.d.ts +1 -1
- package/dist/interfaces/inference-engine.d.ts +1 -1
- package/dist/interfaces/logging.d.ts +1 -1
- package/dist/metrics/failure-counters.d.ts +2 -2
- package/dist/node.js +2 -2
- package/dist/node.mjs +2 -2
- package/dist/notification/timelapse-rule.d.ts +1 -1
- package/dist/pipeline/root-face-crop.d.ts +1 -1
- package/dist/pipeline/second-pass/motion-crop-plan.d.ts +1 -1
- package/dist/pipeline/second-pass/small-subject-recovery.d.ts +4 -4
- package/dist/process/child-cost-registry.d.ts +1 -1
- package/dist/{sleep-CYfIZzGv.mjs → sleep-BErAxhul.mjs} +1982 -4
- package/dist/{sleep-UP964hNP.js → sleep-BPQ2ZyaI.js} +1999 -3
- package/dist/types/detection.d.ts +2 -2
- package/dist/types/models.d.ts +3 -3
- package/dist/types/overlay-layer.d.ts +1 -1
- package/dist/utils/addon-id.d.ts +1 -1
- package/package.json +1 -1
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* is preserved by leaving it alone rather than by widening it.
|
|
47
47
|
*
|
|
48
48
|
* **Same host only, refused by name across a node boundary.** The listener
|
|
49
|
-
* binds loopback, so a ticket minted on `
|
|
49
|
+
* binds loopback, so a ticket minted on `agent-a` names a URL that means
|
|
50
50
|
* something else entirely on the hub. Every ticket therefore carries the
|
|
51
51
|
* {@link PeerBytesTicket.hostNodeId} it was minted on, and
|
|
52
52
|
* {@link AddonPeerBytes.open} refuses `cross-node` when that is not this
|
|
@@ -114,7 +114,7 @@ export interface HubHealthAgentCounts {
|
|
|
114
114
|
/**
|
|
115
115
|
* Node ids of the offline agents. Optional (added later) — consumers
|
|
116
116
|
* must tolerate absence on older hubs. Lets health surfaces name the
|
|
117
|
-
* degraded node ("node
|
|
117
|
+
* degraded node ("node agent-a not responding") instead of
|
|
118
118
|
* only counting it.
|
|
119
119
|
*/
|
|
120
120
|
readonly offlineIds?: readonly string[];
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* ── Why a TABLE and not a log line ─────────────────────────────────────────
|
|
27
27
|
* `logs.query` is an in-memory ring. Measured on the live hub on 2026-09-08 it
|
|
28
28
|
* held 40 000 entries covering 38 minutes — the whole ring is under an hour of
|
|
29
|
-
* fleet traffic. Every question this data is for ("how often, on camera
|
|
29
|
+
* fleet traffic. Every question this data is for ("how often, on camera 102,
|
|
30
30
|
* over the week the operator complained about") outlives that ring by two
|
|
31
31
|
* orders of magnitude, and a previous investigation in this repo was blocked
|
|
32
32
|
* for precisely this reason. The gate ALREADY writes a log line per decision
|
|
@@ -35,7 +35,7 @@ import { z } from 'zod';
|
|
|
35
35
|
* - A per-device bound multiplies by the fleet — 30 cameras at 500 each is
|
|
36
36
|
* 15 000 rows to protect a corpus that only ever gets read fleet-wide (the
|
|
37
37
|
* thing being mined is "what keeps going wrong", not "what goes wrong on
|
|
38
|
-
*
|
|
38
|
+
* 102"). One global ceiling is one number to reason about.
|
|
39
39
|
* - An AGE bound would delete the corpus for being old, which is the failure
|
|
40
40
|
* being fixed: a note from six months ago is the most valuable row in the
|
|
41
41
|
* table precisely because the pattern it describes has had time to repeat.
|
|
@@ -28,7 +28,7 @@ interface InferenceInputCommon {
|
|
|
28
28
|
* A `SharedInferencePool` serves every camera on its
|
|
29
29
|
* `(node, runtime, device)`, so its `inference request timed out` and
|
|
30
30
|
* `worker saturated` lines could describe the pool and nothing else — and
|
|
31
|
-
* "why is
|
|
31
|
+
* "why is 102 worse than 101?" is the question those lines always get asked.
|
|
32
32
|
*
|
|
33
33
|
* Omitted by callers with no camera (commands, model loads, the benchmark);
|
|
34
34
|
* the failure line then carries no `deviceId` tag rather than a fabricated
|
|
@@ -39,7 +39,7 @@ export interface LogTags {
|
|
|
39
39
|
* device-manager.
|
|
40
40
|
*/
|
|
41
41
|
readonly deviceId?: number;
|
|
42
|
-
/** Human-readable device name (e.g., '
|
|
42
|
+
/** Human-readable device name (e.g., 'Hall') */
|
|
43
43
|
readonly deviceName?: string;
|
|
44
44
|
/** Integration ID (e.g., 'int_0001') */
|
|
45
45
|
readonly integrationId?: string;
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
*
|
|
23
23
|
* The key is the numeric `deviceId` — the same value every log line in this
|
|
24
24
|
* repo carries as `tags.deviceId`. There is no fleet-total mode and no
|
|
25
|
-
* device-less bucket, because the question is always "why is
|
|
26
|
-
*
|
|
25
|
+
* device-less bucket, because the question is always "why is 102 worse than
|
|
26
|
+
* 101?" and a fleet total cannot answer it. A caller that cannot name the
|
|
27
27
|
* camera must not note anything: an unnamed per-camera count is
|
|
28
28
|
* indistinguishable from a shared one, which is how one camera's failures
|
|
29
29
|
* quietly become everybody's.
|
package/dist/node.js
CHANGED
|
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
-
const require_composition = require("./composition-
|
|
24
|
+
const require_composition = require("./composition-DsmkwP9-.js");
|
|
25
25
|
const require_err_msg = require("./err-msg-BhVbr0NX.js");
|
|
26
26
|
let node_crypto = require("node:crypto");
|
|
27
27
|
let node_fs = require("node:fs");
|
|
@@ -2049,7 +2049,7 @@ function pinnedFfmpegSpawner(seam, ffmpegBinaryPath, options) {
|
|
|
2049
2049
|
* ## Where a claim is made, and where it is released
|
|
2050
2050
|
*
|
|
2051
2051
|
* At the spawn site, and nowhere else. It is the only place that knows both
|
|
2052
|
-
* halves: the recorder's controller knows it is starting ffmpeg for camera
|
|
2052
|
+
* halves: the recorder's controller knows it is starting ffmpeg for camera 101
|
|
2053
2053
|
* profile `high`; the decode coordinator knows the session it is forking a
|
|
2054
2054
|
* worker for. Nothing has to deduce it afterwards, and no entity needs a
|
|
2055
2055
|
* global list of which pid belongs to which camera.
|
package/dist/node.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { At as Fmp4BoxSplitter, Ct as FFMPEG_PATH_ENV, Dt as getFfmpegArtifact, Et as FFMPEG_RELEASE, Ot as getFfmpegDownloadUrl, P as compositionSourceKey, Pt as buildFfmpegArgs, Rt as isSoftwareDecode, Tt as ffmpegBinaryName, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as canonicalHash, wt as chooseFfmpegBinary } from "./composition-
|
|
1
|
+
import { At as Fmp4BoxSplitter, Ct as FFMPEG_PATH_ENV, Dt as getFfmpegArtifact, Et as FFMPEG_RELEASE, Ot as getFfmpegDownloadUrl, P as compositionSourceKey, Pt as buildFfmpegArgs, Rt as isSoftwareDecode, Tt as ffmpegBinaryName, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as canonicalHash, wt as chooseFfmpegBinary } from "./composition-kEl9mevu.mjs";
|
|
2
2
|
import { t as errMsg } from "./err-msg-BXKzRBwg.mjs";
|
|
3
3
|
import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
|
|
4
4
|
import * as fs from "node:fs";
|
|
@@ -2026,7 +2026,7 @@ function pinnedFfmpegSpawner(seam, ffmpegBinaryPath, options) {
|
|
|
2026
2026
|
* ## Where a claim is made, and where it is released
|
|
2027
2027
|
*
|
|
2028
2028
|
* At the spawn site, and nowhere else. It is the only place that knows both
|
|
2029
|
-
* halves: the recorder's controller knows it is starting ffmpeg for camera
|
|
2029
|
+
* halves: the recorder's controller knows it is starting ffmpeg for camera 101
|
|
2030
2030
|
* profile `high`; the decode coordinator knows the session it is forking a
|
|
2031
2031
|
* worker for. Nothing has to deduce it afterwards, and no entity needs a
|
|
2032
2032
|
* global list of which pid belongs to which camera.
|
|
@@ -100,7 +100,7 @@ export type TimelapseRuleInput = z.infer<typeof TimelapseRuleInputSchema>;
|
|
|
100
100
|
* The caption a rule that never set one gets.
|
|
101
101
|
*
|
|
102
102
|
* Rendered through the ordinary `{{var}}` pass at delivery, so a rule created
|
|
103
|
-
* before this field existed still reads "Timelapse
|
|
103
|
+
* before this field existed still reads "Timelapse Camera front door" and
|
|
104
104
|
* not the literal braces.
|
|
105
105
|
*/
|
|
106
106
|
export declare const DEFAULT_TIMELAPSE_PREVIEW_TEXT = "Timelapse {{camera}}";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The ONE face-scoped crop of a root-supplied face (D731): the rectangle a
|
|
3
3
|
* root model's `face` box is refined in before it can be recognised.
|
|
4
4
|
*
|
|
5
|
-
* A root face box (a
|
|
5
|
+
* A root face box (a plus catalog `face`) carries no landmarks, and an unaligned
|
|
6
6
|
* crop must never reach the face embedder (D52: one vector index, one crop
|
|
7
7
|
* derivation — and the face gallery's derivation is the landmark alignment).
|
|
8
8
|
* So the box is only a LOCATION: a square around it is cut from the frame's
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* mostly NOT accounted for by a full-frame box. That rule was built to find a
|
|
9
9
|
* subject standing NEXT TO one the detector already sees, and it works.
|
|
10
10
|
*
|
|
11
|
-
* The measurement says the cheaper question is the better one. On camera
|
|
11
|
+
* The measurement says the cheaper question is the better one. On camera 101,
|
|
12
12
|
* against the production detector (`yolov9m-320-int8`, python+openvino) on the
|
|
13
13
|
* node that runs that camera, over 38 visually confirmed positive frames from
|
|
14
14
|
* six real animal pass-bys: full-frame recall at our animal floor **24%**,
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
* The first-level detector sees the frame at its input size (320 px on every
|
|
8
8
|
* hardware-aware default). A 4K frame is reduced 12×: a dog measured at
|
|
9
|
-
* 89–277 px in the source is 7–38 px for the model and is not emitted. Camera
|
|
9
|
+
* 89–277 px in the source is 7–38 px for the model and is not emitted. Camera 101, six
|
|
10
10
|
* instants with a dog in the scene, five with no `animal` detection at all —
|
|
11
11
|
* nothing downstream (tracker, gate, notifications) ever saw a subject. The
|
|
12
12
|
* confirmation gate, which re-runs the same detector on a 320 px native crop
|
|
13
13
|
* of the PERSON, found the dog at 0.74–0.91 as `bestIncompatibleClass`. The
|
|
14
14
|
* measurement that decided the constants below is
|
|
15
|
-
* `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-
|
|
15
|
+
* `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-101`: a
|
|
16
16
|
* 640–800 px native square around the moving region brings the dog to
|
|
17
17
|
* 0.82–0.91 with the SAME 320 model; a 1280 px square loses it again.
|
|
18
18
|
*
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* ## When it runs — NOT only when the frame is empty
|
|
29
29
|
*
|
|
30
30
|
* The trigger is an UNCOVERED MOTION REGION, deliberately broader than "the
|
|
31
|
-
* full-frame pass found nothing". Camera
|
|
31
|
+
* full-frame pass found nothing". Camera 101, 2026-09-06 19:54:33 local: the
|
|
32
32
|
* gate DID confirm an `animal` birth (bestScore 0.8983) — and the track held
|
|
33
33
|
* 9 positions over 1 666 ms, then coasted out its `maxMissedMs` (4 000 ms) and
|
|
34
34
|
* died at 19:54:39, before the dog reached the Aiuola zone. Both of its object
|
|
@@ -183,7 +183,7 @@ export interface RecoverySkipCounts {
|
|
|
183
183
|
* The pass report counts the passes that RAN, so "the second pass stops running
|
|
184
184
|
* when a person is beside the dog" — a plausible reading of
|
|
185
185
|
* {@link RECOVERY_MAX_REGION_FRAME_FRACTION} and
|
|
186
|
-
* {@link RECOVERY_MIN_UNCOVERED_FRACTION}, and a live hypothesis on camera
|
|
186
|
+
* {@link RECOVERY_MIN_UNCOVERED_FRACTION}, and a live hypothesis on camera 101
|
|
187
187
|
* — could not be confirmed or killed from the logs at all. This classifies the
|
|
188
188
|
* regions a frame offered, against the same predicate the planner filters on.
|
|
189
189
|
*/
|
|
@@ -9,7 +9,7 @@ export interface ChildCostClaimInput {
|
|
|
9
9
|
* and would turn one camera's cost into everybody's.
|
|
10
10
|
*/
|
|
11
11
|
readonly deviceId: number | null;
|
|
12
|
-
/** What this one child is, in the contributor's own words: `
|
|
12
|
+
/** What this one child is, in the contributor's own words: `101/high`. */
|
|
13
13
|
readonly unit: string;
|
|
14
14
|
/**
|
|
15
15
|
* Defaults to `measured` — the ordinary case for a child that serves exactly
|