@camstack/system 1.2.471 → 1.2.472

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.
Files changed (90) hide show
  1. package/dist/addon-runner.js +202 -8
  2. package/dist/addon-runner.mjs +203 -9
  3. package/dist/addon-utils.mjs +1 -1
  4. package/dist/{agent-https-DHBvFZJS.mjs → agent-https-JhvY1axF.mjs} +1 -1
  5. package/dist/{agent-https-bH6bKDeK.js → agent-https-bnyFRK7Y.js} +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +4 -4
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +5 -5
  10. package/dist/builtins/alerts/alerts.addon.js +1 -1
  11. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  12. package/dist/builtins/autotrack/index.js +1 -1
  13. package/dist/builtins/autotrack/index.mjs +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +5 -5
  16. package/dist/builtins/calendars/calendars.addon.js +1 -1
  17. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  18. package/dist/builtins/camera-grid/index.js +1 -1
  19. package/dist/builtins/camera-grid/index.mjs +1 -1
  20. package/dist/builtins/composer/composer.addon.js +2 -2
  21. package/dist/builtins/composer/composer.addon.mjs +2 -2
  22. package/dist/builtins/console-logging/index.js +1 -1
  23. package/dist/builtins/console-logging/index.mjs +1 -1
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  26. package/dist/builtins/device-history/device-history.addon.js +1 -1
  27. package/dist/builtins/device-history/device-history.addon.mjs +1 -1
  28. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  29. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  30. package/dist/builtins/hub-forwarder/index.js +1 -1
  31. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  32. package/dist/builtins/keychain/index.js +3 -3
  33. package/dist/builtins/keychain/index.mjs +3 -3
  34. package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +9 -25
  35. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +240 -39
  36. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +237 -38
  37. package/dist/builtins/liveness-monitor/liveness-reporter.d.ts +28 -0
  38. package/dist/builtins/liveness-monitor/storage-root-access.d.ts +53 -0
  39. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  40. package/dist/builtins/local-auth/local-auth.addon.mjs +5 -5
  41. package/dist/builtins/local-network/local-network.addon.js +2 -2
  42. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  43. package/dist/builtins/loki-logging/index.js +1 -1
  44. package/dist/builtins/loki-logging/index.mjs +1 -1
  45. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  46. package/dist/builtins/native-metrics/native-metrics.addon.mjs +10 -10
  47. package/dist/builtins/platform-probe/index.js +1 -1
  48. package/dist/builtins/platform-probe/index.mjs +8 -8
  49. package/dist/builtins/record-entries/index.js +1 -1
  50. package/dist/builtins/record-entries/index.mjs +1 -1
  51. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  52. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  53. package/dist/builtins/snapshot/index.js +1 -1
  54. package/dist/builtins/snapshot/index.mjs +1 -1
  55. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +20 -20
  57. package/dist/builtins/sqlite-storage/index.js +1 -1
  58. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  59. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  60. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  61. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  62. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  63. package/dist/builtins/system-config/system-config.addon.js +3 -3
  64. package/dist/builtins/system-config/system-config.addon.mjs +115 -115
  65. package/dist/builtins/winston-logging/index.js +1 -1
  66. package/dist/builtins/winston-logging/index.mjs +1 -1
  67. package/dist/{composition-sources-DRw_vBKH.mjs → composition-sources-BY6rFuAE.mjs} +1 -1
  68. package/dist/{composition-sources-B5uJZXZ1.js → composition-sources-D3h-tNoJ.js} +1 -1
  69. package/dist/{constants-CToE4OFp.js → constants-CqbO6e9i.js} +1 -1
  70. package/dist/{constants-5lA8Z9d8.mjs → constants-zBiEodEM.mjs} +1 -1
  71. package/dist/{coral-accelerators-BW3OcrLD.mjs → coral-accelerators-DBlgWB8k.mjs} +6 -6
  72. package/dist/{custom-action-registry-BGYDjTqY.mjs → custom-action-registry-DZSCLBuT.mjs} +37 -37
  73. package/dist/{device-ca-URrs1lxK.mjs → device-ca-BWTWWBcc.mjs} +1 -1
  74. package/dist/{device-ca-nOCYVFS4.js → device-ca-CfiIg3a9.js} +1 -1
  75. package/dist/{dist-5XUG7iYJ.mjs → dist-CdFkkmXW.mjs} +100 -254
  76. package/dist/{dist-BjcWEfRy.js → dist-DX5Fu3mV.js} +100 -254
  77. package/dist/file-host-worker.js +1 -1
  78. package/dist/file-host-worker.mjs +1 -1
  79. package/dist/{hub-mdns-ciao-vEWhJ_SD.js → hub-mdns-ciao-C174UDzO.js} +2 -2
  80. package/dist/{hub-mdns-ciao-zD3JojB_.mjs → hub-mdns-ciao-CYp1Gipm.mjs} +2 -2
  81. package/dist/index.js +234 -16
  82. package/dist/index.mjs +453 -235
  83. package/dist/kernel/hwaccel/hwaccel-resolver.d.ts +24 -4
  84. package/dist/kernel/hwaccel/vaapi-init-probe.d.ts +29 -0
  85. package/dist/kernel/moleculer/runner-process-group.d.ts +4 -0
  86. package/dist/{restore-archive-B64m2nAj.js → restore-archive-B2jIFfu_.js} +1 -1
  87. package/dist/{restore-archive-CN1pJTRn.mjs → restore-archive-BX0gaKtG.mjs} +94 -94
  88. package/dist/{wal-maintenance-BNXVX-ot.js → wal-maintenance-Dxqd5igw.js} +0 -0
  89. package/dist/{wal-maintenance-Bl2I-ZcR.mjs → wal-maintenance-KHzJXlF2.mjs} +0 -0
  90. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import "node:crypto";
