@camstack/addon-pipeline 1.2.326 → 1.2.327

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 (33) hide show
  1. package/THIRD_PARTY_MODELS.md +25 -27
  2. package/dist/audio-analyzer/index.js +2 -2
  3. package/dist/audio-analyzer/index.mjs +2 -2
  4. package/dist/{default-detection-model-WnGDQAQh.js → default-detection-model-CBIYdAJ5.js} +3 -3
  5. package/dist/{default-detection-model-Bu4So71h.mjs → default-detection-model-hql6BX9-.mjs} +3 -3
  6. package/dist/detection-pipeline/index.js +5 -5
  7. package/dist/detection-pipeline/index.mjs +5 -5
  8. package/dist/{dist-BuU8Y4o1.mjs → dist-B9LnBPz9.mjs} +91 -27
  9. package/dist/{dist-BTBbIGSC.js → dist-BBZwYfSN.js} +91 -27
  10. package/dist/motion-wasm/index.js +1 -1
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-inZFYgkm.mjs → node-Ci0E-0VP.mjs} +1 -1
  13. package/dist/{node-UK2v2ZSw.js → node-mJQBUiEc.js} +1 -1
  14. package/dist/pipeline-runner/index.js +41 -12
  15. package/dist/pipeline-runner/index.mjs +41 -13
  16. package/dist/{process-memory-DbSOL63T.mjs → process-memory-B63Jlpev.mjs} +1 -1
  17. package/dist/{process-memory-BfDlwJc4.js → process-memory-DgEfKdtC.js} +1 -1
  18. package/dist/recorder/index.js +9 -8
  19. package/dist/recorder/index.mjs +9 -8
  20. package/dist/{segment-demux-js-C1GXgxZ0.js → segment-demux-js-C2ufKMu0.js} +1 -1
  21. package/dist/{segment-demux-js-CMj020zz.mjs → segment-demux-js-DzwHW4Ey.mjs} +1 -1
  22. package/dist/stream-broker/_stub.js +1 -1
  23. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-qHD9Dl1z.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B4fPzS-8.mjs} +3 -3
  24. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BDGzcgLP.mjs +26 -0
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-BgWrKrQn.mjs → hostInit-Cg4IdtE5.mjs} +3 -3
  28. package/dist/stream-broker/index.js +5 -5
  29. package/dist/stream-broker/index.mjs +5 -5
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/package.json +1 -1
  32. package/python/postprocessors/scrfd.py +2 -0
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-NkeMtp-v.mjs +0 -26
@@ -30,9 +30,9 @@ under [Non-commercial models](#non-commercial-models).
30
30
 
31
31
  ## Required attributions
32
32
 
33
- - © Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server. https://github.com/ultralytics/ultralytics
33
+ - © Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
34
34
  - Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0. https://github.com/google-coral/test_data
35
- - © Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server. https://github.com/ultralytics/ultralytics
35
+ - © Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
36
36
  - RF-DETR © Roboflow, Apache-2.0. https://github.com/roboflow/rf-detr
37
37
  - YuNet weights Copyright (c) 2020 Shiqi Yu, MIT. Training code: ShiqiYu/libfacedetection.train, BSD-3-Clause. https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet
38
38
  - AuraFace v1 by fal.ai, Apache-2.0. https://huggingface.co/fal/AuraFace-v1
@@ -45,11 +45,10 @@ under [Non-commercial models](#non-commercial-models).
45
45
  - YAMNet © Google LLC, Apache-2.0. AudioSet ontology and labels © Google LLC, CC BY 4.0. https://github.com/tensorflow/models/tree/master/research/audioset/yamnet
46
46
  - Qwen models © Alibaba Cloud, Apache-2.0. https://huggingface.co/Qwen · https://huggingface.co/unsloth · https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF
47
47
  - Built with Llama. Llama 3.2 is licensed under the Llama 3.2 Community License, Copyright © Meta Platforms, Inc. All Rights Reserved. https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF
48
- - Scrypted YOLOv9 ReLU detectors, Koushik Dutta (scrypted/plugin-models, repository tagged MIT); trained with the YOLOv9 code of Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). https://huggingface.co/scrypted/plugin-models
49
48
 
50
49
  Training data under attribution terms:
51
50
 
52
- - **COCO 2017** (training data of `yolo26n` and 51 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
51
+ - **COCO 2017** (training data of `yolo26n` and 50 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
53
52
  - **WIDER FACE** (training data of `yunet-2023mar`): research-oriented terms; images CC BY-NC-ND. http://shuoyang1213.me/WIDERFACE/
54
53
  - **Open Images V7** (training data of `animal-classifier`): annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty. https://storage.googleapis.com/openimages/web/factsfigures_v7.html
55
54
  - **DrBimmer/vehicle-classification** (training data of `vehicle-type-v1`): CC-BY-NC-4.0 — treated as binding the trained weights (conservative reading). https://huggingface.co/datasets/DrBimmer/vehicle-classification
@@ -65,27 +64,29 @@ Training data under attribution terms:
65
64
 
66
65
  The folders `objectDetection/yolo26`, `objectDetection/yolov9`, `plateDetection/yolov8-plate` and `segmentation/yolo26-seg` of the model mirror hold Ultralytics weights,
67
66
  modified by CamStack and distributed under AGPL-3.0. Their Corresponding Source
68
- is the public CamStack source repository, **https://github.com/camstack/server**
69
- (MIT), together with the upstream checkpoints it starts from:
67
+ is published in the mirror itself, in its **`source/`** folder,
68
+ **https://huggingface.co/camstack/camstack-models/tree/main/source**, together
69
+ with the upstream checkpoints it starts from:
70
70
 
71
71
  1. **The upstream checkpoints**, published by Ultralytics at
72
72
  https://github.com/ultralytics/assets/releases: `yolo26{n,s,m,l,x}.pt`,
73
73
  `yolov9{t,s,m,c}.pt`, `yolo26{n,s,m}-seg.pt`.
74
- 2. **The export scripts** in https://github.com/camstack/server:
75
- `scripts/build-camstack-models.py` (ONNX with a dynamic batch axis, CoreML
76
- FP16, OpenVINO IR, OpenVINO NNCF INT8) and `scripts/export-models.py`. The
77
- build instructions (Python environment, invocation, calibration images for
78
- INT8) are in each script's header.
79
- 3. **The software** that downloads and runs these weights, CamStack itself, is
80
- the same repository.
74
+ 2. **The export scripts** in `source/`: `build-camstack-models.py` (ONNX
75
+ with a dynamic batch axis, CoreML FP16, OpenVINO IR, OpenVINO NNCF INT8),
76
+ `convert_lib.py` (the ONNX to OpenVINO / INT8 / CoreML converter it imports,
77
+ the same one CamStack's Model Studio runs), `requirements.txt` and
78
+ `export-models.py`. The build instructions (Python environment,
79
+ invocation, calibration images for INT8) are in `source/README.md` and in
80
+ each script's header. These scripts are CamStack's own code and are offered
81
+ under the MIT licence; the weights they produce keep their upstream licence.
81
82
 
82
- What the repository does **not** cover yet:
83
+ What the published scripts do **not** cover yet:
83
84
 
84
85
  - **Some hosted sizes and input resolutions.** The export scripts do not list
85
86
  every variant in the mirror (for example the `-320`/`-256` YOLO26 exports,
86
87
  `yolov9m`/`yolov9c`, and the `yolo26*-seg` models). Each one is the same
87
- Ultralytics `export()` with a different model id or `imgsz`, but no script in
88
- the repository reproduces it as-is.
88
+ Ultralytics `export()` with a different model id or `imgsz`, but no
89
+ published script reproduces it as-is.
89
90
  - **`yolov8n-plate` has no training checkpoint.** It is a third-party model
90
91
  (trained 2023-12-05 according to its own metadata, origin not identified).
91
92
  The ONNX file is the only form CamStack has.
@@ -205,16 +206,13 @@ entry kept resolvable for a saved selection but no longer offered.
205
206
  | `llm-qwen3-vl-8b-instruct-q4` | [Qwen3-VL (GGUF by unsloth)](https://huggingface.co/unsloth) | — / Apache-2.0 (`Apache-2.0.txt`) | — | Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3-VL-8B-Instruct-GGUF |
206
207
  | `llm-qwen3.6-35b-a3b-ud-q4` | [Qwen3.6-35B-A3B (GGUF by unsloth)](https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF) | — / Apache-2.0 (`Apache-2.0.txt`) | — | UD-Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF |
207
208
 
208
- ### Model Studio catalogs (object detection, imported on request)
209
-
210
- | Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
211
- | --- | --- | --- | --- | --- | --- |
212
- | `scrypted-yolov9t-relu-320`, `scrypted-yolov9t-relu_test-320`, `scrypted-yolov9s-relu-320`, `scrypted-yolov9s-relu_test-320`, `scrypted-yolov9m-relu-320`, `scrypted-yolov9m-relu_test-320`, `scrypted-yolov9c-relu-320`, `scrypted-yolov9c-relu_test-320`, `scrypted-yolov9t-relu-int8-320`, `scrypted-yolov9t-relu_test-int8-320`, `scrypted-yolov9s-relu-int8-320`, `scrypted-yolov9s-relu_test-int8-320`, `scrypted-yolov9m-relu-int8-320`, `scrypted-yolov9m-relu_test-int8-320`, `scrypted-yolov9c-relu-int8-320`, `scrypted-yolov9c-relu_test-int8-320` | [Scrypted plugin-models (repository tagged MIT, no per-model terms)](https://huggingface.co/scrypted/plugin-models) | GPL-3.0 (`GPL-3.0.txt`) / **Unknown** | not stated by Scrypted: UNKNOWN | none: downloaded as published, at a pinned revision | https://huggingface.co/scrypted/plugin-models |
213
- | `frigate-mobiledet-edgetpu` | [Google Coral test_data](https://github.com/google-coral/test_data) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | none | https://github.com/google-coral/test_data |
214
-
215
209
  ### Your own models
216
210
 
217
- The Scrypted and Frigate catalogs that Model Studio offers are listed above. A
218
- model you upload or convert yourself, or pull from your own Frigate+ account,
219
- keeps whatever licence its author published. CamStack does not change it and
220
- does not record it.
211
+ Model Studio can import third-party models (for example community
212
+ object-detection catalogs) on request. They are downloaded from their
213
+ publishers, are not hosted or redistributed by CamStack, and keep their
214
+ publishers' licences; Model Studio shows the licence where the source declares
215
+ one. A model you upload or convert
216
+ yourself, or pull from your own Frigate+ account, likewise keeps whatever
217
+ licence its author published. CamStack does not change it and does not record
218
+ it.
@@ -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-BTBbIGSC.js");
7
- const require_process_memory = require("../process-memory-BfDlwJc4.js");
6
+ const require_dist = require("../dist-BBZwYfSN.js");
7
+ const require_process_memory = require("../process-memory-DgEfKdtC.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 { A as PoolMemoryWatchdog, E as HF_BASE_URL, En as nodePin, Kt as resolvePoolMemoryPolicy, Sn as hydrateSchema, St as mapAudioLabelToMacro, U as audioAnalysisCapability, Un as EventCategory, W as audioAnalyzerCapability, _n as audioChunkBytesPerSample, fn as errMsg, m as DEFAULT_AUDIO_ANALYZER_CONFIG, mn as BaseAddon, r as AUDIO_BACKEND_CHOICES, xn as expandAudioChunkToF32le } from "../dist-BuU8Y4o1.mjs";
3
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DbSOL63T.mjs";
2
+ import { A as PoolMemoryWatchdog, E as HF_BASE_URL, En as nodePin, Kt as resolvePoolMemoryPolicy, Sn as hydrateSchema, St as mapAudioLabelToMacro, U as audioAnalysisCapability, Un as EventCategory, W as audioAnalyzerCapability, _n as audioChunkBytesPerSample, fn as errMsg, m as DEFAULT_AUDIO_ANALYZER_CONFIG, mn as BaseAddon, r as AUDIO_BACKEND_CHOICES, xn as expandAudioChunkToF32le } from "../dist-B9LnBPz9.mjs";
3
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B63Jlpev.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
- const require_dist = require("./dist-BTBbIGSC.js");
1
+ const require_dist = require("./dist-BBZwYfSN.js");
2
2
  const require_worker_protocol = require("./worker-protocol-C-G8qmye.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -43,13 +43,13 @@ var ULTRALYTICS_AGPL = {
43
43
  url: "https://github.com/ultralytics/ultralytics"
44
44
  },
45
45
  url: "https://github.com/ultralytics/ultralytics/blob/main/LICENSE",
46
- attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server.",
46
+ attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source.",
47
47
  modifications: "exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py)",
48
48
  hosting: "camstack-hf"
49
49
  };
50
50
  var ULTRALYTICS_YOLOV9_AGPL = {
51
51
  ...ULTRALYTICS_AGPL,
52
- attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server."
52
+ attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source."
53
53
  };
54
54
  /** The CamStack Coral COCO detector (SSD MobileNet V2). */
55
55
  var CORAL_COCO_APACHE = {
@@ -1,4 +1,4 @@
1
- import { G as audioKindId, Yt as stepModelRunsOnFormat, _t as hfModelUrl, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, p as COCO_TO_MACRO, vt as inferModelProvider, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-BuU8Y4o1.mjs";
1
+ import { G as audioKindId, Yt as stepModelRunsOnFormat, _t as hfModelUrl, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, p as COCO_TO_MACRO, vt as inferModelProvider, y as DEVICE_BACKEND_TO_FORMAT } from "./dist-B9LnBPz9.mjs";
2
2
  import { t as isWorkerReply } from "./worker-protocol-D_NzPcnh.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -43,13 +43,13 @@ var ULTRALYTICS_AGPL = {
43
43
  url: "https://github.com/ultralytics/ultralytics"
44
44
  },
45
45
  url: "https://github.com/ultralytics/ultralytics/blob/main/LICENSE",
46
- attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server.",
46
+ attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source.",
47
47
  modifications: "exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py)",
48
48
  hosting: "camstack-hf"
49
49
  };
50
50
  var ULTRALYTICS_YOLOV9_AGPL = {
51
51
  ...ULTRALYTICS_AGPL,
52
- attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server."
52
+ attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source."
53
53
  };
54
54
  /** The CamStack Coral COCO detector (SSD MobileNet V2). */
55
55
  var CORAL_COCO_APACHE = {
@@ -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-BTBbIGSC.js");
7
- const require_node = require("../node-UK2v2ZSw.js");
8
- const require_default_detection_model = require("../default-detection-model-WnGDQAQh.js");
6
+ const require_dist = require("../dist-BBZwYfSN.js");
7
+ const require_node = require("../node-mJQBUiEc.js");
8
+ const require_default_detection_model = require("../default-detection-model-CBIYdAJ5.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
- const require_process_memory = require("../process-memory-BfDlwJc4.js");
10
+ const require_process_memory = require("../process-memory-DgEfKdtC.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");
@@ -4093,7 +4093,7 @@ function requestedModels(steps) {
4093
4093
  const walk = (nodes) => {
4094
4094
  for (const step of nodes) {
4095
4095
  if (!step.enabled) continue;
4096
- out.set(step.addonId, step.modelId);
4096
+ if (step.modelId !== void 0) out.set(step.addonId, step.modelId);
4097
4097
  if (step.children !== void 0) walk(step.children);
4098
4098
  }
4099
4099
  };
@@ -1,9 +1,9 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { A as PoolMemoryWatchdog, An as sleep, At as overlayClusterStepSettings, Dn as parseJsonUnknown, En as nodePin, Ft as pipelineExecutorCapability, Hn as union, Ht as resolveClusterStepModelId, Jt as runtimeDevices$1, Kt as resolvePoolMemoryPolicy, Mn as array, Mt as pickClusterStepSettings, Rn as object, Sn as hydrateSchema, Un as EventCategory, V as YAMNET_TO_MACRO, Vn as string, Yt as stepModelRunsOnFormat, bt as loadContributionCapability, ct as evaluateZoneRules, d as CLUSTER_MODEL_SCOPED_STEPS, en as supportedRuntimes$1, et as defaultDeviceFor$1, fn as errMsg, h as DEFAULT_CLUSTER_STEP_SETTINGS, it as detectionPipelineCapability, mn as BaseAddon, n as APPLE_SA_TO_MACRO, st as enumerateInferenceDevices, vn as createEvent, y as DEVICE_BACKEND_TO_FORMAT } from "../dist-BuU8Y4o1.mjs";
3
- import { s as readProcessCost } from "../node-inZFYgkm.mjs";
4
- import { _ as getStep, a as buildSubtreeCanRun, b as landmarkPrecisionVerdict, c as macroGateVerdict, g as getDefaultModelForFormat, h as ALL_STEPS, i as mergeCustomModels, m as ALL_PIPELINE_STEPS, n as resolveDefaultDetectionModel, r as CustomModelCatalog, u as localFrameRegistry, v as getStepDefinition, x as resolveModelDefaultConfidence, y as resolveModelForFormat } from "../default-detection-model-Bu4So71h.mjs";
2
+ import { A as PoolMemoryWatchdog, An as sleep, At as overlayClusterStepSettings, Dn as parseJsonUnknown, En as nodePin, Ft as pipelineExecutorCapability, Hn as union, Ht as resolveClusterStepModelId, Jt as runtimeDevices$1, Kt as resolvePoolMemoryPolicy, Mn as array, Mt as pickClusterStepSettings, Rn as object, Sn as hydrateSchema, Un as EventCategory, V as YAMNET_TO_MACRO, Vn as string, Yt as stepModelRunsOnFormat, bt as loadContributionCapability, ct as evaluateZoneRules, d as CLUSTER_MODEL_SCOPED_STEPS, en as supportedRuntimes$1, et as defaultDeviceFor$1, fn as errMsg, h as DEFAULT_CLUSTER_STEP_SETTINGS, it as detectionPipelineCapability, mn as BaseAddon, n as APPLE_SA_TO_MACRO, st as enumerateInferenceDevices, vn as createEvent, y as DEVICE_BACKEND_TO_FORMAT } from "../dist-B9LnBPz9.mjs";
3
+ import { s as readProcessCost } from "../node-Ci0E-0VP.mjs";
4
+ import { _ as getStep, a as buildSubtreeCanRun, b as landmarkPrecisionVerdict, c as macroGateVerdict, g as getDefaultModelForFormat, h as ALL_STEPS, i as mergeCustomModels, m as ALL_PIPELINE_STEPS, n as resolveDefaultDetectionModel, r as CustomModelCatalog, u as localFrameRegistry, v as getStepDefinition, x as resolveModelDefaultConfidence, y as resolveModelForFormat } from "../default-detection-model-hql6BX9-.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DbSOL63T.mjs";
6
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B63Jlpev.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";
@@ -4086,7 +4086,7 @@ function requestedModels(steps) {
4086
4086
  const walk = (nodes) => {
4087
4087
  for (const step of nodes) {
4088
4088
  if (!step.enabled) continue;
4089
- out.set(step.addonId, step.modelId);
4089
+ if (step.modelId !== void 0) out.set(step.addonId, step.modelId);
4090
4090
  if (step.children !== void 0) walk(step.children);
4091
4091
  }
4092
4092
  };
@@ -16744,7 +16744,7 @@ var detectionPipelineCapability = {
16744
16744
  * This matters here more than anywhere else in the repo, because every provider
16745
16745
  * that knows a device's host knows its PASSWORD too: `{ host, port, username,
16746
16746
  * password }` sit in one object on Hikvision, Amcrest, Reolink and ONVIF alike,
16747
- * and `http://admin:hunter2@192.168.x.x/` is a URL a browser accepts. The
16747
+ * and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
16748
16748
  * camera's own page will ask for its own login. That is correct, and pre-
16749
16749
  * filling it is the operator's business, not ours.
16750
16750
  *
@@ -22591,8 +22591,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
22591
22591
  disabledTargetIds: array(string()).default([])
22592
22592
  });
22593
22593
  /**
22594
- * The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
22595
- * still-true state. `backups-exports` and `alarm` are not sections — a completed
22594
+ * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
22595
+ * report a still-true state. `addons` is the crash-looped addons only and
22596
+ * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
22596
22597
  * job is not an open state, and the alarm stays instant.
22597
22598
  */
22598
22599
  var NcStateSummarySectionIdSchema = _enum([
@@ -22604,6 +22605,7 @@ var NcStateSummarySectionIdSchema = _enum([
22604
22605
  "detection-blind",
22605
22606
  "nodes",
22606
22607
  "addons",
22608
+ "addon-updates",
22607
22609
  "updates"
22608
22610
  ]);
22609
22611
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
@@ -23084,7 +23086,19 @@ var NcAlarmModeDelaysListSchema = array(object({
23084
23086
  * When this mode may be armed. Absent / null = always allowed (same as a
23085
23087
  * rule with no `schedule`). Evaluated with {@link isScheduleActive}.
23086
23088
  */
23087
- schedule: NcScheduleSchema.optional()
23089
+ schedule: NcScheduleSchema.optional(),
23090
+ /**
23091
+ * D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
23092
+ * intrusion naming the locations)? Absent = false — the entry-delay notification is the
23093
+ * only one, and the matches ride the triggered notification's mosaic (D705).
23094
+ */
23095
+ notifyDuringEntryDelay: boolean().optional(),
23096
+ /**
23097
+ * D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
23098
+ * Absent = false (logged, not sent). Even when true it is not sent when that same sensor
23099
+ * is the one that starts the entry delay — the entry-delay notification already names it.
23100
+ */
23101
+ notifySensorRewatched: boolean().optional()
23088
23102
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
23089
23103
  var NcAlarmModeDelaysEditListSchema = array(object({
23090
23104
  mode: AlarmArmModeSchema,
@@ -23093,7 +23107,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
23093
23107
  triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
23094
23108
  postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
23095
23109
  /** Set a schedule, or `null` to clear (mode always allowed again). */
23096
- schedule: NcScheduleSchema.nullable().optional()
23110
+ schedule: NcScheduleSchema.nullable().optional(),
23111
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23112
+ notifyDuringEntryDelay: boolean().nullable().optional(),
23113
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23114
+ notifySensorRewatched: boolean().nullable().optional()
23097
23115
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
23098
23116
  /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
23099
23117
  var NcAlarmNonBlockingEditSchema = object({
@@ -27157,6 +27175,22 @@ var MotionSourceEnum = _enum([
27157
27175
  "device-activity"
27158
27176
  ]);
27159
27177
  /**
27178
+ * What opened an on-motion detection SESSION: the motion source that passed the
27179
+ * camera's `motionSources` gate, and what raised it (the camera itself, or a
27180
+ * sensor the operator attached — D672). `sensorName` is the attached sensor's
27181
+ * device name as the orchestrator's camera-sensors resolution last read it;
27182
+ * absent when unknown or when the camera itself triggered.
27183
+ *
27184
+ * Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
27185
+ * can say what started the session (D672 rule 11, amended 2026-10-06). The
27186
+ * runner never decides anything on it.
27187
+ */
27188
+ var SessionTriggerSchema = object({
27189
+ source: MotionSourceEnum,
27190
+ triggeredBy: MotionTriggeredBySchema,
27191
+ sensorName: string().optional()
27192
+ });
27193
+ /**
27160
27194
  * List of motion sources active on a camera. Empty array is valid:
27161
27195
  * "no source" — happens for battery cams without firmware motion when
27162
27196
  * the operator hasn't opted into the SW analyzer (would hold the
@@ -27408,6 +27442,14 @@ var RunnerCameraConfigSchema = object({
27408
27442
  */
27409
27443
  motionSources: MotionSourcesSchema.default(["analyzer"]),
27410
27444
  /**
27445
+ * What opened this attach, on a SESSION attach only (see
27446
+ * {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
27447
+ * standing attach, an occupancy burst, a re-dispatch with no motion event
27448
+ * behind it, and every attach from an orchestrator older than the field — the
27449
+ * runner then names no source on the phase event.
27450
+ */
27451
+ sessionTrigger: SessionTriggerSchema.optional(),
27452
+ /**
27411
27453
  * WHICH root detector runs for this camera. The detection counterpart of
27412
27454
  * {@link motionSources}, same shape and same discipline: a per-camera list
27413
27455
  * of sources the system understands, vendor-agnostic, owned here.
@@ -34298,7 +34340,7 @@ var LocalInterfaceSchema = object({
34298
34340
  name: string(),
34299
34341
  family: _enum(["IPv4", "IPv6"]),
34300
34342
  address: string(),
34301
- /** CIDR shorthand (e.g. `192.168.x.x/24`). Empty when OS doesn't expose. */
34343
+ /** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
34302
34344
  cidr: string(),
34303
34345
  /** OS netmask. Stable across calls so the SDK can hash on it. */
34304
34346
  netmask: string(),
@@ -34352,7 +34394,8 @@ var ConnectionEndpointSchema = object({
34352
34394
  "lan-ipv4",
34353
34395
  "lan-ipv6",
34354
34396
  "public",
34355
- "loopback"
34397
+ "loopback",
34398
+ "app-link"
34356
34399
  ]),
34357
34400
  /**
34358
34401
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -34421,15 +34464,27 @@ var GetConnectionEndpointsResultSchema = object({
34421
34464
  localPort: AdvertisedLocalPortSchema
34422
34465
  });
34423
34466
  /**
34424
- * The chosen outbound endpoint for notification artifacts. `baseUrl: null` =
34425
- * AUTO (resolved from the candidate ranking at send time); `resolved` reports
34426
- * what AUTO currently picks, so the UI can show the effective value either way.
34467
+ * The address flagged for notification links. `baseUrl: null` = AUTO, which
34468
+ * since D709 is the CamStack app link; `resolved` reports the effective value,
34469
+ * so the UI can show it either way.
34427
34470
  */
34428
34471
  var NotificationEndpointSchema = object({
34429
34472
  /** The operator's explicit choice, or null for AUTO. */
34430
34473
  baseUrl: string().nullable(),
34431
- /** What the ranking currently resolves to (null when nothing is reachable). */
34432
- resolved: string().nullable()
34474
+ /**
34475
+ * The effective flagged address: the explicit choice, else (AUTO) the
34476
+ * CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
34477
+ * answered the public tunnel / mesh here, or null.
34478
+ */
34479
+ resolved: string().nullable(),
34480
+ /**
34481
+ * The hub origin an app link carries as `hub=` (D709): the hub's best
34482
+ * public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
34483
+ * picked from this cap's own palette by `pickAppLinkHub`. `null` when the
34484
+ * hub advertises neither; the app link is then minted without `hub=`.
34485
+ * Absent on a pre-D709 hub.
34486
+ */
34487
+ appLinkHub: string().nullable()
34433
34488
  });
34434
34489
  /**
34435
34490
  * The URLs the SDK / viewer should race for API access. `baseUrls` empty =
@@ -34483,7 +34538,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
34483
34538
  * Pass `'https'` when the caller is itself loaded over HTTPS
34484
34539
  * to avoid mixed-content blocks in the browser. The public
34485
34540
  * tunnel always emits `https://` regardless. */
34486
- scheme: _enum(["http", "https"]).optional()
34541
+ scheme: _enum(["http", "https"]).optional(),
34542
+ /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
34543
+ * an address notification links can be flagged with, not a hub
34544
+ * route. Default `false`: racers and rankers never see it. */
34545
+ includeAppLink: boolean().optional()
34487
34546
  }), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
34488
34547
  kind: "mutation",
34489
34548
  auth: "admin"
@@ -34744,7 +34803,7 @@ var MeshPeerSchema = object({
34744
34803
  tags: array(string()).readonly(),
34745
34804
  /** True when the peer advertises itself as an exit-node candidate. */
34746
34805
  exitNodeOption: boolean(),
34747
- /** Subnet routes the peer advertises (e.g. `["192.168.x.x/24"]`). */
34806
+ /** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
34748
34807
  advertisedRoutes: array(string()).readonly(),
34749
34808
  /** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
34750
34809
  userLogin: string().nullable(),
@@ -52076,12 +52135,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52076
52135
  {
52077
52136
  id: "addons",
52078
52137
  family: "system",
52079
- label: "Addons",
52080
- kinds: [
52081
- "addon-crash-loop",
52082
- "addon-update-available",
52083
- "addon-updated"
52084
- ]
52138
+ label: "Addons stopped",
52139
+ kinds: ["addon-crash-loop"]
52140
+ },
52141
+ {
52142
+ id: "addon-updates",
52143
+ family: "system",
52144
+ label: "Addon updates",
52145
+ kinds: ["addon-update-available", "addon-updated"]
52085
52146
  },
52086
52147
  {
52087
52148
  id: "updates",
@@ -52241,13 +52302,15 @@ var STATE_SUMMARY_SECTION_VARS = [
52241
52302
  },
52242
52303
  {
52243
52304
  name: "summaryAddons",
52244
- label: "Summary: addons",
52245
- example: "@camstack/addon-recorder 1.2.3 → 1.2.4",
52246
- kinds: [
52247
- "addon-crash-loop",
52248
- "addon-update-available",
52249
- "addon-updated"
52250
- ]
52305
+ label: "Summary: addons stopped",
52306
+ example: "hub — recorder stopped after repeated crashes",
52307
+ kinds: ["addon-crash-loop"]
52308
+ },
52309
+ {
52310
+ name: "summaryAddonUpdates",
52311
+ label: "Summary: addon updates",
52312
+ example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
52313
+ kinds: ["addon-update-available", "addon-updated"]
52251
52314
  },
52252
52315
  {
52253
52316
  name: "summaryUpdates",
@@ -52331,6 +52394,7 @@ var STATE_SUMMARY_VARS = [
52331
52394
  [...RULE_BODY_ONLY],
52332
52395
  [...RULE_TEXT],
52333
52396
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
52397
+ ([...RULE_TEXT], [...COMBINED_ALARM]),
52334
52398
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
52335
52399
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
52336
52400
  ([...RULE_TEXT], [...CONSUMABLE]),