@camstack/addon-pipeline 1.2.326 → 1.2.328

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 (39) hide show
  1. package/THIRD_PARTY_MODELS.md +49 -43
  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-1SadEKsW.js} +120 -61
  5. package/dist/{default-detection-model-Bu4So71h.mjs → default-detection-model-CMeVTcPZ.mjs} +120 -61
  6. package/dist/detection-pipeline/index.js +49 -9
  7. package/dist/detection-pipeline/index.mjs +49 -9
  8. package/dist/{dist-BuU8Y4o1.mjs → dist-Bpub2VcJ.mjs} +584 -396
  9. package/dist/{dist-BTBbIGSC.js → dist-wJO7mXeO.js} +631 -395
  10. package/dist/motion-wasm/index.js +1 -1
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-UK2v2ZSw.js → node-BCrqaejt.js} +1 -1
  13. package/dist/{node-inZFYgkm.mjs → node-BjCSgD4M.mjs} +1 -1
  14. package/dist/pipeline-runner/index.js +253 -87
  15. package/dist/pipeline-runner/index.mjs +253 -88
  16. package/dist/{process-memory-DbSOL63T.mjs → process-memory-BaKQ8u2G.mjs} +1 -1
  17. package/dist/{process-memory-BfDlwJc4.js → process-memory-iUJuTpXs.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-CMj020zz.mjs → segment-demux-js-C5ez9LYG.mjs} +1 -1
  21. package/dist/{segment-demux-js-C1GXgxZ0.js → segment-demux-js-Opx6Hv9G.js} +1 -1
  22. package/dist/session-decode/decode-worker-main.js +13 -21
  23. package/dist/session-decode/decode-worker-main.mjs +13 -21
  24. package/dist/stream-broker/_stub.js +1 -1
  25. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-qHD9Dl1z.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B94LgsV0.mjs} +3 -3
  26. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BPWYf4_O.mjs +26 -0
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-BgWrKrQn.mjs → hostInit-xOx7AvgW.mjs} +3 -3
  30. package/dist/stream-broker/index.js +6 -5
  31. package/dist/stream-broker/index.mjs +6 -5
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/package.json +1 -1
  34. package/python/inference_pool.py +38 -121
  35. package/python/postprocessors/scrfd.py +2 -0
  36. package/python/postprocessors/test_bird_edgetpu.py +124 -0
  37. package/python/postprocessors/testdata/bird_classifier_int8_outputs.json +1 -0
  38. package/python/test_inference_pool_static_batch.py +2 -4
  39. 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
@@ -12600,6 +12600,480 @@ var ClipSearchStrictnessSchema = _enum([
12600
12600
  "balanced",
12601
12601
  "strict"
12602
12602
  ]);
