@camstack/types 1.2.400 → 1.2.401

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.
@@ -202,6 +202,97 @@ declare const QueryManyEntrySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
202
202
  }, z.core.$strip>], "ok">;
203
203
  export type DeviceHistoryQueryManyEntry = z.infer<typeof QueryManyEntrySchema>;
204
204
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
205
+ /**
206
+ * Why a series is orphan. `device-gone`: its device is absent from the
207
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
208
+ * key is declared by no capability any more (a field a cap removed).
209
+ */
210
+ export declare const DeviceHistoryOrphanReasonSchema: z.ZodEnum<{
211
+ "device-gone": "device-gone";
212
+ undeclared: "undeclared";
213
+ }>;
214
+ export type DeviceHistoryOrphanReason = z.infer<typeof DeviceHistoryOrphanReasonSchema>;
215
+ /** Rows held per stored tier. */
216
+ declare const TierRowsSchema: z.ZodObject<{
217
+ raw: z.ZodNumber;
218
+ '5m': z.ZodNumber;
219
+ '1h': z.ZodNumber;
220
+ '1d': z.ZodNumber;
221
+ }, z.core.$strip>;
222
+ export type DeviceHistoryTierRows = z.infer<typeof TierRowsSchema>;
223
+ declare const OrphanSeriesSchema: z.ZodObject<{
224
+ seriesId: z.ZodNumber;
225
+ deviceId: z.ZodNumber;
226
+ key: z.ZodString;
227
+ scope: z.ZodString;
228
+ displayName: z.ZodNullable<z.ZodString>;
229
+ reason: z.ZodEnum<{
230
+ "device-gone": "device-gone";
231
+ undeclared: "undeclared";
232
+ }>;
233
+ missingSince: z.ZodNullable<z.ZodNumber>;
234
+ firstTs: z.ZodNumber;
235
+ lastTs: z.ZodNumber;
236
+ rows: z.ZodObject<{
237
+ raw: z.ZodNumber;
238
+ '5m': z.ZodNumber;
239
+ '1h': z.ZodNumber;
240
+ '1d': z.ZodNumber;
241
+ }, z.core.$strip>;
242
+ }, z.core.$strip>;
243
+ export type DeviceHistoryOrphanSeries = z.infer<typeof OrphanSeriesSchema>;
244
+ /** At most this many orphans are listed (with their row counts) per call. */
245
+ export declare const DEVICE_HISTORY_ORPHAN_LIST_MAX = 200;
246
+ /** At most this many series are deleted per call. */
247
+ export declare const DEVICE_HISTORY_ORPHAN_DELETE_MAX = 50;
248
+ export declare const DeviceHistoryOrphanDeleteRefusalSchema: z.ZodEnum<{
249
+ failed: "failed";
250
+ "not-found": "not-found";
251
+ "not-orphan": "not-orphan";
252
+ }>;
253
+ declare const OrphanDeleteEntrySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
254
+ seriesId: z.ZodNumber;
255
+ ok: z.ZodLiteral<true>;
256
+ deleted: z.ZodObject<{
257
+ raw: z.ZodNumber;
258
+ '5m': z.ZodNumber;
259
+ '1h': z.ZodNumber;
260
+ '1d': z.ZodNumber;
261
+ }, z.core.$strip>;
262
+ }, z.core.$strip>, z.ZodObject<{
263
+ seriesId: z.ZodNumber;
264
+ ok: z.ZodLiteral<false>;
265
+ reason: z.ZodEnum<{
266
+ failed: "failed";
267
+ "not-found": "not-found";
268
+ "not-orphan": "not-orphan";
269
+ }>;
270
+ }, z.core.$strip>], "ok">;
271
+ export type DeviceHistoryOrphanDeleteEntry = z.infer<typeof OrphanDeleteEntrySchema>;
272
+ declare const OrphanListSchema: z.ZodObject<{
273
+ series: z.ZodReadonly<z.ZodArray<z.ZodObject<{
274
+ seriesId: z.ZodNumber;
275
+ deviceId: z.ZodNumber;
276
+ key: z.ZodString;
277
+ scope: z.ZodString;
278
+ displayName: z.ZodNullable<z.ZodString>;
279
+ reason: z.ZodEnum<{
280
+ "device-gone": "device-gone";
281
+ undeclared: "undeclared";
282
+ }>;
283
+ missingSince: z.ZodNullable<z.ZodNumber>;
284
+ firstTs: z.ZodNumber;
285
+ lastTs: z.ZodNumber;
286
+ rows: z.ZodObject<{
287
+ raw: z.ZodNumber;
288
+ '5m': z.ZodNumber;
289
+ '1h': z.ZodNumber;
290
+ '1d': z.ZodNumber;
291
+ }, z.core.$strip>;
292
+ }, z.core.$strip>>>;
293
+ truncated: z.ZodBoolean;
294
+ }, z.core.$strip>;
295
+ export type DeviceHistoryOrphanList = z.infer<typeof OrphanListSchema>;
205
296
  export declare const DeviceHistoryStatusSchema: z.ZodObject<{
206
297
  startedAt: z.ZodNumber;
207
298
  ready: z.ZodBoolean;
@@ -630,6 +721,63 @@ export declare const deviceHistoryCapability: {
630
721
  lastRefreshAt: z.ZodNullable<z.ZodNumber>;
631
722
  }, z.core.$strip>;
632
723
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
724
+ /**
725
+ * Device series no longer linked to a device (D917): the device is absent
726
+ * from the listings, or the key is declared by no capability. REPORTED,
727
+ * never purged by this judgement; each entry counts its rows per tier
728
+ * (a primary-key range per series). Ordered by device, key, scope.
729
+ */
730
+ readonly listOrphanSeries: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
731
+ series: z.ZodReadonly<z.ZodArray<z.ZodObject<{
732
+ seriesId: z.ZodNumber;
733
+ deviceId: z.ZodNumber;
734
+ key: z.ZodString;
735
+ scope: z.ZodString;
736
+ displayName: z.ZodNullable<z.ZodString>;
737
+ reason: z.ZodEnum<{
738
+ "device-gone": "device-gone";
739
+ undeclared: "undeclared";
740
+ }>;
741
+ missingSince: z.ZodNullable<z.ZodNumber>;
742
+ firstTs: z.ZodNumber;
743
+ lastTs: z.ZodNumber;
744
+ rows: z.ZodObject<{
745
+ raw: z.ZodNumber;
746
+ '5m': z.ZodNumber;
747
+ '1h': z.ZodNumber;
748
+ '1d': z.ZodNumber;
749
+ }, z.core.$strip>;
750
+ }, z.core.$strip>>>;
751
+ truncated: z.ZodBoolean;
752
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
753
+ /**
754
+ * Delete orphan series by id. Each id is re-judged NOW: a series that is
755
+ * not orphan (its device came back) is refused `not-orphan`, an unknown id
756
+ * `not-found`. Deletes tier by tier in the retention slices, then the
757
+ * series row; one entry per id, in order.
758
+ */
759
+ readonly deleteOrphanSeries: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
760
+ seriesIds: z.ZodArray<z.ZodNumber>;
761
+ }, z.core.$strip>, z.ZodObject<{
762
+ results: z.ZodReadonly<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
763
+ seriesId: z.ZodNumber;
764
+ ok: z.ZodLiteral<true>;
765
+ deleted: z.ZodObject<{
766
+ raw: z.ZodNumber;
767
+ '5m': z.ZodNumber;
768
+ '1h': z.ZodNumber;
769
+ '1d': z.ZodNumber;
770
+ }, z.core.$strip>;
771
+ }, z.core.$strip>, z.ZodObject<{
772
+ seriesId: z.ZodNumber;
773
+ ok: z.ZodLiteral<false>;
774
+ reason: z.ZodEnum<{
775
+ failed: "failed";
776
+ "not-found": "not-found";
777
+ "not-orphan": "not-orphan";
778
+ }>;
779
+ }, z.core.$strip>], "ok">>>;
780
+ }, z.core.$strip>, "mutation">;
633
781
  };
