camstack 1.2.71 → 1.2.72

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-BBI0PDUc.mjs
14525
+ // ../types/dist/sleep-DAxSW8cv.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -20772,6 +20772,27 @@ var deviceManagerCapability = {
20772
20772
  kind: "mutation",
20773
20773
  auth: "admin"
20774
20774
  }),
20775
+ /** Rename a room: replace the label in the registry IN PLACE and move
20776
+ * every device that carried it, as ONE server operation.
20777
+ *
20778
+ * The admin UI used to do this as `addLocation(to)` → N ×
20779
+ * `setLocation(device, to)` → `removeLocation(from)` from the browser.
20780
+ * Nothing bound those three together, so a closed tab left the fleet
20781
+ * split across two rooms — one of which the operator believed was gone.
20782
+ *
20783
+ * `from` is matched the way the registry matches everywhere else
20784
+ * (trimmed, case-insensitive) and need NOT be registered: the registry is
20785
+ * a suggestion list, and the devices that most need a rename are exactly
20786
+ * the ones carrying a label nobody registered. `to` renames onto an
20787
+ * existing room by MERGING into it, leaving no duplicate label. An empty
20788
+ * `to` throws before anything is written. */
20789
+ renameLocation: method(external_exports.object({
20790
+ from: external_exports.string(),
20791
+ to: external_exports.string()
20792
+ }), external_exports.object({ moved: external_exports.number() }), {
20793
+ kind: "mutation",
20794
+ auth: "admin"
20795
+ }),
20775
20796
  /** Soft-disable / re-enable the device. Drivers consult
20776
20797
  * `BaseDevice.disabled` to gate lifecycle hooks. */
