@camstack/addon-export-alexa 1.2.90 → 1.2.92

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.
@@ -16106,16 +16106,16 @@ DeviceType.AlarmPanel, method(object({
16106
16106
  code: string().min(1).optional()
16107
16107
  }), _void(), {
16108
16108
  kind: "mutation",
16109
- auth: "admin"
16109
+ auth: "protected"
16110
16110
  }), method(object({
16111
16111
  deviceId: number().int().nonnegative(),
16112
16112
  code: string().min(1).optional()
16113
16113
  }), _void(), {
16114
16114
  kind: "mutation",
16115
- auth: "admin"
16115
+ auth: "protected"
16116
16116
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
16117
16117
  kind: "mutation",
16118
- auth: "admin"
16118
+ auth: "protected"
16119
16119
  });
16120
16120
  /**
16121
16121
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23786,7 +23786,7 @@ DeviceType.Light, method(object({
23786
23786
  percentage: number().min(0).max(100)
23787
23787
  }), _void(), {
23788
23788
  kind: "mutation",
23789
- auth: "admin"
23789
+ auth: "protected"
23790
23790
  }), object({
23791
23791
  deviceId: number(),
23792
23792
  percentage: number().min(0).max(100),
@@ -23794,7 +23794,7 @@ DeviceType.Light, method(object({
23794
23794
  });
23795
23795
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23796
23796
  kind: "mutation",
23797
- auth: "admin"
23797
+ auth: "protected"
23798
23798
  });
23799
23799
  /**
23800
23800
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23953,50 +23953,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23953
23953
  mode: HvacModeSchema
23954
23954
  }), _void(), {
23955
23955
  kind: "mutation",
23956
- auth: "admin"
23956
+ auth: "protected"
23957
23957
  }), method(object({
23958
23958
  deviceId: number().int().nonnegative(),
23959
23959
  fanMode: string().min(1)
23960
23960
  }), _void(), {
23961
23961
  kind: "mutation",
23962
- auth: "admin"
23962
+ auth: "protected"
23963
23963
  }), method(object({
23964
23964
  deviceId: number().int().nonnegative(),
23965
23965
  preset: string().min(1)
23966
23966
  }), _void(), {
23967
23967
  kind: "mutation",
23968
- auth: "admin"
23968
+ auth: "protected"
23969
23969
  }), method(object({
23970
23970
  deviceId: number().int().nonnegative(),
23971
23971
  target: number()
23972
23972
  }), _void(), {
23973
23973
  kind: "mutation",
23974
- auth: "admin"
23974
+ auth: "protected"
23975
23975
  }), method(object({
23976
23976
  deviceId: number().int().nonnegative(),
23977
23977
  targetLow: number(),
23978
23978
  targetHigh: number()
23979
23979
  }), _void(), {
23980
23980
  kind: "mutation",
23981
- auth: "admin"
23981
+ auth: "protected"
23982
23982
  }), method(object({
23983
23983
  deviceId: number().int().nonnegative(),
23984
23984
  targetHumidity: number().min(0).max(100)
23985
23985
  }), _void(), {
23986
23986
  kind: "mutation",
23987
- auth: "admin"
23987
+ auth: "protected"
23988
23988
  }), method(object({
23989
23989
  deviceId: number().int().nonnegative(),
23990
23990
  on: boolean()
23991
23991
  }), _void(), {
23992
23992
  kind: "mutation",
23993
- auth: "admin"
23993
+ auth: "protected"
23994
23994
  }), method(object({
23995
23995
  deviceId: number().int().nonnegative(),
23996
23996
  on: boolean()
23997
23997
  }), _void(), {
23998
23998
  kind: "mutation",
23999
- auth: "admin"
23999
+ auth: "protected"
24000
24000
  });
24001
24001
  /**
24002
24002
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -24071,7 +24071,7 @@ DeviceType.Light, method(object({
24071
24071
  color: ColorInputSchema
24072
24072
  }), _void(), {
24073
24073
  kind: "mutation",
24074
- auth: "admin"
24074
+ auth: "protected"
24075
24075
  }), object({
24076
24076
  deviceId: number(),
24077
24077
  mode: _enum([
@@ -24220,7 +24220,7 @@ DeviceType.Control, method(object({
24220
24220
  control: ControlSetValueInputSchema
24221
24221
  }), _void(), {
24222
24222
  kind: "mutation",
24223
- auth: "admin"
24223
+ auth: "protected"
24224
24224
  });
24225
24225
  object({
24226
24226
  /** Lifecycle state of the cover. */
@@ -24241,25 +24241,25 @@ object({
24241
24241
  });
24242
24242
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24243
24243
  kind: "mutation",
24244
- auth: "admin"
24244
+ auth: "protected"
24245
24245
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24246
24246
  kind: "mutation",
24247
- auth: "admin"
24247
+ auth: "protected"
24248
24248
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24249
24249
  kind: "mutation",
