@camstack/addon-pipeline 1.2.342 → 1.2.344

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 (35) hide show
  1. package/dist/audio-analyzer/index.js +5 -4
  2. package/dist/audio-analyzer/index.mjs +5 -4
  3. package/dist/{custom-model-catalog-BjPZrWX3.mjs → custom-model-catalog-CG8fXDWC.mjs} +3 -3
  4. package/dist/{custom-model-catalog-DPBG06HE.js → custom-model-catalog-Cu1C2kTA.js} +3 -3
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-w_gA9z8W.js → dist-DNsARIUD.js} +98 -349
  8. package/dist/{dist-BWzBHFEB.mjs → dist-DUr_0s5c.mjs} +98 -349
  9. package/dist/{model-catalogs-Dseq1bmN.mjs → model-catalogs-BMsnPwTI.mjs} +1 -1
  10. package/dist/{model-catalogs-ll-ggTUb.js → model-catalogs-Y509H8MT.js} +1 -1
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-BTsWSPyQ.js → node-D-U3T-h-.js} +1 -1
  14. package/dist/{node-B7gAWBnv.mjs → node-DhrskFZ_.mjs} +1 -1
  15. package/dist/pipeline-runner/index.js +11 -13
  16. package/dist/pipeline-runner/index.mjs +11 -13
  17. package/dist/{process-memory-Nq3qwp-q.js → process-memory-BUrTDsRR.js} +1 -1
  18. package/dist/{process-memory-BYs3sxnT.mjs → process-memory-DXtI2GWk.mjs} +1 -1
  19. package/dist/recorder/index.js +2 -13
  20. package/dist/recorder/index.mjs +2 -13
  21. package/dist/{segment-demux-js-C7Bk1l_R.mjs → segment-demux-js-Bv7s-_uv.mjs} +1 -1
  22. package/dist/{segment-demux-js-D4kTUDck.js → segment-demux-js-vZ6iniOU.js} +1 -1
  23. package/dist/stream-broker/_stub.js +48 -130
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-By8a97Br.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BH3o1g9i.mjs} +3 -3
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C2VoXjqc.mjs +26 -0
  26. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DATpA6mb.mjs +26 -0
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-BU65uPCY.mjs → hostInit-op1zWltj.mjs} +3 -3
  30. package/dist/stream-broker/index.js +49 -1693
  31. package/dist/stream-broker/index.mjs +54 -1696
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/package.json +1 -6
  34. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B204qFeL.mjs +0 -26
  35. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Czhfk3hD.mjs +0 -26
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- //#region ../types/dist/event-category-BGmz_oxW.mjs
2
+ //#region ../types/dist/event-category-B_0XEcLF.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -500,15 +500,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
500
500
  EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
501
501
  EventCategory["AgentBackupActivated"] = "agent.backup.activated";
502
502
  EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
503
- /**
504
- * Per-agent hwaccel preference changed (user override set, cleared, or
505
- * re-probed). Observability event — decoders pull the current pref at
506
- * `createSession`, so running sessions keep their current backend until
507
- * they rotate naturally (camera add/remove, stream restart). Future
508
- * work can wire a listener in stream-broker that force-rotates live
509
- * sessions; for now this event powers logs + admin-UI toast feedback.
510
- */
511
- EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
512
503
  EventCategory["MotionAnalysis"] = "detection.motion-analysis";
