@camstack/addon-mqtt-broker 1.2.84 → 1.2.86

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.
@@ -15908,16 +15908,16 @@ DeviceType.AlarmPanel, method(object({
15908
15908
  code: string().min(1).optional()
15909
15909
  }), _void(), {
15910
15910
  kind: "mutation",
15911
- auth: "admin"
15911
+ auth: "protected"
15912
15912
  }), method(object({
15913
15913
  deviceId: number().int().nonnegative(),
15914
15914
  code: string().min(1).optional()
15915
15915
  }), _void(), {
15916
15916
  kind: "mutation",
15917
- auth: "admin"
15917
+ auth: "protected"
15918
15918
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15919
15919
  kind: "mutation",
15920
- auth: "admin"
15920
+ auth: "protected"
15921
15921
  });
15922
15922
  /**
15923
15923
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23572,7 +23572,7 @@ DeviceType.Light, method(object({
23572
23572
  percentage: number().min(0).max(100)
23573
23573
  }), _void(), {
23574
23574
  kind: "mutation",
23575
- auth: "admin"
23575
+ auth: "protected"
23576
23576
  }), object({
23577
23577
  deviceId: number(),
23578
23578
  percentage: number().min(0).max(100),
@@ -23580,7 +23580,7 @@ DeviceType.Light, method(object({
23580
23580
  });
23581
23581
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23582
23582
  kind: "mutation",
23583
- auth: "admin"
23583
+ auth: "protected"
23584
23584
  });
23585
23585
  /**
23586
23586
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23739,50 +23739,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23739
23739
  mode: HvacModeSchema
23740
23740
  }), _void(), {
23741
23741
  kind: "mutation",
23742
- auth: "admin"
23742
+ auth: "protected"
23743
23743
  }), method(object({
23744
23744
  deviceId: number().int().nonnegative(),
23745
23745
  fanMode: string().min(1)
23746
23746
  }), _void(), {
23747
23747
  kind: "mutation",
23748
- auth: "admin"
23748
+ auth: "protected"
23749
23749
  }), method(object({
23750
23750
  deviceId: number().int().nonnegative(),
23751
23751
  preset: string().min(1)
23752
23752
  }), _void(), {
23753
23753
  kind: "mutation",
23754
- auth: "admin"
23754
+ auth: "protected"
23755
23755
  }), method(object({
23756
23756
  deviceId: number().int().nonnegative(),
23757
23757
  target: number()
23758
23758
  }), _void(), {
23759
23759
  kind: "mutation",
23760
- auth: "admin"
23760
+ auth: "protected"
23761
23761
  }), method(object({
23762
23762
  deviceId: number().int().nonnegative(),
23763
23763
  targetLow: number(),
23764
23764
  targetHigh: number()
23765
23765
  }), _void(), {
23766
23766
  kind: "mutation",
23767
- auth: "admin"
23767
+ auth: "protected"
23768
23768
  }), method(object({
23769
23769
  deviceId: number().int().nonnegative(),
23770
23770
  targetHumidity: number().min(0).max(100)
23771
23771
  }), _void(), {
23772
23772
  kind: "mutation",
23773
- auth: "admin"
23773
+ auth: "protected"
23774
23774
  }), method(object({
23775
23775
  deviceId: number().int().nonnegative(),
23776
23776
  on: boolean()
23777
23777
  }), _void(), {
23778
23778
  kind: "mutation",
23779
- auth: "admin"
23779
+ auth: "protected"
23780
23780
  }), method(object({
23781
23781
  deviceId: number().int().nonnegative(),
23782
23782
  on: boolean()
23783
23783
  }), _void(), {
23784
23784
  kind: "mutation",
23785
- auth: "admin"
23785
+ auth: "protected"
23786
23786
  });
23787
23787
  /**
23788
23788
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23857,7 +23857,7 @@ DeviceType.Light, method(object({
23857
23857
  color: ColorInputSchema
23858
23858
  }), _void(), {
23859
23859
  kind: "mutation",
23860
- auth: "admin"
23860
+ auth: "protected"
23861
23861
  }), object({
23862
23862
  deviceId: number(),
23863
23863
  mode: _enum([
@@ -24006,7 +24006,7 @@ DeviceType.Control, method(object({
24006
24006
  control: ControlSetValueInputSchema
24007
24007
  }), _void(), {
24008
24008
  kind: "mutation",
24009
- auth: "admin"
24009
+ auth: "protected"
24010
24010
  });
24011
24011
  object({
24012
24012
  /** Lifecycle state of the cover. */
@@ -24027,25 +24027,25 @@ object({
24027
24027
  });
24028
24028
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24029
24029
  kind: "mutation",
24030
- auth: "admin"
24030
+ auth: "protected"
24031
24031
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24032
24032
  kind: "mutation",
24033
- auth: "admin"
24033
+ auth: "protected"
24034
24034
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24035
24035
  kind: "mutation",
