@camstack/addon-post-analysis 1.2.664 → 1.2.666

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.
Files changed (16) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{clip-model-registry-TeNUAAPP.js → clip-model-registry-BIhYJRFt.js} +324 -132
  3. package/dist/{clip-model-registry-Ch9Sz-Qb.mjs → clip-model-registry-Uc_C1x81.mjs} +319 -133
  4. package/dist/embedding-encoder/index.js +1 -1
  5. package/dist/embedding-encoder/index.mjs +1 -1
  6. package/dist/pipeline-analytics/_stub.js +2 -2
  7. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CXG7YPYq.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-FkeZoNXj.mjs} +2 -2
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CnYZAdvw.mjs +26 -0
  9. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Br6eWzp_.mjs +26 -0
  10. package/dist/pipeline-analytics/{hostInit-BZ_D3_sF.mjs → hostInit-BBhgVoNl.mjs} +2 -2
  11. package/dist/pipeline-analytics/index.js +430 -46
  12. package/dist/pipeline-analytics/index.mjs +430 -46
  13. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  14. package/package.json +2 -2
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CIt_RDlm.mjs +0 -26
  16. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-4TTlyJ66.mjs +0 -26
@@ -6063,7 +6063,7 @@ var ZodIssueCode = {
6063
6063
  var ZodFirstPartyTypeKind;
6064
6064
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
6065
6065
  //#endregion
6066
- //#region ../types/dist/sleep-QsoHs66J.mjs
6066
+ //#region ../types/dist/sleep-C6LqREpb.mjs
6067
6067
  /**
6068
6068
  * The audio chunk plane's byte format, and the ONE expansion from a coded
6069
6069
  * window to float samples (D455).
@@ -6142,6 +6142,22 @@ function buildAlawTable() {
6142
6142
  }
6143
6143
  buildUlawTable();
6144
6144
  buildAlawTable();
6145
+ /**
6146
+ * An addon whose own migrations did not apply refuses to initialise (D987). The error is typed
6147
+ * so a runner hosting several addons can tell "this addon is blocked" from a crash and keep its
6148
+ * co-located siblings running. Recognised by NAME and shape, never `instanceof`: a forked addon
6149
+ * bundles its own copy of this module, so the class the runner sees is not the one that threw.
6150
+ */
6151
+ var MIGRATIONS_BLOCKED_ERROR_NAME = "AddonMigrationsBlockedError";
6152
+ var AddonMigrationsBlockedError = class extends Error {
6153
+ /** The ledger ids that did not apply and block the owner. */
6154
+ migrationIds;
6155
+ constructor(migrationIds) {
6156
+ super(`migration(s) ${migrationIds.join(", ")} did not apply and block this addon — fix or retry them (migrations.retry), then restart it`);
6157
+ this.name = MIGRATIONS_BLOCKED_ERROR_NAME;
6158
+ this.migrationIds = migrationIds;
6159
+ }
6160
+ };
6145
6161
  /** Is this field's stored value a credential? */
6146
6162
  function isSecretConfigField(field) {
6147
6163
  if (field.type === "password") return true;
@@ -7795,7 +7811,7 @@ var BaseAddon = class {
7795
7811
  startMigration: (input) => api.startMigration.mutate(input),
7796
7812
  finishMigration: (input) => api.finishMigration.mutate(input)
7797
7813
  }, migrations, this.ctx.logger);
7798
- if (report.blockOwner.length > 0) throw new Error(`migration(s) ${report.blockOwner.join(", ")} did not apply and block this addon — fix or retry them (migrations.retry), then restart it`);
7814
+ if (report.blockOwner.length > 0) throw new AddonMigrationsBlockedError(report.blockOwner);
7799
7815
  return report;
7800
7816
  }
