@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.
@@ -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(), PipelineEngineChoiceSchema, {
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(["runtime", "warm-override"]),
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 AgentAddonConfigSchema = object({
16797
- enabled: boolean(),
16873
+ var DeviceStepConfigSchema = object({
16798
16874
  modelId: string().optional(),
16799
- settings: record(string(), unknown()).readonly()
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
- stepOverridesByAgent: record(string(), record(string(), CameraStepOverridePatchSchema)).optional(),
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(_void(), object({ migrated: number() }), {
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({ agentNodeId: string() }), 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, phase 2: hub + docker
17194
- * agents).
17332
+ * package lifecycle (runtime-updatable node packages).
17195
17333
  *
17196
- * Each node's root package (`@camstack/server` on the hub, `@camstack/agent`
17197
- * on agents) carries the whole software stack in its npm dep tree, so ONE
17198
- * version describes the node. Updates install into
17199
- * `<dataDir>/server-root/versions/<v>/` and apply on restart via the baked
17200
- * starter (probation boot + auto-rollback to N-1).
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` on the hub,
19368
- * `@camstack/agent` on agents) as reported by its `registerNode` manifest —
19369
- * version visibility for the Server management surface. Nullable: offline
19370
- * rows and pre-phase-2 nodes report none.
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.setAgentAddonDefaults": {
23762
+ "pipelineOrchestrator.setAgentCapabilities": {
23636
23763
  capName: "pipeline-orchestrator",
23637
23764
  capScope: "system",
23638
23765
  addonId: null,
23639
23766
  access: "create"
23640
23767
  },
23641
- "pipelineOrchestrator.setAgentCapabilities": {
23768
+ "pipelineOrchestrator.setAgentDetectWeight": {
23642
23769
  capName: "pipeline-orchestrator",
23643
23770
  capScope: "system",
23644
23771
  addonId: null,
23645
23772
  access: "create"
23646
23773
  },
23647
- "pipelineOrchestrator.setAgentDetectWeight": {
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 */