camstack 1.2.71 → 1.2.73

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({
@@ -23696,6 +23717,8 @@ var NcSystemEventKindSchema = external_exports.enum([
23696
23717
  "device-offline",
23697
23718
  "device-disabled",
23698
23719
  "device-enabled",
23720
+ "device-battery-low",
23721
+ "device-battery-normal",
23699
23722
  "stream-online",
23700
23723
  "stream-offline",
23701
23724
  "node-online",
@@ -26401,46 +26424,6 @@ var RecentTracksPageSchema = external_exports.object({
26401
26424
  /** Cursor for the next page, or null when this page is the last. */
26402
26425
  nextCursor: external_exports.string().nullable()
26403
26426
  });
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
26427
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
26445
26428
  var KEY_EVENTS_MAX_LIMIT = 200;
26446
26429
  var KeyEventQueryInput = external_exports.object({
@@ -26533,9 +26516,7 @@ var TrackCascadeCountsSchema = external_exports.object({
26533
26516
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
26534
26517
  plates: external_exports.number().int(),
26535
26518
  /** 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()
26519
+ embeddings: external_exports.number().int()
26539
26520
  });
26540
26521
  var DiskReconcileCountsSchema = external_exports.object({
26541
26522
  mediaDropped: external_exports.number().int(),
@@ -26748,16 +26729,6 @@ var pipelineAnalyticsCapability = {
26748
26729
  * are not included (same contract as `listTracks`).
26749
26730
  */
26750
26731
  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
26732
  clearTracks: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), {
26762
26733
  kind: "mutation",
26763
26734
  auth: "admin"
@@ -40651,6 +40622,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
40651
40622
  addonId: null,
40652
40623
  access: "delete"
40653
40624
  },
40625
+ "deviceManager.renameLocation": {
40626
+ capName: "device-manager",
40627
+ capScope: "system",
40628
+ addonId: null,
40629
+ access: "create"
40630
+ },
40654
40631
  "deviceManager.runDeviceAction": {
40655
40632
  capName: "device-manager",
40656
40633
  capScope: "system",
@@ -42343,12 +42320,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
42343
42320
  addonId: null,
42344
42321
  access: "view"
42345
42322
  },
42346
- "pipelineAnalytics.getGroup": {
42347
- capName: "pipeline-analytics",
42348
- capScope: "device",
42349
- addonId: null,
42350
- access: "view"
42351
- },
42352
42323
  "pipelineAnalytics.getKeyEvents": {
42353
42324
  capName: "pipeline-analytics",
42354
42325
  capScope: "device",
@@ -42451,12 +42422,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
42451
42422
  addonId: null,
42452
42423
  access: "view"
42453
42424
  },
42454
- "pipelineAnalytics.listGroups": {
42455
- capName: "pipeline-analytics",
42456
- capScope: "device",
42457
- addonId: null,
42458
- access: "view"
42459
- },
42460
42425
  "pipelineAnalytics.listOpsLog": {
42461
42426
  capName: "pipeline-analytics",
42462
42427
  capScope: "device",
@@ -46079,11 +46044,6 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46079
46044
  form: "single",
46080
46045
  optional: true
46081
46046
  }],
46082
- "pipelineAnalytics.getGroup": [{
46083
- name: "deviceId",
46084
- form: "single",
46085
- optional: false
46086
- }],
46087
46047
  "pipelineAnalytics.getKeyEvents": [{
46088
46048
  name: "deviceId",
46089
46049
  form: "single",
@@ -46149,11 +46109,6 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46149
46109
  form: "single",
46150
46110
  optional: false
46151
46111
  }],
46152
- "pipelineAnalytics.listGroups": [{
46153
- name: "deviceIds",
46154
- form: "array",
46155
- optional: false
46156
- }],
46157
46112
  "pipelineAnalytics.listOpsLog": [{
46158
46113
  name: "deviceId",
46159
46114
  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-LRCTXS6S.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-NDZBIQHT.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-NDZBIQHT.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-GSZPRHPC.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-LRCTXS6S.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-D6kBG4fg.js
23637
+ var require_dist_D6kBG4fg = __commonJS({
23638
+ "../system/dist/dist-D6kBG4fg.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({
@@ -34392,6 +34413,8 @@ var require_dist_CFTKQGym = __commonJS({
34392
34413
  "device-offline",
34393
34414
  "device-disabled",
34394
34415
  "device-enabled",
34416
+ "device-battery-low",
34417
+ "device-battery-normal",
34395
34418
  "stream-online",
34396
34419
  "stream-offline",
34397
34420
  "node-online",
@@ -37096,46 +37119,6 @@ var require_dist_CFTKQGym = __commonJS({
37096
37119
  /** Cursor for the next page, or null when this page is the last. */
37097
37120
  nextCursor: zod.z.string().nullable()
37098
37121
  });
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
37122
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
37140
37123
  var KEY_EVENTS_MAX_LIMIT = 200;
37141
37124
  var KeyEventQueryInput = zod.z.object({
@@ -37228,9 +37211,7 @@ var require_dist_CFTKQGym = __commonJS({
37228
37211
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
37229
37212
  plates: zod.z.number().int(),
37230
37213
  /** 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()
37214
+ embeddings: zod.z.number().int()
37234
37215
  });
37235
37216
  var DiskReconcileCountsSchema = zod.z.object({
37236
37217
  mediaDropped: zod.z.number().int(),
@@ -37443,16 +37424,6 @@ var require_dist_CFTKQGym = __commonJS({
37443
37424
  * are not included (same contract as `listTracks`).
37444
37425
  */
37445
37426
  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
37427
  clearTracks: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
37457
37428
  kind: "mutation",
37458
37429
  auth: "admin"
@@ -51967,6 +51938,12 @@ var require_dist_CFTKQGym = __commonJS({
51967
51938
  addonId: null,
51968
51939
  access: "delete"
51969
51940
  },
51941
+ "deviceManager.renameLocation": {
51942
+ capName: "device-manager",
51943
+ capScope: "system",
51944
+ addonId: null,
51945
+ access: "create"
51946
+ },
51970
51947
  "deviceManager.runDeviceAction": {
51971
51948
  capName: "device-manager",
51972
51949
  capScope: "system",
@@ -53659,12 +53636,6 @@ var require_dist_CFTKQGym = __commonJS({
53659
53636
  addonId: null,
53660
53637
  access: "view"
53661
53638
  },
53662
- "pipelineAnalytics.getGroup": {
53663
- capName: "pipeline-analytics",
53664
- capScope: "device",
53665
- addonId: null,
53666
- access: "view"
53667
- },
53668
53639
  "pipelineAnalytics.getKeyEvents": {
53669
53640
  capName: "pipeline-analytics",
53670
53641
  capScope: "device",
@@ -53767,12 +53738,6 @@ var require_dist_CFTKQGym = __commonJS({
53767
53738
  addonId: null,
53768
53739
  access: "view"
53769
53740
  },
53770
- "pipelineAnalytics.listGroups": {
53771
- capName: "pipeline-analytics",
53772
- capScope: "device",
53773
- addonId: null,
53774
- access: "view"
53775
- },
53776
53741
  "pipelineAnalytics.listOpsLog": {
53777
53742
  capName: "pipeline-analytics",
53778
53743
  capScope: "device",
@@ -57395,11 +57360,6 @@ var require_dist_CFTKQGym = __commonJS({
57395
57360
  form: "single",
57396
57361
  optional: true
57397
57362
  }],
57398
- "pipelineAnalytics.getGroup": [{
57399
- name: "deviceId",
57400
- form: "single",
57401
- optional: false
57402
- }],
57403
57363
  "pipelineAnalytics.getKeyEvents": [{
57404
57364
  name: "deviceId",
57405
57365
  form: "single",
@@ -57465,11 +57425,6 @@ var require_dist_CFTKQGym = __commonJS({
57465
57425
  form: "single",
57466
57426
  optional: false
57467
57427
  }],
57468
- "pipelineAnalytics.listGroups": [{
57469
- name: "deviceIds",
57470
- form: "array",
57471
- optional: false
57472
- }],
57473
57428
  "pipelineAnalytics.listOpsLog": [{
57474
57429
  name: "deviceId",
57475
57430
  form: "single",
@@ -59640,7 +59595,7 @@ var require_alerts_addon = __commonJS({
59640
59595
  [Symbol.toStringTag]: { value: "Module" }
59641
59596
  });
59642
59597
  require_chunk_Cek0wNdY();
59643
- var require_dist10 = require_dist_CFTKQGym();
59598
+ var require_dist10 = require_dist_D6kBG4fg();
59644
59599
  function selectExpired(alerts, cutoffMs) {
59645
59600
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
59646
59601
  }
@@ -60459,7 +60414,7 @@ var require_console_logging = __commonJS({
60459
60414
  [Symbol.toStringTag]: { value: "Module" }
60460
60415
  });
60461
60416
  require_chunk_Cek0wNdY();
60462
- var require_dist10 = require_dist_CFTKQGym();
60417
+ var require_dist10 = require_dist_D6kBG4fg();
60463
60418
  var require_formatter = require_formatter_DqAKDlvN();
60464
60419
  var LEVEL_RANK = {
60465
60420
  debug: 0,
@@ -60553,7 +60508,7 @@ var require_core_blocks_addon = __commonJS({
60553
60508
  "use strict";
60554
60509
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
60555
60510
  var require_chunk = require_chunk_Cek0wNdY();
60556
- var require_dist10 = require_dist_CFTKQGym();
60511
+ var require_dist10 = require_dist_D6kBG4fg();
60557
60512
  var node_crypto = __require("crypto");
60558
60513
  var node_fs_promises = __require("fs/promises");
60559
60514
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -61450,11 +61405,11 @@ var require_core_blocks = __commonJS({
61450
61405
  }
61451
61406
  });
61452
61407
 
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) {
61408
+ // ../system/dist/retired-settings-keys-BywIz4dZ.js
61409
+ var require_retired_settings_keys_BywIz4dZ = __commonJS({
61410
+ "../system/dist/retired-settings-keys-BywIz4dZ.js"(exports) {
61456
61411
  "use strict";
61457
- var require_dist10 = require_dist_CFTKQGym();
61412
+ var require_dist10 = require_dist_D6kBG4fg();
61458
61413
  function settingsStoreIsAuthoritativeHere(env) {
61459
61414
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
61460
61415
  return raw === "" || raw === "hub";
@@ -63668,8 +63623,8 @@ var require_device_manager_addon = __commonJS({
63668
63623
  [Symbol.toStringTag]: { value: "Module" }
63669
63624
  });
63670
63625
  require_chunk_Cek0wNdY();
63671
- var require_dist10 = require_dist_CFTKQGym();
63672
- var require_retired_settings_keys = require_retired_settings_keys_dehyu2N3();
63626
+ var require_dist10 = require_dist_D6kBG4fg();
63627
+ var require_retired_settings_keys = require_retired_settings_keys_BywIz4dZ();
63673
63628
  var node_crypto = __require("crypto");
63674
63629
  var _camstack_types_node = require_node();
63675
63630
  var JOB_HISTORY = 20;
@@ -66426,20 +66381,17 @@ var require_device_manager_addon = __commonJS({
66426
66381
  const cascaded = [];
66427
66382
  const failed = [];
66428
66383
  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}`);
66384
+ if (!await pctx.metaStore.resolvePersistedById(deviceId)) throw new Error(`[device-manager] setLocation: unknown device id=${deviceId}`);
66431
66385
  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
- }
66386
+ const descendants = await collectDescendants(pctx.metaStore, deviceId);
66387
+ for (const descendant of descendants) try {
66388
+ await pctx.metaStore.rows.patch(descendant.id, { location });
66389
+ cascaded.push(descendant.id);
66390
+ } catch (err) {
66391
+ failed.push({
66392
+ id: descendant.id,
66393
+ error: err
66394
+ });
66443
66395
  }
66444
66396
  });
66445
66397
  pctx.host.ctx.eventBus.emit({
@@ -66470,7 +66422,7 @@ var require_device_manager_addon = __commonJS({
66470
66422
  value: location
66471
66423
  }
66472
66424
  });
66473
- if (cascaded.length > 0 || failed.length > 0) pctx.host.ctx.logger.info("setLocation: cascaded location to container descendants", {
66425
+ if (cascaded.length > 0 || failed.length > 0) pctx.host.ctx.logger.info("setLocation: cascaded location to descendants", {
66474
66426
  tags: { deviceId },
66475
66427
  meta: {
66476
66428
  location,
@@ -66786,6 +66738,54 @@ var require_device_manager_addon = __commonJS({
66786
66738
  await pctx.settings.writeAddonStore({ locations: [...current, trimmed] });
66787
66739
  });
66788
66740
  }
66741
+ async function renameLocation(pctx, input) {
66742
+ const from = input.from.trim();
66743
+ const to = input.to.trim();
66744
+ if (from.length === 0) throw new Error("[device-manager] renameLocation: `from` must be non-empty");
66745
+ if (to.length === 0) throw new Error("[device-manager] renameLocation: `to` must be non-empty");
66746
+ const fromKey = from.toLowerCase();
66747
+ const toKey = to.toLowerCase();
66748
+ await pctx.bindingsDeps.withAddonStoreWriteLock(async () => {
66749
+ const current = (await pctx.metaStore.readStore()).locations ?? [];
66750
+ if (!current.some((l) => l.trim().toLowerCase() === fromKey)) return;
66751
+ const kept = current.filter((l) => {
66752
+ const key = l.trim().toLowerCase();
66753
+ return key !== fromKey && key !== toKey;
66754
+ });
66755
+ await pctx.settings.writeAddonStore({ locations: [...kept, to] });
66756
+ });
66757
+ const moved = await pctx.metaStore.withMetaWriteLock(async () => {
66758
+ const out = [];
66759
+ for (const row of await pctx.metaStore.rows.listAll()) {
66760
+ const location = row.meta.location;
66761
+ if (typeof location !== "string") continue;
66762
+ if (location.trim().toLowerCase() !== fromKey) continue;
66763
+ await pctx.metaStore.rows.patch(row.meta.id, { location: to });
66764
+ out.push(row.meta.id);
66765
+ }
66766
+ return out;
66767
+ });
66768
+ for (const deviceId of moved) pctx.host.ctx.eventBus.emit({
66769
+ id: (0, node_crypto.randomUUID)(),
66770
+ timestamp: /* @__PURE__ */ new Date(),
66771
+ source: {
66772
+ type: "device",
66773
+ id: deviceId
66774
+ },
66775
+ category: require_dist10.EventCategory.DeviceMetaChanged,
66776
+ data: {
66777
+ deviceId,
66778
+ field: "location",
66779
+ value: to
66780
+ }
66781
+ });
66782
+ pctx.host.ctx.logger.info("renameLocation: room renamed", { meta: {
66783
+ from,
66784
+ to,
66785
+ moved: moved.length
66786
+ } });
66787
+ return { moved: moved.length };
66788
+ }
66789
66789
  async function removeLocation(pctx, input) {
66790
66790
  const trimmed = input.name.trim();
66791
66791
  if (trimmed.length === 0) return;
@@ -68279,6 +68279,7 @@ var require_device_manager_addon = __commonJS({
68279
68279
  listLocations: () => listLocations(pctx),
68280
68280
  addLocation: (input) => addLocation(pctx, input),
68281
68281
  removeLocation: (input) => removeLocation(pctx, input),
68282
+ renameLocation: (input) => renameLocation(pctx, input),
68282
68283
  listPersistedByAddon: (input) => listPersistedByAddon(pctx, input),
68283
68284
  listAll: (input) => listAll(pctx, input),
68284
68285
  getDevice: (input) => getDevice(pctx, input),
@@ -68485,7 +68486,7 @@ var require_hub_forwarder = __commonJS({
68485
68486
  [Symbol.toStringTag]: { value: "Module" }
68486
68487
  });
68487
68488
  require_chunk_Cek0wNdY();
68488
- var require_dist10 = require_dist_CFTKQGym();
68489
+ var require_dist10 = require_dist_D6kBG4fg();
68489
68490
  var require_formatter = require_formatter_DqAKDlvN();
68490
68491
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
68491
68492
  var HubForwarderDestination = class {
@@ -68622,7 +68623,7 @@ var require_liveness_monitor_addon = __commonJS({
68622
68623
  "use strict";
68623
68624
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
68624
68625
  require_chunk_Cek0wNdY();
68625
- var require_dist10 = require_dist_CFTKQGym();
68626
+ var require_dist10 = require_dist_D6kBG4fg();
68626
68627
  var NO_DEVICES = "liveness:no-devices";
68627
68628
  var ALL_OFFLINE = "liveness:all-devices-offline";
68628
68629
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -68812,7 +68813,7 @@ var require_local_auth_addon = __commonJS({
68812
68813
  [Symbol.toStringTag]: { value: "Module" }
68813
68814
  });
68814
68815
  var require_chunk = require_chunk_Cek0wNdY();
68815
- var require_dist10 = require_dist_CFTKQGym();
68816
+ var require_dist10 = require_dist_D6kBG4fg();
68816
68817
  var node_crypto = __require("crypto");
68817
68818
  node_crypto = require_chunk.__toESM(node_crypto);
68818
68819
  var crypto$1 = __require("crypto");
@@ -76625,7 +76626,7 @@ var require_loki_logging = __commonJS({
76625
76626
  [Symbol.toStringTag]: { value: "Module" }
76626
76627
  });
76627
76628
  require_chunk_Cek0wNdY();
76628
- var require_dist10 = require_dist_CFTKQGym();
76629
+ var require_dist10 = require_dist_D6kBG4fg();
76629
76630
  function sanitizeLabelName(raw) {
76630
76631
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
76631
76632
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -77190,7 +77191,7 @@ var require_native_metrics_addon = __commonJS({
77190
77191
  [Symbol.toStringTag]: { value: "Module" }
77191
77192
  });
77192
77193
  var require_chunk = require_chunk_Cek0wNdY();
77193
- var require_dist10 = require_dist_CFTKQGym();
77194
+ var require_dist10 = require_dist_D6kBG4fg();
77194
77195
  var node_fs_promises = __require("fs/promises");
77195
77196
  var node_child_process = __require("child_process");
77196
77197
  var node_util = __require("util");
@@ -79812,7 +79813,7 @@ var require_filesystem_storage_addon = __commonJS({
79812
79813
  [Symbol.toStringTag]: { value: "Module" }
79813
79814
  });
79814
79815
  var require_chunk = require_chunk_Cek0wNdY();
79815
- var require_dist10 = require_dist_CFTKQGym();
79816
+ var require_dist10 = require_dist_D6kBG4fg();
79816
79817
  var node_crypto = __require("crypto");
79817
79818
  var node_fs_promises = __require("fs/promises");
79818
79819
  var node_path = __require("path");
@@ -80928,8 +80929,8 @@ var require_sqlite_settings_addon = __commonJS({
80928
80929
  [Symbol.toStringTag]: { value: "Module" }
80929
80930
  });
80930
80931
  var require_chunk = require_chunk_Cek0wNdY();
80931
- var require_dist10 = require_dist_CFTKQGym();
80932
- var require_retired_settings_keys = require_retired_settings_keys_dehyu2N3();
80932
+ var require_dist10 = require_dist_D6kBG4fg();
80933
+ var require_retired_settings_keys = require_retired_settings_keys_BywIz4dZ();
80933
80934
  var node_crypto = __require("crypto");
80934
80935
  var node_fs = __require("fs");
80935
80936
  var node_module = __require("module");
@@ -81199,15 +81200,28 @@ var require_sqlite_settings_addon = __commonJS({
81199
81200
  const wanted = sqliteMmapSizeFor(fileSizeBytes);
81200
81201
  return wanted > currentMmapBytes ? wanted : null;
81201
81202
  }
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
- }];
81203
+ var RETIRED_COLLECTIONS = [
81204
+ {
81205
+ collection: "devices",
81206
+ owner: "integration-registry",
81207
+ 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)"
81208
+ },
81209
+ {
81210
+ collection: "device_settings_kv",
81211
+ owner: "integration-registry",
81212
+ 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`"
81213
+ },
81214
+ {
81215
+ collection: "pipeline-analytics:track-groups",
81216
+ owner: "pipeline-analytics",
81217
+ 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"
81218
+ },
81219
+ {
81220
+ collection: "pipeline-analytics:track-group-members",
81221
+ owner: "pipeline-analytics",
81222
+ reason: "membership rows of the deleted group entity; the track cascade that used to carry them away no longer has a group leg"
81223
+ }
81224
+ ];
81211
81225
  function retiredCollectionStoreOf(backend) {
81212
81226
  return { async drop(collection) {
81213
81227
  return backend.dropRetiredTable(collection);
@@ -83338,7 +83352,7 @@ var require_storage_orchestrator_addon = __commonJS({
83338
83352
  [Symbol.toStringTag]: { value: "Module" }
83339
83353
  });
83340
83354
  var require_chunk = require_chunk_Cek0wNdY();
83341
- var require_dist10 = require_dist_CFTKQGym();
83355
+ var require_dist10 = require_dist_D6kBG4fg();
83342
83356
  var zod = require_zod();
83343
83357
  var node_crypto = __require("crypto");
83344
83358
  var node_fs_promises = __require("fs/promises");
@@ -83570,7 +83584,7 @@ var require_storage_orchestrator_addon = __commonJS({
83570
83584
  if (!target) throw new Error(`Storage location "${targetId}" not found`);
83571
83585
  if (target.type !== storageClass) throw new Error(`Storage location "${targetId}" is type "${target.type}", expected "${storageClass}"`);
83572
83586
  if (source.id === target.id) throw new Error(namedSourceId ? `Source and destination are the same location ("${targetId}")` : `Storage location "${targetId}" is already the "${storageClass}" default`);
83573
- const freezeSource = defaultLoc !== void 0 && source.id !== defaultLoc.id;
83587
+ const freezeSource = defaultLoc === null || source.id !== defaultLoc.id;
83574
83588
  if (!MOVER_CLASSES.includes(storageClass)) throw new Error(`No mover owns "${storageClass}" \u2014 the migration can repoint its default but cannot move its bytes. Move it by hand, then repoint the default with upsertLocation.`);
83575
83589
  moves.push({
83576
83590
  storageClass,
@@ -85461,7 +85475,6 @@ var require_storage_orchestrator_addon = __commonJS({
85461
85475
  pressureTimer = null;
85462
85476
  pressureSweepInFlight = false;
85463
85477
  migration = null;
85464
- cleanup = null;
85465
85478
  /**
85466
85479
  * Cached `providerId → nodeLocal` snapshot (SP1). Backs the orchestrator's
85467
85480
  * synchronous `NodeLocalResolver` — `getProviderInfo()` is async, so we
@@ -85767,7 +85780,6 @@ var require_storage_orchestrator_addon = __commonJS({
85767
85780
  now: () => Date.now(),
85768
85781
  newId: () => (0, node_crypto.randomUUID)()
85769
85782
  });
85770
- this.cleanup = cleanup;
85771
85783
  const migrationProvider = {
85772
85784
  plan: (input) => migration.plan(input),
85773
85785
  start: async (input) => ({ jobId: await migration.start(input) }),
@@ -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_D6kBG4fg();
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_D6kBG4fg();
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-BjMNGEpl.js
116790
+ var require_manifest_system_deps_BjMNGEpl = __commonJS({
116791
+ "../system/dist/manifest-system-deps-BjMNGEpl.js"(exports) {
116783
116792
  "use strict";
116784
116793
  var require_chunk = require_chunk_Cek0wNdY();
116785
- require_dist_CFTKQGym();
116794
+ require_dist_D6kBG4fg();
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_D6kBG4fg();
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_BjMNGEpl();
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({
@@ -220788,6 +220818,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
220788
220818
  "device-offline",
220789
220819
  "device-disabled",
220790
220820
  "device-enabled",
220821
+ "device-battery-low",
220822
+ "device-battery-normal",
220791
220823
  "stream-online",
220792
220824
  "stream-offline",
220793
220825
  "node-online",
@@ -223949,46 +223981,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
223949
223981
  /** Cursor for the next page, or null when this page is the last. */
223950
223982
  nextCursor: zod.z.string().nullable()
223951
223983
  });
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
223984
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
223993
223985
  var KEY_EVENTS_MAX_LIMIT = 200;
223994
223986
  var KeyEventQueryInput = zod.z.object({
@@ -224081,9 +224073,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
224081
224073
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
224082
224074
  plates: zod.z.number().int(),
224083
224075
  /** 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()
224076
+ embeddings: zod.z.number().int()
224087
224077
  });
224088
224078
  var DiskReconcileCountsSchema = zod.z.object({
224089
224079
  mediaDropped: zod.z.number().int(),
@@ -224296,16 +224286,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
224296
224286
  * are not included (same contract as `listTracks`).
224297
224287
  */
224298
224288
  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
224289
  clearTracks: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
224310
224290
  kind: "mutation",
224311
224291
  auth: "admin"
@@ -241929,6 +241909,12 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
241929
241909
  addonId: null,
241930
241910
  access: "delete"
241931
241911
  },
241912
+ "deviceManager.renameLocation": {
241913
+ capName: "device-manager",
241914
+ capScope: "system",
241915
+ addonId: null,
241916
+ access: "create"
241917
+ },
241932
241918
  "deviceManager.runDeviceAction": {
241933
241919
  capName: "device-manager",
241934
241920
  capScope: "system",
@@ -243621,12 +243607,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
243621
243607
  addonId: null,
243622
243608
  access: "view"
243623
243609
  },
243624
- "pipelineAnalytics.getGroup": {
243625
- capName: "pipeline-analytics",
243626
- capScope: "device",
243627
- addonId: null,
243628
- access: "view"
243629
- },
243630
243610
  "pipelineAnalytics.getKeyEvents": {
243631
243611
  capName: "pipeline-analytics",
243632
243612
  capScope: "device",
@@ -243729,12 +243709,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
243729
243709
  addonId: null,
243730
243710
  access: "view"
243731
243711
  },
243732
- "pipelineAnalytics.listGroups": {
243733
- capName: "pipeline-analytics",
243734
- capScope: "device",
243735
- addonId: null,
243736
- access: "view"
243737
- },
243738
243712
  "pipelineAnalytics.listOpsLog": {
243739
243713
  capName: "pipeline-analytics",
243740
243714
  capScope: "device",
@@ -247615,11 +247589,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
247615
247589
  form: "single",
247616
247590
  optional: true
247617
247591
  }],
247618
- "pipelineAnalytics.getGroup": [{
247619
- name: "deviceId",
247620
- form: "single",
247621
- optional: false
247622
- }],
247623
247592
  "pipelineAnalytics.getKeyEvents": [{
247624
247593
  name: "deviceId",
247625
247594
  form: "single",
@@ -247685,11 +247654,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
247685
247654
  form: "single",
247686
247655
  optional: false
247687
247656
  }],
247688
- "pipelineAnalytics.listGroups": [{
247689
- name: "deviceIds",
247690
- form: "array",
247691
- optional: false
247692
- }],
247693
247657
  "pipelineAnalytics.listOpsLog": [{
247694
247658
  name: "deviceId",
247695
247659
  form: "single",
@@ -249170,6 +249134,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
249170
249134
  listLocations: (input) => dispatch("deviceManager", "listLocations", "query", input),
249171
249135
  addLocation: (input) => dispatch("deviceManager", "addLocation", "mutation", input),
249172
249136
  removeLocation: (input) => dispatch("deviceManager", "removeLocation", "mutation", input),
249137
+ renameLocation: (input) => dispatch("deviceManager", "renameLocation", "mutation", input),
249173
249138
  listPersistedByAddon: (input) => dispatch("deviceManager", "listPersistedByAddon", "query", input),
249174
249139
  listAll: (input) => dispatch("deviceManager", "listAll", "query", input),
249175
249140
  getChildren: (input) => dispatch("deviceManager", "getChildren", "query", input),
@@ -252319,9 +252284,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
252319
252284
  exports.AlertSourceSchema = AlertSourceSchema;
252320
252285
  exports.AlertStatusSchema = AlertStatusSchema;
252321
252286
  exports.AmbientLightSensorStatusSchema = AmbientLightSensorStatusSchema;
252322
- exports.AnalyticsGroupDetailSchema = AnalyticsGroupDetailSchema;
252323
- exports.AnalyticsGroupMemberSchema = AnalyticsGroupMemberSchema;
252324
- exports.AnalyticsGroupRecordSchema = AnalyticsGroupRecordSchema;
252325
252287
  exports.ApiKeyRecordSchema = ApiKeyRecordSchema;
252326
252288
  exports.ApiKeySummarySchema = ApiKeySummarySchema;
252327
252289
  exports.ArchiveEntrySchema = ArchiveEntrySchema;
@@ -252686,8 +252648,6 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
252686
252648
  exports.LedgerWalkSkipReasonSchema = LedgerWalkSkipReasonSchema;
252687
252649
  exports.LinkedDeviceSchema = LinkedDeviceSchema;
252688
252650
  exports.LinkedDevicesModeSchema = LinkedDevicesModeSchema;
252689
- exports.ListGroupsPageSchema = ListGroupsPageSchema;
252690
- exports.ListGroupsQueryInput = ListGroupsQueryInput;
252691
252651
  exports.LlmDefaultSchema = LlmDefaultSchema;
252692
252652
  exports.LlmDefaultSelectorSchema = LlmDefaultSelectorSchema;
252693
252653
  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.73",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",