@camstack/types 1.2.400 → 1.2.402

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-CD18m9HF.js");
2
+ const require_sleep = require("./sleep-DVovpDRU.js");
3
3
  const require_event_category = require("./event-category-7AwNbPjm.js");
4
4
  const require_composition = require("./composition-eoYYVfOp.js");
5
5
  const require_node_color = require("./node-color.js");
@@ -8450,7 +8450,11 @@ var ConfigSectionWithValuesSchema = zod.z.object({
8450
8450
  zod.z.literal(4)
8451
8451
  ]).optional(),
8452
8452
  tab: zod.z.string().optional(),
8453
- location: zod.z.enum(["settings", "top-tab"]).optional(),
8453
+ location: zod.z.enum([
8454
+ "settings",
8455
+ "top-tab",
8456
+ "hero"
8457
+ ]).optional(),
8454
8458
  order: zod.z.number().optional(),
8455
8459
  fields: zod.z.array(zod.z.any())
8456
8460
  });
@@ -15114,6 +15118,56 @@ var TierStatusSchema = zod.z.object({
15114
15118
  countedAt: zod.z.number().nullable()
15115
15119
  });
15116
15120
  /** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
15121
+ /**
15122
+ * Why a series is orphan. `device-gone`: its device is absent from the
15123
+ * successful device listings (the departure clock). `undeclared`: its `cap:`
15124
+ * key is declared by no capability any more (a field a cap removed).
15125
+ */
15126
+ var DeviceHistoryOrphanReasonSchema = zod.z.enum(["device-gone", "undeclared"]);
15127
+ /** Rows held per stored tier. */
15128
+ var TierRowsSchema = zod.z.object({
15129
+ raw: zod.z.number().int(),
15130
+ "5m": zod.z.number().int(),
15131
+ "1h": zod.z.number().int(),
15132
+ "1d": zod.z.number().int()
15133
+ });
15134
+ var OrphanSeriesSchema = zod.z.object({
15135
+ seriesId: zod.z.number().int(),
15136
+ deviceId: zod.z.number().int(),
15137
+ key: zod.z.string(),
15138
+ scope: zod.z.string(),
15139
+ /** The metric's display name; `null` when its metric row is gone too. */
15140
+ displayName: zod.z.string().nullable(),
15141
+ reason: DeviceHistoryOrphanReasonSchema,
15142
+ /** `device-gone`: since when the device has been absent; `null` otherwise. */
15143
+ missingSince: zod.z.number().nullable(),
15144
+ firstTs: zod.z.number(),
15145
+ lastTs: zod.z.number(),
15146
+ rows: TierRowsSchema
15147
+ });
15148
+ /** At most this many orphans are listed (with their row counts) per call. */
15149
+ var DEVICE_HISTORY_ORPHAN_LIST_MAX = 200;
15150
+ /** At most this many series are deleted per call. */
15151
+ var DEVICE_HISTORY_ORPHAN_DELETE_MAX = 50;
15152
+ var DeviceHistoryOrphanDeleteRefusalSchema = zod.z.enum([
15153
+ "not-found",
15154
+ "not-orphan",
15155
+ "failed"
15156
+ ]);
15157
+ var OrphanDeleteEntrySchema = zod.z.discriminatedUnion("ok", [zod.z.object({
15158
+ seriesId: zod.z.number().int(),
15159
+ ok: zod.z.literal(true),
15160
+ deleted: TierRowsSchema
15161
+ }), zod.z.object({
15162
+ seriesId: zod.z.number().int(),
15163
+ ok: zod.z.literal(false),
15164
+ reason: DeviceHistoryOrphanDeleteRefusalSchema
15165
+ })]);
15166
+ var OrphanListSchema = zod.z.object({
15167
+ series: zod.z.array(OrphanSeriesSchema).readonly(),
15168
+ /** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
15169
+ truncated: zod.z.boolean()
15170
+ });
15117
15171
  var DeviceHistoryStatusSchema = zod.z.object({
15118
15172
  startedAt: zod.z.number(),
15119
15173
  /** The store is declared, series loaded and the first reconcile has answered. */
@@ -15255,7 +15309,24 @@ var deviceHistoryCapability = {
15255
15309
  kind: "mutation",
15256
15310
  auth: "admin"
15257
15311
  }),
15258
- getStatus: require_sleep.method(zod.z.object({}), DeviceHistoryStatusSchema, { auth: "admin" })
15312
+ getStatus: require_sleep.method(zod.z.object({}), DeviceHistoryStatusSchema, { auth: "admin" }),
15313
+ /**
15314
+ * Device series no longer linked to a device (D917): the device is absent
15315
+ * from the listings, or the key is declared by no capability. REPORTED,
15316
+ * never purged by this judgement; each entry counts its rows per tier
15317
+ * (a primary-key range per series). Ordered by device, key, scope.
15318
+ */
15319
+ listOrphanSeries: require_sleep.method(zod.z.object({}), OrphanListSchema, { auth: "admin" }),
15320
+ /**
15321
+ * Delete orphan series by id. Each id is re-judged NOW: a series that is
15322
+ * not orphan (its device came back) is refused `not-orphan`, an unknown id
15323
+ * `not-found`. Deletes tier by tier in the retention slices, then the
15324
+ * series row; one entry per id, in order.
15325
+ */
15326
+ deleteOrphanSeries: require_sleep.method(zod.z.object({ seriesIds: zod.z.array(zod.z.number().int()).min(1).max(50) }), zod.z.object({ results: zod.z.array(OrphanDeleteEntrySchema).readonly() }), {
15327
+ kind: "mutation",
15328
+ auth: "admin"
15329
+ })
15259
15330
  }
15260
15331
  };
15261
15332
  //#endregion