513
504
  /** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
514
505
  EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
@@ -5379,7 +5370,7 @@ var ZodIssueCode = {
5379
5370
  var ZodFirstPartyTypeKind;
5380
5371
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5381
5372
  //#endregion
5382
- //#region ../types/dist/sleep-DAJ9Er57.mjs
5373
+ //#region ../types/dist/sleep-BNeXenvr.mjs
5383
5374
  /**
5384
5375
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5385
5376
  * window to float samples (D455).
@@ -6857,32 +6848,12 @@ object({
6857
6848
  audioCodec: string().optional(),
6858
6849
  metadata: record(string(), unknown()).readonly().optional()
6859
6850
  });
6860
- var EncodedPacketSchema = object({
6861
- type: _enum(["video", "audio"]),
6862
- data: _instanceof(Uint8Array),
6863
- pts: number(),
6864
- dts: number(),
6865
- keyframe: boolean(),
6866
- codec: string()
6867
- });
6868
- var DecodedFrameSchema = object({
6869
- data: _instanceof(Uint8Array),
6870
- width: number(),
6871
- height: number(),
6872
- format: _enum([
6873
- "jpeg",
6874
- "rgb",
6875
- "bgr",
6876
- "yuv420",
6877
- "gray"
6878
- ]),
6879
- timestamp: number()
6880
- });
6881
6851
  /**
6882
6852
  * Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
6883
6853
  * frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
6884
- * interface in `interfaces/frame-handle.ts` field-for-field so a decoder cap
6885
- * method (`pullHandles`) can carry handles over tRPC / Moleculer.
6854
+ * interface in `interfaces/frame-handle.ts` field-for-field so a cap method
6855
+ * (the runner's native-crop and pipeline-executor inputs) can carry handles
6856
+ * over tRPC / Moleculer.
6886
6857
  *
6887
6858
  * The `satisfies` assertion below pins this schema to the interface: if a
6888
6859
  * field is added to / removed from `FrameHandle` without a matching schema
@@ -6908,50 +6879,6 @@ var FrameHandleSchema = object({
6908
6879
  slotCount: number().int().positive()
6909
6880
  });
6910
6881
  /**
6911
- * Pixel format a frame-handle subscriber can request from the broker
6912
- * (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
6913
- * `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
6914
- * `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
6915
- * payload, and no decoded-frame consumer requests it over the shm plane.
6916
- */
6917
- var FrameHandleFormatSchema = _enum([
6918
- "rgb",
6919
- "bgr",
6920
- "yuv420",
6921
- "gray"
6922
- ]);
6923
- /**
6924
- * Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
6925
- * broker for a `FrameHandle` stream of one `format`; the broker maintains one
6926
- * shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
6927
- * subscriber (motion) and an `rgb` subscriber (detection) each read the format
6928
- * they asked for with no broker-side conversion.
6929
- */
6930
- var SubscribeFramesInputSchema = object({
6931
- brokerId: string(),
6932
- format: FrameHandleFormatSchema,
6933
- /**
6934
- * Optional reader-side cadence hint in frames per second. The broker does
6935
- * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
6936
- * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
6937
- * the consumer can pace its own `pullFrameHandles` polling.
6938
- */
6939
- maxFps: number().positive().optional(),
6940
- /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
6941
- tag: string().optional()
6942
- });
6943
- /**
6944
- * Result of `stream-broker.subscribeFrames`. The consumer then polls
6945
- * `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
6946
- * `FrameHandle` to a `FrameRingReader`.
6947
- */
6948
- var SubscribeFramesResultSchema = object({
6949
- /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
6950
- subscriptionId: string(),
6951
- /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
6952
- maxFps: number().nonnegative()
6953
- });
6954
- /**
6955
6882
  * Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
6956
6883
  * `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
6957
6884
  * sample bytes plus the track parameters a consumer needs to interpret them.
@@ -6959,8 +6886,8 @@ var SubscribeFramesResultSchema = object({
6959
6886
  * Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
6960
6887
  * Float32 PCM), so unlike video frames they ship their bytes INLINE over
6961
6888
  * tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
6962
- * (the wire-serialisable supertype of `Buffer`) to match `DecodedFrameSchema`
6963
- * / `EncodedPacketSchema`'s precedent; a `Buffer` is assignable to it.
6889
+ * (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
6890
+ * it.
6964
6891
  */
6965
6892
  var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
