@camstack/addon-osd-manager 0.1.186 → 0.1.187

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-Dp0R0q3Z.mjs → MotionZonesSettings-DExh7cfG.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-IPP5tsg4.mjs → PrivacyMaskSettings-D7DD3Bjn.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-wh-xCA6m.mjs → SceneMonitorEditor-CSGICuxL.mjs} +3 -3
  4. package/dist/_stub.js +44 -37
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-Cr3qSOlj.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-CqKqHB_X.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-xwBgquo5.mjs +26 -0
  7. package/dist/addon-osd-manager.css +1 -1
  8. package/dist/{hostInit-Byg5VNXi.mjs → hostInit-B0_eqBVt.mjs} +3 -3
  9. package/dist/index.js +31 -357
  10. package/dist/index.mjs +31 -357
  11. package/dist/{player-overlays-C2udddNf.mjs → player-overlays-BIS82ltZ.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-Bef0FhzN.mjs → responsive-B3EaDJYd.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-OXVinJYb.mjs → scene-monitor-copy-b6ZWnJc9.mjs} +1 -1
  15. package/dist/{square-ClhvKotL.mjs → square-DnMZ8-h0.mjs} +1 -1
  16. package/dist/{trash-2-DtyxSKWI.mjs → trash-2-Cd7WoJCB.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-2lDHA88N.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-CbqzvZt_.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-fuPdAfsY.mjs +0 -26
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- //#region ../types/dist/event-category-BGmz_oxW.mjs
5
+ //#region ../types/dist/event-category-B_0XEcLF.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -503,15 +503,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
503
503
  EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
504
504
  EventCategory["AgentBackupActivated"] = "agent.backup.activated";
505
505
  EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
506
- /**
507
- * Per-agent hwaccel preference changed (user override set, cleared, or
508
- * re-probed). Observability event — decoders pull the current pref at
509
- * `createSession`, so running sessions keep their current backend until
510
- * they rotate naturally (camera add/remove, stream restart). Future
511
- * work can wire a listener in stream-broker that force-rotates live
512
- * sessions; for now this event powers logs + admin-UI toast feedback.
513
- */
514
- EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
515
506
  EventCategory["MotionAnalysis"] = "detection.motion-analysis";
516
507
  /** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
517
508
  EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
@@ -5382,7 +5373,7 @@ var ZodIssueCode = {
5382
5373
  var ZodFirstPartyTypeKind;
5383
5374
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5384
5375
  //#endregion
5385
- //#region ../types/dist/sleep-DAJ9Er57.mjs
5376
+ //#region ../types/dist/sleep-BNeXenvr.mjs
5386
5377
  /**
5387
5378
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5388
5379
  * window to float samples (D455).
@@ -6748,32 +6739,12 @@ object({
6748
6739
  audioCodec: string().optional(),
6749
6740
  metadata: record(string(), unknown()).readonly().optional()
6750
6741
  });
6751
- var EncodedPacketSchema = object({
6752
- type: _enum(["video", "audio"]),
6753
- data: _instanceof(Uint8Array),
6754
- pts: number(),
6755
- dts: number(),
6756
- keyframe: boolean(),
6757
- codec: string()
6758
- });
6759
- var DecodedFrameSchema = object({
6760
- data: _instanceof(Uint8Array),
6761
- width: number(),
6762
- height: number(),
6763
- format: _enum([
6764
- "jpeg",
6765
- "rgb",
6766
- "bgr",
6767
- "yuv420",
6768
- "gray"
6769
- ]),
6770
- timestamp: number()
6771
- });
6772
6742
  /**
6773
6743
  * Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
6774
6744
  * frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
6775
- * interface in `interfaces/frame-handle.ts` field-for-field so a decoder cap
6776
- * method (`pullHandles`) can carry handles over tRPC / Moleculer.
6745
+ * interface in `interfaces/frame-handle.ts` field-for-field so a cap method
6746
+ * (the runner's native-crop and pipeline-executor inputs) can carry handles
6747
+ * over tRPC / Moleculer.
6777
6748
  *
6778
6749
  * The `satisfies` assertion below pins this schema to the interface: if a
6779
6750
  * field is added to / removed from `FrameHandle` without a matching schema
@@ -6799,50 +6770,6 @@ var FrameHandleSchema = object({
6799
6770
  slotCount: number().int().positive()
6800
6771
  });
6801
6772
  /**
6802
- * Pixel format a frame-handle subscriber can request from the broker
6803
- * (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
6804
- * `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
6805
- * `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
6806
- * payload, and no decoded-frame consumer requests it over the shm plane.
6807
- */
6808
- var FrameHandleFormatSchema = _enum([
6809
- "rgb",
6810
- "bgr",
6811
- "yuv420",
6812
- "gray"
6813
- ]);
6814
- /**
6815
- * Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
6816
- * broker for a `FrameHandle` stream of one `format`; the broker maintains one
6817
- * shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
6818
- * subscriber (motion) and an `rgb` subscriber (detection) each read the format
6819
- * they asked for with no broker-side conversion.
6820
- */
6821
- var SubscribeFramesInputSchema = object({
6822
- brokerId: string(),
6823
- format: FrameHandleFormatSchema,
6824
- /**
6825
- * Optional reader-side cadence hint in frames per second. The broker does
6826
- * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
6827
- * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
6828
- * the consumer can pace its own `pullFrameHandles` polling.
6829
- */
6830
- maxFps: number().positive().optional(),
6831
- /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
6832
- tag: string().optional()
6833
- });
6834
- /**
6835
- * Result of `stream-broker.subscribeFrames`. The consumer then polls
6836
- * `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
6837
- * `FrameHandle` to a `FrameRingReader`.
6838
- */
6839
- var SubscribeFramesResultSchema = object({
6840
- /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
6841
- subscriptionId: string(),
6842
- /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
6843
- maxFps: number().nonnegative()
6844
- });
6845
- /**
6846
6773
  * Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
6847
6774
  * `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
6848
6775
  * sample bytes plus the track parameters a consumer needs to interpret them.
@@ -6850,8 +6777,8 @@ var SubscribeFramesResultSchema = object({
6850
6777
  * Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
6851
6778
  * Float32 PCM), so unlike video frames they ship their bytes INLINE over
6852
6779
  * tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
6853
- * (the wire-serialisable supertype of `Buffer`) to match `DecodedFrameSchema`
6854
- * / `EncodedPacketSchema`'s precedent; a `Buffer` is assignable to it.
6780
+ * (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
6781
+ * it.
6855
6782
  */
6856
6783
  var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
6857
6784
  var DecodedAudioChunkSchema = object({
@@ -6869,11 +6796,10 @@ var DecodedAudioChunkSchema = object({
6869
6796
  format: AudioChunkFormatSchema.optional()
6870
6797
  });
6871
6798
  /**
6872
- * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). The
6873
- * handle-free, ship-bytes-inline analogue of `subscribeFrames`: a consumer
6874
- * asks the broker for the decoded audio-chunk stream of one broker; the
6875
- * broker keeps a per-subscription bounded FIFO queue the consumer drains via
6876
- * `pullAudioChunks`.
6799
+ * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
6800
+ * its bytes inline: a consumer asks the broker for the decoded audio-chunk
6801
+ * stream of one broker; the broker keeps a per-subscription bounded FIFO queue
6802
+ * the consumer drains via `pullAudioChunks`.
6877
6803
  */
6878
6804
  var SubscribeAudioChunksInputSchema = object({
6879
6805
  brokerId: string(),
@@ -6904,9 +6830,7 @@ var BrokerStatsSchema = object({
6904
6830
  "stopped"
6905
6831
  ]),
6906
6832
  inputFps: number(),
6907
- decodeFps: number(),
6908
6833
  encodedSubscribers: number(),
6909
- decodedSubscribers: number(),
6910
6834
  uptimeMs: number(),
6911
6835
  bitrateKbps: number(),
6912
6836
  idrIntervalMs: number(),
@@ -6919,14 +6843,6 @@ var BrokerStatsSchema = object({
6919
6843
  preBufferMs: number(),
6920
6844
  preBufferPackets: number(),
6921
6845
  /**
6922
- * Moleculer node id of the decoder provider currently servicing this
6923
- * stream's decoded subscribers. `null` until the deferred decoder is
6924
- * created (no decoded clients yet, or codec not detected). Surfaces the
6925
- * runtime decoder placement so the UI can show "Decoder: <agent>" without
6926
- * a separate cap call per broker.
6927
- */
6928
- decoderNodeId: string().nullable(),
6929
- /**
6930
6846
  * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
6931
6847
  * when the stream has no audio track or the broker is in cold start.
6932
6848
  * `supported = false` means the codec was detected but the local
@@ -10360,70 +10276,6 @@ var StorageLocationDeclarationSchema = object({
10360
10276
  "backup"
10361
10277
  ]).optional()
10362
10278
  });
10363
- var DecoderStatsSchema = object({
10364
- inputFps: number(),
10365
- outputFps: number(),
10366
- avgDecodeTimeMs: number(),
10367
- droppedFrames: number(),
10368
- /**
10369
- * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
10370
- * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
10371
- * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
10372
- * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
10373
- */
10374
- lagMs: number().optional(),
10375
- effectiveFps: number().optional(),
10376
- adaptiveFps: number().optional()
10377
- });
10378
- var DecoderSessionConfigSchema = object({
10379
- codec: string(),
10380
- maxFps: number().default(0),
10381
- outputFormat: _enum([
10382
- "jpeg",
10383
- "rgb",
10384
- "bgr",
10385
- "yuv420",
10386
- "gray"
10387
- ]).default("jpeg"),
10388
- scale: number().default(1),
10389
- width: number().optional(),
10390
- height: number().optional(),
10391
- /**
10392
- * Identifier of the camera this decoder session serves. Optional
10393
- * because the cap is generic (any caller could request decode), but
10394
- * stream-broker passes it so decoder logs include `deviceId` for
10395
- * per-camera filtering when diagnosing failures (e.g. node-av
10396
- * sendPacket errors on a single hung camera).
10397
- */
10398
- deviceId: number().int().nonnegative().optional(),
10399
- /**
10400
- * Free-form tag for log scoping. Stream-broker uses
10401
- * `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
10402
- * on every line so `grep tag=broker:5/high` filters one camera
10403
- * profile cleanly.
10404
- */
10405
- tag: string().optional(),
10406
- /**
10407
- * Where the session delivers decoded frames (Phase 5 / D9):
10408
- *
10409
- * - `'callback'` (default) — the legacy pixel path: decoded frames are
10410
- * buffered as `DecodedFrame`s and drained via `pullFrames`.
10411
- * - `'shm'` — the shared-memory frame plane: decoded frames are written
10412
- * into an OS shared-memory ring and drained as zero-pixel
10413
- * `FrameHandle`s via `pullHandles`. A session is one mode or the
10414
- * other — `pullFrames` returns nothing for an `'shm'` session and
10415
- * `pullHandles` returns nothing for a `'callback'` session.
10416
- */
10417
- frameSink: _enum(["callback", "shm"]).default("callback"),
10418
- /**
10419
- * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
10420
- * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
10421
- * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
10422
- * stream-broker's `streamingDebug` gate — off by default so production logs
10423
- * stay quiet and the emit path pays zero per-frame cost when disabled.
10424
- */
10425
- debug: boolean().optional()
10426
- });
10427
10279
  /**
10428
10280
  * Per-component log CHANNELS — the gate a hot path consults, and the registry
10429
10281
  * an addon declares its channels in.
@@ -13027,13 +12879,6 @@ var BrokerRtspClientSchema = object({
13027
12879
  lastRtpAt: number(),
13028
12880
  bytesSent: number()
13029
12881
  });
13030
- var BrokerDecodedClientSchema = object({
13031
- tag: string(),
13032
- subscribedAt: number(),
13033
- maxFps: number(),
13034
- framesDelivered: number(),
13035
- framesDropped: number()
13036
- });
13037
12882
  var BrokerAudioClientSchema = object({
13038
12883
  tag: string(),
13039
12884
  subscribedAt: number(),
@@ -13125,7 +12970,6 @@ var BrokerEncodedClientSchema = object({
13125
12970
  });
13126
12971
  var BrokerClientsSchema = object({
13127
12972
  rtsp: array(BrokerRtspClientSchema).readonly(),
13128
- decoded: array(BrokerDecodedClientSchema).readonly(),
13129
12973
  audio: array(BrokerAudioClientSchema).readonly(),
13130
12974
  encoded: array(BrokerEncodedClientSchema).readonly(),
13131
12975
  pipeClients: number(),
@@ -13617,11 +13461,7 @@ var streamBrokerCapability = {
13617
13461
  listClients: method(object({ brokerId: string() }), BrokerClientsSchema),
13618
13462
  killClient: method(object({
13619
13463
  brokerId: string(),
13620
- channel: _enum([
13621
- "rtsp",
13622
- "decoded",
13623
- "audio"
13624
- ]),
13464
+ channel: _enum(["rtsp", "audio"]),
13625
13465
  handle: string()
13626
13466
  }), object({ killed: boolean() }), {
13627
13467
  kind: "mutation",
@@ -13720,31 +13560,6 @@ var streamBrokerCapability = {
13720
13560
  maxCount: number().int().positive().default(8)
13721
13561
  }), array(DecodedAudioChunkSchema).readonly()),
13722
13562
  unsubscribeAudioChunks: method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }),
13723
- /**
13724
- * ── Shared-memory frame plane (Phase 5 / D9) ──────────────────────
13725
- *
13726
- * The handle-based replacement for the live-object `IStreamBroker.
13727
- * onDecodedFrame` callback path. A consumer:
13728
- *
13729
- * 1. `subscribeFrames({ brokerId, format })` — the broker spins up
13730
- * (or reuses) a `frameSink: 'shm'` decoder session producing that
13731
- * `format` and returns a `subscriptionId`.
13732
- * 2. polls `pullFrameHandles({ subscriptionId, maxCount })` — drains
13733
- * zero-pixel `FrameHandle[]`; each handle is fed to a
13734
- * `FrameRingReader` that opens the named shm segment and reads the
13735
- * pixels back zero-copy.
13736
- * 3. `unsubscribeFrames({ subscriptionId })` on teardown.
13737
- *
13738
- * The broker keeps one shm ring per `(brokerId, format)` actually
13739
- * requested — no broker-side `sharp` conversion. fps throttling is
13740
- * implicit (latest-wins ring reads drop frames for a slow consumer).
13741
- */
13742
- subscribeFrames: method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }),
13743
- pullFrameHandles: method(object({
13744
- subscriptionId: string(),
13745
- maxCount: number().int().positive().default(4)
13746
- }), array(FrameHandleSchema).readonly()),
13747
- unsubscribeFrames: method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }),
13748
13563
  setPreBufferDuration: method(object({
13749
13564
  brokerId: string(),
13750
13565
  seconds: number().min(0).max(30)
@@ -15460,72 +15275,18 @@ id: union([string(), number()]) }), {
15460
15275
  })
15461
15276
  }
