@camstack/addon-provider-homematic 1.2.85 → 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.
package/dist/addon.js CHANGED
@@ -25326,6 +25326,59 @@ var IdentitySampleInfoSchema = object({
25326
25326
  deviceId: number().int().optional(),
25327
25327
  base64: string().optional()
25328
25328
  });
25329
+ /**
25330
+ * One enrolled sample, judged against the gallery it lives in.
25331
+ *
25332
+ * The gallery is the one input to recognition nobody re-reads: a sample
25333
+ * enrolled from the wrong face keeps voting forever, and because the matches it
25334
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
25335
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
25336
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
25337
+ * where every other cross-identity pair sits under 0.50.
25338
+ */
25339
+ var IdentitySampleAuditRowSchema = object({
25340
+ sampleId: string(),
25341
+ enrolledAt: number().int(),
25342
+ deviceId: number().int().optional(),
25343
+ source: _enum(["detected", "photo"]),
25344
+ /** The enrolled crop's media key, so the panel can show the evidence. */
25345
+ mediaKey: string().optional(),
25346
+ /**
25347
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
25348
+ * across feature spaces is a well-formed float with no meaning. Every number
25349
+ * below then says nothing — it must read as "cannot say", never as an
25350
+ * accusation and never as a clean bill: this list ends in a Remove button.
25351
+ */
25352
+ comparable: boolean(),
25353
+ /** Mean cosine against this person's other samples. Null when there are none
25354
+ * to compare with — never 0, which would read as "opposite". */
25355
+ selfMean: number().nullable(),
25356
+ /** The other person this sample looks most like, when it looks like one.
25357
+ * This is the half that convicts: not looking like yourself can be a hard
25358
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
25359
+ bestForeign: object({
25360
+ identityId: string(),
25361
+ name: string(),
25362
+ score: number()
25363
+ }).optional(),
25364
+ /** 0 = nothing to say. Higher = look at this one sooner. */
25365
+ suspicion: number()
25366
+ });
25367
+ var IdentitySampleAuditSchema = object({
25368
+ identityId: string(),
25369
+ name: string(),
25370
+ /** The cluster face model every comparison was made in. */
25371
+ modelId: string(),
25372
+ totalSamples: number().int(),
25373
+ comparableSamples: number().int(),
25374
+ flagged: number().int(),
25375
+ /** The bar `flagged` counts against, so the panel states the RULE and not
25376
+ * only its current result. */
25377
+ flagThreshold: number(),
25378
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
25379
+ * operator asked to see the gallery, not only its accusations. */
25380
+ rows: array(IdentitySampleAuditRowSchema).readonly()
25381
+ });
25329
25382
  var FaceInfoSchema = object({
25330
25383
  faceId: string(),
25331
25384
  deviceId: number().int(),
@@ -25477,7 +25530,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
25477
25530
  }), method(object({ id: string() }), _void(), {
25478
25531
  kind: "mutation",
25479
25532
  auth: "admin"
25480
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
25533
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
25481
25534
  identityId: string(),
25482
25535
  sampleId: string()
25483
25536
  }), _void(), {
@@ -35970,6 +36023,12 @@ Object.freeze({
35970
36023
  addonId: null,
35971
36024
  access: "create"
35972
36025
  },
36026
+ "faceGallery.auditIdentitySamples": {
36027
+ capName: "face-gallery",
36028
+ capScope: "system",
36029
+ addonId: null,
36030
+ access: "view"
36031
+ },
35973
36032
  "faceGallery.createIdentity": {
35974
36033
  capName: "face-gallery",
35975
36034
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -25327,6 +25327,59 @@ var IdentitySampleInfoSchema = object({
25327
25327
  deviceId: number().int().optional(),
25328
25328
  base64: string().optional()
25329
25329
  });
25330
+ /**
25331
+ * One enrolled sample, judged against the gallery it lives in.
25332
+ *
25333
+ * The gallery is the one input to recognition nobody re-reads: a sample
25334
+ * enrolled from the wrong face keeps voting forever, and because the matches it
25335
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
25336
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
25337
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
25338
+ * where every other cross-identity pair sits under 0.50.
25339
+ */
25340
+ var IdentitySampleAuditRowSchema = object({
25341
+ sampleId: string(),
25342
+ enrolledAt: number().int(),
25343
+ deviceId: number().int().optional(),
25344
+ source: _enum(["detected", "photo"]),
25345
+ /** The enrolled crop's media key, so the panel can show the evidence. */
25346
+ mediaKey: string().optional(),
25347
+ /**
25348
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
25349
+ * across feature spaces is a well-formed float with no meaning. Every number
25350
+ * below then says nothing — it must read as "cannot say", never as an
25351
+ * accusation and never as a clean bill: this list ends in a Remove button.
25352
+ */
25353
+ comparable: boolean(),
25354
+ /** Mean cosine against this person's other samples. Null when there are none
25355
+ * to compare with — never 0, which would read as "opposite". */
25356
+ selfMean: number().nullable(),
25357
+ /** The other person this sample looks most like, when it looks like one.
25358
+ * This is the half that convicts: not looking like yourself can be a hard
25359
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
25360
+ bestForeign: object({
25361
+ identityId: string(),
25362
+ name: string(),
25363
+ score: number()
25364
+ }).optional(),
25365
+ /** 0 = nothing to say. Higher = look at this one sooner. */
25366
+ suspicion: number()
25367
+ });
25368
+ var IdentitySampleAuditSchema = object({
25369
+ identityId: string(),
25370
+ name: string(),
25371
+ /** The cluster face model every comparison was made in. */
25372
+ modelId: string(),
25373
+ totalSamples: number().int(),
25374
+ comparableSamples: number().int(),
25375
+ flagged: number().int(),
25376
+ /** The bar `flagged` counts against, so the panel states the RULE and not
25377
+ * only its current result. */
25378
+ flagThreshold: number(),
25379
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
25380
+ * operator asked to see the gallery, not only its accusations. */
25381
+ rows: array(IdentitySampleAuditRowSchema).readonly()
25382
+ });
25330
25383
  var FaceInfoSchema = object({
25331
25384
  faceId: string(),
25332
25385
  deviceId: number().int(),
@@ -25478,7 +25531,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
25478
25531
  }), method(object({ id: string() }), _void(), {
25479
25532
  kind: "mutation",
25480
25533
  auth: "admin"
25481
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
25534
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
25482
25535
  identityId: string(),
25483
25536
  sampleId: string()
25484
25537
  }), _void(), {
@@ -35971,6 +36024,12 @@ Object.freeze({
35971
36024
  addonId: null,
35972
36025
  access: "create"
35973
36026
  },
36027
+ "faceGallery.auditIdentitySamples": {
36028
+ capName: "face-gallery",
36029
+ capScope: "system",
36030
+ addonId: null,
36031
+ access: "view"
36032
+ },
35974
36033
  "faceGallery.createIdentity": {
35975
36034
  capName: "face-gallery",
35976
36035
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homematic",
3
- "version": "1.2.85",
3
+ "version": "1.2.86",
4
4
  "description": "Homematic / HomematicIP (CCU3 / RaspberryMatic) device-provider addon for CamStack — wraps the nodehomematic library",
5
5
  "keywords": [
6
6
  "camstack",