@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
@@ -367,7 +367,7 @@ function buildScryptedRegistryDescriptor(entry) {
367
367
  };
368
368
  }
369
369
  //#endregion
370
- //#region ../types/dist/event-category-BGmz_oxW.mjs
370
+ //#region ../types/dist/event-category-B_0XEcLF.mjs
371
371
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
372
372
  EventCategory["SystemBoot"] = "system.boot";
373
373
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -868,15 +868,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
868
868
  EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
869
869
  EventCategory["AgentBackupActivated"] = "agent.backup.activated";
870
870
  EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
871
- /**
872
- * Per-agent hwaccel preference changed (user override set, cleared, or
873
- * re-probed). Observability event — decoders pull the current pref at
874
- * `createSession`, so running sessions keep their current backend until
875
- * they rotate naturally (camera add/remove, stream restart). Future
876
- * work can wire a listener in stream-broker that force-rotates live
877
- * sessions; for now this event powers logs + admin-UI toast feedback.
878
- */
879
- EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
880
871
  EventCategory["MotionAnalysis"] = "detection.motion-analysis";
881
872
  /** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
882
873
  EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
@@ -5747,7 +5738,7 @@ var ZodIssueCode = {
5747
5738
  var ZodFirstPartyTypeKind;
5748
5739
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5749
5740
  //#endregion
5750
- //#region ../types/dist/sleep-DAJ9Er57.mjs
5741
+ //#region ../types/dist/sleep-BNeXenvr.mjs
5751
5742
  /**
5752
5743
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5753
5744
  * window to float samples (D455).
@@ -7113,32 +7104,12 @@ object({
7113
7104
  audioCodec: string().optional(),
7114
7105
  metadata: record(string(), unknown()).readonly().optional()
7115
7106
  });
7116
- var EncodedPacketSchema = object({
7117
- type: _enum(["video", "audio"]),
7118
- data: _instanceof(Uint8Array),
7119
- pts: number(),
7120
- dts: number(),
7121
- keyframe: boolean(),
7122
- codec: string()
7123
- });
7124
- var DecodedFrameSchema = object({
7125
- data: _instanceof(Uint8Array),
7126
- width: number(),
7127
- height: number(),
7128
- format: _enum([
7129
- "jpeg",
7130
- "rgb",
7131
- "bgr",
7132
- "yuv420",
7133
- "gray"
7134
- ]),
7135
- timestamp: number()
7136
- });
7137
7107
  /**
7138
7108
  * Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
7139
7109
  * frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
7140
- * interface in `interfaces/frame-handle.ts` field-for-field so a decoder cap
7141
- * method (`pullHandles`) can carry handles over tRPC / Moleculer.
7110
+ * interface in `interfaces/frame-handle.ts` field-for-field so a cap method
7111
+ * (the runner's native-crop and pipeline-executor inputs) can carry handles
7112
+ * over tRPC / Moleculer.
7142
7113
  *
7143
7114
  * The `satisfies` assertion below pins this schema to the interface: if a
7144
7115
  * field is added to / removed from `FrameHandle` without a matching schema
@@ -7164,50 +7135,6 @@ var FrameHandleSchema = object({
7164
7135
  slotCount: number().int().positive()
7165
7136
  });
7166
7137
  /**
7167
- * Pixel format a frame-handle subscriber can request from the broker
7168
- * (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
7169
- * `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
7170
- * `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
7171
- * payload, and no decoded-frame consumer requests it over the shm plane.
7172
- */
7173
- var FrameHandleFormatSchema = _enum([
7174
- "rgb",
7175
- "bgr",
7176
- "yuv420",
7177
- "gray"
7178
- ]);
7179
- /**
7180
- * Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
7181
- * broker for a `FrameHandle` stream of one `format`; the broker maintains one
7182
- * shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
7183
- * subscriber (motion) and an `rgb` subscriber (detection) each read the format
7184
- * they asked for with no broker-side conversion.
7185
- */
7186
- var SubscribeFramesInputSchema = object({
7187
- brokerId: string(),
7188
- format: FrameHandleFormatSchema,
7189
- /**
7190
- * Optional reader-side cadence hint in frames per second. The broker does
7191
- * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
7192
- * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
7193
- * the consumer can pace its own `pullFrameHandles` polling.
7194
- */
7195
- maxFps: number().positive().optional(),
7196
- /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
7197
- tag: string().optional()
7198
- });
7199
- /**
7200
- * Result of `stream-broker.subscribeFrames`. The consumer then polls
7201
- * `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
7202
- * `FrameHandle` to a `FrameRingReader`.
7203
- */
7204
- var SubscribeFramesResultSchema = object({
7205
- /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
7206
- subscriptionId: string(),
7207
- /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
7208
- maxFps: number().nonnegative()
7209
- });
7210
- /**
7211
7138
  * Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
7212
7139
  * `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
7213
7140
  * sample bytes plus the track parameters a consumer needs to interpret them.
@@ -7215,8 +7142,8 @@ var SubscribeFramesResultSchema = object({
7215
7142
  * Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
7216
7143
  * Float32 PCM), so unlike video frames they ship their bytes INLINE over
7217
7144
  * tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
7218
- * (the wire-serialisable supertype of `Buffer`) to match `DecodedFrameSchema`
7219
- * / `EncodedPacketSchema`'s precedent; a `Buffer` is assignable to it.
7145
+ * (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
7146
+ * it.
7220
7147
  */
