@camstack/addon-agent-ui 1.2.133 → 1.2.135
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 +86 -65
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5361,7 +5361,7 @@ var ZodIssueCode = {
|
|
|
5361
5361
|
var ZodFirstPartyTypeKind;
|
|
5362
5362
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5363
5363
|
//#endregion
|
|
5364
|
-
//#region ../types/dist/sleep-
|
|
5364
|
+
//#region ../types/dist/sleep-CaB_hL5g.mjs
|
|
5365
5365
|
/**
|
|
5366
5366
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5367
5367
|
* window to float samples (D455).
|
|
@@ -7364,6 +7364,8 @@ var EVENT_OWNER_TYPES = [
|
|
|
7364
7364
|
* nothing failing until a caller asked.
|
|
7365
7365
|
*/
|
|
7366
7366
|
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7367
|
+
/** The same list as a Zod enum, for the cap input that carries it. */
|
|
7368
|
+
var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
|
|
7367
7369
|
new Set(EVENT_OWNER_TYPES);
|
|
7368
7370
|
var EncodeProfileSchema = object({
|
|
7369
7371
|
video: object({
|
|
@@ -14058,8 +14060,6 @@ method(object({
|
|
|
14058
14060
|
deviceId: number(),
|
|
14059
14061
|
capName: string(),
|
|
14060
14062
|
wrapperAddonId: string(),
|
|
14061
|
-
/** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
|
|
14062
|
-
sourceId: string().optional(),
|
|
14063
14063
|
active: boolean()
|
|
14064
14064
|
}), _void(), {
|
|
14065
14065
|
kind: "mutation",
|
|
@@ -20970,7 +20970,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20970
20970
|
ownerType: EventOwnerTypeSchema,
|
|
20971
20971
|
eventId: number().int(),
|
|
20972
20972
|
deviceId: number()
|
|
20973
|
-
}), array(MediaFileInfoSchema).readonly()), method(
|
|
20973
|
+
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
20974
|
+
deviceId: number(),
|
|
20975
|
+
ownerKind: MediaPresenceOwnerKindSchema,
|
|
20976
|
+
ownerIds: array(string()).max(5e3)
|
|
20977
|
+
}), array(string()).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
20974
20978
|
kind: "mutation",
|
|
20975
20979
|
auth: "admin"
|
|
20976
20980
|
}), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
|
|
@@ -23964,6 +23968,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
|
|
|
23964
23968
|
kind: "mutation",
|
|
23965
23969
|
auth: "admin"
|
|
23966
23970
|
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
23971
|
+
_enum([
|
|
23972
|
+
"queue-full",
|
|
23973
|
+
"camera-backoff",
|
|
23974
|
+
"sleeping",
|
|
23975
|
+
"camera-refused",
|
|
23976
|
+
"no-keyframe",
|
|
23977
|
+
"no-catalog-row",
|
|
23978
|
+
"unsupported",
|
|
23979
|
+
"unknown-device",
|
|
23980
|
+
"uid-missing"
|
|
23981
|
+
]);
|
|
23982
|
+
_enum(["deferred", "final"]);
|
|
23967
23983
|
var ClipSchema = object({
|
|
23968
23984
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
23969
23985
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -24114,7 +24130,25 @@ var ClipSchema = object({
|
|
|
24114
24130
|
*/
|
|
24115
24131
|
playable: boolean().optional(),
|
|
24116
24132
|
/** Why {@link playable} is false, verbatim (`no-file-for-window`). */
|
|
24117
|
-
unplayableReason: string().optional()
|
|
24133
|
+
unplayableReason: string().optional(),
|
|
24134
|
+
/**
|
|
24135
|
+
* This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
|
|
24136
|
+
* is not its end.
|
|
24137
|
+
*
|
|
24138
|
+
* Absent — the common case — means the row is closed and its `endMs` is the
|
|
24139
|
+
* end of the recording. Present and `true` means the source told us the file
|
|
24140
|
+
* has no end yet, and the `endMs` we carry is whatever the camera's index
|
|
24141
|
+
* entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
|
|
24142
|
+
* 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
|
|
24143
|
+
* of 19:29:56 and STILL reported it eight minutes later, while the file went
|
|
24144
|
+
* on growing. A surface that drew 29 s there was lying about a clip that
|
|
24145
|
+
* plays for minutes, on the one row the operator looks at first.
|
|
24146
|
+
*
|
|
24147
|
+
* `endMs` is deliberately still a number: it is the best bound anything has
|
|
24148
|
+
* for a mint window or a byte fetch, and every consumer already requires it.
|
|
24149
|
+
* This flag says what it is WORTH, and a duration is not drawn from it.
|
|
24150
|
+
*/
|
|
24151
|
+
inProgress: boolean().optional()
|
|
24118
24152
|
});
|
|
24119
24153
|
var ClipPlaybackSchema = object({
|
|
24120
24154
|
/**
|
|
@@ -24197,59 +24231,17 @@ var ClipSourceSchema = object({
|
|
|
24197
24231
|
* alternative — a `native:reolink:* → provider-reolink` table inside the
|
|
24198
24232
|
* widget — is a second authority on provider identity living in the one
|
|
24199
24233
|
* package with no business knowing it, wrong the day a third source appears
|
|
24200
|
-
* (D557). One addon may serve SEVERAL sources
|
|
24201
|
-
*
|
|
24202
|
-
*
|
|
24203
|
-
*
|
|
24234
|
+
* (D557). One addon may serve SEVERAL sources, which is why the per-device
|
|
24235
|
+
* switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
|
|
24236
|
+
* served a hub child two of them until the two views were measured to be one
|
|
24237
|
+
* store read twice (D555) and then read ONE way (D565).
|
|
24204
24238
|
*
|
|
24205
24239
|
* Optional for version skew only. The collection dispatcher stamps it from
|
|
24206
24240
|
* the registry, so a row that travelled through the fan-out carries the
|
|
24207
24241
|
* authoritative id whatever the provider filled in.
|
|
24208
24242
|
*/
|
|
24209
24243
|
addonId: string().optional(),
|
|
24210
|
-
|
|
24211
|
-
* Which API this source resolved to FOR THIS CAMERA, when it has a choice.
|
|
24212
|
-
*
|
|
24213
|
-
* A source may cover one store through more than one surface — the Reolink
|
|
24214
|
-
* provider reads a hub child through the parent's event log and a standalone
|
|
24215
|
-
* through its own file list, because that is what each camera answers. The
|
|
24216
|
-
* CHOICE is the provider's, made from what the camera is, and is never a row
|
|
24217
|
-
* the operator has to understand; but it is REPORTED, because a source that
|
|
24218
|
-
* silently reads a different API on two cameras and then behaves differently
|
|
24219
|
-
* is the thing nobody can debug later. Absent when the source has only one
|
|
24220
|
-
* way to read its store.
|
|
24221
|
-
*/
|
|
24222
|
-
via: string().optional(),
|
|
24223
|
-
availability: ClipSourceAvailabilitySchema,
|
|
24224
|
-
/**
|
|
24225
|
-
* The operator switched this source OFF for this camera.
|
|
24226
|
-
*
|
|
24227
|
-
* Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
|
|
24228
|
-
* vocabulary. That enum models what the source CAN do — a sleeping camera, an
|
|
24229
|
-
* unmounted card, an index that disagrees with its own calendar — and a
|
|
24230
|
-
* switched-off source could answer perfectly well; the operator decided it
|
|
24231
|
-
* should not. Folding the choice in is how `disabled` and `broken` stop being
|
|
24232
|
-
* distinguishable, which is the D62 rule this repo has already paid for twice:
|
|
24233
|
-
* an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
|
|
24234
|
-
* and disabled must never look like broken. It is also what lets every
|
|
24235
|
-
* exhaustive consumer of the availability enum keep compiling.
|
|
24236
|
-
*
|
|
24237
|
-
* A switched-off source contributes NO clips (`listClips` never calls it) and
|
|
24238
|
-
* its row carries no `catalogAsOf`: nothing confirms a catalog it is not
|
|
24239
|
-
* allowed to serve, and a frozen age that can only grow draws a stalling
|
|
24240
|
-
* source rather than an off switch.
|
|
24241
|
-
*
|
|
24242
|
-
* The row survives BECAUSE it is the control the operator switches the source
|
|
24243
|
-
* back on from — D554 decision 4's rule ("a source that cannot answer
|
|
24244
|
-
* produces a ROW, not an absence") applied to the one case D556 carved out of
|
|
24245
|
-
* it, and D557's own kept property ("a source is never hidden, only its
|
|
24246
|
-
* rows"). Absent means on.
|
|
24247
|
-
*
|
|
24248
|
-
* A provider never sets this — like {@link ClipSourceSchema.addonId} it is
|
|
24249
|
-
* stamped by the collection dispatcher, which holds the registry's projection
|
|
24250
|
-
* of the persisted authority (D556) and is the only place that knows it.
|
|
24251
|
-
*/
|
|
24252
|
-
switchedOff: boolean().optional()
|
|
24244
|
+
availability: ClipSourceAvailabilitySchema
|
|
24253
24245
|
});
|
|
24254
24246
|
DeviceType.Camera, method(object({
|
|
24255
24247
|
deviceId: number(),
|
|
@@ -24258,22 +24250,40 @@ DeviceType.Camera, method(object({
|
|
|
24258
24250
|
limit: number().int().positive().optional(),
|
|
24259
24251
|
/**
|
|
24260
24252
|
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
24261
|
-
* carries, never a source id and never a list.
|
|
24262
|
-
*
|
|
24263
|
-
*
|
|
24264
|
-
*
|
|
24265
|
-
*
|
|
24266
|
-
*
|
|
24267
|
-
*
|
|
24253
|
+
* carries, never a source id and never a list. **Required** (D554 amended).
|
|
24254
|
+
*
|
|
24255
|
+
* A provider the device is not bound to is refused by name rather than
|
|
24256
|
+
* answered by another one (D552's `rejectUnresolvedAddonPin` rule).
|
|
24257
|
+
*
|
|
24258
|
+
* It was optional, documented as "absent means the device's BOUND
|
|
24259
|
+
* provider, which is CamStack on every camera". No code implemented
|
|
24260
|
+
* that. Measured on the live hub 2026-09-20 — device 592, bound to
|
|
24261
|
+
* `recorder` AND `provider-reolink` — a bare call with `limit: 3`
|
|
24262
|
+
* answered SIX rows, three from each source, merged newest-first:
|
|
24263
|
+
* `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
|
|
24264
|
+
* so absence bought the union this method exists not to be, and
|
|
24265
|
+
* `limit` meant `limit × sources`.
|
|
24266
|
+
*
|
|
24267
|
+
* There is nothing to restore the default to. `getBindings` answers a
|
|
24268
|
+
* collection cap with a DERIVED, PLURAL set (D554 amended, step 0);
|
|
24269
|
+
* `setWrapperActive` — the singleton authority that could name one —
|
|
24270
|
+
* throws for a collection cap by design. Naming CamStack here instead
|
|
24271
|
+
* would privilege one addon by id inside a surface whose premise is
|
|
24272
|
+
* that sources are peers, and would be wrong on the first camera with
|
|
24273
|
+
* no recorder binding. So absence is REFUSED, in the schema, where the
|
|
24274
|
+
* generated types make it unomittable rather than merely discouraged.
|
|
24275
|
+
*
|
|
24276
|
+
* The default belongs to the SURFACE, which has the `listSources` rows
|
|
24277
|
+
* and can say which one it picked (D569 § 1–3; the viewer already
|
|
24278
|
+
* always sends this).
|
|
24268
24279
|
*
|
|
24269
24280
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
24270
24281
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
24271
|
-
* operator settled otherwise on 2026-09-20 — *"
|
|
24272
|
-
*
|
|
24273
|
-
*
|
|
24274
|
-
* at a time and there is nothing to filter out of it.
|
|
24282
|
+
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
24283
|
+
* solo"* — so the list is asked of one provider at a time and there is
|
|
24284
|
+
* nothing to filter out of it.
|
|
24275
24285
|
*/
|
|
24276
|
-
provider: string().
|
|
24286
|
+
provider: string().min(1)
|
|
24277
24287
|
}), array(ClipSchema).readonly(), {
|
|
24278
24288
|
kind: "query",
|
|
24279
24289
|
auth: "protected"
|
|
@@ -35677,6 +35687,12 @@ Object.freeze({
|
|
|
35677
35687
|
addonId: null,
|
|
35678
35688
|
access: "view"
|
|
35679
35689
|
},
|
|
35690
|
+
"pipelineAnalytics.ownersWithMedia": {
|
|
35691
|
+
capName: "pipeline-analytics",
|
|
35692
|
+
capScope: "device",
|
|
35693
|
+
addonId: null,
|
|
35694
|
+
access: "view"
|
|
35695
|
+
},
|
|
35680
35696
|
"pipelineAnalytics.pauseForStorageMigration": {
|
|
35681
35697
|
capName: "pipeline-analytics",
|
|
35682
35698
|
capScope: "device",
|
|
@@ -39577,6 +39593,11 @@ Object.freeze({
|
|
|
39577
39593
|
form: "single",
|
|
39578
39594
|
optional: false
|
|
39579
39595
|
}],
|
|
39596
|
+
"pipelineAnalytics.ownersWithMedia": [{
|
|
39597
|
+
name: "deviceId",
|
|
39598
|
+
form: "single",
|
|
39599
|
+
optional: false
|
|
39600
|
+
}],
|
|
39580
39601
|
"pipelineAnalytics.proposeRetrainAnnotations": [{
|
|
39581
39602
|
name: "deviceId",
|
|
39582
39603
|
form: "single",
|
|
@@ -40967,7 +40988,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
40967
40988
|
capability: adminUiCapability,
|
|
40968
40989
|
provider: {
|
|
40969
40990
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
40970
|
-
getVersion: async () => ({ version: "1.2.
|
|
40991
|
+
getVersion: async () => ({ version: "1.2.135" })
|
|
40971
40992
|
}
|
|
40972
40993
|
}];
|
|
40973
40994
|
}
|