@camstack/addon-provider-onvif 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
|
@@ -4985,6 +4985,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
4985
4985
|
*/
|
|
4986
4986
|
EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
|
|
4987
4987
|
/**
|
|
4988
|
+
* Per-node detection-engine runtime-provisioning transition. Emitted by
|
|
4989
|
+
* the detection-pipeline provider on every state change of its lazy
|
|
4990
|
+
* engine-provisioning machine (idle → installing → verifying → ready,
|
|
4991
|
+
* or → failed with a `nextRetryAt`). Payload is the
|
|
4992
|
+
* `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
|
|
4993
|
+
* node. The Pipeline page subscribes to drive a live "installing
|
|
4994
|
+
* OpenVINO… / ready" indicator per node without polling
|
|
4995
|
+
* `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
|
|
4996
|
+
* also reads the cap snapshot on mount / reconnect. Phase 2.
|
|
4997
|
+
*/
|
|
4998
|
+
EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
|
|
4999
|
+
/**
|
|
4988
5000
|
* Cluster topology snapshot. Carries the same payload returned by
|
|
4989
5001
|
* `nodes.topology` (every reachable node + addons + processes).
|
|
4990
5002
|
* Emitted by the hub on any agent / addon lifecycle change
|
|
@@ -9263,6 +9275,24 @@ var DetectorOutputSchema = object({
|
|
|
9263
9275
|
inferenceMs: number(),
|
|
9264
9276
|
modelId: string()
|
|
9265
9277
|
});
|
|
9278
|
+
var EngineProvisioningSchema = object({
|
|
9279
|
+
runtimeId: _enum([
|
|
9280
|
+
"onnx",
|
|
9281
|
+
"openvino",
|
|
9282
|
+
"coreml"
|
|
9283
|
+
]).nullable(),
|
|
9284
|
+
device: string().nullable(),
|
|
9285
|
+
state: _enum([
|
|
9286
|
+
"idle",
|
|
9287
|
+
"installing",
|
|
9288
|
+
"verifying",
|
|
9289
|
+
"ready",
|
|
9290
|
+
"failed"
|
|
9291
|
+
]),
|
|
9292
|
+
progress: number().optional(),
|
|
9293
|
+
error: string().optional(),
|
|
9294
|
+
nextRetryAt: number().optional()
|
|
9295
|
+
});
|
|
9266
9296
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9267
9297
|
addonId: string(),
|
|
9268
9298
|
modelId: string(),
|
|
@@ -9331,7 +9361,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9331
9361
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9332
9362
|
kind: "mutation",
|
|
9333
9363
|
auth: "admin"
|
|
9334
|
-
}), method(_void(), record(string(), object({
|
|
9364
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9335
9365
|
modelId: string(),
|
|
9336
9366
|
settings: record(string(), unknown()).readonly()
|
|
9337
9367
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -13178,7 +13208,10 @@ var AgentAddonConfigSchema = object({
|
|
|
13178
13208
|
modelId: string(),
|
|
13179
13209
|
settings: record(string(), unknown()).readonly()
|
|
13180
13210
|
});
|
|
13181
|
-
var AgentPipelineSettingsSchema = object({
|
|
13211
|
+
var AgentPipelineSettingsSchema = object({
|
|
13212
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
13213
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
13214
|
+
});
|
|
13182
13215
|
var CameraPipelineForAgentSchema = object({
|
|
13183
13216
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
13184
13217
|
audio: object({
|
|
@@ -13280,6 +13313,133 @@ var GlobalMetricsSchema = object({
|
|
|
13280
13313
|
* capability providers.
|
|
13281
13314
|
*/
|
|
13282
13315
|
var CapabilityBindingsSchema = record(string(), string());
|
|
13316
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
13317
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
13318
|
+
camStreamId: string(),
|
|
13319
|
+
codec: string(),
|
|
13320
|
+
width: number(),
|
|
13321
|
+
height: number(),
|
|
13322
|
+
fps: number(),
|
|
13323
|
+
kind: string()
|
|
13324
|
+
})).readonly() });
|
|
13325
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
13326
|
+
var CameraAssignmentStatusSchema = object({
|
|
13327
|
+
detectionNodeId: string().nullable(),
|
|
13328
|
+
decoderNodeId: string().nullable(),
|
|
13329
|
+
audioNodeId: string().nullable(),
|
|
13330
|
+
pinned: object({
|
|
13331
|
+
detection: boolean(),
|
|
13332
|
+
decoder: boolean(),
|
|
13333
|
+
audio: boolean()
|
|
13334
|
+
}),
|
|
13335
|
+
reasons: object({
|
|
13336
|
+
detection: string().optional(),
|
|
13337
|
+
decoder: string().optional(),
|
|
13338
|
+
audio: string().optional()
|
|
13339
|
+
})
|
|
13340
|
+
});
|
|
13341
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
13342
|
+
var CameraBrokerStatusSchema = object({
|
|
13343
|
+
profiles: array(object({
|
|
13344
|
+
profile: string(),
|
|
13345
|
+
status: string(),
|
|
13346
|
+
codec: string(),
|
|
13347
|
+
width: number(),
|
|
13348
|
+
height: number(),
|
|
13349
|
+
subscribers: number(),
|
|
13350
|
+
inFps: number(),
|
|
13351
|
+
outFps: number()
|
|
13352
|
+
})).readonly(),
|
|
13353
|
+
webrtcSessions: number(),
|
|
13354
|
+
rtspRestream: boolean()
|
|
13355
|
+
});
|
|
13356
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
13357
|
+
var CameraDecoderShmSchema = object({
|
|
13358
|
+
framesWritten: number(),
|
|
13359
|
+
getFrameHits: number(),
|
|
13360
|
+
getFrameMisses: number(),
|
|
13361
|
+
budgetMb: number()
|
|
13362
|
+
});
|
|
13363
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
13364
|
+
var CameraDecoderStatusSchema = object({
|
|
13365
|
+
nodeId: string(),
|
|
13366
|
+
formats: array(string()).readonly(),
|
|
13367
|
+
sessionCount: number(),
|
|
13368
|
+
shm: CameraDecoderShmSchema
|
|
13369
|
+
});
|
|
13370
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
13371
|
+
var CameraMotionStatusSchema = object({
|
|
13372
|
+
enabled: boolean(),
|
|
13373
|
+
fps: number()
|
|
13374
|
+
});
|
|
13375
|
+
/** Detection provisioning sub-block. */
|
|
13376
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13377
|
+
state: _enum([
|
|
13378
|
+
"idle",
|
|
13379
|
+
"installing",
|
|
13380
|
+
"verifying",
|
|
13381
|
+
"ready",
|
|
13382
|
+
"failed"
|
|
13383
|
+
]),
|
|
13384
|
+
error: string().optional()
|
|
13385
|
+
});
|
|
13386
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13387
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13388
|
+
"idle",
|
|
13389
|
+
"watching",
|
|
13390
|
+
"active"
|
|
13391
|
+
]);
|
|
13392
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13393
|
+
var CameraDetectionStatusSchema = object({
|
|
13394
|
+
nodeId: string(),
|
|
13395
|
+
engine: object({
|
|
13396
|
+
backend: string(),
|
|
13397
|
+
device: string()
|
|
13398
|
+
}),
|
|
13399
|
+
phase: CameraDetectionPhaseSchema,
|
|
13400
|
+
configuredFps: number(),
|
|
13401
|
+
actualFps: number(),
|
|
13402
|
+
queueDepth: number(),
|
|
13403
|
+
avgInferenceMs: number(),
|
|
13404
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13405
|
+
});
|
|
13406
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13407
|
+
var CameraAudioStatusSchema = object({
|
|
13408
|
+
nodeId: string(),
|
|
13409
|
+
enabled: boolean()
|
|
13410
|
+
});
|
|
13411
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13412
|
+
var CameraRecordingStatusSchema = object({
|
|
13413
|
+
mode: _enum([
|
|
13414
|
+
"off",
|
|
13415
|
+
"continuous",
|
|
13416
|
+
"events"
|
|
13417
|
+
]),
|
|
13418
|
+
active: boolean(),
|
|
13419
|
+
storageBytes: number()
|
|
13420
|
+
});
|
|
13421
|
+
/**
|
|
13422
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13423
|
+
*
|
|
13424
|
+
* The `assignment` and `source` blocks are always present.
|
|
13425
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13426
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13427
|
+
*
|
|
13428
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13429
|
+
*/
|
|
13430
|
+
var CameraStatusSchema = object({
|
|
13431
|
+
deviceId: number(),
|
|
13432
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13433
|
+
source: CameraSourceStatusSchema,
|
|
13434
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13435
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13436
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13437
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13438
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13439
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13440
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13441
|
+
fetchedAt: number()
|
|
13442
|
+
});
|
|
13283
13443
|
method(object({
|
|
13284
13444
|
deviceId: number(),
|
|
13285
13445
|
agentNodeId: string()
|
|
@@ -13347,6 +13507,12 @@ method(object({
|
|
|
13347
13507
|
}), {
|
|
13348
13508
|
kind: "mutation",
|
|
13349
13509
|
auth: "admin"
|
|
13510
|
+
}), method(object({
|
|
13511
|
+
agentNodeId: string(),
|
|
13512
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13513
|
+
}), object({ success: literal(true) }), {
|
|
13514
|
+
kind: "mutation",
|
|
13515
|
+
auth: "admin"
|
|
13350
13516
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
13351
13517
|
deviceId: number(),
|
|
13352
13518
|
addonId: string(),
|
|
@@ -13372,7 +13538,7 @@ method(object({
|
|
|
13372
13538
|
}), method(object({
|
|
13373
13539
|
deviceId: number(),
|
|
13374
13540
|
agentNodeId: string().optional()
|
|
13375
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13541
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13376
13542
|
name: string(),
|
|
13377
13543
|
description: string().optional(),
|
|
13378
13544
|
config: CameraPipelineConfigSchema
|
|
@@ -19249,6 +19415,12 @@ Object.freeze({
|
|
|
19249
19415
|
addonId: null,
|
|
19250
19416
|
access: "view"
|
|
19251
19417
|
},
|
|
19418
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
19419
|
+
capName: "pipeline-executor",
|
|
19420
|
+
capScope: "system",
|
|
19421
|
+
addonId: null,
|
|
19422
|
+
access: "view"
|
|
19423
|
+
},
|
|
19252
19424
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
19253
19425
|
capName: "pipeline-executor",
|
|
19254
19426
|
capScope: "system",
|
|
@@ -19453,6 +19625,18 @@ Object.freeze({
|
|
|
19453
19625
|
addonId: null,
|
|
19454
19626
|
access: "view"
|
|
19455
19627
|
},
|
|
19628
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19629
|
+
capName: "pipeline-orchestrator",
|
|
19630
|
+
capScope: "system",
|
|
19631
|
+
addonId: null,
|
|
19632
|
+
access: "view"
|
|
19633
|
+
},
|
|
19634
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19635
|
+
capName: "pipeline-orchestrator",
|
|
19636
|
+
capScope: "system",
|
|
19637
|
+
addonId: null,
|
|
19638
|
+
access: "view"
|
|
19639
|
+
},
|
|
19456
19640
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19457
19641
|
capName: "pipeline-orchestrator",
|
|
19458
19642
|
capScope: "system",
|
|
@@ -19537,6 +19721,12 @@ Object.freeze({
|
|
|
19537
19721
|
addonId: null,
|
|
19538
19722
|
access: "create"
|
|
19539
19723
|
},
|
|
19724
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19725
|
+
capName: "pipeline-orchestrator",
|
|
19726
|
+
capScope: "system",
|
|
19727
|
+
addonId: null,
|
|
19728
|
+
access: "create"
|
|
19729
|
+
},
|
|
19540
19730
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19541
19731
|
capName: "pipeline-orchestrator",
|
|
19542
19732
|
capScope: "system",
|
package/dist/addon.mjs
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
|
|
@@ -9264,6 +9276,24 @@ var DetectorOutputSchema = object({
|
|
|
9264
9276
|
inferenceMs: number(),
|
|
9265
9277
|
modelId: string()
|
|
9266
9278
|
});
|
|
9279
|
+
var EngineProvisioningSchema = object({
|
|
9280
|
+
runtimeId: _enum([
|
|
9281
|
+
"onnx",
|
|
9282
|
+
"openvino",
|
|
9283
|
+
"coreml"
|
|
9284
|
+
]).nullable(),
|
|
9285
|
+
device: string().nullable(),
|
|
9286
|
+
state: _enum([
|
|
9287
|
+
"idle",
|
|
9288
|
+
"installing",
|
|
9289
|
+
"verifying",
|
|
9290
|
+
"ready",
|
|
9291
|
+
"failed"
|
|
9292
|
+
]),
|
|
9293
|
+
progress: number().optional(),
|
|
9294
|
+
error: string().optional(),
|
|
9295
|
+
nextRetryAt: number().optional()
|
|
9296
|
+
});
|
|
9267
9297
|
var PipelineStepInputSchema = lazy(() => object({
|
|
9268
9298
|
addonId: string(),
|
|
9269
9299
|
modelId: string(),
|
|
@@ -9332,7 +9362,7 @@ var PipelineRunResultBridge = custom();
|
|
|
9332
9362
|
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
|
|
9333
9363
|
kind: "mutation",
|
|
9334
9364
|
auth: "admin"
|
|
9335
|
-
}), method(_void(), record(string(), object({
|
|
9365
|
+
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
9336
9366
|
modelId: string(),
|
|
9337
9367
|
settings: record(string(), unknown()).readonly()
|
|
9338
9368
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -13179,7 +13209,10 @@ var AgentAddonConfigSchema = object({
|
|
|
13179
13209
|
modelId: string(),
|
|
13180
13210
|
settings: record(string(), unknown()).readonly()
|
|
13181
13211
|
});
|
|
13182
|
-
var AgentPipelineSettingsSchema = object({
|
|
13212
|
+
var AgentPipelineSettingsSchema = object({
|
|
13213
|
+
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
13214
|
+
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
13215
|
+
});
|
|
13183
13216
|
var CameraPipelineForAgentSchema = object({
|
|
13184
13217
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
13185
13218
|
audio: object({
|
|
@@ -13281,6 +13314,133 @@ var GlobalMetricsSchema = object({
|
|
|
13281
13314
|
* capability providers.
|
|
13282
13315
|
*/
|
|
13283
13316
|
var CapabilityBindingsSchema = record(string(), string());
|
|
13317
|
+
/** Source block — always present; derives from the stream catalog. */
|
|
13318
|
+
var CameraSourceStatusSchema = object({ streams: array(object({
|
|
13319
|
+
camStreamId: string(),
|
|
13320
|
+
codec: string(),
|
|
13321
|
+
width: number(),
|
|
13322
|
+
height: number(),
|
|
13323
|
+
fps: number(),
|
|
13324
|
+
kind: string()
|
|
13325
|
+
})).readonly() });
|
|
13326
|
+
/** Assignment block — always present (orchestrator-local, no remote call). */
|
|
13327
|
+
var CameraAssignmentStatusSchema = object({
|
|
13328
|
+
detectionNodeId: string().nullable(),
|
|
13329
|
+
decoderNodeId: string().nullable(),
|
|
13330
|
+
audioNodeId: string().nullable(),
|
|
13331
|
+
pinned: object({
|
|
13332
|
+
detection: boolean(),
|
|
13333
|
+
decoder: boolean(),
|
|
13334
|
+
audio: boolean()
|
|
13335
|
+
}),
|
|
13336
|
+
reasons: object({
|
|
13337
|
+
detection: string().optional(),
|
|
13338
|
+
decoder: string().optional(),
|
|
13339
|
+
audio: string().optional()
|
|
13340
|
+
})
|
|
13341
|
+
});
|
|
13342
|
+
/** Broker block — null when the broker stage is unreachable or inactive. */
|
|
13343
|
+
var CameraBrokerStatusSchema = object({
|
|
13344
|
+
profiles: array(object({
|
|
13345
|
+
profile: string(),
|
|
13346
|
+
status: string(),
|
|
13347
|
+
codec: string(),
|
|
13348
|
+
width: number(),
|
|
13349
|
+
height: number(),
|
|
13350
|
+
subscribers: number(),
|
|
13351
|
+
inFps: number(),
|
|
13352
|
+
outFps: number()
|
|
13353
|
+
})).readonly(),
|
|
13354
|
+
webrtcSessions: number(),
|
|
13355
|
+
rtspRestream: boolean()
|
|
13356
|
+
});
|
|
13357
|
+
/** Shared-memory ring statistics within the decoder block. */
|
|
13358
|
+
var CameraDecoderShmSchema = object({
|
|
13359
|
+
framesWritten: number(),
|
|
13360
|
+
getFrameHits: number(),
|
|
13361
|
+
getFrameMisses: number(),
|
|
13362
|
+
budgetMb: number()
|
|
13363
|
+
});
|
|
13364
|
+
/** Decoder block — null when the decoder stage is unreachable or inactive. */
|
|
13365
|
+
var CameraDecoderStatusSchema = object({
|
|
13366
|
+
nodeId: string(),
|
|
13367
|
+
formats: array(string()).readonly(),
|
|
13368
|
+
sessionCount: number(),
|
|
13369
|
+
shm: CameraDecoderShmSchema
|
|
13370
|
+
});
|
|
13371
|
+
/** Motion block — null when motion detection is not active for this device. */
|
|
13372
|
+
var CameraMotionStatusSchema = object({
|
|
13373
|
+
enabled: boolean(),
|
|
13374
|
+
fps: number()
|
|
13375
|
+
});
|
|
13376
|
+
/** Detection provisioning sub-block. */
|
|
13377
|
+
var CameraDetectionProvisioningSchema = object({
|
|
13378
|
+
state: _enum([
|
|
13379
|
+
"idle",
|
|
13380
|
+
"installing",
|
|
13381
|
+
"verifying",
|
|
13382
|
+
"ready",
|
|
13383
|
+
"failed"
|
|
13384
|
+
]),
|
|
13385
|
+
error: string().optional()
|
|
13386
|
+
});
|
|
13387
|
+
/** Detection phase — derived from the runner's engine phase. */
|
|
13388
|
+
var CameraDetectionPhaseSchema = _enum([
|
|
13389
|
+
"idle",
|
|
13390
|
+
"watching",
|
|
13391
|
+
"active"
|
|
13392
|
+
]);
|
|
13393
|
+
/** Detection block — null when no detection node is assigned or reachable. */
|
|
13394
|
+
var CameraDetectionStatusSchema = object({
|
|
13395
|
+
nodeId: string(),
|
|
13396
|
+
engine: object({
|
|
13397
|
+
backend: string(),
|
|
13398
|
+
device: string()
|
|
13399
|
+
}),
|
|
13400
|
+
phase: CameraDetectionPhaseSchema,
|
|
13401
|
+
configuredFps: number(),
|
|
13402
|
+
actualFps: number(),
|
|
13403
|
+
queueDepth: number(),
|
|
13404
|
+
avgInferenceMs: number(),
|
|
13405
|
+
provisioning: CameraDetectionProvisioningSchema
|
|
13406
|
+
});
|
|
13407
|
+
/** Audio block — null when no audio node is assigned or reachable. */
|
|
13408
|
+
var CameraAudioStatusSchema = object({
|
|
13409
|
+
nodeId: string(),
|
|
13410
|
+
enabled: boolean()
|
|
13411
|
+
});
|
|
13412
|
+
/** Recording block — null when no recording cap is active for this device. */
|
|
13413
|
+
var CameraRecordingStatusSchema = object({
|
|
13414
|
+
mode: _enum([
|
|
13415
|
+
"off",
|
|
13416
|
+
"continuous",
|
|
13417
|
+
"events"
|
|
13418
|
+
]),
|
|
13419
|
+
active: boolean(),
|
|
13420
|
+
storageBytes: number()
|
|
13421
|
+
});
|
|
13422
|
+
/**
|
|
13423
|
+
* Aggregated per-camera pipeline status — server-composed, single call.
|
|
13424
|
+
*
|
|
13425
|
+
* The `assignment` and `source` blocks are always present.
|
|
13426
|
+
* Every other block is `null` when the stage is inactive or unreachable
|
|
13427
|
+
* during the bounded parallel fan-out in the orchestrator implementation.
|
|
13428
|
+
*
|
|
13429
|
+
* See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
|
|
13430
|
+
*/
|
|
13431
|
+
var CameraStatusSchema = object({
|
|
13432
|
+
deviceId: number(),
|
|
13433
|
+
assignment: CameraAssignmentStatusSchema,
|
|
13434
|
+
source: CameraSourceStatusSchema,
|
|
13435
|
+
broker: CameraBrokerStatusSchema.nullable(),
|
|
13436
|
+
decoder: CameraDecoderStatusSchema.nullable(),
|
|
13437
|
+
motion: CameraMotionStatusSchema.nullable(),
|
|
13438
|
+
detection: CameraDetectionStatusSchema.nullable(),
|
|
13439
|
+
audio: CameraAudioStatusSchema.nullable(),
|
|
13440
|
+
recording: CameraRecordingStatusSchema.nullable(),
|
|
13441
|
+
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
13442
|
+
fetchedAt: number()
|
|
13443
|
+
});
|
|
13284
13444
|
method(object({
|
|
13285
13445
|
deviceId: number(),
|
|
13286
13446
|
agentNodeId: string()
|
|
@@ -13348,6 +13508,12 @@ method(object({
|
|
|
13348
13508
|
}), {
|
|
13349
13509
|
kind: "mutation",
|
|
13350
13510
|
auth: "admin"
|
|
13511
|
+
}), method(object({
|
|
13512
|
+
agentNodeId: string(),
|
|
13513
|
+
maxCameras: number().int().nonnegative().nullable()
|
|
13514
|
+
}), object({ success: literal(true) }), {
|
|
13515
|
+
kind: "mutation",
|
|
13516
|
+
auth: "admin"
|
|
13351
13517
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
13352
13518
|
deviceId: number(),
|
|
13353
13519
|
addonId: string(),
|
|
@@ -13373,7 +13539,7 @@ method(object({
|
|
|
13373
13539
|
}), method(object({
|
|
13374
13540
|
deviceId: number(),
|
|
13375
13541
|
agentNodeId: string().optional()
|
|
13376
|
-
}), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13542
|
+
}), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
|
|
13377
13543
|
name: string(),
|
|
13378
13544
|
description: string().optional(),
|
|
13379
13545
|
config: CameraPipelineConfigSchema
|
|
@@ -19250,6 +19416,12 @@ Object.freeze({
|
|
|
19250
19416
|
addonId: null,
|
|
19251
19417
|
access: "view"
|
|
19252
19418
|
},
|
|
19419
|
+
"pipelineExecutor.getEngineProvisioning": {
|
|
19420
|
+
capName: "pipeline-executor",
|
|
19421
|
+
capScope: "system",
|
|
19422
|
+
addonId: null,
|
|
19423
|
+
access: "view"
|
|
19424
|
+
},
|
|
19253
19425
|
"pipelineExecutor.getGlobalPipelineConfig": {
|
|
19254
19426
|
capName: "pipeline-executor",
|
|
19255
19427
|
capScope: "system",
|
|
@@ -19454,6 +19626,18 @@ Object.freeze({
|
|
|
19454
19626
|
addonId: null,
|
|
19455
19627
|
access: "view"
|
|
19456
19628
|
},
|
|
19629
|
+
"pipelineOrchestrator.getCameraStatus": {
|
|
19630
|
+
capName: "pipeline-orchestrator",
|
|
19631
|
+
capScope: "system",
|
|
19632
|
+
addonId: null,
|
|
19633
|
+
access: "view"
|
|
19634
|
+
},
|
|
19635
|
+
"pipelineOrchestrator.getCameraStatuses": {
|
|
19636
|
+
capName: "pipeline-orchestrator",
|
|
19637
|
+
capScope: "system",
|
|
19638
|
+
addonId: null,
|
|
19639
|
+
access: "view"
|
|
19640
|
+
},
|
|
19457
19641
|
"pipelineOrchestrator.getCameraStepOverrides": {
|
|
19458
19642
|
capName: "pipeline-orchestrator",
|
|
19459
19643
|
capScope: "system",
|
|
@@ -19538,6 +19722,12 @@ Object.freeze({
|
|
|
19538
19722
|
addonId: null,
|
|
19539
19723
|
access: "create"
|
|
19540
19724
|
},
|
|
19725
|
+
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
19726
|
+
capName: "pipeline-orchestrator",
|
|
19727
|
+
capScope: "system",
|
|
19728
|
+
addonId: null,
|
|
19729
|
+
access: "create"
|
|
19730
|
+
},
|
|
19541
19731
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
19542
19732
|
capName: "pipeline-orchestrator",
|
|
19543
19733
|
capScope: "system",
|