@camstack/addon-osd-manager 0.1.4 → 0.1.5

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.
package/dist/index.js CHANGED
@@ -7626,12 +7626,11 @@ var RecordingConfigSchema = object({
7626
7626
  /**
7627
7627
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7628
7628
  *
7629
- * One shape shared by the recorder's `relocateFootage` (segments) and
7630
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7631
- * page renders both movers with one component. Jobs are in-RAM (a restart
7632
- * forgets them re-running is safe by construction: copy-if-absent, delete
7633
- * after verify) and each completed/failed run also lands one durable ops-log
7634
- * row on the owning addon's surface.
7629
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7630
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7631
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7632
+ * Each completed/failed run also lands one durable ops-log row on its owning
7633
+ * addon surface.
7635
7634
  */
7636
7635
  var RelocateJobStateSchema = _enum([
7637
7636
  "running",
@@ -7658,19 +7657,100 @@ var RelocateJobSchema = object({
7658
7657
  finishedAt: number().nullable(),
7659
7658
  error: string().nullable()
7660
7659
  });
7660
+ /** Profile-derived footage selection used only by the migration coordinator:
7661
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7662
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7661
7663
  var RelocateFootageInputSchema = object({
7662
- deviceId: number().optional(),
7663
7664
  fromLocationId: string(),
7664
7665
  toLocationId: string(),
7665
7666
  entities: array(_enum(["segments"])).optional(),
7667
+ /** Limits relocation to the logical profile class. Omit only for the
7668
+ * pre-orchestration compatibility path. */
7669
+ footageClass: RelocateFootageClassSchema.optional(),
7666
7670
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7667
7671
  * never allowed to starve live writers. */
7668
7672
  throttleMbps: number().min(1).max(1e3).optional()
7669
7673
  });
7670
- var RelocateMediaInputSchema = object({
7671
- deviceId: number().optional(),
7674
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7675
+ * from persistent recording settings: a migration never changes
7676
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7677
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7678
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7679
+ var StorageMigrationMediaMoveInputSchema = object({
7672
7680
  toLocationId: string(),
7673
7681
  throttleMbps: number().min(1).max(1e3).optional()
7682
+ }).extend({ leaseId: string().min(1) });
7683
+ /** The independently selectable logical storage classes. `recordings`
7684
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7685
+ * segments; `eventMedia` is post-analysis blobs. */
7686
+ var StorageMigrationClassSchema = _enum([
7687
+ "recordings",
7688
+ "recordingsLow",
7689
+ "eventMedia"
7690
+ ]);
7691
+ /** A destination is always an existing, fully-qualified location id. The
7692
+ * migration API intentionally never changes a source location's `basePath`:
7693
+ * callers create a new `<type>:<slug>` location, then select it here. */
7694
+ var StorageMigrationDestinationsSchema = object({
7695
+ recordings: string().min(1).optional(),
7696
+ recordingsLow: string().min(1).optional(),
7697
+ eventMedia: string().min(1).optional()
7698
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7699
+ /** Shared input for planning and starting an orchestrated storage migration. */
7700
+ var StorageMigrationInputSchema = object({
7701
+ destinations: StorageMigrationDestinationsSchema,
7702
+ throttleMbps: number().min(1).max(1e3).optional()
7703
+ });
7704
+ /** The durable coordinator state machine. The only phase that changes default
7705
+ * locations is `repointing`, after every selected mover has completed and been
7706
+ * verified. */
7707
+ var StorageMigrationPhaseSchema = _enum([
7708
+ "planning",
7709
+ "pausing",
7710
+ "moving",
7711
+ "verifying",
7712
+ "repointing",
7713
+ "refreshing",
7714
+ "resuming",
7715
+ "done",
7716
+ "failed",
7717
+ "cancelled"
7718
+ ]);
7719
+ var StorageMigrationParticipantSchema = _enum([
7720
+ "pipeline",
7721
+ "recorder",
7722
+ "analytics"
7723
+ ]);
7724
+ var StorageMigrationMoveSchema = object({
7725
+ storageClass: StorageMigrationClassSchema,
7726
+ fromLocationId: string(),
7727
+ toLocationId: string(),
7728
+ moverJobId: string().nullable(),
7729
+ state: RelocateJobStateSchema.nullable(),
7730
+ error: string().nullable()
7731
+ });
7732
+ var StorageMigrationJobSchema = object({
7733
+ jobId: string(),
7734
+ phase: StorageMigrationPhaseSchema,
7735
+ destinations: StorageMigrationDestinationsSchema,
7736
+ throttleMbps: number(),
7737
+ moves: array(StorageMigrationMoveSchema),
7738
+ pauseLeaseId: string().nullable(),
7739
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7740
+ repointed: boolean(),
7741
+ cancelRequested: boolean(),
7742
+ startedAt: number(),
7743
+ updatedAt: number(),
7744
+ finishedAt: number().nullable(),
7745
+ error: string().nullable()
7746
+ });
7747
+ var StorageMigrationPlanSchema = object({
7748
+ destinations: StorageMigrationDestinationsSchema,
7749
+ moves: array(object({
7750
+ storageClass: StorageMigrationClassSchema,
7751
+ fromLocationId: string(),
7752
+ toLocationId: string()
7753
+ }))
7674
7754
  });
7675
7755
  /**
7676
7756
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -18440,20 +18520,28 @@ var pipelineAnalyticsCapability = {
18440
18520
  }),
18441
18521
  /** The events ops-log rows (newest-first), optionally scoped to one camera.
18442
18522
  * Backed by a declared pipeline-analytics SQLite collection. */
18443
- /**
18444
- * Move event-media blobs onto `toLocationId` (entity-routing spec Phase
18445
- * 4): per-row copy stamp row.locationId → delete old blob. Rows already
18446
- * at the target are skipped, so a re-run resumes. Single-flight.
18447
- */
18448
- relocateMedia: method(RelocateMediaInputSchema, object({ jobId: string() }), {
18523
+ /** Internal migration-participant lease. It drains active MediaStore
18524
+ * writes and refuses new ones without changing analytics bindings. */
18525
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
18449
18526
  kind: "mutation",
18450
18527
  auth: "admin"
18451
18528
  }),
18452
- getMediaRelocateStatus: method(object({}), array(RelocateJobSchema).readonly(), {
18453
- kind: "query",
18529
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
18530
+ kind: "mutation",
18531
+ auth: "admin"
18532
+ }),
18533
+ /** Drops cached location roots after the storage coordinator repoints a
18534
+ * default so future event-media writes use the new root. */
18535
+ refreshStorageLocationsForMigration: method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
18536
+ kind: "mutation",
18454
18537
  auth: "admin"
18455
18538
  }),
18456
- cancelMediaRelocate: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18539
+ startStorageMigrationMove: method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
18540
+ kind: "mutation",
18541
+ auth: "admin"
18542
+ }),
18543
+ getStorageMigrationMoveStatus: method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }),
18544
+ cancelStorageMigrationMove: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18457
18545
  kind: "mutation",