24250
- auth: "admin"
24250
+ auth: "protected"
24251
24251
  }), method(object({
24252
24252
  deviceId: number().int().nonnegative(),
24253
24253
  position: number().min(0).max(100)
24254
24254
  }), _void(), {
24255
24255
  kind: "mutation",
24256
- auth: "admin"
24256
+ auth: "protected"
24257
24257
  }), method(object({
24258
24258
  deviceId: number().int().nonnegative(),
24259
24259
  tiltPosition: number().min(0).max(100)
24260
24260
  }), _void(), {
24261
24261
  kind: "mutation",
24262
- auth: "admin"
24262
+ auth: "protected"
24263
24263
  });
24264
24264
  /**
24265
24265
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24464,6 +24464,59 @@ var IdentitySampleInfoSchema = object({
24464
24464
  deviceId: number().int().optional(),
24465
24465
  base64: string().optional()
24466
24466
  });
24467
+ /**
24468
+ * One enrolled sample, judged against the gallery it lives in.
24469
+ *
24470
+ * The gallery is the one input to recognition nobody re-reads: a sample
24471
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24472
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24473
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24474
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24475
+ * where every other cross-identity pair sits under 0.50.
24476
+ */
24477
+ var IdentitySampleAuditRowSchema = object({
24478
+ sampleId: string(),
24479
+ enrolledAt: number().int(),
24480
+ deviceId: number().int().optional(),
24481
+ source: _enum(["detected", "photo"]),
24482
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24483
+ mediaKey: string().optional(),
24484
+ /**
24485
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24486
+ * across feature spaces is a well-formed float with no meaning. Every number
24487
+ * below then says nothing — it must read as "cannot say", never as an
24488
+ * accusation and never as a clean bill: this list ends in a Remove button.
24489
+ */
24490
+ comparable: boolean(),
24491
+ /** Mean cosine against this person's other samples. Null when there are none
24492
+ * to compare with — never 0, which would read as "opposite". */
24493
+ selfMean: number().nullable(),
24494
+ /** The other person this sample looks most like, when it looks like one.
24495
+ * This is the half that convicts: not looking like yourself can be a hard
24496
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24497
+ bestForeign: object({
24498
+ identityId: string(),
24499
+ name: string(),
24500
+ score: number()
24501
+ }).optional(),
24502
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24503
+ suspicion: number()
24504
+ });
24505
+ var IdentitySampleAuditSchema = object({
24506
+ identityId: string(),
24507
+ name: string(),
24508
+ /** The cluster face model every comparison was made in. */
24509
+ modelId: string(),
24510
+ totalSamples: number().int(),
24511
+ comparableSamples: number().int(),
24512
+ flagged: number().int(),
24513
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24514
+ * only its current result. */
24515
+ flagThreshold: number(),
24516
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24517
+ * operator asked to see the gallery, not only its accusations. */
24518
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24519
+ });
24467
24520
  var FaceInfoSchema = object({
24468
24521
  faceId: string(),
24469
24522
  deviceId: number().int(),
@@ -24615,7 +24668,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24615
24668
  }), method(object({ id: string() }), _void(), {
24616
24669
  kind: "mutation",
24617
24670
  auth: "admin"
24618
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24671
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24619
24672
  identityId: string(),
24620
24673
  sampleId: string()
24621
24674
  }), _void(), {
@@ -24801,25 +24854,25 @@ DeviceType.Fan, method(object({
24801
24854
  percentage: number().min(0).max(100)
24802
24855
  }), _void(), {
24803
24856
  kind: "mutation",
24804
- auth: "admin"
24857
+ auth: "protected"
24805
24858
  }), method(object({
24806
24859
  deviceId: number().int().nonnegative(),
24807
24860
  preset: string().min(1)
24808
24861
  }), _void(), {
24809
24862
  kind: "mutation",
24810
- auth: "admin"
24863
+ auth: "protected"
24811
24864
  }), method(object({
24812
24865
  deviceId: number().int().nonnegative(),
24813
24866
  direction: FanDirectionSchema
24814
24867
  }), _void(), {
24815
24868
  kind: "mutation",
24816
- auth: "admin"
24869
+ auth: "protected"
24817
24870
  }), method(object({
24818
24871
  deviceId: number().int().nonnegative(),
24819
24872
  oscillating: boolean()
24820
24873
  }), _void(), {
24821
24874
  kind: "mutation",
24822
- auth: "admin"
24875
+ auth: "protected"
24823
24876
  });
24824
24877
  /**
24825
24878
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24922,19 +24975,19 @@ DeviceType.Humidifier, method(object({
24922
24975
  on: boolean()
24923
24976
  }), _void(), {
24924
24977
  kind: "mutation",
24925
- auth: "admin"
24978
+ auth: "protected"
24926
24979
  }), method(object({
24927
24980
  deviceId: number().int().nonnegative(),
24928
24981
  humidity: number().min(0).max(100)
24929
24982
  }), _void(), {
24930
24983
  kind: "mutation",
24931
- auth: "admin"
24984
+ auth: "protected"
24932
24985
  }), method(object({
24933
24986
  deviceId: number().int().nonnegative(),
24934
24987
  mode: string().min(1)
24935
24988
  }), _void(), {
24936
24989
  kind: "mutation",
24937
- auth: "admin"
24990
+ auth: "protected"
24938
24991
  });
24939
24992
  object({
24940
24993
  /** Current relative humidity, 0..100. */
@@ -25396,13 +25449,13 @@ object({
25396
25449
  });
25397
25450
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25398
25451
  kind: "mutation",
25399
- auth: "admin"
25452
+ auth: "protected"
25400
25453
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25401
25454
  kind: "mutation",
25402
- auth: "admin"
25455
+ auth: "protected"
25403
25456
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25404
25457
  kind: "mutation",
25405
- auth: "admin"
25458
+ auth: "protected"
25406
25459
  });