12603
+ var COCO_80_LABELS = [
12604
+ {
12605
+ id: "person",
12606
+ name: "Person"
12607
+ },
12608
+ {
12609
+ id: "bicycle",
12610
+ name: "Bicycle"
12611
+ },
12612
+ {
12613
+ id: "car",
12614
+ name: "Car"
12615
+ },
12616
+ {
12617
+ id: "motorcycle",
12618
+ name: "Motorcycle"
12619
+ },
12620
+ {
12621
+ id: "airplane",
12622
+ name: "Airplane"
12623
+ },
12624
+ {
12625
+ id: "bus",
12626
+ name: "Bus"
12627
+ },
12628
+ {
12629
+ id: "train",
12630
+ name: "Train"
12631
+ },
12632
+ {
12633
+ id: "truck",
12634
+ name: "Truck"
12635
+ },
12636
+ {
12637
+ id: "boat",
12638
+ name: "Boat"
12639
+ },
12640
+ {
12641
+ id: "traffic light",
12642
+ name: "Traffic Light"
12643
+ },
12644
+ {
12645
+ id: "fire hydrant",
12646
+ name: "Fire Hydrant"
12647
+ },
12648
+ {
12649
+ id: "stop sign",
12650
+ name: "Stop Sign"
12651
+ },
12652
+ {
12653
+ id: "parking meter",
12654
+ name: "Parking Meter"
12655
+ },
12656
+ {
12657
+ id: "bench",
12658
+ name: "Bench"
12659
+ },
12660
+ {
12661
+ id: "bird",
12662
+ name: "Bird"
12663
+ },
12664
+ {
12665
+ id: "cat",
12666
+ name: "Cat"
12667
+ },
12668
+ {
12669
+ id: "dog",
12670
+ name: "Dog"
12671
+ },
12672
+ {
12673
+ id: "horse",
12674
+ name: "Horse"
12675
+ },
12676
+ {
12677
+ id: "sheep",
12678
+ name: "Sheep"
12679
+ },
12680
+ {
12681
+ id: "cow",
12682
+ name: "Cow"
12683
+ },
12684
+ {
12685
+ id: "elephant",
12686
+ name: "Elephant"
12687
+ },
12688
+ {
12689
+ id: "bear",
12690
+ name: "Bear"
12691
+ },
12692
+ {
12693
+ id: "zebra",
12694
+ name: "Zebra"
12695
+ },
12696
+ {
12697
+ id: "giraffe",
12698
+ name: "Giraffe"
12699
+ },
12700
+ {
12701
+ id: "backpack",
12702
+ name: "Backpack"
12703
+ },
12704
+ {
12705
+ id: "umbrella",
12706
+ name: "Umbrella"
12707
+ },
12708
+ {
12709
+ id: "handbag",
12710
+ name: "Handbag"
12711
+ },
12712
+ {
12713
+ id: "tie",
12714
+ name: "Tie"
12715
+ },
12716
+ {
12717
+ id: "suitcase",
12718
+ name: "Suitcase"
12719
+ },
12720
+ {
12721
+ id: "frisbee",
12722
+ name: "Frisbee"
12723
+ },
12724
+ {
12725
+ id: "skis",
12726
+ name: "Skis"
12727
+ },
12728
+ {
12729
+ id: "snowboard",
12730
+ name: "Snowboard"
12731
+ },
12732
+ {
12733
+ id: "sports ball",
12734
+ name: "Sports Ball"
12735
+ },
12736
+ {
12737
+ id: "kite",
12738
+ name: "Kite"
12739
+ },
12740
+ {
12741
+ id: "baseball bat",
12742
+ name: "Baseball Bat"
12743
+ },
12744
+ {
12745
+ id: "baseball glove",
12746
+ name: "Baseball Glove"
12747
+ },
12748
+ {
12749
+ id: "skateboard",
12750
+ name: "Skateboard"
12751
+ },
12752
+ {
12753
+ id: "surfboard",
12754
+ name: "Surfboard"
12755
+ },
12756
+ {
12757
+ id: "tennis racket",
12758
+ name: "Tennis Racket"
12759
+ },
12760
+ {
12761
+ id: "bottle",
12762
+ name: "Bottle"
12763
+ },
12764
+ {
12765
+ id: "wine glass",
12766
+ name: "Wine Glass"
12767
+ },
12768
+ {
12769
+ id: "cup",
12770
+ name: "Cup"
12771
+ },
12772
+ {
12773
+ id: "fork",
12774
+ name: "Fork"
12775
+ },
12776
+ {
12777
+ id: "knife",
12778
+ name: "Knife"
12779
+ },
12780
+ {
12781
+ id: "spoon",
12782
+ name: "Spoon"
12783
+ },
12784
+ {
12785
+ id: "bowl",
12786
+ name: "Bowl"
12787
+ },
12788
+ {
12789
+ id: "banana",
12790
+ name: "Banana"
12791
+ },
12792
+ {
12793
+ id: "apple",
12794
+ name: "Apple"
12795
+ },
12796
+ {
12797
+ id: "sandwich",
12798
+ name: "Sandwich"
12799
+ },
12800
+ {
12801
+ id: "orange",
12802
+ name: "Orange"
12803
+ },
12804
+ {
12805
+ id: "broccoli",
12806
+ name: "Broccoli"
12807
+ },
12808
+ {
12809
+ id: "carrot",
12810
+ name: "Carrot"
12811
+ },
12812
+ {
12813
+ id: "hot dog",
12814
+ name: "Hot Dog"
12815
+ },
12816
+ {
12817
+ id: "pizza",
12818
+ name: "Pizza"
12819
+ },
12820
+ {
12821
+ id: "donut",
12822
+ name: "Donut"
12823
+ },
12824
+ {
12825
+ id: "cake",
12826
+ name: "Cake"
12827
+ },
12828
+ {
12829
+ id: "chair",
12830
+ name: "Chair"
12831
+ },
12832
+ {
12833
+ id: "couch",
12834
+ name: "Couch"
12835
+ },
12836
+ {
12837
+ id: "potted plant",
12838
+ name: "Potted Plant"
12839
+ },
12840
+ {
12841
+ id: "bed",
12842
+ name: "Bed"
12843
+ },
12844
+ {
12845
+ id: "dining table",
12846
+ name: "Dining Table"
12847
+ },
12848
+ {
12849
+ id: "toilet",
12850
+ name: "Toilet"
12851
+ },
12852
+ {
12853
+ id: "tv",
12854
+ name: "TV"
12855
+ },
12856
+ {
12857
+ id: "laptop",
12858
+ name: "Laptop"
12859
+ },
12860
+ {
12861
+ id: "mouse",
12862
+ name: "Mouse"
12863
+ },
12864
+ {
12865
+ id: "remote",
12866
+ name: "Remote"
12867
+ },
12868
+ {
12869
+ id: "keyboard",
12870
+ name: "Keyboard"
12871
+ },
12872
+ {
12873
+ id: "cell phone",
12874
+ name: "Cell Phone"
12875
+ },
12876
+ {
12877
+ id: "microwave",
12878
+ name: "Microwave"
12879
+ },
12880
+ {
12881
+ id: "oven",
12882
+ name: "Oven"
12883
+ },
12884
+ {
12885
+ id: "toaster",
12886
+ name: "Toaster"
12887
+ },
12888
+ {
12889
+ id: "sink",
12890
+ name: "Sink"
12891
+ },
12892
+ {
12893
+ id: "refrigerator",
12894
+ name: "Refrigerator"
12895
+ },
12896
+ {
12897
+ id: "book",
12898
+ name: "Book"
12899
+ },
12900
+ {
12901
+ id: "clock",
12902
+ name: "Clock"
12903
+ },
12904
+ {
12905
+ id: "vase",
12906
+ name: "Vase"
12907
+ },
12908
+ {
12909
+ id: "scissors",
12910
+ name: "Scissors"
12911
+ },
12912
+ {
12913
+ id: "teddy bear",
12914
+ name: "Teddy Bear"
12915
+ },
12916
+ {
12917
+ id: "hair drier",
12918
+ name: "Hair Drier"
12919
+ },
12920
+ {
12921
+ id: "toothbrush",
12922
+ name: "Toothbrush"
12923
+ }
12924
+ ];
12925
+ new Set([
12926
+ {
12927
+ id: "person",
12928
+ name: "Person"
12929
+ },
12930
+ {
12931
+ id: "vehicle",
12932
+ name: "Vehicle"
12933
+ },
12934
+ {
12935
+ id: "animal",
12936
+ name: "Animal"
12937
+ },
12938
+ {
12939
+ id: "package",
12940
+ name: "Package"
12941
+ }
12942
+ ].map((l) => l.id));
12943
+ var COCO_TO_MACRO = {
12944
+ mapping: {
12945
+ person: "person",
12946
+ bicycle: "vehicle",
12947
+ car: "vehicle",
12948
+ motorcycle: "vehicle",
12949
+ airplane: "vehicle",
12950
+ bus: "vehicle",
12951
+ train: "vehicle",
12952
+ truck: "vehicle",
12953
+ boat: "vehicle",
12954
+ bird: "animal",
12955
+ cat: "animal",
12956
+ dog: "animal",
12957
+ horse: "animal",
12958
+ sheep: "animal",
12959
+ cow: "animal",
12960
+ elephant: "animal",
12961
+ bear: "animal",
12962
+ zebra: "animal",
12963
+ giraffe: "animal",
12964
+ suitcase: "package",
12965
+ backpack: "package",
12966
+ handbag: "package"
12967
+ },
12968
+ preserveOriginal: false
12969
+ };
12970
+ /** Steps a root detector may declare it fills. */
12971
+ var FILLABLE_STEP_IDS = [
12972
+ "animal-classifier",
12973
+ "vehicle-classifier",
12974
+ "package-detection"
12975
+ ];
12976
+ /** Narrow a step id to a fillable one — type guard, not a cast. */
12977
+ function isFillableStepId(value) {
12978
+ return FILLABLE_STEP_IDS.some((id) => id === value);
12979
+ }
12980
+ /**
12981
+ * The EFFECT vocabulary of each fillable step: exactly the strings the step
12982
+ * itself emits, in its own spelling. A linked label is one of these and nothing
12983
+ * else, so a tier-1 value means the same thing whichever writer produced it.
12984
+ *
12985
+ * - `animal-classifier`: the PRIMARY model's `-labels.json` (Open Images V7,
12986
+ * 8 classes) — also the species allow-list the step offers.
12987
+ * - `vehicle-classifier`: `vehicle-type-v1-labels.json`, capitalised as the
12988
+ * model emits them (the classifier writes `winner.class` verbatim).
12989
+ * - `package-detection`: its one output class.
12990
+ *
12991
+ * `scripts/check-label-link-vocabulary.ts` fails the build if a model entry's
12992
+ * `labelToEffect` names anything outside this table.
12993
+ */
12994
+ var FILLABLE_STEP_VOCABULARIES = {
12995
+ "animal-classifier": [
12996
+ "bird",
12997
+ "cat",
12998
+ "cow",
12999
+ "deer",
13000
+ "dog",
13001
+ "horse",
13002
+ "sheep",
13003
+ "squirrel"
13004
+ ],
13005
+ "vehicle-classifier": [
13006
+ "Ambulance",
13007
+ "Bicycle",
13008
+ "Bus",
13009
+ "Car",
13010
+ "Motorcycle",
13011
+ "Taxi",
13012
+ "Truck",
13013
+ "Van"
13014
+ ],
13015
+ "package-detection": ["package"]
13016
+ };
13017
+ /** The macro a detection must carry for the step to apply to it. */
13018
+ var FILLABLE_STEP_MACRO = {
13019
+ "animal-classifier": "animal",
13020
+ "vehicle-classifier": "vehicle",
13021
+ "package-detection": "package"
13022
+ };
13023
+ /** The policy values of a step's `labelLink` setting. */
13024
+ var LABEL_LINK_POLICIES = ["run", "skip-when-filled"];
13025
+ /** Absent setting ⇒ this. It changes nothing unless the root model declares a fill. */
13026
+ var DEFAULT_LABEL_LINK_POLICY = "skip-when-filled";
13027
+ /** The step-settings key the policy is stored under (DeviceStepConfig.settings). */
13028
+ var LABEL_LINK_SETTING_KEY = "labelLink";
13029
+ /** `ScoredLabel.stepId` prefix of a label the detector wrote for a step. */
13030
+ var LINKED_LABEL_STEP_PREFIX = "detector-link:";
13031
+ /** `detector-link:<stepId>` — the attribution of a linked label. */
13032
+ function linkedLabelStepId(stepId) {
13033
+ return `${LINKED_LABEL_STEP_PREFIX}${stepId}`;
13034
+ }
13035
+ /** The step a linked label stands in for, or `undefined` for any other attribution. */
13036
+ function linkedStepOf(attributionStepId) {
13037
+ if (attributionStepId === void 0) return void 0;
13038
+ if (!attributionStepId.startsWith("detector-link:")) return void 0;
13039
+ const stepId = attributionStepId.slice(14);
13040
+ return isFillableStepId(stepId) ? stepId : void 0;
13041
+ }
13042
+ /** Read the `labelLink` policy off a step's settings bag; anything else ⇒ the default. */
13043
+ function readLabelLinkPolicy(settings) {
13044
+ const raw = settings?.[LABEL_LINK_SETTING_KEY];
13045
+ return LABEL_LINK_POLICIES.find((p) => p === raw) ?? "skip-when-filled";
13046
+ }
13047
+ /**
13048
+ * Decide the writer of one filled effect for one camera.
13049
+ *
13050
+ * - The step is not running (disabled, or not in the camera's tree): the
13051
+ * detector is the only writer — authoritative, nothing to skip.
13052
+ * - The step runs, the policy is `skip-when-filled` and every coverage gap is
13053
+ * switched off in `enabledClasses`: the detector is authoritative and the
13054
+ * step is skipped.
13055
+ * - Otherwise the step runs and is the writer; the linked label is a score-0
13056
+ * fallback.
13057
+ */
13058
+ function resolveLabelLink(fill, step) {
13059
+ const policy = readLabelLinkPolicy(step?.settings);
13060
+ const rawEnabled = step?.settings?.["enabledClasses"];
13061
+ const allowList = Array.isArray(rawEnabled) && rawEnabled.length > 0 ? rawEnabled.filter((v) => typeof v === "string") : null;
13062
+ const openGaps = fill.uncovered.filter((g) => allowList === null || allowList.includes(g));
13063
+ if (step === void 0 || !step.enabled) return {
13064
+ authoritative: true,
13065
+ skip: false,
13066
+ policy,
13067
+ openGaps
13068
+ };
13069
+ const skip = policy === "skip-when-filled" && openGaps.length === 0;
13070
+ return {
13071
+ authoritative: skip,
13072
+ skip,
13073
+ policy,
13074
+ openGaps
13075
+ };
13076
+ }
12603
13077
  var MODEL_FORMATS = [
12604
13078
  "onnx",
12605
13079
  "coreml",
@@ -12745,6 +13219,12 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
12745
13219
  /** True when the weights or their data forbid commercial use. */
12746
13220
  nonCommercial: boolean().optional()
12747
13221
  }));
