@camstack/addon-ai 0.2.16 → 0.2.17

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 (3) hide show
  1. package/dist/addon.js +316 -31
  2. package/dist/addon.mjs +316 -31
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -7640,12 +7640,11 @@ var RecordingConfigSchema = object({
7640
7640
  /**
7641
7641
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7642
7642
  *
7643
- * One shape shared by the recorder's `relocateFootage` (segments) and
7644
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7645
- * page renders both movers with one component. Jobs are in-RAM (a restart
7646
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7647
- * after verify) and each completed/failed run also lands one durable ops-log
7648
- * row on the owning addon's surface.
7643
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7644
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7645
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7646
+ * Each completed/failed run also lands one durable ops-log row on its owning
7647
+ * addon surface.
7649
7648
  */
7650
7649
  var RelocateJobStateSchema = _enum([
7651
7650
  "running",
@@ -7672,19 +7671,100 @@ var RelocateJobSchema = object({
7672
7671
  finishedAt: number().nullable(),
7673
7672
  error: string().nullable()
7674
7673
  });
7674
+ /** Profile-derived footage selection used only by the migration coordinator:
7675
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7676
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7675
7677
  var RelocateFootageInputSchema = object({
7676
- deviceId: number().optional(),
7677
7678
  fromLocationId: string(),
7678
7679
  toLocationId: string(),
7679
7680
  entities: array(_enum(["segments"])).optional(),
7681
+ /** Limits relocation to the logical profile class. Omit only for the
7682
+ * pre-orchestration compatibility path. */
7683
+ footageClass: RelocateFootageClassSchema.optional(),
7680
7684
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7681
7685
  * never allowed to starve live writers. */
7682
7686
  throttleMbps: number().min(1).max(1e3).optional()
7683
7687
  });
7684
- var RelocateMediaInputSchema = object({
7685
- deviceId: number().optional(),
7688
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7689
+ * from persistent recording settings: a migration never changes
7690
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7691
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7692
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7693
+ var StorageMigrationMediaMoveInputSchema = object({
7686
7694
  toLocationId: string(),
7687
7695
  throttleMbps: number().min(1).max(1e3).optional()
7696
+ }).extend({ leaseId: string().min(1) });
7697
+ /** The independently selectable logical storage classes. `recordings`
7698
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7699
+ * segments; `eventMedia` is post-analysis blobs. */
7700
+ var StorageMigrationClassSchema = _enum([
7701
+ "recordings",
7702
+ "recordingsLow",
7703
+ "eventMedia"
7704
+ ]);
7705
+ /** A destination is always an existing, fully-qualified location id. The
7706
+ * migration API intentionally never changes a source location's `basePath`:
7707
+ * callers create a new `<type>:<slug>` location, then select it here. */
7708
+ var StorageMigrationDestinationsSchema = object({
7709
+ recordings: string().min(1).optional(),
7710
+ recordingsLow: string().min(1).optional(),
7711
+ eventMedia: string().min(1).optional()
7712
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7713
+ /** Shared input for planning and starting an orchestrated storage migration. */
7714
+ var StorageMigrationInputSchema = object({
7715
+ destinations: StorageMigrationDestinationsSchema,
7716
+ throttleMbps: number().min(1).max(1e3).optional()
7717
+ });
7718
+ /** The durable coordinator state machine. The only phase that changes default
7719
+ * locations is `repointing`, after every selected mover has completed and been
7720
+ * verified. */
7721
+ var StorageMigrationPhaseSchema = _enum([
7722
+ "planning",
7723
+ "pausing",
7724
+ "moving",
7725
+ "verifying",
7726
+ "repointing",
7727
+ "refreshing",
7728
+ "resuming",
7729
+ "done",
7730
+ "failed",
7731
+ "cancelled"
7732
+ ]);
7733
+ var StorageMigrationParticipantSchema = _enum([
7734
+ "pipeline",
7735
+ "recorder",
7736
+ "analytics"
7737
+ ]);
7738
+ var StorageMigrationMoveSchema = object({
7739
+ storageClass: StorageMigrationClassSchema,
7740
+ fromLocationId: string(),
7741
+ toLocationId: string(),
7742
+ moverJobId: string().nullable(),
7743
+ state: RelocateJobStateSchema.nullable(),
7744
+ error: string().nullable()
7745
+ });
7746
+ var StorageMigrationJobSchema = object({
7747
+ jobId: string(),
7748
+ phase: StorageMigrationPhaseSchema,
7749
+ destinations: StorageMigrationDestinationsSchema,
7750
+ throttleMbps: number(),
7751
+ moves: array(StorageMigrationMoveSchema),
7752
+ pauseLeaseId: string().nullable(),
7753
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7754
+ repointed: boolean(),
7755
+ cancelRequested: boolean(),
7756
+ startedAt: number(),
7757
+ updatedAt: number(),
7758
+ finishedAt: number().nullable(),
7759
+ error: string().nullable()
7760
+ });
7761
+ var StorageMigrationPlanSchema = object({
7762
+ destinations: StorageMigrationDestinationsSchema,
7763
+ moves: array(object({
7764
+ storageClass: StorageMigrationClassSchema,
7765
+ fromLocationId: string(),
7766
+ toLocationId: string()
7767
+ }))
7688
7768
  });
7689
7769
  /**
7690
7770
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16105,13 +16185,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16105
16185
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16106
16186
  kind: "mutation",
16107
16187
  auth: "admin"
16108
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16188
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16109
16189
  kind: "mutation",
16110
16190
  auth: "admin"
16111
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16112
- kind: "query",
16191
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16192
+ kind: "mutation",
16193
+ auth: "admin"
16194
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16195
+ kind: "mutation",
16196
+ auth: "admin"
16197
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16198
+ kind: "mutation",
16113
16199
  auth: "admin"
16114
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16200
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16115
16201
  kind: "mutation",
16116
16202
  auth: "admin"
16117
16203
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17608,7 +17694,13 @@ var NodeInferenceDevicesSchema = object({
17608
17694
  reachable: boolean(),
17609
17695
  devices: array(NodeInferenceDeviceSchema).readonly()
17610
17696
  });
17611
- method(object({
17697
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17698
+ kind: "mutation",
17699
+ auth: "admin"
17700
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17701
+ kind: "mutation",
17702
+ auth: "admin"
17703
+ }), method(object({
17612
17704
  deviceId: number(),
17613
17705
  agentNodeId: string()
17614
17706
  }), object({ success: literal(true) }), {
@@ -18282,6 +18374,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18282
18374
  locationId: string(),
18283
18375
  targetBytes: number().int().positive()
18284
18376
  }), EvictResultSchema, { kind: "mutation" });
18377
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18378
+ kind: "mutation",
18379
+ auth: "admin"
18380
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18381
+ kind: "mutation",
18382
+ auth: "admin"
18383
+ });
18285
18384
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18286
18385
  providerId: string().min(1),
18287
18386
  displayName: string().min(1),
@@ -18385,6 +18484,28 @@ var TerminalProfileInfoSchema = object({
18385
18484
  label: string(),
18386
18485
  description: string().optional()
18387
18486
  });
18487
+ /**
18488
+ * A durable operator-created Terminal instance. Profiles are templates; only
18489
+ * an instance declares a camera.
18490
+ */
18491
+ var TerminalInstanceInfoSchema = object({
18492
+ instanceId: string(),
18493
+ cameraStableId: string(),
18494
+ nodeId: string(),
18495
+ profileId: string(),
18496
+ profileLabel: string(),
18497
+ name: string(),
18498
+ enabled: boolean()
18499
+ });
18500
+ var TerminalLegacyCameraSchema = object({
18501
+ stableId: string(),
18502
+ nodeId: string(),
18503
+ profileId: string(),
18504
+ profileLabel: string(),
18505
+ name: string(),
18506
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18507
+ adoptable: boolean()
18508
+ });
18388
18509
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18389
18510
  seq: number().int().positive(),
18390
18511
  kind: literal("data"),
@@ -18401,7 +18522,29 @@ var TerminalOutputBatchSchema = object({
18401
18522
  snapshot: string().optional(),
18402
18523
  events: array(TerminalOutputEventSchema).readonly()
18403
18524
  });
18404
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18525
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18526
+ targetNodeId: string().min(1),
18527
+ profileId: string().min(1),
18528
+ name: string().trim().min(1).max(160).optional()
18529
+ }), TerminalInstanceInfoSchema, {
18530
+ kind: "mutation",
18531
+ auth: "admin"
18532
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18533
+ kind: "mutation",
18534
+ auth: "admin"
18535
+ }), method(object({
18536
+ instanceId: string().min(1),
18537
+ enabled: boolean()
18538
+ }), TerminalInstanceInfoSchema, {
18539
+ kind: "mutation",
18540
+ auth: "admin"
18541
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18542
+ stableId: string().min(1),
18543
+ name: string().trim().min(1).max(160).optional()
18544
+ }), TerminalInstanceInfoSchema, {
18545
+ kind: "mutation",
18546
+ auth: "admin"
18547
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18405
18548
  profileId: string(),
18406
18549
  cols: number().int().positive(),
18407
18550
  rows: number().int().positive()
@@ -18418,7 +18561,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18418
18561
  }), method(object({
18419
18562
  sessionId: string(),
18420
18563
  afterSeq: number().int().nonnegative(),
18421
- waitMs: number().int().min(0).max(2e3).default(0)
18564
+ waitMs: number().int().min(0).max(2e3).default(0),
18565
+ /**
18566
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18567
+ * browser's initial repaint remains immediate; the camera snapshot
18568
+ * relay uses it to avoid encoding a blank startup frame.
18569
+ */
18570
+ waitForOutput: boolean().optional()
18422
18571
  }), TerminalOutputBatchSchema, {
18423
18572
  kind: "mutation",
18424
18573
  auth: "admin",
@@ -20359,6 +20508,7 @@ var FaceInfoSchema = object({
20359
20508
  var FaceFilterEnum = _enum([
20360
20509
  "unassigned",
20361
20510
  "recognized",
20511
+ "identified",
20362
20512
  "all"
20363
20513
  ]);
20364
20514
  var MediaFileLiteSchema$1 = object({
@@ -20387,6 +20537,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20387
20537
  kind: "mutation",
20388
20538
  auth: "admin"
20389
20539
  }), method(object({
20540
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20541
+ deviceId: number().int().optional(),
20390
20542
  limit: number().int().positive().optional(),
20391
20543
  filter: FaceFilterEnum.optional(),
20392
20544
  /**
@@ -22152,6 +22304,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22152
22304
  capName: string().min(1).max(64),
22153
22305
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22154
22306
  valuePath: string().min(1).max(64)
22307
+ }),
22308
+ object({
22309
+ kind: literal("latest-recognition"),
22310
+ recognition: _enum(["person", "plate"])
22155
22311
  })
22156
22312
  ]);
22157
22313
  var OsdSlotBindingSchema = object({
@@ -22257,6 +22413,15 @@ method(object({ deviceId: number().int() }), object({
22257
22413
  }), object({ success: literal(true) }), {
22258
22414
  kind: "mutation",
22259
22415
  auth: "admin"
22416
+ }), method(object({
22417
+ sourceDeviceId: number().int(),
22418
+ targetDeviceId: number().int()
22419
+ }), object({
22420
+ copied: number().int().nonnegative(),
22421
+ skipped: number().int().nonnegative()
22422
+ }), {
22423
+ kind: "mutation",
22424
+ auth: "admin"
22260
22425
  }), method(object({
22261
22426
  deviceId: number().int(),
22262
22427
  slotId: string().min(1),
@@ -23142,13 +23307,19 @@ method(object({
23142
23307
  }), {
23143
23308
  kind: "mutation",
23144
23309
  auth: "admin"
23145
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23310
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23146
23311
  kind: "mutation",
23147
23312
  auth: "admin"
23148
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23149
- kind: "query",
23313
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23314
+ kind: "mutation",
23150
23315
  auth: "admin"
23151
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23316
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23317
+ kind: "mutation",
23318
+ auth: "admin"
23319
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23320
+ kind: "mutation",
23321
+ auth: "admin"
23322
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23152
23323
  kind: "mutation",
23153
23324
  auth: "admin"
23154
23325
  });
@@ -27270,6 +27441,12 @@ Object.freeze({
27270
27441
  addonId: null,
27271
27442
  access: "delete"
27272
27443
  },
27444
+ "osdManager.copyDeviceConfiguration": {
27445
+ capName: "osd-manager",
27446
+ capScope: "system",
27447
+ addonId: null,
27448
+ access: "create"
27449
+ },
27273
27450
  "osdManager.getConditionSupport": {
27274
27451
  capName: "osd-manager",
27275
27452
  capScope: "system",
@@ -27366,7 +27543,7 @@ Object.freeze({
27366
27543
  addonId: null,
27367
27544
  access: "create"
27368
27545
  },
27369
- "pipelineAnalytics.cancelMediaRelocate": {
27546
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27370
27547
  capName: "pipeline-analytics",
27371
27548
  capScope: "device",
27372
27549
  addonId: null,
@@ -27438,12 +27615,6 @@ Object.freeze({
27438
27615
  addonId: null,
27439
27616
  access: "view"
27440
27617
  },
27441
- "pipelineAnalytics.getMediaRelocateStatus": {
27442
- capName: "pipeline-analytics",
27443
- capScope: "device",
27444
- addonId: null,
27445
- access: "view"
27446
- },
27447
27618
  "pipelineAnalytics.getMotionEvents": {
27448
27619
  capName: "pipeline-analytics",
27449
27620
  capScope: "device",
@@ -27480,6 +27651,12 @@ Object.freeze({
27480
27651
  addonId: null,
27481
27652
  access: "view"
27482
27653
  },
27654
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27655
+ capName: "pipeline-analytics",
27656
+ capScope: "device",
27657
+ addonId: null,
27658
+ access: "view"
27659
+ },
27483
27660
  "pipelineAnalytics.getTrack": {
27484
27661
  capName: "pipeline-analytics",
27485
27662
  capScope: "device",
@@ -27558,6 +27735,12 @@ Object.freeze({
27558
27735
  addonId: null,
27559
27736
  access: "view"
27560
27737
  },
27738
+ "pipelineAnalytics.pauseForStorageMigration": {
27739
+ capName: "pipeline-analytics",
27740
+ capScope: "device",
27741
+ addonId: null,
27742
+ access: "create"
27743
+ },
27561
27744
  "pipelineAnalytics.proposeRetrainAnnotations": {
27562
27745
  capName: "pipeline-analytics",
27563
27746
  capScope: "device",
@@ -27588,7 +27771,7 @@ Object.freeze({
27588
27771
  addonId: null,
27589
27772
  access: "create"
27590
27773
  },
27591
- "pipelineAnalytics.relocateMedia": {
27774
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27592
27775
  capName: "pipeline-analytics",
27593
27776
  capScope: "device",
27594
27777
  addonId: null,
@@ -27600,6 +27783,12 @@ Object.freeze({
27600
27783
  addonId: null,
27601
27784
  access: "create"
27602
27785
  },
27786
+ "pipelineAnalytics.resumeForStorageMigration": {
27787
+ capName: "pipeline-analytics",
27788
+ capScope: "device",
27789
+ addonId: null,
27790
+ access: "create"
27791
+ },
27603
27792
  "pipelineAnalytics.saveRetrainAnnotations": {
27604
27793
  capName: "pipeline-analytics",
27605
27794
  capScope: "device",
@@ -27624,6 +27813,12 @@ Object.freeze({
27624
27813
  addonId: null,
27625
27814
  access: "create"
27626
27815
  },
27816
+ "pipelineAnalytics.startStorageMigrationMove": {
27817
+ capName: "pipeline-analytics",
27818
+ capScope: "device",
27819
+ addonId: null,
27820
+ access: "create"
27821
+ },
27627
27822
  "pipelineAnalytics.wipeAllAnalytics": {
27628
27823
  capName: "pipeline-analytics",
27629
27824
  capScope: "device",
@@ -27990,6 +28185,12 @@ Object.freeze({
27990
28185
  addonId: null,
27991
28186
  access: "view"
27992
28187
  },
28188
+ "pipelineOrchestrator.pauseForStorageMigration": {
28189
+ capName: "pipeline-orchestrator",
28190
+ capScope: "system",
28191
+ addonId: null,
28192
+ access: "create"
28193
+ },
27993
28194
  "pipelineOrchestrator.rebalance": {
27994
28195
  capName: "pipeline-orchestrator",
27995
28196
  capScope: "system",
@@ -28014,6 +28215,12 @@ Object.freeze({
28014
28215
  addonId: null,
28015
28216
  access: "view"
28016
28217
  },
28218
+ "pipelineOrchestrator.resumeForStorageMigration": {
28219
+ capName: "pipeline-orchestrator",
28220
+ capScope: "system",
28221
+ addonId: null,
28222
+ access: "create"
28223
+ },
28017
28224
  "pipelineOrchestrator.saveTemplate": {
28018
28225
  capName: "pipeline-orchestrator",
28019
28226
  capScope: "system",
@@ -28410,7 +28617,7 @@ Object.freeze({
28410
28617
  addonId: null,
28411
28618
  access: "create"
28412
28619
  },
28413
- "recording.cancelRelocate": {
28620
+ "recording.cancelStorageMigrationMove": {
28414
28621
  capName: "recording",
28415
28622
  capScope: "system",
28416
28623
  addonId: null,
@@ -28446,7 +28653,7 @@ Object.freeze({
28446
28653
  addonId: null,
28447
28654
  access: "view"
28448
28655
  },
28449
- "recording.getRelocateStatus": {
28656
+ "recording.getStorageMigrationMoveStatus": {
28450
28657
  capName: "recording",
28451
28658
  capScope: "system",
28452
28659
  addonId: null,
@@ -28470,6 +28677,12 @@ Object.freeze({
28470
28677
  addonId: null,
28471
28678
  access: "view"
28472
28679
  },
28680
+ "recording.pauseForStorageMigration": {
28681
+ capName: "recording",
28682
+ capScope: "system",
28683
+ addonId: null,
28684
+ access: "create"
28685
+ },
28473
28686
  "recording.pruneFootage": {
28474
28687
  capName: "recording",
28475
28688
  capScope: "system",
@@ -28488,7 +28701,7 @@ Object.freeze({
28488
28701
  addonId: null,
28489
28702
  access: "view"
28490
28703
  },
28491
- "recording.relocateFootage": {
28704
+ "recording.refreshStorageLocationsForMigration": {
28492
28705
  capName: "recording",
28493
28706
  capScope: "system",
28494
28707
  addonId: null,
@@ -28512,12 +28725,24 @@ Object.freeze({
28512
28725
  addonId: null,
28513
28726
  access: "create"
28514
28727
  },
28728
+ "recording.resumeForStorageMigration": {
28729
+ capName: "recording",
28730
+ capScope: "system",
28731
+ addonId: null,
28732
+ access: "create"
28733
+ },
28515
28734
  "recording.setDeviceConfig": {
28516
28735
  capName: "recording",
28517
28736
  capScope: "system",
28518
28737
  addonId: null,
28519
28738
  access: "create"
28520
28739
  },
28740
+ "recording.startStorageMigrationMove": {
28741
+ capName: "recording",
28742
+ capScope: "system",
28743
+ addonId: null,
28744
+ access: "create"
28745
+ },
28521
28746
  "recordingExport.cancelExport": {
28522
28747
  capName: "recordingExport",
28523
28748
  capScope: "system",
@@ -28908,6 +29133,30 @@ Object.freeze({
28908
29133
  addonId: null,
28909
29134
  access: "view"
28910
29135
  },
29136
+ "storageMigration.cancel": {
29137
+ capName: "storage-migration",
29138
+ capScope: "system",
29139
+ addonId: null,
29140
+ access: "create"
29141
+ },
29142
+ "storageMigration.plan": {
29143
+ capName: "storage-migration",
29144
+ capScope: "system",
29145
+ addonId: null,
29146
+ access: "view"
29147
+ },
29148
+ "storageMigration.start": {
29149
+ capName: "storage-migration",
29150
+ capScope: "system",
29151
+ addonId: null,
29152
+ access: "create"
29153
+ },
29154
+ "storageMigration.status": {
29155
+ capName: "storage-migration",
29156
+ capScope: "system",
29157
+ addonId: null,
29158
+ access: "view"
29159
+ },
28911
29160
  "storageProvider.abortUpload": {
28912
29161
  capName: "storage-provider",
28913
29162
  capScope: "system",
@@ -29286,12 +29535,42 @@ Object.freeze({
29286
29535
  addonId: null,
29287
29536
  access: "create"
29288
29537
  },
29538
+ "terminalSession.adoptLegacyMonitor": {
29539
+ capName: "terminal-session",
29540
+ capScope: "system",
29541
+ addonId: null,
29542
+ access: "create"
29543
+ },
29289
29544
  "terminalSession.close": {
29290
29545
  capName: "terminal-session",
29291
29546
  capScope: "system",
29292
29547
  addonId: null,
29293
29548
  access: "create"
29294
29549
  },
29550
+ "terminalSession.createInstance": {
29551
+ capName: "terminal-session",
29552
+ capScope: "system",
29553
+ addonId: null,
29554
+ access: "create"
29555
+ },
29556
+ "terminalSession.deleteInstance": {
29557
+ capName: "terminal-session",
29558
+ capScope: "system",
29559
+ addonId: null,
29560
+ access: "delete"
29561
+ },
29562
+ "terminalSession.listInstances": {
29563
+ capName: "terminal-session",
29564
+ capScope: "system",
29565
+ addonId: null,
29566
+ access: "view"
29567
+ },
29568
+ "terminalSession.listLegacyCameras": {
29569
+ capName: "terminal-session",
29570
+ capScope: "system",
29571
+ addonId: null,
29572
+ access: "view"
29573
+ },
29295
29574
  "terminalSession.listProfiles": {
29296
29575
  capName: "terminal-session",
29297
29576
  capScope: "system",
@@ -29322,6 +29601,12 @@ Object.freeze({
29322
29601
  addonId: null,
29323
29602
  access: "create"
29324
29603
  },
29604
+ "terminalSession.setInstanceEnabled": {
29605
+ capName: "terminal-session",
29606
+ capScope: "system",
29607
+ addonId: null,
29608
+ access: "create"
29609
+ },
29325
29610
  "terminalSession.writeInput": {
29326
29611
  capName: "terminal-session",
29327
29612
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -7602,12 +7602,11 @@ var RecordingConfigSchema = object({
7602
7602
  /**
7603
7603
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7604
7604
  *
7605
- * One shape shared by the recorder's `relocateFootage` (segments) and
7606
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7607
- * page renders both movers with one component. Jobs are in-RAM (a restart
7608
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7609
- * after verify) and each completed/failed run also lands one durable ops-log
7610
- * row on the owning addon's surface.
7605
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7606
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7607
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7608
+ * Each completed/failed run also lands one durable ops-log row on its owning
7609
+ * addon surface.
7611
7610
  */
7612
7611
  var RelocateJobStateSchema = _enum([
7613
7612
  "running",
@@ -7634,19 +7633,100 @@ var RelocateJobSchema = object({
7634
7633
  finishedAt: number().nullable(),
7635
7634
  error: string().nullable()
7636
7635
  });
7636
+ /** Profile-derived footage selection used only by the migration coordinator:
7637
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7638
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7637
7639
  var RelocateFootageInputSchema = object({
7638
- deviceId: number().optional(),
7639
7640
  fromLocationId: string(),
7640
7641
  toLocationId: string(),
7641
7642
  entities: array(_enum(["segments"])).optional(),
7643
+ /** Limits relocation to the logical profile class. Omit only for the
7644
+ * pre-orchestration compatibility path. */
7645
+ footageClass: RelocateFootageClassSchema.optional(),
7642
7646
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7643
7647
  * never allowed to starve live writers. */
7644
7648
  throttleMbps: number().min(1).max(1e3).optional()
7645
7649
  });
7646
- var RelocateMediaInputSchema = object({
7647
- deviceId: number().optional(),
7650
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7651
+ * from persistent recording settings: a migration never changes
7652
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7653
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7654
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7655
+ var StorageMigrationMediaMoveInputSchema = object({
7648
7656
  toLocationId: string(),
7649
7657
  throttleMbps: number().min(1).max(1e3).optional()
7658
+ }).extend({ leaseId: string().min(1) });
7659
+ /** The independently selectable logical storage classes. `recordings`
7660
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7661
+ * segments; `eventMedia` is post-analysis blobs. */
7662
+ var StorageMigrationClassSchema = _enum([
7663
+ "recordings",
7664
+ "recordingsLow",
7665
+ "eventMedia"
7666
+ ]);
7667
+ /** A destination is always an existing, fully-qualified location id. The
7668
+ * migration API intentionally never changes a source location's `basePath`:
7669
+ * callers create a new `<type>:<slug>` location, then select it here. */
7670
+ var StorageMigrationDestinationsSchema = object({
7671
+ recordings: string().min(1).optional(),
7672
+ recordingsLow: string().min(1).optional(),
7673
+ eventMedia: string().min(1).optional()
7674
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7675
+ /** Shared input for planning and starting an orchestrated storage migration. */
7676
+ var StorageMigrationInputSchema = object({
7677
+ destinations: StorageMigrationDestinationsSchema,
7678
+ throttleMbps: number().min(1).max(1e3).optional()
7679
+ });
7680
+ /** The durable coordinator state machine. The only phase that changes default
7681
+ * locations is `repointing`, after every selected mover has completed and been
7682
+ * verified. */
7683
+ var StorageMigrationPhaseSchema = _enum([
7684
+ "planning",
7685
+ "pausing",
7686
+ "moving",
7687
+ "verifying",
7688
+ "repointing",
7689
+ "refreshing",
7690
+ "resuming",
7691
+ "done",
7692
+ "failed",
7693
+ "cancelled"
7694
+ ]);
7695
+ var StorageMigrationParticipantSchema = _enum([
7696
+ "pipeline",
7697
+ "recorder",
7698
+ "analytics"
7699
+ ]);
7700
+ var StorageMigrationMoveSchema = object({
7701
+ storageClass: StorageMigrationClassSchema,
7702
+ fromLocationId: string(),
7703
+ toLocationId: string(),
7704
+ moverJobId: string().nullable(),
7705
+ state: RelocateJobStateSchema.nullable(),
7706
+ error: string().nullable()
7707
+ });
7708
+ var StorageMigrationJobSchema = object({
7709
+ jobId: string(),
7710
+ phase: StorageMigrationPhaseSchema,
7711
+ destinations: StorageMigrationDestinationsSchema,
7712
+ throttleMbps: number(),
7713
+ moves: array(StorageMigrationMoveSchema),
7714
+ pauseLeaseId: string().nullable(),
7715
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7716
+ repointed: boolean(),
7717
+ cancelRequested: boolean(),
7718
+ startedAt: number(),
7719
+ updatedAt: number(),
7720
+ finishedAt: number().nullable(),
7721
+ error: string().nullable()
7722
+ });
7723
+ var StorageMigrationPlanSchema = object({
7724
+ destinations: StorageMigrationDestinationsSchema,
7725
+ moves: array(object({
7726
+ storageClass: StorageMigrationClassSchema,
7727
+ fromLocationId: string(),
7728
+ toLocationId: string()
7729
+ }))
7650
7730
  });
7651
7731
  /**
7652
7732
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16067,13 +16147,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16067
16147
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16068
16148
  kind: "mutation",
16069
16149
  auth: "admin"
16070
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16150
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16071
16151
  kind: "mutation",
16072
16152
  auth: "admin"
16073
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16074
- kind: "query",
16153
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16154
+ kind: "mutation",
16155
+ auth: "admin"
16156
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16157
+ kind: "mutation",
16158
+ auth: "admin"
16159
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16160
+ kind: "mutation",
16075
16161
  auth: "admin"
16076
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16162
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16077
16163
  kind: "mutation",
16078
16164
  auth: "admin"
16079
16165
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17570,7 +17656,13 @@ var NodeInferenceDevicesSchema = object({
17570
17656
  reachable: boolean(),
17571
17657
  devices: array(NodeInferenceDeviceSchema).readonly()
17572
17658
  });
17573
- method(object({
17659
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17660
+ kind: "mutation",
17661
+ auth: "admin"
17662
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17663
+ kind: "mutation",
17664
+ auth: "admin"
17665
+ }), method(object({
17574
17666
  deviceId: number(),
17575
17667
  agentNodeId: string()
17576
17668
  }), object({ success: literal(true) }), {
@@ -18244,6 +18336,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18244
18336
  locationId: string(),
18245
18337
  targetBytes: number().int().positive()
18246
18338
  }), EvictResultSchema, { kind: "mutation" });
18339
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18340
+ kind: "mutation",
18341
+ auth: "admin"
18342
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18343
+ kind: "mutation",
18344
+ auth: "admin"
18345
+ });
18247
18346
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18248
18347
  providerId: string().min(1),
18249
18348
  displayName: string().min(1),
@@ -18347,6 +18446,28 @@ var TerminalProfileInfoSchema = object({
18347
18446
  label: string(),
18348
18447
  description: string().optional()
18349
18448
  });
18449
+ /**
18450
+ * A durable operator-created Terminal instance. Profiles are templates; only
18451
+ * an instance declares a camera.
18452
+ */
18453
+ var TerminalInstanceInfoSchema = object({
18454
+ instanceId: string(),
18455
+ cameraStableId: string(),
18456
+ nodeId: string(),
18457
+ profileId: string(),
18458
+ profileLabel: string(),
18459
+ name: string(),
18460
+ enabled: boolean()
18461
+ });
18462
+ var TerminalLegacyCameraSchema = object({
18463
+ stableId: string(),
18464
+ nodeId: string(),
18465
+ profileId: string(),
18466
+ profileLabel: string(),
18467
+ name: string(),
18468
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18469
+ adoptable: boolean()
18470
+ });
18350
18471
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18351
18472
  seq: number().int().positive(),
18352
18473
  kind: literal("data"),
@@ -18363,7 +18484,29 @@ var TerminalOutputBatchSchema = object({
18363
18484
  snapshot: string().optional(),
18364
18485
  events: array(TerminalOutputEventSchema).readonly()
18365
18486
  });
18366
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18487
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18488
+ targetNodeId: string().min(1),
18489
+ profileId: string().min(1),
18490
+ name: string().trim().min(1).max(160).optional()
18491
+ }), TerminalInstanceInfoSchema, {
18492
+ kind: "mutation",
18493
+ auth: "admin"
18494
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18495
+ kind: "mutation",
18496
+ auth: "admin"
18497
+ }), method(object({
18498
+ instanceId: string().min(1),
18499
+ enabled: boolean()
18500
+ }), TerminalInstanceInfoSchema, {
18501
+ kind: "mutation",
18502
+ auth: "admin"
18503
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18504
+ stableId: string().min(1),
18505
+ name: string().trim().min(1).max(160).optional()
18506
+ }), TerminalInstanceInfoSchema, {
18507
+ kind: "mutation",
18508
+ auth: "admin"
18509
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18367
18510
  profileId: string(),
18368
18511
  cols: number().int().positive(),
18369
18512
  rows: number().int().positive()
@@ -18380,7 +18523,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18380
18523
  }), method(object({
18381
18524
  sessionId: string(),
18382
18525
  afterSeq: number().int().nonnegative(),
18383
- waitMs: number().int().min(0).max(2e3).default(0)
18526
+ waitMs: number().int().min(0).max(2e3).default(0),
18527
+ /**
18528
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18529
+ * browser's initial repaint remains immediate; the camera snapshot
18530
+ * relay uses it to avoid encoding a blank startup frame.
18531
+ */
18532
+ waitForOutput: boolean().optional()
18384
18533
  }), TerminalOutputBatchSchema, {
18385
18534
  kind: "mutation",
18386
18535
  auth: "admin",
@@ -20321,6 +20470,7 @@ var FaceInfoSchema = object({
20321
20470
  var FaceFilterEnum = _enum([
20322
20471
  "unassigned",
20323
20472
  "recognized",
20473
+ "identified",
20324
20474
  "all"
20325
20475
  ]);
20326
20476
  var MediaFileLiteSchema$1 = object({
@@ -20349,6 +20499,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20349
20499
  kind: "mutation",
20350
20500
  auth: "admin"
20351
20501
  }), method(object({
20502
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20503
+ deviceId: number().int().optional(),
20352
20504
  limit: number().int().positive().optional(),
20353
20505
  filter: FaceFilterEnum.optional(),
20354
20506
  /**
@@ -22114,6 +22266,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22114
22266
  capName: string().min(1).max(64),
22115
22267
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22116
22268
  valuePath: string().min(1).max(64)
22269
+ }),
22270
+ object({
22271
+ kind: literal("latest-recognition"),
22272
+ recognition: _enum(["person", "plate"])
22117
22273
  })
22118
22274
  ]);
22119
22275
  var OsdSlotBindingSchema = object({
@@ -22219,6 +22375,15 @@ method(object({ deviceId: number().int() }), object({
22219
22375
  }), object({ success: literal(true) }), {
22220
22376
  kind: "mutation",
22221
22377
  auth: "admin"
22378
+ }), method(object({
22379
+ sourceDeviceId: number().int(),
22380
+ targetDeviceId: number().int()
22381
+ }), object({
22382
+ copied: number().int().nonnegative(),
22383
+ skipped: number().int().nonnegative()
22384
+ }), {
22385
+ kind: "mutation",
22386
+ auth: "admin"
22222
22387
  }), method(object({
22223
22388
  deviceId: number().int(),
22224
22389
  slotId: string().min(1),
@@ -23104,13 +23269,19 @@ method(object({
23104
23269
  }), {
23105
23270
  kind: "mutation",
23106
23271
  auth: "admin"
23107
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23272
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23108
23273
  kind: "mutation",
23109
23274
  auth: "admin"
23110
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23111
- kind: "query",
23275
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23276
+ kind: "mutation",
23112
23277
  auth: "admin"
23113
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23278
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23279
+ kind: "mutation",
23280
+ auth: "admin"
23281
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23282
+ kind: "mutation",
23283
+ auth: "admin"
23284
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23114
23285
  kind: "mutation",
23115
23286
  auth: "admin"
23116
23287
  });
@@ -27232,6 +27403,12 @@ Object.freeze({
27232
27403
  addonId: null,
27233
27404
  access: "delete"
27234
27405
  },
27406
+ "osdManager.copyDeviceConfiguration": {
27407
+ capName: "osd-manager",
27408
+ capScope: "system",
27409
+ addonId: null,
27410
+ access: "create"
27411
+ },
27235
27412
  "osdManager.getConditionSupport": {
27236
27413
  capName: "osd-manager",
27237
27414
  capScope: "system",
@@ -27328,7 +27505,7 @@ Object.freeze({
27328
27505
  addonId: null,
27329
27506
  access: "create"
27330
27507
  },
27331
- "pipelineAnalytics.cancelMediaRelocate": {
27508
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27332
27509
  capName: "pipeline-analytics",
27333
27510
  capScope: "device",
27334
27511
  addonId: null,
@@ -27400,12 +27577,6 @@ Object.freeze({
27400
27577
  addonId: null,
27401
27578
  access: "view"
27402
27579
  },
27403
- "pipelineAnalytics.getMediaRelocateStatus": {
27404
- capName: "pipeline-analytics",
27405
- capScope: "device",
27406
- addonId: null,
27407
- access: "view"
27408
- },
27409
27580
  "pipelineAnalytics.getMotionEvents": {
27410
27581
  capName: "pipeline-analytics",
27411
27582
  capScope: "device",
@@ -27442,6 +27613,12 @@ Object.freeze({
27442
27613
  addonId: null,
27443
27614
  access: "view"
27444
27615
  },
27616
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27617
+ capName: "pipeline-analytics",
27618
+ capScope: "device",
27619
+ addonId: null,
27620
+ access: "view"
27621
+ },
27445
27622
  "pipelineAnalytics.getTrack": {
27446
27623
  capName: "pipeline-analytics",
27447
27624
  capScope: "device",
@@ -27520,6 +27697,12 @@ Object.freeze({
27520
27697
  addonId: null,
27521
27698
  access: "view"
27522
27699
  },
27700
+ "pipelineAnalytics.pauseForStorageMigration": {
27701
+ capName: "pipeline-analytics",
27702
+ capScope: "device",
27703
+ addonId: null,
27704
+ access: "create"
27705
+ },
27523
27706
  "pipelineAnalytics.proposeRetrainAnnotations": {
27524
27707
  capName: "pipeline-analytics",
27525
27708
  capScope: "device",
@@ -27550,7 +27733,7 @@ Object.freeze({
27550
27733
  addonId: null,
27551
27734
  access: "create"
27552
27735
  },
27553
- "pipelineAnalytics.relocateMedia": {
27736
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27554
27737
  capName: "pipeline-analytics",
27555
27738
  capScope: "device",
27556
27739
  addonId: null,
@@ -27562,6 +27745,12 @@ Object.freeze({
27562
27745
  addonId: null,
27563
27746
  access: "create"
27564
27747
  },
27748
+ "pipelineAnalytics.resumeForStorageMigration": {
27749
+ capName: "pipeline-analytics",
27750
+ capScope: "device",
27751
+ addonId: null,
27752
+ access: "create"
27753
+ },
27565
27754
  "pipelineAnalytics.saveRetrainAnnotations": {
27566
27755
  capName: "pipeline-analytics",
27567
27756
  capScope: "device",
@@ -27586,6 +27775,12 @@ Object.freeze({
27586
27775
  addonId: null,
27587
27776
  access: "create"
27588
27777
  },
27778
+ "pipelineAnalytics.startStorageMigrationMove": {
27779
+ capName: "pipeline-analytics",
27780
+ capScope: "device",
27781
+ addonId: null,
27782
+ access: "create"
27783
+ },
27589
27784
  "pipelineAnalytics.wipeAllAnalytics": {
27590
27785
  capName: "pipeline-analytics",
27591
27786
  capScope: "device",
@@ -27952,6 +28147,12 @@ Object.freeze({
27952
28147
  addonId: null,
27953
28148
  access: "view"
27954
28149
  },
28150
+ "pipelineOrchestrator.pauseForStorageMigration": {
28151
+ capName: "pipeline-orchestrator",
28152
+ capScope: "system",
28153
+ addonId: null,
28154
+ access: "create"
28155
+ },
27955
28156
  "pipelineOrchestrator.rebalance": {
27956
28157
  capName: "pipeline-orchestrator",
27957
28158
  capScope: "system",
@@ -27976,6 +28177,12 @@ Object.freeze({
27976
28177
  addonId: null,
27977
28178
  access: "view"
27978
28179
  },
28180
+ "pipelineOrchestrator.resumeForStorageMigration": {
28181
+ capName: "pipeline-orchestrator",
28182
+ capScope: "system",
28183
+ addonId: null,
28184
+ access: "create"
28185
+ },
27979
28186
  "pipelineOrchestrator.saveTemplate": {
27980
28187
  capName: "pipeline-orchestrator",
27981
28188
  capScope: "system",
@@ -28372,7 +28579,7 @@ Object.freeze({
28372
28579
  addonId: null,
28373
28580
  access: "create"
28374
28581
  },
28375
- "recording.cancelRelocate": {
28582
+ "recording.cancelStorageMigrationMove": {
28376
28583
  capName: "recording",
28377
28584
  capScope: "system",
28378
28585
  addonId: null,
@@ -28408,7 +28615,7 @@ Object.freeze({
28408
28615
  addonId: null,
28409
28616
  access: "view"
28410
28617
  },
28411
- "recording.getRelocateStatus": {
28618
+ "recording.getStorageMigrationMoveStatus": {
28412
28619
  capName: "recording",
28413
28620
  capScope: "system",
28414
28621
  addonId: null,
@@ -28432,6 +28639,12 @@ Object.freeze({
28432
28639
  addonId: null,
28433
28640
  access: "view"
28434
28641
  },
28642
+ "recording.pauseForStorageMigration": {
28643
+ capName: "recording",
28644
+ capScope: "system",
28645
+ addonId: null,
28646
+ access: "create"
28647
+ },
28435
28648
  "recording.pruneFootage": {
28436
28649
  capName: "recording",
28437
28650
  capScope: "system",
@@ -28450,7 +28663,7 @@ Object.freeze({
28450
28663
  addonId: null,
28451
28664
  access: "view"
28452
28665
  },
28453
- "recording.relocateFootage": {
28666
+ "recording.refreshStorageLocationsForMigration": {
28454
28667
  capName: "recording",
28455
28668
  capScope: "system",
28456
28669
  addonId: null,
@@ -28474,12 +28687,24 @@ Object.freeze({
28474
28687
  addonId: null,
28475
28688
  access: "create"
28476
28689
  },
28690
+ "recording.resumeForStorageMigration": {
28691
+ capName: "recording",
28692
+ capScope: "system",
28693
+ addonId: null,
28694
+ access: "create"
28695
+ },
28477
28696
  "recording.setDeviceConfig": {
28478
28697
  capName: "recording",
28479
28698
  capScope: "system",
28480
28699
  addonId: null,
28481
28700
  access: "create"
28482
28701
  },
28702
+ "recording.startStorageMigrationMove": {
28703
+ capName: "recording",
28704
+ capScope: "system",
28705
+ addonId: null,
28706
+ access: "create"
28707
+ },
28483
28708
  "recordingExport.cancelExport": {
28484
28709
  capName: "recordingExport",
28485
28710
  capScope: "system",
@@ -28870,6 +29095,30 @@ Object.freeze({
28870
29095
  addonId: null,
28871
29096
  access: "view"
28872
29097
  },
29098
+ "storageMigration.cancel": {
29099
+ capName: "storage-migration",
29100
+ capScope: "system",
29101
+ addonId: null,
29102
+ access: "create"
29103
+ },
29104
+ "storageMigration.plan": {
29105
+ capName: "storage-migration",
29106
+ capScope: "system",
29107
+ addonId: null,
29108
+ access: "view"
29109
+ },
29110
+ "storageMigration.start": {
29111
+ capName: "storage-migration",
29112
+ capScope: "system",
29113
+ addonId: null,
29114
+ access: "create"
29115
+ },
29116
+ "storageMigration.status": {
29117
+ capName: "storage-migration",
29118
+ capScope: "system",
29119
+ addonId: null,
29120
+ access: "view"
29121
+ },
28873
29122
  "storageProvider.abortUpload": {
28874
29123
  capName: "storage-provider",
28875
29124
  capScope: "system",
@@ -29248,12 +29497,42 @@ Object.freeze({
29248
29497
  addonId: null,
29249
29498
  access: "create"
29250
29499
  },
29500
+ "terminalSession.adoptLegacyMonitor": {
29501
+ capName: "terminal-session",
29502
+ capScope: "system",
29503
+ addonId: null,
29504
+ access: "create"
29505
+ },
29251
29506
  "terminalSession.close": {
29252
29507
  capName: "terminal-session",
29253
29508
  capScope: "system",
29254
29509
  addonId: null,
29255
29510
  access: "create"
29256
29511
  },
29512
+ "terminalSession.createInstance": {
29513
+ capName: "terminal-session",
29514
+ capScope: "system",
29515
+ addonId: null,
29516
+ access: "create"
29517
+ },
29518
+ "terminalSession.deleteInstance": {
29519
+ capName: "terminal-session",
29520
+ capScope: "system",
29521
+ addonId: null,
29522
+ access: "delete"
29523
+ },
29524
+ "terminalSession.listInstances": {
29525
+ capName: "terminal-session",
29526
+ capScope: "system",
29527
+ addonId: null,
29528
+ access: "view"
29529
+ },
29530
+ "terminalSession.listLegacyCameras": {
29531
+ capName: "terminal-session",
29532
+ capScope: "system",
29533
+ addonId: null,
29534
+ access: "view"
29535
+ },
29257
29536
  "terminalSession.listProfiles": {
29258
29537
  capName: "terminal-session",
29259
29538
  capScope: "system",
@@ -29284,6 +29563,12 @@ Object.freeze({
29284
29563
  addonId: null,
29285
29564
  access: "create"
29286
29565
  },
29566
+ "terminalSession.setInstanceEnabled": {
29567
+ capName: "terminal-session",
29568
+ capScope: "system",
29569
+ addonId: null,
29570
+ access: "create"
29571
+ },
29287
29572
  "terminalSession.writeInput": {
29288
29573
  capName: "terminal-session",
29289
29574
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-ai",
3
- "version": "0.2.16",
3
+ "version": "0.2.17",
4
4
  "description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
5
5
  "keywords": [
6
6
  "camstack",