@camstack/types 1.2.401 → 1.2.402

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.
@@ -211,7 +211,7 @@ export { type IOsdProvider, type OsdOverlay, type OsdOverlayKind, OsdOverlayKind
211
211
  export { type IOsdManagerProvider, type OsdNamedTemplate, OsdNamedTemplateSchema, type OsdRenderOutcome, OsdRenderOutcomeEnum, type OsdRenderResult, OsdRenderResultSchema, type OsdSlotBinding, OsdSlotBindingSchema, type OsdSlotView, OsdSlotViewSchema, type OsdSource, type OsdSourceOption, OsdSourceOptionSchema, OsdSourceSchema, type OsdSourceValueType, OsdSourceValueTypeEnum, type OsdTemplateBinding, OsdTemplateBindingSchema, type OsdTemplateFormat, OsdTemplateFormatSchema, type OsdTemplatePick, OsdTemplatePickSchema, type OsdTemplateTokenKind, OsdTemplateTokenKindSchema, osdManagerCapability, } from './osd-manager.cap.js';
212
212
  export { type IPetFeederProvider, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, type PetFeederStatus, PetFeederStatusSchema, petFeederCapability, } from './pet-feeder.cap.js';
213
213
  export { type IPlateGalleryProvider, type PlateInfo, plateGalleryCapability, type Vehicle, type VehicleSampleInfo, } from './plate-gallery.cap.js';
214
- export { type HardwareDecodeAccels, type HardwareEncoderId, type HardwareEncoderProbe, type HardwareEncoders, type IPlatformProbeProvider, platformProbeCapability, } from './platform-probe.cap.js';
214
+ export { type AcceleratorRescan, type HardwareDecodeAccels, type HardwareEncoderId, type HardwareEncoderProbe, type HardwareEncoders, type IPlatformProbeProvider, platformProbeCapability, } from './platform-probe.cap.js';
215
215
  export { type IPowerMeterProvider, type PowerMeterStatus, PowerMeterStatusSchema, powerMeterCapability, } from './power-meter.cap.js';
216
216
  export { type GpsLocation, type IPresenceProvider, type PresenceStatus, PresenceStatusSchema, presenceCapability, } from './presence.cap.js';
217
217
  export { type IPressureSensorProvider, type PressureSensorStatus, PressureSensorStatusSchema, pressureSensorCapability, } from './pressure-sensor.cap.js';
@@ -608,6 +608,11 @@ declare const NodeInferenceDeviceSchema: z.ZodObject<{
608
608
  tflite: "tflite";
609
609
  }>;
610
610
  available: z.ZodBoolean;
611
+ presence: z.ZodOptional<z.ZodEnum<{
612
+ absent: "absent";
613
+ present: "present";
614
+ unknown: "unknown";
615
+ }>>;
611
616
  enabled: z.ZodBoolean;
612
617
  weight: z.ZodNumber;
613
618
  maxSessions: z.ZodNullable<z.ZodNumber>;
@@ -665,6 +670,11 @@ declare const NodeInferenceDevicesSchema: z.ZodObject<{
665
670
  tflite: "tflite";
666
671
  }>;
667
672
  available: z.ZodBoolean;
673
+ presence: z.ZodOptional<z.ZodEnum<{
674
+ absent: "absent";
675
+ present: "present";
676
+ unknown: "unknown";
677
+ }>>;
668
678
  enabled: z.ZodBoolean;
669
679
  weight: z.ZodNumber;
670
680
  maxSessions: z.ZodNullable<z.ZodNumber>;
@@ -1269,6 +1279,11 @@ export declare const pipelineOrchestratorCapability: {
1269
1279
  tflite: "tflite";
1270
1280
  }>;
1271
1281
  available: z.ZodBoolean;
1282
+ presence: z.ZodOptional<z.ZodEnum<{
1283
+ absent: "absent";
1284
+ present: "present";
1285
+ unknown: "unknown";
1286
+ }>>;
1272
1287
  enabled: z.ZodBoolean;
1273
1288
  weight: z.ZodNumber;
1274
1289
  maxSessions: z.ZodNullable<z.ZodNumber>;
@@ -1286,6 +1301,19 @@ export declare const pipelineOrchestratorCapability: {
1286
1301
  }>>;
1287
1302
  }, z.core.$strip>>>;
