@camstack/addon-model-studio 1.1.214 → 1.1.216

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 (19) hide show
  1. package/dist/{MotionZonesSettings-BQ0UOfb8.mjs → MotionZonesSettings-4HEAfNAZ.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-q_9yxl4v.mjs → PrivacyMaskSettings-CyrRi4XA.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-Bmz5Y9X5.mjs → SceneMonitorEditor-CprmQzlB.mjs} +3 -3
  4. package/dist/_stub.js +3416 -3117
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-uW1Zd-nw.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DuZ4j4Tj.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CQ2lOvCS.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-XNV3DgEX.mjs → hostInit-DgQAw-Tm.mjs} +3 -3
  9. package/dist/model-studio.addon.js +45 -439
  10. package/dist/model-studio.addon.mjs +45 -439
  11. package/dist/{player-overlays-DyBPgoW8.mjs → player-overlays-2W0Mwbzt.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-CvxBWUH9.mjs → responsive-B69r95CT.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-Bbrh5uOi.mjs → scene-monitor-copy-CeTU5shK.mjs} +1 -1
  15. package/dist/{square-Ebm5mZPx.mjs → square-Sw6O7lEO.mjs} +1 -1
  16. package/dist/{trash-2-BX4TiX8o.mjs → trash-2-Bess9rqf.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-r8bN15Ml.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BTcms_55.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CL_c14D8.mjs +0 -26
@@ -393,7 +393,7 @@ function buildScryptedRegistryDescriptor(entry) {
393
393
  };
394
394
  }
395
395
  //#endregion
396
- //#region ../types/dist/event-category-BGmz_oxW.mjs
396
+ //#region ../types/dist/event-category-B_0XEcLF.mjs
397
397
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
398
398
  EventCategory["SystemBoot"] = "system.boot";
399
399
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -894,15 +894,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
894
894
  EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
895
895
  EventCategory["AgentBackupActivated"] = "agent.backup.activated";
896
896
  EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
897
- /**
898
- * Per-agent hwaccel preference changed (user override set, cleared, or
899
- * re-probed). Observability event — decoders pull the current pref at
900
- * `createSession`, so running sessions keep their current backend until
901
- * they rotate naturally (camera add/remove, stream restart). Future
902
- * work can wire a listener in stream-broker that force-rotates live
903
- * sessions; for now this event powers logs + admin-UI toast feedback.
904
- */
905
- EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
906
897
  EventCategory["MotionAnalysis"] = "detection.motion-analysis";