15462
15277
  };
15463
- /**
15464
- * shm ring usage stats for a `frameSink: 'shm'` decoder session —
15465
- * exposed via `decoder.getShmStats` so downstream consumers can
15466
- * observe ring pressure (slot count, byte budget, hit/miss ratio).
15467
- */
15468
- var ShmRingStatsSchema = object({
15469
- sessionId: string(),
15470
- slotCount: number().int(),
15471
- slotByteLength: number().int(),
15472
- segmentBytes: number().int(),
15473
- budgetMb: number().int(),
15474
- framesWritten: number().int(),
15475
- getFrameHits: number().int(),
15476
- getFrameMisses: number().int()
15477
- });
15478
15278
  var decoderCapability = {
15479
15279
  name: "decoder",
15480
15280
  scope: "system",
15481
15281
  mode: "singleton",
15482
15282
  preferredProvider: "decoder-nodeav",
15483
15283
  methods: {
15484
- supportsCodec: method(object({ codec: string() }), boolean()),
15485
15284
  getInfo: method(_void(), object({
15486
15285
  id: string(),
15487
15286
  name: string(),
15488
- isPullMode: boolean().optional(),
15489
- priority: number().optional(),
15490
15287
  hwaccel: string().optional(),
15491
15288
  probedBestHwaccel: string().optional()
15492
15289
  })),
15493
- createSession: method(DecoderSessionConfigSchema, object({
15494
- sessionId: string(),
15495
- nodeId: string()
15496
- })),
15497
- destroySession: method(object({ sessionId: string() }), _void()),
15498
- pushPacket: method(object({
15499
- sessionId: string(),
15500
- packet: EncodedPacketSchema
15501
- }), _void()),
15502
- openStream: method(object({
15503
- sessionId: string(),
15504
- url: string()
15505
- }), _void()),
15506
- pullFrames: method(object({
15507
- sessionId: string(),
15508
- maxCount: number().default(1),
15509
- waitMs: number().optional()
15510
- }), array(DecodedFrameSchema)),
15511
- pullHandles: method(object({
15512
- sessionId: string(),
15513
- maxCount: number().default(1),
15514
- waitMs: number().optional()
15515
- }), array(FrameHandleSchema)),
15516
- getFrame: method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()),
15517
- getShmStats: method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()),
15518
- updateConfig: method(object({
15519
- sessionId: string(),
15520
- config: DecoderSessionConfigSchema.partial()
15521
- }), _void()),
15522
- getStats: method(object({ sessionId: string() }), DecoderStatsSchema),
15523
- listActiveSessions: method(_void(), array(object({
15524
- sessionId: string(),
15525
- codec: string(),
15526
- outputFormat: string(),
15527
- createdAtMs: number()
15528
- })).readonly()),
15529
15290
  /**
15530
15291
  * Re-run the host platform-probe for the decoder's hwaccel backend
15531
15292
  * and write the detected value into the addon's own global
@@ -24767,8 +24528,8 @@ Object.freeze(Object.fromEntries([{
24767
24528
  var CLUSTER_STEP_SETTING_FIELDS = [{
24768
24529
  stepId: "face-embedding",
24769
24530
  key: "minLandmarkFaceSize",
24770
- label: "Min face size for recognition (detection px)",
24771
- 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.",
24531
+ label: "Min face size to embed (detection-frame px)",
24532
+ 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.",
24772
24533
  type: "slider",
24773
24534
  min: 0,
24774
24535
  max: 64,
@@ -29343,14 +29104,15 @@ var RunnerLocalLoadSchema = object({
29343
29104
  * Per-inference-device live load (multi-device C4). One entry per deviceKey
29344
29105
  * this runner currently has attached cameras on, so the orchestrator's second
29345
29106
  * `balance()` pass (over a node's devices) weights on real per-pool session
29346
- * counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
29347
- * per device is 0 until the pool backlog gets a public accessor (follow-up).
29107
+ * counts. Empty on single-device / pre-multi-device runners. There is no
29108
+ * per-device queue depth: the inference pool's backlog has no accessor, and
29109
+ * a field that always read 0 was removed rather than shown as a measurement
29110
+ * (D762).
29348
29111
  */
