@camstack/addon-provider-reolink 1.2.179 → 1.2.180
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 +154 -1
- package/dist/addon.mjs +154 -1
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5413,7 +5413,7 @@ var ZodIssueCode = {
|
|
|
5413
5413
|
var ZodFirstPartyTypeKind;
|
|
5414
5414
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5415
5415
|
//#endregion
|
|
5416
|
-
//#region ../types/dist/sleep-
|
|
5416
|
+
//#region ../types/dist/sleep-DujUvOcb.mjs
|
|
5417
5417
|
/**
|
|
5418
5418
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5419
5419
|
* window to float samples (D455).
|
|
@@ -24202,6 +24202,9 @@ var RetrainExportFilterSchema = object({
|
|
|
24202
24202
|
frameIds: array(string()).max(2e4).optional(),
|
|
24203
24203
|
/** Only frames in at least one of these named collections. */
|
|
24204
24204
|
collectionIds: array(string()).max(200).optional(),
|
|
24205
|
+
/** Exactly the frames of this dataset version (and its completeOnly). An
|
|
24206
|
+
* unknown id selects nothing. */
|
|
24207
|
+
datasetVersionId: string().optional(),
|
|
24205
24208
|
batchId: string().optional(),
|
|
24206
24209
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
24207
24210
|
completeOnly: boolean().optional()
|
|
@@ -24369,6 +24372,67 @@ var RetrainLlmAssistResultSchema = discriminatedUnion("kind", [object({
|
|
|
24369
24372
|
]),
|
|
24370
24373
|
detail: string().optional()
|
|
24371
24374
|
})]);
|
|
24375
|
+
/** What a dataset version is cut from. Every field narrows. */
|
|
24376
|
+
var RetrainDatasetSelectionSchema = object({
|
|
24377
|
+
deviceIds: array(number()).readonly().optional(),
|
|
24378
|
+
collectionIds: array(string()).max(200).readonly().optional(),
|
|
24379
|
+
frameIds: array(string()).max(2e4).readonly().optional()
|
|
24380
|
+
});
|
|
24381
|
+
/** The counts a dataset is judged by. */
|
|
24382
|
+
var RetrainDatasetStatsSchema = object({
|
|
24383
|
+
frames: number().int(),
|
|
24384
|
+
completeFrames: number().int(),
|
|
24385
|
+
/** `completeFrames / frames`, 0..1. */
|
|
24386
|
+
completeness: number(),
|
|
24387
|
+
/** Boxes to learn (model errors excluded). */
|
|
24388
|
+
subjects: number().int(),
|
|
24389
|
+
modelErrors: number().int(),
|
|
24390
|
+
/** Complete frames with no subject. */
|
|
24391
|
+
hardNegatives: number().int(),
|
|
24392
|
+
/** Subjects per class × camera × day/night. */
|
|
24393
|
+
cells: array(object({
|
|
24394
|
+
macroClass: string(),
|
|
24395
|
+
deviceId: number(),
|
|
24396
|
+
lighting: _enum([
|
|
24397
|
+
"day",
|
|
24398
|
+
"night",
|
|
24399
|
+
"unknown"
|
|
24400
|
+
]),
|
|
24401
|
+
subjects: number().int(),
|
|
24402
|
+
frames: number().int()
|
|
24403
|
+
})).readonly(),
|
|
24404
|
+
cameras: array(object({
|
|
24405
|
+
deviceId: number(),
|
|
24406
|
+
frames: number().int(),
|
|
24407
|
+
completeFrames: number().int()
|
|
24408
|
+
})).readonly()
|
|
24409
|
+
});
|
|
24410
|
+
/** An immutable dataset version, without its frame list. */
|
|
24411
|
+
var RetrainDatasetVersionSchema = object({
|
|
24412
|
+
id: string(),
|
|
24413
|
+
name: string(),
|
|
24414
|
+
createdAt: number(),
|
|
24415
|
+
selection: RetrainDatasetSelectionSchema,
|
|
24416
|
+
layout: RetrainExportLayoutSchema,
|
|
24417
|
+
completeOnly: boolean(),
|
|
24418
|
+
frameCount: number().int(),
|
|
24419
|
+
/** sha256 of what the frames taught when the version was frozen. */
|
|
24420
|
+
annotationHash: string(),
|
|
24421
|
+
/** The export manifest schema the version was cut under. */
|
|
24422
|
+
manifestSchema: string(),
|
|
24423
|
+
stats: RetrainDatasetStatsSchema
|
|
24424
|
+
});
|
|
24425
|
+
var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
|
|
24426
|
+
kind: literal("created"),
|
|
24427
|
+
version: RetrainDatasetVersionSchema
|
|
24428
|
+
}), object({
|
|
24429
|
+
kind: literal("refused"),
|
|
24430
|
+
reason: _enum([
|
|
24431
|
+
"empty-name",
|
|
24432
|
+
"duplicate-name",
|
|
24433
|
+
"no-frames"
|
|
24434
|
+
])
|
|
24435
|
+
})]);
|
|
24372
24436
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24373
24437
|
var RetrainTransitionResultSchema = object({
|
|
24374
24438
|
trackId: string(),
|
|
@@ -25158,6 +25222,36 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
25158
25222
|
kind: "mutation",
|
|
25159
25223
|
auth: "admin",
|
|
25160
25224
|
timeoutMs: 60 * 6e4
|
|
25225
|
+
}), method(object({
|
|
25226
|
+
selection: RetrainDatasetSelectionSchema,
|
|
25227
|
+
completeOnly: boolean().optional()
|
|
25228
|
+
}), RetrainDatasetStatsSchema, {
|
|
25229
|
+
kind: "query",
|
|
25230
|
+
auth: "admin"
|
|
25231
|
+
}), method(object({
|
|
25232
|
+
name: string().max(120),
|
|
25233
|
+
selection: RetrainDatasetSelectionSchema,
|
|
25234
|
+
layout: RetrainExportLayoutSchema,
|
|
25235
|
+
completeOnly: boolean()
|
|
25236
|
+
}), CreateRetrainDatasetVersionResultSchema, {
|
|
25237
|
+
kind: "mutation",
|
|
25238
|
+
auth: "admin",
|
|
25239
|
+
timeoutMs: 12e4
|
|
25240
|
+
}), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
|
|
25241
|
+
kind: "query",
|
|
25242
|
+
auth: "admin"
|
|
25243
|
+
}), method(object({ id: string() }), object({ deleted: boolean() }), {
|
|
25244
|
+
kind: "mutation",
|
|
25245
|
+
auth: "admin"
|
|
25246
|
+
}), method(object({ id: string() }), object({
|
|
25247
|
+
found: boolean(),
|
|
25248
|
+
annotationHash: string(),
|
|
25249
|
+
matches: boolean(),
|
|
25250
|
+
missingFrames: number().int()
|
|
25251
|
+
}), {
|
|
25252
|
+
kind: "query",
|
|
25253
|
+
auth: "admin",
|
|
25254
|
+
timeoutMs: 12e4
|
|
25161
25255
|
}), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
|
|
25162
25256
|
kind: "query",
|
|
25163
25257
|
auth: "admin"
|
|
@@ -48961,6 +49055,12 @@ Object.freeze({
|
|
|
48961
49055
|
addonId: null,
|
|
48962
49056
|
access: "create"
|
|
48963
49057
|
},
|
|
49058
|
+
"pipelineAnalytics.createRetrainDatasetVersion": {
|
|
49059
|
+
capName: "pipeline-analytics",
|
|
49060
|
+
capScope: "device",
|
|
49061
|
+
addonId: null,
|
|
49062
|
+
access: "create"
|
|
49063
|
+
},
|
|
48964
49064
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
48965
49065
|
capName: "pipeline-analytics",
|
|
48966
49066
|
capScope: "device",
|
|
@@ -48973,6 +49073,12 @@ Object.freeze({
|
|
|
48973
49073
|
addonId: null,
|
|
48974
49074
|
access: "delete"
|
|
48975
49075
|
},
|
|
49076
|
+
"pipelineAnalytics.deleteRetrainDatasetVersion": {
|
|
49077
|
+
capName: "pipeline-analytics",
|
|
49078
|
+
capScope: "device",
|
|
49079
|
+
addonId: null,
|
|
49080
|
+
access: "delete"
|
|
49081
|
+
},
|
|
48976
49082
|
"pipelineAnalytics.deleteTracks": {
|
|
48977
49083
|
capName: "pipeline-analytics",
|
|
48978
49084
|
capScope: "device",
|
|
@@ -49195,6 +49301,12 @@ Object.freeze({
|
|
|
49195
49301
|
addonId: null,
|
|
49196
49302
|
access: "view"
|
|
49197
49303
|
},
|
|
49304
|
+
"pipelineAnalytics.listRetrainDatasetVersions": {
|
|
49305
|
+
capName: "pipeline-analytics",
|
|
49306
|
+
capScope: "device",
|
|
49307
|
+
addonId: null,
|
|
49308
|
+
access: "view"
|
|
49309
|
+
},
|
|
49198
49310
|
"pipelineAnalytics.listRetrainFrames": {
|
|
49199
49311
|
capName: "pipeline-analytics",
|
|
49200
49312
|
capScope: "device",
|
|
@@ -49237,6 +49349,12 @@ Object.freeze({
|
|
|
49237
49349
|
addonId: null,
|
|
49238
49350
|
access: "create"
|
|
49239
49351
|
},
|
|
49352
|
+
"pipelineAnalytics.previewRetrainDataset": {
|
|
49353
|
+
capName: "pipeline-analytics",
|
|
49354
|
+
capScope: "device",
|
|
49355
|
+
addonId: null,
|
|
49356
|
+
access: "view"
|
|
49357
|
+
},
|
|
49240
49358
|
"pipelineAnalytics.proposeRetrainAnnotations": {
|
|
49241
49359
|
capName: "pipeline-analytics",
|
|
49242
49360
|
capScope: "device",
|
|
@@ -49375,6 +49493,12 @@ Object.freeze({
|
|
|
49375
49493
|
addonId: null,
|
|
49376
49494
|
access: "create"
|
|
49377
49495
|
},
|
|
49496
|
+
"pipelineAnalytics.verifyRetrainDatasetVersion": {
|
|
49497
|
+
capName: "pipeline-analytics",
|
|
49498
|
+
capScope: "device",
|
|
49499
|
+
addonId: null,
|
|
49500
|
+
access: "view"
|
|
49501
|
+
},
|
|
49378
49502
|
"pipelineAnalytics.wipeAllAnalytics": {
|
|
49379
49503
|
capName: "pipeline-analytics",
|
|
49380
49504
|
capScope: "device",
|
|
@@ -167229,6 +167353,22 @@ function accessoryKindsFor(sliceProbed, sliceFlags, deviceCache) {
|
|
|
167229
167353
|
const flags = resolveAccessoryProbeFlags(sliceProbed, sliceFlags, deviceCache);
|
|
167230
167354
|
return ACCESSORY_FLAGS.filter(([flag]) => flags[flag] === true).map(([, kind]) => kind);
|
|
167231
167355
|
}
|
|
167356
|
+
/**
|
|
167357
|
+
* The probe flags every probe-gated decision should read (PTZ, intercom,
|
|
167358
|
+
* doorbell, autotrack caps, the device features, accessory children):
|
|
167359
|
+
* the live slice once this session has probed; otherwise the slice
|
|
167360
|
+
* overlaid with the flags persisted by the last successful probe. A
|
|
167361
|
+
* battery camera asleep at boot skips its probe, so without the overlay
|
|
167362
|
+
* its probe-gated caps vanish across every provider restart. With no
|
|
167363
|
+
* persisted probe stamp, the slice is returned unchanged.
|
|
167364
|
+
*/
|
|
167365
|
+
function effectiveProbeFlags(sliceProbed, sliceFlags, deviceCache) {
|
|
167366
|
+
if (sliceProbed || deviceCache?.probedAt === void 0) return sliceFlags;
|
|
167367
|
+
return {
|
|
167368
|
+
...sliceFlags,
|
|
167369
|
+
...resolveAccessoryProbeFlags(false, {}, deviceCache)
|
|
167370
|
+
};
|
|
167371
|
+
}
|
|
167232
167372
|
//#endregion
|
|
167233
167373
|
//#region src/metadata-populator.ts
|
|
167234
167374
|
var EXTENDED_INFO_TAGS = [
|
|
@@ -169180,6 +169320,19 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
|
|
|
169180
169320
|
* underlying state. The set is small (≤6 entries) so allocation cost
|
|
169181
169321
|
* is negligible vs the staleness of caching.
|
|
169182
169322
|
*/
|
|
169323
|
+
/**
|
|
169324
|
+
* Probe flags with the persisted fallback: until this session has probed
|
|
169325
|
+
* (a battery camera asleep at boot skips `onProbe`), the flags of the last
|
|
169326
|
+
* successful probe stored in `deviceCache` stand in for the empty
|
|
169327
|
+
* `feature-probe` slice. Every probe-gated read — PTZ / intercom /
|
|
169328
|
+
* doorbell / autotrack registration, `features`, accessory children —
|
|
169329
|
+
* goes through here, so a sleeping camera keeps those caps across a
|
|
169330
|
+
* provider restart. `config` is read defensively: the base constructor
|
|
169331
|
+
* may read flags before this class's fields exist.
|
|
169332
|
+
*/
|
|
169333
|
+
getProbeFlags() {
|
|
169334
|
+
return effectiveProbeFlags(this.hasProbed(), super.getProbeFlags(), this.config?.get("deviceCache"));
|
|
169335
|
+
}
|
|
169183
169336
|
get features() {
|
|
169184
169337
|
return deriveReolinkCameraFeatures({
|
|
169185
169338
|
probe: this.getProbeFlags(),
|
package/dist/addon.mjs
CHANGED
|
@@ -5405,7 +5405,7 @@ var ZodIssueCode = {
|
|
|
5405
5405
|
var ZodFirstPartyTypeKind;
|
|
5406
5406
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5407
5407
|
//#endregion
|
|
5408
|
-
//#region ../types/dist/sleep-
|
|
5408
|
+
//#region ../types/dist/sleep-DujUvOcb.mjs
|
|
5409
5409
|
/**
|
|
5410
5410
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5411
5411
|
* window to float samples (D455).
|
|
@@ -24194,6 +24194,9 @@ var RetrainExportFilterSchema = object({
|
|
|
24194
24194
|
frameIds: array(string()).max(2e4).optional(),
|
|
24195
24195
|
/** Only frames in at least one of these named collections. */
|
|
24196
24196
|
collectionIds: array(string()).max(200).optional(),
|
|
24197
|
+
/** Exactly the frames of this dataset version (and its completeOnly). An
|
|
24198
|
+
* unknown id selects nothing. */
|
|
24199
|
+
datasetVersionId: string().optional(),
|
|
24197
24200
|
batchId: string().optional(),
|
|
24198
24201
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
24199
24202
|
completeOnly: boolean().optional()
|
|
@@ -24361,6 +24364,67 @@ var RetrainLlmAssistResultSchema = discriminatedUnion("kind", [object({
|
|
|
24361
24364
|
]),
|
|
24362
24365
|
detail: string().optional()
|
|
24363
24366
|
})]);
|
|
24367
|
+
/** What a dataset version is cut from. Every field narrows. */
|
|
24368
|
+
var RetrainDatasetSelectionSchema = object({
|
|
24369
|
+
deviceIds: array(number()).readonly().optional(),
|
|
24370
|
+
collectionIds: array(string()).max(200).readonly().optional(),
|
|
24371
|
+
frameIds: array(string()).max(2e4).readonly().optional()
|
|
24372
|
+
});
|
|
24373
|
+
/** The counts a dataset is judged by. */
|
|
24374
|
+
var RetrainDatasetStatsSchema = object({
|
|
24375
|
+
frames: number().int(),
|
|
24376
|
+
completeFrames: number().int(),
|
|
24377
|
+
/** `completeFrames / frames`, 0..1. */
|
|
24378
|
+
completeness: number(),
|
|
24379
|
+
/** Boxes to learn (model errors excluded). */
|
|
24380
|
+
subjects: number().int(),
|
|
24381
|
+
modelErrors: number().int(),
|
|
24382
|
+
/** Complete frames with no subject. */
|
|
24383
|
+
hardNegatives: number().int(),
|
|
24384
|
+
/** Subjects per class × camera × day/night. */
|
|
24385
|
+
cells: array(object({
|
|
24386
|
+
macroClass: string(),
|
|
24387
|
+
deviceId: number(),
|
|
24388
|
+
lighting: _enum([
|
|
24389
|
+
"day",
|
|
24390
|
+
"night",
|
|
24391
|
+
"unknown"
|
|
24392
|
+
]),
|
|
24393
|
+
subjects: number().int(),
|
|
24394
|
+
frames: number().int()
|
|
24395
|
+
})).readonly(),
|
|
24396
|
+
cameras: array(object({
|
|
24397
|
+
deviceId: number(),
|
|
24398
|
+
frames: number().int(),
|
|
24399
|
+
completeFrames: number().int()
|
|
24400
|
+
})).readonly()
|
|
24401
|
+
});
|
|
24402
|
+
/** An immutable dataset version, without its frame list. */
|
|
24403
|
+
var RetrainDatasetVersionSchema = object({
|
|
24404
|
+
id: string(),
|
|
24405
|
+
name: string(),
|
|
24406
|
+
createdAt: number(),
|
|
24407
|
+
selection: RetrainDatasetSelectionSchema,
|
|
24408
|
+
layout: RetrainExportLayoutSchema,
|
|
24409
|
+
completeOnly: boolean(),
|
|
24410
|
+
frameCount: number().int(),
|
|
24411
|
+
/** sha256 of what the frames taught when the version was frozen. */
|
|
24412
|
+
annotationHash: string(),
|
|
24413
|
+
/** The export manifest schema the version was cut under. */
|
|
24414
|
+
manifestSchema: string(),
|
|
24415
|
+
stats: RetrainDatasetStatsSchema
|
|
24416
|
+
});
|
|
24417
|
+
var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
|
|
24418
|
+
kind: literal("created"),
|
|
24419
|
+
version: RetrainDatasetVersionSchema
|
|
24420
|
+
}), object({
|
|
24421
|
+
kind: literal("refused"),
|
|
24422
|
+
reason: _enum([
|
|
24423
|
+
"empty-name",
|
|
24424
|
+
"duplicate-name",
|
|
24425
|
+
"no-frames"
|
|
24426
|
+
])
|
|
24427
|
+
})]);
|
|
24364
24428
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24365
24429
|
var RetrainTransitionResultSchema = object({
|
|
24366
24430
|
trackId: string(),
|
|
@@ -25150,6 +25214,36 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
25150
25214
|
kind: "mutation",
|
|
25151
25215
|
auth: "admin",
|
|
25152
25216
|
timeoutMs: 60 * 6e4
|
|
25217
|
+
}), method(object({
|
|
25218
|
+
selection: RetrainDatasetSelectionSchema,
|
|
25219
|
+
completeOnly: boolean().optional()
|
|
25220
|
+
}), RetrainDatasetStatsSchema, {
|
|
25221
|
+
kind: "query",
|
|
25222
|
+
auth: "admin"
|
|
25223
|
+
}), method(object({
|
|
25224
|
+
name: string().max(120),
|
|
25225
|
+
selection: RetrainDatasetSelectionSchema,
|
|
25226
|
+
layout: RetrainExportLayoutSchema,
|
|
25227
|
+
completeOnly: boolean()
|
|
25228
|
+
}), CreateRetrainDatasetVersionResultSchema, {
|
|
25229
|
+
kind: "mutation",
|
|
25230
|
+
auth: "admin",
|
|
25231
|
+
timeoutMs: 12e4
|
|
25232
|
+
}), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
|
|
25233
|
+
kind: "query",
|
|
25234
|
+
auth: "admin"
|
|
25235
|
+
}), method(object({ id: string() }), object({ deleted: boolean() }), {
|
|
25236
|
+
kind: "mutation",
|
|
25237
|
+
auth: "admin"
|
|
25238
|
+
}), method(object({ id: string() }), object({
|
|
25239
|
+
found: boolean(),
|
|
25240
|
+
annotationHash: string(),
|
|
25241
|
+
matches: boolean(),
|
|
25242
|
+
missingFrames: number().int()
|
|
25243
|
+
}), {
|
|
25244
|
+
kind: "query",
|
|
25245
|
+
auth: "admin",
|
|
25246
|
+
timeoutMs: 12e4
|
|
25153
25247
|
}), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
|
|
25154
25248
|
kind: "query",
|
|
25155
25249
|
auth: "admin"
|
|
@@ -48953,6 +49047,12 @@ Object.freeze({
|
|
|
48953
49047
|
addonId: null,
|
|
48954
49048
|
access: "create"
|
|
48955
49049
|
},
|
|
49050
|
+
"pipelineAnalytics.createRetrainDatasetVersion": {
|
|
49051
|
+
capName: "pipeline-analytics",
|
|
49052
|
+
capScope: "device",
|
|
49053
|
+
addonId: null,
|
|
49054
|
+
access: "create"
|
|
49055
|
+
},
|
|
48956
49056
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
48957
49057
|
capName: "pipeline-analytics",
|
|
48958
49058
|
capScope: "device",
|
|
@@ -48965,6 +49065,12 @@ Object.freeze({
|
|
|
48965
49065
|
addonId: null,
|
|
48966
49066
|
access: "delete"
|
|
48967
49067
|
},
|
|
49068
|
+
"pipelineAnalytics.deleteRetrainDatasetVersion": {
|
|
49069
|
+
capName: "pipeline-analytics",
|
|
49070
|
+
capScope: "device",
|
|
49071
|
+
addonId: null,
|
|
49072
|
+
access: "delete"
|
|
49073
|
+
},
|
|
48968
49074
|
"pipelineAnalytics.deleteTracks": {
|
|
48969
49075
|
capName: "pipeline-analytics",
|
|
48970
49076
|
capScope: "device",
|
|
@@ -49187,6 +49293,12 @@ Object.freeze({
|
|
|
49187
49293
|
addonId: null,
|
|
49188
49294
|
access: "view"
|
|
49189
49295
|
},
|
|
49296
|
+
"pipelineAnalytics.listRetrainDatasetVersions": {
|
|
49297
|
+
capName: "pipeline-analytics",
|
|
49298
|
+
capScope: "device",
|
|
49299
|
+
addonId: null,
|
|
49300
|
+
access: "view"
|
|
49301
|
+
},
|
|
49190
49302
|
"pipelineAnalytics.listRetrainFrames": {
|
|
49191
49303
|
capName: "pipeline-analytics",
|
|
49192
49304
|
capScope: "device",
|
|
@@ -49229,6 +49341,12 @@ Object.freeze({
|
|
|
49229
49341
|
addonId: null,
|
|
49230
49342
|
access: "create"
|
|
49231
49343
|
},
|
|
49344
|
+
"pipelineAnalytics.previewRetrainDataset": {
|
|
49345
|
+
capName: "pipeline-analytics",
|
|
49346
|
+
capScope: "device",
|
|
49347
|
+
addonId: null,
|
|
49348
|
+
access: "view"
|
|
49349
|
+
},
|
|
49232
49350
|
"pipelineAnalytics.proposeRetrainAnnotations": {
|
|
49233
49351
|
capName: "pipeline-analytics",
|
|
49234
49352
|
capScope: "device",
|
|
@@ -49367,6 +49485,12 @@ Object.freeze({
|
|
|
49367
49485
|
addonId: null,
|
|
49368
49486
|
access: "create"
|
|
49369
49487
|
},
|
|
49488
|
+
"pipelineAnalytics.verifyRetrainDatasetVersion": {
|
|
49489
|
+
capName: "pipeline-analytics",
|
|
49490
|
+
capScope: "device",
|
|
49491
|
+
addonId: null,
|
|
49492
|
+
access: "view"
|
|
49493
|
+
},
|
|
49370
49494
|
"pipelineAnalytics.wipeAllAnalytics": {
|
|
49371
49495
|
capName: "pipeline-analytics",
|
|
49372
49496
|
capScope: "device",
|
|
@@ -167221,6 +167345,22 @@ function accessoryKindsFor(sliceProbed, sliceFlags, deviceCache) {
|
|
|
167221
167345
|
const flags = resolveAccessoryProbeFlags(sliceProbed, sliceFlags, deviceCache);
|
|
167222
167346
|
return ACCESSORY_FLAGS.filter(([flag]) => flags[flag] === true).map(([, kind]) => kind);
|
|
167223
167347
|
}
|
|
167348
|
+
/**
|
|
167349
|
+
* The probe flags every probe-gated decision should read (PTZ, intercom,
|
|
167350
|
+
* doorbell, autotrack caps, the device features, accessory children):
|
|
167351
|
+
* the live slice once this session has probed; otherwise the slice
|
|
167352
|
+
* overlaid with the flags persisted by the last successful probe. A
|
|
167353
|
+
* battery camera asleep at boot skips its probe, so without the overlay
|
|
167354
|
+
* its probe-gated caps vanish across every provider restart. With no
|
|
167355
|
+
* persisted probe stamp, the slice is returned unchanged.
|
|
167356
|
+
*/
|
|
167357
|
+
function effectiveProbeFlags(sliceProbed, sliceFlags, deviceCache) {
|
|
167358
|
+
if (sliceProbed || deviceCache?.probedAt === void 0) return sliceFlags;
|
|
167359
|
+
return {
|
|
167360
|
+
...sliceFlags,
|
|
167361
|
+
...resolveAccessoryProbeFlags(false, {}, deviceCache)
|
|
167362
|
+
};
|
|
167363
|
+
}
|
|
167224
167364
|
//#endregion
|
|
167225
167365
|
//#region src/metadata-populator.ts
|
|
167226
167366
|
var EXTENDED_INFO_TAGS = [
|
|
@@ -169172,6 +169312,19 @@ var ReolinkCamera = class ReolinkCamera extends BaseDevice {
|
|
|
169172
169312
|
* underlying state. The set is small (≤6 entries) so allocation cost
|
|
169173
169313
|
* is negligible vs the staleness of caching.
|
|
169174
169314
|
*/
|
|
169315
|
+
/**
|
|
169316
|
+
* Probe flags with the persisted fallback: until this session has probed
|
|
169317
|
+
* (a battery camera asleep at boot skips `onProbe`), the flags of the last
|
|
169318
|
+
* successful probe stored in `deviceCache` stand in for the empty
|
|
169319
|
+
* `feature-probe` slice. Every probe-gated read — PTZ / intercom /
|
|
169320
|
+
* doorbell / autotrack registration, `features`, accessory children —
|
|
169321
|
+
* goes through here, so a sleeping camera keeps those caps across a
|
|
169322
|
+
* provider restart. `config` is read defensively: the base constructor
|
|
169323
|
+
* may read flags before this class's fields exist.
|
|
169324
|
+
*/
|
|
169325
|
+
getProbeFlags() {
|
|
169326
|
+
return effectiveProbeFlags(this.hasProbed(), super.getProbeFlags(), this.config?.get("deviceCache"));
|
|
169327
|
+
}
|
|
169175
169328
|
get features() {
|
|
169176
169329
|
return deriveReolinkCameraFeatures({
|
|
169177
169330
|
probe: this.getProbeFlags(),
|