@camstack/types 1.1.45 → 1.1.46

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,11 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-BdhADtqT.js");
2
+ const require_sleep = require("./sleep-Vh_bux78.js");
3
+ const require_event_category = require("./event-category-BXd6yeJi.js");
3
4
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
5
  exports.BaseAddon = require_sleep.BaseAddon;
5
6
  exports.DATAPLANE_SECRET_HEADER = require_sleep.DATAPLANE_SECRET_HEADER;
6
7
  exports.DeviceType = require_sleep.DeviceType;
7
8
  exports.DisposerChain = require_sleep.DisposerChain;
8
- exports.EventCategory = require_sleep.EventCategory;
9
+ exports.EventCategory = require_event_category.EventCategory;
9
10
  exports.ReadinessRegistry = require_sleep.ReadinessRegistry;
10
11
  exports.ReadinessTimeoutError = require_sleep.ReadinessTimeoutError;
11
12
  exports.adminUiCapability = require_sleep.adminUiCapability;
package/dist/addon.mjs CHANGED
@@ -1,3 +1,4 @@
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";
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 DisposerChain, 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 } from "./sleep-Br7r_3fq.mjs";
2
+ import { t as EventCategory } from "./event-category-CFZs3jI4.mjs";
2
3
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
4
  export { BaseAddon, DATAPLANE_SECRET_HEADER, DeviceType, DisposerChain, EventCategory, ReadinessRegistry, ReadinessTimeoutError, adminUiCapability, asJsonObject, asString, createDeviceProxy, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, normalizeAddonInitResult, parseJsonUnknown, scopeKey, sleep, viewerUiCapability };
@@ -275,6 +275,13 @@ export declare const webrtcSessionCapability: {
275
275
  sessionId: z.ZodOptional<z.ZodString>;
276
276
  extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
277
277
  }, z.core.$strip>>>;