24036
- auth: "admin"
24036
+ auth: "protected"
24037
24037
  }), method(object({
24038
24038
  deviceId: number().int().nonnegative(),
24039
24039
  position: number().min(0).max(100)
24040
24040
  }), _void(), {
24041
24041
  kind: "mutation",
24042
- auth: "admin"
24042
+ auth: "protected"
24043
24043
  }), method(object({
24044
24044
  deviceId: number().int().nonnegative(),
24045
24045
  tiltPosition: number().min(0).max(100)
24046
24046
  }), _void(), {
24047
24047
  kind: "mutation",
24048
- auth: "admin"
24048
+ auth: "protected"
24049
24049
  });
24050
24050
  /**
24051
24051
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24250,6 +24250,59 @@ var IdentitySampleInfoSchema = object({
24250
24250
  deviceId: number().int().optional(),
24251
24251
  base64: string().optional()
24252
24252
  });
24253
+ /**
24254
+ * One enrolled sample, judged against the gallery it lives in.
24255
+ *
24256
+ * The gallery is the one input to recognition nobody re-reads: a sample
24257
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24258
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24259
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24260
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24261
+ * where every other cross-identity pair sits under 0.50.
24262
+ */
24263
+ var IdentitySampleAuditRowSchema = object({
24264
+ sampleId: string(),
24265
+ enrolledAt: number().int(),
24266
+ deviceId: number().int().optional(),
24267
+ source: _enum(["detected", "photo"]),
24268
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24269
+ mediaKey: string().optional(),
24270
+ /**
24271
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24272
+ * across feature spaces is a well-formed float with no meaning. Every number
24273
+ * below then says nothing — it must read as "cannot say", never as an
24274
+ * accusation and never as a clean bill: this list ends in a Remove button.
24275
+ */
24276
+ comparable: boolean(),
24277
+ /** Mean cosine against this person's other samples. Null when there are none
24278
+ * to compare with — never 0, which would read as "opposite". */
24279
+ selfMean: number().nullable(),
24280
+ /** The other person this sample looks most like, when it looks like one.
24281
+ * This is the half that convicts: not looking like yourself can be a hard
24282
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24283
+ bestForeign: object({
24284
+ identityId: string(),
24285
+ name: string(),
24286
+ score: number()
24287
+ }).optional(),
24288
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24289
+ suspicion: number()
24290
+ });
24291
+ var IdentitySampleAuditSchema = object({
24292
+ identityId: string(),
24293
+ name: string(),
24294
+ /** The cluster face model every comparison was made in. */
24295
+ modelId: string(),
24296
+ totalSamples: number().int(),
24297
+ comparableSamples: number().int(),
24298
+ flagged: number().int(),
24299
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24300
+ * only its current result. */
24301
+ flagThreshold: number(),
24302
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24303
+ * operator asked to see the gallery, not only its accusations. */
24304
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24305
+ });
24253
24306
  var FaceInfoSchema = object({
24254
24307
  faceId: string(),
24255
24308
  deviceId: number().int(),
@@ -24401,7 +24454,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24401
24454
  }), method(object({ id: string() }), _void(), {
24402
24455
  kind: "mutation",
24403
24456
  auth: "admin"
24404
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24457
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24405
24458
  identityId: string(),
24406
24459
  sampleId: string()
24407
24460
  }), _void(), {
@@ -24587,25 +24640,25 @@ DeviceType.Fan, method(object({
24587
24640
  percentage: number().min(0).max(100)
24588
24641
  }), _void(), {
24589
24642
  kind: "mutation",
24590
- auth: "admin"
24643
+ auth: "protected"
24591
24644
  }), method(object({
24592
24645
  deviceId: number().int().nonnegative(),
24593
24646
  preset: string().min(1)
24594
24647
  }), _void(), {
24595
24648
  kind: "mutation",
24596
- auth: "admin"
24649
+ auth: "protected"
24597
24650
  }), method(object({
24598
24651
  deviceId: number().int().nonnegative(),
24599
24652
  direction: FanDirectionSchema
24600
24653
  }), _void(), {
24601
24654
  kind: "mutation",
24602
- auth: "admin"
24655
+ auth: "protected"
24603
24656
  }), method(object({
24604
24657
  deviceId: number().int().nonnegative(),
24605
24658
  oscillating: boolean()
24606
24659
  }), _void(), {
24607
24660
  kind: "mutation",
24608
- auth: "admin"
24661
+ auth: "protected"
24609
24662
  });
24610
24663
  /**
24611
24664
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24708,19 +24761,19 @@ DeviceType.Humidifier, method(object({
24708
24761
  on: boolean()
24709
24762
  }), _void(), {
24710
24763
  kind: "mutation",
24711
- auth: "admin"
24764
+ auth: "protected"
24712
24765
  }), method(object({
24713
24766
  deviceId: number().int().nonnegative(),
24714
24767
  humidity: number().min(0).max(100)
24715
24768
  }), _void(), {
24716
24769
  kind: "mutation",
24717
- auth: "admin"
24770
+ auth: "protected"
24718
24771
  }), method(object({
24719
24772
  deviceId: number().int().nonnegative(),
24720
24773
  mode: string().min(1)
24721
24774
  }), _void(), {
24722
24775
  kind: "mutation",
24723
- auth: "admin"
24776
+ auth: "protected"
24724
24777
  });
24725
24778
  object({
24726
24779
  /** Current relative humidity, 0..100. */
@@ -25182,13 +25235,13 @@ object({
25182
25235
  });
25183
25236
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25184
25237
  kind: "mutation",
25185
- auth: "admin"
25238
+ auth: "protected"
25186
25239
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25187
25240
  kind: "mutation",
25188
- auth: "admin"
25241
+ auth: "protected"
25189
25242
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25190
25243
  kind: "mutation",
25191
- auth: "admin"
25244
+ auth: "protected"
25192
25245
  });
