@camstack/addon-export-ha-mqtt 1.0.4 → 1.0.5

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.
@@ -5033,6 +5033,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5033
5033
  */
5034
5034
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
5035
5035
  /**
5036
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
5037
+ * the detection-pipeline provider on every state change of its lazy
5038
+ * engine-provisioning machine (idle → installing → verifying → ready,
5039
+ * or → failed with a `nextRetryAt`). Payload is the
5040
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5041
+ * node. The Pipeline page subscribes to drive a live "installing
5042
+ * OpenVINO… / ready" indicator per node without polling
5043
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5044
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5045
+ */
5046
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5047
+ /**
5036
5048
  * Cluster topology snapshot. Carries the same payload returned by
5037
5049
  * `nodes.topology` (every reachable node + addons + processes).
5038
5050
  * Emitted by the hub on any agent / addon lifecycle change
@@ -9197,6 +9209,24 @@ var DetectorOutputSchema = object({
9197
9209
  inferenceMs: number$1(),
9198
9210
  modelId: string()
9199
9211
  });
9212
+ var EngineProvisioningSchema = object({
9213
+ runtimeId: _enum([
9214
+ "onnx",
9215
+ "openvino",
9216
+ "coreml"
9217
+ ]).nullable(),
9218
+ device: string().nullable(),
9219
+ state: _enum([
9220
+ "idle",
9221
+ "installing",
9222
+ "verifying",
9223
+ "ready",
9224
+ "failed"
9225
+ ]),
9226
+ progress: number$1().optional(),
9227
+ error: string().optional(),
9228
+ nextRetryAt: number$1().optional()
9229
+ });
9200
9230
  var PipelineStepInputSchema = lazy(() => object({
9201
9231
  addonId: string(),
9202
9232
  modelId: string(),
@@ -9265,7 +9295,7 @@ var PipelineRunResultBridge = custom();
9265
9295
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9266
9296
  kind: "mutation",
9267
9297
  auth: "admin"
9268
- }), method(_void(), record(string(), object({
9298
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9269
9299
  modelId: string(),
9270
9300
  settings: record(string(), unknown()).readonly()
9271
9301
  }))), method(object({ steps: record(string(), object({
@@ -12877,7 +12907,10 @@ var AgentAddonConfigSchema = object({
12877
12907
  modelId: string(),
12878
12908
  settings: record(string(), unknown()).readonly()
12879
12909
  });
12880
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
12910
+ var AgentPipelineSettingsSchema = object({
12911
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
12912
+ maxCameras: number$1().int().nonnegative().nullable().default(null)
12913
+ });
12881
12914
  var CameraPipelineForAgentSchema = object({
12882
12915
  steps: array(PipelineStepInputSchema).readonly(),
12883
12916
  audio: object({
@@ -12979,6 +13012,133 @@ var GlobalMetricsSchema = object({
12979
13012
  * capability providers.
12980
13013
  */
12981
13014
  var CapabilityBindingsSchema = record(string(), string());
