camstack 1.2.203 → 1.2.205
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +160 -100
- package/dist/{launcher-J5GG4YZB.js → launcher-F23ZMT2V.js} +1026 -470
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -37,7 +37,7 @@ async function runServe(args) {
|
|
|
37
37
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
38
38
|
};
|
|
39
39
|
Object.assign(process.env, buildServeEnv(opts));
|
|
40
|
-
await import("./launcher-
|
|
40
|
+
await import("./launcher-F23ZMT2V.js");
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// src/commands/agent.ts
|
|
@@ -82,7 +82,7 @@ async function runAgent(args) {
|
|
|
82
82
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
83
83
|
};
|
|
84
84
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
85
|
-
await import("./launcher-
|
|
85
|
+
await import("./launcher-F23ZMT2V.js");
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// src/commands/setup.ts
|
|
@@ -14777,7 +14777,7 @@ function date4(params) {
|
|
|
14777
14777
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14778
14778
|
config(en_default());
|
|
14779
14779
|
|
|
14780
|
-
// ../types/dist/sleep-
|
|
14780
|
+
// ../types/dist/sleep-CUp20JkO.mjs
|
|
14781
14781
|
var AUDIO_CHUNK_FORMATS = [
|
|
14782
14782
|
"f32le",
|
|
14783
14783
|
"pcmu",
|
|
@@ -15322,7 +15322,11 @@ var ContributionSectionSchema = external_exports.object({
|
|
|
15322
15322
|
external_exports.literal(4)
|
|
15323
15323
|
]).optional(),
|
|
15324
15324
|
tab: external_exports.string().optional(),
|
|
15325
|
-
location: external_exports.enum([
|
|
15325
|
+
location: external_exports.enum([
|
|
15326
|
+
"settings",
|
|
15327
|
+
"top-tab",
|
|
15328
|
+
"hero"
|
|
15329
|
+
]).optional(),
|
|
15326
15330
|
order: external_exports.number().optional(),
|
|
15327
15331
|
fields: external_exports.array(external_exports.any())
|
|
15328
15332
|
});
|
|
@@ -19118,7 +19122,11 @@ var ConfigSectionWithValuesSchema = external_exports.object({
|
|
|
19118
19122
|
external_exports.literal(4)
|
|
19119
19123
|
]).optional(),
|
|
19120
19124
|
tab: external_exports.string().optional(),
|
|
19121
|
-
location: external_exports.enum([
|
|
19125
|
+
location: external_exports.enum([
|
|
19126
|
+
"settings",
|
|
19127
|
+
"top-tab",
|
|
19128
|
+
"hero"
|
|
19129
|
+
]).optional(),
|
|
19122
19130
|
order: external_exports.number().optional(),
|
|
19123
19131
|
fields: external_exports.array(external_exports.any())
|
|
19124
19132
|
});
|
|
@@ -23456,6 +23464,46 @@ var TierStatusSchema = external_exports.object({
|
|
|
23456
23464
|
approxBytes: external_exports.number().nullable(),
|
|
23457
23465
|
countedAt: external_exports.number().nullable()
|
|
23458
23466
|
});
|
|
23467
|
+
var DeviceHistoryOrphanReasonSchema = external_exports.enum(["device-gone", "undeclared"]);
|
|
23468
|
+
var TierRowsSchema = external_exports.object({
|
|
23469
|
+
raw: external_exports.number().int(),
|
|
23470
|
+
"5m": external_exports.number().int(),
|
|
23471
|
+
"1h": external_exports.number().int(),
|
|
23472
|
+
"1d": external_exports.number().int()
|
|
23473
|
+
});
|
|
23474
|
+
var OrphanSeriesSchema = external_exports.object({
|
|
23475
|
+
seriesId: external_exports.number().int(),
|
|
23476
|
+
deviceId: external_exports.number().int(),
|
|
23477
|
+
key: external_exports.string(),
|
|
23478
|
+
scope: external_exports.string(),
|
|
23479
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
23480
|
+
displayName: external_exports.string().nullable(),
|
|
23481
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
23482
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
23483
|
+
missingSince: external_exports.number().nullable(),
|
|
23484
|
+
firstTs: external_exports.number(),
|
|
23485
|
+
lastTs: external_exports.number(),
|
|
23486
|
+
rows: TierRowsSchema
|
|
23487
|
+
});
|
|
23488
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = external_exports.enum([
|
|
23489
|
+
"not-found",
|
|
23490
|
+
"not-orphan",
|
|
23491
|
+
"failed"
|
|
23492
|
+
]);
|
|
23493
|
+
var OrphanDeleteEntrySchema = external_exports.discriminatedUnion("ok", [external_exports.object({
|
|
23494
|
+
seriesId: external_exports.number().int(),
|
|
23495
|
+
ok: external_exports.literal(true),
|
|
23496
|
+
deleted: TierRowsSchema
|
|
23497
|
+
}), external_exports.object({
|
|
23498
|
+
seriesId: external_exports.number().int(),
|
|
23499
|
+
ok: external_exports.literal(false),
|
|
23500
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
23501
|
+
})]);
|
|
23502
|
+
var OrphanListSchema = external_exports.object({
|
|
23503
|
+
series: external_exports.array(OrphanSeriesSchema).readonly(),
|
|
23504
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
23505
|
+
truncated: external_exports.boolean()
|
|
23506
|
+
});
|
|
23459
23507
|
var DeviceHistoryStatusSchema = external_exports.object({
|
|
23460
23508
|
startedAt: external_exports.number(),
|
|
23461
23509
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -23597,7 +23645,24 @@ var deviceHistoryCapability = {
|
|
|
23597
23645
|
kind: "mutation",
|
|
23598
23646
|
auth: "admin"
|
|
23599
23647
|
}),
|
|
23600
|
-
getStatus: method(external_exports.object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
23648
|
+
getStatus: method(external_exports.object({}), DeviceHistoryStatusSchema, { auth: "admin" }),
|
|
23649
|
+
/**
|
|
23650
|
+
* Device series no longer linked to a device (D917): the device is absent
|
|
23651
|
+
* from the listings, or the key is declared by no capability. REPORTED,
|
|
23652
|
+
* never purged by this judgement; each entry counts its rows per tier
|
|
23653
|
+
* (a primary-key range per series). Ordered by device, key, scope.
|
|
23654
|
+
*/
|
|
23655
|
+
listOrphanSeries: method(external_exports.object({}), OrphanListSchema, { auth: "admin" }),
|
|
23656
|
+
/**
|
|
23657
|
+
* Delete orphan series by id. Each id is re-judged NOW: a series that is
|
|
23658
|
+
* not orphan (its device came back) is refused `not-orphan`, an unknown id
|
|
23659
|
+
* `not-found`. Deletes tier by tier in the retention slices, then the
|
|
23660
|
+
* series row; one entry per id, in order.
|
|
23661
|
+
*/
|
|
23662
|
+
deleteOrphanSeries: method(external_exports.object({ seriesIds: external_exports.array(external_exports.number().int()).min(1).max(50) }), external_exports.object({ results: external_exports.array(OrphanDeleteEntrySchema).readonly() }), {
|
|
23663
|
+
kind: "mutation",
|
|
23664
|
+
auth: "admin"
|
|
23665
|
+
})
|
|
23601
23666
|
}
|
|
23602
23667
|
};
|
|
23603
23668
|
var DeviceCaStatusSchema = external_exports.discriminatedUnion("state", [
|
|
@@ -54378,7 +54443,6 @@ var RecommendationReasonSchema = external_exports.discriminatedUnion("kind", [
|
|
|
54378
54443
|
modelId: external_exports.string()
|
|
54379
54444
|
}),
|
|
54380
54445
|
external_exports.object({ kind: external_exports.literal("cpu-device") }),
|
|
54381
|
-
external_exports.object({ kind: external_exports.literal("coral-untouched") }),
|
|
54382
54446
|
external_exports.object({ kind: external_exports.literal("device-disabled") }),
|
|
54383
54447
|
external_exports.object({ kind: external_exports.literal("device-unavailable") }),
|
|
54384
54448
|
external_exports.object({ kind: external_exports.literal("node-offline") }),
|
|
@@ -54471,11 +54535,6 @@ var AutoTuneWarningSchema = external_exports.discriminatedUnion("kind", [
|
|
|
54471
54535
|
kind: external_exports.literal("detector-store-unreadable"),
|
|
54472
54536
|
error: external_exports.string()
|
|
54473
54537
|
}),
|
|
54474
|
-
external_exports.object({
|
|
54475
|
-
kind: external_exports.literal("coral-enabled"),
|
|
54476
|
-
nodeId: external_exports.string(),
|
|
54477
|
-
deviceKey: external_exports.string()
|
|
54478
|
-
}),
|
|
54479
54538
|
external_exports.object({
|
|
54480
54539
|
kind: external_exports.literal("custom-pin-kept"),
|
|
54481
54540
|
nodeId: external_exports.string(),
|
|
@@ -61999,6 +62058,30 @@ var connectivityCapability = {
|
|
|
61999
62058
|
* whether persisting is worth a SQLite commit. */
|
|
62000
62059
|
volatileStateFields: ["lastChangedAt"]
|
|
62001
62060
|
};
|
|
62061
|
+
var ConsumableKindSchema = external_exports.enum([
|
|
62062
|
+
"wear",
|
|
62063
|
+
"supply",
|
|
62064
|
+
"waste"
|
|
62065
|
+
]);
|
|
62066
|
+
var ConsumableFormSchema = external_exports.enum([
|
|
62067
|
+
"part",
|
|
62068
|
+
"tank",
|
|
62069
|
+
"product",
|
|
62070
|
+
"bin"
|
|
62071
|
+
]);
|
|
62072
|
+
var ConsumableStatusSchema = external_exports.enum([
|
|
62073
|
+
"ok",
|
|
62074
|
+
"low",
|
|
62075
|
+
"empty",
|
|
62076
|
+
"full",
|
|
62077
|
+
"replace"
|
|
62078
|
+
]);
|
|
62079
|
+
var ConsumableLevelSchema = external_exports.enum([
|
|
62080
|
+
"ok",
|
|
62081
|
+
"low",
|
|
62082
|
+
"empty",
|
|
62083
|
+
"full"
|
|
62084
|
+
]);
|
|
62002
62085
|
var ConsumableRemainingUnitSchema = external_exports.enum([
|
|
62003
62086
|
"days",
|
|
62004
62087
|
"hours",
|
|
@@ -62013,10 +62096,14 @@ var ConsumableItemSchema = external_exports.object({
|
|
|
62013
62096
|
key: external_exports.string().min(1),
|
|
62014
62097
|
/** Display name. */
|
|
62015
62098
|
label: external_exports.string().min(1),
|
|
62016
|
-
/** Remaining life % when known (0..100). */
|
|
62099
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
62017
62100
|
level: external_exports.number().min(0).max(100).nullable(),
|
|
62018
|
-
/**
|
|
62019
|
-
status:
|
|
62101
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
62102
|
+
status: ConsumableStatusSchema.nullable(),
|
|
62103
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
62104
|
+
kind: ConsumableKindSchema.optional(),
|
|
62105
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
62106
|
+
form: ConsumableFormSchema.optional(),
|
|
62020
62107
|
/** Ms epoch of the last replace, when known. */
|
|
62021
62108
|
lastResetAt: external_exports.number().nullable(),
|
|
62022
62109
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -62039,7 +62126,7 @@ var consumablesCapability = {
|
|
|
62039
62126
|
kind: "widget",
|
|
62040
62127
|
widgetId: "host/consumables-panel",
|
|
62041
62128
|
tab: "consumables",
|
|
62042
|
-
|
|
62129
|
+
placement: "hero",
|
|
62043
62130
|
label: "Consumables",
|
|
62044
62131
|
order: 5
|
|
62045
62132
|
} },
|
|
@@ -62101,9 +62188,37 @@ var consumablesCapability = {
|
|
|
62101
62188
|
*/
|
|
62102
62189
|
durability: "restored",
|
|
62103
62190
|
/**
|
|
62104
|
-
* History (D850):
|
|
62191
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
62192
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
62193
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
62194
|
+
* their provider reports them; an item that appears later gets its series.
|
|
62105
62195
|
*/
|
|
62106
|
-
history:
|
|
62196
|
+
history: {
|
|
62197
|
+
fields: {},
|
|
62198
|
+
items: {
|
|
62199
|
+
path: "items",
|
|
62200
|
+
key: "key",
|
|
62201
|
+
label: "label",
|
|
62202
|
+
fields: {
|
|
62203
|
+
level: {
|
|
62204
|
+
kind: "gauge",
|
|
62205
|
+
unit: "%",
|
|
62206
|
+
deadband: 2,
|
|
62207
|
+
displayName: "Level"
|
|
62208
|
+
},
|
|
62209
|
+
status: {
|
|
62210
|
+
kind: "enum",
|
|
62211
|
+
displayName: "Status"
|
|
62212
|
+
},
|
|
62213
|
+
"remaining.value": {
|
|
62214
|
+
kind: "gauge",
|
|
62215
|
+
unitFrom: "remaining.unit",
|
|
62216
|
+
deadband: 1,
|
|
62217
|
+
displayName: "Remaining"
|
|
62218
|
+
}
|
|
62219
|
+
}
|
|
62220
|
+
}
|
|
62221
|
+
},
|
|
62107
62222
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
62108
62223
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
62109
62224
|
};
|
|
@@ -62464,11 +62579,6 @@ var DishwasherAvailabilitySchema = external_exports.enum([
|
|
|
62464
62579
|
"offline",
|
|
62465
62580
|
"description-missing"
|
|
62466
62581
|
]);
|
|
62467
|
-
var DishwasherConsumableLevelSchema = external_exports.enum([
|
|
62468
|
-
"ok",
|
|
62469
|
-
"low",
|
|
62470
|
-
"empty"
|
|
62471
|
-
]);
|
|
62472
62582
|
var DishwasherStatusSchema = external_exports.object({
|
|
62473
62583
|
availability: DishwasherAvailabilitySchema,
|
|
62474
62584
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -62501,8 +62611,6 @@ var DishwasherStatusSchema = external_exports.object({
|
|
|
62501
62611
|
powerOn: external_exports.boolean().nullable(),
|
|
62502
62612
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
62503
62613
|
powerState: external_exports.string().nullable(),
|
|
62504
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
62505
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
62506
62614
|
/**
|
|
62507
62615
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
62508
62616
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -70578,16 +70686,6 @@ var VacuumStateSchema = external_exports.enum([
|
|
|
70578
70686
|
"drying",
|
|
70579
70687
|
"error"
|
|
70580
70688
|
]);
|
|
70581
|
-
var TankStatusSchema = external_exports.object({
|
|
70582
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
70583
|
-
level: external_exports.number().min(0).max(100).nullable(),
|
|
70584
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
70585
|
-
status: external_exports.enum([
|
|
70586
|
-
"ok",
|
|
70587
|
-
"low",
|
|
70588
|
-
"full"
|
|
70589
|
-
]).nullable()
|
|
70590
|
-
});
|
|
70591
70689
|
var VacuumControlStatusSchema = external_exports.object({
|
|
70592
70690
|
/** Lifecycle state of the vacuum. */
|
|
70593
70691
|
state: VacuumStateSchema,
|
|
@@ -70599,14 +70697,6 @@ var VacuumControlStatusSchema = external_exports.object({
|
|
|
70599
70697
|
fanSpeed: external_exports.string().nullable(),
|
|
70600
70698
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
70601
70699
|
availableFanSpeeds: external_exports.array(external_exports.string()),
|
|
70602
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
70603
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
70604
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
70605
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
70606
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
70607
|
-
detergent: TankStatusSchema.nullable(),
|
|
70608
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
70609
|
-
dustBin: TankStatusSchema.nullable(),
|
|
70610
70700
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
70611
70701
|
progressPercent: external_exports.number().min(0).max(100).nullable(),
|
|
70612
70702
|
/** Current error code (0 / null = no error). */
|
|
@@ -70668,35 +70758,14 @@ var vacuumControlCapability = {
|
|
|
70668
70758
|
*/
|
|
70669
70759
|
durability: "session",
|
|
70670
70760
|
/**
|
|
70671
|
-
* History (D850): recorded series.
|
|
70761
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
70762
|
+
* items are keyed by runtime ids and record no history.
|
|
70672
70763
|
*/
|
|
70673
|
-
history: { fields: {
|
|
70674
|
-
|
|
70675
|
-
|
|
70676
|
-
|
|
70677
|
-
|
|
70678
|
-
},
|
|
70679
|
-
"cleanWater.level": {
|
|
70680
|
-
kind: "gauge",
|
|
70681
|
-
unit: "%",
|
|
70682
|
-
deadband: 2
|
|
70683
|
-
},
|
|
70684
|
-
"dirtyWater.level": {
|
|
70685
|
-
kind: "gauge",
|
|
70686
|
-
unit: "%",
|
|
70687
|
-
deadband: 2
|
|
70688
|
-
},
|
|
70689
|
-
"detergent.level": {
|
|
70690
|
-
kind: "gauge",
|
|
70691
|
-
unit: "%",
|
|
70692
|
-
deadband: 2
|
|
70693
|
-
},
|
|
70694
|
-
"dustBin.level": {
|
|
70695
|
-
kind: "gauge",
|
|
70696
|
-
unit: "%",
|
|
70697
|
-
deadband: 2
|
|
70698
|
-
}
|
|
70699
|
-
} }
|
|
70764
|
+
history: { fields: { batteryLevel: {
|
|
70765
|
+
kind: "gauge",
|
|
70766
|
+
unit: "%",
|
|
70767
|
+
deadband: 2
|
|
70768
|
+
} } }
|
|
70700
70769
|
};
|
|
70701
70770
|
var ValveStateSchema = external_exports.enum([
|
|
70702
70771
|
"open",
|
|
@@ -73677,6 +73746,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
73677
73746
|
addonId: null,
|
|
73678
73747
|
access: "create"
|
|
73679
73748
|
},
|
|
73749
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
73750
|
+
capName: "device-history",
|
|
73751
|
+
capScope: "system",
|
|
73752
|
+
addonId: null,
|
|
73753
|
+
access: "delete"
|
|
73754
|
+
},
|
|
73680
73755
|
"deviceHistory.getDeviceEnabled": {
|
|
73681
73756
|
capName: "device-history",
|
|
73682
73757
|
capScope: "system",
|
|
@@ -73695,6 +73770,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
73695
73770
|
addonId: null,
|
|
73696
73771
|
access: "view"
|
|
73697
73772
|
},
|
|
73773
|
+
"deviceHistory.listOrphanSeries": {
|
|
73774
|
+
capName: "device-history",
|
|
73775
|
+
capScope: "system",
|
|
73776
|
+
addonId: null,
|
|
73777
|
+
access: "view"
|
|
73778
|
+
},
|
|
73698
73779
|
"deviceHistory.listSeries": {
|
|
73699
73780
|
capName: "device-history",
|
|
73700
73781
|
capScope: "system",
|
|
@@ -83490,33 +83571,11 @@ var HISTORY_CATALOG = {
|
|
|
83490
83571
|
unit: "\xB0C",
|
|
83491
83572
|
deadband: 0.1
|
|
83492
83573
|
} },
|
|
83493
|
-
"vacuum-control": {
|
|
83494
|
-
"
|
|
83495
|
-
|
|
83496
|
-
|
|
83497
|
-
|
|
83498
|
-
},
|
|
83499
|
-
"cleanWater.level": {
|
|
83500
|
-
kind: "gauge",
|
|
83501
|
-
unit: "%",
|
|
83502
|
-
deadband: 2
|
|
83503
|
-
},
|
|
83504
|
-
"dirtyWater.level": {
|
|
83505
|
-
kind: "gauge",
|
|
83506
|
-
unit: "%",
|
|
83507
|
-
deadband: 2
|
|
83508
|
-
},
|
|
83509
|
-
"detergent.level": {
|
|
83510
|
-
kind: "gauge",
|
|
83511
|
-
unit: "%",
|
|
83512
|
-
deadband: 2
|
|
83513
|
-
},
|
|
83514
|
-
"dustBin.level": {
|
|
83515
|
-
kind: "gauge",
|
|
83516
|
-
unit: "%",
|
|
83517
|
-
deadband: 2
|
|
83518
|
-
}
|
|
83519
|
-
},
|
|
83574
|
+
"vacuum-control": { "batteryLevel": {
|
|
83575
|
+
kind: "gauge",
|
|
83576
|
+
unit: "%",
|
|
83577
|
+
deadband: 2
|
|
83578
|
+
} },
|
|
83520
83579
|
"valve": { "position": {
|
|
83521
83580
|
kind: "gauge",
|
|
83522
83581
|
unit: "%",
|
|
@@ -84301,17 +84360,18 @@ var NC_TEMPLATE_VARS = [
|
|
|
84301
84360
|
{
|
|
84302
84361
|
name: "item",
|
|
84303
84362
|
label: "Consumable",
|
|
84363
|
+
description: "The device's own name for the item: a filter, a brush, the salt, a tank.",
|
|
84304
84364
|
example: "Filtro",
|
|
84305
84365
|
group: "system",
|
|
84306
84366
|
families: ["rule"],
|
|
84307
84367
|
fields: [...RULE_TEXT],
|
|
84308
84368
|
kinds: ["system"],
|
|
84309
|
-
systemEventKinds: [...CONSUMABLE]
|
|
84369
|
+
systemEventKinds: [...CONSUMABLE, ...TANK]
|
|
84310
84370
|
},
|
|
84311
84371
|
{
|
|
84312
84372
|
name: "tank",
|
|
84313
84373
|
label: "Tank",
|
|
84314
|
-
description: "Which tank:
|
|
84374
|
+
description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
|
|
84315
84375
|
example: "clean water",
|
|
84316
84376
|
group: "system",
|
|
84317
84377
|
families: ["rule"],
|