@camstack/addon-post-analysis 1.2.73 → 1.2.74
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/{dist-_D0jdUh4.mjs → dist-CvWsGsxP.mjs} +105 -3
- package/dist/{dist-DDv-TKUR.js → dist-Cy8lyywE.js} +105 -3
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Cbess8m-.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-1--pFIrH.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-D4P0Tmio.mjs → hostInit-DxmzfwkG.mjs} +1 -1
- package/dist/pipeline-analytics/index.js +1501 -145
- package/dist/pipeline-analytics/index.mjs +1493 -137
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../types/dist/event-category-
|
|
1
|
+
//#region ../types/dist/event-category-Bxo5yJjt.mjs
|
|
2
2
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
3
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4
4
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -205,6 +205,33 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
205
205
|
EventCategory["PipelineCameraAssigned"] = "pipeline.camera-assigned";
|
|
206
206
|
EventCategory["PipelineCameraUnassigned"] = "pipeline.camera-unassigned";
|
|
207
207
|
/**
|
|
208
|
+
* A node the orchestrator would otherwise place cameras on has NO usable
|
|
209
|
+
* inference device: the operator enabled one or more accelerators there and
|
|
210
|
+
* the live probe reports every one of them unavailable. Emitted once per
|
|
211
|
+
* TRANSITION into that state (never per dispatch), and the node is dropped
|
|
212
|
+
* from the placement candidate set for as long as it holds.
|
|
213
|
+
*
|
|
214
|
+
* This exists because the state was previously invisible: little-unraid
|
|
215
|
+
* absorbed 283k inference errors in a day while still being handed cameras,
|
|
216
|
+
* and nothing in the system said so.
|
|
217
|
+
*
|
|
218
|
+
* A node with no accelerators configured at all is NOT this — its devices
|
|
219
|
+
* are `disabled`, not `unavailable`, and the runner's default CPU pool
|
|
220
|
+
* serves it exactly as before.
|
|
221
|
+
*/
|
|
222
|
+
EventCategory["PipelineNodeInferenceUnavailable"] = "pipeline.node-inference-unavailable";
|
|
223
|
+
/**
|
|
224
|
+
* A camera has an OPEN detection session and has produced no detection at
|
|
225
|
+
* all for longer than the blind threshold — the camera is being decoded and
|
|
226
|
+
* inferred and is returning nothing. Emitted once per transition into blind,
|
|
227
|
+
* per camera.
|
|
228
|
+
*
|
|
229
|
+
* The failure it reports: a 1h43 detection blackout on the entrance camera
|
|
230
|
+
* that nobody noticed, because "a camera that detects nothing" and "a quiet
|
|
231
|
+
* camera" produce byte-identical silence.
|
|
232
|
+
*/
|
|
233
|
+
EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
|
|
234
|
+
/**
|
|
208
235
|
* Per-camera pipeline config was mutated by the orchestrator
|
|
209
236
|
* (3-level settings change via `setAgentAddonDefaults` /
|
|
210
237
|
* `setCameraStepToggle` / `setCameraPipelineForAgent` or a
|
|
@@ -14549,6 +14576,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14549
14576
|
"stream-offline",
|
|
14550
14577
|
"node-online",
|
|
14551
14578
|
"node-offline",
|
|
14579
|
+
"node-inference-unavailable",
|
|
14580
|
+
"detection-blind",
|
|
14552
14581
|
"addon-update-available",
|
|
14553
14582
|
"server-update-available",
|
|
14554
14583
|
"alarm-triggered",
|
|
@@ -15356,7 +15385,50 @@ var NcRuleInputSchema = object({
|
|
|
15356
15385
|
* tests every zone the track visited and a `crossing` condition can no longer
|
|
15357
15386
|
* be satisfied, because a closed track carries no crossing.
|
|
15358
15387
|
*/
|
|
15359
|
-
waitForEnhancement: boolean().optional()
|
|
15388
|
+
waitForEnhancement: boolean().optional(),
|
|
15389
|
+
/**
|
|
15390
|
+
* GROUP a burst of subjects into ONE notification that grows.
|
|
15391
|
+
*
|
|
15392
|
+
* Seconds of quiet after the last matching subject before the burst is
|
|
15393
|
+
* considered over. While it is open, the first subject enqueues immediately —
|
|
15394
|
+
* **exactly as today, with no added latency** — and every real growth (a new
|
|
15395
|
+
* subject, or a name confirmed on one already in it) REPLACES that
|
|
15396
|
+
* notification with an updated one naming everybody. The push carries the
|
|
15397
|
+
* group's own coalescing tag, so the phone replaces rather than stacks.
|
|
15398
|
+
*
|
|
15399
|
+
* `0` / absent = off, and off is today's behaviour byte for byte.
|
|
15400
|
+
*
|
|
15401
|
+
* ### Why an idle cutoff and not a window
|
|
15402
|
+
*
|
|
15403
|
+
* The measured seven-person arrival on device 590 spans 110 s with every
|
|
15404
|
+
* internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
|
|
15405
|
+
* idle cutoff holds it as one and ends it when the arrival actually ends.
|
|
15406
|
+
* 30 is Frigate's shipped value for the same decision.
|
|
15407
|
+
*
|
|
15408
|
+
* ### What it replaces
|
|
15409
|
+
*
|
|
15410
|
+
* The blind cooldown, which collapses a burst by DISCARDING it. Measured on
|
|
15411
|
+
* device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
|
|
15412
|
+
* notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
|
|
15413
|
+
* track that did fire and 7 carrying a confirmed identity nobody heard about.
|
|
15414
|
+
* A group collapses the same volume by MERGING, so the cooldown becomes a
|
|
15415
|
+
* budget over GROUPS — which is what it always meant — and a growth is never
|
|
15416
|
+
* throttled by the window its own first member spent.
|
|
15417
|
+
*
|
|
15418
|
+
* ### Interaction with {@link waitForEnhancement}
|
|
15419
|
+
*
|
|
15420
|
+
* They compose, and the order matters. `waitForEnhancement` defers the rule to
|
|
15421
|
+
* TRACK CLOSE, so with both set the group is opened by the first member to
|
|
15422
|
+
* CLOSE — already carrying its name — and grows as later members close. That
|
|
15423
|
+
* is later, and complete. With grouping alone the group opens on the first
|
|
15424
|
+
* object event and picks up names as they are confirmed, through the growth
|
|
15425
|
+
* path. Neither combination fires twice for one subject.
|
|
15426
|
+
*
|
|
15427
|
+
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
15428
|
+
* on the addon cap path, so absent must keep meaning what it meant before this
|
|
15429
|
+
* field existed.
|
|
15430
|
+
*/
|
|
15431
|
+
groupIdleSec: number().int().min(0).max(600).optional()
|
|
15360
15432
|
});
|
|
15361
15433
|
/**
|
|
15362
15434
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -15543,6 +15615,14 @@ var NC_CONDITION_CATALOG = [
|
|
|
15543
15615
|
value: "node-offline",
|
|
15544
15616
|
label: "Node offline"
|
|
15545
15617
|
},
|
|
15618
|
+
{
|
|
15619
|
+
value: "node-inference-unavailable",
|
|
15620
|
+
label: "Node has no usable inference device"
|
|
15621
|
+
},
|
|
15622
|
+
{
|
|
15623
|
+
value: "detection-blind",
|
|
15624
|
+
label: "Camera detecting nothing"
|
|
15625
|
+
},
|
|
15546
15626
|
{
|
|
15547
15627
|
value: "addon-update-available",
|
|
15548
15628
|
label: "Addon update available"
|
|
@@ -16789,7 +16869,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16789
16869
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16790
16870
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16791
16871
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16792
|
-
* zonesVisited, bestEventId, envelope, hasFace) and returns `positions` /
|
|
16872
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16793
16873
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16794
16874
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16795
16875
|
* (`getObjectEvents` et al.).
|
|
@@ -17076,6 +17156,28 @@ var TrackSchema = object({
|
|
|
17076
17156
|
* `=== true` and render nothing otherwise, never infer "no face".
|
|
17077
17157
|
*/
|
|
17078
17158
|
hasFace: boolean().optional(),
|
|
17159
|
+
/**
|
|
17160
|
+
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
17161
|
+
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
17162
|
+
* so the passage is tracked once and as a VEHICLE.
|
|
17163
|
+
*
|
|
17164
|
+
* It exists because the fold's record was dishonest. D34 and the code both
|
|
17165
|
+
* said "the person is not lost — it is reported so both entities stay on the
|
|
17166
|
+
* record"; in fact the pair went into a per-processor RAM field behind an
|
|
17167
|
+
* accessor nobody called, and every durable surface said `vehicle`, full
|
|
17168
|
+
* stop. This is the composition note that makes the row true.
|
|
17169
|
+
*
|
|
17170
|
+
* A COMPOSITION, never a class and never a label. "This vehicle contains a
|
|
17171
|
+
* person" is not an answer to "what is this" — both label tiers would refuse
|
|
17172
|
+
* a macro token anyway (D89), and correctly. Nothing here changes what the
|
|
17173
|
+
* subject IS: a cyclist stays one vehicle track, occupancy still counts one,
|
|
17174
|
+
* and a `person` rule still does not fire for someone cycling past.
|
|
17175
|
+
*
|
|
17176
|
+
* **Absent ≠ false**, exactly like {@link hasFace}: every row written before
|
|
17177
|
+
* the column, and every hub that predates the field, omits it. Test
|
|
17178
|
+
* `=== true` and render nothing otherwise — never infer "no rider".
|
|
17179
|
+
*/
|
|
17180
|
+
hasRider: boolean().optional(),
|
|
17079
17181
|
...TrackFlagFields,
|
|
17080
17182
|
...TrackRetrainFields
|
|
17081
17183
|
});
|
|
@@ -29,7 +29,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
29
|
enumerable: true
|
|
30
30
|
}) : target, mod));
|
|
31
31
|
//#endregion
|
|
32
|
-
//#region ../types/dist/event-category-
|
|
32
|
+
//#region ../types/dist/event-category-Bxo5yJjt.mjs
|
|
33
33
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
34
34
|
EventCategory["SystemBoot"] = "system.boot";
|
|
35
35
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -236,6 +236,33 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
236
236
|
EventCategory["PipelineCameraAssigned"] = "pipeline.camera-assigned";
|
|
237
237
|
EventCategory["PipelineCameraUnassigned"] = "pipeline.camera-unassigned";
|
|
238
238
|
/**
|
|
239
|
+
* A node the orchestrator would otherwise place cameras on has NO usable
|
|
240
|
+
* inference device: the operator enabled one or more accelerators there and
|
|
241
|
+
* the live probe reports every one of them unavailable. Emitted once per
|
|
242
|
+
* TRANSITION into that state (never per dispatch), and the node is dropped
|
|
243
|
+
* from the placement candidate set for as long as it holds.
|
|
244
|
+
*
|
|
245
|
+
* This exists because the state was previously invisible: little-unraid
|
|
246
|
+
* absorbed 283k inference errors in a day while still being handed cameras,
|
|
247
|
+
* and nothing in the system said so.
|
|
248
|
+
*
|
|
249
|
+
* A node with no accelerators configured at all is NOT this — its devices
|
|
250
|
+
* are `disabled`, not `unavailable`, and the runner's default CPU pool
|
|
251
|
+
* serves it exactly as before.
|
|
252
|
+
*/
|
|
253
|
+
EventCategory["PipelineNodeInferenceUnavailable"] = "pipeline.node-inference-unavailable";
|
|
254
|
+
/**
|
|
255
|
+
* A camera has an OPEN detection session and has produced no detection at
|
|
256
|
+
* all for longer than the blind threshold — the camera is being decoded and
|
|
257
|
+
* inferred and is returning nothing. Emitted once per transition into blind,
|
|
258
|
+
* per camera.
|
|
259
|
+
*
|
|
260
|
+
* The failure it reports: a 1h43 detection blackout on the entrance camera
|
|
261
|
+
* that nobody noticed, because "a camera that detects nothing" and "a quiet
|
|
262
|
+
* camera" produce byte-identical silence.
|
|
263
|
+
*/
|
|
264
|
+
EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
|
|
265
|
+
/**
|
|
239
266
|
* Per-camera pipeline config was mutated by the orchestrator
|
|
240
267
|
* (3-level settings change via `setAgentAddonDefaults` /
|
|
241
268
|
* `setCameraStepToggle` / `setCameraPipelineForAgent` or a
|
|
@@ -14580,6 +14607,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14580
14607
|
"stream-offline",
|
|
14581
14608
|
"node-online",
|
|
14582
14609
|
"node-offline",
|
|
14610
|
+
"node-inference-unavailable",
|
|
14611
|
+
"detection-blind",
|
|
14583
14612
|
"addon-update-available",
|
|
14584
14613
|
"server-update-available",
|
|
14585
14614
|
"alarm-triggered",
|
|
@@ -15387,7 +15416,50 @@ var NcRuleInputSchema = object({
|
|
|
15387
15416
|
* tests every zone the track visited and a `crossing` condition can no longer
|
|
15388
15417
|
* be satisfied, because a closed track carries no crossing.
|
|
15389
15418
|
*/
|
|
15390
|
-
waitForEnhancement: boolean().optional()
|
|
15419
|
+
waitForEnhancement: boolean().optional(),
|
|
15420
|
+
/**
|
|
15421
|
+
* GROUP a burst of subjects into ONE notification that grows.
|
|
15422
|
+
*
|
|
15423
|
+
* Seconds of quiet after the last matching subject before the burst is
|
|
15424
|
+
* considered over. While it is open, the first subject enqueues immediately —
|
|
15425
|
+
* **exactly as today, with no added latency** — and every real growth (a new
|
|
15426
|
+
* subject, or a name confirmed on one already in it) REPLACES that
|
|
15427
|
+
* notification with an updated one naming everybody. The push carries the
|
|
15428
|
+
* group's own coalescing tag, so the phone replaces rather than stacks.
|
|
15429
|
+
*
|
|
15430
|
+
* `0` / absent = off, and off is today's behaviour byte for byte.
|
|
15431
|
+
*
|
|
15432
|
+
* ### Why an idle cutoff and not a window
|
|
15433
|
+
*
|
|
15434
|
+
* The measured seven-person arrival on device 590 spans 110 s with every
|
|
15435
|
+
* internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
|
|
15436
|
+
* idle cutoff holds it as one and ends it when the arrival actually ends.
|
|
15437
|
+
* 30 is Frigate's shipped value for the same decision.
|
|
15438
|
+
*
|
|
15439
|
+
* ### What it replaces
|
|
15440
|
+
*
|
|
15441
|
+
* The blind cooldown, which collapses a burst by DISCARDING it. Measured on
|
|
15442
|
+
* device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
|
|
15443
|
+
* notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
|
|
15444
|
+
* track that did fire and 7 carrying a confirmed identity nobody heard about.
|
|
15445
|
+
* A group collapses the same volume by MERGING, so the cooldown becomes a
|
|
15446
|
+
* budget over GROUPS — which is what it always meant — and a growth is never
|
|
15447
|
+
* throttled by the window its own first member spent.
|
|
15448
|
+
*
|
|
15449
|
+
* ### Interaction with {@link waitForEnhancement}
|
|
15450
|
+
*
|
|
15451
|
+
* They compose, and the order matters. `waitForEnhancement` defers the rule to
|
|
15452
|
+
* TRACK CLOSE, so with both set the group is opened by the first member to
|
|
15453
|
+
* CLOSE — already carrying its name — and grows as later members close. That
|
|
15454
|
+
* is later, and complete. With grouping alone the group opens on the first
|
|
15455
|
+
* object event and picks up names as they are confirmed, through the growth
|
|
15456
|
+
* path. Neither combination fires twice for one subject.
|
|
15457
|
+
*
|
|
15458
|
+
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
15459
|
+
* on the addon cap path, so absent must keep meaning what it meant before this
|
|
15460
|
+
* field existed.
|
|
15461
|
+
*/
|
|
15462
|
+
groupIdleSec: number().int().min(0).max(600).optional()
|
|
15391
15463
|
});
|
|
15392
15464
|
/**
|
|
15393
15465
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -15574,6 +15646,14 @@ var NC_CONDITION_CATALOG = [
|
|
|
15574
15646
|
value: "node-offline",
|
|
15575
15647
|
label: "Node offline"
|
|
15576
15648
|
},
|
|
15649
|
+
{
|
|
15650
|
+
value: "node-inference-unavailable",
|
|
15651
|
+
label: "Node has no usable inference device"
|
|
15652
|
+
},
|
|
15653
|
+
{
|
|
15654
|
+
value: "detection-blind",
|
|
15655
|
+
label: "Camera detecting nothing"
|
|
15656
|
+
},
|
|
15577
15657
|
{
|
|
15578
15658
|
value: "addon-update-available",
|
|
15579
15659
|
label: "Addon update available"
|
|
@@ -16820,7 +16900,7 @@ var TrackEnvelopeSchema = object({
|
|
|
16820
16900
|
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
16821
16901
|
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
16822
16902
|
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
16823
|
-
* zonesVisited, bestEventId, envelope, hasFace) and returns `positions` /
|
|
16903
|
+
* zonesVisited, bestEventId, envelope, hasFace, hasRider) and returns `positions` /
|
|
16824
16904
|
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
16825
16905
|
* `getTrack`. Mirrors the event-store `projection` convention
|
|
16826
16906
|
* (`getObjectEvents` et al.).
|
|
@@ -17107,6 +17187,28 @@ var TrackSchema = object({
|
|
|
17107
17187
|
* `=== true` and render nothing otherwise, never infer "no face".
|
|
17108
17188
|
*/
|
|
17109
17189
|
hasFace: boolean().optional(),
|
|
17190
|
+
/**
|
|
17191
|
+
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
17192
|
+
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
17193
|
+
* so the passage is tracked once and as a VEHICLE.
|
|
17194
|
+
*
|
|
17195
|
+
* It exists because the fold's record was dishonest. D34 and the code both
|
|
17196
|
+
* said "the person is not lost — it is reported so both entities stay on the
|
|
17197
|
+
* record"; in fact the pair went into a per-processor RAM field behind an
|
|
17198
|
+
* accessor nobody called, and every durable surface said `vehicle`, full
|
|
17199
|
+
* stop. This is the composition note that makes the row true.
|
|
17200
|
+
*
|
|
17201
|
+
* A COMPOSITION, never a class and never a label. "This vehicle contains a
|
|
17202
|
+
* person" is not an answer to "what is this" — both label tiers would refuse
|
|
17203
|
+
* a macro token anyway (D89), and correctly. Nothing here changes what the
|
|
17204
|
+
* subject IS: a cyclist stays one vehicle track, occupancy still counts one,
|
|
17205
|
+
* and a `person` rule still does not fire for someone cycling past.
|
|
17206
|
+
*
|
|
17207
|
+
* **Absent ≠ false**, exactly like {@link hasFace}: every row written before
|
|
17208
|
+
* the column, and every hub that predates the field, omits it. Test
|
|
17209
|
+
* `=== true` and render nothing otherwise — never infer "no rider".
|
|
17210
|
+
*/
|
|
17211
|
+
hasRider: boolean().optional(),
|
|
17110
17212
|
...TrackFlagFields,
|
|
17111
17213
|
...TrackRetrainFields
|
|
17112
17214
|
});
|
|
@@ -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-
|
|
5
|
+
const require_dist = require("../dist-Cy8lyywE.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 { W as embeddingEncoderCapability, q as hfModelUrl, st as BaseAddon } from "../dist-
|
|
1
|
+
import { W as embeddingEncoderCapability, q as hfModelUrl, st as BaseAddon } from "../dist-CvWsGsxP.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import "node:fs";
|