camstack 1.2.102 → 1.2.103

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-C7g13BfN.js
23637
+ var require_dist_C7g13BfN = __commonJS({
23638
+ "../system/dist/dist-C7g13BfN.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -47493,6 +47493,169 @@ var require_dist_B0Cf6q_P = __commonJS({
47493
47493
  */
47494
47494
  durability: "session"
47495
47495
  };
47496
+ var NavigationMoveCommandSchema = zod.z.object({
47497
+ pan: zod.z.number().min(-1).max(1).optional(),
47498
+ tilt: zod.z.number().min(-1).max(1).optional(),
47499
+ speed: zod.z.number().min(0).max(1).optional()
47500
+ });
47501
+ var NavigationActionIdSchema = zod.z.enum([
47502
+ "goHome",
47503
+ "locate",
47504
+ "spotClean",
47505
+ "findPet",
47506
+ "personFollow",
47507
+ "stop",
47508
+ "startClean",
47509
+ "pauseClean",
47510
+ "dockWash",
47511
+ "autoEmpty",
47512
+ "flashOn",
47513
+ "flashOff"
47514
+ ]);
47515
+ var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
47516
+ var NavigationActionEntrySchema = zod.z.object({
47517
+ id: zod.z.string(),
47518
+ kind: NavigationEntryKindSchema,
47519
+ label: zod.z.string(),
47520
+ icon: zod.z.string(),
47521
+ /** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
47522
+ soundId: zod.z.number().int().optional(),
47523
+ /** Per-device feature flag — render this entry only when true. */
47524
+ enabled: zod.z.boolean()
47525
+ });
47526
+ var NavigationPointSchema = zod.z.object({
47527
+ x: zod.z.number(),
47528
+ y: zod.z.number()
47529
+ });
47530
+ var NavigationFeaturesSchema = zod.z.object({
47531
+ move: zod.z.boolean(),
47532
+ stop: zod.z.boolean(),
47533
+ goToPoint: zod.z.boolean(),
47534
+ runAction: zod.z.boolean(),
47535
+ playSound: zod.z.boolean(),
47536
+ light: zod.z.boolean(),
47537
+ lightMode: zod.z.boolean()
47538
+ });
47539
+ var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
47540
+ var NavigationModeSchema = zod.z.enum([
47541
+ "idle",
47542
+ "cleaning",
47543
+ "spot",
47544
+ "following",
47545
+ "goto",
47546
+ "returning",
47547
+ "paused",
47548
+ "unknown"
47549
+ ]);
47550
+ var NavigationStatusSchema = zod.z.object({
47551
+ mode: NavigationModeSchema,
47552
+ following: zod.z.boolean(),
47553
+ flash: zod.z.boolean(),
47554
+ lightMode: NavigationLightModeSchema,
47555
+ lightLevel: zod.z.number().min(40).max(100),
47556
+ /** Ms epoch when the slice was last updated. */
47557
+ lastChangedAt: zod.z.number()
47558
+ });
47559
+ var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
47560
+ var navigationCapability = {
47561
+ name: "navigation",
47562
+ scope: "device",
47563
+ deviceNative: true,
47564
+ mode: "singleton",
47565
+ deviceTypes: [DeviceType.Camera],
47566
+ deviceConfig: { ui: {
47567
+ kind: "widget",
47568
+ widgetId: "host/navigation-panel",
47569
+ tab: "navigation",
47570
+ topTab: true,
47571
+ label: "Navigation",
47572
+ order: 0
47573
+ } },
47574
+ methods: {
47575
+ /**
47576
+ * Momentary drive nudge (the robot moves). `protected` — mirrors
47577
+ * `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
47578
+ * path) works for any authenticated user, not admin-only. The UI sends
47579
+ * these at ~1 Hz while a control is held; the provider forwards each one to
47580
+ * a single drive write WITHOUT debouncing.
47581
+ */
47582
+ move: method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47583
+ /** Halt all motion immediately (zero drive vector). */
47584
+ stop: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47585
+ /** Send the robot to a point on its live map. */
47586
+ goToPoint: method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
47587
+ /**
47588
+ * Enumerate the discrete controls THIS device supports (data-driven UI +
47589
+ * PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
47590
+ */
47591
+ listActions: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
47592
+ /**
47593
+ * Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
47594
+ * unsupported action ids are rejected by the provider.
47595
+ */
47596
+ runAction: method(zod.z.object({
47597
+ deviceId: zod.z.number(),
47598
+ actionId: NavigationActionIdSchema
47599
+ }), zod.z.void(), { kind: "mutation" }),
47600
+ /** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
47601
+ playSound: method(zod.z.object({
47602
+ deviceId: zod.z.number(),
47603
+ soundId: zod.z.number().int()
47604
+ }), zod.z.void(), { kind: "mutation" }),
47605
+ /**
47606
+ * Turn the on-camera fill light on / off (the `OpenFullLight` control —
47607
+ * works anytime, no active stream required).
47608
+ */
47609
+ setLightOn: method(zod.z.object({
47610
+ deviceId: zod.z.number(),
47611
+ on: zod.z.boolean()
47612
+ }), zod.z.void(), { kind: "mutation" }),
47613
+ /**
47614
+ * Set the fill-light mode (auto vs manual). `manual` optionally carries the
47615
+ * initial `level`. The auto/manual + level control is a CAMERA-service
47616
+ * action that generally needs an active camera stream/monitor session — the
47617
+ * UI shows the manual level slider ONLY when `mode === 'manual'`.
47618
+ */
47619
+ setLightMode: method(zod.z.object({
47620
+ deviceId: zod.z.number(),
47621
+ mode: NavigationLightModeSchema,
47622
+ level: zod.z.number().min(40).max(100).optional()
47623
+ }), zod.z.void(), { kind: "mutation" }),
47624
+ /** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
47625
+ setLightLevel: method(zod.z.object({
47626
+ deviceId: zod.z.number(),
47627
+ level: zod.z.number().min(40).max(100)
47628
+ }), zod.z.void(), { kind: "mutation" }),
47629
+ /**
47630
+ * Per-device FEATURE-FLAG report for the general primitives — drives which
47631
+ * controls the UI shows (the per-entry flags for the dictionary come back on
47632
+ * `listActions`).
47633
+ */
47634
+ getFeatures: method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
47635
+ },
47636
+ events: { onStatusChanged: { data: zod.z.object({
47637
+ deviceId: zod.z.number(),
47638
+ status: NavigationStatusSchema
47639
+ }) } },
47640
+ status: {
47641
+ schema: NavigationStatusSchema,
47642
+ kind: "push"
47643
+ },
47644
+ /**
47645
+ * Runtime-state slice mirrored by the kernel. The navigation panel watches it
47646
+ * for live mode / follow / flash changes.
47647
+ */
47648
+ runtimeState: NavigationRuntimeStateSchema,
47649
+ /**
47650
+ * Runtime-state durability: **session** — like `vacuum-control`, a restored
47651
+ * `mode: cleaning` / `following: true` is a robot that is not actually doing
47652
+ * that. The live handle re-publishes on connect.
47653
+ *
47654
+ * See `RuntimeStateDurability`. Enforced by
47655
+ * `scripts/check-runtime-state-durability.ts`.
47656
+ */
47657
+ durability: "session"
47658
+ };
47496
47659
  var rebootCapability = {
47497
47660
  name: "reboot",
47498
47661
  scope: "device",
@@ -50813,6 +50976,7 @@ var require_dist_B0Cf6q_P = __commonJS({
50813
50976
  "motion-zones",
50814
50977
  "mqtt-broker",
50815
50978
  "native-object-detection",
50979
+ "navigation",
50816
50980
  "network-link",
50817
50981
  "notifier",
50818
50982
  "numeric-sensor",
@@ -50930,6 +51094,7 @@ var require_dist_B0Cf6q_P = __commonJS({
50930
51094
  motionZonesCapability,
50931
51095
  mqttBrokerCapability,
50932
51096
  nativeObjectDetectionCapability,
51097
+ navigationCapability,
50933
51098
  networkAccessCapability,
50934
51099
  networkLinkCapability,
50935
51100
  networkQualityCapability,
@@ -53732,6 +53897,66 @@ var require_dist_B0Cf6q_P = __commonJS({
53732
53897
  addonId: null,
53733
53898
  access: "create"
53734
53899
  },
53900
+ "navigation.getFeatures": {
53901
+ capName: "navigation",
53902
+ capScope: "device",
53903
+ addonId: null,
53904
+ access: "view"
53905
+ },
53906
+ "navigation.goToPoint": {
53907
+ capName: "navigation",
53908
+ capScope: "device",
53909
+ addonId: null,
53910
+ access: "create"
53911
+ },
53912
+ "navigation.listActions": {
53913
+ capName: "navigation",
53914
+ capScope: "device",
53915
+ addonId: null,
53916
+ access: "view"
53917
+ },
53918
+ "navigation.move": {
53919
+ capName: "navigation",
53920
+ capScope: "device",
53921
+ addonId: null,
53922
+ access: "create"
53923
+ },
53924
+ "navigation.playSound": {
53925
+ capName: "navigation",
53926
+ capScope: "device",
53927
+ addonId: null,
53928
+ access: "create"
53929
+ },
53930
+ "navigation.runAction": {
53931
+ capName: "navigation",
53932
+ capScope: "device",
53933
+ addonId: null,
53934
+ access: "create"
53935
+ },
53936
+ "navigation.setLightLevel": {
53937
+ capName: "navigation",
53938
+ capScope: "device",
53939
+ addonId: null,
53940
+ access: "create"
53941
+ },
53942
+ "navigation.setLightMode": {
53943
+ capName: "navigation",
53944
+ capScope: "device",
53945
+ addonId: null,
53946
+ access: "create"
53947
+ },
53948
+ "navigation.setLightOn": {
53949
+ capName: "navigation",
53950
+ capScope: "device",
53951
+ addonId: null,
53952
+ access: "create"
53953
+ },
53954
+ "navigation.stop": {
53955
+ capName: "navigation",
53956
+ capScope: "device",
53957
+ addonId: null,
53958
+ access: "create"
53959
+ },
53735
53960
  "networkAccess.getEndpoint": {
53736
53961
  capName: "network-access",
53737
53962
  capScope: "system",
@@ -57827,6 +58052,56 @@ var require_dist_B0Cf6q_P = __commonJS({
57827
58052
  form: "single",
57828
58053
  optional: false
57829
58054
  }],
58055
+ "navigation.getFeatures": [{
58056
+ name: "deviceId",
58057
+ form: "single",
58058
+ optional: false
58059
+ }],
58060
+ "navigation.goToPoint": [{
58061
+ name: "deviceId",
58062
+ form: "single",
58063
+ optional: false
58064
+ }],
58065
+ "navigation.listActions": [{
58066
+ name: "deviceId",
58067
+ form: "single",
58068
+ optional: false
58069
+ }],
58070
+ "navigation.move": [{
58071
+ name: "deviceId",
58072
+ form: "single",
58073
+ optional: false
58074
+ }],
58075
+ "navigation.playSound": [{
58076
+ name: "deviceId",
58077
+ form: "single",
58078
+ optional: false
58079
+ }],
58080
+ "navigation.runAction": [{
58081
+ name: "deviceId",
58082
+ form: "single",
58083
+ optional: false
58084
+ }],
58085
+ "navigation.setLightLevel": [{
58086
+ name: "deviceId",
58087
+ form: "single",
58088
+ optional: false
58089
+ }],
58090
+ "navigation.setLightMode": [{
58091
+ name: "deviceId",
58092
+ form: "single",
58093
+ optional: false
58094
+ }],
58095
+ "navigation.setLightOn": [{
58096
+ name: "deviceId",
58097
+ form: "single",
58098
+ optional: false
58099
+ }],
58100
+ "navigation.stop": [{
58101
+ name: "deviceId",
58102
+ form: "single",
58103
+ optional: false
58104
+ }],
57830
58105
  "networkQuality.getDeviceStats": [{
57831
58106
  name: "deviceId",
57832
58107
  form: "single",
@@ -59024,6 +59299,10 @@ var require_dist_B0Cf6q_P = __commonJS({
59024
59299
  durability: "restored",
59025
59300
  volatileFields: ["lastFetchedAt"]
59026
59301
  },
59302
+ "navigation": {
59303
+ durability: "session",
59304
+ volatileFields: []
59305
+ },
59027
59306
  "network-link": {
59028
59307
  durability: "restored",
59029
59308
  volatileFields: ["lastUpdated"]
@@ -60278,7 +60557,7 @@ var require_alerts_addon = __commonJS({
60278
60557
  [Symbol.toStringTag]: { value: "Module" }
60279
60558
  });
60280
60559
  require_chunk_Cek0wNdY();
60281
- var require_dist10 = require_dist_B0Cf6q_P();
60560
+ var require_dist10 = require_dist_C7g13BfN();
60282
60561
  function selectExpired(alerts, cutoffMs) {
60283
60562
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
60284
60563
  }
@@ -61097,7 +61376,7 @@ var require_console_logging = __commonJS({
61097
61376
  [Symbol.toStringTag]: { value: "Module" }
61098
61377
  });
61099
61378
  require_chunk_Cek0wNdY();
61100
- var require_dist10 = require_dist_B0Cf6q_P();
61379
+ var require_dist10 = require_dist_C7g13BfN();
61101
61380
  var require_formatter = require_formatter_DqAKDlvN();
61102
61381
  var LEVEL_RANK = {
61103
61382
  debug: 0,
@@ -61191,7 +61470,7 @@ var require_core_blocks_addon = __commonJS({
61191
61470
  "use strict";
61192
61471
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
61193
61472
  var require_chunk = require_chunk_Cek0wNdY();
61194
- var require_dist10 = require_dist_B0Cf6q_P();
61473
+ var require_dist10 = require_dist_C7g13BfN();
61195
61474
  var node_crypto = __require("crypto");
61196
61475
  var node_fs_promises = __require("fs/promises");
61197
61476
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -62088,11 +62367,11 @@ var require_core_blocks = __commonJS({
62088
62367
  }
62089
62368
  });
62090
62369
 
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) {
62370
+ // ../system/dist/retired-settings-keys-BT_YDV75.js
62371
+ var require_retired_settings_keys_BT_YDV75 = __commonJS({
62372
+ "../system/dist/retired-settings-keys-BT_YDV75.js"(exports) {
62094
62373
  "use strict";
62095
- var require_dist10 = require_dist_B0Cf6q_P();
62374
+ var require_dist10 = require_dist_C7g13BfN();
62096
62375
  function settingsStoreIsAuthoritativeHere(env) {
62097
62376
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
62098
62377
  return raw === "" || raw === "hub";
@@ -64306,8 +64585,8 @@ var require_device_manager_addon = __commonJS({
64306
64585
  [Symbol.toStringTag]: { value: "Module" }
64307
64586
  });
64308
64587
  require_chunk_Cek0wNdY();
64309
- var require_dist10 = require_dist_B0Cf6q_P();
64310
- var require_retired_settings_keys = require_retired_settings_keys_mP95OCUi();
64588
+ var require_dist10 = require_dist_C7g13BfN();
64589
+ var require_retired_settings_keys = require_retired_settings_keys_BT_YDV75();
64311
64590
  var node_crypto = __require("crypto");
64312
64591
  var _camstack_types_node = require_node();
64313
64592
  var JOB_HISTORY = 20;
@@ -69822,7 +70101,7 @@ var require_hub_forwarder = __commonJS({
69822
70101
  [Symbol.toStringTag]: { value: "Module" }
69823
70102
  });
69824
70103
  require_chunk_Cek0wNdY();
69825
- var require_dist10 = require_dist_B0Cf6q_P();
70104
+ var require_dist10 = require_dist_C7g13BfN();
69826
70105
  var require_formatter = require_formatter_DqAKDlvN();
69827
70106
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
69828
70107
  var HubForwarderDestination = class {
@@ -69959,7 +70238,7 @@ var require_liveness_monitor_addon = __commonJS({
69959
70238
  "use strict";
69960
70239
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
69961
70240
  require_chunk_Cek0wNdY();
69962
- var require_dist10 = require_dist_B0Cf6q_P();
70241
+ var require_dist10 = require_dist_C7g13BfN();
69963
70242
  var NO_DEVICES = "liveness:no-devices";
69964
70243
  var ALL_OFFLINE = "liveness:all-devices-offline";
69965
70244
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -70155,7 +70434,7 @@ var require_local_auth_addon = __commonJS({
70155
70434
  [Symbol.toStringTag]: { value: "Module" }
70156
70435
  });
70157
70436
  var require_chunk = require_chunk_Cek0wNdY();
70158
- var require_dist10 = require_dist_B0Cf6q_P();
70437
+ var require_dist10 = require_dist_C7g13BfN();
70159
70438
  var node_crypto = __require("crypto");
70160
70439
  node_crypto = require_chunk.__toESM(node_crypto);
70161
70440
  var crypto$1 = __require("crypto");
@@ -77968,7 +78247,7 @@ var require_loki_logging = __commonJS({
77968
78247
  [Symbol.toStringTag]: { value: "Module" }
77969
78248
  });
77970
78249
  require_chunk_Cek0wNdY();
77971
- var require_dist10 = require_dist_B0Cf6q_P();
78250
+ var require_dist10 = require_dist_C7g13BfN();
77972
78251
  function sanitizeLabelName(raw) {
77973
78252
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
77974
78253
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -78533,7 +78812,7 @@ var require_native_metrics_addon = __commonJS({
78533
78812
  [Symbol.toStringTag]: { value: "Module" }
78534
78813
  });
78535
78814
  var require_chunk = require_chunk_Cek0wNdY();
78536
- var require_dist10 = require_dist_B0Cf6q_P();
78815
+ var require_dist10 = require_dist_C7g13BfN();
78537
78816
  var node_fs_promises = __require("fs/promises");
78538
78817
  var node_child_process = __require("child_process");
78539
78818
  var node_util = __require("util");
@@ -81117,7 +81396,7 @@ var require_filesystem_storage_addon = __commonJS({
81117
81396
  [Symbol.toStringTag]: { value: "Module" }
81118
81397
  });
81119
81398
  var require_chunk = require_chunk_Cek0wNdY();
81120
- var require_dist10 = require_dist_B0Cf6q_P();
81399
+ var require_dist10 = require_dist_C7g13BfN();
81121
81400
  var node_crypto = __require("crypto");
81122
81401
  var node_fs_promises = __require("fs/promises");
81123
81402
  var node_path = __require("path");
@@ -82233,8 +82512,8 @@ var require_sqlite_settings_addon = __commonJS({
82233
82512
  [Symbol.toStringTag]: { value: "Module" }
82234
82513
  });
82235
82514
  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();
82515
+ var require_dist10 = require_dist_C7g13BfN();
82516
+ var require_retired_settings_keys = require_retired_settings_keys_BT_YDV75();
82238
82517
  var node_crypto = __require("crypto");
82239
82518
  var node_fs = __require("fs");
82240
82519
  var node_module = __require("module");
@@ -84724,7 +85003,7 @@ var require_storage_orchestrator_addon = __commonJS({
84724
85003
  [Symbol.toStringTag]: { value: "Module" }
84725
85004
  });
84726
85005
  var require_chunk = require_chunk_Cek0wNdY();
84727
- var require_dist10 = require_dist_B0Cf6q_P();
85006
+ var require_dist10 = require_dist_C7g13BfN();
84728
85007
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
84729
85008
  var zod = require_zod();
84730
85009
  var node_crypto = __require("crypto");
@@ -87675,7 +87954,7 @@ var require_system_config_addon = __commonJS({
87675
87954
  [Symbol.toStringTag]: { value: "Module" }
87676
87955
  });
87677
87956
  require_chunk_Cek0wNdY();
87678
- var require_dist10 = require_dist_B0Cf6q_P();
87957
+ var require_dist10 = require_dist_C7g13BfN();
87679
87958
  var SECTION_TITLES = {
87680
87959
  server: "Server",
87681
87960
  auth: "Authentication"
@@ -105736,7 +106015,7 @@ var require_winston_logging = __commonJS({
105736
106015
  [Symbol.toStringTag]: { value: "Module" }
105737
106016
  });
105738
106017
  var require_chunk = require_chunk_Cek0wNdY();
105739
- var require_dist10 = require_dist_B0Cf6q_P();
106018
+ var require_dist10 = require_dist_C7g13BfN();
105740
106019
  var require_formatter = require_formatter_DqAKDlvN();
105741
106020
  var node_path = __require("path");
105742
106021
  node_path = require_chunk.__toESM(node_path);
@@ -107680,9 +107959,9 @@ var require_event_category_b8kBSOTT = __commonJS({
107680
107959
  }
107681
107960
  });
107682
107961
 
107683
- // ../types/dist/sleep-TVipGseU.js
107684
- var require_sleep_TVipGseU = __commonJS({
107685
- "../types/dist/sleep-TVipGseU.js"(exports) {
107962
+ // ../types/dist/sleep-Dp0uukHR.js
107963
+ var require_sleep_Dp0uukHR = __commonJS({
107964
+ "../types/dist/sleep-Dp0uukHR.js"(exports) {
107686
107965
  "use strict";
107687
107966
  var require_event_category = require_event_category_b8kBSOTT();
107688
107967
  var zod = require_zod();
@@ -110077,6 +110356,7 @@ var require_sleep_TVipGseU = __commonJS({
110077
110356
  motionTrigger: createSliceHandle(stateSource, binding.deviceId, "motion-trigger"),
110078
110357
  motionZones: createSliceHandle(stateSource, binding.deviceId, "motion-zones"),
110079
110358
  nativeObjectDetection: createSliceHandle(stateSource, binding.deviceId, "native-object-detection"),
110359
+ navigation: createSliceHandle(stateSource, binding.deviceId, "navigation"),
110080
110360
  networkLink: createSliceHandle(stateSource, binding.deviceId, "network-link"),
110081
110361
  notifier: createSliceHandle(stateSource, binding.deviceId, "notifier"),
110082
110362
  numericSensor: createSliceHandle(stateSource, binding.deviceId, "numeric-sensor"),
@@ -110311,6 +110591,19 @@ var require_sleep_TVipGseU = __commonJS({
110311
110591
  setEnabled: (input) => dispatch("native-object-detection", "nativeObjectDetection", "setEnabled", "mutation", input),
110312
110592
  getStatus: (input) => dispatch("native-object-detection", "nativeObjectDetection", "getStatus", "query", input)
110313
110593
  },
110594
+ navigation: {
110595
+ move: (input) => dispatch("navigation", "navigation", "move", "mutation", input),
110596
+ stop: (input) => dispatch("navigation", "navigation", "stop", "mutation", input),
110597
+ goToPoint: (input) => dispatch("navigation", "navigation", "goToPoint", "mutation", input),
110598
+ listActions: (input) => dispatch("navigation", "navigation", "listActions", "query", input),
110599
+ runAction: (input) => dispatch("navigation", "navigation", "runAction", "mutation", input),
110600
+ playSound: (input) => dispatch("navigation", "navigation", "playSound", "mutation", input),
110601
+ setLightOn: (input) => dispatch("navigation", "navigation", "setLightOn", "mutation", input),
110602
+ setLightMode: (input) => dispatch("navigation", "navigation", "setLightMode", "mutation", input),
110603
+ setLightLevel: (input) => dispatch("navigation", "navigation", "setLightLevel", "mutation", input),
110604
+ getFeatures: (input) => dispatch("navigation", "navigation", "getFeatures", "query", input),
110605
+ getStatus: (input) => dispatch("navigation", "navigation", "getStatus", "query", input)
110606
+ },
110314
110607
  networkLink: { getStatus: (input) => dispatch("network-link", "networkLink", "getStatus", "query", input) },
110315
110608
  notificationRules: {
110316
110609
  listRules: (input) => dispatch("notification-rules", "notificationRules", "listRules", "query", input),
@@ -110758,6 +111051,8 @@ var require_sleep_TVipGseU = __commonJS({
110758
111051
  "motion-trigger",
110759
111052
  "motion-zones",
110760
111053
  "native-object-detection",
111054
+ "navigation",
111055
+ "network-link",
110761
111056
  "notifier",
110762
111057
  "numeric-sensor",
110763
111058
  "osd",
@@ -111374,7 +111669,7 @@ var require_addon = __commonJS({
111374
111669
  "use strict";
111375
111670
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
111376
111671
  var require_event_category = require_event_category_b8kBSOTT();
111377
- var require_sleep = require_sleep_TVipGseU();
111672
+ var require_sleep = require_sleep_Dp0uukHR();
111378
111673
  var require_err_msg = require_err_msg_COpsHMw2();
111379
111674
  var CAP_INPUT_DEFAULTS = Object.freeze({
111380
111675
  "addons": { "getLogs": { "limit": 100 } },
@@ -130334,7 +130629,7 @@ var require_dist3 = __commonJS({
130334
130629
  "use strict";
130335
130630
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
130336
130631
  var require_chunk = require_chunk_Cek0wNdY();
130337
- var require_dist10 = require_dist_B0Cf6q_P();
130632
+ var require_dist10 = require_dist_C7g13BfN();
130338
130633
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
130339
130634
  require_alerts();
130340
130635
  var require_formatter = require_formatter_DqAKDlvN();
@@ -211451,7 +211746,7 @@ var require_dist4 = __commonJS({
211451
211746
  "use strict";
211452
211747
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
211453
211748
  var require_event_category = require_event_category_b8kBSOTT();
211454
- var require_sleep = require_sleep_TVipGseU();
211749
+ var require_sleep = require_sleep_Dp0uukHR();
211455
211750
  var require_canonical_hash = require_canonical_hash_DNV8S5ET();
211456
211751
  var require_enums2 = require_enums();
211457
211752
  var require_err_msg = require_err_msg_COpsHMw2();
@@ -236175,6 +236470,297 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
236175
236470
  */
236176
236471
  durability: "session"
236177
236472
  };
236473
+ var NavigationMoveCommandSchema = zod.z.object({
236474
+ pan: zod.z.number().min(-1).max(1).optional(),
236475
+ tilt: zod.z.number().min(-1).max(1).optional(),
236476
+ speed: zod.z.number().min(0).max(1).optional()
236477
+ });
236478
+ var NavigationActionIdSchema = zod.z.enum([
236479
+ "goHome",
236480
+ "locate",
236481
+ "spotClean",
236482
+ "findPet",
236483
+ "personFollow",
236484
+ "stop",
236485
+ "startClean",
236486
+ "pauseClean",
236487
+ "dockWash",
236488
+ "autoEmpty",
236489
+ "flashOn",
236490
+ "flashOff"
236491
+ ]);
236492
+ var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
236493
+ var NavigationActionEntrySchema = zod.z.object({
236494
+ id: zod.z.string(),
236495
+ kind: NavigationEntryKindSchema,
236496
+ label: zod.z.string(),
236497
+ icon: zod.z.string(),
236498
+ /** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
236499
+ soundId: zod.z.number().int().optional(),
236500
+ /** Per-device feature flag — render this entry only when true. */
236501
+ enabled: zod.z.boolean()
236502
+ });
236503
+ var NAVIGATION_ACTION_CATALOG = [
236504
+ {
236505
+ id: "startClean",
236506
+ kind: "action",
236507
+ label: "Start cleaning",
236508
+ icon: "play",
236509
+ enabled: true
236510
+ },
236511
+ {
236512
+ id: "pauseClean",
236513
+ kind: "action",
236514
+ label: "Pause cleaning",
236515
+ icon: "pause",
236516
+ enabled: true
236517
+ },
236518
+ {
236519
+ id: "stop",
236520
+ kind: "action",
236521
+ label: "Stop",
236522
+ icon: "hand",
236523
+ enabled: true
236524
+ },
236525
+ {
236526
+ id: "goHome",
236527
+ kind: "action",
236528
+ label: "Return to dock",
236529
+ icon: "home",
236530
+ enabled: true
236531
+ },
236532
+ {
236533
+ id: "locate",
236534
+ kind: "action",
236535
+ label: "Locate",
236536
+ icon: "bell",
236537
+ enabled: true
236538
+ },
236539
+ {
236540
+ id: "spotClean",
236541
+ kind: "action",
236542
+ label: "Spot clean here",
236543
+ icon: "crosshair",
236544
+ enabled: true
236545
+ },
236546
+ {
236547
+ id: "findPet",
236548
+ kind: "action",
236549
+ label: "Find pet",
236550
+ icon: "paw-print",
236551
+ enabled: true
236552
+ },
236553
+ {
236554
+ id: "personFollow",
236555
+ kind: "action",
236556
+ label: "Follow me",
236557
+ icon: "footprints",
236558
+ enabled: true
236559
+ },
236560
+ {
236561
+ id: "dockWash",
236562
+ kind: "action",
236563
+ label: "Wash mop",
236564
+ icon: "droplets",
236565
+ enabled: true
236566
+ },
236567
+ {
236568
+ id: "autoEmpty",
236569
+ kind: "action",
236570
+ label: "Empty dustbin",
236571
+ icon: "trash-2",
236572
+ enabled: true
236573
+ },
236574
+ {
236575
+ id: "flashOn",
236576
+ kind: "action",
236577
+ label: "Flash on",
236578
+ icon: "flashlight",
236579
+ enabled: true
236580
+ },
236581
+ {
236582
+ id: "flashOff",
236583
+ kind: "action",
236584
+ label: "Flash off",
236585
+ icon: "flashlight-off",
236586
+ enabled: true
236587
+ },
236588
+ {
236589
+ id: "sound:meow",
236590
+ kind: "sound",
236591
+ label: "Meow",
236592
+ icon: "cat",
236593
+ soundId: 684,
236594
+ enabled: true
236595
+ },
236596
+ {
236597
+ id: "sound:bark",
236598
+ kind: "sound",
236599
+ label: "Woof",
236600
+ icon: "dog",
236601
+ soundId: 685,
236602
+ enabled: true
236603
+ },
236604
+ {
236605
+ id: "sound:footsteps",
236606
+ kind: "sound",
236607
+ label: "Footsteps",
236608
+ icon: "footprints",
236609
+ soundId: 686,
236610
+ enabled: true
236611
+ },
236612
+ {
236613
+ id: "sound:purring",
236614
+ kind: "sound",
236615
+ label: "Purring",
236616
+ icon: "cat",
236617
+ soundId: 687,
236618
+ enabled: true
236619
+ },
236620
+ {
236621
+ id: "sound:tickTock",
236622
+ kind: "sound",
236623
+ label: "Tick-tock",
236624
+ icon: "clock",
236625
+ soundId: 688,
236626
+ enabled: true
236627
+ }
236628
+ ];
236629
+ var NavigationPointSchema = zod.z.object({
236630
+ x: zod.z.number(),
236631
+ y: zod.z.number()
236632
+ });
236633
+ var NavigationFeaturesSchema = zod.z.object({
236634
+ move: zod.z.boolean(),
236635
+ stop: zod.z.boolean(),
236636
+ goToPoint: zod.z.boolean(),
236637
+ runAction: zod.z.boolean(),
236638
+ playSound: zod.z.boolean(),
236639
+ light: zod.z.boolean(),
236640
+ lightMode: zod.z.boolean()
236641
+ });
236642
+ var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
236643
+ var NAVIGATION_LIGHT_LEVEL_MIN = 40;
236644
+ var NAVIGATION_LIGHT_LEVEL_MAX = 100;
236645
+ var NavigationModeSchema = zod.z.enum([
236646
+ "idle",
236647
+ "cleaning",
236648
+ "spot",
236649
+ "following",
236650
+ "goto",
236651
+ "returning",
236652
+ "paused",
236653
+ "unknown"
236654
+ ]);
236655
+ var NavigationStatusSchema = zod.z.object({
236656
+ mode: NavigationModeSchema,
236657
+ following: zod.z.boolean(),
236658
+ flash: zod.z.boolean(),
236659
+ lightMode: NavigationLightModeSchema,
236660
+ lightLevel: zod.z.number().min(40).max(100),
236661
+ /** Ms epoch when the slice was last updated. */
236662
+ lastChangedAt: zod.z.number()
236663
+ });
236664
+ var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
236665
+ var navigationCapability = {
236666
+ name: "navigation",
236667
+ scope: "device",
236668
+ deviceNative: true,
236669
+ mode: "singleton",
236670
+ deviceTypes: [require_sleep.DeviceType.Camera],
236671
+ deviceConfig: { ui: {
236672
+ kind: "widget",
236673
+ widgetId: "host/navigation-panel",
236674
+ tab: "navigation",
236675
+ topTab: true,
236676
+ label: "Navigation",
236677
+ order: 0
236678
+ } },
236679
+ methods: {
236680
+ /**
236681
+ * Momentary drive nudge (the robot moves). `protected` — mirrors
236682
+ * `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
236683
+ * path) works for any authenticated user, not admin-only. The UI sends
236684
+ * these at ~1 Hz while a control is held; the provider forwards each one to
236685
+ * a single drive write WITHOUT debouncing.
236686
+ */
236687
+ move: require_sleep.method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236688
+ /** Halt all motion immediately (zero drive vector). */
236689
+ stop: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236690
+ /** Send the robot to a point on its live map. */
236691
+ goToPoint: require_sleep.method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
236692
+ /**
236693
+ * Enumerate the discrete controls THIS device supports (data-driven UI +
236694
+ * PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
236695
+ */
236696
+ listActions: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
236697
+ /**
236698
+ * Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
236699
+ * unsupported action ids are rejected by the provider.
236700
+ */
236701
+ runAction: require_sleep.method(zod.z.object({
236702
+ deviceId: zod.z.number(),
236703
+ actionId: NavigationActionIdSchema
236704
+ }), zod.z.void(), { kind: "mutation" }),
236705
+ /** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
236706
+ playSound: require_sleep.method(zod.z.object({
236707
+ deviceId: zod.z.number(),
236708
+ soundId: zod.z.number().int()
236709
+ }), zod.z.void(), { kind: "mutation" }),
236710
+ /**
236711
+ * Turn the on-camera fill light on / off (the `OpenFullLight` control —
236712
+ * works anytime, no active stream required).
236713
+ */
236714
+ setLightOn: require_sleep.method(zod.z.object({
236715
+ deviceId: zod.z.number(),
236716
+ on: zod.z.boolean()
236717
+ }), zod.z.void(), { kind: "mutation" }),
236718
+ /**
236719
+ * Set the fill-light mode (auto vs manual). `manual` optionally carries the
236720
+ * initial `level`. The auto/manual + level control is a CAMERA-service
236721
+ * action that generally needs an active camera stream/monitor session — the
236722
+ * UI shows the manual level slider ONLY when `mode === 'manual'`.
236723
+ */
236724
+ setLightMode: require_sleep.method(zod.z.object({
236725
+ deviceId: zod.z.number(),
236726
+ mode: NavigationLightModeSchema,
236727
+ level: zod.z.number().min(40).max(100).optional()
236728
+ }), zod.z.void(), { kind: "mutation" }),
236729
+ /** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
236730
+ setLightLevel: require_sleep.method(zod.z.object({
236731
+ deviceId: zod.z.number(),
236732
+ level: zod.z.number().min(40).max(100)
236733
+ }), zod.z.void(), { kind: "mutation" }),
236734
+ /**
236735
+ * Per-device FEATURE-FLAG report for the general primitives — drives which
236736
+ * controls the UI shows (the per-entry flags for the dictionary come back on
236737
+ * `listActions`).
236738
+ */
236739
+ getFeatures: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
236740
+ },
236741
+ events: { onStatusChanged: { data: zod.z.object({
236742
+ deviceId: zod.z.number(),
236743
+ status: NavigationStatusSchema
236744
+ }) } },
236745
+ status: {
236746
+ schema: NavigationStatusSchema,
236747
+ kind: "push"
236748
+ },
236749
+ /**
236750
+ * Runtime-state slice mirrored by the kernel. The navigation panel watches it
236751
+ * for live mode / follow / flash changes.
236752
+ */
236753
+ runtimeState: NavigationRuntimeStateSchema,
236754
+ /**
236755
+ * Runtime-state durability: **session** — like `vacuum-control`, a restored
236756
+ * `mode: cleaning` / `following: true` is a robot that is not actually doing
236757
+ * that. The live handle re-publishes on connect.
236758
+ *
236759
+ * See `RuntimeStateDurability`. Enforced by
236760
+ * `scripts/check-runtime-state-durability.ts`.
236761
+ */
236762
+ durability: "session"
236763
+ };
236178
236764
  var rebootCapability = {
236179
236765
  name: "reboot",
236180
236766
  scope: "device",
@@ -239546,6 +240132,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
239546
240132
  motionTrigger: motionTriggerCapability,
239547
240133
  motionZones: motionZonesCapability,
239548
240134
  nativeObjectDetection: nativeObjectDetectionCapability,
240135
+ navigation: navigationCapability,
239549
240136
  networkLink: networkLinkCapability,
239550
240137
  notifier: notifierCapability,
239551
240138
  numericSensor: numericSensorCapability,
@@ -242026,6 +242613,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242026
242613
  "motion-zones",
242027
242614
  "mqtt-broker",
242028
242615
  "native-object-detection",
242616
+ "navigation",
242029
242617
  "network-link",
242030
242618
  "notifier",
242031
242619
  "numeric-sensor",
@@ -242143,6 +242731,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242143
242731
  motionZones: "motion-zones",
242144
242732
  mqttBroker: "mqtt-broker",
242145
242733
  nativeObjectDetection: "native-object-detection",
242734
+ navigation: "navigation",
242146
242735
  networkAccess: "network-access",
242147
242736
  networkLink: "network-link",
242148
242737
  networkQuality: "network-quality",
@@ -242565,6 +243154,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242565
243154
  key: "nativeObjectDetection",
242566
243155
  name: "native-object-detection"
242567
243156
  },
243157
+ {
243158
+ key: "navigation",
243159
+ name: "navigation"
243160
+ },
242568
243161
  {
242569
243162
  key: "networkAccess",
242570
243163
  name: "network-access"
@@ -242912,6 +243505,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
242912
243505
  motionZonesCapability,
242913
243506
  mqttBrokerCapability,
242914
243507
  nativeObjectDetectionCapability,
243508
+ navigationCapability,
242915
243509
  networkAccessCapability,
242916
243510
  networkLinkCapability,
242917
243511
  networkQualityCapability,
@@ -245714,6 +246308,66 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
245714
246308
  addonId: null,
245715
246309
  access: "create"
245716
246310
  },
246311
+ "navigation.getFeatures": {
246312
+ capName: "navigation",
246313
+ capScope: "device",
246314
+ addonId: null,
246315
+ access: "view"
246316
+ },
246317
+ "navigation.goToPoint": {
246318
+ capName: "navigation",
246319
+ capScope: "device",
246320
+ addonId: null,
246321
+ access: "create"
246322
+ },
246323
+ "navigation.listActions": {
246324
+ capName: "navigation",
246325
+ capScope: "device",
246326
+ addonId: null,
246327
+ access: "view"
246328
+ },
246329
+ "navigation.move": {
246330
+ capName: "navigation",
246331
+ capScope: "device",
246332
+ addonId: null,
246333
+ access: "create"
246334
+ },
246335
+ "navigation.playSound": {
246336
+ capName: "navigation",
246337
+ capScope: "device",
246338
+ addonId: null,
246339
+ access: "create"
246340
+ },
246341
+ "navigation.runAction": {
246342
+ capName: "navigation",
246343
+ capScope: "device",
246344
+ addonId: null,
246345
+ access: "create"
246346
+ },
246347
+ "navigation.setLightLevel": {
246348
+ capName: "navigation",
246349
+ capScope: "device",
246350
+ addonId: null,
246351
+ access: "create"
246352
+ },
246353
+ "navigation.setLightMode": {
246354
+ capName: "navigation",
246355
+ capScope: "device",
246356
+ addonId: null,
246357
+ access: "create"
246358
+ },
246359
+ "navigation.setLightOn": {
246360
+ capName: "navigation",
246361
+ capScope: "device",
246362
+ addonId: null,
246363
+ access: "create"
246364
+ },
246365
+ "navigation.stop": {
246366
+ capName: "navigation",
246367
+ capScope: "device",
246368
+ addonId: null,
246369
+ access: "create"
246370
+ },
245717
246371
  "networkAccess.getEndpoint": {
245718
246372
  capName: "network-access",
245719
246373
  capScope: "system",
@@ -249106,6 +249760,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249106
249760
  "motion-zones",
249107
249761
  "mqtt-broker",
249108
249762
  "native-object-detection",
249763
+ "navigation",
249109
249764
  "network-access",
249110
249765
  "network-quality",
249111
249766
  "nodes",
@@ -249193,6 +249848,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249193
249848
  "motion-trigger",
249194
249849
  "motion-zones",
249195
249850
  "native-object-detection",
249851
+ "navigation",
249196
249852
  "notifier",
249197
249853
  "osd",
249198
249854
  "pet-feeder",
@@ -250067,6 +250723,56 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
250067
250723
  form: "single",
250068
250724
  optional: false
250069
250725
  }],
250726
+ "navigation.getFeatures": [{
250727
+ name: "deviceId",
250728
+ form: "single",
250729
+ optional: false
250730
+ }],
250731
+ "navigation.goToPoint": [{
250732
+ name: "deviceId",
250733
+ form: "single",
250734
+ optional: false
250735
+ }],
250736
+ "navigation.listActions": [{
250737
+ name: "deviceId",
250738
+ form: "single",
250739
+ optional: false
250740
+ }],
250741
+ "navigation.move": [{
250742
+ name: "deviceId",
250743
+ form: "single",
250744
+ optional: false
250745
+ }],
250746
+ "navigation.playSound": [{
250747
+ name: "deviceId",
250748
+ form: "single",
250749
+ optional: false
250750
+ }],
250751
+ "navigation.runAction": [{
250752
+ name: "deviceId",
250753
+ form: "single",
250754
+ optional: false
250755
+ }],
250756
+ "navigation.setLightLevel": [{
250757
+ name: "deviceId",
250758
+ form: "single",
250759
+ optional: false
250760
+ }],
250761
+ "navigation.setLightMode": [{
250762
+ name: "deviceId",
250763
+ form: "single",
250764
+ optional: false
250765
+ }],
250766
+ "navigation.setLightOn": [{
250767
+ name: "deviceId",
250768
+ form: "single",
250769
+ optional: false
250770
+ }],
250771
+ "navigation.stop": [{
250772
+ name: "deviceId",
250773
+ form: "single",
250774
+ optional: false
250775
+ }],
250070
250776
  "networkQuality.getDeviceStats": [{
250071
250777
  name: "deviceId",
250072
250778
  form: "single",
@@ -251414,6 +252120,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
251414
252120
  durability: "restored",
251415
252121
  volatileFields: ["lastFetchedAt"]
251416
252122
  },
252123
+ "navigation": {
252124
+ durability: "session",
252125
+ volatileFields: []
252126
+ },
251417
252127
  "network-link": {
251418
252128
  durability: "restored",
251419
252129
  volatileFields: ["lastUpdated"]
@@ -255475,6 +256185,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
255475
256185
  exports.NATIVE_LEASE_SECTION_ID = NATIVE_LEASE_SECTION_ID;
255476
256186
  exports.NATIVE_LEASE_TILE_BUDGET_FIELD = NATIVE_LEASE_TILE_BUDGET_FIELD;
255477
256187
  exports.NATIVE_LEASE_TILE_BUDGET_KEY = NATIVE_LEASE_TILE_BUDGET_KEY;
256188
+ exports.NAVIGATION_ACTION_CATALOG = NAVIGATION_ACTION_CATALOG;
256189
+ exports.NAVIGATION_LIGHT_LEVEL_MAX = NAVIGATION_LIGHT_LEVEL_MAX;
256190
+ exports.NAVIGATION_LIGHT_LEVEL_MIN = NAVIGATION_LIGHT_LEVEL_MIN;
255478
256191
  exports.NC_ALARM_SYSTEM_EVENT_KINDS = NC_ALARM_SYSTEM_EVENT_KINDS;
255479
256192
  exports.NC_AUDIO_CONFIRM_HITS_DEFAULT = NC_AUDIO_CONFIRM_HITS_DEFAULT;
255480
256193
  exports.NC_AUDIO_CONFIRM_HITS_MAX = NC_AUDIO_CONFIRM_HITS_MAX;
@@ -255523,6 +256236,16 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
255523
256236
  exports.NativeObjectClassEnum = NativeObjectClassEnum;
255524
256237
  exports.NativeObjectDetectionRuntimeStateSchema = NativeObjectDetectionRuntimeStateSchema;
255525
256238
  exports.NativeObjectDetectionStatusSchema = NativeObjectDetectionStatusSchema;
256239
+ exports.NavigationActionEntrySchema = NavigationActionEntrySchema;
256240
+ exports.NavigationActionIdSchema = NavigationActionIdSchema;
256241
+ exports.NavigationEntryKindSchema = NavigationEntryKindSchema;
256242
+ exports.NavigationFeaturesSchema = NavigationFeaturesSchema;
256243
+ exports.NavigationLightModeSchema = NavigationLightModeSchema;
256244
+ exports.NavigationModeSchema = NavigationModeSchema;
256245
+ exports.NavigationMoveCommandSchema = NavigationMoveCommandSchema;
256246
+ exports.NavigationPointSchema = NavigationPointSchema;
256247
+ exports.NavigationRuntimeStateSchema = NavigationRuntimeStateSchema;
256248
+ exports.NavigationStatusSchema = NavigationStatusSchema;
255526
256249
  exports.NcAlarmConfigSchema = NcAlarmConfigSchema;
255527
256250
  exports.NcAlarmModeCoverageSchema = NcAlarmModeCoverageSchema;
255528
256251
  exports.NcAlarmSettingsPatchSchema = NcAlarmSettingsPatchSchema;
@@ -256231,6 +256954,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
256231
256954
  exports.motionZonesCapability = motionZonesCapability;
256232
256955
  exports.mqttBrokerCapability = mqttBrokerCapability;
256233
256956
  exports.nativeObjectDetectionCapability = nativeObjectDetectionCapability;
256957
+ exports.navigationCapability = navigationCapability;
256234
256958
  exports.networkAccessCapability = networkAccessCapability;
256235
256959
  exports.networkLinkCapability = networkLinkCapability;
256236
256960
  exports.networkQualityCapability = networkQualityCapability;