3
- //#region ../types/dist/event-category-BfJwUd2S.mjs
3
+ //#region ../types/dist/event-category-fDPduoeC.mjs
4
4
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
5
5
  EventCategory["SystemBoot"] = "system.boot";
6
6
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -327,9 +327,8 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
327
327
  EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
328
328
  /**
329
329
  * Per-camera pipeline config was mutated by the orchestrator
330
- * (3-level settings change via `setAgentAddonDefaults` /
331
- * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
332
- * pipeline-scoped `applyDeviceSettingsPatch`). Orchestrator
330
+ * (a settings change via `setAgentInferenceDevices` /
331
+ * `setCameraStepToggle` / `setCameraStepSettings`). Orchestrator
333
332
  * subscribes to its own emission to hot-reload the assigned runner
334
333
  * via `attachCamera` so the next frame executes against the new
335
334
  * engine/steps without waiting for a rebalance or the next
@@ -762,7 +761,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
762
761
  return EventCategory;
763
762
  }({});
764
763
  //#endregion
765
- //#region ../types/dist/sleep-6AqUnQIT.mjs
764
+ //#region ../types/dist/sleep-CHIEEJkY.mjs
766
765
  /**
767
766
  * The audio chunk plane's byte format, and the ONE expansion from a coded
768
767
  * window to float samples (D455).
@@ -8096,13 +8095,22 @@ var BirthDecisionRecordSchema = z.object({
8096
8095
  decidedByBirthEvidence: z.boolean(),
8097
8096
  /** Best class-compatible crop score, or `null` when nothing compatible was
8098
8097
  * found — deliberately not 0, which would be a measurement that never was.
8099
- * Includes a box the detector's own per-class floor refused (reason
8100
- * `below-detector-floor`, D922): that box never confirms, but it is the
8101
- * score the crop really held. */
8098
+ * Includes a box the detector's own per-class floor refused (D922): since
8099
+ * D925 the gate's bar, not that floor, decides whether it confirms. */
8102
8100
  bestScore: z.number().nullable(),
8103
8101
  /** The bar this candidate actually faced (the phantom-cell hook may raise it). */
8104
8102
  appliedMinConfidence: z.number().nullable(),
8105
8103
  /**
8104
+ * The detector the gate re-judged the birth WITH (D925): the session's own
8105
+ * root model, inference-device pool and node — never a node default. `null`
8106
+ * when the frame named no session detector or no gate ran, and on rows
8107
+ * written before D925. A `session-device-unavailable` row names the session
8108
+ * detector that could not be reached.
8109
+ */
8110
+ detectorModelId: z.string().nullable().default(null),
8111
+ detectorDeviceKey: z.string().nullable().default(null),
8112
+ detectorNodeId: z.string().nullable().default(null),
8113
+ /**
8106
8114
  * The track's own `firstSeen` — the candidate's first frame, which is where
8107
8115
  * the timeline starts. `null` for a suppressed birth, which has no track.
8108
8116
  */