1288
1303
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1304
+ /**
1305
+ * Delete ONE stored device entry of a node — the "forget" of a device the
1306
+ * node no longer has (D919). Refused unless the node's probe ANSWERED and
1307
+ * did not report the key: a present device is switched off, not forgotten,
1308
+ * and an unreachable node proves nothing about its hardware. The rest of
1309
+ * the node's map is kept as stored.
1310
+ */
1311
+ readonly forgetInferenceDevice: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1312
+ agentNodeId: z.ZodString;
1313
+ deviceKey: z.ZodString;
1314
+ }, z.core.$strip>, z.ZodObject<{
1315
+ success: z.ZodLiteral<true>;
1316
+ }, z.core.$strip>, "mutation">;
1289
1317
  /**
1290
1318
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
1291
1319
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
@@ -121,6 +121,43 @@ declare const HardwareDecodeAccelsSchema: z.ZodObject<{
121
121
  probedAt: z.ZodNumber;
122
122
  }, z.core.$strip>;
123
123
  export type HardwareDecodeAccels = z.infer<typeof HardwareDecodeAccelsSchema>;
124
+ /**
125
+ * The answer of an accelerator rescan (D919): the node's device list after
126
+ * the re-probe, what changed, and the evidence that decided the Coral answer
127
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
128
+ * bus, the installed-delegate fallback, or nothing).
129
+ */
130
+ declare const AcceleratorRescanSchema: z.ZodObject<{
131
+ devices: z.ZodReadonly<z.ZodArray<z.ZodObject<{
132
+ key: z.ZodString;
133
+ backend: z.ZodString;
134
+ device: z.ZodString;
135
+ format: z.ZodEnum<{
136
+ coreml: "coreml";
137
+ gguf: "gguf";
138
+ onnx: "onnx";
139
+ openvino: "openvino";
140
+ pt: "pt";
141
+ tflite: "tflite";
142
+ }>;
143
+ runtime: z.ZodLiteral<"python">;
144
+ score: z.ZodNumber;
145
+ available: z.ZodBoolean;
146
+ }, z.core.$strip>>>;
147
+ appeared: z.ZodReadonly<z.ZodArray<z.ZodString>>;
148
+ disappeared: z.ZodReadonly<z.ZodArray<z.ZodString>>;
149
+ usbBus: z.ZodEnum<{
150
+ observed: "observed";
151
+ unobservable: "unobservable";
152
+ }>;
153
+ decidedBy: z.ZodEnum<{
154
+ "delegate-fallback": "delegate-fallback";
155
+ none: "none";
156
+ pci: "pci";
157
+ "usb-ids": "usb-ids";
158
+ }>;
159
+ }, z.core.$strip>;
160
+ export type AcceleratorRescan = z.infer<typeof AcceleratorRescanSchema>;
124
161
  export declare const platformProbeCapability: {
125
162
  readonly name: 'platform-probe';
126
163
  readonly scope: 'system';
@@ -336,6 +373,43 @@ export declare const platformProbeCapability: {
336
373
  preferred: z.ZodReadonly<z.ZodArray<z.ZodString>>;
337
374
  rationale: z.ZodString;
338
375
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
376
+ /**
377
+ * Re-probe this node's accelerators NOW (Coral USB ids + PCIe apex units;
378
+ * `/sys` and `/dev` reads, no model load) and rebuild the device list that
379
+ * `getCapabilities` serves. The same re-probe runs every 60 s on its own;
380
+ * this is the operator's "rescan inference devices". Target a node with the
381
+ * `{ nodeId }` routing input, like `getCapabilities`.
382
+ */
383
+ readonly rescanAccelerators: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
384
+ devices: z.ZodReadonly<z.ZodArray<z.ZodObject<{
385
+ key: z.ZodString;
386
+ backend: z.ZodString;
387
+ device: z.ZodString;
388
+ format: z.ZodEnum<{
389
+ coreml: "coreml";
390
+ gguf: "gguf";
391
+ onnx: "onnx";
392
+ openvino: "openvino";
393
+ pt: "pt";
394
+ tflite: "tflite";
395
+ }>;
396
+ runtime: z.ZodLiteral<"python">;
397
+ score: z.ZodNumber;
398
+ available: z.ZodBoolean;
399
+ }, z.core.$strip>>>;
400
+ appeared: z.ZodReadonly<z.ZodArray<z.ZodString>>;
401
+ disappeared: z.ZodReadonly<z.ZodArray<z.ZodString>>;
402
+ usbBus: z.ZodEnum<{
403
+ observed: "observed";
404
+ unobservable: "unobservable";
405
+ }>;
406
+ decidedBy: z.ZodEnum<{
407
+ "delegate-fallback": "delegate-fallback";
408
+ none: "none";
409
+ pci: "pci";
410
+ "usb-ids": "usb-ids";
411
+ }>;
412
+ }, z.core.$strip>, "mutation">;
339
413
  };