25193
25246
  /**
25194
25247
  * local-network — hub-only singleton.
@@ -25448,16 +25501,16 @@ DeviceType.Lock, method(object({
25448
25501
  code: string().min(1).optional()
25449
25502
  }), _void(), {
25450
25503
  kind: "mutation",
25451
- auth: "admin"
25504
+ auth: "protected"
25452
25505
  }), method(object({
25453
25506
  deviceId: number().int().nonnegative(),
25454
25507
  code: string().min(1).optional()
25455
25508
  }), _void(), {
25456
25509
  kind: "mutation",
25457
- auth: "admin"
25510
+ auth: "protected"
25458
25511
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25459
25512
  kind: "mutation",
25460
- auth: "admin"
25513
+ auth: "protected"
25461
25514
  });
25462
25515
  /**
25463
25516
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25531,55 +25584,55 @@ object({
25531
25584
  });
25532
25585
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25533
25586
  kind: "mutation",
25534
- auth: "admin"
25587
+ auth: "protected"
25535
25588
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25536
25589
  kind: "mutation",
25537
- auth: "admin"
25590
+ auth: "protected"
25538
25591
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25539
25592
  kind: "mutation",
25540
- auth: "admin"
25593
+ auth: "protected"
25541
25594
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25542
25595
  kind: "mutation",
25543
- auth: "admin"
25596
+ auth: "protected"
25544
25597
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25545
25598
  kind: "mutation",
25546
- auth: "admin"
25599
+ auth: "protected"
25547
25600
  }), method(object({
25548
25601
  deviceId: number().int().nonnegative(),
25549
25602
  positionMs: number().int().nonnegative()
25550
25603
  }), _void(), {
25551
25604
  kind: "mutation",
25552
- auth: "admin"
25605
+ auth: "protected"
25553
25606
  }), method(object({
25554
25607
  deviceId: number().int().nonnegative(),
25555
25608
  volumeLevel: number().min(0).max(100)
25556
25609
  }), _void(), {
25557
25610
  kind: "mutation",
25558
- auth: "admin"
25611
+ auth: "protected"
25559
25612
  }), method(object({
25560
25613
  deviceId: number().int().nonnegative(),
25561
25614
  muted: boolean()
25562
25615
  }), _void(), {
25563
25616
  kind: "mutation",
25564
- auth: "admin"
25617
+ auth: "protected"
25565
25618
  }), method(object({
25566
25619
  deviceId: number().int().nonnegative(),
25567
25620
  shuffle: boolean()
25568
25621
  }), _void(), {
25569
25622
  kind: "mutation",
25570
- auth: "admin"
25623
+ auth: "protected"
25571
25624
  }), method(object({
25572
25625
  deviceId: number().int().nonnegative(),
25573
25626
  repeat: MediaPlayerRepeatSchema
25574
25627
  }), _void(), {
25575
25628
  kind: "mutation",
25576
- auth: "admin"
25629
+ auth: "protected"
25577
25630
  }), method(object({
25578
25631
  deviceId: number().int().nonnegative(),
25579
25632
  source: string().min(1)
25580
25633
  }), _void(), {
25581
25634
  kind: "mutation",
25582
- auth: "admin"
25635
+ auth: "protected"
25583
25636
  }), method(object({
25584
25637
  deviceId: number().int().nonnegative(),
25585
25638
  /** Media identifier / URL. */
@@ -25589,7 +25642,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25589
25642
  mediaType: string().min(1)
25590
25643
  }), _void(), {
25591
25644
  kind: "mutation",
25592
- auth: "admin"
25645
+ auth: "protected"
25593
25646
  });