@@ -54054,6 +54125,19 @@ var NodeInferenceDeviceSchema = zod.z.object({
54054
54125
  /** Whether the node's live probe reports the device as usable right now. */
54055
54126
  available: zod.z.boolean(),
54056
54127
  /**
54128
+ * Is the device on the node at all (D919)? `present` — the live probe
54129
+ * reported it; `absent` — the probe ANSWERED and did not report it, so only
54130
+ * its stored settings remain (unplugged, moved to another node): never
54131
+ * eligible, whatever its stored `enabled`, and forgettable with
54132
+ * `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
54133
+ * claimed (D315). Optional only for an orchestrator older than the field.
54134
+ */
54135
+ presence: zod.z.enum([
54136
+ "present",
54137
+ "absent",
54138
+ "unknown"
54139
+ ]).optional(),
54140
+ /**
54057
54141
  * Whether this device participates in dispatch. AUTO default (spec C2):
54058
54142
  * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
54059
54143
  * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
@@ -54491,6 +54575,20 @@ var pipelineOrchestratorCapability = {
54491
54575
  */
54492
54576
  getNodeInferenceDevices: require_sleep.method(zod.z.object({ nodeId: zod.z.string() }), NodeInferenceDevicesSchema),
54493
54577
  /**
54578
+ * Delete ONE stored device entry of a node — the "forget" of a device the
54579
+ * node no longer has (D919). Refused unless the node's probe ANSWERED and
54580
+ * did not report the key: a present device is switched off, not forgotten,
54581
+ * and an unreachable node proves nothing about its hardware. The rest of
54582
+ * the node's map is kept as stored.
54583
+ */
54584
+ forgetInferenceDevice: require_sleep.method(zod.z.object({
54585
+ agentNodeId: zod.z.string(),
54586
+ deviceKey: zod.z.string()
54587
+ }), zod.z.object({ success: zod.z.literal(true) }), {
54588
+ kind: "mutation",
54589
+ auth: "admin"
54590
+ }),
54591
+ /**
54494
54592
  * Reset one node's pipeline to its hardware-aware defaults — the HONEST
54495
54593
  * reset (replaces the executor's legacy `resetToDefault`, which cleared a
54496
54594
  * dead persisted step-tree seed nothing in the live path read):
@@ -61209,17 +61307,88 @@ var connectivityCapability = {
61209
61307
  //#endregion
61210
61308
  //#region src/capabilities/consumables.cap.ts
61211
61309
  /**
61212
- * Generic device-consumables capability — surfaces a device's
61213
- * maintenance items (vacuum filters/brushes, replaceable cartridges,
61214
- * descaling cycles, …) with their remaining life and an optional
61215
- * "Replaced" reset action. Device-agnostic: any provider that knows its
61216
- * device tracks consumables can register it; the cap declares no
61217
- * vocabulary of its own — the provider names each item verbatim.
61310
+ * Generic device-consumables capability — the ONE place a device reports what
61311
+ * it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
61312
+ * descaling cycles), supplies it draws from (a vacuum's clean-water tank and
61313
+ * detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
61314
+ * water tank, a dust bin). Each item carries its remaining life or fill and an
61315
+ * optional "Replaced" reset action. Device-agnostic: any provider that knows
61316
+ * its device tracks consumables registers it; the provider names each item
61317
+ * verbatim and says which `kind` it is.
61318
+ *
61319
+ * The admin UI renders it as ONE collapsible section directly under the
61320
+ * device page's hero card (`placement: 'hero'`), for every device bound to
61321
+ * this cap — never drawn by a device type's hero card itself (D915).
61218
61322
  *
61219
61323
  * Like `childLayout`, the cap is INERT until a provider sets items: no
61220
61324
  * provider populates it by guessing (no HA inference). The UI renders a
61221
61325
  * "No consumables reported" placeholder when `items` is empty.
61222
61326
  */
61327
+ /**
61328
+ * What an item IS, which decides which direction is bad:
61329
+ * - `wear` — a part that wears out (a brush, a filter); low life is bad.
61330
+ * - `supply` — something the device draws from (clean water, detergent,
61331
+ * salt, rinse aid); low or empty is bad.
61332
+ * - `waste` — something the device fills (dirty water, a dust bin); full is
61333
+ * bad.
61334
+ * Absent = `wear`.
61335
+ */
61336
+ var ConsumableKindSchema = zod.z.enum([
61337
+ "wear",
61338
+ "supply",
61339
+ "waste"
61340
+ ]);
61341
+ /**
61342
+ * What an item LOOKS like, which decides how a client draws it — independent
61343
+ * of `kind`, which decides which direction is bad:
61344
+ * - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
61345
+ * remaining time and a reset.
61346
+ * - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
61347
+ * - `product` — something bought and refilled (detergent, salt, rinse aid):
61348
+ * a stepped level and "refill".
61349
+ * - `bin` — a container that collects waste (a dust bin): a fill gauge
61350
+ * that warns when full.
61351
+ * Absent = derived from the kind ({@link consumableFormOf}).
61352
+ */
61353
+ var ConsumableFormSchema = zod.z.enum([
61354
+ "part",
61355
+ "tank",
61356
+ "product",
61357
+ "bin"
61358
+ ]);
61359
+ /** The provider's own discrete verdict on an item. */
61360
+ var ConsumableStatusSchema = zod.z.enum([
61361
+ "ok",
61362
+ "low",
61363
+ "empty",
61364
+ "full",
61365
+ "replace"
61366
+ ]);
61367
+ /**
61368
+ * The level vocabulary every client draws a consumable in (badge tone, bar
61369
+ * colour): derived from an item by its kind, level and status. `null` beside
61370
+ * it means unknown (D393).
61371
+ */
61372
+ var ConsumableLevelSchema = zod.z.enum([
61373
+ "ok",
61374
+ "low",
61375
+ "empty",
61376
+ "full"
61377
+ ]);
61378
+ /** The kind of an item, with the documented default for an absent one. */
61379
+ function consumableKindOf(item) {
61380
+ return item.kind ?? "wear";
61381
+ }
61382
+ /** The kind's default form: wear → part, waste → bin, supply → product. */
61383
+ var FORM_OF_KIND = {
61384
+ wear: "part",
61385
+ waste: "bin",
61386
+ supply: "product"
61387
+ };
61388
+ /** The form of an item: its own when the provider names one, else its kind's default. */
61389
+ function consumableFormOf(item) {
61390
+ return item.form ?? FORM_OF_KIND[consumableKindOf(item)];
61391
+ }
61223
61392
  /** Units a remaining-life counter is reported in. Closed: the panel renders
61224
61393
  * each. */
61225
61394
  var ConsumableRemainingUnitSchema = zod.z.enum([
@@ -61234,18 +61403,23 @@ var ConsumableRemainingSchema = zod.z.object({
61234
61403
  unit: ConsumableRemainingUnitSchema
61235
61404
  });
61236
61405
  /** A single consumable item. Either a continuous `level` (remaining
61237
- * life %) or a discrete `status` may be known — both may be null when a
61238
- * provider only knows the item exists. `level` and `status` are not
61239
- * mutually exclusive; a provider may report both. */
61406
+ * life %, or fill % for a `supply` / `waste` item) or a discrete `status`
61407
+ * may be known — both may be null when a provider only knows the item
61408
+ * exists. `level` and `status` are not mutually exclusive; a provider may
61409
+ * report both. */
61240
61410
  var ConsumableItemSchema = zod.z.object({
61241
61411
  /** Stable id, e.g. 'main-brush'. */
61242
61412
  key: zod.z.string().min(1),
61243
61413
  /** Display name. */
61244
61414
  label: zod.z.string().min(1),
61245
- /** Remaining life % when known (0..100). */
61415
+ /** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
61246
61416
  level: zod.z.number().min(0).max(100).nullable(),
61247
- /** Discrete state when known (binary mode). */
61248
- status: zod.z.enum(["ok", "replace"]).nullable(),
61417
+ /** The provider's discrete verdict when known (binary mode). */
61418
+ status: ConsumableStatusSchema.nullable(),
61419
+ /** What the item is — decides whether low or full is bad. Absent = `wear`. */
61420
+ kind: ConsumableKindSchema.optional(),
61421
+ /** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
61422
+ form: ConsumableFormSchema.optional(),
61249
61423
  /** Ms epoch of the last replace, when known. */
61250
61424
  lastResetAt: zod.z.number().nullable(),
61251
61425
  /** Whether `reset()` is meaningful for this item. */
@@ -61268,7 +61442,7 @@ var consumablesCapability = {
61268
61442
  kind: "widget",
61269
61443
  widgetId: "host/consumables-panel",
61270
61444
  tab: "consumables",
61271
- topTab: true,
61445
+ placement: "hero",
61272
61446
  label: "Consumables",
61273
61447
  order: 5
61274
61448
  } },
@@ -61329,9 +61503,37 @@ reset: require_sleep.method(zod.z.object({
61329
61503
  */
61330
61504
  durability: "restored",
61331
61505
  /**
61332
- * History (D850): none — `items` is an array keyed by runtime ids; a history path never enters it.
61506
+ * History (D850, D917): one series per (item field, item `key`) — the item key
61507
+ * is the series scope, the item `label` names it. A vacuum tank's fill, a
61508
+ * brush's remaining life and a dishwasher's salt are each recorded the moment
61509
+ * their provider reports them; an item that appears later gets its series.
61333
61510
  */
61334
- history: "none",
61511
+ history: {
61512
+ fields: {},
61513
+ items: {
61514
+ path: "items",
61515
+ key: "key",
61516
+ label: "label",
61517
+ fields: {
61518
+ level: {
61519
+ kind: "gauge",
61520
+ unit: "%",
61521
+ deadband: 2,
61522
+ displayName: "Level"
61523
+ },
61524
+ status: {
61525
+ kind: "enum",
61526
+ displayName: "Status"
61527
+ },
61528
+ "remaining.value": {
61529
+ kind: "gauge",
61530
+ unitFrom: "remaining.unit",
61531
+ deadband: 1,
61532
+ displayName: "Remaining"
61533
+ }
61534
+ }
61535
+ }
61536
+ },
61335
61537
  /** Clocks, not content: a re-read that changed no item costs no commit. */
61336
61538
  volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
61337
61539
  };
@@ -61804,8 +62006,9 @@ onStatusChanged: { data: zod.z.object({
61804
62006
  //#endregion
61805
62007
  //#region src/capabilities/dishwasher.cap.ts
61806
62008
  /**
61807
- * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
61808
- * consumable levels (salt, rinse aid) and common program options.
62009
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates and
62010
+ * common program options. Salt and rinse aid are NOT here: they are items of
62011
+ * the device's `consumables` cap, like every other device's (D915).
61809
62012
  *
61810
62013
  * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
61811
62014
  * by any integration that exposes the same program / option surface.
@@ -61853,11 +62056,6 @@ var DishwasherAvailabilitySchema = zod.z.enum([
61853
62056
  "offline",
61854
62057
  "description-missing"
61855
62058
  ]);
61856
- var DishwasherConsumableLevelSchema = zod.z.enum([
61857
- "ok",
61858
- "low",
61859
- "empty"
61860
- ]);
61861
62059
  var DishwasherStatusSchema = zod.z.object({
61862
62060
  availability: DishwasherAvailabilitySchema,
61863
62061
  /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
@@ -61890,8 +62088,6 @@ var DishwasherStatusSchema = zod.z.object({
61890
62088
  powerOn: zod.z.boolean().nullable(),
61891
62089
  /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
61892
62090
  powerState: zod.z.string().nullable(),
61893
- saltLevel: DishwasherConsumableLevelSchema.nullable(),
61894
- rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
61895
62091
  /**
61896
62092
  * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
61897
62093
  * combined care-and-filter reminder raised); false when every such reminder reads clear; null
@@ -65145,7 +65341,7 @@ var motionTriggerCapability = {
65145
65341
  enabled: zod.z.boolean()
65146
65342
  }), zod.z.void(), {
65147
65343
  kind: "mutation",
65148
- auth: "admin"
65344
+ auth: "protected"
65149
65345
  }) },
65150
65346
  events: { onMotionTriggerChanged: { data: zod.z.object({
65151
65347
  deviceId: zod.z.number(),
@@ -66075,6 +66271,13 @@ var TopologyNodeSchema = zod.z.object({
66075
66271
  cpuModel: zod.z.string().nullable(),
66076
66272
  cpuCores: zod.z.number(),
66077
66273
  memoryMB: zod.z.number(),
66274
+ /**
66275
+ * The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
66276
+ * openvino, edgetpu …) — not its devices. An installed runtime says nothing
66277
+ * about whether its hardware is there (a Coral delegate stays installed
66278
+ * after the stick leaves, D919); the live device set is
66279
+ * `pipelineOrchestrator.getNodeInferenceDevices`.
66280
+ */
66078
66281
  engines: zod.z.array(zod.z.string()).readonly(),
66079
66282
  isHub: zod.z.boolean(),
66080
66283
  isOnline: zod.z.boolean(),
@@ -67454,6 +67657,24 @@ var ResolvedInferenceConfigSchema = zod.z.object({
67454
67657
  format: ModelFormatSchema,
67455
67658
  reason: zod.z.string()
67456
67659
  });
67660
+ /**
67661
+ * The answer of an accelerator rescan (D919): the node's device list after
67662
+ * the re-probe, what changed, and the evidence that decided the Coral answer
67663
+ * (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
67664
+ * bus, the installed-delegate fallback, or nothing).
67665
+ */
67666
+ var AcceleratorRescanSchema = zod.z.object({
67667
+ devices: zod.z.array(InferenceDeviceDescriptorSchema).readonly(),
67668
+ appeared: zod.z.array(zod.z.string()).readonly(),
67669
+ disappeared: zod.z.array(zod.z.string()).readonly(),
67670
+ usbBus: zod.z.enum(["observed", "unobservable"]),
67671
+ decidedBy: zod.z.enum([
67672
+ "usb-ids",
67673
+ "pci",
67674
+ "delegate-fallback",
67675
+ "none"
67676
+ ])
67677
+ });
67457
67678
  var platformProbeCapability = {
67458
67679
  name: "platform-probe",
67459
67680
  scope: "system",
@@ -67462,7 +67683,18 @@ var platformProbeCapability = {
67462
67683
  getCapabilities: require_sleep.method(zod.z.void(), PlatformCapabilitiesSchema),
67463
67684
  getHardware: require_sleep.method(zod.z.void(), HardwareInfoSchema),
67464
67685
  resolveInferenceConfig: require_sleep.method(zod.z.object({ requirements: zod.z.array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema),
67465
- resolveHwAccel: require_sleep.method(zod.z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema)
67686
+ resolveHwAccel: require_sleep.method(zod.z.object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema),
67687
+ /**
67688
+ * Re-probe this node's accelerators NOW (Coral USB ids + PCIe apex units;
67689
+ * `/sys` and `/dev` reads, no model load) and rebuild the device list that
67690
+ * `getCapabilities` serves. The same re-probe runs every 60 s on its own;
67691
+ * this is the operator's "rescan inference devices". Target a node with the
67692
+ * `{ nodeId }` routing input, like `getCapabilities`.
67693
+ */
67694
+ rescanAccelerators: require_sleep.method(zod.z.void(), AcceleratorRescanSchema, {
67695
+ kind: "mutation",
67696
+ auth: "admin"
67697
+ })
67466
67698
  }
67467
67699
  };
67468
67700
  //#endregion
@@ -73144,14 +73376,9 @@ var userManagementCapability = {
73144
73376
  * validates it against the vacuum's own list. `locate` triggers the
73145
73377
  * find-me chirp; `returnToBase` sends it home.
73146
73378
  *
73147
- * Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
73148
- * `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
73149
- * 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
73150
- * SHOULD populate whichever tanks the hardware has — leave a field `null`
73151
- * only when the device has no such tank at all, and use a `TankStatus`
73152
- * with both inner fields `null` when the tank exists but its level is
73153
- * currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
73154
- * so the HA provider leaves all four `null`.
73379
+ * Tanks (clean water, dirty water, detergent, dust bin) are NOT here: they
73380
+ * are `supply` / `waste` items of the device's `consumables` cap, like every
73381
+ * other device's consumables (D915).
73155
73382
  */
73156
73383
  var VacuumStateSchema = zod.z.enum([
73157
73384
  "idle",
@@ -73162,23 +73389,6 @@ var VacuumStateSchema = zod.z.enum([
73162
73389
  "drying",
73163
73390
  "error"
73164
73391
  ]);
73165
- /**
73166
- * One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
73167
- * detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
73168
- * a discrete `status` (binary-style hardware), or both. Both `null` means the
73169
- * level is currently unknown; the OWNING field being `null` means the
73170
- * hardware has no such tank at all.
73171
- */
73172
- var TankStatusSchema = zod.z.object({
73173
- /** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
73174
- level: zod.z.number().min(0).max(100).nullable(),
73175
- /** Discrete state when the hardware is binary-mode; null otherwise. */
73176
- status: zod.z.enum([
73177
- "ok",
73178
- "low",
73179
- "full"
73180
- ]).nullable()
73181
- });
73182
73392
  var VacuumControlStatusSchema = zod.z.object({
73183
73393
  /** Lifecycle state of the vacuum. */
73184
73394
  state: VacuumStateSchema,
@@ -73190,14 +73400,6 @@ var VacuumControlStatusSchema = zod.z.object({
73190
73400
  fanSpeed: zod.z.string().nullable(),
73191
73401
  /** Speed tokens the hardware accepts — drives the UI selector. */
73192
73402
  availableFanSpeeds: zod.z.array(zod.z.string()),
73193
- /** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
73194
- cleanWater: TankStatusSchema.nullable(),
73195
- /** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
73196
- dirtyWater: TankStatusSchema.nullable(),
73197
- /** Detergent tank. Null when the hardware has no detergent tank. */
73198
- detergent: TankStatusSchema.nullable(),
73199
- /** Dust bin. Null when the hardware has no dust bin. */
73200
- dustBin: TankStatusSchema.nullable(),
73201
73403
  /** 0..100 cleaning-completion percentage of the current task, or null. */
73202
73404
  progressPercent: zod.z.number().min(0).max(100).nullable(),
73203
73405
  /** Current error code (0 / null = no error). */
@@ -73259,35 +73461,14 @@ var vacuumControlCapability = {
73259
73461
  */
73260
73462
  durability: "session",
73261
73463
  /**
73262
- * History (D850): recorded series. Tank levels are fixed-object paths (`cleanWater.level`, ...).
73464
+ * History (D850): recorded series. The tanks moved to `consumables` (D915), whose
73465
+ * items are keyed by runtime ids and record no history.
73263
73466
  */
73264
- history: { fields: {
73265
- batteryLevel: {
73266
- kind: "gauge",
73267
- unit: "%",
73268
- deadband: 2
73269
- },
73270
- "cleanWater.level": {
73271
- kind: "gauge",
73272
- unit: "%",
73273
- deadband: 2
73274
- },
73275
- "dirtyWater.level": {
73276
- kind: "gauge",
73277
- unit: "%",
73278
- deadband: 2
73279
- },
73280
- "detergent.level": {
73281
- kind: "gauge",
73282
- unit: "%",
73283
- deadband: 2
73284
- },
73285
- "dustBin.level": {
73286
- kind: "gauge",
73287
- unit: "%",
73288
- deadband: 2
73289
- }
73290
- } }
73467
+ history: { fields: { batteryLevel: {
73468
+ kind: "gauge",
73469
+ unit: "%",
73470
+ deadband: 2
73471
+ } } }
73291
73472
  };
73292
73473
  //#endregion
73293
73474
  //#region src/capabilities/valve.cap.ts
@@ -79805,6 +79986,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
79805
79986
  addonId: null,
79806
79987
  access: "create"
79807
79988
  },
79989
+ "deviceHistory.deleteOrphanSeries": {
79990
+ capName: "device-history",
79991
+ capScope: "system",
79992
+ addonId: null,
79993
+ access: "delete"
79994
+ },
79808
79995
  "deviceHistory.getDeviceEnabled": {
79809
79996
  capName: "device-history",
79810
79997
  capScope: "system",
@@ -79823,6 +80010,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
79823
80010
  addonId: null,
79824
80011
  access: "view"
79825
80012
  },
80013
+ "deviceHistory.listOrphanSeries": {
80014
+ capName: "device-history",
80015
+ capScope: "system",
80016
+ addonId: null,
80017
+ access: "view"
80018
+ },
79826
80019
  "deviceHistory.listSeries": {
79827
80020
  capName: "device-history",
79828
80021
  capScope: "system",
@@ -83447,6 +83640,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
83447
83640
  addonId: null,
83448
83641
  access: "delete"
83449
83642
  },
83643
+ "pipelineOrchestrator.forgetInferenceDevice": {
83644
+ capName: "pipeline-orchestrator",
83645
+ capScope: "system",
83646
+ addonId: null,
83647
+ access: "delete"
83648
+ },
83450
83649
  "pipelineOrchestrator.getAgentLoad": {
83451
83650
  capName: "pipeline-orchestrator",
83452
83651
  capScope: "system",
@@ -84023,6 +84222,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
84023
84222
  addonId: null,
84024
84223
  access: "view"
84025
84224
  },
84225
+ "platformProbe.rescanAccelerators": {
84226
+ capName: "platform-probe",
84227
+ capScope: "system",
84228
+ addonId: null,
84229
+ access: "create"
84230
+ },
84026
84231
  "platformProbe.resolveHwAccel": {
84027
84232
  capName: "platform-probe",
84028
84233
  capScope: "system",
@@ -93343,7 +93548,7 @@ var BucketAccumulator = class {
93343
93548
  //#region src/generated/history-catalog.ts
93344
93549
  /**
93345
93550
  * Cap history catalog, projected from every `*.cap.ts` `history` block.
93346
- * 40 caps with series (77 series), 31 caps answered `'none'`.
93551
+ * 40 caps with series (73 series), 30 caps answered `'none'`.
93347
93552
  * Field keys are `runtimeState` paths (`a.b` into fixed objects only).
93348
93553
  */
93349
93554
  var HISTORY_CATALOG = {
@@ -93646,33 +93851,11 @@ var HISTORY_CATALOG = {
93646
93851
  unit: "°C",
93647
93852
  deadband: .1
93648
93853
  } },
93649
- "vacuum-control": {
93650
- "batteryLevel": {
93651
- kind: "gauge",
93652
- unit: "%",
93653
- deadband: 2
93654
- },
93655
- "cleanWater.level": {
93656
- kind: "gauge",
93657
- unit: "%",
93658
- deadband: 2
93659
- },
93660
- "dirtyWater.level": {
93661
- kind: "gauge",
93662
- unit: "%",
93663
- deadband: 2
93664
- },
93665
- "detergent.level": {
93666
- kind: "gauge",
93667
- unit: "%",
93668
- deadband: 2
93669
- },
93670
- "dustBin.level": {
93671
- kind: "gauge",
93672
- unit: "%",
93673
- deadband: 2
93674
- }
93675
- },
93854
+ "vacuum-control": { "batteryLevel": {
93855
+ kind: "gauge",
93856
+ unit: "%",
93857
+ deadband: 2
93858
+ } },
93676
93859
  "valve": { "position": {
93677
93860
  kind: "gauge",
93678
93861
  unit: "%",
@@ -93714,13 +93897,47 @@ var HISTORY_CATALOG = {
93714
93897
  }
93715
93898
  }
93716
93899
  };
93900
+ /**
93901
+ * Keyed-array series (D917), projected from every `history.items` block:
93902
+ * 1 caps (3 item fields). The item key is the series SCOPE;
93903
+ * the series key is `cap:<capName>.<path>[].<field>`.
93904
+ */
93905
+ var HISTORY_ITEM_CATALOG = { "consumables": {
93906
+ path: "items",
93907
+ key: "key",
93908
+ label: "label",
93909
+ fields: {
93910
+ "level": {
93911
+ kind: "gauge",
93912
+ unit: "%",
93913
+ deadband: 2,
93914
+ displayName: "Level"
93915
+ },
93916
+ "status": {
93917
+ kind: "enum",
93918
+ displayName: "Status",
93919
+ values: [
93920
+ "ok",
93921
+ "low",
93922
+ "empty",
93923
+ "full",
93924
+ "replace"
93925
+ ]
93926
+ },
93927
+ "remaining.value": {
93928
+ kind: "gauge",
93929
+ unitFrom: "remaining.unit",
93930
+ deadband: 1,
93931
+ displayName: "Remaining"
93932
+ }
93933
+ }
93934
+ } };
93717
93935
  /** Caps that declared `history: 'none'`, sorted. */
93718
93936
  var HISTORY_NONE_CAPS = [
93719
93937
  "audio-metrics",
93720
93938
  "automation-control",
93721
93939
  "camera-streams",
93722
93940
  "color",
93723
- "consumables",
93724
93941
  "control",
93725
93942
  "day-night",
93726
93943
  "device-discovery",
@@ -94018,7 +94235,9 @@ function createSystemProxy(api) {
94018
94235
  declareSeries: (input) => dispatch("deviceHistory", "declareSeries", "mutation", input),
94019
94236
  record: (input) => dispatch("deviceHistory", "record", "mutation", input),
94020
94237
  recordBuckets: (input) => dispatch("deviceHistory", "recordBuckets", "mutation", input),
94021
- getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input)
94238
+ getStatus: (input) => dispatch("deviceHistory", "getStatus", "query", input),
94239
+ listOrphanSeries: (input) => dispatch("deviceHistory", "listOrphanSeries", "query", input),
94240
+ deleteOrphanSeries: (input) => dispatch("deviceHistory", "deleteOrphanSeries", "mutation", input)
94022
94241
  },
94023
94242
  deviceManager: {
94024
94243
  allocateDeviceId: (input) => dispatch("deviceManager", "allocateDeviceId", "mutation", input),
@@ -94358,6 +94577,7 @@ function createSystemProxy(api) {
94358
94577
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
94359
94578
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
94360
94579
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
94580
+ forgetInferenceDevice: (input) => dispatch("pipelineOrchestrator", "forgetInferenceDevice", "mutation", input),
94361
94581
  resetNodePipelineDefaults: (input) => dispatch("pipelineOrchestrator", "resetNodePipelineDefaults", "mutation", input),
94362
94582
  planAutoTune: (input) => dispatch("pipelineOrchestrator", "planAutoTune", "query", input),
94363
94583
  applyAutoTune: (input) => dispatch("pipelineOrchestrator", "applyAutoTune", "mutation", input),
@@ -97981,17 +98201,18 @@ var NC_TEMPLATE_VARS = [
97981
98201
  {
97982
98202
  name: "item",
97983
98203
  label: "Consumable",
98204
+ description: "The device's own name for the item: a filter, a brush, the salt, a tank.",
97984
98205
  example: "Filtro",
97985
98206
  group: "system",
97986
98207
  families: ["rule"],
97987
98208
  fields: [...RULE_TEXT],
97988
98209
  kinds: ["system"],
97989
- systemEventKinds: [...CONSUMABLE]
98210
+ systemEventKinds: [...CONSUMABLE, ...TANK]
97990
98211
  },
97991
98212
  {
97992
98213
  name: "tank",
97993
98214
  label: "Tank",
97994
- description: "Which tank: clean water, dirty water, detergent or dust bin.",
98215
+ description: "Which tank, as a stable token: cleanWater, dirtyWater, detergent, dustBin, or the device key of any other supply (salt, rinse aid).",
97995
98216
  example: "clean water",
97996
98217
  group: "system",
97997
98218
  families: ["rule"],
@@ -101376,15 +101597,23 @@ function byDeficit(a, b) {
101376
101597
  function spareOf(c) {
101377
101598
  return c.spare ?? Number.POSITIVE_INFINITY;
101378
101599
  }
101379
- function electByShare(candidates) {
101380
- if (candidates.length === 0) return { kind: "none" };
101600
+ function loadOf(c) {
101601
+ return Math.max(c.running, 0) + Math.max(c.recent ?? 0, 0);
101602
+ }
101603
+ /** Every candidate with its deficit, the turn holder first. */
101604
+ function scoreShares(candidates) {
101381
101605
  const shareSum = candidates.reduce((s, c) => s + Math.max(c.share, 0), 0);
101382
- const loadOf = (c) => Math.max(c.running, 0) + Math.max(c.recent ?? 0, 0);
101383
101606
  const running = candidates.reduce((s, c) => s + loadOf(c), 0);
101384
- const scored = candidates.map((candidate) => ({
101607
+ return candidates.map((candidate) => ({
101385
101608
  candidate,
101386
101609
  deficit: (shareSum > 0 ? Math.max(candidate.share, 0) / shareSum : 1 / candidates.length) * (running + 1) - loadOf(candidate)
101387
101610
  })).toSorted(byDeficit);
101611
+ }
101612
+ function electByShare(candidates) {
101613
+ if (candidates.length === 0) return { kind: "none" };
101614
+ return electFromScored(scoreShares(candidates));
101615
+ }
101616
+ function electFromScored(scored) {
101388
101617
  const turn = scored[0].candidate;
101389
101618
  if (!turn.capped && !turn.saturated) return {
101390
101619
  kind: "elected",
@@ -101408,6 +101637,55 @@ function electByShare(candidates) {
101408
101637
  reason: "share"
101409
101638
  };
101410
101639
  }
101640
+ /**
101641
+ * Affinity (D916, amends D913): a camera's sessions are short and frequent, and
101642
+ * every election is a fresh one — with the recency memory rotating on purpose,
101643
+ * one camera hopped node on 11 of 14 sessions in ten minutes, each hop a stream
101644
+ * dial, a decode-worker fork and a cold pre-roll. The candidate a camera ran on
101645
+ * last is kept while its deficit is within {@link SHARE_AFFINITY_TOLERANCE_SESSIONS}
101646
+ * of the turn holder's, and while it has room (offered, not capped, not
101647
+ * drowning). It moves only when the share is really off — and because a kept
101648
+ * session still counts toward its candidate, the cumulative split still follows
101649
+ * the shares: no candidate runs more than about one session over its share
101650
+ * before its cameras leave.
101651
+ */
101652
+ var SHARE_AFFINITY_TOLERANCE_SESSIONS = 1;
101653
+ function toScoredCandidate(s) {
101654
+ return {
101655
+ key: s.candidate.key,
101656
+ share: s.candidate.share,
101657
+ running: s.candidate.running,
101658
+ recent: s.candidate.recent ?? 0,
101659
+ deficit: s.deficit
101660
+ };
101661
+ }
101662
+ /** {@link electByShare}, keeping the previous candidate while the share allows it. */
101663
+ function electByShareWithAffinity(candidates, previousKey, toleranceSessions = 1) {
101664
+ const scored = candidates.length === 0 ? [] : scoreShares(candidates);
101665
+ const plain = scored.length === 0 ? { kind: "none" } : electFromScored(scored);
101666
+ const turnKey = plain.kind === "elected" ? plain.key : null;
101667
+ const result = (election, sticky, affinityReason) => ({
101668
+ election,
101669
+ sticky,
101670
+ affinityReason,
101671
+ previousKey,
101672
+ turnKey,
101673
+ scored: scored.map(toScoredCandidate)
101674
+ });
101675
+ if (previousKey === null) return result(plain, false, "no-previous");
101676
+ if (turnKey === previousKey) return result(plain, true, "previous-is-turn");
101677
+ const previous = scored.find((s) => s.candidate.key === previousKey);
101678
+ if (previous === void 0) return result(plain, false, "previous-ineligible");
101679
+ if (previous.candidate.capped || previous.candidate.saturated) return result(plain, false, "previous-no-room");
101680
+ const elected = scored.find((s) => s.candidate.key === turnKey);
101681
+ if (elected === void 0) return result(plain, false, "share-off");
101682
+ if (previous.deficit >= elected.deficit - toleranceSessions - DEFICIT_EPSILON) return result({
101683
+ kind: "elected",
101684
+ key: previousKey,
101685
+ reason: "share"
101686
+ }, true, "within-one-session");
101687
+ return result(plain, false, "share-off");
101688
+ }
101411
101689
  //#endregion
101412
101690
  //#region src/pipeline/load-balancing/effective-shares.ts
101413
101691
  /**
@@ -101443,7 +101721,8 @@ function resolveEffectiveShares(input) {
101443
101721
  const nodes = input.nodeIds.map((nodeId) => {
101444
101722
  const eligibleKeys = new Set(input.eligibleDevices[nodeId] ?? []);
101445
101723
  const named = weights.devices[nodeId] ?? {};
101446
- const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].toSorted();
101724
+ const absent = new Set(input.absentDevices?.[nodeId] ?? []);
101725
+ const keys = [...new Set([...Object.keys(named), ...eligibleKeys])].filter((k) => !absent.has(k)).toSorted();
101447
101726
  const perDevice = {};
101448
101727
  for (const key of keys) perDevice[key] = positive(named[key]);
101449
101728
  if (keys.length > 0) deviceWeights[nodeId] = perDevice;
@@ -104640,9 +104919,13 @@ exports.ConnectionTestDescriptorSchema = ConnectionTestDescriptorSchema;
104640
104919
  exports.ConnectionTestInputSchema = ConnectionTestInputSchema;
104641
104920
  exports.ConnectionTestOutcomeSchema = ConnectionTestOutcomeSchema;
104642
104921
  exports.ConnectivityStatusSchema = ConnectivityStatusSchema;
104922
+ exports.ConsumableFormSchema = ConsumableFormSchema;
104643
104923
  exports.ConsumableItemSchema = ConsumableItemSchema;
104924
+ exports.ConsumableKindSchema = ConsumableKindSchema;
104925
+ exports.ConsumableLevelSchema = ConsumableLevelSchema;
104644
104926
  exports.ConsumableRemainingSchema = ConsumableRemainingSchema;
104645
104927
  exports.ConsumableRemainingUnitSchema = ConsumableRemainingUnitSchema;
104928
+ exports.ConsumableStatusSchema = ConsumableStatusSchema;
104646
104929
  exports.ConsumablesStatusSchema = ConsumablesStatusSchema;
104647
104930
  exports.ContactStatusSchema = ContactStatusSchema;
104648
104931
  exports.ControlKindSchema = ControlKindSchema;
@@ -104723,6 +105006,8 @@ exports.DEVICE_DEFINITIVE_REFUSALS_BEFORE_DELETE = DEVICE_DEFINITIVE_REFUSALS_BE
104723
105006
  exports.DEVICE_DO_ACTIONS = DEVICE_DO_ACTIONS;
104724
105007
  exports.DEVICE_ENROLLMENT_TTL_MS = DEVICE_ENROLLMENT_TTL_MS;
104725
105008
  exports.DEVICE_HISTORY_ENERGY_KEY = DEVICE_HISTORY_ENERGY_KEY;
105009
+ exports.DEVICE_HISTORY_ORPHAN_DELETE_MAX = DEVICE_HISTORY_ORPHAN_DELETE_MAX;
105010
+ exports.DEVICE_HISTORY_ORPHAN_LIST_MAX = DEVICE_HISTORY_ORPHAN_LIST_MAX;
104726
105011
  exports.DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS = DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS;
104727
105012
  exports.DEVICE_NONCE_TTL_MS = DEVICE_NONCE_TTL_MS;
104728
105013
  exports.DEVICE_PROFILES = DEVICE_PROFILES;
@@ -104782,6 +105067,8 @@ exports.DeviceExportStatusSchema = DeviceExportStatusSchema;
104782
105067
  exports.DeviceExportUnexposeInputSchema = UnexposeInputSchema;
104783
105068
  exports.DeviceFeature = require_err_msg.DeviceFeature;
104784
105069
  exports.DeviceHistoryKindSchema = DeviceHistoryKindSchema;
105070
+ exports.DeviceHistoryOrphanDeleteRefusalSchema = DeviceHistoryOrphanDeleteRefusalSchema;
105071
+ exports.DeviceHistoryOrphanReasonSchema = DeviceHistoryOrphanReasonSchema;
104785
105072
  exports.DeviceHistoryProducerKindSchema = DeviceHistoryProducerKindSchema;
104786
105073
  exports.DeviceHistoryRefusalReasonSchema = DeviceHistoryRefusalReasonSchema;
104787
105074
  exports.DeviceHistoryResolutionSchema = DeviceHistoryResolutionSchema;
@@ -104814,7 +105101,6 @@ exports.DiscoveredDeviceSchema = DiscoveredDeviceSchema;
104814
105101
  exports.DiscoveredTargetSchema = DiscoveredTargetSchema;
104815
105102
  exports.DishwasherAccessSchema = DishwasherAccessSchema;
104816
105103
  exports.DishwasherAvailabilitySchema = DishwasherAvailabilitySchema;
104817
- exports.DishwasherConsumableLevelSchema = DishwasherConsumableLevelSchema;
104818
105104
  exports.DishwasherOperationStateSchema = DishwasherOperationStateSchema;
104819
105105
  exports.DishwasherOptionDescriptorSchema = DishwasherOptionDescriptorSchema;
104820
105106
  exports.DishwasherOptionsSchema = DishwasherOptionsSchema;
@@ -104975,6 +105261,7 @@ exports.HF_REPO = require_sleep.HF_REPO;
104975
105261
  exports.HISTORY_BUCKET_MS = HISTORY_BUCKET_MS;
104976
105262
  exports.HISTORY_CATALOG = HISTORY_CATALOG;
104977
105263
  exports.HISTORY_DEFAULT_MIN_INTERVAL_MS = require_sleep.HISTORY_DEFAULT_MIN_INTERVAL_MS;
105264
+ exports.HISTORY_ITEM_CATALOG = HISTORY_ITEM_CATALOG;
104978
105265
  exports.HISTORY_NONE_CAPS = HISTORY_NONE_CAPS;
104979
105266
  exports.HISTORY_UNIT_LABELS = require_sleep.HISTORY_UNIT_LABELS;
104980
105267
  exports.HOURS_PER_DAY = HOURS_PER_DAY;
@@ -105863,6 +106150,7 @@ exports.SENSOR_MAP = SENSOR_MAP;
105863
106150
  exports.SERVER_NAME_MAX_LENGTH = SERVER_NAME_MAX_LENGTH;
105864
106151
  exports.SERVER_NAME_SETTING_KEY = SERVER_NAME_SETTING_KEY;
105865
106152
  exports.SESSION_PLACEMENT_SETTING_KEY = SESSION_PLACEMENT_SETTING_KEY;
106153
+ exports.SHARE_AFFINITY_TOLERANCE_SESSIONS = SHARE_AFFINITY_TOLERANCE_SESSIONS;
105866
106154
  exports.SHARE_SOURCE_SETTING_KEY = SHARE_SOURCE_SETTING_KEY;
105867
106155
  exports.SHARE_VIEW_KINDS = require_sleep.SHARE_VIEW_KINDS;
105868
106156
  exports.SHARE_VIEW_MAX_DEVICES = SHARE_VIEW_MAX_DEVICES;
@@ -106027,7 +106315,6 @@ exports.TRAINING_RESULT_SCHEMA = TRAINING_RESULT_SCHEMA;
106027
106315
  exports.TRANSCODE_DOWN_MAX_BITRATE_KBPS = TRANSCODE_DOWN_MAX_BITRATE_KBPS;
106028
106316
  exports.TRANSCODE_DOWN_MAX_HEIGHT = TRANSCODE_DOWN_MAX_HEIGHT;
106029
106317
  exports.TamperStatusSchema = TamperStatusSchema;
106030
- exports.TankStatusSchema = TankStatusSchema;
106031
106318
  exports.TargetKindCapsSchema = TargetKindCapsSchema;
106032
106319
  exports.TargetKindLevelSchema = TargetKindLevelSchema;
106033
106320
  exports.TargetKindSchema = TargetKindSchema;
@@ -106358,6 +106645,8 @@ exports.conditionExclusionReason = conditionExclusionReason;
106358
106645
  exports.conditionVisibleForKind = conditionVisibleForKind;
106359
106646
  exports.connectionTestCapability = connectionTestCapability;
106360
106647
  exports.connectivityCapability = connectivityCapability;
106648
+ exports.consumableFormOf = consumableFormOf;
106649
+ exports.consumableKindOf = consumableKindOf;
106361
106650
  exports.consumableLowPercentOf = consumableLowPercentOf;
106362
106651
  exports.consumablesCapability = consumablesCapability;
106363
106652
  exports.contactCapability = contactCapability;
@@ -106464,6 +106753,7 @@ exports.effectiveStepSettings = effectiveStepSettings;
106464
106753
  exports.egressTranscodeSharingKey = egressTranscodeSharingKey;
106465
106754
  exports.egressTransportFromRequest = egressTransportFromRequest;
106466
106755
  exports.electByShare = electByShare;
106756
+ exports.electByShareWithAffinity = electByShareWithAffinity;
106467
106757
  exports.eligibleUnderBenchmark = eligibleUnderBenchmark;
106468
106758
  exports.embeddingEncoderCapability = embeddingEncoderCapability;
106469
106759
  exports.embeddingModelFailedError = embeddingModelFailedError;
@@ -106557,6 +106847,7 @@ exports.hasUrlScheme = hasUrlScheme;
106557
106847
  exports.heatingValveCapability = heatingValveCapability;
106558
106848
  exports.hfModelUrl = require_sleep.hfModelUrl;
106559
106849
  exports.historyFieldsFor = historyFieldsFor;
106850
+ exports.historyItemFieldPath = require_sleep.historyItemFieldPath;
106560
106851
  exports.htmlToText = htmlToText;
106561
106852
  exports.hubAddressHostname = hubAddressHostname;
106562
106853
  exports.hubMotionNativeProvider = hubMotionNativeProvider;