20777
20798
  setDisabled: method(external_exports.object({
@@ -26401,46 +26422,6 @@ var RecentTracksPageSchema = external_exports.object({
26401
26422
  /** Cursor for the next page, or null when this page is the last. */
26402
26423
  nextCursor: external_exports.string().nullable()
26403
26424
  });
26404
- var LIST_GROUPS_DEFAULT_LIMIT = 40;
26405
- var LIST_GROUPS_MAX_LIMIT = 100;
26406
- var AnalyticsGroupRecordSchema = external_exports.object({
26407
- id: external_exports.string(),
26408
- deviceId: external_exports.number().int(),
26409
- openedAt: external_exports.number().int(),
26410
- closedAt: external_exports.number().int(),
26411
- timestamp: external_exports.number().int(),
26412
- memberCount: external_exports.number().int(),
26413
- memberTrackIds: external_exports.array(external_exports.string()).readonly(),
26414
- className: external_exports.string(),
26415
- classes: external_exports.array(external_exports.string()).readonly(),
26416
- /** Relative event-media path, or null when the group has no picture yet. */
26417
- mediaUrl: external_exports.string().nullable(),
26418
- singleton: external_exports.boolean()
26419
- });
26420
- var AnalyticsGroupMemberSchema = external_exports.object({
26421
- trackId: external_exports.string(),
26422
- deviceId: external_exports.number().int(),
26423
- className: external_exports.string(),
26424
- firstSeen: external_exports.number().int(),
26425
- lastSeen: external_exports.number().int(),
26426
- mediaUrl: external_exports.string().nullable()
26427
- });
26428
- var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: external_exports.array(AnalyticsGroupMemberSchema).readonly() });
26429
- var ListGroupsQueryInput = external_exports.object({
26430
- /** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
26431
- deviceIds: external_exports.array(external_exports.number()),
26432
- /** Window lower bound on `closedAt` (inclusive). */
26433
- since: external_exports.number().optional(),
26434
- /** Window upper bound on `openedAt` (inclusive). */
26435
- until: external_exports.number().optional(),
26436
- limit: external_exports.number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
26437
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
26438
- cursor: external_exports.string().optional()
26439
- });
26440
- var ListGroupsPageSchema = external_exports.object({
26441
- groups: external_exports.array(AnalyticsGroupRecordSchema).readonly(),
26442
- nextCursor: external_exports.string().nullable()
26443
- });
26444
26425
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
26445
26426
  var KEY_EVENTS_MAX_LIMIT = 200;
26446
26427
  var KeyEventQueryInput = external_exports.object({
@@ -26533,9 +26514,7 @@ var TrackCascadeCountsSchema = external_exports.object({
26533
26514
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
26534
26515
  plates: external_exports.number().int(),
26535
26516
  /** Per-track CLIP search vectors removed (best-effort). */
26536
- embeddings: external_exports.number().int(),
26537
- /** Group membership + group rows removed with their last member (best-effort). */
26538
- groups: external_exports.number().int()
26517
+ embeddings: external_exports.number().int()
26539
26518
  });
26540
26519
  var DiskReconcileCountsSchema = external_exports.object({
26541
26520
  mediaDropped: external_exports.number().int(),
@@ -26748,16 +26727,6 @@ var pipelineAnalyticsCapability = {
26748
26727
  * are not included (same contract as `listTracks`).
26749
26728
  */
26750
26729
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
26751
- /**
26752
- * Batched co-moving group listing — the Groups feed. Same merge/cursor
26753
- * contract as {@link listRecentTracks}. A group is a sealed partition of
26754
- * one session; `getGroup` is the detail with members.
26755
- */
26756
- listGroups: method(ListGroupsQueryInput, ListGroupsPageSchema),
26757
- getGroup: method(external_exports.object({
26758
- deviceId: external_exports.number(),
26759
- groupId: external_exports.string().min(1)
26760
- }), AnalyticsGroupDetailSchema.nullable()),
26761
26730
  clearTracks: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), {
26762
26731
  kind: "mutation",
26763
26732
  auth: "admin"
@@ -40651,6 +40620,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
40651
40620
  addonId: null,
40652
40621
  access: "delete"
40653
40622
  },
40623
+ "deviceManager.renameLocation": {
40624
+ capName: "device-manager",
40625
+ capScope: "system",
40626
+ addonId: null,
40627
+ access: "create"
40628
+ },
40654
40629
  "deviceManager.runDeviceAction": {
40655
40630
  capName: "device-manager",
40656
40631
  capScope: "system",
@@ -42343,12 +42318,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
42343
42318
  addonId: null,
42344
42319
  access: "view"
42345
42320
  },
42346
- "pipelineAnalytics.getGroup": {
42347
- capName: "pipeline-analytics",
42348
- capScope: "device",
42349
- addonId: null,
42350
- access: "view"
42351
- },
42352
42321
  "pipelineAnalytics.getKeyEvents": {
42353
42322
  capName: "pipeline-analytics",
42354
42323
  capScope: "device",
@@ -42451,12 +42420,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
42451
42420
  addonId: null,
42452
42421
  access: "view"
42453
42422
  },
42454
- "pipelineAnalytics.listGroups": {
42455
- capName: "pipeline-analytics",
42456
- capScope: "device",
42457
- addonId: null,
42458
- access: "view"
42459
- },
42460
42423
  "pipelineAnalytics.listOpsLog": {
42461
42424
  capName: "pipeline-analytics",
42462
42425
  capScope: "device",
@@ -46079,11 +46042,6 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46079
46042
  form: "single",
46080
46043
  optional: true
46081
46044
  }],
46082
- "pipelineAnalytics.getGroup": [{
46083
- name: "deviceId",
46084
- form: "single",
46085
- optional: false
46086
- }],
46087
46045
  "pipelineAnalytics.getKeyEvents": [{
46088
46046
  name: "deviceId",
46089
46047
  form: "single",
@@ -46149,11 +46107,6 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46149
46107
  form: "single",
46150
46108
  optional: false
46151
46109
  }],
46152
- "pipelineAnalytics.listGroups": [{
46153
- name: "deviceIds",
46154
- form: "array",
46155
- optional: false
46156
- }],
46157
46110
  "pipelineAnalytics.listOpsLog": [{
46158
46111
  name: "deviceId",
46159
46112
  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-TAXPJ53T.js";
4
+ } from "./chunk-CX4PX7YL.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-4QRZCB6O.js");
41
+ await import("./launcher-WAZ55ZSY.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-4QRZCB6O.js");
86
+ await import("./launcher-WAZ55ZSY.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-TJE5IRDV.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-RIINNWGY.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-TAXPJ53T.js";
8
+ } from "./chunk-CX4PX7YL.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
23633
23633
  }
23634
23634
  });
23635
23635
 
23636
- // ../system/dist/dist-CFTKQGym.js
23637
- var require_dist_CFTKQGym = __commonJS({
23638
- "../system/dist/dist-CFTKQGym.js"(exports) {
23636
+ // ../system/dist/dist-DCdtLXgx.js
23637
+ var require_dist_DCdtLXgx = __commonJS({
23638
+ "../system/dist/dist-DCdtLXgx.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -31475,6 +31475,27 @@ var require_dist_CFTKQGym = __commonJS({
31475
31475
  kind: "mutation",
31476
31476
  auth: "admin"
31477
31477
  }),
31478
+ /** Rename a room: replace the label in the registry IN PLACE and move
31479
+ * every device that carried it, as ONE server operation.
31480
+ *
31481
+ * The admin UI used to do this as `addLocation(to)` → N ×
31482
+ * `setLocation(device, to)` → `removeLocation(from)` from the browser.
31483
+ * Nothing bound those three together, so a closed tab left the fleet
31484
+ * split across two rooms — one of which the operator believed was gone.
31485
+ *
31486
+ * `from` is matched the way the registry matches everywhere else
31487
+ * (trimmed, case-insensitive) and need NOT be registered: the registry is
31488
+ * a suggestion list, and the devices that most need a rename are exactly
31489
+ * the ones carrying a label nobody registered. `to` renames onto an
31490
+ * existing room by MERGING into it, leaving no duplicate label. An empty
31491
+ * `to` throws before anything is written. */
31492
+ renameLocation: method(zod.z.object({
31493
+ from: zod.z.string(),
31494
+ to: zod.z.string()
31495
+ }), zod.z.object({ moved: zod.z.number() }), {
31496
+ kind: "mutation",
31497
+ auth: "admin"
31498
+ }),
31478
31499
  /** Soft-disable / re-enable the device. Drivers consult
31479
31500
  * `BaseDevice.disabled` to gate lifecycle hooks. */
31480
31501
  setDisabled: method(zod.z.object({
@@ -37096,46 +37117,6 @@ var require_dist_CFTKQGym = __commonJS({
37096
37117
  /** Cursor for the next page, or null when this page is the last. */
37097
37118
  nextCursor: zod.z.string().nullable()
37098
37119
  });
37099
- var LIST_GROUPS_DEFAULT_LIMIT = 40;
37100
- var LIST_GROUPS_MAX_LIMIT = 100;
37101
- var AnalyticsGroupRecordSchema = zod.z.object({
37102
- id: zod.z.string(),
37103
- deviceId: zod.z.number().int(),
37104
- openedAt: zod.z.number().int(),
37105
- closedAt: zod.z.number().int(),
37106
- timestamp: zod.z.number().int(),
37107
- memberCount: zod.z.number().int(),
37108
- memberTrackIds: zod.z.array(zod.z.string()).readonly(),
37109
- className: zod.z.string(),
37110
- classes: zod.z.array(zod.z.string()).readonly(),
37111
- /** Relative event-media path, or null when the group has no picture yet. */
37112
- mediaUrl: zod.z.string().nullable(),
37113
- singleton: zod.z.boolean()
37114
- });
37115
- var AnalyticsGroupMemberSchema = zod.z.object({
37116
- trackId: zod.z.string(),
37117
- deviceId: zod.z.number().int(),
37118
- className: zod.z.string(),
37119
- firstSeen: zod.z.number().int(),
37120
- lastSeen: zod.z.number().int(),
37121
- mediaUrl: zod.z.string().nullable()
37122
- });
37123
- var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: zod.z.array(AnalyticsGroupMemberSchema).readonly() });
37124
- var ListGroupsQueryInput = zod.z.object({
37125
- /** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
37126
- deviceIds: zod.z.array(zod.z.number()),
37127
- /** Window lower bound on `closedAt` (inclusive). */
37128
- since: zod.z.number().optional(),
37129
- /** Window upper bound on `openedAt` (inclusive). */
37130
- until: zod.z.number().optional(),
37131
- limit: zod.z.number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
37132
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
37133
- cursor: zod.z.string().optional()
37134
- });
37135
- var ListGroupsPageSchema = zod.z.object({
37136
- groups: zod.z.array(AnalyticsGroupRecordSchema).readonly(),
37137
- nextCursor: zod.z.string().nullable()
37138
- });
37139
37120
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
37140
37121
  var KEY_EVENTS_MAX_LIMIT = 200;
37141
37122
  var KeyEventQueryInput = zod.z.object({
@@ -37228,9 +37209,7 @@ var require_dist_CFTKQGym = __commonJS({
37228
37209
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
37229
37210
  plates: zod.z.number().int(),
37230
37211
  /** Per-track CLIP search vectors removed (best-effort). */
37231
- embeddings: zod.z.number().int(),
37232
- /** Group membership + group rows removed with their last member (best-effort). */
37233
- groups: zod.z.number().int()
37212
+ embeddings: zod.z.number().int()
37234
37213
  });
37235
37214
  var DiskReconcileCountsSchema = zod.z.object({
37236
37215
  mediaDropped: zod.z.number().int(),
@@ -37443,16 +37422,6 @@ var require_dist_CFTKQGym = __commonJS({
37443
37422
  * are not included (same contract as `listTracks`).
37444
37423
  */
37445
37424
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
37446
- /**
37447
- * Batched co-moving group listing — the Groups feed. Same merge/cursor
37448
- * contract as {@link listRecentTracks}. A group is a sealed partition of
37449
- * one session; `getGroup` is the detail with members.
37450
- */
37451
- listGroups: method(ListGroupsQueryInput, ListGroupsPageSchema),
37452
- getGroup: method(zod.z.object({
37453
- deviceId: zod.z.number(),
37454
- groupId: zod.z.string().min(1)
37455
- }), AnalyticsGroupDetailSchema.nullable()),
37456
37425
  clearTracks: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
37457
37426
  kind: "mutation",
37458
37427
  auth: "admin"
@@ -51967,6 +51936,12 @@ var require_dist_CFTKQGym = __commonJS({
51967
51936
  addonId: null,
51968
51937
  access: "delete"
51969
51938
  },
51939
+ "deviceManager.renameLocation": {
51940
+ capName: "device-manager",
51941
+ capScope: "system",
51942
+ addonId: null,
51943
+ access: "create"
51944
+ },
51970
51945
  "deviceManager.runDeviceAction": {
51971
51946
  capName: "device-manager",
51972
51947
  capScope: "system",
@@ -53659,12 +53634,6 @@ var require_dist_CFTKQGym = __commonJS({
53659
53634
  addonId: null,
53660
53635
  access: "view"
53661
53636
  },
53662
- "pipelineAnalytics.getGroup": {
53663
- capName: "pipeline-analytics",
53664
- capScope: "device",
53665
- addonId: null,
53666
- access: "view"
53667
- },
53668
53637
  "pipelineAnalytics.getKeyEvents": {
53669
53638
  capName: "pipeline-analytics",
53670
53639
  capScope: "device",
@@ -53767,12 +53736,6 @@ var require_dist_CFTKQGym = __commonJS({
53767
53736
  addonId: null,
53768
53737
  access: "view"
53769
53738
  },
53770
- "pipelineAnalytics.listGroups": {
53771
- capName: "pipeline-analytics",
53772
- capScope: "device",
53773
- addonId: null,
53774
- access: "view"
53775
- },
53776
53739
  "pipelineAnalytics.listOpsLog": {
53777
53740
  capName: "pipeline-analytics",
53778
53741
  capScope: "device",
@@ -57395,11 +57358,6 @@ var require_dist_CFTKQGym = __commonJS({
57395
57358
  form: "single",
57396
57359
  optional: true
57397
57360
  }],
57398
- "pipelineAnalytics.getGroup": [{
57399
- name: "deviceId",
57400
- form: "single",
57401
- optional: false
57402
- }],
57403
57361
  "pipelineAnalytics.getKeyEvents": [{
57404
57362
  name: "deviceId",
57405
57363
  form: "single",
@@ -57465,11 +57423,6 @@ var require_dist_CFTKQGym = __commonJS({
57465
57423
  form: "single",
57466
57424
  optional: false
57467
57425
  }],
57468
- "pipelineAnalytics.listGroups": [{
57469
- name: "deviceIds",
57470
- form: "array",
57471
- optional: false
57472
- }],
57473
57426
  "pipelineAnalytics.listOpsLog": [{
57474
57427
  name: "deviceId",
57475
57428
  form: "single",
@@ -59640,7 +59593,7 @@ var require_alerts_addon = __commonJS({
59640
59593
  [Symbol.toStringTag]: { value: "Module" }
59641
59594
  });
59642
59595
  require_chunk_Cek0wNdY();
59643
- var require_dist10 = require_dist_CFTKQGym();
59596
+ var require_dist10 = require_dist_DCdtLXgx();
59644
59597
  function selectExpired(alerts, cutoffMs) {
59645
59598
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
59646
59599
  }
@@ -60459,7 +60412,7 @@ var require_console_logging = __commonJS({
60459
60412
  [Symbol.toStringTag]: { value: "Module" }
60460
60413
  });
60461
60414
  require_chunk_Cek0wNdY();
60462
- var require_dist10 = require_dist_CFTKQGym();
60415
+ var require_dist10 = require_dist_DCdtLXgx();
60463
60416
  var require_formatter = require_formatter_DqAKDlvN();
60464
60417
  var LEVEL_RANK = {
60465
60418
  debug: 0,
@@ -60553,7 +60506,7 @@ var require_core_blocks_addon = __commonJS({
60553
60506
  "use strict";
60554
60507
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
60555
60508
  var require_chunk = require_chunk_Cek0wNdY();
60556
- var require_dist10 = require_dist_CFTKQGym();
60509
+ var require_dist10 = require_dist_DCdtLXgx();
60557
60510
  var node_crypto = __require("crypto");
60558
60511
  var node_fs_promises = __require("fs/promises");
60559
60512
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -61450,11 +61403,11 @@ var require_core_blocks = __commonJS({
61450
61403
  }
61451
61404
  });
61452
61405
 
61453
- // ../system/dist/retired-settings-keys-dehyu2N3.js
61454
- var require_retired_settings_keys_dehyu2N3 = __commonJS({
61455
- "../system/dist/retired-settings-keys-dehyu2N3.js"(exports) {
61406
+ // ../system/dist/retired-settings-keys-DobfRRgq.js
61407
+ var require_retired_settings_keys_DobfRRgq = __commonJS({
61408
+ "../system/dist/retired-settings-keys-DobfRRgq.js"(exports) {
61456
61409
  "use strict";
61457
- var require_dist10 = require_dist_CFTKQGym();
61410
+ var require_dist10 = require_dist_DCdtLXgx();
61458
61411
  function settingsStoreIsAuthoritativeHere(env) {
61459
61412
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
61460
61413
  return raw === "" || raw === "hub";
@@ -63668,8 +63621,8 @@ var require_device_manager_addon = __commonJS({
63668
63621
  [Symbol.toStringTag]: { value: "Module" }
63669
63622
  });
63670
63623
  require_chunk_Cek0wNdY();
63671
- var require_dist10 = require_dist_CFTKQGym();
63672
- var require_retired_settings_keys = require_retired_settings_keys_dehyu2N3();
63624
+ var require_dist10 = require_dist_DCdtLXgx();
63625
+ var require_retired_settings_keys = require_retired_settings_keys_DobfRRgq();
63673
63626
  var node_crypto = __require("crypto");
63674
63627
  var _camstack_types_node = require_node();
63675
63628
  var JOB_HISTORY = 20;
@@ -66426,20 +66379,17 @@ var require_device_manager_addon = __commonJS({
66426
66379
  const cascaded = [];
66427
66380
  const failed = [];
66428
66381
  await pctx.metaStore.withMetaWriteLock(async () => {
66429
- const persisted = await pctx.metaStore.resolvePersistedById(deviceId);
66430
- if (!persisted) throw new Error(`[device-manager] setLocation: unknown device id=${deviceId}`);
66382
+ if (!await pctx.metaStore.resolvePersistedById(deviceId)) throw new Error(`[device-manager] setLocation: unknown device id=${deviceId}`);
66431
66383
  await pctx.metaStore.rows.patch(deviceId, { location });
66432
- if (persisted.meta.type === require_dist10.DeviceType.Container) {
66433
- const descendants = await collectDescendants(pctx.metaStore, deviceId);
66434
- for (const descendant of descendants) try {
66435
- await pctx.metaStore.rows.patch(descendant.id, { location });
66436
- cascaded.push(descendant.id);
66437
- } catch (err) {
66438
- failed.push({
66439
- id: descendant.id,
66440
- error: err
66441
- });
66442
- }
66384
+ const descendants = await collectDescendants(pctx.metaStore, deviceId);
66385
+ for (const descendant of descendants) try {
66386
+ await pctx.metaStore.rows.patch(descendant.id, { location });
66387
+ cascaded.push(descendant.id);
66388
+ } catch (err) {
66389
+ failed.push({
66390
+ id: descendant.id,
66391
+ error: err
66392
+ });
66443
66393
  }
66444
66394
  });
66445
66395
  pctx.host.ctx.eventBus.emit({
@@ -66470,7 +66420,7 @@ var require_device_manager_addon = __commonJS({
66470
66420
  value: location
66471
66421
  }
66472
66422
  });
66473
- if (cascaded.length > 0 || failed.length > 0) pctx.host.ctx.logger.info("setLocation: cascaded location to container descendants", {
66423
+ if (cascaded.length > 0 || failed.length > 0) pctx.host.ctx.logger.info("setLocation: cascaded location to descendants", {
66474
66424
  tags: { deviceId },
66475
66425
  meta: {
66476
66426
  location,
@@ -66786,6 +66736,54 @@ var require_device_manager_addon = __commonJS({
66786
66736
  await pctx.settings.writeAddonStore({ locations: [...current, trimmed] });
66787
66737
  });
66788
66738
  }
66739
+ async function renameLocation(pctx, input) {
66740
+ const from = input.from.trim();
66741
+ const to = input.to.trim();
66742
+ if (from.length === 0) throw new Error("[device-manager] renameLocation: `from` must be non-empty");
66743
+ if (to.length === 0) throw new Error("[device-manager] renameLocation: `to` must be non-empty");
66744
+ const fromKey = from.toLowerCase();
66745
+ const toKey = to.toLowerCase();
66746
+ await pctx.bindingsDeps.withAddonStoreWriteLock(async () => {
66747
+ const current = (await pctx.metaStore.readStore()).locations ?? [];
66748
+ if (!current.some((l) => l.trim().toLowerCase() === fromKey)) return;
66749
+ const kept = current.filter((l) => {
66750
+ const key = l.trim().toLowerCase();
66751
+ return key !== fromKey && key !== toKey;
66752
+ });
66753
+ await pctx.settings.writeAddonStore({ locations: [...kept, to] });
66754
+ });
66755
+ const moved = await pctx.metaStore.withMetaWriteLock(async () => {
66756
+ const out = [];
66757
+ for (const row of await pctx.metaStore.rows.listAll()) {
66758
+ const location = row.meta.location;
66759
+ if (typeof location !== "string") continue;
66760
+ if (location.trim().toLowerCase() !== fromKey) continue;
66761
+ await pctx.metaStore.rows.patch(row.meta.id, { location: to });
66762
+ out.push(row.meta.id);
66763
+ }
66764
+ return out;
66765
+ });
66766
+ for (const deviceId of moved) pctx.host.ctx.eventBus.emit({
66767
+ id: (0, node_crypto.randomUUID)(),
66768
+ timestamp: /* @__PURE__ */ new Date(),
66769
+ source: {
66770
+ type: "device",
66771
+ id: deviceId
66772
+ },
66773
+ category: require_dist10.EventCategory.DeviceMetaChanged,
66774
+ data: {
66775
+ deviceId,
66776
+ field: "location",
66777
+ value: to
66778
+ }
66779
+ });
66780
+ pctx.host.ctx.logger.info("renameLocation: room renamed", { meta: {
66781
+ from,
66782
+ to,
66783
+ moved: moved.length
66784
+ } });
66785
+ return { moved: moved.length };
66786
+ }
66789
66787
  async function removeLocation(pctx, input) {
66790
66788
  const trimmed = input.name.trim();
66791
66789
  if (trimmed.length === 0) return;
@@ -68279,6 +68277,7 @@ var require_device_manager_addon = __commonJS({
68279
68277
  listLocations: () => listLocations(pctx),
68280
68278
  addLocation: (input) => addLocation(pctx, input),
68281
68279
  removeLocation: (input) => removeLocation(pctx, input),
68280
+ renameLocation: (input) => renameLocation(pctx, input),
68282
68281
  listPersistedByAddon: (input) => listPersistedByAddon(pctx, input),
68283
68282
  listAll: (input) => listAll(pctx, input),
68284
68283
  getDevice: (input) => getDevice(pctx, input),
@@ -68485,7 +68484,7 @@ var require_hub_forwarder = __commonJS({
68485
68484
  [Symbol.toStringTag]: { value: "Module" }
68486
68485
  });
68487
68486
  require_chunk_Cek0wNdY();
68488
- var require_dist10 = require_dist_CFTKQGym();
68487
+ var require_dist10 = require_dist_DCdtLXgx();
68489
68488
  var require_formatter = require_formatter_DqAKDlvN();
68490
68489
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
68491
68490
  var HubForwarderDestination = class {
@@ -68622,7 +68621,7 @@ var require_liveness_monitor_addon = __commonJS({
68622
68621
  "use strict";
68623
68622
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
68624
68623
  require_chunk_Cek0wNdY();
68625
- var require_dist10 = require_dist_CFTKQGym();
68624
+ var require_dist10 = require_dist_DCdtLXgx();
68626
68625
  var NO_DEVICES = "liveness:no-devices";
68627
68626
  var ALL_OFFLINE = "liveness:all-devices-offline";
68628
68627
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -68812,7 +68811,7 @@ var require_local_auth_addon = __commonJS({
68812
68811
  [Symbol.toStringTag]: { value: "Module" }
68813
68812
  });
68814
68813
  var require_chunk = require_chunk_Cek0wNdY();
68815
- var require_dist10 = require_dist_CFTKQGym();
68814
+ var require_dist10 = require_dist_DCdtLXgx();
68816
68815
  var node_crypto = __require("crypto");
68817
68816
  node_crypto = require_chunk.__toESM(node_crypto);
68818
68817
  var crypto$1 = __require("crypto");
@@ -76625,7 +76624,7 @@ var require_loki_logging = __commonJS({
76625
76624
  [Symbol.toStringTag]: { value: "Module" }
76626
76625
  });
76627
76626
  require_chunk_Cek0wNdY();
76628
- var require_dist10 = require_dist_CFTKQGym();
76627
+ var require_dist10 = require_dist_DCdtLXgx();
76629
76628
  function sanitizeLabelName(raw) {
76630
76629
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
76631
76630
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -77190,7 +77189,7 @@ var require_native_metrics_addon = __commonJS({
77190
77189
  [Symbol.toStringTag]: { value: "Module" }
77191
77190
  });
77192
77191
  var require_chunk = require_chunk_Cek0wNdY();
77193
- var require_dist10 = require_dist_CFTKQGym();
77192
+ var require_dist10 = require_dist_DCdtLXgx();
77194
77193
  var node_fs_promises = __require("fs/promises");
77195
77194
  var node_child_process = __require("child_process");
77196
77195
  var node_util = __require("util");
@@ -79812,7 +79811,7 @@ var require_filesystem_storage_addon = __commonJS({
79812
79811
  [Symbol.toStringTag]: { value: "Module" }
79813
79812
  });
79814
79813
  var require_chunk = require_chunk_Cek0wNdY();
79815
- var require_dist10 = require_dist_CFTKQGym();
79814
+ var require_dist10 = require_dist_DCdtLXgx();
79816
79815
  var node_crypto = __require("crypto");
79817
79816
  var node_fs_promises = __require("fs/promises");
79818
79817
  var node_path = __require("path");
@@ -80928,8 +80927,8 @@ var require_sqlite_settings_addon = __commonJS({
80928
80927
  [Symbol.toStringTag]: { value: "Module" }
80929
80928
  });
80930
80929
  var require_chunk = require_chunk_Cek0wNdY();
80931
- var require_dist10 = require_dist_CFTKQGym();
80932
- var require_retired_settings_keys = require_retired_settings_keys_dehyu2N3();
80930
+ var require_dist10 = require_dist_DCdtLXgx();
80931
+ var require_retired_settings_keys = require_retired_settings_keys_DobfRRgq();
80933
80932
  var node_crypto = __require("crypto");
80934
80933
  var node_fs = __require("fs");
80935
80934
  var node_module = __require("module");
@@ -81199,15 +81198,28 @@ var require_sqlite_settings_addon = __commonJS({
81199
81198
  const wanted = sqliteMmapSizeFor(fileSizeBytes);
81200
81199
  return wanted > currentMmapBytes ? wanted : null;
81201
81200
  }
81202
- var RETIRED_COLLECTIONS = [{
81203
- collection: "devices",
81204
- owner: "integration-registry",
81205
- reason: "the device half of the integration-registry is deleted; the fleet is `device-manager:devices` and always was (0 rows here against 974 live devices)"
81206
- }, {
81207
- collection: "device_settings_kv",
81208
- owner: "integration-registry",
81209
- reason: "per-device settings of a device table that never had a row; the live per-camera store is the device-manager row plus `addon-device-settings`"
81210
- }];
81201
+ var RETIRED_COLLECTIONS = [
81202
+ {
81203
+ collection: "devices",
81204
+ owner: "integration-registry",
81205
+ reason: "the device half of the integration-registry is deleted; the fleet is `device-manager:devices` and always was (0 rows here against 974 live devices)"
81206
+ },
81207
+ {
81208
+ collection: "device_settings_kv",
81209
+ owner: "integration-registry",
81210
+ reason: "per-device settings of a device table that never had a row; the live per-camera store is the device-manager row plus `addon-device-settings`"
81211
+ },
81212
+ {
81213
+ collection: "pipeline-analytics:track-groups",
81214
+ owner: "pipeline-analytics",
81215
+ reason: "the co-moving group entity is deleted (operator decision 2026-09-01, after the 2026-08-24 kill switch); nothing declares, writes or reads it"
81216
+ },
81217
+ {
81218
+ collection: "pipeline-analytics:track-group-members",
81219
+ owner: "pipeline-analytics",
81220
+ reason: "membership rows of the deleted group entity; the track cascade that used to carry them away no longer has a group leg"
81221
+ }
81222
+ ];
81211
81223
  function retiredCollectionStoreOf(backend) {
81212
81224
  return { async drop(collection) {
81213
81225
  return backend.dropRetiredTable(collection);
@@ -83338,7 +83350,7 @@ var require_storage_orchestrator_addon = __commonJS({
83338
83350
  [Symbol.toStringTag]: { value: "Module" }
83339
83351
  });
83340
83352
  var require_chunk = require_chunk_Cek0wNdY();
83341
- var require_dist10 = require_dist_CFTKQGym();
83353
+ var require_dist10 = require_dist_DCdtLXgx();
83342
83354
  var zod = require_zod();
83343
83355
  var node_crypto = __require("crypto");
83344
83356
  var node_fs_promises = __require("fs/promises");
@@ -86214,7 +86226,7 @@ var require_system_config_addon = __commonJS({
86214
86226
  [Symbol.toStringTag]: { value: "Module" }
86215
86227
  });
86216
86228
  require_chunk_Cek0wNdY();
86217
- var require_dist10 = require_dist_CFTKQGym();
86229
+ var require_dist10 = require_dist_DCdtLXgx();
86218
86230
  var SECTION_TITLES = {
86219
86231
  server: "Server",
86220
86232
  auth: "Authentication"
@@ -104275,7 +104287,7 @@ var require_winston_logging = __commonJS({
104275
104287
  [Symbol.toStringTag]: { value: "Module" }
104276
104288
  });
104277
104289
  var require_chunk = require_chunk_Cek0wNdY();
104278
- var require_dist10 = require_dist_CFTKQGym();
104290
+ var require_dist10 = require_dist_DCdtLXgx();
104279
104291
  var require_formatter = require_formatter_DqAKDlvN();
104280
104292
  var node_path = __require("path");
104281
104293
  node_path = require_chunk.__toESM(node_path);
@@ -106218,9 +106230,9 @@ var require_event_category_BaEgqJNv = __commonJS({
106218
106230
  }
106219
106231
  });
106220
106232
 
106221
- // ../types/dist/sleep-CqVyhcl-.js
106222
- var require_sleep_CqVyhcl = __commonJS({
106223
- "../types/dist/sleep-CqVyhcl-.js"(exports) {
106233
+ // ../types/dist/sleep-DkBAyPva.js
106234
+ var require_sleep_DkBAyPva = __commonJS({
106235
+ "../types/dist/sleep-DkBAyPva.js"(exports) {
106224
106236
  "use strict";
106225
106237
  var require_event_category = require_event_category_BaEgqJNv();
106226
106238
  var zod = require_zod();
@@ -108893,8 +108905,6 @@ var require_sleep_CqVyhcl = __commonJS({
108893
108905
  getTrack: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getTrack", "query", input),
108894
108906
  listTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listTracks", "query", input),
108895
108907
  listRecentTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listRecentTracks", "query", input),
108896
- listGroups: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "listGroups", "query", input),
108897
- getGroup: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getGroup", "query", input),
108898
108908
  clearTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "clearTracks", "mutation", input),
108899
108909
  getMotionEvents: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getMotionEvents", "query", input),
108900
108910
  getObjectEvents: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getObjectEvents", "query", input),
@@ -109893,7 +109903,7 @@ var require_addon = __commonJS({
109893
109903
  "use strict";
109894
109904
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
109895
109905
  var require_event_category = require_event_category_BaEgqJNv();
109896
- var require_sleep = require_sleep_CqVyhcl();
109906
+ var require_sleep = require_sleep_DkBAyPva();
109897
109907
  var require_err_msg = require_err_msg_COpsHMw2();
109898
109908
  var CAP_INPUT_DEFAULTS = Object.freeze({
109899
109909
  "addons": { "getLogs": { "limit": 100 } },
@@ -110007,7 +110017,6 @@ var require_addon = __commonJS({
110007
110017
  "getMotionEvents": { "limit": 1e3 },
110008
110018
  "getObjectEvents": { "limit": 1e3 },
110009
110019
  "getSensorEvents": { "limit": 1e3 },
110010
- "listGroups": { "limit": 40 },
110011
110020
  "listRecentTracks": { "limit": 200 },
110012
110021
  "reclaimDebugMedia": { "mode": "report" },
110013
110022
  "searchObjectEvents": {
@@ -116777,12 +116786,12 @@ var require_dist2 = __commonJS({
116777
116786
  }
116778
116787
  });
116779
116788
 
116780
- // ../system/dist/manifest-system-deps-BIxY1Y5e.js
116781
- var require_manifest_system_deps_BIxY1Y5e = __commonJS({
116782
- "../system/dist/manifest-system-deps-BIxY1Y5e.js"(exports) {
116789
+ // ../system/dist/manifest-system-deps-Bi7oyXcN.js
116790
+ var require_manifest_system_deps_Bi7oyXcN = __commonJS({
116791
+ "../system/dist/manifest-system-deps-Bi7oyXcN.js"(exports) {
116783
116792
  "use strict";
116784
116793
  var require_chunk = require_chunk_Cek0wNdY();
116785
- require_dist_CFTKQGym();
116794
+ require_dist_DCdtLXgx();
116786
116795
  var node_crypto = __require("crypto");
116787
116796
  node_crypto = require_chunk.__toESM(node_crypto);
116788
116797
  var _camstack_types_node = require_node();
@@ -128930,7 +128939,7 @@ var require_dist3 = __commonJS({
128930
128939
  "use strict";
128931
128940
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
128932
128941
  var require_chunk = require_chunk_Cek0wNdY();
128933
- var require_dist10 = require_dist_CFTKQGym();
128942
+ var require_dist10 = require_dist_DCdtLXgx();
128934
128943
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
128935
128944
  require_alerts();
128936
128945
  var require_formatter = require_formatter_DqAKDlvN();
@@ -128956,7 +128965,7 @@ var require_dist3 = __commonJS({
128956
128965
  var require_builtins_winston_logging_index = require_winston_logging();
128957
128966
  var require_file_data_plane = require_file_data_plane_DO8KbxCe();
128958
128967
  var require_tls$1 = require_tls_BxQlomxd();
128959
- var require_manifest_system_deps = require_manifest_system_deps_BIxY1Y5e();
128968
+ var require_manifest_system_deps = require_manifest_system_deps_Bi7oyXcN();
128960
128969
  var require_resource_monitor = require_resource_monitor_CdnzxBLP();
128961
128970
  var require_custom_action_registry = require_custom_action_registry_jY0NOZK8();
128962
128971
  var zod = require_zod();
@@ -209798,7 +209807,7 @@ var require_dist4 = __commonJS({
209798
209807
  "use strict";
209799
209808
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
209800
209809
  var require_event_category = require_event_category_BaEgqJNv();
209801
- var require_sleep = require_sleep_CqVyhcl();
209810
+ var require_sleep = require_sleep_DkBAyPva();
209802
209811
  var require_canonical_hash = require_canonical_hash_DNV8S5ET();
209803
209812
  var require_enums2 = require_enums();
209804
209813
  var require_err_msg = require_err_msg_COpsHMw2();
@@ -217515,6 +217524,27 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
217515
217524
  kind: "mutation",
217516
217525
  auth: "admin"
217517
217526
  }),
217527
+ /** Rename a room: replace the label in the registry IN PLACE and move
217528
+ * every device that carried it, as ONE server operation.
217529
+ *
217530
+ * The admin UI used to do this as `addLocation(to)` → N ×
217531
+ * `setLocation(device, to)` → `removeLocation(from)` from the browser.
217532
+ * Nothing bound those three together, so a closed tab left the fleet
217533
+ * split across two rooms — one of which the operator believed was gone.
217534
+ *
217535
+ * `from` is matched the way the registry matches everywhere else
217536
+ * (trimmed, case-insensitive) and need NOT be registered: the registry is
217537
+ * a suggestion list, and the devices that most need a rename are exactly
217538
+ * the ones carrying a label nobody registered. `to` renames onto an
217539
+ * existing room by MERGING into it, leaving no duplicate label. An empty
217540
+ * `to` throws before anything is written. */
217541
+ renameLocation: require_sleep.method(zod.z.object({
217542
+ from: zod.z.string(),
217543
+ to: zod.z.string()
217544
+ }), zod.z.object({ moved: zod.z.number() }), {
217545
+ kind: "mutation",
217546
+ auth: "admin"
217547
+ }),
217518
217548
  /** Soft-disable / re-enable the device. Drivers consult
217519
217549
  * `BaseDevice.disabled` to gate lifecycle hooks. */
217520
217550
  setDisabled: require_sleep.method(zod.z.object({
@@ -223949,46 +223979,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
223949
223979
  /** Cursor for the next page, or null when this page is the last. */
223950
223980
  nextCursor: zod.z.string().nullable()
223951
223981
  });
223952
- var LIST_GROUPS_DEFAULT_LIMIT = 40;
223953
- var LIST_GROUPS_MAX_LIMIT = 100;
223954
- var AnalyticsGroupRecordSchema = zod.z.object({
223955
- id: zod.z.string(),
223956
- deviceId: zod.z.number().int(),
223957
- openedAt: zod.z.number().int(),
223958
- closedAt: zod.z.number().int(),
223959
- timestamp: zod.z.number().int(),
223960
- memberCount: zod.z.number().int(),
223961
- memberTrackIds: zod.z.array(zod.z.string()).readonly(),
223962
- className: zod.z.string(),
223963
- classes: zod.z.array(zod.z.string()).readonly(),
223964
- /** Relative event-media path, or null when the group has no picture yet. */
223965
- mediaUrl: zod.z.string().nullable(),
223966
- singleton: zod.z.boolean()
223967
- });
223968
- var AnalyticsGroupMemberSchema = zod.z.object({
223969
- trackId: zod.z.string(),
223970
- deviceId: zod.z.number().int(),
223971
- className: zod.z.string(),
223972
- firstSeen: zod.z.number().int(),
223973
- lastSeen: zod.z.number().int(),
223974
- mediaUrl: zod.z.string().nullable()
223975
- });
223976
- var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: zod.z.array(AnalyticsGroupMemberSchema).readonly() });
223977
- var ListGroupsQueryInput = zod.z.object({
223978
- /** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
223979
- deviceIds: zod.z.array(zod.z.number()),
223980
- /** Window lower bound on `closedAt` (inclusive). */
223981
- since: zod.z.number().optional(),
223982
- /** Window upper bound on `openedAt` (inclusive). */
223983
- until: zod.z.number().optional(),
223984
- limit: zod.z.number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
223985
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
223986
- cursor: zod.z.string().optional()
223987
- });
223988
- var ListGroupsPageSchema = zod.z.object({
223989
- groups: zod.z.array(AnalyticsGroupRecordSchema).readonly(),
223990
- nextCursor: zod.z.string().nullable()
223991
- });
223992
223982
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
223993
223983
  var KEY_EVENTS_MAX_LIMIT = 200;
223994
223984
  var KeyEventQueryInput = zod.z.object({
@@ -224081,9 +224071,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
224081
224071
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
224082
224072
  plates: zod.z.number().int(),
224083
224073
  /** Per-track CLIP search vectors removed (best-effort). */
224084
- embeddings: zod.z.number().int(),
224085
- /** Group membership + group rows removed with their last member (best-effort). */
224086
- groups: zod.z.number().int()
224074
+ embeddings: zod.z.number().int()
224087
224075
  });
224088
224076
  var DiskReconcileCountsSchema = zod.z.object({
224089
224077
  mediaDropped: zod.z.number().int(),
@@ -224296,16 +224284,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
224296
224284
  * are not included (same contract as `listTracks`).
224297
224285
  */
224298
224286
  listRecentTracks: require_sleep.method(RecentTracksQueryInput, RecentTracksPageSchema),
224299
- /**
224300
- * Batched co-moving group listing — the Groups feed. Same merge/cursor
224301
- * contract as {@link listRecentTracks}. A group is a sealed partition of
224302
- * one session; `getGroup` is the detail with members.
224303
- */
224304
- listGroups: require_sleep.method(ListGroupsQueryInput, ListGroupsPageSchema),
224305
- getGroup: require_sleep.method(zod.z.object({
224306
- deviceId: zod.z.number(),
224307
- groupId: zod.z.string().min(1)
224308
- }), AnalyticsGroupDetailSchema.nullable()),
224309
224287
  clearTracks: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
224310
224288
  kind: "mutation",
224311
224289
  auth: "admin"
@@ -241929,6 +241907,12 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
241929
241907
  addonId: null,
241930
241908
  access: "delete"
241931
241909
  },
241910
+ "deviceManager.renameLocation": {
241911
+ capName: "device-manager",
241912
+ capScope: "system",
241913
+ addonId: null,
241914
+ access: "create"
241915
+ },
241932
241916
  "deviceManager.runDeviceAction": {
241933
241917
  capName: "device-manager",
241934
241918
  capScope: "system",
@@ -243621,12 +243605,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
243621
243605
  addonId: null,
243622
243606
  access: "view"
243623
243607
  },
243624
- "pipelineAnalytics.getGroup": {
243625
- capName: "pipeline-analytics",
243626
- capScope: "device",
243627
- addonId: null,
243628
- access: "view"
243629
- },
243630
243608
  "pipelineAnalytics.getKeyEvents": {
243631
243609
  capName: "pipeline-analytics",
243632
243610
  capScope: "device",
@@ -243729,12 +243707,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
243729
243707
  addonId: null,
243730
243708
  access: "view"
243731
243709
  },
243732
- "pipelineAnalytics.listGroups": {
243733
- capName: "pipeline-analytics",
243734
- capScope: "device",
243735
- addonId: null,
243736
- access: "view"
243737
- },
243738
243710
  "pipelineAnalytics.listOpsLog": {
243739
243711
  capName: "pipeline-analytics",
243740
243712
  capScope: "device",
@@ -247615,11 +247587,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
247615
247587
  form: "single",
247616
247588
  optional: true
247617
247589
  }],
247618
- "pipelineAnalytics.getGroup": [{
247619
- name: "deviceId",
247620
- form: "single",
247621
- optional: false
247622
- }],
247623
247590
  "pipelineAnalytics.getKeyEvents": [{
247624
247591
  name: "deviceId",
247625
247592
  form: "single",
@@ -247685,11 +247652,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
247685
247652
  form: "single",
247686
247653
  optional: false
247687
247654
  }],
247688
- "pipelineAnalytics.listGroups": [{
247689
- name: "deviceIds",
247690
- form: "array",
247691
- optional: false
247692
- }],
247693
247655
  "pipelineAnalytics.listOpsLog": [{
247694
247656
  name: "deviceId",
247695
247657
  form: "single",
@@ -249170,6 +249132,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249170
249132
  listLocations: (input) => dispatch("deviceManager", "listLocations", "query", input),
249171
249133
  addLocation: (input) => dispatch("deviceManager", "addLocation", "mutation", input),
249172
249134
  removeLocation: (input) => dispatch("deviceManager", "removeLocation", "mutation", input),
249135
+ renameLocation: (input) => dispatch("deviceManager", "renameLocation", "mutation", input),
249173
249136
  listPersistedByAddon: (input) => dispatch("deviceManager", "listPersistedByAddon", "query", input),
249174
249137
  listAll: (input) => dispatch("deviceManager", "listAll", "query", input),
249175
249138
  getChildren: (input) => dispatch("deviceManager", "getChildren", "query", input),
@@ -252319,9 +252282,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
252319
252282
  exports.AlertSourceSchema = AlertSourceSchema;
252320
252283
  exports.AlertStatusSchema = AlertStatusSchema;
252321
252284
  exports.AmbientLightSensorStatusSchema = AmbientLightSensorStatusSchema;
252322
- exports.AnalyticsGroupDetailSchema = AnalyticsGroupDetailSchema;
252323
- exports.AnalyticsGroupMemberSchema = AnalyticsGroupMemberSchema;
252324
- exports.AnalyticsGroupRecordSchema = AnalyticsGroupRecordSchema;
252325
252285
  exports.ApiKeyRecordSchema = ApiKeyRecordSchema;
252326
252286
  exports.ApiKeySummarySchema = ApiKeySummarySchema;
252327
252287
  exports.ArchiveEntrySchema = ArchiveEntrySchema;
@@ -252686,8 +252646,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
252686
252646
  exports.LedgerWalkSkipReasonSchema = LedgerWalkSkipReasonSchema;
252687
252647
  exports.LinkedDeviceSchema = LinkedDeviceSchema;
252688
252648
  exports.LinkedDevicesModeSchema = LinkedDevicesModeSchema;
252689
- exports.ListGroupsPageSchema = ListGroupsPageSchema;
252690
- exports.ListGroupsQueryInput = ListGroupsQueryInput;
252691
252649
  exports.LlmDefaultSchema = LlmDefaultSchema;
252692
252650
  exports.LlmDefaultSelectorSchema = LlmDefaultSelectorSchema;
252693
252651
  exports.LlmDownloadProgressSchema = LlmDownloadProgressSchema;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.71",
3
+ "version": "1.2.72",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",