25594
25647
  /**
25595
25648
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26755,49 +26808,49 @@ DeviceType.PetFeeder, method(object({
26755
26808
  hopper2: gramsPortion.optional()
26756
26809
  }), _void(), {
26757
26810
  kind: "mutation",
26758
- auth: "admin"
26811
+ auth: "protected"
26759
26812
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26760
26813
  kind: "mutation",
26761
- auth: "admin"
26814
+ auth: "protected"
26762
26815
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26763
26816
  kind: "mutation",
26764
- auth: "admin"
26817
+ auth: "protected"
26765
26818
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26766
26819
  kind: "mutation",
26767
- auth: "admin"
26820
+ auth: "protected"
26768
26821
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26769
26822
  kind: "mutation",
26770
- auth: "admin"
26823
+ auth: "protected"
26771
26824
  }), method(object({
26772
26825
  deviceId: number().int().nonnegative(),
26773
26826
  soundId: number().int().nonnegative()
26774
26827
  }), _void(), {
26775
26828
  kind: "mutation",
26776
- auth: "admin"
26829
+ auth: "protected"
26777
26830
  }), method(object({
26778
26831
  deviceId: number().int().nonnegative(),
26779
26832
  on: boolean()
26780
26833
  }), _void(), {
26781
26834
  kind: "mutation",
26782
- auth: "admin"
26835
+ auth: "protected"
26783
26836
  }), method(object({
26784
26837
  deviceId: number().int().nonnegative(),
26785
26838
  on: boolean()
26786
26839
  }), _void(), {
26787
26840
  kind: "mutation",
26788
- auth: "admin"
26841
+ auth: "protected"
26789
26842
  }), method(object({
26790
26843
  deviceId: number().int().nonnegative(),
26791
26844
  on: boolean()
26792
26845
  }), _void(), {
26793
26846
  kind: "mutation",
26794
- auth: "admin"
26847
+ auth: "protected"
26795
26848
  }), method(object({
26796
26849
  deviceId: number().int().nonnegative(),
26797
26850
  level: number().int().nonnegative()
26798
26851
  }), _void(), {
26799
26852
  kind: "mutation",
26800
- auth: "admin"
26853
+ auth: "protected"
26801
26854
  });
26802
26855
  var VehicleSchema = object({
26803
26856
  id: string(),
@@ -28584,7 +28637,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28584
28637
  on: boolean()
28585
28638
  }), _void(), {
28586
28639
  kind: "mutation",
28587
- auth: "admin"
28640
+ auth: "protected"
28588
28641
  }), object({
28589
28642
  deviceId: number(),
28590
28643
  on: boolean(),
@@ -29441,25 +29494,25 @@ object({
29441
29494
  });
29442
29495
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29443
29496
  kind: "mutation",
29444
- auth: "admin"
29497
+ auth: "protected"
29445
29498
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29446
29499
  kind: "mutation",
29447
- auth: "admin"
29500
+ auth: "protected"
29448
29501
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29449
29502
  kind: "mutation",
29450
- auth: "admin"
29503
+ auth: "protected"
29451
29504
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29452
29505
  kind: "mutation",
29453
- auth: "admin"
29506
+ auth: "protected"
29454
29507
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29455
29508
  kind: "mutation",
29456
- auth: "admin"
29509
+ auth: "protected"
29457
29510
  }), method(object({
29458
29511
  deviceId: number().int().nonnegative(),
29459
29512
  speed: string().min(1)
29460
29513
  }), _void(), {
29461
29514
  kind: "mutation",
29462
- auth: "admin"
29515
+ auth: "protected"
29463
29516
  });
29464
29517
  object({
29465
29518
  /** Lifecycle state of the valve. */
@@ -29478,19 +29531,19 @@ object({
29478
29531
  });
29479
29532
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29480
29533
  kind: "mutation",
29481
- auth: "admin"
29534
+ auth: "protected"
29482
29535
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29483
29536
  kind: "mutation",
29484
- auth: "admin"
29537
+ auth: "protected"
29485
29538
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29486
29539
  kind: "mutation",
29487
- auth: "admin"
29540
+ auth: "protected"
29488
29541
  }), method(object({
29489
29542
  deviceId: number().int().nonnegative(),
29490
29543
  position: number().min(0).max(100)
29491
29544
  }), _void(), {
29492
29545
  kind: "mutation",
29493
- auth: "admin"
29546
+ auth: "protected"
29494
29547
  });
