@camstack/types 1.2.256 → 1.2.258

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/index.js CHANGED
@@ -5147,10 +5147,17 @@ var ModelCatalogEntrySchema = zod.z.object({
5147
5147
  inputChannels: zod.z.number().int().positive().optional(),
5148
5148
  labels: zod.z.array(LabelDefinitionSchema).readonly(),
5149
5149
  inputLayout: zod.z.enum(["nchw", "nhwc"]).optional(),
5150
+ /**
5151
+ * `'scrfd'` applies InsightFace's SCRFD input contract, `(x - 127.5) / 128`
5152
+ * (upstream `insightface/model_zoo/scrfd.py`), instead of the historical
5153
+ * plain `/255`. Measured against COCO GT: 188 → 196 faces found on the
5154
+ * `scrfd-2.5g` catalog entry (2026-09-26 model-replacement spike, §2.4-2).
5155
+ */
5150
5156
  inputNormalization: zod.z.enum([
5151
5157
  "zero-one",
5152
5158
  "imagenet",
5153
- "none"
5159
+ "none",
5160
+ "scrfd"
5154
5161
  ]).optional(),
5155
5162
  /**
5156
5163
  * The model already applies softmax IN-GRAPH — its raw output is a
@@ -5252,7 +5259,8 @@ var ModelConvertMetadataSchema = zod.z.object({
5252
5259
  inputNormalization: zod.z.enum([
5253
5260
  "zero-one",
5254
5261
  "imagenet",
5255
- "none"
5262
+ "none",
5263
+ "scrfd"
5256
5264
  ]).optional(),
5257
5265
  preprocessMode: zod.z.enum(["letterbox", "resize"]).optional(),
5258
5266
  outputFormat: zod.z.enum([
@@ -17196,6 +17204,9 @@ var NcSystemEventKindSchema = zod.z.enum([
17196
17204
  "device-battery-normal",
17197
17205
  "device-consumable-low",
17198
17206
  "device-consumable-normal",
17207
+ "device-tank-low",
17208
+ "device-tank-full",
17209
+ "device-tank-normal",
17199
17210
  "stream-online",
17200
17211
  "stream-offline",
17201
17212
  "node-online",
@@ -17276,6 +17287,31 @@ var NC_BATTERY_CONSUMABLE_SYSTEM_EVENT_KINDS = [
17276
17287
  "device-consumable-normal"
17277
17288
  ];
17278
17289
  /**
17290
+ * The two kinds a RULE's consumable threshold speaks about (D642). Named once:
17291
+ * the filter scoping (`systemEventFilterApplies`), the hub's threshold census
17292
+ * and both editors read it.
17293
+ */
17294
+ var NC_CONSUMABLE_SYSTEM_EVENT_KINDS = ["device-consumable-low", "device-consumable-normal"];
17295
+ /** A vacuum's tank alerts (D642) — raised on the provider's own verdict. */
17296
+ var NC_TANK_SYSTEM_EVENT_KINDS = [
17297
+ "device-tank-low",
17298
+ "device-tank-full",
17299
+ "device-tank-normal"
17300
+ ];
17301
+ /**
17302
+ * The consumable threshold a rule that does not state one judges at (D642).
17303
+ * The operator's number ("default 15 %, configurable on the rule"), and the
17304
+ * value the cluster-wide setting it replaces shipped with.
17305
+ */
17306
+ var NC_CONSUMABLE_LOW_PERCENT_DEFAULT = 15;
17307
+ /**
17308
+ * The highest consumable threshold a rule may state (D642 review M1): 100 minus
17309
+ * the band's 5-point recovery hysteresis (`consumable-band.ts`). Above it the
17310
+ * recovery point passes 100 % and an episode could never clear, even for a
17311
+ * part just replaced. A spec in the notification centre pins the sum.
17312
+ */
17313
+ var NC_CONSUMABLE_LOW_PERCENT_MAX = 95;
17314
+ /**
17279
17315
  * One coherent system-event condition. `kinds` is the required opt-in safety
17280
17316
  * gate; the remaining lists are optional narrowing filters relevant to the
17281
17317
  * selected kinds.
@@ -17309,8 +17345,27 @@ var NcSystemEventConditionSchema = zod.z.object({
17309
17345
  */
17310
17346
  excludeDeviceIds: zod.z.array(zod.z.number().int()).min(1).optional(),
17311
17347
  nodeIds: zod.z.array(zod.z.string().min(1)).min(1).optional(),
17312
- packageNames: zod.z.array(zod.z.string().min(1)).min(1).optional()
17313
- });
17348
+ packageNames: zod.z.array(zod.z.string().min(1)).min(1).optional(),
17349
+ /**
17350
+ * At or below this remaining-life %, a consumable is LOW for THIS rule
17351
+ * (D642). Absent = {@link NC_CONSUMABLE_LOW_PERCENT_DEFAULT}; at most
17352
+ * {@link NC_CONSUMABLE_LOW_PERCENT_MAX}, so every episode can recover. Scoped to the
17353
+ * consumable kinds (`systemEventFilterApplies`) and to the device-events
17354
+ * family; ignored on every other kind.
17355
+ *
17356
+ * It is a property of the RULE because the operator decided so: a rule at
17357
+ * 25 must be told about a filter at 20 %, a rule at 10 must not. The hub
17358
+ * keeps one episode per (threshold, device, item) — its own hysteresis, its
17359
+ * own reminder — and a rule hears only the episode judged at ITS threshold,
17360
+ * exactly as an occupancy rule hears only the edge of its own count. A
17361
+ * provider's own `replace` verdict is low at every threshold.
17362
+ */
17363
+ consumableLowPercent: zod.z.number().int().min(1).max(95).optional()
17364
+ });
17365
+ /** The consumable threshold a system-event condition judges at (D642). */
17366
+ function consumableLowPercentOf(condition) {
17367
+ return condition.consumableLowPercent ?? 15;
17368
+ }
17314
17369
  /**
17315
17370
  * `maxPerTrack` for `immediate` rules is FIXED at 1 (D-3): a single track
17316
17371
  * fires an immediate rule at most once, enforced durably by the outbox
@@ -18628,6 +18683,18 @@ var NC_CONDITION_CATALOG = [
18628
18683
  value: "device-consumable-normal",
18629
18684
  label: "Consumable replaced"
18630
18685
  },
18686
+ {
18687
+ value: "device-tank-low",
18688
+ label: "Tank low (water, detergent)"
18689
+ },
18690
+ {
18691
+ value: "device-tank-full",
18692
+ label: "Tank full (dirty water, dust)"
18693
+ },
18694
+ {
18695
+ value: "device-tank-normal",
18696
+ label: "Tank back to normal"
18697
+ },
18631
18698
  {
18632
18699
  value: "export-completed",
18633
18700
  label: "Export completed"
@@ -31774,12 +31841,20 @@ reset: require_sleep.method(zod.z.object({
31774
31841
  },
31775
31842
  runtimeState: ConsumablesStatusSchema.extend({ lastFetchedAt: zod.z.number() }),
31776
31843
  /**
31777
- * Runtime-state durability: **session** — the authority is the appliance; the provider re-reads the whole item array on connect.
31844
+ * Runtime-state durability: **restored** — nothing else holds the value
31845
+ * (D642). A consumable can often be read only in a device's wake window (the
31846
+ * Dreame mower's CMS counters answer only while it charges), so a restart
31847
+ * that wiped the slice left the panel empty and the alerts blind until the
31848
+ * next wake — 2026-09-26, mower 503 idle with `items: []`. A restored item is
31849
+ * the previous observation, not a claim about now; the provider overwrites it
31850
+ * the moment it reads the device again.
31778
31851
  *
31779
31852
  * See `RuntimeStateDurability`. Enforced by
31780
31853
  * `scripts/check-runtime-state-durability.ts`.
31781
31854
  */