13222
+ /** One `fillsClassifierEffects` entry — see `ModelCatalogEntry.fillsClassifierEffects`. */
13223
+ var FillsClassifierEffectSchema = object({
13224
+ stepId: _enum(FILLABLE_STEP_IDS),
13225
+ labelToEffect: record(string(), string()),
13226
+ uncovered: array(string()).readonly()
13227
+ });
12748
13228
  var ModelCatalogEntrySchema = object({
12749
13229
  id: string(),
12750
13230
  name: string(),
@@ -12871,6 +13351,16 @@ var ModelCatalogEntrySchema = object({
12871
13351
  */
12872
13352
  classMap: DetectionCatalogClassMapSchema.optional(),
12873
13353
  /**
13354
+ * The pipeline steps this ROOT detector already does the work of (D715):
13355
+ * its labels name the effect the step exists to produce (`deer` for
13356
+ * `animal-classifier`, `package` for `package-detection`). Derived from the
13357
+ * labelmap by `deriveClassifierFills`, never hand-written; a COCO model
13358
+ * declares none. Whether a declaration is honoured is the step's own
13359
+ * `labelLink` policy (`resolveLabelLink`). `labelToEffect` values are in
13360
+ * `FILLABLE_STEP_VOCABULARIES` (guard `check-label-link-vocabulary`).
13361
+ */
13362
+ fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional(),
13363
+ /**
12874
13364
  * The model's CLIP feature-space contract (text encoder, dimension, vector
12875
13365
  * index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
12876
13366
  * CLIP image encoder; its absence is what "not a CLIP model" means to the
@@ -16744,7 +17234,7 @@ var detectionPipelineCapability = {
16744
17234
  * This matters here more than anywhere else in the repo, because every provider
16745
17235
  * that knows a device's host knows its PASSWORD too: `{ host, port, username,
16746
17236
  * 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
17237
+ * and `http://admin:hunter2@192.168.60.139/` is a URL a browser accepts. The
16748
17238
  * camera's own page will ask for its own login. That is correct, and pre-
16749
17239
  * filling it is the operator's business, not ours.
16750
17240
  *
@@ -20365,373 +20855,6 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
20365
20855
  kind: "mutation",
20366
20856
  auth: "admin"
20367
20857
  });
20368
- var COCO_80_LABELS = [
20369
- {
20370
- id: "person",
20371
- name: "Person"
20372
- },
20373
- {
20374
- id: "bicycle",
20375
- name: "Bicycle"
20376
- },
20377
- {
20378
- id: "car",
20379
- name: "Car"
20380
- },
20381
- {
20382
- id: "motorcycle",
20383
- name: "Motorcycle"
20384
- },
20385
- {
20386
- id: "airplane",
20387
- name: "Airplane"
20388
- },
20389
- {
20390
- id: "bus",
20391
- name: "Bus"
20392
- },
20393
- {
20394
- id: "train",
20395
- name: "Train"
20396
- },
20397
- {
20398
- id: "truck",
20399
- name: "Truck"
20400
- },
20401
- {
20402
- id: "boat",
20403
- name: "Boat"
20404
- },
20405
- {
20406
- id: "traffic light",
20407
- name: "Traffic Light"
20408
- },
20409
- {
20410
- id: "fire hydrant",
20411
- name: "Fire Hydrant"
20412
- },
20413
- {
20414
- id: "stop sign",
20415
- name: "Stop Sign"
20416
- },
20417
- {
20418
- id: "parking meter",
20419
- name: "Parking Meter"
20420
- },
20421
- {
20422
- id: "bench",
20423
- name: "Bench"
20424
- },
20425
- {
20426
- id: "bird",
20427
- name: "Bird"
20428
- },
20429
- {
20430
- id: "cat",
20431
- name: "Cat"
20432
- },
20433
- {
20434
- id: "dog",
20435
- name: "Dog"
20436
- },
20437
- {
20438
- id: "horse",
20439
- name: "Horse"
20440
- },
20441
- {
20442
- id: "sheep",
20443
- name: "Sheep"
20444
- },
20445
- {
20446
- id: "cow",
20447
- name: "Cow"
20448
- },
20449
- {
20450
- id: "elephant",
20451
- name: "Elephant"
20452
- },
20453
- {
20454
- id: "bear",
20455
- name: "Bear"
20456
- },
20457
- {
20458
- id: "zebra",
20459
- name: "Zebra"
20460
- },
20461
- {
20462
- id: "giraffe",
20463
- name: "Giraffe"
20464
- },
20465
- {
20466
- id: "backpack",
20467
- name: "Backpack"
20468
- },
20469
- {
20470
- id: "umbrella",
20471
- name: "Umbrella"
20472
- },
20473
- {
20474
- id: "handbag",
20475
- name: "Handbag"
20476
- },
20477
- {
20478
- id: "tie",
20479
- name: "Tie"
20480
- },
20481
- {
20482
- id: "suitcase",
20483
- name: "Suitcase"
20484
- },
20485
- {
20486
- id: "frisbee",
20487
- name: "Frisbee"
20488
- },
20489
- {
20490
- id: "skis",
20491
- name: "Skis"
20492
- },
20493
- {
20494
- id: "snowboard",
20495
- name: "Snowboard"
20496
- },
20497
- {
20498
- id: "sports ball",
20499
- name: "Sports Ball"
20500
- },
20501
- {
20502
- id: "kite",
20503
- name: "Kite"
20504
- },
20505
- {
20506
- id: "baseball bat",
20507
- name: "Baseball Bat"
20508
- },
20509
- {
20510
- id: "baseball glove",
20511
- name: "Baseball Glove"
20512
- },
20513
- {
20514
- id: "skateboard",
20515
- name: "Skateboard"
20516
- },
20517
- {
20518
- id: "surfboard",
20519
- name: "Surfboard"
20520
- },
20521
- {
20522
- id: "tennis racket",
20523
- name: "Tennis Racket"
20524
- },
20525
- {
20526
- id: "bottle",
20527
- name: "Bottle"
20528
- },
20529
- {
20530
- id: "wine glass",
20531
- name: "Wine Glass"
20532
- },
20533
- {
20534
- id: "cup",
20535
- name: "Cup"
20536
- },
20537
- {
20538
- id: "fork",
20539
- name: "Fork"
20540
- },
20541
- {
20542
- id: "knife",
20543
- name: "Knife"
20544
- },
20545
- {
20546
- id: "spoon",
20547
- name: "Spoon"
20548
- },
20549
- {
20550
- id: "bowl",
20551
- name: "Bowl"
20552
- },
20553
- {
20554
- id: "banana",
20555
- name: "Banana"
20556
- },
20557
- {
20558
- id: "apple",
20559
- name: "Apple"
20560
- },
20561
- {
20562
- id: "sandwich",
20563
- name: "Sandwich"
20564
- },
20565
- {
20566
- id: "orange",
20567
- name: "Orange"
20568
- },
20569
- {
20570
- id: "broccoli",
20571
- name: "Broccoli"
20572
- },
20573
- {
20574
- id: "carrot",
20575
- name: "Carrot"
20576
- },
20577
- {
20578
- id: "hot dog",
20579
- name: "Hot Dog"
20580
- },
20581
- {
20582
- id: "pizza",
20583
- name: "Pizza"
20584
- },
20585
- {
20586
- id: "donut",
20587
- name: "Donut"
20588
- },
20589
- {
20590
- id: "cake",
20591
- name: "Cake"
20592
- },
20593
- {
20594
- id: "chair",
20595
- name: "Chair"
20596
- },
20597
- {
20598
- id: "couch",
20599
- name: "Couch"
20600
- },
20601
- {
20602
- id: "potted plant",
20603
- name: "Potted Plant"
20604
- },
20605
- {
20606
- id: "bed",
20607
- name: "Bed"
20608
- },
20609
- {
20610
- id: "dining table",
20611
- name: "Dining Table"
20612
- },
20613
- {
20614
- id: "toilet",
20615
- name: "Toilet"
20616
- },
20617
- {
20618
- id: "tv",
20619
- name: "TV"
20620
- },
20621
- {
20622
- id: "laptop",
20623
- name: "Laptop"
20624
- },
20625
- {
20626
- id: "mouse",
20627
- name: "Mouse"
20628
- },
20629
- {
20630
- id: "remote",
20631
- name: "Remote"
20632
- },
20633
- {
20634
- id: "keyboard",
20635
- name: "Keyboard"
20636
- },
20637
- {
20638
- id: "cell phone",
20639
- name: "Cell Phone"
20640
- },
20641
- {
20642
- id: "microwave",
20643
- name: "Microwave"
20644
- },
20645
- {
20646
- id: "oven",
20647
- name: "Oven"
20648
- },
20649
- {
20650
- id: "toaster",
20651
- name: "Toaster"
20652
- },
20653
- {
20654
- id: "sink",
20655
- name: "Sink"
20656
- },
20657
- {
20658
- id: "refrigerator",
20659
- name: "Refrigerator"
20660
- },
20661
- {
20662
- id: "book",
20663
- name: "Book"
20664
- },
20665
- {
20666
- id: "clock",
20667
- name: "Clock"
20668
- },
20669
- {
20670
- id: "vase",
20671
- name: "Vase"
20672
- },
20673
- {
20674
- id: "scissors",
20675
- name: "Scissors"
20676
- },
20677
- {
20678
- id: "teddy bear",
20679
- name: "Teddy Bear"
20680
- },
20681
- {
20682
- id: "hair drier",
20683
- name: "Hair Drier"
20684
- },
20685
- {
20686
- id: "toothbrush",
20687
- name: "Toothbrush"
20688
- }
20689
- ];
20690
- new Set([
20691
- {
20692
- id: "person",
20693
- name: "Person"
20694
- },
20695
- {
20696
- id: "vehicle",
20697
- name: "Vehicle"
20698
- },
20699
- {
20700
- id: "animal",
20701
- name: "Animal"
20702
- },
20703
- {
20704
- id: "package",
20705
- name: "Package"
20706
- }
20707
- ].map((l) => l.id));
20708
- var COCO_TO_MACRO = {
20709
- mapping: {
20710
- person: "person",
20711
- bicycle: "vehicle",
20712
- car: "vehicle",
20713
- motorcycle: "vehicle",
20714
- airplane: "vehicle",
20715
- bus: "vehicle",
20716
- train: "vehicle",
20717
- truck: "vehicle",
20718
- boat: "vehicle",
20719
- bird: "animal",
20720
- cat: "animal",
20721
- dog: "animal",
20722
- horse: "animal",
20723
- sheep: "animal",
20724
- cow: "animal",
20725
- elephant: "animal",
20726
- bear: "animal",
20727
- zebra: "animal",
20728
- giraffe: "animal",
20729
- suitcase: "package",
20730
- backpack: "package",
20731
- handbag: "package"
20732
- },
20733
- preserveOriginal: false
20734
- };
20735
20858
  var AUDIO_MACRO_LABELS = [
20736
20859
  {
20737
20860
  id: "speech",
@@ -22591,8 +22714,9 @@ var NcRuleSchema = NcRuleInputSchema.extend({
22591
22714
  disabledTargetIds: array(string()).default([])
22592
22715
  });
22593
22716
  /**
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
22717
+ * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
22718
+ * report a still-true state. `addons` is the crash-looped addons only and
22719
+ * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
22596
22720
  * job is not an open state, and the alarm stays instant.
22597
22721
  */
22598
22722
  var NcStateSummarySectionIdSchema = _enum([
@@ -22604,6 +22728,7 @@ var NcStateSummarySectionIdSchema = _enum([
22604
22728
  "detection-blind",
22605
22729
  "nodes",
22606
22730
  "addons",
22731
+ "addon-updates",
22607
22732
  "updates"
22608
22733
  ]);
22609
22734
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
@@ -23084,7 +23209,19 @@ var NcAlarmModeDelaysListSchema = array(object({
23084
23209
  * When this mode may be armed. Absent / null = always allowed (same as a
23085
23210
  * rule with no `schedule`). Evaluated with {@link isScheduleActive}.
23086
23211
  */
23087
- schedule: NcScheduleSchema.optional()
23212
+ schedule: NcScheduleSchema.optional(),
23213
+ /**
23214
+ * D706: while this mode's ENTRY DELAY runs, do the alarm rules' own pushes go out (as an
23215
+ * intrusion naming the locations)? Absent = false — the entry-delay notification is the
23216
+ * only one, and the matches ride the triggered notification's mosaic (D705).
23217
+ */
23218
+ notifyDuringEntryDelay: boolean().optional(),
23219
+ /**
23220
+ * D706: notify "watched again" when a sensor this arm bypassed closes and opens again.
23221
+ * Absent = false (logged, not sent). Even when true it is not sent when that same sensor
23222
+ * is the one that starts the entry delay — the entry-delay notification already names it.
23223
+ */
23224
+ notifySensorRewatched: boolean().optional()
23088
23225
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
23089
23226
  var NcAlarmModeDelaysEditListSchema = array(object({
23090
23227
  mode: AlarmArmModeSchema,
@@ -23093,7 +23230,11 @@ var NcAlarmModeDelaysEditListSchema = array(object({
23093
23230
  triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional(),
23094
23231
  postTriggeredAction: NcAlarmPostTriggeredActionSchema.nullable().optional(),
23095
23232
  /** Set a schedule, or `null` to clear (mode always allowed again). */
23096
- schedule: NcScheduleSchema.nullable().optional()
23233
+ schedule: NcScheduleSchema.nullable().optional(),
23234
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23235
+ notifyDuringEntryDelay: boolean().nullable().optional(),
23236
+ /** D706: set the switch, or `null` to clear it (back to the default, false). */
23237
+ notifySensorRewatched: boolean().nullable().optional()
23097
23238
  })).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
23098
23239
  /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
23099
23240
  var NcAlarmNonBlockingEditSchema = object({
@@ -26168,7 +26309,8 @@ var PipelineModelOptionSchema = object({
26168
26309
  group: ModelVariantGroupSchema.optional(),
26169
26310
  legacy: boolean().optional(),
26170
26311
  provider: ModelProviderIdSchema.optional(),
26171
- defaultConfidence: number().optional()
26312
+ defaultConfidence: number().optional(),
26313
+ fillsClassifierEffects: array(FillsClassifierEffectSchema).readonly().optional()
26172
26314
  });
26173
26315
  var ConfigFieldBridge = custom();
26174
26316
  var PipelineAddonSchemaSchema = object({
@@ -27157,6 +27299,22 @@ var MotionSourceEnum = _enum([
27157
27299
  "device-activity"
27158
27300
  ]);
27159
27301
  /**
27302
+ * What opened an on-motion detection SESSION: the motion source that passed the
27303
+ * camera's `motionSources` gate, and what raised it (the camera itself, or a
27304
+ * sensor the operator attached — D672). `sensorName` is the attached sensor's
27305
+ * device name as the orchestrator's camera-sensors resolution last read it;
27306
+ * absent when unknown or when the camera itself triggered.
27307
+ *
27308
+ * Carried on the session attach ONLY so the runner's `DetectionPhaseTransition`
27309
+ * can say what started the session (D672 rule 11, amended 2026-10-06). The
27310
+ * runner never decides anything on it.
27311
+ */
27312
+ var SessionTriggerSchema = object({
27313
+ source: MotionSourceEnum,
27314
+ triggeredBy: MotionTriggeredBySchema,
27315
+ sensorName: string().optional()
27316
+ });
27317
+ /**
27160
27318
  * List of motion sources active on a camera. Empty array is valid:
27161
27319
  * "no source" — happens for battery cams without firmware motion when
27162
27320
  * the operator hasn't opted into the SW analyzer (would hold the
@@ -27408,6 +27566,14 @@ var RunnerCameraConfigSchema = object({
27408
27566
  */
27409
27567
  motionSources: MotionSourcesSchema.default(["analyzer"]),
27410
27568
  /**
27569
+ * What opened this attach, on a SESSION attach only (see
27570
+ * {@link SessionTriggerSchema}). OPTIONAL with no default: absent on a
27571
+ * standing attach, an occupancy burst, a re-dispatch with no motion event
27572
+ * behind it, and every attach from an orchestrator older than the field — the
27573
+ * runner then names no source on the phase event.
27574
+ */
27575
+ sessionTrigger: SessionTriggerSchema.optional(),
27576
+ /**
27411
27577
  * WHICH root detector runs for this camera. The detection counterpart of
27412
27578
  * {@link motionSources}, same shape and same discipline: a per-camera list
27413
27579
  * of sources the system understands, vendor-agnostic, owned here.
@@ -34298,7 +34464,7 @@ var LocalInterfaceSchema = object({
34298
34464
  name: string(),
34299
34465
  family: _enum(["IPv4", "IPv6"]),
34300
34466
  address: string(),
34301
- /** CIDR shorthand (e.g. `192.168.x.x/24`). Empty when OS doesn't expose. */
34467
+ /** CIDR shorthand (e.g. `192.168.10.10/24`). Empty when OS doesn't expose. */
34302
34468
  cidr: string(),
34303
34469
  /** OS netmask. Stable across calls so the SDK can hash on it. */
34304
34470
  netmask: string(),
@@ -34352,7 +34518,8 @@ var ConnectionEndpointSchema = object({
34352
34518
  "lan-ipv4",
34353
34519
  "lan-ipv6",
34354
34520
  "public",
34355
- "loopback"
34521
+ "loopback",
34522
+ "app-link"
34356
34523
  ]),
34357
34524
  /**
34358
34525
  * Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
@@ -34421,15 +34588,27 @@ var GetConnectionEndpointsResultSchema = object({
34421
34588
  localPort: AdvertisedLocalPortSchema
34422
34589
  });
34423
34590
  /**
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.
34591
+ * The address flagged for notification links. `baseUrl: null` = AUTO, which
34592
+ * since D709 is the CamStack app link; `resolved` reports the effective value,
34593
+ * so the UI can show it either way.
34427
34594
  */
34428
34595
  var NotificationEndpointSchema = object({
34429
34596
  /** The operator's explicit choice, or null for AUTO. */
34430
34597
  baseUrl: string().nullable(),
34431
- /** What the ranking currently resolves to (null when nothing is reachable). */
34432
- resolved: string().nullable()
34598
+ /**
34599
+ * The effective flagged address: the explicit choice, else (AUTO) the
34600
+ * CamStack app link `https://camstack.zentik.app` (D709). A pre-D709 hub
34601
+ * answered the public tunnel / mesh here, or null.
34602
+ */
34603
+ resolved: string().nullable(),
34604
+ /**
34605
+ * The hub origin an app link carries as `hub=` (D709): the hub's best
34606
+ * public HTTPS address — the tunnel, then the mesh (Tailscale MagicDNS) —
34607
+ * picked from this cap's own palette by `pickAppLinkHub`. `null` when the
34608
+ * hub advertises neither; the app link is then minted without `hub=`.
34609
+ * Absent on a pre-D709 hub.
34610
+ */
34611
+ appLinkHub: string().nullable()
34433
34612
  });
34434
34613
  /**
34435
34614
  * The URLs the SDK / viewer should race for API access. `baseUrls` empty =
@@ -34483,7 +34662,11 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
34483
34662
  * Pass `'https'` when the caller is itself loaded over HTTPS
34484
34663
  * to avoid mixed-content blocks in the browser. The public
34485
34664
  * tunnel always emits `https://` regardless. */
34486
- scheme: _enum(["http", "https"]).optional()
34665
+ scheme: _enum(["http", "https"]).optional(),
34666
+ /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
34667
+ * an address notification links can be flagged with, not a hub
34668
+ * route. Default `false`: racers and rankers never see it. */
34669
+ includeAppLink: boolean().optional()
34487
34670
  }), 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
34671
  kind: "mutation",
34489
34672
  auth: "admin"
@@ -34744,7 +34927,7 @@ var MeshPeerSchema = object({
34744
34927
  tags: array(string()).readonly(),
34745
34928
  /** True when the peer advertises itself as an exit-node candidate. */
34746
34929
  exitNodeOption: boolean(),
34747
- /** Subnet routes the peer advertises (e.g. `["192.168.x.x/24"]`). */
34930
+ /** Subnet routes the peer advertises (e.g. `["192.168.10.0/24"]`). */
34748
34931
  advertisedRoutes: array(string()).readonly(),
34749
34932
  /** Owner account login (e.g. `foo@example.com`). Null for tagged peers. */
34750
34933
  userLogin: string().nullable(),
@@ -52076,12 +52259,14 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
52076
52259
  {
52077
52260
  id: "addons",
52078
52261
  family: "system",
52079
- label: "Addons",
52080
- kinds: [
52081
- "addon-crash-loop",
52082
- "addon-update-available",
52083
- "addon-updated"
52084
- ]
52262
+ label: "Addons stopped",
52263
+ kinds: ["addon-crash-loop"]
52264
+ },
52265
+ {
52266
+ id: "addon-updates",
52267
+ family: "system",
52268
+ label: "Addon updates",
52269
+ kinds: ["addon-update-available", "addon-updated"]
52085
52270
  },
52086
52271
  {
52087
52272
  id: "updates",
@@ -52241,13 +52426,15 @@ var STATE_SUMMARY_SECTION_VARS = [
52241
52426
  },
52242
52427
  {
52243
52428
  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
- ]
52429
+ label: "Summary: addons stopped",
52430
+ example: "hub — recorder stopped after repeated crashes",
52431
+ kinds: ["addon-crash-loop"]
52432
+ },
52433
+ {
52434
+ name: "summaryAddonUpdates",
52435
+ label: "Summary: addon updates",
52436
+ example: "hub:\n• @camstack/addon-recorder 1.2.3 → 1.2.4",
52437
+ kinds: ["addon-update-available", "addon-updated"]
52251
52438
  },
52252
52439
  {
52253
52440
  name: "summaryUpdates",
@@ -52331,6 +52518,7 @@ var STATE_SUMMARY_VARS = [
52331
52518
  [...RULE_BODY_ONLY],
52332
52519
  [...RULE_TEXT],
52333
52520
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
52521
+ ([...RULE_TEXT], [...COMBINED_ALARM]),
52334
52522
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
52335
52523
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
52336
52524
  ([...RULE_TEXT], [...CONSUMABLE]),
@@ -54066,6 +54254,12 @@ Object.defineProperty(exports, "DEFAULT_FIRST_SIGHTING_FRESHNESS_MS", {
54066
54254
  return DEFAULT_FIRST_SIGHTING_FRESHNESS_MS;
54067
54255
  }
54068
54256
  });
54257
+ Object.defineProperty(exports, "DEFAULT_LABEL_LINK_POLICY", {
54258
+ enumerable: true,
54259
+ get: function() {
54260
+ return DEFAULT_LABEL_LINK_POLICY;
54261
+ }
54262
+ });
54069
54263
  Object.defineProperty(exports, "DEFAULT_NATIVE_LEASE_SETTINGS", {
54070
54264
  enumerable: true,
54071
54265
  get: function() {
@@ -54120,6 +54314,18 @@ Object.defineProperty(exports, "ExportRecordSchema", {
54120
54314
  return ExportRecordSchema;
54121
54315
  }
54122
54316
  });
54317
+ Object.defineProperty(exports, "FILLABLE_STEP_MACRO", {
54318
+ enumerable: true,
54319
+ get: function() {
54320
+ return FILLABLE_STEP_MACRO;
54321
+ }
54322
+ });
54323
+ Object.defineProperty(exports, "FILLABLE_STEP_VOCABULARIES", {
54324
+ enumerable: true,
54325
+ get: function() {
54326
+ return FILLABLE_STEP_VOCABULARIES;
54327
+ }
54328
+ });
54123
54329
  Object.defineProperty(exports, "FailureCounters", {
54124
54330
  enumerable: true,
54125
54331
  get: function() {
@@ -54144,6 +54350,18 @@ Object.defineProperty(exports, "HF_BASE_URL", {
54144
54350
  return HF_BASE_URL;
54145
54351
  }
54146
54352
  });
54353
+ Object.defineProperty(exports, "LABEL_LINK_POLICIES", {
54354
+ enumerable: true,
54355
+ get: function() {
54356
+ return LABEL_LINK_POLICIES;
54357
+ }
54358
+ });
54359
+ Object.defineProperty(exports, "LABEL_LINK_SETTING_KEY", {
54360
+ enumerable: true,
54361
+ get: function() {
54362
+ return LABEL_LINK_SETTING_KEY;
54363
+ }
54364
+ });
54147
54365
  Object.defineProperty(exports, "NativeLeaseAdmissionSchema", {
54148
54366
  enumerable: true,
54149
54367
  get: function() {
@@ -54528,6 +54746,18 @@ Object.defineProperty(exports, "lazy", {
54528
54746
  return lazy;
54529
54747
  }
54530
54748
  });
54749
+ Object.defineProperty(exports, "linkedLabelStepId", {
54750
+ enumerable: true,
54751
+ get: function() {
54752
+ return linkedLabelStepId;
54753
+ }
54754
+ });
54755
+ Object.defineProperty(exports, "linkedStepOf", {
54756
+ enumerable: true,
54757
+ get: function() {
54758
+ return linkedStepOf;
54759
+ }
54760
+ });
54531
54761
  Object.defineProperty(exports, "literal", {
54532
54762
  enumerable: true,
54533
54763
  get: function() {
@@ -54738,6 +54968,12 @@ Object.defineProperty(exports, "resolveEgressDecodeHwAccel", {
54738
54968
  return resolveEgressDecodeHwAccel;
54739
54969
  }
54740
54970
  });
54971
+ Object.defineProperty(exports, "resolveLabelLink", {
54972
+ enumerable: true,
54973
+ get: function() {
54974
+ return resolveLabelLink;
54975
+ }
54976
+ });
54741
54977
  Object.defineProperty(exports, "resolveLocationMode", {
54742
54978
  enumerable: true,
54743
54979
  get: function() {