@camstack/addon-ai 0.4.48 → 0.4.50
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 +115 -6
- package/dist/addon.mjs +115 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -19146,6 +19146,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19146
19146
|
deviceId: number$1(),
|
|
19147
19147
|
events: array(KeyEventSchema).readonly()
|
|
19148
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
|
+
});
|
|
19149
19177
|
object({
|
|
19150
19178
|
trackId: string(),
|
|
19151
19179
|
className: string(),
|
|
@@ -19456,12 +19484,12 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
19456
19484
|
since: number$1(),
|
|
19457
19485
|
until: number$1(),
|
|
19458
19486
|
bucketMs: number$1().int().positive()
|
|
19459
|
-
}), array(object({
|
|
19460
|
-
|
|
19461
|
-
|
|
19462
|
-
|
|
19463
|
-
|
|
19464
|
-
})).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({
|
|
19465
19493
|
deviceId: number$1(),
|
|
19466
19494
|
cutoffMs: number$1()
|
|
19467
19495
|
}), object({
|
|
@@ -26771,6 +26799,39 @@ var RecordingDaysSchema = object({
|
|
|
26771
26799
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26772
26800
|
days: array(number$1())
|
|
26773
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
|
+
});
|
|
26774
26835
|
var RecordingManifestSchema = object({
|
|
26775
26836
|
deviceId: number$1(),
|
|
26776
26837
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27005,6 +27066,13 @@ method(object({
|
|
|
27005
27066
|
}), RecordingAvailabilitySchema, {
|
|
27006
27067
|
kind: "query",
|
|
27007
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"
|
|
27008
27076
|
}), method(object({
|
|
27009
27077
|
deviceId: number$1(),
|
|
27010
27078
|
fromMs: number$1(),
|
|
@@ -27013,6 +27081,14 @@ method(object({
|
|
|
27013
27081
|
}), RecordingDaysSchema, {
|
|
27014
27082
|
kind: "query",
|
|
27015
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"
|
|
27016
27092
|
}), method(object({
|
|
27017
27093
|
deviceId: number$1(),
|
|
27018
27094
|
fromMs: number$1(),
|
|
@@ -32210,6 +32286,12 @@ Object.freeze({
|
|
|
32210
32286
|
addonId: null,
|
|
32211
32287
|
access: "view"
|
|
32212
32288
|
},
|
|
32289
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32290
|
+
capName: "pipeline-analytics",
|
|
32291
|
+
capScope: "device",
|
|
32292
|
+
addonId: null,
|
|
32293
|
+
access: "view"
|
|
32294
|
+
},
|
|
32213
32295
|
"pipelineAnalytics.getEventMedia": {
|
|
32214
32296
|
capName: "pipeline-analytics",
|
|
32215
32297
|
capScope: "device",
|
|
@@ -33332,12 +33414,24 @@ Object.freeze({
|
|
|
33332
33414
|
addonId: null,
|
|
33333
33415
|
access: "view"
|
|
33334
33416
|
},
|
|
33417
|
+
"recording.getAvailabilityBatch": {
|
|
33418
|
+
capName: "recording",
|
|
33419
|
+
capScope: "system",
|
|
33420
|
+
addonId: null,
|
|
33421
|
+
access: "view"
|
|
33422
|
+
},
|
|
33335
33423
|
"recording.getDaysWithRecordings": {
|
|
33336
33424
|
capName: "recording",
|
|
33337
33425
|
capScope: "system",
|
|
33338
33426
|
addonId: null,
|
|
33339
33427
|
access: "view"
|
|
33340
33428
|
},
|
|
33429
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33430
|
+
capName: "recording",
|
|
33431
|
+
capScope: "system",
|
|
33432
|
+
addonId: null,
|
|
33433
|
+
access: "view"
|
|
33434
|
+
},
|
|
33341
33435
|
"recording.getDeviceConfig": {
|
|
33342
33436
|
capName: "recording",
|
|
33343
33437
|
capScope: "system",
|
|
@@ -35942,6 +36036,11 @@ Object.freeze({
|
|
|
35942
36036
|
form: "single",
|
|
35943
36037
|
optional: false
|
|
35944
36038
|
}],
|
|
36039
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36040
|
+
name: "deviceIds",
|
|
36041
|
+
form: "array",
|
|
36042
|
+
optional: false
|
|
36043
|
+
}],
|
|
35945
36044
|
"pipelineAnalytics.getEventMedia": [{
|
|
35946
36045
|
name: "deviceId",
|
|
35947
36046
|
form: "single",
|
|
@@ -36357,11 +36456,21 @@ Object.freeze({
|
|
|
36357
36456
|
form: "single",
|
|
36358
36457
|
optional: false
|
|
36359
36458
|
}],
|
|
36459
|
+
"recording.getAvailabilityBatch": [{
|
|
36460
|
+
name: "deviceIds",
|
|
36461
|
+
form: "array",
|
|
36462
|
+
optional: false
|
|
36463
|
+
}],
|
|
36360
36464
|
"recording.getDaysWithRecordings": [{
|
|
36361
36465
|
name: "deviceId",
|
|
36362
36466
|
form: "single",
|
|
36363
36467
|
optional: false
|
|
36364
36468
|
}],
|
|
36469
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36470
|
+
name: "deviceIds",
|
|
36471
|
+
form: "array",
|
|
36472
|
+
optional: false
|
|
36473
|
+
}],
|
|
36365
36474
|
"recording.getDeviceConfig": [{
|
|
36366
36475
|
name: "deviceId",
|
|
36367
36476
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19173,6 +19173,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19173
19173
|
deviceId: number$1(),
|
|
19174
19174
|
events: array(KeyEventSchema).readonly()
|
|
19175
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
|
+
});
|
|
19176
19204
|
object({
|
|
19177
19205
|
trackId: string(),
|
|
19178
19206
|
className: string(),
|
|
@@ -19483,12 +19511,12 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
19483
19511
|
since: number$1(),
|
|
19484
19512
|
until: number$1(),
|
|
19485
19513
|
bucketMs: number$1().int().positive()
|
|
19486
|
-
}), array(object({
|
|
19487
|
-
|
|
19488
|
-
|
|
19489
|
-
|
|
19490
|
-
|
|
19491
|
-
})).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({
|
|
19492
19520
|
deviceId: number$1(),
|
|
19493
19521
|
cutoffMs: number$1()
|
|
19494
19522
|
}), object({
|
|
@@ -26798,6 +26826,39 @@ var RecordingDaysSchema = object({
|
|
|
26798
26826
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26799
26827
|
days: array(number$1())
|
|
26800
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
|
+
});
|
|
26801
26862
|
var RecordingManifestSchema = object({
|
|
26802
26863
|
deviceId: number$1(),
|
|
26803
26864
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27032,6 +27093,13 @@ method(object({
|
|
|
27032
27093
|
}), RecordingAvailabilitySchema, {
|
|
27033
27094
|
kind: "query",
|
|
27034
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"
|
|
27035
27103
|
}), method(object({
|
|
27036
27104
|
deviceId: number$1(),
|
|
27037
27105
|
fromMs: number$1(),
|
|
@@ -27040,6 +27108,14 @@ method(object({
|
|
|
27040
27108
|
}), RecordingDaysSchema, {
|
|
27041
27109
|
kind: "query",
|
|
27042
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"
|
|
27043
27119
|
}), method(object({
|
|
27044
27120
|
deviceId: number$1(),
|
|
27045
27121
|
fromMs: number$1(),
|
|
@@ -32237,6 +32313,12 @@ Object.freeze({
|
|
|
32237
32313
|
addonId: null,
|
|
32238
32314
|
access: "view"
|
|
32239
32315
|
},
|
|
32316
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32317
|
+
capName: "pipeline-analytics",
|
|
32318
|
+
capScope: "device",
|
|
32319
|
+
addonId: null,
|
|
32320
|
+
access: "view"
|
|
32321
|
+
},
|
|
32240
32322
|
"pipelineAnalytics.getEventMedia": {
|
|
32241
32323
|
capName: "pipeline-analytics",
|
|
32242
32324
|
capScope: "device",
|
|
@@ -33359,12 +33441,24 @@ Object.freeze({
|
|
|
33359
33441
|
addonId: null,
|
|
33360
33442
|
access: "view"
|
|
33361
33443
|
},
|
|
33444
|
+
"recording.getAvailabilityBatch": {
|
|
33445
|
+
capName: "recording",
|
|
33446
|
+
capScope: "system",
|
|
33447
|
+
addonId: null,
|
|
33448
|
+
access: "view"
|
|
33449
|
+
},
|
|
33362
33450
|
"recording.getDaysWithRecordings": {
|
|
33363
33451
|
capName: "recording",
|
|
33364
33452
|
capScope: "system",
|
|
33365
33453
|
addonId: null,
|
|
33366
33454
|
access: "view"
|
|
33367
33455
|
},
|
|
33456
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33457
|
+
capName: "recording",
|
|
33458
|
+
capScope: "system",
|
|
33459
|
+
addonId: null,
|
|
33460
|
+
access: "view"
|
|
33461
|
+
},
|
|
33368
33462
|
"recording.getDeviceConfig": {
|
|
33369
33463
|
capName: "recording",
|
|
33370
33464
|
capScope: "system",
|
|
@@ -35969,6 +36063,11 @@ Object.freeze({
|
|
|
35969
36063
|
form: "single",
|
|
35970
36064
|
optional: false
|
|
35971
36065
|
}],
|
|
36066
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36067
|
+
name: "deviceIds",
|
|
36068
|
+
form: "array",
|
|
36069
|
+
optional: false
|
|
36070
|
+
}],
|
|
35972
36071
|
"pipelineAnalytics.getEventMedia": [{
|
|
35973
36072
|
name: "deviceId",
|
|
35974
36073
|
form: "single",
|
|
@@ -36384,11 +36483,21 @@ Object.freeze({
|
|
|
36384
36483
|
form: "single",
|
|
36385
36484
|
optional: false
|
|
36386
36485
|
}],
|
|
36486
|
+
"recording.getAvailabilityBatch": [{
|
|
36487
|
+
name: "deviceIds",
|
|
36488
|
+
form: "array",
|
|
36489
|
+
optional: false
|
|
36490
|
+
}],
|
|
36387
36491
|
"recording.getDaysWithRecordings": [{
|
|
36388
36492
|
name: "deviceId",
|
|
36389
36493
|
form: "single",
|
|
36390
36494
|
optional: false
|
|
36391
36495
|
}],
|
|
36496
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36497
|
+
name: "deviceIds",
|
|
36498
|
+
form: "array",
|
|
36499
|
+
optional: false
|
|
36500
|
+
}],
|
|
36392
36501
|
"recording.getDeviceConfig": [{
|
|
36393
36502
|
name: "deviceId",
|
|
36394
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.50",
|
|
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",
|