@camstack/addon-ai 0.4.47 → 0.4.49
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 +117 -6
- package/dist/addon.mjs +117 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15870,6 +15870,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15870
15870
|
"device-offline",
|
|
15871
15871
|
"device-disabled",
|
|
15872
15872
|
"device-enabled",
|
|
15873
|
+
"device-battery-low",
|
|
15874
|
+
"device-battery-normal",
|
|
15873
15875
|
"stream-online",
|
|
15874
15876
|
"stream-offline",
|
|
15875
15877
|
"node-online",
|
|
@@ -19144,6 +19146,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19144
19146
|
deviceId: number$1(),
|
|
19145
19147
|
events: array(KeyEventSchema).readonly()
|
|
19146
19148
|
});
|
|
19149
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19150
|
+
var EventDensityBucketSchema = object({
|
|
19151
|
+
bucketStart: number$1(),
|
|
19152
|
+
motion: number$1().int(),
|
|
19153
|
+
object: number$1().int(),
|
|
19154
|
+
audio: number$1().int()
|
|
19155
|
+
});
|
|
19156
|
+
/**
|
|
19157
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19158
|
+
*
|
|
19159
|
+
* TWO facts, and the timeline draws them differently:
|
|
19160
|
+
*
|
|
19161
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19162
|
+
* claim: read, and nothing happened in the window.
|
|
19163
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19164
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19165
|
+
* not quiet.
|
|
19166
|
+
*
|
|
19167
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19168
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19169
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19170
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19171
|
+
*/
|
|
19172
|
+
var EventDensityForDeviceSchema = object({
|
|
19173
|
+
deviceId: number$1(),
|
|
19174
|
+
read: _enum(["read", "unreadable"]),
|
|
19175
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19176
|
+
});
|
|
19147
19177
|
object({
|
|
19148
19178
|
trackId: string(),
|
|
19149
19179
|
className: string(),
|
|
@@ -19454,12 +19484,12 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
19454
19484
|
since: number$1(),
|
|
19455
19485
|
until: number$1(),
|
|
19456
19486
|
bucketMs: number$1().int().positive()
|
|
19457
|
-
}), array(object({
|
|
19458
|
-
|
|
19459
|
-
|
|
19460
|
-
|
|
19461
|
-
|
|
19462
|
-
})).readonly()), method(object({
|
|
19487
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19488
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
19489
|
+
since: number$1(),
|
|
19490
|
+
until: number$1(),
|
|
19491
|
+
bucketMs: number$1().int().positive()
|
|
19492
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19463
19493
|
deviceId: number$1(),
|
|
19464
19494
|
cutoffMs: number$1()
|
|
19465
19495
|
}), object({
|
|
@@ -26769,6 +26799,39 @@ var RecordingDaysSchema = object({
|
|
|
26769
26799
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26770
26800
|
days: array(number$1())
|
|
26771
26801
|
});
|
|
26802
|
+
/**
|
|
26803
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
26804
|
+
*
|
|
26805
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
26806
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
26807
|
+
* method never had to say:
|
|
26808
|
+
*
|
|
26809
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
26810
|
+
* no footage in the window", which is a real claim.
|
|
26811
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
26812
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
26813
|
+
* that emptiness means NOTHING.
|
|
26814
|
+
*
|
|
26815
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
26816
|
+
* footage when the truth is that nobody looked.
|
|
26817
|
+
*/
|
|
26818
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
26819
|
+
deviceId: number$1(),
|
|
26820
|
+
read: _enum(["read", "unreadable"]),
|
|
26821
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
26822
|
+
});
|
|
26823
|
+
/**
|
|
26824
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
26825
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
26826
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
26827
|
+
* the date-picker's day dots must not spell them the same.
|
|
26828
|
+
*/
|
|
26829
|
+
var RecordingDaysForDeviceSchema = object({
|
|
26830
|
+
deviceId: number$1(),
|
|
26831
|
+
read: _enum(["read", "unreadable"]),
|
|
26832
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26833
|
+
days: array(number$1()).readonly()
|
|
26834
|
+
});
|
|
26772
26835
|
var RecordingManifestSchema = object({
|
|
26773
26836
|
deviceId: number$1(),
|
|
26774
26837
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27003,6 +27066,13 @@ method(object({
|
|
|
27003
27066
|
}), RecordingAvailabilitySchema, {
|
|
27004
27067
|
kind: "query",
|
|
27005
27068
|
auth: "protected"
|
|
27069
|
+
}), method(object({
|
|
27070
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
27071
|
+
fromMs: number$1(),
|
|
27072
|
+
toMs: number$1()
|
|
27073
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
27074
|
+
kind: "query",
|
|
27075
|
+
auth: "protected"
|
|
27006
27076
|
}), method(object({
|
|
27007
27077
|
deviceId: number$1(),
|
|
27008
27078
|
fromMs: number$1(),
|
|
@@ -27011,6 +27081,14 @@ method(object({
|
|
|
27011
27081
|
}), RecordingDaysSchema, {
|
|
27012
27082
|
kind: "query",
|
|
27013
27083
|
auth: "protected"
|
|
27084
|
+
}), method(object({
|
|
27085
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
27086
|
+
fromMs: number$1(),
|
|
27087
|
+
toMs: number$1(),
|
|
27088
|
+
tzOffsetMinutes: number$1()
|
|
27089
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
27090
|
+
kind: "query",
|
|
27091
|
+
auth: "protected"
|
|
27014
27092
|
}), method(object({
|
|
27015
27093
|
deviceId: number$1(),
|
|
27016
27094
|
fromMs: number$1(),
|
|
@@ -32208,6 +32286,12 @@ Object.freeze({
|
|
|
32208
32286
|
addonId: null,
|
|
32209
32287
|
access: "view"
|
|
32210
32288
|
},
|
|
32289
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32290
|
+
capName: "pipeline-analytics",
|
|
32291
|
+
capScope: "device",
|
|
32292
|
+
addonId: null,
|
|
32293
|
+
access: "view"
|
|
32294
|
+
},
|
|
32211
32295
|
"pipelineAnalytics.getEventMedia": {
|
|
32212
32296
|
capName: "pipeline-analytics",
|
|
32213
32297
|
capScope: "device",
|
|
@@ -33330,12 +33414,24 @@ Object.freeze({
|
|
|
33330
33414
|
addonId: null,
|
|
33331
33415
|
access: "view"
|
|
33332
33416
|
},
|
|
33417
|
+
"recording.getAvailabilityBatch": {
|
|
33418
|
+
capName: "recording",
|
|
33419
|
+
capScope: "system",
|
|
33420
|
+
addonId: null,
|
|
33421
|
+
access: "view"
|
|
33422
|
+
},
|
|
33333
33423
|
"recording.getDaysWithRecordings": {
|
|
33334
33424
|
capName: "recording",
|
|
33335
33425
|
capScope: "system",
|
|
33336
33426
|
addonId: null,
|
|
33337
33427
|
access: "view"
|
|
33338
33428
|
},
|
|
33429
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33430
|
+
capName: "recording",
|
|
33431
|
+
capScope: "system",
|
|
33432
|
+
addonId: null,
|
|
33433
|
+
access: "view"
|
|
33434
|
+
},
|
|
33339
33435
|
"recording.getDeviceConfig": {
|
|
33340
33436
|
capName: "recording",
|
|
33341
33437
|
capScope: "system",
|
|
@@ -35940,6 +36036,11 @@ Object.freeze({
|
|
|
35940
36036
|
form: "single",
|
|
35941
36037
|
optional: false
|
|
35942
36038
|
}],
|
|
36039
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36040
|
+
name: "deviceIds",
|
|
36041
|
+
form: "array",
|
|
36042
|
+
optional: false
|
|
36043
|
+
}],
|
|
35943
36044
|
"pipelineAnalytics.getEventMedia": [{
|
|
35944
36045
|
name: "deviceId",
|
|
35945
36046
|
form: "single",
|
|
@@ -36355,11 +36456,21 @@ Object.freeze({
|
|
|
36355
36456
|
form: "single",
|
|
36356
36457
|
optional: false
|
|
36357
36458
|
}],
|
|
36459
|
+
"recording.getAvailabilityBatch": [{
|
|
36460
|
+
name: "deviceIds",
|
|
36461
|
+
form: "array",
|
|
36462
|
+
optional: false
|
|
36463
|
+
}],
|
|
36358
36464
|
"recording.getDaysWithRecordings": [{
|
|
36359
36465
|
name: "deviceId",
|
|
36360
36466
|
form: "single",
|
|
36361
36467
|
optional: false
|
|
36362
36468
|
}],
|
|
36469
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36470
|
+
name: "deviceIds",
|
|
36471
|
+
form: "array",
|
|
36472
|
+
optional: false
|
|
36473
|
+
}],
|
|
36363
36474
|
"recording.getDeviceConfig": [{
|
|
36364
36475
|
name: "deviceId",
|
|
36365
36476
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15897,6 +15897,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15897
15897
|
"device-offline",
|
|
15898
15898
|
"device-disabled",
|
|
15899
15899
|
"device-enabled",
|
|
15900
|
+
"device-battery-low",
|
|
15901
|
+
"device-battery-normal",
|
|
15900
15902
|
"stream-online",
|
|
15901
15903
|
"stream-offline",
|
|
15902
15904
|
"node-online",
|
|
@@ -19171,6 +19173,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19171
19173
|
deviceId: number$1(),
|
|
19172
19174
|
events: array(KeyEventSchema).readonly()
|
|
19173
19175
|
});
|
|
19176
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19177
|
+
var EventDensityBucketSchema = object({
|
|
19178
|
+
bucketStart: number$1(),
|
|
19179
|
+
motion: number$1().int(),
|
|
19180
|
+
object: number$1().int(),
|
|
19181
|
+
audio: number$1().int()
|
|
19182
|
+
});
|
|
19183
|
+
/**
|
|
19184
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19185
|
+
*
|
|
19186
|
+
* TWO facts, and the timeline draws them differently:
|
|
19187
|
+
*
|
|
19188
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19189
|
+
* claim: read, and nothing happened in the window.
|
|
19190
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19191
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19192
|
+
* not quiet.
|
|
19193
|
+
*
|
|
19194
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19195
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19196
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19197
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19198
|
+
*/
|
|
19199
|
+
var EventDensityForDeviceSchema = object({
|
|
19200
|
+
deviceId: number$1(),
|
|
19201
|
+
read: _enum(["read", "unreadable"]),
|
|
19202
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19203
|
+
});
|
|
19174
19204
|
object({
|
|
19175
19205
|
trackId: string(),
|
|
19176
19206
|
className: string(),
|
|
@@ -19481,12 +19511,12 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
19481
19511
|
since: number$1(),
|
|
19482
19512
|
until: number$1(),
|
|
19483
19513
|
bucketMs: number$1().int().positive()
|
|
19484
|
-
}), array(object({
|
|
19485
|
-
|
|
19486
|
-
|
|
19487
|
-
|
|
19488
|
-
|
|
19489
|
-
})).readonly()), method(object({
|
|
19514
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19515
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
19516
|
+
since: number$1(),
|
|
19517
|
+
until: number$1(),
|
|
19518
|
+
bucketMs: number$1().int().positive()
|
|
19519
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19490
19520
|
deviceId: number$1(),
|
|
19491
19521
|
cutoffMs: number$1()
|
|
19492
19522
|
}), object({
|
|
@@ -26796,6 +26826,39 @@ var RecordingDaysSchema = object({
|
|
|
26796
26826
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26797
26827
|
days: array(number$1())
|
|
26798
26828
|
});
|
|
26829
|
+
/**
|
|
26830
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
26831
|
+
*
|
|
26832
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
26833
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
26834
|
+
* method never had to say:
|
|
26835
|
+
*
|
|
26836
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
26837
|
+
* no footage in the window", which is a real claim.
|
|
26838
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
26839
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
26840
|
+
* that emptiness means NOTHING.
|
|
26841
|
+
*
|
|
26842
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
26843
|
+
* footage when the truth is that nobody looked.
|
|
26844
|
+
*/
|
|
26845
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
26846
|
+
deviceId: number$1(),
|
|
26847
|
+
read: _enum(["read", "unreadable"]),
|
|
26848
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
26849
|
+
});
|
|
26850
|
+
/**
|
|
26851
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
26852
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
26853
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
26854
|
+
* the date-picker's day dots must not spell them the same.
|
|
26855
|
+
*/
|
|
26856
|
+
var RecordingDaysForDeviceSchema = object({
|
|
26857
|
+
deviceId: number$1(),
|
|
26858
|
+
read: _enum(["read", "unreadable"]),
|
|
26859
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26860
|
+
days: array(number$1()).readonly()
|
|
26861
|
+
});
|
|
26799
26862
|
var RecordingManifestSchema = object({
|
|
26800
26863
|
deviceId: number$1(),
|
|
26801
26864
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27030,6 +27093,13 @@ method(object({
|
|
|
27030
27093
|
}), RecordingAvailabilitySchema, {
|
|
27031
27094
|
kind: "query",
|
|
27032
27095
|
auth: "protected"
|
|
27096
|
+
}), method(object({
|
|
27097
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
27098
|
+
fromMs: number$1(),
|
|
27099
|
+
toMs: number$1()
|
|
27100
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
27101
|
+
kind: "query",
|
|
27102
|
+
auth: "protected"
|
|
27033
27103
|
}), method(object({
|
|
27034
27104
|
deviceId: number$1(),
|
|
27035
27105
|
fromMs: number$1(),
|
|
@@ -27038,6 +27108,14 @@ method(object({
|
|
|
27038
27108
|
}), RecordingDaysSchema, {
|
|
27039
27109
|
kind: "query",
|
|
27040
27110
|
auth: "protected"
|
|
27111
|
+
}), method(object({
|
|
27112
|
+
deviceIds: array(number$1()).min(1).max(200),
|
|
27113
|
+
fromMs: number$1(),
|
|
27114
|
+
toMs: number$1(),
|
|
27115
|
+
tzOffsetMinutes: number$1()
|
|
27116
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
27117
|
+
kind: "query",
|
|
27118
|
+
auth: "protected"
|
|
27041
27119
|
}), method(object({
|
|
27042
27120
|
deviceId: number$1(),
|
|
27043
27121
|
fromMs: number$1(),
|
|
@@ -32235,6 +32313,12 @@ Object.freeze({
|
|
|
32235
32313
|
addonId: null,
|
|
32236
32314
|
access: "view"
|
|
32237
32315
|
},
|
|
32316
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32317
|
+
capName: "pipeline-analytics",
|
|
32318
|
+
capScope: "device",
|
|
32319
|
+
addonId: null,
|
|
32320
|
+
access: "view"
|
|
32321
|
+
},
|
|
32238
32322
|
"pipelineAnalytics.getEventMedia": {
|
|
32239
32323
|
capName: "pipeline-analytics",
|
|
32240
32324
|
capScope: "device",
|
|
@@ -33357,12 +33441,24 @@ Object.freeze({
|
|
|
33357
33441
|
addonId: null,
|
|
33358
33442
|
access: "view"
|
|
33359
33443
|
},
|
|
33444
|
+
"recording.getAvailabilityBatch": {
|
|
33445
|
+
capName: "recording",
|
|
33446
|
+
capScope: "system",
|
|
33447
|
+
addonId: null,
|
|
33448
|
+
access: "view"
|
|
33449
|
+
},
|
|
33360
33450
|
"recording.getDaysWithRecordings": {
|
|
33361
33451
|
capName: "recording",
|
|
33362
33452
|
capScope: "system",
|
|
33363
33453
|
addonId: null,
|
|
33364
33454
|
access: "view"
|
|
33365
33455
|
},
|
|
33456
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33457
|
+
capName: "recording",
|
|
33458
|
+
capScope: "system",
|
|
33459
|
+
addonId: null,
|
|
33460
|
+
access: "view"
|
|
33461
|
+
},
|
|
33366
33462
|
"recording.getDeviceConfig": {
|
|
33367
33463
|
capName: "recording",
|
|
33368
33464
|
capScope: "system",
|
|
@@ -35967,6 +36063,11 @@ Object.freeze({
|
|
|
35967
36063
|
form: "single",
|
|
35968
36064
|
optional: false
|
|
35969
36065
|
}],
|
|
36066
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36067
|
+
name: "deviceIds",
|
|
36068
|
+
form: "array",
|
|
36069
|
+
optional: false
|
|
36070
|
+
}],
|
|
35970
36071
|
"pipelineAnalytics.getEventMedia": [{
|
|
35971
36072
|
name: "deviceId",
|
|
35972
36073
|
form: "single",
|
|
@@ -36382,11 +36483,21 @@ Object.freeze({
|
|
|
36382
36483
|
form: "single",
|
|
36383
36484
|
optional: false
|
|
36384
36485
|
}],
|
|
36486
|
+
"recording.getAvailabilityBatch": [{
|
|
36487
|
+
name: "deviceIds",
|
|
36488
|
+
form: "array",
|
|
36489
|
+
optional: false
|
|
36490
|
+
}],
|
|
36385
36491
|
"recording.getDaysWithRecordings": [{
|
|
36386
36492
|
name: "deviceId",
|
|
36387
36493
|
form: "single",
|
|
36388
36494
|
optional: false
|
|
36389
36495
|
}],
|
|
36496
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36497
|
+
name: "deviceIds",
|
|
36498
|
+
form: "array",
|
|
36499
|
+
optional: false
|
|
36500
|
+
}],
|
|
36390
36501
|
"recording.getDeviceConfig": [{
|
|
36391
36502
|
name: "deviceId",
|
|
36392
36503
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-ai",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.49",
|
|
4
4
|
"description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|