@camstack/addon-matter-broker 0.1.25 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +193 -103
- package/dist/addon.mjs +193 -103
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7112,6 +7112,17 @@ var ModelCatalogEntrySchema = object({
|
|
|
7112
7112
|
"imagenet",
|
|
7113
7113
|
"none"
|
|
7114
7114
|
]).optional(),
|
|
7115
|
+
/**
|
|
7116
|
+
* The model already applies softmax IN-GRAPH — its raw output is a
|
|
7117
|
+
* probability distribution, not logits. When set, the `softmax`
|
|
7118
|
+
* postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
|
|
7119
|
+
* probability vector collapses it toward uniform (top-1 score craters far
|
|
7120
|
+
* below its true value, making every confidence gate meaningless). Absent ⇒
|
|
7121
|
+
* the output is raw logits and the postprocessor applies softmax (the normal
|
|
7122
|
+
* case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
|
|
7123
|
+
* TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
|
|
7124
|
+
*/
|
|
7125
|
+
outputProbabilities: boolean().optional(),
|
|
7115
7126
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
7116
7127
|
/**
|
|
7117
7128
|
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
@@ -12402,10 +12413,7 @@ var ConfigUISchemaNullableBridge = custom();
|
|
|
12402
12413
|
var InferenceCapabilitiesBridge = custom();
|
|
12403
12414
|
var ModelAvailabilityListBridge = custom();
|
|
12404
12415
|
var PipelineRunResultBridge = custom();
|
|
12405
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12406
|
-
kind: "mutation",
|
|
12407
|
-
auth: "admin"
|
|
12408
|
-
}), method(object({ nodeId: string$2() }), EngineProvisioningSchema), method(_void(), record(string$2(), object({
|
|
12416
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string$2() }), EngineProvisioningSchema), method(_void(), record(string$2(), object({
|
|
12409
12417
|
modelId: string$2(),
|
|
12410
12418
|
settings: record(string$2(), unknown()).readonly()
|
|
12411
12419
|
}))), method(object({ steps: record(string$2(), object({
|
|
@@ -12465,13 +12473,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12465
12473
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12466
12474
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12467
12475
|
*/
|
|
12468
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12476
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12477
|
+
/**
|
|
12478
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12479
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12480
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12481
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12482
|
+
*/
|
|
12483
|
+
deviceKey: string$2().optional()
|
|
12469
12484
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12470
12485
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12471
12486
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12472
12487
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12473
12488
|
deviceId: number().optional(),
|
|
12474
|
-
sessionId: string$2().optional()
|
|
12489
|
+
sessionId: string$2().optional(),
|
|
12490
|
+
/**
|
|
12491
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12492
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12493
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12494
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12495
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12496
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12497
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12498
|
+
* released via `uncacheFrame`.
|
|
12499
|
+
*/
|
|
12500
|
+
frameId: number().int().nonnegative().optional(),
|
|
12501
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12502
|
+
deviceKey: string$2().optional()
|
|
12475
12503
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12476
12504
|
data: _instanceof(Uint8Array),
|
|
12477
12505
|
width: number().int().positive(),
|
|
@@ -12503,8 +12531,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12503
12531
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12504
12532
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12505
12533
|
* cache; auto-disposed after the idle TTL.
|
|
12534
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12535
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12536
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12537
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12538
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12539
|
+
* Engines tab shows all pools running at once.
|
|
12506
12540
|
*/
|
|
12507
|
-
kind: _enum([
|
|
12541
|
+
kind: _enum([
|
|
12542
|
+
"runtime",
|
|
12543
|
+
"warm-override",
|
|
12544
|
+
"device-pool"
|
|
12545
|
+
]),
|
|
12508
12546
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12509
12547
|
poolPid: number().nullable(),
|
|
12510
12548
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12879,7 +12917,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
12879
12917
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
12880
12918
|
* `remoteSourcingNodes` rollout setting).
|
|
12881
12919
|
*/
|
|
12882
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
12920
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
12921
|
+
/**
|
|
12922
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
12923
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
12924
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
12925
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
12926
|
+
*/
|
|
12927
|
+
deviceKey: string$2().optional()
|
|
12883
12928
|
});
|
|
12884
12929
|
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;
|
|
12885
12930
|
/**
|
|
@@ -12900,6 +12945,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
12900
12945
|
avgInferenceTimeMs: number(),
|
|
12901
12946
|
/** Total queue depth across motion + detection queues. */
|
|
12902
12947
|
queueDepthTotal: number(),
|
|
12948
|
+
/**
|
|
12949
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
12950
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
12951
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
12952
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
12953
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
12954
|
+
*/
|
|
12955
|
+
devices: array(object({
|
|
12956
|
+
deviceKey: string$2(),
|
|
12957
|
+
backend: string$2(),
|
|
12958
|
+
attachedCameras: number(),
|
|
12959
|
+
queueDepthTotal: number()
|
|
12960
|
+
})).default([]),
|
|
12903
12961
|
/** Hardware capability flags reported by this node. */
|
|
12904
12962
|
hardware: object({
|
|
12905
12963
|
hasGpu: boolean(),
|
|
@@ -16048,6 +16106,8 @@ var BaseDeviceProvider = class extends BaseAddon {
|
|
|
16048
16106
|
return toDeviceSummary(device, this.addonId);
|
|
16049
16107
|
}
|
|
16050
16108
|
};
|
|
16109
|
+
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;
|
|
16110
|
+
new Set(Object.values(DeviceType));
|
|
16051
16111
|
/**
|
|
16052
16112
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
16053
16113
|
* surface that admin-ui consumes through `useAddonPagesListPages()`.
|
|
@@ -19783,13 +19843,11 @@ var PipelineTemplateSchema = object({
|
|
|
19783
19843
|
createdAt: string$2(),
|
|
19784
19844
|
updatedAt: string$2()
|
|
19785
19845
|
});
|
|
19786
|
-
var
|
|
19787
|
-
enabled: boolean(),
|
|
19846
|
+
var DeviceStepConfigSchema = object({
|
|
19788
19847
|
modelId: string$2().optional(),
|
|
19789
|
-
settings: record(string$2(), unknown()).
|
|
19848
|
+
settings: record(string$2(), unknown()).optional()
|
|
19790
19849
|
});
|
|
19791
19850
|
var AgentPipelineSettingsSchema = object({
|
|
19792
|
-
addonDefaults: record(string$2(), AgentAddonConfigSchema).readonly(),
|
|
19793
19851
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19794
19852
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19795
19853
|
detectWeight: number().positive().optional(),
|
|
@@ -19813,7 +19871,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19813
19871
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19814
19872
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19815
19873
|
*/
|
|
19816
|
-
reachableHost: string$2().optional()
|
|
19874
|
+
reachableHost: string$2().optional(),
|
|
19875
|
+
/**
|
|
19876
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
19877
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
19878
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
19879
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
19880
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
19881
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
19882
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
19883
|
+
*/
|
|
19884
|
+
inferenceDevices: record(string$2(), object({
|
|
19885
|
+
enabled: boolean(),
|
|
19886
|
+
weight: number().positive().optional(),
|
|
19887
|
+
maxSessions: number().int().positive().optional(),
|
|
19888
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
19889
|
+
})).optional()
|
|
19817
19890
|
});
|
|
19818
19891
|
var CameraPipelineForAgentSchema = object({
|
|
19819
19892
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -19823,14 +19896,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
19823
19896
|
}).nullable()
|
|
19824
19897
|
});
|
|
19825
19898
|
var CameraStepOverridePatchSchema = object({
|
|
19826
|
-
enabled: boolean().optional(),
|
|
19827
19899
|
modelId: string$2().optional(),
|
|
19828
19900
|
settings: record(string$2(), unknown()).readonly().optional()
|
|
19829
19901
|
});
|
|
19830
19902
|
var CameraPipelineSettingsSchema = object({
|
|
19831
19903
|
pinnedAgentNodeId: string$2().optional(),
|
|
19832
19904
|
stepToggles: record(string$2(), boolean()).optional(),
|
|
19833
|
-
|
|
19905
|
+
stepOverridesByDevice: record(string$2(), record(string$2(), record(string$2(), CameraStepOverridePatchSchema))).optional(),
|
|
19834
19906
|
pipelineByAgent: record(string$2(), CameraPipelineForAgentSchema).optional()
|
|
19835
19907
|
});
|
|
19836
19908
|
/**
|
|
@@ -20044,6 +20116,44 @@ var CameraStatusSchema = object({
|
|
|
20044
20116
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20045
20117
|
fetchedAt: number()
|
|
20046
20118
|
});
|
|
20119
|
+
var NodeInferenceDeviceSchema = object({
|
|
20120
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20121
|
+
key: string$2(),
|
|
20122
|
+
backend: string$2(),
|
|
20123
|
+
device: string$2(),
|
|
20124
|
+
format: _enum(MODEL_FORMATS),
|
|
20125
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20126
|
+
available: boolean(),
|
|
20127
|
+
/**
|
|
20128
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20129
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20130
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20131
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20132
|
+
* (unavailable) key keeps its stored value.
|
|
20133
|
+
*/
|
|
20134
|
+
enabled: boolean(),
|
|
20135
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20136
|
+
weight: number(),
|
|
20137
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20138
|
+
maxSessions: number().nullable(),
|
|
20139
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20140
|
+
defaultModelId: string$2(),
|
|
20141
|
+
/**
|
|
20142
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20143
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20144
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20145
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20146
|
+
* available per format; this is the stored selection that becomes the
|
|
20147
|
+
* default for EVERY camera landing on this accelerator.
|
|
20148
|
+
*/
|
|
20149
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
20150
|
+
});
|
|
20151
|
+
var NodeInferenceDevicesSchema = object({
|
|
20152
|
+
nodeId: string$2(),
|
|
20153
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20154
|
+
reachable: boolean(),
|
|
20155
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20156
|
+
});
|
|
20047
20157
|
method(object({
|
|
20048
20158
|
deviceId: number(),
|
|
20049
20159
|
agentNodeId: string$2()
|
|
@@ -20053,7 +20163,13 @@ method(object({
|
|
|
20053
20163
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20054
20164
|
kind: "mutation",
|
|
20055
20165
|
auth: "admin"
|
|
20056
|
-
}), method(
|
|
20166
|
+
}), method(object({
|
|
20167
|
+
deviceId: number(),
|
|
20168
|
+
deviceKey: string$2()
|
|
20169
|
+
}), object({ success: literal(true) }), {
|
|
20170
|
+
kind: "mutation",
|
|
20171
|
+
auth: "admin"
|
|
20172
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string$2().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20057
20173
|
kind: "mutation",
|
|
20058
20174
|
auth: "admin"
|
|
20059
20175
|
}), 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$2() }), CapabilityBindingsSchema), method(object({
|
|
@@ -20087,13 +20203,7 @@ method(object({
|
|
|
20087
20203
|
}))), method(object({ agentNodeId: string$2() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20088
20204
|
nodeId: string$2(),
|
|
20089
20205
|
settings: AgentPipelineSettingsSchema
|
|
20090
|
-
})).readonly()), method(object({
|
|
20091
|
-
agentNodeId: string$2(),
|
|
20092
|
-
defaults: record(string$2(), AgentAddonConfigSchema)
|
|
20093
|
-
}), object({ success: literal(true) }), {
|
|
20094
|
-
kind: "mutation",
|
|
20095
|
-
auth: "admin"
|
|
20096
|
-
}), method(object({ agentNodeId: string$2() }), object({
|
|
20206
|
+
})).readonly()), method(object({ agentNodeId: string$2() }), object({
|
|
20097
20207
|
success: boolean(),
|
|
20098
20208
|
removed: boolean()
|
|
20099
20209
|
}), {
|
|
@@ -20125,7 +20235,18 @@ method(object({
|
|
|
20125
20235
|
}), object({ success: literal(true) }), {
|
|
20126
20236
|
kind: "mutation",
|
|
20127
20237
|
auth: "admin"
|
|
20128
|
-
}), method(object({
|
|
20238
|
+
}), method(object({
|
|
20239
|
+
agentNodeId: string$2(),
|
|
20240
|
+
inferenceDevices: record(string$2(), object({
|
|
20241
|
+
enabled: boolean(),
|
|
20242
|
+
weight: number().positive().optional(),
|
|
20243
|
+
maxSessions: number().int().positive().optional(),
|
|
20244
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
20245
|
+
}))
|
|
20246
|
+
}), object({ success: literal(true) }), {
|
|
20247
|
+
kind: "mutation",
|
|
20248
|
+
auth: "admin"
|
|
20249
|
+
}), method(object({ nodeId: string$2() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string$2() }), object({
|
|
20129
20250
|
success: literal(true),
|
|
20130
20251
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20131
20252
|
effectiveModelId: string$2().nullable(),
|
|
@@ -20141,9 +20262,10 @@ method(object({
|
|
|
20141
20262
|
}), object({ success: literal(true) }), {
|
|
20142
20263
|
kind: "mutation",
|
|
20143
20264
|
auth: "admin"
|
|
20144
|
-
}), method(object({ deviceId: number() }), record(string$2(), record(string$2(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20265
|
+
}), method(object({ deviceId: number() }), record(string$2(), record(string$2(), record(string$2(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20145
20266
|
deviceId: number(),
|
|
20146
20267
|
agentNodeId: string$2(),
|
|
20268
|
+
deviceKey: string$2(),
|
|
20147
20269
|
addonId: string$2(),
|
|
20148
20270
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20149
20271
|
}), object({ success: literal(true) }), {
|
|
@@ -20180,14 +20302,13 @@ method(object({
|
|
|
20180
20302
|
});
|
|
20181
20303
|
/**
|
|
20182
20304
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20183
|
-
* package lifecycle (runtime-updatable node packages
|
|
20184
|
-
* agents).
|
|
20305
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20185
20306
|
*
|
|
20186
|
-
*
|
|
20187
|
-
*
|
|
20188
|
-
*
|
|
20189
|
-
*
|
|
20190
|
-
*
|
|
20307
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20308
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20309
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20310
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20311
|
+
* no auto-rollback).
|
|
20191
20312
|
*
|
|
20192
20313
|
* Providers:
|
|
20193
20314
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20295,7 +20416,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20295
20416
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20296
20417
|
version: string$2().optional() }), ServerUpdateActionResultSchema, {
|
|
20297
20418
|
kind: "mutation",
|
|
20298
|
-
auth: "admin"
|
|
20419
|
+
auth: "admin",
|
|
20420
|
+
timeoutMs: 16 * 6e4
|
|
20299
20421
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20300
20422
|
kind: "mutation",
|
|
20301
20423
|
auth: "admin"
|
|
@@ -21339,22 +21461,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
21339
21461
|
var RestartAddonResultSchema = unknown();
|
|
21340
21462
|
var InstallPackageResultSchema = unknown();
|
|
21341
21463
|
var ReloadPackagesResultSchema = unknown();
|
|
21342
|
-
/**
|
|
21343
|
-
* Result of `updateFrameworkPackage`. The cap method returns BEFORE the
|
|
21344
|
-
* server restarts so the admin UI can react to the `restartingAt`
|
|
21345
|
-
* timestamp (shows reconnect overlay). The transition from
|
|
21346
|
-
* `fromVersion` to `toVersion` will be confirmed by a subsequent
|
|
21347
|
-
* `system.restart-completed` event after the new process boots.
|
|
21348
|
-
*
|
|
21349
|
-
* Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
|
|
21350
|
-
*/
|
|
21351
|
-
var UpdateFrameworkPackageResultSchema = object({
|
|
21352
|
-
packageName: string$2(),
|
|
21353
|
-
fromVersion: string$2(),
|
|
21354
|
-
toVersion: string$2(),
|
|
21355
|
-
/** Ms-epoch the server scheduled its self-restart. */
|
|
21356
|
-
restartingAt: number()
|
|
21357
|
-
});
|
|
21358
21464
|
var BulkUpdateItemStatusSchema = _enum([
|
|
21359
21465
|
"queued",
|
|
21360
21466
|
"updating",
|
|
@@ -21482,13 +21588,6 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
21482
21588
|
}), object({ success: literal(true) }), {
|
|
21483
21589
|
kind: "mutation",
|
|
21484
21590
|
auth: "admin"
|
|
21485
|
-
}), method(object({
|
|
21486
|
-
packageName: string$2().min(1),
|
|
21487
|
-
version: string$2().optional(),
|
|
21488
|
-
deferRestart: boolean().optional()
|
|
21489
|
-
}), UpdateFrameworkPackageResultSchema, {
|
|
21490
|
-
kind: "mutation",
|
|
21491
|
-
auth: "admin"
|
|
21492
21591
|
}), method(object({ name: string$2() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string$2() }), RestartAddonResultSchema, {
|
|
21493
21592
|
kind: "mutation",
|
|
21494
21593
|
auth: "admin"
|
|
@@ -22371,10 +22470,10 @@ var TopologyCategorySchema = object({
|
|
|
22371
22470
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22372
22471
|
});
|
|
22373
22472
|
/**
|
|
22374
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22375
|
-
*
|
|
22376
|
-
* version visibility for the Server management surface. Nullable:
|
|
22377
|
-
* rows and
|
|
22473
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22474
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22475
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22476
|
+
* offline rows and nodes that never reported one.
|
|
22378
22477
|
*/
|
|
22379
22478
|
var TopologyRootPackageSchema = object({
|
|
22380
22479
|
name: string$2(),
|
|
@@ -22762,17 +22861,28 @@ var PlatformScoreSchema = object({
|
|
|
22762
22861
|
format: _enum([
|
|
22763
22862
|
"onnx",
|
|
22764
22863
|
"coreml",
|
|
22765
|
-
"openvino"
|
|
22864
|
+
"openvino",
|
|
22865
|
+
"tflite"
|
|
22766
22866
|
]),
|
|
22767
22867
|
score: number(),
|
|
22768
22868
|
reason: string$2(),
|
|
22769
22869
|
available: boolean()
|
|
22770
22870
|
});
|
|
22871
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
22872
|
+
key: string$2(),
|
|
22873
|
+
backend: string$2(),
|
|
22874
|
+
device: string$2(),
|
|
22875
|
+
format: ModelFormatSchema,
|
|
22876
|
+
runtime: literal("python"),
|
|
22877
|
+
score: number(),
|
|
22878
|
+
available: boolean()
|
|
22879
|
+
});
|
|
22771
22880
|
var PlatformCapabilitiesSchema = object({
|
|
22772
22881
|
hardware: HardwareInfoSchema,
|
|
22773
22882
|
scores: array(PlatformScoreSchema).readonly(),
|
|
22774
22883
|
bestScore: PlatformScoreSchema,
|
|
22775
|
-
pythonPath: string$2().nullable()
|
|
22884
|
+
pythonPath: string$2().nullable(),
|
|
22885
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
22776
22886
|
});
|
|
22777
22887
|
var ModelRequirementSchema = object({
|
|
22778
22888
|
modelId: string$2(),
|
|
@@ -23651,12 +23761,6 @@ Object.freeze({
|
|
|
23651
23761
|
addonId: null,
|
|
23652
23762
|
access: "delete"
|
|
23653
23763
|
},
|
|
23654
|
-
"addons.updateFrameworkPackage": {
|
|
23655
|
-
capName: "addons",
|
|
23656
|
-
capScope: "system",
|
|
23657
|
-
addonId: null,
|
|
23658
|
-
access: "create"
|
|
23659
|
-
},
|
|
23660
23764
|
"addons.updatePackage": {
|
|
23661
23765
|
capName: "addons",
|
|
23662
23766
|
capScope: "system",
|
|
@@ -26429,12 +26533,6 @@ Object.freeze({
|
|
|
26429
26533
|
addonId: null,
|
|
26430
26534
|
access: "view"
|
|
26431
26535
|
},
|
|
26432
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26433
|
-
capName: "pipeline-executor",
|
|
26434
|
-
capScope: "system",
|
|
26435
|
-
addonId: null,
|
|
26436
|
-
access: "create"
|
|
26437
|
-
},
|
|
26438
26536
|
"pipelineExecutor.runAudioTest": {
|
|
26439
26537
|
capName: "pipeline-executor",
|
|
26440
26538
|
capScope: "system",
|
|
@@ -26585,6 +26683,12 @@ Object.freeze({
|
|
|
26585
26683
|
addonId: null,
|
|
26586
26684
|
access: "view"
|
|
26587
26685
|
},
|
|
26686
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
26687
|
+
capName: "pipeline-orchestrator",
|
|
26688
|
+
capScope: "system",
|
|
26689
|
+
addonId: null,
|
|
26690
|
+
access: "view"
|
|
26691
|
+
},
|
|
26588
26692
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
26589
26693
|
capName: "pipeline-orchestrator",
|
|
26590
26694
|
capScope: "system",
|
|
@@ -26597,6 +26701,12 @@ Object.freeze({
|
|
|
26597
26701
|
addonId: null,
|
|
26598
26702
|
access: "view"
|
|
26599
26703
|
},
|
|
26704
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
26705
|
+
capName: "pipeline-orchestrator",
|
|
26706
|
+
capScope: "system",
|
|
26707
|
+
addonId: null,
|
|
26708
|
+
access: "view"
|
|
26709
|
+
},
|
|
26600
26710
|
"pipelineOrchestrator.listAgentSettings": {
|
|
26601
26711
|
capName: "pipeline-orchestrator",
|
|
26602
26712
|
capScope: "system",
|
|
@@ -26639,19 +26749,19 @@ Object.freeze({
|
|
|
26639
26749
|
addonId: null,
|
|
26640
26750
|
access: "create"
|
|
26641
26751
|
},
|
|
26642
|
-
"pipelineOrchestrator.
|
|
26752
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
26643
26753
|
capName: "pipeline-orchestrator",
|
|
26644
26754
|
capScope: "system",
|
|
26645
26755
|
addonId: null,
|
|
26646
26756
|
access: "create"
|
|
26647
26757
|
},
|
|
26648
|
-
"pipelineOrchestrator.
|
|
26758
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
26649
26759
|
capName: "pipeline-orchestrator",
|
|
26650
26760
|
capScope: "system",
|
|
26651
26761
|
addonId: null,
|
|
26652
26762
|
access: "create"
|
|
26653
26763
|
},
|
|
26654
|
-
"pipelineOrchestrator.
|
|
26764
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
26655
26765
|
capName: "pipeline-orchestrator",
|
|
26656
26766
|
capScope: "system",
|
|
26657
26767
|
addonId: null,
|
|
@@ -26693,6 +26803,12 @@ Object.freeze({
|
|
|
26693
26803
|
addonId: null,
|
|
26694
26804
|
access: "create"
|
|
26695
26805
|
},
|
|
26806
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
26807
|
+
capName: "pipeline-orchestrator",
|
|
26808
|
+
capScope: "system",
|
|
26809
|
+
addonId: null,
|
|
26810
|
+
access: "create"
|
|
26811
|
+
},
|
|
26696
26812
|
"pipelineOrchestrator.unassignAudio": {
|
|
26697
26813
|
capName: "pipeline-orchestrator",
|
|
26698
26814
|
capScope: "system",
|
|
@@ -28245,32 +28361,6 @@ Object.freeze({
|
|
|
28245
28361
|
"network-access": "ingress",
|
|
28246
28362
|
"smtp-provider": "email"
|
|
28247
28363
|
});
|
|
28248
|
-
var frameworkSwapPackageSchema = object({
|
|
28249
|
-
name: string$2(),
|
|
28250
|
-
stagedPath: string$2(),
|
|
28251
|
-
backupPath: string$2(),
|
|
28252
|
-
toVersion: string$2(),
|
|
28253
|
-
fromVersion: string$2().nullable()
|
|
28254
|
-
});
|
|
28255
|
-
object({
|
|
28256
|
-
jobId: string$2(),
|
|
28257
|
-
taskId: string$2(),
|
|
28258
|
-
packages: array(frameworkSwapPackageSchema),
|
|
28259
|
-
requestedAtMs: number(),
|
|
28260
|
-
schemaVersion: literal(1)
|
|
28261
|
-
});
|
|
28262
|
-
object({
|
|
28263
|
-
jobId: string$2(),
|
|
28264
|
-
taskId: string$2(),
|
|
28265
|
-
backups: array(object({
|
|
28266
|
-
name: string$2(),
|
|
28267
|
-
backupPath: string$2(),
|
|
28268
|
-
livePath: string$2()
|
|
28269
|
-
})),
|
|
28270
|
-
appliedAtMs: number(),
|
|
28271
|
-
bootAttempts: number(),
|
|
28272
|
-
schemaVersion: literal(1)
|
|
28273
|
-
});
|
|
28274
28364
|
//#endregion
|
|
28275
28365
|
//#region ../../node_modules/@matter/general/dist/esm/net/tcp/TcpConnection.js
|
|
28276
28366
|
/**
|
package/dist/addon.mjs
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
|
|
@@ -12400,10 +12411,7 @@ var ConfigUISchemaNullableBridge = custom();
|
|
|
12400
12411
|
var InferenceCapabilitiesBridge = custom();
|
|
12401
12412
|
var ModelAvailabilityListBridge = custom();
|
|
12402
12413
|
var PipelineRunResultBridge = custom();
|
|
12403
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
12404
|
-
kind: "mutation",
|
|
12405
|
-
auth: "admin"
|
|
12406
|
-
}), method(object({ nodeId: string$2() }), EngineProvisioningSchema), method(_void(), record(string$2(), object({
|
|
12414
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string$2() }), EngineProvisioningSchema), method(_void(), record(string$2(), object({
|
|
12407
12415
|
modelId: string$2(),
|
|
12408
12416
|
settings: record(string$2(), unknown()).readonly()
|
|
12409
12417
|
}))), method(object({ steps: record(string$2(), object({
|
|
@@ -12463,13 +12471,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12463
12471
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
12464
12472
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
12465
12473
|
*/
|
|
12466
|
-
plane: _enum(["full", "frame"]).optional()
|
|
12474
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
12475
|
+
/**
|
|
12476
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
12477
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
12478
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
12479
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
12480
|
+
*/
|
|
12481
|
+
deviceKey: string$2().optional()
|
|
12467
12482
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
12468
12483
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
12469
12484
|
steps: array(PipelineStepInputSchema).min(1),
|
|
12470
12485
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
12471
12486
|
deviceId: number().optional(),
|
|
12472
|
-
sessionId: string$2().optional()
|
|
12487
|
+
sessionId: string$2().optional(),
|
|
12488
|
+
/**
|
|
12489
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
12490
|
+
* the batch to the Python pool's bench preprocess cache
|
|
12491
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
12492
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
12493
|
+
* hit — the sustained-throughput run measures inference, not
|
|
12494
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
12495
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
12496
|
+
* released via `uncacheFrame`.
|
|
12497
|
+
*/
|
|
12498
|
+
frameId: number().int().nonnegative().optional(),
|
|
12499
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
12500
|
+
deviceKey: string$2().optional()
|
|
12473
12501
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
12474
12502
|
data: _instanceof(Uint8Array),
|
|
12475
12503
|
width: number().int().positive(),
|
|
@@ -12501,8 +12529,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
12501
12529
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12502
12530
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12503
12531
|
* cache; auto-disposed after the idle TTL.
|
|
12532
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12533
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12534
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12535
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12536
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12537
|
+
* Engines tab shows all pools running at once.
|
|
12504
12538
|
*/
|
|
12505
|
-
kind: _enum([
|
|
12539
|
+
kind: _enum([
|
|
12540
|
+
"runtime",
|
|
12541
|
+
"warm-override",
|
|
12542
|
+
"device-pool"
|
|
12543
|
+
]),
|
|
12506
12544
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12507
12545
|
poolPid: number().nullable(),
|
|
12508
12546
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -12877,7 +12915,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
12877
12915
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
12878
12916
|
* `remoteSourcingNodes` rollout setting).
|
|
12879
12917
|
*/
|
|
12880
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
12918
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
12919
|
+
/**
|
|
12920
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
12921
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
12922
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
12923
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
12924
|
+
*/
|
|
12925
|
+
deviceKey: string$2().optional()
|
|
12881
12926
|
});
|
|
12882
12927
|
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;
|
|
12883
12928
|
/**
|
|
@@ -12898,6 +12943,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
12898
12943
|
avgInferenceTimeMs: number(),
|
|
12899
12944
|
/** Total queue depth across motion + detection queues. */
|
|
12900
12945
|
queueDepthTotal: number(),
|
|
12946
|
+
/**
|
|
12947
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
12948
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
12949
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
12950
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
12951
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
12952
|
+
*/
|
|
12953
|
+
devices: array(object({
|
|
12954
|
+
deviceKey: string$2(),
|
|
12955
|
+
backend: string$2(),
|
|
12956
|
+
attachedCameras: number(),
|
|
12957
|
+
queueDepthTotal: number()
|
|
12958
|
+
})).default([]),
|
|
12901
12959
|
/** Hardware capability flags reported by this node. */
|
|
12902
12960
|
hardware: object({
|
|
12903
12961
|
hasGpu: boolean(),
|
|
@@ -16046,6 +16104,8 @@ var BaseDeviceProvider = class extends BaseAddon {
|
|
|
16046
16104
|
return toDeviceSummary(device, this.addonId);
|
|
16047
16105
|
}
|
|
16048
16106
|
};
|
|
16107
|
+
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;
|
|
16108
|
+
new Set(Object.values(DeviceType));
|
|
16049
16109
|
/**
|
|
16050
16110
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
16051
16111
|
* surface that admin-ui consumes through `useAddonPagesListPages()`.
|
|
@@ -19781,13 +19841,11 @@ var PipelineTemplateSchema = object({
|
|
|
19781
19841
|
createdAt: string$2(),
|
|
19782
19842
|
updatedAt: string$2()
|
|
19783
19843
|
});
|
|
19784
|
-
var
|
|
19785
|
-
enabled: boolean(),
|
|
19844
|
+
var DeviceStepConfigSchema = object({
|
|
19786
19845
|
modelId: string$2().optional(),
|
|
19787
|
-
settings: record(string$2(), unknown()).
|
|
19846
|
+
settings: record(string$2(), unknown()).optional()
|
|
19788
19847
|
});
|
|
19789
19848
|
var AgentPipelineSettingsSchema = object({
|
|
19790
|
-
addonDefaults: record(string$2(), AgentAddonConfigSchema).readonly(),
|
|
19791
19849
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
19792
19850
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
19793
19851
|
detectWeight: number().positive().optional(),
|
|
@@ -19811,7 +19869,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
19811
19869
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
19812
19870
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
19813
19871
|
*/
|
|
19814
|
-
reachableHost: string$2().optional()
|
|
19872
|
+
reachableHost: string$2().optional(),
|
|
19873
|
+
/**
|
|
19874
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
19875
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
19876
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
19877
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
19878
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
19879
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
19880
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
19881
|
+
*/
|
|
19882
|
+
inferenceDevices: record(string$2(), object({
|
|
19883
|
+
enabled: boolean(),
|
|
19884
|
+
weight: number().positive().optional(),
|
|
19885
|
+
maxSessions: number().int().positive().optional(),
|
|
19886
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
19887
|
+
})).optional()
|
|
19815
19888
|
});
|
|
19816
19889
|
var CameraPipelineForAgentSchema = object({
|
|
19817
19890
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -19821,14 +19894,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
19821
19894
|
}).nullable()
|
|
19822
19895
|
});
|
|
19823
19896
|
var CameraStepOverridePatchSchema = object({
|
|
19824
|
-
enabled: boolean().optional(),
|
|
19825
19897
|
modelId: string$2().optional(),
|
|
19826
19898
|
settings: record(string$2(), unknown()).readonly().optional()
|
|
19827
19899
|
});
|
|
19828
19900
|
var CameraPipelineSettingsSchema = object({
|
|
19829
19901
|
pinnedAgentNodeId: string$2().optional(),
|
|
19830
19902
|
stepToggles: record(string$2(), boolean()).optional(),
|
|
19831
|
-
|
|
19903
|
+
stepOverridesByDevice: record(string$2(), record(string$2(), record(string$2(), CameraStepOverridePatchSchema))).optional(),
|
|
19832
19904
|
pipelineByAgent: record(string$2(), CameraPipelineForAgentSchema).optional()
|
|
19833
19905
|
});
|
|
19834
19906
|
/**
|
|
@@ -20042,6 +20114,44 @@ var CameraStatusSchema = object({
|
|
|
20042
20114
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
20043
20115
|
fetchedAt: number()
|
|
20044
20116
|
});
|
|
20117
|
+
var NodeInferenceDeviceSchema = object({
|
|
20118
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
20119
|
+
key: string$2(),
|
|
20120
|
+
backend: string$2(),
|
|
20121
|
+
device: string$2(),
|
|
20122
|
+
format: _enum(MODEL_FORMATS),
|
|
20123
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
20124
|
+
available: boolean(),
|
|
20125
|
+
/**
|
|
20126
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
20127
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
20128
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
20129
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
20130
|
+
* (unavailable) key keeps its stored value.
|
|
20131
|
+
*/
|
|
20132
|
+
enabled: boolean(),
|
|
20133
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
20134
|
+
weight: number(),
|
|
20135
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
20136
|
+
maxSessions: number().nullable(),
|
|
20137
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
20138
|
+
defaultModelId: string$2(),
|
|
20139
|
+
/**
|
|
20140
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
20141
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
20142
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
20143
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
20144
|
+
* available per format; this is the stored selection that becomes the
|
|
20145
|
+
* default for EVERY camera landing on this accelerator.
|
|
20146
|
+
*/
|
|
20147
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
20148
|
+
});
|
|
20149
|
+
var NodeInferenceDevicesSchema = object({
|
|
20150
|
+
nodeId: string$2(),
|
|
20151
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
20152
|
+
reachable: boolean(),
|
|
20153
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
20154
|
+
});
|
|
20045
20155
|
method(object({
|
|
20046
20156
|
deviceId: number(),
|
|
20047
20157
|
agentNodeId: string$2()
|
|
@@ -20051,7 +20161,13 @@ method(object({
|
|
|
20051
20161
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
20052
20162
|
kind: "mutation",
|
|
20053
20163
|
auth: "admin"
|
|
20054
|
-
}), method(
|
|
20164
|
+
}), method(object({
|
|
20165
|
+
deviceId: number(),
|
|
20166
|
+
deviceKey: string$2()
|
|
20167
|
+
}), object({ success: literal(true) }), {
|
|
20168
|
+
kind: "mutation",
|
|
20169
|
+
auth: "admin"
|
|
20170
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string$2().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
20055
20171
|
kind: "mutation",
|
|
20056
20172
|
auth: "admin"
|
|
20057
20173
|
}), 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$2() }), CapabilityBindingsSchema), method(object({
|
|
@@ -20085,13 +20201,7 @@ method(object({
|
|
|
20085
20201
|
}))), method(object({ agentNodeId: string$2() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
20086
20202
|
nodeId: string$2(),
|
|
20087
20203
|
settings: AgentPipelineSettingsSchema
|
|
20088
|
-
})).readonly()), method(object({
|
|
20089
|
-
agentNodeId: string$2(),
|
|
20090
|
-
defaults: record(string$2(), AgentAddonConfigSchema)
|
|
20091
|
-
}), object({ success: literal(true) }), {
|
|
20092
|
-
kind: "mutation",
|
|
20093
|
-
auth: "admin"
|
|
20094
|
-
}), method(object({ agentNodeId: string$2() }), object({
|
|
20204
|
+
})).readonly()), method(object({ agentNodeId: string$2() }), object({
|
|
20095
20205
|
success: boolean(),
|
|
20096
20206
|
removed: boolean()
|
|
20097
20207
|
}), {
|
|
@@ -20123,7 +20233,18 @@ method(object({
|
|
|
20123
20233
|
}), object({ success: literal(true) }), {
|
|
20124
20234
|
kind: "mutation",
|
|
20125
20235
|
auth: "admin"
|
|
20126
|
-
}), method(object({
|
|
20236
|
+
}), method(object({
|
|
20237
|
+
agentNodeId: string$2(),
|
|
20238
|
+
inferenceDevices: record(string$2(), object({
|
|
20239
|
+
enabled: boolean(),
|
|
20240
|
+
weight: number().positive().optional(),
|
|
20241
|
+
maxSessions: number().int().positive().optional(),
|
|
20242
|
+
steps: record(string$2(), DeviceStepConfigSchema).optional()
|
|
20243
|
+
}))
|
|
20244
|
+
}), object({ success: literal(true) }), {
|
|
20245
|
+
kind: "mutation",
|
|
20246
|
+
auth: "admin"
|
|
20247
|
+
}), method(object({ nodeId: string$2() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string$2() }), object({
|
|
20127
20248
|
success: literal(true),
|
|
20128
20249
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
20129
20250
|
effectiveModelId: string$2().nullable(),
|
|
@@ -20139,9 +20260,10 @@ method(object({
|
|
|
20139
20260
|
}), object({ success: literal(true) }), {
|
|
20140
20261
|
kind: "mutation",
|
|
20141
20262
|
auth: "admin"
|
|
20142
|
-
}), method(object({ deviceId: number() }), record(string$2(), record(string$2(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
20263
|
+
}), method(object({ deviceId: number() }), record(string$2(), record(string$2(), record(string$2(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
20143
20264
|
deviceId: number(),
|
|
20144
20265
|
agentNodeId: string$2(),
|
|
20266
|
+
deviceKey: string$2(),
|
|
20145
20267
|
addonId: string$2(),
|
|
20146
20268
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
20147
20269
|
}), object({ success: literal(true) }), {
|
|
@@ -20178,14 +20300,13 @@ method(object({
|
|
|
20178
20300
|
});
|
|
20179
20301
|
/**
|
|
20180
20302
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
20181
|
-
* package lifecycle (runtime-updatable node packages
|
|
20182
|
-
* agents).
|
|
20303
|
+
* package lifecycle (runtime-updatable node packages).
|
|
20183
20304
|
*
|
|
20184
|
-
*
|
|
20185
|
-
*
|
|
20186
|
-
*
|
|
20187
|
-
*
|
|
20188
|
-
*
|
|
20305
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
20306
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
20307
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
20308
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
20309
|
+
* no auto-rollback).
|
|
20189
20310
|
*
|
|
20190
20311
|
* Providers:
|
|
20191
20312
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -20293,7 +20414,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
20293
20414
|
/** Explicit target version; omitted = latest from the registry. */
|
|
20294
20415
|
version: string$2().optional() }), ServerUpdateActionResultSchema, {
|
|
20295
20416
|
kind: "mutation",
|
|
20296
|
-
auth: "admin"
|
|
20417
|
+
auth: "admin",
|
|
20418
|
+
timeoutMs: 16 * 6e4
|
|
20297
20419
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
20298
20420
|
kind: "mutation",
|
|
20299
20421
|
auth: "admin"
|
|
@@ -21337,22 +21459,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
21337
21459
|
var RestartAddonResultSchema = unknown();
|
|
21338
21460
|
var InstallPackageResultSchema = unknown();
|
|
21339
21461
|
var ReloadPackagesResultSchema = unknown();
|
|
21340
|
-
/**
|
|
21341
|
-
* Result of `updateFrameworkPackage`. The cap method returns BEFORE the
|
|
21342
|
-
* server restarts so the admin UI can react to the `restartingAt`
|
|
21343
|
-
* timestamp (shows reconnect overlay). The transition from
|
|
21344
|
-
* `fromVersion` to `toVersion` will be confirmed by a subsequent
|
|
21345
|
-
* `system.restart-completed` event after the new process boots.
|
|
21346
|
-
*
|
|
21347
|
-
* Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
|
|
21348
|
-
*/
|
|
21349
|
-
var UpdateFrameworkPackageResultSchema = object({
|
|
21350
|
-
packageName: string$2(),
|
|
21351
|
-
fromVersion: string$2(),
|
|
21352
|
-
toVersion: string$2(),
|
|
21353
|
-
/** Ms-epoch the server scheduled its self-restart. */
|
|
21354
|
-
restartingAt: number()
|
|
21355
|
-
});
|
|
21356
21462
|
var BulkUpdateItemStatusSchema = _enum([
|
|
21357
21463
|
"queued",
|
|
21358
21464
|
"updating",
|
|
@@ -21480,13 +21586,6 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
21480
21586
|
}), object({ success: literal(true) }), {
|
|
21481
21587
|
kind: "mutation",
|
|
21482
21588
|
auth: "admin"
|
|
21483
|
-
}), method(object({
|
|
21484
|
-
packageName: string$2().min(1),
|
|
21485
|
-
version: string$2().optional(),
|
|
21486
|
-
deferRestart: boolean().optional()
|
|
21487
|
-
}), UpdateFrameworkPackageResultSchema, {
|
|
21488
|
-
kind: "mutation",
|
|
21489
|
-
auth: "admin"
|
|
21490
21589
|
}), method(object({ name: string$2() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string$2() }), RestartAddonResultSchema, {
|
|
21491
21590
|
kind: "mutation",
|
|
21492
21591
|
auth: "admin"
|
|
@@ -22369,10 +22468,10 @@ var TopologyCategorySchema = object({
|
|
|
22369
22468
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
22370
22469
|
});
|
|
22371
22470
|
/**
|
|
22372
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
22373
|
-
*
|
|
22374
|
-
* version visibility for the Server management surface. Nullable:
|
|
22375
|
-
* rows and
|
|
22471
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
22472
|
+
* root package for every node role) as reported by its `registerNode`
|
|
22473
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
22474
|
+
* offline rows and nodes that never reported one.
|
|
22376
22475
|
*/
|
|
22377
22476
|
var TopologyRootPackageSchema = object({
|
|
22378
22477
|
name: string$2(),
|
|
@@ -22760,17 +22859,28 @@ var PlatformScoreSchema = object({
|
|
|
22760
22859
|
format: _enum([
|
|
22761
22860
|
"onnx",
|
|
22762
22861
|
"coreml",
|
|
22763
|
-
"openvino"
|
|
22862
|
+
"openvino",
|
|
22863
|
+
"tflite"
|
|
22764
22864
|
]),
|
|
22765
22865
|
score: number(),
|
|
22766
22866
|
reason: string$2(),
|
|
22767
22867
|
available: boolean()
|
|
22768
22868
|
});
|
|
22869
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
22870
|
+
key: string$2(),
|
|
22871
|
+
backend: string$2(),
|
|
22872
|
+
device: string$2(),
|
|
22873
|
+
format: ModelFormatSchema,
|
|
22874
|
+
runtime: literal("python"),
|
|
22875
|
+
score: number(),
|
|
22876
|
+
available: boolean()
|
|
22877
|
+
});
|
|
22769
22878
|
var PlatformCapabilitiesSchema = object({
|
|
22770
22879
|
hardware: HardwareInfoSchema,
|
|
22771
22880
|
scores: array(PlatformScoreSchema).readonly(),
|
|
22772
22881
|
bestScore: PlatformScoreSchema,
|
|
22773
|
-
pythonPath: string$2().nullable()
|
|
22882
|
+
pythonPath: string$2().nullable(),
|
|
22883
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
22774
22884
|
});
|
|
22775
22885
|
var ModelRequirementSchema = object({
|
|
22776
22886
|
modelId: string$2(),
|
|
@@ -23649,12 +23759,6 @@ Object.freeze({
|
|
|
23649
23759
|
addonId: null,
|
|
23650
23760
|
access: "delete"
|
|
23651
23761
|
},
|
|
23652
|
-
"addons.updateFrameworkPackage": {
|
|
23653
|
-
capName: "addons",
|
|
23654
|
-
capScope: "system",
|
|
23655
|
-
addonId: null,
|
|
23656
|
-
access: "create"
|
|
23657
|
-
},
|
|
23658
23762
|
"addons.updatePackage": {
|
|
23659
23763
|
capName: "addons",
|
|
23660
23764
|
capScope: "system",
|
|
@@ -26427,12 +26531,6 @@ Object.freeze({
|
|
|
26427
26531
|
addonId: null,
|
|
26428
26532
|
access: "view"
|
|
26429
26533
|
},
|
|
26430
|
-
"pipelineExecutor.reprobeEngine": {
|
|
26431
|
-
capName: "pipeline-executor",
|
|
26432
|
-
capScope: "system",
|
|
26433
|
-
addonId: null,
|
|
26434
|
-
access: "create"
|
|
26435
|
-
},
|
|
26436
26534
|
"pipelineExecutor.runAudioTest": {
|
|
26437
26535
|
capName: "pipeline-executor",
|
|
26438
26536
|
capScope: "system",
|
|
@@ -26583,6 +26681,12 @@ Object.freeze({
|
|
|
26583
26681
|
addonId: null,
|
|
26584
26682
|
access: "view"
|
|
26585
26683
|
},
|
|
26684
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
26685
|
+
capName: "pipeline-orchestrator",
|
|
26686
|
+
capScope: "system",
|
|
26687
|
+
addonId: null,
|
|
26688
|
+
access: "view"
|
|
26689
|
+
},
|
|
26586
26690
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
26587
26691
|
capName: "pipeline-orchestrator",
|
|
26588
26692
|
capScope: "system",
|
|
@@ -26595,6 +26699,12 @@ Object.freeze({
|
|
|
26595
26699
|
addonId: null,
|
|
26596
26700
|
access: "view"
|
|
26597
26701
|
},
|
|
26702
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
26703
|
+
capName: "pipeline-orchestrator",
|
|
26704
|
+
capScope: "system",
|
|
26705
|
+
addonId: null,
|
|
26706
|
+
access: "view"
|
|
26707
|
+
},
|
|
26598
26708
|
"pipelineOrchestrator.listAgentSettings": {
|
|
26599
26709
|
capName: "pipeline-orchestrator",
|
|
26600
26710
|
capScope: "system",
|
|
@@ -26637,19 +26747,19 @@ Object.freeze({
|
|
|
26637
26747
|
addonId: null,
|
|
26638
26748
|
access: "create"
|
|
26639
26749
|
},
|
|
26640
|
-
"pipelineOrchestrator.
|
|
26750
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
26641
26751
|
capName: "pipeline-orchestrator",
|
|
26642
26752
|
capScope: "system",
|
|
26643
26753
|
addonId: null,
|
|
26644
26754
|
access: "create"
|
|
26645
26755
|
},
|
|
26646
|
-
"pipelineOrchestrator.
|
|
26756
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
26647
26757
|
capName: "pipeline-orchestrator",
|
|
26648
26758
|
capScope: "system",
|
|
26649
26759
|
addonId: null,
|
|
26650
26760
|
access: "create"
|
|
26651
26761
|
},
|
|
26652
|
-
"pipelineOrchestrator.
|
|
26762
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
26653
26763
|
capName: "pipeline-orchestrator",
|
|
26654
26764
|
capScope: "system",
|
|
26655
26765
|
addonId: null,
|
|
@@ -26691,6 +26801,12 @@ Object.freeze({
|
|
|
26691
26801
|
addonId: null,
|
|
26692
26802
|
access: "create"
|
|
26693
26803
|
},
|
|
26804
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
26805
|
+
capName: "pipeline-orchestrator",
|
|
26806
|
+
capScope: "system",
|
|
26807
|
+
addonId: null,
|
|
26808
|
+
access: "create"
|
|
26809
|
+
},
|
|
26694
26810
|
"pipelineOrchestrator.unassignAudio": {
|
|
26695
26811
|
capName: "pipeline-orchestrator",
|
|
26696
26812
|
capScope: "system",
|
|
@@ -28243,32 +28359,6 @@ Object.freeze({
|
|
|
28243
28359
|
"network-access": "ingress",
|
|
28244
28360
|
"smtp-provider": "email"
|
|
28245
28361
|
});
|
|
28246
|
-
var frameworkSwapPackageSchema = object({
|
|
28247
|
-
name: string$2(),
|
|
28248
|
-
stagedPath: string$2(),
|
|
28249
|
-
backupPath: string$2(),
|
|
28250
|
-
toVersion: string$2(),
|
|
28251
|
-
fromVersion: string$2().nullable()
|
|
28252
|
-
});
|
|
28253
|
-
object({
|
|
28254
|
-
jobId: string$2(),
|
|
28255
|
-
taskId: string$2(),
|
|
28256
|
-
packages: array(frameworkSwapPackageSchema),
|
|
28257
|
-
requestedAtMs: number(),
|
|
28258
|
-
schemaVersion: literal(1)
|
|
28259
|
-
});
|
|
28260
|
-
object({
|
|
28261
|
-
jobId: string$2(),
|
|
28262
|
-
taskId: string$2(),
|
|
28263
|
-
backups: array(object({
|
|
28264
|
-
name: string$2(),
|
|
28265
|
-
backupPath: string$2(),
|
|
28266
|
-
livePath: string$2()
|
|
28267
|
-
})),
|
|
28268
|
-
appliedAtMs: number(),
|
|
28269
|
-
bootAttempts: number(),
|
|
28270
|
-
schemaVersion: literal(1)
|
|
28271
|
-
});
|
|
28272
28362
|
//#endregion
|
|
28273
28363
|
//#region ../../node_modules/@matter/general/dist/esm/net/tcp/TcpConnection.js
|
|
28274
28364
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-matter-broker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|