7801
7817
  /**
@@ -9830,6 +9846,7 @@ var CAP_NAMES = Object.freeze([
9830
9846
  "backup",
9831
9847
  "battery",
9832
9848
  "binary",
9849
+ "board-key-source",
9833
9850
  "brightness",
9834
9851
  "broker",
9835
9852
  "button",
@@ -9951,6 +9968,7 @@ var CAP_NAMES = Object.freeze([
9951
9968
  "privacy-mask",
9952
9969
  "ptz",
9953
9970
  "ptz-autotrack",
9971
+ "pump-cycle",
9954
9972
  "reboot",
9955
9973
  "record-entries",
9956
9974
  "recording",
@@ -11243,18 +11261,6 @@ Object.freeze({
11243
11261
  "path": "pumpRunning",
11244
11262
  "valueType": "boolean"
11245
11263
  },
11246
- {
11247
- "path": "pumpIntervalEnabled",
11248
- "valueType": "boolean"
11249
- },
11250
- {
11251
- "path": "pumpOnTime",
11252
- "valueType": "number"
11253
- },
11254
- {
11255
- "path": "pumpOffTime",
11256
- "valueType": "number"
11257
- },
11258
11264
  {
11259
11265
  "path": "lastDrink",
11260
11266
  "valueType": "number"
@@ -11378,6 +11384,20 @@ Object.freeze({
11378
11384
  "valueType": "number"
11379
11385
  }
11380
11386
  ],
11387
+ "pump-cycle": [
11388
+ {
11389
+ "path": "enabled",
11390
+ "valueType": "boolean"
11391
+ },
11392
+ {
11393
+ "path": "onTime",
11394
+ "valueType": "number"
11395
+ },
11396
+ {
11397
+ "path": "offTime",
11398
+ "valueType": "number"
11399
+ }
11400
+ ],
11381
11401
  "recording-archive": [
11382
11402
  {
11383
11403
  "path": "deviceId",
@@ -11829,7 +11849,7 @@ Object.freeze({
11829
11849
  * can answer "may a rule actuate this?" without importing the schema barrel
11830
11850
  * (~144MB RSS per runner, D28).
11831
11851
  *
11832
- * Coverage: 101 device-scoped capabilities.
11852
+ * Coverage: 102 device-scoped capabilities.
11833
11853
  */
11834
11854
  var DEVICE_SCOPED_CAPS = new Set([
11835
11855
  "accessories",
@@ -11906,6 +11926,7 @@ var DEVICE_SCOPED_CAPS = new Set([
11906
11926
  "privacy-mask",
11907
11927
  "ptz",
11908
11928
  "ptz-autotrack",
11929
+ "pump-cycle",
11909
11930
  "reboot",
11910
11931
  "recording",
11911
11932
  "recording-onboard",
@@ -20451,24 +20472,52 @@ var APPLIANCE_CAP_VOCABULARY = {
20451
20472
  args: { on: false }
20452
20473
  },
20453
20474
  {
20454
- id: "petFountain.intervalOn",
20455
- method: "setPumpInterval",
20475
+ id: "petFountain.resetDailyConsumption",
20476
+ method: "resetDailyConsumption",
20477
+ label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
20478
+ phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
20479
+ icon: "rotate-ccw"
20480
+ }
20481
+ ],
20482
+ state: [{
20483
+ kind: "boolean",
20484
+ field: "empty",
20485
+ label: t("Tank empty", "Serbatoio vuoto"),
20486
+ whenTrue: t("When the tank of {device} is empty", "Quando il serbatoio di {device} è vuoto"),
20487
+ whenFalse: t("When the tank of {device} is refilled", "Quando il serbatoio di {device} viene riempito"),
20488
+ icon: "droplet"
20489
+ }, {
20490
+ kind: "numeric",
20491
+ field: "waterLevel",
20492
+ quantity: t("the water level", "il livello dell’acqua"),
20493
+ label: t("Water level", "Livello dell’acqua"),
20494
+ unit: "%",
20495
+ icon: "droplets"
20496
+ }]
20497
+ },
20498
+ "pump-cycle": {
20499
+ scope: "device",
20500
+ noun: t("Pump cycle", "Ciclo della pompa"),
20501
+ actions: [
20502
+ {
20503
+ id: "pumpCycle.on",
20504
+ method: "setEnabled",
20456
20505
  label: t("Pump cycle on", "Ciclo pompa attivo"),
20457
20506
  phrase: t("Run the pump of {device} on its on/off cycle", "Fai lavorare la pompa di {device} a ciclo acceso/spento"),
20458
20507
  icon: "timer",
20459
20508
  args: { on: true }
20460
20509
  },
20461
20510
  {
20462
- id: "petFountain.intervalOff",
20463
- method: "setPumpInterval",
20511
+ id: "pumpCycle.off",
20512
+ method: "setEnabled",
20464
20513
  label: t("Pump cycle off", "Ciclo pompa spento"),
20465
20514
  phrase: t("Run the pump of {device} continuously", "Fai lavorare la pompa di {device} in continuo"),
20466
20515
  icon: "timer-off",
20467
20516
  args: { on: false }
20468
20517
  },
20469
20518
  {
20470
- id: "petFountain.pumpOnMinutes",
20471
- method: "setPumpOnMinutes",
20519
+ id: "pumpCycle.onMinutes",
20520
+ method: "setOnMinutes",
20472
20521
  label: t("Set pump run time", "Imposta il tempo di lavoro della pompa"),
20473
20522
  phrase: t("Set the pump of {device} to run {minutes} minutes per cycle", "Imposta la pompa di {device} a lavorare {minutes} minuti per ciclo"),
20474
20523
  icon: "timer",
@@ -20484,8 +20533,8 @@ var APPLIANCE_CAP_VOCABULARY = {
20484
20533
  }]
20485
20534
  },
20486
20535
  {
20487
- id: "petFountain.pumpOffMinutes",
20488
- method: "setPumpOffMinutes",
20536
+ id: "pumpCycle.offMinutes",
20537
+ method: "setOffMinutes",
20489
20538
  label: t("Set pump rest time", "Imposta il tempo di riposo della pompa"),
20490
20539
  phrase: t("Set the pump of {device} to rest {minutes} minutes per cycle", "Imposta la pompa di {device} a riposare {minutes} minuti per ciclo"),
20491
20540
  icon: "timer-off",
@@ -20499,29 +20548,15 @@ var APPLIANCE_CAP_VOCABULARY = {
20499
20548
  unit: "min"
20500
20549
  }
20501
20550
  }]
20502
- },
20503
- {
20504
- id: "petFountain.resetDailyConsumption",
20505
- method: "resetDailyConsumption",
20506
- label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
20507
- phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
20508
- icon: "rotate-ccw"
20509
20551
  }
20510
20552
  ],