25407
25460
  /**
25408
25461
  * local-network — hub-only singleton.
@@ -25662,16 +25715,16 @@ DeviceType.Lock, method(object({
25662
25715
  code: string().min(1).optional()
25663
25716
  }), _void(), {
25664
25717
  kind: "mutation",
25665
- auth: "admin"
25718
+ auth: "protected"
25666
25719
  }), method(object({
25667
25720
  deviceId: number().int().nonnegative(),
25668
25721
  code: string().min(1).optional()
25669
25722
  }), _void(), {
25670
25723
  kind: "mutation",
25671
- auth: "admin"
25724
+ auth: "protected"
25672
25725
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25673
25726
  kind: "mutation",
25674
- auth: "admin"
25727
+ auth: "protected"
25675
25728
  });
25676
25729
  /**
25677
25730
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25745,55 +25798,55 @@ object({
25745
25798
  });
25746
25799
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25747
25800
  kind: "mutation",
25748
- auth: "admin"
25801
+ auth: "protected"
25749
25802
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25750
25803
  kind: "mutation",
25751
- auth: "admin"
25804
+ auth: "protected"
25752
25805
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25753
25806
  kind: "mutation",
25754
- auth: "admin"
25807
+ auth: "protected"
25755
25808
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25756
25809
  kind: "mutation",
25757
- auth: "admin"
25810
+ auth: "protected"
25758
25811
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25759
25812
  kind: "mutation",
25760
- auth: "admin"
25813
+ auth: "protected"
25761
25814
  }), method(object({
25762
25815
  deviceId: number().int().nonnegative(),
25763
25816
  positionMs: number().int().nonnegative()
25764
25817
  }), _void(), {
25765
25818
  kind: "mutation",
25766
- auth: "admin"
25819
+ auth: "protected"
25767
25820
  }), method(object({
25768
25821
  deviceId: number().int().nonnegative(),
25769
25822
  volumeLevel: number().min(0).max(100)
25770
25823
  }), _void(), {
25771
25824
  kind: "mutation",
25772
- auth: "admin"
25825
+ auth: "protected"
25773
25826
  }), method(object({
25774
25827
  deviceId: number().int().nonnegative(),
25775
25828
  muted: boolean()
25776
25829
  }), _void(), {
25777
25830
  kind: "mutation",
25778
- auth: "admin"
25831
+ auth: "protected"
25779
25832
  }), method(object({
25780
25833
  deviceId: number().int().nonnegative(),
25781
25834
  shuffle: boolean()
25782
25835
  }), _void(), {
25783
25836
  kind: "mutation",
25784
- auth: "admin"
25837
+ auth: "protected"
25785
25838
  }), method(object({
25786
25839
  deviceId: number().int().nonnegative(),
25787
25840
  repeat: MediaPlayerRepeatSchema
25788
25841
  }), _void(), {
25789
25842
  kind: "mutation",
25790
- auth: "admin"
25843
+ auth: "protected"
25791
25844
  }), method(object({
25792
25845
  deviceId: number().int().nonnegative(),
25793
25846
  source: string().min(1)
25794
25847
  }), _void(), {
25795
25848
  kind: "mutation",
25796
- auth: "admin"
25849
+ auth: "protected"
25797
25850
  }), method(object({
25798
25851
  deviceId: number().int().nonnegative(),
25799
25852
  /** Media identifier / URL. */
@@ -25803,7 +25856,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25803
25856
  mediaType: string().min(1)
25804
25857
  }), _void(), {
25805
25858
  kind: "mutation",
25806
- auth: "admin"
25859
+ auth: "protected"
25807
25860
  });
