@camstack/addon-pipeline 1.2.301 → 1.2.302

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 (28) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/{default-detection-model-JDKeiJPf.mjs → default-detection-model-BroB5Jp1.mjs} +1 -1
  4. package/dist/{default-detection-model-P7IIrP0a.js → default-detection-model-vN686W1U.js} +1 -1
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-DvzAabca.mjs → dist-CLZmZfHT.mjs} +35 -4
  8. package/dist/{dist-BUs7H-fe.js → dist-CyWAhtbJ.js} +35 -4
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/{node-DxVMyys-.js → node-BDrkzYiH.js} +1 -1
  12. package/dist/{node-DnP_6GBZ.mjs → node-C5LXX8Qo.mjs} +1 -1
  13. package/dist/pipeline-runner/index.js +63 -4
  14. package/dist/pipeline-runner/index.mjs +63 -4
  15. package/dist/{process-memory-BMr61qT1.mjs → process-memory-CCx6i9av.mjs} +1 -1
  16. package/dist/{process-memory-DmYzYip-.js → process-memory-DMS-0oRT.js} +1 -1
  17. package/dist/recorder/index.js +2 -2
  18. package/dist/recorder/index.mjs +2 -2
  19. package/dist/{segment-demux-js-DBqdboBI.mjs → segment-demux-js-BUxZFqkb.mjs} +1 -1
  20. package/dist/{segment-demux-js-DANvUJgH.js → segment-demux-js-CwQuMR0h.js} +1 -1
  21. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D0etdxl0.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DFaPx_Ot.mjs} +1 -1
  22. package/dist/stream-broker/demux-worker-child.js +1 -1
  23. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  24. package/dist/stream-broker/{hostInit-TY9BRVDy.mjs → hostInit-CePd6XbV.mjs} +1 -1
  25. package/dist/stream-broker/index.js +3 -3
  26. package/dist/stream-broker/index.mjs +3 -3
  27. package/dist/stream-broker/remoteEntry.js +1 -1
  28. package/package.json +1 -1
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-BUs7H-fe.js");
7
- const require_process_memory = require("../process-memory-DmYzYip-.js");
6
+ const require_dist = require("../dist-CyWAhtbJ.js");
7
+ const require_process_memory = require("../process-memory-DMS-0oRT.js");
8
8
  let node_fs = require("node:fs");
9
9
  node_fs = require_chunk.__toESM(node_fs);
10
10
  let node_path = require("node:path");
@@ -1,6 +1,6 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { E as HF_BASE_URL, G as audioAnalyzerCapability, Rn as EventCategory, Ut as resolvePoolMemoryPolicy, W as audioAnalysisCapability, _n as hydrateSchema, bt as mapAudioLabelToMacro, en as errMsg, fn as audioChunkBytesPerSample, gn as expandAudioChunkToF32le, j as PoolMemoryWatchdog, n as AUDIO_BACKEND_CHOICES, p as DEFAULT_AUDIO_ANALYZER_CONFIG, sn as BaseAddon, xn as nodePin } from "../dist-DvzAabca.mjs";
3
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-BMr61qT1.mjs";
2
+ import { E as HF_BASE_URL, G as audioAnalyzerCapability, Rn as EventCategory, Ut as resolvePoolMemoryPolicy, W as audioAnalysisCapability, _n as hydrateSchema, bt as mapAudioLabelToMacro, en as errMsg, fn as audioChunkBytesPerSample, gn as expandAudioChunkToF32le, j as PoolMemoryWatchdog, n as AUDIO_BACKEND_CHOICES, p as DEFAULT_AUDIO_ANALYZER_CONFIG, sn as BaseAddon, xn as nodePin } from "../dist-CLZmZfHT.mjs";
3
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-CCx6i9av.mjs";
4
4
  import * as fs from "node:fs";
5
5
  import * as path$1 from "node:path";
6
6
  import { downloadFile } from "@camstack/system/addon-utils";