29495
29548
  object({
29496
29549
  detected: boolean(),
@@ -29524,19 +29577,19 @@ DeviceType.WaterHeater, method(object({
29524
29577
  temp: number().finite()
29525
29578
  }), _void(), {
29526
29579
  kind: "mutation",
29527
- auth: "admin"
29580
+ auth: "protected"
29528
29581
  }), method(object({
29529
29582
  deviceId: number().int().nonnegative(),
29530
29583
  mode: string().min(1)
29531
29584
  }), _void(), {
29532
29585
  kind: "mutation",
29533
- auth: "admin"
29586
+ auth: "protected"
29534
29587
  }), method(object({
29535
29588
  deviceId: number().int().nonnegative(),
29536
29589
  on: boolean()
29537
29590
  }), _void(), {
29538
29591
  kind: "mutation",
29539
- auth: "admin"
29592
+ auth: "protected"
29540
29593
  });
29541
29594
  object({
29542
29595
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31628,6 +31681,12 @@ Object.freeze({
31628
31681
  addonId: null,
31629
31682
  access: "create"
31630
31683
  },
31684
+ "faceGallery.auditIdentitySamples": {
31685
+ capName: "face-gallery",
31686
+ capScope: "system",
31687
+ addonId: null,
31688
+ access: "view"
31689
+ },
31631
31690
  "faceGallery.createIdentity": {
31632
31691
  capName: "face-gallery",
31633
31692
  capScope: "system",
@@ -15903,16 +15903,16 @@ DeviceType.AlarmPanel, method(object({
15903
15903
  code: string().min(1).optional()
15904
15904
  }), _void(), {
15905
15905
  kind: "mutation",
15906
- auth: "admin"
15906
+ auth: "protected"
15907
15907
  }), method(object({
15908
15908
  deviceId: number().int().nonnegative(),
15909
15909
  code: string().min(1).optional()
15910
15910
  }), _void(), {
15911
15911
  kind: "mutation",
15912
- auth: "admin"
15912
+ auth: "protected"
15913
15913
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15914
15914
  kind: "mutation",
15915
- auth: "admin"
15915
+ auth: "protected"
15916
15916
  });
15917
15917
  /**
15918
15918
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23567,7 +23567,7 @@ DeviceType.Light, method(object({
23567
23567
  percentage: number().min(0).max(100)
23568
23568
  }), _void(), {
23569
23569
  kind: "mutation",
23570
- auth: "admin"
23570
+ auth: "protected"
23571
23571
  }), object({
23572
23572
  deviceId: number(),
23573
23573
  percentage: number().min(0).max(100),
@@ -23575,7 +23575,7 @@ DeviceType.Light, method(object({
23575
23575
  });
23576
23576
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23577
23577
  kind: "mutation",
23578
- auth: "admin"
23578
+ auth: "protected"
23579
23579
  });
23580
23580
  /**
23581
23581
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23734,50 +23734,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23734
23734
  mode: HvacModeSchema
23735
23735
  }), _void(), {
23736
23736
  kind: "mutation",
23737
- auth: "admin"
23737
+ auth: "protected"
23738
23738
  }), method(object({
23739
23739
  deviceId: number().int().nonnegative(),
23740
23740
  fanMode: string().min(1)
23741
23741
  }), _void(), {
23742
23742
  kind: "mutation",
23743
- auth: "admin"
23743
+ auth: "protected"
23744
23744
  }), method(object({
23745
23745
  deviceId: number().int().nonnegative(),
23746
23746
  preset: string().min(1)
23747
23747
  }), _void(), {
23748
23748
  kind: "mutation",
23749
- auth: "admin"
23749
+ auth: "protected"
23750
23750
  }), method(object({
23751
23751
  deviceId: number().int().nonnegative(),
23752
23752
  target: number()
23753
23753
  }), _void(), {
23754
23754
  kind: "mutation",
23755
- auth: "admin"
23755
+ auth: "protected"
23756
23756
  }), method(object({
23757
23757
  deviceId: number().int().nonnegative(),
23758
23758
  targetLow: number(),
23759
23759
  targetHigh: number()
23760
23760
  }), _void(), {
23761
23761
  kind: "mutation",
23762
- auth: "admin"
23762
+ auth: "protected"
23763
23763
  }), method(object({
23764
23764
  deviceId: number().int().nonnegative(),
23765
23765
  targetHumidity: number().min(0).max(100)
23766
23766
  }), _void(), {
23767
23767
  kind: "mutation",
23768
- auth: "admin"
23768
+ auth: "protected"
23769
23769
  }), method(object({
23770
23770
  deviceId: number().int().nonnegative(),
23771
23771
  on: boolean()
23772
23772
  }), _void(), {
23773
23773
  kind: "mutation",
23774
- auth: "admin"
23774
+ auth: "protected"
23775
23775
  }), method(object({
23776
23776
  deviceId: number().int().nonnegative(),
23777
23777
  on: boolean()
23778
23778
  }), _void(), {
23779
23779
  kind: "mutation",
23780
- auth: "admin"
23780
+ auth: "protected"
23781
23781
  });
23782
23782
  /**
23783
23783
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23852,7 +23852,7 @@ DeviceType.Light, method(object({
23852
23852
  color: ColorInputSchema
23853
23853
  }), _void(), {
23854
23854
  kind: "mutation",
23855
- auth: "admin"
23855
+ auth: "protected"
23856
23856
  }), object({
23857
23857
  deviceId: number(),
23858
23858
  mode: _enum([
@@ -24001,7 +24001,7 @@ DeviceType.Control, method(object({
24001
24001
  control: ControlSetValueInputSchema
24002
24002
  }), _void(), {
24003
24003
  kind: "mutation",
24004
- auth: "admin"
24004
+ auth: "protected"
24005
24005
  });
24006
24006
  object({
24007
24007
  /** Lifecycle state of the cover. */
@@ -24022,25 +24022,25 @@ object({
24022
24022
  });
24023
24023
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24024
24024
  kind: "mutation",
24025
- auth: "admin"
24025
+ auth: "protected"
24026
24026
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24027
24027
  kind: "mutation",
24028
- auth: "admin"
24028
+ auth: "protected"
24029
24029
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24030
24030
  kind: "mutation",
24031
- auth: "admin"
24031
+ auth: "protected"
24032
24032
  }), method(object({
24033
24033
  deviceId: number().int().nonnegative(),
24034
24034
  position: number().min(0).max(100)
24035
24035
  }), _void(), {
24036
24036
  kind: "mutation",
24037
- auth: "admin"
24037
+ auth: "protected"
24038
24038
  }), method(object({
24039
24039
  deviceId: number().int().nonnegative(),
24040
24040
  tiltPosition: number().min(0).max(100)
24041
24041
  }), _void(), {
24042
24042
  kind: "mutation",
24043
- auth: "admin"
24043
+ auth: "protected"
24044
24044
  });
24045
24045
  /**
24046
24046
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24245,6 +24245,59 @@ var IdentitySampleInfoSchema = object({
24245
24245
  deviceId: number().int().optional(),
24246
24246
  base64: string().optional()
24247
24247
  });
24248
+ /**
24249
+ * One enrolled sample, judged against the gallery it lives in.
24250
+ *
24251
+ * The gallery is the one input to recognition nobody re-reads: a sample
24252
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24253
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24254
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24255
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24256
+ * where every other cross-identity pair sits under 0.50.
24257
+ */
24258
+ var IdentitySampleAuditRowSchema = object({
24259
+ sampleId: string(),
24260
+ enrolledAt: number().int(),
24261
+ deviceId: number().int().optional(),
24262
+ source: _enum(["detected", "photo"]),
24263
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24264
+ mediaKey: string().optional(),
24265
+ /**
24266
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24267
+ * across feature spaces is a well-formed float with no meaning. Every number
24268
+ * below then says nothing — it must read as "cannot say", never as an
24269
+ * accusation and never as a clean bill: this list ends in a Remove button.
24270
+ */
24271
+ comparable: boolean(),
24272
+ /** Mean cosine against this person's other samples. Null when there are none
24273
+ * to compare with — never 0, which would read as "opposite". */
24274
+ selfMean: number().nullable(),
24275
+ /** The other person this sample looks most like, when it looks like one.
24276
+ * This is the half that convicts: not looking like yourself can be a hard
24277
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24278
+ bestForeign: object({
24279
+ identityId: string(),
24280
+ name: string(),
24281
+ score: number()
24282
+ }).optional(),
24283
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24284
+ suspicion: number()
24285
+ });
24286
+ var IdentitySampleAuditSchema = object({
24287
+ identityId: string(),
24288
+ name: string(),
24289
+ /** The cluster face model every comparison was made in. */
24290
+ modelId: string(),
24291
+ totalSamples: number().int(),
24292
+ comparableSamples: number().int(),
24293
+ flagged: number().int(),
24294
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24295
+ * only its current result. */
24296
+ flagThreshold: number(),
24297
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24298
+ * operator asked to see the gallery, not only its accusations. */
24299
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24300
+ });
24248
24301
  var FaceInfoSchema = object({
24249
24302
  faceId: string(),
24250
24303
  deviceId: number().int(),
@@ -24396,7 +24449,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24396
24449
  }), method(object({ id: string() }), _void(), {
24397
24450
  kind: "mutation",
24398
24451
  auth: "admin"
24399
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24452
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24400
24453
  identityId: string(),
24401
24454
  sampleId: string()
24402
24455
  }), _void(), {
@@ -24582,25 +24635,25 @@ DeviceType.Fan, method(object({
24582
24635
  percentage: number().min(0).max(100)
24583
24636
  }), _void(), {
24584
24637
  kind: "mutation",
24585
- auth: "admin"
24638
+ auth: "protected"
24586
24639
  }), method(object({
24587
24640
  deviceId: number().int().nonnegative(),
24588
24641
  preset: string().min(1)
24589
24642
  }), _void(), {
24590
24643
  kind: "mutation",
24591
- auth: "admin"
24644
+ auth: "protected"
24592
24645
  }), method(object({
24593
24646
  deviceId: number().int().nonnegative(),
24594
24647
  direction: FanDirectionSchema
24595
24648
  }), _void(), {
24596
24649
  kind: "mutation",
24597
- auth: "admin"
24650
+ auth: "protected"
24598
24651
  }), method(object({
24599
24652
  deviceId: number().int().nonnegative(),
24600
24653
  oscillating: boolean()
24601
24654
  }), _void(), {
24602
24655
  kind: "mutation",
24603
- auth: "admin"
24656
+ auth: "protected"
24604
24657
  });
24605
24658
  /**
24606
24659
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24703,19 +24756,19 @@ DeviceType.Humidifier, method(object({
24703
24756
  on: boolean()
24704
24757
  }), _void(), {
24705
24758
  kind: "mutation",
24706
- auth: "admin"
24759
+ auth: "protected"
24707
24760
  }), method(object({
24708
24761
  deviceId: number().int().nonnegative(),
24709
24762
  humidity: number().min(0).max(100)
24710
24763
  }), _void(), {
24711
24764
  kind: "mutation",
24712
- auth: "admin"
24765
+ auth: "protected"
24713
24766
  }), method(object({
24714
24767
  deviceId: number().int().nonnegative(),
24715
24768
  mode: string().min(1)
24716
24769
  }), _void(), {
24717
24770
  kind: "mutation",
24718
- auth: "admin"
24771
+ auth: "protected"
24719
24772
  });
24720
24773
  object({
24721
24774
  /** Current relative humidity, 0..100. */
@@ -25177,13 +25230,13 @@ object({
25177
25230
  });
25178
25231
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25179
25232
  kind: "mutation",
25180
- auth: "admin"
25233
+ auth: "protected"
25181
25234
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25182
25235
  kind: "mutation",
25183
- auth: "admin"
25236
+ auth: "protected"
25184
25237
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25185
25238
  kind: "mutation",
25186
- auth: "admin"
25239
+ auth: "protected"
25187
25240
  });
25188
25241
  /**
25189
25242
  * local-network — hub-only singleton.
@@ -25443,16 +25496,16 @@ DeviceType.Lock, method(object({
25443
25496
  code: string().min(1).optional()
25444
25497
  }), _void(), {
25445
25498
  kind: "mutation",
25446
- auth: "admin"
25499
+ auth: "protected"
25447
25500
  }), method(object({
25448
25501
  deviceId: number().int().nonnegative(),
25449
25502
  code: string().min(1).optional()
25450
25503
  }), _void(), {
25451
25504
  kind: "mutation",
25452
- auth: "admin"
25505
+ auth: "protected"
25453
25506
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25454
25507
  kind: "mutation",
25455
- auth: "admin"
25508
+ auth: "protected"
25456
25509
  });
25457
25510
  /**
25458
25511
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25526,55 +25579,55 @@ object({
25526
25579
  });
25527
25580
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25528
25581
  kind: "mutation",
25529
- auth: "admin"
25582
+ auth: "protected"
25530
25583
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25531
25584
  kind: "mutation",
25532
- auth: "admin"
25585
+ auth: "protected"
25533
25586
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25534
25587
  kind: "mutation",
25535
- auth: "admin"
25588
+ auth: "protected"
25536
25589
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25537
25590
  kind: "mutation",
25538
- auth: "admin"
25591
+ auth: "protected"
25539
25592
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25540
25593
  kind: "mutation",
25541
- auth: "admin"
25594
+ auth: "protected"
25542
25595
  }), method(object({
25543
25596
  deviceId: number().int().nonnegative(),
25544
25597
  positionMs: number().int().nonnegative()
25545
25598
  }), _void(), {
25546
25599
  kind: "mutation",
25547
- auth: "admin"
25600
+ auth: "protected"
25548
25601
  }), method(object({
25549
25602
  deviceId: number().int().nonnegative(),
25550
25603
  volumeLevel: number().min(0).max(100)
25551
25604
  }), _void(), {
25552
25605
  kind: "mutation",
25553
- auth: "admin"
25606
+ auth: "protected"
25554
25607
  }), method(object({
25555
25608
  deviceId: number().int().nonnegative(),
25556
25609
  muted: boolean()
25557
25610
  }), _void(), {
25558
25611
  kind: "mutation",
25559
- auth: "admin"
25612
+ auth: "protected"
25560
25613
  }), method(object({
25561
25614
  deviceId: number().int().nonnegative(),
25562
25615
  shuffle: boolean()
25563
25616
  }), _void(), {
25564
25617
  kind: "mutation",
25565
- auth: "admin"
25618
+ auth: "protected"
25566
25619
  }), method(object({
25567
25620
  deviceId: number().int().nonnegative(),
25568
25621
  repeat: MediaPlayerRepeatSchema
25569
25622
  }), _void(), {
25570
25623
  kind: "mutation",
25571
- auth: "admin"
25624
+ auth: "protected"
25572
25625
  }), method(object({
25573
25626
  deviceId: number().int().nonnegative(),
25574
25627
  source: string().min(1)
25575
25628
  }), _void(), {
25576
25629
  kind: "mutation",
25577
- auth: "admin"
25630
+ auth: "protected"
25578
25631
  }), method(object({
25579
25632
  deviceId: number().int().nonnegative(),
25580
25633
  /** Media identifier / URL. */
@@ -25584,7 +25637,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25584
25637
  mediaType: string().min(1)
25585
25638
  }), _void(), {
25586
25639
  kind: "mutation",
25587
- auth: "admin"
25640
+ auth: "protected"
25588
25641
  });
