@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.
- package/dist/export-ha-mqtt.addon.js +193 -3
- package/dist/export-ha-mqtt.addon.mjs +193 -3
- package/package.json +1 -1
|
@@ -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({
|
|
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({
|
|
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.
|
|
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",
|