@@ -1,4 +1,4 @@
1
- import { K as audioKindId, Kt as stepModelRunsOnFormat, d as COCO_80_LABELS, f as COCO_TO_MACRO, gt as inferModelProvider, ht as hfModelUrl, r as AUDIO_MACRO_LABELS, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-DvzAabca.mjs";
1
+ import { K as audioKindId, Kt as stepModelRunsOnFormat, d as COCO_80_LABELS, f as COCO_TO_MACRO, gt as inferModelProvider, ht as hfModelUrl, r as AUDIO_MACRO_LABELS, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-CLZmZfHT.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region src/detection-pipeline/registry/effective-confidence.ts
4
4
  /** The default in force: the model's own floor, else the step's. */
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BUs7H-fe.js");
1
+ const require_dist = require("./dist-CyWAhtbJ.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  //#region src/detection-pipeline/registry/effective-confidence.ts
4
4
  /** The default in force: the model's own floor, else the step's. */
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-BUs7H-fe.js");
7
- const require_node = require("../node-DxVMyys-.js");
8
- const require_default_detection_model = require("../default-detection-model-P7IIrP0a.js");
6
+ const require_dist = require("../dist-CyWAhtbJ.js");
7
+ const require_node = require("../node-BDrkzYiH.js");
8
+ const require_default_detection_model = require("../default-detection-model-vN686W1U.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
- const require_process_memory = require("../process-memory-DmYzYip-.js");
10
+ const require_process_memory = require("../process-memory-DMS-0oRT.js");
11
11
  let node_os = require("node:os");
12
12
  node_os = require_chunk.__toESM(node_os);
13
13
  let node_fs = require("node:fs");
@@ -1,9 +1,9 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { Dn as array, Dt as overlayClusterStepSettings, Gt as runtimeDevices$1, H as YAMNET_TO_MACRO, In as string, Kt as stepModelRunsOnFormat, Ln as union, Mt as pipelineExecutorCapability, Nn as object, Rn as EventCategory, Sn as parseJsonUnknown, Tn as sleep, Ut as resolvePoolMemoryPolicy, Zt as supportedRuntimes$1, _n as hydrateSchema, en as errMsg, et as defaultDeviceFor$1, it as detectionPipelineCapability, j as PoolMemoryWatchdog, kt as pickClusterStepSettings, lt as evaluateZoneRules, m as DEFAULT_CLUSTER_STEP_SETTINGS, pn as createEvent, sn as BaseAddon, st as enumerateInferenceDevices, t as APPLE_SA_TO_MACRO, u as CLUSTER_MODEL_SCOPED_STEPS, vt as loadContributionCapability, xn as nodePin, y as DEVICE_BACKEND_TO_FORMAT, zt as resolveClusterStepModelId } from "../dist-DvzAabca.mjs";
3
- import { s as readProcessCost } from "../node-DnP_6GBZ.mjs";
4
- import { _ as resolveModelForFormat, a as buildSubtreeCanRun, b as resolveModelDefaultConfidence, c as macroGateVerdict, f as ALL_PIPELINE_STEPS, g as getStepDefinition, h as getStep, i as mergeCustomModels, m as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as ALL_STEPS, r as CustomModelCatalog, u as localFrameRegistry, y as landmarkPrecisionVerdict } from "../default-detection-model-JDKeiJPf.mjs";
2
+ import { Dn as array, Dt as overlayClusterStepSettings, Gt as runtimeDevices$1, H as YAMNET_TO_MACRO, In as string, Kt as stepModelRunsOnFormat, Ln as union, Mt as pipelineExecutorCapability, Nn as object, Rn as EventCategory, Sn as parseJsonUnknown, Tn as sleep, Ut as resolvePoolMemoryPolicy, Zt as supportedRuntimes$1, _n as hydrateSchema, en as errMsg, et as defaultDeviceFor$1, it as detectionPipelineCapability, j as PoolMemoryWatchdog, kt as pickClusterStepSettings, lt as evaluateZoneRules, m as DEFAULT_CLUSTER_STEP_SETTINGS, pn as createEvent, sn as BaseAddon, st as enumerateInferenceDevices, t as APPLE_SA_TO_MACRO, u as CLUSTER_MODEL_SCOPED_STEPS, vt as loadContributionCapability, xn as nodePin, y as DEVICE_BACKEND_TO_FORMAT, zt as resolveClusterStepModelId } from "../dist-CLZmZfHT.mjs";
3
+ import { s as readProcessCost } from "../node-C5LXX8Qo.mjs";
4
+ import { _ as resolveModelForFormat, a as buildSubtreeCanRun, b as resolveModelDefaultConfidence, c as macroGateVerdict, f as ALL_PIPELINE_STEPS, g as getStepDefinition, h as getStep, i as mergeCustomModels, m as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as ALL_STEPS, r as CustomModelCatalog, u as localFrameRegistry, y as landmarkPrecisionVerdict } from "../default-detection-model-BroB5Jp1.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-BMr61qT1.mjs";
6
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-CCx6i9av.mjs";
7
7
  import * as os from "node:os";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
@@ -24228,7 +24228,15 @@ var RebuildObjectEmbeddingsInput = object({
24228
24228
  * force is logged at start and finish so a deliberately slow pass reads
24229
24229
  * differently from a stalled one.
24230
24230
  */
24231
- pacingMs: number().int().nonnegative().optional()
24231
+ pacingMs: number().int().nonnegative().optional(),
24232
+ /**
24233
+ * Re-embed ONLY the tracks whose vector is ALREADY in the pinned model's
24234
+ * space (D664) — the in-space skip inverted. It exists to redo vectors
24235
+ * written from the wrong box, which a normal pass would skip as done
24236
+ * forever. Requires `maxTracks`: a forced pass without a bound is refused
24237
+ * (`force-requires-max-tracks`).
24238
+ */
24239
+ force: boolean().optional()
24232
24240
  });
24233
24241
  /**
24234
24242
  * Result of emptying the CLIP index.
@@ -24264,6 +24272,7 @@ var WipeObjectEmbeddingsResultSchema = object({
24264
24272
  * - `reads-disagree` — the two reads named different choices.
24265
24273
  * - `not-a-clip-model` — the CONFIRMED id has no CLIP metadata, so there is no
24266
24274
  * index to fill and no dimension to check against (D649).
24275
+ * - `force-requires-max-tracks` — `force: true` with no `maxTracks` (D664).
24267
24276
  */
24268
24277
  var RebuildObjectEmbeddingsRefusalSchema = _enum([
24269
24278
  "stores-unavailable",
@@ -24271,7 +24280,8 @@ var RebuildObjectEmbeddingsRefusalSchema = _enum([
24271
24280
  "method-unavailable",
24272
24281
  "read-failed",
24273
24282
  "reads-disagree",
24274
- "not-a-clip-model"
24283
+ "not-a-clip-model",
24284
+ "force-requires-max-tracks"
24275
24285
  ]);
24276
24286
  /**
24277
24287
  * Acknowledgement that a rebuild STARTED.
@@ -24296,11 +24306,32 @@ var RebuildStatusSchema = object({
24296
24306
  running: boolean(),
24297
24307
  scanned: number(),
24298
24308
  rebuilt: number(),
24299
- /** Tracks whose key frame is gone — nothing to re-embed from. */
24309
+ /** Tracks whose key frame is gone — nothing to re-embed from. Pixels ONLY:
24310
+ * `missingEvent` is its own field since D664, never summed in. */
24300
24311
  missingKeyFrame: number(),
24301
- /** Tracks with no usable detection box. */
24312
+ /** Tracks with no object event at all (D664). */
24313
+ missingEvent: number(),
24314
+ /** Tracks with no box measured on the pixels to cut — see `boxSource.refused`. */
24302
24315
  missingBbox: number(),
24303
24316
  /**
24317
+ * Which rule placed each judged track's box (D664): the key frame row's own
24318
+ * `subjectBox`, `track.positions` at exactly its instant (older key frames),
24319
+ * the event box (a key frame recovered from the recording, at the event's
24320
+ * instant), or `refused` by name — the reasons are in the tagged log lines.
24321
+ */
24322
+ boxSource: object({
24323
+ subjectBox: number(),
24324
+ positions: number(),
24325
+ event: number(),
24326
+ refused: number()
24327
+ }),
24328
+ /** Tracks skipped because their vector is already in the pinned space. */
24329
+ alreadyInSpace: number(),
24330
+ /** Whether the current / last pass was a `force` pass; `null` before any (D664). */
24331
+ force: boolean().nullable(),
24332
+ /** In-space tracks a `force` pass selected for re-embedding. */
24333
+ forcedInSpace: number(),
24334
+ /**
24304
24335
  * Tracks an executing node REFUSED rather than broke on — an unreadable key
24305
24336
  * frame, a step that threw. Separate from `failed` because the remedy is
24306
24337
  * different, and because a whole camera silently contributing zero vectors
@@ -24228,7 +24228,15 @@ var RebuildObjectEmbeddingsInput = object({
24228
24228
  * force is logged at start and finish so a deliberately slow pass reads
24229
24229
  * differently from a stalled one.
24230
24230
  */
24231
- pacingMs: number().int().nonnegative().optional()
24231
+ pacingMs: number().int().nonnegative().optional(),
24232
+ /**
24233
+ * Re-embed ONLY the tracks whose vector is ALREADY in the pinned model's
24234
+ * space (D664) — the in-space skip inverted. It exists to redo vectors
24235
+ * written from the wrong box, which a normal pass would skip as done
24236
+ * forever. Requires `maxTracks`: a forced pass without a bound is refused
24237
+ * (`force-requires-max-tracks`).
24238
+ */
24239
+ force: boolean().optional()
24232
24240
  });
24233
24241
  /**
24234
24242
  * Result of emptying the CLIP index.
@@ -24264,6 +24272,7 @@ var WipeObjectEmbeddingsResultSchema = object({
24264
24272
  * - `reads-disagree` — the two reads named different choices.
24265
24273
  * - `not-a-clip-model` — the CONFIRMED id has no CLIP metadata, so there is no
24266
24274
  * index to fill and no dimension to check against (D649).
24275
+ * - `force-requires-max-tracks` — `force: true` with no `maxTracks` (D664).
24267
24276
  */
24268
24277
  var RebuildObjectEmbeddingsRefusalSchema = _enum([
24269
24278
  "stores-unavailable",
@@ -24271,7 +24280,8 @@ var RebuildObjectEmbeddingsRefusalSchema = _enum([
24271
24280
  "method-unavailable",
24272
24281
  "read-failed",
24273
24282
  "reads-disagree",
24274
- "not-a-clip-model"
24283
+ "not-a-clip-model",
24284
+ "force-requires-max-tracks"
24275
24285
  ]);
24276
24286
  /**
24277
24287
  * Acknowledgement that a rebuild STARTED.
@@ -24296,11 +24306,32 @@ var RebuildStatusSchema = object({
24296
24306
  running: boolean(),
24297
24307
  scanned: number(),
24298
24308
  rebuilt: number(),
24299
- /** Tracks whose key frame is gone — nothing to re-embed from. */
24309
+ /** Tracks whose key frame is gone — nothing to re-embed from. Pixels ONLY:
24310
+ * `missingEvent` is its own field since D664, never summed in. */
24300
24311
  missingKeyFrame: number(),
24301
- /** Tracks with no usable detection box. */
24312
+ /** Tracks with no object event at all (D664). */
24313
+ missingEvent: number(),
24314
+ /** Tracks with no box measured on the pixels to cut — see `boxSource.refused`. */
24302
24315
  missingBbox: number(),
24303
24316
  /**
24317
+ * Which rule placed each judged track's box (D664): the key frame row's own
24318
+ * `subjectBox`, `track.positions` at exactly its instant (older key frames),
24319
+ * the event box (a key frame recovered from the recording, at the event's
24320
+ * instant), or `refused` by name — the reasons are in the tagged log lines.
24321
+ */
24322
+ boxSource: object({
24323
+ subjectBox: number(),
24324
+ positions: number(),
24325
+ event: number(),
24326
+ refused: number()
24327
+ }),
24328
+ /** Tracks skipped because their vector is already in the pinned space. */
24329
+ alreadyInSpace: number(),
24330
+ /** Whether the current / last pass was a `force` pass; `null` before any (D664). */
24331
+ force: boolean().nullable(),
24332
+ /** In-space tracks a `force` pass selected for re-embedding. */
24333
+ forcedInSpace: number(),
24334
+ /**
24304
24335
  * Tracks an executing node REFUSED rather than broke on — an unreadable key
24305
24336
  * frame, a step that threw. Separate from `failed` because the remedy is
24306
24337
  * different, and because a whole camera silently contributing zero vectors
@@ -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-BUs7H-fe.js");
5
+ const require_dist = require("../dist-CyWAhtbJ.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 { Et as motionDetectionCapability, _n as hydrateSchema, dn as DeviceType, lt as evaluateZoneRules, sn as BaseAddon } from "../dist-DvzAabca.mjs";
1
+ import { Et as motionDetectionCapability, _n as hydrateSchema, dn as DeviceType, lt as evaluateZoneRules, sn as BaseAddon } from "../dist-CLZmZfHT.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";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-BUs7H-fe.js");
2
+ const require_dist = require("./dist-CyWAhtbJ.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_fs = require("node:fs");
5
5
  node_fs = require_chunk.__toESM(node_fs, 1);
@@ -1,4 +1,4 @@
1
- import { an as isSoftwareDecode, en as errMsg, nn as Fmp4BoxSplitter, rn as buildFfmpegArgs } from "./dist-DvzAabca.mjs";
1
+ import { an as isSoftwareDecode, en as errMsg, nn as Fmp4BoxSplitter, rn as buildFfmpegArgs } from "./dist-CLZmZfHT.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import path from "node:path";
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-BUs7H-fe.js");
7
- const require_node = require("../node-DxVMyys-.js");
8
- const require_default_detection_model = require("../default-detection-model-P7IIrP0a.js");
6
+ const require_dist = require("../dist-CyWAhtbJ.js");
7
+ const require_node = require("../node-BDrkzYiH.js");
8
+ const require_default_detection_model = require("../default-detection-model-vN686W1U.js");
9
9
  const require_worker_protocol = require("../worker-protocol-C-G8qmye.js");
10
10
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
11
11
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
@@ -5960,6 +5960,60 @@ var Semaphore = class {
5960
5960
  if (next) next();
5961
5961
  }
5962
5962
  };
5963
+ //#endregion
5964
+ //#region src/pipeline-runner/below-floor-tally.ts
5965
+ var BELOW_FLOOR_BANDS = [
5966
+ "<0.35",
5967
+ "0.35-0.50",
5968
+ "0.50-0.65",
5969
+ ">=0.65"
5970
+ ];
5971
+ function belowFloorBand(score) {
5972
+ if (score < .35) return "<0.35";
5973
+ if (score < .5) return "0.35-0.50";
5974
+ if (score < .65) return "0.50-0.65";
5975
+ return ">=0.65";
5976
+ }
5977
+ function addInto(into, macroClass, band, n) {
5978
+ const row = into[macroClass] ?? {};
5979
+ row[band] = (row[band] ?? 0) + n;
5980
+ into[macroClass] = row;
5981
+ }
5982
+ /** One frame's `below-threshold` discards, tallied. Other reasons are not the
5983
+ * floor's doing and are not counted here. */
5984
+ function tallyBelowFloor(discarded) {
5985
+ const out = {};
5986
+ if (discarded === void 0) return out;
5987
+ for (const d of discarded) {
5988
+ if (d.reason !== "below-threshold") continue;
5989
+ addInto(out, d.macroClass, belowFloorBand(d.score), 1);
5990
+ }
5991
+ return out;
5992
+ }
5993
+ /** Per-device running sum between two stats reports. */
5994
+ var BelowFloorAccumulator = class {
5995
+ byDevice = /* @__PURE__ */ new Map();
5996
+ add(deviceId, tally) {
5997
+ const classes = Object.keys(tally);
5998
+ if (classes.length === 0) return;
5999
+ const into = this.byDevice.get(deviceId) ?? {};
6000
+ for (const macroClass of classes) {
6001
+ const row = tally[macroClass];
6002
+ if (row === void 0) continue;
6003
+ for (const band of BELOW_FLOOR_BANDS) {
6004
+ const n = row[band];
6005
+ if (n !== void 0 && n > 0) addInto(into, macroClass, band, n);
6006
+ }
6007
+ }
6008
+ this.byDevice.set(deviceId, into);
6009
+ }
6010
+ /** The sum since the last drain, and reset. `{}` is a measured zero. */
6011
+ drain(deviceId) {
6012
+ const out = this.byDevice.get(deviceId) ?? {};
6013
+ this.byDevice.delete(deviceId);
6014
+ return out;
6015
+ }
6016
+ };
5963
6017
  var MotionWithoutInferenceDetector = class {
5964
6018
  streak = /* @__PURE__ */ new Map();
5965
6019
  reported = /* @__PURE__ */ new Set();
@@ -6024,6 +6078,8 @@ var PipelineTimingSampler = class {
6024
6078
  droppedSources = /* @__PURE__ */ new Map();
6025
6079
  /** Cumulative value seen at the previous report — the delta base. */
6026
6080
  lastDroppedCumulative = /* @__PURE__ */ new Map();
6081
+ /** Boxes the operator's class floor dropped since the last report (D665). */
6082
+ belowFloor = new BelowFloorAccumulator();
6027
6083
  reportTimer = null;
6028
6084
  log = null;
6029
6085
  runtimeInfo = {};
@@ -6043,6 +6099,7 @@ var PipelineTimingSampler = class {
6043
6099
  addSample(deviceId, s) {
6044
6100
  if (!this.detSamples.has(deviceId)) this.detSamples.set(deviceId, []);
6045
6101
  this.detSamples.get(deviceId).push(s);
6102
+ if (s.belowFloor !== void 0) this.belowFloor.add(deviceId, s.belowFloor);
6046
6103
  }
6047
6104
  /**
6048
6105
  * Moving average inference time (ms) per camera over the current
@@ -6144,6 +6201,7 @@ var PipelineTimingSampler = class {
6144
6201
  p95: p95(inf)
6145
6202
  },
6146
6203
  detections: totalDet,
6204
+ belowFloor: this.belowFloor.drain(deviceId),
6147
6205
  dropped,
6148
6206
  pipelineRuntime: rt.pipelineRuntime ?? null,
6149
6207
  pipelineModels: rt.pipelineModels ?? null
@@ -6967,7 +7025,8 @@ var PipelineRunner = class {
6967
7025
  resultToEmit: emittedAt - inferDoneAt,
6968
7026
  frameAge: typeof capturedAt === "number" && capturedAt > 0 ? pickedAt - capturedAt : -1,
6969
7027
  endToEnd: emittedAt - enqueuedAt,
6970
- detections: result.detections?.length ?? 0
7028
+ detections: result.detections?.length ?? 0,
7029
+ belowFloor: tallyBelowFloor(result.discarded)
6971
7030
  });
6972
7031
  } else frameReleaseReason = "drop";
6973
7032
  } catch {
@@ -1,6 +1,6 @@
1
- import { An as lazy, At as pickDetailCropConvention, D as MOTION_CLOSE_AFTER_MS, Dn as array, En as _enum, In as string, Mn as number, Nn as object, Nt as pipelineRunnerCapability, O as NativeLeaseAdmissionSchema, On as boolean, Rn as EventCategory, en as errMsg, h as DEFAULT_DETAIL_CROP_CONVENTION, hn as defineCustomActions, i as BackgroundRunRegistry, jn as literal, jt as pickNativeLeaseOverride, k as NativeLeaseSettingsSchema, mn as customAction, nt as deriveDetailCropRect, pn as createEvent, pt as failureContributionCapability, sn as BaseAddon, v as DEFAULT_NATIVE_LEASE_SETTINGS, vt as loadContributionCapability, w as FailureCounters, xn as nodePin } from "../dist-DvzAabca.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-DnP_6GBZ.mjs";
3
- import { c as macroGateVerdict, d as resolveFrameViewGeometry, g as getStepDefinition, l as rootObjectGate, o as placeDetailStep, r as CustomModelCatalog, s as stepsForElectedPool, u as localFrameRegistry, v as RETIRED_MODEL_IDS } from "../default-detection-model-JDKeiJPf.mjs";
1
+ import { An as lazy, At as pickDetailCropConvention, D as MOTION_CLOSE_AFTER_MS, Dn as array, En as _enum, In as string, Mn as number, Nn as object, Nt as pipelineRunnerCapability, O as NativeLeaseAdmissionSchema, On as boolean, Rn as EventCategory, en as errMsg, h as DEFAULT_DETAIL_CROP_CONVENTION, hn as defineCustomActions, i as BackgroundRunRegistry, jn as literal, jt as pickNativeLeaseOverride, k as NativeLeaseSettingsSchema, mn as customAction, nt as deriveDetailCropRect, pn as createEvent, pt as failureContributionCapability, sn as BaseAddon, v as DEFAULT_NATIVE_LEASE_SETTINGS, vt as loadContributionCapability, w as FailureCounters, xn as nodePin } from "../dist-CLZmZfHT.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
3
+ import { c as macroGateVerdict, d as resolveFrameViewGeometry, g as getStepDefinition, l as rootObjectGate, o as placeDetailStep, r as CustomModelCatalog, s as stepsForElectedPool, u as localFrameRegistry, v as RETIRED_MODEL_IDS } from "../default-detection-model-BroB5Jp1.mjs";
4
4
  import { t as isWorkerReply } from "../worker-protocol-D_NzPcnh.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
@@ -5952,6 +5952,60 @@ var Semaphore = class {
5952
5952
  if (next) next();
5953
5953
  }
5954
5954
  };
5955
+ //#endregion
5956
+ //#region src/pipeline-runner/below-floor-tally.ts
5957
+ var BELOW_FLOOR_BANDS = [
5958
+ "<0.35",
5959
+ "0.35-0.50",
5960
+ "0.50-0.65",
5961
+ ">=0.65"
5962
+ ];
5963
+ function belowFloorBand(score) {
5964
+ if (score < .35) return "<0.35";
5965
+ if (score < .5) return "0.35-0.50";
5966
+ if (score < .65) return "0.50-0.65";
5967
+ return ">=0.65";
5968
+ }
5969
+ function addInto(into, macroClass, band, n) {
5970
+ const row = into[macroClass] ?? {};
5971
+ row[band] = (row[band] ?? 0) + n;
5972
+ into[macroClass] = row;
5973
+ }
5974
+ /** One frame's `below-threshold` discards, tallied. Other reasons are not the
5975
+ * floor's doing and are not counted here. */
5976
+ function tallyBelowFloor(discarded) {
5977
+ const out = {};
5978
+ if (discarded === void 0) return out;
5979
+ for (const d of discarded) {
5980
+ if (d.reason !== "below-threshold") continue;
5981
+ addInto(out, d.macroClass, belowFloorBand(d.score), 1);
5982
+ }
5983
+ return out;
5984
+ }
5985
+ /** Per-device running sum between two stats reports. */
5986
+ var BelowFloorAccumulator = class {
5987
+ byDevice = /* @__PURE__ */ new Map();
5988
+ add(deviceId, tally) {
5989
+ const classes = Object.keys(tally);
5990
+ if (classes.length === 0) return;
5991
+ const into = this.byDevice.get(deviceId) ?? {};
5992
+ for (const macroClass of classes) {
5993
+ const row = tally[macroClass];
5994
+ if (row === void 0) continue;
5995
+ for (const band of BELOW_FLOOR_BANDS) {
5996
+ const n = row[band];
5997
+ if (n !== void 0 && n > 0) addInto(into, macroClass, band, n);
5998
+ }
5999
+ }
6000
+ this.byDevice.set(deviceId, into);
6001
+ }
6002
+ /** The sum since the last drain, and reset. `{}` is a measured zero. */
6003
+ drain(deviceId) {
6004
+ const out = this.byDevice.get(deviceId) ?? {};
6005
+ this.byDevice.delete(deviceId);
6006
+ return out;
6007
+ }
6008
+ };
5955
6009
  var MotionWithoutInferenceDetector = class {
5956
6010
  streak = /* @__PURE__ */ new Map();
5957
6011
  reported = /* @__PURE__ */ new Set();
@@ -6016,6 +6070,8 @@ var PipelineTimingSampler = class {
6016
6070
  droppedSources = /* @__PURE__ */ new Map();
6017
6071
  /** Cumulative value seen at the previous report — the delta base. */
6018
6072
  lastDroppedCumulative = /* @__PURE__ */ new Map();
6073
+ /** Boxes the operator's class floor dropped since the last report (D665). */
6074
+ belowFloor = new BelowFloorAccumulator();
6019
6075
  reportTimer = null;
6020
6076
  log = null;
6021
6077
  runtimeInfo = {};
@@ -6035,6 +6091,7 @@ var PipelineTimingSampler = class {
6035
6091
  addSample(deviceId, s) {
6036
6092
  if (!this.detSamples.has(deviceId)) this.detSamples.set(deviceId, []);
6037
6093
  this.detSamples.get(deviceId).push(s);
6094
+ if (s.belowFloor !== void 0) this.belowFloor.add(deviceId, s.belowFloor);
6038
6095
  }
6039
6096
  /**
6040
6097
  * Moving average inference time (ms) per camera over the current
@@ -6136,6 +6193,7 @@ var PipelineTimingSampler = class {
6136
6193
  p95: p95(inf)
6137
6194
  },
6138
6195
  detections: totalDet,
6196
+ belowFloor: this.belowFloor.drain(deviceId),
6139
6197
  dropped,
6140
6198
  pipelineRuntime: rt.pipelineRuntime ?? null,
6141
6199
  pipelineModels: rt.pipelineModels ?? null
@@ -6959,7 +7017,8 @@ var PipelineRunner = class {
6959
7017
  resultToEmit: emittedAt - inferDoneAt,
6960
7018
  frameAge: typeof capturedAt === "number" && capturedAt > 0 ? pickedAt - capturedAt : -1,
6961
7019
  endToEnd: emittedAt - enqueuedAt,
6962
- detections: result.detections?.length ?? 0
7020
+ detections: result.detections?.length ?? 0,
7021
+ belowFloor: tallyBelowFloor(result.discarded)
6963
7022
  });
6964
7023
  } else frameReleaseReason = "drop";
6965
7024
  } catch {
@@ -1,4 +1,4 @@
1
- import { Ot as parseProcStatus } from "./dist-DvzAabca.mjs";
1
+ import { Ot as parseProcStatus } from "./dist-CLZmZfHT.mjs";
2
2
  import * as fs from "node:fs";
3
3
  import { execFile } from "node:child_process";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-BUs7H-fe.js");
2
+ const require_dist = require("./dist-CyWAhtbJ.js");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_chunk.__toESM(node_fs);
5
5
  let node_child_process = require("node:child_process");
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-BUs7H-fe.js");
7
- const require_node = require("../node-DxVMyys-.js");
6
+ const require_dist = require("../dist-CyWAhtbJ.js");
7
+ const require_node = require("../node-BDrkzYiH.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
9
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
@@ -1,5 +1,5 @@
1
- import { A as OpsLogEntrySchema, B as VIDEOCLIPS_MAX_OFFER_BYTES, Bt as resolveCreateExportSubject, C as ExportRecordSchema, Ct as mayWriteToLocation, Dn as array, En as _enum, F as RECORDING_SOURCE_CAMSTACK, Fn as record, Ft as recordingArchiveCapability, Ht as resolveLocationMode, I as RECORDING_SOURCE_CAMSTACK_ADDON, In as string, It as recordingCapability, Jt as storageOccupancyCapability, L as RecordingConfigSchema, Lt as recordingExportCapability, Mn as number, Nn as object, On as boolean, P as RECORDING_EXPORT_MAX_READ_BYTES, Pn as preprocess, Qt as videoclipsCapability, R as RecordingSignalStatusSchema, Rn as EventCategory, Rt as recordingSignalCapability, St as mayReadLocation, Tn as sleep$1, Tt as modeMayWrite, V as VISIT_MERGE_GAP_MS, Wt as resolveRecordingProfiles, X as clipExportFailureOf, Xt as stripRetiredBandPreBufferSec, Y as clipExportFailure, _n as hydrateSchema, _t as isFirstLevelMacroClass, a as BatteryStatusSchema, b as EVENT_OWNER_TYPES, ct as evaluateSensorEdge, dn as DeviceType, dt as evictionPolicyOfLocation, en as errMsg, ft as exportSubjectOf, g as DEFAULT_EVENTS_BAND_BUFFER_SEC, hn as defineCustomActions, mn as customAction, mt as gbToBytes, o as CLIP_BROKER_PACED_RATES, q as batteryCapability, qt as storageEvictableCapability, rt as deriveRecordingMode, sn as BaseAddon, tt as deriveBatteryPresence, un as DeviceFeature, ut as evictionPolicyForMode, vt as loadContributionCapability, wn as selectAssignedProfileSlots, wt as migrateLegacyDeviceSignalConfig, x as EVENT_PAD_MS, xn as nodePin } from "../dist-DvzAabca.mjs";
2
- import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-DnP_6GBZ.mjs";
1
+ import { A as OpsLogEntrySchema, B as VIDEOCLIPS_MAX_OFFER_BYTES, Bt as resolveCreateExportSubject, C as ExportRecordSchema, Ct as mayWriteToLocation, Dn as array, En as _enum, F as RECORDING_SOURCE_CAMSTACK, Fn as record, Ft as recordingArchiveCapability, Ht as resolveLocationMode, I as RECORDING_SOURCE_CAMSTACK_ADDON, In as string, It as recordingCapability, Jt as storageOccupancyCapability, L as RecordingConfigSchema, Lt as recordingExportCapability, Mn as number, Nn as object, On as boolean, P as RECORDING_EXPORT_MAX_READ_BYTES, Pn as preprocess, Qt as videoclipsCapability, R as RecordingSignalStatusSchema, Rn as EventCategory, Rt as recordingSignalCapability, St as mayReadLocation, Tn as sleep$1, Tt as modeMayWrite, V as VISIT_MERGE_GAP_MS, Wt as resolveRecordingProfiles, X as clipExportFailureOf, Xt as stripRetiredBandPreBufferSec, Y as clipExportFailure, _n as hydrateSchema, _t as isFirstLevelMacroClass, a as BatteryStatusSchema, b as EVENT_OWNER_TYPES, ct as evaluateSensorEdge, dn as DeviceType, dt as evictionPolicyOfLocation, en as errMsg, ft as exportSubjectOf, g as DEFAULT_EVENTS_BAND_BUFFER_SEC, hn as defineCustomActions, mn as customAction, mt as gbToBytes, o as CLIP_BROKER_PACED_RATES, q as batteryCapability, qt as storageEvictableCapability, rt as deriveRecordingMode, sn as BaseAddon, tt as deriveBatteryPresence, un as DeviceFeature, ut as evictionPolicyForMode, vt as loadContributionCapability, wn as selectAssignedProfileSlots, wt as migrateLegacyDeviceSignalConfig, x as EVENT_PAD_MS, xn as nodePin } from "../dist-CLZmZfHT.mjs";
2
+ import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
3
3
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
4
4
  import { d as PREBUFFER_MAX_MS, l as withRecordingIntent, r as RECORDING_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
5
5
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
2
- import { en as errMsg } from "./dist-DvzAabca.mjs";
2
+ import { en as errMsg } from "./dist-CLZmZfHT.mjs";
3
3
  import { spawn } from "node:child_process";
4
4
  //#region src/stream-broker/recorded/avcc-annexb.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-BUs7H-fe.js");
2
+ const require_dist = require("./dist-CyWAhtbJ.js");
3
3
  let node_child_process = require("node:child_process");
4
4
  //#region src/stream-broker/recorded/avcc-annexb.ts
5
5
  /**
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.266",
21
+ version: "1.2.267",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_stream_broker_widgets",
@@ -1,4 +1,4 @@
1
- const require_segment_demux_js = require("../segment-demux-js-DANvUJgH.js");
1
+ const require_segment_demux_js = require("../segment-demux-js-CwQuMR0h.js");
2
2
  let node_worker_threads = require("node:worker_threads");
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as demuxSegmentFullJs } from "../segment-demux-js-DBqdboBI.mjs";
1
+ import { t as demuxSegmentFullJs } from "../segment-demux-js-BUxZFqkb.mjs";
2
2
  import { parentPort } from "node:worker_threads";
3
3
  //#region src/stream-broker/recorded/demux-worker-child.ts
4
4
  /**
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.266",
39
+ version: "1.2.267",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -3,12 +3,12 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-BUs7H-fe.js");
7
- const require_node = require("../node-DxVMyys-.js");
6
+ const require_dist = require("../dist-CyWAhtbJ.js");
7
+ const require_node = require("../node-BDrkzYiH.js");
8
8
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
9
9
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
10
10
  const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
11
- const require_segment_demux_js = require("../segment-demux-js-DANvUJgH.js");
11
+ const require_segment_demux_js = require("../segment-demux-js-CwQuMR0h.js");
12
12
  let node_os = require("node:os");
13
13
  node_os = require_chunk.__toESM(node_os);
14
14
  let node_crypto = require("node:crypto");
@@ -1,10 +1,10 @@
1
1
  import { r as __toESM } from "../chunk-DnnnRqeS.mjs";
2
- import { $ as declareLogChannel, $t as webrtcSessionCapability, Cn as parseProfileBrokerId, Dn as array, En as _enum, Fn as record, In as string, J as cameraStreamsCapability, Ln as union, M as RATE_CONTROL_RELAXED, Mn as number, N as RATE_CONTROL_TIGHT, Nn as object, On as boolean, Pt as rankStreams, Q as createLogChannelsProvider, Rn as EventCategory, S as EncodeProfileSchema, T as G711_SCALE_CORRECTION_DB, U as addonWidgetsSourceCapability, Vt as resolveEgressDecodeHwAccel, X as clipExportFailureOf, Yt as streamBrokerCapability, Z as createHwAccelCache, a as BatteryStatusSchema, an as isSoftwareDecode, at as egressTranscodeSharingKey, bn as makeSourceBrokerId, cn as CAM_PROFILE_ORDER, dn as DeviceType, en as errMsg, gn as expandAudioChunkToF32le, in as invocationFromEncodeProfile, jn as literal, kn as discriminatedUnion, ln as CamProfileSchema, o as CLIP_BROKER_PACED_RATES, on as BOOT_RECOVERY_BACKOFF_MS, ot as egressTransportFromRequest, pn as createEvent, q as batteryCapability, rn as buildFfmpegArgs$1, s as CLIP_STILL_REASON_CODE_HEADER, sn as BaseAddon, tn as AUDIO_PRESETS, tt as deriveBatteryPresence, un as DeviceFeature, vn as isEvent, vt as loadContributionCapability, xn as nodePin, xt as maskUrlCredentials, yn as makeProfileBrokerId, yt as logChannelsCapability, z as RingBuffer } from "../dist-DvzAabca.mjs";
3
- import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-DnP_6GBZ.mjs";
2
+ import { $ as declareLogChannel, $t as webrtcSessionCapability, Cn as parseProfileBrokerId, Dn as array, En as _enum, Fn as record, In as string, J as cameraStreamsCapability, Ln as union, M as RATE_CONTROL_RELAXED, Mn as number, N as RATE_CONTROL_TIGHT, Nn as object, On as boolean, Pt as rankStreams, Q as createLogChannelsProvider, Rn as EventCategory, S as EncodeProfileSchema, T as G711_SCALE_CORRECTION_DB, U as addonWidgetsSourceCapability, Vt as resolveEgressDecodeHwAccel, X as clipExportFailureOf, Yt as streamBrokerCapability, Z as createHwAccelCache, a as BatteryStatusSchema, an as isSoftwareDecode, at as egressTranscodeSharingKey, bn as makeSourceBrokerId, cn as CAM_PROFILE_ORDER, dn as DeviceType, en as errMsg, gn as expandAudioChunkToF32le, in as invocationFromEncodeProfile, jn as literal, kn as discriminatedUnion, ln as CamProfileSchema, o as CLIP_BROKER_PACED_RATES, on as BOOT_RECOVERY_BACKOFF_MS, ot as egressTransportFromRequest, pn as createEvent, q as batteryCapability, rn as buildFfmpegArgs$1, s as CLIP_STILL_REASON_CODE_HEADER, sn as BaseAddon, tn as AUDIO_PRESETS, tt as deriveBatteryPresence, un as DeviceFeature, vn as isEvent, vt as loadContributionCapability, xn as nodePin, xt as maskUrlCredentials, yn as makeProfileBrokerId, yt as logChannelsCapability, z as RingBuffer } from "../dist-CLZmZfHT.mjs";
3
+ import { i as NO_COST_CLAIM, n as Fmp4FragmentChild, o as probeFfmpegBinary, r as Fmp4FragmentPlane, t as ChildCostRegistry } from "../node-C5LXX8Qo.mjs";
4
4
  import { a as parseRestreamPath, d as PREBUFFER_MAX_MS, f as capPreRollRequestMs, i as isLiveEdgeOnlyDial, m as resolvePrebuffer, n as NO_DECLARATION, p as prebufferRetentionMs, s as sdpVariantFor, u as withSentryIntent } from "../restream-intent-DyGmLAU9.mjs";
5
5
  import { n as profileForStreamId } from "../remote-restream-BeHi78PZ.mjs";
6
6
  import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
7
- import { a as avccSampleToAnnexB, i as require_mp4box_all, n as demuxSegmentPreferJs, o as buildKeyframeAnnexB, r as runFfmpegOnce, s as parseNalLengthSize, t as demuxSegmentFullJs } from "../segment-demux-js-DBqdboBI.mjs";
7
+ import { a as avccSampleToAnnexB, i as require_mp4box_all, n as demuxSegmentPreferJs, o as buildKeyframeAnnexB, r as runFfmpegOnce, s as parseNalLengthSize, t as demuxSegmentFullJs } from "../segment-demux-js-BUxZFqkb.mjs";
8
8
  import { createRequire } from "node:module";
9
9
  import * as os from "node:os";
10
10
  import { networkInterfaces, tmpdir } from "node:os";
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D0etdxl0.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DFaPx_Ot.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.2.301",
3
+ "version": "1.2.302",
4
4
  "description": "Pipeline bundle — runner, detection, motion, audio + stream broker. Multi-entry npm package shipping pipeline addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",