25808
25861
  /**
25809
25862
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26969,49 +27022,49 @@ DeviceType.PetFeeder, method(object({
26969
27022
  hopper2: gramsPortion.optional()
26970
27023
  }), _void(), {
26971
27024
  kind: "mutation",
26972
- auth: "admin"
27025
+ auth: "protected"
26973
27026
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26974
27027
  kind: "mutation",
26975
- auth: "admin"
27028
+ auth: "protected"
26976
27029
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26977
27030
  kind: "mutation",
26978
- auth: "admin"
27031
+ auth: "protected"
26979
27032
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26980
27033
  kind: "mutation",
26981
- auth: "admin"
27034
+ auth: "protected"
26982
27035
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26983
27036
  kind: "mutation",
26984
- auth: "admin"
27037
+ auth: "protected"
26985
27038
  }), method(object({
26986
27039
  deviceId: number().int().nonnegative(),
26987
27040
  soundId: number().int().nonnegative()
26988
27041
  }), _void(), {
26989
27042
  kind: "mutation",
26990
- auth: "admin"
27043
+ auth: "protected"
26991
27044
  }), method(object({
26992
27045
  deviceId: number().int().nonnegative(),
26993
27046
  on: boolean()
26994
27047
  }), _void(), {
26995
27048
  kind: "mutation",
26996
- auth: "admin"
27049
+ auth: "protected"
26997
27050
  }), method(object({
26998
27051
  deviceId: number().int().nonnegative(),
26999
27052
  on: boolean()
27000
27053
  }), _void(), {
27001
27054
  kind: "mutation",
27002
- auth: "admin"
27055
+ auth: "protected"
27003
27056
  }), method(object({
27004
27057
  deviceId: number().int().nonnegative(),
27005
27058
  on: boolean()
27006
27059
  }), _void(), {
27007
27060
  kind: "mutation",
27008
- auth: "admin"
27061
+ auth: "protected"
27009
27062
  }), method(object({
27010
27063
  deviceId: number().int().nonnegative(),
27011
27064
  level: number().int().nonnegative()
27012
27065
  }), _void(), {
27013
27066
  kind: "mutation",
27014
- auth: "admin"
27067
+ auth: "protected"
27015
27068
  });
27016
27069
  var VehicleSchema = object({
27017
27070
  id: string(),
@@ -28798,7 +28851,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28798
28851
  on: boolean()
28799
28852
  }), _void(), {
28800
28853
  kind: "mutation",
28801
- auth: "admin"
28854
+ auth: "protected"
28802
28855
  }), object({
28803
28856
  deviceId: number(),
28804
28857
  on: boolean(),
@@ -29655,25 +29708,25 @@ object({
29655
29708
  });
29656
29709
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29657
29710
  kind: "mutation",
29658
- auth: "admin"
29711
+ auth: "protected"
29659
29712
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29660
29713
  kind: "mutation",
29661
- auth: "admin"
29714
+ auth: "protected"
29662
29715
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29663
29716
  kind: "mutation",
29664
- auth: "admin"
29717
+ auth: "protected"
29665
29718
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29666
29719
  kind: "mutation",
29667
- auth: "admin"
29720
+ auth: "protected"
29668
29721
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29669
29722
  kind: "mutation",
29670
- auth: "admin"
29723
+ auth: "protected"
29671
29724
  }), method(object({
29672
29725
  deviceId: number().int().nonnegative(),
29673
29726
  speed: string().min(1)
29674
29727
  }), _void(), {
29675
29728
  kind: "mutation",
29676
- auth: "admin"
29729
+ auth: "protected"
29677
29730
  });
29678
29731
  object({
29679
29732
  /** Lifecycle state of the valve. */
@@ -29692,19 +29745,19 @@ object({
29692
29745
  });
29693
29746
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29694
29747
  kind: "mutation",
29695
- auth: "admin"
29748
+ auth: "protected"
29696
29749
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29697
29750
  kind: "mutation",
29698
- auth: "admin"
29751
+ auth: "protected"
29699
29752
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29700
29753
  kind: "mutation",
29701
- auth: "admin"
29754
+ auth: "protected"
29702
29755
  }), method(object({
29703
29756
  deviceId: number().int().nonnegative(),
29704
29757
  position: number().min(0).max(100)
29705
29758
  }), _void(), {
29706
29759
  kind: "mutation",
29707
- auth: "admin"
29760
+ auth: "protected"
29708
29761
  });
