@camstack/addon-provider-reolink 1.1.31 → 1.2.1
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 +200 -51
- package/dist/addon.mjs +200 -51
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -12638,10 +12638,7 @@ var ConfigUISchemaNullableBridge = custom$2();
|
|
|
12638
12638
|
var InferenceCapabilitiesBridge = custom$2();
|
|
12639
12639
|
var ModelAvailabilityListBridge = custom$2();
|
|
12640
12640
|
var PipelineRunResultBridge = custom$2();
|
|
12641
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12642
|
-
kind: "mutation",
|
|
12643
|
-
auth: "admin"
|
|
12644
|
-
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12641
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12645
12642
|
modelId: string(),
|
|
12646
12643
|
settings: record(string(), unknown()).readonly()
|
|
12647
12644
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12701,13 +12698,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12701
12698
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12702
12699
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12703
12700
|
*/
|
|
12704
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12701
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12702
|
+
/**
|
|
12703
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12704
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12705
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12706
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12707
|
+
*/
|
|
12708
|
+
deviceKey: string().optional()
|
|
12705
12709
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12706
12710
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12707
12711
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12708
12712
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12709
12713
|
deviceId: number().optional(),
|
|
12710
|
-
sessionId: string().optional()
|
|
12714
|
+
sessionId: string().optional(),
|
|
12715
|
+
/**
|
|
12716
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12717
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12718
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12719
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12720
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12721
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12722
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12723
|
+
* released via `uncacheFrame`.
|
|
12724
|
+
*/
|
|
12725
|
+
frameId: number().int().nonnegative().optional(),
|
|
12726
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12727
|
+
deviceKey: string().optional()
|
|
12711
12728
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12712
12729
|
data: _instanceof(Uint8Array),
|
|
12713
12730
|
width: number().int().positive(),
|
|
@@ -12739,8 +12756,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12739
12756
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12740
12757
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12741
12758
|
* cache; auto-disposed after the idle TTL.
|
|
12759
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12760
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12761
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12762
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12763
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12764
|
+
* Engines tab shows all pools running at once.
|
|
12742
12765
|
*/
|
|
12743
|
-
kind: _enum([
|
|
12766
|
+
kind: _enum([
|
|
12767
|
+
"runtime",
|
|
12768
|
+
"warm-override",
|
|
12769
|
+
"device-pool"
|
|
12770
|
+
]),
|
|
12744
12771
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12745
12772
|
poolPid: number().nullable(),
|
|
12746
12773
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12875,7 +12902,21 @@ var NativeCropResultSchema = object({
|
|
|
12875
12902
|
/** Packed rgb (24-bit) pixels of the crop. */
|
|
12876
12903
|
bytes: _instanceof(Uint8Array),
|
|
12877
12904
|
width: number().int().positive(),
|
|
12878
|
-
height: number().int().positive()
|
|
12905
|
+
height: number().int().positive(),
|
|
12906
|
+
/**
|
|
12907
|
+
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
12908
|
+
* `keyFrame`) can reject a degraded fallback:
|
|
12909
|
+
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
12910
|
+
* quality path).
|
|
12911
|
+
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
12912
|
+
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
12913
|
+
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
12914
|
+
*
|
|
12915
|
+
* OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
|
|
12916
|
+
* treated as `native` (accepted) by every consumer so mixed-version clusters
|
|
12917
|
+
* keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
|
|
12918
|
+
*/
|
|
12919
|
+
tier: _enum(["native", "ram-fullframe"]).optional()
|
|
12879
12920
|
});
|
|
12880
12921
|
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
12881
12922
|
* originating detection, in FRAME-space coordinates. Reuses
|
|
@@ -13115,7 +13156,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
13115
13156
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
13116
13157
|
* `remoteSourcingNodes` rollout setting).
|
|
13117
13158
|
*/
|
|
13118
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
13159
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
13160
|
+
/**
|
|
13161
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
13162
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
13163
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
13164
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
13165
|
+
*/
|
|
13166
|
+
deviceKey: string().optional()
|
|
13119
13167
|
});
|
|
13120
13168
|
motionFpsField.min, motionFpsField.max, motionFpsField.step, motionFpsField.default, detectionFpsField.min, detectionFpsField.max, detectionFpsField.step, detectionFpsField.default, motionCooldownMsField.min, motionCooldownMsField.max, motionCooldownMsField.step, motionCooldownMsField.default, occupancyRecheckSecField.min, occupancyRecheckSecField.max, occupancyRecheckSecField.step, occupancyRecheckSecField.default, occupancyRecheckFramesField.min, occupancyRecheckFramesField.max, occupancyRecheckFramesField.step, occupancyRecheckFramesField.default;
|
|
13121
13169
|
/**
|
|
@@ -13136,6 +13184,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
13136
13184
|
avgInferenceTimeMs: number(),
|
|
13137
13185
|
/** Total queue depth across motion + detection queues. */
|
|
13138
13186
|
queueDepthTotal: number(),
|
|
13187
|
+
/**
|
|
13188
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
13189
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
13190
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
13191
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
13192
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
13193
|
+
*/
|
|
13194
|
+
devices: array(object({
|
|
13195
|
+
deviceKey: string(),
|
|
13196
|
+
backend: string(),
|
|
13197
|
+
attachedCameras: number(),
|
|
13198
|
+
queueDepthTotal: number()
|
|
13199
|
+
})).default([]),
|
|
13139
13200
|
/** Hardware capability flags reported by this node. */
|
|
13140
13201
|
hardware: object({
|
|
13141
13202
|
hasGpu: boolean(),
|
|
@@ -17871,7 +17932,8 @@ var LinkedDeviceSchema = object({
|
|
|
17871
17932
|
deviceId: number(),
|
|
17872
17933
|
name: string(),
|
|
17873
17934
|
location: string().nullable(),
|
|
17874
|
-
features: array(string())
|
|
17935
|
+
features: array(string()),
|
|
17936
|
+
producesTrackedEvents: boolean().optional()
|
|
17875
17937
|
});
|
|
17876
17938
|
var SavedDeviceRowSchema = object({
|
|
17877
17939
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
@@ -19501,6 +19563,7 @@ var TrackSchema = object({
|
|
|
19501
19563
|
deviceId: number(),
|
|
19502
19564
|
className: string(),
|
|
19503
19565
|
label: string().optional(),
|
|
19566
|
+
producingDeviceName: string().optional(),
|
|
19504
19567
|
/** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
|
|
19505
19568
|
source: TrackSourceSchema.optional(),
|
|
19506
19569
|
firstSeen: number(),
|
|
@@ -19638,7 +19701,8 @@ var MediaFileKindEnum = _enum([
|
|
|
19638
19701
|
"fullFrameBoxed",
|
|
19639
19702
|
"faceCrop",
|
|
19640
19703
|
"plateCrop",
|
|
19641
|
-
"keyFrame"
|
|
19704
|
+
"keyFrame",
|
|
19705
|
+
"keyFrameSmall"
|
|
19642
19706
|
]);
|
|
19643
19707
|
var MediaFileSchema = object({
|
|
19644
19708
|
key: string(),
|
|
@@ -19967,13 +20031,11 @@ var PipelineTemplateSchema = object({
|
|
|
19967
20031
|
createdAt: string(),
|
|
19968
20032
|
updatedAt: string()
|
|
19969
20033
|
});
|
|
19970
|
-
var
|
|
19971
|
-
enabled: boolean(),
|
|
20034
|
+
var DeviceStepConfigSchema = object({
|
|
19972
20035
|
modelId: string().optional(),
|
|
19973
|
-
settings: record(string(), unknown()).
|
|
20036
|
+
settings: record(string(), unknown()).optional()
|
|
19974
20037
|
});
|
|
19975
20038
|
var AgentPipelineSettingsSchema = object({
|
|
19976
|
-
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
19977
20039
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19978
20040
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19979
20041
|
detectWeight: number().positive().optional(),
|
|
@@ -19997,7 +20059,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19997
20059
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19998
20060
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19999
20061
|
*/
|
|
20000
|
-
reachableHost: string().optional()
|
|
20062
|
+
reachableHost: string().optional(),
|
|
20063
|
+
/**
|
|
20064
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
20065
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
20066
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
20067
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
20068
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
20069
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
20070
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
20071
|
+
*/
|
|
20072
|
+
inferenceDevices: record(string(), object({
|
|
20073
|
+
enabled: boolean(),
|
|
20074
|
+
weight: number().positive().optional(),
|
|
20075
|
+
maxSessions: number().int().positive().optional(),
|
|
20076
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20077
|
+
})).optional()
|
|
20001
20078
|
});
|
|
20002
20079
|
var CameraPipelineForAgentSchema = object({
|
|
20003
20080
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -20007,14 +20084,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
20007
20084
|
}).nullable()
|
|
20008
20085
|
});
|
|
20009
20086
|
var CameraStepOverridePatchSchema = object({
|
|
20010
|
-
enabled: boolean().optional(),
|
|
20011
20087
|
modelId: string().optional(),
|
|
20012
20088
|
settings: record(string(), unknown()).readonly().optional()
|
|
20013
20089
|
});
|
|
20014
20090
|
var CameraPipelineSettingsSchema = object({
|
|
20015
20091
|
pinnedAgentNodeId: string().optional(),
|
|
20016
20092
|
stepToggles: record(string(), boolean()).optional(),
|
|
20017
|
-
|
|
20093
|
+
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
20018
20094
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
20019
20095
|
});
|
|
20020
20096
|
/**
|
|
@@ -20228,6 +20304,44 @@ var CameraStatusSchema = object({
|
|
|
20228
20304
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20229
20305
|
fetchedAt: number()
|
|
20230
20306
|
});
|
|
20307
|
+
var NodeInferenceDeviceSchema = object({
|
|
20308
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20309
|
+
key: string(),
|
|
20310
|
+
backend: string(),
|
|
20311
|
+
device: string(),
|
|
20312
|
+
format: _enum(MODEL_FORMATS),
|
|
20313
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20314
|
+
available: boolean(),
|
|
20315
|
+
/**
|
|
20316
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20317
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20318
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20319
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20320
|
+
* (unavailable) key keeps its stored value.
|
|
20321
|
+
*/
|
|
20322
|
+
enabled: boolean(),
|
|
20323
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20324
|
+
weight: number(),
|
|
20325
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20326
|
+
maxSessions: number().nullable(),
|
|
20327
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20328
|
+
defaultModelId: string(),
|
|
20329
|
+
/**
|
|
20330
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20331
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20332
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20333
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20334
|
+
* available per format; this is the stored selection that becomes the
|
|
20335
|
+
* default for EVERY camera landing on this accelerator.
|
|
20336
|
+
*/
|
|
20337
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20338
|
+
});
|
|
20339
|
+
var NodeInferenceDevicesSchema = object({
|
|
20340
|
+
nodeId: string(),
|
|
20341
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20342
|
+
reachable: boolean(),
|
|
20343
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20344
|
+
});
|
|
20231
20345
|
method(object({
|
|
20232
20346
|
deviceId: number(),
|
|
20233
20347
|
agentNodeId: string()
|
|
@@ -20237,7 +20351,13 @@ method(object({
|
|
|
20237
20351
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20238
20352
|
kind: "mutation",
|
|
20239
20353
|
auth: "admin"
|
|
20240
|
-
}), method(
|
|
20354
|
+
}), method(object({
|
|
20355
|
+
deviceId: number(),
|
|
20356
|
+
deviceKey: string()
|
|
20357
|
+
}), object({ success: literal(true) }), {
|
|
20358
|
+
kind: "mutation",
|
|
20359
|
+
auth: "admin"
|
|
20360
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20241
20361
|
kind: "mutation",
|
|
20242
20362
|
auth: "admin"
|
|
20243
20363
|
}), method(_void(), array(PipelineAssignmentSchema).readonly()), method(object({ deviceId: number() }), PipelineAssignmentSchema.nullable()), method(_void(), array(AgentLoadSummarySchema).readonly()), method(_void(), GlobalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(object({ nodeId: string() }), CapabilityBindingsSchema), method(object({
|
|
@@ -20271,13 +20391,7 @@ method(object({
|
|
|
20271
20391
|
}))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20272
20392
|
nodeId: string(),
|
|
20273
20393
|
settings: AgentPipelineSettingsSchema
|
|
20274
|
-
})).readonly()), method(object({
|
|
20275
|
-
agentNodeId: string(),
|
|
20276
|
-
defaults: record(string(), AgentAddonConfigSchema)
|
|
20277
|
-
}), object({ success: literal(true) }), {
|
|
20278
|
-
kind: "mutation",
|
|
20279
|
-
auth: "admin"
|
|
20280
|
-
}), method(object({ agentNodeId: string() }), object({
|
|
20394
|
+
})).readonly()), method(object({ agentNodeId: string() }), object({
|
|
20281
20395
|
success: boolean(),
|
|
20282
20396
|
removed: boolean()
|
|
20283
20397
|
}), {
|
|
@@ -20309,7 +20423,18 @@ method(object({
|
|
|
20309
20423
|
}), object({ success: literal(true) }), {
|
|
20310
20424
|
kind: "mutation",
|
|
20311
20425
|
auth: "admin"
|
|
20312
|
-
}), method(object({
|
|
20426
|
+
}), method(object({
|
|
20427
|
+
agentNodeId: string(),
|
|
20428
|
+
inferenceDevices: record(string(), object({
|
|
20429
|
+
enabled: boolean(),
|
|
20430
|
+
weight: number().positive().optional(),
|
|
20431
|
+
maxSessions: number().int().positive().optional(),
|
|
20432
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20433
|
+
}))
|
|
20434
|
+
}), object({ success: literal(true) }), {
|
|
20435
|
+
kind: "mutation",
|
|
20436
|
+
auth: "admin"
|
|
20437
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
|
|
20313
20438
|
success: literal(true),
|
|
20314
20439
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20315
20440
|
effectiveModelId: string().nullable(),
|
|
@@ -20325,9 +20450,10 @@ method(object({
|
|
|
20325
20450
|
}), object({ success: literal(true) }), {
|
|
20326
20451
|
kind: "mutation",
|
|
20327
20452
|
auth: "admin"
|
|
20328
|
-
}), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20453
|
+
}), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20329
20454
|
deviceId: number(),
|
|
20330
20455
|
agentNodeId: string(),
|
|
20456
|
+
deviceKey: string(),
|
|
20331
20457
|
addonId: string(),
|
|
20332
20458
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20333
20459
|
}), object({ success: literal(true) }), {
|
|
@@ -20364,14 +20490,13 @@ method(object({
|
|
|
20364
20490
|
});
|
|
20365
20491
|
/**
|
|
20366
20492
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20367
|
-
* package lifecycle (runtime-updatable node packages
|
|
20368
|
-
* agents).
|
|
20493
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20369
20494
|
*
|
|
20370
|
-
*
|
|
20371
|
-
*
|
|
20372
|
-
*
|
|
20373
|
-
*
|
|
20374
|
-
*
|
|
20495
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20496
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20497
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20498
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20499
|
+
* no auto-rollback).
|
|
20375
20500
|
*
|
|
20376
20501
|
* Providers:
|
|
20377
20502
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20479,7 +20604,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20479
20604
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20480
20605
|
version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
20481
20606
|
kind: "mutation",
|
|
20482
|
-
auth: "admin"
|
|
20607
|
+
auth: "admin",
|
|
20608
|
+
timeoutMs: 16 * 6e4
|
|
20483
20609
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20484
20610
|
kind: "mutation",
|
|
20485
20611
|
auth: "admin"
|
|
@@ -22617,10 +22743,10 @@ var TopologyCategorySchema = object({
|
|
|
22617
22743
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22618
22744
|
});
|
|
22619
22745
|
/**
|
|
22620
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22621
|
-
*
|
|
22622
|
-
* version visibility for the Server management surface. Nullable:
|
|
22623
|
-
* rows and
|
|
22746
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22747
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22748
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22749
|
+
* offline rows and nodes that never reported one.
|
|
22624
22750
|
*/
|
|
22625
22751
|
var TopologyRootPackageSchema = object({
|
|
22626
22752
|
name: string(),
|
|
@@ -23008,17 +23134,28 @@ var PlatformScoreSchema = object({
|
|
|
23008
23134
|
format: _enum([
|
|
23009
23135
|
"onnx",
|
|
23010
23136
|
"coreml",
|
|
23011
|
-
"openvino"
|
|
23137
|
+
"openvino",
|
|
23138
|
+
"tflite"
|
|
23012
23139
|
]),
|
|
23013
23140
|
score: number(),
|
|
23014
23141
|
reason: string(),
|
|
23015
23142
|
available: boolean()
|
|
23016
23143
|
});
|
|
23144
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
23145
|
+
key: string(),
|
|
23146
|
+
backend: string(),
|
|
23147
|
+
device: string(),
|
|
23148
|
+
format: ModelFormatSchema,
|
|
23149
|
+
runtime: literal("python"),
|
|
23150
|
+
score: number(),
|
|
23151
|
+
available: boolean()
|
|
23152
|
+
});
|
|
23017
23153
|
var PlatformCapabilitiesSchema = object({
|
|
23018
23154
|
hardware: HardwareInfoSchema,
|
|
23019
23155
|
scores: array(PlatformScoreSchema).readonly(),
|
|
23020
23156
|
bestScore: PlatformScoreSchema,
|
|
23021
|
-
pythonPath: string().nullable()
|
|
23157
|
+
pythonPath: string().nullable(),
|
|
23158
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
23022
23159
|
});
|
|
23023
23160
|
var ModelRequirementSchema = object({
|
|
23024
23161
|
modelId: string(),
|
|
@@ -26947,12 +27084,6 @@ Object.freeze({
|
|
|
26947
27084
|
addonId: null,
|
|
26948
27085
|
access: "view"
|
|
26949
27086
|
},
|
|
26950
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26951
|
-
capName: "pipeline-executor",
|
|
26952
|
-
capScope: "system",
|
|
26953
|
-
addonId: null,
|
|
26954
|
-
access: "create"
|
|
26955
|
-
},
|
|
26956
27087
|
"pipelineExecutor.runAudioTest": {
|
|
26957
27088
|
capName: "pipeline-executor",
|
|
26958
27089
|
capScope: "system",
|
|
@@ -27103,6 +27234,12 @@ Object.freeze({
|
|
|
27103
27234
|
addonId: null,
|
|
27104
27235
|
access: "view"
|
|
27105
27236
|
},
|
|
27237
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
27238
|
+
capName: "pipeline-orchestrator",
|
|
27239
|
+
capScope: "system",
|
|
27240
|
+
addonId: null,
|
|
27241
|
+
access: "view"
|
|
27242
|
+
},
|
|
27106
27243
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
27107
27244
|
capName: "pipeline-orchestrator",
|
|
27108
27245
|
capScope: "system",
|
|
@@ -27115,6 +27252,12 @@ Object.freeze({
|
|
|
27115
27252
|
addonId: null,
|
|
27116
27253
|
access: "view"
|
|
27117
27254
|
},
|
|
27255
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
27256
|
+
capName: "pipeline-orchestrator",
|
|
27257
|
+
capScope: "system",
|
|
27258
|
+
addonId: null,
|
|
27259
|
+
access: "view"
|
|
27260
|
+
},
|
|
27118
27261
|
"pipelineOrchestrator.listAgentSettings": {
|
|
27119
27262
|
capName: "pipeline-orchestrator",
|
|
27120
27263
|
capScope: "system",
|
|
@@ -27157,19 +27300,19 @@ Object.freeze({
|
|
|
27157
27300
|
addonId: null,
|
|
27158
27301
|
access: "create"
|
|
27159
27302
|
},
|
|
27160
|
-
"pipelineOrchestrator.
|
|
27303
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
27161
27304
|
capName: "pipeline-orchestrator",
|
|
27162
27305
|
capScope: "system",
|
|
27163
27306
|
addonId: null,
|
|
27164
27307
|
access: "create"
|
|
27165
27308
|
},
|
|
27166
|
-
"pipelineOrchestrator.
|
|
27309
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
27167
27310
|
capName: "pipeline-orchestrator",
|
|
27168
27311
|
capScope: "system",
|
|
27169
27312
|
addonId: null,
|
|
27170
27313
|
access: "create"
|
|
27171
27314
|
},
|
|
27172
|
-
"pipelineOrchestrator.
|
|
27315
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
27173
27316
|
capName: "pipeline-orchestrator",
|
|
27174
27317
|
capScope: "system",
|
|
27175
27318
|
addonId: null,
|
|
@@ -27211,6 +27354,12 @@ Object.freeze({
|
|
|
27211
27354
|
addonId: null,
|
|
27212
27355
|
access: "create"
|
|
27213
27356
|
},
|
|
27357
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
27358
|
+
capName: "pipeline-orchestrator",
|
|
27359
|
+
capScope: "system",
|
|
27360
|
+
addonId: null,
|
|
27361
|
+
access: "create"
|
|
27362
|
+
},
|
|
27214
27363
|
"pipelineOrchestrator.unassignAudio": {
|
|
27215
27364
|
capName: "pipeline-orchestrator",
|
|
27216
27365
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -12633,10 +12633,7 @@ var ConfigUISchemaNullableBridge = custom$2();
|
|
|
12633
12633
|
var InferenceCapabilitiesBridge = custom$2();
|
|
12634
12634
|
var ModelAvailabilityListBridge = custom$2();
|
|
12635
12635
|
var PipelineRunResultBridge = custom$2();
|
|
12636
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12637
|
-
kind: "mutation",
|
|
12638
|
-
auth: "admin"
|
|
12639
|
-
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12636
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12640
12637
|
modelId: string(),
|
|
12641
12638
|
settings: record(string(), unknown()).readonly()
|
|
12642
12639
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12696,13 +12693,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12696
12693
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12697
12694
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12698
12695
|
*/
|
|
12699
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12696
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12697
|
+
/**
|
|
12698
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12699
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12700
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12701
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12702
|
+
*/
|
|
12703
|
+
deviceKey: string().optional()
|
|
12700
12704
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12701
12705
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12702
12706
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12703
12707
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12704
12708
|
deviceId: number().optional(),
|
|
12705
|
-
sessionId: string().optional()
|
|
12709
|
+
sessionId: string().optional(),
|
|
12710
|
+
/**
|
|
12711
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12712
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12713
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12714
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12715
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12716
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12717
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12718
|
+
* released via `uncacheFrame`.
|
|
12719
|
+
*/
|
|
12720
|
+
frameId: number().int().nonnegative().optional(),
|
|
12721
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12722
|
+
deviceKey: string().optional()
|
|
12706
12723
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12707
12724
|
data: _instanceof(Uint8Array),
|
|
12708
12725
|
width: number().int().positive(),
|
|
@@ -12734,8 +12751,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12734
12751
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12735
12752
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12736
12753
|
* cache; auto-disposed after the idle TTL.
|
|
12754
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12755
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12756
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12757
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12758
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12759
|
+
* Engines tab shows all pools running at once.
|
|
12737
12760
|
*/
|
|
12738
|
-
kind: _enum([
|
|
12761
|
+
kind: _enum([
|
|
12762
|
+
"runtime",
|
|
12763
|
+
"warm-override",
|
|
12764
|
+
"device-pool"
|
|
12765
|
+
]),
|
|
12739
12766
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12740
12767
|
poolPid: number().nullable(),
|
|
12741
12768
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12870,7 +12897,21 @@ var NativeCropResultSchema = object({
|
|
|
12870
12897
|
/** Packed rgb (24-bit) pixels of the crop. */
|
|
12871
12898
|
bytes: _instanceof(Uint8Array),
|
|
12872
12899
|
width: number().int().positive(),
|
|
12873
|
-
height: number().int().positive()
|
|
12900
|
+
height: number().int().positive(),
|
|
12901
|
+
/**
|
|
12902
|
+
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
12903
|
+
* `keyFrame`) can reject a degraded fallback:
|
|
12904
|
+
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
12905
|
+
* quality path).
|
|
12906
|
+
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
12907
|
+
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
12908
|
+
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
12909
|
+
*
|
|
12910
|
+
* OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
|
|
12911
|
+
* treated as `native` (accepted) by every consumer so mixed-version clusters
|
|
12912
|
+
* keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
|
|
12913
|
+
*/
|
|
12914
|
+
tier: _enum(["native", "ram-fullframe"]).optional()
|
|
12874
12915
|
});
|
|
12875
12916
|
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
12876
12917
|
* originating detection, in FRAME-space coordinates. Reuses
|
|
@@ -13110,7 +13151,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
13110
13151
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
13111
13152
|
* `remoteSourcingNodes` rollout setting).
|
|
13112
13153
|
*/
|
|
13113
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
13154
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
13155
|
+
/**
|
|
13156
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
13157
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
13158
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
13159
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
13160
|
+
*/
|
|
13161
|
+
deviceKey: string().optional()
|
|
13114
13162
|
});
|
|
13115
13163
|
motionFpsField.min, motionFpsField.max, motionFpsField.step, motionFpsField.default, detectionFpsField.min, detectionFpsField.max, detectionFpsField.step, detectionFpsField.default, motionCooldownMsField.min, motionCooldownMsField.max, motionCooldownMsField.step, motionCooldownMsField.default, occupancyRecheckSecField.min, occupancyRecheckSecField.max, occupancyRecheckSecField.step, occupancyRecheckSecField.default, occupancyRecheckFramesField.min, occupancyRecheckFramesField.max, occupancyRecheckFramesField.step, occupancyRecheckFramesField.default;
|
|
13116
13164
|
/**
|
|
@@ -13131,6 +13179,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
13131
13179
|
avgInferenceTimeMs: number(),
|
|
13132
13180
|
/** Total queue depth across motion + detection queues. */
|
|
13133
13181
|
queueDepthTotal: number(),
|
|
13182
|
+
/**
|
|
13183
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
13184
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
13185
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
13186
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
13187
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
13188
|
+
*/
|
|
13189
|
+
devices: array(object({
|
|
13190
|
+
deviceKey: string(),
|
|
13191
|
+
backend: string(),
|
|
13192
|
+
attachedCameras: number(),
|
|
13193
|
+
queueDepthTotal: number()
|
|
13194
|
+
})).default([]),
|
|
13134
13195
|
/** Hardware capability flags reported by this node. */
|
|
13135
13196
|
hardware: object({
|
|
13136
13197
|
hasGpu: boolean(),
|
|
@@ -17866,7 +17927,8 @@ var LinkedDeviceSchema = object({
|
|
|
17866
17927
|
deviceId: number(),
|
|
17867
17928
|
name: string(),
|
|
17868
17929
|
location: string().nullable(),
|
|
17869
|
-
features: array(string())
|
|
17930
|
+
features: array(string()),
|
|
17931
|
+
producesTrackedEvents: boolean().optional()
|
|
17870
17932
|
});
|
|
17871
17933
|
var SavedDeviceRowSchema = object({
|
|
17872
17934
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
@@ -19496,6 +19558,7 @@ var TrackSchema = object({
|
|
|
19496
19558
|
deviceId: number(),
|
|
19497
19559
|
className: string(),
|
|
19498
19560
|
label: string().optional(),
|
|
19561
|
+
producingDeviceName: string().optional(),
|
|
19499
19562
|
/** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
|
|
19500
19563
|
source: TrackSourceSchema.optional(),
|
|
19501
19564
|
firstSeen: number(),
|
|
@@ -19633,7 +19696,8 @@ var MediaFileKindEnum = _enum([
|
|
|
19633
19696
|
"fullFrameBoxed",
|
|
19634
19697
|
"faceCrop",
|
|
19635
19698
|
"plateCrop",
|
|
19636
|
-
"keyFrame"
|
|
19699
|
+
"keyFrame",
|
|
19700
|
+
"keyFrameSmall"
|
|
19637
19701
|
]);
|
|
19638
19702
|
var MediaFileSchema = object({
|
|
19639
19703
|
key: string(),
|
|
@@ -19962,13 +20026,11 @@ var PipelineTemplateSchema = object({
|
|
|
19962
20026
|
createdAt: string(),
|
|
19963
20027
|
updatedAt: string()
|
|
19964
20028
|
});
|
|
19965
|
-
var
|
|
19966
|
-
enabled: boolean(),
|
|
20029
|
+
var DeviceStepConfigSchema = object({
|
|
19967
20030
|
modelId: string().optional(),
|
|
19968
|
-
settings: record(string(), unknown()).
|
|
20031
|
+
settings: record(string(), unknown()).optional()
|
|
19969
20032
|
});
|
|
19970
20033
|
var AgentPipelineSettingsSchema = object({
|
|
19971
|
-
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
19972
20034
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19973
20035
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19974
20036
|
detectWeight: number().positive().optional(),
|
|
@@ -19992,7 +20054,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19992
20054
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19993
20055
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19994
20056
|
*/
|
|
19995
|
-
reachableHost: string().optional()
|
|
20057
|
+
reachableHost: string().optional(),
|
|
20058
|
+
/**
|
|
20059
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
20060
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
20061
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
20062
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
20063
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
20064
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
20065
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
20066
|
+
*/
|
|
20067
|
+
inferenceDevices: record(string(), object({
|
|
20068
|
+
enabled: boolean(),
|
|
20069
|
+
weight: number().positive().optional(),
|
|
20070
|
+
maxSessions: number().int().positive().optional(),
|
|
20071
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20072
|
+
})).optional()
|
|
19996
20073
|
});
|
|
19997
20074
|
var CameraPipelineForAgentSchema = object({
|
|
19998
20075
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -20002,14 +20079,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
20002
20079
|
}).nullable()
|
|
20003
20080
|
});
|
|
20004
20081
|
var CameraStepOverridePatchSchema = object({
|
|
20005
|
-
enabled: boolean().optional(),
|
|
20006
20082
|
modelId: string().optional(),
|
|
20007
20083
|
settings: record(string(), unknown()).readonly().optional()
|
|
20008
20084
|
});
|
|
20009
20085
|
var CameraPipelineSettingsSchema = object({
|
|
20010
20086
|
pinnedAgentNodeId: string().optional(),
|
|
20011
20087
|
stepToggles: record(string(), boolean()).optional(),
|
|
20012
|
-
|
|
20088
|
+
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
20013
20089
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
20014
20090
|
});
|
|
20015
20091
|
/**
|
|
@@ -20223,6 +20299,44 @@ var CameraStatusSchema = object({
|
|
|
20223
20299
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20224
20300
|
fetchedAt: number()
|
|
20225
20301
|
});
|
|
20302
|
+
var NodeInferenceDeviceSchema = object({
|
|
20303
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20304
|
+
key: string(),
|
|
20305
|
+
backend: string(),
|
|
20306
|
+
device: string(),
|
|
20307
|
+
format: _enum(MODEL_FORMATS),
|
|
20308
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20309
|
+
available: boolean(),
|
|
20310
|
+
/**
|
|
20311
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20312
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20313
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20314
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20315
|
+
* (unavailable) key keeps its stored value.
|
|
20316
|
+
*/
|
|
20317
|
+
enabled: boolean(),
|
|
20318
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20319
|
+
weight: number(),
|
|
20320
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20321
|
+
maxSessions: number().nullable(),
|
|
20322
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20323
|
+
defaultModelId: string(),
|
|
20324
|
+
/**
|
|
20325
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20326
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20327
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20328
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20329
|
+
* available per format; this is the stored selection that becomes the
|
|
20330
|
+
* default for EVERY camera landing on this accelerator.
|
|
20331
|
+
*/
|
|
20332
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20333
|
+
});
|
|
20334
|
+
var NodeInferenceDevicesSchema = object({
|
|
20335
|
+
nodeId: string(),
|
|
20336
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20337
|
+
reachable: boolean(),
|
|
20338
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20339
|
+
});
|
|
20226
20340
|
method(object({
|
|
20227
20341
|
deviceId: number(),
|
|
20228
20342
|
agentNodeId: string()
|
|
@@ -20232,7 +20346,13 @@ method(object({
|
|
|
20232
20346
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20233
20347
|
kind: "mutation",
|
|
20234
20348
|
auth: "admin"
|
|
20235
|
-
}), method(
|
|
20349
|
+
}), method(object({
|
|
20350
|
+
deviceId: number(),
|
|
20351
|
+
deviceKey: string()
|
|
20352
|
+
}), object({ success: literal(true) }), {
|
|
20353
|
+
kind: "mutation",
|
|
20354
|
+
auth: "admin"
|
|
20355
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20236
20356
|
kind: "mutation",
|
|
20237
20357
|
auth: "admin"
|
|
20238
20358
|
}), method(_void(), array(PipelineAssignmentSchema).readonly()), method(object({ deviceId: number() }), PipelineAssignmentSchema.nullable()), method(_void(), array(AgentLoadSummarySchema).readonly()), method(_void(), GlobalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(object({ nodeId: string() }), CapabilityBindingsSchema), method(object({
|
|
@@ -20266,13 +20386,7 @@ method(object({
|
|
|
20266
20386
|
}))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20267
20387
|
nodeId: string(),
|
|
20268
20388
|
settings: AgentPipelineSettingsSchema
|
|
20269
|
-
})).readonly()), method(object({
|
|
20270
|
-
agentNodeId: string(),
|
|
20271
|
-
defaults: record(string(), AgentAddonConfigSchema)
|
|
20272
|
-
}), object({ success: literal(true) }), {
|
|
20273
|
-
kind: "mutation",
|
|
20274
|
-
auth: "admin"
|
|
20275
|
-
}), method(object({ agentNodeId: string() }), object({
|
|
20389
|
+
})).readonly()), method(object({ agentNodeId: string() }), object({
|
|
20276
20390
|
success: boolean(),
|
|
20277
20391
|
removed: boolean()
|
|
20278
20392
|
}), {
|
|
@@ -20304,7 +20418,18 @@ method(object({
|
|
|
20304
20418
|
}), object({ success: literal(true) }), {
|
|
20305
20419
|
kind: "mutation",
|
|
20306
20420
|
auth: "admin"
|
|
20307
|
-
}), method(object({
|
|
20421
|
+
}), method(object({
|
|
20422
|
+
agentNodeId: string(),
|
|
20423
|
+
inferenceDevices: record(string(), object({
|
|
20424
|
+
enabled: boolean(),
|
|
20425
|
+
weight: number().positive().optional(),
|
|
20426
|
+
maxSessions: number().int().positive().optional(),
|
|
20427
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20428
|
+
}))
|
|
20429
|
+
}), object({ success: literal(true) }), {
|
|
20430
|
+
kind: "mutation",
|
|
20431
|
+
auth: "admin"
|
|
20432
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
|
|
20308
20433
|
success: literal(true),
|
|
20309
20434
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20310
20435
|
effectiveModelId: string().nullable(),
|
|
@@ -20320,9 +20445,10 @@ method(object({
|
|
|
20320
20445
|
}), object({ success: literal(true) }), {
|
|
20321
20446
|
kind: "mutation",
|
|
20322
20447
|
auth: "admin"
|
|
20323
|
-
}), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20448
|
+
}), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20324
20449
|
deviceId: number(),
|
|
20325
20450
|
agentNodeId: string(),
|
|
20451
|
+
deviceKey: string(),
|
|
20326
20452
|
addonId: string(),
|
|
20327
20453
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20328
20454
|
}), object({ success: literal(true) }), {
|
|
@@ -20359,14 +20485,13 @@ method(object({
|
|
|
20359
20485
|
});
|
|
20360
20486
|
/**
|
|
20361
20487
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20362
|
-
* package lifecycle (runtime-updatable node packages
|
|
20363
|
-
* agents).
|
|
20488
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20364
20489
|
*
|
|
20365
|
-
*
|
|
20366
|
-
*
|
|
20367
|
-
*
|
|
20368
|
-
*
|
|
20369
|
-
*
|
|
20490
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20491
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20492
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20493
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20494
|
+
* no auto-rollback).
|
|
20370
20495
|
*
|
|
20371
20496
|
* Providers:
|
|
20372
20497
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20474,7 +20599,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20474
20599
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20475
20600
|
version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
20476
20601
|
kind: "mutation",
|
|
20477
|
-
auth: "admin"
|
|
20602
|
+
auth: "admin",
|
|
20603
|
+
timeoutMs: 16 * 6e4
|
|
20478
20604
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20479
20605
|
kind: "mutation",
|
|
20480
20606
|
auth: "admin"
|
|
@@ -22612,10 +22738,10 @@ var TopologyCategorySchema = object({
|
|
|
22612
22738
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22613
22739
|
});
|
|
22614
22740
|
/**
|
|
22615
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22616
|
-
*
|
|
22617
|
-
* version visibility for the Server management surface. Nullable:
|
|
22618
|
-
* rows and
|
|
22741
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22742
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22743
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22744
|
+
* offline rows and nodes that never reported one.
|
|
22619
22745
|
*/
|
|
22620
22746
|
var TopologyRootPackageSchema = object({
|
|
22621
22747
|
name: string(),
|
|
@@ -23003,17 +23129,28 @@ var PlatformScoreSchema = object({
|
|
|
23003
23129
|
format: _enum([
|
|
23004
23130
|
"onnx",
|
|
23005
23131
|
"coreml",
|
|
23006
|
-
"openvino"
|
|
23132
|
+
"openvino",
|
|
23133
|
+
"tflite"
|
|
23007
23134
|
]),
|
|
23008
23135
|
score: number(),
|
|
23009
23136
|
reason: string(),
|
|
23010
23137
|
available: boolean()
|
|
23011
23138
|
});
|
|
23139
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
23140
|
+
key: string(),
|
|
23141
|
+
backend: string(),
|
|
23142
|
+
device: string(),
|
|
23143
|
+
format: ModelFormatSchema,
|
|
23144
|
+
runtime: literal("python"),
|
|
23145
|
+
score: number(),
|
|
23146
|
+
available: boolean()
|
|
23147
|
+
});
|
|
23012
23148
|
var PlatformCapabilitiesSchema = object({
|
|
23013
23149
|
hardware: HardwareInfoSchema,
|
|
23014
23150
|
scores: array(PlatformScoreSchema).readonly(),
|
|
23015
23151
|
bestScore: PlatformScoreSchema,
|
|
23016
|
-
pythonPath: string().nullable()
|
|
23152
|
+
pythonPath: string().nullable(),
|
|
23153
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
23017
23154
|
});
|
|
23018
23155
|
var ModelRequirementSchema = object({
|
|
23019
23156
|
modelId: string(),
|
|
@@ -26942,12 +27079,6 @@ Object.freeze({
|
|
|
26942
27079
|
addonId: null,
|
|
26943
27080
|
access: "view"
|
|
26944
27081
|
},
|
|
26945
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26946
|
-
capName: "pipeline-executor",
|
|
26947
|
-
capScope: "system",
|
|
26948
|
-
addonId: null,
|
|
26949
|
-
access: "create"
|
|
26950
|
-
},
|
|
26951
27082
|
"pipelineExecutor.runAudioTest": {
|
|
26952
27083
|
capName: "pipeline-executor",
|
|
26953
27084
|
capScope: "system",
|
|
@@ -27098,6 +27229,12 @@ Object.freeze({
|
|
|
27098
27229
|
addonId: null,
|
|
27099
27230
|
access: "view"
|
|
27100
27231
|
},
|
|
27232
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
27233
|
+
capName: "pipeline-orchestrator",
|
|
27234
|
+
capScope: "system",
|
|
27235
|
+
addonId: null,
|
|
27236
|
+
access: "view"
|
|
27237
|
+
},
|
|
27101
27238
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
27102
27239
|
capName: "pipeline-orchestrator",
|
|
27103
27240
|
capScope: "system",
|
|
@@ -27110,6 +27247,12 @@ Object.freeze({
|
|
|
27110
27247
|
addonId: null,
|
|
27111
27248
|
access: "view"
|
|
27112
27249
|
},
|
|
27250
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
27251
|
+
capName: "pipeline-orchestrator",
|
|
27252
|
+
capScope: "system",
|
|
27253
|
+
addonId: null,
|
|
27254
|
+
access: "view"
|
|
27255
|
+
},
|
|
27113
27256
|
"pipelineOrchestrator.listAgentSettings": {
|
|
27114
27257
|
capName: "pipeline-orchestrator",
|
|
27115
27258
|
capScope: "system",
|
|
@@ -27152,19 +27295,19 @@ Object.freeze({
|
|
|
27152
27295
|
addonId: null,
|
|
27153
27296
|
access: "create"
|
|
27154
27297
|
},
|
|
27155
|
-
"pipelineOrchestrator.
|
|
27298
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
27156
27299
|
capName: "pipeline-orchestrator",
|
|
27157
27300
|
capScope: "system",
|
|
27158
27301
|
addonId: null,
|
|
27159
27302
|
access: "create"
|
|
27160
27303
|
},
|
|
27161
|
-
"pipelineOrchestrator.
|
|
27304
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
27162
27305
|
capName: "pipeline-orchestrator",
|
|
27163
27306
|
capScope: "system",
|
|
27164
27307
|
addonId: null,
|
|
27165
27308
|
access: "create"
|
|
27166
27309
|
},
|
|
27167
|
-
"pipelineOrchestrator.
|
|
27310
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
27168
27311
|
capName: "pipeline-orchestrator",
|
|
27169
27312
|
capScope: "system",
|
|
27170
27313
|
addonId: null,
|
|
@@ -27206,6 +27349,12 @@ Object.freeze({
|
|
|
27206
27349
|
addonId: null,
|
|
27207
27350
|
access: "create"
|
|
27208
27351
|
},
|
|
27352
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
27353
|
+
capName: "pipeline-orchestrator",
|
|
27354
|
+
capScope: "system",
|
|
27355
|
+
addonId: null,
|
|
27356
|
+
access: "create"
|
|
27357
|
+
},
|
|
27209
27358
|
"pipelineOrchestrator.unassignAudio": {
|
|
27210
27359
|
capName: "pipeline-orchestrator",
|
|
27211
27360
|
capScope: "system",
|