634
782
  };
635
783
  export type IDeviceHistoryProvider = InferProvider<typeof deviceHistoryCapability>;
@@ -1551,6 +1551,7 @@ export declare const deviceManagerCapability: {
1551
1551
  columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
1552
1552
  tab: z.ZodOptional<z.ZodString>;
1553
1553
  location: z.ZodOptional<z.ZodEnum<{
1554
+ hero: "hero";
1554
1555
  settings: "settings";
1555
1556
  "top-tab": "top-tab";
1556
1557
  }>>;
@@ -1581,6 +1582,7 @@ export declare const deviceManagerCapability: {
1581
1582
  columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
1582
1583
  tab: z.ZodOptional<z.ZodString>;
1583
1584
  location: z.ZodOptional<z.ZodEnum<{
1585
+ hero: "hero";
1584
1586
  settings: "settings";
1585
1587
  "top-tab": "top-tab";
1586
1588
  }>>;
@@ -1620,6 +1622,7 @@ export declare const deviceManagerCapability: {
1620
1622
  columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
1621
1623
  tab: z.ZodOptional<z.ZodString>;
1622
1624
  location: z.ZodOptional<z.ZodEnum<{
1625
+ hero: "hero";
1623
1626
  settings: "settings";
1624
1627
  "top-tab": "top-tab";
1625
1628
  }>>;
@@ -1648,6 +1651,7 @@ export declare const deviceManagerCapability: {
1648
1651
  columns: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>]>>;
1649
1652
  tab: z.ZodOptional<z.ZodString>;
1650
1653
  location: z.ZodOptional<z.ZodEnum<{
1654
+ hero: "hero";
1651
1655
  settings: "settings";
1652
1656
  "top-tab": "top-tab";
1653
1657
  }>>;
@@ -2,8 +2,9 @@ import { z } from 'zod';
2
2
  import { type InferProvider } from './capability-definition.js';
3
3
  import { DeviceType } from '../device/device-type.js';
4
4
  /**
5
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
6
- * consumable levels (salt, rinse aid) and common program options.
5
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
6
+ * common program options. Salt and rinse aid are NOT here: they are items of
7
+ * the device's `consumables` cap, like every other device's (D915).
7
8
  *
8
9
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
9
10
  * by any integration that exposes the same program / option surface.
@@ -54,12 +55,6 @@ export declare const DishwasherAvailabilitySchema: z.ZodEnum<{
54
55
  offline: "offline";
55
56
  }>;
56
57
  export type DishwasherAvailability = z.infer<typeof DishwasherAvailabilitySchema>;
57
- export declare const DishwasherConsumableLevelSchema: z.ZodEnum<{
58
- empty: "empty";
59
- low: "low";
60
- ok: "ok";
61
- }>;
62
- export type DishwasherConsumableLevel = z.infer<typeof DishwasherConsumableLevelSchema>;
63
58
  export declare const DishwasherStatusSchema: z.ZodObject<{
64
59
  availability: z.ZodEnum<{
65
60
  available: "available";
@@ -98,16 +93,6 @@ export declare const DishwasherStatusSchema: z.ZodObject<{
98
93
  localControlActive: z.ZodNullable<z.ZodBoolean>;
99
94
  powerOn: z.ZodNullable<z.ZodBoolean>;
100
95
  powerState: z.ZodNullable<z.ZodString>;
101
- saltLevel: z.ZodNullable<z.ZodEnum<{
102
- empty: "empty";
103
- low: "low";
104
- ok: "ok";
105
- }>>;
106
- rinseAidLevel: z.ZodNullable<z.ZodEnum<{
107
- empty: "empty";
108
- low: "low";
109
- ok: "ok";
110
- }>>;
111
96
  filterCleaningDue: z.ZodNullable<z.ZodBoolean>;
112
97
  machineCareDue: z.ZodNullable<z.ZodBoolean>;
113
98
  machineCareRemainingRuns: z.ZodNullable<z.ZodNumber>;
@@ -435,16 +420,6 @@ export declare const dishwasherCapability: {
435
420
  localControlActive: z.ZodNullable<z.ZodBoolean>;
436
421
  powerOn: z.ZodNullable<z.ZodBoolean>;
437
422
  powerState: z.ZodNullable<z.ZodString>;
438
- saltLevel: z.ZodNullable<z.ZodEnum<{
439
- empty: "empty";
440
- low: "low";
441
- ok: "ok";
442
- }>>;
443
- rinseAidLevel: z.ZodNullable<z.ZodEnum<{
444
- empty: "empty";
445
- low: "low";
446
- ok: "ok";
447
- }>>;
448
423
  filterCleaningDue: z.ZodNullable<z.ZodBoolean>;
449
424
  machineCareDue: z.ZodNullable<z.ZodBoolean>;
450
425
  machineCareRemainingRuns: z.ZodNullable<z.ZodNumber>;
@@ -499,16 +474,6 @@ export declare const dishwasherCapability: {
499
474
  localControlActive: z.ZodNullable<z.ZodBoolean>;
500
475
  powerOn: z.ZodNullable<z.ZodBoolean>;
501
476
  powerState: z.ZodNullable<z.ZodString>;
502
- saltLevel: z.ZodNullable<z.ZodEnum<{
503
- empty: "empty";
504
- low: "low";
505
- ok: "ok";
506
- }>>;
507
- rinseAidLevel: z.ZodNullable<z.ZodEnum<{
508
- empty: "empty";
509
- low: "low";
510
- ok: "ok";
511
- }>>;
512
477
  filterCleaningDue: z.ZodNullable<z.ZodBoolean>;
513
478
  machineCareDue: z.ZodNullable<z.ZodBoolean>;
514
479
  machineCareRemainingRuns: z.ZodNullable<z.ZodNumber>;
@@ -36,8 +36,8 @@ export { BrokerAddInputSchema, BrokerGetStateInputSchema, type BrokerInfo, type
36
36
  export { cameraPipelineConfigCapability, type ICameraPipelineConfigProvider, } from './camera-pipeline-config.cap.js';
37
37
  export { cameraStreamsCapability, type ICameraStreamsProvider, type PickedCamStream, PickedCamStreamSchema, type PickStreamPreferences, PickStreamPreferencesSchema, type PickStreamRequirements, PickStreamRequirementsSchema, type StreamCodec, StreamCodecSchema, } from './camera-streams.cap.js';
38
38
  export { emitsCollectionSelector, extractNestedAddonId, isArrayOutputSchema, isCollectionArrayMethod, isObjectInput, isVoidInput, kebabToCamel, looseSchema, objectInputDeclaresAddonId, objectInputDeclaresRequiredDeviceId, procedureAuthKey, resolveMethodAuth, } from './cap-router-predicates.js';
39
- export type { CapabilityDefinition, CapabilityEventSchema, CapabilityMethodAuth, CapabilityMethodCaller, CapabilityMethodKind, CapabilityMethodOptions, CapabilityMethodSchema, CapabilityMountHint, CapabilityMountKind, CapabilityStatusItemArray, CapabilityStatusKind, CapabilityStatusSchema, CapCaller, DeviceConfigDerivedFormUi, DeviceConfigSpec, DeviceConfigUiSpec, DeviceConfigWidgetUi, DeviceSettingsContribution, InferDeviceProxyCap, InferEvents, InferName, InferNativeProvider, InferProvider, InferRuntimeState, CapabilityHistory, CapabilityHistoryField, HistoryUnit, ProviderKind, RuntimeStateDurability, UiContribution, UiContributionKind, UiContributionRemote, } from './capability-definition.js';
40
- export { DEFAULT_RUNTIME_STATE_DURABILITY, HISTORY_DEFAULT_MIN_INTERVAL_MS, HISTORY_UNIT_LABELS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, event, expandCapMethods, isDeviceConfigCap, method, optionalMethod, PROVIDER_PIN_FIELD, resolveCapMount, } from './capability-definition.js';
39
+ export type { CapabilityDefinition, CapabilityEventSchema, CapabilityMethodAuth, CapabilityMethodCaller, CapabilityMethodKind, CapabilityMethodOptions, CapabilityMethodSchema, CapabilityMountHint, CapabilityMountKind, CapabilityStatusItemArray, CapabilityStatusKind, CapabilityStatusSchema, CapCaller, DeviceConfigDerivedFormUi, DeviceConfigSpec, DeviceConfigUiSpec, DeviceConfigWidgetUi, DeviceSettingsContribution, InferDeviceProxyCap, InferEvents, InferName, InferNativeProvider, InferProvider, InferRuntimeState, CapabilityHistory, CapabilityHistoryField, CapabilityHistoryItems, HistoryUnit, ProviderKind, RuntimeStateDurability, UiContribution, UiContributionKind, UiContributionRemote, } from './capability-definition.js';
40
+ export { DEFAULT_RUNTIME_STATE_DURABILITY, HISTORY_DEFAULT_MIN_INTERVAL_MS, HISTORY_UNIT_LABELS, historyItemFieldPath, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, event, expandCapMethods, isDeviceConfigCap, method, optionalMethod, PROVIDER_PIN_FIELD, resolveCapMount, } from './capability-definition.js';
41
41
  export { COMPOSER_RUNNER_ID, type ComposerApplyInput, ComposerApplyInputSchema, type ComposerApplyResult, ComposerApplyResultSchema, type ComposerBlock, ComposerBlockSchema, type ComposerBlockVerdict, ComposerBlockVerdictSchema, type ComposerUnreadableBlock, ComposerUnreadableBlockSchema, composerCapability, type IComposerProvider, } from './composer.cap.js';
42
42
  export { CORE_BLOCK_ADDON_PREFIX, CORE_BLOCKS_ADDON_ID, type CompositionBlockInput, CompositionBlockInputSchema, type CompositionBlockPatch, type CompositionCustomizationRead, CompositionCustomizationReadSchema, type CompositionGetRead, CompositionGetReadSchema, type CompositionListRead, CompositionListReadSchema, type CompositionStateRead, CompositionStateReadSchema, type CompositionView, CompositionViewSchema, type CoreBlock, type CoreBlockCompileInput, CoreBlockCompileInputSchema, type CoreBlockCompileResult, CoreBlockCompileResultSchema, type CoreBlockFiles, CoreBlockFilesSchema, type CoreBlockInput, CoreBlockInputFieldsSchema, CoreBlockInputSchema, type CoreBlockPlacement, CoreBlockPlacementSchema, CoreBlockSchema, type CoreBlockSource, type CoreBlockSourceKind, CoreBlockSourceSchema, type CoreBlockStatus, CoreBlockStatusSchema, coreBlockAddonId, coreBlockComposition, coreBlockIdFromAddonId, coreBlockSourceKind, coreBlocksCapability, DEFAULT_CORE_BLOCK_ENTRY, type ICoreBlocksProvider, normalizeCoreBlockWrite, resolveCoreBlockEntry, resolveCoreBlockFiles, } from './core-blocks.cap.js';
43
43
  export * from './custom-actions.js';
@@ -50,7 +50,7 @@ export { type IStorageAdminProvider, type StorageKind, StorageKindSchema, type S
50
50
  export { type DeclareKindResult, DeclareKindResultSchema, type IRecordsProvider, type RecordInput, RecordInputSchema, type RecordQueryInput, RecordQueryInputSchema, type RecordQueryResult, RecordQueryResultSchema, type RecordView, RecordViewSchema, type RecordWhere, RecordWhereSchema, type RecordWhereValue, RecordIdSchema, RecordBodySchema, RecordSecretRefsSchema, type RecordTransactOp, RecordTransactOpSchema, recordsCapability, } from './records.cap.js';
51
51
  export { type EntryKindInfo, EntryKindInfoSchema, type EntryView, EntryViewSchema, type IRecordEntriesProvider, recordEntriesCapability, } from './record-entries.cap.js';
52
52
  export { type IKeychainProvider, KEYCHAIN_MAX_REFS_PER_CALL, type KeychainResolveEntry, KeychainResolveEntrySchema, type KeychainResolveResult, KeychainResolveResultSchema, type KeychainSecretMeta, KeychainSecretMetaSchema, type KeychainState, KeychainStateSchema, type KeychainUnavailableReason, KeychainUnavailableReasonSchema, keychainCapability, } from './keychain.cap.js';
53
- export { DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, type DeviceHistoryStatus, DeviceHistoryStatusSchema, type DeviceHistoryIngestResult, type DeviceHistoryKind, DeviceHistoryKindSchema, type DeviceHistoryProducerKind, DeviceHistoryProducerKindSchema, type DeviceHistoryQueryManyEntry, type DeviceHistoryQueryManyItem, type DeviceHistoryQueryResult, type DeviceHistoryQueryPoint, type DeviceHistoryRefusalReason, DeviceHistoryRefusalReasonSchema, type DeviceHistoryResolution, DeviceHistoryResolutionSchema, type DeviceHistorySeriesInfo, type DeviceHistorySubject, DeviceHistorySubjectSchema, type IDeviceHistoryProvider, deviceHistoryCapability, } from './device-history.cap.js';
53
+ export { DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, DEVICE_HISTORY_ORPHAN_DELETE_MAX, DEVICE_HISTORY_ORPHAN_LIST_MAX, type DeviceHistoryOrphanDeleteEntry, DeviceHistoryOrphanDeleteRefusalSchema, type DeviceHistoryOrphanList, type DeviceHistoryOrphanReason, DeviceHistoryOrphanReasonSchema, type DeviceHistoryOrphanSeries, type DeviceHistoryTierRows, type DeviceHistoryStatus, DeviceHistoryStatusSchema, type DeviceHistoryIngestResult, type DeviceHistoryKind, DeviceHistoryKindSchema, type DeviceHistoryProducerKind, DeviceHistoryProducerKindSchema, type DeviceHistoryQueryManyEntry, type DeviceHistoryQueryManyItem, type DeviceHistoryQueryResult, type DeviceHistoryQueryPoint, type DeviceHistoryRefusalReason, DeviceHistoryRefusalReasonSchema, type DeviceHistoryResolution, DeviceHistoryResolutionSchema, type DeviceHistorySeriesInfo, type DeviceHistorySubject, DeviceHistorySubjectSchema, type IDeviceHistoryProvider, deviceHistoryCapability, } from './device-history.cap.js';
54
54
  export { type DeviceCaStatus, DeviceCaStatusSchema, type DeviceCertificateSettings, DeviceCertificateSettingsSchema, deviceCredentialsCapability, type IDeviceCredentialsProvider, } from './device-credentials.cap.js';
55
55
  export { type HttpsLeafInfo, HttpsLeafInfoSchema, type INodeCertificatesProvider, type MeshLeafInfo, MeshLeafInfoSchema, type NodeHttpsState, NodeHttpsStateSchema, nodeCertificatesCapability, } from './node-certificates.cap.js';
56
56
  export { type IKeychainAdminProvider, KEYCHAIN_RESET_CONFIRMATION, type KeychainAdminSecret, KeychainAdminSecretSchema, type KeychainAuditAction, KeychainAuditActionSchema, type KeychainAuditEntry, KeychainAuditEntrySchema, type KeychainKeySource, type KeychainKeySourceKind, KeychainKeySourceKindSchema, KeychainKeySourceSchema, KEYCHAIN_RESET_TRIGGER_ACTOR, type KeychainResetRecord, KeychainResetRecordSchema, type KeychainSecretUsage, KeychainSecretUsageSchema, type KeychainStatus, KeychainStatusSchema, keychainAdminCapability, type SystemHeldSecretName, SystemHeldSecretNameSchema, } from './keychain-admin.cap.js';
@@ -167,7 +167,7 @@ export { type ClimateControlStatus, ClimateControlStatusSchema, climateControlCa
167
167
  export { type ColorHsvTriplet, type ColorInput, type ColorRgbTriplet, type ColorStatus, ColorStatusSchema, colorCapability, type IColorProvider, } from './color.cap.js';
168
168
  export { CONNECTION_TEST_TIMEOUT_MS, ConnectionTestDescriptorSchema, ConnectionTestInputSchema, type ConnectionTestOutcome, ConnectionTestOutcomeSchema, connectionTestCapability, type IConnectionTestProvider, } from './connection-test.cap.js';
169
169
  export { type ConnectivityStatus, ConnectivityStatusSchema, connectivityCapability, type IConnectivityProvider, } from './connectivity.cap.js';
170
- export { type ConsumableItem, ConsumableItemSchema, type ConsumableRemaining, ConsumableRemainingSchema, type ConsumableRemainingUnit, ConsumableRemainingUnitSchema, type ConsumablesStatus, ConsumablesStatusSchema, consumablesCapability, type IConsumablesProvider, } from './consumables.cap.js';
170
+ export { type ConsumableItem, ConsumableItemSchema, type ConsumableForm, ConsumableFormSchema, consumableFormOf, type ConsumableKind, ConsumableKindSchema, type ConsumableLevel, ConsumableLevelSchema, type ConsumableStatus, ConsumableStatusSchema, consumableKindOf, type ConsumableRemaining, ConsumableRemainingSchema, type ConsumableRemainingUnit, ConsumableRemainingUnitSchema, type ConsumablesStatus, ConsumablesStatusSchema, consumablesCapability, type IConsumablesProvider, } from './consumables.cap.js';
171
171
  export { type ContactStatus, ContactStatusSchema, contactCapability, type IContactProvider, } from './contact.cap.js';
172
172
  export { type ControlKind, ControlKindSchema, type ControlSetValueInput, type ControlStatus, ControlStatusSchema, controlCapability, type IControlProvider, } from './control.cap.js';
173
173
  export { type CoverState, CoverStateSchema, type CoverStatus, CoverStatusSchema, coverCapability, type ICoverProvider, } from './cover.cap.js';
@@ -175,7 +175,7 @@ export { type DayNightMode, DayNightModeSchema, type DayNightOptions, DayNightOp
175
175
  export { type DeviceDiscoveryStatus, DeviceDiscoveryStatusSchema, type DiscoveredChildDevice, DiscoveredChildDeviceSchema, type DiscoveredChildStatus, DiscoveredChildStatusSchema, deviceDiscoveryCapability, type IDeviceDiscoveryNativeProvider, type IDeviceDiscoveryProvider, } from './device-discovery.cap.js';
176
176
  export { deviceOpsCapability, type IDeviceOpsProvider, type RawStateResult, RawStateResultSchema, } from './device-ops.cap.js';
177
177
  export { type DeviceStatus, DeviceStatusSchema, deviceStatusCapability, type IDeviceStatusProvider, } from './device-status.cap.js';
178
- export { type DishwasherAccess, DishwasherAccessSchema, type DishwasherAvailability, DishwasherAvailabilitySchema, type DishwasherConsumableLevel, DishwasherConsumableLevelSchema, type DishwasherOperationState, DishwasherOperationStateSchema, type DishwasherOptionDescriptor, DishwasherOptionDescriptorSchema, type DishwasherOptions, DishwasherOptionsSchema, type DishwasherProgram, DishwasherProgramSchema, type DishwasherState, DishwasherStateSchema, type DishwasherStatus, DishwasherStatusSchema, type DishwasherValue, DishwasherValueSchema, dishwasherCapability, type IDishwasherProvider, } from './dishwasher.cap.js';
178
+ export { type DishwasherAccess, DishwasherAccessSchema, type DishwasherAvailability, DishwasherAvailabilitySchema, type DishwasherOperationState, DishwasherOperationStateSchema, type DishwasherOptionDescriptor, DishwasherOptionDescriptorSchema, type DishwasherOptions, DishwasherOptionsSchema, type DishwasherProgram, DishwasherProgramSchema, type DishwasherState, DishwasherStateSchema, type DishwasherStatus, DishwasherStatusSchema, type DishwasherValue, DishwasherValueSchema, dishwasherCapability, type IDishwasherProvider, } from './dishwasher.cap.js';
179
179
  export { type DoorbellPressEvent, DoorbellPressEventSchema, type DoorbellStatus, DoorbellStatusSchema, doorbellCapability, type IDoorbellProvider, } from './doorbell.cap.js';
180
180
  export { type EnumSensorDateTimeFormat, EnumSensorDateTimeFormatSchema, type EnumSensorStatus, EnumSensorStatusSchema, enumSensorCapability, type IEnumSensorProvider, } from './enum-sensor.cap.js';
181
181
  export { type EventEmitterStatus, EventEmitterStatusSchema, type EventFire, EventFireSchema, eventEmitterCapability, type IEventEmitterProvider, } from './event-emitter.cap.js';
@@ -240,7 +240,7 @@ export { type ITemperatureSensorProvider, type TemperatureSensorStatus, Temperat
240
240
  export { type IToastProvider, ToastSchema, toastCapability } from './toast.cap.js';
241
241
  export { type IUpdateProvider, type UpdateStatus, UpdateStatusSchema, updateCapability, } from './update.cap.js';
242
242
  export { CreateUserInputSchema, ExternalIdentityKeySchema, ExternalIdentitySchema, type IUserManagementProvider, UpdateUserInputSchema, UserSummarySchema, userManagementCapability, } from './user-management.cap.js';
243
- export { type IVacuumControlProvider, type TankStatus, TankStatusSchema, type VacuumControlStatus, VacuumControlStatusSchema, type VacuumState, VacuumStateSchema, vacuumControlCapability, } from './vacuum-control.cap.js';
243
+ export { type IVacuumControlProvider, type VacuumControlStatus, VacuumControlStatusSchema, type VacuumState, VacuumStateSchema, vacuumControlCapability, } from './vacuum-control.cap.js';
244
244
  export { type IValveProvider, type ValveState, ValveStateSchema, type ValveStatus, ValveStatusSchema, valveCapability, } from './valve.cap.js';
245
245
  export { type IVibrationProvider, type VibrationStatus, VibrationStatusSchema, vibrationCapability, } from './vibration.cap.js';
246
246
  export { type IWaterHeaterProvider, type WaterHeaterStatus, WaterHeaterStatusSchema, waterHeaterCapability, } from './water-heater.cap.js';
@@ -17,14 +17,9 @@ import { DeviceType } from '../device/device-type.js';
17
17
  * validates it against the vacuum's own list. `locate` triggers the
18
18
  * find-me chirp; `returnToBase` sends it home.
19
19
  *
20
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
21
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
22
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
23
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
24
- * only when the device has no such tank at all, and use a `TankStatus`
25
- * with both inner fields `null` when the tank exists but its level is
26
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
27
- * so the HA provider leaves all four `null`.
20
+ * Tanks (clean water, dirty water, detergent, dust bin) are NOT here: they
21
+ * are `supply` / `waste` items of the device's `consumables` cap, like every
22
+ * other device's consumables (D915).
28
23
  */
29
24
  export declare const VacuumStateSchema: z.ZodEnum<{
30
25
  cleaning: "cleaning";
@@ -36,22 +31,6 @@ export declare const VacuumStateSchema: z.ZodEnum<{
36
31
  returning: "returning";
37
32
  }>;
38
33
  export type VacuumState = z.infer<typeof VacuumStateSchema>;
39
- /**
40
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
41
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
42
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
43
- * level is currently unknown; the OWNING field being `null` means the
44
- * hardware has no such tank at all.
45
- */
46
- export declare const TankStatusSchema: z.ZodObject<{
47
- level: z.ZodNullable<z.ZodNumber>;
48
- status: z.ZodNullable<z.ZodEnum<{
49
- full: "full";
50
- low: "low";
51
- ok: "ok";
52
- }>>;
53
- }, z.core.$strip>;
54
- export type TankStatus = z.infer<typeof TankStatusSchema>;
55
34
  export declare const VacuumControlStatusSchema: z.ZodObject<{
56
35
  state: z.ZodEnum<{
57
36
  cleaning: "cleaning";
@@ -65,38 +44,6 @@ export declare const VacuumControlStatusSchema: z.ZodObject<{
65
44
  batteryLevel: z.ZodNullable<z.ZodNumber>;
66
45
  fanSpeed: z.ZodNullable<z.ZodString>;
67
46
  availableFanSpeeds: z.ZodArray<z.ZodString>;
68
- cleanWater: z.ZodNullable<z.ZodObject<{
69
- level: z.ZodNullable<z.ZodNumber>;
70
- status: z.ZodNullable<z.ZodEnum<{
71
- full: "full";
72
- low: "low";
73
- ok: "ok";
74
- }>>;
75
- }, z.core.$strip>>;
76
- dirtyWater: z.ZodNullable<z.ZodObject<{
77
- level: z.ZodNullable<z.ZodNumber>;
78
- status: z.ZodNullable<z.ZodEnum<{
79
- full: "full";
80
- low: "low";
81
- ok: "ok";
82
- }>>;
83
- }, z.core.$strip>>;
84
- detergent: z.ZodNullable<z.ZodObject<{
85
- level: z.ZodNullable<z.ZodNumber>;
86
- status: z.ZodNullable<z.ZodEnum<{
87
- full: "full";
88
- low: "low";
89
- ok: "ok";
90
- }>>;
91
- }, z.core.$strip>>;
92
- dustBin: z.ZodNullable<z.ZodObject<{
93
- level: z.ZodNullable<z.ZodNumber>;
94
- status: z.ZodNullable<z.ZodEnum<{
95
- full: "full";
96
- low: "low";
97
- ok: "ok";
98
- }>>;
99
- }, z.core.$strip>>;
100
47
  progressPercent: z.ZodNullable<z.ZodNumber>;
101
48
  errorCode: z.ZodNullable<z.ZodNumber>;
102
49
  errorLabel: z.ZodNullable<z.ZodString>;
@@ -144,38 +91,6 @@ export declare const vacuumControlCapability: {
144
91
  batteryLevel: z.ZodNullable<z.ZodNumber>;
145
92
  fanSpeed: z.ZodNullable<z.ZodString>;
146
93
  availableFanSpeeds: z.ZodArray<z.ZodString>;
147
- cleanWater: z.ZodNullable<z.ZodObject<{
148
- level: z.ZodNullable<z.ZodNumber>;
149
- status: z.ZodNullable<z.ZodEnum<{
150
- full: "full";
151
- low: "low";
152
- ok: "ok";
153
- }>>;
154
- }, z.core.$strip>>;
155
- dirtyWater: z.ZodNullable<z.ZodObject<{
156
- level: z.ZodNullable<z.ZodNumber>;
157
- status: z.ZodNullable<z.ZodEnum<{
158
- full: "full";
159
- low: "low";
160
- ok: "ok";
161
- }>>;
162
- }, z.core.$strip>>;
163
- detergent: z.ZodNullable<z.ZodObject<{
164
- level: z.ZodNullable<z.ZodNumber>;
165
- status: z.ZodNullable<z.ZodEnum<{
166
- full: "full";
167
- low: "low";
168
- ok: "ok";
169
- }>>;
170
- }, z.core.$strip>>;
171
- dustBin: z.ZodNullable<z.ZodObject<{
172
- level: z.ZodNullable<z.ZodNumber>;
173
- status: z.ZodNullable<z.ZodEnum<{
174
- full: "full";
175
- low: "low";
176
- ok: "ok";
177
- }>>;
178
- }, z.core.$strip>>;
179
94
  progressPercent: z.ZodNullable<z.ZodNumber>;
180
95
  errorCode: z.ZodNullable<z.ZodNumber>;
181
96
  errorLabel: z.ZodNullable<z.ZodString>;
@@ -200,38 +115,6 @@ export declare const vacuumControlCapability: {
200
115
  batteryLevel: z.ZodNullable<z.ZodNumber>;
201
116
  fanSpeed: z.ZodNullable<z.ZodString>;
202
117
  availableFanSpeeds: z.ZodArray<z.ZodString>;
203
- cleanWater: z.ZodNullable<z.ZodObject<{
204
- level: z.ZodNullable<z.ZodNumber>;
205
- status: z.ZodNullable<z.ZodEnum<{
206
- full: "full";
207
- low: "low";
208
- ok: "ok";
209
- }>>;
210
- }, z.core.$strip>>;
211
- dirtyWater: z.ZodNullable<z.ZodObject<{
212
- level: z.ZodNullable<z.ZodNumber>;
213
- status: z.ZodNullable<z.ZodEnum<{
214
- full: "full";
215
- low: "low";
216
- ok: "ok";
217
- }>>;
218
- }, z.core.$strip>>;
219
- detergent: z.ZodNullable<z.ZodObject<{
220
- level: z.ZodNullable<z.ZodNumber>;
221
- status: z.ZodNullable<z.ZodEnum<{
222
- full: "full";
223
- low: "low";
224
- ok: "ok";
225
- }>>;
226
- }, z.core.$strip>>;
227
- dustBin: z.ZodNullable<z.ZodObject<{
228
- level: z.ZodNullable<z.ZodNumber>;
229
- status: z.ZodNullable<z.ZodEnum<{
230
- full: "full";
231
- low: "low";
232
- ok: "ok";
233
- }>>;
234
- }, z.core.$strip>>;
235
118
  progressPercent: z.ZodNullable<z.ZodNumber>;
236
119
  errorCode: z.ZodNullable<z.ZodNumber>;
237
120
  errorLabel: z.ZodNullable<z.ZodString>;
@@ -245,7 +128,8 @@ export declare const vacuumControlCapability: {
245
128
  */
246
129
  readonly durability: 'session';
247
130
  /**
248
- * History (D850): recorded series. Tank levels are fixed-object paths (`cleanWater.level`, ...).
131
+ * History (D850): recorded series. The tanks moved to `consumables` (D915), whose
132
+ * items are keyed by runtime ids and record no history.
249
133
  */
250
134
  readonly history: {
251
135
  readonly fields: {
@@ -254,26 +138,6 @@ export declare const vacuumControlCapability: {
254
138
  readonly unit: '%';
255
139
  readonly deadband: 2;
256
140
  };
257
- readonly 'cleanWater.level': {
258
- readonly kind: 'gauge';
259
- readonly unit: '%';
260
- readonly deadband: 2;
261
- };
262
- readonly 'dirtyWater.level': {
263
- readonly kind: 'gauge';
264
- readonly unit: '%';
265
- readonly deadband: 2;
266
- };
267
- readonly 'detergent.level': {
268
- readonly kind: 'gauge';
269
- readonly unit: '%';
270
- readonly deadband: 2;
271
- };
272
- readonly 'dustBin.level': {
273
- readonly kind: 'gauge';
274
- readonly unit: '%';
275
- readonly deadband: 2;
276
- };
277
141
  };
278
142
  };
279
143
  };
package/dist/client.js CHANGED
@@ -967,7 +967,11 @@ var ContributionSectionSchema = zod.z.object({
967
967
  zod.z.literal(4)
968
968
  ]).optional(),
969
969
  tab: zod.z.string().optional(),
970
- location: zod.z.enum(["settings", "top-tab"]).optional(),
970
+ location: zod.z.enum([
971
+ "settings",
972
+ "top-tab",
973
+ "hero"
974
+ ]).optional(),
971
975
  order: zod.z.number().optional(),
972
976
  fields: zod.z.array(zod.z.any())
973
977
  });
@@ -27823,7 +27827,9 @@ function createSystemProxy(api) {
27823
27827
  declareSeries: (input) => dispatch("deviceHistory", "declareSeries", "mutation", input),
27824
27828
  record: (input) => dispatch("deviceHistory", "record", "mutation", input),
27825
27829
  recordBuckets: (input) => dispatch("deviceHistory", "recordBuckets", "mutation", input),
27826
- getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input)
27830
+ getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input),
27831
+ listOrphanSeries: (input) => dispatch("deviceHistory", "listOrphanSeries", "query", input),
27832
+ deleteOrphanSeries: (input) => dispatch("deviceHistory", "deleteOrphanSeries", "mutation", input)
27827
27833
  },
27828
27834
  deviceManager: {
27829
27835
  allocateDeviceId: (input) => dispatch("deviceManager", "allocateDeviceId", "mutation", input),
@@ -30368,17 +30374,18 @@ var NC_TEMPLATE_VARS = [
30368
30374
  {
30369
30375
  name: "item",
30370
30376
  label: "Consumable",
30377
+ description: "The device's own name for the item: a filter, a brush, the salt, a tank.",
30371
30378
  example: "Filtro",
30372
30379
  group: "system",
30373
30380
  families: ["rule"],
30374
30381
  fields: [...RULE_TEXT],
30375
30382
  kinds: ["system"],
30376
- systemEventKinds: [...CONSUMABLE]
30383
+ systemEventKinds: [...CONSUMABLE, ...TANK]
30377
30384
  },
30378
30385
  {
30379
30386
  name: "tank",
30380
30387
  label: "Tank",
30381
- description: "Which tank: clean water, dirty water, detergent or dust bin.",
30388
+ description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
30382
30389
  example: "clean water",
30383
30390
  group: "system",
30384
30391
  families: ["rule"],
package/dist/client.mjs CHANGED
@@ -966,7 +966,11 @@ var ContributionSectionSchema = z.object({
966
966
  z.literal(4)
967
967
  ]).optional(),
968
968
  tab: z.string().optional(),
969
- location: z.enum(["settings", "top-tab"]).optional(),
969
+ location: z.enum([
970
+ "settings",
971
+ "top-tab",
972
+ "hero"
973
+ ]).optional(),
970
974
  order: z.number().optional(),
971
975
  fields: z.array(z.any())
972
976
  });
@@ -27822,7 +27826,9 @@ function createSystemProxy(api) {
27822
27826
  declareSeries: (input) => dispatch("deviceHistory", "declareSeries", "mutation", input),
27823
27827
  record: (input) => dispatch("deviceHistory", "record", "mutation", input),
27824
27828
  recordBuckets: (input) => dispatch("deviceHistory", "recordBuckets", "mutation", input),
27825
- getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input)
27829
+ getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input),
27830
+ listOrphanSeries: (input) => dispatch("deviceHistory", "listOrphanSeries", "query", input),
27831
+ deleteOrphanSeries: (input) => dispatch("deviceHistory", "deleteOrphanSeries", "mutation", input)
27826
27832
  },
27827
27833
  deviceManager: {
27828
27834
  allocateDeviceId: (input) => dispatch("deviceManager", "allocateDeviceId", "mutation", input),
@@ -30367,17 +30373,18 @@ var NC_TEMPLATE_VARS = [
30367
30373
  {
30368
30374
  name: "item",
30369
30375
  label: "Consumable",
30376
+ description: "The device's own name for the item: a filter, a brush, the salt, a tank.",
30370
30377
  example: "Filtro",
30371
30378
  group: "system",
30372
30379
  families: ["rule"],
30373
30380
  fields: [...RULE_TEXT],
30374
30381
  kinds: ["system"],
30375
- systemEventKinds: [...CONSUMABLE]
30382
+ systemEventKinds: [...CONSUMABLE, ...TANK]
30376
30383
  },
30377
30384
  {
30378
30385
  name: "tank",
30379
30386
  label: "Tank",
30380
- description: "Which tank: clean water, dirty water, detergent or dust bin.",
30387
+ description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
30381
30388
  example: "clean water",
30382
30389
  group: "system",
30383
30390
  families: ["rule"],
@@ -2449,6 +2449,20 @@ export type AppRouter = TrpcCoreRouter<{
2449
2449
  output: z.infer<typeof deviceHistoryCapability.methods.getStatus.output>;
2450
2450
  meta: object;
2451
2451
  }>;
2452
+ listOrphanSeries: TRPCQueryProcedure<{
2453
+ input: {
2454
+ [x: string]: unknown;
2455
+ } & z.input<typeof deviceHistoryCapability.methods.listOrphanSeries.input>;
2456
+ output: z.infer<typeof deviceHistoryCapability.methods.listOrphanSeries.output>;
2457
+ meta: object;
2458
+ }>;
2459
+ deleteOrphanSeries: TRPCMutationProcedure<{
2460
+ input: {
2461
+ [x: string]: unknown;
2462
+ } & z.input<typeof deviceHistoryCapability.methods.deleteOrphanSeries.input>;
2463
+ output: z.infer<typeof deviceHistoryCapability.methods.deleteOrphanSeries.output>;
2464
+ meta: object;
2465
+ }>;
2452
2466
  }>>;
2453
2467
  deviceManager: TRPCBuiltRouter<{
2454
2468
  ctx: TrpcContext;
@@ -5,7 +5,7 @@
5
5
  * `ALL_CAPABILITY_DEFINITIONS` (the whole Zod schema graph, ~+100 MB heap per
6
6
  * runner). See docs/decisions/adr-0028.md.
7
7
  *
8
- * Coverage: 1 advance-derived caps, 73 caps with 373 state leaves.
8
+ * Coverage: 1 advance-derived caps, 73 caps with 363 state leaves.
9
9
  */
10
10
  /** A bindable scalar in a capability's runtime state. */
11
11
  export interface CapStateLeaf {