@camstack/addon-provider-rtsp 1.1.28 → 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 +213 -106
- package/dist/addon.mjs +213 -106
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7110,6 +7110,17 @@ var ModelCatalogEntrySchema = object({
|
|
|
7110
7110
|
"imagenet",
|
|
7111
7111
|
"none"
|
|
7112
7112
|
]).optional(),
|
|
7113
|
+
/**
|
|
7114
|
+
* The model already applies softmax IN-GRAPH — its raw output is a
|
|
7115
|
+
* probability distribution, not logits. When set, the `softmax`
|
|
7116
|
+
* postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
|
|
7117
|
+
* probability vector collapses it toward uniform (top-1 score craters far
|
|
7118
|
+
* below its true value, making every confidence gate meaningless). Absent ⇒
|
|
7119
|
+
* the output is raw logits and the postprocessor applies softmax (the normal
|
|
7120
|
+
* case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
|
|
7121
|
+
* TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
|
|
7122
|
+
*/
|
|
7123
|
+
outputProbabilities: boolean().optional(),
|
|
7113
7124
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
7114
7125
|
/**
|
|
7115
7126
|
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
@@ -12498,10 +12509,7 @@ var ConfigUISchemaNullableBridge = custom();
|
|
|
12498
12509
|
var InferenceCapabilitiesBridge = custom();
|
|
12499
12510
|
var ModelAvailabilityListBridge = custom();
|
|
12500
12511
|
var PipelineRunResultBridge = custom();
|
|
12501
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12502
|
-
kind: "mutation",
|
|
12503
|
-
auth: "admin"
|
|
12504
|
-
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12512
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12505
12513
|
modelId: string(),
|
|
12506
12514
|
settings: record(string(), unknown()).readonly()
|
|
12507
12515
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12561,13 +12569,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12561
12569
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12562
12570
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12563
12571
|
*/
|
|
12564
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12572
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12573
|
+
/**
|
|
12574
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12575
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12576
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12577
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12578
|
+
*/
|
|
12579
|
+
deviceKey: string().optional()
|
|
12565
12580
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12566
12581
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12567
12582
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12568
12583
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12569
12584
|
deviceId: number().optional(),
|
|
12570
|
-
sessionId: string().optional()
|
|
12585
|
+
sessionId: string().optional(),
|
|
12586
|
+
/**
|
|
12587
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12588
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12589
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12590
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12591
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12592
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12593
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12594
|
+
* released via `uncacheFrame`.
|
|
12595
|
+
*/
|
|
12596
|
+
frameId: number().int().nonnegative().optional(),
|
|
12597
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12598
|
+
deviceKey: string().optional()
|
|
12571
12599
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12572
12600
|
data: _instanceof(Uint8Array),
|
|
12573
12601
|
width: number().int().positive(),
|
|
@@ -12599,8 +12627,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12599
12627
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12600
12628
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12601
12629
|
* cache; auto-disposed after the idle TTL.
|
|
12630
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12631
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12632
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12633
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12634
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12635
|
+
* Engines tab shows all pools running at once.
|
|
12602
12636
|
*/
|
|
12603
|
-
kind: _enum([
|
|
12637
|
+
kind: _enum([
|
|
12638
|
+
"runtime",
|
|
12639
|
+
"warm-override",
|
|
12640
|
+
"device-pool"
|
|
12641
|
+
]),
|
|
12604
12642
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12605
12643
|
poolPid: number().nullable(),
|
|
12606
12644
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12735,7 +12773,21 @@ var NativeCropResultSchema = object({
|
|
|
12735
12773
|
/** Packed rgb (24-bit) pixels of the crop. */
|
|
12736
12774
|
bytes: _instanceof(Uint8Array),
|
|
12737
12775
|
width: number().int().positive(),
|
|
12738
|
-
height: number().int().positive()
|
|
12776
|
+
height: number().int().positive(),
|
|
12777
|
+
/**
|
|
12778
|
+
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
12779
|
+
* `keyFrame`) can reject a degraded fallback:
|
|
12780
|
+
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
12781
|
+
* quality path).
|
|
12782
|
+
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
12783
|
+
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
12784
|
+
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
12785
|
+
*
|
|
12786
|
+
* OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
|
|
12787
|
+
* treated as `native` (accepted) by every consumer so mixed-version clusters
|
|
12788
|
+
* keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
|
|
12789
|
+
*/
|
|
12790
|
+
tier: _enum(["native", "ram-fullframe"]).optional()
|
|
12739
12791
|
});
|
|
12740
12792
|
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
12741
12793
|
* originating detection, in FRAME-space coordinates. Reuses
|
|
@@ -12975,7 +13027,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
12975
13027
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
12976
13028
|
* `remoteSourcingNodes` rollout setting).
|
|
12977
13029
|
*/
|
|
12978
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
13030
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
13031
|
+
/**
|
|
13032
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
13033
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
13034
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
13035
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
13036
|
+
*/
|
|
13037
|
+
deviceKey: string().optional()
|
|
12979
13038
|
});
|
|
12980
13039
|
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;
|
|
12981
13040
|
/**
|
|
@@ -12996,6 +13055,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
12996
13055
|
avgInferenceTimeMs: number(),
|
|
12997
13056
|
/** Total queue depth across motion + detection queues. */
|
|
12998
13057
|
queueDepthTotal: number(),
|
|
13058
|
+
/**
|
|
13059
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
13060
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
13061
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
13062
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
13063
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
13064
|
+
*/
|
|
13065
|
+
devices: array(object({
|
|
13066
|
+
deviceKey: string(),
|
|
13067
|
+
backend: string(),
|
|
13068
|
+
attachedCameras: number(),
|
|
13069
|
+
queueDepthTotal: number()
|
|
13070
|
+
})).default([]),
|
|
12999
13071
|
/** Hardware capability flags reported by this node. */
|
|
13000
13072
|
hardware: object({
|
|
13001
13073
|
hasGpu: boolean(),
|
|
@@ -16144,6 +16216,8 @@ var BaseDeviceProvider = class extends BaseAddon {
|
|
|
16144
16216
|
return toDeviceSummary(device, this.addonId);
|
|
16145
16217
|
}
|
|
16146
16218
|
};
|
|
16219
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
|
|
16220
|
+
new Set(Object.values(DeviceType));
|
|
16147
16221
|
/**
|
|
16148
16222
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
16149
16223
|
* surface that admin-ui consumes through `useAddonPagesListPages()`.
|
|
@@ -17717,7 +17791,8 @@ var LinkedDeviceSchema = object({
|
|
|
17717
17791
|
deviceId: number(),
|
|
17718
17792
|
name: string(),
|
|
17719
17793
|
location: string().nullable(),
|
|
17720
|
-
features: array(string())
|
|
17794
|
+
features: array(string()),
|
|
17795
|
+
producesTrackedEvents: boolean().optional()
|
|
17721
17796
|
});
|
|
17722
17797
|
var SavedDeviceRowSchema = object({
|
|
17723
17798
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
@@ -19347,6 +19422,7 @@ var TrackSchema = object({
|
|
|
19347
19422
|
deviceId: number(),
|
|
19348
19423
|
className: string(),
|
|
19349
19424
|
label: string().optional(),
|
|
19425
|
+
producingDeviceName: string().optional(),
|
|
19350
19426
|
/** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
|
|
19351
19427
|
source: TrackSourceSchema.optional(),
|
|
19352
19428
|
firstSeen: number(),
|
|
@@ -19484,7 +19560,8 @@ var MediaFileKindEnum = _enum([
|
|
|
19484
19560
|
"fullFrameBoxed",
|
|
19485
19561
|
"faceCrop",
|
|
19486
19562
|
"plateCrop",
|
|
19487
|
-
"keyFrame"
|
|
19563
|
+
"keyFrame",
|
|
19564
|
+
"keyFrameSmall"
|
|
19488
19565
|
]);
|
|
19489
19566
|
var MediaFileSchema = object({
|
|
19490
19567
|
key: string(),
|
|
@@ -19813,13 +19890,11 @@ var PipelineTemplateSchema = object({
|
|
|
19813
19890
|
createdAt: string(),
|
|
19814
19891
|
updatedAt: string()
|
|
19815
19892
|
});
|
|
19816
|
-
var
|
|
19817
|
-
enabled: boolean(),
|
|
19893
|
+
var DeviceStepConfigSchema = object({
|
|
19818
19894
|
modelId: string().optional(),
|
|
19819
|
-
settings: record(string(), unknown()).
|
|
19895
|
+
settings: record(string(), unknown()).optional()
|
|
19820
19896
|
});
|
|
19821
19897
|
var AgentPipelineSettingsSchema = object({
|
|
19822
|
-
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
19823
19898
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19824
19899
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19825
19900
|
detectWeight: number().positive().optional(),
|
|
@@ -19843,7 +19918,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19843
19918
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19844
19919
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19845
19920
|
*/
|
|
19846
|
-
reachableHost: string().optional()
|
|
19921
|
+
reachableHost: string().optional(),
|
|
19922
|
+
/**
|
|
19923
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
19924
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
19925
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
19926
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
19927
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
19928
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
19929
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
19930
|
+
*/
|
|
19931
|
+
inferenceDevices: record(string(), object({
|
|
19932
|
+
enabled: boolean(),
|
|
19933
|
+
weight: number().positive().optional(),
|
|
19934
|
+
maxSessions: number().int().positive().optional(),
|
|
19935
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
19936
|
+
})).optional()
|
|
19847
19937
|
});
|
|
19848
19938
|
var CameraPipelineForAgentSchema = object({
|
|
19849
19939
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -19853,14 +19943,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
19853
19943
|
}).nullable()
|
|
19854
19944
|
});
|
|
19855
19945
|
var CameraStepOverridePatchSchema = object({
|
|
19856
|
-
enabled: boolean().optional(),
|
|
19857
19946
|
modelId: string().optional(),
|
|
19858
19947
|
settings: record(string(), unknown()).readonly().optional()
|
|
19859
19948
|
});
|
|
19860
19949
|
var CameraPipelineSettingsSchema = object({
|
|
19861
19950
|
pinnedAgentNodeId: string().optional(),
|
|
19862
19951
|
stepToggles: record(string(), boolean()).optional(),
|
|
19863
|
-
|
|
19952
|
+
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
19864
19953
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
19865
19954
|
});
|
|
19866
19955
|
/**
|
|
@@ -20074,6 +20163,44 @@ var CameraStatusSchema = object({
|
|
|
20074
20163
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20075
20164
|
fetchedAt: number()
|
|
20076
20165
|
});
|
|
20166
|
+
var NodeInferenceDeviceSchema = object({
|
|
20167
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20168
|
+
key: string(),
|
|
20169
|
+
backend: string(),
|
|
20170
|
+
device: string(),
|
|
20171
|
+
format: _enum(MODEL_FORMATS),
|
|
20172
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20173
|
+
available: boolean(),
|
|
20174
|
+
/**
|
|
20175
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20176
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20177
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20178
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20179
|
+
* (unavailable) key keeps its stored value.
|
|
20180
|
+
*/
|
|
20181
|
+
enabled: boolean(),
|
|
20182
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20183
|
+
weight: number(),
|
|
20184
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20185
|
+
maxSessions: number().nullable(),
|
|
20186
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20187
|
+
defaultModelId: string(),
|
|
20188
|
+
/**
|
|
20189
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20190
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20191
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20192
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20193
|
+
* available per format; this is the stored selection that becomes the
|
|
20194
|
+
* default for EVERY camera landing on this accelerator.
|
|
20195
|
+
*/
|
|
20196
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20197
|
+
});
|
|
20198
|
+
var NodeInferenceDevicesSchema = object({
|
|
20199
|
+
nodeId: string(),
|
|
20200
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20201
|
+
reachable: boolean(),
|
|
20202
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20203
|
+
});
|
|
20077
20204
|
method(object({
|
|
20078
20205
|
deviceId: number(),
|
|
20079
20206
|
agentNodeId: string()
|
|
@@ -20083,7 +20210,13 @@ method(object({
|
|
|
20083
20210
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20084
20211
|
kind: "mutation",
|
|
20085
20212
|
auth: "admin"
|
|
20086
|
-
}), method(
|
|
20213
|
+
}), method(object({
|
|
20214
|
+
deviceId: number(),
|
|
20215
|
+
deviceKey: string()
|
|
20216
|
+
}), object({ success: literal(true) }), {
|
|
20217
|
+
kind: "mutation",
|
|
20218
|
+
auth: "admin"
|
|
20219
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20087
20220
|
kind: "mutation",
|
|
20088
20221
|
auth: "admin"
|
|
20089
20222
|
}), 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({
|
|
@@ -20117,13 +20250,7 @@ method(object({
|
|
|
20117
20250
|
}))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20118
20251
|
nodeId: string(),
|
|
20119
20252
|
settings: AgentPipelineSettingsSchema
|
|
20120
|
-
})).readonly()), method(object({
|
|
20121
|
-
agentNodeId: string(),
|
|
20122
|
-
defaults: record(string(), AgentAddonConfigSchema)
|
|
20123
|
-
}), object({ success: literal(true) }), {
|
|
20124
|
-
kind: "mutation",
|
|
20125
|
-
auth: "admin"
|
|
20126
|
-
}), method(object({ agentNodeId: string() }), object({
|
|
20253
|
+
})).readonly()), method(object({ agentNodeId: string() }), object({
|
|
20127
20254
|
success: boolean(),
|
|
20128
20255
|
removed: boolean()
|
|
20129
20256
|
}), {
|
|
@@ -20155,7 +20282,18 @@ method(object({
|
|
|
20155
20282
|
}), object({ success: literal(true) }), {
|
|
20156
20283
|
kind: "mutation",
|
|
20157
20284
|
auth: "admin"
|
|
20158
|
-
}), method(object({
|
|
20285
|
+
}), method(object({
|
|
20286
|
+
agentNodeId: string(),
|
|
20287
|
+
inferenceDevices: record(string(), object({
|
|
20288
|
+
enabled: boolean(),
|
|
20289
|
+
weight: number().positive().optional(),
|
|
20290
|
+
maxSessions: number().int().positive().optional(),
|
|
20291
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20292
|
+
}))
|
|
20293
|
+
}), object({ success: literal(true) }), {
|
|
20294
|
+
kind: "mutation",
|
|
20295
|
+
auth: "admin"
|
|
20296
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
|
|
20159
20297
|
success: literal(true),
|
|
20160
20298
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20161
20299
|
effectiveModelId: string().nullable(),
|
|
@@ -20171,9 +20309,10 @@ method(object({
|
|
|
20171
20309
|
}), object({ success: literal(true) }), {
|
|
20172
20310
|
kind: "mutation",
|
|
20173
20311
|
auth: "admin"
|
|
20174
|
-
}), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20312
|
+
}), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20175
20313
|
deviceId: number(),
|
|
20176
20314
|
agentNodeId: string(),
|
|
20315
|
+
deviceKey: string(),
|
|
20177
20316
|
addonId: string(),
|
|
20178
20317
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20179
20318
|
}), object({ success: literal(true) }), {
|
|
@@ -20210,14 +20349,13 @@ method(object({
|
|
|
20210
20349
|
});
|
|
20211
20350
|
/**
|
|
20212
20351
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20213
|
-
* package lifecycle (runtime-updatable node packages
|
|
20214
|
-
* agents).
|
|
20352
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20215
20353
|
*
|
|
20216
|
-
*
|
|
20217
|
-
*
|
|
20218
|
-
*
|
|
20219
|
-
*
|
|
20220
|
-
*
|
|
20354
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20355
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20356
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20357
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20358
|
+
* no auto-rollback).
|
|
20221
20359
|
*
|
|
20222
20360
|
* Providers:
|
|
20223
20361
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20325,7 +20463,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20325
20463
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20326
20464
|
version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
20327
20465
|
kind: "mutation",
|
|
20328
|
-
auth: "admin"
|
|
20466
|
+
auth: "admin",
|
|
20467
|
+
timeoutMs: 16 * 6e4
|
|
20329
20468
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20330
20469
|
kind: "mutation",
|
|
20331
20470
|
auth: "admin"
|
|
@@ -21420,22 +21559,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
21420
21559
|
var RestartAddonResultSchema = unknown();
|
|
21421
21560
|
var InstallPackageResultSchema = unknown();
|
|
21422
21561
|
var ReloadPackagesResultSchema = unknown();
|
|
21423
|
-
/**
|
|
21424
|
-
* Result of `updateFrameworkPackage`. The cap method returns BEFORE the
|
|
21425
|
-
* server restarts so the admin UI can react to the `restartingAt`
|
|
21426
|
-
* timestamp (shows reconnect overlay). The transition from
|
|
21427
|
-
* `fromVersion` to `toVersion` will be confirmed by a subsequent
|
|
21428
|
-
* `system.restart-completed` event after the new process boots.
|
|
21429
|
-
*
|
|
21430
|
-
* Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
|
|
21431
|
-
*/
|
|
21432
|
-
var UpdateFrameworkPackageResultSchema = object({
|
|
21433
|
-
packageName: string(),
|
|
21434
|
-
fromVersion: string(),
|
|
21435
|
-
toVersion: string(),
|
|
21436
|
-
/** Ms-epoch the server scheduled its self-restart. */
|
|
21437
|
-
restartingAt: number()
|
|
21438
|
-
});
|
|
21439
21562
|
var BulkUpdateItemStatusSchema = _enum([
|
|
21440
21563
|
"queued",
|
|
21441
21564
|
"updating",
|
|
@@ -21563,13 +21686,6 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
21563
21686
|
}), object({ success: literal(true) }), {
|
|
21564
21687
|
kind: "mutation",
|
|
21565
21688
|
auth: "admin"
|
|
21566
|
-
}), method(object({
|
|
21567
|
-
packageName: string().min(1),
|
|
21568
|
-
version: string().optional(),
|
|
21569
|
-
deferRestart: boolean().optional()
|
|
21570
|
-
}), UpdateFrameworkPackageResultSchema, {
|
|
21571
|
-
kind: "mutation",
|
|
21572
|
-
auth: "admin"
|
|
21573
21689
|
}), method(object({ name: string() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string() }), RestartAddonResultSchema, {
|
|
21574
21690
|
kind: "mutation",
|
|
21575
21691
|
auth: "admin"
|
|
@@ -22435,10 +22551,10 @@ var TopologyCategorySchema = object({
|
|
|
22435
22551
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22436
22552
|
});
|
|
22437
22553
|
/**
|
|
22438
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22439
|
-
*
|
|
22440
|
-
* version visibility for the Server management surface. Nullable:
|
|
22441
|
-
* rows and
|
|
22554
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22555
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22556
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22557
|
+
* offline rows and nodes that never reported one.
|
|
22442
22558
|
*/
|
|
22443
22559
|
var TopologyRootPackageSchema = object({
|
|
22444
22560
|
name: string(),
|
|
@@ -22826,17 +22942,28 @@ var PlatformScoreSchema = object({
|
|
|
22826
22942
|
format: _enum([
|
|
22827
22943
|
"onnx",
|
|
22828
22944
|
"coreml",
|
|
22829
|
-
"openvino"
|
|
22945
|
+
"openvino",
|
|
22946
|
+
"tflite"
|
|
22830
22947
|
]),
|
|
22831
22948
|
score: number(),
|
|
22832
22949
|
reason: string(),
|
|
22833
22950
|
available: boolean()
|
|
22834
22951
|
});
|
|
22952
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
22953
|
+
key: string(),
|
|
22954
|
+
backend: string(),
|
|
22955
|
+
device: string(),
|
|
22956
|
+
format: ModelFormatSchema,
|
|
22957
|
+
runtime: literal("python"),
|
|
22958
|
+
score: number(),
|
|
22959
|
+
available: boolean()
|
|
22960
|
+
});
|
|
22835
22961
|
var PlatformCapabilitiesSchema = object({
|
|
22836
22962
|
hardware: HardwareInfoSchema,
|
|
22837
22963
|
scores: array(PlatformScoreSchema).readonly(),
|
|
22838
22964
|
bestScore: PlatformScoreSchema,
|
|
22839
|
-
pythonPath: string().nullable()
|
|
22965
|
+
pythonPath: string().nullable(),
|
|
22966
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
22840
22967
|
});
|
|
22841
22968
|
var ModelRequirementSchema = object({
|
|
22842
22969
|
modelId: string(),
|
|
@@ -23728,12 +23855,6 @@ Object.freeze({
|
|
|
23728
23855
|
addonId: null,
|
|
23729
23856
|
access: "delete"
|
|
23730
23857
|
},
|
|
23731
|
-
"addons.updateFrameworkPackage": {
|
|
23732
|
-
capName: "addons",
|
|
23733
|
-
capScope: "system",
|
|
23734
|
-
addonId: null,
|
|
23735
|
-
access: "create"
|
|
23736
|
-
},
|
|
23737
23858
|
"addons.updatePackage": {
|
|
23738
23859
|
capName: "addons",
|
|
23739
23860
|
capScope: "system",
|
|
@@ -26506,12 +26627,6 @@ Object.freeze({
|
|
|
26506
26627
|
addonId: null,
|
|
26507
26628
|
access: "view"
|
|
26508
26629
|
},
|
|
26509
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26510
|
-
capName: "pipeline-executor",
|
|
26511
|
-
capScope: "system",
|
|
26512
|
-
addonId: null,
|
|
26513
|
-
access: "create"
|
|
26514
|
-
},
|
|
26515
26630
|
"pipelineExecutor.runAudioTest": {
|
|
26516
26631
|
capName: "pipeline-executor",
|
|
26517
26632
|
capScope: "system",
|
|
@@ -26662,6 +26777,12 @@ Object.freeze({
|
|
|
26662
26777
|
addonId: null,
|
|
26663
26778
|
access: "view"
|
|
26664
26779
|
},
|
|
26780
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
26781
|
+
capName: "pipeline-orchestrator",
|
|
26782
|
+
capScope: "system",
|
|
26783
|
+
addonId: null,
|
|
26784
|
+
access: "view"
|
|
26785
|
+
},
|
|
26665
26786
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
26666
26787
|
capName: "pipeline-orchestrator",
|
|
26667
26788
|
capScope: "system",
|
|
@@ -26674,6 +26795,12 @@ Object.freeze({
|
|
|
26674
26795
|
addonId: null,
|
|
26675
26796
|
access: "view"
|
|
26676
26797
|
},
|
|
26798
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
26799
|
+
capName: "pipeline-orchestrator",
|
|
26800
|
+
capScope: "system",
|
|
26801
|
+
addonId: null,
|
|
26802
|
+
access: "view"
|
|
26803
|
+
},
|
|
26677
26804
|
"pipelineOrchestrator.listAgentSettings": {
|
|
26678
26805
|
capName: "pipeline-orchestrator",
|
|
26679
26806
|
capScope: "system",
|
|
@@ -26716,19 +26843,19 @@ Object.freeze({
|
|
|
26716
26843
|
addonId: null,
|
|
26717
26844
|
access: "create"
|
|
26718
26845
|
},
|
|
26719
|
-
"pipelineOrchestrator.
|
|
26846
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
26720
26847
|
capName: "pipeline-orchestrator",
|
|
26721
26848
|
capScope: "system",
|
|
26722
26849
|
addonId: null,
|
|
26723
26850
|
access: "create"
|
|
26724
26851
|
},
|
|
26725
|
-
"pipelineOrchestrator.
|
|
26852
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
26726
26853
|
capName: "pipeline-orchestrator",
|
|
26727
26854
|
capScope: "system",
|
|
26728
26855
|
addonId: null,
|
|
26729
26856
|
access: "create"
|
|
26730
26857
|
},
|
|
26731
|
-
"pipelineOrchestrator.
|
|
26858
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
26732
26859
|
capName: "pipeline-orchestrator",
|
|
26733
26860
|
capScope: "system",
|
|
26734
26861
|
addonId: null,
|
|
@@ -26770,6 +26897,12 @@ Object.freeze({
|
|
|
26770
26897
|
addonId: null,
|
|
26771
26898
|
access: "create"
|
|
26772
26899
|
},
|
|
26900
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
26901
|
+
capName: "pipeline-orchestrator",
|
|
26902
|
+
capScope: "system",
|
|
26903
|
+
addonId: null,
|
|
26904
|
+
access: "create"
|
|
26905
|
+
},
|
|
26773
26906
|
"pipelineOrchestrator.unassignAudio": {
|
|
26774
26907
|
capName: "pipeline-orchestrator",
|
|
26775
26908
|
capScope: "system",
|
|
@@ -28322,32 +28455,6 @@ Object.freeze({
|
|
|
28322
28455
|
"network-access": "ingress",
|
|
28323
28456
|
"smtp-provider": "email"
|
|
28324
28457
|
});
|
|
28325
|
-
var frameworkSwapPackageSchema = object({
|
|
28326
|
-
name: string(),
|
|
28327
|
-
stagedPath: string(),
|
|
28328
|
-
backupPath: string(),
|
|
28329
|
-
toVersion: string(),
|
|
28330
|
-
fromVersion: string().nullable()
|
|
28331
|
-
});
|
|
28332
|
-
object({
|
|
28333
|
-
jobId: string(),
|
|
28334
|
-
taskId: string(),
|
|
28335
|
-
packages: array(frameworkSwapPackageSchema),
|
|
28336
|
-
requestedAtMs: number(),
|
|
28337
|
-
schemaVersion: literal(1)
|
|
28338
|
-
});
|
|
28339
|
-
object({
|
|
28340
|
-
jobId: string(),
|
|
28341
|
-
taskId: string(),
|
|
28342
|
-
backups: array(object({
|
|
28343
|
-
name: string(),
|
|
28344
|
-
backupPath: string(),
|
|
28345
|
-
livePath: string()
|
|
28346
|
-
})),
|
|
28347
|
-
appliedAtMs: number(),
|
|
28348
|
-
bootAttempts: number(),
|
|
28349
|
-
schemaVersion: literal(1)
|
|
28350
|
-
});
|
|
28351
28458
|
/**
|
|
28352
28459
|
* Names that, when used as URL query parameters, almost certainly carry
|
|
28353
28460
|
* a secret. Matching is case-insensitive and anchored to the full param
|
package/dist/addon.mjs
CHANGED
|
@@ -7086,6 +7086,17 @@ var ModelCatalogEntrySchema = object({
|
|
|
7086
7086
|
"imagenet",
|
|
7087
7087
|
"none"
|
|
7088
7088
|
]).optional(),
|
|
7089
|
+
/**
|
|
7090
|
+
* The model already applies softmax IN-GRAPH — its raw output is a
|
|
7091
|
+
* probability distribution, not logits. When set, the `softmax`
|
|
7092
|
+
* postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
|
|
7093
|
+
* probability vector collapses it toward uniform (top-1 score craters far
|
|
7094
|
+
* below its true value, making every confidence gate meaningless). Absent ⇒
|
|
7095
|
+
* the output is raw logits and the postprocessor applies softmax (the normal
|
|
7096
|
+
* case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
|
|
7097
|
+
* TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
|
|
7098
|
+
*/
|
|
7099
|
+
outputProbabilities: boolean().optional(),
|
|
7089
7100
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
7090
7101
|
/**
|
|
7091
7102
|
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
@@ -12474,10 +12485,7 @@ var ConfigUISchemaNullableBridge = custom();
|
|
|
12474
12485
|
var InferenceCapabilitiesBridge = custom();
|
|
12475
12486
|
var ModelAvailabilityListBridge = custom();
|
|
12476
12487
|
var PipelineRunResultBridge = custom();
|
|
12477
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12478
|
-
kind: "mutation",
|
|
12479
|
-
auth: "admin"
|
|
12480
|
-
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12488
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
12481
12489
|
modelId: string(),
|
|
12482
12490
|
settings: record(string(), unknown()).readonly()
|
|
12483
12491
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -12537,13 +12545,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12537
12545
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12538
12546
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12539
12547
|
*/
|
|
12540
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12548
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12549
|
+
/**
|
|
12550
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12551
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12552
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12553
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12554
|
+
*/
|
|
12555
|
+
deviceKey: string().optional()
|
|
12541
12556
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12542
12557
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12543
12558
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12544
12559
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12545
12560
|
deviceId: number().optional(),
|
|
12546
|
-
sessionId: string().optional()
|
|
12561
|
+
sessionId: string().optional(),
|
|
12562
|
+
/**
|
|
12563
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12564
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12565
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12566
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12567
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12568
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12569
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12570
|
+
* released via `uncacheFrame`.
|
|
12571
|
+
*/
|
|
12572
|
+
frameId: number().int().nonnegative().optional(),
|
|
12573
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12574
|
+
deviceKey: string().optional()
|
|
12547
12575
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12548
12576
|
data: _instanceof(Uint8Array),
|
|
12549
12577
|
width: number().int().positive(),
|
|
@@ -12575,8 +12603,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12575
12603
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12576
12604
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12577
12605
|
* cache; auto-disposed after the idle TTL.
|
|
12606
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12607
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12608
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12609
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12610
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12611
|
+
* Engines tab shows all pools running at once.
|
|
12578
12612
|
*/
|
|
12579
|
-
kind: _enum([
|
|
12613
|
+
kind: _enum([
|
|
12614
|
+
"runtime",
|
|
12615
|
+
"warm-override",
|
|
12616
|
+
"device-pool"
|
|
12617
|
+
]),
|
|
12580
12618
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12581
12619
|
poolPid: number().nullable(),
|
|
12582
12620
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12711,7 +12749,21 @@ var NativeCropResultSchema = object({
|
|
|
12711
12749
|
/** Packed rgb (24-bit) pixels of the crop. */
|
|
12712
12750
|
bytes: _instanceof(Uint8Array),
|
|
12713
12751
|
width: number().int().positive(),
|
|
12714
|
-
height: number().int().positive()
|
|
12752
|
+
height: number().int().positive(),
|
|
12753
|
+
/**
|
|
12754
|
+
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
12755
|
+
* `keyFrame`) can reject a degraded fallback:
|
|
12756
|
+
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
12757
|
+
* quality path).
|
|
12758
|
+
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
12759
|
+
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
12760
|
+
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
12761
|
+
*
|
|
12762
|
+
* OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
|
|
12763
|
+
* treated as `native` (accepted) by every consumer so mixed-version clusters
|
|
12764
|
+
* keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
|
|
12765
|
+
*/
|
|
12766
|
+
tier: _enum(["native", "ram-fullframe"]).optional()
|
|
12715
12767
|
});
|
|
12716
12768
|
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
12717
12769
|
* originating detection, in FRAME-space coordinates. Reuses
|
|
@@ -12951,7 +13003,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
12951
13003
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
12952
13004
|
* `remoteSourcingNodes` rollout setting).
|
|
12953
13005
|
*/
|
|
12954
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
13006
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
13007
|
+
/**
|
|
13008
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
13009
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
13010
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
13011
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
13012
|
+
*/
|
|
13013
|
+
deviceKey: string().optional()
|
|
12955
13014
|
});
|
|
12956
13015
|
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;
|
|
12957
13016
|
/**
|
|
@@ -12972,6 +13031,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
12972
13031
|
avgInferenceTimeMs: number(),
|
|
12973
13032
|
/** Total queue depth across motion + detection queues. */
|
|
12974
13033
|
queueDepthTotal: number(),
|
|
13034
|
+
/**
|
|
13035
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
13036
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
13037
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
13038
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
13039
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
13040
|
+
*/
|
|
13041
|
+
devices: array(object({
|
|
13042
|
+
deviceKey: string(),
|
|
13043
|
+
backend: string(),
|
|
13044
|
+
attachedCameras: number(),
|
|
13045
|
+
queueDepthTotal: number()
|
|
13046
|
+
})).default([]),
|
|
12975
13047
|
/** Hardware capability flags reported by this node. */
|
|
12976
13048
|
hardware: object({
|
|
12977
13049
|
hasGpu: boolean(),
|
|
@@ -16120,6 +16192,8 @@ var BaseDeviceProvider = class extends BaseAddon {
|
|
|
16120
16192
|
return toDeviceSummary(device, this.addonId);
|
|
16121
16193
|
}
|
|
16122
16194
|
};
|
|
16195
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
|
|
16196
|
+
new Set(Object.values(DeviceType));
|
|
16123
16197
|
/**
|
|
16124
16198
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
16125
16199
|
* surface that admin-ui consumes through `useAddonPagesListPages()`.
|
|
@@ -17693,7 +17767,8 @@ var LinkedDeviceSchema = object({
|
|
|
17693
17767
|
deviceId: number(),
|
|
17694
17768
|
name: string(),
|
|
17695
17769
|
location: string().nullable(),
|
|
17696
|
-
features: array(string())
|
|
17770
|
+
features: array(string()),
|
|
17771
|
+
producesTrackedEvents: boolean().optional()
|
|
17697
17772
|
});
|
|
17698
17773
|
var SavedDeviceRowSchema = object({
|
|
17699
17774
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
@@ -19323,6 +19398,7 @@ var TrackSchema = object({
|
|
|
19323
19398
|
deviceId: number(),
|
|
19324
19399
|
className: string(),
|
|
19325
19400
|
label: string().optional(),
|
|
19401
|
+
producingDeviceName: string().optional(),
|
|
19326
19402
|
/** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
|
|
19327
19403
|
source: TrackSourceSchema.optional(),
|
|
19328
19404
|
firstSeen: number(),
|
|
@@ -19460,7 +19536,8 @@ var MediaFileKindEnum = _enum([
|
|
|
19460
19536
|
"fullFrameBoxed",
|
|
19461
19537
|
"faceCrop",
|
|
19462
19538
|
"plateCrop",
|
|
19463
|
-
"keyFrame"
|
|
19539
|
+
"keyFrame",
|
|
19540
|
+
"keyFrameSmall"
|
|
19464
19541
|
]);
|
|
19465
19542
|
var MediaFileSchema = object({
|
|
19466
19543
|
key: string(),
|
|
@@ -19789,13 +19866,11 @@ var PipelineTemplateSchema = object({
|
|
|
19789
19866
|
createdAt: string(),
|
|
19790
19867
|
updatedAt: string()
|
|
19791
19868
|
});
|
|
19792
|
-
var
|
|
19793
|
-
enabled: boolean(),
|
|
19869
|
+
var DeviceStepConfigSchema = object({
|
|
19794
19870
|
modelId: string().optional(),
|
|
19795
|
-
settings: record(string(), unknown()).
|
|
19871
|
+
settings: record(string(), unknown()).optional()
|
|
19796
19872
|
});
|
|
19797
19873
|
var AgentPipelineSettingsSchema = object({
|
|
19798
|
-
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
19799
19874
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19800
19875
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19801
19876
|
detectWeight: number().positive().optional(),
|
|
@@ -19819,7 +19894,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19819
19894
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19820
19895
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19821
19896
|
*/
|
|
19822
|
-
reachableHost: string().optional()
|
|
19897
|
+
reachableHost: string().optional(),
|
|
19898
|
+
/**
|
|
19899
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
19900
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
19901
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
19902
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
19903
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
19904
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
19905
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
19906
|
+
*/
|
|
19907
|
+
inferenceDevices: record(string(), object({
|
|
19908
|
+
enabled: boolean(),
|
|
19909
|
+
weight: number().positive().optional(),
|
|
19910
|
+
maxSessions: number().int().positive().optional(),
|
|
19911
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
19912
|
+
})).optional()
|
|
19823
19913
|
});
|
|
19824
19914
|
var CameraPipelineForAgentSchema = object({
|
|
19825
19915
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -19829,14 +19919,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
19829
19919
|
}).nullable()
|
|
19830
19920
|
});
|
|
19831
19921
|
var CameraStepOverridePatchSchema = object({
|
|
19832
|
-
enabled: boolean().optional(),
|
|
19833
19922
|
modelId: string().optional(),
|
|
19834
19923
|
settings: record(string(), unknown()).readonly().optional()
|
|
19835
19924
|
});
|
|
19836
19925
|
var CameraPipelineSettingsSchema = object({
|
|
19837
19926
|
pinnedAgentNodeId: string().optional(),
|
|
19838
19927
|
stepToggles: record(string(), boolean()).optional(),
|
|
19839
|
-
|
|
19928
|
+
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
19840
19929
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
19841
19930
|
});
|
|
19842
19931
|
/**
|
|
@@ -20050,6 +20139,44 @@ var CameraStatusSchema = object({
|
|
|
20050
20139
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20051
20140
|
fetchedAt: number()
|
|
20052
20141
|
});
|
|
20142
|
+
var NodeInferenceDeviceSchema = object({
|
|
20143
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20144
|
+
key: string(),
|
|
20145
|
+
backend: string(),
|
|
20146
|
+
device: string(),
|
|
20147
|
+
format: _enum(MODEL_FORMATS),
|
|
20148
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20149
|
+
available: boolean(),
|
|
20150
|
+
/**
|
|
20151
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20152
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20153
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20154
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20155
|
+
* (unavailable) key keeps its stored value.
|
|
20156
|
+
*/
|
|
20157
|
+
enabled: boolean(),
|
|
20158
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20159
|
+
weight: number(),
|
|
20160
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20161
|
+
maxSessions: number().nullable(),
|
|
20162
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20163
|
+
defaultModelId: string(),
|
|
20164
|
+
/**
|
|
20165
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20166
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20167
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20168
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20169
|
+
* available per format; this is the stored selection that becomes the
|
|
20170
|
+
* default for EVERY camera landing on this accelerator.
|
|
20171
|
+
*/
|
|
20172
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20173
|
+
});
|
|
20174
|
+
var NodeInferenceDevicesSchema = object({
|
|
20175
|
+
nodeId: string(),
|
|
20176
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20177
|
+
reachable: boolean(),
|
|
20178
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20179
|
+
});
|
|
20053
20180
|
method(object({
|
|
20054
20181
|
deviceId: number(),
|
|
20055
20182
|
agentNodeId: string()
|
|
@@ -20059,7 +20186,13 @@ method(object({
|
|
|
20059
20186
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20060
20187
|
kind: "mutation",
|
|
20061
20188
|
auth: "admin"
|
|
20062
|
-
}), method(
|
|
20189
|
+
}), method(object({
|
|
20190
|
+
deviceId: number(),
|
|
20191
|
+
deviceKey: string()
|
|
20192
|
+
}), object({ success: literal(true) }), {
|
|
20193
|
+
kind: "mutation",
|
|
20194
|
+
auth: "admin"
|
|
20195
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20063
20196
|
kind: "mutation",
|
|
20064
20197
|
auth: "admin"
|
|
20065
20198
|
}), 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({
|
|
@@ -20093,13 +20226,7 @@ method(object({
|
|
|
20093
20226
|
}))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20094
20227
|
nodeId: string(),
|
|
20095
20228
|
settings: AgentPipelineSettingsSchema
|
|
20096
|
-
})).readonly()), method(object({
|
|
20097
|
-
agentNodeId: string(),
|
|
20098
|
-
defaults: record(string(), AgentAddonConfigSchema)
|
|
20099
|
-
}), object({ success: literal(true) }), {
|
|
20100
|
-
kind: "mutation",
|
|
20101
|
-
auth: "admin"
|
|
20102
|
-
}), method(object({ agentNodeId: string() }), object({
|
|
20229
|
+
})).readonly()), method(object({ agentNodeId: string() }), object({
|
|
20103
20230
|
success: boolean(),
|
|
20104
20231
|
removed: boolean()
|
|
20105
20232
|
}), {
|
|
@@ -20131,7 +20258,18 @@ method(object({
|
|
|
20131
20258
|
}), object({ success: literal(true) }), {
|
|
20132
20259
|
kind: "mutation",
|
|
20133
20260
|
auth: "admin"
|
|
20134
|
-
}), method(object({
|
|
20261
|
+
}), method(object({
|
|
20262
|
+
agentNodeId: string(),
|
|
20263
|
+
inferenceDevices: record(string(), object({
|
|
20264
|
+
enabled: boolean(),
|
|
20265
|
+
weight: number().positive().optional(),
|
|
20266
|
+
maxSessions: number().int().positive().optional(),
|
|
20267
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
20268
|
+
}))
|
|
20269
|
+
}), object({ success: literal(true) }), {
|
|
20270
|
+
kind: "mutation",
|
|
20271
|
+
auth: "admin"
|
|
20272
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
|
|
20135
20273
|
success: literal(true),
|
|
20136
20274
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20137
20275
|
effectiveModelId: string().nullable(),
|
|
@@ -20147,9 +20285,10 @@ method(object({
|
|
|
20147
20285
|
}), object({ success: literal(true) }), {
|
|
20148
20286
|
kind: "mutation",
|
|
20149
20287
|
auth: "admin"
|
|
20150
|
-
}), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20288
|
+
}), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20151
20289
|
deviceId: number(),
|
|
20152
20290
|
agentNodeId: string(),
|
|
20291
|
+
deviceKey: string(),
|
|
20153
20292
|
addonId: string(),
|
|
20154
20293
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20155
20294
|
}), object({ success: literal(true) }), {
|
|
@@ -20186,14 +20325,13 @@ method(object({
|
|
|
20186
20325
|
});
|
|
20187
20326
|
/**
|
|
20188
20327
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20189
|
-
* package lifecycle (runtime-updatable node packages
|
|
20190
|
-
* agents).
|
|
20328
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20191
20329
|
*
|
|
20192
|
-
*
|
|
20193
|
-
*
|
|
20194
|
-
*
|
|
20195
|
-
*
|
|
20196
|
-
*
|
|
20330
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20331
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20332
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20333
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20334
|
+
* no auto-rollback).
|
|
20197
20335
|
*
|
|
20198
20336
|
* Providers:
|
|
20199
20337
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20301,7 +20439,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20301
20439
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20302
20440
|
version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
20303
20441
|
kind: "mutation",
|
|
20304
|
-
auth: "admin"
|
|
20442
|
+
auth: "admin",
|
|
20443
|
+
timeoutMs: 16 * 6e4
|
|
20305
20444
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20306
20445
|
kind: "mutation",
|
|
20307
20446
|
auth: "admin"
|
|
@@ -21396,22 +21535,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
21396
21535
|
var RestartAddonResultSchema = unknown();
|
|
21397
21536
|
var InstallPackageResultSchema = unknown();
|
|
21398
21537
|
var ReloadPackagesResultSchema = unknown();
|
|
21399
|
-
/**
|
|
21400
|
-
* Result of `updateFrameworkPackage`. The cap method returns BEFORE the
|
|
21401
|
-
* server restarts so the admin UI can react to the `restartingAt`
|
|
21402
|
-
* timestamp (shows reconnect overlay). The transition from
|
|
21403
|
-
* `fromVersion` to `toVersion` will be confirmed by a subsequent
|
|
21404
|
-
* `system.restart-completed` event after the new process boots.
|
|
21405
|
-
*
|
|
21406
|
-
* Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
|
|
21407
|
-
*/
|
|
21408
|
-
var UpdateFrameworkPackageResultSchema = object({
|
|
21409
|
-
packageName: string(),
|
|
21410
|
-
fromVersion: string(),
|
|
21411
|
-
toVersion: string(),
|
|
21412
|
-
/** Ms-epoch the server scheduled its self-restart. */
|
|
21413
|
-
restartingAt: number()
|
|
21414
|
-
});
|
|
21415
21538
|
var BulkUpdateItemStatusSchema = _enum([
|
|
21416
21539
|
"queued",
|
|
21417
21540
|
"updating",
|
|
@@ -21539,13 +21662,6 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
21539
21662
|
}), object({ success: literal(true) }), {
|
|
21540
21663
|
kind: "mutation",
|
|
21541
21664
|
auth: "admin"
|
|
21542
|
-
}), method(object({
|
|
21543
|
-
packageName: string().min(1),
|
|
21544
|
-
version: string().optional(),
|
|
21545
|
-
deferRestart: boolean().optional()
|
|
21546
|
-
}), UpdateFrameworkPackageResultSchema, {
|
|
21547
|
-
kind: "mutation",
|
|
21548
|
-
auth: "admin"
|
|
21549
21665
|
}), method(object({ name: string() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string() }), RestartAddonResultSchema, {
|
|
21550
21666
|
kind: "mutation",
|
|
21551
21667
|
auth: "admin"
|
|
@@ -22411,10 +22527,10 @@ var TopologyCategorySchema = object({
|
|
|
22411
22527
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22412
22528
|
});
|
|
22413
22529
|
/**
|
|
22414
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22415
|
-
*
|
|
22416
|
-
* version visibility for the Server management surface. Nullable:
|
|
22417
|
-
* rows and
|
|
22530
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22531
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22532
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22533
|
+
* offline rows and nodes that never reported one.
|
|
22418
22534
|
*/
|
|
22419
22535
|
var TopologyRootPackageSchema = object({
|
|
22420
22536
|
name: string(),
|
|
@@ -22802,17 +22918,28 @@ var PlatformScoreSchema = object({
|
|
|
22802
22918
|
format: _enum([
|
|
22803
22919
|
"onnx",
|
|
22804
22920
|
"coreml",
|
|
22805
|
-
"openvino"
|
|
22921
|
+
"openvino",
|
|
22922
|
+
"tflite"
|
|
22806
22923
|
]),
|
|
22807
22924
|
score: number(),
|
|
22808
22925
|
reason: string(),
|
|
22809
22926
|
available: boolean()
|
|
22810
22927
|
});
|
|
22928
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
22929
|
+
key: string(),
|
|
22930
|
+
backend: string(),
|
|
22931
|
+
device: string(),
|
|
22932
|
+
format: ModelFormatSchema,
|
|
22933
|
+
runtime: literal("python"),
|
|
22934
|
+
score: number(),
|
|
22935
|
+
available: boolean()
|
|
22936
|
+
});
|
|
22811
22937
|
var PlatformCapabilitiesSchema = object({
|
|
22812
22938
|
hardware: HardwareInfoSchema,
|
|
22813
22939
|
scores: array(PlatformScoreSchema).readonly(),
|
|
22814
22940
|
bestScore: PlatformScoreSchema,
|
|
22815
|
-
pythonPath: string().nullable()
|
|
22941
|
+
pythonPath: string().nullable(),
|
|
22942
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
22816
22943
|
});
|
|
22817
22944
|
var ModelRequirementSchema = object({
|
|
22818
22945
|
modelId: string(),
|
|
@@ -23704,12 +23831,6 @@ Object.freeze({
|
|
|
23704
23831
|
addonId: null,
|
|
23705
23832
|
access: "delete"
|
|
23706
23833
|
},
|
|
23707
|
-
"addons.updateFrameworkPackage": {
|
|
23708
|
-
capName: "addons",
|
|
23709
|
-
capScope: "system",
|
|
23710
|
-
addonId: null,
|
|
23711
|
-
access: "create"
|
|
23712
|
-
},
|
|
23713
23834
|
"addons.updatePackage": {
|
|
23714
23835
|
capName: "addons",
|
|
23715
23836
|
capScope: "system",
|
|
@@ -26482,12 +26603,6 @@ Object.freeze({
|
|
|
26482
26603
|
addonId: null,
|
|
26483
26604
|
access: "view"
|
|
26484
26605
|
},
|
|
26485
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26486
|
-
capName: "pipeline-executor",
|
|
26487
|
-
capScope: "system",
|
|
26488
|
-
addonId: null,
|
|
26489
|
-
access: "create"
|
|
26490
|
-
},
|
|
26491
26606
|
"pipelineExecutor.runAudioTest": {
|
|
26492
26607
|
capName: "pipeline-executor",
|
|
26493
26608
|
capScope: "system",
|
|
@@ -26638,6 +26753,12 @@ Object.freeze({
|
|
|
26638
26753
|
addonId: null,
|
|
26639
26754
|
access: "view"
|
|
26640
26755
|
},
|
|
26756
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
26757
|
+
capName: "pipeline-orchestrator",
|
|
26758
|
+
capScope: "system",
|
|
26759
|
+
addonId: null,
|
|
26760
|
+
access: "view"
|
|
26761
|
+
},
|
|
26641
26762
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
26642
26763
|
capName: "pipeline-orchestrator",
|
|
26643
26764
|
capScope: "system",
|
|
@@ -26650,6 +26771,12 @@ Object.freeze({
|
|
|
26650
26771
|
addonId: null,
|
|
26651
26772
|
access: "view"
|
|
26652
26773
|
},
|
|
26774
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
26775
|
+
capName: "pipeline-orchestrator",
|
|
26776
|
+
capScope: "system",
|
|
26777
|
+
addonId: null,
|
|
26778
|
+
access: "view"
|
|
26779
|
+
},
|
|
26653
26780
|
"pipelineOrchestrator.listAgentSettings": {
|
|
26654
26781
|
capName: "pipeline-orchestrator",
|
|
26655
26782
|
capScope: "system",
|
|
@@ -26692,19 +26819,19 @@ Object.freeze({
|
|
|
26692
26819
|
addonId: null,
|
|
26693
26820
|
access: "create"
|
|
26694
26821
|
},
|
|
26695
|
-
"pipelineOrchestrator.
|
|
26822
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
26696
26823
|
capName: "pipeline-orchestrator",
|
|
26697
26824
|
capScope: "system",
|
|
26698
26825
|
addonId: null,
|
|
26699
26826
|
access: "create"
|
|
26700
26827
|
},
|
|
26701
|
-
"pipelineOrchestrator.
|
|
26828
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
26702
26829
|
capName: "pipeline-orchestrator",
|
|
26703
26830
|
capScope: "system",
|
|
26704
26831
|
addonId: null,
|
|
26705
26832
|
access: "create"
|
|
26706
26833
|
},
|
|
26707
|
-
"pipelineOrchestrator.
|
|
26834
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
26708
26835
|
capName: "pipeline-orchestrator",
|
|
26709
26836
|
capScope: "system",
|
|
26710
26837
|
addonId: null,
|
|
@@ -26746,6 +26873,12 @@ Object.freeze({
|
|
|
26746
26873
|
addonId: null,
|
|
26747
26874
|
access: "create"
|
|
26748
26875
|
},
|
|
26876
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
26877
|
+
capName: "pipeline-orchestrator",
|
|
26878
|
+
capScope: "system",
|
|
26879
|
+
addonId: null,
|
|
26880
|
+
access: "create"
|
|
26881
|
+
},
|
|
26749
26882
|
"pipelineOrchestrator.unassignAudio": {
|
|
26750
26883
|
capName: "pipeline-orchestrator",
|
|
26751
26884
|
capScope: "system",
|
|
@@ -28298,32 +28431,6 @@ Object.freeze({
|
|
|
28298
28431
|
"network-access": "ingress",
|
|
28299
28432
|
"smtp-provider": "email"
|
|
28300
28433
|
});
|
|
28301
|
-
var frameworkSwapPackageSchema = object({
|
|
28302
|
-
name: string(),
|
|
28303
|
-
stagedPath: string(),
|
|
28304
|
-
backupPath: string(),
|
|
28305
|
-
toVersion: string(),
|
|
28306
|
-
fromVersion: string().nullable()
|
|
28307
|
-
});
|
|
28308
|
-
object({
|
|
28309
|
-
jobId: string(),
|
|
28310
|
-
taskId: string(),
|
|
28311
|
-
packages: array(frameworkSwapPackageSchema),
|
|
28312
|
-
requestedAtMs: number(),
|
|
28313
|
-
schemaVersion: literal(1)
|
|
28314
|
-
});
|
|
28315
|
-
object({
|
|
28316
|
-
jobId: string(),
|
|
28317
|
-
taskId: string(),
|
|
28318
|
-
backups: array(object({
|
|
28319
|
-
name: string(),
|
|
28320
|
-
backupPath: string(),
|
|
28321
|
-
livePath: string()
|
|
28322
|
-
})),
|
|
28323
|
-
appliedAtMs: number(),
|
|
28324
|
-
bootAttempts: number(),
|
|
28325
|
-
schemaVersion: literal(1)
|
|
28326
|
-
});
|
|
28327
28434
|
/**
|
|
28328
28435
|
* Names that, when used as URL query parameters, almost certainly carry
|
|
28329
28436
|
* a secret. Matching is case-insensitive and anchored to the full param
|