29709
29762
  object({
29710
29763
  detected: boolean(),
@@ -29738,19 +29791,19 @@ DeviceType.WaterHeater, method(object({
29738
29791
  temp: number().finite()
29739
29792
  }), _void(), {
29740
29793
  kind: "mutation",
29741
- auth: "admin"
29794
+ auth: "protected"
29742
29795
  }), method(object({
29743
29796
  deviceId: number().int().nonnegative(),
29744
29797
  mode: string().min(1)
29745
29798
  }), _void(), {
29746
29799
  kind: "mutation",
29747
- auth: "admin"
29800
+ auth: "protected"
29748
29801
  }), method(object({
29749
29802
  deviceId: number().int().nonnegative(),
29750
29803
  on: boolean()
29751
29804
  }), _void(), {
29752
29805
  kind: "mutation",
29753
- auth: "admin"
29806
+ auth: "protected"
29754
29807
  });
29755
29808
  object({
29756
29809
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31842,6 +31895,12 @@ Object.freeze({
31842
31895
  addonId: null,
31843
31896
  access: "create"
31844
31897
  },
31898
+ "faceGallery.auditIdentitySamples": {
31899
+ capName: "face-gallery",
31900
+ capScope: "system",
31901
+ addonId: null,
31902
+ access: "view"
31903
+ },
31845
31904
  "faceGallery.createIdentity": {
31846
31905
  capName: "face-gallery",
31847
31906
  capScope: "system",
@@ -16079,16 +16079,16 @@ DeviceType.AlarmPanel, method(object({
16079
16079
  code: string().min(1).optional()
16080
16080
  }), _void(), {
16081
16081
  kind: "mutation",
16082
- auth: "admin"
16082
+ auth: "protected"
16083
16083
  }), method(object({
16084
16084
  deviceId: number().int().nonnegative(),
16085
16085
  code: string().min(1).optional()
16086
16086
  }), _void(), {
16087
16087
  kind: "mutation",
16088
- auth: "admin"
16088
+ auth: "protected"
16089
16089
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
16090
16090
  kind: "mutation",
16091
- auth: "admin"
16091
+ auth: "protected"
16092
16092
  });
16093
16093
  /**
16094
16094
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23759,7 +23759,7 @@ DeviceType.Light, method(object({
23759
23759
  percentage: number().min(0).max(100)
23760
23760
  }), _void(), {
23761
23761
  kind: "mutation",
23762
- auth: "admin"
23762
+ auth: "protected"
23763
23763
  }), object({
23764
23764
  deviceId: number(),
23765
23765
  percentage: number().min(0).max(100),
@@ -23767,7 +23767,7 @@ DeviceType.Light, method(object({
23767
23767
  });
23768
23768
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23769
23769
  kind: "mutation",
23770
- auth: "admin"
23770
+ auth: "protected"
23771
23771
  });
23772
23772
  /**
23773
23773
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23926,50 +23926,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23926
23926
  mode: HvacModeSchema
23927
23927
  }), _void(), {
23928
23928
  kind: "mutation",
23929
- auth: "admin"
23929
+ auth: "protected"
23930
23930
  }), method(object({
23931
23931
  deviceId: number().int().nonnegative(),
23932
23932
  fanMode: string().min(1)
23933
23933
  }), _void(), {
23934
23934
  kind: "mutation",
23935
- auth: "admin"
23935
+ auth: "protected"
23936
23936
  }), method(object({
23937
23937
  deviceId: number().int().nonnegative(),
23938
23938
  preset: string().min(1)
23939
23939
  }), _void(), {
23940
23940
  kind: "mutation",
23941
- auth: "admin"
23941
+ auth: "protected"
23942
23942
  }), method(object({
23943
23943
  deviceId: number().int().nonnegative(),
23944
23944
  target: number()
23945
23945
  }), _void(), {
23946
23946
  kind: "mutation",
23947
- auth: "admin"
23947
+ auth: "protected"
23948
23948
  }), method(object({
23949
23949
  deviceId: number().int().nonnegative(),
23950
23950
  targetLow: number(),
23951
23951
  targetHigh: number()
23952
23952
  }), _void(), {
23953
23953
  kind: "mutation",
23954
- auth: "admin"
23954
+ auth: "protected"
23955
23955
  }), method(object({
23956
23956
  deviceId: number().int().nonnegative(),
23957
23957
  targetHumidity: number().min(0).max(100)
23958
23958
  }), _void(), {
23959
23959
  kind: "mutation",
23960
- auth: "admin"
23960
+ auth: "protected"
23961
23961
  }), method(object({
23962
23962
  deviceId: number().int().nonnegative(),
23963
23963
  on: boolean()
23964
23964
  }), _void(), {
23965
23965
  kind: "mutation",
23966
- auth: "admin"
23966
+ auth: "protected"
23967
23967
  }), method(object({
23968
23968
  deviceId: number().int().nonnegative(),
23969
23969
  on: boolean()
23970
23970
  }), _void(), {
23971
23971
  kind: "mutation",
23972
- auth: "admin"
23972
+ auth: "protected"
23973
23973
  });
23974
23974
  /**
23975
23975
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -24044,7 +24044,7 @@ DeviceType.Light, method(object({
24044
24044
  color: ColorInputSchema
24045
24045
  }), _void(), {
24046
24046
  kind: "mutation",
24047
- auth: "admin"
24047
+ auth: "protected"
24048
24048
  }), object({
24049
24049
  deviceId: number(),
24050
24050
  mode: _enum([
@@ -24193,7 +24193,7 @@ DeviceType.Control, method(object({
24193
24193
  control: ControlSetValueInputSchema
24194
24194
  }), _void(), {
24195
24195
  kind: "mutation",
24196
- auth: "admin"
24196
+ auth: "protected"
24197
24197
  });
24198
24198
  object({
24199
24199
  /** Lifecycle state of the cover. */
@@ -24214,25 +24214,25 @@ object({
24214
24214
  });
24215
24215
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24216
24216
  kind: "mutation",
24217
- auth: "admin"
24217
+ auth: "protected"
24218
24218
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24219
24219
  kind: "mutation",
24220
- auth: "admin"
24220
+ auth: "protected"
24221
24221
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24222
24222
  kind: "mutation",
24223
- auth: "admin"
24223
+ auth: "protected"
24224
24224
  }), method(object({
24225
24225
  deviceId: number().int().nonnegative(),
24226
24226
  position: number().min(0).max(100)
24227
24227
  }), _void(), {
24228
24228
  kind: "mutation",
24229
- auth: "admin"
24229
+ auth: "protected"
24230
24230
  }), method(object({
24231
24231
  deviceId: number().int().nonnegative(),
24232
24232
  tiltPosition: number().min(0).max(100)
24233
24233
  }), _void(), {
24234
24234
  kind: "mutation",
24235
- auth: "admin"
24235
+ auth: "protected"
24236
24236
  });
24237
24237
  /**
24238
24238
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24437,6 +24437,59 @@ var IdentitySampleInfoSchema = object({
24437
24437
  deviceId: number().int().optional(),
24438
24438
  base64: string().optional()
24439
24439
  });
24440
+ /**
24441
+ * One enrolled sample, judged against the gallery it lives in.
24442
+ *
24443
+ * The gallery is the one input to recognition nobody re-reads: a sample
24444
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24445
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24446
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24447
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24448
+ * where every other cross-identity pair sits under 0.50.
24449
+ */
24450
+ var IdentitySampleAuditRowSchema = object({
24451
+ sampleId: string(),
24452
+ enrolledAt: number().int(),
24453
+ deviceId: number().int().optional(),
24454
+ source: _enum(["detected", "photo"]),
24455
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24456
+ mediaKey: string().optional(),
24457
+ /**
24458
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24459
+ * across feature spaces is a well-formed float with no meaning. Every number
24460
+ * below then says nothing — it must read as "cannot say", never as an
24461
+ * accusation and never as a clean bill: this list ends in a Remove button.
24462
+ */
24463
+ comparable: boolean(),
24464
+ /** Mean cosine against this person's other samples. Null when there are none
24465
+ * to compare with — never 0, which would read as "opposite". */
24466
+ selfMean: number().nullable(),
24467
+ /** The other person this sample looks most like, when it looks like one.
24468
+ * This is the half that convicts: not looking like yourself can be a hard
24469
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24470
+ bestForeign: object({
24471
+ identityId: string(),
24472
+ name: string(),
24473
+ score: number()
24474
+ }).optional(),
24475
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24476
+ suspicion: number()
24477
+ });
24478
+ var IdentitySampleAuditSchema = object({
24479
+ identityId: string(),
24480
+ name: string(),
24481
+ /** The cluster face model every comparison was made in. */
24482
+ modelId: string(),
24483
+ totalSamples: number().int(),
24484
+ comparableSamples: number().int(),
24485
+ flagged: number().int(),
24486
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24487
+ * only its current result. */
24488
+ flagThreshold: number(),
24489
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24490
+ * operator asked to see the gallery, not only its accusations. */
24491
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24492
+ });
24440
24493
  var FaceInfoSchema = object({
24441
24494
  faceId: string(),
24442
24495
  deviceId: number().int(),
@@ -24588,7 +24641,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24588
24641
  }), method(object({ id: string() }), _void(), {
24589
24642
  kind: "mutation",
24590
24643
  auth: "admin"
24591
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24644
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24592
24645
  identityId: string(),
24593
24646
  sampleId: string()
24594
24647
  }), _void(), {
@@ -24774,25 +24827,25 @@ DeviceType.Fan, method(object({
24774
24827
  percentage: number().min(0).max(100)
24775
24828
  }), _void(), {
24776
24829
  kind: "mutation",
24777
- auth: "admin"
24830
+ auth: "protected"
24778
24831
  }), method(object({
24779
24832
  deviceId: number().int().nonnegative(),
24780
24833
  preset: string().min(1)
24781
24834
  }), _void(), {
24782
24835
  kind: "mutation",
24783
- auth: "admin"
24836
+ auth: "protected"
24784
24837
  }), method(object({
24785
24838
  deviceId: number().int().nonnegative(),
24786
24839
  direction: FanDirectionSchema
24787
24840
  }), _void(), {
24788
24841
  kind: "mutation",
24789
- auth: "admin"
24842
+ auth: "protected"
24790
24843
  }), method(object({
24791
24844
  deviceId: number().int().nonnegative(),
24792
24845
  oscillating: boolean()
24793
24846
  }), _void(), {
24794
24847
  kind: "mutation",
24795
- auth: "admin"
24848
+ auth: "protected"
24796
24849
  });
24797
24850
  /**
24798
24851
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24895,19 +24948,19 @@ DeviceType.Humidifier, method(object({
24895
24948
  on: boolean()
24896
24949
  }), _void(), {
24897
24950
  kind: "mutation",
24898
- auth: "admin"
24951
+ auth: "protected"
24899
24952
  }), method(object({
24900
24953
  deviceId: number().int().nonnegative(),
24901
24954
  humidity: number().min(0).max(100)
24902
24955
  }), _void(), {
24903
24956
  kind: "mutation",
24904
- auth: "admin"
24957
+ auth: "protected"
24905
24958
  }), method(object({
24906
24959
  deviceId: number().int().nonnegative(),
24907
24960
  mode: string().min(1)
24908
24961
  }), _void(), {
24909
24962
  kind: "mutation",
24910
- auth: "admin"
24963
+ auth: "protected"
24911
24964
  });
24912
24965
  object({
24913
24966
  /** Current relative humidity, 0..100. */
@@ -25369,13 +25422,13 @@ object({
25369
25422
  });
25370
25423
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25371
25424
  kind: "mutation",
25372
- auth: "admin"
25425
+ auth: "protected"
25373
25426
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25374
25427
  kind: "mutation",
25375
- auth: "admin"
25428
+ auth: "protected"
25376
25429
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25377
25430
  kind: "mutation",
25378
- auth: "admin"
25431
+ auth: "protected"
25379
25432
  });
25380
25433
  /**
25381
25434
  * local-network — hub-only singleton.
@@ -25635,16 +25688,16 @@ DeviceType.Lock, method(object({
25635
25688
  code: string().min(1).optional()
25636
25689
  }), _void(), {
25637
25690
  kind: "mutation",
25638
- auth: "admin"
25691
+ auth: "protected"
25639
25692
  }), method(object({
25640
25693
  deviceId: number().int().nonnegative(),
25641
25694
  code: string().min(1).optional()
25642
25695
  }), _void(), {
25643
25696
  kind: "mutation",
25644
- auth: "admin"
25697
+ auth: "protected"
25645
25698
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25646
25699
  kind: "mutation",
25647
- auth: "admin"
25700
+ auth: "protected"
25648
25701
  });
25649
25702
  /**
25650
25703
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25718,55 +25771,55 @@ object({
25718
25771
  });
25719
25772
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25720
25773
  kind: "mutation",
25721
- auth: "admin"
25774
+ auth: "protected"
25722
25775
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25723
25776
  kind: "mutation",
25724
- auth: "admin"
25777
+ auth: "protected"
25725
25778
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25726
25779
  kind: "mutation",
25727
- auth: "admin"
25780
+ auth: "protected"
25728
25781
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25729
25782
  kind: "mutation",
25730
- auth: "admin"
25783
+ auth: "protected"
25731
25784
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25732
25785
  kind: "mutation",
25733
- auth: "admin"
25786
+ auth: "protected"
25734
25787
  }), method(object({
25735
25788
  deviceId: number().int().nonnegative(),
25736
25789
  positionMs: number().int().nonnegative()
25737
25790
  }), _void(), {
25738
25791
  kind: "mutation",
25739
- auth: "admin"
25792
+ auth: "protected"
25740
25793
  }), method(object({
25741
25794
  deviceId: number().int().nonnegative(),
25742
25795
  volumeLevel: number().min(0).max(100)
25743
25796
  }), _void(), {
25744
25797
  kind: "mutation",
25745
- auth: "admin"
25798
+ auth: "protected"
25746
25799
  }), method(object({
25747
25800
  deviceId: number().int().nonnegative(),
25748
25801
  muted: boolean()
25749
25802
  }), _void(), {
25750
25803
  kind: "mutation",
25751
- auth: "admin"
25804
+ auth: "protected"
25752
25805
  }), method(object({
25753
25806
  deviceId: number().int().nonnegative(),
25754
25807
  shuffle: boolean()
25755
25808
  }), _void(), {
25756
25809
  kind: "mutation",
25757
- auth: "admin"
25810
+ auth: "protected"
25758
25811
  }), method(object({
25759
25812
  deviceId: number().int().nonnegative(),
25760
25813
  repeat: MediaPlayerRepeatSchema
25761
25814
  }), _void(), {
25762
25815
  kind: "mutation",
25763
- auth: "admin"
25816
+ auth: "protected"
25764
25817
  }), method(object({
25765
25818
  deviceId: number().int().nonnegative(),
25766
25819
  source: string().min(1)
25767
25820
  }), _void(), {
25768
25821
  kind: "mutation",
25769
- auth: "admin"
25822
+ auth: "protected"
25770
25823
  }), method(object({
25771
25824
  deviceId: number().int().nonnegative(),
25772
25825
  /** Media identifier / URL. */
@@ -25776,7 +25829,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25776
25829
  mediaType: string().min(1)
25777
25830
  }), _void(), {
25778
25831
  kind: "mutation",
25779
- auth: "admin"
25832
+ auth: "protected"
25780
25833
  });