13015
+ /** Source block — always present; derives from the stream catalog. */
13016
+ var CameraSourceStatusSchema = object({ streams: array(object({
13017
+ camStreamId: string(),
13018
+ codec: string(),
13019
+ width: number$1(),
13020
+ height: number$1(),
13021
+ fps: number$1(),
13022
+ kind: string()
13023
+ })).readonly() });
13024
+ /** Assignment block — always present (orchestrator-local, no remote call). */
13025
+ var CameraAssignmentStatusSchema = object({
13026
+ detectionNodeId: string().nullable(),
13027
+ decoderNodeId: string().nullable(),
13028
+ audioNodeId: string().nullable(),
13029
+ pinned: object({
13030
+ detection: boolean(),
13031
+ decoder: boolean(),
13032
+ audio: boolean()
13033
+ }),
13034
+ reasons: object({
13035
+ detection: string().optional(),
13036
+ decoder: string().optional(),
13037
+ audio: string().optional()
13038
+ })
13039
+ });
13040
+ /** Broker block — null when the broker stage is unreachable or inactive. */
13041
+ var CameraBrokerStatusSchema = object({
13042
+ profiles: array(object({
13043
+ profile: string(),
13044
+ status: string(),
13045
+ codec: string(),
13046
+ width: number$1(),
13047
+ height: number$1(),
13048
+ subscribers: number$1(),
13049
+ inFps: number$1(),
13050
+ outFps: number$1()
13051
+ })).readonly(),
13052
+ webrtcSessions: number$1(),
13053
+ rtspRestream: boolean()
13054
+ });
13055
+ /** Shared-memory ring statistics within the decoder block. */
13056
+ var CameraDecoderShmSchema = object({
13057
+ framesWritten: number$1(),
13058
+ getFrameHits: number$1(),
13059
+ getFrameMisses: number$1(),
13060
+ budgetMb: number$1()
13061
+ });
13062
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
13063
+ var CameraDecoderStatusSchema = object({
13064
+ nodeId: string(),
13065
+ formats: array(string()).readonly(),
13066
+ sessionCount: number$1(),
13067
+ shm: CameraDecoderShmSchema
13068
+ });
13069
+ /** Motion block — null when motion detection is not active for this device. */
13070
+ var CameraMotionStatusSchema = object({
13071
+ enabled: boolean(),
13072
+ fps: number$1()
13073
+ });
13074
+ /** Detection provisioning sub-block. */
13075
+ var CameraDetectionProvisioningSchema = object({
13076
+ state: _enum([
13077
+ "idle",
13078
+ "installing",
13079
+ "verifying",
13080
+ "ready",
13081
+ "failed"
13082
+ ]),
13083
+ error: string().optional()
13084
+ });
13085
+ /** Detection phase — derived from the runner's engine phase. */
13086
+ var CameraDetectionPhaseSchema = _enum([
13087
+ "idle",
13088
+ "watching",
13089
+ "active"
13090
+ ]);
13091
+ /** Detection block — null when no detection node is assigned or reachable. */
13092
+ var CameraDetectionStatusSchema = object({
13093
+ nodeId: string(),
13094
+ engine: object({
13095
+ backend: string(),
13096
+ device: string()
13097
+ }),
13098
+ phase: CameraDetectionPhaseSchema,
13099
+ configuredFps: number$1(),
13100
+ actualFps: number$1(),
13101
+ queueDepth: number$1(),
13102
+ avgInferenceMs: number$1(),
13103
+ provisioning: CameraDetectionProvisioningSchema
13104
+ });
13105
+ /** Audio block — null when no audio node is assigned or reachable. */
13106
+ var CameraAudioStatusSchema = object({
13107
+ nodeId: string(),
13108
+ enabled: boolean()
13109
+ });
13110
+ /** Recording block — null when no recording cap is active for this device. */
13111
+ var CameraRecordingStatusSchema = object({
13112
+ mode: _enum([
13113
+ "off",
13114
+ "continuous",
13115
+ "events"
13116
+ ]),
13117
+ active: boolean(),
13118
+ storageBytes: number$1()
13119
+ });
13120
+ /**
13121
+ * Aggregated per-camera pipeline status — server-composed, single call.
13122
+ *
13123
+ * The `assignment` and `source` blocks are always present.
13124
+ * Every other block is `null` when the stage is inactive or unreachable
13125
+ * during the bounded parallel fan-out in the orchestrator implementation.
13126
+ *
13127
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13128
+ */
13129
+ var CameraStatusSchema = object({
13130
+ deviceId: number$1(),
13131
+ assignment: CameraAssignmentStatusSchema,
13132
+ source: CameraSourceStatusSchema,
13133
+ broker: CameraBrokerStatusSchema.nullable(),
13134
+ decoder: CameraDecoderStatusSchema.nullable(),
13135
+ motion: CameraMotionStatusSchema.nullable(),
13136
+ detection: CameraDetectionStatusSchema.nullable(),
13137
+ audio: CameraAudioStatusSchema.nullable(),
13138
+ recording: CameraRecordingStatusSchema.nullable(),
13139
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13140
+ fetchedAt: number$1()
13141
+ });
12982
13142
  method(object({
12983
13143
  deviceId: number$1(),
12984
13144
  agentNodeId: string()
@@ -13046,6 +13206,12 @@ method(object({
13046
13206
  }), {
13047
13207
  kind: "mutation",
13048
13208
  auth: "admin"
13209
+ }), method(object({
13210
+ agentNodeId: string(),
13211
+ maxCameras: number$1().int().nonnegative().nullable()
13212
+ }), object({ success: literal(true) }), {
13213
+ kind: "mutation",
13214
+ auth: "admin"
13049
13215
  }), method(object({ deviceId: number$1() }), CameraPipelineSettingsSchema.nullable()), method(object({
13050
13216
  deviceId: number$1(),
13051
13217
  addonId: string(),
@@ -13071,7 +13237,7 @@ method(object({
13071
13237
  }), method(object({
13072
13238
  deviceId: number$1(),
13073
13239
  agentNodeId: string().optional()
13074
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13240
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number$1() }), CameraStatusSchema), method(object({ deviceIds: array(number$1()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13075
13241
  name: string(),
13076
13242
  description: string().optional(),
13077
13243
  config: CameraPipelineConfigSchema
@@ -18863,6 +19029,12 @@ Object.freeze({
18863
19029
  addonId: null,
18864
19030
  access: "view"
18865
19031
  },
19032
+ "pipelineExecutor.getEngineProvisioning": {
19033
+ capName: "pipeline-executor",
19034
+ capScope: "system",
19035
+ addonId: null,
19036
+ access: "view"
19037
+ },
18866
19038
  "pipelineExecutor.getGlobalPipelineConfig": {
18867
19039
  capName: "pipeline-executor",
18868
19040
  capScope: "system",
@@ -19067,6 +19239,18 @@ Object.freeze({
19067
19239
  addonId: null,
19068
19240
  access: "view"
19069
19241
  },
19242
+ "pipelineOrchestrator.getCameraStatus": {
19243
+ capName: "pipeline-orchestrator",
19244
+ capScope: "system",
19245
+ addonId: null,
19246
+ access: "view"
19247
+ },
19248
+ "pipelineOrchestrator.getCameraStatuses": {
19249
+ capName: "pipeline-orchestrator",
19250
+ capScope: "system",
19251
+ addonId: null,
19252
+ access: "view"
19253
+ },
19070
19254
  "pipelineOrchestrator.getCameraStepOverrides": {
19071
19255
  capName: "pipeline-orchestrator",
19072
19256
  capScope: "system",
@@ -19151,6 +19335,12 @@ Object.freeze({
19151
19335
  addonId: null,
19152
19336
  access: "create"
19153
19337
  },
19338
+ "pipelineOrchestrator.setAgentMaxCameras": {
19339
+ capName: "pipeline-orchestrator",
19340
+ capScope: "system",
19341
+ addonId: null,
19342
+ access: "create"
19343
+ },
19154
19344
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19155
19345
  capName: "pipeline-orchestrator",
19156
19346
  capScope: "system",
@@ -5031,6 +5031,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5031
5031
  */
5032
5032
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
5033
5033
  /**
5034
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
5035
+ * the detection-pipeline provider on every state change of its lazy
5036
+ * engine-provisioning machine (idle → installing → verifying → ready,
5037
+ * or → failed with a `nextRetryAt`). Payload is the
5038
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5039
+ * node. The Pipeline page subscribes to drive a live "installing
5040
+ * OpenVINO… / ready" indicator per node without polling
5041
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5042
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5043
+ */
5044
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5045
+ /**
5034
5046
  * Cluster topology snapshot. Carries the same payload returned by
5035
5047
  * `nodes.topology` (every reachable node + addons + processes).
5036
5048
  * Emitted by the hub on any agent / addon lifecycle change
@@ -9195,6 +9207,24 @@ var DetectorOutputSchema = object({
9195
9207
  inferenceMs: number$1(),
9196
9208
  modelId: string()
9197
9209
  });
9210
+ var EngineProvisioningSchema = object({
9211
+ runtimeId: _enum([
9212
+ "onnx",
9213
+ "openvino",
9214
+ "coreml"
9215
+ ]).nullable(),
9216
+ device: string().nullable(),
9217
+ state: _enum([
9218
+ "idle",
9219
+ "installing",
9220
+ "verifying",
9221
+ "ready",
9222
+ "failed"
9223
+ ]),
9224
+ progress: number$1().optional(),
9225
+ error: string().optional(),
9226
+ nextRetryAt: number$1().optional()
9227
+ });
9198
9228
  var PipelineStepInputSchema = lazy(() => object({
9199
9229
  addonId: string(),
9200
9230
  modelId: string(),
@@ -9263,7 +9293,7 @@ var PipelineRunResultBridge = custom();
9263
9293
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9264
9294
  kind: "mutation",
9265
9295
  auth: "admin"
9266
- }), method(_void(), record(string(), object({
9296
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9267
9297
  modelId: string(),
9268
9298
  settings: record(string(), unknown()).readonly()
9269
9299
  }))), method(object({ steps: record(string(), object({
@@ -12875,7 +12905,10 @@ var AgentAddonConfigSchema = object({
12875
12905
  modelId: string(),
12876
12906
  settings: record(string(), unknown()).readonly()
12877
12907
  });
12878
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
12908
+ var AgentPipelineSettingsSchema = object({
12909
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
12910
+ maxCameras: number$1().int().nonnegative().nullable().default(null)
12911
+ });
12879
12912
  var CameraPipelineForAgentSchema = object({
12880
12913
  steps: array(PipelineStepInputSchema).readonly(),
12881
12914
  audio: object({
@@ -12977,6 +13010,133 @@ var GlobalMetricsSchema = object({
12977
13010
  * capability providers.
12978
13011
  */
12979
13012
  var CapabilityBindingsSchema = record(string(), string());
13013
+ /** Source block — always present; derives from the stream catalog. */
13014
+ var CameraSourceStatusSchema = object({ streams: array(object({
13015
+ camStreamId: string(),
13016
+ codec: string(),
13017
+ width: number$1(),
13018
+ height: number$1(),
13019
+ fps: number$1(),
13020
+ kind: string()
13021
+ })).readonly() });
13022
+ /** Assignment block — always present (orchestrator-local, no remote call). */
13023
+ var CameraAssignmentStatusSchema = object({
13024
+ detectionNodeId: string().nullable(),
13025
+ decoderNodeId: string().nullable(),
13026
+ audioNodeId: string().nullable(),
13027
+ pinned: object({
13028
+ detection: boolean(),
13029
+ decoder: boolean(),
13030
+ audio: boolean()
13031
+ }),
13032
+ reasons: object({
13033
+ detection: string().optional(),
13034
+ decoder: string().optional(),
13035
+ audio: string().optional()
13036
+ })
13037
+ });
13038
+ /** Broker block — null when the broker stage is unreachable or inactive. */
13039
+ var CameraBrokerStatusSchema = object({
13040
+ profiles: array(object({
13041
+ profile: string(),
13042
+ status: string(),
13043
+ codec: string(),
13044
+ width: number$1(),
13045
+ height: number$1(),
13046
+ subscribers: number$1(),
13047
+ inFps: number$1(),
13048
+ outFps: number$1()
13049
+ })).readonly(),
13050
+ webrtcSessions: number$1(),
13051
+ rtspRestream: boolean()
13052
+ });
13053
+ /** Shared-memory ring statistics within the decoder block. */
13054
+ var CameraDecoderShmSchema = object({
13055
+ framesWritten: number$1(),
13056
+ getFrameHits: number$1(),
13057
+ getFrameMisses: number$1(),
13058
+ budgetMb: number$1()
13059
+ });
13060
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
13061
+ var CameraDecoderStatusSchema = object({
13062
+ nodeId: string(),
13063
+ formats: array(string()).readonly(),
13064
+ sessionCount: number$1(),
13065
+ shm: CameraDecoderShmSchema
13066
+ });
13067
+ /** Motion block — null when motion detection is not active for this device. */
13068
+ var CameraMotionStatusSchema = object({
13069
+ enabled: boolean(),
13070
+ fps: number$1()
13071
+ });
13072
+ /** Detection provisioning sub-block. */
13073
+ var CameraDetectionProvisioningSchema = object({
13074
+ state: _enum([
13075
+ "idle",
13076
+ "installing",
13077
+ "verifying",
13078
+ "ready",
13079
+ "failed"
13080
+ ]),
13081
+ error: string().optional()
13082
+ });
13083
+ /** Detection phase — derived from the runner's engine phase. */
13084
+ var CameraDetectionPhaseSchema = _enum([
13085
+ "idle",
13086
+ "watching",
13087
+ "active"
13088
+ ]);
13089
+ /** Detection block — null when no detection node is assigned or reachable. */
13090
+ var CameraDetectionStatusSchema = object({
13091
+ nodeId: string(),
13092
+ engine: object({
13093
+ backend: string(),
13094
+ device: string()
13095
+ }),
13096
+ phase: CameraDetectionPhaseSchema,
13097
+ configuredFps: number$1(),
13098
+ actualFps: number$1(),
13099
+ queueDepth: number$1(),
13100
+ avgInferenceMs: number$1(),
13101
+ provisioning: CameraDetectionProvisioningSchema
13102
+ });
13103
+ /** Audio block — null when no audio node is assigned or reachable. */
13104
+ var CameraAudioStatusSchema = object({
13105
+ nodeId: string(),
13106
+ enabled: boolean()
13107
+ });
13108
+ /** Recording block — null when no recording cap is active for this device. */
13109
+ var CameraRecordingStatusSchema = object({
13110
+ mode: _enum([
13111
+ "off",
13112
+ "continuous",
13113
+ "events"
13114
+ ]),
13115
+ active: boolean(),
13116
+ storageBytes: number$1()
13117
+ });
13118
+ /**
13119
+ * Aggregated per-camera pipeline status — server-composed, single call.
13120
+ *
13121
+ * The `assignment` and `source` blocks are always present.
13122
+ * Every other block is `null` when the stage is inactive or unreachable
13123
+ * during the bounded parallel fan-out in the orchestrator implementation.
13124
+ *
13125
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13126
+ */
13127
+ var CameraStatusSchema = object({
13128
+ deviceId: number$1(),
13129
+ assignment: CameraAssignmentStatusSchema,
13130
+ source: CameraSourceStatusSchema,
13131
+ broker: CameraBrokerStatusSchema.nullable(),
13132
+ decoder: CameraDecoderStatusSchema.nullable(),
13133
+ motion: CameraMotionStatusSchema.nullable(),
13134
+ detection: CameraDetectionStatusSchema.nullable(),
13135
+ audio: CameraAudioStatusSchema.nullable(),
13136
+ recording: CameraRecordingStatusSchema.nullable(),
13137
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13138
+ fetchedAt: number$1()
13139
+ });
12980
13140
  method(object({
12981
13141
  deviceId: number$1(),
12982
13142
  agentNodeId: string()
@@ -13044,6 +13204,12 @@ method(object({
13044
13204
  }), {
13045
13205
  kind: "mutation",
13046
13206
  auth: "admin"
13207
+ }), method(object({
13208
+ agentNodeId: string(),
13209
+ maxCameras: number$1().int().nonnegative().nullable()
13210
+ }), object({ success: literal(true) }), {
13211
+ kind: "mutation",
13212
+ auth: "admin"
13047
13213
  }), method(object({ deviceId: number$1() }), CameraPipelineSettingsSchema.nullable()), method(object({
13048
13214
  deviceId: number$1(),
13049
13215
  addonId: string(),
@@ -13069,7 +13235,7 @@ method(object({
13069
13235
  }), method(object({
13070
13236
  deviceId: number$1(),
13071
13237
  agentNodeId: string().optional()
13072
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13238
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number$1() }), CameraStatusSchema), method(object({ deviceIds: array(number$1()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13073
13239
  name: string(),
13074
13240
  description: string().optional(),
13075
13241
  config: CameraPipelineConfigSchema
@@ -18861,6 +19027,12 @@ Object.freeze({
18861
19027
  addonId: null,
18862
19028
  access: "view"
18863
19029
  },
19030
+ "pipelineExecutor.getEngineProvisioning": {
19031
+ capName: "pipeline-executor",
19032
+ capScope: "system",
19033
+ addonId: null,
19034
+ access: "view"
19035
+ },
18864
19036
  "pipelineExecutor.getGlobalPipelineConfig": {
18865
19037
  capName: "pipeline-executor",
18866
19038
  capScope: "system",
@@ -19065,6 +19237,18 @@ Object.freeze({
19065
19237
  addonId: null,
19066
19238
  access: "view"
19067
19239
  },
19240
+ "pipelineOrchestrator.getCameraStatus": {
19241
+ capName: "pipeline-orchestrator",
19242
+ capScope: "system",
19243
+ addonId: null,
19244
+ access: "view"
19245
+ },
19246
+ "pipelineOrchestrator.getCameraStatuses": {
19247
+ capName: "pipeline-orchestrator",
19248
+ capScope: "system",
19249
+ addonId: null,
19250
+ access: "view"
19251
+ },
19068
19252
  "pipelineOrchestrator.getCameraStepOverrides": {
19069
19253
  capName: "pipeline-orchestrator",
19070
19254
  capScope: "system",
@@ -19149,6 +19333,12 @@ Object.freeze({
19149
19333
  addonId: null,
19150
19334
  access: "create"
19151
19335
  },
19336
+ "pipelineOrchestrator.setAgentMaxCameras": {
19337
+ capName: "pipeline-orchestrator",
19338
+ capScope: "system",
19339
+ addonId: null,
19340
+ access: "create"
19341
+ },
19152
19342
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19153
19343
  capName: "pipeline-orchestrator",
19154
19344
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-ha-mqtt",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "HomeAssistant MQTT discovery exporter for CamStack devices. Publishes discovery topics so HA auto-creates entities for exposed cameras/switches/intercoms/sensors.",
5
5
  "keywords": [
6
6
  "camstack",