18458
18546
  auth: "admin"
18459
18547
  }),
@@ -20502,6 +20590,16 @@ var pipelineOrchestratorCapability = {
20502
20590
  nodeIdMode: "data",
20503
20591
  exposesDeviceSettings: true,
20504
20592
  methods: {
20593
+ /** Internal storage-migration participant lease. While held, dispatch
20594
+ * requests are accepted as pending but no new runner attachment starts. */
20595
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
20596
+ kind: "mutation",
20597
+ auth: "admin"
20598
+ }),
20599
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
20600
+ kind: "mutation",
20601
+ auth: "admin"
20602
+ }),
20505
20603
  /**
20506
20604
  * Pin a camera's pipeline to a specific agent (L1 affinity).
20507
20605
  * The orchestrator re-evaluates the assignment immediately and persists
@@ -21643,6 +21741,28 @@ var storageEvictableCapability = {
21643
21741
  }), EvictResultSchema, { kind: "mutation" })
21644
21742
  }
21645
21743
  };
21744
+ /**
21745
+ * The single operator-facing storage migration surface. It coordinates the
21746
+ * pipeline, recorder and post-analysis participants; callers never mutate a
21747
+ * camera recording config or invoke an individual mover directly.
21748
+ */
21749
+ var storageMigrationCapability = {
21750
+ name: "storage-migration",
21751
+ scope: "system",
21752
+ mode: "singleton",
21753
+ methods: {
21754
+ plan: method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }),
21755
+ start: method(StorageMigrationInputSchema, object({ jobId: string() }), {
21756
+ kind: "mutation",
21757
+ auth: "admin"
21758
+ }),
21759
+ status: method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }),
21760
+ cancel: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
21761
+ kind: "mutation",
21762
+ auth: "admin"
21763
+ })
21764
+ }
21765
+ };
21646
21766
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
21647
21767
  providerId: string().min(1),
