@camstack/types 1.1.44 → 1.1.45

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-k6I1e98_.js");
2
+ const require_sleep = require("./sleep-BdhADtqT.js");
3
3
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
4
  exports.BaseAddon = require_sleep.BaseAddon;
5
5
  exports.DATAPLANE_SECRET_HEADER = require_sleep.DATAPLANE_SECRET_HEADER;
package/dist/addon.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as parseJsonUnknown, D as asString, I as scopeKey, M as ReadinessRegistry, N as ReadinessTimeoutError, S as DeviceType, T as asJsonObject, a as viewerUiCapability, bt as EventCategory, ct as BaseAddon, ft as emitReadiness, i as deviceOpsCapability, j as DATAPLANE_SECRET_HEADER, lt as normalizeAddonInitResult, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, t as sleep, xt as DisposerChain } from "./sleep-DkhOVOjW.mjs";
1
+ import { A as parseJsonUnknown, D as asString, I as scopeKey, M as ReadinessRegistry, N as ReadinessTimeoutError, S as DeviceType, T as asJsonObject, a as viewerUiCapability, bt as EventCategory, ct as BaseAddon, ft as emitReadiness, i as deviceOpsCapability, j as DATAPLANE_SECRET_HEADER, lt as normalizeAddonInitResult, m as expandCapMethods, o as adminUiCapability, s as createDeviceProxy, t as sleep, xt as DisposerChain } from "./sleep-_sv7WKkq.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  export { BaseAddon, DATAPLANE_SECRET_HEADER, DeviceType, DisposerChain, EventCategory, ReadinessRegistry, ReadinessTimeoutError, adminUiCapability, asJsonObject, asString, createDeviceProxy, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, normalizeAddonInitResult, parseJsonUnknown, scopeKey, sleep, viewerUiCapability };
@@ -43,6 +43,49 @@ export declare function isCollectionArrayMethod(def: CapabilityDefinition | unde
43
43
  * stripping them. Falls back to the schema unchanged when `.loose()` is absent.
44
44
  */
45
45
  export declare function looseSchema(schema: unknown): unknown;
46
+ /**
47
+ * Derive a COLLECTION-cap routing `addonId` from a NON-array mutation input
48
+ * when the caller did NOT supply the top-level `{ addonId }` selector.
49
+ *
50
+ * Background: a `scope:'system', mode:'collection'` cap fans its ARRAY methods
51
+ * (`listTargets`, `listTargetKinds`, …) across every provider, but routes each
52
+ * single-object method (`send` / CRUD) to ONE provider. The runtime router
53
+ * strips a TOP-LEVEL `addonId` selector and routes it via
54
+ * `getProviderByAddonId`; absent that selector it falls through to the FIRST
55
+ * registered provider — which misroutes (or hard-crashes on a partial provider)
56
+ * when the target is owned by a DIFFERENT provider. See
57
+ * `notification-output.cap.ts` (`Target.addonId` / `TargetKind.addonId` are
58
+ * "stamped by each provider so the concat-fanned catalog stays routable").
59
+ *
60
+ * That routing `addonId` is ALREADY carried inside the mutation payload the
61
+ * caller sends — e.g. `upsertTarget({ target: { …, addonId } })`. This helper
62
+ * recovers it: it scans the input's DIRECT child object properties (bounded to
63
+ * one level, first match wins) for a string `addonId`. Mirrors the child-side
64
+ * `extractArgsAddonId` fallback in `child-cap-dispatch.ts`, which reads a
65
+ * top-level `addonId` off the raw args; this covers the one-level-nested case
66
+ * the top-level scan misses.
67
+ *
68
+ * Only used for non-array collection methods (array fan-out is never rerouted),
69
+ * so it can never collapse a catalog aggregation onto a single provider. `null`
70
+ * / non-object inputs yield `undefined` (fall back to the first provider,
71
+ * preserving single-provider and id-only-payload back-compat).
72
+ */
73
+ export declare function extractNestedAddonId(input: unknown): string | undefined;
74
+ /**
75
+ * True when an OBJECT input schema declares a top-level `addonId` field.
76
+ *
77
+ * Such a cap method routes explicitly via the top-level `{ addonId }` selector
78
+ * (the `llm.generate` / `deleteProfile` posture). The runtime router therefore
79
+ * MUST NOT also fall back to {@link extractNestedAddonId} for it — that would
80
+ * let an incidental nested `addonId` (e.g. a key inside a free-form `jsonSchema`
81
+ * record) hijack routing. Nested recovery is reserved for methods whose input
82
+ * carries NO top-level selector but embeds the owning `addonId` inside a domain
83
+ * entity (`upsertTarget({ target: { addonId } })`, `upsertProfile({ profile })`).
84
+ *
85
+ * Accepts both Zod 4 (`.shape` / `_def.shape`) and legacy shapes; returns false
86
+ * for non-object schemas.
87
+ */
88
+ export declare function objectInputDeclaresAddonId(schema: unknown): boolean;
46
89
  /** Auth level → base-procedure key. `superAdmin` collapses to `admin`. */
47
90
  export declare function procedureAuthKey(auth: string): 'public' | 'protected' | 'admin';
48
91
  /** kebab-case cap name → camelCase router-map key. */
@@ -89,6 +89,7 @@ export declare const CustomModelDescriptorSchema: z.ZodObject<{
89
89
  width: z.ZodNumber;
90
90
  height: z.ZodNumber;
91
91
  }, z.core.$strip>;
92
+ inputChannels: z.ZodOptional<z.ZodNumber>;
92
93
  labels: z.ZodReadonly<z.ZodArray<z.ZodObject<{
93
94
  id: z.ZodString;
94
95
  name: z.ZodString;
@@ -109,6 +110,7 @@ export declare const CustomModelDescriptorSchema: z.ZodObject<{
109
110
  letterbox: "letterbox";
110
111
  resize: "resize";
111
112
  }>>;
113
+ postprocessor: z.ZodOptional<z.ZodCustom<import("../index.js").PostprocessorType, import("../index.js").PostprocessorType>>;
112
114
  faceAlignment: z.ZodOptional<z.ZodBoolean>;
113
115
  extraFiles: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
114
116
  url: z.ZodString;
@@ -215,6 +217,7 @@ export declare const customModelRegistryCapability: {
215
217
  width: z.ZodNumber;
216
218
  height: z.ZodNumber;
217
219
  }, z.core.$strip>;
220
+ inputChannels: z.ZodOptional<z.ZodNumber>;
218
221
  labels: z.ZodReadonly<z.ZodArray<z.ZodObject<{
219
222
  id: z.ZodString;
220
223
  name: z.ZodString;
@@ -235,6 +238,7 @@ export declare const customModelRegistryCapability: {
235
238
  letterbox: "letterbox";
236
239
  resize: "resize";
237
240
  }>>;
241
+ postprocessor: z.ZodOptional<z.ZodCustom<import("../index.js").PostprocessorType, import("../index.js").PostprocessorType>>;
238
242
  faceAlignment: z.ZodOptional<z.ZodBoolean>;
239
243
  extraFiles: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
240
244
  url: z.ZodString;
@@ -43,7 +43,7 @@ export { cameraPipelineConfigCapability, type ICameraPipelineConfigProvider, } f
43
43
  export { cameraStreamsCapability, type ICameraStreamsProvider, type PickedCamStream, PickedCamStreamSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, type StreamCodec, StreamCodecSchema, } from './camera-streams.cap.js';
44
44
  export type { CapabilityDefinition, CapabilityEventSchema, CapabilityMethodAuth, CapabilityMethodKind, CapabilityMethodOptions, CapabilityMethodSchema, CapabilityMountHint, CapabilityMountKind, CapabilityStatusItemArray, CapabilityStatusKind, CapabilityStatusSchema, DeviceConfigDerivedFormUi, DeviceConfigSpec, DeviceConfigUiSpec, DeviceConfigWidgetUi, DeviceSettingsContribution, InferDeviceProxyCap, InferEvents, InferName, InferNativeProvider, InferProvider, InferRuntimeState, ProviderKind, UiContribution, UiContributionKind, UiContributionRemote, } from './capability-definition.js';
45
45
  export { DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, event, expandCapMethods, isDeviceConfigCap, method, resolveCapMount, } from './capability-definition.js';
46
- export { isArrayOutputSchema, isCollectionArrayMethod, isObjectInput, isVoidInput, kebabToCamel, looseSchema, procedureAuthKey, } from './cap-router-predicates.js';
46
+ export { extractNestedAddonId, isArrayOutputSchema, isCollectionArrayMethod, isObjectInput, isVoidInput, kebabToCamel, looseSchema, objectInputDeclaresAddonId, procedureAuthKey, } from './cap-router-predicates.js';
47
47
  export * from './custom-actions.js';
48
48
  export type { CustomModelDescriptor, ICustomModelRegistryProvider, } from './custom-model-registry.cap.js';
49
49
  export { CustomModelDescriptorSchema, customModelRegistryCapability, } from './custom-model-registry.cap.js';
@@ -191,7 +191,7 @@ export { type IValveProvider, type ValveState, ValveStateSchema, type ValveStatu
191
191
  export { type IVibrationProvider, type VibrationStatus, VibrationStatusSchema, vibrationCapability, } from './vibration.cap.js';
192
192
  export { type IWaterHeaterProvider, type WaterHeaterStatus, WaterHeaterStatusSchema, waterHeaterCapability, } from './water-heater.cap.js';
193
193
  export { type IWeatherProvider, type WeatherStatus, WeatherStatusSchema, weatherCapability, } from './weather.cap.js';
194
- export { type CameraOccupancySnapshot, type HistoryPoint, HistoryPointSchema, type HistoryResolution, HistoryResolutionEnum, type IZoneAnalyticsProvider, type PerScopeBreakdown, PerScopeBreakdownSchema, type ZoneScopeBreakdown, ZoneScopeBreakdownSchema, zoneAnalyticsCapability, } from './zone-analytics.cap.js';
194
+ export { type CameraOccupancySnapshot, type StationaryObject, StationaryObjectSchema, type HistoryPoint, HistoryPointSchema, type HistoryResolution, HistoryResolutionEnum, type IZoneAnalyticsProvider, type PerScopeBreakdown, PerScopeBreakdownSchema, type ZoneScopeBreakdown, ZoneScopeBreakdownSchema, zoneAnalyticsCapability, } from './zone-analytics.cap.js';
195
195
  export { type IZoneRulesProvider, type ZoneRuleStage, ZoneRuleStageEnum, zoneRulesCapability, } from './zone-rules.cap.js';
196
196
  export { type IZonesProvider, type PolygonPoint, PolygonPointSchema, type Zone, type ZoneKind, ZoneKindEnum, ZoneSchema, zonesCapability, } from './zones.cap.js';
197
197
  import type { IReadinessRegistry } from '../interfaces/readiness.js';
@@ -179,6 +179,7 @@ export declare const modelConvertCapability: {
179
179
  width: z.ZodNumber;
180
180
  height: z.ZodNumber;
181
181
  }, z.core.$strip>;
182
+ inputChannels: z.ZodOptional<z.ZodNumber>;
182
183
  labels: z.ZodReadonly<z.ZodArray<z.ZodObject<{
183
184
  id: z.ZodString;
184
185
  name: z.ZodString;
@@ -199,6 +200,7 @@ export declare const modelConvertCapability: {
199
200
  letterbox: "letterbox";
200
201
  resize: "resize";
201
202
  }>>;
203
+ postprocessor: z.ZodOptional<z.ZodCustom<import("../index.js").PostprocessorType, import("../index.js").PostprocessorType>>;
202
204
  faceAlignment: z.ZodOptional<z.ZodBoolean>;
203
205
  extraFiles: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
204
206
  url: z.ZodString;
@@ -91,6 +91,7 @@ export declare const ModelDistributeInputSchema: z.ZodObject<{
91
91
  width: z.ZodNumber;
92
92
  height: z.ZodNumber;
93
93
  }, z.core.$strip>;
94
+ inputChannels: z.ZodOptional<z.ZodNumber>;
94
95
  labels: z.ZodReadonly<z.ZodArray<z.ZodObject<{
95
96
  id: z.ZodString;
96
97
  name: z.ZodString;
@@ -111,6 +112,7 @@ export declare const ModelDistributeInputSchema: z.ZodObject<{
111
112
  letterbox: "letterbox";
112
113
  resize: "resize";
113
114
  }>>;
115
+ postprocessor: z.ZodOptional<z.ZodCustom<import("../index.js").PostprocessorType, import("../index.js").PostprocessorType>>;
114
116
  faceAlignment: z.ZodOptional<z.ZodBoolean>;
115
117
  extraFiles: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
116
118
  url: z.ZodString;
@@ -231,6 +233,7 @@ export declare const modelDistributorCapability: {
231
233
  width: z.ZodNumber;
232
234
  height: z.ZodNumber;
233
235
  }, z.core.$strip>;
236
+ inputChannels: z.ZodOptional<z.ZodNumber>;
234
237
  labels: z.ZodReadonly<z.ZodArray<z.ZodObject<{
235
238
  id: z.ZodString;
236
239
  name: z.ZodString;
@@ -251,6 +254,7 @@ export declare const modelDistributorCapability: {
251
254
  letterbox: "letterbox";
252
255
  resize: "resize";
253
256
  }>>;
257
+ postprocessor: z.ZodOptional<z.ZodCustom<import("../index.js").PostprocessorType, import("../index.js").PostprocessorType>>;
254
258
  faceAlignment: z.ZodOptional<z.ZodBoolean>;
255
259
  extraFiles: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
256
260
  url: z.ZodString;
@@ -39,6 +39,21 @@ declare const EventKindSchema: z.ZodEnum<{
39
39
  motion: "motion";
40
40
  }>;
41
41
  export type EventKind = z.infer<typeof EventKindSchema>;
42
+ /**
43
+ * One audio-classification label heard on the track's camera while the
44
+ * track was alive, aggregated per label. An "episode" is one persisted
45
+ * audio event (the confident-classification path: score ≥ the device's
46
+ * `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
47
+ * one 32 ms inference chunk, so counts stay human-scaled.
48
+ */
49
+ declare const TrackAudioLabelSchema: z.ZodObject<{
50
+ label: z.ZodString;
51
+ peakScore: z.ZodNumber;
52
+ count: z.ZodNumber;
53
+ firstAt: z.ZodNumber;
54
+ lastAt: z.ZodNumber;
55
+ }, z.core.$strip>;
56
+ export type TrackAudioLabel = z.infer<typeof TrackAudioLabelSchema>;
42
57
  declare const TrackSchema: z.ZodObject<{
43
58
  trackId: z.ZodString;
44
59
  deviceId: z.ZodNumber;
@@ -86,6 +101,13 @@ declare const TrackSchema: z.ZodObject<{
86
101
  importance: z.ZodOptional<z.ZodNumber>;
87
102
  bestEventId: z.ZodOptional<z.ZodString>;
88
103
  importanceReason: z.ZodOptional<z.ZodString>;
104
+ audioLabels: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
105
+ label: z.ZodString;
106
+ peakScore: z.ZodNumber;
107
+ count: z.ZodNumber;
108
+ firstAt: z.ZodNumber;
109
+ lastAt: z.ZodNumber;
110
+ }, z.core.$strip>>>>;
89
111
  }, z.core.$strip>;
90
112
  export type Track = z.infer<typeof TrackSchema>;
91
113
  declare const MotionEventSchema: z.ZodObject<{
@@ -339,6 +361,13 @@ export declare const pipelineAnalyticsCapability: {
339
361
  importance: z.ZodOptional<z.ZodNumber>;
340
362
  bestEventId: z.ZodOptional<z.ZodString>;
341
363
  importanceReason: z.ZodOptional<z.ZodString>;
364
+ audioLabels: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
365
+ label: z.ZodString;
366
+ peakScore: z.ZodNumber;
367
+ count: z.ZodNumber;
368
+ firstAt: z.ZodNumber;
369
+ lastAt: z.ZodNumber;
370
+ }, z.core.$strip>>>>;
342
371
  }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
343
372
  readonly getTrack: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
344
373
  deviceId: z.ZodNumber;
@@ -390,6 +419,13 @@ export declare const pipelineAnalyticsCapability: {
390
419
  importance: z.ZodOptional<z.ZodNumber>;
391
420
  bestEventId: z.ZodOptional<z.ZodString>;
392
421
  importanceReason: z.ZodOptional<z.ZodString>;
422
+ audioLabels: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
423
+ label: z.ZodString;
424
+ peakScore: z.ZodNumber;
425
+ count: z.ZodNumber;
426
+ firstAt: z.ZodNumber;
427
+ lastAt: z.ZodNumber;
428
+ }, z.core.$strip>>>>;
393
429
  }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
394
430
  /** Historical completed tracks for a device. Queried from the
395
431
  * persisted `pipeline-analytics:tracks` collection; active tracks
@@ -446,6 +482,13 @@ export declare const pipelineAnalyticsCapability: {
446
482
  importance: z.ZodOptional<z.ZodNumber>;
447
483
  bestEventId: z.ZodOptional<z.ZodString>;
448
484
  importanceReason: z.ZodOptional<z.ZodString>;
485
+ audioLabels: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
486
+ label: z.ZodString;
487
+ peakScore: z.ZodNumber;
488
+ count: z.ZodNumber;
489
+ firstAt: z.ZodNumber;
490
+ lastAt: z.ZodNumber;
491
+ }, z.core.$strip>>>>;
449
492
  }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
450
493
  readonly clearTracks: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
451
494
  deviceId: z.ZodNumber;
@@ -834,6 +877,6 @@ export declare const pipelineAnalyticsCapability: {
834
877
  };
835
878
  };
836
879
  export type IPipelineAnalyticsProvider = InferProvider<typeof pipelineAnalyticsCapability>;
837
- export { TrackStateSchema, EventKindSchema, TrackSchema, TrackCascadeCountsSchema, KeyEventSchema, MotionEventSchema, ObjectEventSchema, AudioEventSchema, MediaFileKindEnum, MediaFileSchema,
880
+ export { TrackStateSchema, EventKindSchema, TrackSchema, TrackAudioLabelSchema, TrackCascadeCountsSchema, KeyEventSchema, MotionEventSchema, ObjectEventSchema, AudioEventSchema, MediaFileKindEnum, MediaFileSchema,
838
881
  /** No longer carried on onFrameTracked (two-plane re-injection) — kept for compat. */
839
882
  TrackedDetectionSchema, };
@@ -345,6 +345,7 @@ declare const EngineProvisioningSchema: z.ZodObject<{
345
345
  onnx: "onnx";
346
346
  coreml: "coreml";
347
347
  openvino: "openvino";
348
+ edgetpu: "edgetpu";
348
349
  }>>;
349
350
  device: z.ZodNullable<z.ZodString>;
350
351
  state: z.ZodEnum<{
@@ -509,6 +510,7 @@ export declare const pipelineExecutorCapability: {
509
510
  onnx: "onnx";
510
511
  coreml: "coreml";
511
512
  openvino: "openvino";
513
+ edgetpu: "edgetpu";
512
514
  }>>;
513
515
  device: z.ZodNullable<z.ZodString>;
514
516
  state: z.ZodEnum<{
@@ -157,6 +157,10 @@ export declare const platformProbeCapability: {
157
157
  "intel-npu": "intel-npu";
158
158
  }>;
159
159
  }, z.core.$strip>>;
160
+ coral: z.ZodOptional<z.ZodNullable<z.ZodObject<{
161
+ type: z.ZodLiteral<"coral-edgetpu">;
162
+ bus: z.ZodOptional<z.ZodString>;
163
+ }, z.core.$strip>>>;
160
164
  }, z.core.$strip>;
161
165
  scores: z.ZodReadonly<z.ZodArray<z.ZodObject<{
162
166
  runtime: z.ZodEnum<{
@@ -220,6 +224,10 @@ export declare const platformProbeCapability: {
220
224
  "intel-npu": "intel-npu";
221
225
  }>;
222
226
  }, z.core.$strip>>;
227
+ coral: z.ZodOptional<z.ZodNullable<z.ZodObject<{
228
+ type: z.ZodLiteral<"coral-edgetpu">;
229
+ bus: z.ZodOptional<z.ZodString>;
230
+ }, z.core.$strip>>>;
223
231
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
224
232
  readonly resolveInferenceConfig: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
225
233
  requirements: z.ZodReadonly<z.ZodArray<z.ZodObject<{
@@ -29,6 +29,32 @@ declare const ZoneScopeBreakdownSchema: z.ZodObject<{
29
29
  zoneName: z.ZodString;
30
30
  trackIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
31
31
  }, z.core.$strip>;
32
+ /**
33
+ * A parked ("stationary") object surfaced alongside occupancy — an object that
34
+ * settled and stopped moving. It is NO LONGER a tracked object (the tracker was
35
+ * told to forget it so it stops re-spawning tracks/events), but it IS still
36
+ * physically present, so it keeps counting toward `frame` occupancy and is
37
+ * listed here so the UI can show it in a dedicated "Stationary" section instead
38
+ * of flooding the live event feed.
39
+ */
40
+ declare const StationaryObjectSchema: z.ZodObject<{
41
+ id: z.ZodString;
42
+ className: z.ZodString;
43
+ bbox: z.ZodObject<{
44
+ x: z.ZodNumber;
45
+ y: z.ZodNumber;
46
+ w: z.ZodNumber;
47
+ h: z.ZodNumber;
48
+ }, z.core.$strip>;
49
+ frameWidth: z.ZodNumber;
50
+ frameHeight: z.ZodNumber;
51
+ firstSeenAt: z.ZodNumber;
52
+ becameStationaryAt: z.ZodNumber;
53
+ lastConfirmedAt: z.ZodNumber;
54
+ label: z.ZodOptional<z.ZodString>;
55
+ keyFrameMediaKey: z.ZodOptional<z.ZodString>;
56
+ }, z.core.$strip>;
57
+ export type StationaryObject = z.infer<typeof StationaryObjectSchema>;
32
58
  export declare const CameraOccupancySnapshotSchema: z.ZodObject<{
33
59
  ts: z.ZodNumber;
34
60
  frameWidth: z.ZodNumber;
@@ -48,6 +74,23 @@ export declare const CameraOccupancySnapshotSchema: z.ZodObject<{
48
74
  totalObjects: z.ZodNumber;
49
75
  byClass: z.ZodRecord<z.ZodString, z.ZodNumber>;
50
76
  }, z.core.$strip>;
77
+ stationaryObjects: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
78
+ id: z.ZodString;
79
+ className: z.ZodString;
80
+ bbox: z.ZodObject<{
81
+ x: z.ZodNumber;
82
+ y: z.ZodNumber;
83
+ w: z.ZodNumber;
84
+ h: z.ZodNumber;
85
+ }, z.core.$strip>;
86
+ frameWidth: z.ZodNumber;
87
+ frameHeight: z.ZodNumber;
88
+ firstSeenAt: z.ZodNumber;
89
+ becameStationaryAt: z.ZodNumber;
90
+ lastConfirmedAt: z.ZodNumber;
91
+ label: z.ZodOptional<z.ZodString>;
92
+ keyFrameMediaKey: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>>>>;
51
94
  }, z.core.$strip>;
52
95
  export type CameraOccupancySnapshot = z.infer<typeof CameraOccupancySnapshotSchema>;
53
96
  export type ZoneScopeBreakdown = z.infer<typeof ZoneScopeBreakdownSchema>;
@@ -131,6 +174,23 @@ export declare const zoneAnalyticsCapability: {
131
174
  totalObjects: z.ZodNumber;
132
175
  byClass: z.ZodRecord<z.ZodString, z.ZodNumber>;
133
176
  }, z.core.$strip>;
177
+ stationaryObjects: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
178
+ id: z.ZodString;
179
+ className: z.ZodString;
180
+ bbox: z.ZodObject<{
181
+ x: z.ZodNumber;
182
+ y: z.ZodNumber;
183
+ w: z.ZodNumber;
184
+ h: z.ZodNumber;
185
+ }, z.core.$strip>;
186
+ frameWidth: z.ZodNumber;
187
+ frameHeight: z.ZodNumber;
188
+ firstSeenAt: z.ZodNumber;
189
+ becameStationaryAt: z.ZodNumber;
190
+ lastConfirmedAt: z.ZodNumber;
191
+ label: z.ZodOptional<z.ZodString>;
192
+ keyFrameMediaKey: z.ZodOptional<z.ZodString>;
193
+ }, z.core.$strip>>>>;
134
194
  }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
135
195
  /** Time-series object count inside one zone. `className` optional —
136
196
  * omit to count every class in the zone. */
@@ -206,7 +266,24 @@ export declare const zoneAnalyticsCapability: {
206
266
  totalObjects: z.ZodNumber;
207
267
  byClass: z.ZodRecord<z.ZodString, z.ZodNumber>;
208
268
  }, z.core.$strip>;
269
+ stationaryObjects: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
270
+ id: z.ZodString;
271
+ className: z.ZodString;
272
+ bbox: z.ZodObject<{
273
+ x: z.ZodNumber;
274
+ y: z.ZodNumber;
275
+ w: z.ZodNumber;
276
+ h: z.ZodNumber;
277
+ }, z.core.$strip>;
278
+ frameWidth: z.ZodNumber;
279
+ frameHeight: z.ZodNumber;
280
+ firstSeenAt: z.ZodNumber;
281
+ becameStationaryAt: z.ZodNumber;
282
+ lastConfirmedAt: z.ZodNumber;
283
+ label: z.ZodOptional<z.ZodString>;
284
+ keyFrameMediaKey: z.ZodOptional<z.ZodString>;
285
+ }, z.core.$strip>>>>;
209
286
  }, z.core.$strip>;
210
287
  };
211
288
  export type IZoneAnalyticsProvider = InferProvider<typeof zoneAnalyticsCapability>;
212
- export { CameraOccupancySnapshotSchema as _CameraOccupancySnapshotSchema, HistoryResolutionEnum, HistoryPointSchema, HistoryRangeSchema, ZoneScopeBreakdownSchema, PerScopeBreakdownSchema, };
289
+ export { CameraOccupancySnapshotSchema as _CameraOccupancySnapshotSchema, StationaryObjectSchema, HistoryResolutionEnum, HistoryPointSchema, HistoryRangeSchema, ZoneScopeBreakdownSchema, PerScopeBreakdownSchema, };
@@ -427,6 +427,14 @@ export declare enum EventCategory {
427
427
  PipelineAnalyticsTrackEnded = "pipeline-analytics.track-ended",
428
428
  PipelineAnalyticsDetectionEvent = "pipeline-analytics.detection-event",
429
429
  PipelineAnalyticsFrameTracked = "pipeline-analytics.frame-tracked",
430
+ /**
431
+ * Fired by `addon-post-analysis` when a parked (stationary) object appears
432
+ * (a track was promoted to a stationary-registry entry) or departs (the
433
+ * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
434
+ * the dedicated "Stationary" section — never the live event feed. Payload:
435
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
436
+ */
437
+ PipelineAnalyticsStationaryChanged = "pipeline-analytics.stationary-changed",
430
438
  /**
431
439
  * Fired by `addon-post-analysis` whenever a gallery face row changes:
432
440
  * `kind:'buffered'` a new detected face was persisted, `'assigned'` /