6966
6893
  var DecodedAudioChunkSchema = object({
@@ -6978,11 +6905,10 @@ var DecodedAudioChunkSchema = object({
6978
6905
  format: AudioChunkFormatSchema.optional()
6979
6906
  });
6980
6907
  /**
6981
- * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). The
6982
- * handle-free, ship-bytes-inline analogue of `subscribeFrames`: a consumer
6983
- * asks the broker for the decoded audio-chunk stream of one broker; the
6984
- * broker keeps a per-subscription bounded FIFO queue the consumer drains via
6985
- * `pullAudioChunks`.
6908
+ * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
6909
+ * its bytes inline: a consumer asks the broker for the decoded audio-chunk
6910
+ * stream of one broker; the broker keeps a per-subscription bounded FIFO queue
6911
+ * the consumer drains via `pullAudioChunks`.
6986
6912
  */
6987
6913
  var SubscribeAudioChunksInputSchema = object({
6988
6914
  brokerId: string(),
@@ -7013,9 +6939,7 @@ var BrokerStatsSchema = object({
7013
6939
  "stopped"
7014
6940
  ]),
7015
6941
  inputFps: number(),
7016
- decodeFps: number(),
7017
6942
  encodedSubscribers: number(),
7018
- decodedSubscribers: number(),
7019
6943
  uptimeMs: number(),
7020
6944
  bitrateKbps: number(),
7021
6945
  idrIntervalMs: number(),
@@ -7028,14 +6952,6 @@ var BrokerStatsSchema = object({
7028
6952
  preBufferMs: number(),
7029
6953
  preBufferPackets: number(),
7030
6954
  /**
7031
- * Moleculer node id of the decoder provider currently servicing this
7032
- * stream's decoded subscribers. `null` until the deferred decoder is
7033
- * created (no decoded clients yet, or codec not detected). Surfaces the
7034
- * runtime decoder placement so the UI can show "Decoder: <agent>" without
7035
- * a separate cap call per broker.
7036
- */
7037
- decoderNodeId: string().nullable(),
7038
- /**
7039
6955
  * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
7040
6956
  * when the stream has no audio track or the broker is in cold start.
7041
6957
  * `supported = false` means the codec was detected but the local
@@ -12009,70 +11925,6 @@ var StorageLocationDeclarationSchema = object({
12009
11925
  "backup"
12010
11926
  ]).optional()
12011
11927
  });
12012
- var DecoderStatsSchema = object({
12013
- inputFps: number(),
12014
- outputFps: number(),
12015
- avgDecodeTimeMs: number(),
12016
- droppedFrames: number(),
12017
- /**
12018
- * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
12019
- * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
12020
- * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
12021
- * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
12022
- */
12023
- lagMs: number().optional(),
12024
- effectiveFps: number().optional(),
12025
- adaptiveFps: number().optional()
12026
- });
12027
- var DecoderSessionConfigSchema = object({
12028
- codec: string(),
12029
- maxFps: number().default(0),
12030
- outputFormat: _enum([
12031
- "jpeg",
12032
- "rgb",
12033
- "bgr",
12034
- "yuv420",
12035
- "gray"
12036
- ]).default("jpeg"),
12037
- scale: number().default(1),
12038
- width: number().optional(),
12039
- height: number().optional(),
12040
- /**
12041
- * Identifier of the camera this decoder session serves. Optional
12042
- * because the cap is generic (any caller could request decode), but
12043
- * stream-broker passes it so decoder logs include `deviceId` for
12044
- * per-camera filtering when diagnosing failures (e.g. node-av
12045
- * sendPacket errors on a single hung camera).
12046
- */
12047
- deviceId: number().int().nonnegative().optional(),
12048
- /**
12049
- * Free-form tag for log scoping. Stream-broker uses
12050
- * `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
12051
- * on every line so `grep tag=broker:5/high` filters one camera
12052
- * profile cleanly.
12053
- */
12054
- tag: string().optional(),
12055
- /**
12056
- * Where the session delivers decoded frames (Phase 5 / D9):
12057
- *
12058
- * - `'callback'` (default) — the legacy pixel path: decoded frames are
12059
- * buffered as `DecodedFrame`s and drained via `pullFrames`.
12060
- * - `'shm'` — the shared-memory frame plane: decoded frames are written
12061
- * into an OS shared-memory ring and drained as zero-pixel
12062
- * `FrameHandle`s via `pullHandles`. A session is one mode or the
12063
- * other — `pullFrames` returns nothing for an `'shm'` session and
12064
- * `pullHandles` returns nothing for a `'callback'` session.
12065
- */
12066
- frameSink: _enum(["callback", "shm"]).default("callback"),
12067
- /**
12068
- * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
12069
- * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
12070
- * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
12071
- * stream-broker's `streamingDebug` gate — off by default so production logs
12072
- * stay quiet and the emit path pays zero per-frame cost when disabled.
12073
- */
12074
- debug: boolean().optional()
12075
- });
12076
11928
  /**
12077
11929
  * Per-component log CHANNELS — the gate a hot path consults, and the registry
12078
11930
  * an addon declares its channels in.
@@ -14995,13 +14847,6 @@ var BrokerRtspClientSchema = object({
14995
14847
  lastRtpAt: number(),
14996
14848
  bytesSent: number()
14997
14849
  });
14998
- var BrokerDecodedClientSchema = object({
14999
- tag: string(),
15000
- subscribedAt: number(),
15001
- maxFps: number(),
15002
- framesDelivered: number(),
15003
- framesDropped: number()
15004
- });
15005
14850
  var BrokerAudioClientSchema = object({
15006
14851
  tag: string(),
15007
14852
  subscribedAt: number(),
@@ -15093,7 +14938,6 @@ var BrokerEncodedClientSchema = object({
15093
14938
  });
15094
14939
  var BrokerClientsSchema = object({
15095
14940
  rtsp: array(BrokerRtspClientSchema).readonly(),
15096
- decoded: array(BrokerDecodedClientSchema).readonly(),
15097
14941
  audio: array(BrokerAudioClientSchema).readonly(),
15098
14942
  encoded: array(BrokerEncodedClientSchema).readonly(),
15099
14943
  pipeClients: number(),
@@ -15585,11 +15429,7 @@ var streamBrokerCapability = {
15585
15429
  listClients: method(object({ brokerId: string() }), BrokerClientsSchema),
15586
15430
  killClient: method(object({
15587
15431
  brokerId: string(),
15588
- channel: _enum([
15589
- "rtsp",
15590
- "decoded",
15591
- "audio"
15592
- ]),
15432
+ channel: _enum(["rtsp", "audio"]),
15593
15433
  handle: string()
15594
15434
  }), object({ killed: boolean() }), {
15595
15435
  kind: "mutation",
@@ -15688,31 +15528,6 @@ var streamBrokerCapability = {
15688
15528
  maxCount: number().int().positive().default(8)
15689
15529
  }), array(DecodedAudioChunkSchema).readonly()),
15690
15530
  unsubscribeAudioChunks: method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }),
15691
- /**
15692
- * ── Shared-memory frame plane (Phase 5 / D9) ──────────────────────
15693
- *
15694
- * The handle-based replacement for the live-object `IStreamBroker.
15695
- * onDecodedFrame` callback path. A consumer:
15696
- *
15697
- * 1. `subscribeFrames({ brokerId, format })` — the broker spins up
15698
- * (or reuses) a `frameSink: 'shm'` decoder session producing that
15699
- * `format` and returns a `subscriptionId`.
15700
- * 2. polls `pullFrameHandles({ subscriptionId, maxCount })` — drains
15701
- * zero-pixel `FrameHandle[]`; each handle is fed to a
15702
- * `FrameRingReader` that opens the named shm segment and reads the
15703
- * pixels back zero-copy.
15704
- * 3. `unsubscribeFrames({ subscriptionId })` on teardown.
15705
- *
15706
- * The broker keeps one shm ring per `(brokerId, format)` actually
15707
- * requested — no broker-side `sharp` conversion. fps throttling is
15708
- * implicit (latest-wins ring reads drop frames for a slow consumer).
15709
- */
15710
- subscribeFrames: method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }),
15711
- pullFrameHandles: method(object({
15712
- subscriptionId: string(),
15713
- maxCount: number().int().positive().default(4)
15714
- }), array(FrameHandleSchema).readonly()),
15715
- unsubscribeFrames: method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }),
15716
15531
  setPreBufferDuration: method(object({
15717
15532
  brokerId: string(),
15718
15533
  seconds: number().min(0).max(30)
@@ -17015,54 +16830,12 @@ id: union([string(), number()]) }), {
17015
16830
  kind: "mutation",
17016
16831
  auth: "admin"
17017
16832
  });