21648
21768
  displayName: string().min(1),
@@ -21791,6 +21911,28 @@ var TerminalProfileInfoSchema = object({
21791
21911
  label: string(),
21792
21912
  description: string().optional()
21793
21913
  });
21914
+ /**
21915
+ * A durable operator-created Terminal instance. Profiles are templates; only
21916
+ * an instance declares a camera.
21917
+ */
21918
+ var TerminalInstanceInfoSchema = object({
21919
+ instanceId: string(),
21920
+ cameraStableId: string(),
21921
+ nodeId: string(),
21922
+ profileId: string(),
21923
+ profileLabel: string(),
21924
+ name: string(),
21925
+ enabled: boolean()
21926
+ });
21927
+ var TerminalLegacyCameraSchema = object({
21928
+ stableId: string(),
21929
+ nodeId: string(),
21930
+ profileId: string(),
21931
+ profileLabel: string(),
21932
+ name: string(),
21933
+ /** Only legacy monitor cameras can retain their historic stable identity. */
21934
+ adoptable: boolean()
21935
+ });
21794
21936
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
21795
21937
  seq: number().int().positive(),
21796
21938
  kind: literal("data"),
@@ -21810,10 +21952,9 @@ var TerminalOutputBatchSchema = object({
21810
21952
  /**
21811
21953
  * terminal-session — singleton system capability for interactive TTY sessions.
21812
21954
  *
21813
- * Phase 1 (this cap): open/resize/close/list a pty running an allowlisted
21814
- * profile, streamed to xterm.js over the data plane. Phase 2 (streaming a
21815
- * session as a camera) is a separate device-provider concern and does not
21816
- * change this contract.
21955
+ * Owns both live PTY lifecycle and durable Terminal instance management.
21956
+ * Profiles are allowlisted templates; an explicit instance is the only path
21957
+ * that declares a camera.
21817
21958
  */
21818
21959
  var terminalSessionCapability = {
21819
21960
  name: "terminal-session",
@@ -21822,6 +21963,37 @@ var terminalSessionCapability = {
21822
21963
  methods: {
21823
21964
  /** Pre-declared profiles the operator may open. */
21824
21965
  listProfiles: method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
21966
+ /** Explicit durable Terminal instances, managed centrally on the hub. */
21967
+ listInstances: method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }),
21968
+ createInstance: method(object({
21969
+ targetNodeId: string().min(1),
21970
+ profileId: string().min(1),
21971
+ name: string().trim().min(1).max(160).optional()
21972
+ }), TerminalInstanceInfoSchema, {
21973
+ kind: "mutation",
21974
+ auth: "admin"
21975
+ }),
21976
+ deleteInstance: method(object({ instanceId: string().min(1) }), _void(), {
21977
+ kind: "mutation",
21978
+ auth: "admin"
21979
+ }),
21980
+ setInstanceEnabled: method(object({
21981
+ instanceId: string().min(1),
21982
+ enabled: boolean()
21983
+ }), TerminalInstanceInfoSchema, {
21984
+ kind: "mutation",
21985
+ auth: "admin"
21986
+ }),
21987
+ /** Existing automatic cameras are shown for explicit migration only. */
21988
+ listLegacyCameras: method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }),
21989
+ /** Explicitly adopt one legacy monitor camera, retaining its stable id. */
21990
+ adoptLegacyMonitor: method(object({
21991
+ stableId: string().min(1),
21992
+ name: string().trim().min(1).max(160).optional()
21993
+ }), TerminalInstanceInfoSchema, {
21994
+ kind: "mutation",
21995
+ auth: "admin"
21996
+ }),
21825
21997
  /** Live sessions currently hosted by the provider. */
21826
21998
  listSessions: method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }),