907
898
  /** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
908
899
  EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
@@ -5773,7 +5764,7 @@ var ZodIssueCode = {
5773
5764
  var ZodFirstPartyTypeKind;
5774
5765
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5775
5766
  //#endregion
5776
- //#region ../types/dist/sleep-DAJ9Er57.mjs
5767
+ //#region ../types/dist/sleep-BNeXenvr.mjs
5777
5768
  /**
5778
5769
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5779
5770
  * window to float samples (D455).
@@ -7139,32 +7130,12 @@ object({
7139
7130
  audioCodec: string().optional(),
7140
7131
  metadata: record(string(), unknown()).readonly().optional()
7141
7132
  });
7142
- var EncodedPacketSchema = object({
7143
- type: _enum(["video", "audio"]),
7144
- data: _instanceof(Uint8Array),
7145
- pts: number(),
7146
- dts: number(),
7147
- keyframe: boolean(),
7148
- codec: string()
7149
- });
7150
- var DecodedFrameSchema = object({
7151
- data: _instanceof(Uint8Array),
7152
- width: number(),
7153
- height: number(),
7154
- format: _enum([
7155
- "jpeg",
7156
- "rgb",
7157
- "bgr",
7158
- "yuv420",
7159
- "gray"
7160
- ]),
7161
- timestamp: number()
7162
- });
7163
7133
  /**
7164
7134
  * Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
7165
7135
  * frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
7166
- * interface in `interfaces/frame-handle.ts` field-for-field so a decoder cap
7167
- * method (`pullHandles`) can carry handles over tRPC / Moleculer.
7136
+ * interface in `interfaces/frame-handle.ts` field-for-field so a cap method
7137
+ * (the runner's native-crop and pipeline-executor inputs) can carry handles
7138
+ * over tRPC / Moleculer.
7168
7139
  *
7169
7140
  * The `satisfies` assertion below pins this schema to the interface: if a
7170
7141
  * field is added to / removed from `FrameHandle` without a matching schema
@@ -7190,50 +7161,6 @@ var FrameHandleSchema = object({
7190
7161
  slotCount: number().int().positive()
7191
7162
  });
7192
7163
  /**
7193
- * Pixel format a frame-handle subscriber can request from the broker
7194
- * (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
7195
- * `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
7196
- * `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
7197
- * payload, and no decoded-frame consumer requests it over the shm plane.
7198
- */
7199
- var FrameHandleFormatSchema = _enum([
7200
- "rgb",
7201
- "bgr",
7202
- "yuv420",
7203
- "gray"
7204
- ]);
7205
- /**
7206
- * Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
7207
- * broker for a `FrameHandle` stream of one `format`; the broker maintains one
7208
- * shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
7209
- * subscriber (motion) and an `rgb` subscriber (detection) each read the format
7210
- * they asked for with no broker-side conversion.
7211
- */
7212
- var SubscribeFramesInputSchema = object({
7213
- brokerId: string(),
7214
- format: FrameHandleFormatSchema,
7215
- /**
7216
- * Optional reader-side cadence hint in frames per second. The broker does
7217
- * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
7218
- * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
7219
- * the consumer can pace its own `pullFrameHandles` polling.
7220
- */
7221
- maxFps: number().positive().optional(),
7222
- /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
7223
- tag: string().optional()
7224
- });
7225
- /**
7226
- * Result of `stream-broker.subscribeFrames`. The consumer then polls
7227
- * `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
7228
- * `FrameHandle` to a `FrameRingReader`.
7229
- */
7230
- var SubscribeFramesResultSchema = object({
7231
- /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
7232
- subscriptionId: string(),
7233
- /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
7234
- maxFps: number().nonnegative()
7235
- });
7236
- /**
7237
7164
  * Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
7238
7165
  * `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
7239
7166
  * sample bytes plus the track parameters a consumer needs to interpret them.
@@ -7241,8 +7168,8 @@ var SubscribeFramesResultSchema = object({
7241
7168
  * Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
7242
7169
  * Float32 PCM), so unlike video frames they ship their bytes INLINE over
7243
7170
  * tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
7244
- * (the wire-serialisable supertype of `Buffer`) to match `DecodedFrameSchema`
7245
- * / `EncodedPacketSchema`'s precedent; a `Buffer` is assignable to it.
7171
+ * (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
7172
+ * it.
7246
7173
  */
7247
7174
  var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
