@camstack/addon-model-studio 1.0.28 → 1.1.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/{MotionZonesSettings-JuOM4wpI.mjs → MotionZonesSettings-DSMa6CQ-.mjs} +1 -1
- package/dist/{PrivacyMaskSettings-B4AFKvVk.mjs → PrivacyMaskSettings-ZgbJIFMN.mjs} +2 -2
- package/dist/_stub.js +8578 -1862
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-NMFv_zoJ.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BK3xUMr7.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BVOnSREM.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-CdGt-Tbt.mjs → hostInit-BD5uAgF_.mjs} +3 -3
- package/dist/model-studio.addon.js +213 -106
- package/dist/model-studio.addon.mjs +213 -106
- package/dist/{player-overlays-BR3IAbV5.mjs → player-overlays-C54-e_Df.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{trash-2-CCPJ47Sy.mjs → trash-2-CkTgQAkA.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DvnLvZMm.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C3kcXNUK.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BOsI55Qr.mjs +0 -26
|
@@ -7101,6 +7101,17 @@ var ModelCatalogEntrySchema = object({
|
|
|
7101
7101
|
"imagenet",
|
|
7102
7102
|
"none"
|
|
7103
7103
|
]).optional(),
|
|
7104
|
+
/**
|
|
7105
|
+
* The model already applies softmax IN-GRAPH — its raw output is a
|
|
7106
|
+
* probability distribution, not logits. When set, the `softmax`
|
|
7107
|
+
* postprocessor must NOT re-apply softmax: re-softmaxing an already-normalised
|
|
7108
|
+
* probability vector collapses it toward uniform (top-1 score craters far
|
|
7109
|
+
* below its true value, making every confidence gate meaningless). Absent ⇒
|
|
7110
|
+
* the output is raw logits and the postprocessor applies softmax (the normal
|
|
7111
|
+
* case). Set on the Google AIY Birds `bird-classifier` (softmax baked into the
|
|
7112
|
+
* TF graph). Threaded to the Python pool via `PoolModelConfig.outputProbabilities`.
|
|
7113
|
+
*/
|
|
7114
|
+
outputProbabilities: boolean().optional(),
|
|
7104
7115
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
7105
7116
|
/**
|
|
7106
7117
|
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
@@ -11145,10 +11156,7 @@ var ConfigUISchemaNullableBridge = custom();
|
|
|
11145
11156
|
var InferenceCapabilitiesBridge = custom();
|
|
11146
11157
|
var ModelAvailabilityListBridge = custom();
|
|
11147
11158
|
var PipelineRunResultBridge = custom();
|
|
11148
|
-
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(),
|
|
11149
|
-
kind: "mutation",
|
|
11150
|
-
auth: "admin"
|
|
11151
|
-
}), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
11159
|
+
method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
|
|
11152
11160
|
modelId: string(),
|
|
11153
11161
|
settings: record(string(), unknown()).readonly()
|
|
11154
11162
|
}))), method(object({ steps: record(string(), object({
|
|
@@ -11208,13 +11216,33 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
11208
11216
|
* (inputClasses ≠ null) are skipped and served per-track via
|
|
11209
11217
|
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
11210
11218
|
*/
|
|
11211
|
-
plane: _enum(["full", "frame"]).optional()
|
|
11219
|
+
plane: _enum(["full", "frame"]).optional(),
|
|
11220
|
+
/**
|
|
11221
|
+
* Inference-device selector (Phase 2 multi-device). Format
|
|
11222
|
+
* `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`).
|
|
11223
|
+
* Omitted ⇒ the runner's default device (current single-engine
|
|
11224
|
+
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
11225
|
+
*/
|
|
11226
|
+
deviceKey: string().optional()
|
|
11212
11227
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
11213
11228
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
11214
11229
|
steps: array(PipelineStepInputSchema).min(1),
|
|
11215
11230
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
11216
11231
|
deviceId: number().optional(),
|
|
11217
|
-
sessionId: string().optional()
|
|
11232
|
+
sessionId: string().optional(),
|
|
11233
|
+
/**
|
|
11234
|
+
* Pure-inference benchmark hint. A NONZERO uint32 pins every frame in
|
|
11235
|
+
* the batch to the Python pool's bench preprocess cache
|
|
11236
|
+
* (`_bench_frame_id`) so a REPEATED benchmark frame is decoded +
|
|
11237
|
+
* preprocessed ONCE and every later inference is a pure-inference cache
|
|
11238
|
+
* hit — the sustained-throughput run measures inference, not
|
|
11239
|
+
* decode+preprocess+infer. Omitted/0 for live frames (all different →
|
|
11240
|
+
* full preprocess every call, correct). Fresh per sustained run;
|
|
11241
|
+
* released via `uncacheFrame`.
|
|
11242
|
+
*/
|
|
11243
|
+
frameId: number().int().nonnegative().optional(),
|
|
11244
|
+
/** Inference-device selector (Phase 2 multi-device); see runPipeline. */
|
|
11245
|
+
deviceKey: string().optional()
|
|
11218
11246
|
}), object({ results: array(PipelineRunResultBridge).readonly() }), { kind: "mutation" }), method(object({
|
|
11219
11247
|
data: _instanceof(Uint8Array),
|
|
11220
11248
|
width: number().int().positive(),
|
|
@@ -11246,8 +11274,18 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
11246
11274
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
11247
11275
|
* - `warm-override` — benchmark/test override held in the warm
|
|
11248
11276
|
* cache; auto-disposed after the idle TTL.
|
|
11277
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
11278
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
11279
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
11280
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
11281
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
11282
|
+
* Engines tab shows all pools running at once.
|
|
11249
11283
|
*/
|
|
11250
|
-
kind: _enum([
|
|
11284
|
+
kind: _enum([
|
|
11285
|
+
"runtime",
|
|
11286
|
+
"warm-override",
|
|
11287
|
+
"device-pool"
|
|
11288
|
+
]),
|
|
11251
11289
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
11252
11290
|
poolPid: number().nullable(),
|
|
11253
11291
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -11349,7 +11387,21 @@ var NativeCropResultSchema = object({
|
|
|
11349
11387
|
/** Packed rgb (24-bit) pixels of the crop. */
|
|
11350
11388
|
bytes: _instanceof(Uint8Array),
|
|
11351
11389
|
width: number().int().positive(),
|
|
11352
|
-
height: number().int().positive()
|
|
11390
|
+
height: number().int().positive(),
|
|
11391
|
+
/**
|
|
11392
|
+
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
11393
|
+
* `keyFrame`) can reject a degraded fallback:
|
|
11394
|
+
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
11395
|
+
* quality path).
|
|
11396
|
+
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
11397
|
+
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
11398
|
+
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
11399
|
+
*
|
|
11400
|
+
* OPTIONAL: a pre-tier runner (version skew) omits it — an ABSENT `tier` MUST be
|
|
11401
|
+
* treated as `native` (accepted) by every consumer so mixed-version clusters
|
|
11402
|
+
* keep the pre-tier behaviour. An ROI miss returns `null` (no tier at all).
|
|
11403
|
+
*/
|
|
11404
|
+
tier: _enum(["native", "ram-fullframe"]).optional()
|
|
11353
11405
|
});
|
|
11354
11406
|
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
11355
11407
|
* originating detection, in FRAME-space coordinates. Reuses
|
|
@@ -11589,7 +11641,14 @@ var RunnerCameraConfigSchema = object({
|
|
|
11589
11641
|
* camera's detect node differs from its source-owner (P2d, gated by the
|
|
11590
11642
|
* `remoteSourcingNodes` rollout setting).
|
|
11591
11643
|
*/
|
|
11592
|
-
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" })
|
|
11644
|
+
frameSource: RunnerFrameSourceSchema.default({ kind: "local-broker" }),
|
|
11645
|
+
/**
|
|
11646
|
+
* Inference-device selector for this camera's sessions (Phase 2 multi-device).
|
|
11647
|
+
* Format `<backend>:<device>` (e.g. `openvino:gpu`, `edgetpu:usb`, `cpu`);
|
|
11648
|
+
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
11649
|
+
* this only selects WHICH device pool of that node runs the session.
|
|
11650
|
+
*/
|
|
11651
|
+
deviceKey: string().optional()
|
|
11593
11652
|
});
|
|
11594
11653
|
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;
|
|
11595
11654
|
/**
|
|
@@ -11610,6 +11669,19 @@ var RunnerLocalLoadSchema = object({
|
|
|
11610
11669
|
avgInferenceTimeMs: number(),
|
|
11611
11670
|
/** Total queue depth across motion + detection queues. */
|
|
11612
11671
|
queueDepthTotal: number(),
|
|
11672
|
+
/**
|
|
11673
|
+
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
11674
|
+
* this runner currently has attached cameras on, so the orchestrator's second
|
|
11675
|
+
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
11676
|
+
* counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
|
|
11677
|
+
* per device is 0 until the pool backlog gets a public accessor (follow-up).
|
|
11678
|
+
*/
|
|
11679
|
+
devices: array(object({
|
|
11680
|
+
deviceKey: string(),
|
|
11681
|
+
backend: string(),
|
|
11682
|
+
attachedCameras: number(),
|
|
11683
|
+
queueDepthTotal: number()
|
|
11684
|
+
})).default([]),
|
|
11613
11685
|
/** Hardware capability flags reported by this node. */
|
|
11614
11686
|
hardware: object({
|
|
11615
11687
|
hasGpu: boolean(),
|
|
@@ -13085,6 +13157,8 @@ method(_void(), _void(), { kind: "mutation" }), method(_void(), _void(), { kind:
|
|
|
13085
13157
|
kind: "mutation",
|
|
13086
13158
|
auth: "admin"
|
|
13087
13159
|
});
|
|
13160
|
+
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;
|
|
13161
|
+
new Set(Object.values(DeviceType));
|
|
13088
13162
|
/**
|
|
13089
13163
|
* `addon-pages` — system-scoped singleton aggregator cap. Public-facing
|
|
13090
13164
|
* surface that admin-ui consumes through `useAddonPagesListPages()`.
|
|
@@ -14691,7 +14765,8 @@ var LinkedDeviceSchema = object({
|
|
|
14691
14765
|
deviceId: number(),
|
|
14692
14766
|
name: string(),
|
|
14693
14767
|
location: string().nullable(),
|
|
14694
|
-
features: array(string())
|
|
14768
|
+
features: array(string()),
|
|
14769
|
+
producesTrackedEvents: boolean().optional()
|
|
14695
14770
|
});
|
|
14696
14771
|
var SavedDeviceRowSchema = object({
|
|
14697
14772
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
@@ -16327,6 +16402,7 @@ var TrackSchema = object({
|
|
|
16327
16402
|
deviceId: number(),
|
|
16328
16403
|
className: string(),
|
|
16329
16404
|
label: string().optional(),
|
|
16405
|
+
producingDeviceName: string().optional(),
|
|
16330
16406
|
/** Track provenance. Absent ⇒ `pipeline` (legacy rows). */
|
|
16331
16407
|
source: TrackSourceSchema.optional(),
|
|
16332
16408
|
firstSeen: number(),
|
|
@@ -16464,7 +16540,8 @@ var MediaFileKindEnum = _enum([
|
|
|
16464
16540
|
"fullFrameBoxed",
|
|
16465
16541
|
"faceCrop",
|
|
16466
16542
|
"plateCrop",
|
|
16467
|
-
"keyFrame"
|
|
16543
|
+
"keyFrame",
|
|
16544
|
+
"keyFrameSmall"
|
|
16468
16545
|
]);
|
|
16469
16546
|
var MediaFileSchema = object({
|
|
16470
16547
|
key: string(),
|
|
@@ -16793,13 +16870,11 @@ var PipelineTemplateSchema = object({
|
|
|
16793
16870
|
createdAt: string(),
|
|
16794
16871
|
updatedAt: string()
|
|
16795
16872
|
});
|
|
16796
|
-
var
|
|
16797
|
-
enabled: boolean(),
|
|
16873
|
+
var DeviceStepConfigSchema = object({
|
|
16798
16874
|
modelId: string().optional(),
|
|
16799
|
-
settings: record(string(), unknown()).
|
|
16875
|
+
settings: record(string(), unknown()).optional()
|
|
16800
16876
|
});
|
|
16801
16877
|
var AgentPipelineSettingsSchema = object({
|
|
16802
|
-
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
16803
16878
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
16804
16879
|
/** Per-node detection weight (relative share for the quota balancer). */
|
|
16805
16880
|
detectWeight: number().positive().optional(),
|
|
@@ -16823,7 +16898,22 @@ var AgentPipelineSettingsSchema = object({
|
|
|
16823
16898
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
16824
16899
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
16825
16900
|
*/
|
|
16826
|
-
reachableHost: string().optional()
|
|
16901
|
+
reachableHost: string().optional(),
|
|
16902
|
+
/**
|
|
16903
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
16904
|
+
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
16905
|
+
* accelerator (safe default); two+ enabled ⇒ the dispatcher balances
|
|
16906
|
+
* detection sessions across them so they run CONCURRENTLY. `steps` is the
|
|
16907
|
+
* per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
|
|
16908
|
+
* the default model/settings for every camera landing on that accelerator;
|
|
16909
|
+
* a stepId absent ⇒ the step uses that device's format default.
|
|
16910
|
+
*/
|
|
16911
|
+
inferenceDevices: record(string(), object({
|
|
16912
|
+
enabled: boolean(),
|
|
16913
|
+
weight: number().positive().optional(),
|
|
16914
|
+
maxSessions: number().int().positive().optional(),
|
|
16915
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
16916
|
+
})).optional()
|
|
16827
16917
|
});
|
|
16828
16918
|
var CameraPipelineForAgentSchema = object({
|
|
16829
16919
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -16833,14 +16923,13 @@ var CameraPipelineForAgentSchema = object({
|
|
|
16833
16923
|
}).nullable()
|
|
16834
16924
|
});
|
|
16835
16925
|
var CameraStepOverridePatchSchema = object({
|
|
16836
|
-
enabled: boolean().optional(),
|
|
16837
16926
|
modelId: string().optional(),
|
|
16838
16927
|
settings: record(string(), unknown()).readonly().optional()
|
|
16839
16928
|
});
|
|
16840
16929
|
var CameraPipelineSettingsSchema = object({
|
|
16841
16930
|
pinnedAgentNodeId: string().optional(),
|
|
16842
16931
|
stepToggles: record(string(), boolean()).optional(),
|
|
16843
|
-
|
|
16932
|
+
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
16844
16933
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
16845
16934
|
});
|
|
16846
16935
|
/**
|
|
@@ -17054,6 +17143,44 @@ var CameraStatusSchema = object({
|
|
|
17054
17143
|
/** Unix timestamp (ms) when this snapshot was composed server-side. */
|
|
17055
17144
|
fetchedAt: number()
|
|
17056
17145
|
});
|
|
17146
|
+
var NodeInferenceDeviceSchema = object({
|
|
17147
|
+
/** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
|
|
17148
|
+
key: string(),
|
|
17149
|
+
backend: string(),
|
|
17150
|
+
device: string(),
|
|
17151
|
+
format: _enum(MODEL_FORMATS),
|
|
17152
|
+
/** Whether the node's live probe reports the device as usable right now. */
|
|
17153
|
+
available: boolean(),
|
|
17154
|
+
/**
|
|
17155
|
+
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
17156
|
+
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
17157
|
+
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
17158
|
+
* not a balanced target). An explicit stored value always wins; a stored-only
|
|
17159
|
+
* (unavailable) key keeps its stored value.
|
|
17160
|
+
*/
|
|
17161
|
+
enabled: boolean(),
|
|
17162
|
+
/** Relative balancer weight for the enabled device (default 1). */
|
|
17163
|
+
weight: number(),
|
|
17164
|
+
/** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
|
|
17165
|
+
maxSessions: number().nullable(),
|
|
17166
|
+
/** Object-detection model the executor defaults to for this deviceKey. */
|
|
17167
|
+
defaultModelId: string(),
|
|
17168
|
+
/**
|
|
17169
|
+
* Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
|
|
17170
|
+
* `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
|
|
17171
|
+
* Absent/empty ⇒ no base (every step uses its device format default). The
|
|
17172
|
+
* UI cross-references `pipelineExecutor.getSchema` for the models actually
|
|
17173
|
+
* available per format; this is the stored selection that becomes the
|
|
17174
|
+
* default for EVERY camera landing on this accelerator.
|
|
17175
|
+
*/
|
|
17176
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
17177
|
+
});
|
|
17178
|
+
var NodeInferenceDevicesSchema = object({
|
|
17179
|
+
nodeId: string(),
|
|
17180
|
+
/** False when the node's platform-probe was unreachable (no live device set). */
|
|
17181
|
+
reachable: boolean(),
|
|
17182
|
+
devices: array(NodeInferenceDeviceSchema).readonly()
|
|
17183
|
+
});
|
|
17057
17184
|
method(object({
|
|
17058
17185
|
deviceId: number(),
|
|
17059
17186
|
agentNodeId: string()
|
|
@@ -17063,7 +17190,13 @@ method(object({
|
|
|
17063
17190
|
}), method(object({ deviceId: number() }), object({ success: literal(true) }), {
|
|
17064
17191
|
kind: "mutation",
|
|
17065
17192
|
auth: "admin"
|
|
17066
|
-
}), method(
|
|
17193
|
+
}), method(object({
|
|
17194
|
+
deviceId: number(),
|
|
17195
|
+
deviceKey: string()
|
|
17196
|
+
}), object({ success: literal(true) }), {
|
|
17197
|
+
kind: "mutation",
|
|
17198
|
+
auth: "admin"
|
|
17199
|
+
}), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
|
|
17067
17200
|
kind: "mutation",
|
|
17068
17201
|
auth: "admin"
|
|
17069
17202
|
}), 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({
|
|
@@ -17097,13 +17230,7 @@ method(object({
|
|
|
17097
17230
|
}))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
|
|
17098
17231
|
nodeId: string(),
|
|
17099
17232
|
settings: AgentPipelineSettingsSchema
|
|
17100
|
-
})).readonly()), method(object({
|
|
17101
|
-
agentNodeId: string(),
|
|
17102
|
-
defaults: record(string(), AgentAddonConfigSchema)
|
|
17103
|
-
}), object({ success: literal(true) }), {
|
|
17104
|
-
kind: "mutation",
|
|
17105
|
-
auth: "admin"
|
|
17106
|
-
}), method(object({ agentNodeId: string() }), object({
|
|
17233
|
+
})).readonly()), method(object({ agentNodeId: string() }), object({
|
|
17107
17234
|
success: boolean(),
|
|
17108
17235
|
removed: boolean()
|
|
17109
17236
|
}), {
|
|
@@ -17135,7 +17262,18 @@ method(object({
|
|
|
17135
17262
|
}), object({ success: literal(true) }), {
|
|
17136
17263
|
kind: "mutation",
|
|
17137
17264
|
auth: "admin"
|
|
17138
|
-
}), method(object({
|
|
17265
|
+
}), method(object({
|
|
17266
|
+
agentNodeId: string(),
|
|
17267
|
+
inferenceDevices: record(string(), object({
|
|
17268
|
+
enabled: boolean(),
|
|
17269
|
+
weight: number().positive().optional(),
|
|
17270
|
+
maxSessions: number().int().positive().optional(),
|
|
17271
|
+
steps: record(string(), DeviceStepConfigSchema).optional()
|
|
17272
|
+
}))
|
|
17273
|
+
}), object({ success: literal(true) }), {
|
|
17274
|
+
kind: "mutation",
|
|
17275
|
+
auth: "admin"
|
|
17276
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
|
|
17139
17277
|
success: literal(true),
|
|
17140
17278
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
17141
17279
|
effectiveModelId: string().nullable(),
|
|
@@ -17151,9 +17289,10 @@ method(object({
|
|
|
17151
17289
|
}), object({ success: literal(true) }), {
|
|
17152
17290
|
kind: "mutation",
|
|
17153
17291
|
auth: "admin"
|
|
17154
|
-
}), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
|
|
17292
|
+
}), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
|
|
17155
17293
|
deviceId: number(),
|
|
17156
17294
|
agentNodeId: string(),
|
|
17295
|
+
deviceKey: string(),
|
|
17157
17296
|
addonId: string(),
|
|
17158
17297
|
patch: CameraStepOverridePatchSchema.nullable()
|
|
17159
17298
|
}), object({ success: literal(true) }), {
|
|
@@ -17190,14 +17329,13 @@ method(object({
|
|
|
17190
17329
|
});
|
|
17191
17330
|
/**
|
|
17192
17331
|
* server-management — per-NODE singleton capability for a node's ROOT
|
|
17193
|
-
* package lifecycle (runtime-updatable node packages
|
|
17194
|
-
* agents).
|
|
17332
|
+
* package lifecycle (runtime-updatable node packages).
|
|
17195
17333
|
*
|
|
17196
|
-
*
|
|
17197
|
-
*
|
|
17198
|
-
*
|
|
17199
|
-
*
|
|
17200
|
-
*
|
|
17334
|
+
* Every node role runs the SAME root package (`@camstack/server`), which
|
|
17335
|
+
* carries the whole software stack in its npm dep tree, so ONE version
|
|
17336
|
+
* describes the node. Updates stage into `<dataDir>/server-root/` and apply
|
|
17337
|
+
* on restart via the baked starter (single-copy in-place swap — no probation,
|
|
17338
|
+
* no auto-rollback).
|
|
17201
17339
|
*
|
|
17202
17340
|
* Providers:
|
|
17203
17341
|
* - HUB: `ServerUpdateService` behind the `server-provided` mount
|
|
@@ -17305,7 +17443,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
17305
17443
|
/** Explicit target version; omitted = latest from the registry. */
|
|
17306
17444
|
version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
17307
17445
|
kind: "mutation",
|
|
17308
|
-
auth: "admin"
|
|
17446
|
+
auth: "admin",
|
|
17447
|
+
timeoutMs: 16 * 6e4
|
|
17309
17448
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
17310
17449
|
kind: "mutation",
|
|
17311
17450
|
auth: "admin"
|
|
@@ -18349,22 +18488,6 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
18349
18488
|
var RestartAddonResultSchema = unknown();
|
|
18350
18489
|
var InstallPackageResultSchema = unknown();
|
|
18351
18490
|
var ReloadPackagesResultSchema = unknown();
|
|
18352
|
-
/**
|
|
18353
|
-
* Result of `updateFrameworkPackage`. The cap method returns BEFORE the
|
|
18354
|
-
* server restarts so the admin UI can react to the `restartingAt`
|
|
18355
|
-
* timestamp (shows reconnect overlay). The transition from
|
|
18356
|
-
* `fromVersion` to `toVersion` will be confirmed by a subsequent
|
|
18357
|
-
* `system.restart-completed` event after the new process boots.
|
|
18358
|
-
*
|
|
18359
|
-
* Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
|
|
18360
|
-
*/
|
|
18361
|
-
var UpdateFrameworkPackageResultSchema = object({
|
|
18362
|
-
packageName: string(),
|
|
18363
|
-
fromVersion: string(),
|
|
18364
|
-
toVersion: string(),
|
|
18365
|
-
/** Ms-epoch the server scheduled its self-restart. */
|
|
18366
|
-
restartingAt: number()
|
|
18367
|
-
});
|
|
18368
18491
|
var BulkUpdateItemStatusSchema = _enum([
|
|
18369
18492
|
"queued",
|
|
18370
18493
|
"updating",
|
|
@@ -18492,13 +18615,6 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
18492
18615
|
}), object({ success: literal(true) }), {
|
|
18493
18616
|
kind: "mutation",
|
|
18494
18617
|
auth: "admin"
|
|
18495
|
-
}), method(object({
|
|
18496
|
-
packageName: string().min(1),
|
|
18497
|
-
version: string().optional(),
|
|
18498
|
-
deferRestart: boolean().optional()
|
|
18499
|
-
}), UpdateFrameworkPackageResultSchema, {
|
|
18500
|
-
kind: "mutation",
|
|
18501
|
-
auth: "admin"
|
|
18502
18618
|
}), method(object({ name: string() }), array(PackageVersionInfoSchema).readonly()), method(object({ addonId: string() }), RestartAddonResultSchema, {
|
|
18503
18619
|
kind: "mutation",
|
|
18504
18620
|
auth: "admin"
|
|
@@ -19364,10 +19480,10 @@ var TopologyCategorySchema = object({
|
|
|
19364
19480
|
addons: array(TopologyCategoryAddonSchema).readonly()
|
|
19365
19481
|
});
|
|
19366
19482
|
/**
|
|
19367
|
-
* The node's runtime-updatable ROOT package (`@camstack/server`
|
|
19368
|
-
*
|
|
19369
|
-
* version visibility for the Server management surface. Nullable:
|
|
19370
|
-
* rows and
|
|
19483
|
+
* The node's runtime-updatable ROOT package (`@camstack/server` — the single
|
|
19484
|
+
* root package for every node role) as reported by its `registerNode`
|
|
19485
|
+
* manifest — version visibility for the Server management surface. Nullable:
|
|
19486
|
+
* offline rows and nodes that never reported one.
|
|
19371
19487
|
*/
|
|
19372
19488
|
var TopologyRootPackageSchema = object({
|
|
19373
19489
|
name: string(),
|
|
@@ -19755,17 +19871,28 @@ var PlatformScoreSchema = object({
|
|
|
19755
19871
|
format: _enum([
|
|
19756
19872
|
"onnx",
|
|
19757
19873
|
"coreml",
|
|
19758
|
-
"openvino"
|
|
19874
|
+
"openvino",
|
|
19875
|
+
"tflite"
|
|
19759
19876
|
]),
|
|
19760
19877
|
score: number(),
|
|
19761
19878
|
reason: string(),
|
|
19762
19879
|
available: boolean()
|
|
19763
19880
|
});
|
|
19881
|
+
var InferenceDeviceDescriptorSchema = object({
|
|
19882
|
+
key: string(),
|
|
19883
|
+
backend: string(),
|
|
19884
|
+
device: string(),
|
|
19885
|
+
format: ModelFormatSchema,
|
|
19886
|
+
runtime: literal("python"),
|
|
19887
|
+
score: number(),
|
|
19888
|
+
available: boolean()
|
|
19889
|
+
});
|
|
19764
19890
|
var PlatformCapabilitiesSchema = object({
|
|
19765
19891
|
hardware: HardwareInfoSchema,
|
|
19766
19892
|
scores: array(PlatformScoreSchema).readonly(),
|
|
19767
19893
|
bestScore: PlatformScoreSchema,
|
|
19768
|
-
pythonPath: string().nullable()
|
|
19894
|
+
pythonPath: string().nullable(),
|
|
19895
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly()
|
|
19769
19896
|
});
|
|
19770
19897
|
var ModelRequirementSchema = object({
|
|
19771
19898
|
modelId: string(),
|
|
@@ -20644,12 +20771,6 @@ Object.freeze({
|
|
|
20644
20771
|
addonId: null,
|
|
20645
20772
|
access: "delete"
|
|
20646
20773
|
},
|
|
20647
|
-
"addons.updateFrameworkPackage": {
|
|
20648
|
-
capName: "addons",
|
|
20649
|
-
capScope: "system",
|
|
20650
|
-
addonId: null,
|
|
20651
|
-
access: "create"
|
|
20652
|
-
},
|
|
20653
20774
|
"addons.updatePackage": {
|
|
20654
20775
|
capName: "addons",
|
|
20655
20776
|
capScope: "system",
|
|
@@ -23422,12 +23543,6 @@ Object.freeze({
|
|
|
23422
23543
|
addonId: null,
|
|
23423
23544
|
access: "view"
|
|
23424
23545
|
},
|
|
23425
|
-
"pipelineExecutor.reprobeEngine": {
|
|
23426
|
-
capName: "pipeline-executor",
|
|
23427
|
-
capScope: "system",
|
|
23428
|
-
addonId: null,
|
|
23429
|
-
access: "create"
|
|
23430
|
-
},
|
|
23431
23546
|
"pipelineExecutor.runAudioTest": {
|
|
23432
23547
|
capName: "pipeline-executor",
|
|
23433
23548
|
capScope: "system",
|
|
@@ -23578,6 +23693,12 @@ Object.freeze({
|
|
|
23578
23693
|
addonId: null,
|
|
23579
23694
|
access: "view"
|
|
23580
23695
|
},
|
|
23696
|
+
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
23697
|
+
capName: "pipeline-orchestrator",
|
|
23698
|
+
capScope: "system",
|
|
23699
|
+
addonId: null,
|
|
23700
|
+
access: "view"
|
|
23701
|
+
},
|
|
23581
23702
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
23582
23703
|
capName: "pipeline-orchestrator",
|
|
23583
23704
|
capScope: "system",
|
|
@@ -23590,6 +23711,12 @@ Object.freeze({
|
|
|
23590
23711
|
addonId: null,
|
|
23591
23712
|
access: "view"
|
|
23592
23713
|
},
|
|
23714
|
+
"pipelineOrchestrator.getPipelineDevicePin": {
|
|
23715
|
+
capName: "pipeline-orchestrator",
|
|
23716
|
+
capScope: "system",
|
|
23717
|
+
addonId: null,
|
|
23718
|
+
access: "view"
|
|
23719
|
+
},
|
|
23593
23720
|
"pipelineOrchestrator.listAgentSettings": {
|
|
23594
23721
|
capName: "pipeline-orchestrator",
|
|
23595
23722
|
capScope: "system",
|
|
@@ -23632,19 +23759,19 @@ Object.freeze({
|
|
|
23632
23759
|
addonId: null,
|
|
23633
23760
|
access: "create"
|
|
23634
23761
|
},
|
|
23635
|
-
"pipelineOrchestrator.
|
|
23762
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
23636
23763
|
capName: "pipeline-orchestrator",
|
|
23637
23764
|
capScope: "system",
|
|
23638
23765
|
addonId: null,
|
|
23639
23766
|
access: "create"
|
|
23640
23767
|
},
|
|
23641
|
-
"pipelineOrchestrator.
|
|
23768
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
23642
23769
|
capName: "pipeline-orchestrator",
|
|
23643
23770
|
capScope: "system",
|
|
23644
23771
|
addonId: null,
|
|
23645
23772
|
access: "create"
|
|
23646
23773
|
},
|
|
23647
|
-
"pipelineOrchestrator.
|
|
23774
|
+
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
23648
23775
|
capName: "pipeline-orchestrator",
|
|
23649
23776
|
capScope: "system",
|
|
23650
23777
|
addonId: null,
|
|
@@ -23686,6 +23813,12 @@ Object.freeze({
|
|
|
23686
23813
|
addonId: null,
|
|
23687
23814
|
access: "create"
|
|
23688
23815
|
},
|
|
23816
|
+
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
23817
|
+
capName: "pipeline-orchestrator",
|
|
23818
|
+
capScope: "system",
|
|
23819
|
+
addonId: null,
|
|
23820
|
+
access: "create"
|
|
23821
|
+
},
|
|
23689
23822
|
"pipelineOrchestrator.unassignAudio": {
|
|
23690
23823
|
capName: "pipeline-orchestrator",
|
|
23691
23824
|
capScope: "system",
|
|
@@ -25238,32 +25371,6 @@ Object.freeze({
|
|
|
25238
25371
|
"network-access": "ingress",
|
|
25239
25372
|
"smtp-provider": "email"
|
|
25240
25373
|
});
|
|
25241
|
-
var frameworkSwapPackageSchema = object({
|
|
25242
|
-
name: string(),
|
|
25243
|
-
stagedPath: string(),
|
|
25244
|
-
backupPath: string(),
|
|
25245
|
-
toVersion: string(),
|
|
25246
|
-
fromVersion: string().nullable()
|
|
25247
|
-
});
|
|
25248
|
-
object({
|
|
25249
|
-
jobId: string(),
|
|
25250
|
-
taskId: string(),
|
|
25251
|
-
packages: array(frameworkSwapPackageSchema),
|
|
25252
|
-
requestedAtMs: number(),
|
|
25253
|
-
schemaVersion: literal(1)
|
|
25254
|
-
});
|
|
25255
|
-
object({
|
|
25256
|
-
jobId: string(),
|
|
25257
|
-
taskId: string(),
|
|
25258
|
-
backups: array(object({
|
|
25259
|
-
name: string(),
|
|
25260
|
-
backupPath: string(),
|
|
25261
|
-
livePath: string()
|
|
25262
|
-
})),
|
|
25263
|
-
appliedAtMs: number(),
|
|
25264
|
-
bootAttempts: number(),
|
|
25265
|
-
schemaVersion: literal(1)
|
|
25266
|
-
});
|
|
25267
25374
|
//#endregion
|
|
25268
25375
|
//#region ../system/dist/model-download-service-Cp9f4dk6.mjs
|
|
25269
25376
|
/** Build fetch headers, including HF auth token for huggingface.co URLs */
|