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 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-J5GG4YZB.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-J5GG4YZB.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", [
@@ -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
- /** Discrete state when known (binary mode). */
62019
- 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(),
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
- topTab: true,
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): 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.
62105
62195
  */
62106
- 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
+ },
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. 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.
70672
70763
  */
70673
- history: { fields: {
70674
- batteryLevel: {
70675
- kind: "gauge",
70676
- unit: "%",
70677
- deadband: 2
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
- "batteryLevel": {
83495
- kind: "gauge",
83496
- unit: "%",
83497
- deadband: 2
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: 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).",
84315
84375
  example: "clean water",
84316
84376
  group: "system",
84317
84377
  families: ["rule"],