25781
25834
  /**
25782
25835
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26942,49 +26995,49 @@ DeviceType.PetFeeder, method(object({
26942
26995
  hopper2: gramsPortion.optional()
26943
26996
  }), _void(), {
26944
26997
  kind: "mutation",
26945
- auth: "admin"
26998
+ auth: "protected"
26946
26999
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26947
27000
  kind: "mutation",
26948
- auth: "admin"
27001
+ auth: "protected"
26949
27002
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26950
27003
  kind: "mutation",
26951
- auth: "admin"
27004
+ auth: "protected"
26952
27005
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26953
27006
  kind: "mutation",
26954
- auth: "admin"
27007
+ auth: "protected"
26955
27008
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26956
27009
  kind: "mutation",
26957
- auth: "admin"
27010
+ auth: "protected"
26958
27011
  }), method(object({
26959
27012
  deviceId: number().int().nonnegative(),
26960
27013
  soundId: number().int().nonnegative()
26961
27014
  }), _void(), {
26962
27015
  kind: "mutation",
26963
- auth: "admin"
27016
+ auth: "protected"
26964
27017
  }), method(object({
26965
27018
  deviceId: number().int().nonnegative(),
26966
27019
  on: boolean()
26967
27020
  }), _void(), {
26968
27021
  kind: "mutation",
26969
- auth: "admin"
27022
+ auth: "protected"
26970
27023
  }), method(object({
26971
27024
  deviceId: number().int().nonnegative(),
26972
27025
  on: boolean()
26973
27026
  }), _void(), {
26974
27027
  kind: "mutation",
26975
- auth: "admin"
27028
+ auth: "protected"
26976
27029
  }), method(object({
26977
27030
  deviceId: number().int().nonnegative(),
26978
27031
  on: boolean()
26979
27032
  }), _void(), {
26980
27033
  kind: "mutation",
26981
- auth: "admin"
27034
+ auth: "protected"
26982
27035
  }), method(object({
26983
27036
  deviceId: number().int().nonnegative(),
26984
27037
  level: number().int().nonnegative()
26985
27038
  }), _void(), {
26986
27039
  kind: "mutation",
26987
- auth: "admin"
27040
+ auth: "protected"
26988
27041
  });
26989
27042
  var VehicleSchema = object({
26990
27043
  id: string(),
@@ -28771,7 +28824,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28771
28824
  on: boolean()
28772
28825
  }), _void(), {
28773
28826
  kind: "mutation",
28774
- auth: "admin"
28827
+ auth: "protected"
28775
28828
  }), object({
28776
28829
  deviceId: number(),
28777
28830
  on: boolean(),
@@ -29628,25 +29681,25 @@ object({
29628
29681
  });
29629
29682
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29630
29683
  kind: "mutation",
29631
- auth: "admin"
29684
+ auth: "protected"
29632
29685
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29633
29686
  kind: "mutation",
29634
- auth: "admin"
29687
+ auth: "protected"
29635
29688
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29636
29689
  kind: "mutation",
29637
- auth: "admin"
29690
+ auth: "protected"
29638
29691
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29639
29692
  kind: "mutation",
29640
- auth: "admin"
29693
+ auth: "protected"
29641
29694
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29642
29695
  kind: "mutation",
29643
- auth: "admin"
29696
+ auth: "protected"
29644
29697
  }), method(object({
29645
29698
  deviceId: number().int().nonnegative(),
29646
29699
  speed: string().min(1)
29647
29700
  }), _void(), {
29648
29701
  kind: "mutation",
29649
- auth: "admin"
29702
+ auth: "protected"
29650
29703
  });
29651
29704
  object({
29652
29705
  /** Lifecycle state of the valve. */
