@camstack/addon-provider-dreame 0.2.84 → 0.2.85

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
@@ -77966,6 +77966,59 @@ var IdentitySampleInfoSchema = object({
77966
77966
  deviceId: number().int().optional(),
77967
77967
  base64: string().optional()
77968
77968
  });
77969
+ /**
77970
+ * One enrolled sample, judged against the gallery it lives in.
77971
+ *
77972
+ * The gallery is the one input to recognition nobody re-reads: a sample
77973
+ * enrolled from the wrong face keeps voting forever, and because the matches it
77974
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
77975
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
77976
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
77977
+ * where every other cross-identity pair sits under 0.50.
77978
+ */
77979
+ var IdentitySampleAuditRowSchema = object({
77980
+ sampleId: string(),
77981
+ enrolledAt: number().int(),
77982
+ deviceId: number().int().optional(),
77983
+ source: _enum(["detected", "photo"]),
77984
+ /** The enrolled crop's media key, so the panel can show the evidence. */
77985
+ mediaKey: string().optional(),
77986
+ /**
77987
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
77988
+ * across feature spaces is a well-formed float with no meaning. Every number
77989
+ * below then says nothing — it must read as "cannot say", never as an
77990
+ * accusation and never as a clean bill: this list ends in a Remove button.
77991
+ */
77992
+ comparable: boolean(),
77993
+ /** Mean cosine against this person's other samples. Null when there are none
77994
+ * to compare with — never 0, which would read as "opposite". */
77995
+ selfMean: number().nullable(),
77996
+ /** The other person this sample looks most like, when it looks like one.
77997
+ * This is the half that convicts: not looking like yourself can be a hard
77998
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
77999
+ bestForeign: object({
78000
+ identityId: string(),
78001
+ name: string(),
78002
+ score: number()
78003
+ }).optional(),
78004
+ /** 0 = nothing to say. Higher = look at this one sooner. */
78005
+ suspicion: number()
78006
+ });
78007
+ var IdentitySampleAuditSchema = object({
78008
+ identityId: string(),
78009
+ name: string(),
78010
+ /** The cluster face model every comparison was made in. */
78011
+ modelId: string(),
78012
+ totalSamples: number().int(),
78013
+ comparableSamples: number().int(),
78014
+ flagged: number().int(),
78015
+ /** The bar `flagged` counts against, so the panel states the RULE and not
78016
+ * only its current result. */
78017
+ flagThreshold: number(),
78018
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
78019
+ * operator asked to see the gallery, not only its accusations. */
78020
+ rows: array(IdentitySampleAuditRowSchema).readonly()
78021
+ });
77969
78022
  var FaceInfoSchema = object({
77970
78023
  faceId: string(),
77971
78024
  deviceId: number().int(),
@@ -78117,7 +78170,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
78117
78170
  }), method(object({ id: string() }), _void(), {
78118
78171
  kind: "mutation",
78119
78172
  auth: "admin"
78120
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
78173
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
78121
78174
  identityId: string(),
78122
78175
  sampleId: string()
78123
78176
  }), _void(), {
@@ -88758,6 +88811,12 @@ Object.freeze({
88758
88811
  addonId: null,
88759
88812
  access: "create"
88760
88813
  },
88814
+ "faceGallery.auditIdentitySamples": {
88815
+ capName: "face-gallery",
88816
+ capScope: "system",
88817
+ addonId: null,
88818
+ access: "view"
88819
+ },
88761
88820
  "faceGallery.createIdentity": {
88762
88821
  capName: "face-gallery",
88763
88822
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -77963,6 +77963,59 @@ var IdentitySampleInfoSchema = object({
77963
77963
  deviceId: number().int().optional(),
77964
77964
  base64: string().optional()
77965
77965
  });
77966
+ /**
77967
+ * One enrolled sample, judged against the gallery it lives in.
77968
+ *
77969
+ * The gallery is the one input to recognition nobody re-reads: a sample
77970
+ * enrolled from the wrong face keeps voting forever, and because the matches it
77971
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
77972
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
77973
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
77974
+ * where every other cross-identity pair sits under 0.50.
77975
+ */
77976
+ var IdentitySampleAuditRowSchema = object({
77977
+ sampleId: string(),
77978
+ enrolledAt: number().int(),
77979
+ deviceId: number().int().optional(),
77980
+ source: _enum(["detected", "photo"]),
77981
+ /** The enrolled crop's media key, so the panel can show the evidence. */
77982
+ mediaKey: string().optional(),
77983
+ /**
77984
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
77985
+ * across feature spaces is a well-formed float with no meaning. Every number
77986
+ * below then says nothing — it must read as "cannot say", never as an
77987
+ * accusation and never as a clean bill: this list ends in a Remove button.
77988
+ */
77989
+ comparable: boolean(),
77990
+ /** Mean cosine against this person's other samples. Null when there are none
77991
+ * to compare with — never 0, which would read as "opposite". */
77992
+ selfMean: number().nullable(),
77993
+ /** The other person this sample looks most like, when it looks like one.
77994
+ * This is the half that convicts: not looking like yourself can be a hard
77995
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
77996
+ bestForeign: object({
77997
+ identityId: string(),
77998
+ name: string(),
77999
+ score: number()
78000
+ }).optional(),
78001
+ /** 0 = nothing to say. Higher = look at this one sooner. */
78002
+ suspicion: number()
78003
+ });
78004
+ var IdentitySampleAuditSchema = object({
78005
+ identityId: string(),
78006
+ name: string(),
78007
+ /** The cluster face model every comparison was made in. */
78008
+ modelId: string(),
78009
+ totalSamples: number().int(),
78010
+ comparableSamples: number().int(),
78011
+ flagged: number().int(),
78012
+ /** The bar `flagged` counts against, so the panel states the RULE and not
78013
+ * only its current result. */
78014
+ flagThreshold: number(),
78015
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
78016
+ * operator asked to see the gallery, not only its accusations. */
78017
+ rows: array(IdentitySampleAuditRowSchema).readonly()
78018
+ });
77966
78019
  var FaceInfoSchema = object({
77967
78020
  faceId: string(),
77968
78021
  deviceId: number().int(),
@@ -78114,7 +78167,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
78114
78167
  }), method(object({ id: string() }), _void(), {
78115
78168
  kind: "mutation",
78116
78169
  auth: "admin"
78117
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
78170
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
78118
78171
  identityId: string(),
78119
78172
  sampleId: string()
78120
78173
  }), _void(), {
@@ -88755,6 +88808,12 @@ Object.freeze({
88755
88808
  addonId: null,
88756
88809
  access: "create"
88757
88810
  },
88811
+ "faceGallery.auditIdentitySamples": {
88812
+ capName: "face-gallery",
88813
+ capScope: "system",
88814
+ addonId: null,
88815
+ access: "view"
88816
+ },
88758
88817
  "faceGallery.createIdentity": {
88759
88818
  capName: "face-gallery",
88760
88819
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.84",
3
+ "version": "0.2.85",
4
4
  "description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
5
5
  "keywords": [
6
6
  "camstack",