@@ -51443,7 +51451,6 @@ var PipelineAddonSchemaSchema = z.object({
51443
51451
  defaultModelId: z.string(),
51444
51452
  defaultModelIdByFormat: z.record(z.string(), z.string()).optional(),
51445
51453
  enabledByDefault: z.boolean().optional(),
51446
- backfillIntoExistingOverrides: z.boolean().optional(),
51447
51454
  defaultConfidence: z.number(),
51448
51455
  group: z.string().optional(),
51449
51456
  configSchema: z.array(ConfigFieldBridge).readonly().optional()
@@ -51570,7 +51577,6 @@ var AudioTestResultSchema = z.object({
51570
51577
  error: z.string().optional(),
51571
51578
  frame: z.custom().optional()
51572
51579
  });
51573
- var PipelineConfigBridge = z.custom();
51574
51580
  var ConfigUISchemaBridge = z.custom();
51575
51581
  var ConfigUISchemaNullableBridge = z.custom();
51576
51582
  var InferenceCapabilitiesBridge = z.custom();
@@ -51595,7 +51601,6 @@ var pipelineExecutorCapability = {
51595
51601
  methods: {
51596
51602
  getAvailableEngines: method(z.void(), z.array(PipelineEngineChoiceSchema)),
51597
51603
  getSelectedEngine: method(z.void(), PipelineEngineChoiceSchema),
51598
- getDefaultSteps: method(PipelineEngineChoiceSchema, z.array(PipelineDefaultStepSchema)),
51599
51604
  /**
51600
51605
  * Per-node detection-engine provisioning snapshot. Returns the live
51601
51606
  * state of the lazy runtime-provisioning machine on `nodeId`
@@ -51617,54 +51622,6 @@ var pipelineExecutorCapability = {
51617
51622
  auth: "admin"
51618
51623
  }),
51619
51624
  /**
51620
- * Clear THIS node's executor-side PER-DEVICE settings stores (the
51621
- * per-camera step overrides the object-detection root reads via
51622
- * `applyDeviceOverridesToTree`). `nodeId` is the ROUTING key — the
51623
- * generated cap-router strips it (default `nodeIdMode: 'routing'`) and
51624
- * dispatches to that node, so the provider method runs ON the target
51625
- * node and receives no `nodeId`.
51626
- *
51627
- * This is the slimmed executor leg of the orchestrator's
51628
- * `resetNodePipelineDefaults` flow (which owns the real reset: node
51629
- * addonDefaults pins + per-camera orchestrator overrides). The legacy
51630
- * `resetToDefault` — which reset a persisted global step-tree seed
51631
- * nothing in the live per-camera path read — was removed together with
51632
- * that seed.
51633
- */
51634
- clearDeviceOverrides: method(z.object({ nodeId: z.string() }), z.object({
51635
- success: z.literal(true),
51636
- clearedDevices: z.number()
51637
- }), {
51638
- kind: "mutation",
51639
- auth: "admin"
51640
- }),
51641
- /**
51642
- * Auto tune (D745): the MODEL-BOUND thresholds (`bindsToModel` keys of
51643
- * the object-detection root, and their binding keys) stored in THIS node's
51644
- * per-camera detector settings — and, unless `dryRun`, remove them so the
51645
- * running model's own defaults apply. Every other key of a camera's store
51646
- * is kept. `nodeId` is the ROUTING key. `deviceIds` absent ⇒ every camera
51647
- * with a store. A camera whose store could not be read is `refused`, never
51648
- * reported as clean.
51649
- */
51650
- clearModelBoundDeviceOverrides: method(z.object({
51651
- nodeId: z.string(),
51652
- deviceIds: z.array(z.number()).readonly().optional(),
51653
- dryRun: z.boolean()
51654
- }), z.object({
51655
- entries: z.array(z.object({
51656
- deviceId: z.number(),
51657
- keys: z.array(z.string()).readonly()
51658
- })).readonly(),
51659
- refused: z.array(z.object({
51660
- deviceId: z.number(),
51661
- reason: z.string()
51662
- })).readonly()
51663
- }), {
51664
- kind: "mutation",
51665
- auth: "admin"
51666
- }),
51667
- /**
51668
51625
  * Which of THIS node's inference devices the executor currently refuses,
51669
51626
  * and why. `nodeId` is the ROUTING key (stripped by the generated router).
51670
51627
  *
@@ -51719,8 +51676,6 @@ var pipelineExecutorCapability = {
51719
51676
  auth: "admin"
51720
51677
  }),
51721
51678
  getSchema: method(z.void(), PipelineSchemaSchema),
51722
- getGlobalSteps: method(z.void(), z.array(PipelineDefaultStepSchema).readonly().nullable()),
51723
- getGlobalPipelineConfig: method(z.void(), PipelineConfigBridge),
51724
51679
  getOrchestratorConfigSchema: method(z.void(), ConfigUISchemaBridge),
51725
51680
  /**
51726
51681
  * Gate B (pre-init config-correctness gate). PURE COMPUTE against this
@@ -52130,40 +52085,20 @@ var NodeDeviceChangeSchema = z.object({
52130
52085
  keys: z.array(z.string()).readonly()
52131
52086
  })).readonly()
52132
52087
  });
52133
- var CameraOverrideClearSchema = z.object({
52134
- deviceId: z.number(),
52135
- source: z.enum(["step-override", "wholesale"]),
52088
+ /**
52089
+ * Every model and model-bound threshold lives on the accelerator that runs it
52090
+ * (D927), so the plan writes node / device entries only — there is no camera
52091
+ * layer for it to clear.
52092
+ */
52093
+ var AutoTuneWarningSchema = z.discriminatedUnion("kind", [z.object({
52094
+ kind: z.literal("custom-pin-kept"),
52136
52095
  nodeId: z.string(),
52137
- deviceKey: z.string().nullable(),
52138
- stepId: z.string(),
52139
- modelIdBefore: z.string().nullable(),
52140
- keys: z.array(z.string()).readonly()
52141
- });
52142
- var DetectorStoreClearSchema = z.object({
52143
- deviceId: z.number(),
52144
- keys: z.array(z.string()).readonly()
52145
- });
52146
- var AutoTuneWarningSchema = z.discriminatedUnion("kind", [
52147
- z.object({
52148
- kind: z.literal("detector-store-cluster-wide"),
52149
- skippedNodes: z.array(z.string()).readonly()
52150
- }),
52151
- z.object({
52152
- kind: z.literal("detector-store-unreadable"),
52153
- error: z.string()
52154
- }),
52155
- z.object({
52156
- kind: z.literal("custom-pin-kept"),
52157
- nodeId: z.string(),
52158
- deviceKey: z.string().nullable(),
52159
- deviceId: z.number().nullable(),
52160
- modelId: z.string()
52161
- }),
52162
- z.object({
52163
- kind: z.literal("custom-registry-unreadable"),
52164
- error: z.string()
52165
- })
52166
- ]);
52096
+ deviceKey: z.string(),
52097
+ modelId: z.string()
52098
+ }), z.object({
52099
+ kind: z.literal("custom-registry-unreadable"),
52100
+ error: z.string()
52101
+ })]);
52167
52102
  var AutoTuneOptionsSchema = z.object({
52168
52103
  /** Share of each accelerator's throughput kept free (0.3–0.5). */
52169
52104
  headroom: z.number().min(.3).max(.5).default(.4),
@@ -52185,8 +52120,6 @@ var AutoTunePlanSchema = z.object({
52185
52120
  generatedAt: z.number(),
52186
52121
  nodes: z.array(NodeRecommendationSchema).readonly(),
52187
52122
  nodeChanges: z.array(NodeDeviceChangeSchema).readonly(),
52188
- cameraClears: z.array(CameraOverrideClearSchema).readonly(),
52189
- detectorStoreClears: z.array(DetectorStoreClearSchema).readonly(),
52190
52123
  warnings: z.array(AutoTuneWarningSchema).readonly()
52191
52124
  });
52192
52125
  var AutoTuneApplyInputSchema = z.object({
@@ -52197,8 +52130,6 @@ var AutoTuneApplyInputSchema = z.object({
52197
52130
  var AutoTunePhaseResultSchema = z.object({
52198
52131
  phase: z.enum([
52199
52132
  "download",
52200
- "camera-overrides",
52201
- "detector-thresholds",
52202
52133
  "node-models",
52203
52134
  "redispatch"
52204
52135
  ]),
@@ -54165,6 +54096,12 @@ var AgentPipelineSettingsSchema = z.object({
54165
54096
  /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
54166
54097
  color: NodeColorIdSchema.optional(),
54167
54098
  /**
54099
+ * NODE-wide step settings (D927): `stepId → { key → value }`, applied on
54100
+ * every accelerator of the node under the device's own settings. Never a
54101
+ * model or a model-bound threshold. Written by `setNodeStepSettings`.
54102
+ */
54103
+ stepSettings: z.record(z.string(), z.record(z.string(), z.unknown()).readonly()).optional(),
54104
+ /**
54168
54105
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
54169
54106
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
54170
54107
  * accelerator (safe default); two+ enabled ⇒ the dispatcher balances
@@ -54180,17 +54117,6 @@ var AgentPipelineSettingsSchema = z.object({
54180
54117
  steps: z.record(z.string(), DeviceStepConfigSchema).optional()
54181
54118
  })).optional()
54182
54119
  });
54183
- var CameraPipelineForAgentSchema = z.object({
54184
- steps: z.array(PipelineStepInputSchema).readonly(),
54185
- audio: z.object({
54186
- modelId: z.string(),
54187
- enabled: z.boolean()
54188
- }).nullable()
54189
- });
54190
- var CameraStepOverridePatchSchema = z.object({
54191
- modelId: z.string().optional(),
54192
- settings: z.record(z.string(), z.unknown()).readonly().optional()
54193
- });
54194
54120
  var CameraStepSettingsSchema = z.record(z.string(), z.record(z.string(), z.unknown()).readonly());
54195
54121
  /** The three root-detector choices a camera has (D507: at most one root). */
54196
54122
  var CameraDetectionSourceSchema = z.enum([
@@ -54200,9 +54126,7 @@ var CameraDetectionSourceSchema = z.enum([
54200
54126
  ]);
54201
54127
  var CameraPipelineSettingsSchema = z.object({
54202
54128
  stepToggles: z.record(z.string(), z.boolean()).optional(),
54203
- stepSettings: CameraStepSettingsSchema.optional(),
54204
- stepOverridesByDevice: z.record(z.string(), z.record(z.string(), z.record(z.string(), CameraStepOverridePatchSchema))).optional(),
54205
- pipelineByAgent: z.record(z.string(), CameraPipelineForAgentSchema).optional()
54129
+ stepSettings: CameraStepSettingsSchema.optional()
54206
54130
  });
54207
54131
  /**
54208
54132
  * Pipeline placement record persisted by `addon-pipeline-orchestrator` via
@@ -54973,6 +54897,21 @@ var pipelineOrchestratorCapability = {
54973
54897
  auth: "admin"
54974
54898
  }),
54975
54899
  /**
54900
+ * Write or clear one step's NODE-wide settings (D927) — the content that
54901
+ * holds on every accelerator of the node (`agentSettings[node].stepSettings`).
54902
+ * `settings` is the whole bag for the step; `null` or `{}` clears it.
54903
+ * REFUSES a model-scoped key (a model id, a binding, a `minConfidence*`
54904
+ * floor): those are set on the accelerator (`setAgentInferenceDevices`).
54905
+ */
54906
+ setNodeStepSettings: method(z.object({
54907
+ agentNodeId: z.string(),
54908
+ addonId: z.string(),
54909
+ settings: z.record(z.string(), z.unknown()).nullable()
54910
+ }), z.object({ success: z.literal(true) }), {
54911
+ kind: "mutation",
54912
+ auth: "admin"
54913
+ }),
54914
+ /**
54976
54915
  * DEVICE-AWARE merged view of ONE node's inference accelerators. Joins each
54977
54916
  * physical device the node HAS — probed live via a node-pinned
54978
54917
  * `platformProbe.getCapabilities` (the platform-probe singleton is targeted
@@ -55006,23 +54945,17 @@ var pipelineOrchestratorCapability = {
55006
54945
  * (a) strips every `modelId` pin from that node's
55007
54946
  * `agentSettings.addonDefaults` (cells revert to Auto — the node
55008
54947
  * resolves its own hardware-aware format default at runtime);
55009
- * (b) clears per-camera step overrides scoped to that node
55010
- * (`stepOverridesByAgent[node]` + the wholesale
55011
- * `pipelineByAgent[node]` escape hatch);
55012
- * (c) clears the executor-side per-device settings stores on that node
55013
- * (`pipelineExecutor.clearDeviceOverrides`);
55014
- * (d) hot-reloads every camera assigned to the node.
54948
+ * (b) hot-reloads every camera assigned to the node.
54949
+ * There is no per-camera model to clear (D927).
55015
54950
  *
55016
54951
  * Returns the EFFECTIVE post-reset object-detection model for the node
55017
- * (the executor's pure hardware-aware default) so the UI can report what
55018
- * will actually run — not a value that never reaches the live path.
54952
+ * (the format default of the accelerator hosting the camera root) so the
54953
+ * UI can report what will actually run.
55019
54954
  */
55020
54955
  resetNodePipelineDefaults: method(z.object({ agentNodeId: z.string() }), z.object({
55021
54956
  success: z.literal(true),
55022
54957
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
55023
- effectiveModelId: z.string().nullable(),
55024
- /** Number of cameras whose node-scoped overrides were cleared. */
55025
- clearedCameraOverrides: z.number()
54958
+ effectiveModelId: z.string().nullable()
55026
54959
  }), {
55027
54960
  kind: "mutation",
55028
54961
  auth: "admin"
@@ -55034,8 +54967,8 @@ var pipelineOrchestratorCapability = {
55034
54967
  * that sustains at least `minSessionsPerDevice` parallel sessions at the
55035
54968
  * camera rate with the headroom kept free (no load input), and lists every write
55036
54969
  * the apply would make: the node model pins set, the enrichment pins and
55037
- * model-bound thresholds removed (node level and per camera), and the
55038
- * per-camera detector thresholds cleared. Writes nothing. Step
54970
+ * model-bound thresholds removed — all on the accelerators, the only
54971
+ * layer that carries a model (D927). Writes nothing. Step
55039
54972
  * enablement, device enablement, pins, recording, notifications, zones and
55040
54973
  * rules are never part of it. `planHash` names exactly this diff.
55041
54974
  */
@@ -55188,31 +55121,14 @@ var pipelineOrchestratorCapability = {
55188
55121
  kind: "mutation",
55189
55122
  auth: "admin"
55190
55123
  }),
55191
- /** Read every per-(node,device) override map for a device. Null when device has no overrides. */
55192
- getCameraStepOverrides: method(z.object({ deviceId: z.number() }), z.record(z.string(), z.record(z.string(), z.record(z.string(), CameraStepOverridePatchSchema))).nullable()),
55193
55124
  /**
55194
- * Write or clear the per-(camera,node,device) override for one addonId.
55195
- * `patch: null` clears the entry entirely for that (node, deviceKey, addon)
55196
- * triple (empty parents are pruned). Model/settings only — enablement is
55197
- * the per-camera `stepToggles` authority.
55198
- */
55199
- setCameraStepOverride: method(z.object({
55200
- deviceId: z.number(),
55201
- agentNodeId: z.string(),
55202
- deviceKey: z.string(),
55203
- addonId: z.string(),
55204
- patch: CameraStepOverridePatchSchema.nullable()
55205
- }), z.object({ success: z.literal(true) }), {
55206
- kind: "mutation",
55207
- auth: "admin"
55208
- }),
55209
- /**
55210
- * Write or clear one step's CAMERA-WIDE settings (D754) — the fields this
55211
- * camera overrides on every accelerator it runs on. `settings` is the
55212
- * whole field-level bag for that step (only the overridden keys; a
55213
- * model-bound field travels with its binding key); `null` or `{}` clears
55214
- * it. Merged at dispatch between the node base and the per-(node,device)
55215
- * override, key by key.
55125
+ * Write or clear one step's CAMERA-WIDE settings (D754) — the
55126
+ * camera-semantic fields this camera overrides on every accelerator it
55127
+ * runs on. `settings` is the whole field-level bag for that step (only the
55128
+ * overridden keys); `null` or `{}` clears it. Merged at dispatch over the
55129
+ * node base, key by key. REFUSES a model-scoped key — a model id, a model
55130
+ * binding or a `minConfidence*` floor (D927): those belong to the
55131
+ * accelerator that runs the model.
55216
55132
  */
55217
55133
  setCameraStepSettings: method(z.object({
55218
55134
  deviceId: z.number(),
@@ -55222,15 +55138,6 @@ var pipelineOrchestratorCapability = {
55222
55138
  kind: "mutation",
55223
55139
  auth: "admin"
55224
55140
  }),
55225
- /** Write or clear the wholesale per-agent pipeline override. Pass `pipeline: null` to drop the override. */
55226
- setCameraPipelineForAgent: method(z.object({
55227
- deviceId: z.number(),
55228
- agentNodeId: z.string(),
55229
- pipeline: CameraPipelineForAgentSchema.nullable()
55230
- }), z.object({ success: z.literal(true) }), {
55231
- kind: "mutation",
55232
- auth: "admin"
55233
- }),
55234
55141
  /** Resolve the effective pipeline for `(deviceId, agentNodeId?)` — walks the full precedence chain. Read-only preview used by the UI to show what will run. */
55235
55142
  resolvePipeline: method(z.object({
55236
55143
  deviceId: z.number(),
@@ -73416,7 +73323,7 @@ var trainingProviderCapability = {
73416
73323
  * - **Jobs.** A persisted state machine, a reconcile loop against the
73417
73324
  * provider, a cost guard, a daily orphan sweep and the retention rules.
73418
73325
  * - **The return flow.** Verified artefacts → Model Studio
73419
- * (`custom-model-registry.importModelBundle`) → canary on cameras →
73326
+ * (`custom-model-registry.importModelBundle`) → canary on accelerators →
73420
73327
  * rollback. Nothing is ever registered automatically.
73421
73328
  *
73422
73329
  * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
@@ -73553,20 +73460,24 @@ var TrainingProgressPointSchema = z.object({
73553
73460
  map50: z.number().nullable(),
73554
73461
  map50_95: z.number().nullable()
73555
73462
  });
73463
+ /** One accelerator: a `(node, inference device)` that runs the root detector. */
73464
+ var TrainingAcceleratorRefSchema = z.object({
73465
+ nodeId: z.string(),
73466
+ deviceKey: z.string()
73467
+ });
73468
+ /**
73469
+ * A canary pins the registered model on chosen ACCELERATORS — a model is
73470
+ * chosen by the accelerator that runs it (D927); every camera balanced onto
73471
+ * one runs it. `previous` is the root-detector pin each one had (`null` = it
73472
+ * ran its default), exactly, so rollback restores it.
73473
+ */
73556
73474
  var TrainingCanarySchema = z.object({
73557
- deviceIds: z.array(z.number().int()).readonly(),
73475
+ accelerators: z.array(TrainingAcceleratorRefSchema).readonly(),
73558
73476
  since: z.number(),
73559
- /** Every override the canary replaced, exactly, so rollback restores it. */
73560
- previous: z.array(z.object({
73561
- deviceId: z.number().int(),
73562
- nodeId: z.string(),
73563
- deviceKey: z.string(),
73564
- patch: z.object({
73565
- modelId: z.string().optional(),
73566
- settings: z.record(z.string(), z.unknown()).readonly().optional()
73567
- }).nullable()
73568
- })).readonly()
73477
+ previous: z.array(TrainingAcceleratorRefSchema.extend({ modelId: z.string().nullable() })).readonly()
73569
73478
  });
73479
+ /** An accelerator a canary may pin: it runs the root detector, on this model now. */
73480
+ var TrainingCanaryTargetSchema = TrainingAcceleratorRefSchema.extend({ pinnedModelId: z.string().nullable() });
73570
73481
  var TrainingJobSchema = z.object({
73571
73482
  id: z.string(),
73572
73483
  idempotencyKey: z.string(),
@@ -73706,19 +73617,21 @@ var trainingCapability = {
73706
73617
  }),
73707
73618
  /** The verified `result.json` of a job in `ready` or later; null before. */
73708
73619
  getJobResult: method(IdInput, TrainingResultSchema.nullable(), { auth: "admin" }),
73620
+ /** The accelerators a canary may pin: every enabled one that runs the root detector. */
73621
+ listCanaryTargets: method(z.void(), z.array(TrainingCanaryTargetSchema).readonly(), { auth: "admin" }),
73709
73622
  /** Hand the verified bundle to Model Studio; optionally canary right after. */
73710
- registerResult: method(IdInput.extend({ canaryDeviceIds: z.array(z.number().int()).readonly() }), TrainingJobSchema, {
73623
+ registerResult: method(IdInput.extend({ canaryAccelerators: z.array(TrainingAcceleratorRefSchema).readonly() }), TrainingJobSchema, {
73711
73624
  kind: "mutation",
73712
73625
  auth: "admin",
73713
73626
  timeoutMs: 30 * 6e4
73714
73627
  }),
73715
- /** Pin the registered model on these cameras, remembering what it replaced. */
73716
- canaryResult: method(IdInput.extend({ deviceIds: z.array(z.number().int()).min(1).readonly() }), TrainingJobSchema, {
73628
+ /** Pin the registered model on these accelerators, remembering what it replaced. */
73629
+ canaryResult: method(IdInput.extend({ accelerators: z.array(TrainingAcceleratorRefSchema).min(1).readonly() }), TrainingJobSchema, {
73717
73630
  kind: "mutation",
73718
73631
  auth: "admin",
73719
73632
  timeoutMs: 12e4
73720
73633
  }),
73721
- /** Put every canary camera back exactly as it was. */
73634
+ /** Put every canary accelerator back exactly as it was. */
73722
73635
  rollbackCanary: method(IdInput, TrainingJobSchema, {
73723
73636
  kind: "mutation",
73724
73637
  auth: "admin",
@@ -81450,20 +81363,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
81450
81363
  access: "create",
81451
81364
  role: "admin"
81452
81365
  },
81453
- "pipelineExecutor.clearDeviceOverrides": {
81454
- capName: "pipeline-executor",
81455
- capScope: "system",
81456
- addonId: null,
81457
- access: "delete",
81458
- role: "admin"
81459
- },
81460
- "pipelineExecutor.clearModelBoundDeviceOverrides": {
81461
- capName: "pipeline-executor",
81462
- capScope: "system",
81463
- addonId: null,
81464
- access: "delete",
81465
- role: "admin"
81466
- },
81467
81366
  "pipelineExecutor.deleteModel": {
81468
81367
  capName: "pipeline-executor",
81469
81368
  capScope: "system",
@@ -81506,13 +81405,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
81506
81405
  access: "view",
81507
81406
  role: "admin"
81508
81407
  },
81509
- "pipelineExecutor.getDefaultSteps": {
81510
- capName: "pipeline-executor",
81511
- capScope: "system",
81512
- addonId: null,
81513
- access: "view",
81514
- role: "admin"
81515
- },
81516
81408
  "pipelineExecutor.getDetectionConfigSchema": {
81517
81409
  capName: "pipeline-executor",
81518
81410
  capScope: "system",
@@ -81534,20 +81426,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
81534
81426
  access: "view",
81535
81427
  role: "admin"
81536
81428
  },
81537
- "pipelineExecutor.getGlobalPipelineConfig": {
81538
- capName: "pipeline-executor",
81539
- capScope: "system",
81540
- addonId: null,
81541
- access: "view",
81542
- role: "admin"
81543
- },
81544
- "pipelineExecutor.getGlobalSteps": {
81545
- capName: "pipeline-executor",
81546
- capScope: "system",
81547
- addonId: null,
81548
- access: "view",
81549
- role: "admin"
81550
- },
81551
81429
  "pipelineExecutor.getInferenceDeviceHealth": {
81552
81430
  capName: "pipeline-executor",
81553
81431
  capScope: "system",
@@ -81807,13 +81685,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
81807
81685
  access: "view",
81808
81686
  role: "admin"
81809
81687
  },
81810
- "pipelineOrchestrator.getCameraStepOverrides": {
81811
- capName: "pipeline-orchestrator",
81812
- capScope: "system",
81813
- addonId: null,
81814
- access: "view",
81815
- role: "admin"
81816
- },
81817
81688
  "pipelineOrchestrator.getCameraSwitches": {
81818
81689
  capName: "pipeline-orchestrator",
81819
81690
  capScope: "system",
@@ -82052,13 +81923,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
82052
81923
  access: "create",
82053
81924
  role: "admin"
82054
81925
  },
82055
- "pipelineOrchestrator.setCameraPipelineForAgent": {
82056
- capName: "pipeline-orchestrator",
82057
- capScope: "system",
82058
- addonId: null,
82059
- access: "create",
82060
- role: "admin"
82061
- },
82062
81926
  "pipelineOrchestrator.setCameraSensors": {
82063
81927
  capName: "pipeline-orchestrator",
82064
81928
  capScope: "system",
@@ -82066,42 +81930,42 @@ var METHOD_ACCESS_MAP = Object.freeze({
82066
81930
  access: "create",
82067
81931
  role: "admin"
82068
81932
  },
82069
- "pipelineOrchestrator.setCameraStepOverride": {
81933
+ "pipelineOrchestrator.setCameraStepSettings": {
82070
81934
  capName: "pipeline-orchestrator",
82071
81935
  capScope: "system",
82072
81936
  addonId: null,
82073
81937
  access: "create",
82074
81938
  role: "admin"
82075
81939
  },
82076
- "pipelineOrchestrator.setCameraStepSettings": {
81940
+ "pipelineOrchestrator.setCameraStepToggle": {
82077
81941
  capName: "pipeline-orchestrator",
82078
81942
  capScope: "system",
82079
81943
  addonId: null,
82080
81944
  access: "create",
82081
81945
  role: "admin"
82082
81946
  },
82083
- "pipelineOrchestrator.setCameraStepToggle": {
81947
+ "pipelineOrchestrator.setCameraSwitch": {
82084
81948
  capName: "pipeline-orchestrator",
82085
81949
  capScope: "system",
82086
81950
  addonId: null,
82087
81951
  access: "create",
82088
81952
  role: "admin"
82089
81953
  },
82090
- "pipelineOrchestrator.setCameraSwitch": {
81954
+ "pipelineOrchestrator.setCapabilityBinding": {
82091
81955
  capName: "pipeline-orchestrator",
82092
81956
  capScope: "system",
82093
81957
  addonId: null,
82094
81958
  access: "create",
82095
81959
  role: "admin"
82096
81960
  },
82097
- "pipelineOrchestrator.setCapabilityBinding": {
81961
+ "pipelineOrchestrator.setLoadBalancingShares": {
82098
81962
  capName: "pipeline-orchestrator",
82099
81963
  capScope: "system",
82100
81964
  addonId: null,
82101
81965
  access: "create",
82102
81966
  role: "admin"
82103
81967
  },
82104
- "pipelineOrchestrator.setLoadBalancingShares": {
81968
+ "pipelineOrchestrator.setNodeStepSettings": {
82105
81969
  capName: "pipeline-orchestrator",
82106
81970
  capScope: "system",
82107
81971
  addonId: null,
@@ -84460,6 +84324,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
84460
84324
  access: "view",
84461
84325
  role: "admin"
84462
84326
  },
84327
+ "training.listCanaryTargets": {
84328
+ capName: "training",
84329
+ capScope: "system",
84330
+ addonId: null,
84331
+ access: "view",
84332
+ role: "admin"
84333
+ },
84463
84334
  "training.listJobs": {
84464
84335
  capName: "training",
84465
84336
  capScope: "system",
@@ -91117,11 +90988,6 @@ Object.freeze({
91117
90988
  form: "single",
91118
90989
  optional: false
91119
90990
  }],
91120
- "pipelineExecutor.clearModelBoundDeviceOverrides": [{
91121
- name: "deviceIds",
91122
- form: "array",
91123
- optional: true
91124
- }],
91125
90991
  "pipelineExecutor.runPipeline": [{
91126
90992
  name: "deviceId",
91127
90993
  form: "single",
@@ -91177,11 +91043,6 @@ Object.freeze({
91177
91043
  form: "array",
91178
91044
  optional: true
91179
91045
  }],
91180
- "pipelineOrchestrator.getCameraStepOverrides": [{
91181
- name: "deviceId",
91182
- form: "single",
91183
- optional: false
91184
- }],
91185
91046
  "pipelineOrchestrator.getCameraSwitches": [{
91186
91047
  name: "deviceId",
91187
91048
  form: "single",
@@ -91222,21 +91083,11 @@ Object.freeze({
91222
91083
  form: "single",
91223
91084
  optional: false
91224
91085
  }],
91225
- "pipelineOrchestrator.setCameraPipelineForAgent": [{
91226
- name: "deviceId",
91227
- form: "single",
91228
- optional: false
91229
- }],
91230
91086
  "pipelineOrchestrator.setCameraSensors": [{
91231
91087
  name: "deviceId",
91232
91088
  form: "single",
91233
91089
  optional: false
91234
91090
  }],
91235
- "pipelineOrchestrator.setCameraStepOverride": [{
91236
- name: "deviceId",
91237
- form: "single",
91238
- optional: false
91239
- }],
91240
91091
  "pipelineOrchestrator.setCameraStepSettings": [{
91241
91092
  name: "deviceId",
91242
91093
  form: "single",
@@ -91914,11 +91765,6 @@ Object.freeze({
91914
91765
  form: "single",
91915
91766
  optional: false
91916
91767
  }],
91917
- "training.canaryResult": [{
91918
- name: "deviceIds",
91919
- form: "array",
91920
- optional: false
91921
- }],
91922
91768
  "update.getStatus": [{
91923
91769
  name: "deviceId",
91924
91770
  form: "single",