@camstack/addon-post-analysis 1.2.663 → 1.2.665

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 +14 -0
  2. package/dist/{clip-model-registry-CwXJyrLg.mjs → clip-model-registry-DZTzG2p4.mjs} +377 -132
  3. package/dist/{clip-model-registry-Cz8LWYwU.js → clip-model-registry-nn_STiGt.js} +382 -131
  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-jPBj20ez.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Hy74pMMo.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-BXTAZYaJ.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-DOdK6KJ5.mjs → hostInit-BAYLsfoZ.mjs} +2 -2
  11. package/dist/pipeline-analytics/index.js +438 -61
  12. package/dist/pipeline-analytics/index.mjs +438 -61
  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-Be6bZvOS.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-B5Bw-VHt.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-hmSP-eJt.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).
@@ -9830,6 +9830,7 @@ var CAP_NAMES = Object.freeze([
9830
9830
  "backup",
9831
9831
  "battery",
9832
9832
  "binary",
9833
+ "board-key-source",
9833
9834
  "brightness",
9834
9835
  "broker",
9835
9836
  "button",
@@ -9951,6 +9952,7 @@ var CAP_NAMES = Object.freeze([
9951
9952
  "privacy-mask",
9952
9953
  "ptz",
9953
9954
  "ptz-autotrack",
9955
+ "pump-cycle",
9954
9956
  "reboot",
9955
9957
  "record-entries",
9956
9958
  "recording",
@@ -11243,18 +11245,6 @@ Object.freeze({
11243
11245
  "path": "pumpRunning",
11244
11246
  "valueType": "boolean"
11245
11247
  },
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
11248
  {
11259
11249
  "path": "lastDrink",
11260
11250
  "valueType": "number"
@@ -11378,6 +11368,20 @@ Object.freeze({
11378
11368
  "valueType": "number"
11379
11369
  }
11380
11370
  ],
11371
+ "pump-cycle": [
11372
+ {
11373
+ "path": "enabled",
11374
+ "valueType": "boolean"
11375
+ },
11376
+ {
11377
+ "path": "onTime",
11378
+ "valueType": "number"
11379
+ },
11380
+ {
11381
+ "path": "offTime",
11382
+ "valueType": "number"
11383
+ }
11384
+ ],
11381
11385
  "recording-archive": [
11382
11386
  {
11383
11387
  "path": "deviceId",
@@ -11829,7 +11833,7 @@ Object.freeze({
11829
11833
  * can answer "may a rule actuate this?" without importing the schema barrel
11830
11834
  * (~144MB RSS per runner, D28).
11831
11835
  *
11832
- * Coverage: 101 device-scoped capabilities.
11836
+ * Coverage: 102 device-scoped capabilities.
11833
11837
  */
11834
11838
  var DEVICE_SCOPED_CAPS = new Set([
11835
11839
  "accessories",
@@ -11906,6 +11910,7 @@ var DEVICE_SCOPED_CAPS = new Set([
11906
11910
  "privacy-mask",
11907
11911
  "ptz",
11908
11912
  "ptz-autotrack",
11913
+ "pump-cycle",
11909
11914
  "reboot",
11910
11915
  "recording",
11911
11916
  "recording-onboard",
@@ -13352,6 +13357,73 @@ var NodeColorIdSchema = _enum([
13352
13357
  "node-g",
13353
13358
  "node-h"
13354
13359
  ]);
13360
+ //#endregion
13361
+ //#region ../types/dist/index.mjs
13362
+ var SMTP_INBOUND_DEFAULT_PORT = 2525;
13363
+ var SMTP_INBOUND_DEFAULT_DOMAIN = "camstack.local";
13364
+ var SMTP_INBOUND_DEFAULT_MAX_MESSAGE_BYTES = 25 * 1024 * 1024;
13365
+ /** The text excerpt a message carries on the bus. */
13366
+ var SMTP_INBOUND_TEXT_MAX_CHARS = 4096;
13367
+ var PortSchema = number().int().min(1).max(65535);
13368
+ /** A recipient local-part: what stands before the `@`. */
13369
+ var SmtpRecipientSchema = string().min(1).max(64).regex(/^[A-Za-z0-9._+-]+$/);
13370
+ object({
13371
+ port: PortSchema.default(SMTP_INBOUND_DEFAULT_PORT),
13372
+ bindHost: string().min(1).default("0.0.0.0"),
13373
+ domain: string().min(1).default(SMTP_INBOUND_DEFAULT_DOMAIN),
13374
+ requireAuth: boolean().default(true),
13375
+ username: string().default(""),
13376
+ password: string().default("").meta({ secret: true }),
13377
+ starttls: boolean().default(false),
13378
+ maxMessageBytes: number().int().positive().default(SMTP_INBOUND_DEFAULT_MAX_MESSAGE_BYTES)
13379
+ });
13380
+ object({
13381
+ host: string().min(1).nullable(),
13382
+ hostReason: string().nullable(),
13383
+ port: PortSchema,
13384
+ domain: string().min(1),
13385
+ requireAuth: boolean(),
13386
+ username: string(),
13387
+ password: string(),
13388
+ starttls: boolean()
13389
+ });
13390
+ object({
13391
+ recipients: array(SmtpRecipientSchema).min(1),
13392
+ /**
13393
+ * Who is subscribing. A second `subscribe` with the same id REPLACES that subscriber's
13394
+ * recipients (the way a consumer that restarted, or lost a device, declares its set again);
13395
+ * a recipient held by another subscriber is refused with `smtp-inbound/recipient-claimed`.
13396
+ * Absent, the subscriber is anonymous and unique.
13397
+ */
13398
+ subscriberId: string().min(1).max(64).optional()
13399
+ });
13400
+ var SmtpInboundAttachmentSchema = object({
13401
+ filename: string(),
13402
+ contentType: string(),
13403
+ bytes: number().int().nonnegative()
13404
+ });
13405
+ /** The payload of one `broker.message` (the key is the recipient local-part). */
13406
+ var SmtpInboundMessageSchema = object({
13407
+ /** Monotonic per mailbox; a gap tells a consumer it missed an event. */
13408
+ seq: number().int().positive(),
13409
+ messageId: string(),
13410
+ receivedAt: number().int().nonnegative(),
13411
+ from: string(),
13412
+ to: string(),
13413
+ subject: string(),
13414
+ text: string().max(SMTP_INBOUND_TEXT_MAX_CHARS),
13415
+ attachments: array(SmtpInboundAttachmentSchema)
13416
+ });
13417
+ object({
13418
+ /** The newest seq issued so far (0 before any mail). */
13419
+ lastSeq: number().int().nonnegative(),
13420
+ /** The oldest seq still retained; messages below it are gone. */
13421
+ oldestSeq: number().int().nonnegative(),
13422
+ messages: array(object({
13423
+ key: string(),
13424
+ message: SmtpInboundMessageSchema
13425
+ }))
13426
+ });
13355
13427
  var OWNER_TYPES = new Set([
13356
13428
  "track",
13357
13429
  "face",
@@ -20384,24 +20456,52 @@ var APPLIANCE_CAP_VOCABULARY = {
20384
20456
  args: { on: false }
20385
20457
  },
20386
20458
  {
20387
- id: "petFountain.intervalOn",
20388
- method: "setPumpInterval",
20459
+ id: "petFountain.resetDailyConsumption",
20460
+ method: "resetDailyConsumption",
20461
+ label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
20462
+ phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
20463
+ icon: "rotate-ccw"
20464
+ }
20465
+ ],
20466
+ state: [{
20467
+ kind: "boolean",
20468
+ field: "empty",
20469
+ label: t("Tank empty", "Serbatoio vuoto"),
20470
+ whenTrue: t("When the tank of {device} is empty", "Quando il serbatoio di {device} è vuoto"),
20471
+ whenFalse: t("When the tank of {device} is refilled", "Quando il serbatoio di {device} viene riempito"),
20472
+ icon: "droplet"
20473
+ }, {
20474
+ kind: "numeric",
20475
+ field: "waterLevel",
20476
+ quantity: t("the water level", "il livello dell’acqua"),
20477
+ label: t("Water level", "Livello dell’acqua"),
20478
+ unit: "%",
20479
+ icon: "droplets"
20480
+ }]
20481
+ },
20482
+ "pump-cycle": {
20483
+ scope: "device",
20484
+ noun: t("Pump cycle", "Ciclo della pompa"),
20485
+ actions: [
20486
+ {
20487
+ id: "pumpCycle.on",
20488
+ method: "setEnabled",
20389
20489
  label: t("Pump cycle on", "Ciclo pompa attivo"),
20390
20490
  phrase: t("Run the pump of {device} on its on/off cycle", "Fai lavorare la pompa di {device} a ciclo acceso/spento"),
20391
20491
  icon: "timer",
20392
20492
  args: { on: true }
20393
20493
  },
20394
20494
  {
20395
- id: "petFountain.intervalOff",
20396
- method: "setPumpInterval",
20495
+ id: "pumpCycle.off",
20496
+ method: "setEnabled",
20397
20497
  label: t("Pump cycle off", "Ciclo pompa spento"),
20398
20498
  phrase: t("Run the pump of {device} continuously", "Fai lavorare la pompa di {device} in continuo"),
20399
20499
  icon: "timer-off",
20400
20500
  args: { on: false }
20401
20501
  },
20402
20502
  {
20403
- id: "petFountain.pumpOnMinutes",
20404
- method: "setPumpOnMinutes",
20503
+ id: "pumpCycle.onMinutes",
20504
+ method: "setOnMinutes",
20405
20505
  label: t("Set pump run time", "Imposta il tempo di lavoro della pompa"),
20406
20506
  phrase: t("Set the pump of {device} to run {minutes} minutes per cycle", "Imposta la pompa di {device} a lavorare {minutes} minuti per ciclo"),
20407
20507
  icon: "timer",
@@ -20417,8 +20517,8 @@ var APPLIANCE_CAP_VOCABULARY = {
20417
20517
  }]
20418
20518
  },
20419
20519
  {
20420
- id: "petFountain.pumpOffMinutes",
20421
- method: "setPumpOffMinutes",
20520
+ id: "pumpCycle.offMinutes",
20521
+ method: "setOffMinutes",
20422
20522
  label: t("Set pump rest time", "Imposta il tempo di riposo della pompa"),
20423
20523
  phrase: t("Set the pump of {device} to rest {minutes} minutes per cycle", "Imposta la pompa di {device} a riposare {minutes} minuti per ciclo"),
20424
20524
  icon: "timer-off",
@@ -20432,29 +20532,15 @@ var APPLIANCE_CAP_VOCABULARY = {
20432
20532
  unit: "min"
20433
20533
  }
20434
20534
  }]
20435
- },
20436
- {
20437
- id: "petFountain.resetDailyConsumption",
20438
- method: "resetDailyConsumption",
20439
- label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
20440
- phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
20441
- icon: "rotate-ccw"
20442
20535
  }
20443
20536
  ],
20444
20537
  state: [{
20445
20538
  kind: "boolean",
20446
- field: "empty",
20447
- label: t("Tank empty", "Serbatoio vuoto"),
20448
- whenTrue: t("When the tank of {device} is empty", "Quando il serbatoio di {device} è vuoto"),
20449
- whenFalse: t("When the tank of {device} is refilled", "Quando il serbatoio di {device} viene riempito"),
20450
- icon: "droplet"
20451
- }, {
20452
- kind: "numeric",
20453
- field: "waterLevel",
20454
- quantity: t("the water level", "il livello dell’acqua"),
20455
- label: t("Water level", "Livello dell’acqua"),
20456
- unit: "%",
20457
- icon: "droplets"
20539
+ field: "enabled",
20540
+ label: t("Pump cycle", "Ciclo pompa"),
20541
+ whenTrue: t("When {device} starts running its pump on a cycle", "Quando {device} inizia a far lavorare la pompa a ciclo"),
20542
+ whenFalse: t("When {device} runs its pump continuously", "Quando {device} fa lavorare la pompa in continuo"),
20543
+ icon: "timer"
20458
20544
  }]
20459
20545
  },
20460
20546
  "media-player": {
@@ -22347,6 +22433,7 @@ var SYSTEM_CAP_VOCABULARY = {
22347
22433
  "audio-analyzer": system(PIPELINE),
22348
22434
  "audio-codec": system(INTERNAL),
22349
22435
  "auth-provider": system(IDENTITY),
22436
+ "board-key-source": system(INTERNAL),
22350
22437
  backup: system("system backups — run and restored from the Backups page"),
22351
22438
  broker: system("message-broker connections — configured, not actuated"),
22352
22439
  "calendar-source": system(INTERNAL),
@@ -47497,6 +47584,49 @@ var binaryCapability = {
47497
47584
  volatileStateFields: ["lastChangedAt"]
47498
47585
  };
47499
47586
  /**
47587
+ * Why a board key could not be read. Typed so a caller reports the cause and
47588
+ * never treats "could not read" as "has no key" (D49).
47589
+ */
47590
+ var BoardKeyFailureReasonSchema = _enum([
47591
+ "unknown-source",
47592
+ "not-admin",
47593
+ "no-builder",
47594
+ "no-ingress-url",
47595
+ "unreachable",
47596
+ "unknown-board",
47597
+ "no-encryption-key",
47598
+ "unreadable-config"
47599
+ ]);
47600
+ var BoardKeySourceSchema = object({
47601
+ sourceId: string(),
47602
+ name: string()
47603
+ });
47604
+ var BoardKeyBoardSchema = object({
47605
+ /** The builder's file name, e.g. `kitchen.yaml`: the handle `getBoardKey` takes. */
47606
+ configuration: string(),
47607
+ /** The node name the builder gives the board. */
47608
+ name: string(),
47609
+ /** The address the builder knows the board by, when it has one. */
47610
+ address: string().nullable()
47611
+ });
47612
+ var BoardKeyFailureSchema = object({
47613
+ ok: literal(false),
47614
+ reason: BoardKeyFailureReasonSchema,
47615
+ detail: string().optional()
47616
+ });
47617
+ var ListBoardsResultSchema = discriminatedUnion("ok", [object({
47618
+ ok: literal(true),
47619
+ boards: array(BoardKeyBoardSchema).readonly()
47620
+ }), BoardKeyFailureSchema]);
47621
+ var GetBoardKeyResultSchema = discriminatedUnion("ok", [object({
47622
+ ok: literal(true),
47623
+ key: string()
47624
+ }), BoardKeyFailureSchema]);
47625
+ method(_void(), array(BoardKeySourceSchema).readonly(), { auth: "admin" }), method(object({ sourceId: string().min(1) }), ListBoardsResultSchema, { auth: "admin" }), method(object({
47626
+ sourceId: string().min(1),
47627
+ configuration: string().min(1)
47628
+ }), GetBoardKeyResultSchema, { auth: "admin" });
47629
+ /**
47500
47630
  * Dimmable-light brightness control. Co-exists with `switch` on the
47501
47631
  * same device — the switch toggles on/off, this cap sets the level
47502
47632
  * applied when the light is on. Drivers map their per-vendor dim
@@ -54078,7 +54208,7 @@ var DishwasherStatusSchema = object({
54078
54208
  /** Ms epoch of the last value received from the appliance; 0 = never. */
54079
54209
  lastFetchedAt: number()
54080
54210
  });
54081
- var DeviceIdSchema$1 = number().int().nonnegative();
54211
+ var DeviceIdSchema$2 = number().int().nonnegative();
54082
54212
  /** A value a program option or setting can take. */
54083
54213
  var DishwasherValueSchema = union([
54084
54214
  boolean(),
@@ -54153,77 +54283,77 @@ var dishwasherCapability = {
54153
54283
  * option feature keys; each is checked against the program's constraints.
54154
54284
  */
54155
54285
  start: method(object({
54156
- deviceId: DeviceIdSchema$1,
54286
+ deviceId: DeviceIdSchema$2,
54157
54287
  program: string().min(1).optional(),
54158
54288
  options: record(string(), DishwasherValueSchema).optional()
54159
54289
  }), _void(), {
54160
54290
  kind: "mutation",
54161
54291
  auth: "protected"
54162
54292
  }),
54163
- pause: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54293
+ pause: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54164
54294
  kind: "mutation",
54165
54295
  auth: "protected"
54166
54296
  }),
54167
- resume: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54297
+ resume: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54168
54298
  kind: "mutation",
54169
54299
  auth: "protected"
54170
54300
  }),
54171
- stop: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
54301
+ stop: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
54172
54302
  kind: "mutation",
54173
54303
  auth: "protected"
54174
54304
  }),
54175
54305
  /** Select (not start) a program; refused when the appliance does not offer it. */
54176
54306
  setProgram: method(object({
54177
- deviceId: DeviceIdSchema$1,
54307
+ deviceId: DeviceIdSchema$2,
54178
54308
  program: string().min(1)
54179
54309
  }), _void(), {
54180
54310
  kind: "mutation",
54181
54311
  auth: "protected"
54182
54312
  }),
54183
54313
  setPower: method(object({
54184
- deviceId: DeviceIdSchema$1,
54314
+ deviceId: DeviceIdSchema$2,
54185
54315
  on: boolean()
54186
54316
  }), _void(), {
54187
54317
  kind: "mutation",
54188
54318
  auth: "protected"
54189
54319
  }),
54190
54320
  setHalfLoad: method(object({
54191
- deviceId: DeviceIdSchema$1,
54321
+ deviceId: DeviceIdSchema$2,
54192
54322
  on: boolean()
54193
54323
  }), _void(), {
54194
54324
  kind: "mutation",
54195
54325
  auth: "protected"
54196
54326
  }),
54197
54327
  setHygienePlus: method(object({
54198
- deviceId: DeviceIdSchema$1,
54328
+ deviceId: DeviceIdSchema$2,
54199
54329
  on: boolean()
54200
54330
  }), _void(), {
54201
54331
  kind: "mutation",
54202
54332
  auth: "protected"
54203
54333
  }),
54204
54334
  setExtraDry: method(object({
54205
- deviceId: DeviceIdSchema$1,
54335
+ deviceId: DeviceIdSchema$2,
54206
54336
  on: boolean()
54207
54337
  }), _void(), {
54208
54338
  kind: "mutation",
54209
54339
  auth: "protected"
54210
54340
  }),
54211
54341
  setIntensiveZone: method(object({
54212
- deviceId: DeviceIdSchema$1,
54342
+ deviceId: DeviceIdSchema$2,
54213
54343
  on: boolean()
54214
54344
  }), _void(), {
54215
54345
  kind: "mutation",
54216
54346
  auth: "protected"
54217
54347
  }),
54218
54348
  setVarioSpeedPlus: method(object({
54219
- deviceId: DeviceIdSchema$1,
54349
+ deviceId: DeviceIdSchema$2,
54220
54350
  on: boolean()
54221
54351
  }), _void(), {
54222
54352
  kind: "mutation",
54223
54353
  auth: "protected"
54224
54354
  }),
54225
54355
  setChildLock: method(object({
54226
- deviceId: DeviceIdSchema$1,
54356
+ deviceId: DeviceIdSchema$2,
54227
54357
  on: boolean()
54228
54358
  }), _void(), {
54229
54359
  kind: "mutation",
@@ -54235,7 +54365,7 @@ var dishwasherCapability = {
54235
54365
  * its declared range / members.
54236
54366
  */
54237
54367
  setOption: method(object({
54238
- deviceId: DeviceIdSchema$1,
54368
+ deviceId: DeviceIdSchema$2,
54239
54369
  key: string().min(1),
54240
54370
  value: DishwasherValueSchema
54241
54371
  }), _void(), {
@@ -54243,7 +54373,7 @@ var dishwasherCapability = {
54243
54373
  auth: "protected"
54244
54374
  }),
54245
54375
  /** What this appliance can do, from its own description — the UI is derived from it. */
54246
- getOptions: method(object({ deviceId: DeviceIdSchema$1 }), DishwasherOptionsSchema, { auth: "protected" })
54376
+ getOptions: method(object({ deviceId: DeviceIdSchema$2 }), DishwasherOptionsSchema, { auth: "protected" })
54247
54377
  },
54248
54378
  status: {
54249
54379
  schema: DishwasherStatusSchema,
@@ -56738,6 +56868,11 @@ var IntegrationInstanceSchema = object({
56738
56868
  name: string(),
56739
56869
  /** The addon's own rule (an URL is present, a client id is present...). */
56740
56870
  configured: boolean(),
56871
+ /**
56872
+ * The instance's own on/off switch (D996): always present, derived from the record body
56873
+ * (`enabled !== false`, so a row written before the field existed is on).
56874
+ */
56875
+ enabled: boolean(),
56741
56876
  /** Values for the instance form; a secret is a `SecretFieldView`, never text. */
56742
56877
  formValues: record(string(), unknown()),
56743
56878
  status: IntegrationInstanceStatusSchema.optional()
@@ -56757,6 +56892,12 @@ method(_void(), IntegrationInstanceDescriptionSchema, { auth: "admin" }), method
56757
56892
  }), method(IntegrationInstancePatchSchema, object({ ok: literal(true) }), {
56758
56893
  kind: "mutation",
56759
56894
  auth: "admin"
56895
+ }), method(object({
56896
+ id: IntegrationInstanceIdSchema,
56897
+ enabled: boolean()
56898
+ }), object({ ok: literal(true) }), {
56899
+ kind: "mutation",
56900
+ auth: "admin"
56760
56901
  }), method(object({ id: IntegrationInstanceIdSchema }), object({ ok: literal(true) }), {
56761
56902
  kind: "mutation",
56762
56903
  auth: "admin"
@@ -69058,6 +69199,21 @@ var NcTemplateVarKindSchema = _enum([
69058
69199
  "sound",
69059
69200
  "system"
69060
69201
  ]);
69202
+ /**
69203
+ * The default title/body a rule of one SITUATION is delivered with when the
69204
+ * operator wrote no template — served so an editor can pre-fill it (and the
69205
+ * operator can rebuild it from placeholders) instead of starting from a blank
69206
+ * box that, once saved, silently replaces it. `id` names the situation inside
69207
+ * a rule `kind`: `appliance-cycle` is a `sensor` rule whose device is an
69208
+ * appliance finishing a cycle. Texts are raw templates (`{{var}}` intact), in
69209
+ * the hub's current language and with its overrides applied.
69210
+ */
69211
+ var NcTemplateDefaultSchema = object({
69212
+ id: _enum(["appliance-cycle"]),
69213
+ kind: NcRuleKindSchema,
69214
+ title: string(),
69215
+ body: string()
69216
+ });
69061
69217
  /** Which producer renders a template: an ordinary rule, a timelapse, a digest. */
69062
69218
  var NcTemplateFamilySchema = _enum([
69063
69219
  "rule",
@@ -70620,7 +70776,11 @@ var notificationRulesCapability = {
70620
70776
  taxonomy: NcTaxonomySchema.optional()
70621
70777
  })),
70622
70778
  /** The declared `{{var}}` vocabulary; editors filter it with `templateVarsFor`. */
70623
- getTemplateCatalog: method(object({}), object({ vars: array(NcTemplateVarDescriptorSchema) })),
70779
+ getTemplateCatalog: method(object({}), object({
70780
+ vars: array(NcTemplateVarDescriptorSchema),
70781
+ /** Per-situation default texts; absent on a hub that predates them. */
70782
+ defaults: array(NcTemplateDefaultSchema)
70783
+ })),
70624
70784
  /**
70625
70785
  * Render a template with example values, through the hub's text catalog.
70626
70786
  * Pure: sends nothing. A MUTATION only for transport — a 2.5k-char draft in
@@ -71630,7 +71790,7 @@ var petFeederCapability = {
71630
71790
  /**
71631
71791
  * Pet water-fountain cap. Models the telemetry and the control surface of a
71632
71792
  * circulating drinking fountain: how much water is in the tank, how much the
71633
- * pet drank, whether the pump runs and on what duty cycle.
71793
+ * pet drank, whether the pump runs.
71634
71794
  *
71635
71795
  * It has no native vendor provider of its own: a fountain reaches CamStack as
71636
71796
  * a container of loose entities (a pump switch, two number boxes, a "filter
@@ -71646,8 +71806,10 @@ var petFeederCapability = {
71646
71806
  * never here. Every reading may be `null`: a source that is offline or does
71647
71807
  * not report is unknown, never zero.
71648
71808
  *
71649
- * The filter is not a field of this cap: it is an item of the `consumables`
71650
- * cap on the same device (kind `wear`), reset by the same forward mechanism.
71809
+ * The pump's on/off duty cycle is model-specific and lives in the optional
71810
+ * `pump-cycle` cap. The filter, the cleaning and the water change are not
71811
+ * fields of this cap: they are items of the `consumables` cap on the same
71812
+ * device (kind `wear`), reset by the same forward mechanism.
71651
71813
  */
71652
71814
  var PetFountainStatusSchema = object({
71653
71815
  /** Water in the tank, 0..100 (%). Null while the source has not reported. */
@@ -71658,27 +71820,20 @@ var PetFountainStatusSchema = object({
71658
71820
  empty: boolean().nullable(),
71659
71821
  /** True while the pump is running. Null while unknown. */
71660
71822
  pumpRunning: boolean().nullable(),
71661
- /** True when the pump works on an on/off duty cycle rather than continuously. */
71662
- pumpIntervalEnabled: boolean().nullable(),
71663
- /** How long the pump runs per cycle, in seconds. */
71664
- pumpOnTime: number().min(0).nullable().meta(readingMeta("duration")),
71665
- /** How long the pump rests per cycle, in seconds. */
71666
- pumpOffTime: number().min(0).nullable().meta(readingMeta("duration")),
71667
71823
  /** Water drunk in the last drink, in litres. */
71668
71824
  lastDrink: number().min(0).nullable().meta(readingMeta("volume")),
71669
71825
  /** Water drunk in the current hour, in litres. */
71670
71826
  currentHourDrink: number().min(0).nullable().meta(readingMeta("volume")),
71671
71827
  /** Water drunk over the last 24 hours (rolling), in litres. */
71672
71828
  last24hDrink: number().min(0).nullable().meta(readingMeta("volume")),
71673
- /** Water drunk since local midnight, in litres. */
71829
+ /** Water drunk since local midnight, in litres. Null when the fountain has no such sensor. */
71674
71830
  todayDrink: number().min(0).nullable().meta(readingMeta("volume")),
71675
71831
  /** Decoded fault message. Null means healthy; a non-null string is an active fault. */
71676
71832
  error: string().nullable(),
71677
71833
  /** Ms epoch when the slice was last refreshed. */
71678
71834
  lastFetchedAt: number()
71679
71835
  });
71680
- var DeviceIdSchema = number().int().nonnegative();
71681
- var MinutesSchema = number().int().min(0);
71836
+ var DeviceIdSchema$1 = number().int().nonnegative();
71682
71837
  var petFountainCapability = {
71683
71838
  name: "pet-fountain",
71684
71839
  scope: "device",
@@ -71688,38 +71843,14 @@ var petFountainCapability = {
71688
71843
  methods: {
71689
71844
  /** Start or stop the pump. */
71690
71845
  setPump: method(object({
71691
- deviceId: DeviceIdSchema,
71692
- on: boolean()
71693
- }), _void(), {
71694
- kind: "mutation",
71695
- auth: "protected"
71696
- }),
71697
- /** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
71698
- setPumpInterval: method(object({
71699
- deviceId: DeviceIdSchema,
71846
+ deviceId: DeviceIdSchema$1,
71700
71847
  on: boolean()
71701
71848
  }), _void(), {
71702
71849
  kind: "mutation",
71703
71850
  auth: "protected"
71704
71851
  }),
71705
- /** Set how many minutes the pump runs per cycle. */
71706
- setPumpOnMinutes: method(object({
71707
- deviceId: DeviceIdSchema,
71708
- minutes: MinutesSchema
71709
- }), _void(), {
71710
- kind: "mutation",
71711
- auth: "protected"
71712
- }),
71713
- /** Set how many minutes the pump rests per cycle. */
71714
- setPumpOffMinutes: method(object({
71715
- deviceId: DeviceIdSchema,
71716
- minutes: MinutesSchema
71717
- }), _void(), {
71718
- kind: "mutation",
71719
- auth: "protected"
71720
- }),
71721
71852
  /** Clear the rolling daily consumption counters on the device. */
71722
- resetDailyConsumption: method(object({ deviceId: DeviceIdSchema }), _void(), {
71853
+ resetDailyConsumption: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
71723
71854
  kind: "mutation",
71724
71855
  auth: "protected"
71725
71856
  })
@@ -74087,6 +74218,79 @@ var ptzAutotrackCapability = {
74087
74218
  */
74088
74219
  history: "none"
74089
74220
  };
74221
+ /**
74222
+ * The on/off duty cycle of a pet fountain's pump. Some models run the pump
74223
+ * continuously and have nothing to configure; others can alternate a run time
74224
+ * and a rest time. That is model-specific, so it is its own optional cap on the
74225
+ * fountain device: a fountain without cycle entities simply never composes it
74226
+ * (planning#366), and the `pet-fountain` cap stays the model-independent core.
74227
+ *
74228
+ * Like `pet-fountain` it has no native vendor provider: an operator BUILDS the
74229
+ * cycle from loose entities (a cycle switch and two number boxes) and every
74230
+ * method is a forward to one source entity (D659, D967). Durations are stored
74231
+ * in SECONDS (D944); a number box that cannot be read back leaves them `null`
74232
+ * — unknown, never zero (D393).
74233
+ */
74234
+ var PumpCycleStatusSchema = object({
74235
+ /** True when the pump works on the on/off cycle, false when it runs continuously. Null while unknown. */
74236
+ enabled: boolean().nullable(),
74237
+ /** How long the pump runs per cycle, in seconds. Null while unknown. */
74238
+ onTime: number().min(0).nullable().meta(readingMeta("duration")),
74239
+ /** How long the pump rests per cycle, in seconds. Null while unknown. */
74240
+ offTime: number().min(0).nullable().meta(readingMeta("duration")),
74241
+ /** Ms epoch when the slice was last refreshed. */
74242
+ lastFetchedAt: number()
74243
+ });
74244
+ var DeviceIdSchema = number().int().nonnegative();
74245
+ var MinutesSchema = number().int().min(0);
74246
+ var pumpCycleCapability = {
74247
+ name: "pump-cycle",
74248
+ scope: "device",
74249
+ deviceNative: true,
74250
+ mode: "singleton",
74251
+ deviceTypes: [DeviceType.PetFountain],
74252
+ methods: {
74253
+ /** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
74254
+ setEnabled: method(object({
74255
+ deviceId: DeviceIdSchema,
74256
+ on: boolean()
74257
+ }), _void(), {
74258
+ kind: "mutation",
74259
+ auth: "protected"
74260
+ }),
74261
+ /** Set how many minutes the pump runs per cycle. */
74262
+ setOnMinutes: method(object({
74263
+ deviceId: DeviceIdSchema,
74264
+ minutes: MinutesSchema
74265
+ }), _void(), {
74266
+ kind: "mutation",
74267
+ auth: "protected"
74268
+ }),
74269
+ /** Set how many minutes the pump rests per cycle. */
74270
+ setOffMinutes: method(object({
74271
+ deviceId: DeviceIdSchema,
74272
+ minutes: MinutesSchema
74273
+ }), _void(), {
74274
+ kind: "mutation",
74275
+ auth: "protected"
74276
+ })
74277
+ },
74278
+ status: {
74279
+ schema: PumpCycleStatusSchema,
74280
+ kind: "push"
74281
+ },
74282
+ /** Runtime-state slice — mirrored by the kernel; the hero card reads it whole. */
74283
+ runtimeState: PumpCycleStatusSchema,
74284
+ /**
74285
+ * Runtime-state durability: **session** — live appliance state re-published on connect.
74286
+ *
74287
+ * See `RuntimeStateDurability`. Enforced by
74288
+ * `scripts/check-runtime-state-durability.ts`.
74289
+ */
74290
+ durability: "session",
74291
+ /** History (D850): a duty-cycle setting is not a series worth recording. */
74292
+ history: "none"
74293
+ };
74090
74294
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, DeviceType.Gateway, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
74091
74295
  kind: "mutation",
74092
74296
  auth: "admin"
@@ -83381,6 +83585,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
83381
83585
  pressureSensor: pressureSensorCapability,
83382
83586
  privacyMask: privacyMaskCapability,
83383
83587
  ptzAutotrack: ptzAutotrackCapability,
83588
+ pumpCycle: pumpCycleCapability,
83384
83589
  recordingOnboard: recordingOnboardCapability,
83385
83590
  recordingSignal: recordingSignalCapability,
83386
83591
  runningState: runningStateCapability,
@@ -85071,6 +85276,27 @@ Object.freeze({
85071
85276
  access: "view",
85072
85277
  role: "viewer"
85073
85278
  },
85279
+ "boardKeySource.getBoardKey": {
85280
+ capName: "board-key-source",
85281
+ capScope: "system",
85282
+ addonId: null,
85283
+ access: "view",
85284
+ role: "admin"
85285
+ },
85286
+ "boardKeySource.listBoards": {
85287
+ capName: "board-key-source",
85288
+ capScope: "system",
85289
+ addonId: null,
85290
+ access: "view",
85291
+ role: "admin"
85292
+ },
85293
+ "boardKeySource.listSources": {
85294
+ capName: "board-key-source",
85295
+ capScope: "system",
85296
+ addonId: null,
85297
+ access: "view",
85298
+ role: "admin"
85299
+ },
85074
85300
  "brightness.getStatus": {
85075
85301
  capName: "brightness",
85076
85302
  capScope: "device",
@@ -87752,6 +87978,13 @@ Object.freeze({
87752
87978
  access: "view",
87753
87979
  role: "admin"
87754
87980
  },
87981
+ "integrationInstances.setInstanceEnabled": {
87982
+ capName: "integration-instances",
87983
+ capScope: "system",
87984
+ addonId: null,
87985
+ access: "create",
87986
+ role: "admin"
87987
+ },
87755
87988
  "integrationInstances.testInstance": {
87756
87989
  capName: "integration-instances",
87757
87990
  capScope: "system",
@@ -89887,27 +90120,6 @@ Object.freeze({
89887
90120
  access: "create",
89888
90121
  role: "viewer"
89889
90122
  },
89890
- "petFountain.setPumpInterval": {
89891
- capName: "pet-fountain",
89892
- capScope: "device",
89893
- addonId: null,
89894
- access: "create",
89895
- role: "viewer"
89896
- },
89897
- "petFountain.setPumpOffMinutes": {
89898
- capName: "pet-fountain",
89899
- capScope: "device",
89900
- addonId: null,
89901
- access: "create",
89902
- role: "viewer"
89903
- },
89904
- "petFountain.setPumpOnMinutes": {
89905
- capName: "pet-fountain",
89906
- capScope: "device",
89907
- addonId: null,
89908
- access: "create",
89909
- role: "viewer"
89910
- },
89911
90123
  "pipelineAnalytics.addRetrainFrameFromRecording": {
89912
90124
  capName: "pipeline-analytics",
89913
90125
  capScope: "device",
@@ -91686,6 +91898,34 @@ Object.freeze({
91686
91898
  access: "create",
91687
91899
  role: "admin"
91688
91900
  },
91901
+ "pumpCycle.getStatus": {
91902
+ capName: "pump-cycle",
91903
+ capScope: "device",
91904
+ addonId: null,
91905
+ access: "view",
91906
+ role: "viewer"
91907
+ },
91908
+ "pumpCycle.setEnabled": {
91909
+ capName: "pump-cycle",
91910
+ capScope: "device",
91911
+ addonId: null,
91912
+ access: "create",
91913
+ role: "viewer"
91914
+ },
91915
+ "pumpCycle.setOffMinutes": {
91916
+ capName: "pump-cycle",
91917
+ capScope: "device",
91918
+ addonId: null,
91919
+ access: "create",
91920
+ role: "viewer"
91921
+ },
91922
+ "pumpCycle.setOnMinutes": {
91923
+ capName: "pump-cycle",
91924
+ capScope: "device",
91925
+ addonId: null,
91926
+ access: "create",
91927
+ role: "viewer"
91928
+ },
91689
91929
  "reboot.reboot": {
91690
91930
  capName: "reboot",
91691
91931
  capScope: "device",
@@ -96230,21 +96470,6 @@ Object.freeze({
96230
96470
  form: "single",
96231
96471
  optional: false
96232
96472
  }],
96233
- "petFountain.setPumpInterval": [{
96234
- name: "deviceId",
96235
- form: "single",
96236
- optional: false
96237
- }],
96238
- "petFountain.setPumpOffMinutes": [{
96239
- name: "deviceId",
96240
- form: "single",
96241
- optional: false
96242
- }],
96243
- "petFountain.setPumpOnMinutes": [{
96244
- name: "deviceId",
96245
- form: "single",
96246
- optional: false
96247
- }],
96248
96473
  "pipelineAnalytics.addRetrainFrameFromRecording": [{
96249
96474
  name: "deviceId",
96250
96475
  form: "single",
@@ -96880,6 +97105,26 @@ Object.freeze({
96880
97105
  form: "single",
96881
97106
  optional: false
96882
97107
  }],
97108
+ "pumpCycle.getStatus": [{
97109
+ name: "deviceId",
97110
+ form: "single",
97111
+ optional: false
97112
+ }],
97113
+ "pumpCycle.setEnabled": [{
97114
+ name: "deviceId",
97115
+ form: "single",
97116
+ optional: false
97117
+ }],
97118
+ "pumpCycle.setOffMinutes": [{
97119
+ name: "deviceId",
97120
+ form: "single",
97121
+ optional: false
97122
+ }],
97123
+ "pumpCycle.setOnMinutes": [{
97124
+ name: "deviceId",
97125
+ form: "single",
97126
+ optional: false
97127
+ }],
96883
97128
  "reboot.reboot": [{
96884
97129
  name: "deviceId",
96885
97130
  form: "single",
@@ -103617,6 +103862,12 @@ Object.defineProperty(exports, "NcTaxonomySchema", {
103617
103862
  return NcTaxonomySchema;
103618
103863
  }
103619
103864
  });
103865
+ Object.defineProperty(exports, "NcTemplateDefaultSchema", {
103866
+ enumerable: true,
103867
+ get: function() {
103868
+ return NcTemplateDefaultSchema;
103869
+ }
103870
+ });
103620
103871
  Object.defineProperty(exports, "NcTemplatePreviewInputSchema", {
103621
103872
  enumerable: true,
103622
103873
  get: function() {