29349
29112
  devices: array(object({
29350
29113
  deviceKey: string(),
29351
29114
  backend: string(),
29352
- attachedCameras: number(),
29353
- queueDepthTotal: number()
29115
+ attachedCameras: number()
29354
29116
  })).default([]),
29355
29117
  /** Hardware capability flags reported by this node. */
29356
29118
  hardware: object({
@@ -29865,7 +29627,10 @@ var PipelineAssignmentSchema = object({
29865
29627
  });
29866
29628
  /**
29867
29629
  * Per-agent load summary surfaced to the load balancer + dashboards.
29868
- * Aggregated from each runner's `getLocalLoad` cap call.
29630
+ * Aggregated from each runner's `getLocalLoad` cap call. In the
29631
+ * `getAgentLoad` report, a single-device node's default-pool sessions (no
29632
+ * `deviceKey`) are credited to its one eligible device in `load.devices` —
29633
+ * the default pool IS that device (D745); the balancer's census stays raw.
29869
29634
  */
29870
29635
  var AgentLoadSummarySchema = object({
29871
29636
  nodeId: string(),
@@ -29954,8 +29719,14 @@ var CameraBrokerStatusSchema = object({
29954
29719
  width: number(),
29955
29720
  height: number(),
29956
29721
  subscribers: number(),
29957
- inFps: number(),
29958
- outFps: number()
29722
+ /**
29723
+ * Encoded packets/s the broker receives from the camera. null when the
29724
+ * broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
29725
+ * There is no output rate: decoding runs in the session decode workers, not
29726
+ * in the broker, so the broker's own decoded-frame rate is 0 on every live
29727
+ * camera and is not served (D758).
29728
+ */
29729
+ inFps: number().nullable()
29959
29730
  })).readonly(),
29960
29731
  webrtcSessions: number(),
29961
29732
  rtspRestream: boolean()
@@ -33752,8 +33523,6 @@ var WebrtcStreamChoiceSchema = object({
33752
33523
  ]).nullable(),
33753
33524
  /** Input FPS from the camera (null for adaptive). */
33754
33525
  inputFps: number().nullable(),
33755
- /** Decoded FPS (null for adaptive). */
33756
- decodeFps: number().nullable(),
33757
33526
  /** Bitrate in kbps (null for adaptive). */
33758
33527
  bitrateKbps: number().nullable()
33759
33528
  });
@@ -48343,90 +48112,18 @@ Object.freeze({
48343
48112
  addonId: null,
48344
48113
  access: "create"
48345
48114
  },
48346
- "decoder.createSession": {
48347
- capName: "decoder",
48348
- capScope: "system",
48349
- addonId: null,
48350
- access: "view"
48351
- },
48352
- "decoder.destroySession": {
48353
- capName: "decoder",
48354
- capScope: "system",
48355
- addonId: null,
48356
- access: "delete"
48357
- },
48358
- "decoder.getFrame": {
48359
- capName: "decoder",
48360
- capScope: "system",
48361
- addonId: null,
48362
- access: "view"
48363
- },
48364
48115
  "decoder.getInfo": {
48365
48116
  capName: "decoder",
48366
48117
  capScope: "system",
48367
48118
  addonId: null,
48368
48119
  access: "view"
48369
48120
  },
48370
- "decoder.getShmStats": {
48371
- capName: "decoder",
48372
- capScope: "system",
48373
- addonId: null,
48374
- access: "view"
48375
- },
48376
- "decoder.getStats": {
48377
- capName: "decoder",
48378
- capScope: "system",
48379
- addonId: null,
48380
- access: "view"
48381
- },
48382
- "decoder.listActiveSessions": {
48383
- capName: "decoder",
48384
- capScope: "system",
48385
- addonId: null,
48386
- access: "view"
48387
- },
48388
- "decoder.openStream": {
48389
- capName: "decoder",
48390
- capScope: "system",
48391
- addonId: null,
48392
- access: "view"
48393
- },
48394
- "decoder.pullFrames": {
48395
- capName: "decoder",
48396
- capScope: "system",
48397
- addonId: null,
48398
- access: "view"
48399
- },
48400
- "decoder.pullHandles": {
48401
- capName: "decoder",
48402
- capScope: "system",
48403
- addonId: null,
48404
- access: "view"
48405
- },
48406
- "decoder.pushPacket": {
48407
- capName: "decoder",
48408
- capScope: "system",
48409
- addonId: null,
48410
- access: "view"
48411
- },
48412
48121
  "decoder.reprobeHwaccel": {
48413
48122
  capName: "decoder",
48414
48123
  capScope: "system",
48415
48124
  addonId: null,
48416
48125
  access: "create"
48417
48126
  },
48418
- "decoder.supportsCodec": {
48419
- capName: "decoder",
48420
- capScope: "system",
48421
- addonId: null,
48422
- access: "view"
48423
- },
48424
- "decoder.updateConfig": {
48425
- capName: "decoder",
48426
- capScope: "system",
48427
- addonId: null,
48428
- access: "view"
48429
- },
48430
48127
  "detectionPipeline.applyDeviceSettingsPatch": {
48431
48128
  capName: "detection-pipeline",
48432
48129
  capScope: "device",
@@ -53473,12 +53170,6 @@ Object.freeze({
53473
53170
  addonId: null,
53474
53171
  access: "view"
53475
53172
  },
53476
- "streamBroker.pullFrameHandles": {
53477
- capName: "stream-broker",
53478
- capScope: "system",
53479
- addonId: null,
53480
- access: "view"
53481
- },
53482
53173
  "streamBroker.regenerateRtspToken": {
53483
53174
  capName: "stream-broker",
53484
53175
  capScope: "system",
@@ -53545,12 +53236,6 @@ Object.freeze({
53545
53236
  addonId: null,
53546
53237
  access: "create"
53547
53238
  },
53548
- "streamBroker.subscribeFrames": {
53549
- capName: "stream-broker",
53550
- capScope: "system",
53551
- addonId: null,
53552
- access: "create"
53553
- },
53554
53239
  "streamBroker.unassignProfile": {
53555
53240
  capName: "stream-broker",
53556
53241
  capScope: "system",
@@ -53563,12 +53248,6 @@ Object.freeze({
53563
53248
  addonId: null,
53564
53249
  access: "create"
53565
53250
  },
53566
- "streamBroker.unsubscribeFrames": {
53567
- capName: "stream-broker",
53568
- capScope: "system",
53569
- addonId: null,
53570
- access: "create"
53571
- },
53572
53251
  "streamCatalog.getCatalog": {
53573
53252
  capName: "stream-catalog",
53574
53253
  capScope: "device",
@@ -56258,11 +55937,6 @@ Object.freeze({
56258
55937
  form: "single",
56259
55938
  optional: false
56260
55939
  }],
56261
- "decoder.createSession": [{
56262
- name: "deviceId",
56263
- form: "single",
56264
- optional: true
56265
- }],
56266
55940
  "detectionPipeline.applyDeviceSettingsPatch": [{
56267
55941
  name: "deviceId",
56268
55942
  form: "single",