17018
- /**
17019
- * shm ring usage stats for a `frameSink: 'shm'` decoder session —
17020
- * exposed via `decoder.getShmStats` so downstream consumers can
17021
- * observe ring pressure (slot count, byte budget, hit/miss ratio).
17022
- */
17023
- var ShmRingStatsSchema = object({
17024
- sessionId: string(),
17025
- slotCount: number().int(),
17026
- slotByteLength: number().int(),
17027
- segmentBytes: number().int(),
17028
- budgetMb: number().int(),
17029
- framesWritten: number().int(),
17030
- getFrameHits: number().int(),
17031
- getFrameMisses: number().int()
17032
- });
17033
- method(object({ codec: string() }), boolean()), method(_void(), object({
16833
+ method(_void(), object({
17034
16834
  id: string(),
17035
16835
  name: string(),
17036
- isPullMode: boolean().optional(),
17037
- priority: number().optional(),
17038
16836
  hwaccel: string().optional(),
17039
16837
  probedBestHwaccel: string().optional()
17040
- })), method(DecoderSessionConfigSchema, object({
17041
- sessionId: string(),
17042
- nodeId: string()
17043
- })), method(object({ sessionId: string() }), _void()), method(object({
17044
- sessionId: string(),
17045
- packet: EncodedPacketSchema
17046
- }), _void()), method(object({
17047
- sessionId: string(),
17048
- url: string()
17049
- }), _void()), method(object({
17050
- sessionId: string(),
17051
- maxCount: number().default(1),
17052
- waitMs: number().optional()
17053
- }), array(DecodedFrameSchema)), method(object({
17054
- sessionId: string(),
17055
- maxCount: number().default(1),
17056
- waitMs: number().optional()
17057
- }), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
17058
- sessionId: string(),
17059
- config: DecoderSessionConfigSchema.partial()
17060
- }), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
17061
- sessionId: string(),
17062
- codec: string(),
17063
- outputFormat: string(),
17064
- createdAtMs: number()
17065
- })).readonly()), method(_void(), object({ backend: string() }), {
16838
+ })), method(_void(), object({ backend: string() }), {
17066
16839
  kind: "mutation",
17067
16840
  auth: "admin"
17068
16841
  });