25589
25642
  /**
25590
25643
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26750,49 +26803,49 @@ DeviceType.PetFeeder, method(object({
26750
26803
  hopper2: gramsPortion.optional()
26751
26804
  }), _void(), {
26752
26805
  kind: "mutation",
26753
- auth: "admin"
26806
+ auth: "protected"
26754
26807
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26755
26808
  kind: "mutation",
26756
- auth: "admin"
26809
+ auth: "protected"
26757
26810
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26758
26811
  kind: "mutation",
26759
- auth: "admin"
26812
+ auth: "protected"
26760
26813
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26761
26814
  kind: "mutation",
26762
- auth: "admin"
26815
+ auth: "protected"
26763
26816
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26764
26817
  kind: "mutation",
26765
- auth: "admin"
26818
+ auth: "protected"
26766
26819
  }), method(object({
26767
26820
  deviceId: number().int().nonnegative(),
26768
26821
  soundId: number().int().nonnegative()
26769
26822
  }), _void(), {
26770
26823
  kind: "mutation",
26771
- auth: "admin"
26824
+ auth: "protected"
26772
26825
  }), method(object({
26773
26826
  deviceId: number().int().nonnegative(),
26774
26827
  on: boolean()
26775
26828
  }), _void(), {
26776
26829
  kind: "mutation",
26777
- auth: "admin"
26830
+ auth: "protected"
26778
26831
  }), method(object({
26779
26832
  deviceId: number().int().nonnegative(),
26780
26833
  on: boolean()
26781
26834
  }), _void(), {
26782
26835
  kind: "mutation",
26783
- auth: "admin"
26836
+ auth: "protected"
26784
26837
  }), method(object({
26785
26838
  deviceId: number().int().nonnegative(),
26786
26839
  on: boolean()
26787
26840
  }), _void(), {
26788
26841
  kind: "mutation",
26789
- auth: "admin"
26842
+ auth: "protected"
26790
26843
  }), method(object({
26791
26844
  deviceId: number().int().nonnegative(),
26792
26845
  level: number().int().nonnegative()
26793
26846
  }), _void(), {
26794
26847
  kind: "mutation",
26795
- auth: "admin"
26848
+ auth: "protected"
26796
26849
  });
26797
26850
  var VehicleSchema = object({
26798
26851
  id: string(),
@@ -28579,7 +28632,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28579
28632
  on: boolean()
28580
28633
  }), _void(), {
28581
28634
  kind: "mutation",
28582
- auth: "admin"
28635
+ auth: "protected"
28583
28636
  }), object({
28584
28637
  deviceId: number(),
28585
28638
  on: boolean(),
@@ -29436,25 +29489,25 @@ object({
29436
29489
  });
29437
29490
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29438
29491
  kind: "mutation",
29439
- auth: "admin"
29492
+ auth: "protected"
29440
29493
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29441
29494
  kind: "mutation",
29442
- auth: "admin"
29495
+ auth: "protected"
29443
29496
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29444
29497
  kind: "mutation",
29445
- auth: "admin"
29498
+ auth: "protected"
29446
29499
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29447
29500
  kind: "mutation",
29448
- auth: "admin"
29501
+ auth: "protected"
29449
29502
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29450
29503
  kind: "mutation",
29451
- auth: "admin"
29504
+ auth: "protected"
29452
29505
  }), method(object({
29453
29506
  deviceId: number().int().nonnegative(),
29454
29507
  speed: string().min(1)
29455
29508
  }), _void(), {
29456
29509
  kind: "mutation",
29457
- auth: "admin"
29510
+ auth: "protected"
29458
29511
  });
29459
29512
  object({
29460
29513
  /** Lifecycle state of the valve. */