7221
7148
  var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
7222
7149
  var DecodedAudioChunkSchema = object({
@@ -7234,11 +7161,10 @@ var DecodedAudioChunkSchema = object({
7234
7161
  format: AudioChunkFormatSchema.optional()
7235
7162
  });
7236
7163
  /**
7237
- * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). The
7238
- * handle-free, ship-bytes-inline analogue of `subscribeFrames`: a consumer
7239
- * asks the broker for the decoded audio-chunk stream of one broker; the
7240
- * broker keeps a per-subscription bounded FIFO queue the consumer drains via
7241
- * `pullAudioChunks`.
7164
+ * Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
7165
+ * its bytes inline: a consumer asks the broker for the decoded audio-chunk
7166
+ * stream of one broker; the broker keeps a per-subscription bounded FIFO queue
7167
+ * the consumer drains via `pullAudioChunks`.
7242
7168
  */
7243
7169
  var SubscribeAudioChunksInputSchema = object({
7244
7170
  brokerId: string(),
@@ -7269,9 +7195,7 @@ var BrokerStatsSchema = object({
7269
7195
  "stopped"
7270
7196
  ]),
7271
7197
  inputFps: number(),
7272
- decodeFps: number(),
7273
7198
  encodedSubscribers: number(),
7274
- decodedSubscribers: number(),
7275
7199
  uptimeMs: number(),
7276
7200
  bitrateKbps: number(),
7277
7201
  idrIntervalMs: number(),
@@ -7284,14 +7208,6 @@ var BrokerStatsSchema = object({
7284
7208
  preBufferMs: number(),
7285
7209
  preBufferPackets: number(),
7286
7210
  /**
7287
- * Moleculer node id of the decoder provider currently servicing this
7288
- * stream's decoded subscribers. `null` until the deferred decoder is
7289
- * created (no decoded clients yet, or codec not detected). Surfaces the
7290
- * runtime decoder placement so the UI can show "Decoder: <agent>" without
7291
- * a separate cap call per broker.
7292
- */
7293
- decoderNodeId: string().nullable(),
7294
- /**
7295
7211
  * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
7296
7212
  * when the stream has no audio track or the broker is in cold start.
7297
7213
  * `supported = false` means the codec was detected but the local
@@ -10694,70 +10610,6 @@ var StorageLocationDeclarationSchema = object({
10694
10610
  "backup"
10695
10611
  ]).optional()
10696
10612
  });
10697
- var DecoderStatsSchema = object({
10698
- inputFps: number(),
10699
- outputFps: number(),
10700
- avgDecodeTimeMs: number(),
10701
- droppedFrames: number(),
10702
- /**
10703
- * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
10704
- * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
10705
- * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
10706
- * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
10707
- */
10708
- lagMs: number().optional(),
10709
- effectiveFps: number().optional(),
10710
- adaptiveFps: number().optional()
10711
- });
10712
- var DecoderSessionConfigSchema = object({
10713
- codec: string(),
10714
- maxFps: number().default(0),
10715
- outputFormat: _enum([
10716
- "jpeg",
10717
- "rgb",
10718
- "bgr",
10719
- "yuv420",
10720
- "gray"
10721
- ]).default("jpeg"),
10722
- scale: number().default(1),
10723
- width: number().optional(),
10724
- height: number().optional(),
10725
- /**
10726
- * Identifier of the camera this decoder session serves. Optional
10727
- * because the cap is generic (any caller could request decode), but
10728
- * stream-broker passes it so decoder logs include `deviceId` for
10729
- * per-camera filtering when diagnosing failures (e.g. node-av
10730
- * sendPacket errors on a single hung camera).
10731
- */
10732
- deviceId: number().int().nonnegative().optional(),
10733
- /**
10734
- * Free-form tag for log scoping. Stream-broker uses
10735
- * `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
10736
- * on every line so `grep tag=broker:5/high` filters one camera
10737
- * profile cleanly.
10738
- */
10739
- tag: string().optional(),
10740
- /**
10741
- * Where the session delivers decoded frames (Phase 5 / D9):
10742
- *
10743
- * - `'callback'` (default) — the legacy pixel path: decoded frames are
10744
- * buffered as `DecodedFrame`s and drained via `pullFrames`.
10745
- * - `'shm'` — the shared-memory frame plane: decoded frames are written
10746
- * into an OS shared-memory ring and drained as zero-pixel
10747
- * `FrameHandle`s via `pullHandles`. A session is one mode or the
10748
- * other — `pullFrames` returns nothing for an `'shm'` session and
10749
- * `pullHandles` returns nothing for a `'callback'` session.
10750
- */
10751
- frameSink: _enum(["callback", "shm"]).default("callback"),
10752
- /**
10753
- * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
10754
- * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
10755
- * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
10756
- * stream-broker's `streamingDebug` gate — off by default so production logs
10757
- * stay quiet and the emit path pays zero per-frame cost when disabled.
10758
- */
10759
- debug: boolean().optional()
10760
- });
10761
10613
  /**
10762
10614
  * Per-component log CHANNELS — the gate a hot path consults, and the registry
10763
10615
  * an addon declares its channels in.
@@ -13060,13 +12912,6 @@ var BrokerRtspClientSchema = object({
13060
12912
  lastRtpAt: number(),
13061
12913
  bytesSent: number()
13062
12914
  });
13063
- var BrokerDecodedClientSchema = object({
13064
- tag: string(),
13065
- subscribedAt: number(),
13066
- maxFps: number(),
13067
- framesDelivered: number(),
13068
- framesDropped: number()
13069
- });
13070
12915
  var BrokerAudioClientSchema = object({
13071
12916
  tag: string(),
13072
12917
  subscribedAt: number(),
@@ -13158,7 +13003,6 @@ var BrokerEncodedClientSchema = object({
13158
13003
  });
13159
13004
  var BrokerClientsSchema = object({
13160
13005
  rtsp: array(BrokerRtspClientSchema).readonly(),
13161
- decoded: array(BrokerDecodedClientSchema).readonly(),
13162
13006
  audio: array(BrokerAudioClientSchema).readonly(),
13163
13007
  encoded: array(BrokerEncodedClientSchema).readonly(),
13164
13008
  pipeClients: number(),
@@ -13527,11 +13371,7 @@ method(object({
13527
13371
  auth: "admin"
13528
13372
  }), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
13529
13373
  brokerId: string(),
13530
- channel: _enum([
13531
- "rtsp",
13532
- "decoded",
13533
- "audio"
13534
- ]),
13374
+ channel: _enum(["rtsp", "audio"]),
13535
13375
  handle: string()
13536
13376
  }), object({ killed: boolean() }), {
13537
13377
  kind: "mutation",
@@ -13566,10 +13406,7 @@ method(object({
13566
13406
  }), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
13567
13407
  subscriptionId: string(),
13568
13408
  maxCount: number().int().positive().default(8)
13569
- }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }), method(object({
13570
- subscriptionId: string(),
13571
- maxCount: number().int().positive().default(4)
13572
- }), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
13409
+ }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
13573
13410
  brokerId: string(),
13574
13411
  seconds: number().min(0).max(30)
13575
13412
  }), _void(), {
@@ -14742,54 +14579,12 @@ id: union([string(), number()]) }), {
14742
14579
  kind: "mutation",
14743
14580
  auth: "admin"
14744
14581
  });
14745
- /**
14746
- * shm ring usage stats for a `frameSink: 'shm'` decoder session —
14747
- * exposed via `decoder.getShmStats` so downstream consumers can
14748
- * observe ring pressure (slot count, byte budget, hit/miss ratio).
14749
- */
14750
- var ShmRingStatsSchema = object({
14751
- sessionId: string(),
14752
- slotCount: number().int(),
14753
- slotByteLength: number().int(),
14754
- segmentBytes: number().int(),
14755
- budgetMb: number().int(),
14756
- framesWritten: number().int(),
14757
- getFrameHits: number().int(),
14758
- getFrameMisses: number().int()
14759
- });
14760
- method(object({ codec: string() }), boolean()), method(_void(), object({
14582
+ method(_void(), object({
14761
14583
  id: string(),
14762
14584
  name: string(),
14763
- isPullMode: boolean().optional(),
14764
- priority: number().optional(),
14765
14585
  hwaccel: string().optional(),
14766
14586
  probedBestHwaccel: string().optional()
14767
- })), method(DecoderSessionConfigSchema, object({
14768
- sessionId: string(),
14769
- nodeId: string()
14770
- })), method(object({ sessionId: string() }), _void()), method(object({
14771
- sessionId: string(),
14772
- packet: EncodedPacketSchema
14773
- }), _void()), method(object({
14774
- sessionId: string(),
14775
- url: string()
14776
- }), _void()), method(object({
14777
- sessionId: string(),
14778
- maxCount: number().default(1),
14779
- waitMs: number().optional()
14780
- }), array(DecodedFrameSchema)), method(object({
14781
- sessionId: string(),
14782
- maxCount: number().default(1),
14783
- waitMs: number().optional()
14784
- }), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
14785
- sessionId: string(),
14786
- config: DecoderSessionConfigSchema.partial()
14787
- }), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
14788
- sessionId: string(),
14789
- codec: string(),
14790
- outputFormat: string(),
14791
- createdAtMs: number()
14792
- })).readonly()), method(_void(), object({ backend: string() }), {
14587
+ })), method(_void(), object({ backend: string() }), {
14793
14588
  kind: "mutation",
14794
14589
  auth: "admin"
14795
14590
  });
@@ -21815,8 +21610,8 @@ Object.freeze(Object.fromEntries([{
21815
21610
  var CLUSTER_STEP_SETTING_FIELDS = [{
21816
21611
  stepId: "face-embedding",
21817
21612
  key: "minLandmarkFaceSize",
21818
- label: "Min face size for recognition (detection px)",
21819
- 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.",
21613
+ label: "Min face size to embed (detection-frame px)",
21614
+ 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.",
21820
21615
  type: "slider",
21821
21616
  min: 0,
21822
21617
  max: 64,
@@ -23868,21 +23663,6 @@ var PipelineDefaultStepSchema = lazy(() => object({
23868
23663
  group: string().optional(),
23869
23664
  settings: record(string(), unknown()).optional()
23870
23665
  }));
23871
- var PipelineTemplateStepSchema = lazy(() => object({
23872
- addonId: string(),
23873
- enabled: boolean(),
23874
- modelId: string(),
23875
- children: array(PipelineTemplateStepSchema).readonly(),
23876
- settings: record(string(), unknown()).optional()
23877
- }));
23878
- var PipelineTemplateSchema$1 = object({
23879
- id: string(),
23880
- name: string(),
23881
- createdAt: string(),
23882
- updatedAt: string(),
23883
- engine: PipelineEngineChoiceSchema,
23884
- steps: array(PipelineTemplateStepSchema).readonly()
23885
- });
23886
23666
  var PipelineModelOptionSchema = object({
23887
23667
  id: string(),
23888
23668
  name: string(),
@@ -24094,15 +23874,7 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24094
23874
  }), method(_void(), PipelineSchemaSchema), method(_void(), array(PipelineDefaultStepSchema).readonly().nullable()), method(_void(), PipelineConfigBridge), method(_void(), ConfigUISchemaBridge), method(object({
24095
23875
  steps: array(PipelineStepInputSchema),
24096
23876
  deviceKey: string().optional()
24097
- }), PipelineValidationResultSchema), method(_void(), array(PipelineTemplateSchema$1).readonly()), method(object({
24098
- name: string(),
24099
- steps: array(PipelineTemplateStepSchema).readonly(),
24100
- engine: PipelineEngineChoiceSchema
24101
- }), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({
24102
- id: string(),
24103
- name: string().optional(),
24104
- steps: array(PipelineTemplateStepSchema).readonly().optional()
24105
- }), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
23877
+ }), PipelineValidationResultSchema), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
24106
23878
  addonId: string(),
24107
23879
  modelId: string(),
24108
23880
  format: ModelFormatSchema$2
@@ -25512,14 +25284,15 @@ var RunnerLocalLoadSchema = object({
25512
25284
  * Per-inference-device live load (multi-device C4). One entry per deviceKey
25513
25285
  * this runner currently has attached cameras on, so the orchestrator's second
25514
25286
  * `balance()` pass (over a node's devices) weights on real per-pool session
25515
- * counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
25516
- * per device is 0 until the pool backlog gets a public accessor (follow-up).
25287
+ * counts. Empty on single-device / pre-multi-device runners. There is no
25288
+ * per-device queue depth: the inference pool's backlog has no accessor, and
25289
+ * a field that always read 0 was removed rather than shown as a measurement
25290
+ * (D762).
25517
25291
  */
25518
25292
  devices: array(object({
25519
25293
  deviceKey: string(),
25520
25294
  backend: string(),
25521
- attachedCameras: number(),
25522
- queueDepthTotal: number()
25295
+ attachedCameras: number()
25523
25296
  })).default([]),
25524
25297
  /** Hardware capability flags reported by this node. */
25525
25298
  hardware: object({
@@ -25733,14 +25506,6 @@ var CameraPipelineConfigSchema = object({
25733
25506
  settings: record(string(), unknown()).readonly().optional()
25734
25507
  }).nullable().optional()
25735
25508
  });
25736
- var PipelineTemplateSchema = object({
25737
- id: string(),
25738
- name: string(),
25739
- description: string().optional(),
25740
- config: CameraPipelineConfigSchema,
25741
- createdAt: string(),
25742
- updatedAt: string()
25743
- });
25744
25509
  var DeviceStepConfigSchema = object({
25745
25510
  modelId: string().optional(),
25746
25511
  settings: record(string(), unknown()).optional(),
@@ -25850,7 +25615,10 @@ var PipelineAssignmentSchema = object({
25850
25615
  });
25851
25616
  /**
25852
25617
  * Per-agent load summary surfaced to the load balancer + dashboards.
25853
- * Aggregated from each runner's `getLocalLoad` cap call.
25618
+ * Aggregated from each runner's `getLocalLoad` cap call. In the
25619
+ * `getAgentLoad` report, a single-device node's default-pool sessions (no
25620
+ * `deviceKey`) are credited to its one eligible device in `load.devices` —
25621
+ * the default pool IS that device (D745); the balancer's census stays raw.
25854
25622
  */
25855
25623
  var AgentLoadSummarySchema = object({
25856
25624
  nodeId: string(),
@@ -25939,26 +25707,27 @@ var CameraBrokerStatusSchema = object({
25939
25707
  width: number(),
25940
25708
  height: number(),
25941
25709
  subscribers: number(),
25942
- inFps: number(),
25943
- outFps: number()
25710
+ /**
25711
+ * Encoded packets/s the broker receives from the camera. null when the
25712
+ * broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
25713
+ * There is no output rate: decoding runs in the session decode workers, not
25714
+ * in the broker, so the broker's own decoded-frame rate is 0 on every live
25715
+ * camera and is not served (D758).
25716
+ */
25717
+ inFps: number().nullable()
25944
25718
  })).readonly(),
25945
25719
  webrtcSessions: number(),
25946
25720
  rtspRestream: boolean()
25947
25721
  });
25948
- /** Shared-memory ring statistics within the decoder block. */
25949
- var CameraDecoderShmSchema = object({
25950
- framesWritten: number(),
25951
- getFrameHits: number(),
25952
- getFrameMisses: number(),
25953
- budgetMb: number()
25954
- });
25955
- /** Decoder block — null when the decoder stage is unreachable or inactive. */
25956
- var CameraDecoderStatusSchema = object({
25957
- nodeId: string(),
25958
- formats: array(string()).readonly(),
25959
- sessionCount: number(),
25960
- shm: CameraDecoderShmSchema
25961
- });
25722
+ /**
25723
+ * Decoder block — WHERE decode runs (co-located with the detection node by
25724
+ * construction); null when the camera has no detection node. It carries no
25725
+ * frame counter: the shared-memory plane whose counters it used to serve is
25726
+ * gone, and those fields read 0 forever. Whether frames actually flow is read
25727
+ * from `detection.actualFps` (frames delivered to and processed by the
25728
+ * detector), never from a counter nothing feeds.
25729
+ */
25730
+ var CameraDecoderStatusSchema = object({ nodeId: string() });
25962
25731
  /** Motion block — null when motion detection is not active for this device. */
25963
25732
  var CameraMotionStatusSchema = object({
25964
25733
  enabled: boolean(),
@@ -26411,25 +26180,7 @@ method(object({
26411
26180
  }), method(_void(), DiskReconcileJobSchema, {
26412
26181
  kind: "mutation",
26413
26182
  auth: "admin"
26414
- }), method(_void(), DiskReconcileJobSchema, { auth: "admin" }), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
26415
- name: string(),
26416
- description: string().optional(),
26417
- config: CameraPipelineConfigSchema
26418
- }), PipelineTemplateSchema, {
26419
- kind: "mutation",
26420
- auth: "admin"
26421
- }), method(object({
26422
- id: string(),
26423
- name: string().optional(),
26424
- description: string().optional(),
26425
- config: CameraPipelineConfigSchema.optional()
26426
- }), PipelineTemplateSchema, {
26427
- kind: "mutation",
26428
- auth: "admin"
26429
- }), method(object({ id: string() }), object({ success: literal(true) }), {
26430
- kind: "mutation",
26431
- auth: "admin"
26432
- });
26183
+ }), method(_void(), DiskReconcileJobSchema, { auth: "admin" });
26433
26184
  /**
26434
26185
  * Cap → event-kind mapping for the SENSOR / CONTROL cap families — the table
26435
26186
  * `pipeline-analytics.listEventKinds` uses to turn a linked device's bound
@@ -28649,8 +28400,6 @@ var WebrtcStreamChoiceSchema = object({
28649
28400
  ]).nullable(),
28650
28401
  /** Input FPS from the camera (null for adaptive). */
28651
28402
  inputFps: number().nullable(),
28652
- /** Decoded FPS (null for adaptive). */
28653
- decodeFps: number().nullable(),
28654
28403
  /** Bitrate in kbps (null for adaptive). */
28655
28404
  bitrateKbps: number().nullable()
28656
28405
  });
@@ -38883,90 +38632,18 @@ Object.freeze({
38883
38632
  addonId: null,
38884
38633
  access: "create"
38885
38634
  },
38886
- "decoder.createSession": {
38887
- capName: "decoder",
38888
- capScope: "system",
38889
- addonId: null,
38890
- access: "view"
38891
- },
38892
- "decoder.destroySession": {
38893
- capName: "decoder",
38894
- capScope: "system",
38895
- addonId: null,
38896
- access: "delete"
38897
- },
38898
- "decoder.getFrame": {
38899
- capName: "decoder",
38900
- capScope: "system",
38901
- addonId: null,
38902
- access: "view"
38903
- },
38904
38635
  "decoder.getInfo": {
38905
38636
  capName: "decoder",
38906
38637
  capScope: "system",
38907
38638
  addonId: null,
38908
38639
  access: "view"
38909
38640
  },
38910
- "decoder.getShmStats": {
38911
- capName: "decoder",
38912
- capScope: "system",
38913
- addonId: null,
38914
- access: "view"
38915
- },
38916
- "decoder.getStats": {
38917
- capName: "decoder",
38918
- capScope: "system",
38919
- addonId: null,
38920
- access: "view"
38921
- },
38922
- "decoder.listActiveSessions": {
38923
- capName: "decoder",
38924
- capScope: "system",
38925
- addonId: null,
38926
- access: "view"
38927
- },
38928
- "decoder.openStream": {
38929
- capName: "decoder",
38930
- capScope: "system",
38931
- addonId: null,
38932
- access: "view"
38933
- },
38934
- "decoder.pullFrames": {
38935
- capName: "decoder",
38936
- capScope: "system",
38937
- addonId: null,
38938
- access: "view"
38939
- },
38940
- "decoder.pullHandles": {
38941
- capName: "decoder",
38942
- capScope: "system",
38943
- addonId: null,
38944
- access: "view"
38945
- },
38946
- "decoder.pushPacket": {
38947
- capName: "decoder",
38948
- capScope: "system",
38949
- addonId: null,
38950
- access: "view"
38951
- },
38952
38641
  "decoder.reprobeHwaccel": {
38953
38642
  capName: "decoder",
38954
38643
  capScope: "system",
38955
38644
  addonId: null,
38956
38645
  access: "create"
38957
38646
  },
38958
- "decoder.supportsCodec": {
38959
- capName: "decoder",
38960
- capScope: "system",
38961
- addonId: null,
38962
- access: "view"
38963
- },
38964
- "decoder.updateConfig": {
38965
- capName: "decoder",
38966
- capScope: "system",
38967
- addonId: null,
38968
- access: "view"
38969
- },
38970
38647
  "detectionPipeline.applyDeviceSettingsPatch": {
38971
38648
  capName: "detection-pipeline",
38972
38649
  capScope: "device",
@@ -42057,12 +41734,6 @@ Object.freeze({
42057
41734
  addonId: null,
42058
41735
  access: "delete"
42059
41736
  },
42060
- "pipelineExecutor.deleteTemplate": {
42061
- capName: "pipeline-executor",
42062
- capScope: "system",
42063
- addonId: null,
42064
- access: "delete"
42065
- },
42066
41737
  "pipelineExecutor.downloadModel": {
42067
41738
  capName: "pipeline-executor",
42068
41739
  capScope: "system",
@@ -42201,12 +41872,6 @@ Object.freeze({
42201
41872
  addonId: null,
42202
41873
  access: "view"
42203
41874
  },
42204
- "pipelineExecutor.listTemplates": {
42205
- capName: "pipeline-executor",
42206
- capScope: "system",
42207
- addonId: null,
42208
- access: "view"
42209
- },
42210
41875
  "pipelineExecutor.rearmInferenceDevice": {
42211
41876
  capName: "pipeline-executor",
42212
41877
  capScope: "system",
@@ -42231,12 +41896,6 @@ Object.freeze({
42231
41896
  addonId: null,
42232
41897
  access: "create"
42233
41898
  },
42234
- "pipelineExecutor.saveTemplate": {
42235
- capName: "pipeline-executor",
42236
- capScope: "system",
42237
- addonId: null,
42238
- access: "create"
42239
- },
42240
41899
  "pipelineExecutor.setVideoPipelineSteps": {
42241
41900
  capName: "pipeline-executor",
42242
41901
  capScope: "system",
@@ -42255,12 +41914,6 @@ Object.freeze({
42255
41914
  addonId: null,
42256
41915
  access: "create"
42257
41916
  },
42258
- "pipelineExecutor.updateTemplate": {
42259
- capName: "pipeline-executor",
42260
- capScope: "system",
42261
- addonId: null,
42262
- access: "create"
42263
- },
42264
41917
  "pipelineExecutor.validatePipeline": {
42265
41918
  capName: "pipeline-executor",
42266
41919
  capScope: "system",
@@ -42291,12 +41944,6 @@ Object.freeze({
42291
41944
  addonId: null,
42292
41945
  access: "create"
42293
41946
  },
42294
- "pipelineOrchestrator.deleteTemplate": {
42295
- capName: "pipeline-orchestrator",
42296
- capScope: "system",
42297
- addonId: null,
42298
- access: "delete"
42299
- },
42300
41947
  "pipelineOrchestrator.getAgentLoad": {
42301
41948
  capName: "pipeline-orchestrator",
42302
41949
  capScope: "system",
@@ -42447,12 +42094,6 @@ Object.freeze({
42447
42094
  addonId: null,
42448
42095
  access: "view"
42449
42096
  },
42450
- "pipelineOrchestrator.listTemplates": {
42451
- capName: "pipeline-orchestrator",
42452
- capScope: "system",
42453
- addonId: null,
42454
- access: "view"
42455
- },
42456
42097
  "pipelineOrchestrator.pauseForStorageMigration": {
42457
42098
  capName: "pipeline-orchestrator",
42458
42099
  capScope: "system",
@@ -42507,12 +42148,6 @@ Object.freeze({
42507
42148
  addonId: null,
42508
42149
  access: "create"
42509
42150
  },
42510
- "pipelineOrchestrator.saveTemplate": {
42511
- capName: "pipeline-orchestrator",
42512
- capScope: "system",
42513
- addonId: null,
42514
- access: "create"
42515
- },
42516
42151
  "pipelineOrchestrator.setAgentCapabilities": {
42517
42152
  capName: "pipeline-orchestrator",
42518
42153
  capScope: "system",
@@ -42621,12 +42256,6 @@ Object.freeze({
42621
42256
  addonId: null,
42622
42257
  access: "create"
42623
42258
  },
42624
- "pipelineOrchestrator.updateTemplate": {
42625
- capName: "pipeline-orchestrator",
42626
- capScope: "system",
42627
- addonId: null,
42628
- access: "create"
42629
- },
42630
42259
  "pipelineRunner.attachCamera": {
42631
42260
  capName: "pipeline-runner",
42632
42261
  capScope: "system",
@@ -44061,12 +43690,6 @@ Object.freeze({
44061
43690
  addonId: null,
44062
43691
  access: "view"
44063
43692
  },
44064
- "streamBroker.pullFrameHandles": {
44065
- capName: "stream-broker",
44066
- capScope: "system",
44067
- addonId: null,
44068
- access: "view"
44069
- },
44070
43693
  "streamBroker.regenerateRtspToken": {
44071
43694
  capName: "stream-broker",
44072
43695
  capScope: "system",
@@ -44133,12 +43756,6 @@ Object.freeze({
44133
43756
  addonId: null,
44134
43757
  access: "create"
44135
43758
  },
44136
- "streamBroker.subscribeFrames": {
44137
- capName: "stream-broker",
44138
- capScope: "system",
44139
- addonId: null,
44140
- access: "create"
44141
- },
44142
43759
  "streamBroker.unassignProfile": {
44143
43760
  capName: "stream-broker",
44144
43761
  capScope: "system",
@@ -44151,12 +43768,6 @@ Object.freeze({
44151
43768
  addonId: null,
44152
43769
  access: "create"
44153
43770
  },
44154
- "streamBroker.unsubscribeFrames": {
44155
- capName: "stream-broker",
44156
- capScope: "system",
44157
- addonId: null,
44158
- access: "create"
44159
- },
44160
43771
  "streamCatalog.getCatalog": {
44161
43772
  capName: "stream-catalog",
44162
43773
  capScope: "device",
@@ -46670,11 +46281,6 @@ Object.freeze({
46670
46281
  form: "single",
46671
46282
  optional: false
46672
46283
  }],
46673
- "decoder.createSession": [{
46674
- name: "deviceId",
46675
- form: "single",
46676
- optional: true
46677
- }],
46678
46284
  "detectionPipeline.applyDeviceSettingsPatch": [{
46679
46285
  name: "deviceId",
46680
46286
  form: "single",