@camstack/addon-post-analysis 1.2.244 → 1.2.245
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-C-1xTyB-.mjs → dist-BI5QyFCV.mjs} +118 -3
- package/dist/{dist-DxZAf0Hs.js → dist-CzmhHYgz.js} +123 -2
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +279 -272
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DqVUwKib.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CAhLu0ft.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DyF1G0bN.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CSOvIfGa.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-Bn-3U_Qz.mjs → hostInit-CVs1ATjt.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +60 -9
- package/dist/pipeline-analytics/index.mjs +60 -9
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BgA_MUQb.mjs +0 -26
|
@@ -5359,7 +5359,7 @@ var ZodIssueCode = {
|
|
|
5359
5359
|
var ZodFirstPartyTypeKind;
|
|
5360
5360
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5361
5361
|
//#endregion
|
|
5362
|
-
//#region ../types/dist/sleep-
|
|
5362
|
+
//#region ../types/dist/sleep-BfJ2k1jm.mjs
|
|
5363
5363
|
/**
|
|
5364
5364
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5365
5365
|
* window to float samples (D455).
|
|
@@ -21993,6 +21993,48 @@ var RunReplayFrameProcessorResultSchema = object({ tracks: array(object({
|
|
|
21993
21993
|
* solid is this track", cheaper than re-deriving it from a trajectory. */
|
|
21994
21994
|
framesMatched: number().int()
|
|
21995
21995
|
})).readonly() });
|
|
21996
|
+
/**
|
|
21997
|
+
* The long-term series a camera produces. A closed union so a typo cannot
|
|
21998
|
+
* invent one, and the ONE declaration of it — the addon's `AnalyticsLtsSeries`
|
|
21999
|
+
* is an alias of this, not a second list.
|
|
22000
|
+
*/
|
|
22001
|
+
var AnalyticsLtsSeriesSchema = _enum([
|
|
22002
|
+
"motion",
|
|
22003
|
+
"audio-dbfs",
|
|
22004
|
+
"battery",
|
|
22005
|
+
"occupancy"
|
|
22006
|
+
]);
|
|
22007
|
+
/**
|
|
22008
|
+
* Spell one occupancy scope.
|
|
22009
|
+
*
|
|
22010
|
+
* `occupancyScope()` → `''` (frame, every class)
|
|
22011
|
+
* `occupancyScope('z1')` → `'z1'` (zone, every class)
|
|
22012
|
+
* `occupancyScope(undefined, 'person')` → `'|person'`
|
|
22013
|
+
* `occupancyScope('z1', 'person')` → `'z1|person'`
|
|
22014
|
+
*
|
|
22015
|
+
* The two aggregate spellings are the ones that existed before the class
|
|
22016
|
+
* dimension and they mean exactly what they always did.
|
|
22017
|
+
*/
|
|
22018
|
+
function occupancyScope(zoneId, className) {
|
|
22019
|
+
const place = zoneId ?? "";
|
|
22020
|
+
return className === void 0 ? place : `${place}|${className}`;
|
|
22021
|
+
}
|
|
22022
|
+
/**
|
|
22023
|
+
* One closed 5-minute bucket of a long-term series.
|
|
22024
|
+
*
|
|
22025
|
+
* `samples` is how many readings the bucket folded — it is the ACTIVITY for a
|
|
22026
|
+
* series like `motion`, and the confidence for one like `occupancy`. A bucket
|
|
22027
|
+
* that exists at all was measured; a bucket that is absent was not, which is a
|
|
22028
|
+
* different claim from zero and the reason this is a sparse series.
|
|
22029
|
+
*/
|
|
22030
|
+
var LtsBucketSchema = object({
|
|
22031
|
+
scope: string(),
|
|
22032
|
+
bucketStart: number().int(),
|
|
22033
|
+
samples: number().int().nonnegative(),
|
|
22034
|
+
sum: number(),
|
|
22035
|
+
min: number(),
|
|
22036
|
+
max: number()
|
|
22037
|
+
});
|
|
21996
22038
|
var pipelineAnalyticsCapability = {
|
|
21997
22039
|
name: "pipeline-analytics",
|
|
21998
22040
|
scope: "device",
|
|
@@ -22136,6 +22178,30 @@ var pipelineAnalyticsCapability = {
|
|
|
22136
22178
|
getKeyEventsBatch: method(KeyEventBatchQueryInput, array(KeyEventsForDeviceSchema).readonly()),
|
|
22137
22179
|
/** Server-side bucketed event counts for the 24-hour timeline.
|
|
22138
22180
|
* Returns one entry per non-empty bucket; empty buckets are omitted. */
|
|
22181
|
+
/**
|
|
22182
|
+
* Read one camera's long-term series — 5-minute buckets, kept for a year.
|
|
22183
|
+
*
|
|
22184
|
+
* This is the history surface for every chart that used to be served from a
|
|
22185
|
+
* RAM ring: the ring dies with the process, cannot answer about last night,
|
|
22186
|
+
* and had a 60-minute horizon, while these rows are ~60 bytes and already
|
|
22187
|
+
* written. `scope` is the series' own dimension — for `occupancy`, spell it
|
|
22188
|
+
* with {@link occupancyScope} rather than by hand, and omit it to get every
|
|
22189
|
+
* scope back at once (the caller then groups with
|
|
22190
|
+
* {@link parseOccupancyScope}).
|
|
22191
|
+
*
|
|
22192
|
+
* Bounds are inclusive on the BUCKET START, so a range that ends mid-bucket
|
|
22193
|
+
* still returns the bucket it lands in — the alternative is a chart whose
|
|
22194
|
+
* last column silently disappears for five minutes out of every five.
|
|
22195
|
+
*/
|
|
22196
|
+
readLongTermSeries: method(object({
|
|
22197
|
+
deviceId: number(),
|
|
22198
|
+
series: AnalyticsLtsSeriesSchema,
|
|
22199
|
+
/** Omit for EVERY scope of this series in the range. */
|
|
22200
|
+
scope: string().optional(),
|
|
22201
|
+
from: number(),
|
|
22202
|
+
to: number(),
|
|
22203
|
+
limit: number().int().positive().optional()
|
|
22204
|
+
}), array(LtsBucketSchema).readonly()),
|
|
22139
22205
|
getEventDensity: method(object({
|
|
22140
22206
|
deviceId: number(),
|
|
22141
22207
|
since: number(),
|
|
@@ -35575,7 +35641,28 @@ var PerScopeBreakdownSchema = object({
|
|
|
35575
35641
|
/** Total tracked objects in this scope (frame / zone / unzoned). */
|
|
35576
35642
|
totalObjects: number().int().nonnegative(),
|
|
35577
35643
|
/** Per-class count. Keys are macro class names (e.g. `person`, `car`). */
|
|
35578
|
-
byClass: record(string(), number().int().nonnegative())
|
|
35644
|
+
byClass: record(string(), number().int().nonnegative()),
|
|
35645
|
+
/**
|
|
35646
|
+
* Of `totalObjects`, how many are STANDING — objects the census holds,
|
|
35647
|
+
* present but not going anywhere (a parked car, a bin, a statue).
|
|
35648
|
+
*
|
|
35649
|
+
* The operator's question about a scene has two halves and they answer
|
|
35650
|
+
* different things: "what is parked here" is stable for hours and must not
|
|
35651
|
+
* flap, while "who is walking through" is the thing an alert is about. One
|
|
35652
|
+
* number could only serve one of them, and `totalObjects` served the first
|
|
35653
|
+
* badly — a passer-by moved it and every occupancy rule saw a change.
|
|
35654
|
+
*
|
|
35655
|
+
* `standing + transient === totalObjects`, always. The total keeps its old
|
|
35656
|
+
* meaning exactly, so no rule written against it changes behaviour.
|
|
35657
|
+
*
|
|
35658
|
+
* ABSENT means UNKNOWN, never zero (D393): a snapshot from a node older than
|
|
35659
|
+
* this field cannot say, and a reader that folds absence in as 0 reports "no
|
|
35660
|
+
* parked objects here" about a camera whose lot is full.
|
|
35661
|
+
*/
|
|
35662
|
+
standingObjects: number().int().nonnegative().optional(),
|
|
35663
|
+
/** Of `totalObjects`, how many are passing through. See `standingObjects` —
|
|
35664
|
+
* same absence rule. */
|
|
35665
|
+
transientObjects: number().int().nonnegative().optional()
|
|
35579
35666
|
});
|
|
35580
35667
|
var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
|
|
35581
35668
|
zoneId: string(),
|
|
@@ -35698,6 +35785,23 @@ var HistoryPointSchema = object({
|
|
|
35698
35785
|
* triple covers the three spatial scopes (per-zone, frame-wide,
|
|
35699
35786
|
* outside-any-zone). Crossing them with `className?` gives the full
|
|
35700
35787
|
* combinatorial coverage the operator UI requested.
|
|
35788
|
+
*
|
|
35789
|
+
* ## ⚠️ The three history methods are DEPRECATED
|
|
35790
|
+
*
|
|
35791
|
+
* They are served from a 60-MINUTE in-memory ring. It dies with the process,
|
|
35792
|
+
* so after a restart they report nothing about a night that did happen, and any
|
|
35793
|
+
* window past an hour is silently clamped — a caller cannot tell a clamp from
|
|
35794
|
+
* an empty scene. The presets in the occupancy chart existed to hide that
|
|
35795
|
+
* horizon rather than to answer a question.
|
|
35796
|
+
*
|
|
35797
|
+
* Use `pipelineAnalytics.readLongTermSeries({ series: 'occupancy', scope })`
|
|
35798
|
+
* instead. Those rows are already written for every camera, ~60 bytes per
|
|
35799
|
+
* (camera, scope, 5-minute bucket), kept for a year, and survive a restart.
|
|
35800
|
+
* Spell the scope with `occupancyScope(zoneId?, className?)` — the same
|
|
35801
|
+
* function the writer uses, so the two cannot drift.
|
|
35802
|
+
*
|
|
35803
|
+
* The ring stays until these three go, and it is the only thing left reading
|
|
35804
|
+
* it. Do not add a fourth caller.
|
|
35701
35805
|
*/
|
|
35702
35806
|
var zoneAnalyticsCapability = {
|
|
35703
35807
|
name: "zone-analytics",
|
|
@@ -40665,6 +40769,12 @@ Object.freeze({
|
|
|
40665
40769
|
addonId: null,
|
|
40666
40770
|
access: "create"
|
|
40667
40771
|
},
|
|
40772
|
+
"pipelineAnalytics.readLongTermSeries": {
|
|
40773
|
+
capName: "pipeline-analytics",
|
|
40774
|
+
capScope: "device",
|
|
40775
|
+
addonId: null,
|
|
40776
|
+
access: "view"
|
|
40777
|
+
},
|
|
40668
40778
|
"pipelineAnalytics.rebuildObjectEmbeddings": {
|
|
40669
40779
|
capName: "pipeline-analytics",
|
|
40670
40780
|
capScope: "device",
|
|
@@ -44481,6 +44591,11 @@ Object.freeze({
|
|
|
44481
44591
|
form: "single",
|
|
44482
44592
|
optional: false
|
|
44483
44593
|
}],
|
|
44594
|
+
"pipelineAnalytics.readLongTermSeries": [{
|
|
44595
|
+
name: "deviceId",
|
|
44596
|
+
form: "single",
|
|
44597
|
+
optional: false
|
|
44598
|
+
}],
|
|
44484
44599
|
"pipelineAnalytics.rebuildObjectEmbeddings": [{
|
|
44485
44600
|
name: "deviceId",
|
|
44486
44601
|
form: "single",
|
|
@@ -46413,4 +46528,4 @@ function vectorDimFromBase64(encoded) {
|
|
|
46413
46528
|
return Math.floor(Buffer.from(encoded, "base64").byteLength / 4);
|
|
46414
46529
|
}
|
|
46415
46530
|
//#endregion
|
|
46416
|
-
export { TimelapseRuleSchema as $,
|
|
46531
|
+
export { TimelapseRuleSchema as $, array as $t, NcConditionDescriptorSchema as A, readDeviceStateFrom as At, NcTaxonomySchema as B, zoneAnalyticsCapability as Bt, MOTION_CLOSE_AFTER_MS as C, mayWriteToLocation as Ct, NC_DEFAULT_SNOOZE_MINUTES as D, pickClusterStepModels as Dt, NC_CONDITION_CATALOG as E, parseProcStatus as Et, NcScheduleSchema as F, storageOccupancyCapability as Ft, SCENE_CONFIRM_DEFAULT_TIMEOUT_MS as G, createEvent as Gt, PoolMemoryWatchdog as H, BaseAddon as Ht, NcSnoozeInputSchema as I, subKindsOf as It, SCENE_DIVERGED as J, hydrateSchema as Jt, SCENE_DEFAULT_ANCHOR_THRESHOLD as K, customAction as Kt, NcSnoozeSchema as L, systemEventFilterApplies as Lt, NcRulePatchSchema as M, resolveLocationMode as Mt, NcRuleSchema as N, resolvePoolMemoryPolicy as Nt, NC_SNOOZE_MAX_MINUTES as O, pipelineAnalyticsCapability as Ot, NcRuleTargetSchema as P, sceneMonitorCapability as Pt, TimelapseRulePatchSchema as Q, _enum as Qt, NcSnoozeSuppressedSchema as R, vectorDimFromBase64 as Rt, MAX_BIRTH_LATENCY_PROXY_MS as S, kebabToCamel as St, NC_ALARM_SYSTEM_EVENT_KINDS as T, occupancyScope as Tt, RECORDING_EXPORT_MAX_READ_BYTES as U, CamProfileSchema as Ut, OpsLogEntrySchema as V, errMsg as Vt, RetrainStatusSchema as W, DeviceType as Wt, TIMELAPSE_DENSE_FLOOR_SEC as X, nodePin as Xt, SceneMonitorSchema as Y, isDeviceScopedCap as Yt, TimelapseRuleInputSchema as Z, sleep as Zt, FULL_IMAGE_BBOX as _, isDetectionMacroClass as _t, CLUSTER_MODEL_SCOPED_STEPS as a, partialRecord as an, audioMetricsCapability as at, MAX_ARCHIVED_DEBUG_NOTES as b, isScheduleActive as bt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as c, unknown as cn, cosineSimilarity as ct, DETECTION_PIPELINE_CAP_NAME as d, encodeVectorBase64 as dt, boolean as en, TrackSourceSchema as et, DeclaredDevices as f, evaluateSensorEdge as ft, FIRST_LEVEL_MACRO_CLASSES as g, hfModelUrl as gt, EVENT_PAD_MS as h, failureContributionCapability as ht, BirthDecisionRecordSchema as i, object as in, assertTimelapseCadences as it, NcRuleInputSchema as j, readTimelapseGeneratedAt as jt, NC_TAXONOMY as k, plateGalleryCapability as kt, DEFAULT_TIMELAPSE_PREVIEW_TEXT as l, EventCategory as ln, deriveRecordingMode as lt, EVENT_OWNER_TYPES as m, faceGalleryCapability as mt, ArchivedDebugNoteSchema as n, literal as nn, addonWidgetsSourceCapability as nt, COCO_TO_MACRO as o, record as on, audioModeOf as ot, EVENT_KIND_BY_CAP as p, evictionPolicyOfLocation as pt, SCENE_DEFAULT_UNCOVERED_POLICY as q, defineCustomActions as qt, BaseDevice as r, number as rn, alarmPanelCapability as rt, DEFAULT_EVENT_COLOR as s, string as sn, buildEventKindDescriptor as st, AUDIO_MACRO_LABELS as t, discriminatedUnion as tn, VISIT_MERGE_GAP_MS as tt, DETECTION_MACRO_CLASSES as u, embeddingEncoderCapability as ut, FailureCounters as v, isEventOwnerType as vt, MediaFileKindEnum as w, notificationRulesCapability as wt, MAX_BIRTH_DECISION_RECORDS as x, isSourceCap as xt, LabelAttributionSchema as y, isMediaOwnerType as yt, NcSystemEventKindSchema as z, videoclipsCapability as zt };
|
|
@@ -5390,7 +5390,7 @@ var ZodIssueCode = {
|
|
|
5390
5390
|
var ZodFirstPartyTypeKind;
|
|
5391
5391
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5392
5392
|
//#endregion
|
|
5393
|
-
//#region ../types/dist/sleep-
|
|
5393
|
+
//#region ../types/dist/sleep-BfJ2k1jm.mjs
|
|
5394
5394
|
/**
|
|
5395
5395
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5396
5396
|
* window to float samples (D455).
|
|
@@ -22024,6 +22024,48 @@ var RunReplayFrameProcessorResultSchema = object({ tracks: array(object({
|
|
|
22024
22024
|
* solid is this track", cheaper than re-deriving it from a trajectory. */
|
|
22025
22025
|
framesMatched: number().int()
|
|
22026
22026
|
})).readonly() });
|
|
22027
|
+
/**
|
|
22028
|
+
* The long-term series a camera produces. A closed union so a typo cannot
|
|
22029
|
+
* invent one, and the ONE declaration of it — the addon's `AnalyticsLtsSeries`
|
|
22030
|
+
* is an alias of this, not a second list.
|
|
22031
|
+
*/
|
|
22032
|
+
var AnalyticsLtsSeriesSchema = _enum([
|
|
22033
|
+
"motion",
|
|
22034
|
+
"audio-dbfs",
|
|
22035
|
+
"battery",
|
|
22036
|
+
"occupancy"
|
|
22037
|
+
]);
|
|
22038
|
+
/**
|
|
22039
|
+
* Spell one occupancy scope.
|
|
22040
|
+
*
|
|
22041
|
+
* `occupancyScope()` → `''` (frame, every class)
|
|
22042
|
+
* `occupancyScope('z1')` → `'z1'` (zone, every class)
|
|
22043
|
+
* `occupancyScope(undefined, 'person')` → `'|person'`
|
|
22044
|
+
* `occupancyScope('z1', 'person')` → `'z1|person'`
|
|
22045
|
+
*
|
|
22046
|
+
* The two aggregate spellings are the ones that existed before the class
|
|
22047
|
+
* dimension and they mean exactly what they always did.
|
|
22048
|
+
*/
|
|
22049
|
+
function occupancyScope(zoneId, className) {
|
|
22050
|
+
const place = zoneId ?? "";
|
|
22051
|
+
return className === void 0 ? place : `${place}|${className}`;
|
|
22052
|
+
}
|
|
22053
|
+
/**
|
|
22054
|
+
* One closed 5-minute bucket of a long-term series.
|
|
22055
|
+
*
|
|
22056
|
+
* `samples` is how many readings the bucket folded — it is the ACTIVITY for a
|
|
22057
|
+
* series like `motion`, and the confidence for one like `occupancy`. A bucket
|
|
22058
|
+
* that exists at all was measured; a bucket that is absent was not, which is a
|
|
22059
|
+
* different claim from zero and the reason this is a sparse series.
|
|
22060
|
+
*/
|
|
22061
|
+
var LtsBucketSchema = object({
|
|
22062
|
+
scope: string(),
|
|
22063
|
+
bucketStart: number().int(),
|
|
22064
|
+
samples: number().int().nonnegative(),
|
|
22065
|
+
sum: number(),
|
|
22066
|
+
min: number(),
|
|
22067
|
+
max: number()
|
|
22068
|
+
});
|
|
22027
22069
|
var pipelineAnalyticsCapability = {
|
|
22028
22070
|
name: "pipeline-analytics",
|
|
22029
22071
|
scope: "device",
|
|
@@ -22167,6 +22209,30 @@ var pipelineAnalyticsCapability = {
|
|
|
22167
22209
|
getKeyEventsBatch: method(KeyEventBatchQueryInput, array(KeyEventsForDeviceSchema).readonly()),
|
|
22168
22210
|
/** Server-side bucketed event counts for the 24-hour timeline.
|
|
22169
22211
|
* Returns one entry per non-empty bucket; empty buckets are omitted. */
|
|
22212
|
+
/**
|
|
22213
|
+
* Read one camera's long-term series — 5-minute buckets, kept for a year.
|
|
22214
|
+
*
|
|
22215
|
+
* This is the history surface for every chart that used to be served from a
|
|
22216
|
+
* RAM ring: the ring dies with the process, cannot answer about last night,
|
|
22217
|
+
* and had a 60-minute horizon, while these rows are ~60 bytes and already
|
|
22218
|
+
* written. `scope` is the series' own dimension — for `occupancy`, spell it
|
|
22219
|
+
* with {@link occupancyScope} rather than by hand, and omit it to get every
|
|
22220
|
+
* scope back at once (the caller then groups with
|
|
22221
|
+
* {@link parseOccupancyScope}).
|
|
22222
|
+
*
|
|
22223
|
+
* Bounds are inclusive on the BUCKET START, so a range that ends mid-bucket
|
|
22224
|
+
* still returns the bucket it lands in — the alternative is a chart whose
|
|
22225
|
+
* last column silently disappears for five minutes out of every five.
|
|
22226
|
+
*/
|
|
22227
|
+
readLongTermSeries: method(object({
|
|
22228
|
+
deviceId: number(),
|
|
22229
|
+
series: AnalyticsLtsSeriesSchema,
|
|
22230
|
+
/** Omit for EVERY scope of this series in the range. */
|
|
22231
|
+
scope: string().optional(),
|
|
22232
|
+
from: number(),
|
|
22233
|
+
to: number(),
|
|
22234
|
+
limit: number().int().positive().optional()
|
|
22235
|
+
}), array(LtsBucketSchema).readonly()),
|
|
22170
22236
|
getEventDensity: method(object({
|
|
22171
22237
|
deviceId: number(),
|
|
22172
22238
|
since: number(),
|
|
@@ -35606,7 +35672,28 @@ var PerScopeBreakdownSchema = object({
|
|
|
35606
35672
|
/** Total tracked objects in this scope (frame / zone / unzoned). */
|
|
35607
35673
|
totalObjects: number().int().nonnegative(),
|
|
35608
35674
|
/** Per-class count. Keys are macro class names (e.g. `person`, `car`). */
|
|
35609
|
-
byClass: record(string(), number().int().nonnegative())
|
|
35675
|
+
byClass: record(string(), number().int().nonnegative()),
|
|
35676
|
+
/**
|
|
35677
|
+
* Of `totalObjects`, how many are STANDING — objects the census holds,
|
|
35678
|
+
* present but not going anywhere (a parked car, a bin, a statue).
|
|
35679
|
+
*
|
|
35680
|
+
* The operator's question about a scene has two halves and they answer
|
|
35681
|
+
* different things: "what is parked here" is stable for hours and must not
|
|
35682
|
+
* flap, while "who is walking through" is the thing an alert is about. One
|
|
35683
|
+
* number could only serve one of them, and `totalObjects` served the first
|
|
35684
|
+
* badly — a passer-by moved it and every occupancy rule saw a change.
|
|
35685
|
+
*
|
|
35686
|
+
* `standing + transient === totalObjects`, always. The total keeps its old
|
|
35687
|
+
* meaning exactly, so no rule written against it changes behaviour.
|
|
35688
|
+
*
|
|
35689
|
+
* ABSENT means UNKNOWN, never zero (D393): a snapshot from a node older than
|
|
35690
|
+
* this field cannot say, and a reader that folds absence in as 0 reports "no
|
|
35691
|
+
* parked objects here" about a camera whose lot is full.
|
|
35692
|
+
*/
|
|
35693
|
+
standingObjects: number().int().nonnegative().optional(),
|
|
35694
|
+
/** Of `totalObjects`, how many are passing through. See `standingObjects` —
|
|
35695
|
+
* same absence rule. */
|
|
35696
|
+
transientObjects: number().int().nonnegative().optional()
|
|
35610
35697
|
});
|
|
35611
35698
|
var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
|
|
35612
35699
|
zoneId: string(),
|
|
@@ -35729,6 +35816,23 @@ var HistoryPointSchema = object({
|
|
|
35729
35816
|
* triple covers the three spatial scopes (per-zone, frame-wide,
|
|
35730
35817
|
* outside-any-zone). Crossing them with `className?` gives the full
|
|
35731
35818
|
* combinatorial coverage the operator UI requested.
|
|
35819
|
+
*
|
|
35820
|
+
* ## ⚠️ The three history methods are DEPRECATED
|
|
35821
|
+
*
|
|
35822
|
+
* They are served from a 60-MINUTE in-memory ring. It dies with the process,
|
|
35823
|
+
* so after a restart they report nothing about a night that did happen, and any
|
|
35824
|
+
* window past an hour is silently clamped — a caller cannot tell a clamp from
|
|
35825
|
+
* an empty scene. The presets in the occupancy chart existed to hide that
|
|
35826
|
+
* horizon rather than to answer a question.
|
|
35827
|
+
*
|
|
35828
|
+
* Use `pipelineAnalytics.readLongTermSeries({ series: 'occupancy', scope })`
|
|
35829
|
+
* instead. Those rows are already written for every camera, ~60 bytes per
|
|
35830
|
+
* (camera, scope, 5-minute bucket), kept for a year, and survive a restart.
|
|
35831
|
+
* Spell the scope with `occupancyScope(zoneId?, className?)` — the same
|
|
35832
|
+
* function the writer uses, so the two cannot drift.
|
|
35833
|
+
*
|
|
35834
|
+
* The ring stays until these three go, and it is the only thing left reading
|
|
35835
|
+
* it. Do not add a fourth caller.
|
|
35732
35836
|
*/
|
|
35733
35837
|
var zoneAnalyticsCapability = {
|
|
35734
35838
|
name: "zone-analytics",
|
|
@@ -40696,6 +40800,12 @@ Object.freeze({
|
|
|
40696
40800
|
addonId: null,
|
|
40697
40801
|
access: "create"
|
|
40698
40802
|
},
|
|
40803
|
+
"pipelineAnalytics.readLongTermSeries": {
|
|
40804
|
+
capName: "pipeline-analytics",
|
|
40805
|
+
capScope: "device",
|
|
40806
|
+
addonId: null,
|
|
40807
|
+
access: "view"
|
|
40808
|
+
},
|
|
40699
40809
|
"pipelineAnalytics.rebuildObjectEmbeddings": {
|
|
40700
40810
|
capName: "pipeline-analytics",
|
|
40701
40811
|
capScope: "device",
|
|
@@ -44512,6 +44622,11 @@ Object.freeze({
|
|
|
44512
44622
|
form: "single",
|
|
44513
44623
|
optional: false
|
|
44514
44624
|
}],
|
|
44625
|
+
"pipelineAnalytics.readLongTermSeries": [{
|
|
44626
|
+
name: "deviceId",
|
|
44627
|
+
form: "single",
|
|
44628
|
+
optional: false
|
|
44629
|
+
}],
|
|
44515
44630
|
"pipelineAnalytics.rebuildObjectEmbeddings": [{
|
|
44516
44631
|
name: "deviceId",
|
|
44517
44632
|
form: "single",
|
|
@@ -47032,6 +47147,12 @@ Object.defineProperty(exports, "object", {
|
|
|
47032
47147
|
return object;
|
|
47033
47148
|
}
|
|
47034
47149
|
});
|
|
47150
|
+
Object.defineProperty(exports, "occupancyScope", {
|
|
47151
|
+
enumerable: true,
|
|
47152
|
+
get: function() {
|
|
47153
|
+
return occupancyScope;
|
|
47154
|
+
}
|
|
47155
|
+
});
|
|
47035
47156
|
Object.defineProperty(exports, "parseProcStatus", {
|
|
47036
47157
|
enumerable: true,
|
|
47037
47158
|
get: function() {
|
|
@@ -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-CzmhHYgz.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_dist.__toESM(node_fs);
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Et as parseProcStatus, H as PoolMemoryWatchdog, Ht as BaseAddon, Nt as resolvePoolMemoryPolicy, gt as hfModelUrl, ut as embeddingEncoderCapability } from "../dist-BI5QyFCV.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|