@@ -29473,19 +29526,19 @@ object({
29473
29526
  });
29474
29527
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29475
29528
  kind: "mutation",
29476
- auth: "admin"
29529
+ auth: "protected"
29477
29530
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29478
29531
  kind: "mutation",
29479
- auth: "admin"
29532
+ auth: "protected"
29480
29533
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29481
29534
  kind: "mutation",
29482
- auth: "admin"
29535
+ auth: "protected"
29483
29536
  }), method(object({
29484
29537
  deviceId: number().int().nonnegative(),
29485
29538
  position: number().min(0).max(100)
29486
29539
  }), _void(), {
29487
29540
  kind: "mutation",
29488
- auth: "admin"
29541
+ auth: "protected"
29489
29542
  });
29490
29543
  object({
29491
29544
  detected: boolean(),
@@ -29519,19 +29572,19 @@ DeviceType.WaterHeater, method(object({
29519
29572
  temp: number().finite()
29520
29573
  }), _void(), {
29521
29574
  kind: "mutation",
29522
- auth: "admin"
29575
+ auth: "protected"
29523
29576
  }), method(object({
29524
29577
  deviceId: number().int().nonnegative(),
29525
29578
  mode: string().min(1)
29526
29579
  }), _void(), {
29527
29580
  kind: "mutation",
29528
- auth: "admin"
29581
+ auth: "protected"
29529
29582
  }), method(object({
29530
29583
  deviceId: number().int().nonnegative(),
29531
29584
  on: boolean()
29532
29585
  }), _void(), {
29533
29586
  kind: "mutation",
29534
- auth: "admin"
29587
+ auth: "protected"
29535
29588
  });
29536
29589
  object({
29537
29590
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31623,6 +31676,12 @@ Object.freeze({
31623
31676
  addonId: null,
31624
31677
  access: "create"
31625
31678
  },
31679
+ "faceGallery.auditIdentitySamples": {
31680
+ capName: "face-gallery",
31681
+ capScope: "system",
31682
+ addonId: null,
31683
+ access: "view"
31684
+ },
31626
31685
  "faceGallery.createIdentity": {
31627
31686
  capName: "face-gallery",
31628
31687
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-mqtt-broker",
3
- "version": "1.2.84",
3
+ "version": "1.2.86",
4
4
  "description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
5
5
  "keywords": [
6
6
  "camstack",