278
+ hints: z.ZodOptional<z.ZodObject<{
279
+ viewportWidth: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
280
+ viewportHeight: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
281
+ devicePixelRatio: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
282
+ downlinkMbps: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
283
+ prefersTier: z.ZodOptional<z.ZodOptional<z.ZodString>>;
284
+ }, z.core.$strip>>;
278
285
  }, z.core.$strip>, z.ZodObject<{
279
286
  sessionId: z.ZodString;
280
287
  sdpAnswer: z.ZodString;
package/dist/enums.js ADDED
@@ -0,0 +1,15 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_event_category = require("./event-category-BXd6yeJi.js");
3
+ //#region src/enums/event-source-type.ts
4
+ var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
5
+ EventSourceType["Addon"] = "addon";
6
+ EventSourceType["Core"] = "core";
7
+ EventSourceType["Device"] = "device";
8
+ EventSourceType["Provider"] = "provider";
9
+ EventSourceType["System"] = "system";
10
+ return EventSourceType;
11
+ }({});
12
+ //#endregion
13
+ exports.EventCategory = require_event_category.EventCategory;
14
+ exports.EventSourceType = EventSourceType;
15
+ exports.EventSourceType$1 = EventSourceType;
package/dist/enums.mjs ADDED
@@ -0,0 +1,12 @@
1
+ import { t as EventCategory } from "./event-category-CFZs3jI4.mjs";
2
+ //#region src/enums/event-source-type.ts
3
+ var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
4
+ EventSourceType["Addon"] = "addon";
5
+ EventSourceType["Core"] = "core";
6
+ EventSourceType["Device"] = "device";
7
+ EventSourceType["Provider"] = "provider";
8
+ EventSourceType["System"] = "system";
9
+ return EventSourceType;
10
+ }({});
11
+ //#endregion
12
+ export { EventCategory, EventSourceType };
@@ -0,0 +1,547 @@
1
+ //#region src/enums/event-category.ts
2
+ var EventCategory = /* @__PURE__ */ function(EventCategory) {
3
+ EventCategory["SystemBoot"] = "system.boot";
4
+ EventCategory["SystemAddonsReady"] = "system.addons-ready";
5
+ EventCategory["SystemRestarting"] = "system.restarting";
6
+ /**
7
+ * Fired exactly once after the hub finishes booting following a
8
+ * restart that was triggered by `RestartCoordinator` (today: framework
9
+ * live-update). Payload is the marker that was on disk at boot
10
+ * (`PendingRestartMarkerPayload`); admin UI listens for it to display a
11
+ * success toast describing what changed.
12
+ *
13
+ * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
14
+ */
15
+ EventCategory["SystemRestartCompleted"] = "system.restart-completed";
16
+ /**
17
+ * Readiness transition for a capability provider. Every producer emits
18
+ * this event on `onInitialize` completion, `onDestroy`, and
19
+ * `$node.reconnect`; every consumer that needs to gate on a cross-process
20
+ * cap subscribes via the kernel's readiness module (`awaitReady` /
21
+ * `onReadyState`) instead of polling. Payload is
22
+ * `SystemReadyStatePayload` — see event-bus.ts.
23
+ */
24
+ EventCategory["SystemReadyState"] = "system.ready-state";
25
+ EventCategory["AddonStarted"] = "addon.started";
26
+ EventCategory["AddonStopped"] = "addon.stopped";
27
+ EventCategory["AddonRestarted"] = "addon.restarted";
28
+ EventCategory["AddonUpdated"] = "addon.updated";
29
+ EventCategory["AddonInstalled"] = "addon.installed";
30
+ EventCategory["AddonUninstalled"] = "addon.uninstalled";
31
+ EventCategory["AddonCrashed"] = "addon.crashed";
32
+ EventCategory["AddonError"] = "addon.error";
33
+ EventCategory["AddonPageReady"] = "addon.page-ready";
34
+ EventCategory["AddonWidgetReady"] = "addon.widget-ready";
35
+ /**
36
+ * Addon failed to load (import or initialize). Emitted by the kernel's
37
+ * AddonHealthMonitor only AFTER the boot grace period ends — failures
38
+ * during the first 5 minutes are silently retried without alerting
39
+ * (slow-starting addons must have time to come up). Post-grace, this
40
+ * event is emitted exactly once per failure-streak; AlertCenter
41
+ * consumes it to create a persistent operator-visible alert.
42
+ *
43
+ * Payload: `{ packageName, addonId?, error: { message, stack }, retryCount, nextRetryAt }`.
44
+ */
45
+ EventCategory["AddonLoadFailed"] = "addon.load-failed";
46
+ /**
47
+ * Addon recovered from a previous failure. Emitted when an addon
48
+ * transitions from `failed` back to `healthy` (typically via the
49
+ * monitor's auto-retry loop, or after manual `addons.retryLoad`).
50
+ * AlertCenter dismisses the corresponding `AddonLoadFailed` alert
51
+ * on this event.
52
+ */
53
+ EventCategory["AddonLoadRecovered"] = "addon.load-recovered";
54
+ /**
55
+ * Monitor scheduled the next retry for a failed addon. Transient —
56
+ * surfaced to the UI for live-updating the "next retry in Ns"
57
+ * countdown on the Addons page row, NOT persisted as an alert.
58
+ */
59
+ EventCategory["AddonRetryScheduled"] = "addon.retry-scheduled";
60
+ /**
61
+ * Monitor is attempting to reload a failed addon NOW. UI uses this
62
+ * to show a spinner during the retry attempt. Same transient nature
63
+ * as AddonRetryScheduled.
64
+ */
65
+ EventCategory["AddonRetryAttempting"] = "addon.retry-attempting";
66
+ EventCategory["DeviceRegistered"] = "device.registered";
67
+ EventCategory["DeviceUnregistered"] = "device.unregistered";
68
+ EventCategory["DeviceEnabled"] = "device.enabled";
69
+ EventCategory["DeviceDisabled"] = "device.disabled";
70
+ EventCategory["DeviceSettingsUpdated"] = "device.settings-updated";
71
+ /**
72
+ * Emitted when the set of native capability providers bound to a device
73
+ * changes — e.g. an addon registers a new native cap via
74
+ * `DeviceContext.registerNativeCap`, or all native bindings for a device
75
+ * are cleared on removal. Hub consumers re-resolve device-proxy routes
76
+ * when this fires.
77
+ */
78
+ EventCategory["DeviceBindingsChanged"] = "device.bindings-changed";
79
+ /**
80
+ * Emitted when the operator-organisational meta surface changes
81
+ * (`name` / `location` / `disabled`). Payload: `{deviceId, field,
82
+ * value}`. Live consumers (UI device list, alert center) react
83
+ * without polling. Distinct from `DeviceSettingsUpdated` which
84
+ * fires on hardware-config changes (host/port/credentials/etc).
85
+ */
86
+ EventCategory["DeviceMetaChanged"] = "device.meta-changed";
87
+ /**
88
+ * Emitted by `BaseDevice.updateSourceInfo()` after a successful patch
89
+ * to the device's upstream-system identity / rendering envelope. The
90
+ * full new SourceInfo travels in the payload so cross-process listeners
91
+ * (UI, export adapters) don't need to re-read the meta blob.
92
+ *
93
+ * Payload: `{deviceId, sourceInfo}`.
94
+ *
95
+ * Distinct from `DeviceMetaChanged` which covers the operator-edited
96
+ * surface (`name` / `location` / `disabled`). The two share the
97
+ * persistence layer (both ride on `device-manager.setMetadata` for
98
+ * SourceInfo, or `setName`/`setLocation`/`setDisabled` for the meta
99
+ * fields) but consumers care about different subsets.
100
+ */
101
+ EventCategory["DeviceSourceInfoChanged"] = "device.source-info-changed";
102
+ /**
103
+ * Emitted by DeviceStreamWiringService after a successful
104
+ * `stream-broker.registerDeviceStreams` call. Payload includes
105
+ * deviceId — consumers look up the full registered device info via
106
+ * `brokerManager.getRegisteredDevice(deviceId)`.
107
+ *
108
+ * Replaces the legacy `StreamRouterService.onDeviceRegistered` callback.
109
+ */
110
+ EventCategory["DeviceStreamsRegistered"] = "device.streams-registered";
111
+ /**
112
+ * Device-level "fully provisioned" signal — the EXPORT trigger. Emitted once
113
+ * a device's persisted export-relevant shape (its `DeviceFeature` set) is
114
+ * established or changes, carrying `{deviceId, fingerprint, generation}`.
115
+ * Export adapters (Alexa / HAP) react to THIS instead of the chatty per-cap
116
+ * `DeviceBindingsChanged`, turning a boot's incomplete→complete trickle into
117
+ * one clean delta. `fingerprint` is `canonicalDeviceFingerprint(shape)`.
118
+ *
119
+ * Spec: docs/superpowers/specs/2026-06-01-alexa-hap-export-reconciler-design.md
120
+ */
121
+ EventCategory["DeviceProvisioned"] = "device.provisioned";
122
+ /**
123
+ * Fires once when a device's initial feature-probe completes successfully
124
+ * (lastProbedAt 0→>0); exported shape is now stable. Telemetry (may be
125
+ * dropped) — consumers MUST also gate on the device record's `probed` flag.
126
+ */
127
+ EventCategory["DeviceReady"] = "device.ready";
128
+ EventCategory["IntegrationEnabled"] = "integration.enabled";
129
+ EventCategory["IntegrationDisabled"] = "integration.disabled";
130
+ EventCategory["IntegrationDeleted"] = "integration.deleted";
131
+ /** Emitted when a broker connection's status flips (connected /
132
+ * disconnected / error). Carries `{ brokerId, status, error? }`. */
133
+ EventCategory["BrokerStatusChanged"] = "broker.status-changed";
134
+ /** Emitted for every subscription-matched message routed by a
135
+ * broker provider. Carries `{ brokerId, subscriptionId, key, payload }`.
136
+ * Consumers filter by `brokerId` + `subscriptionId` in the handler. */
137
+ EventCategory["BrokerMessage"] = "broker.message";
138
+ EventCategory["ProviderStarted"] = "provider.started";
139
+ EventCategory["ProviderStopped"] = "provider.stopped";
140
+ EventCategory["ProcessCrashed"] = "process.crashed";
141
+ EventCategory["ProcessRestartScheduled"] = "process.restart_scheduled";
142
+ EventCategory["ProcessRestarted"] = "process.restarted";
143
+ EventCategory["RecordingStarted"] = "recording.started";
144
+ EventCategory["RecordingStopped"] = "recording.stopped";
145
+ EventCategory["RecordingError"] = "recording.error";
146
+ EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
147
+ EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
148
+ EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
149
+ EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
150
+ EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
151
+ EventCategory["DetectionEvent"] = "detection.event";
152
+ EventCategory["SessionTrackNew"] = "session.track.new";
153
+ EventCategory["SessionTrackExpired"] = "session.track.expired";
154
+ EventCategory["BenchmarkProgress"] = "benchmark.progress";
155
+ EventCategory["PlatformProbePhase"] = "platform-probe.phase";
156
+ EventCategory["PipelineProgress"] = "pipeline.progress";
157
+ /** Per-frame execution trace emitted by the pipeline executor for live observability. */
158
+ EventCategory["PipelineTrace"] = "pipeline.trace";
159
+ /**
160
+ * Raw inference output emitted by `addon-pipeline-runner` after running the
161
+ * detection pipeline on a frame. Carries the `FrameResult` (with
162
+ * `detections[]`, `width`/`height`, timing debug) — never the frame
163
+ * buffer itself. Hub-side consumers (analysis pipeline, class filters,
164
+ * notifications) subscribe to this and re-emit `detection.result` after
165
+ * post-processing.
166
+ */
167
+ EventCategory["PipelineInferenceResult"] = "pipeline.inference-result";
168
+ /**
169
+ * Camera lifecycle event emitted by `addon-pipeline-orchestrator` when it
170
+ * assigns or unassigns a camera to/from an agent. Carries no frame data;
171
+ * pure observability for UI dashboards and metrics consumers.
172
+ */
173
+ EventCategory["PipelineCameraAssigned"] = "pipeline.camera-assigned";
174
+ EventCategory["PipelineCameraUnassigned"] = "pipeline.camera-unassigned";
175
+ /**
176
+ * Per-camera pipeline config was mutated by the orchestrator
177
+ * (3-level settings change via `setAgentAddonDefaults` /
178
+ * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
179
+ * pipeline-scoped `applyDeviceSettingsPatch`). Orchestrator
180
+ * subscribes to its own emission to hot-reload the assigned runner
181
+ * via `attachCamera` so the next frame executes against the new
182
+ * engine/steps without waiting for a rebalance or the next
183
+ * `DeviceStreamsRegistered` cycle.
184
+ */
185
+ EventCategory["PipelineCameraUpdated"] = "pipeline.camera-updated";
186
+ /**
187
+ * The cluster camera-source OWNER changed (`clusterRoles.ingestNode`).
188
+ * Emitted by addon-pipeline-orchestrator whenever it (re)derives node
189
+ * capabilities — at boot, on agent online/offline, and on an ingest-node
190
+ * flip. Carries the resolved `ownerNodeId`. The stream-broker consumes it to
191
+ * keep its ingest-owner-gate decision current WITHOUT a per-`ensureBroker`
192
+ * cross-process `getIngestOwner` query (push the authority's decision instead
193
+ * of polling it on the hot path). Idempotent state — re-emitted on every
194
+ * topology change, so a dropped event self-heals on the next one (plus the
195
+ * broker's long backstop reconcile query).
196
+ */
197
+ EventCategory["PipelineIngestOwnerChanged"] = "pipeline.ingest-owner-changed";
198
+ /**
199
+ * Periodic snapshot of per-node pipeline-runner load
200
+ * (`RunnerLocalLoad`). Emitted ~1Hz by every runner so UI dashboards
201
+ * subscribe instead of polling `pipelineRunner.getLocalLoad`.
202
+ * `nodeId` carried in the payload + on `event.source.nodeId`.
203
+ */
204
+ EventCategory["PipelineRunnerLoadSnapshot"] = "pipeline.runner-load-snapshot";
205
+ /**
206
+ * Periodic snapshot of per-camera pipeline metrics (`CameraMetrics`
207
+ * + `deviceId` + `nodeId`). Emitted ~1Hz by every runner for each
208
+ * attached camera. UI subscribes to drive overlay phase / fps /
209
+ * inference time without polling `getCameraMetrics`.
210
+ */
211
+ EventCategory["PipelineCameraMetricsSnapshot"] = "pipeline.camera-metrics-snapshot";
212
+ /**
213
+ * Periodic snapshot of stream-broker per-broker statistics (input
214
+ * fps, decoded fps, bitrate, codec). Emitted ~1Hz by every
215
+ * stream-broker process for each active broker so the UI can drive
216
+ * the Stream / Cluster dashboards without polling
217
+ * `streamBroker.listAllProfileSlots` and friends.
218
+ */
219
+ EventCategory["StreamBrokerMetricsSnapshot"] = "stream-broker.metrics-snapshot";
220
+ /**
221
+ * Cap event fired by `stream-broker` when a profile slot enters
222
+ * "demanded" state — a cam stream has been assigned and at least one
223
+ * consumer (RTSP restream, decoded subscriber, WebRTC session, …) is
224
+ * present. Camera-provider addons (Reolink Baichuan push, …)
225
+ * subscribe to this category to start their underlying transport
226
+ * lazily. Payload: `{ deviceId, camStreamId, profile }`.
227
+ */
228
+ EventCategory["StreamBrokerOnCamStreamDemand"] = "stream-broker.onCamStreamDemand";
229
+ /**
230
+ * Cap event fired by `stream-broker` when the last consumer leaves a
231
+ * previously-demanded cam stream. Providers tear down their
232
+ * underlying transport on receipt. Payload: `{ deviceId, camStreamId }`.
233
+ */
234
+ EventCategory["StreamBrokerOnCamStreamIdle"] = "stream-broker.onCamStreamIdle";
235
+ /**
236
+ * Cap event fired by `stream-broker` when a broker fails to dial a
237
+ * managed-loopback source (today: `pull-rfc4571`) and the publisher
238
+ * needs to refresh the cached URL. The lib's TCP server idle-tears-down
239
+ * on its own schedule, so a re-publish with a fresh `host:port` is the
240
+ * only way to keep the broker dialable. Camera providers (Reolink
241
+ * Baichuan native, …) subscribe and respond by re-running their publish
242
+ * pipeline.
243
+ * Payload: `{ deviceId, camStreamId, brokerId }`.
244
+ */
245
+ EventCategory["StreamBrokerOnRequestStreamSourceRefresh"] = "stream-broker.onRequestStreamSourceRefresh";
246
+ /**
247
+ * A camera provider changed a device's stream parameters (codec /
248
+ * resolution / bitrate / a stream added or removed). A LOW-LATENCY NUDGE
249
+ * for the stream-broker's catalog reconcile: it carries NO authoritative
250
+ * data — the broker re-PULLS that device's `stream-catalog` cap on receipt
251
+ * (the 30s reconcile poll is the backstop if this nudge is dropped). Emitted
252
+ * by providers from `stream-params.setProfile`. Payload: `{ deviceId }`.
253
+ */
254
+ EventCategory["StreamParamsChanged"] = "stream-params.changed";
255
+ /**
256
+ * Generic per-device runtime-state change. Fired by `device-manager`
257
+ * whenever a persisted slice in any cap's `runtimeState` shape
258
+ * mutates. Payload: `{deviceId, capName, slice}`. Subscribers are
259
+ * the `deviceState` cap router (cross-process listeners) and the
260
+ * deviceProxy reactive bindings (`device.state.<capName>.value`).
261
+ * Cap-specific events (`battery.onStatusChanged`, …) still fire
262
+ * — they're authoritative for callers that want a typed payload
263
+ * without filtering on `capName`.
264
+ */
265
+ EventCategory["DeviceStateChanged"] = "device.state-changed";
266
+ /**
267
+ * Cap event fired by every device that registers the `battery`
268
+ * capability. Mirrors the cap definition's `onStatusChanged`. Carries
269
+ * `{ deviceId, status: BatteryStatus }`. Subscribers (alert center,
270
+ * snapshot wrapper, UI) react to charge/sleep transitions without
271
+ * polling `batteryCapability.getStatus`.
272
+ */
273
+ EventCategory["BatteryOnStatusChanged"] = "battery.onStatusChanged";
274
+ /**
275
+ * Emitted by the battery cap provider WHEN `wakeForStream` enters the
276
+ * "wake in progress" window — between the Baichuan wake-up issue and
277
+ * the camera's first dialed-back RTP packet. The stream-broker
278
+ * manager subscribes to flip the per-broker placeholder reason to
279
+ * `'waking'` so viewers see a labelled "WAKING UP" tile instead of
280
+ * the generic `'reconnecting'` frame. Carries `{ deviceId }`. The
281
+ * complementary "wake complete" signal is the existing
282
+ * `BatteryOnStatusChanged { sleeping: false }` event.
283
+ */
284
+ EventCategory["BatteryOnWakeStarted"] = "battery.onWakeStarted";
285
+ /**
286
+ * Cap event fired by every device that registers the `doorbell`
287
+ * capability. Mirrors `doorbellCapability.events.onPressed`. Carries
288
+ * `{ deviceId, timestamp }`. Operators consuming the UI subscribe
289
+ * here to render transient ring toasts and a "Recent presses" row
290
+ * on the device detail page.
291
+ */
292
+ EventCategory["DoorbellOnPressed"] = "doorbell.onPressed";
293
+ /**
294
+ * Cap event fired by every device that registers the `event-emitter`
295
+ * capability. Mirrors `eventEmitterCapability.events.onEvent`. Carries
296
+ * `{ deviceId, eventType, data, timestamp, seq }` — the device's EXACT
297
+ * declared event verbatim (NO normalization). Subscribers (UI event
298
+ * stream, advanced-notifier rules) react to fired events without
299
+ * holding a cap reference.
300
+ */
301
+ EventCategory["EventEmitted"] = "event-emitter.event";
302
+ /**
303
+ * Periodic snapshot of the per-node detection-pipeline engine
304
+ * registry (loaded engines, models resident, in-use cameras, idle
305
+ * TTL). Emitted ~0.2Hz (every 5 s) by every detection-pipeline
306
+ * process. The Engines tab subscribes to drive its inventory view
307
+ * without polling `pipelineExecutor.listLoadedEngines`.
308
+ */
309
+ EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
310
+ /**
311
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
312
+ * the detection-pipeline provider on every state change of its lazy
313
+ * engine-provisioning machine (idle → installing → verifying → ready,
314
+ * or → failed with a `nextRetryAt`). Payload is the
315
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
316
+ * node. The Pipeline page subscribes to drive a live "installing
317
+ * OpenVINO… / ready" indicator per node without polling
318
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
319
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
320
+ */
321
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
322
+ /**
323
+ * Cluster topology snapshot. Carries the same payload returned by
324
+ * `nodes.topology` (every reachable node + addons + processes).
325
+ * Emitted by the hub on any agent / addon lifecycle change
326
+ * (debounced) plus a periodic safety net. Replaces UI polling on
327
+ * `nodes.topology` — admin-ui dashboards subscribe to drive the
328
+ * cluster view directly from the event payload.
329
+ */
330
+ EventCategory["ClusterTopologySnapshot"] = "cluster.topology-snapshot";
331
+ /**
332
+ * Periodic per-node system metrics snapshot (CPU / memory / GPU /
333
+ * disk / network). Emitted ~0.2 Hz by the metrics-provider addon
334
+ * for each node. Drives the dashboard SystemStatus / ProcessResources
335
+ * widgets without polling `metricsProvider.getCurrent`.
336
+ */
337
+ EventCategory["MetricsNodeResourcesSnapshot"] = "metrics.node-resources-snapshot";
338
+ /**
339
+ * Periodic per-node process-tree snapshot (camstack-related pids
340
+ * with ghost / managed / root classification). Emitted ~0.2 Hz by
341
+ * the metrics-provider addon. Drives the Cluster → Processes tab
342
+ * without polling `metricsProvider.listNodeProcesses`.
343
+ */
344
+ EventCategory["MetricsNodeProcessesSnapshot"] = "metrics.node-processes-snapshot";
345
+ /**
346
+ * Capability binding change event emitted by `addon-pipeline-orchestrator`
347
+ * when a user changes which addon implements a cap on a node. Subscribed
348
+ * by every kernel process to update its local `preferredProviderRegistry`
349
+ * so future capability lookups respect the new binding.
350
+ */
351
+ /**
352
+ * A capability binding was changed for a node — addon X now provides
353
+ * capability `cap` on node `nodeId`. Lives under the generic
354
+ * `capability.*` namespace because capability bindings are a kernel-
355
+ * level concept used by many addons, not strictly pipeline-scoped.
356
+ */
357
+ EventCategory["CapabilityBindingChanged"] = "capability.binding-changed";
358
+ EventCategory["ModelDownloadProgress"] = "model.download.progress";
359
+ EventCategory["AgentRegistered"] = "agent.registered";
360
+ EventCategory["AgentUnregistered"] = "agent.unregistered";
361
+ EventCategory["AgentOnline"] = "agent.online";
362
+ EventCategory["AgentOffline"] = "agent.offline";
363
+ /** Forked worker process (e.g. hub/pipeline) connected to the broker. */
364
+ EventCategory["WorkerOnline"] = "worker.online";
365
+ /** Forked worker process disconnected from the broker. */
366
+ EventCategory["WorkerOffline"] = "worker.offline";
367
+ EventCategory["AgentTaskDispatched"] = "agent.task.dispatched";
368
+ EventCategory["AgentTaskAssigned"] = "agent.task.assigned";
369
+ EventCategory["AgentTrpcConnected"] = "agent.trpc.connected";
370
+ EventCategory["AgentWsConnected"] = "agent.ws.connected";
371
+ EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
372
+ EventCategory["AgentBackupActivated"] = "agent.backup.activated";
373
+ EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
374
+ /**
375
+ * Per-agent hwaccel preference changed (user override set, cleared, or
376
+ * re-probed). Observability event — decoders pull the current pref at
377
+ * `createSession`, so running sessions keep their current backend until
378
+ * they rotate naturally (camera add/remove, stream restart). Future
379
+ * work can wire a listener in stream-broker that force-rotates live
380
+ * sessions; for now this event powers logs + admin-UI toast feedback.
381
+ */
382
+ EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
383
+ EventCategory["MotionAnalysis"] = "detection.motion-analysis";
384
+ /** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
385
+ EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
386
+ /**
387
+ * Per-camera motion phase transition (`watching ↔ active`) emitted
388
+ * by the runner. Mirrors the `motion.onMotionChanged` cap event
389
+ * surface — payload `MotionOnMotionChangedPayload` carries
390
+ * `{deviceId, detected, timestamp, source, regions?}`. Subscribers
391
+ * include addons that need to react to motion state without
392
+ * polling the runtime-state mirror.
393
+ */
394
+ EventCategory["MotionOnMotionChanged"] = "motion.on-motion-changed";
395
+ EventCategory["DetectionResult"] = "detection.result";
396
+ EventCategory["DetectionRaw"] = "detection.raw";
397
+ EventCategory["DetectionCameraNative"] = "detection.camera-native";
398
+ /**
399
+ * Canonical per-chunk live audio pipeline output. Payload is
400
+ * `PipelineAudioInferenceResultPayload` carrying a full `AudioResult`
401
+ * (level + detections + debug). Lives on the pipeline.* namespace
402
+ * alongside `pipeline.inference-result` (video) for symmetry.
403
+ */
404
+ EventCategory["PipelineAudioInferenceResult"] = "pipeline.audio-inference-result";
405
+ EventCategory["DetectionPhaseTransition"] = "detection.phase-transition";
406
+ EventCategory["ProviderMotion"] = "provider.motion";
407
+ EventCategory["ProviderDetection"] = "provider.detection";
408
+ EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
409
+ EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
410
+ EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
411
+ /**
412
+ * Unified track-lifecycle event: ONE category carrying `phase:
413
+ * 'start' | 'update' | 'end'` with a rich, typed
414
+ * `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
415
+ * `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
416
+ * pair — a consumer subscribes once and branches on `phase`.
417
+ */
418
+ EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
419
+ /**
420
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
421
+ * (`phase:'start'`). Kept as a soft alias — no known subscribers.
422
+ */
423
+ EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
424
+ /**
425
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
426
+ * (`phase:'end'`). Kept as a soft alias — no known subscribers.
427
+ */
428
+ EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
429
+ EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
430
+ EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
431
+ /**
432
+ * Fired by `addon-post-analysis` when a parked (stationary) object appears
433
+ * (a track was promoted to a stationary-registry entry) or departs (the
434
+ * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
435
+ * the dedicated "Stationary" section — never the live event feed. Payload:
436
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
437
+ */
438
+ EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
439
+ /**
440
+ * Fired by `addon-post-analysis` whenever a gallery face row changes:
441
+ * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
442
+ * `'unassigned'` its identity link changed, `'deleted'` the row was
443
+ * removed. Telemetry semantics (D8): a lost event only delays a refresh,
444
+ * never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
445
+ */
446
+ EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
447
+ /**
448
+ * Fired by `addon-post-analysis` whenever a gallery plate row changes:
449
+ * `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
450
+ * `'assigned'` / `'unassigned'` its vehicle link changed
451
+ * (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
452
+ * semantics (D8): a lost event only delays a refresh, never a correctness
453
+ * issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
454
+ */
455
+ EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
456
+ EventCategory["FrigateLiveEvent"] = "frigate.live-event";
457
+ EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
458
+ /**
459
+ * Stream-broker health watchdog. Per-broker (deviceId/profile) emission.
460
+ * `stream.offline` fires after STREAM_STALE_TIMEOUT_MS without an encoded
461
+ * packet on an active broker. `stream.online` fires on first packet
462
+ * after a stale gap (or on initial first packet). Payload includes
463
+ * the assigned camStreamId as `profileKey`.
464
+ */
465
+ EventCategory["StreamOnline"] = "stream.online";
466
+ EventCategory["StreamOffline"] = "stream.offline";
467
+ EventCategory["NetworkTunnelStarted"] = "network.tunnel.started";
468
+ EventCategory["NetworkTunnelStopped"] = "network.tunnel.stopped";
469
+ /** Fired by the `local-network` cap when the host's interface set
470
+ * changes (new IP from DHCP, VPN connect, docker bridge added). */
471
+ EventCategory["LocalNetworkChanged"] = "network.local.changed";
472
+ /**
473
+ * Fired by a `mesh-network` provider (Tailscale, …) when its
474
+ * mesh-reachable host changes (join / leave / MagicDNS or 100.x IP
475
+ * change). Lets `local-network` fold the mesh endpoint into its
476
+ * connection-endpoint list without a cross-package import. Payload
477
+ * carries the preferred host (`host: ''` = no longer reachable),
478
+ * the hub port, and the scheme. Telemetry-grade (D8): consumers
479
+ * pull-reconcile from the provider's `getStatus` on reconnect. */
480
+ EventCategory["MeshNetworkChanged"] = "network.mesh.changed";
481
+ EventCategory["BackupCompleted"] = "backup.completed";
482
+ EventCategory["BackupRestored"] = "backup.restored";
483
+ EventCategory["NotificationDispatched"] = "notification.dispatched";
484
+ EventCategory["NotificationFailed"] = "notification.failed";
485
+ EventCategory["DeviceUpdated"] = "device.updated";
486
+ /**
487
+ * Transport-level connectivity. Emitted by the device driver when
488
+ * the underlying control socket actually connects / disconnects
489
+ * (Baichuan TCP, ONVIF probe response, RTSP DESCRIBE, …) — NOT for
490
+ * power-state transitions on a battery camera. For battery wake /
491
+ * doze cycles see `DeviceAwake` / `DeviceSleeping`.
492
+ */
493
+ EventCategory["DeviceOnline"] = "device.online";
494
+ /**
495
+ * Stream-broker watchdog — emitted when no encoded packet has been
496
+ * received for STREAM_STALE_TIMEOUT_MS on an active broker (rtsp or
497
+ * push). Paired with DeviceOnline which fires on first packet after
498
+ * a stale gap. Payload: DeviceStreamHealthPayload.
499
+ */
500
+ EventCategory["DeviceOffline"] = "device.offline";
501
+ /**
502
+ * Battery cam woke up — physical power-state transition reported
503
+ * by the device firmware. Distinct from `DeviceOnline` so a UI panel
504
+ * watching power state doesn't flap on every UDP socket reconnect.
505
+ */
506
+ EventCategory["DeviceAwake"] = "device.awake";
507
+ /**
508
+ * Battery cam went to sleep. See `DeviceAwake`.
509
+ */
510
+ EventCategory["DeviceSleeping"] = "device.sleeping";
511
+ EventCategory["RetentionCleanup"] = "retention.cleanup";
512
+ /**
513
+ * Legacy bulk-update progress snapshot (payload `BulkUpdateState`). No longer
514
+ * emitted — F3 removed the coordinator that produced it; "Update all" now runs
515
+ * as one lifecycle engine job (`AddonsJobProgress`/`AddonsJobLog`). Retained
516
+ * (with `BulkUpdateState`) only to avoid regenerating the event maps; removed
517
+ * in F4 once live bulk progress is re-implemented over the engine events.
518
+ */
519
+ EventCategory["AddonsBulkUpdateProgress"] = "addons.bulk-update-progress";
520
+ EventCategory["AddonsJobProgress"] = "addons.job-progress";
521
+ EventCategory["AddonsJobLog"] = "addons.job-log";
522
+ /**
523
+ * A container's child visibility toggled (hidden/shown). Emitted by the
524
+ * `accessories` cap when a child device is hidden or revealed.
525
+ * Payload: `{ deviceId, childDeviceId, hidden }`.
526
+ */
527
+ EventCategory["AccessoriesChildVisibilityChanged"] = "accessories.onChildVisibilityChanged";
528
+ /**
529
+ * A container's child set changed (children added/removed/reordered).
530
+ * Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
531
+ */
532
+ EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
533
+ /**
534
+ * Progress update from a running model conversion job.
535
+ * Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
536
+ * Emitted by `addon-model-studio` on the converting node.
537
+ */
538
+ EventCategory["ModelConvertProgress"] = "model-convert.progress";
539
+ return EventCategory;
540
+ }({});
541
+ //#endregion
542
+ Object.defineProperty(exports, "EventCategory", {
543
+ enumerable: true,
544
+ get: function() {
545
+ return EventCategory;
546
+ }
547
+ });