@camstack/addon-mqtt-broker 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/mqtt-broker.addon.js +193 -3
- package/dist/mqtt-broker.addon.mjs +193 -3
- package/package.json +1 -1
|
@@ -5027,6 +5027,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5027
5027
|
*/
|
|
5028
5028
|
EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
|
|
5029
5029
|
/**
|
|
5030
|
+
* Per-node detection-engine runtime-provisioning transition. Emitted by
|
|
5031
|
+
* the detection-pipeline provider on every state change of its lazy
|
|
5032
|
+
* engine-provisioning machine (idle → installing → verifying → ready,
|
|
5033
|
+
* or → failed with a `nextRetryAt`). Payload is the
|
|
5034
|
+
* `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
|
|
5035
|
+
* node. The Pipeline page subscribes to drive a live "installing
|
|
5036
|
+
* OpenVINO… / ready" indicator per node without polling
|
|
5037
|
+
* `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
|
|
5038
|
+
* also reads the cap snapshot on mount / reconnect. Phase 2.
|
|
5039
|
+
*/
|
|
5040
|
+
EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
|
|
5041
|
+
/**
|
|
5030
5042
|
* Cluster topology snapshot. Carries the same payload returned by
|
|
5031
5043
|
* `nodes.topology` (every reachable node + addons + processes).
|
|
5032
5044
|
* Emitted by the hub on any agent / addon lifecycle change
|
|
@@ -9191,6 +9203,24 @@ var DetectorOutputSchema = object({
|
|
|
9191
9203
|
inferenceMs: number(),
|
|
9192
9204
|
modelId: string()
|
|
9193
9205
|
});
|
|
9206
|
+
var EngineProvisioningSchema = object({
|
|
9207
|
+
runtimeId: _enum([
|
|
9208
|
+
"onnx",
|
|
9209
|
+
"openvino",
|
|
9210
|
+
"coreml"
|
|
9211
|
+
]).nullable(),
|
|
9212
|
+
device: string().nullable(),
|
|
9213
|
+
state: _enum([
|
|
9214
|
+
"idle",
|
|
9215
|
+
"installing",
|
|
9216
|
+
"verifying",
|
|
9217
|
+
"ready",
|
|
9218
|
+
"failed"
|
|
9219
|
+
]),
|
|
9220
|
+
progress: number().optional(),
|
|
9221
|
+
error: string().optional(),
|
|
9222
|
+
nextRetryAt: number().optional()
|
|
9223
|
+
});
|
|
9194
9224
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9195
9225
|
addonId: string(),
|
|
9196
9226
|
modelId: string(),
|
|
@@ -9259,7 +9289,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9259
9289
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9260
9290
|
kind: "mutation",
|
|
9261
9291
|
auth: "admin"
|
|
9262
|
-
}), method(_void(), record(string(), object({
|
|
9292
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9263
9293
|
modelId: string(),
|
|
9264
9294
|
settings: record(string(), unknown()).readonly()
|
|
9265
9295
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12914,7 +12944,10 @@ var AgentAddonConfigSchema = object({
|
|
|
12914
12944
|
modelId: string(),
|
|
12915
12945
|
settings: record(string(), unknown()).readonly()
|
|
12916
12946
|
});
|
|
12917
|
-
var AgentPipelineSettingsSchema = object({
|
|
12947
|
+
var AgentPipelineSettingsSchema = object({
|
|
12948
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
12949
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
12950
|
+
});
|
|
12918
12951
|
var CameraPipelineForAgentSchema = object({
|
|
12919
12952
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
12920
12953
|
audio: object({
|
|
@@ -13016,6 +13049,133 @@ var GlobalMetricsSchema = object({
|
|
|
13016
13049
|
* capability providers.
|
|
13017
13050
|
*/
|
|
13018
13051
|
var CapabilityBindingsSchema = record(string(), string());
|
|
13052
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
13053
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
13054
|
+
camStreamId: string(),
|
|
13055
|
+
codec: string(),
|
|
13056
|
+
width: number(),
|
|
13057
|
+
height: number(),
|
|
13058
|
+
fps: number(),
|
|
13059
|
+
kind: string()
|
|
13060
|
+
})).readonly() });
|
|
13061
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
13062
|
+
var CameraAssignmentStatusSchema = object({
|
|
13063
|
+
detectionNodeId: string().nullable(),
|
|
13064
|
+
decoderNodeId: string().nullable(),
|
|
13065
|
+
audioNodeId: string().nullable(),
|
|
13066
|
+
pinned: object({
|
|
13067
|
+
detection: boolean(),
|
|
13068
|
+
decoder: boolean(),
|
|
13069
|
+
audio: boolean()
|
|
13070
|
+
}),
|
|
13071
|
+
reasons: object({
|
|
13072
|
+
detection: string().optional(),
|
|
13073
|
+
decoder: string().optional(),
|
|
13074
|
+
audio: string().optional()
|
|
13075
|
+
})
|
|
13076
|
+
});
|
|
13077
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
13078
|
+
var CameraBrokerStatusSchema = object({
|
|
13079
|
+
profiles: array(object({
|
|
13080
|
+
profile: string(),
|
|
13081
|
+
status: string(),
|
|
13082
|
+
codec: string(),
|
|
13083
|
+
width: number(),
|
|
13084
|
+
height: number(),
|
|
13085
|
+
subscribers: number(),
|
|
13086
|
+
inFps: number(),
|
|
13087
|
+
outFps: number()
|
|
13088
|
+
})).readonly(),
|
|
13089
|
+
webrtcSessions: number(),
|
|
13090
|
+
rtspRestream: boolean()
|
|
13091
|
+
});
|
|
13092
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
13093
|
+
var CameraDecoderShmSchema = object({
|
|
13094
|
+
framesWritten: number(),
|
|
13095
|
+
getFrameHits: number(),
|
|
13096
|
+
getFrameMisses: number(),
|
|
13097
|
+
budgetMb: number()
|
|
13098
|
+
});
|
|
13099
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
13100
|
+
var CameraDecoderStatusSchema = object({
|
|
13101
|
+
nodeId: string(),
|
|
13102
|
+
formats: array(string()).readonly(),
|
|
13103
|
+
sessionCount: number(),
|
|
13104
|
+
shm: CameraDecoderShmSchema
|
|
13105
|
+
});
|
|
13106
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
13107
|
+
var CameraMotionStatusSchema = object({
|
|
13108
|
+
enabled: boolean(),
|
|
13109
|
+
fps: number()
|
|
13110
|
+
});
|
|
13111
|
+
/** Detection provisioning sub-block. */
|
|
13112
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13113
|
+
state: _enum([
|
|
13114
|
+
"idle",
|
|
13115
|
+
"installing",
|
|
13116
|
+
"verifying",
|
|
13117
|
+
"ready",
|
|
13118
|
+
"failed"
|
|
13119
|
+
]),
|
|
13120
|
+
error: string().optional()
|
|
13121
|
+
});
|
|
13122
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13123
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13124
|
+
"idle",
|
|
13125
|
+
"watching",
|
|
13126
|
+
"active"
|
|
13127
|
+
]);
|
|
13128
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13129
|
+
var CameraDetectionStatusSchema = object({
|
|
13130
|
+
nodeId: string(),
|
|
13131
|
+
engine: object({
|
|
13132
|
+
backend: string(),
|
|
13133
|
+
device: string()
|
|
13134
|
+
}),
|
|
13135
|
+
phase: CameraDetectionPhaseSchema,
|
|
13136
|
+
configuredFps: number(),
|
|
13137
|
+
actualFps: number(),
|
|
13138
|
+
queueDepth: number(),
|
|
13139
|
+
avgInferenceMs: number(),
|
|
13140
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13141
|
+
});
|
|
13142
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13143
|
+
var CameraAudioStatusSchema = object({
|
|
13144
|
+
nodeId: string(),
|
|
13145
|
+
enabled: boolean()
|
|
13146
|
+
});
|
|
13147
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13148
|
+
var CameraRecordingStatusSchema = object({
|
|
13149
|
+
mode: _enum([
|
|
13150
|
+
"off",
|
|
13151
|
+
"continuous",
|
|
13152
|
+
"events"
|
|
13153
|
+
]),
|
|
13154
|
+
active: boolean(),
|
|
13155
|
+
storageBytes: number()
|
|
13156
|
+
});
|
|
13157
|
+
/**
|
|
13158
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13159
|
+
*
|
|
13160
|
+
* The `assignment` and `source` blocks are always present.
|
|
13161
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13162
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13163
|
+
*
|
|
13164
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13165
|
+
*/
|
|
13166
|
+
var CameraStatusSchema = object({
|
|
13167
|
+
deviceId: number(),
|
|
13168
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13169
|
+
source: CameraSourceStatusSchema,
|
|
13170
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13171
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13172
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13173
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13174
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13175
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13176
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13177
|
+
fetchedAt: number()
|
|
13178
|
+
});
|
|
13019
13179
|
method(object({
|
|
13020
13180
|
deviceId: number(),
|
|
13021
13181
|
agentNodeId: string()
|
|
@@ -13083,6 +13243,12 @@ method(object({
|
|
|
13083
13243
|
}), {
|
|
13084
13244
|
kind: "mutation",
|
|
13085
13245
|
auth: "admin"
|
|
13246
|
+
}), method(object({
|
|
13247
|
+
agentNodeId: string(),
|
|
13248
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13249
|
+
}), object({ success: literal(true) }), {
|
|
13250
|
+
kind: "mutation",
|
|
13251
|
+
auth: "admin"
|
|
13086
13252
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
13087
13253
|
deviceId: number(),
|
|
13088
13254
|
addonId: string(),
|
|
@@ -13108,7 +13274,7 @@ method(object({
|
|
|
13108
13274
|
}), method(object({
|
|
13109
13275
|
deviceId: number(),
|
|
13110
13276
|
agentNodeId: string().optional()
|
|
13111
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13277
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13112
13278
|
name: string(),
|
|
13113
13279
|
description: string().optional(),
|
|
13114
13280
|
config: CameraPipelineConfigSchema
|
|
@@ -18900,6 +19066,12 @@ Object.freeze({
|
|
|
18900
19066
|
addonId: null,
|
|
18901
19067
|
access: "view"
|
|
18902
19068
|
},
|
|
19069
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
19070
|
+
capName: "pipeline-executor",
|
|
19071
|
+
capScope: "system",
|
|
19072
|
+
addonId: null,
|
|
19073
|
+
access: "view"
|
|
19074
|
+
},
|
|
18903
19075
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
18904
19076
|
capName: "pipeline-executor",
|
|
18905
19077
|
capScope: "system",
|
|
@@ -19104,6 +19276,18 @@ Object.freeze({
|
|
|
19104
19276
|
addonId: null,
|
|
19105
19277
|
access: "view"
|
|
19106
19278
|
},
|
|
19279
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19280
|
+
capName: "pipeline-orchestrator",
|
|
19281
|
+
capScope: "system",
|
|
19282
|
+
addonId: null,
|
|
19283
|
+
access: "view"
|
|
19284
|
+
},
|
|
19285
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19286
|
+
capName: "pipeline-orchestrator",
|
|
19287
|
+
capScope: "system",
|
|
19288
|
+
addonId: null,
|
|
19289
|
+
access: "view"
|
|
19290
|
+
},
|
|
19107
19291
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19108
19292
|
capName: "pipeline-orchestrator",
|
|
19109
19293
|
capScope: "system",
|
|
@@ -19188,6 +19372,12 @@ Object.freeze({
|
|
|
19188
19372
|
addonId: null,
|
|
19189
19373
|
access: "create"
|
|
19190
19374
|
},
|
|
19375
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19376
|
+
capName: "pipeline-orchestrator",
|
|
19377
|
+
capScope: "system",
|
|
19378
|
+
addonId: null,
|
|
19379
|
+
access: "create"
|
|
19380
|
+
},
|
|
19191
19381
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19192
19382
|
capName: "pipeline-orchestrator",
|
|
19193
19383
|
capScope: "system",
|
|
@@ -5022,6 +5022,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5022
5022
|
*/
|
|
5023
5023
|
EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
|
|
5024
5024
|
/**
|
|
5025
|
+
* Per-node detection-engine runtime-provisioning transition. Emitted by
|
|
5026
|
+
* the detection-pipeline provider on every state change of its lazy
|
|
5027
|
+
* engine-provisioning machine (idle → installing → verifying → ready,
|
|
5028
|
+
* or → failed with a `nextRetryAt`). Payload is the
|
|
5029
|
+
* `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
|
|
5030
|
+
* node. The Pipeline page subscribes to drive a live "installing
|
|
5031
|
+
* OpenVINO… / ready" indicator per node without polling
|
|
5032
|
+
* `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
|
|
5033
|
+
* also reads the cap snapshot on mount / reconnect. Phase 2.
|
|
5034
|
+
*/
|
|
5035
|
+
EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
|
|
5036
|
+
/**
|
|
5025
5037
|
* Cluster topology snapshot. Carries the same payload returned by
|
|
5026
5038
|
* `nodes.topology` (every reachable node + addons + processes).
|
|
5027
5039
|
* Emitted by the hub on any agent / addon lifecycle change
|
|
@@ -9186,6 +9198,24 @@ var DetectorOutputSchema = object({
|
|
|
9186
9198
|
inferenceMs: number(),
|
|
9187
9199
|
modelId: string()
|
|
9188
9200
|
});
|
|
9201
|
+
var EngineProvisioningSchema = object({
|
|
9202
|
+
runtimeId: _enum([
|
|
9203
|
+
"onnx",
|
|
9204
|
+
"openvino",
|
|
9205
|
+
"coreml"
|
|
9206
|
+
]).nullable(),
|
|
9207
|
+
device: string().nullable(),
|
|
9208
|
+
state: _enum([
|
|
9209
|
+
"idle",
|
|
9210
|
+
"installing",
|
|
9211
|
+
"verifying",
|
|
9212
|
+
"ready",
|
|
9213
|
+
"failed"
|
|
9214
|
+
]),
|
|
9215
|
+
progress: number().optional(),
|
|
9216
|
+
error: string().optional(),
|
|
9217
|
+
nextRetryAt: number().optional()
|
|
9218
|
+
});
|
|
9189
9219
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9190
9220
|
addonId: string(),
|
|
9191
9221
|
modelId: string(),
|
|
@@ -9254,7 +9284,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9254
9284
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9255
9285
|
kind: "mutation",
|
|
9256
9286
|
auth: "admin"
|
|
9257
|
-
}), method(_void(), record(string(), object({
|
|
9287
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9258
9288
|
modelId: string(),
|
|
9259
9289
|
settings: record(string(), unknown()).readonly()
|
|
9260
9290
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12909,7 +12939,10 @@ var AgentAddonConfigSchema = object({
|
|
|
12909
12939
|
modelId: string(),
|
|
12910
12940
|
settings: record(string(), unknown()).readonly()
|
|
12911
12941
|
});
|
|
12912
|
-
var AgentPipelineSettingsSchema = object({
|
|
12942
|
+
var AgentPipelineSettingsSchema = object({
|
|
12943
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
12944
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
12945
|
+
});
|
|
12913
12946
|
var CameraPipelineForAgentSchema = object({
|
|
12914
12947
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
12915
12948
|
audio: object({
|
|
@@ -13011,6 +13044,133 @@ var GlobalMetricsSchema = object({
|
|
|
13011
13044
|
* capability providers.
|
|
13012
13045
|
*/
|
|
13013
13046
|
var CapabilityBindingsSchema = record(string(), string());
|
|
13047
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
13048
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
13049
|
+
camStreamId: string(),
|
|
13050
|
+
codec: string(),
|
|
13051
|
+
width: number(),
|
|
13052
|
+
height: number(),
|
|
13053
|
+
fps: number(),
|
|
13054
|
+
kind: string()
|
|
13055
|
+
})).readonly() });
|
|
13056
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
13057
|
+
var CameraAssignmentStatusSchema = object({
|
|
13058
|
+
detectionNodeId: string().nullable(),
|
|
13059
|
+
decoderNodeId: string().nullable(),
|
|
13060
|
+
audioNodeId: string().nullable(),
|
|
13061
|
+
pinned: object({
|
|
13062
|
+
detection: boolean(),
|
|
13063
|
+
decoder: boolean(),
|
|
13064
|
+
audio: boolean()
|
|
13065
|
+
}),
|
|
13066
|
+
reasons: object({
|
|
13067
|
+
detection: string().optional(),
|
|
13068
|
+
decoder: string().optional(),
|
|
13069
|
+
audio: string().optional()
|
|
13070
|
+
})
|
|
13071
|
+
});
|
|
13072
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
13073
|
+
var CameraBrokerStatusSchema = object({
|
|
13074
|
+
profiles: array(object({
|
|
13075
|
+
profile: string(),
|
|
13076
|
+
status: string(),
|
|
13077
|
+
codec: string(),
|
|
13078
|
+
width: number(),
|
|
13079
|
+
height: number(),
|
|
13080
|
+
subscribers: number(),
|
|
13081
|
+
inFps: number(),
|
|
13082
|
+
outFps: number()
|
|
13083
|
+
})).readonly(),
|
|
13084
|
+
webrtcSessions: number(),
|
|
13085
|
+
rtspRestream: boolean()
|
|
13086
|
+
});
|
|
13087
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
13088
|
+
var CameraDecoderShmSchema = object({
|
|
13089
|
+
framesWritten: number(),
|
|
13090
|
+
getFrameHits: number(),
|
|
13091
|
+
getFrameMisses: number(),
|
|
13092
|
+
budgetMb: number()
|
|
13093
|
+
});
|
|
13094
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
13095
|
+
var CameraDecoderStatusSchema = object({
|
|
13096
|
+
nodeId: string(),
|
|
13097
|
+
formats: array(string()).readonly(),
|
|
13098
|
+
sessionCount: number(),
|
|
13099
|
+
shm: CameraDecoderShmSchema
|
|
13100
|
+
});
|
|
13101
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
13102
|
+
var CameraMotionStatusSchema = object({
|
|
13103
|
+
enabled: boolean(),
|
|
13104
|
+
fps: number()
|
|
13105
|
+
});
|
|
13106
|
+
/** Detection provisioning sub-block. */
|
|
13107
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13108
|
+
state: _enum([
|
|
13109
|
+
"idle",
|
|
13110
|
+
"installing",
|
|
13111
|
+
"verifying",
|
|
13112
|
+
"ready",
|
|
13113
|
+
"failed"
|
|
13114
|
+
]),
|
|
13115
|
+
error: string().optional()
|
|
13116
|
+
});
|
|
13117
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13118
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13119
|
+
"idle",
|
|
13120
|
+
"watching",
|
|
13121
|
+
"active"
|
|
13122
|
+
]);
|
|
13123
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13124
|
+
var CameraDetectionStatusSchema = object({
|
|
13125
|
+
nodeId: string(),
|
|
13126
|
+
engine: object({
|
|
13127
|
+
backend: string(),
|
|
13128
|
+
device: string()
|
|
13129
|
+
}),
|
|
13130
|
+
phase: CameraDetectionPhaseSchema,
|
|
13131
|
+
configuredFps: number(),
|
|
13132
|
+
actualFps: number(),
|
|
13133
|
+
queueDepth: number(),
|
|
13134
|
+
avgInferenceMs: number(),
|
|
13135
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13136
|
+
});
|
|
13137
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13138
|
+
var CameraAudioStatusSchema = object({
|
|
13139
|
+
nodeId: string(),
|
|
13140
|
+
enabled: boolean()
|
|
13141
|
+
});
|
|
13142
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13143
|
+
var CameraRecordingStatusSchema = object({
|
|
13144
|
+
mode: _enum([
|
|
13145
|
+
"off",
|
|
13146
|
+
"continuous",
|
|
13147
|
+
"events"
|
|
13148
|
+
]),
|
|
13149
|
+
active: boolean(),
|
|
13150
|
+
storageBytes: number()
|
|
13151
|
+
});
|
|
13152
|
+
/**
|
|
13153
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13154
|
+
*
|
|
13155
|
+
* The `assignment` and `source` blocks are always present.
|
|
13156
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13157
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13158
|
+
*
|
|
13159
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13160
|
+
*/
|
|
13161
|
+
var CameraStatusSchema = object({
|
|
13162
|
+
deviceId: number(),
|
|
13163
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13164
|
+
source: CameraSourceStatusSchema,
|
|
13165
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13166
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13167
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13168
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13169
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13170
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13171
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13172
|
+
fetchedAt: number()
|
|
13173
|
+
});
|
|
13014
13174
|
method(object({
|
|
13015
13175
|
deviceId: number(),
|
|
13016
13176
|
agentNodeId: string()
|
|
@@ -13078,6 +13238,12 @@ method(object({
|
|
|
13078
13238
|
}), {
|
|
13079
13239
|
kind: "mutation",
|
|
13080
13240
|
auth: "admin"
|
|
13241
|
+
}), method(object({
|
|
13242
|
+
agentNodeId: string(),
|
|
13243
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13244
|
+
}), object({ success: literal(true) }), {
|
|
13245
|
+
kind: "mutation",
|
|
13246
|
+
auth: "admin"
|
|
13081
13247
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
13082
13248
|
deviceId: number(),
|
|
13083
13249
|
addonId: string(),
|
|
@@ -13103,7 +13269,7 @@ method(object({
|
|
|
13103
13269
|
}), method(object({
|
|
13104
13270
|
deviceId: number(),
|
|
13105
13271
|
agentNodeId: string().optional()
|
|
13106
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13272
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13107
13273
|
name: string(),
|
|
13108
13274
|
description: string().optional(),
|
|
13109
13275
|
config: CameraPipelineConfigSchema
|
|
@@ -18895,6 +19061,12 @@ Object.freeze({
|
|
|
18895
19061
|
addonId: null,
|
|
18896
19062
|
access: "view"
|
|
18897
19063
|
},
|
|
19064
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
19065
|
+
capName: "pipeline-executor",
|
|
19066
|
+
capScope: "system",
|
|
19067
|
+
addonId: null,
|
|
19068
|
+
access: "view"
|
|
19069
|
+
},
|
|
18898
19070
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
18899
19071
|
capName: "pipeline-executor",
|
|
18900
19072
|
capScope: "system",
|
|
@@ -19099,6 +19271,18 @@ Object.freeze({
|
|
|
19099
19271
|
addonId: null,
|
|
19100
19272
|
access: "view"
|
|
19101
19273
|
},
|
|
19274
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19275
|
+
capName: "pipeline-orchestrator",
|
|
19276
|
+
capScope: "system",
|
|
19277
|
+
addonId: null,
|
|
19278
|
+
access: "view"
|
|
19279
|
+
},
|
|
19280
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19281
|
+
capName: "pipeline-orchestrator",
|
|
19282
|
+
capScope: "system",
|
|
19283
|
+
addonId: null,
|
|
19284
|
+
access: "view"
|
|
19285
|
+
},
|
|
19102
19286
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19103
19287
|
capName: "pipeline-orchestrator",
|
|
19104
19288
|
capScope: "system",
|
|
@@ -19183,6 +19367,12 @@ Object.freeze({
|
|
|
19183
19367
|
addonId: null,
|
|
19184
19368
|
access: "create"
|
|
19185
19369
|
},
|
|
19370
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19371
|
+
capName: "pipeline-orchestrator",
|
|
19372
|
+
capScope: "system",
|
|
19373
|
+
addonId: null,
|
|
19374
|
+
access: "create"
|
|
19375
|
+
},
|
|
19186
19376
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19187
19377
|
capName: "pipeline-orchestrator",
|
|
19188
19378
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-mqtt-broker",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|