20511
20553
  state: [{
20512
20554
  kind: "boolean",
20513
- field: "empty",
20514
- label: t("Tank empty", "Serbatoio vuoto"),
20515
- whenTrue: t("When the tank of {device} is empty", "Quando il serbatoio di {device} è vuoto"),
20516
- whenFalse: t("When the tank of {device} is refilled", "Quando il serbatoio di {device} viene riempito"),
20517
- icon: "droplet"
20518
- }, {
20519
- kind: "numeric",
20520
- field: "waterLevel",
20521
- quantity: t("the water level", "il livello dell’acqua"),
20522
- label: t("Water level", "Livello dell’acqua"),
20523
- unit: "%",
20524
- icon: "droplets"
20555
+ field: "enabled",
20556
+ label: t("Pump cycle", "Ciclo pompa"),
20557
+ whenTrue: t("When {device} starts running its pump on a cycle", "Quando {device} inizia a far lavorare la pompa a ciclo"),
20558
+ whenFalse: t("When {device} runs its pump continuously", "Quando {device} fa lavorare la pompa in continuo"),
20559
+ icon: "timer"
20525
20560
  }]
20526
20561
  },
20527
20562
  "media-player": {
@@ -22414,6 +22449,7 @@ var SYSTEM_CAP_VOCABULARY = {
22414
22449
  "audio-analyzer": system(PIPELINE),
22415
22450
  "audio-codec": system(INTERNAL),
22416
22451
  "auth-provider": system(IDENTITY),
22452
+ "board-key-source": system(INTERNAL),
22417
22453
  backup: system("system backups — run and restored from the Backups page"),
22418
22454
  broker: system("message-broker connections — configured, not actuated"),
22419
22455
  "calendar-source": system(INTERNAL),
@@ -47564,6 +47600,49 @@ var binaryCapability = {
47564
47600
  volatileStateFields: ["lastChangedAt"]
47565
47601
  };
47566
47602
  /**
47603
+ * Why a board key could not be read. Typed so a caller reports the cause and
47604
+ * never treats "could not read" as "has no key" (D49).
47605
+ */
47606
+ var BoardKeyFailureReasonSchema = _enum([
47607
+ "unknown-source",
47608
+ "not-admin",
47609
+ "no-builder",
47610
+ "no-ingress-url",
47611
+ "unreachable",
47612
+ "unknown-board",
47613
+ "no-encryption-key",
47614
+ "unreadable-config"
47615
+ ]);
47616
+ var BoardKeySourceSchema = object({
47617
+ sourceId: string(),
47618
+ name: string()
47619
+ });
47620
+ var BoardKeyBoardSchema = object({
47621
+ /** The builder's file name, e.g. `kitchen.yaml`: the handle `getBoardKey` takes. */
47622
+ configuration: string(),
47623
+ /** The node name the builder gives the board. */
47624
+ name: string(),
47625
+ /** The address the builder knows the board by, when it has one. */
47626
+ address: string().nullable()
47627
+ });
47628
+ var BoardKeyFailureSchema = object({
47629
+ ok: literal(false),
47630
+ reason: BoardKeyFailureReasonSchema,
47631
+ detail: string().optional()
47632
+ });
47633
+ var ListBoardsResultSchema = discriminatedUnion("ok", [object({
47634
+ ok: literal(true),
47635
+ boards: array(BoardKeyBoardSchema).readonly()
47636
+ }), BoardKeyFailureSchema]);
47637
+ var GetBoardKeyResultSchema = discriminatedUnion("ok", [object({
47638
+ ok: literal(true),
47639
+ key: string()
47640
+ }), BoardKeyFailureSchema]);
47641
+ method(_void(), array(BoardKeySourceSchema).readonly(), { auth: "admin" }), method(object({ sourceId: string().min(1) }), ListBoardsResultSchema, { auth: "admin" }), method(object({
47642
+ sourceId: string().min(1),
47643
+ configuration: string().min(1)
47644
+ }), GetBoardKeyResultSchema, { auth: "admin" });
47645
+ /**
47567
47646
  * Dimmable-light brightness control. Co-exists with `switch` on the
47568
47647
  * same device — the switch toggles on/off, this cap sets the level
47569
47648
  * applied when the light is on. Drivers map their per-vendor dim
@@ -54145,7 +54224,7 @@ var DishwasherStatusSchema = object({
54145
54224
  /** Ms epoch of the last value received from the appliance; 0 = never. */
54146
54225
  lastFetchedAt: number()
54147
54226
  });