21827
21999
  /**
@@ -21853,7 +22025,13 @@ var terminalSessionCapability = {
21853
22025
  pullOutput: method(object({
21854
22026
  sessionId: string(),
21855
22027
  afterSeq: number().int().nonnegative(),
21856
- waitMs: number().int().min(0).max(2e3).default(0)
22028
+ waitMs: number().int().min(0).max(2e3).default(0),
22029
+ /**
22030
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
22031
+ * browser's initial repaint remains immediate; the camera snapshot
22032
+ * relay uses it to avoid encoding a blank startup frame.
22033
+ */
22034
+ waitForOutput: boolean().optional()
21857
22035
  }), TerminalOutputBatchSchema, {
21858
22036
  kind: "mutation",
21859
22037
  auth: "admin",
@@ -28781,12 +28959,6 @@ var recordingCapability = {
28781
28959
  auth: "admin"
28782
28960
  }),
28783
28961
  /**
28784
- * Move footage (recorded segments) from one recordings location to
28785
- * another — the drain workflow's mover (entity-routing spec Phase 4).
28786
- * Throttled copy → size-verify → delete source → index refresh; resumable
28787
- * by construction (copy-if-absent). Single-flight: one job at a time.
28788
- */
28789
- /**
28790
28962
  * Render a short GIF from recorded footage around `aroundMs` (low profile,
28791
28963
  * palette-free ffmpeg gif). Synchronous — the window is a few seconds of
28792
28964
  * `low`, rendering in ~1-2s. Built for notification attachments: the
@@ -28838,16 +29010,28 @@ var recordingCapability = {
28838
29010
  kind: "mutation",
28839
29011
  auth: "admin"
28840
29012
  }),
28841
- relocateFootage: method(RelocateFootageInputSchema, object({ jobId: string() }), {
29013
+ /** Internal migration-participant lease. Blocks new recorder attaches and
29014
+ * waits for writers to exit while their watchers index final segments. */
29015
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
28842
29016
  kind: "mutation",
28843
29017
  auth: "admin"
28844
29018
  }),
28845
- /** Every known relocate job (in-RAM, newest-first). */
28846
- getRelocateStatus: method(object({}), array(RelocateJobSchema).readonly(), {
28847
- kind: "query",
29019
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
29020
+ kind: "mutation",
29021
+ auth: "admin"
29022
+ }),
29023
+ /** Re-resolve location roots after the coordinator changes defaults. */
29024
+ refreshStorageLocationsForMigration: method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
29025
+ kind: "mutation",
28848
29026
  auth: "admin"
28849
29027
  }),
28850
- cancelRelocate: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
29028
+ /** Internal mover, callable only by the storage-migration coordinator. */
29029
+ startStorageMigrationMove: method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
29030
+ kind: "mutation",
29031
+ auth: "admin"
29032
+ }),
29033
+ getStorageMigrationMoveStatus: method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }),
29034
+ cancelStorageMigrationMove: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
28851
29035
  kind: "mutation",
28852
29036
  auth: "admin"
28853
29037
  })
@@ -30802,6 +30986,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
30802
30986
  ssoBridgeCapability,
30803
30987
  storageCapability,
30804
30988
  storageEvictableCapability,
30989
+ storageMigrationCapability,
30805
30990
  storageProviderCapability,
30806
30991
  streamBrokerCapability,
30807
30992
  streamCatalogCapability,