@@ -29665,19 +29718,19 @@ object({
29665
29718
  });
29666
29719
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29667
29720
  kind: "mutation",
29668
- auth: "admin"
29721
+ auth: "protected"
29669
29722
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29670
29723
  kind: "mutation",
29671
- auth: "admin"
29724
+ auth: "protected"
29672
29725
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29673
29726
  kind: "mutation",
29674
- auth: "admin"
29727
+ auth: "protected"
29675
29728
  }), method(object({
29676
29729
  deviceId: number().int().nonnegative(),
29677
29730
  position: number().min(0).max(100)
29678
29731
  }), _void(), {
29679
29732
  kind: "mutation",
29680
- auth: "admin"
29733
+ auth: "protected"
29681
29734
  });
29682
29735
  object({
29683
29736
  detected: boolean(),
@@ -29711,19 +29764,19 @@ DeviceType.WaterHeater, method(object({
29711
29764
  temp: number().finite()
29712
29765
  }), _void(), {
29713
29766
  kind: "mutation",
29714
- auth: "admin"
29767
+ auth: "protected"
29715
29768
  }), method(object({
29716
29769
  deviceId: number().int().nonnegative(),
29717
29770
  mode: string().min(1)
29718
29771
  }), _void(), {
29719
29772
  kind: "mutation",
29720
- auth: "admin"
29773
+ auth: "protected"
29721
29774
  }), method(object({
29722
29775
  deviceId: number().int().nonnegative(),
29723
29776
  on: boolean()
29724
29777
  }), _void(), {
29725
29778
  kind: "mutation",
29726
- auth: "admin"
29779
+ auth: "protected"
29727
29780
  });
29728
29781
  object({
29729
29782
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31815,6 +31868,12 @@ Object.freeze({
31815
31868
  addonId: null,
31816
31869
  access: "create"
31817
31870
  },
31871
+ "faceGallery.auditIdentitySamples": {
31872
+ capName: "face-gallery",
31873
+ capScope: "system",
31874
+ addonId: null,
31875
+ access: "view"
31876
+ },
31818
31877
  "faceGallery.createIdentity": {
31819
31878
  capName: "face-gallery",
31820
31879
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.2.90",
3
+ "version": "1.2.92",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",