camstack 1.2.102 → 1.2.104

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.
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
23633
23633
  }
23634
23634
  });
23635
23635
 
23636
- // ../system/dist/dist-B0Cf6q_P.js
23637
- var require_dist_B0Cf6q_P = __commonJS({
23638
- "../system/dist/dist-B0Cf6q_P.js"(exports) {
23636
+ // ../system/dist/dist-Qnc3kuba.js
23637
+ var require_dist_Qnc3kuba = __commonJS({
23638
+ "../system/dist/dist-Qnc3kuba.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -23866,6 +23866,12 @@ var require_dist_B0Cf6q_P = __commonJS({
23866
23866
  icon: "move",
23867
23867
  order: 40
23868
23868
  },
23869
+ {
23870
+ id: "navigation",
23871
+ label: "Navigation",
23872
+ icon: "compass",
23873
+ order: 41
23874
+ },
23869
23875
  {
23870
23876
  id: "consumables",
23871
23877
  label: "Consumables",
@@ -47493,6 +47499,169 @@ var require_dist_B0Cf6q_P = __commonJS({
47493
47499
  */
47494
47500
  durability: "session"
47495
47501
  };
47502
+ var NavigationMoveCommandSchema = zod.z.object({
47503
+ pan: zod.z.number().min(-1).max(1).optional(),
47504
+ tilt: zod.z.number().min(-1).max(1).optional(),
47505
+ speed: zod.z.number().min(0).max(1).optional()
47506
+ });
47507
+ var NavigationActionIdSchema = zod.z.enum([
47508
+ "goHome",
47509
+ "locate",
47510
+ "spotClean",
47511
+ "findPet",
47512
+ "personFollow",
47513
+ "stop",
47514
+ "startClean",
47515
+ "pauseClean",
47516
+ "dockWash",
47517
+ "autoEmpty",
47518
+ "flashOn",
47519
+ "flashOff"
47520
+ ]);
47521
+ var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
47522
+ var NavigationActionEntrySchema = zod.z.object({
47523
+ id: zod.z.string(),
47524
+ kind: NavigationEntryKindSchema,
47525
+ label: zod.z.string(),
47526
+ icon: zod.z.string(),
47527
+ /** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
47528
+ soundId: zod.z.number().int().optional(),
47529
+ /** Per-device feature flag — render this entry only when true. */
47530
+ enabled: zod.z.boolean()
47531
+ });
47532
+ var NavigationPointSchema = zod.z.object({
47533
+ x: zod.z.number(),
47534
+ y: zod.z.number()
47535
+ });
47536
+ var NavigationFeaturesSchema = zod.z.object({
47537
+ move: zod.z.boolean(),
47538
+ stop: zod.z.boolean(),
47539
+ goToPoint: zod.z.boolean(),
47540
+ runAction: zod.z.boolean(),
47541
+ playSound: zod.z.boolean(),
47542
+ light: zod.z.boolean(),
47543
+ lightMode: zod.z.boolean()
47544
+ });
47545
+ var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
47546
+ var NavigationModeSchema = zod.z.enum([
47547
+ "idle",
47548
+ "cleaning",
47549
+ "spot",
47550
+ "following",
47551
+ "goto",
47552
+ "returning",
47553
+ "paused",
47554
+ "unknown"
47555
+ ]);
47556
+ var NavigationStatusSchema = zod.z.object({
47557
+ mode: NavigationModeSchema,
47558
+ following: zod.z.boolean(),
47559
+ flash: zod.z.boolean(),
47560
+ lightMode: NavigationLightModeSchema,
47561
+ lightLevel: zod.z.number().min(40).max(100),
47562
+ /** Ms epoch when the slice was last updated. */
47563
+ lastChangedAt: zod.z.number()
47564
+ });
47565
+ var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
47566
+ var navigationCapability = {
47567
+ name: "navigation",
47568
+ scope: "device",
47569
+ deviceNative: true,
47570
+ mode: "singleton",
47571
+ deviceTypes: [DeviceType.Camera],
47572
+ deviceConfig: { ui: {
47573
+ kind: "widget",
47574
+ widgetId: "host/navigation-panel",
47575
+ tab: "navigation",
47576
+ topTab: true,
47577
+ label: "Navigation",
47578
+ order: 0
47579
+ } },
47580
+ methods: {
47581
+ /**
47582
+ * Momentary drive nudge (the robot moves). `protected` — mirrors
47583
+ * `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
47584
+ * path) works for any authenticated user, not admin-only. The UI sends
47585
+ * these at ~1 Hz while a control is held; the provider forwards each one to
47586
+ * a single drive write WITHOUT debouncing.
47587
+ */
47588
+ move: method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47589
+ /** Halt all motion immediately (zero drive vector). */
47590
+ stop: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47591
+ /** Send the robot to a point on its live map. */
47592
+ goToPoint: method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47593
+ /**
47594
+ * Enumerate the discrete controls THIS device supports (data-driven UI +
47595
+ * PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
47596
+ */
47597
+ listActions: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
47598
+ /**
47599
+ * Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
47600
+ * unsupported action ids are rejected by the provider.
47601
+ */
47602
+ runAction: method(zod.z.object({
47603
+ deviceId: zod.z.number(),
47604
+ actionId: NavigationActionIdSchema
47605
+ }), zod.z.void(), { kind: "mutation" }),
47606
+ /** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
47607
+ playSound: method(zod.z.object({
47608
+ deviceId: zod.z.number(),
47609
+ soundId: zod.z.number().int()
47610
+ }), zod.z.void(), { kind: "mutation" }),
47611
+ /**
47612
+ * Turn the on-camera fill light on / off (the `OpenFullLight` control —
47613
+ * works anytime, no active stream required).
47614
+ */
47615
+ setLightOn: method(zod.z.object({
47616
+ deviceId: zod.z.number(),
47617
+ on: zod.z.boolean()
47618
+ }), zod.z.void(), { kind: "mutation" }),
47619
+ /**
47620
+ * Set the fill-light mode (auto vs manual). `manual` optionally carries the
47621
+ * initial `level`. The auto/manual + level control is a CAMERA-service
47622
+ * action that generally needs an active camera stream/monitor session — the
47623
+ * UI shows the manual level slider ONLY when `mode === 'manual'`.
47624
+ */
47625
+ setLightMode: method(zod.z.object({
47626
+ deviceId: zod.z.number(),
47627
+ mode: NavigationLightModeSchema,
47628
+ level: zod.z.number().min(40).max(100).optional()
47629
+ }), zod.z.void(), { kind: "mutation" }),
47630
+ /** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
47631
+ setLightLevel: method(zod.z.object({
47632
+ deviceId: zod.z.number(),
47633
+ level: zod.z.number().min(40).max(100)
47634
+ }), zod.z.void(), { kind: "mutation" }),
47635
+ /**
47636
+ * Per-device FEATURE-FLAG report for the general primitives — drives which
47637
+ * controls the UI shows (the per-entry flags for the dictionary come back on
47638
+ * `listActions`).
47639
+ */
47640
+ getFeatures: method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
47641
+ },
47642
+ events: { onStatusChanged: { data: zod.z.object({
47643
+ deviceId: zod.z.number(),
47644
+ status: NavigationStatusSchema
47645
+ }) } },
47646
+ status: {
47647
+ schema: NavigationStatusSchema,
47648
+ kind: "push"
47649
+ },
47650
+ /**
47651
+ * Runtime-state slice mirrored by the kernel. The navigation panel watches it
47652
+ * for live mode / follow / flash changes.
47653
+ */
47654
+ runtimeState: NavigationRuntimeStateSchema,
47655
+ /**
47656
+ * Runtime-state durability: **session** — like `vacuum-control`, a restored
47657
+ * `mode: cleaning` / `following: true` is a robot that is not actually doing
47658
+ * that. The live handle re-publishes on connect.
47659
+ *
47660
+ * See `RuntimeStateDurability`. Enforced by
47661
+ * `scripts/check-runtime-state-durability.ts`.
47662
+ */
47663
+ durability: "session"
47664
+ };
47496
47665
  var rebootCapability = {
47497
47666
  name: "reboot",
47498
47667
  scope: "device",
@@ -50813,6 +50982,7 @@ var require_dist_B0Cf6q_P = __commonJS({
50813
50982
  "motion-zones",
50814
50983
  "mqtt-broker",
50815
50984
  "native-object-detection",
50985
+ "navigation",
50816
50986
  "network-link",
50817
50987
  "notifier",
50818
50988
  "numeric-sensor",
@@ -50930,6 +51100,7 @@ var require_dist_B0Cf6q_P = __commonJS({
50930
51100
  motionZonesCapability,
50931
51101
  mqttBrokerCapability,
50932
51102
  nativeObjectDetectionCapability,
51103
+ navigationCapability,
50933
51104
  networkAccessCapability,
50934
51105
  networkLinkCapability,
50935
51106
  networkQualityCapability,
@@ -53732,6 +53903,66 @@ var require_dist_B0Cf6q_P = __commonJS({
53732
53903
  addonId: null,
53733
53904
  access: "create"
53734
53905
  },
53906
+ "navigation.getFeatures": {
53907
+ capName: "navigation",
53908
+ capScope: "device",
53909
+ addonId: null,
53910
+ access: "view"
53911
+ },
53912
+ "navigation.goToPoint": {
53913
+ capName: "navigation",
53914
+ capScope: "device",
53915
+ addonId: null,
53916
+ access: "create"
53917
+ },
53918
+ "navigation.listActions": {
53919
+ capName: "navigation",
53920
+ capScope: "device",
53921
+ addonId: null,
53922
+ access: "view"
53923
+ },
53924
+ "navigation.move": {
53925
+ capName: "navigation",
53926
+ capScope: "device",
53927
+ addonId: null,
53928
+ access: "create"
53929
+ },
53930
+ "navigation.playSound": {
53931
+ capName: "navigation",
53932
+ capScope: "device",
53933
+ addonId: null,
53934
+ access: "create"
53935
+ },
53936
+ "navigation.runAction": {
53937
+ capName: "navigation",
53938
+ capScope: "device",
53939
+ addonId: null,
53940
+ access: "create"
53941
+ },
53942
+ "navigation.setLightLevel": {
53943
+ capName: "navigation",
53944
+ capScope: "device",
53945
+ addonId: null,
53946
+ access: "create"
53947
+ },
53948
+ "navigation.setLightMode": {
53949
+ capName: "navigation",
53950
+ capScope: "device",
53951
+ addonId: null,
53952
+ access: "create"
53953
+ },
53954
+ "navigation.setLightOn": {
53955
+ capName: "navigation",
53956
+ capScope: "device",
53957
+ addonId: null,
53958
+ access: "create"
53959
+ },
53960
+ "navigation.stop": {
53961
+ capName: "navigation",
53962
+ capScope: "device",
53963
+ addonId: null,
53964
+ access: "create"
53965
+ },
53735
53966
  "networkAccess.getEndpoint": {
53736
53967
  capName: "network-access",
53737
53968
  capScope: "system",
@@ -57827,6 +58058,56 @@ var require_dist_B0Cf6q_P = __commonJS({
57827
58058
  form: "single",
57828
58059
  optional: false
57829
58060
  }],
58061
+ "navigation.getFeatures": [{
58062
+ name: "deviceId",
58063
+ form: "single",
58064
+ optional: false
58065
+ }],
58066
+ "navigation.goToPoint": [{
58067
+ name: "deviceId",
58068
+ form: "single",
58069
+ optional: false
58070
+ }],
58071
+ "navigation.listActions": [{
58072
+ name: "deviceId",
58073
+ form: "single",
58074
+ optional: false
58075
+ }],
58076
+ "navigation.move": [{
58077
+ name: "deviceId",
58078
+ form: "single",
58079
+ optional: false
58080
+ }],
58081
+ "navigation.playSound": [{
58082
+ name: "deviceId",
58083
+ form: "single",
58084
+ optional: false
58085
+ }],
58086
+ "navigation.runAction": [{
58087
+ name: "deviceId",
58088
+ form: "single",
58089
+ optional: false
58090
+ }],
58091
+ "navigation.setLightLevel": [{
58092
+ name: "deviceId",
58093
+ form: "single",
58094
+ optional: false
58095
+ }],
58096
+ "navigation.setLightMode": [{
58097
+ name: "deviceId",
58098
+ form: "single",
58099
+ optional: false
58100
+ }],
58101
+ "navigation.setLightOn": [{
58102
+ name: "deviceId",
58103
+ form: "single",
58104
+ optional: false
58105
+ }],
58106
+ "navigation.stop": [{
58107
+ name: "deviceId",
58108
+ form: "single",
58109
+ optional: false
58110
+ }],
57830
58111
  "networkQuality.getDeviceStats": [{
57831
58112
  name: "deviceId",
57832
58113
  form: "single",
@@ -59024,6 +59305,10 @@ var require_dist_B0Cf6q_P = __commonJS({
59024
59305
  durability: "restored",
59025
59306
  volatileFields: ["lastFetchedAt"]
59026
59307
  },
59308
+ "navigation": {
59309
+ durability: "session",
59310
+ volatileFields: []
59311
+ },
59027
59312
  "network-link": {
59028
59313
  durability: "restored",
59029
59314
  volatileFields: ["lastUpdated"]
@@ -60278,7 +60563,7 @@ var require_alerts_addon = __commonJS({
60278
60563
  [Symbol.toStringTag]: { value: "Module" }
60279
60564
  });
60280
60565
  require_chunk_Cek0wNdY();
60281
- var require_dist10 = require_dist_B0Cf6q_P();
60566
+ var require_dist10 = require_dist_Qnc3kuba();
60282
60567
  function selectExpired(alerts, cutoffMs) {
60283
60568
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
60284
60569
  }
@@ -61097,7 +61382,7 @@ var require_console_logging = __commonJS({
61097
61382
  [Symbol.toStringTag]: { value: "Module" }
61098
61383
  });
61099
61384
  require_chunk_Cek0wNdY();
61100
- var require_dist10 = require_dist_B0Cf6q_P();
61385
+ var require_dist10 = require_dist_Qnc3kuba();
61101
61386
  var require_formatter = require_formatter_DqAKDlvN();
61102
61387
  var LEVEL_RANK = {
61103
61388
  debug: 0,
@@ -61191,7 +61476,7 @@ var require_core_blocks_addon = __commonJS({
61191
61476
  "use strict";
61192
61477
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
61193
61478
  var require_chunk = require_chunk_Cek0wNdY();
61194
- var require_dist10 = require_dist_B0Cf6q_P();
61479
+ var require_dist10 = require_dist_Qnc3kuba();
61195
61480
  var node_crypto = __require("crypto");
61196
61481
  var node_fs_promises = __require("fs/promises");
61197
61482
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -62088,11 +62373,11 @@ var require_core_blocks = __commonJS({
62088
62373
  }
62089
62374
  });
62090
62375
 
62091
- // ../system/dist/retired-settings-keys-mP95OCUi.js
62092
- var require_retired_settings_keys_mP95OCUi = __commonJS({
62093
- "../system/dist/retired-settings-keys-mP95OCUi.js"(exports) {
62376
+ // ../system/dist/retired-settings-keys-C_h6HXZi.js
62377
+ var require_retired_settings_keys_C_h6HXZi = __commonJS({
62378
+ "../system/dist/retired-settings-keys-C_h6HXZi.js"(exports) {
62094
62379
  "use strict";
62095
- var require_dist10 = require_dist_B0Cf6q_P();
62380
+ var require_dist10 = require_dist_Qnc3kuba();
62096
62381
  function settingsStoreIsAuthoritativeHere(env) {
62097
62382
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
62098
62383
  return raw === "" || raw === "hub";
@@ -64306,8 +64591,8 @@ var require_device_manager_addon = __commonJS({
64306
64591
  [Symbol.toStringTag]: { value: "Module" }
64307
64592
  });
64308
64593
  require_chunk_Cek0wNdY();
64309
- var require_dist10 = require_dist_B0Cf6q_P();
64310
- var require_retired_settings_keys = require_retired_settings_keys_mP95OCUi();
64594
+ var require_dist10 = require_dist_Qnc3kuba();
64595
+ var require_retired_settings_keys = require_retired_settings_keys_C_h6HXZi();
64311
64596
  var node_crypto = __require("crypto");
64312
64597
  var _camstack_types_node = require_node();
64313
64598
  var JOB_HISTORY = 20;
@@ -69822,7 +70107,7 @@ var require_hub_forwarder = __commonJS({
69822
70107
  [Symbol.toStringTag]: { value: "Module" }
69823
70108
  });
69824
70109
  require_chunk_Cek0wNdY();
69825
- var require_dist10 = require_dist_B0Cf6q_P();
70110
+ var require_dist10 = require_dist_Qnc3kuba();
69826
70111
  var require_formatter = require_formatter_DqAKDlvN();
69827
70112
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
69828
70113
  var HubForwarderDestination = class {
@@ -69959,7 +70244,7 @@ var require_liveness_monitor_addon = __commonJS({
69959
70244
  "use strict";
69960
70245
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
69961
70246
  require_chunk_Cek0wNdY();
69962
- var require_dist10 = require_dist_B0Cf6q_P();
70247
+ var require_dist10 = require_dist_Qnc3kuba();
69963
70248
  var NO_DEVICES = "liveness:no-devices";
69964
70249
  var ALL_OFFLINE = "liveness:all-devices-offline";
69965
70250
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -70155,7 +70440,7 @@ var require_local_auth_addon = __commonJS({
70155
70440
  [Symbol.toStringTag]: { value: "Module" }
70156
70441
  });
70157
70442
  var require_chunk = require_chunk_Cek0wNdY();
70158
- var require_dist10 = require_dist_B0Cf6q_P();
70443
+ var require_dist10 = require_dist_Qnc3kuba();
70159
70444
  var node_crypto = __require("crypto");
70160
70445
  node_crypto = require_chunk.__toESM(node_crypto);
70161
70446
  var crypto$1 = __require("crypto");
@@ -77968,7 +78253,7 @@ var require_loki_logging = __commonJS({
77968
78253
  [Symbol.toStringTag]: { value: "Module" }
77969
78254
  });
77970
78255
  require_chunk_Cek0wNdY();
77971
- var require_dist10 = require_dist_B0Cf6q_P();
78256
+ var require_dist10 = require_dist_Qnc3kuba();
77972
78257
  function sanitizeLabelName(raw) {
77973
78258
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
77974
78259
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -78533,7 +78818,7 @@ var require_native_metrics_addon = __commonJS({
78533
78818
  [Symbol.toStringTag]: { value: "Module" }
78534
78819
  });
78535
78820
  var require_chunk = require_chunk_Cek0wNdY();
78536
- var require_dist10 = require_dist_B0Cf6q_P();
78821
+ var require_dist10 = require_dist_Qnc3kuba();
78537
78822
  var node_fs_promises = __require("fs/promises");
78538
78823
  var node_child_process = __require("child_process");
78539
78824
  var node_util = __require("util");
@@ -81117,7 +81402,7 @@ var require_filesystem_storage_addon = __commonJS({
81117
81402
  [Symbol.toStringTag]: { value: "Module" }
81118
81403
  });
81119
81404
  var require_chunk = require_chunk_Cek0wNdY();
81120
- var require_dist10 = require_dist_B0Cf6q_P();
81405
+ var require_dist10 = require_dist_Qnc3kuba();
81121
81406
  var node_crypto = __require("crypto");
81122
81407
  var node_fs_promises = __require("fs/promises");
81123
81408
  var node_path = __require("path");
@@ -82233,8 +82518,8 @@ var require_sqlite_settings_addon = __commonJS({
82233
82518
  [Symbol.toStringTag]: { value: "Module" }
82234
82519
  });
82235
82520
  var require_chunk = require_chunk_Cek0wNdY();
82236
- var require_dist10 = require_dist_B0Cf6q_P();
82237
- var require_retired_settings_keys = require_retired_settings_keys_mP95OCUi();
82521
+ var require_dist10 = require_dist_Qnc3kuba();
82522
+ var require_retired_settings_keys = require_retired_settings_keys_C_h6HXZi();
82238
82523
  var node_crypto = __require("crypto");
82239
82524
  var node_fs = __require("fs");
82240
82525
  var node_module = __require("module");
@@ -84724,7 +85009,7 @@ var require_storage_orchestrator_addon = __commonJS({
84724
85009
  [Symbol.toStringTag]: { value: "Module" }
84725
85010
  });
84726
85011
  var require_chunk = require_chunk_Cek0wNdY();
84727
- var require_dist10 = require_dist_B0Cf6q_P();
85012
+ var require_dist10 = require_dist_Qnc3kuba();
84728
85013
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
84729
85014
  var zod = require_zod();
84730
85015
  var node_crypto = __require("crypto");
@@ -87675,7 +87960,7 @@ var require_system_config_addon = __commonJS({
87675
87960
  [Symbol.toStringTag]: { value: "Module" }
87676
87961
  });
87677
87962
  require_chunk_Cek0wNdY();
87678
- var require_dist10 = require_dist_B0Cf6q_P();
87963
+ var require_dist10 = require_dist_Qnc3kuba();
87679
87964
  var SECTION_TITLES = {
87680
87965
  server: "Server",
87681
87966
  auth: "Authentication"
@@ -105736,7 +106021,7 @@ var require_winston_logging = __commonJS({
105736
106021
  [Symbol.toStringTag]: { value: "Module" }
105737
106022
  });
105738
106023
  var require_chunk = require_chunk_Cek0wNdY();
105739
- var require_dist10 = require_dist_B0Cf6q_P();
106024
+ var require_dist10 = require_dist_Qnc3kuba();
105740
106025
  var require_formatter = require_formatter_DqAKDlvN();
105741
106026
  var node_path = __require("path");
105742
106027
  node_path = require_chunk.__toESM(node_path);
@@ -107680,9 +107965,9 @@ var require_event_category_b8kBSOTT = __commonJS({
107680
107965
  }
107681
107966
  });
107682
107967
 
107683
- // ../types/dist/sleep-TVipGseU.js
107684
- var require_sleep_TVipGseU = __commonJS({
107685
- "../types/dist/sleep-TVipGseU.js"(exports) {
107968
+ // ../types/dist/sleep-QEBby1J6.js
107969
+ var require_sleep_QEBby1J6 = __commonJS({
107970
+ "../types/dist/sleep-QEBby1J6.js"(exports) {
107686
107971
  "use strict";
107687
107972
  var require_event_category = require_event_category_b8kBSOTT();
107688
107973
  var zod = require_zod();
@@ -107759,6 +108044,12 @@ var require_sleep_TVipGseU = __commonJS({
107759
108044
  icon: "move",
107760
108045
  order: 40
107761
108046
  },
108047
+ {
108048
+ id: "navigation",
108049
+ label: "Navigation",
108050
+ icon: "compass",
108051
+ order: 41
108052
+ },
107762
108053
  {
107763
108054
  id: "consumables",
107764
108055
  label: "Consumables",
@@ -110077,6 +110368,7 @@ var require_sleep_TVipGseU = __commonJS({
110077
110368
  motionTrigger: createSliceHandle(stateSource, binding.deviceId, "motion-trigger"),
110078
110369
  motionZones: createSliceHandle(stateSource, binding.deviceId, "motion-zones"),
110079
110370
  nativeObjectDetection: createSliceHandle(stateSource, binding.deviceId, "native-object-detection"),
110371
+ navigation: createSliceHandle(stateSource, binding.deviceId, "navigation"),
110080
110372
  networkLink: createSliceHandle(stateSource, binding.deviceId, "network-link"),
110081
110373
  notifier: createSliceHandle(stateSource, binding.deviceId, "notifier"),
110082
110374
  numericSensor: createSliceHandle(stateSource, binding.deviceId, "numeric-sensor"),
@@ -110311,6 +110603,19 @@ var require_sleep_TVipGseU = __commonJS({
110311
110603
  setEnabled: (input) => dispatch("native-object-detection", "nativeObjectDetection", "setEnabled", "mutation", input),
110312
110604
  getStatus: (input) => dispatch("native-object-detection", "nativeObjectDetection", "getStatus", "query", input)
110313
110605
  },
110606
+ navigation: {
110607
+ move: (input) => dispatch("navigation", "navigation", "move", "mutation", input),
110608
+ stop: (input) => dispatch("navigation", "navigation", "stop", "mutation", input),
110609
+ goToPoint: (input) => dispatch("navigation", "navigation", "goToPoint", "mutation", input),
110610
+ listActions: (input) => dispatch("navigation", "navigation", "listActions", "query", input),
110611
+ runAction: (input) => dispatch("navigation", "navigation", "runAction", "mutation", input),
110612
+ playSound: (input) => dispatch("navigation", "navigation", "playSound", "mutation", input),
110613
+ setLightOn: (input) => dispatch("navigation", "navigation", "setLightOn", "mutation", input),
110614
+ setLightMode: (input) => dispatch("navigation", "navigation", "setLightMode", "mutation", input),
110615
+ setLightLevel: (input) => dispatch("navigation", "navigation", "setLightLevel", "mutation", input),
110616
+ getFeatures: (input) => dispatch("navigation", "navigation", "getFeatures", "query", input),
110617
+ getStatus: (input) => dispatch("navigation", "navigation", "getStatus", "query", input)
110618
+ },
110314
110619
  networkLink: { getStatus: (input) => dispatch("network-link", "networkLink", "getStatus", "query", input) },
110315
110620
  notificationRules: {
110316
110621
  listRules: (input) => dispatch("notification-rules", "notificationRules", "listRules", "query", input),
@@ -110758,6 +111063,8 @@ var require_sleep_TVipGseU = __commonJS({
110758
111063
  "motion-trigger",
110759
111064
  "motion-zones",
110760
111065
  "native-object-detection",
111066
+ "navigation",
111067
+ "network-link",
110761
111068
  "notifier",
110762
111069
  "numeric-sensor",
110763
111070
  "osd",
@@ -111374,7 +111681,7 @@ var require_addon = __commonJS({
111374
111681
  "use strict";
111375
111682
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
111376
111683
  var require_event_category = require_event_category_b8kBSOTT();
111377
- var require_sleep = require_sleep_TVipGseU();
111684
+ var require_sleep = require_sleep_QEBby1J6();
111378
111685
  var require_err_msg = require_err_msg_COpsHMw2();
111379
111686
  var CAP_INPUT_DEFAULTS = Object.freeze({
111380
111687
  "addons": { "getLogs": { "limit": 100 } },
@@ -130334,7 +130641,7 @@ var require_dist3 = __commonJS({
130334
130641
  "use strict";
130335
130642
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
130336
130643
  var require_chunk = require_chunk_Cek0wNdY();
130337
- var require_dist10 = require_dist_B0Cf6q_P();
130644
+ var require_dist10 = require_dist_Qnc3kuba();
130338
130645
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
130339
130646
  require_alerts();
130340
130647
  var require_formatter = require_formatter_DqAKDlvN();
@@ -211451,7 +211758,7 @@ var require_dist4 = __commonJS({
211451
211758
  "use strict";
211452
211759
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
211453
211760
  var require_event_category = require_event_category_b8kBSOTT();
211454
- var require_sleep = require_sleep_TVipGseU();
211761
+ var require_sleep = require_sleep_QEBby1J6();
211455
211762
  var require_canonical_hash = require_canonical_hash_DNV8S5ET();
211456
211763
  var require_enums2 = require_enums();
211457
211764
  var require_err_msg = require_err_msg_COpsHMw2();
@@ -236175,6 +236482,297 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
236175
236482
  */
236176
236483
  durability: "session"
236177
236484
  };
236485
+ var NavigationMoveCommandSchema = zod.z.object({
236486
+ pan: zod.z.number().min(-1).max(1).optional(),
236487
+ tilt: zod.z.number().min(-1).max(1).optional(),
236488
+ speed: zod.z.number().min(0).max(1).optional()
236489
+ });
236490
+ var NavigationActionIdSchema = zod.z.enum([
236491
+ "goHome",
236492
+ "locate",
236493
+ "spotClean",
236494
+ "findPet",
236495
+ "personFollow",
236496
+ "stop",
236497
+ "startClean",
236498
+ "pauseClean",
236499
+ "dockWash",
236500
+ "autoEmpty",
236501
+ "flashOn",
236502
+ "flashOff"
236503
+ ]);
236504
+ var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
236505
+ var NavigationActionEntrySchema = zod.z.object({
236506
+ id: zod.z.string(),
236507
+ kind: NavigationEntryKindSchema,
236508
+ label: zod.z.string(),
236509
+ icon: zod.z.string(),
236510
+ /** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
236511
+ soundId: zod.z.number().int().optional(),
236512
+ /** Per-device feature flag — render this entry only when true. */
236513
+ enabled: zod.z.boolean()
236514
+ });
236515
+ var NAVIGATION_ACTION_CATALOG = [
236516
+ {
236517
+ id: "startClean",
236518
+ kind: "action",
236519
+ label: "Start cleaning",
236520
+ icon: "play",
236521
+ enabled: true
236522
+ },
236523
+ {
236524
+ id: "pauseClean",
236525
+ kind: "action",
236526
+ label: "Pause cleaning",
236527
+ icon: "pause",
236528
+ enabled: true
236529
+ },
236530
+ {
236531
+ id: "stop",
236532
+ kind: "action",
236533
+ label: "Stop",
236534
+ icon: "hand",
236535
+ enabled: true
236536
+ },
236537
+ {
236538
+ id: "goHome",
236539
+ kind: "action",
236540
+ label: "Return to dock",
236541
+ icon: "home",
236542
+ enabled: true
236543
+ },
236544
+ {
236545
+ id: "locate",
236546
+ kind: "action",
236547
+ label: "Locate",
236548
+ icon: "bell",
236549
+ enabled: true
236550
+ },
236551
+ {
236552
+ id: "spotClean",
236553
+ kind: "action",
236554
+ label: "Spot clean here",
236555
+ icon: "crosshair",
236556
+ enabled: true
236557
+ },
236558
+ {
236559
+ id: "findPet",
236560
+ kind: "action",
236561
+ label: "Find pet",
236562
+ icon: "paw-print",
236563
+ enabled: true
236564
+ },
236565
+ {
236566
+ id: "personFollow",
236567
+ kind: "action",
236568
+ label: "Follow me",
236569
+ icon: "footprints",
236570
+ enabled: true
236571
+ },
236572
+ {
236573
+ id: "dockWash",
236574
+ kind: "action",
236575
+ label: "Wash mop",
236576
+ icon: "droplets",
236577
+ enabled: true
236578
+ },
236579
+ {
236580
+ id: "autoEmpty",
236581
+ kind: "action",
236582
+ label: "Empty dustbin",
236583
+ icon: "trash-2",
236584
+ enabled: true
236585
+ },
236586
+ {
236587
+ id: "flashOn",
236588
+ kind: "action",
236589
+ label: "Flash on",
236590
+ icon: "flashlight",
236591
+ enabled: true
236592
+ },
236593
+ {
236594
+ id: "flashOff",
236595
+ kind: "action",
236596
+ label: "Flash off",
236597
+ icon: "flashlight-off",
236598
+ enabled: true
236599
+ },
236600
+ {
236601
+ id: "sound:meow",
236602
+ kind: "sound",
236603
+ label: "Meow",
236604
+ icon: "cat",
236605
+ soundId: 684,
236606
+ enabled: true
236607
+ },
236608
+ {
236609
+ id: "sound:bark",
236610
+ kind: "sound",
236611
+ label: "Woof",
236612
+ icon: "dog",
236613
+ soundId: 685,
236614
+ enabled: true
236615
+ },
236616
+ {
236617
+ id: "sound:footsteps",
236618
+ kind: "sound",
236619
+ label: "Footsteps",
236620
+ icon: "footprints",
236621
+ soundId: 686,
236622
+ enabled: true
236623
+ },
236624
+ {
236625
+ id: "sound:purring",
236626
+ kind: "sound",
236627
+ label: "Purring",
236628
+ icon: "cat",
236629
+ soundId: 687,
236630
+ enabled: true
236631
+ },
236632
+ {
236633
+ id: "sound:tickTock",
236634
+ kind: "sound",
236635
+ label: "Tick-tock",
236636
+ icon: "clock",
236637
+ soundId: 688,
236638
+ enabled: true
236639
+ }
236640
+ ];
236641
+ var NavigationPointSchema = zod.z.object({
236642
+ x: zod.z.number(),
236643
+ y: zod.z.number()
236644
+ });
236645
+ var NavigationFeaturesSchema = zod.z.object({
236646
+ move: zod.z.boolean(),
236647
+ stop: zod.z.boolean(),
236648
+ goToPoint: zod.z.boolean(),
236649
+ runAction: zod.z.boolean(),
236650
+ playSound: zod.z.boolean(),
236651
+ light: zod.z.boolean(),
236652
+ lightMode: zod.z.boolean()
236653
+ });
236654
+ var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
236655
+ var NAVIGATION_LIGHT_LEVEL_MIN = 40;
236656
+ var NAVIGATION_LIGHT_LEVEL_MAX = 100;
236657
+ var NavigationModeSchema = zod.z.enum([
236658
+ "idle",
236659
+ "cleaning",
236660
+ "spot",
236661
+ "following",
236662
+ "goto",
236663
+ "returning",
236664
+ "paused",
236665
+ "unknown"
236666
+ ]);
236667
+ var NavigationStatusSchema = zod.z.object({
236668
+ mode: NavigationModeSchema,
236669
+ following: zod.z.boolean(),
236670
+ flash: zod.z.boolean(),
236671
+ lightMode: NavigationLightModeSchema,
236672
+ lightLevel: zod.z.number().min(40).max(100),
236673
+ /** Ms epoch when the slice was last updated. */
236674
+ lastChangedAt: zod.z.number()
236675
+ });
236676
+ var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
236677
+ var navigationCapability = {
236678
+ name: "navigation",
236679
+ scope: "device",
236680
+ deviceNative: true,
236681
+ mode: "singleton",
236682
+ deviceTypes: [require_sleep.DeviceType.Camera],
236683
+ deviceConfig: { ui: {
236684
+ kind: "widget",
236685
+ widgetId: "host/navigation-panel",
236686
+ tab: "navigation",
236687
+ topTab: true,
236688
+ label: "Navigation",
236689
+ order: 0
236690
+ } },
236691
+ methods: {
236692
+ /**
236693
+ * Momentary drive nudge (the robot moves). `protected` — mirrors
236694
+ * `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
236695
+ * path) works for any authenticated user, not admin-only. The UI sends
236696
+ * these at ~1 Hz while a control is held; the provider forwards each one to
236697
+ * a single drive write WITHOUT debouncing.
236698
+ */
236699
+ move: require_sleep.method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236700
+ /** Halt all motion immediately (zero drive vector). */
236701
+ stop: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236702
+ /** Send the robot to a point on its live map. */
236703
+ goToPoint: require_sleep.method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236704
+ /**
236705
+ * Enumerate the discrete controls THIS device supports (data-driven UI +
236706
+ * PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
236707
+ */
236708
+ listActions: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
236709
+ /**
236710
+ * Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
236711
+ * unsupported action ids are rejected by the provider.
236712
+ */
236713
+ runAction: require_sleep.method(zod.z.object({
236714
+ deviceId: zod.z.number(),
236715
+ actionId: NavigationActionIdSchema
236716
+ }), zod.z.void(), { kind: "mutation" }),
236717
+ /** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
236718
+ playSound: require_sleep.method(zod.z.object({
236719
+ deviceId: zod.z.number(),
236720
+ soundId: zod.z.number().int()
236721
+ }), zod.z.void(), { kind: "mutation" }),
236722
+ /**
236723
+ * Turn the on-camera fill light on / off (the `OpenFullLight` control —
236724
+ * works anytime, no active stream required).
236725
+ */
236726
+ setLightOn: require_sleep.method(zod.z.object({
236727
+ deviceId: zod.z.number(),
236728
+ on: zod.z.boolean()
236729
+ }), zod.z.void(), { kind: "mutation" }),
236730
+ /**
236731
+ * Set the fill-light mode (auto vs manual). `manual` optionally carries the
236732
+ * initial `level`. The auto/manual + level control is a CAMERA-service
236733
+ * action that generally needs an active camera stream/monitor session — the
236734
+ * UI shows the manual level slider ONLY when `mode === 'manual'`.
236735
+ */
236736
+ setLightMode: require_sleep.method(zod.z.object({
236737
+ deviceId: zod.z.number(),
236738
+ mode: NavigationLightModeSchema,
236739
+ level: zod.z.number().min(40).max(100).optional()
236740
+ }), zod.z.void(), { kind: "mutation" }),
236741
+ /** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
236742
+ setLightLevel: require_sleep.method(zod.z.object({
236743
+ deviceId: zod.z.number(),
236744
+ level: zod.z.number().min(40).max(100)
236745
+ }), zod.z.void(), { kind: "mutation" }),
236746
+ /**
236747
+ * Per-device FEATURE-FLAG report for the general primitives — drives which
236748
+ * controls the UI shows (the per-entry flags for the dictionary come back on
236749
+ * `listActions`).
236750
+ */
236751
+ getFeatures: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
236752
+ },
236753
+ events: { onStatusChanged: { data: zod.z.object({
236754
+ deviceId: zod.z.number(),
236755
+ status: NavigationStatusSchema
236756
+ }) } },
236757
+ status: {
236758
+ schema: NavigationStatusSchema,
236759
+ kind: "push"
236760
+ },
236761
+ /**
236762
+ * Runtime-state slice mirrored by the kernel. The navigation panel watches it
236763
+ * for live mode / follow / flash changes.
236764
+ */
236765
+ runtimeState: NavigationRuntimeStateSchema,
236766
+ /**
236767
+ * Runtime-state durability: **session** — like `vacuum-control`, a restored
236768
+ * `mode: cleaning` / `following: true` is a robot that is not actually doing
236769
+ * that. The live handle re-publishes on connect.
236770
+ *
236771
+ * See `RuntimeStateDurability`. Enforced by
236772
+ * `scripts/check-runtime-state-durability.ts`.
236773
+ */
236774
+ durability: "session"
236775
+ };
236178
236776
  var rebootCapability = {
236179
236777
  name: "reboot",
236180
236778
  scope: "device",
@@ -239546,6 +240144,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
239546
240144
  motionTrigger: motionTriggerCapability,
239547
240145
  motionZones: motionZonesCapability,
239548
240146
  nativeObjectDetection: nativeObjectDetectionCapability,
240147
+ navigation: navigationCapability,
239549
240148
  networkLink: networkLinkCapability,
239550
240149
  notifier: notifierCapability,
239551
240150
  numericSensor: numericSensorCapability,
@@ -242026,6 +242625,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242026
242625
  "motion-zones",
242027
242626
  "mqtt-broker",
242028
242627
  "native-object-detection",
242628
+ "navigation",
242029
242629
  "network-link",
242030
242630
  "notifier",
242031
242631
  "numeric-sensor",
@@ -242143,6 +242743,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242143
242743
  motionZones: "motion-zones",
242144
242744
  mqttBroker: "mqtt-broker",
242145
242745
  nativeObjectDetection: "native-object-detection",
242746
+ navigation: "navigation",
242146
242747
  networkAccess: "network-access",
242147
242748
  networkLink: "network-link",
242148
242749
  networkQuality: "network-quality",
@@ -242565,6 +243166,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242565
243166
  key: "nativeObjectDetection",
242566
243167
  name: "native-object-detection"
242567
243168
  },
243169
+ {
243170
+ key: "navigation",
243171
+ name: "navigation"
243172
+ },
242568
243173
  {
242569
243174
  key: "networkAccess",
242570
243175
  name: "network-access"
@@ -242912,6 +243517,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242912
243517
  motionZonesCapability,
242913
243518
  mqttBrokerCapability,
242914
243519
  nativeObjectDetectionCapability,
243520
+ navigationCapability,
242915
243521
  networkAccessCapability,
242916
243522
  networkLinkCapability,
242917
243523
  networkQualityCapability,
@@ -245714,6 +246320,66 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
245714
246320
  addonId: null,
245715
246321
  access: "create"
245716
246322
  },
246323
+ "navigation.getFeatures": {
246324
+ capName: "navigation",
246325
+ capScope: "device",
246326
+ addonId: null,
246327
+ access: "view"
246328
+ },
246329
+ "navigation.goToPoint": {
246330
+ capName: "navigation",
246331
+ capScope: "device",
246332
+ addonId: null,
246333
+ access: "create"
246334
+ },
246335
+ "navigation.listActions": {
246336
+ capName: "navigation",
246337
+ capScope: "device",
246338
+ addonId: null,
246339
+ access: "view"
246340
+ },
246341
+ "navigation.move": {
246342
+ capName: "navigation",
246343
+ capScope: "device",
246344
+ addonId: null,
246345
+ access: "create"
246346
+ },
246347
+ "navigation.playSound": {
246348
+ capName: "navigation",
246349
+ capScope: "device",
246350
+ addonId: null,
246351
+ access: "create"
246352
+ },
246353
+ "navigation.runAction": {
246354
+ capName: "navigation",
246355
+ capScope: "device",
246356
+ addonId: null,
246357
+ access: "create"
246358
+ },
246359
+ "navigation.setLightLevel": {
246360
+ capName: "navigation",
246361
+ capScope: "device",
246362
+ addonId: null,
246363
+ access: "create"
246364
+ },
246365
+ "navigation.setLightMode": {
246366
+ capName: "navigation",
246367
+ capScope: "device",
246368
+ addonId: null,
246369
+ access: "create"
246370
+ },
246371
+ "navigation.setLightOn": {
246372
+ capName: "navigation",
246373
+ capScope: "device",
246374
+ addonId: null,
246375
+ access: "create"
246376
+ },
246377
+ "navigation.stop": {
246378
+ capName: "navigation",
246379
+ capScope: "device",
246380
+ addonId: null,
246381
+ access: "create"
246382
+ },
245717
246383
  "networkAccess.getEndpoint": {
245718
246384
  capName: "network-access",
245719
246385
  capScope: "system",
@@ -249106,6 +249772,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249106
249772
  "motion-zones",
249107
249773
  "mqtt-broker",
249108
249774
  "native-object-detection",
249775
+ "navigation",
249109
249776
  "network-access",
249110
249777
  "network-quality",
249111
249778
  "nodes",
@@ -249193,6 +249860,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249193
249860
  "motion-trigger",
249194
249861
  "motion-zones",
249195
249862
  "native-object-detection",
249863
+ "navigation",
249196
249864
  "notifier",
249197
249865
  "osd",
249198
249866
  "pet-feeder",
@@ -250067,6 +250735,56 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
250067
250735
  form: "single",
250068
250736
  optional: false
250069
250737
  }],
250738
+ "navigation.getFeatures": [{
250739
+ name: "deviceId",
250740
+ form: "single",
250741
+ optional: false
250742
+ }],
250743
+ "navigation.goToPoint": [{
250744
+ name: "deviceId",
250745
+ form: "single",
250746
+ optional: false
250747
+ }],
250748
+ "navigation.listActions": [{
250749
+ name: "deviceId",
250750
+ form: "single",
250751
+ optional: false
250752
+ }],
250753
+ "navigation.move": [{
250754
+ name: "deviceId",
250755
+ form: "single",
250756
+ optional: false
250757
+ }],
250758
+ "navigation.playSound": [{
250759
+ name: "deviceId",
250760
+ form: "single",
250761
+ optional: false
250762
+ }],
250763
+ "navigation.runAction": [{
250764
+ name: "deviceId",
250765
+ form: "single",
250766
+ optional: false
250767
+ }],
250768
+ "navigation.setLightLevel": [{
250769
+ name: "deviceId",
250770
+ form: "single",
250771
+ optional: false
250772
+ }],
250773
+ "navigation.setLightMode": [{
250774
+ name: "deviceId",
250775
+ form: "single",
250776
+ optional: false
250777
+ }],
250778
+ "navigation.setLightOn": [{
250779
+ name: "deviceId",
250780
+ form: "single",
250781
+ optional: false
250782
+ }],
250783
+ "navigation.stop": [{
250784
+ name: "deviceId",
250785
+ form: "single",
250786
+ optional: false
250787
+ }],
250070
250788
  "networkQuality.getDeviceStats": [{
250071
250789
  name: "deviceId",
250072
250790
  form: "single",
@@ -251414,6 +252132,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
251414
252132
  durability: "restored",
251415
252133
  volatileFields: ["lastFetchedAt"]
251416
252134
  },
252135
+ "navigation": {
252136
+ durability: "session",
252137
+ volatileFields: []
252138
+ },
251417
252139
  "network-link": {
251418
252140
  durability: "restored",
251419
252141
  volatileFields: ["lastUpdated"]
@@ -255475,6 +256197,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
255475
256197
  exports.NATIVE_LEASE_SECTION_ID = NATIVE_LEASE_SECTION_ID;
255476
256198
  exports.NATIVE_LEASE_TILE_BUDGET_FIELD = NATIVE_LEASE_TILE_BUDGET_FIELD;
255477
256199
  exports.NATIVE_LEASE_TILE_BUDGET_KEY = NATIVE_LEASE_TILE_BUDGET_KEY;
256200
+ exports.NAVIGATION_ACTION_CATALOG = NAVIGATION_ACTION_CATALOG;
256201
+ exports.NAVIGATION_LIGHT_LEVEL_MAX = NAVIGATION_LIGHT_LEVEL_MAX;
256202
+ exports.NAVIGATION_LIGHT_LEVEL_MIN = NAVIGATION_LIGHT_LEVEL_MIN;
255478
256203
  exports.NC_ALARM_SYSTEM_EVENT_KINDS = NC_ALARM_SYSTEM_EVENT_KINDS;
255479
256204
  exports.NC_AUDIO_CONFIRM_HITS_DEFAULT = NC_AUDIO_CONFIRM_HITS_DEFAULT;
255480
256205
  exports.NC_AUDIO_CONFIRM_HITS_MAX = NC_AUDIO_CONFIRM_HITS_MAX;
@@ -255523,6 +256248,16 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
255523
256248
  exports.NativeObjectClassEnum = NativeObjectClassEnum;
255524
256249
  exports.NativeObjectDetectionRuntimeStateSchema = NativeObjectDetectionRuntimeStateSchema;
255525
256250
  exports.NativeObjectDetectionStatusSchema = NativeObjectDetectionStatusSchema;
256251
+ exports.NavigationActionEntrySchema = NavigationActionEntrySchema;
256252
+ exports.NavigationActionIdSchema = NavigationActionIdSchema;
256253
+ exports.NavigationEntryKindSchema = NavigationEntryKindSchema;
256254
+ exports.NavigationFeaturesSchema = NavigationFeaturesSchema;
256255
+ exports.NavigationLightModeSchema = NavigationLightModeSchema;
256256
+ exports.NavigationModeSchema = NavigationModeSchema;
256257
+ exports.NavigationMoveCommandSchema = NavigationMoveCommandSchema;
256258
+ exports.NavigationPointSchema = NavigationPointSchema;
256259
+ exports.NavigationRuntimeStateSchema = NavigationRuntimeStateSchema;
256260
+ exports.NavigationStatusSchema = NavigationStatusSchema;
255526
256261
  exports.NcAlarmConfigSchema = NcAlarmConfigSchema;
255527
256262
  exports.NcAlarmModeCoverageSchema = NcAlarmModeCoverageSchema;
255528
256263
  exports.NcAlarmSettingsPatchSchema = NcAlarmSettingsPatchSchema;
@@ -256231,6 +256966,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
256231
256966
  exports.motionZonesCapability = motionZonesCapability;
256232
256967
  exports.mqttBrokerCapability = mqttBrokerCapability;
256233
256968
  exports.nativeObjectDetectionCapability = nativeObjectDetectionCapability;
256969
+ exports.navigationCapability = navigationCapability;
256234
256970
  exports.networkAccessCapability = networkAccessCapability;
256235
256971
  exports.networkLinkCapability = networkLinkCapability;
256236
256972
  exports.networkQualityCapability = networkQualityCapability;