@@ -33830,7 +34015,7 @@ Object.freeze({
33830
34015
  addonId: null,
33831
34016
  access: "create"
33832
34017
  },
33833
- "pipelineAnalytics.cancelMediaRelocate": {
34018
+ "pipelineAnalytics.cancelStorageMigrationMove": {
33834
34019
  capName: "pipeline-analytics",
33835
34020
  capScope: "device",
33836
34021
  addonId: null,
@@ -33902,12 +34087,6 @@ Object.freeze({
33902
34087
  addonId: null,
33903
34088
  access: "view"
33904
34089
  },
33905
- "pipelineAnalytics.getMediaRelocateStatus": {
33906
- capName: "pipeline-analytics",
33907
- capScope: "device",
33908
- addonId: null,
33909
- access: "view"
33910
- },
33911
34090
  "pipelineAnalytics.getMotionEvents": {
33912
34091
  capName: "pipeline-analytics",
33913
34092
  capScope: "device",
@@ -33944,6 +34123,12 @@ Object.freeze({
33944
34123
  addonId: null,
33945
34124
  access: "view"
33946
34125
  },
34126
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
34127
+ capName: "pipeline-analytics",
34128
+ capScope: "device",
34129
+ addonId: null,
34130
+ access: "view"
34131
+ },
33947
34132
  "pipelineAnalytics.getTrack": {
33948
34133
  capName: "pipeline-analytics",
33949
34134
  capScope: "device",
@@ -34022,6 +34207,12 @@ Object.freeze({
34022
34207
  addonId: null,
34023
34208
  access: "view"
34024
34209
  },
34210
+ "pipelineAnalytics.pauseForStorageMigration": {
34211
+ capName: "pipeline-analytics",
34212
+ capScope: "device",
34213
+ addonId: null,
34214
+ access: "create"
34215
+ },
34025
34216
  "pipelineAnalytics.proposeRetrainAnnotations": {
34026
34217
  capName: "pipeline-analytics",
34027
34218
  capScope: "device",
@@ -34052,7 +34243,7 @@ Object.freeze({
34052
34243
  addonId: null,
34053
34244
  access: "create"
34054
34245
  },
34055
- "pipelineAnalytics.relocateMedia": {
34246
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
34056
34247
  capName: "pipeline-analytics",
34057
34248
  capScope: "device",
34058
34249
  addonId: null,
@@ -34064,6 +34255,12 @@ Object.freeze({
34064
34255
  addonId: null,
34065
34256
  access: "create"
34066
34257
  },
34258
+ "pipelineAnalytics.resumeForStorageMigration": {
34259
+ capName: "pipeline-analytics",
34260
+ capScope: "device",
34261
+ addonId: null,
34262
+ access: "create"
34263
+ },
34067
34264
  "pipelineAnalytics.saveRetrainAnnotations": {
34068
34265
  capName: "pipeline-analytics",
34069
34266
  capScope: "device",
@@ -34088,6 +34285,12 @@ Object.freeze({
34088
34285
  addonId: null,
34089
34286
  access: "create"
34090
34287
  },
34288
+ "pipelineAnalytics.startStorageMigrationMove": {
34289
+ capName: "pipeline-analytics",
34290
+ capScope: "device",
34291
+ addonId: null,
34292
+ access: "create"
34293
+ },
34091
34294
  "pipelineAnalytics.wipeAllAnalytics": {
34092
34295
  capName: "pipeline-analytics",
34093
34296
  capScope: "device",
@@ -34454,6 +34657,12 @@ Object.freeze({
34454
34657
  addonId: null,
34455
34658
  access: "view"
34456
34659
  },
34660
+ "pipelineOrchestrator.pauseForStorageMigration": {
34661
+ capName: "pipeline-orchestrator",
34662
+ capScope: "system",
34663
+ addonId: null,
34664
+ access: "create"
34665
+ },
34457
34666
  "pipelineOrchestrator.rebalance": {
34458
34667
  capName: "pipeline-orchestrator",
34459
34668
  capScope: "system",
@@ -34478,6 +34687,12 @@ Object.freeze({
34478
34687
  addonId: null,
34479
34688
  access: "view"
34480
34689
  },
34690
+ "pipelineOrchestrator.resumeForStorageMigration": {
34691
+ capName: "pipeline-orchestrator",
34692
+ capScope: "system",
34693
+ addonId: null,
34694
+ access: "create"
34695
+ },
34481
34696
  "pipelineOrchestrator.saveTemplate": {
34482
34697
  capName: "pipeline-orchestrator",
34483
34698
  capScope: "system",
@@ -34874,7 +35089,7 @@ Object.freeze({
34874
35089
  addonId: null,
34875
35090
  access: "create"
34876
35091
  },
34877
- "recording.cancelRelocate": {
35092
+ "recording.cancelStorageMigrationMove": {
34878
35093
  capName: "recording",
34879
35094
  capScope: "system",
34880
35095
  addonId: null,
@@ -34910,7 +35125,7 @@ Object.freeze({
34910
35125
  addonId: null,
34911
35126
  access: "view"
34912
35127
  },
34913
- "recording.getRelocateStatus": {
35128
+ "recording.getStorageMigrationMoveStatus": {
34914
35129
  capName: "recording",
34915
35130
  capScope: "system",
34916
35131
  addonId: null,
@@ -34934,6 +35149,12 @@ Object.freeze({
34934
35149
  addonId: null,
34935
35150
  access: "view"
34936
35151
  },
35152
+ "recording.pauseForStorageMigration": {
35153
+ capName: "recording",
35154
+ capScope: "system",
35155
+ addonId: null,
35156
+ access: "create"
35157
+ },
34937
35158
  "recording.pruneFootage": {
34938
35159
  capName: "recording",
34939
35160
  capScope: "system",
@@ -34952,7 +35173,7 @@ Object.freeze({
34952
35173
  addonId: null,
34953
35174
  access: "view"
34954
35175
  },
34955
- "recording.relocateFootage": {
35176
+ "recording.refreshStorageLocationsForMigration": {
34956
35177
  capName: "recording",
34957
35178
  capScope: "system",
34958
35179
  addonId: null,
@@ -34976,12 +35197,24 @@ Object.freeze({
34976
35197
  addonId: null,
34977
35198
  access: "create"
34978
35199
  },
35200
+ "recording.resumeForStorageMigration": {
35201
+ capName: "recording",
35202
+ capScope: "system",
35203
+ addonId: null,
35204
+ access: "create"
35205
+ },
34979
35206
  "recording.setDeviceConfig": {
34980
35207
  capName: "recording",
34981
35208
  capScope: "system",
34982
35209
  addonId: null,
34983
35210
  access: "create"
34984
35211
  },
35212
+ "recording.startStorageMigrationMove": {
35213
+ capName: "recording",
35214
+ capScope: "system",
35215
+ addonId: null,
35216
+ access: "create"
35217
+ },
34985
35218
  "recordingExport.cancelExport": {
34986
35219
  capName: "recordingExport",
34987
35220
  capScope: "system",
@@ -35372,6 +35605,30 @@ Object.freeze({
35372
35605
  addonId: null,
35373
35606
  access: "view"
35374
35607
  },
35608
+ "storageMigration.cancel": {
35609
+ capName: "storage-migration",
35610
+ capScope: "system",
35611
+ addonId: null,
35612
+ access: "create"
35613
+ },
35614
+ "storageMigration.plan": {
35615
+ capName: "storage-migration",
35616
+ capScope: "system",
35617
+ addonId: null,
35618
+ access: "view"
35619
+ },
35620
+ "storageMigration.start": {
35621
+ capName: "storage-migration",
35622
+ capScope: "system",
35623
+ addonId: null,
35624
+ access: "create"
35625
+ },
35626
+ "storageMigration.status": {
35627
+ capName: "storage-migration",
35628
+ capScope: "system",
35629
+ addonId: null,
35630
+ access: "view"
35631
+ },
35375
35632
  "storageProvider.abortUpload": {
35376
35633
  capName: "storage-provider",
35377
35634
  capScope: "system",
@@ -35750,12 +36007,42 @@ Object.freeze({
35750
36007
  addonId: null,
35751
36008
  access: "create"
35752
36009
  },
36010
+ "terminalSession.adoptLegacyMonitor": {
36011
+ capName: "terminal-session",
36012
+ capScope: "system",
36013
+ addonId: null,
36014
+ access: "create"
36015
+ },
35753
36016
  "terminalSession.close": {
35754
36017
  capName: "terminal-session",
35755
36018
  capScope: "system",
35756
36019
  addonId: null,
35757
36020
  access: "create"
35758
36021
  },
36022
+ "terminalSession.createInstance": {
36023
+ capName: "terminal-session",
36024
+ capScope: "system",
36025
+ addonId: null,
36026
+ access: "create"
36027
+ },
36028
+ "terminalSession.deleteInstance": {
36029
+ capName: "terminal-session",
36030
+ capScope: "system",
36031
+ addonId: null,
36032
+ access: "delete"
36033
+ },
36034
+ "terminalSession.listInstances": {
36035
+ capName: "terminal-session",
36036
+ capScope: "system",
36037
+ addonId: null,
36038
+ access: "view"
36039
+ },
36040
+ "terminalSession.listLegacyCameras": {
36041
+ capName: "terminal-session",
36042
+ capScope: "system",
36043
+ addonId: null,
36044
+ access: "view"
36045
+ },
35759
36046
  "terminalSession.listProfiles": {
35760
36047
  capName: "terminal-session",
35761
36048
  capScope: "system",
@@ -35786,6 +36073,12 @@ Object.freeze({
35786
36073
  addonId: null,
35787
36074
  access: "create"
35788
36075
  },
36076
+ "terminalSession.setInstanceEnabled": {
36077
+ capName: "terminal-session",
36078
+ capScope: "system",
36079
+ addonId: null,
36080
+ access: "create"
36081
+ },
35789
36082
  "terminalSession.writeInput": {
35790
36083
  capName: "terminal-session",
35791
36084
  capScope: "system",