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.
@@ -14522,7 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/sleep-BRy4r7RG.mjs
14525
+ // ../types/dist/sleep-CoV00zX3.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -14596,6 +14596,12 @@ var WELL_KNOWN_TABS = [
14596
14596
  icon: "move",
14597
14597
  order: 40
14598
14598
  },
14599
+ {
14600
+ id: "navigation",
14601
+ label: "Navigation",
14602
+ icon: "compass",
14603
+ order: 41
14604
+ },
14599
14605
  {
14600
14606
  id: "consumables",
14601
14607
  label: "Consumables",
@@ -36934,6 +36940,169 @@ var ptzAutotrackCapability = {
36934
36940
  */
36935
36941
  durability: "session"
36936
36942
  };
36943
+ var NavigationMoveCommandSchema = external_exports.object({
36944
+ pan: external_exports.number().min(-1).max(1).optional(),
36945
+ tilt: external_exports.number().min(-1).max(1).optional(),
36946
+ speed: external_exports.number().min(0).max(1).optional()
36947
+ });
36948
+ var NavigationActionIdSchema = external_exports.enum([
36949
+ "goHome",
36950
+ "locate",
36951
+ "spotClean",
36952
+ "findPet",
36953
+ "personFollow",
36954
+ "stop",
36955
+ "startClean",
36956
+ "pauseClean",
36957
+ "dockWash",
36958
+ "autoEmpty",
36959
+ "flashOn",
36960
+ "flashOff"
36961
+ ]);
36962
+ var NavigationEntryKindSchema = external_exports.enum(["action", "sound"]);
36963
+ var NavigationActionEntrySchema = external_exports.object({
36964
+ id: external_exports.string(),
36965
+ kind: NavigationEntryKindSchema,
36966
+ label: external_exports.string(),
36967
+ icon: external_exports.string(),
36968
+ /** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
36969
+ soundId: external_exports.number().int().optional(),
36970
+ /** Per-device feature flag — render this entry only when true. */
36971
+ enabled: external_exports.boolean()
36972
+ });
36973
+ var NavigationPointSchema = external_exports.object({
36974
+ x: external_exports.number(),
36975
+ y: external_exports.number()
36976
+ });
36977
+ var NavigationFeaturesSchema = external_exports.object({
36978
+ move: external_exports.boolean(),
36979
+ stop: external_exports.boolean(),
36980
+ goToPoint: external_exports.boolean(),
36981
+ runAction: external_exports.boolean(),
36982
+ playSound: external_exports.boolean(),
36983
+ light: external_exports.boolean(),
36984
+ lightMode: external_exports.boolean()
36985
+ });
36986
+ var NavigationLightModeSchema = external_exports.enum(["auto", "manual"]);
36987
+ var NavigationModeSchema = external_exports.enum([
36988
+ "idle",
36989
+ "cleaning",
36990
+ "spot",
36991
+ "following",
36992
+ "goto",
36993
+ "returning",
36994
+ "paused",
36995
+ "unknown"
36996
+ ]);
36997
+ var NavigationStatusSchema = external_exports.object({
36998
+ mode: NavigationModeSchema,
36999
+ following: external_exports.boolean(),
37000
+ flash: external_exports.boolean(),
37001
+ lightMode: NavigationLightModeSchema,
37002
+ lightLevel: external_exports.number().min(40).max(100),
37003
+ /** Ms epoch when the slice was last updated. */
37004
+ lastChangedAt: external_exports.number()
37005
+ });
37006
+ var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: external_exports.number() });
37007
+ var navigationCapability = {
37008
+ name: "navigation",
37009
+ scope: "device",
37010
+ deviceNative: true,
37011
+ mode: "singleton",
37012
+ deviceTypes: [DeviceType.Camera],
37013
+ deviceConfig: { ui: {
37014
+ kind: "widget",
37015
+ widgetId: "host/navigation-panel",
37016
+ tab: "navigation",
37017
+ topTab: true,
37018
+ label: "Navigation",
37019
+ order: 0
37020
+ } },
37021
+ methods: {
37022
+ /**
37023
+ * Momentary drive nudge (the robot moves). `protected` — mirrors
37024
+ * `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
37025
+ * path) works for any authenticated user, not admin-only. The UI sends
37026
+ * these at ~1 Hz while a control is held; the provider forwards each one to
37027
+ * a single drive write WITHOUT debouncing.
37028
+ */
37029
+ move: method(NavigationMoveCommandSchema.extend({ deviceId: external_exports.number() }), external_exports.void(), { kind: "mutation" }),
37030
+ /** Halt all motion immediately (zero drive vector). */
37031
+ stop: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), { kind: "mutation" }),
37032
+ /** Send the robot to a point on its live map. */
37033
+ goToPoint: method(NavigationPointSchema.extend({ deviceId: external_exports.number() }), external_exports.void(), { kind: "mutation" }),
37034
+ /**
37035
+ * Enumerate the discrete controls THIS device supports (data-driven UI +
37036
+ * PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
37037
+ */
37038
+ listActions: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(NavigationActionEntrySchema)),
37039
+ /**
37040
+ * Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
37041
+ * unsupported action ids are rejected by the provider.
37042
+ */
37043
+ runAction: method(external_exports.object({
37044
+ deviceId: external_exports.number(),
37045
+ actionId: NavigationActionIdSchema
37046
+ }), external_exports.void(), { kind: "mutation" }),
37047
+ /** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
37048
+ playSound: method(external_exports.object({
37049
+ deviceId: external_exports.number(),
37050
+ soundId: external_exports.number().int()
37051
+ }), external_exports.void(), { kind: "mutation" }),
37052
+ /**
37053
+ * Turn the on-camera fill light on / off (the `OpenFullLight` control —
37054
+ * works anytime, no active stream required).
37055
+ */
37056
+ setLightOn: method(external_exports.object({
37057
+ deviceId: external_exports.number(),
37058
+ on: external_exports.boolean()
37059
+ }), external_exports.void(), { kind: "mutation" }),
37060
+ /**
37061
+ * Set the fill-light mode (auto vs manual). `manual` optionally carries the
37062
+ * initial `level`. The auto/manual + level control is a CAMERA-service
37063
+ * action that generally needs an active camera stream/monitor session — the
37064
+ * UI shows the manual level slider ONLY when `mode === 'manual'`.
37065
+ */
37066
+ setLightMode: method(external_exports.object({
37067
+ deviceId: external_exports.number(),
37068
+ mode: NavigationLightModeSchema,
37069
+ level: external_exports.number().min(40).max(100).optional()
37070
+ }), external_exports.void(), { kind: "mutation" }),
37071
+ /** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
37072
+ setLightLevel: method(external_exports.object({
37073
+ deviceId: external_exports.number(),
37074
+ level: external_exports.number().min(40).max(100)
37075
+ }), external_exports.void(), { kind: "mutation" }),
37076
+ /**
37077
+ * Per-device FEATURE-FLAG report for the general primitives — drives which
37078
+ * controls the UI shows (the per-entry flags for the dictionary come back on
37079
+ * `listActions`).
37080
+ */
37081
+ getFeatures: method(external_exports.object({ deviceId: external_exports.number() }), NavigationFeaturesSchema)
37082
+ },
37083
+ events: { onStatusChanged: { data: external_exports.object({
37084
+ deviceId: external_exports.number(),
37085
+ status: NavigationStatusSchema
37086
+ }) } },
37087
+ status: {
37088
+ schema: NavigationStatusSchema,
37089
+ kind: "push"
37090
+ },
37091
+ /**
37092
+ * Runtime-state slice mirrored by the kernel. The navigation panel watches it
37093
+ * for live mode / follow / flash changes.
37094
+ */
37095
+ runtimeState: NavigationRuntimeStateSchema,
37096
+ /**
37097
+ * Runtime-state durability: **session** — like `vacuum-control`, a restored
37098
+ * `mode: cleaning` / `following: true` is a robot that is not actually doing
37099
+ * that. The live handle re-publishes on connect.
37100
+ *
37101
+ * See `RuntimeStateDurability`. Enforced by
37102
+ * `scripts/check-runtime-state-durability.ts`.
37103
+ */
37104
+ durability: "session"
37105
+ };
36937
37106
  var rebootCapability = {
36938
37107
  name: "reboot",
36939
37108
  scope: "device",
@@ -42349,6 +42518,66 @@ var METHOD_ACCESS_MAP = Object.freeze({
42349
42518
  addonId: null,
42350
42519
  access: "create"
42351
42520
  },
42521
+ "navigation.getFeatures": {
42522
+ capName: "navigation",
42523
+ capScope: "device",
42524
+ addonId: null,
42525
+ access: "view"
42526
+ },
42527
+ "navigation.goToPoint": {
42528
+ capName: "navigation",
42529
+ capScope: "device",
42530
+ addonId: null,
42531
+ access: "create"
42532
+ },
42533
+ "navigation.listActions": {
42534
+ capName: "navigation",
42535
+ capScope: "device",
42536
+ addonId: null,
42537
+ access: "view"
42538
+ },
42539
+ "navigation.move": {
42540
+ capName: "navigation",
42541
+ capScope: "device",
42542
+ addonId: null,
42543
+ access: "create"
42544
+ },
42545
+ "navigation.playSound": {
42546
+ capName: "navigation",
42547
+ capScope: "device",
42548
+ addonId: null,
42549
+ access: "create"
42550
+ },
42551
+ "navigation.runAction": {
42552
+ capName: "navigation",
42553
+ capScope: "device",
42554
+ addonId: null,
42555
+ access: "create"
42556
+ },
42557
+ "navigation.setLightLevel": {
42558
+ capName: "navigation",
42559
+ capScope: "device",
42560
+ addonId: null,
42561
+ access: "create"
42562
+ },
42563
+ "navigation.setLightMode": {
42564
+ capName: "navigation",
42565
+ capScope: "device",
42566
+ addonId: null,
42567
+ access: "create"
42568
+ },
42569
+ "navigation.setLightOn": {
42570
+ capName: "navigation",
42571
+ capScope: "device",
42572
+ addonId: null,
42573
+ access: "create"
42574
+ },
42575
+ "navigation.stop": {
42576
+ capName: "navigation",
42577
+ capScope: "device",
42578
+ addonId: null,
42579
+ access: "create"
42580
+ },
42352
42581
  "networkAccess.getEndpoint": {
42353
42582
  capName: "network-access",
42354
42583
  capScope: "system",
@@ -46444,6 +46673,56 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46444
46673
  form: "single",
46445
46674
  optional: false
46446
46675
  }],
46676
+ "navigation.getFeatures": [{
46677
+ name: "deviceId",
46678
+ form: "single",
46679
+ optional: false
46680
+ }],
46681
+ "navigation.goToPoint": [{
46682
+ name: "deviceId",
46683
+ form: "single",
46684
+ optional: false
46685
+ }],
46686
+ "navigation.listActions": [{
46687
+ name: "deviceId",
46688
+ form: "single",
46689
+ optional: false
46690
+ }],
46691
+ "navigation.move": [{
46692
+ name: "deviceId",
46693
+ form: "single",
46694
+ optional: false
46695
+ }],
46696
+ "navigation.playSound": [{
46697
+ name: "deviceId",
46698
+ form: "single",
46699
+ optional: false
46700
+ }],
46701
+ "navigation.runAction": [{
46702
+ name: "deviceId",
46703
+ form: "single",
46704
+ optional: false
46705
+ }],
46706
+ "navigation.setLightLevel": [{
46707
+ name: "deviceId",
46708
+ form: "single",
46709
+ optional: false
46710
+ }],
46711
+ "navigation.setLightMode": [{
46712
+ name: "deviceId",
46713
+ form: "single",
46714
+ optional: false
46715
+ }],
46716
+ "navigation.setLightOn": [{
46717
+ name: "deviceId",
46718
+ form: "single",
46719
+ optional: false
46720
+ }],
46721
+ "navigation.stop": [{
46722
+ name: "deviceId",
46723
+ form: "single",
46724
+ optional: false
46725
+ }],
46447
46726
  "networkQuality.getDeviceStats": [{
46448
46727
  name: "deviceId",
46449
46728
  form: "single",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-TPJZXJTF.js";
4
+ } from "./chunk-N7GROSKE.js";
5
5
  import "./chunk-LMMQX4CK.js";
6
6
 
7
7
  // src/cli.ts
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-DTWKSRVF.js");
41
+ await import("./launcher-Z3ZWTZS5.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-DTWKSRVF.js");
86
+ await import("./launcher-Z3ZWTZS5.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
1130
1130
  return true;
1131
1131
  }
1132
1132
  async function resolveServerInteractive(presetNamespace) {
1133
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-33RHXYBU.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-MXRAOHEZ.js");
1134
1134
  if (presetNamespace) {
1135
1135
  const spinner4 = clack.spinner();
1136
1136
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-TPJZXJTF.js";
8
+ } from "./chunk-N7GROSKE.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,