54148
- var DeviceIdSchema$1 = number().int().nonnegative();
54227
+ var DeviceIdSchema$2 = number().int().nonnegative();
54149
54228
  /** A value a program option or setting can take. */
54150
54229
  var DishwasherValueSchema = union([
54151
54230
  boolean(),
@@ -54220,77 +54299,77 @@ var dishwasherCapability = {
54220
54299
  * option feature keys; each is checked against the program's constraints.
54221
54300
  */
54222
54301
  start: method(object({
54223
- deviceId: DeviceIdSchema$1,
54302
+ deviceId: DeviceIdSchema$2,
54224
54303
  program: string().min(1).optional(),
54225
54304
  options: record(string(), DishwasherValueSchema).optional()
54226
54305
  }), _void(), {
54227
54306
  kind: "mutation",
54228
54307
  auth: "protected"
54229
54308
  }),
54230
- pause: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54309
+ pause: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54231
54310
  kind: "mutation",
54232
54311
  auth: "protected"
54233
54312
  }),
54234
- resume: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54313
+ resume: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54235
54314
  kind: "mutation",
54236
54315
  auth: "protected"
54237
54316
  }),
54238
- stop: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54317
+ stop: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54239
54318
  kind: "mutation",
54240
54319
  auth: "protected"
54241
54320
  }),
54242
54321
  /** Select (not start) a program; refused when the appliance does not offer it. */
54243
54322
  setProgram: method(object({
54244
- deviceId: DeviceIdSchema$1,
54323
+ deviceId: DeviceIdSchema$2,
54245
54324
  program: string().min(1)
54246
54325
  }), _void(), {
54247
54326
  kind: "mutation",
54248
54327
  auth: "protected"
54249
54328
  }),
54250
54329
  setPower: method(object({
54251
- deviceId: DeviceIdSchema$1,
54330
+ deviceId: DeviceIdSchema$2,
54252
54331
  on: boolean()
54253
54332
  }), _void(), {
54254
54333
  kind: "mutation",
54255
54334
  auth: "protected"
54256
54335
  }),
54257
54336
  setHalfLoad: method(object({
54258
- deviceId: DeviceIdSchema$1,
54337
+ deviceId: DeviceIdSchema$2,
54259
54338
  on: boolean()
54260
54339
  }), _void(), {
54261
54340
  kind: "mutation",
54262
54341
  auth: "protected"
54263
54342
  }),
54264
54343
  setHygienePlus: method(object({
54265
- deviceId: DeviceIdSchema$1,
54344
+ deviceId: DeviceIdSchema$2,
54266
54345
  on: boolean()
54267
54346
  }), _void(), {
54268
54347
  kind: "mutation",
54269
54348
  auth: "protected"
54270
54349
  }),
54271
54350
  setExtraDry: method(object({
54272
- deviceId: DeviceIdSchema$1,
54351
+ deviceId: DeviceIdSchema$2,
54273
54352
  on: boolean()
54274
54353
  }), _void(), {
54275
54354
  kind: "mutation",
54276
54355
  auth: "protected"
54277
54356
  }),
54278
54357
  setIntensiveZone: method(object({
54279
- deviceId: DeviceIdSchema$1,
54358
+ deviceId: DeviceIdSchema$2,
54280
54359
  on: boolean()
54281
54360
  }), _void(), {
54282
54361
  kind: "mutation",
54283
54362
  auth: "protected"
54284
54363
  }),
54285
54364
  setVarioSpeedPlus: method(object({
54286
- deviceId: DeviceIdSchema$1,
54365
+ deviceId: DeviceIdSchema$2,
54287
54366
  on: boolean()
54288
54367
  }), _void(), {
54289
54368
  kind: "mutation",
54290
54369
  auth: "protected"
54291
54370
  }),
