camstack 1.2.204 → 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 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-H5B4UHLE.js");
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-H5B4UHLE.js");
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-DJFUfKvA.mjs
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(["settings", "top-tab"]).optional(),
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(["settings", "top-tab"]).optional(),
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", [
@@ -61993,6 +62058,30 @@ var connectivityCapability = {
61993
62058
  * whether persisting is worth a SQLite commit. */
61994
62059
  volatileStateFields: ["lastChangedAt"]
61995
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
+ ]);
61996
62085
  var ConsumableRemainingUnitSchema = external_exports.enum([
61997
62086
  "days",
61998
62087
  "hours",
@@ -62007,10 +62096,14 @@ var ConsumableItemSchema = external_exports.object({
62007
62096
  key: external_exports.string().min(1),
62008
62097
  /** Display name. */
62009
62098
  label: external_exports.string().min(1),
62010
- /** Remaining life % when known (0..100). */
62099
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
62011
62100
  level: external_exports.number().min(0).max(100).nullable(),
62012
- /** Discrete state when known (binary mode). */
62013
- status: external_exports.enum(["ok", "replace"]).nullable(),
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(),
62014
62107
  /** Ms epoch of the last replace, when known. */
62015
62108
  lastResetAt: external_exports.number().nullable(),
62016
62109
  /** Whether `reset()` is meaningful for this item. */
@@ -62033,7 +62126,7 @@ var consumablesCapability = {
62033
62126
  kind: "widget",
62034
62127
  widgetId: "host/consumables-panel",
62035
62128
  tab: "consumables",
62036
- topTab: true,
62129
+ placement: "hero",
62037
62130
  label: "Consumables",
62038
62131
  order: 5
62039
62132
  } },
@@ -62095,9 +62188,37 @@ var consumablesCapability = {
62095
62188
  */
62096
62189
  durability: "restored",
62097
62190
  /**
62098
- * History (D850): none — `items` is an array keyed by runtime ids; a history path never enters it.
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.
62099
62195
  */
62100
- history: "none",
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
+ },
62101
62222
  /** Clocks, not content: a re-read that changed no item costs no commit. */
62102
62223
  volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
62103
62224
  };
@@ -62458,11 +62579,6 @@ var DishwasherAvailabilitySchema = external_exports.enum([
62458
62579
  "offline",
62459
62580
  "description-missing"
62460
62581
  ]);
62461
- var DishwasherConsumableLevelSchema = external_exports.enum([
62462
- "ok",
62463
- "low",
62464
- "empty"
62465
- ]);
62466
62582
  var DishwasherStatusSchema = external_exports.object({
62467
62583
  availability: DishwasherAvailabilitySchema,
62468
62584
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -62495,8 +62611,6 @@ var DishwasherStatusSchema = external_exports.object({
62495
62611
  powerOn: external_exports.boolean().nullable(),
62496
62612
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
62497
62613
  powerState: external_exports.string().nullable(),
62498
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
62499
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
62500
62614
  /**
62501
62615
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
62502
62616
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -70572,16 +70686,6 @@ var VacuumStateSchema = external_exports.enum([
70572
70686
  "drying",
70573
70687
  "error"
70574
70688
  ]);
70575
- var TankStatusSchema = external_exports.object({
70576
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
70577
- level: external_exports.number().min(0).max(100).nullable(),
70578
- /** Discrete state when the hardware is binary-mode; null otherwise. */
70579
- status: external_exports.enum([
70580
- "ok",
70581
- "low",
70582
- "full"
70583
- ]).nullable()
70584
- });
70585
70689
  var VacuumControlStatusSchema = external_exports.object({
70586
70690
  /** Lifecycle state of the vacuum. */
70587
70691
  state: VacuumStateSchema,
@@ -70593,14 +70697,6 @@ var VacuumControlStatusSchema = external_exports.object({
70593
70697
  fanSpeed: external_exports.string().nullable(),
70594
70698
  /** Speed tokens the hardware accepts — drives the UI selector. */
70595
70699
  availableFanSpeeds: external_exports.array(external_exports.string()),
70596
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
70597
- cleanWater: TankStatusSchema.nullable(),
70598
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
70599
- dirtyWater: TankStatusSchema.nullable(),
70600
- /** Detergent tank. Null when the hardware has no detergent tank. */
70601
- detergent: TankStatusSchema.nullable(),
70602
- /** Dust bin. Null when the hardware has no dust bin. */
70603
- dustBin: TankStatusSchema.nullable(),
70604
70700
  /** 0..100 cleaning-completion percentage of the current task, or null. */
70605
70701
  progressPercent: external_exports.number().min(0).max(100).nullable(),
70606
70702
  /** Current error code (0 / null = no error). */
@@ -70662,35 +70758,14 @@ var vacuumControlCapability = {
70662
70758
  */
70663
70759
  durability: "session",
70664
70760
  /**
70665
- * History (D850): recorded series. Tank levels are fixed-object paths (`cleanWater.level`, ...).
70761
+ * History (D850): recorded series. The tanks moved to `consumables` (D915), whose
70762
+ * items are keyed by runtime ids and record no history.
70666
70763
  */
70667
- history: { fields: {
70668
- batteryLevel: {
70669
- kind: "gauge",
70670
- unit: "%",
70671
- deadband: 2
70672
- },
70673
- "cleanWater.level": {
70674
- kind: "gauge",
70675
- unit: "%",
70676
- deadband: 2
70677
- },
70678
- "dirtyWater.level": {
70679
- kind: "gauge",
70680
- unit: "%",
70681
- deadband: 2
70682
- },
70683
- "detergent.level": {
70684
- kind: "gauge",
70685
- unit: "%",
70686
- deadband: 2
70687
- },
70688
- "dustBin.level": {
70689
- kind: "gauge",
70690
- unit: "%",
70691
- deadband: 2
70692
- }
70693
- } }
70764
+ history: { fields: { batteryLevel: {
70765
+ kind: "gauge",
70766
+ unit: "%",
70767
+ deadband: 2
70768
+ } } }
70694
70769
  };
70695
70770
  var ValveStateSchema = external_exports.enum([
70696
70771
  "open",
@@ -73671,6 +73746,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
73671
73746
  addonId: null,
73672
73747
  access: "create"
73673
73748
  },
73749
+ "deviceHistory.deleteOrphanSeries": {
73750
+ capName: "device-history",
73751
+ capScope: "system",
73752
+ addonId: null,
73753
+ access: "delete"
73754
+ },
73674
73755
  "deviceHistory.getDeviceEnabled": {
73675
73756
  capName: "device-history",
73676
73757
  capScope: "system",
@@ -73689,6 +73770,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
73689
73770
  addonId: null,
73690
73771
  access: "view"
73691
73772
  },
73773
+ "deviceHistory.listOrphanSeries": {
73774
+ capName: "device-history",
73775
+ capScope: "system",
73776
+ addonId: null,
73777
+ access: "view"
73778
+ },
73692
73779
  "deviceHistory.listSeries": {
73693
73780
  capName: "device-history",
73694
73781
  capScope: "system",
@@ -83484,33 +83571,11 @@ var HISTORY_CATALOG = {
83484
83571
  unit: "\xB0C",
83485
83572
  deadband: 0.1
83486
83573
  } },
83487
- "vacuum-control": {
83488
- "batteryLevel": {
83489
- kind: "gauge",
83490
- unit: "%",
83491
- deadband: 2
83492
- },
83493
- "cleanWater.level": {
83494
- kind: "gauge",
83495
- unit: "%",
83496
- deadband: 2
83497
- },
83498
- "dirtyWater.level": {
83499
- kind: "gauge",
83500
- unit: "%",
83501
- deadband: 2
83502
- },
83503
- "detergent.level": {
83504
- kind: "gauge",
83505
- unit: "%",
83506
- deadband: 2
83507
- },
83508
- "dustBin.level": {
83509
- kind: "gauge",
83510
- unit: "%",
83511
- deadband: 2
83512
- }
83513
- },
83574
+ "vacuum-control": { "batteryLevel": {
83575
+ kind: "gauge",
83576
+ unit: "%",
83577
+ deadband: 2
83578
+ } },
83514
83579
  "valve": { "position": {
83515
83580
  kind: "gauge",
83516
83581
  unit: "%",
@@ -84295,17 +84360,18 @@ var NC_TEMPLATE_VARS = [
84295
84360
  {
84296
84361
  name: "item",
84297
84362
  label: "Consumable",
84363
+ description: "The device's own name for the item: a filter, a brush, the salt, a tank.",
84298
84364
  example: "Filtro",
84299
84365
  group: "system",
84300
84366
  families: ["rule"],
84301
84367
  fields: [...RULE_TEXT],
84302
84368
  kinds: ["system"],
84303
- systemEventKinds: [...CONSUMABLE]
84369
+ systemEventKinds: [...CONSUMABLE, ...TANK]
84304
84370
  },
84305
84371
  {
84306
84372
  name: "tank",
84307
84373
  label: "Tank",
84308
- description: "Which tank: clean water, dirty water, detergent or dust bin.",
84374
+ description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
84309
84375
  example: "clean water",
84310
84376
  group: "system",
84311
84377
  families: ["rule"],