7248
7175
  var DecodedAudioChunkSchema = object({
@@ -7260,11 +7187,10 @@ var DecodedAudioChunkSchema = object({
7260
7187
  format: AudioChunkFormatSchema.optional()
7261
7188
  });
7262
7189
  /**
7263
- * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). The
7264
- * handle-free, ship-bytes-inline analogue of `subscribeFrames`: a consumer
7265
- * asks the broker for the decoded audio-chunk stream of one broker; the
7266
- * broker keeps a per-subscription bounded FIFO queue the consumer drains via
7267
- * `pullAudioChunks`.
7190
+ * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
7191
+ * its bytes inline: a consumer asks the broker for the decoded audio-chunk
7192
+ * stream of one broker; the broker keeps a per-subscription bounded FIFO queue
7193
+ * the consumer drains via `pullAudioChunks`.
7268
7194
  */
7269
7195
  var SubscribeAudioChunksInputSchema = object({
7270
7196
  brokerId: string(),
@@ -7295,9 +7221,7 @@ var BrokerStatsSchema = object({
7295
7221
  "stopped"
7296
7222
  ]),
7297
7223
  inputFps: number(),
7298
- decodeFps: number(),
7299
7224
  encodedSubscribers: number(),
7300
- decodedSubscribers: number(),
7301
7225
  uptimeMs: number(),
7302
7226
  bitrateKbps: number(),
7303
7227
  idrIntervalMs: number(),
@@ -7310,14 +7234,6 @@ var BrokerStatsSchema = object({
7310
7234
  preBufferMs: number(),
7311
7235
  preBufferPackets: number(),
7312
7236
  /**
7313
- * Moleculer node id of the decoder provider currently servicing this
7314
- * stream's decoded subscribers. `null` until the deferred decoder is
7315
- * created (no decoded clients yet, or codec not detected). Surfaces the
7316
- * runtime decoder placement so the UI can show "Decoder: <agent>" without
7317
- * a separate cap call per broker.
7318
- */
7319
- decoderNodeId: string().nullable(),
7320
- /**
7321
7237
  * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
7322
7238
  * when the stream has no audio track or the broker is in cold start.
7323
7239
  * `supported = false` means the codec was detected but the local
@@ -10720,70 +10636,6 @@ var StorageLocationDeclarationSchema = object({
10720
10636
  "backup"
10721
10637
  ]).optional()
10722
10638
  });
10723
- var DecoderStatsSchema = object({
10724
- inputFps: number(),
10725
- outputFps: number(),
10726
- avgDecodeTimeMs: number(),
10727
- droppedFrames: number(),
10728
- /**
10729
- * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
10730
- * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
10731
- * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
10732
- * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
10733
- */
10734
- lagMs: number().optional(),
10735
- effectiveFps: number().optional(),
10736
- adaptiveFps: number().optional()
10737
- });
10738
- var DecoderSessionConfigSchema = object({
10739
- codec: string(),
10740
- maxFps: number().default(0),
10741
- outputFormat: _enum([
10742
- "jpeg",
10743
- "rgb",
10744
- "bgr",
10745
- "yuv420",
10746
- "gray"
10747
- ]).default("jpeg"),
10748
- scale: number().default(1),
10749
- width: number().optional(),
10750
- height: number().optional(),
10751
- /**
10752
- * Identifier of the camera this decoder session serves. Optional
10753
- * because the cap is generic (any caller could request decode), but
10754
- * stream-broker passes it so decoder logs include `deviceId` for
10755
- * per-camera filtering when diagnosing failures (e.g. node-av
10756
- * sendPacket errors on a single hung camera).
10757
- */
10758
- deviceId: number().int().nonnegative().optional(),
10759
- /**
10760
- * Free-form tag for log scoping. Stream-broker uses
10761
- * `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
10762
- * on every line so `grep tag=broker:5/high` filters one camera
10763
- * profile cleanly.
10764
- */
10765
- tag: string().optional(),
10766
- /**
10767
- * Where the session delivers decoded frames (Phase 5 / D9):
10768
- *
10769
- * - `'callback'` (default) — the legacy pixel path: decoded frames are
10770
- * buffered as `DecodedFrame`s and drained via `pullFrames`.
10771
- * - `'shm'` — the shared-memory frame plane: decoded frames are written
10772
- * into an OS shared-memory ring and drained as zero-pixel
10773
- * `FrameHandle`s via `pullHandles`. A session is one mode or the
10774
- * other — `pullFrames` returns nothing for an `'shm'` session and
10775
- * `pullHandles` returns nothing for a `'callback'` session.
10776
- */
10777
- frameSink: _enum(["callback", "shm"]).default("callback"),
10778
- /**
10779
- * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
10780
- * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
10781
- * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
10782
- * stream-broker's `streamingDebug` gate — off by default so production logs
10783
- * stay quiet and the emit path pays zero per-frame cost when disabled.
10784
- */
10785
- debug: boolean().optional()
10786
- });
10787
10639
  /**
10788
10640
  * Per-component log CHANNELS — the gate a hot path consults, and the registry
10789
10641
  * an addon declares its channels in.
@@ -13086,13 +12938,6 @@ var BrokerRtspClientSchema = object({
13086
12938
  lastRtpAt: number(),
13087
12939
  bytesSent: number()
13088
12940
  });
13089
- var BrokerDecodedClientSchema = object({
13090
- tag: string(),
13091
- subscribedAt: number(),
13092
- maxFps: number(),
13093
- framesDelivered: number(),
13094
- framesDropped: number()
13095
- });
13096
12941
  var BrokerAudioClientSchema = object({
13097
12942
  tag: string(),
13098
12943
  subscribedAt: number(),
@@ -13184,7 +13029,6 @@ var BrokerEncodedClientSchema = object({
13184
13029
  });
13185
13030
  var BrokerClientsSchema = object({
13186
13031
  rtsp: array(BrokerRtspClientSchema).readonly(),
13187
- decoded: array(BrokerDecodedClientSchema).readonly(),
13188
13032
  audio: array(BrokerAudioClientSchema).readonly(),
13189
13033
  encoded: array(BrokerEncodedClientSchema).readonly(),
13190
13034
  pipeClients: number(),
@@ -13553,11 +13397,7 @@ method(object({
13553
13397
  auth: "admin"
13554
13398
  }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
13555
13399
  brokerId: string(),
13556
- channel: _enum([
13557
- "rtsp",
13558
- "decoded",
13559
- "audio"
13560
- ]),
13400
+ channel: _enum(["rtsp", "audio"]),
13561
13401
  handle: string()
13562
13402
  }), object({ killed: boolean() }), {
13563
13403
  kind: "mutation",
@@ -13592,10 +13432,7 @@ method(object({
13592
13432
  }), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
13593
13433
  subscriptionId: string(),
13594
13434
  maxCount: number().int().positive().default(8)
13595
- }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }), method(object({
13596
- subscriptionId: string(),
13597
- maxCount: number().int().positive().default(4)
13598
- }), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
13435
+ }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
13599
13436
  brokerId: string(),
13600
13437
  seconds: number().min(0).max(30)
13601
13438
  }), _void(), {
@@ -14768,54 +14605,12 @@ id: union([string(), number()]) }), {
14768
14605
  kind: "mutation",
14769
14606
  auth: "admin"
14770
14607
  });
14771
- /**
14772
- * shm ring usage stats for a `frameSink: 'shm'` decoder session —
14773
- * exposed via `decoder.getShmStats` so downstream consumers can
14774
- * observe ring pressure (slot count, byte budget, hit/miss ratio).
14775
- */
14776
- var ShmRingStatsSchema = object({
14777
- sessionId: string(),
14778
- slotCount: number().int(),
14779
- slotByteLength: number().int(),
14780
- segmentBytes: number().int(),
14781
- budgetMb: number().int(),
14782
- framesWritten: number().int(),
14783
- getFrameHits: number().int(),
14784
- getFrameMisses: number().int()
14785
- });
14786
- method(object({ codec: string() }), boolean()), method(_void(), object({
14608
+ method(_void(), object({
14787
14609
  id: string(),
14788
14610
  name: string(),
14789
- isPullMode: boolean().optional(),
14790
- priority: number().optional(),
14791
14611
  hwaccel: string().optional(),
14792
14612
  probedBestHwaccel: string().optional()
14793
- })), method(DecoderSessionConfigSchema, object({
14794
- sessionId: string(),
14795
- nodeId: string()
14796
- })), method(object({ sessionId: string() }), _void()), method(object({
14797
- sessionId: string(),
14798
- packet: EncodedPacketSchema
14799
- }), _void()), method(object({
14800
- sessionId: string(),
14801
- url: string()
14802
- }), _void()), method(object({
14803
- sessionId: string(),
14804
- maxCount: number().default(1),
14805
- waitMs: number().optional()
14806
- }), array(DecodedFrameSchema)), method(object({
14807
- sessionId: string(),
14808
- maxCount: number().default(1),
14809
- waitMs: number().optional()
14810
- }), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
14811
- sessionId: string(),
14812
- config: DecoderSessionConfigSchema.partial()
14813
- }), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
14814
- sessionId: string(),
14815
- codec: string(),
14816
- outputFormat: string(),
14817
- createdAtMs: number()
14818
- })).readonly()), method(_void(), object({ backend: string() }), {
14613
+ })), method(_void(), object({ backend: string() }), {
14819
14614
  kind: "mutation",
14820
14615
  auth: "admin"
14821
14616
  });
@@ -21841,8 +21636,8 @@ Object.freeze(Object.fromEntries([{
21841
21636
  var CLUSTER_STEP_SETTING_FIELDS = [{
21842
21637
  stepId: "face-embedding",
21843
21638
  key: "minLandmarkFaceSize",
21844
- label: "Min face size for recognition (detection px)",
21845
- description: "Refuse to embed a face smaller than this IN THE DETECTION FRAME. Applies to every node — the enrolled gallery is one index, and two admission floors would fill it from two policies. 0 disables the gate.",
21639
+ label: "Min face size to embed (detection-frame px)",
21640
+ description: "Faces smaller than this in the small frame the detector sees are not embedded, so they can never be recognised. Below it the face cannot be aligned reliably and a bad embedding matches everyone. Same value on every node. 0 = no limit.",
21846
21641
  type: "slider",
21847
21642
  min: 0,
21848
21643
  max: 64,
@@ -23894,21 +23689,6 @@ var PipelineDefaultStepSchema = lazy(() => object({
23894
23689
  group: string().optional(),
23895
23690
  settings: record(string(), unknown()).optional()
23896
23691
  }));
23897
- var PipelineTemplateStepSchema = lazy(() => object({
23898
- addonId: string(),
23899
- enabled: boolean(),
23900
- modelId: string(),
23901
- children: array(PipelineTemplateStepSchema).readonly(),
23902
- settings: record(string(), unknown()).optional()
23903
- }));
23904
- var PipelineTemplateSchema$1 = object({
23905
- id: string(),
23906
- name: string(),
23907
- createdAt: string(),
23908
- updatedAt: string(),
23909
- engine: PipelineEngineChoiceSchema,
23910
- steps: array(PipelineTemplateStepSchema).readonly()
23911
- });
23912
23692
  var PipelineModelOptionSchema = object({
23913
23693
  id: string(),
23914
23694
  name: string(),
@@ -24120,15 +23900,7 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24120
23900
  }), method(_void(), PipelineSchemaSchema), method(_void(), array(PipelineDefaultStepSchema).readonly().nullable()), method(_void(), PipelineConfigBridge), method(_void(), ConfigUISchemaBridge), method(object({
24121
23901
  steps: array(PipelineStepInputSchema),
24122
23902
  deviceKey: string().optional()
24123
- }), PipelineValidationResultSchema), method(_void(), array(PipelineTemplateSchema$1).readonly()), method(object({
24124
- name: string(),
24125
- steps: array(PipelineTemplateStepSchema).readonly(),
24126
- engine: PipelineEngineChoiceSchema
24127
- }), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({
24128
- id: string(),
24129
- name: string().optional(),
24130
- steps: array(PipelineTemplateStepSchema).readonly().optional()
24131
- }), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
23903
+ }), PipelineValidationResultSchema), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
24132
23904
  addonId: string(),
24133
23905
  modelId: string(),
24134
23906
  format: ModelFormatSchema$2
@@ -25538,14 +25310,15 @@ var RunnerLocalLoadSchema = object({
25538
25310
  * Per-inference-device live load (multi-device C4). One entry per deviceKey
25539
25311
  * this runner currently has attached cameras on, so the orchestrator's second
25540
25312
  * `balance()` pass (over a node's devices) weights on real per-pool session
25541
- * counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
25542
- * per device is 0 until the pool backlog gets a public accessor (follow-up).
25313
+ * counts. Empty on single-device / pre-multi-device runners. There is no
25314
+ * per-device queue depth: the inference pool's backlog has no accessor, and
25315
+ * a field that always read 0 was removed rather than shown as a measurement
25316
+ * (D762).
25543
25317
  */
25544
25318
  devices: array(object({
25545
25319
  deviceKey: string(),
25546
25320
  backend: string(),
25547
- attachedCameras: number(),
25548
- queueDepthTotal: number()
25321
+ attachedCameras: number()
25549
25322
  })).default([]),
25550
25323
  /** Hardware capability flags reported by this node. */
25551
25324
  hardware: object({
@@ -25759,14 +25532,6 @@ var CameraPipelineConfigSchema = object({
25759
25532
  settings: record(string(), unknown()).readonly().optional()
25760
25533
  }).nullable().optional()
25761
25534
  });
25762
- var PipelineTemplateSchema = object({
25763
- id: string(),
25764
- name: string(),
25765
- description: string().optional(),
25766
- config: CameraPipelineConfigSchema,
25767
- createdAt: string(),
25768
- updatedAt: string()
25769
- });
25770
25535
  var DeviceStepConfigSchema = object({
25771
25536
  modelId: string().optional(),
25772
25537
  settings: record(string(), unknown()).optional(),
@@ -25876,7 +25641,10 @@ var PipelineAssignmentSchema = object({
25876
25641
  });
25877
25642
  /**
25878
25643
  * Per-agent load summary surfaced to the load balancer + dashboards.
25879
- * Aggregated from each runner's `getLocalLoad` cap call.
25644
+ * Aggregated from each runner's `getLocalLoad` cap call. In the
25645
+ * `getAgentLoad` report, a single-device node's default-pool sessions (no
25646
+ * `deviceKey`) are credited to its one eligible device in `load.devices` —
25647
+ * the default pool IS that device (D745); the balancer's census stays raw.
25880
25648
  */
25881
25649
  var AgentLoadSummarySchema = object({
25882
25650
  nodeId: string(),
@@ -25965,26 +25733,27 @@ var CameraBrokerStatusSchema = object({
25965
25733
  width: number(),
25966
25734
  height: number(),
25967
25735
  subscribers: number(),
25968
- inFps: number(),
25969
- outFps: number()
25736
+ /**
25737
+ * Encoded packets/s the broker receives from the camera. null when the
25738
+ * broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
25739
+ * There is no output rate: decoding runs in the session decode workers, not
25740
+ * in the broker, so the broker's own decoded-frame rate is 0 on every live
25741
+ * camera and is not served (D758).
25742
+ */
25743
+ inFps: number().nullable()
25970
25744
  })).readonly(),
25971
25745
  webrtcSessions: number(),
25972
25746
  rtspRestream: boolean()
25973
25747
  });
25974
- /** Shared-memory ring statistics within the decoder block. */
25975
- var CameraDecoderShmSchema = object({
25976
- framesWritten: number(),
25977
- getFrameHits: number(),
25978
- getFrameMisses: number(),
25979
- budgetMb: number()
25980
- });
25981
- /** Decoder block — null when the decoder stage is unreachable or inactive. */
25982
- var CameraDecoderStatusSchema = object({
25983
- nodeId: string(),
25984
- formats: array(string()).readonly(),
25985
- sessionCount: number(),
25986
- shm: CameraDecoderShmSchema
25987
- });
25748
+ /**
25749
+ * Decoder block — WHERE decode runs (co-located with the detection node by
25750
+ * construction); null when the camera has no detection node. It carries no
25751
+ * frame counter: the shared-memory plane whose counters it used to serve is
25752
+ * gone, and those fields read 0 forever. Whether frames actually flow is read
25753
+ * from `detection.actualFps` (frames delivered to and processed by the
25754
+ * detector), never from a counter nothing feeds.
25755
+ */
25756
+ var CameraDecoderStatusSchema = object({ nodeId: string() });
25988
25757
  /** Motion block — null when motion detection is not active for this device. */
25989
25758
  var CameraMotionStatusSchema = object({
25990
25759
  enabled: boolean(),
@@ -26437,25 +26206,7 @@ method(object({
26437
26206
  }), method(_void(), DiskReconcileJobSchema, {
26438
26207
  kind: "mutation",
26439
26208
  auth: "admin"
26440
- }), method(_void(), DiskReconcileJobSchema, { auth: "admin" }), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
26441
- name: string(),
26442
- description: string().optional(),
26443
- config: CameraPipelineConfigSchema
26444
- }), PipelineTemplateSchema, {
26445
- kind: "mutation",
26446
- auth: "admin"
26447
- }), method(object({
26448
- id: string(),
26449
- name: string().optional(),
26450
- description: string().optional(),
26451
- config: CameraPipelineConfigSchema.optional()
26452
- }), PipelineTemplateSchema, {
26453
- kind: "mutation",
26454
- auth: "admin"
26455
- }), method(object({ id: string() }), object({ success: literal(true) }), {
26456
- kind: "mutation",
26457
- auth: "admin"
26458
- });
26209
+ }), method(_void(), DiskReconcileJobSchema, { auth: "admin" });
26459
26210
  /**
26460
26211
  * Cap → event-kind mapping for the SENSOR / CONTROL cap families — the table
26461
26212
  * `pipeline-analytics.listEventKinds` uses to turn a linked device's bound
@@ -28675,8 +28426,6 @@ var WebrtcStreamChoiceSchema = object({
28675
28426
  ]).nullable(),
28676
28427
  /** Input FPS from the camera (null for adaptive). */
28677
28428
  inputFps: number().nullable(),
28678
- /** Decoded FPS (null for adaptive). */
28679
- decodeFps: number().nullable(),
28680
28429
  /** Bitrate in kbps (null for adaptive). */
28681
28430
  bitrateKbps: number().nullable()
28682
28431
  });
@@ -38909,90 +38658,18 @@ Object.freeze({
38909
38658
  addonId: null,
38910
38659
  access: "create"
38911
38660
  },
38912
- "decoder.createSession": {
38913
- capName: "decoder",
38914
- capScope: "system",
38915
- addonId: null,
38916
- access: "view"
38917
- },
38918
- "decoder.destroySession": {
38919
- capName: "decoder",
38920
- capScope: "system",
38921
- addonId: null,
38922
- access: "delete"
38923
- },
38924
- "decoder.getFrame": {
38925
- capName: "decoder",
38926
- capScope: "system",
38927
- addonId: null,
38928
- access: "view"
38929
- },
38930
38661
  "decoder.getInfo": {
38931
38662
  capName: "decoder",
38932
38663
  capScope: "system",
38933
38664
  addonId: null,
38934
38665
  access: "view"
38935
38666
  },
38936
- "decoder.getShmStats": {
38937
- capName: "decoder",
38938
- capScope: "system",
38939
- addonId: null,
38940
- access: "view"
38941
- },
38942
- "decoder.getStats": {
38943
- capName: "decoder",
38944
- capScope: "system",
38945
- addonId: null,
38946
- access: "view"
38947
- },
38948
- "decoder.listActiveSessions": {
38949
- capName: "decoder",
38950
- capScope: "system",
38951
- addonId: null,
38952
- access: "view"
38953
- },
38954
- "decoder.openStream": {
38955
- capName: "decoder",
38956
- capScope: "system",
38957
- addonId: null,
38958
- access: "view"
38959
- },
38960
- "decoder.pullFrames": {
38961
- capName: "decoder",
38962
- capScope: "system",
38963
- addonId: null,
38964
- access: "view"
38965
- },
38966
- "decoder.pullHandles": {
38967
- capName: "decoder",
38968
- capScope: "system",
38969
- addonId: null,
38970
- access: "view"
38971
- },
38972
- "decoder.pushPacket": {
38973
- capName: "decoder",
38974
- capScope: "system",
38975
- addonId: null,
38976
- access: "view"
38977
- },
38978
38667
  "decoder.reprobeHwaccel": {
38979
38668
  capName: "decoder",
38980
38669
  capScope: "system",
38981
38670
  addonId: null,
38982
38671
  access: "create"
38983
38672
  },
38984
- "decoder.supportsCodec": {
38985
- capName: "decoder",
38986
- capScope: "system",
38987
- addonId: null,
38988
- access: "view"
38989
- },
38990
- "decoder.updateConfig": {
38991
- capName: "decoder",
38992
- capScope: "system",
38993
- addonId: null,
38994
- access: "view"
38995
- },
38996
38673
  "detectionPipeline.applyDeviceSettingsPatch": {
38997
38674
  capName: "detection-pipeline",
38998
38675
  capScope: "device",
@@ -42083,12 +41760,6 @@ Object.freeze({
42083
41760
  addonId: null,
42084
41761
  access: "delete"
42085
41762
  },
42086
- "pipelineExecutor.deleteTemplate": {
42087
- capName: "pipeline-executor",
42088
- capScope: "system",
42089
- addonId: null,
42090
- access: "delete"
42091
- },
42092
41763
  "pipelineExecutor.downloadModel": {
42093
41764
  capName: "pipeline-executor",
42094
41765
  capScope: "system",
@@ -42227,12 +41898,6 @@ Object.freeze({
42227
41898
  addonId: null,
42228
41899
  access: "view"
42229
41900
  },
42230
- "pipelineExecutor.listTemplates": {
42231
- capName: "pipeline-executor",
42232
- capScope: "system",
42233
- addonId: null,
42234
- access: "view"
42235
- },
42236
41901
  "pipelineExecutor.rearmInferenceDevice": {
42237
41902
  capName: "pipeline-executor",
42238
41903
  capScope: "system",
@@ -42257,12 +41922,6 @@ Object.freeze({
42257
41922
  addonId: null,
42258
41923
  access: "create"
42259
41924
  },
42260
- "pipelineExecutor.saveTemplate": {
42261
- capName: "pipeline-executor",
42262
- capScope: "system",
42263
- addonId: null,
42264
- access: "create"
42265
- },
42266
41925
  "pipelineExecutor.setVideoPipelineSteps": {
42267
41926
  capName: "pipeline-executor",
42268
41927
  capScope: "system",
@@ -42281,12 +41940,6 @@ Object.freeze({
42281
41940
  addonId: null,
42282
41941
  access: "create"
42283
41942
  },
42284
- "pipelineExecutor.updateTemplate": {
42285
- capName: "pipeline-executor",
42286
- capScope: "system",
42287
- addonId: null,
42288
- access: "create"
42289
- },
42290
41943
  "pipelineExecutor.validatePipeline": {
42291
41944
  capName: "pipeline-executor",
42292
41945
  capScope: "system",
@@ -42317,12 +41970,6 @@ Object.freeze({
42317
41970
  addonId: null,
42318
41971
  access: "create"
42319
41972
  },
42320
- "pipelineOrchestrator.deleteTemplate": {
42321
- capName: "pipeline-orchestrator",
42322
- capScope: "system",
42323
- addonId: null,
42324
- access: "delete"
42325
- },
42326
41973
  "pipelineOrchestrator.getAgentLoad": {
42327
41974
  capName: "pipeline-orchestrator",
42328
41975
  capScope: "system",
@@ -42473,12 +42120,6 @@ Object.freeze({
42473
42120
  addonId: null,
42474
42121
  access: "view"
42475
42122
  },
42476
- "pipelineOrchestrator.listTemplates": {
42477
- capName: "pipeline-orchestrator",
42478
- capScope: "system",
42479
- addonId: null,
42480
- access: "view"
42481
- },
42482
42123
  "pipelineOrchestrator.pauseForStorageMigration": {
42483
42124
  capName: "pipeline-orchestrator",
42484
42125
  capScope: "system",
@@ -42533,12 +42174,6 @@ Object.freeze({
42533
42174
  addonId: null,
42534
42175
  access: "create"
42535
42176
  },
42536
- "pipelineOrchestrator.saveTemplate": {
42537
- capName: "pipeline-orchestrator",
42538
- capScope: "system",
42539
- addonId: null,
42540
- access: "create"
42541
- },
42542
42177
  "pipelineOrchestrator.setAgentCapabilities": {
42543
42178
  capName: "pipeline-orchestrator",
42544
42179
  capScope: "system",
@@ -42647,12 +42282,6 @@ Object.freeze({
42647
42282
  addonId: null,
42648
42283
  access: "create"
42649
42284
  },
42650
- "pipelineOrchestrator.updateTemplate": {
42651
- capName: "pipeline-orchestrator",
42652
- capScope: "system",
42653
- addonId: null,
42654
- access: "create"
42655
- },
42656
42285
  "pipelineRunner.attachCamera": {
42657
42286
  capName: "pipeline-runner",
42658
42287
  capScope: "system",
@@ -44087,12 +43716,6 @@ Object.freeze({
44087
43716
  addonId: null,
44088
43717
  access: "view"
44089
43718
  },
44090
- "streamBroker.pullFrameHandles": {
44091
- capName: "stream-broker",
44092
- capScope: "system",
44093
- addonId: null,
44094
- access: "view"
44095
- },
44096
43719
  "streamBroker.regenerateRtspToken": {
44097
43720
  capName: "stream-broker",
44098
43721
  capScope: "system",
@@ -44159,12 +43782,6 @@ Object.freeze({
44159
43782
  addonId: null,
44160
43783
  access: "create"
44161
43784
  },
44162
- "streamBroker.subscribeFrames": {
44163
- capName: "stream-broker",
44164
- capScope: "system",
44165
- addonId: null,
44166
- access: "create"
44167
- },
44168
43785
  "streamBroker.unassignProfile": {
44169
43786
  capName: "stream-broker",
44170
43787
  capScope: "system",
@@ -44177,12 +43794,6 @@ Object.freeze({
44177
43794
  addonId: null,
44178
43795
  access: "create"
44179
43796
  },
44180
- "streamBroker.unsubscribeFrames": {
44181
- capName: "stream-broker",
44182
- capScope: "system",
44183
- addonId: null,
44184
- access: "create"
44185
- },
44186
43797
  "streamCatalog.getCatalog": {
44187
43798
  capName: "stream-catalog",
44188
43799
  capScope: "device",
@@ -46696,11 +46307,6 @@ Object.freeze({
46696
46307
  form: "single",
46697
46308
  optional: false
46698
46309
  }],
46699
- "decoder.createSession": [{
46700
- name: "deviceId",
46701
- form: "single",
46702
- optional: true
46703
- }],
46704
46310
  "detectionPipeline.applyDeviceSettingsPatch": [{
46705
46311
  name: "deviceId",
46706
46312
  form: "single",