@@ -24540,8 +24313,8 @@ function resolveClusterStepModelId(stepId, models) {
24540
24313
  var CLUSTER_STEP_SETTING_FIELDS = [{
24541
24314
  stepId: "face-embedding",
24542
24315
  key: "minLandmarkFaceSize",
24543
- label: "Min face size for recognition (detection px)",
24544
- 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.",
24316
+ label: "Min face size to embed (detection-frame px)",
24317
+ 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.",
24545
24318
  type: "slider",
24546
24319
  min: 0,
24547
24320
  max: 64,
@@ -28433,14 +28206,15 @@ var RunnerLocalLoadSchema = object({
28433
28206
  * Per-inference-device live load (multi-device C4). One entry per deviceKey
28434
28207
  * this runner currently has attached cameras on, so the orchestrator's second
28435
28208
  * `balance()` pass (over a node's devices) weights on real per-pool session
28436
- * counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
28437
- * per device is 0 until the pool backlog gets a public accessor (follow-up).
28209
+ * counts. Empty on single-device / pre-multi-device runners. There is no
28210
+ * per-device queue depth: the inference pool's backlog has no accessor, and
28211
+ * a field that always read 0 was removed rather than shown as a measurement
28212
+ * (D762).
28438
28213
  */
28439
28214
  devices: array(object({
28440
28215
  deviceKey: string(),
28441
28216
  backend: string(),
28442
- attachedCameras: number(),
28443
- queueDepthTotal: number()
28217
+ attachedCameras: number()
28444
28218
  })).default([]),
28445
28219
  /** Hardware capability flags reported by this node. */
28446
28220
  hardware: object({
@@ -28955,7 +28729,10 @@ var PipelineAssignmentSchema = object({
28955
28729
  });
28956
28730
  /**
28957
28731
  * Per-agent load summary surfaced to the load balancer + dashboards.
28958
- * Aggregated from each runner's `getLocalLoad` cap call.
28732
+ * Aggregated from each runner's `getLocalLoad` cap call. In the
28733
+ * `getAgentLoad` report, a single-device node's default-pool sessions (no
28734
+ * `deviceKey`) are credited to its one eligible device in `load.devices` —
28735
+ * the default pool IS that device (D745); the balancer's census stays raw.
28959
28736
  */
28960
28737
  var AgentLoadSummarySchema = object({
28961
28738
  nodeId: string(),
@@ -29044,8 +28821,14 @@ var CameraBrokerStatusSchema = object({
29044
28821
  width: number(),
29045
28822
  height: number(),
29046
28823
  subscribers: number(),
29047
- inFps: number(),
29048
- outFps: number()
28824
+ /**
28825
+ * Encoded packets/s the broker receives from the camera. null when the
28826
+ * broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
28827
+ * There is no output rate: decoding runs in the session decode workers, not
28828
+ * in the broker, so the broker's own decoded-frame rate is 0 on every live
28829
+ * camera and is not served (D758).
28830
+ */
28831
+ inFps: number().nullable()
29049
28832
  })).readonly(),
29050
28833
  webrtcSessions: number(),
29051
28834
  rtspRestream: boolean()
@@ -32027,8 +31810,6 @@ var WebrtcStreamChoiceSchema = object({
32027
31810
  ]).nullable(),
32028
31811
  /** Input FPS from the camera (null for adaptive). */
32029
31812
  inputFps: number().nullable(),
32030
- /** Decoded FPS (null for adaptive). */
32031
- decodeFps: number().nullable(),
32032
31813
  /** Bitrate in kbps (null for adaptive). */
32033
31814
  bitrateKbps: number().nullable()
32034
31815
  });
@@ -32725,6 +32506,59 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
32725
32506
  var RestartAddonResultSchema = unknown();
32726
32507
  var InstallPackageResultSchema = unknown();
32727
32508
  var ReloadPackagesResultSchema = unknown();
32509
+ /**
32510
+ * What an uninstall did on ONE node.
32511
+ * - `uninstalled` — removed: runner(s) stopped, caps gone, code deleted.
32512
+ * - `not-installed` — the node did not have it (nothing to do).
32513
+ * - `refused` — protected / bootstrap package; nothing touched.
32514
+ * - `failed` — attempted and did not complete; `error` says why.
32515
+ * - `pending-reconnect` — the node is OFFLINE: its record was pruned so the
32516
+ * back-fill never returns the package, and the stale-addon sweep removes the
32517
+ * copy when the node registers again (only once the hub no longer has it).
32518
+ */
32519
+ var UninstallNodeOutcomeSchema = _enum([
32520
+ "uninstalled",
32521
+ "not-installed",
32522
+ "refused",
32523
+ "failed",
32524
+ "pending-reconnect"
32525
+ ]);
32526
+ var UninstallNodeResultSchema = object({
32527
+ nodeId: string(),
32528
+ outcome: UninstallNodeOutcomeSchema,
32529
+ error: string().optional(),
32530
+ addonIds: array(string()).readonly(),
32531
+ runnersStopped: array(string()).readonly(),
32532
+ warnings: array(string()).readonly()
32533
+ });
32534
+ var UninstallPackageResultSchema = object({
32535
+ /** Every targeted node ended `uninstalled`, `not-installed` or `pending-reconnect`. */
32536
+ success: boolean(),
32537
+ packageName: string(),
32538
+ results: array(UninstallNodeResultSchema).readonly()
32539
+ });
32540
+ /**
32541
+ * `unreachable` lists online agents whose status read FAILED — absence from
32542
+ * `installations` is only "not installed" for a node that answered (D315).
32543
+ */
32544
+ var PackageInstallationsSchema = object({
32545
+ installations: array(object({
32546
+ packageName: string(),
32547
+ nodeId: string(),
32548
+ nodeName: string(),
32549
+ isHub: boolean(),
32550
+ isOnline: boolean(),
32551
+ version: string().nullable(),
32552
+ addonIds: array(string()).readonly(),
32553
+ source: _enum(["live", "recorded"]),
32554
+ /** The hub installs this package too. `false` on an agent row = an orphan. */
32555
+ onHub: boolean()
32556
+ })).readonly(),
32557
+ unreachable: array(object({
32558
+ nodeId: string(),
32559
+ error: string()
32560
+ })).readonly()
32561
+ });
32728
32562
  var BulkUpdateItemStatusSchema = _enum([
32729
32563
  "queued",
32730
32564
  "updating",
@@ -32807,10 +32641,14 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
32807
32641
  }), method(object({ packageName: string() }), InstallPackageResultSchema, {
32808
32642
  kind: "mutation",
32809
32643
  auth: "admin"
32810
- }), method(_void(), boolean()), method(_void(), array(unknown()).readonly()), method(object({ packageName: string() }), unknown(), {
32644
+ }), method(_void(), boolean()), method(_void(), array(unknown()).readonly()), method(object({
32645
+ packageName: string().min(1),
32646
+ nodeId: string().optional(),
32647
+ everywhere: boolean().optional()
32648
+ }), UninstallPackageResultSchema, {
32811
32649
  kind: "mutation",
32812
32650
  auth: "admin"
32813
- }), method(_void(), ReloadPackagesResultSchema, {
32651
+ }), method(object({ packageName: string().optional() }), PackageInstallationsSchema, { auth: "admin" }), method(_void(), ReloadPackagesResultSchema, {
32814
32652
  kind: "mutation",
32815
32653
  auth: "admin"
32816
32654
  }), method(object({ query: string().optional() }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
@@ -41721,6 +41559,12 @@ Object.freeze({
41721
41559
  addonId: null,
41722
41560
  access: "view"
41723
41561
  },
41562
+ "addons.listInstallations": {
41563
+ capName: "addons",
41564
+ capScope: "system",
41565
+ addonId: null,
41566
+ access: "view"
41567
+ },
41724
41568
  "addons.listJobs": {
41725
41569
  capName: "addons",
41726
41570
  capScope: "system",
@@ -42903,90 +42747,18 @@ Object.freeze({
42903
42747
  addonId: null,
42904
42748
  access: "create"
42905
42749
  },
42906
- "decoder.createSession": {
42907
- capName: "decoder",
42908
- capScope: "system",
42909
- addonId: null,
42910
- access: "view"
42911
- },
42912
- "decoder.destroySession": {
42913
- capName: "decoder",
42914
- capScope: "system",
42915
- addonId: null,
42916
- access: "delete"
42917
- },
42918
- "decoder.getFrame": {
42919
- capName: "decoder",
42920
- capScope: "system",
42921
- addonId: null,
42922
- access: "view"
42923
- },
42924
42750
  "decoder.getInfo": {
42925
42751
  capName: "decoder",
42926
42752
  capScope: "system",
42927
42753
  addonId: null,
42928
42754
  access: "view"
42929
42755
  },
42930
- "decoder.getShmStats": {
42931
- capName: "decoder",
42932
- capScope: "system",
42933
- addonId: null,
42934
- access: "view"
42935
- },
42936
- "decoder.getStats": {
42937
- capName: "decoder",
42938
- capScope: "system",
42939
- addonId: null,
42940
- access: "view"
42941
- },
42942
- "decoder.listActiveSessions": {
42943
- capName: "decoder",
42944
- capScope: "system",
42945
- addonId: null,
42946
- access: "view"
42947
- },
42948
- "decoder.openStream": {
42949
- capName: "decoder",
42950
- capScope: "system",
42951
- addonId: null,
42952
- access: "view"
42953
- },
42954
- "decoder.pullFrames": {
42955
- capName: "decoder",
42956
- capScope: "system",
42957
- addonId: null,
42958
- access: "view"
42959
- },
42960
- "decoder.pullHandles": {
42961
- capName: "decoder",
42962
- capScope: "system",
42963
- addonId: null,
42964
- access: "view"
42965
- },
42966
- "decoder.pushPacket": {
42967
- capName: "decoder",
42968
- capScope: "system",
42969
- addonId: null,
42970
- access: "view"
42971
- },
42972
42756
  "decoder.reprobeHwaccel": {
42973
42757
  capName: "decoder",
42974
42758
  capScope: "system",
42975
42759
  addonId: null,
42976
42760
  access: "create"
42977
42761
  },
42978
- "decoder.supportsCodec": {
42979
- capName: "decoder",
42980
- capScope: "system",
42981
- addonId: null,
42982
- access: "view"
42983
- },
42984
- "decoder.updateConfig": {
42985
- capName: "decoder",
42986
- capScope: "system",
42987
- addonId: null,
42988
- access: "view"
42989
- },
42990
42762
  "detectionPipeline.applyDeviceSettingsPatch": {
42991
42763
  capName: "detection-pipeline",
42992
42764
  capScope: "device",
@@ -48033,12 +47805,6 @@ Object.freeze({
48033
47805
  addonId: null,
48034
47806
  access: "view"
48035
47807
  },
48036
- "streamBroker.pullFrameHandles": {
48037
- capName: "stream-broker",
48038
- capScope: "system",
48039
- addonId: null,
48040
- access: "view"
48041
- },
48042
47808
  "streamBroker.regenerateRtspToken": {
48043
47809
  capName: "stream-broker",
48044
47810
  capScope: "system",
@@ -48105,12 +47871,6 @@ Object.freeze({
48105
47871
  addonId: null,
48106
47872
  access: "create"
48107
47873
  },
48108
- "streamBroker.subscribeFrames": {
48109
- capName: "stream-broker",
48110
- capScope: "system",
48111
- addonId: null,
48112
- access: "create"
48113
- },
48114
47874
  "streamBroker.unassignProfile": {
48115
47875
  capName: "stream-broker",
48116
47876
  capScope: "system",
@@ -48123,12 +47883,6 @@ Object.freeze({
48123
47883
  addonId: null,
48124
47884
  access: "create"
48125
47885
  },
48126
- "streamBroker.unsubscribeFrames": {
48127
- capName: "stream-broker",
48128
- capScope: "system",
48129
- addonId: null,
48130
- access: "create"
48131
- },
48132
47886
  "streamCatalog.getCatalog": {
48133
47887
  capName: "stream-catalog",
48134
47888
  capScope: "device",
@@ -50642,11 +50396,6 @@ Object.freeze({
50642
50396
  form: "single",
50643
50397
  optional: false
50644
50398
  }],
50645
- "decoder.createSession": [{
50646
- name: "deviceId",
50647
- form: "single",
50648
- optional: true
50649
- }],
50650
50399
  "detectionPipeline.applyDeviceSettingsPatch": [{
50651
50400
  name: "deviceId",
50652
50401
  form: "single",
@@ -1,4 +1,4 @@
1
- import { Et as hfModelUrl } from "./dist-BWzBHFEB.mjs";
1
+ import { Et as hfModelUrl } from "./dist-DUr_0s5c.mjs";
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-w_gA9z8W.js");
1
+ const require_dist = require("./dist-DNsARIUD.js");
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-w_gA9z8W.js");
5
+ const require_dist = require("../dist-DNsARIUD.js");
6
6
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
7
7
  let node_fs = require("node:fs");
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { En as DeviceType, Ln as hydrateSchema, Vt as motionDetectionCapability, _t as evaluateZoneRules, kn as BaseAddon } from "../dist-BWzBHFEB.mjs";
1
+ import { En as DeviceType, Ln as hydrateSchema, Vt as motionDetectionCapability, _t as evaluateZoneRules, kn as BaseAddon } from "../dist-DUr_0s5c.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";