@camstack/addon-pipeline 1.2.625 → 1.2.627

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 (56) hide show
  1. package/THIRD_PARTY_MODELS.md +1 -1
  2. package/dist/audio-analyzer/index.js +3 -3
  3. package/dist/audio-analyzer/index.mjs +3 -3
  4. package/dist/{custom-model-catalog-CJ5aXIOD.mjs → custom-model-catalog-DtxDgB4p.mjs} +6 -6
  5. package/dist/{custom-model-catalog-DvR-whP_.js → custom-model-catalog-rWY1H5Ei.js} +6 -6
  6. package/dist/detection-pipeline/index.js +16 -16
  7. package/dist/detection-pipeline/index.mjs +16 -16
  8. package/dist/{dist-_rq_UVv6.mjs → dist-CQe330cU.mjs} +6823 -14340
  9. package/dist/{dist-Cpis101z.js → dist-CcZsLU96.js} +6823 -14340
  10. package/dist/{model-catalogs-DfoDNm1t.mjs → model-catalogs-B43s5kgs.mjs} +3 -3
  11. package/dist/{model-catalogs-4g6cUT_r.js → model-catalogs-BJjn54AQ.js} +3 -3
  12. package/dist/motion-wasm/index.js +1 -1
  13. package/dist/motion-wasm/index.mjs +1 -1
  14. package/dist/{node-CJXGd0X8.js → node-Ba3e855X.js} +2 -2
  15. package/dist/{node-Dvv27Xny.mjs → node-XOjWaowO.mjs} +2 -2
  16. package/dist/pipeline-runner/index.js +20 -20
  17. package/dist/pipeline-runner/index.mjs +20 -20
  18. package/dist/{process-memory-BGbqzwKk.js → process-memory-Dw_mzdZ5.js} +1 -1
  19. package/dist/{process-memory-CnqFCrg1.mjs → process-memory-DyYlcpfM.mjs} +1 -1
  20. package/dist/recorder/index.js +26 -1816
  21. package/dist/recorder/index.mjs +26 -1816
  22. package/dist/{restream-intent-DyGmLAU9.mjs → restream-intent-DvzCnthK.mjs} +1 -1
  23. package/dist/{restream-intent-7uDNqMKs.js → restream-intent-DzrZ_EHP.js} +1 -1
  24. package/dist/{segment-demux-js-DCxqN1Pl.mjs → segment-demux-js-BVwtkI0F.mjs} +1 -1
  25. package/dist/{segment-demux-js-CL0PehIS.js → segment-demux-js-qzmsqDt7.js} +1 -1
  26. package/dist/session-decode/decode-worker-main.js +8 -8
  27. package/dist/session-decode/decode-worker-main.mjs +8 -8
  28. package/dist/stream-broker/_stub.js +2 -2
  29. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DJ_CX5Lw.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CJJ0Dj8s.mjs} +3 -3
  30. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D-GlPMcf.mjs +26 -0
  31. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CEiM-boT.mjs +26 -0
  32. package/dist/stream-broker/demux-worker-child.js +1 -1
  33. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  34. package/dist/stream-broker/{hostInit-tMlXFYkK.mjs → hostInit-BIx670St.mjs} +3 -3
  35. package/dist/stream-broker/index.js +34 -34
  36. package/dist/stream-broker/index.mjs +34 -34
  37. package/dist/stream-broker/remoteEntry.js +1 -1
  38. package/package.json +7 -2
  39. package/python/inference_pool.py +3 -3
  40. package/python/postprocessors/ctc.py +1 -1
  41. package/python/postprocessors/plate_slots.py +2 -2
  42. package/python/postprocessors/test_ctc.py +1 -1
  43. package/python/postprocessors/test_plate_slots.py +1 -1
  44. package/python/postprocessors/test_ssd.py +1 -1
  45. package/python/postprocessors/test_yolo_split_dfl.py +3 -3
  46. package/python/postprocessors/test_yolo_split_dfl_numpy.py +5 -5
  47. package/python/postprocessors/test_yolonas.py +5 -5
  48. package/python/postprocessors/test_yolov9_edgetpu_concat.py +3 -3
  49. package/python/postprocessors/testdata/yunet_int8_outputs.json +2 -2
  50. package/python/postprocessors/yolo_split_dfl.py +5 -5
  51. package/python/postprocessors/yolonas.py +3 -3
  52. package/python/test_dequant_edgetpu.py +2 -2
  53. package/python/test_inference_pool_preprocess.py +2 -2
  54. package/python/webgpu_isolated.py +1 -1
  55. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D02gyL5r.mjs +0 -26
  56. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CPQe09h1.mjs +0 -26