54292
54371
  setChildLock: method(object({
54293
- deviceId: DeviceIdSchema$1,
54372
+ deviceId: DeviceIdSchema$2,
54294
54373
  on: boolean()
54295
54374
  }), _void(), {
54296
54375
  kind: "mutation",
@@ -54302,7 +54381,7 @@ var dishwasherCapability = {
54302
54381
  * its declared range / members.
54303
54382
  */
54304
54383
  setOption: method(object({
54305
- deviceId: DeviceIdSchema$1,
54384
+ deviceId: DeviceIdSchema$2,
54306
54385
  key: string().min(1),
54307
54386
  value: DishwasherValueSchema
54308
54387
  }), _void(), {
@@ -54310,7 +54389,7 @@ var dishwasherCapability = {
54310
54389
  auth: "protected"
54311
54390
  }),
54312
54391
  /** What this appliance can do, from its own description — the UI is derived from it. */
54313
- getOptions: method(object({ deviceId: DeviceIdSchema$1 }), DishwasherOptionsSchema, { auth: "protected" })
54392
+ getOptions: method(object({ deviceId: DeviceIdSchema$2 }), DishwasherOptionsSchema, { auth: "protected" })
54314
54393
  },
54315
54394
  status: {
54316
54395
  schema: DishwasherStatusSchema,
@@ -69136,6 +69215,21 @@ var NcTemplateVarKindSchema = _enum([
69136
69215
  "sound",
69137
69216
  "system"
69138
69217
  ]);
69218
+ /**
69219
+ * The default title/body a rule of one SITUATION is delivered with when the
69220
+ * operator wrote no template — served so an editor can pre-fill it (and the
69221
+ * operator can rebuild it from placeholders) instead of starting from a blank
69222
+ * box that, once saved, silently replaces it. `id` names the situation inside
69223
+ * a rule `kind`: `appliance-cycle` is a `sensor` rule whose device is an
69224
+ * appliance finishing a cycle. Texts are raw templates (`{{var}}` intact), in
69225
+ * the hub's current language and with its overrides applied.
69226
+ */
69227
+ var NcTemplateDefaultSchema = object({
69228
+ id: _enum(["appliance-cycle"]),
69229
+ kind: NcRuleKindSchema,
69230
+ title: string(),
69231
+ body: string()
69232
+ });
69139
69233
  /** Which producer renders a template: an ordinary rule, a timelapse, a digest. */
69140
69234
  var NcTemplateFamilySchema = _enum([
69141
69235
  "rule",
@@ -70698,7 +70792,11 @@ var notificationRulesCapability = {
70698
70792
  taxonomy: NcTaxonomySchema.optional()
70699
70793
  })),
70700
70794
  /** The declared `{{var}}` vocabulary; editors filter it with `templateVarsFor`. */
70701
- getTemplateCatalog: method(object({}), object({ vars: array(NcTemplateVarDescriptorSchema) })),
70795
+ getTemplateCatalog: method(object({}), object({
70796
+ vars: array(NcTemplateVarDescriptorSchema),
70797
+ /** Per-situation default texts; absent on a hub that predates them. */
70798
+ defaults: array(NcTemplateDefaultSchema)
70799
+ })),
70702
70800
  /**
70703
70801
  * Render a template with example values, through the hub's text catalog.
70704
70802
  * Pure: sends nothing. A MUTATION only for transport — a 2.5k-char draft in
@@ -71708,7 +71806,7 @@ var petFeederCapability = {
71708
71806
  /**
71709
71807
  * Pet water-fountain cap. Models the telemetry and the control surface of a
71710
71808
  * circulating drinking fountain: how much water is in the tank, how much the
71711
- * pet drank, whether the pump runs and on what duty cycle.
71809
+ * pet drank, whether the pump runs.
71712
71810
  *
71713
71811
  * It has no native vendor provider of its own: a fountain reaches CamStack as
71714
71812
  * a container of loose entities (a pump switch, two number boxes, a "filter
@@ -71724,8 +71822,10 @@ var petFeederCapability = {
71724
71822
  * never here. Every reading may be `null`: a source that is offline or does
71725
71823
  * not report is unknown, never zero.
71726
71824
  *
71727
- * The filter is not a field of this cap: it is an item of the `consumables`
71728
- * cap on the same device (kind `wear`), reset by the same forward mechanism.
71825
+ * The pump's on/off duty cycle is model-specific and lives in the optional
71826
+ * `pump-cycle` cap. The filter, the cleaning and the water change are not
71827
+ * fields of this cap: they are items of the `consumables` cap on the same
71828
+ * device (kind `wear`), reset by the same forward mechanism.
71729
71829
  */
71730
71830
  var PetFountainStatusSchema = object({
71731
71831
  /** Water in the tank, 0..100 (%). Null while the source has not reported. */
@@ -71736,27 +71836,20 @@ var PetFountainStatusSchema = object({
71736
71836
  empty: boolean().nullable(),
71737
71837
  /** True while the pump is running. Null while unknown. */
71738
71838
  pumpRunning: boolean().nullable(),
71739
- /** True when the pump works on an on/off duty cycle rather than continuously. */
71740
- pumpIntervalEnabled: boolean().nullable(),
71741
- /** How long the pump runs per cycle, in seconds. */
71742
- pumpOnTime: number().min(0).nullable().meta(readingMeta("duration")),
71743
- /** How long the pump rests per cycle, in seconds. */
71744
- pumpOffTime: number().min(0).nullable().meta(readingMeta("duration")),
71745
71839
  /** Water drunk in the last drink, in litres. */
71746
71840
  lastDrink: number().min(0).nullable().meta(readingMeta("volume")),
71747
71841
  /** Water drunk in the current hour, in litres. */
71748
71842
  currentHourDrink: number().min(0).nullable().meta(readingMeta("volume")),
71749
71843
  /** Water drunk over the last 24 hours (rolling), in litres. */
71750
71844
  last24hDrink: number().min(0).nullable().meta(readingMeta("volume")),
71751
- /** Water drunk since local midnight, in litres. */
71845
+ /** Water drunk since local midnight, in litres. Null when the fountain has no such sensor. */
71752
71846
  todayDrink: number().min(0).nullable().meta(readingMeta("volume")),
71753
71847
  /** Decoded fault message. Null means healthy; a non-null string is an active fault. */
71754
71848
  error: string().nullable(),
71755
71849
  /** Ms epoch when the slice was last refreshed. */
71756
71850
  lastFetchedAt: number()
71757
71851
  });
71758
- var DeviceIdSchema = number().int().nonnegative();
71759
- var MinutesSchema = number().int().min(0);
71852
+ var DeviceIdSchema$1 = number().int().nonnegative();
71760
71853
  var petFountainCapability = {
71761
71854
  name: "pet-fountain",
71762
71855
  scope: "device",
@@ -71766,38 +71859,14 @@ var petFountainCapability = {
71766
71859
  methods: {
71767
71860
  /** Start or stop the pump. */
71768
71861
  setPump: method(object({
71769
- deviceId: DeviceIdSchema,
71770
- on: boolean()
71771
- }), _void(), {
71772
- kind: "mutation",
71773
- auth: "protected"
71774
- }),
71775
- /** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
71776
- setPumpInterval: method(object({
71777
- deviceId: DeviceIdSchema,
71862
+ deviceId: DeviceIdSchema$1,
71778
71863
  on: boolean()
71779
71864
  }), _void(), {
71780
71865
  kind: "mutation",
71781
71866
  auth: "protected"
71782
71867
  }),
71783
- /** Set how many minutes the pump runs per cycle. */
71784
- setPumpOnMinutes: method(object({
71785
- deviceId: DeviceIdSchema,
71786
- minutes: MinutesSchema
71787
- }), _void(), {
71788
- kind: "mutation",
71789
- auth: "protected"
71790
- }),
71791
- /** Set how many minutes the pump rests per cycle. */
71792
- setPumpOffMinutes: method(object({
71793
- deviceId: DeviceIdSchema,
71794
- minutes: MinutesSchema
71795
- }), _void(), {
71796
- kind: "mutation",
71797
- auth: "protected"
71798
- }),
71799
71868
  /** Clear the rolling daily consumption counters on the device. */
71800
- resetDailyConsumption: method(object({ deviceId: DeviceIdSchema }), _void(), {
71869
+ resetDailyConsumption: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
71801
71870
  kind: "mutation",
71802
71871
  auth: "protected"
71803
71872
  })
@@ -74165,6 +74234,79 @@ var ptzAutotrackCapability = {
74165
74234
  */
74166
74235
  history: "none"
74167
74236
  };
74237
+ /**
74238
+ * The on/off duty cycle of a pet fountain's pump. Some models run the pump
74239
+ * continuously and have nothing to configure; others can alternate a run time
74240
+ * and a rest time. That is model-specific, so it is its own optional cap on the
74241
+ * fountain device: a fountain without cycle entities simply never composes it
74242
+ * (planning#366), and the `pet-fountain` cap stays the model-independent core.
74243
+ *
74244
+ * Like `pet-fountain` it has no native vendor provider: an operator BUILDS the
74245
+ * cycle from loose entities (a cycle switch and two number boxes) and every
74246
+ * method is a forward to one source entity (D659, D967). Durations are stored
74247
+ * in SECONDS (D944); a number box that cannot be read back leaves them `null`
74248
+ * — unknown, never zero (D393).
74249
+ */
74250
+ var PumpCycleStatusSchema = object({
74251
+ /** True when the pump works on the on/off cycle, false when it runs continuously. Null while unknown. */
74252
+ enabled: boolean().nullable(),
74253
+ /** How long the pump runs per cycle, in seconds. Null while unknown. */
74254
+ onTime: number().min(0).nullable().meta(readingMeta("duration")),
74255
+ /** How long the pump rests per cycle, in seconds. Null while unknown. */
74256
+ offTime: number().min(0).nullable().meta(readingMeta("duration")),
74257
+ /** Ms epoch when the slice was last refreshed. */
74258
+ lastFetchedAt: number()
74259
+ });
74260
+ var DeviceIdSchema = number().int().nonnegative();
74261
+ var MinutesSchema = number().int().min(0);
74262
+ var pumpCycleCapability = {
74263
+ name: "pump-cycle",
74264
+ scope: "device",
74265
+ deviceNative: true,
74266
+ mode: "singleton",
74267
+ deviceTypes: [DeviceType.PetFountain],
74268
+ methods: {
74269
+ /** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
74270
+ setEnabled: method(object({
74271
+ deviceId: DeviceIdSchema,
74272
+ on: boolean()
74273
+ }), _void(), {
74274
+ kind: "mutation",
74275
+ auth: "protected"
74276
+ }),
74277
+ /** Set how many minutes the pump runs per cycle. */
74278
+ setOnMinutes: method(object({
74279
+ deviceId: DeviceIdSchema,
74280
+ minutes: MinutesSchema
74281
+ }), _void(), {
74282
+ kind: "mutation",
74283
+ auth: "protected"
74284
+ }),
74285
+ /** Set how many minutes the pump rests per cycle. */
74286
+ setOffMinutes: method(object({
74287
+ deviceId: DeviceIdSchema,
74288
+ minutes: MinutesSchema
74289
+ }), _void(), {
74290
+ kind: "mutation",
74291
+ auth: "protected"
74292
+ })
74293
+ },
74294
+ status: {
74295
+ schema: PumpCycleStatusSchema,
74296
+ kind: "push"
74297
+ },
74298
+ /** Runtime-state slice — mirrored by the kernel; the hero card reads it whole. */
74299
+ runtimeState: PumpCycleStatusSchema,
74300
+ /**
74301
+ * Runtime-state durability: **session** — live appliance state re-published on connect.
74302
+ *
74303
+ * See `RuntimeStateDurability`. Enforced by
74304
+ * `scripts/check-runtime-state-durability.ts`.
74305
+ */
74306
+ durability: "session",
74307
+ /** History (D850): a duty-cycle setting is not a series worth recording. */
74308
+ history: "none"
74309
+ };
74168
74310
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, DeviceType.Gateway, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
74169
74311
  kind: "mutation",
74170
74312
  auth: "admin"
@@ -83459,6 +83601,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
83459
83601
  pressureSensor: pressureSensorCapability,
83460
83602
  privacyMask: privacyMaskCapability,
83461
83603
  ptzAutotrack: ptzAutotrackCapability,
83604
+ pumpCycle: pumpCycleCapability,
83462
83605
  recordingOnboard: recordingOnboardCapability,
83463
83606
  recordingSignal: recordingSignalCapability,
83464
83607
  runningState: runningStateCapability,
@@ -85149,6 +85292,27 @@ Object.freeze({
85149
85292
  access: "view",
85150
85293
  role: "viewer"
85151
85294
  },
85295
+ "boardKeySource.getBoardKey": {
85296
+ capName: "board-key-source",
85297
+ capScope: "system",
85298
+ addonId: null,
85299
+ access: "view",
85300
+ role: "admin"
85301
+ },
85302
+ "boardKeySource.listBoards": {
85303
+ capName: "board-key-source",
85304
+ capScope: "system",
85305
+ addonId: null,
85306
+ access: "view",
85307
+ role: "admin"
85308
+ },
85309
+ "boardKeySource.listSources": {
85310
+ capName: "board-key-source",
85311
+ capScope: "system",
85312
+ addonId: null,
85313
+ access: "view",
85314
+ role: "admin"
85315
+ },
85152
85316
  "brightness.getStatus": {
85153
85317
  capName: "brightness",
85154
85318
  capScope: "device",
@@ -89972,27 +90136,6 @@ Object.freeze({
89972
90136
  access: "create",
89973
90137
  role: "viewer"
89974
90138
  },
89975
- "petFountain.setPumpInterval": {
89976
- capName: "pet-fountain",
89977
- capScope: "device",
89978
- addonId: null,
89979
- access: "create",
89980
- role: "viewer"
89981
- },
89982
- "petFountain.setPumpOffMinutes": {
89983
- capName: "pet-fountain",
89984
- capScope: "device",
89985
- addonId: null,
89986
- access: "create",
89987
- role: "viewer"
89988
- },
89989
- "petFountain.setPumpOnMinutes": {
89990
- capName: "pet-fountain",
89991
- capScope: "device",
89992
- addonId: null,
89993
- access: "create",
89994
- role: "viewer"
89995
- },
89996
90139
  "pipelineAnalytics.addRetrainFrameFromRecording": {
89997
90140
  capName: "pipeline-analytics",
89998
90141
  capScope: "device",
@@ -91771,6 +91914,34 @@ Object.freeze({
91771
91914
  access: "create",
91772
91915
  role: "admin"
91773
91916
  },
91917
+ "pumpCycle.getStatus": {
91918
+ capName: "pump-cycle",
91919
+ capScope: "device",
91920
+ addonId: null,
91921
+ access: "view",
91922
+ role: "viewer"
91923
+ },
91924
+ "pumpCycle.setEnabled": {
91925
+ capName: "pump-cycle",
91926
+ capScope: "device",
91927
+ addonId: null,
91928
+ access: "create",
91929
+ role: "viewer"
91930
+ },
91931
+ "pumpCycle.setOffMinutes": {
91932
+ capName: "pump-cycle",
91933
+ capScope: "device",
91934
+ addonId: null,
91935
+ access: "create",
91936
+ role: "viewer"
91937
+ },
91938
+ "pumpCycle.setOnMinutes": {
91939
+ capName: "pump-cycle",
91940
+ capScope: "device",
91941
+ addonId: null,
91942
+ access: "create",
91943
+ role: "viewer"
91944
+ },
91774
91945
  "reboot.reboot": {
91775
91946
  capName: "reboot",
91776
91947
  capScope: "device",
@@ -96315,21 +96486,6 @@ Object.freeze({
96315
96486
  form: "single",
96316
96487
  optional: false
96317
96488
  }],
96318
- "petFountain.setPumpInterval": [{
96319
- name: "deviceId",
96320
- form: "single",
96321
- optional: false
96322
- }],
96323
- "petFountain.setPumpOffMinutes": [{
96324
- name: "deviceId",
96325
- form: "single",
96326
- optional: false
96327
- }],
96328
- "petFountain.setPumpOnMinutes": [{
96329
- name: "deviceId",
96330
- form: "single",
96331
- optional: false
96332
- }],
96333
96489
  "pipelineAnalytics.addRetrainFrameFromRecording": [{
96334
96490
  name: "deviceId",
96335
96491
  form: "single",
@@ -96965,6 +97121,26 @@ Object.freeze({
96965
97121
  form: "single",
96966
97122
  optional: false
96967
97123
  }],
97124
+ "pumpCycle.getStatus": [{
97125
+ name: "deviceId",
97126
+ form: "single",
97127
+ optional: false
97128
+ }],
97129
+ "pumpCycle.setEnabled": [{
97130
+ name: "deviceId",
97131
+ form: "single",
97132
+ optional: false
97133
+ }],
97134
+ "pumpCycle.setOffMinutes": [{
97135
+ name: "deviceId",
97136
+ form: "single",
97137
+ optional: false
97138
+ }],
97139
+ "pumpCycle.setOnMinutes": [{
97140
+ name: "deviceId",
97141
+ form: "single",
97142
+ optional: false
97143
+ }],
96968
97144
  "reboot.reboot": [{
96969
97145
  name: "deviceId",
96970
97146
  form: "single",
@@ -100234,6 +100410,16 @@ var NC_TEMPLATE_VARS = [
100234
100410
  kinds: ["system"],
100235
100411
  systemEventKinds: [...COMBINED_ALARM]
100236
100412
  },
100413
+ {
100414
+ name: "changes",
100415
+ label: "Intrusion changes",
100416
+ example: "Laundry lock unlocked, Back door open",
100417
+ group: "system",
100418
+ families: ["rule"],
100419
+ fields: [...RULE_TEXT],
100420
+ kinds: ["system"],
100421
+ systemEventKinds: [...COMBINED_ALARM]
100422
+ },
100237
100423
  {
100238
100424
  name: "deviceId",
100239
100425
  label: "Device id",
@@ -103702,6 +103888,12 @@ Object.defineProperty(exports, "NcTaxonomySchema", {
103702
103888
  return NcTaxonomySchema;
103703
103889
  }
103704
103890
  });
103891
+ Object.defineProperty(exports, "NcTemplateDefaultSchema", {
103892
+ enumerable: true,
103893
+ get: function() {
103894
+ return NcTemplateDefaultSchema;
103895
+ }
103896
+ });
103705
103897
  Object.defineProperty(exports, "NcTemplatePreviewInputSchema", {
103706
103898
  enumerable: true,
103707
103899
  get: function() {