31782
- durability: "session"
31855
+ durability: "restored",
31856
+ /** Clocks, not content: a re-read that changed no item costs no commit. */
31857
+ volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
31783
31858
  };
31784
31859
  //#endregion
31785
31860
  //#region src/capabilities/contact.cap.ts
@@ -59039,7 +59114,7 @@ function getCapsByProviderKind(kind) {
59039
59114
  //#region src/generated/runtime-state-durability.ts
59040
59115
  /**
59041
59116
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
59042
- * `runtimeState`. 69 caps: 36 `restored`, 33 `session`.
59117
+ * `runtimeState`. 69 caps: 37 `restored`, 32 `session`.
59043
59118
  *
59044
59119
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
59045
59120
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -59098,8 +59173,8 @@ var RUNTIME_STATE_POLICY = {
59098
59173
  volatileFields: ["lastChangedAt"]
59099
59174
  },
59100
59175
  "consumables": {
59101
- durability: "session",
59102
- volatileFields: []
59176
+ durability: "restored",
59177
+ volatileFields: ["lastChangedAt", "lastFetchedAt"]
59103
59178
  },
59104
59179
  "contact": {
59105
59180
  durability: "restored",
@@ -59350,6 +59425,7 @@ var RESTORED_CAP_NAMES = [
59350
59425
  "binary",
59351
59426
  "carbon-monoxide",
59352
59427
  "connectivity",
59428
+ "consumables",
59353
59429
  "contact",
59354
59430
  "cover",
59355
59431
  "day-night",
@@ -60865,12 +60941,55 @@ function prepareNotification(caps, n) {
60865
60941
  }
60866
60942
  //#endregion
60867
60943
  //#region src/notification/system-event-filters.ts
60868
- /** Every filter, for the callers that must cover all four (guards, tests). */
60944
+ /**
60945
+ * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
60946
+ * consumed by the rule ENGINE and by every rule EDITOR.
60947
+ *
60948
+ * ── The failure this file exists for ───────────────────────────────────────
60949
+ * `NcSystemEventConditionSchema` carries four optional narrowing lists
60950
+ * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
60951
+ * `kinds` gate. They are not four filters over one vocabulary: each belongs to
60952
+ * a FAMILY of kinds and is meaningless outside it. A node going away has no
60953
+ * device type; a completed export has no package; `stream-offline` deliberately
60954
+ * carries no device type at all (a stream belongs to a camera by construction).
60955
+ *
60956
+ * The engine applied all four to every kind, so a filter from one family failed
60957
+ * a kind from another family CLOSED. The operator's live rule "Eventi di
60958
+ * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
60959
+ * way to say "only my cameras" about the two liveness kinds — and NINE of the
60960
+ * eleven silently stopped being deliverable. Four days of history contained
60961
+ * `device-online` and `device-offline` and nothing else, across a window in
60962
+ * which agents were restarted and addons were updated.
60963
+ *
60964
+ * Both editors already computed this scoping, to decide which filter boxes to
60965
+ * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
60966
+ * to these device TYPES"). Only the engine disagreed, and it disagreed in the
60967
+ * destructive direction. So the rule is stated ONCE, here, and the engine and
60968
+ * the editors are readers of it rather than three independent authors.
60969
+ *
60970
+ * ── The direction ─────────────────────────────────────────────────────────
60971
+ * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
60972
+ * hides a box has already told the operator this filter does not speak about
60973
+ * these kinds, so honouring it as an exclusion contradicts the only
60974
+ * explanation the operator was ever given. Inside its family the filter still
60975
+ * narrows, and still fails CLOSED on a subject that cannot produce the identity
60976
+ * it tests (a device the mirror cannot name is not evidence of a camera).
60977
+ */
60978
+ /**
60979
+ * Every filter, for the callers that must cover all of them (guards, tests).
60980
+ *
60981
+ * `consumableLowPercent` (D642) is not a list but it is a filter in exactly
60982
+ * this sense: it belongs to a family of kinds (the consumable pair) and the
60983
+ * engine consults it only there. It differs in one way the readers must know —
60984
+ * its ABSENCE is not "no narrowing" but the default threshold, because a
60985
+ * consumable episode is always judged at SOME threshold.
60986
+ */
60869
60987
  var NC_SYSTEM_EVENT_FILTER_KEYS = [
60870
60988
  "deviceIds",
60871
60989
  "deviceTypes",
60872
60990
  "nodeIds",
60873
- "packageNames"
60991
+ "packageNames",
60992
+ "consumableLowPercent"
60874
60993
  ];
60875
60994
  /**
60876
60995
  * Does `filter` say anything about `kind`?
@@ -60884,6 +61003,7 @@ function systemEventFilterApplies(kind, filter) {
60884
61003
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
60885
61004
  case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated";
60886
61005
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "server-updated";
61006
+ case "consumableLowPercent": return NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind);
60887
61007
  }
60888
61008
  }
60889
61009
  /**
@@ -60932,6 +61052,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
60932
61052
  "device-battery-normal": "device-events",
60933
61053
  "device-consumable-low": "device-events",
60934
61054
  "device-consumable-normal": "device-events",
61055
+ "device-tank-low": "device-events",
61056
+ "device-tank-full": "device-events",
61057
+ "device-tank-normal": "device-events",
60935
61058
  "stream-online": "device-events",
60936
61059
  "stream-offline": "device-events",
60937
61060
  "detection-blind": "device-events",
@@ -60964,7 +61087,7 @@ var NC_SYSTEM_EVENT_FAMILY = {
60964
61087
  var FAMILY_BY_NAME = new Map(Object.entries(NC_SYSTEM_EVENT_FAMILY));
60965
61088
  var NC_SYSTEM_EVENT_CONDITION_FILTER_KEYS = [...NC_SYSTEM_EVENT_FILTER_KEYS, "excludeDeviceIds"];
60966
61089
  /**
60967
- * The filters a family may carry. The four base filters are the union of
61090
+ * The filters a family may carry. The base filters are the union of
60968
61091
  * `systemEventFilterApplies` over the family's kinds (the spec pins that
60969
61092
  * equality). `excludeDeviceIds` is a device-events filter only: an alarm is
60970
61093
  * narrowed to the camera that triggered it and excludes nothing.
@@ -60973,7 +61096,8 @@ var NC_SYSTEM_EVENT_FAMILY_FILTERS = {
60973
61096
  "device-events": [
60974
61097
  "deviceIds",
60975
61098
  "excludeDeviceIds",
60976
- "deviceTypes"
61099
+ "deviceTypes",
61100
+ "consumableLowPercent"
60977
61101
  ],
60978
61102
  system: ["nodeIds", "packageNames"],
60979
61103
  alarm: ["deviceIds"]
@@ -61008,6 +61132,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
61008
61132
  label: "Consumables",
61009
61133
  kinds: ["device-consumable-low", "device-consumable-normal"]
61010
61134
  },
61135
+ {
61136
+ id: "tanks",
61137
+ family: "device-events",
61138
+ label: "Tanks",
61139
+ kinds: [
61140
+ "device-tank-low",
61141
+ "device-tank-full",
61142
+ "device-tank-normal"
61143
+ ]
61144
+ },
61011
61145
  {
61012
61146
  id: "detection-blind",
61013
61147
  family: "device-events",
@@ -61746,6 +61880,11 @@ var RULE_BODY_ONLY = ["body"];
61746
61880
  var RULE_TEXT = ["title", "body"];
61747
61881
  var BATTERY = ["device-battery-low", "device-battery-normal"];
61748
61882
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
61883
+ var TANK = [
61884
+ "device-tank-low",
61885
+ "device-tank-full",
61886
+ "device-tank-normal"
61887
+ ];
61749
61888
  var UPDATES = [
61750
61889
  "addon-update-available",
61751
61890
  "server-update-available",
@@ -61771,6 +61910,7 @@ var DEVICE_EVENTS = [
61771
61910
  "device-enabled",
61772
61911
  ...BATTERY,
61773
61912
  ...CONSUMABLE,
61913
+ ...TANK,
61774
61914
  "stream-online",
61775
61915
  "stream-offline",
61776
61916
  "detection-blind",
@@ -62068,6 +62208,17 @@ var NC_TEMPLATE_VARS = [
62068
62208
  kinds: ["system"],
62069
62209
  systemEventKinds: [...CONSUMABLE]
62070
62210
  },
62211
+ {
62212
+ name: "tank",
62213
+ label: "Tank",
62214
+ description: "Which tank: clean water, dirty water, detergent or dust bin.",
62215
+ example: "clean water",
62216
+ group: "system",
62217
+ families: ["rule"],
62218
+ fields: [...RULE_TEXT],
62219
+ kinds: ["system"],
62220
+ systemEventKinds: [...TANK]
62221
+ },
62071
62222
  {
62072
62223
  name: "profile",
62073
62224
  label: "Stream profile",
@@ -62460,6 +62611,38 @@ var NC_TEMPLATE_VARS = [
62460
62611
  fields: [...RULE_TEXT]
62461
62612
  }
62462
62613
  ];
62614
+ /**
62615
+ * System-event kinds the SERVED catalog holds back (D642): the kinds the hub
62616
+ * produces before the installed viewers can parse them.
62617
+ *
62618
+ * The viewer parses `getTemplateCatalog` WHOLE, with its own strict
62619
+ * `NcSystemEventKindSchema` on every descriptor's `systemEventKinds`, so one
62620
+ * kind it does not know — in `{{deviceName}}`, which every device event names —
62621
+ * empties every {{var}} picker on every phone (the same trap
62622
+ * `NcTemplateVarKindSchema` froze the rule kinds for). The in-process catalog
62623
+ * keeps them: the producer parity and the preview render read it.
62624
+ *
62625
+ * SELF-EXPIRING: `scripts/check-nc-mirrors-in-sync.ts` reads this list as the
62626
+ * viewer's allowance and fails the day the viewer mirrors one of these kinds —
62627
+ * delete it from here then, and the served catalog names it again.
62628
+ */
62629
+ var NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = [
62630
+ "device-tank-low",
62631
+ "device-tank-full",
62632
+ "device-tank-normal"
62633
+ ];
62634
+ /**
62635
+ * The catalog as `getTemplateCatalog` SERVES it: every descriptor, with the
62636
+ * held-back kinds removed from its `systemEventKinds`. A descriptor that named
62637
+ * only held-back kinds is served with an empty list — offered to no system
62638
+ * rule an installed viewer can author, which is exactly true.
62639
+ */
62640
+ function servedTemplateVars() {
62641
+ return NC_TEMPLATE_VARS.map((d) => d.systemEventKinds === void 0 ? d : {
62642
+ ...d,
62643
+ systemEventKinds: d.systemEventKinds.filter((kind) => !NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS.includes(kind))
62644
+ });
62645
+ }
62463
62646
  /** The caption fields see a fixed, smaller vocabulary (`timelapsePreviewText`,
62464
62647
  * `summaryCaptionText`). Declared here rather than as `fields` on every
62465
62648
  * descriptor so the whole rule stays in one line of code. */
@@ -66179,6 +66362,9 @@ exports.NC_CONFIRM_DEFAULT_MAX_IMAGE_PX = NC_CONFIRM_DEFAULT_MAX_IMAGE_PX;
66179
66362
  exports.NC_CONFIRM_DEFAULT_TIMEOUT_MS = NC_CONFIRM_DEFAULT_TIMEOUT_MS;
66180
66363
  exports.NC_CONFIRM_MAX_TIMEOUT_MS = NC_CONFIRM_MAX_TIMEOUT_MS;
66181
66364
  exports.NC_CONFIRM_MIN_TIMEOUT_MS = NC_CONFIRM_MIN_TIMEOUT_MS;
66365
+ exports.NC_CONSUMABLE_LOW_PERCENT_DEFAULT = NC_CONSUMABLE_LOW_PERCENT_DEFAULT;
66366
+ exports.NC_CONSUMABLE_LOW_PERCENT_MAX = NC_CONSUMABLE_LOW_PERCENT_MAX;
66367
+ exports.NC_CONSUMABLE_SYSTEM_EVENT_KINDS = NC_CONSUMABLE_SYSTEM_EVENT_KINDS;
66182
66368
  exports.NC_DEFAULT_SNOOZE_MINUTES = NC_DEFAULT_SNOOZE_MINUTES;
66183
66369
  exports.NC_HISTORY_LIMIT_DEFAULT = NC_HISTORY_LIMIT_DEFAULT;
66184
66370
  exports.NC_HISTORY_LIMIT_MAX = NC_HISTORY_LIMIT_MAX;
@@ -66202,7 +66388,9 @@ exports.NC_SYSTEM_EVENT_FAMILY_FILTERS = NC_SYSTEM_EVENT_FAMILY_FILTERS;
66202
66388
  exports.NC_SYSTEM_EVENT_FILTER_KEYS = NC_SYSTEM_EVENT_FILTER_KEYS;
66203
66389
  exports.NC_SYSTEM_EVENT_KIND_GROUP_SPECS = NC_SYSTEM_EVENT_KIND_GROUP_SPECS;
66204
66390
  exports.NC_SYSTEM_RULE_KINDS = NC_SYSTEM_RULE_KINDS;
66391
+ exports.NC_TANK_SYSTEM_EVENT_KINDS = NC_TANK_SYSTEM_EVENT_KINDS;
66205
66392
  exports.NC_TAXONOMY = NC_TAXONOMY;
66393
+ exports.NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS;
66206
66394
  exports.NC_TEMPLATE_VARS = NC_TEMPLATE_VARS;
66207
66395
  exports.NC_UPDATE_EVENT_PACKAGE_NAMES = NC_UPDATE_EVENT_PACKAGE_NAMES;
66208
66396
  exports.NETWORK_LINK_TYPES = NETWORK_LINK_TYPES;
@@ -66851,6 +67039,7 @@ exports.conditionExclusionReason = conditionExclusionReason;
66851
67039
  exports.conditionVisibleForKind = conditionVisibleForKind;
66852
67040
  exports.connectionTestCapability = connectionTestCapability;
66853
67041
  exports.connectivityCapability = connectivityCapability;
67042
+ exports.consumableLowPercentOf = consumableLowPercentOf;
66854
67043
  exports.consumablesCapability = consumablesCapability;
66855
67044
  exports.contactCapability = contactCapability;
66856
67045
  exports.controlCapability = controlCapability;
@@ -67199,6 +67388,7 @@ exports.selectAssignedProfileSlots = require_sleep.selectAssignedProfileSlots;
67199
67388
  exports.sensorRaisedOf = sensorRaisedOf;
67200
67389
  exports.sensorTransitionNeverFires = sensorTransitionNeverFires;
67201
67390
  exports.sensorTransitionOffered = sensorTransitionOffered;
67391
+ exports.servedTemplateVars = servedTemplateVars;
67202
67392
  exports.serverManagementCapability = serverManagementCapability;
67203
67393
  exports.setByPath = setByPath;
67204
67394
  exports.settingsStoreCapability = settingsStoreCapability;