@camstack/addon-advanced-notifier 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/addon.js +193 -3
- package/dist/addon.mjs +193 -3
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -4986,6 +4986,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
4986
4986
|
*/
|
|
4987
4987
|
EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
|
|
4988
4988
|
/**
|
|
4989
|
+
* Per-node detection-engine runtime-provisioning transition. Emitted by
|
|
4990
|
+
* the detection-pipeline provider on every state change of its lazy
|
|
4991
|
+
* engine-provisioning machine (idle → installing → verifying → ready,
|
|
4992
|
+
* or → failed with a `nextRetryAt`). Payload is the
|
|
4993
|
+
* `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
|
|
4994
|
+
* node. The Pipeline page subscribes to drive a live "installing
|
|
4995
|
+
* OpenVINO… / ready" indicator per node without polling
|
|
4996
|
+
* `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
|
|
4997
|
+
* also reads the cap snapshot on mount / reconnect. Phase 2.
|
|
4998
|
+
*/
|
|
4999
|
+
EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
|
|
5000
|
+
/**
|
|
4989
5001
|
* Cluster topology snapshot. Carries the same payload returned by
|
|
4990
5002
|
* `nodes.topology` (every reachable node + addons + processes).
|
|
4991
5003
|
* Emitted by the hub on any agent / addon lifecycle change
|
|
@@ -9150,6 +9162,24 @@ var DetectorOutputSchema = object({
|
|
|
9150
9162
|
inferenceMs: number(),
|
|
9151
9163
|
modelId: string()
|
|
9152
9164
|
});
|
|
9165
|
+
var EngineProvisioningSchema = object({
|
|
9166
|
+
runtimeId: _enum([
|
|
9167
|
+
"onnx",
|
|
9168
|
+
"openvino",
|
|
9169
|
+
"coreml"
|
|
9170
|
+
]).nullable(),
|
|
9171
|
+
device: string().nullable(),
|
|
9172
|
+
state: _enum([
|
|
9173
|
+
"idle",
|
|
9174
|
+
"installing",
|
|
9175
|
+
"verifying",
|
|
9176
|
+
"ready",
|
|
9177
|
+
"failed"
|
|
9178
|
+
]),
|
|
9179
|
+
progress: number().optional(),
|
|
9180
|
+
error: string().optional(),
|
|
9181
|
+
nextRetryAt: number().optional()
|
|
9182
|
+
});
|
|
9153
9183
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9154
9184
|
addonId: string(),
|
|
9155
9185
|
modelId: string(),
|
|
@@ -9218,7 +9248,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9218
9248
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9219
9249
|
kind: "mutation",
|
|
9220
9250
|
auth: "admin"
|
|
9221
|
-
}), method(_void(), record(string(), object({
|
|
9251
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9222
9252
|
modelId: string(),
|
|
9223
9253
|
settings: record(string(), unknown()).readonly()
|
|
9224
9254
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12805,7 +12835,10 @@ var AgentAddonConfigSchema = object({
|
|
|
12805
12835
|
modelId: string(),
|
|
12806
12836
|
settings: record(string(), unknown()).readonly()
|
|
12807
12837
|
});
|
|
12808
|
-
var AgentPipelineSettingsSchema = object({
|
|
12838
|
+
var AgentPipelineSettingsSchema = object({
|
|
12839
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
12840
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
12841
|
+
});
|
|
12809
12842
|
var CameraPipelineForAgentSchema = object({
|
|
12810
12843
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
12811
12844
|
audio: object({
|
|
@@ -12907,6 +12940,133 @@ var GlobalMetricsSchema = object({
|
|
|
12907
12940
|
* capability providers.
|
|
12908
12941
|
*/
|
|
12909
12942
|
var CapabilityBindingsSchema = record(string(), string());
|
|
12943
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
12944
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
12945
|
+
camStreamId: string(),
|
|
12946
|
+
codec: string(),
|
|
12947
|
+
width: number(),
|
|
12948
|
+
height: number(),
|
|
12949
|
+
fps: number(),
|
|
12950
|
+
kind: string()
|
|
12951
|
+
})).readonly() });
|
|
12952
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
12953
|
+
var CameraAssignmentStatusSchema = object({
|
|
12954
|
+
detectionNodeId: string().nullable(),
|
|
12955
|
+
decoderNodeId: string().nullable(),
|
|
12956
|
+
audioNodeId: string().nullable(),
|
|
12957
|
+
pinned: object({
|
|
12958
|
+
detection: boolean(),
|
|
12959
|
+
decoder: boolean(),
|
|
12960
|
+
audio: boolean()
|
|
12961
|
+
}),
|
|
12962
|
+
reasons: object({
|
|
12963
|
+
detection: string().optional(),
|
|
12964
|
+
decoder: string().optional(),
|
|
12965
|
+
audio: string().optional()
|
|
12966
|
+
})
|
|
12967
|
+
});
|
|
12968
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
12969
|
+
var CameraBrokerStatusSchema = object({
|
|
12970
|
+
profiles: array(object({
|
|
12971
|
+
profile: string(),
|
|
12972
|
+
status: string(),
|
|
12973
|
+
codec: string(),
|
|
12974
|
+
width: number(),
|
|
12975
|
+
height: number(),
|
|
12976
|
+
subscribers: number(),
|
|
12977
|
+
inFps: number(),
|
|
12978
|
+
outFps: number()
|
|
12979
|
+
})).readonly(),
|
|
12980
|
+
webrtcSessions: number(),
|
|
12981
|
+
rtspRestream: boolean()
|
|
12982
|
+
});
|
|
12983
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
12984
|
+
var CameraDecoderShmSchema = object({
|
|
12985
|
+
framesWritten: number(),
|
|
12986
|
+
getFrameHits: number(),
|
|
12987
|
+
getFrameMisses: number(),
|
|
12988
|
+
budgetMb: number()
|
|
12989
|
+
});
|
|
12990
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
12991
|
+
var CameraDecoderStatusSchema = object({
|
|
12992
|
+
nodeId: string(),
|
|
12993
|
+
formats: array(string()).readonly(),
|
|
12994
|
+
sessionCount: number(),
|
|
12995
|
+
shm: CameraDecoderShmSchema
|
|
12996
|
+
});
|
|
12997
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
12998
|
+
var CameraMotionStatusSchema = object({
|
|
12999
|
+
enabled: boolean(),
|
|
13000
|
+
fps: number()
|
|
13001
|
+
});
|
|
13002
|
+
/** Detection provisioning sub-block. */
|
|
13003
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13004
|
+
state: _enum([
|
|
13005
|
+
"idle",
|
|
13006
|
+
"installing",
|
|
13007
|
+
"verifying",
|
|
13008
|
+
"ready",
|
|
13009
|
+
"failed"
|
|
13010
|
+
]),
|
|
13011
|
+
error: string().optional()
|
|
13012
|
+
});
|
|
13013
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13014
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13015
|
+
"idle",
|
|
13016
|
+
"watching",
|
|
13017
|
+
"active"
|
|
13018
|
+
]);
|
|
13019
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13020
|
+
var CameraDetectionStatusSchema = object({
|
|
13021
|
+
nodeId: string(),
|
|
13022
|
+
engine: object({
|
|
13023
|
+
backend: string(),
|
|
13024
|
+
device: string()
|
|
13025
|
+
}),
|
|
13026
|
+
phase: CameraDetectionPhaseSchema,
|
|
13027
|
+
configuredFps: number(),
|
|
13028
|
+
actualFps: number(),
|
|
13029
|
+
queueDepth: number(),
|
|
13030
|
+
avgInferenceMs: number(),
|
|
13031
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13032
|
+
});
|
|
13033
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13034
|
+
var CameraAudioStatusSchema = object({
|
|
13035
|
+
nodeId: string(),
|
|
13036
|
+
enabled: boolean()
|
|
13037
|
+
});
|
|
13038
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13039
|
+
var CameraRecordingStatusSchema = object({
|
|
13040
|
+
mode: _enum([
|
|
13041
|
+
"off",
|
|
13042
|
+
"continuous",
|
|
13043
|
+
"events"
|
|
13044
|
+
]),
|
|
13045
|
+
active: boolean(),
|
|
13046
|
+
storageBytes: number()
|
|
13047
|
+
});
|
|
13048
|
+
/**
|
|
13049
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13050
|
+
*
|
|
13051
|
+
* The `assignment` and `source` blocks are always present.
|
|
13052
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13053
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13054
|
+
*
|
|
13055
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13056
|
+
*/
|
|
13057
|
+
var CameraStatusSchema = object({
|
|
13058
|
+
deviceId: number(),
|
|
13059
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13060
|
+
source: CameraSourceStatusSchema,
|
|
13061
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13062
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13063
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13064
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13065
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13066
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13067
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13068
|
+
fetchedAt: number()
|
|
13069
|
+
});
|
|
12910
13070
|
method(object({
|
|
12911
13071
|
deviceId: number(),
|
|
12912
13072
|
agentNodeId: string()
|
|
@@ -12974,6 +13134,12 @@ method(object({
|
|
|
12974
13134
|
}), {
|
|
12975
13135
|
kind: "mutation",
|
|
12976
13136
|
auth: "admin"
|
|
13137
|
+
}), method(object({
|
|
13138
|
+
agentNodeId: string(),
|
|
13139
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13140
|
+
}), object({ success: literal(true) }), {
|
|
13141
|
+
kind: "mutation",
|
|
13142
|
+
auth: "admin"
|
|
12977
13143
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
12978
13144
|
deviceId: number(),
|
|
12979
13145
|
addonId: string(),
|
|
@@ -12999,7 +13165,7 @@ method(object({
|
|
|
12999
13165
|
}), method(object({
|
|
13000
13166
|
deviceId: number(),
|
|
13001
13167
|
agentNodeId: string().optional()
|
|
13002
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13168
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13003
13169
|
name: string(),
|
|
13004
13170
|
description: string().optional(),
|
|
13005
13171
|
config: CameraPipelineConfigSchema
|
|
@@ -18811,6 +18977,12 @@ Object.freeze({
|
|
|
18811
18977
|
addonId: null,
|
|
18812
18978
|
access: "view"
|
|
18813
18979
|
},
|
|
18980
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
18981
|
+
capName: "pipeline-executor",
|
|
18982
|
+
capScope: "system",
|
|
18983
|
+
addonId: null,
|
|
18984
|
+
access: "view"
|
|
18985
|
+
},
|
|
18814
18986
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
18815
18987
|
capName: "pipeline-executor",
|
|
18816
18988
|
capScope: "system",
|
|
@@ -19015,6 +19187,18 @@ Object.freeze({
|
|
|
19015
19187
|
addonId: null,
|
|
19016
19188
|
access: "view"
|
|
19017
19189
|
},
|
|
19190
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19191
|
+
capName: "pipeline-orchestrator",
|
|
19192
|
+
capScope: "system",
|
|
19193
|
+
addonId: null,
|
|
19194
|
+
access: "view"
|
|
19195
|
+
},
|
|
19196
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19197
|
+
capName: "pipeline-orchestrator",
|
|
19198
|
+
capScope: "system",
|
|
19199
|
+
addonId: null,
|
|
19200
|
+
access: "view"
|
|
19201
|
+
},
|
|
19018
19202
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19019
19203
|
capName: "pipeline-orchestrator",
|
|
19020
19204
|
capScope: "system",
|
|
@@ -19099,6 +19283,12 @@ Object.freeze({
|
|
|
19099
19283
|
addonId: null,
|
|
19100
19284
|
access: "create"
|
|
19101
19285
|
},
|
|
19286
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19287
|
+
capName: "pipeline-orchestrator",
|
|
19288
|
+
capScope: "system",
|
|
19289
|
+
addonId: null,
|
|
19290
|
+
access: "create"
|
|
19291
|
+
},
|
|
19102
19292
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19103
19293
|
capName: "pipeline-orchestrator",
|
|
19104
19294
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -4982,6 +4982,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
4982
4982
|
*/
|
|
4983
4983
|
EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
|
|
4984
4984
|
/**
|
|
4985
|
+
* Per-node detection-engine runtime-provisioning transition. Emitted by
|
|
4986
|
+
* the detection-pipeline provider on every state change of its lazy
|
|
4987
|
+
* engine-provisioning machine (idle → installing → verifying → ready,
|
|
4988
|
+
* or → failed with a `nextRetryAt`). Payload is the
|
|
4989
|
+
* `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
|
|
4990
|
+
* node. The Pipeline page subscribes to drive a live "installing
|
|
4991
|
+
* OpenVINO… / ready" indicator per node without polling
|
|
4992
|
+
* `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
|
|
4993
|
+
* also reads the cap snapshot on mount / reconnect. Phase 2.
|
|
4994
|
+
*/
|
|
4995
|
+
EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
|
|
4996
|
+
/**
|
|
4985
4997
|
* Cluster topology snapshot. Carries the same payload returned by
|
|
4986
4998
|
* `nodes.topology` (every reachable node + addons + processes).
|
|
4987
4999
|
* Emitted by the hub on any agent / addon lifecycle change
|
|
@@ -9146,6 +9158,24 @@ var DetectorOutputSchema = object({
|
|
|
9146
9158
|
inferenceMs: number(),
|
|
9147
9159
|
modelId: string()
|
|
9148
9160
|
});
|
|
9161
|
+
var EngineProvisioningSchema = object({
|
|
9162
|
+
runtimeId: _enum([
|
|
9163
|
+
"onnx",
|
|
9164
|
+
"openvino",
|
|
9165
|
+
"coreml"
|
|
9166
|
+
]).nullable(),
|
|
9167
|
+
device: string().nullable(),
|
|
9168
|
+
state: _enum([
|
|
9169
|
+
"idle",
|
|
9170
|
+
"installing",
|
|
9171
|
+
"verifying",
|
|
9172
|
+
"ready",
|
|
9173
|
+
"failed"
|
|
9174
|
+
]),
|
|
9175
|
+
progress: number().optional(),
|
|
9176
|
+
error: string().optional(),
|
|
9177
|
+
nextRetryAt: number().optional()
|
|
9178
|
+
});
|
|
9149
9179
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9150
9180
|
addonId: string(),
|
|
9151
9181
|
modelId: string(),
|
|
@@ -9214,7 +9244,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9214
9244
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9215
9245
|
kind: "mutation",
|
|
9216
9246
|
auth: "admin"
|
|
9217
|
-
}), method(_void(), record(string(), object({
|
|
9247
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9218
9248
|
modelId: string(),
|
|
9219
9249
|
settings: record(string(), unknown()).readonly()
|
|
9220
9250
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12801,7 +12831,10 @@ var AgentAddonConfigSchema = object({
|
|
|
12801
12831
|
modelId: string(),
|
|
12802
12832
|
settings: record(string(), unknown()).readonly()
|
|
12803
12833
|
});
|
|
12804
|
-
var AgentPipelineSettingsSchema = object({
|
|
12834
|
+
var AgentPipelineSettingsSchema = object({
|
|
12835
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
12836
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
12837
|
+
});
|
|
12805
12838
|
var CameraPipelineForAgentSchema = object({
|
|
12806
12839
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
12807
12840
|
audio: object({
|
|
@@ -12903,6 +12936,133 @@ var GlobalMetricsSchema = object({
|
|
|
12903
12936
|
* capability providers.
|
|
12904
12937
|
*/
|
|
12905
12938
|
var CapabilityBindingsSchema = record(string(), string());
|
|
12939
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
12940
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
12941
|
+
camStreamId: string(),
|
|
12942
|
+
codec: string(),
|
|
12943
|
+
width: number(),
|
|
12944
|
+
height: number(),
|
|
12945
|
+
fps: number(),
|
|
12946
|
+
kind: string()
|
|
12947
|
+
})).readonly() });
|
|
12948
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
12949
|
+
var CameraAssignmentStatusSchema = object({
|
|
12950
|
+
detectionNodeId: string().nullable(),
|
|
12951
|
+
decoderNodeId: string().nullable(),
|
|
12952
|
+
audioNodeId: string().nullable(),
|
|
12953
|
+
pinned: object({
|
|
12954
|
+
detection: boolean(),
|
|
12955
|
+
decoder: boolean(),
|
|
12956
|
+
audio: boolean()
|
|
12957
|
+
}),
|
|
12958
|
+
reasons: object({
|
|
12959
|
+
detection: string().optional(),
|
|
12960
|
+
decoder: string().optional(),
|
|
12961
|
+
audio: string().optional()
|
|
12962
|
+
})
|
|
12963
|
+
});
|
|
12964
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
12965
|
+
var CameraBrokerStatusSchema = object({
|
|
12966
|
+
profiles: array(object({
|
|
12967
|
+
profile: string(),
|
|
12968
|
+
status: string(),
|
|
12969
|
+
codec: string(),
|
|
12970
|
+
width: number(),
|
|
12971
|
+
height: number(),
|
|
12972
|
+
subscribers: number(),
|
|
12973
|
+
inFps: number(),
|
|
12974
|
+
outFps: number()
|
|
12975
|
+
})).readonly(),
|
|
12976
|
+
webrtcSessions: number(),
|
|
12977
|
+
rtspRestream: boolean()
|
|
12978
|
+
});
|
|
12979
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
12980
|
+
var CameraDecoderShmSchema = object({
|
|
12981
|
+
framesWritten: number(),
|
|
12982
|
+
getFrameHits: number(),
|
|
12983
|
+
getFrameMisses: number(),
|
|
12984
|
+
budgetMb: number()
|
|
12985
|
+
});
|
|
12986
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
12987
|
+
var CameraDecoderStatusSchema = object({
|
|
12988
|
+
nodeId: string(),
|
|
12989
|
+
formats: array(string()).readonly(),
|
|
12990
|
+
sessionCount: number(),
|
|
12991
|
+
shm: CameraDecoderShmSchema
|
|
12992
|
+
});
|
|
12993
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
12994
|
+
var CameraMotionStatusSchema = object({
|
|
12995
|
+
enabled: boolean(),
|
|
12996
|
+
fps: number()
|
|
12997
|
+
});
|
|
12998
|
+
/** Detection provisioning sub-block. */
|
|
12999
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13000
|
+
state: _enum([
|
|
13001
|
+
"idle",
|
|
13002
|
+
"installing",
|
|
13003
|
+
"verifying",
|
|
13004
|
+
"ready",
|
|
13005
|
+
"failed"
|
|
13006
|
+
]),
|
|
13007
|
+
error: string().optional()
|
|
13008
|
+
});
|
|
13009
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13010
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13011
|
+
"idle",
|
|
13012
|
+
"watching",
|
|
13013
|
+
"active"
|
|
13014
|
+
]);
|
|
13015
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13016
|
+
var CameraDetectionStatusSchema = object({
|
|
13017
|
+
nodeId: string(),
|
|
13018
|
+
engine: object({
|
|
13019
|
+
backend: string(),
|
|
13020
|
+
device: string()
|
|
13021
|
+
}),
|
|
13022
|
+
phase: CameraDetectionPhaseSchema,
|
|
13023
|
+
configuredFps: number(),
|
|
13024
|
+
actualFps: number(),
|
|
13025
|
+
queueDepth: number(),
|
|
13026
|
+
avgInferenceMs: number(),
|
|
13027
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13028
|
+
});
|
|
13029
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13030
|
+
var CameraAudioStatusSchema = object({
|
|
13031
|
+
nodeId: string(),
|
|
13032
|
+
enabled: boolean()
|
|
13033
|
+
});
|
|
13034
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13035
|
+
var CameraRecordingStatusSchema = object({
|
|
13036
|
+
mode: _enum([
|
|
13037
|
+
"off",
|
|
13038
|
+
"continuous",
|
|
13039
|
+
"events"
|
|
13040
|
+
]),
|
|
13041
|
+
active: boolean(),
|
|
13042
|
+
storageBytes: number()
|
|
13043
|
+
});
|
|
13044
|
+
/**
|
|
13045
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13046
|
+
*
|
|
13047
|
+
* The `assignment` and `source` blocks are always present.
|
|
13048
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13049
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13050
|
+
*
|
|
13051
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13052
|
+
*/
|
|
13053
|
+
var CameraStatusSchema = object({
|
|
13054
|
+
deviceId: number(),
|
|
13055
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13056
|
+
source: CameraSourceStatusSchema,
|
|
13057
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13058
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13059
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13060
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13061
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13062
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13063
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13064
|
+
fetchedAt: number()
|
|
13065
|
+
});
|
|
12906
13066
|
method(object({
|
|
12907
13067
|
deviceId: number(),
|
|
12908
13068
|
agentNodeId: string()
|
|
@@ -12970,6 +13130,12 @@ method(object({
|
|
|
12970
13130
|
}), {
|
|
12971
13131
|
kind: "mutation",
|
|
12972
13132
|
auth: "admin"
|
|
13133
|
+
}), method(object({
|
|
13134
|
+
agentNodeId: string(),
|
|
13135
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13136
|
+
}), object({ success: literal(true) }), {
|
|
13137
|
+
kind: "mutation",
|
|
13138
|
+
auth: "admin"
|
|
12973
13139
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
12974
13140
|
deviceId: number(),
|
|
12975
13141
|
addonId: string(),
|
|
@@ -12995,7 +13161,7 @@ method(object({
|
|
|
12995
13161
|
}), method(object({
|
|
12996
13162
|
deviceId: number(),
|
|
12997
13163
|
agentNodeId: string().optional()
|
|
12998
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13164
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
12999
13165
|
name: string(),
|
|
13000
13166
|
description: string().optional(),
|
|
13001
13167
|
config: CameraPipelineConfigSchema
|
|
@@ -18807,6 +18973,12 @@ Object.freeze({
|
|
|
18807
18973
|
addonId: null,
|
|
18808
18974
|
access: "view"
|
|
18809
18975
|
},
|
|
18976
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
18977
|
+
capName: "pipeline-executor",
|
|
18978
|
+
capScope: "system",
|
|
18979
|
+
addonId: null,
|
|
18980
|
+
access: "view"
|
|
18981
|
+
},
|
|
18810
18982
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
18811
18983
|
capName: "pipeline-executor",
|
|
18812
18984
|
capScope: "system",
|
|
@@ -19011,6 +19183,18 @@ Object.freeze({
|
|
|
19011
19183
|
addonId: null,
|
|
19012
19184
|
access: "view"
|
|
19013
19185
|
},
|
|
19186
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19187
|
+
capName: "pipeline-orchestrator",
|
|
19188
|
+
capScope: "system",
|
|
19189
|
+
addonId: null,
|
|
19190
|
+
access: "view"
|
|
19191
|
+
},
|
|
19192
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19193
|
+
capName: "pipeline-orchestrator",
|
|
19194
|
+
capScope: "system",
|
|
19195
|
+
addonId: null,
|
|
19196
|
+
access: "view"
|
|
19197
|
+
},
|
|
19014
19198
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19015
19199
|
capName: "pipeline-orchestrator",
|
|
19016
19200
|
capScope: "system",
|
|
@@ -19095,6 +19279,12 @@ Object.freeze({
|
|
|
19095
19279
|
addonId: null,
|
|
19096
19280
|
access: "create"
|
|
19097
19281
|
},
|
|
19282
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19283
|
+
capName: "pipeline-orchestrator",
|
|
19284
|
+
capScope: "system",
|
|
19285
|
+
addonId: null,
|
|
19286
|
+
access: "create"
|
|
19287
|
+
},
|
|
19098
19288
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19099
19289
|
capName: "pipeline-orchestrator",
|
|
19100
19290
|
capScope: "system",
|