@@ -1,4 +1,4 @@
1
- import { f as COCO_80_LABELS, nr as hfModelUrl } from "./dist-_rq_UVv6.mjs";
1
+ import { f as COCO_80_LABELS, nr as hfModelUrl } from "./dist-CQe330cU.mjs";
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -1266,7 +1266,7 @@ var PACKAGE_DETECTION_MODELS = [{
1266
1266
  id: "rfdetr-package",
1267
1267
  license: RFDETR_APACHE,
1268
1268
  name: "RF-DETR — Package",
1269
- description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than the former yolov8n-package (+0.86 vs +0.21 margin on 615) at ~4× the size and ~6× the latency",
1269
+ description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than the former yolov8n-package (+0.86 vs +0.21 margin on 101) at ~4× the size and ~6× the latency",
1270
1270
  inputSize: {
1271
1271
  width: 576,
1272
1272
  height: 576
@@ -1297,7 +1297,7 @@ var PLATE_OCR_MODELS = [{
1297
1297
  id: "cct-s-v2-global",
1298
1298
  license: FAST_PLATE_OCR_MIT,
1299
1299
  name: "CCT-S v2 Global — License Plate",
1300
- description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-617 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
1300
+ description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-102 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
1301
1301
  inputSize: {
1302
1302
  width: 128,
1303
1303
  height: 64
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Cpis101z.js");
1
+ const require_dist = require("./dist-CcZsLU96.js");
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -1266,7 +1266,7 @@ var PACKAGE_DETECTION_MODELS = [{
1266
1266
  id: "rfdetr-package",
1267
1267
  license: RFDETR_APACHE,
1268
1268
  name: "RF-DETR — Package",
1269
- description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than the former yolov8n-package (+0.86 vs +0.21 margin on 615) at ~4× the size and ~6× the latency",
1269
+ description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than the former yolov8n-package (+0.86 vs +0.21 margin on 101) at ~4× the size and ~6× the latency",
1270
1270
  inputSize: {
1271
1271
  width: 576,
1272
1272
  height: 576
@@ -1297,7 +1297,7 @@ var PLATE_OCR_MODELS = [{
1297
1297
  id: "cct-s-v2-global",
1298
1298
  license: FAST_PLATE_OCR_MIT,
1299
1299
  name: "CCT-S v2 Global — License Plate",
1300
- description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-617 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
1300
+ description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-102 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
1301
1301
  inputSize: {
1302
1302
  width: 128,
1303
1303
  height: 64
@@ -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-Cpis101z.js");
5
+ const require_dist = require("../dist-CcZsLU96.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 { Gn as BaseAddon, Hn as DeviceType, Ot as evaluateZoneRules, Zt as motionDetectionCapability, rr as hydrateSchema } from "../dist-_rq_UVv6.mjs";
1
+ import { Gn as BaseAddon, Hn as DeviceType, Ot as evaluateZoneRules, Zt as motionDetectionCapability, rr as hydrateSchema } from "../dist-CQe330cU.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-Cpis101z.js");
2
+ const require_dist = require("./dist-CcZsLU96.js");
3
3
  require("node:os");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs = require("node:fs");
@@ -659,7 +659,7 @@ function defaultFfmpegSpawn(command, args, options) {
659
659
  * ## Where a claim is made, and where it is released
660
660
  *
661
661
  * At the spawn site, and nowhere else. It is the only place that knows both
662
- * halves: the recorder's controller knows it is starting ffmpeg for camera 615
662
+ * halves: the recorder's controller knows it is starting ffmpeg for camera 101
663
663
  * profile `high`; the decode coordinator knows the session it is forking a
664
664
  * worker for. Nothing has to deduce it afterwards, and no entity needs a
665
665
  * global list of which pid belongs to which camera.
@@ -1,4 +1,4 @@
1
- import { Bn as isSoftwareDecode, In as Fmp4BoxSplitter, Ln as buildFfmpegArgs, Un as errMsg } from "./dist-_rq_UVv6.mjs";
1
+ import { Bn as isSoftwareDecode, In as Fmp4BoxSplitter, Ln as buildFfmpegArgs, Un as errMsg } from "./dist-CQe330cU.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import path from "node:path";
@@ -655,7 +655,7 @@ function defaultFfmpegSpawn(command, args, options) {
655
655
  * ## Where a claim is made, and where it is released
656
656
  *
657
657
  * At the spawn site, and nowhere else. It is the only place that knows both
658
- * halves: the recorder's controller knows it is starting ffmpeg for camera 615
658
+ * halves: the recorder's controller knows it is starting ffmpeg for camera 101
659
659
  * profile `high`; the decode coordinator knows the session it is forking a
660
660
  * worker for. Nothing has to deduce it afterwards, and no entity needs a
661
661
  * global list of which pid belongs to which camera.
@@ -3,13 +3,13 @@ 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-Cpis101z.js");
7
- const require_node = require("../node-CJXGd0X8.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-DvR-whP_.js");
6
+ const require_dist = require("../dist-CcZsLU96.js");
7
+ const require_node = require("../node-Ba3e855X.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-rWY1H5Ei.js");
9
9
  const require_worker_protocol = require("../worker-protocol-DngGEAT2.js");
10
10
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
11
11
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
12
- const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
12
+ const require_restream_intent = require("../restream-intent-DzrZ_EHP.js");
13
13
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
14
14
  let node_os = require("node:os");
15
15
  node_os = require_chunk.__toESM(node_os);
@@ -758,7 +758,7 @@ var LiveDecodeWorkerAdmission = class {
758
758
  * Take a slot, or refuse.
759
759
  *
760
760
  * A refusal is a WARN and carries `tags.deviceId`, because the only useful
761
- * form of this question is per-camera ("why did 617 not run when 615 did?").
761
+ * form of this question is per-camera ("why did 102 not run when 101 did?").
762
762
  * A branch that drops work silently reads as "it never happened".
763
763
  */
764
764
  admit(deviceId, label) {
@@ -839,7 +839,7 @@ async function withRetainedReader(store, handle, read) {
839
839
  * at a MEDIAN `handleAgeMs` of 30 099 ms — thirty seconds. The node-wide
840
840
  * {@link ../session-decode/native-crop-registry.NativeCropRegistry} sat pinned
841
841
  * at `registrySize 4096 / registryCap 4096` for the whole window. Measured
842
- * consequence: on track `d64ace88` (device 1443) the frontal-face frames never
842
+ * consequence: on track `d64ace88` (device 111) the frontal-face frames never
843
843
  * reached the face detector, because every native fetch missed.
844
844
  *
845
845
  * ## Why an AGE bound and not a bigger cap
@@ -884,7 +884,7 @@ async function withRetainedReader(store, handle, read) {
884
884
  * `pipeline/native-lease.ts` sizing prose rather than from a measurement of
885
885
  * THIS path — that a p90 ask lands at 4.3 s and a p50 at 367 ms. Deployed
886
886
  * 2026-09-09 ~14:00, it produced, on the hub, **3 371 `no-registry-entry`
887
- * misses in fifteen minutes** (2 036 of them on `salone` alone) against
887
+ * misses in fifteen minutes** (2 036 of them on `hall` alone) against
888
888
  * essentially ZERO in the half hour before the deploy: the registry held 46
889
889
  * entries where it had held 4 096, and the asks arriving between 10 s and 30 s
890
890
  * found nothing at all. The operator saw it as tracks with missing media.
@@ -1017,7 +1017,7 @@ var NativeCropRegistry = class {
1017
1017
  * The deviceId a handle was registered under, even AFTER its entry was
1018
1018
  * evicted — kept in a small parallel ring so a `no-registry-entry` miss can
1019
1019
  * still be attributed to a camera (a miss line without `deviceId` cannot
1020
- * answer "why is 617 worse than 615?").
1020
+ * answer "why is 102 worse than 101?").
1021
1021
  */
1022
1022
  deviceIdFor(handle) {
1023
1023
  const key = this.key(handle);
@@ -2802,7 +2802,7 @@ var REMEMBERED_BOXES_PER_DEVICE = 64;
2802
2802
  /**
2803
2803
  * Per-camera memory of the boxes recently on screen.
2804
2804
  *
2805
- * Per CAMERA and never global: a box on 617 says nothing about 615, and a
2805
+ * Per CAMERA and never global: a box on 102 says nothing about 101, and a
2806
2806
  * shared structure would make one camera's traffic decide another's cuts —
2807
2807
  * which is the exact shape of the node-wide sharing this whole change moves
2808
2808
  * away from.
@@ -4666,7 +4666,7 @@ function withPackageLook(result, dispatched, filledByRoot = false) {
4666
4666
  * clear that dwell, or the delivery falls back to the 45 s poll. Promotion
4667
4667
  * itself counts FRAMES (`packageDropMinFrames`, default 3), so a single
4668
4668
  * settle session that sees the box three times is enough when dwell is 0 —
4669
- * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 615
4669
+ * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 101
4670
4670
  * (2026-08-24 13:40). The relation is pinned by
4671
4671
  * `scripts/check-package-promotion-satisfiable.ts`.
4672
4672
  *
@@ -4804,7 +4804,7 @@ function resolveNativeCropHitKind(source) {
4804
4804
  *
4805
4805
  * The read passes no `nodeId`. With one, `addon-settings` would project that
4806
4806
  * node's scoped value and two nodes could hold different lease windows for the
4807
- * same camera — so whether a stored crop is native pixels or the ≤640 fallback
4807
+ * same camera — so whether a stored crop is native pixels or the ≤106 fallback
4808
4808
  * would depend on where the balancer happened to place it, which is invisible
4809
4809
  * from the stored media.
4810
4810
  *
@@ -5827,7 +5827,7 @@ var PipelineTimingSampler = class {
5827
5827
  };
5828
5828
  /**
5829
5829
  * Bound on one `processFrame` call. Chosen well above the slowest legitimate
5830
- * inference seen in production (8 617 ms, GPU contention on the hub) so the
5830
+ * inference seen in production (8 102 ms, GPU contention on the hub) so the
5831
5831
  * timeout only ever fires on a call that is genuinely never coming back.
5832
5832
  */
5833
5833
  var DEFAULT_INFERENCE_TIMEOUT_MS = 2e4;
@@ -6863,13 +6863,13 @@ var PipelineRunner = class {
6863
6863
  *
6864
6864
  * The first-level detector sees the frame at its input size (320 px on every
6865
6865
  * hardware-aware default). A 4K frame is reduced 12×: a dog measured at
6866
- * 89–277 px in the source is 7–38 px for the model and is not emitted. Camera 615, six
6866
+ * 89–277 px in the source is 7–38 px for the model and is not emitted. Camera 101, six
6867
6867
  * instants with a dog in the scene, five with no `animal` detection at all —
6868
6868
  * nothing downstream (tracker, gate, notifications) ever saw a subject. The
6869
6869
  * confirmation gate, which re-runs the same detector on a 320 px native crop
6870
6870
  * of the PERSON, found the dog at 0.74–0.91 as `bestIncompatibleClass`. The
6871
6871
  * measurement that decided the constants below is
6872
- * `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-615`: a
6872
+ * `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-101`: a
6873
6873
  * 640–800 px native square around the moving region brings the dog to
6874
6874
  * 0.82–0.91 with the SAME 320 model; a 1280 px square loses it again.
6875
6875
  *
@@ -6885,7 +6885,7 @@ var PipelineRunner = class {
6885
6885
  * ## When it runs — NOT only when the frame is empty
6886
6886
  *
6887
6887
  * The trigger is an UNCOVERED MOTION REGION, deliberately broader than "the
6888
- * full-frame pass found nothing". Camera 615, 2026-09-06 19:54:33 local: the
6888
+ * full-frame pass found nothing". Camera 101, 2026-09-06 19:54:33 local: the
6889
6889
  * gate DID confirm an `animal` birth (bestScore 0.8983) — and the track held
6890
6890
  * 9 positions over 1 666 ms, then coasted out its `maxMissedMs` (4 000 ms) and
6891
6891
  * died at 19:54:39, before the dog reached the Aiuola zone. Both of its object
@@ -7954,7 +7954,7 @@ var EMPTY_RECOVERY_SKIPS = Object.freeze({
7954
7954
  * How often the small-subject recovery pass reports per camera. The pass runs
7955
7955
  * up to twice a second; one aggregated line every ten seconds says how often
7956
7956
  * it ran, what it cost and what it found — the numbers a "did the second
7957
- * pass help on 615?" question is answered from.
7957
+ * pass help on 101?" question is answered from.
7958
7958
  */
7959
7959
  var RECOVERY_LOG_INTERVAL_MS = 1e4;
7960
7960
  /**
@@ -8510,7 +8510,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
8510
8510
  /**
8511
8511
  * Per-camera counters for the frames on which the pass did NOT run, since the
8512
8512
  * last report line (D378). "The second pass stops running when a person is
8513
- * beside the dog" was a live hypothesis on camera 615 and the logs could not
8513
+ * beside the dog" was a live hypothesis on camera 101 and the logs could not
8514
8514
  * answer it: a report that counts only the passes that ran cannot say why the
8515
8515
  * others did not. `rateLimited` is the cadence cap, `noMotion` an empty or
8516
8516
  * stale motion mirror, `tooLarge` / `covered` the shipped rule's two region
@@ -10462,7 +10462,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
10462
10462
  * Log a runtime-label failure at its TRANSITION, and at `warn`.
10463
10463
  *
10464
10464
  * This branch first shipped at `debug`, on the argument that the absent field
10465
- * in the line was signal enough. It was not: within the hour `little-unraid`
10465
+ * in the line was signal enough. It was not: within the hour `agent-a`
10466
10466
  * was the one node still logging `pipelineRuntime=null` and there was no way
10467
10467
  * to tell "this node has no engine" from "the read threw", because the hub
10468
10468
  * writes `info` and the agent forwards to it. That is D438's blind
@@ -10526,7 +10526,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
10526
10526
  /**
10527
10527
  * Per camera, the root-supply plan (D730) and the announce derived from it,
10528
10528
  * keyed on the two inputs it reads: the attach tree and the custom-model
10529
- * snapshot (a Frigate+ root is a custom model), plus the elected device
10529
+ * snapshot (a plus catalog root is a custom model), plus the elected device
10530
10530
  * whose default an unpinned root runs. Recomputed when any changes — at
10531
10531
  * most once per catalog refresh.
10532
10532
  */
@@ -10878,7 +10878,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
10878
10878
  * - first death: clean up the dead subscription and re-dial once (2s);
10879
10879
  * - second death within 60s: give up re-dialing and DETACH — the
10880
10880
  * orchestrator re-dispatches cleanly on the next motion/occupancy signal
10881
- * (the same recovery path validated manually on device 592).
10881
+ * (the same recovery path validated manually on device 107).
10882
10882
  */
10883
10883
  handleDetectionDecodeEnded(deviceId) {
10884
10884
  const attachment = this.attached.get(deviceId);
@@ -1,10 +1,10 @@
1
- import { $n as defineCustomActions, A as NativeLeaseAdmissionSchema, E as FailureCounters, Er as EventCategory, F as PIPELINE_RAMP, Ft as fuseRecoveredDetections, Gn as BaseAddon, Ht as linkedStepOf, M as NodeBenchRunnerInputSchema, Nt as failureContributionCapability, Q as applyCropClassFloors, Qn as customAction, Sn as rootSuppliesOf, U as ROOT_SUPPLIABLE_STEP_IDS, Un as errMsg, Ut as loadContributionCapability, Yn as MODEL_FORMATS, Z as allowedSuppliedEffect, Zn as createEvent, _ as DEFAULT_DETAIL_CROP_CONVENTION, a as BackgroundRunRegistry, an as planMotionCrops, at as buildBenchStepTree, br as number, bt as deriveRootFaceRefineRect, cn as readRecoveryRecipeForSteps, ft as countRecoverySkips, gr as boolean, hr as array, in as pipelineRunnerCapability, j as NativeLeaseSettingsSchema, lr as nodePin, m as CROP_SUPPLY_SOURCES, mr as _enum, nn as pickNativeLeaseOverride, on as planRecoveryCrops, ot as cameraOwnsMotionViaSensor, pn as remapCropDetections, tn as pickDetailCropConvention, vn as resolveModelBoundSetting, vr as lazy, vt as deriveDetailCropRect, wn as selectRecoveryStep, wr as string, x as DEVICE_RAMP, xn as resolveRootSupply, xr as object, y as DEFAULT_NATIVE_LEASE_SETTINGS, yr as literal } from "../dist-_rq_UVv6.mjs";
2
- import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-Dvv27Xny.mjs";
3
- import { a as stepsForElectedPool, c as resolveDefaultDetectionModel, d as localFrameRegistry, f as isSessionDecodeReadGone, i as placeDetailStep, l as macroGateVerdict, m as resolveFrameViewGeometry, p as createSessionDecodeCoordinator, s as resolveDeviceEngine, t as CustomModelCatalog, u as rootObjectGate, v as getStep, y as getStepDefinition } from "../custom-model-catalog-CJ5aXIOD.mjs";
1
+ import { $n as defineCustomActions, A as NativeLeaseAdmissionSchema, E as FailureCounters, Er as EventCategory, F as PIPELINE_RAMP, Ft as fuseRecoveredDetections, Gn as BaseAddon, Ht as linkedStepOf, M as NodeBenchRunnerInputSchema, Nt as failureContributionCapability, Q as applyCropClassFloors, Qn as customAction, Sn as rootSuppliesOf, U as ROOT_SUPPLIABLE_STEP_IDS, Un as errMsg, Ut as loadContributionCapability, Yn as MODEL_FORMATS, Z as allowedSuppliedEffect, Zn as createEvent, _ as DEFAULT_DETAIL_CROP_CONVENTION, a as BackgroundRunRegistry, an as planMotionCrops, at as buildBenchStepTree, br as number, bt as deriveRootFaceRefineRect, cn as readRecoveryRecipeForSteps, ft as countRecoverySkips, gr as boolean, hr as array, in as pipelineRunnerCapability, j as NativeLeaseSettingsSchema, lr as nodePin, m as CROP_SUPPLY_SOURCES, mr as _enum, nn as pickNativeLeaseOverride, on as planRecoveryCrops, ot as cameraOwnsMotionViaSensor, pn as remapCropDetections, tn as pickDetailCropConvention, vn as resolveModelBoundSetting, vr as lazy, vt as deriveDetailCropRect, wn as selectRecoveryStep, wr as string, x as DEVICE_RAMP, xn as resolveRootSupply, xr as object, y as DEFAULT_NATIVE_LEASE_SETTINGS, yr as literal } from "../dist-CQe330cU.mjs";
2
+ import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-XOjWaowO.mjs";
3
+ import { a as stepsForElectedPool, c as resolveDefaultDetectionModel, d as localFrameRegistry, f as isSessionDecodeReadGone, i as placeDetailStep, l as macroGateVerdict, m as resolveFrameViewGeometry, p as createSessionDecodeCoordinator, s as resolveDeviceEngine, t as CustomModelCatalog, u as rootObjectGate, v as getStep, y as getStepDefinition } from "../custom-model-catalog-DtxDgB4p.mjs";
4
4
  import { i as SessionHwaccelSource } from "../worker-protocol-_avq7y8O.mjs";
5
5
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
6
6
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
7
- import { c as withDetectionIntent, o as preRollRequestOf, t as DETECTION_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
7
+ import { c as withDetectionIntent, o as preRollRequestOf, t as DETECTION_PRE_ROLL_REQUEST_MS } from "../restream-intent-DvzCnthK.mjs";
8
8
  import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
9
9
  import * as os$1 from "node:os";
10
10
  import os from "node:os";
@@ -751,7 +751,7 @@ var LiveDecodeWorkerAdmission = class {
751
751
  * Take a slot, or refuse.
752
752
  *
753
753
  * A refusal is a WARN and carries `tags.deviceId`, because the only useful
754
- * form of this question is per-camera ("why did 617 not run when 615 did?").
754
+ * form of this question is per-camera ("why did 102 not run when 101 did?").
755
755
  * A branch that drops work silently reads as "it never happened".
756
756
  */
757
757
  admit(deviceId, label) {
@@ -832,7 +832,7 @@ async function withRetainedReader(store, handle, read) {
832
832
  * at a MEDIAN `handleAgeMs` of 30 099 ms — thirty seconds. The node-wide
833
833
  * {@link ../session-decode/native-crop-registry.NativeCropRegistry} sat pinned
834
834
  * at `registrySize 4096 / registryCap 4096` for the whole window. Measured
835
- * consequence: on track `d64ace88` (device 1443) the frontal-face frames never
835
+ * consequence: on track `d64ace88` (device 111) the frontal-face frames never
836
836
  * reached the face detector, because every native fetch missed.
837
837
  *
838
838
  * ## Why an AGE bound and not a bigger cap
@@ -877,7 +877,7 @@ async function withRetainedReader(store, handle, read) {
877
877
  * `pipeline/native-lease.ts` sizing prose rather than from a measurement of
878
878
  * THIS path — that a p90 ask lands at 4.3 s and a p50 at 367 ms. Deployed
879
879
  * 2026-09-09 ~14:00, it produced, on the hub, **3 371 `no-registry-entry`
880
- * misses in fifteen minutes** (2 036 of them on `salone` alone) against
880
+ * misses in fifteen minutes** (2 036 of them on `hall` alone) against
881
881
  * essentially ZERO in the half hour before the deploy: the registry held 46
882
882
  * entries where it had held 4 096, and the asks arriving between 10 s and 30 s
883
883
  * found nothing at all. The operator saw it as tracks with missing media.
@@ -1010,7 +1010,7 @@ var NativeCropRegistry = class {
1010
1010
  * The deviceId a handle was registered under, even AFTER its entry was
1011
1011
  * evicted — kept in a small parallel ring so a `no-registry-entry` miss can
1012
1012
  * still be attributed to a camera (a miss line without `deviceId` cannot
1013
- * answer "why is 617 worse than 615?").
1013
+ * answer "why is 102 worse than 101?").
1014
1014
  */
1015
1015
  deviceIdFor(handle) {
1016
1016
  const key = this.key(handle);
@@ -2794,7 +2794,7 @@ var REMEMBERED_BOXES_PER_DEVICE = 64;
2794
2794
  /**
2795
2795
  * Per-camera memory of the boxes recently on screen.
2796
2796
  *
2797
- * Per CAMERA and never global: a box on 617 says nothing about 615, and a
2797
+ * Per CAMERA and never global: a box on 102 says nothing about 101, and a
2798
2798
  * shared structure would make one camera's traffic decide another's cuts —
2799
2799
  * which is the exact shape of the node-wide sharing this whole change moves
2800
2800
  * away from.
@@ -4658,7 +4658,7 @@ function withPackageLook(result, dispatched, filledByRoot = false) {
4658
4658
  * clear that dwell, or the delivery falls back to the 45 s poll. Promotion
4659
4659
  * itself counts FRAMES (`packageDropMinFrames`, default 3), so a single
4660
4660
  * settle session that sees the box three times is enough when dwell is 0 —
4661
- * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 615
4661
+ * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 101
4662
4662
  * (2026-08-24 13:40). The relation is pinned by
4663
4663
  * `scripts/check-package-promotion-satisfiable.ts`.
4664
4664
  *
@@ -4796,7 +4796,7 @@ function resolveNativeCropHitKind(source) {
4796
4796
  *
4797
4797
  * The read passes no `nodeId`. With one, `addon-settings` would project that
4798
4798
  * node's scoped value and two nodes could hold different lease windows for the
4799
- * same camera — so whether a stored crop is native pixels or the ≤640 fallback
4799
+ * same camera — so whether a stored crop is native pixels or the ≤106 fallback
4800
4800
  * would depend on where the balancer happened to place it, which is invisible
4801
4801
  * from the stored media.
4802
4802
  *
@@ -5819,7 +5819,7 @@ var PipelineTimingSampler = class {
5819
5819
  };
5820
5820
  /**
5821
5821
  * Bound on one `processFrame` call. Chosen well above the slowest legitimate
5822
- * inference seen in production (8 617 ms, GPU contention on the hub) so the
5822
+ * inference seen in production (8 102 ms, GPU contention on the hub) so the
5823
5823
  * timeout only ever fires on a call that is genuinely never coming back.
5824
5824
  */
5825
5825
  var DEFAULT_INFERENCE_TIMEOUT_MS = 2e4;
@@ -6855,13 +6855,13 @@ var PipelineRunner = class {
6855
6855
  *
6856
6856
  * The first-level detector sees the frame at its input size (320 px on every
6857
6857
  * hardware-aware default). A 4K frame is reduced 12×: a dog measured at
6858
- * 89–277 px in the source is 7–38 px for the model and is not emitted. Camera 615, six
6858
+ * 89–277 px in the source is 7–38 px for the model and is not emitted. Camera 101, six
6859
6859
  * instants with a dog in the scene, five with no `animal` detection at all —
6860
6860
  * nothing downstream (tracker, gate, notifications) ever saw a subject. The
6861
6861
  * confirmation gate, which re-runs the same detector on a 320 px native crop
6862
6862
  * of the PERSON, found the dog at 0.74–0.91 as `bestIncompatibleClass`. The
6863
6863
  * measurement that decided the constants below is
6864
- * `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-615`: a
6864
+ * `docs/benchmarks/pipeline-frame-model-eval.md`, case `miss-dog-101`: a
6865
6865
  * 640–800 px native square around the moving region brings the dog to
6866
6866
  * 0.82–0.91 with the SAME 320 model; a 1280 px square loses it again.
6867
6867
  *
@@ -6877,7 +6877,7 @@ var PipelineRunner = class {
6877
6877
  * ## When it runs — NOT only when the frame is empty
6878
6878
  *
6879
6879
  * The trigger is an UNCOVERED MOTION REGION, deliberately broader than "the
6880
- * full-frame pass found nothing". Camera 615, 2026-09-06 19:54:33 local: the
6880
+ * full-frame pass found nothing". Camera 101, 2026-09-06 19:54:33 local: the
6881
6881
  * gate DID confirm an `animal` birth (bestScore 0.8983) — and the track held
6882
6882
  * 9 positions over 1 666 ms, then coasted out its `maxMissedMs` (4 000 ms) and
6883
6883
  * died at 19:54:39, before the dog reached the Aiuola zone. Both of its object
@@ -7946,7 +7946,7 @@ var EMPTY_RECOVERY_SKIPS = Object.freeze({
7946
7946
  * How often the small-subject recovery pass reports per camera. The pass runs
7947
7947
  * up to twice a second; one aggregated line every ten seconds says how often
7948
7948
  * it ran, what it cost and what it found — the numbers a "did the second
7949
- * pass help on 615?" question is answered from.
7949
+ * pass help on 101?" question is answered from.
7950
7950
  */
7951
7951
  var RECOVERY_LOG_INTERVAL_MS = 1e4;
7952
7952
  /**
@@ -8502,7 +8502,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
8502
8502
  /**
8503
8503
  * Per-camera counters for the frames on which the pass did NOT run, since the
8504
8504
  * last report line (D378). "The second pass stops running when a person is
8505
- * beside the dog" was a live hypothesis on camera 615 and the logs could not
8505
+ * beside the dog" was a live hypothesis on camera 101 and the logs could not
8506
8506
  * answer it: a report that counts only the passes that ran cannot say why the
8507
8507
  * others did not. `rateLimited` is the cadence cap, `noMotion` an empty or
8508
8508
  * stale motion mirror, `tooLarge` / `covered` the shipped rule's two region
@@ -10454,7 +10454,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
10454
10454
  * Log a runtime-label failure at its TRANSITION, and at `warn`.
10455
10455
  *
10456
10456
  * This branch first shipped at `debug`, on the argument that the absent field
10457
- * in the line was signal enough. It was not: within the hour `little-unraid`
10457
+ * in the line was signal enough. It was not: within the hour `agent-a`
10458
10458
  * was the one node still logging `pipelineRuntime=null` and there was no way
10459
10459
  * to tell "this node has no engine" from "the read threw", because the hub
10460
10460
  * writes `info` and the agent forwards to it. That is D438's blind
@@ -10518,7 +10518,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
10518
10518
  /**
10519
10519
  * Per camera, the root-supply plan (D730) and the announce derived from it,
10520
10520
  * keyed on the two inputs it reads: the attach tree and the custom-model
10521
- * snapshot (a Frigate+ root is a custom model), plus the elected device
10521
+ * snapshot (a plus catalog root is a custom model), plus the elected device
10522
10522
  * whose default an unpinned root runs. Recomputed when any changes — at
10523
10523
  * most once per catalog refresh.
10524
10524
  */
@@ -10870,7 +10870,7 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
10870
10870
  * - first death: clean up the dead subscription and re-dial once (2s);
10871
10871
  * - second death within 60s: give up re-dialing and DETACH — the
10872
10872
  * orchestrator re-dispatches cleanly on the next motion/occupancy signal
10873
- * (the same recovery path validated manually on device 592).
10873
+ * (the same recovery path validated manually on device 107).
10874
10874
  */
10875
10875
  handleDetectionDecodeEnded(deviceId) {
10876
10876
  const attachment = this.attached.get(deviceId);
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-emK7D4bc.js");
2
- const require_dist = require("./dist-Cpis101z.js");
2
+ const require_dist = require("./dist-CcZsLU96.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");
@@ -1,4 +1,4 @@
1
- import { $t as parseProcStatus } from "./dist-_rq_UVv6.mjs";
1
+ import { $t as parseProcStatus } from "./dist-CQe330cU.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