@camstack/addon-pipeline 1.2.156 → 1.2.160

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.
Files changed (38) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/detection-pipeline/index.js +5 -5
  4. package/dist/detection-pipeline/index.mjs +4 -4
  5. package/dist/{dist-C499qEUf.js → dist-5VmTxa8x.js} +183 -76
  6. package/dist/{dist-C9ohtgTQ.mjs → dist-C8zVKhzA.mjs} +183 -76
  7. package/dist/{lazy-sharp-D5uApbbe.js → lazy-sharp-C89jIlwj.js} +1 -1
  8. package/dist/{local-frame-registry-VkzIezFI.js → local-frame-registry-BNMgZ5uA.js} +1 -1
  9. package/dist/{local-frame-registry-DAVug-jA.mjs → local-frame-registry-Bh-egEcl.mjs} +1 -1
  10. package/dist/motion-wasm/index.js +2 -2
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-DEq8mutP.js → node-FsbZDqyh.js} +1 -1
  13. package/dist/{node-CwIlVFyz.mjs → node-G9AiO_JJ.mjs} +1 -1
  14. package/dist/pipeline-runner/index.js +5 -5
  15. package/dist/pipeline-runner/index.mjs +4 -4
  16. package/dist/{process-memory-DWw7FrV5.mjs → process-memory-Bbvc_vQS.mjs} +1 -1
  17. package/dist/{process-memory-DzycAIEm.js → process-memory-CMC_42XT.js} +1 -1
  18. package/dist/recorder/index.js +535 -28
  19. package/dist/recorder/index.mjs +532 -30
  20. package/dist/{segment-demux-js-D2InpBpa.mjs → segment-demux-js-Cw--C40J.mjs} +1 -1
  21. package/dist/{segment-demux-js-Df1rAqNh.js → segment-demux-js-iEt5OWTd.js} +1 -1
  22. package/dist/session-decode/decode-worker-child.js +2 -2
  23. package/dist/session-decode/decode-worker-child.mjs +1 -1
  24. package/dist/stream-broker/_stub.js +2 -2
  25. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BJlcLzCs.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-l7NtBWCj.mjs} +3 -3
  26. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Blnh70uP.mjs +26 -0
  27. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CWtPG7OH.mjs +26 -0
  28. package/dist/stream-broker/demux-worker-child.js +1 -1
  29. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  30. package/dist/stream-broker/{hostInit-QpJx-TgK.mjs → hostInit-C2zs9368.mjs} +3 -3
  31. package/dist/stream-broker/index.js +20 -14
  32. package/dist/stream-broker/index.mjs +20 -14
  33. package/dist/stream-broker/remoteEntry.js +1 -1
  34. package/dist/{worker-protocol-CFHcqXoS.mjs → worker-protocol-CA_SVsYj.mjs} +1 -1
  35. package/dist/{worker-protocol-ge8Ce0Bo.js → worker-protocol-CB8pNFkV.js} +1 -1
  36. package/package.json +1 -1
  37. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-lMPlG5w5.mjs +0 -26
  38. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-yWrVN7u8.mjs +0 -26
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-C499qEUf.js");
6
- const require_process_memory = require("../process-memory-DzycAIEm.js");
5
+ const require_dist = require("../dist-5VmTxa8x.js");
6
+ const require_process_memory = require("../process-memory-CMC_42XT.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_dist.__toESM(node_fs);
9
9
  let node_path = require("node:path");
@@ -1,6 +1,6 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-C9ohtgTQ.mjs";
3
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DWw7FrV5.mjs";
2
+ import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-C8zVKhzA.mjs";
3
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Bbvc_vQS.mjs";
4
4
  import * as fs from "node:fs";
5
5
  import * as path$1 from "node:path";
6
6
  import { downloadFile } from "@camstack/system/addon-utils";
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-C499qEUf.js");
6
- const require_node = require("../node-DEq8mutP.js");
7
- const require_local_frame_registry = require("../local-frame-registry-VkzIezFI.js");
8
- const require_lazy_sharp = require("../lazy-sharp-D5uApbbe.js");
5
+ const require_dist = require("../dist-5VmTxa8x.js");
6
+ const require_node = require("../node-FsbZDqyh.js");
7
+ const require_local_frame_registry = require("../local-frame-registry-BNMgZ5uA.js");
8
+ const require_lazy_sharp = require("../lazy-sharp-C89jIlwj.js");
9
9
  const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
10
- const require_process_memory = require("../process-memory-DzycAIEm.js");
10
+ const require_process_memory = require("../process-memory-CMC_42XT.js");
11
11
  let node_fs = require("node:fs");
12
12
  node_fs = require_dist.__toESM(node_fs);
13
13
  let node_path = require("node:path");
@@ -1,10 +1,10 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
- import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-C9ohtgTQ.mjs";
3
- import { a as readProcessCost } from "../node-CwIlVFyz.mjs";
4
- import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-DAVug-jA.mjs";
2
+ import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-C8zVKhzA.mjs";
3
+ import { a as readProcessCost } from "../node-G9AiO_JJ.mjs";
4
+ import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-Bh-egEcl.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
6
  import { n as startEventLoopStallMonitor } from "../event-loop-stall-monitor-DXLNBMkY.mjs";
7
- import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DWw7FrV5.mjs";
7
+ import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Bbvc_vQS.mjs";
8
8
  import * as fs from "node:fs";
9
9
  import * as path$1 from "node:path";
10
10
  import { spawn } from "node:child_process";
@@ -9431,6 +9431,13 @@ var MediaRelocateModeSchema = _enum([
9431
9431
  ]);
9432
9432
  var RelocateMediaInputSchema = object({
9433
9433
  toLocationId: string(),
9434
+ /**
9435
+ * Restrict the pass to rows currently on this location. Omitted / `'*'` =
9436
+ * every row that is not already on `toLocationId` (the historical
9437
+ * behaviour). A named source is what a from→to migration needs: without it
9438
+ * "move events off disk 2" also emptied disk 1.
9439
+ */
9440
+ fromLocationId: string().optional(),
9434
9441
  throttleMbps: number().min(1).max(1e3).optional(),
9435
9442
  /** Omitted = `move`, the pre-existing behaviour. */
9436
9443
  mode: MediaRelocateModeSchema.optional()
@@ -9498,6 +9505,19 @@ var StorageMigrationDestinationsSchema = object({
9498
9505
  galleryMedia: string().min(1).optional()
9499
9506
  }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
9500
9507
  /**
9508
+ * Optional named source per class. Omitted = the class's current default
9509
+ * (the historical behaviour). A named source that is NOT the default is a
9510
+ * drain of that disk: bytes move, the default stays, and the source is
9511
+ * disabled when the move finishes.
9512
+ */
9513
+ var StorageMigrationSourcesSchema = object({
9514
+ recordings: string().min(1).optional(),
9515
+ recordingsLow: string().min(1).optional(),
9516
+ eventMedia: string().min(1).optional(),
9517
+ backups: string().min(1).optional(),
9518
+ galleryMedia: string().min(1).optional()
9519
+ }).optional();
9520
+ /**
9501
9521
  * How a migration sequences the cutover against the byte move.
9502
9522
  *
9503
9523
  * - `blocking` — the historical order: pause, move every byte, repoint,
@@ -9519,6 +9539,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
9519
9539
  /** Shared input for planning and starting an orchestrated storage migration. */
9520
9540
  var StorageMigrationInputSchema = object({
9521
9541
  destinations: StorageMigrationDestinationsSchema,
9542
+ /** Omitted = each class's current default. */
9543
+ sources: StorageMigrationSourcesSchema,
9522
9544
  throttleMbps: number().min(1).max(1e3).optional(),
9523
9545
  /** Omitted = `blocking`, which stays the default. */
9524
9546
  mode: StorageMigrationModeSchema.optional()
@@ -9598,6 +9620,13 @@ var StorageMigrationMoveSchema = object({
9598
9620
  storageClass: StorageMigrationClassSchema,
9599
9621
  fromLocationId: string(),
9600
9622
  toLocationId: string(),
9623
+ /**
9624
+ * True when `from` was NOT the class default at plan time. The move still
9625
+ * copies bytes, but the default is left alone and the source is disabled
9626
+ * once the copy verifies. Absent on jobs planned before this field existed
9627
+ * — those jobs always repointed, which is `false`.
9628
+ */
9629
+ freezeSource: boolean().optional(),
9601
9630
  moverJobId: string().nullable(),
9602
9631
  state: RelocateJobStateSchema.nullable(),
9603
9632
  error: string().nullable(),
@@ -9611,6 +9640,7 @@ var StorageMigrationJobSchema = object({
9611
9640
  * can tell a seconds-long cutover from a thirty-hour one. */
9612
9641
  mode: StorageMigrationModeSchema,
9613
9642
  destinations: StorageMigrationDestinationsSchema,
9643
+ sources: StorageMigrationSourcesSchema,
9614
9644
  throttleMbps: number(),
9615
9645
  moves: array(StorageMigrationMoveSchema),
9616
9646
  pauseLeaseId: string().nullable(),
@@ -9636,6 +9666,7 @@ var StorageMigrationFindingSchema = object({
9636
9666
  });
9637
9667
  var StorageMigrationPlanSchema = object({
9638
9668
  destinations: StorageMigrationDestinationsSchema,
9669
+ sources: StorageMigrationSourcesSchema,
9639
9670
  /** The mode this plan was built for. A plan is only valid for its mode: the
9640
9671
  * `eventMedia` seal gate and the single-cardinality refusal both depend on
9641
9672
  * it. */
@@ -9643,7 +9674,8 @@ var StorageMigrationPlanSchema = object({
9643
9674
  moves: array(object({
9644
9675
  storageClass: StorageMigrationClassSchema,
9645
9676
  fromLocationId: string(),
9646
- toLocationId: string()
9677
+ toLocationId: string(),
9678
+ freezeSource: boolean().optional()
9647
9679
  })),
9648
9680
  findings: array(StorageMigrationFindingSchema)
9649
9681
  });
@@ -9821,10 +9853,51 @@ var LedgerWalkReportSchema = object({
9821
9853
  var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
9822
9854
  var RelocatableMediaCountInputSchema = object({
9823
9855
  toLocationId: string().min(1),
9856
+ /** Restrict the count to one source; omitted / `'*'` = every non-target row. */
9857
+ fromLocationId: string().optional(),
9824
9858
  /** Omitted = `move`. */
9825
9859
  mode: MediaRelocateModeSchema.optional()
9826
9860
  });
9827
9861
  /**
9862
+ * Operator cleanup of leftover analytics rows, optional debug media, and
9863
+ * ghost ledger entries on frozen footage locations.
9864
+ *
9865
+ * A pass is tens of minutes on a standing backlog. The hub method RETURNS
9866
+ * `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
9867
+ * is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
9868
+ * with no operator-visible status.
9869
+ */
9870
+ var StorageCleanupPhaseSchema = _enum([
9871
+ "orphans",
9872
+ "debug-media",
9873
+ "ghost-ledger",
9874
+ "done",
9875
+ "failed",
9876
+ "cancelled"
9877
+ ]);
9878
+ var StorageCleanupInputSchema = object({
9879
+ /** Also walk motion stills / track filmstrips. Off by default. */
9880
+ includeDebugMedia: boolean().optional() });
9881
+ var StorageCleanupJobSchema = object({
9882
+ jobId: string(),
9883
+ phase: StorageCleanupPhaseSchema,
9884
+ includeDebugMedia: boolean(),
9885
+ orphansReclaimed: number().int().nonnegative(),
9886
+ orphanBytesReclaimed: number().int().nonnegative(),
9887
+ debugMediaReclaimed: number().int().nonnegative(),
9888
+ debugMediaBytesReclaimed: number().int().nonnegative(),
9889
+ ghostsForgotten: number().int().nonnegative(),
9890
+ ghostBytesForgotten: number().int().nonnegative(),
9891
+ /** Short operator-facing line: current collection, pass, or location. */
9892
+ detail: string().nullable(),
9893
+ cancelRequested: boolean(),
9894
+ startedAt: number(),
9895
+ updatedAt: number(),
9896
+ finishedAt: number().nullable(),
9897
+ error: string().nullable()
9898
+ });
9899
+ var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
9900
+ /**
9828
9901
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
9829
9902
  * storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
9830
9903
  * so the persisted record schema and the consumer-facing cap can both consume it
@@ -9852,11 +9925,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
9852
9925
  * The default location for a type uses `id === <type>:default` by
9853
9926
  * convention (the bare type ref like `'backups'` resolves to it).
9854
9927
  *
9855
- * `isSystem: true` marks a location as orchestrator-seeded and
9856
- * undeletable. The bootstrap-installed defaults (one per type) carry
9857
- * this flag; operator-added locations don't. Editing the config of
9858
- * a system location is allowed (path migration, provider swap) but
9859
- * deleting it is rejected at the cap level.
9928
+ * `isSystem` is a legacy persisted flag. Seed still creates the initial
9929
+ * `<type>:default` locations; the flag is no longer a lock, a badge, or a
9930
+ * prune selector. New writes leave it false. Deletion is gated on uniqueness
9931
+ * / last-enabled, not on this bit.
9860
9932
  */
9861
9933
  var StorageLocationSchema = object({
9862
9934
  id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
@@ -14699,6 +14771,12 @@ method(object({
14699
14771
  }), _void(), {
14700
14772
  kind: "mutation",
14701
14773
  auth: "admin"
14774
+ }), method(object({
14775
+ from: string(),
14776
+ to: string()
14777
+ }), object({ moved: number() }), {
14778
+ kind: "mutation",
14779
+ auth: "admin"
14702
14780
  }), method(object({
14703
14781
  deviceId: number(),
14704
14782
  disabled: boolean()
@@ -21210,46 +21288,6 @@ var RecentTracksPageSchema = object({
21210
21288
  /** Cursor for the next page, or null when this page is the last. */
21211
21289
  nextCursor: string().nullable()
21212
21290
  });
21213
- var LIST_GROUPS_DEFAULT_LIMIT = 40;
21214
- var LIST_GROUPS_MAX_LIMIT = 100;
21215
- var AnalyticsGroupRecordSchema = object({
21216
- id: string(),
21217
- deviceId: number().int(),
21218
- openedAt: number().int(),
21219
- closedAt: number().int(),
21220
- timestamp: number().int(),
21221
- memberCount: number().int(),
21222
- memberTrackIds: array(string()).readonly(),
21223
- className: string(),
21224
- classes: array(string()).readonly(),
21225
- /** Relative event-media path, or null when the group has no picture yet. */
21226
- mediaUrl: string().nullable(),
21227
- singleton: boolean()
21228
- });
21229
- var AnalyticsGroupMemberSchema = object({
21230
- trackId: string(),
21231
- deviceId: number().int(),
21232
- className: string(),
21233
- firstSeen: number().int(),
21234
- lastSeen: number().int(),
21235
- mediaUrl: string().nullable()
21236
- });
21237
- var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
21238
- var ListGroupsQueryInput = object({
21239
- /** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
21240
- deviceIds: array(number()),
21241
- /** Window lower bound on `closedAt` (inclusive). */
21242
- since: number().optional(),
21243
- /** Window upper bound on `openedAt` (inclusive). */
21244
- until: number().optional(),
21245
- limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
21246
- /** Opaque continuation cursor from a previous page's `nextCursor`. */
21247
- cursor: string().optional()
21248
- });
21249
- var ListGroupsPageSchema = object({
21250
- groups: array(AnalyticsGroupRecordSchema).readonly(),
21251
- nextCursor: string().nullable()
21252
- });
21253
21291
  var KEY_EVENTS_DEFAULT_LIMIT = 50;
21254
21292
  var KEY_EVENTS_MAX_LIMIT = 200;
21255
21293
  var KeyEventQueryInput = object({
@@ -21353,9 +21391,7 @@ var TrackCascadeCountsSchema = object({
21353
21391
  /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
21354
21392
  plates: number().int(),
21355
21393
  /** Per-track CLIP search vectors removed (best-effort). */
21356
- embeddings: number().int(),
21357
- /** Group membership + group rows removed with their last member (best-effort). */
21358
- groups: number().int()
21394
+ embeddings: number().int()
21359
21395
  });
21360
21396
  /** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
21361
21397
  var DiskReconcileCountsSchema = object({
@@ -21604,10 +21640,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
21604
21640
  * stationary registry). Default false: the timeline lists passages,
21605
21641
  * not parking records (operator decision, 2026-08-15). */
21606
21642
  includeStationary: boolean().optional()
21607
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(ListGroupsQueryInput, ListGroupsPageSchema), method(object({
21608
- deviceId: number(),
21609
- groupId: string().min(1)
21610
- }), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
21643
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
21611
21644
  kind: "mutation",
21612
21645
  auth: "admin"
21613
21646
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -23847,7 +23880,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
23847
23880
  }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
23848
23881
  kind: "mutation",
23849
23882
  auth: "admin"
23850
- });
23883
+ }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
23884
+ kind: "mutation",
23885
+ auth: "admin"
23886
+ }), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23887
+ kind: "mutation",
23888
+ auth: "admin"
23889
+ }), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
23851
23890
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
23852
23891
  providerId: string().min(1),
23853
23892
  displayName: string().min(1),
@@ -29372,6 +29411,33 @@ var RecordingRebalanceInputSchema = object({
29372
29411
  minMoveGb: number().min(0).optional()
29373
29412
  });
29374
29413
  /**
29414
+ * Operator-facing placement of one camera onto a recordings location.
29415
+ *
29416
+ * `pinLocationId` is the operator instruction: a location id, or `null` for
29417
+ * Auto (the planner may move this camera). `locationId` is where high/mid
29418
+ * currently write — the plan, which may disagree with the pin when Auto.
29419
+ */
29420
+ var RecordingDevicePlacementSchema = object({
29421
+ deviceId: number().int(),
29422
+ profile: string(),
29423
+ locationId: string()
29424
+ });
29425
+ var RecordingDevicePinSchema = object({
29426
+ deviceId: number().int(),
29427
+ /** Recordings-class location this camera is pinned to. */
29428
+ locationId: string()
29429
+ });
29430
+ var RecordingPlacementViewSchema = object({
29431
+ assignments: array(RecordingDevicePlacementSchema),
29432
+ pins: array(RecordingDevicePinSchema),
29433
+ defaultLocations: record(string(), string())
29434
+ });
29435
+ var RecordingSetDevicePlacementInputSchema = object({
29436
+ deviceId: number().int(),
29437
+ /** `null` = Auto. Otherwise a `recordings:*` location id. */
29438
+ locationId: string().nullable()
29439
+ });
29440
+ /**
29375
29441
  * Result of locating footage at a wall-clock instant for one device/profile.
29376
29442
  * `segment` carries the covering segment's window; `gap` reports the forward
29377
29443
  * nearest covered edge (`null` past the end of footage / when none exists)
@@ -29724,6 +29790,22 @@ var recordingCapability = {
29724
29790
  startStorageRebalance: method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
29725
29791
  kind: "mutation",
29726
29792
  auth: "admin"
29793
+ }),
29794
+ /**
29795
+ * The placement plan in force plus operator pins. Drives the Locations
29796
+ * admin page: Auto vs a named recordings location, per camera.
29797
+ */
29798
+ getPlacement: method(object({}), RecordingPlacementViewSchema, {
29799
+ kind: "query",
29800
+ auth: "admin"
29801
+ }),
29802
+ /**
29803
+ * Pin a camera to a recordings location, or clear the pin (Auto). High and
29804
+ * mid follow the pin; low stays with the recordingsLow planner.
29805
+ */
29806
+ setDevicePlacement: method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
29807
+ kind: "mutation",
29808
+ auth: "admin"
29727
29809
  })
29728
29810
  }
29729
29811
  };
@@ -33310,6 +33392,12 @@ Object.freeze({
33310
33392
  addonId: null,
33311
33393
  access: "delete"
33312
33394
  },
33395
+ "deviceManager.renameLocation": {
33396
+ capName: "device-manager",
33397
+ capScope: "system",
33398
+ addonId: null,
33399
+ access: "create"
33400
+ },
33313
33401
  "deviceManager.runDeviceAction": {
33314
33402
  capName: "device-manager",
33315
33403
  capScope: "system",
@@ -35002,12 +35090,6 @@ Object.freeze({
35002
35090
  addonId: null,
35003
35091
  access: "view"
35004
35092
  },
35005
- "pipelineAnalytics.getGroup": {
35006
- capName: "pipeline-analytics",
35007
- capScope: "device",
35008
- addonId: null,
35009
- access: "view"
35010
- },
35011
35093
  "pipelineAnalytics.getKeyEvents": {
35012
35094
  capName: "pipeline-analytics",
35013
35095
  capScope: "device",
@@ -35110,12 +35192,6 @@ Object.freeze({
35110
35192
  addonId: null,
35111
35193
  access: "view"
35112
35194
  },
35113
- "pipelineAnalytics.listGroups": {
35114
- capName: "pipeline-analytics",
35115
- capScope: "device",
35116
- addonId: null,
35117
- access: "view"
35118
- },
35119
35195
  "pipelineAnalytics.listOpsLog": {
35120
35196
  capName: "pipeline-analytics",
35121
35197
  capScope: "device",
@@ -36130,6 +36206,12 @@ Object.freeze({
36130
36206
  addonId: null,
36131
36207
  access: "view"
36132
36208
  },
36209
+ "recording.getPlacement": {
36210
+ capName: "recording",
36211
+ capScope: "system",
36212
+ addonId: null,
36213
+ access: "view"
36214
+ },
36133
36215
  "recording.getPlaybackManifest": {
36134
36216
  capName: "recording",
36135
36217
  capScope: "system",
@@ -36256,6 +36338,12 @@ Object.freeze({
36256
36338
  addonId: null,
36257
36339
  access: "create"
36258
36340
  },
36341
+ "recording.setDevicePlacement": {
36342
+ capName: "recording",
36343
+ capScope: "system",
36344
+ addonId: null,
36345
+ access: "create"
36346
+ },
36259
36347
  "recording.startStorageMigrationMove": {
36260
36348
  capName: "recording",
36261
36349
  capScope: "system",
@@ -36700,12 +36788,36 @@ Object.freeze({
36700
36788
  addonId: null,
36701
36789
  access: "create"
36702
36790
  },
36791
+ "storageMigration.cleanupCancel": {
36792
+ capName: "storage-migration",
36793
+ capScope: "system",
36794
+ addonId: null,
36795
+ access: "create"
36796
+ },
36797
+ "storageMigration.cleanupStart": {
36798
+ capName: "storage-migration",
36799
+ capScope: "system",
36800
+ addonId: null,
36801
+ access: "create"
36802
+ },
36803
+ "storageMigration.cleanupStatus": {
36804
+ capName: "storage-migration",
36805
+ capScope: "system",
36806
+ addonId: null,
36807
+ access: "view"
36808
+ },
36703
36809
  "storageMigration.drain": {
36704
36810
  capName: "storage-migration",
36705
36811
  capScope: "system",
36706
36812
  addonId: null,
36707
36813
  access: "create"
36708
36814
  },
36815
+ "storageMigration.history": {
36816
+ capName: "storage-migration",
36817
+ capScope: "system",
36818
+ addonId: null,
36819
+ access: "view"
36820
+ },
36709
36821
  "storageMigration.movers": {
36710
36822
  capName: "storage-migration",
36711
36823
  capScope: "system",
@@ -38702,11 +38814,6 @@ Object.freeze({
38702
38814
  form: "single",
38703
38815
  optional: true
38704
38816
  }],
38705
- "pipelineAnalytics.getGroup": [{
38706
- name: "deviceId",
38707
- form: "single",
38708
- optional: false
38709
- }],
38710
38817
  "pipelineAnalytics.getKeyEvents": [{
38711
38818
  name: "deviceId",
38712
38819
  form: "single",
@@ -38772,11 +38879,6 @@ Object.freeze({
38772
38879
  form: "single",
38773
38880
  optional: false
38774
38881
  }],
38775
- "pipelineAnalytics.listGroups": [{
38776
- name: "deviceIds",
38777
- form: "array",
38778
- optional: false
38779
- }],
38780
38882
  "pipelineAnalytics.listOpsLog": [{
38781
38883
  name: "deviceId",
38782
38884
  form: "single",
@@ -39192,6 +39294,11 @@ Object.freeze({
39192
39294
  form: "single",
39193
39295
  optional: false
39194
39296
  }],
39297
+ "recording.setDevicePlacement": [{
39298
+ name: "deviceId",
39299
+ form: "single",
39300
+ optional: false
39301
+ }],
39195
39302
  "recording.startStorageMigrationMove": [{
39196
39303
  name: "deviceId",
39197
39304
  form: "single",