340
414
  };
341
415
  export type IPlatformProbeProvider = InferProvider<typeof platformProbeCapability>;
package/dist/client.js CHANGED
@@ -25317,6 +25317,13 @@ var TopologyNodeSchema = zod.z.object({
25317
25317
  cpuModel: zod.z.string().nullable(),
25318
25318
  cpuCores: zod.z.number(),
25319
25319
  memoryMB: zod.z.number(),
25320
+ /**
25321
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
25322
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
25323
+ * about whether its hardware is there (a Coral delegate stays installed
25324
+ * after the stick leaves, D919); the live device set is
25325
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
25326
+ */
25320
25327
  engines: zod.z.array(zod.z.string()).readonly(),
25321
25328
  isHub: zod.z.boolean(),
25322
25329
  isOnline: zod.z.boolean(),
@@ -28169,6 +28176,7 @@ function createSystemProxy(api) {
28169
28176
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
28170
28177
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
28171
28178
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
28179
+ forgetInferenceDevice: (input) => dispatch("pipelineOrchestrator", "forgetInferenceDevice", "mutation", input),
28172
28180
  resetNodePipelineDefaults: (input) => dispatch("pipelineOrchestrator", "resetNodePipelineDefaults", "mutation", input),
28173
28181
  planAutoTune: (input) => dispatch("pipelineOrchestrator", "planAutoTune", "query", input),
28174
28182
  applyAutoTune: (input) => dispatch("pipelineOrchestrator", "applyAutoTune", "mutation", input),
package/dist/client.mjs CHANGED
@@ -25316,6 +25316,13 @@ var TopologyNodeSchema = z.object({
25316
25316
  cpuModel: z.string().nullable(),
25317
25317
  cpuCores: z.number(),
25318
25318
  memoryMB: z.number(),
25319
+ /**
25320
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
25321
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
25322
+ * about whether its hardware is there (a Coral delegate stays installed
25323
+ * after the stick leaves, D919); the live device set is
25324
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
25325
+ */
25319
25326
  engines: z.array(z.string()).readonly(),
25320
25327
  isHub: z.boolean(),
25321
25328
  isOnline: z.boolean(),
@@ -28168,6 +28175,7 @@ function createSystemProxy(api) {
28168
28175
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
28169
28176
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
28170
28177
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
28178
+ forgetInferenceDevice: (input) => dispatch("pipelineOrchestrator", "forgetInferenceDevice", "mutation", input),
28171
28179
  resetNodePipelineDefaults: (input) => dispatch("pipelineOrchestrator", "resetNodePipelineDefaults", "mutation", input),
28172
28180
  planAutoTune: (input) => dispatch("pipelineOrchestrator", "planAutoTune", "query", input),
28173
28181
  applyAutoTune: (input) => dispatch("pipelineOrchestrator", "applyAutoTune", "mutation", input),
@@ -7272,6 +7272,13 @@ export type AppRouter = TrpcCoreRouter<{
7272
7272
  output: z.infer<typeof pipelineOrchestratorCapability.methods.getNodeInferenceDevices.output>;
7273
7273
  meta: object;
7274
7274
  }>;
7275
+ forgetInferenceDevice: TRPCMutationProcedure<{
7276
+ input: {
7277
+ [x: string]: unknown;
7278
+ } & z.input<typeof pipelineOrchestratorCapability.methods.forgetInferenceDevice.input>;
7279
+ output: z.infer<typeof pipelineOrchestratorCapability.methods.forgetInferenceDevice.output>;
7280
+ meta: object;
7281
+ }>;
7275
7282
  resetNodePipelineDefaults: TRPCMutationProcedure<{
7276
7283
  input: {
7277
7284
  [x: string]: unknown;
@@ -7777,6 +7784,13 @@ export type AppRouter = TrpcCoreRouter<{
7777
7784
  output: z.infer<typeof platformProbeCapability.methods.resolveHwAccel.output>;
7778
7785
  meta: object;
7779
7786
  }>;
7787
+ rescanAccelerators: TRPCMutationProcedure<{
7788
+ input: {
7789
+ nodeId?: string | undefined;
7790
+ } | undefined;
7791
+ output: z.infer<typeof platformProbeCapability.methods.rescanAccelerators.output>;
7792
+ meta: object;
7793
+ }>;
7780
7794
  }>>;
7781
7795
  powerMeter: TRPCBuiltRouter<{
7782
7796
  ctx: TrpcContext;
@@ -6,7 +6,7 @@
6
6
  * scope+access check inside `protectedProcedure` (see
7
7
  * `server/backend/src/api/trpc/trpc.middleware.ts`).
8
8
  *
9
- * Coverage: 1382 method paths across 179 capabilities.
9
+ * Coverage: 1384 method paths across 179 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -98,7 +98,7 @@ export interface SystemProxy {
98
98
  readonly oidcConnections: Pick<InferProvider<typeof oidcConnectionsCapability>, 'connectionFormSchema' | 'listConnections' | 'createConnection' | 'updateConnection' | 'deleteConnection'>;
99
99
  readonly osdManager: Pick<InferProvider<typeof osdManagerCapability>, 'getConditionSupport' | 'copyDeviceConfiguration' | 'listTemplates' | 'upsertTemplate' | 'deleteTemplate'>;
100
100
  readonly pipelineExecutor: Pick<InferProvider<typeof pipelineExecutorCapability>, 'getAvailableEngines' | 'getSelectedEngine' | 'getDefaultSteps' | 'getEngineProvisioning' | 'getVideoPipelineSteps' | 'setVideoPipelineSteps' | 'clearDeviceOverrides' | 'clearModelBoundDeviceOverrides' | 'getInferenceDeviceHealth' | 'rearmInferenceDevice' | 'getSchema' | 'getGlobalSteps' | 'getGlobalPipelineConfig' | 'getOrchestratorConfigSchema' | 'validatePipeline' | 'getCapabilities' | 'getAddonModels' | 'downloadModel' | 'deleteModel' | 'cacheFrameInPool' | 'inferCached' | 'uncacheFrame' | 'getEffectiveTuning' | 'listLoadedEngines' | 'spinEngine' | 'killEngine' | 'listReferenceImages' | 'getReferenceImage' | 'getReferenceAudioFiles' | 'getReferenceAudio' | 'getAudioCapabilities' | 'runAudioTest' | 'getDetectionConfigSchema'>;
101
- readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'requestOccupancyLook' | 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getClusterModelChoice' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getIngestOwner' | 'getAudioNodeLoad' | 'getAudioAssignments' | 'getAgentSettings' | 'listAgentSettings' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentCapabilities' | 'setAgentDecodeLimits' | 'setAgentReachableHost' | 'setAgentInferenceDevices' | 'getNodeInferenceDevices' | 'resetNodePipelineDefaults' | 'planAutoTune' | 'applyAutoTune' | 'setLoadBalancingShares' | 'getPlacementStats' | 'suggestShares' | 'getEffectiveShares' | 'setShareSource' | 'getNodeBenchmarkPreflight' | 'startNodeBenchmark' | 'getNodeBenchmarkStatus' | 'abortNodeBenchmark' | 'getNodeBenchmarkCandidates' | 'listNodeBenchmarkResults' | 'deleteNodeBenchmarkResult' | 'getCameraStatuses' | 'setCameraSensors' | 'reconcileFromDisk' | 'getReconcileFromDiskStatus'>;
101
+ readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'requestOccupancyLook' | 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getClusterModelChoice' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getIngestOwner' | 'getAudioNodeLoad' | 'getAudioAssignments' | 'getAgentSettings' | 'listAgentSettings' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentCapabilities' | 'setAgentDecodeLimits' | 'setAgentReachableHost' | 'setAgentInferenceDevices' | 'getNodeInferenceDevices' | 'forgetInferenceDevice' | 'resetNodePipelineDefaults' | 'planAutoTune' | 'applyAutoTune' | 'setLoadBalancingShares' | 'getPlacementStats' | 'suggestShares' | 'getEffectiveShares' | 'setShareSource' | 'getNodeBenchmarkPreflight' | 'startNodeBenchmark' | 'getNodeBenchmarkStatus' | 'abortNodeBenchmark' | 'getNodeBenchmarkCandidates' | 'listNodeBenchmarkResults' | 'deleteNodeBenchmarkResult' | 'getCameraStatuses' | 'setCameraSensors' | 'reconcileFromDisk' | 'getReconcileFromDiskStatus'>;
102
102
  readonly pipelineRunner: Pick<InferProvider<typeof pipelineRunnerCapability>, 'attachCamera' | 'reportMotion' | 'getLocalLoad' | 'getLocalMetrics' | 'getAllCameraMetrics' | 'getLocalCameras' | 'getNativeCrop' | 'runStatelessStep' | 'startNodeBench' | 'getNodeBenchStatus' | 'abortNodeBench'>;
103
103
  readonly plateGallery: Pick<InferProvider<typeof plateGalleryCapability>, 'getPlateMedia' | 'searchPlates' | 'suggestPlateClusters' | 'correctPlateText' | 'deletePlate' | 'listVehicles' | 'createVehicle' | 'renameVehicle' | 'deleteVehicle' | 'listVehicleSamples' | 'removeVehicleSample' | 'assignPlate' | 'unassignPlate' | 'assignPlates' | 'unassignPlates'>;
104
104
  readonly recordEntries: Pick<InferProvider<typeof recordEntriesCapability>, 'listEntryKinds' | 'listEntries' | 'putEntry' | 'deleteEntry'>;
package/dist/index.js CHANGED
@@ -54125,6 +54125,19 @@ var NodeInferenceDeviceSchema = zod.z.object({
54125
54125
  /** Whether the node's live probe reports the device as usable right now. */
54126
54126
  available: zod.z.boolean(),
54127
54127
  /**
54128
+ * Is the device on the node at all (D919)? `present` — the live probe
54129
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
54130
+ * its stored settings remain (unplugged, moved to another node): never
54131
+ * eligible, whatever its stored `enabled`, and forgettable with
54132
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
54133
+ * claimed (D315). Optional only for an orchestrator older than the field.
54134
+ */
54135
+ presence: zod.z.enum([
54136
+ "present",
54137
+ "absent",
54138
+ "unknown"
54139
+ ]).optional(),
54140
+ /**
54128
54141
  * Whether this device participates in dispatch. AUTO default (spec C2):
54129
54142
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
54130
54143
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -54562,6 +54575,20 @@ var pipelineOrchestratorCapability = {
54562
54575
  */
54563
54576
  getNodeInferenceDevices: require_sleep.method(zod.z.object({ nodeId: zod.z.string() }), NodeInferenceDevicesSchema),
54564
54577
  /**
54578
+ * Delete ONE stored device entry of a node — the "forget" of a device the
54579
+ * node no longer has (D919). Refused unless the node's probe ANSWERED and
54580
+ * did not report the key: a present device is switched off, not forgotten,
54581
+ * and an unreachable node proves nothing about its hardware. The rest of
54582
+ * the node's map is kept as stored.
54583
+ */
54584
+ forgetInferenceDevice: require_sleep.method(zod.z.object({
54585
+ agentNodeId: zod.z.string(),
54586
+ deviceKey: zod.z.string()
54587
+ }), zod.z.object({ success: zod.z.literal(true) }), {
54588
+ kind: "mutation",
54589
+ auth: "admin"
54590
+ }),
54591
+ /**
54565
54592
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
54566
54593
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
54567
54594
  * dead persisted step-tree seed nothing in the live path read):
@@ -65314,7 +65341,7 @@ var motionTriggerCapability = {
65314
65341
  enabled: zod.z.boolean()
65315
65342
  }), zod.z.void(), {
65316
65343
  kind: "mutation",
65317
- auth: "admin"
65344
+ auth: "protected"
65318
65345
  }) },
65319
65346
  events: { onMotionTriggerChanged: { data: zod.z.object({
65320
65347
  deviceId: zod.z.number(),
@@ -66244,6 +66271,13 @@ var TopologyNodeSchema = zod.z.object({
66244
66271
  cpuModel: zod.z.string().nullable(),
66245
66272
  cpuCores: zod.z.number(),
66246
66273
  memoryMB: zod.z.number(),
66274
+ /**
66275
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
66276
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
66277
+ * about whether its hardware is there (a Coral delegate stays installed
66278
+ * after the stick leaves, D919); the live device set is
66279
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
66280
+ */
66247
66281
  engines: zod.z.array(zod.z.string()).readonly(),
66248
66282
  isHub: zod.z.boolean(),
66249
66283
  isOnline: zod.z.boolean(),
@@ -67623,6 +67657,24 @@ var ResolvedInferenceConfigSchema = zod.z.object({
67623
67657
  format: ModelFormatSchema,
67624
67658
  reason: zod.z.string()
67625
67659
  });
67660
+ /**
67661
+ * The answer of an accelerator rescan (D919): the node's device list after
67662
+ * the re-probe, what changed, and the evidence that decided the Coral answer
67663
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
67664
+ * bus, the installed-delegate fallback, or nothing).
67665
+ */
67666
+ var AcceleratorRescanSchema = zod.z.object({
67667
+ devices: zod.z.array(InferenceDeviceDescriptorSchema).readonly(),
67668
+ appeared: zod.z.array(zod.z.string()).readonly(),
67669
+ disappeared: zod.z.array(zod.z.string()).readonly(),
67670
+ usbBus: zod.z.enum(["observed", "unobservable"]),
67671
+ decidedBy: zod.z.enum([
67672
+ "usb-ids",
67673
+ "pci",
67674
+ "delegate-fallback",
67675
+ "none"
67676
+ ])
67677
+ });
67626
67678
  var platformProbeCapability = {
67627
67679
  name: "platform-probe",
67628
67680
  scope: "system",
@@ -67631,7 +67683,18 @@ var platformProbeCapability = {
67631
67683
  getCapabilities: require_sleep.method(zod.z.void(), PlatformCapabilitiesSchema),
67632
67684
  getHardware: require_sleep.method(zod.z.void(), HardwareInfoSchema),
67633
67685
  resolveInferenceConfig: require_sleep.method(zod.z.object({ requirements: zod.z.array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema),
67634
- resolveHwAccel: require_sleep.method(zod.z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema)
67686
+ resolveHwAccel: require_sleep.method(zod.z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema),
67687
+ /**
67688
+ * Re-probe this node's accelerators NOW (Coral USB ids + PCIe apex units;
67689
+ * `/sys` and `/dev` reads, no model load) and rebuild the device list that
67690
+ * `getCapabilities` serves. The same re-probe runs every 60 s on its own;
67691
+ * this is the operator's "rescan inference devices". Target a node with the
67692
+ * `{ nodeId }` routing input, like `getCapabilities`.
67693
+ */
67694
+ rescanAccelerators: require_sleep.method(zod.z.void(), AcceleratorRescanSchema, {
67695
+ kind: "mutation",
67696
+ auth: "admin"
67697
+ })
67635
67698
  }
67636
67699
  };
67637
67700
  //#endregion
@@ -83577,6 +83640,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
83577
83640
  addonId: null,
83578
83641
  access: "delete"
83579
83642
  },
83643
+ "pipelineOrchestrator.forgetInferenceDevice": {
83644
+ capName: "pipeline-orchestrator",
83645
+ capScope: "system",
83646
+ addonId: null,
83647
+ access: "delete"
83648
+ },
83580
83649
  "pipelineOrchestrator.getAgentLoad": {
83581
83650
  capName: "pipeline-orchestrator",
83582
83651
  capScope: "system",
@@ -84153,6 +84222,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
84153
84222
  addonId: null,
84154
84223
  access: "view"
84155
84224
  },
84225
+ "platformProbe.rescanAccelerators": {
84226
+ capName: "platform-probe",
84227
+ capScope: "system",
84228
+ addonId: null,
84229
+ access: "create"
84230
+ },
84156
84231
  "platformProbe.resolveHwAccel": {
84157
84232
  capName: "platform-probe",
84158
84233
  capScope: "system",
@@ -94502,6 +94577,7 @@ function createSystemProxy(api) {
94502
94577
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
94503
94578
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
94504
94579
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
94580
+ forgetInferenceDevice: (input) => dispatch("pipelineOrchestrator", "forgetInferenceDevice", "mutation", input),
94505
94581
  resetNodePipelineDefaults: (input) => dispatch("pipelineOrchestrator", "resetNodePipelineDefaults", "mutation", input),
94506
94582
  planAutoTune: (input) => dispatch("pipelineOrchestrator", "planAutoTune", "query", input),
94507
94583
  applyAutoTune: (input) => dispatch("pipelineOrchestrator", "applyAutoTune", "mutation", input),
@@ -101645,7 +101721,8 @@ function resolveEffectiveShares(input) {
101645
101721
  const nodes = input.nodeIds.map((nodeId) => {
101646
101722
  const eligibleKeys = new Set(input.eligibleDevices[nodeId] ?? []);
101647
101723
  const named = weights.devices[nodeId] ?? {};
101648
- const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].toSorted();
101724
+ const absent = new Set(input.absentDevices?.[nodeId] ?? []);
101725
+ const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].filter((k) => !absent.has(k)).toSorted();
101649
101726
  const perDevice = {};
101650
101727
  for (const key of keys) perDevice[key] = positive(named[key]);
101651
101728
  if (keys.length > 0) deviceWeights[nodeId] = perDevice;
package/dist/index.mjs CHANGED
@@ -54124,6 +54124,19 @@ var NodeInferenceDeviceSchema = z.object({
54124
54124
  /** Whether the node's live probe reports the device as usable right now. */
54125
54125
  available: z.boolean(),
54126
54126
  /**
54127
+ * Is the device on the node at all (D919)? `present` — the live probe
54128
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
54129
+ * its stored settings remain (unplugged, moved to another node): never
54130
+ * eligible, whatever its stored `enabled`, and forgettable with
54131
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
54132
+ * claimed (D315). Optional only for an orchestrator older than the field.
54133
+ */
54134
+ presence: z.enum([
54135
+ "present",
54136
+ "absent",
54137
+ "unknown"
54138
+ ]).optional(),
54139
+ /**
54127
54140
  * Whether this device participates in dispatch. AUTO default (spec C2):
54128
54141
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
54129
54142
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -54561,6 +54574,20 @@ var pipelineOrchestratorCapability = {
54561
54574
  */
54562
54575
  getNodeInferenceDevices: method(z.object({ nodeId: z.string() }), NodeInferenceDevicesSchema),
54563
54576
  /**
54577
+ * Delete ONE stored device entry of a node — the "forget" of a device the
54578
+ * node no longer has (D919). Refused unless the node's probe ANSWERED and
54579
+ * did not report the key: a present device is switched off, not forgotten,
54580
+ * and an unreachable node proves nothing about its hardware. The rest of
54581
+ * the node's map is kept as stored.
54582
+ */
54583
+ forgetInferenceDevice: method(z.object({
54584
+ agentNodeId: z.string(),
54585
+ deviceKey: z.string()
54586
+ }), z.object({ success: z.literal(true) }), {
54587
+ kind: "mutation",
54588
+ auth: "admin"
54589
+ }),
54590
+ /**
54564
54591
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
54565
54592
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
54566
54593
  * dead persisted step-tree seed nothing in the live path read):
@@ -65313,7 +65340,7 @@ var motionTriggerCapability = {
65313
65340
  enabled: z.boolean()
65314
65341
  }), z.void(), {
65315
65342
  kind: "mutation",
65316
- auth: "admin"
65343
+ auth: "protected"
65317
65344
  }) },
65318
65345
  events: { onMotionTriggerChanged: { data: z.object({
65319
65346
  deviceId: z.number(),
@@ -66243,6 +66270,13 @@ var TopologyNodeSchema = z.object({
66243
66270
  cpuModel: z.string().nullable(),
66244
66271
  cpuCores: z.number(),
66245
66272
  memoryMB: z.number(),
66273
+ /**
66274
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
66275
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
66276
+ * about whether its hardware is there (a Coral delegate stays installed
66277
+ * after the stick leaves, D919); the live device set is
66278
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
66279
+ */
66246
66280
  engines: z.array(z.string()).readonly(),
66247
66281
  isHub: z.boolean(),
66248
66282
  isOnline: z.boolean(),
@@ -67622,6 +67656,24 @@ var ResolvedInferenceConfigSchema = z.object({
67622
67656
  format: ModelFormatSchema,
67623
67657
  reason: z.string()
67624
67658
  });
67659
+ /**
67660
+ * The answer of an accelerator rescan (D919): the node's device list after
67661
+ * the re-probe, what changed, and the evidence that decided the Coral answer
67662
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
67663
+ * bus, the installed-delegate fallback, or nothing).
67664
+ */
67665
+ var AcceleratorRescanSchema = z.object({
67666
+ devices: z.array(InferenceDeviceDescriptorSchema).readonly(),
67667
+ appeared: z.array(z.string()).readonly(),
67668
+ disappeared: z.array(z.string()).readonly(),
67669
+ usbBus: z.enum(["observed", "unobservable"]),
67670
+ decidedBy: z.enum([
67671
+ "usb-ids",
67672
+ "pci",
67673
+ "delegate-fallback",
67674
+ "none"
67675
+ ])
67676
+ });
67625
67677
  var platformProbeCapability = {
67626
67678
  name: "platform-probe",
67627
67679
  scope: "system",
@@ -67630,7 +67682,18 @@ var platformProbeCapability = {
67630
67682
  getCapabilities: method(z.void(), PlatformCapabilitiesSchema),
67631
67683
  getHardware: method(z.void(), HardwareInfoSchema),
67632
67684
  resolveInferenceConfig: method(z.object({ requirements: z.array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema),
67633
- resolveHwAccel: method(z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema)
67685
+ resolveHwAccel: method(z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema),
67686
+ /**
67687
+ * Re-probe this node's accelerators NOW (Coral USB ids + PCIe apex units;
67688
+ * `/sys` and `/dev` reads, no model load) and rebuild the device list that
67689
+ * `getCapabilities` serves. The same re-probe runs every 60 s on its own;
67690
+ * this is the operator's "rescan inference devices". Target a node with the
67691
+ * `{ nodeId }` routing input, like `getCapabilities`.
67692
+ */
67693
+ rescanAccelerators: method(z.void(), AcceleratorRescanSchema, {
67694
+ kind: "mutation",
67695
+ auth: "admin"
67696
+ })
67634
67697
  }
67635
67698
  };
67636
67699
  //#endregion
@@ -83576,6 +83639,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
83576
83639
  addonId: null,
83577
83640
  access: "delete"
83578
83641
  },
83642
+ "pipelineOrchestrator.forgetInferenceDevice": {
83643
+ capName: "pipeline-orchestrator",
83644
+ capScope: "system",
83645
+ addonId: null,
83646
+ access: "delete"
83647
+ },
83579
83648
  "pipelineOrchestrator.getAgentLoad": {
83580
83649
  capName: "pipeline-orchestrator",
83581
83650
  capScope: "system",
@@ -84152,6 +84221,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
84152
84221
  addonId: null,
84153
84222
  access: "view"
84154
84223
  },
84224
+ "platformProbe.rescanAccelerators": {
84225
+ capName: "platform-probe",
84226
+ capScope: "system",
84227
+ addonId: null,
84228
+ access: "create"
84229
+ },
84155
84230
  "platformProbe.resolveHwAccel": {
84156
84231
  capName: "platform-probe",
84157
84232
  capScope: "system",
@@ -94501,6 +94576,7 @@ function createSystemProxy(api) {
94501
94576
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
94502
94577
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
94503
94578
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
94579
+ forgetInferenceDevice: (input) => dispatch("pipelineOrchestrator", "forgetInferenceDevice", "mutation", input),
94504
94580
  resetNodePipelineDefaults: (input) => dispatch("pipelineOrchestrator", "resetNodePipelineDefaults", "mutation", input),
94505
94581
  planAutoTune: (input) => dispatch("pipelineOrchestrator", "planAutoTune", "query", input),
94506
94582
  applyAutoTune: (input) => dispatch("pipelineOrchestrator", "applyAutoTune", "mutation", input),
@@ -101644,7 +101720,8 @@ function resolveEffectiveShares(input) {
101644
101720
  const nodes = input.nodeIds.map((nodeId) => {
101645
101721
  const eligibleKeys = new Set(input.eligibleDevices[nodeId] ?? []);
101646
101722
  const named = weights.devices[nodeId] ?? {};
101647
- const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].toSorted();
101723
+ const absent = new Set(input.absentDevices?.[nodeId] ?? []);
101724
+ const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].filter((k) => !absent.has(k)).toSorted();
101648
101725
  const perDevice = {};
101649
101726
  for (const key of keys) perDevice[key] = positive(named[key]);
101650
101727
  if (keys.length > 0) deviceWeights[nodeId] = perDevice;
@@ -26,6 +26,12 @@ export interface EffectiveSharesInput {
26
26
  readonly eligibleNodes: readonly string[];
27
27
  /** nodeId → device keys that can take sessions; a node absent here lists none. */
28
28
  readonly eligibleDevices: Readonly<Record<string, readonly string[]>>;
29
+ /**
30
+ * nodeId → device keys the node's probe answered WITHOUT (D919): stored
31
+ * weights survive a device that left, but it takes no share — neither set
32
+ * nor effective — and the election's weights never name it.
33
+ */
34
+ readonly absentDevices?: Readonly<Record<string, readonly string[]>>;
29
35
  readonly policy?: SessionPlacementPolicy;
30
36
  readonly computedAt?: number | null;
31
37
  readonly trigger?: string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.401",
3
+ "version": "1.2.402",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",