@camstack/addon-ai 0.2.15 → 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 +357 -30
  2. package/dist/addon.mjs +357 -30
  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",
16113
16193
  auth: "admin"
16114
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16194
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16195
+ kind: "mutation",
16196
+ auth: "admin"
16197
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16198
+ kind: "mutation",
16199
+ auth: "admin"
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,7 +18484,67 @@ var TerminalProfileInfoSchema = object({
18385
18484
  label: string(),
18386
18485
  description: string().optional()
18387
18486
  });
18388
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18509
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18510
+ seq: number().int().positive(),
18511
+ kind: literal("data"),
18512
+ data: string()
18513
+ }), object({
18514
+ seq: number().int().positive(),
18515
+ kind: literal("exit"),
18516
+ exitCode: number().int(),
18517
+ signal: number().int().optional()
18518
+ })]);
18519
+ var TerminalOutputBatchSchema = object({
18520
+ cursor: number().int().nonnegative(),
18521
+ reset: boolean(),
18522
+ snapshot: string().optional(),
18523
+ events: array(TerminalOutputEventSchema).readonly()
18524
+ });
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({
18389
18548
  profileId: string(),
18390
18549
  cols: number().int().positive(),
18391
18550
  rows: number().int().positive()
@@ -18399,6 +18558,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18399
18558
  }), _void(), {
18400
18559
  kind: "mutation",
18401
18560
  auth: "admin"
18561
+ }), method(object({
18562
+ sessionId: string(),
18563
+ afterSeq: number().int().nonnegative(),
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()
18571
+ }), TerminalOutputBatchSchema, {
18572
+ kind: "mutation",
18573
+ auth: "admin",
18574
+ timeoutMs: 15e3
18575
+ }), method(object({
18576
+ sessionId: string(),
18577
+ data: string().max(64 * 1024)
18578
+ }), _void(), {
18579
+ kind: "mutation",
18580
+ auth: "admin"
18402
18581
  }), method(object({ sessionId: string() }), _void(), {
18403
18582
  kind: "mutation",
18404
18583
  auth: "admin"
@@ -20329,6 +20508,7 @@ var FaceInfoSchema = object({
20329
20508
  var FaceFilterEnum = _enum([
20330
20509
  "unassigned",
20331
20510
  "recognized",
20511
+ "identified",
20332
20512
  "all"
20333
20513
  ]);
20334
20514
  var MediaFileLiteSchema$1 = object({
@@ -20357,6 +20537,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20357
20537
  kind: "mutation",
20358
20538
  auth: "admin"
20359
20539
  }), method(object({
20540
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20541
+ deviceId: number().int().optional(),
20360
20542
  limit: number().int().positive().optional(),
20361
20543
  filter: FaceFilterEnum.optional(),
20362
20544
  /**
@@ -22122,6 +22304,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22122
22304
  capName: string().min(1).max(64),
22123
22305
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22124
22306
  valuePath: string().min(1).max(64)
22307
+ }),
22308
+ object({
22309
+ kind: literal("latest-recognition"),
22310
+ recognition: _enum(["person", "plate"])
22125
22311
  })
22126
22312
  ]);
22127
22313
  var OsdSlotBindingSchema = object({
@@ -22227,6 +22413,15 @@ method(object({ deviceId: number().int() }), object({
22227
22413
  }), object({ success: literal(true) }), {
22228
22414
  kind: "mutation",
22229
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"
22230
22425
  }), method(object({
22231
22426
  deviceId: number().int(),
22232
22427
  slotId: string().min(1),
@@ -23112,13 +23307,19 @@ method(object({
23112
23307
  }), {
23113
23308
  kind: "mutation",
23114
23309
  auth: "admin"
23115
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23310
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23116
23311
  kind: "mutation",
23117
23312
  auth: "admin"
23118
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23119
- kind: "query",
23313
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23314
+ kind: "mutation",
23120
23315
  auth: "admin"
23121
- }), 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() }), {
23122
23323
  kind: "mutation",
23123
23324
  auth: "admin"
23124
23325
  });
@@ -27240,6 +27441,12 @@ Object.freeze({
27240
27441
  addonId: null,
27241
27442
  access: "delete"
27242
27443
  },
27444
+ "osdManager.copyDeviceConfiguration": {
27445
+ capName: "osd-manager",
27446
+ capScope: "system",
27447
+ addonId: null,
27448
+ access: "create"
27449
+ },
27243
27450
  "osdManager.getConditionSupport": {
27244
27451
  capName: "osd-manager",
27245
27452
  capScope: "system",
@@ -27336,7 +27543,7 @@ Object.freeze({
27336
27543
  addonId: null,
27337
27544
  access: "create"
27338
27545
  },
27339
- "pipelineAnalytics.cancelMediaRelocate": {
27546
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27340
27547
  capName: "pipeline-analytics",
27341
27548
  capScope: "device",
27342
27549
  addonId: null,
@@ -27408,12 +27615,6 @@ Object.freeze({
27408
27615
  addonId: null,
27409
27616
  access: "view"
27410
27617
  },
27411
- "pipelineAnalytics.getMediaRelocateStatus": {
27412
- capName: "pipeline-analytics",
27413
- capScope: "device",
27414
- addonId: null,
27415
- access: "view"
27416
- },
27417
27618
  "pipelineAnalytics.getMotionEvents": {
27418
27619
  capName: "pipeline-analytics",
27419
27620
  capScope: "device",
@@ -27450,6 +27651,12 @@ Object.freeze({
27450
27651
  addonId: null,
27451
27652
  access: "view"
27452
27653
  },
27654
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27655
+ capName: "pipeline-analytics",
27656
+ capScope: "device",
27657
+ addonId: null,
27658
+ access: "view"
27659
+ },
27453
27660
  "pipelineAnalytics.getTrack": {
27454
27661
  capName: "pipeline-analytics",
27455
27662
  capScope: "device",
@@ -27528,6 +27735,12 @@ Object.freeze({
27528
27735
  addonId: null,
27529
27736
  access: "view"
27530
27737
  },
27738
+ "pipelineAnalytics.pauseForStorageMigration": {
27739
+ capName: "pipeline-analytics",
27740
+ capScope: "device",
27741
+ addonId: null,
27742
+ access: "create"
27743
+ },
27531
27744
  "pipelineAnalytics.proposeRetrainAnnotations": {
27532
27745
  capName: "pipeline-analytics",
27533
27746
  capScope: "device",
@@ -27558,7 +27771,7 @@ Object.freeze({
27558
27771
  addonId: null,
27559
27772
  access: "create"
27560
27773
  },
27561
- "pipelineAnalytics.relocateMedia": {
27774
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27562
27775
  capName: "pipeline-analytics",
27563
27776
  capScope: "device",
27564
27777
  addonId: null,
@@ -27570,6 +27783,12 @@ Object.freeze({
27570
27783
  addonId: null,
27571
27784
  access: "create"
27572
27785
  },
27786
+ "pipelineAnalytics.resumeForStorageMigration": {
27787
+ capName: "pipeline-analytics",
27788
+ capScope: "device",
27789
+ addonId: null,
27790
+ access: "create"
27791
+ },
27573
27792
  "pipelineAnalytics.saveRetrainAnnotations": {
27574
27793
  capName: "pipeline-analytics",
27575
27794
  capScope: "device",
@@ -27594,6 +27813,12 @@ Object.freeze({
27594
27813
  addonId: null,
27595
27814
  access: "create"
27596
27815
  },
27816
+ "pipelineAnalytics.startStorageMigrationMove": {
27817
+ capName: "pipeline-analytics",
27818
+ capScope: "device",
27819
+ addonId: null,
27820
+ access: "create"
27821
+ },
27597
27822
  "pipelineAnalytics.wipeAllAnalytics": {
27598
27823
  capName: "pipeline-analytics",
27599
27824
  capScope: "device",
@@ -27960,6 +28185,12 @@ Object.freeze({
27960
28185
  addonId: null,
27961
28186
  access: "view"
27962
28187
  },
28188
+ "pipelineOrchestrator.pauseForStorageMigration": {
28189
+ capName: "pipeline-orchestrator",
28190
+ capScope: "system",
28191
+ addonId: null,
28192
+ access: "create"
28193
+ },
27963
28194
  "pipelineOrchestrator.rebalance": {
27964
28195
  capName: "pipeline-orchestrator",
27965
28196
  capScope: "system",
@@ -27984,6 +28215,12 @@ Object.freeze({
27984
28215
  addonId: null,
27985
28216
  access: "view"
27986
28217
  },
28218
+ "pipelineOrchestrator.resumeForStorageMigration": {
28219
+ capName: "pipeline-orchestrator",
28220
+ capScope: "system",
28221
+ addonId: null,
28222
+ access: "create"
28223
+ },
27987
28224
  "pipelineOrchestrator.saveTemplate": {
27988
28225
  capName: "pipeline-orchestrator",
27989
28226
  capScope: "system",
@@ -28380,7 +28617,7 @@ Object.freeze({
28380
28617
  addonId: null,
28381
28618
  access: "create"
28382
28619
  },
28383
- "recording.cancelRelocate": {
28620
+ "recording.cancelStorageMigrationMove": {
28384
28621
  capName: "recording",
28385
28622
  capScope: "system",
28386
28623
  addonId: null,
@@ -28416,7 +28653,7 @@ Object.freeze({
28416
28653
  addonId: null,
28417
28654
  access: "view"
28418
28655
  },
28419
- "recording.getRelocateStatus": {
28656
+ "recording.getStorageMigrationMoveStatus": {
28420
28657
  capName: "recording",
28421
28658
  capScope: "system",
28422
28659
  addonId: null,
@@ -28440,6 +28677,12 @@ Object.freeze({
28440
28677
  addonId: null,
28441
28678
  access: "view"
28442
28679
  },
28680
+ "recording.pauseForStorageMigration": {
28681
+ capName: "recording",
28682
+ capScope: "system",
28683
+ addonId: null,
28684
+ access: "create"
28685
+ },
28443
28686
  "recording.pruneFootage": {
28444
28687
  capName: "recording",
28445
28688
  capScope: "system",
@@ -28458,7 +28701,7 @@ Object.freeze({
28458
28701
  addonId: null,
28459
28702
  access: "view"
28460
28703
  },
28461
- "recording.relocateFootage": {
28704
+ "recording.refreshStorageLocationsForMigration": {
28462
28705
  capName: "recording",
28463
28706
  capScope: "system",
28464
28707
  addonId: null,
@@ -28482,12 +28725,24 @@ Object.freeze({
28482
28725
  addonId: null,
28483
28726
  access: "create"
28484
28727
  },
28728
+ "recording.resumeForStorageMigration": {
28729
+ capName: "recording",
28730
+ capScope: "system",
28731
+ addonId: null,
28732
+ access: "create"
28733
+ },
28485
28734
  "recording.setDeviceConfig": {
28486
28735
  capName: "recording",
28487
28736
  capScope: "system",
28488
28737
  addonId: null,
28489
28738
  access: "create"
28490
28739
  },
28740
+ "recording.startStorageMigrationMove": {
28741
+ capName: "recording",
28742
+ capScope: "system",
28743
+ addonId: null,
28744
+ access: "create"
28745
+ },
28491
28746
  "recordingExport.cancelExport": {
28492
28747
  capName: "recordingExport",
28493
28748
  capScope: "system",
@@ -28878,6 +29133,30 @@ Object.freeze({
28878
29133
  addonId: null,
28879
29134
  access: "view"
28880
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
+ },
28881
29160
  "storageProvider.abortUpload": {
28882
29161
  capName: "storage-provider",
28883
29162
  capScope: "system",
@@ -29256,12 +29535,42 @@ Object.freeze({
29256
29535
  addonId: null,
29257
29536
  access: "create"
29258
29537
  },
29538
+ "terminalSession.adoptLegacyMonitor": {
29539
+ capName: "terminal-session",
29540
+ capScope: "system",
29541
+ addonId: null,
29542
+ access: "create"
29543
+ },
29259
29544
  "terminalSession.close": {
29260
29545
  capName: "terminal-session",
29261
29546
  capScope: "system",
29262
29547
  addonId: null,
29263
29548
  access: "create"
29264
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
+ },
29265
29574
  "terminalSession.listProfiles": {
29266
29575
  capName: "terminal-session",
29267
29576
  capScope: "system",
@@ -29280,12 +29589,30 @@ Object.freeze({
29280
29589
  addonId: null,
29281
29590
  access: "create"
29282
29591
  },
29592
+ "terminalSession.pullOutput": {
29593
+ capName: "terminal-session",
29594
+ capScope: "system",
29595
+ addonId: null,
29596
+ access: "create"
29597
+ },
29283
29598
  "terminalSession.resize": {
29284
29599
  capName: "terminal-session",
29285
29600
  capScope: "system",
29286
29601
  addonId: null,
29287
29602
  access: "create"
29288
29603
  },
29604
+ "terminalSession.setInstanceEnabled": {
29605
+ capName: "terminal-session",
29606
+ capScope: "system",
29607
+ addonId: null,
29608
+ access: "create"
29609
+ },
29610
+ "terminalSession.writeInput": {
29611
+ capName: "terminal-session",
29612
+ capScope: "system",
29613
+ addonId: null,
29614
+ access: "create"
29615
+ },
29289
29616
  "toast.onToast": {
29290
29617
  capName: "toast",
29291
29618
  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",
16075
16155
  auth: "admin"
16076
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16156
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16157
+ kind: "mutation",
16158
+ auth: "admin"
16159
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16160
+ kind: "mutation",
16161
+ auth: "admin"
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,7 +18446,67 @@ var TerminalProfileInfoSchema = object({
18347
18446
  label: string(),
18348
18447
  description: string().optional()
18349
18448
  });
18350
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18471
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18472
+ seq: number().int().positive(),
18473
+ kind: literal("data"),
18474
+ data: string()
18475
+ }), object({
18476
+ seq: number().int().positive(),
18477
+ kind: literal("exit"),
18478
+ exitCode: number().int(),
18479
+ signal: number().int().optional()
18480
+ })]);
18481
+ var TerminalOutputBatchSchema = object({
18482
+ cursor: number().int().nonnegative(),
18483
+ reset: boolean(),
18484
+ snapshot: string().optional(),
18485
+ events: array(TerminalOutputEventSchema).readonly()
18486
+ });
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({
18351
18510
  profileId: string(),
18352
18511
  cols: number().int().positive(),
18353
18512
  rows: number().int().positive()
@@ -18361,6 +18520,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18361
18520
  }), _void(), {
18362
18521
  kind: "mutation",
18363
18522
  auth: "admin"
18523
+ }), method(object({
18524
+ sessionId: string(),
18525
+ afterSeq: number().int().nonnegative(),
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()
18533
+ }), TerminalOutputBatchSchema, {
18534
+ kind: "mutation",
18535
+ auth: "admin",
18536
+ timeoutMs: 15e3
18537
+ }), method(object({
18538
+ sessionId: string(),
18539
+ data: string().max(64 * 1024)
18540
+ }), _void(), {
18541
+ kind: "mutation",
18542
+ auth: "admin"
18364
18543
  }), method(object({ sessionId: string() }), _void(), {
18365
18544
  kind: "mutation",
18366
18545
  auth: "admin"
@@ -20291,6 +20470,7 @@ var FaceInfoSchema = object({
20291
20470
  var FaceFilterEnum = _enum([
20292
20471
  "unassigned",
20293
20472
  "recognized",
20473
+ "identified",
20294
20474
  "all"
20295
20475
  ]);
20296
20476
  var MediaFileLiteSchema$1 = object({
@@ -20319,6 +20499,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20319
20499
  kind: "mutation",
20320
20500
  auth: "admin"
20321
20501
  }), method(object({
20502
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20503
+ deviceId: number().int().optional(),
20322
20504
  limit: number().int().positive().optional(),
20323
20505
  filter: FaceFilterEnum.optional(),
20324
20506
  /**
@@ -22084,6 +22266,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22084
22266
  capName: string().min(1).max(64),
22085
22267
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22086
22268
  valuePath: string().min(1).max(64)
22269
+ }),
22270
+ object({
22271
+ kind: literal("latest-recognition"),
22272
+ recognition: _enum(["person", "plate"])
22087
22273
  })
22088
22274
  ]);
22089
22275
  var OsdSlotBindingSchema = object({
@@ -22189,6 +22375,15 @@ method(object({ deviceId: number().int() }), object({
22189
22375
  }), object({ success: literal(true) }), {
22190
22376
  kind: "mutation",
22191
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"
22192
22387
  }), method(object({
22193
22388
  deviceId: number().int(),
22194
22389
  slotId: string().min(1),
@@ -23074,13 +23269,19 @@ method(object({
23074
23269
  }), {
23075
23270
  kind: "mutation",
23076
23271
  auth: "admin"
23077
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23272
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23078
23273
  kind: "mutation",
23079
23274
  auth: "admin"
23080
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23081
- kind: "query",
23275
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23276
+ kind: "mutation",
23082
23277
  auth: "admin"
23083
- }), 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() }), {
23084
23285
  kind: "mutation",
23085
23286
  auth: "admin"
23086
23287
  });
@@ -27202,6 +27403,12 @@ Object.freeze({
27202
27403
  addonId: null,
27203
27404
  access: "delete"
27204
27405
  },
27406
+ "osdManager.copyDeviceConfiguration": {
27407
+ capName: "osd-manager",
27408
+ capScope: "system",
27409
+ addonId: null,
27410
+ access: "create"
27411
+ },
27205
27412
  "osdManager.getConditionSupport": {
27206
27413
  capName: "osd-manager",
27207
27414
  capScope: "system",
@@ -27298,7 +27505,7 @@ Object.freeze({
27298
27505
  addonId: null,
27299
27506
  access: "create"
27300
27507
  },
27301
- "pipelineAnalytics.cancelMediaRelocate": {
27508
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27302
27509
  capName: "pipeline-analytics",
27303
27510
  capScope: "device",
27304
27511
  addonId: null,
@@ -27370,12 +27577,6 @@ Object.freeze({
27370
27577
  addonId: null,
27371
27578
  access: "view"
27372
27579
  },
27373
- "pipelineAnalytics.getMediaRelocateStatus": {
27374
- capName: "pipeline-analytics",
27375
- capScope: "device",
27376
- addonId: null,
27377
- access: "view"
27378
- },
27379
27580
  "pipelineAnalytics.getMotionEvents": {
27380
27581
  capName: "pipeline-analytics",
27381
27582
  capScope: "device",
@@ -27412,6 +27613,12 @@ Object.freeze({
27412
27613
  addonId: null,
27413
27614
  access: "view"
27414
27615
  },
27616
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27617
+ capName: "pipeline-analytics",
27618
+ capScope: "device",
27619
+ addonId: null,
27620
+ access: "view"
27621
+ },
27415
27622
  "pipelineAnalytics.getTrack": {
27416
27623
  capName: "pipeline-analytics",
27417
27624
  capScope: "device",
@@ -27490,6 +27697,12 @@ Object.freeze({
27490
27697
  addonId: null,
27491
27698
  access: "view"
27492
27699
  },
27700
+ "pipelineAnalytics.pauseForStorageMigration": {
27701
+ capName: "pipeline-analytics",
27702
+ capScope: "device",
27703
+ addonId: null,
27704
+ access: "create"
27705
+ },
27493
27706
  "pipelineAnalytics.proposeRetrainAnnotations": {
27494
27707
  capName: "pipeline-analytics",
27495
27708
  capScope: "device",
@@ -27520,7 +27733,7 @@ Object.freeze({
27520
27733
  addonId: null,
27521
27734
  access: "create"
27522
27735
  },
27523
- "pipelineAnalytics.relocateMedia": {
27736
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27524
27737
  capName: "pipeline-analytics",
27525
27738
  capScope: "device",
27526
27739
  addonId: null,
@@ -27532,6 +27745,12 @@ Object.freeze({
27532
27745
  addonId: null,
27533
27746
  access: "create"
27534
27747
  },
27748
+ "pipelineAnalytics.resumeForStorageMigration": {
27749
+ capName: "pipeline-analytics",
27750
+ capScope: "device",
27751
+ addonId: null,
27752
+ access: "create"
27753
+ },
27535
27754
  "pipelineAnalytics.saveRetrainAnnotations": {
27536
27755
  capName: "pipeline-analytics",
27537
27756
  capScope: "device",
@@ -27556,6 +27775,12 @@ Object.freeze({
27556
27775
  addonId: null,
27557
27776
  access: "create"
27558
27777
  },
27778
+ "pipelineAnalytics.startStorageMigrationMove": {
27779
+ capName: "pipeline-analytics",
27780
+ capScope: "device",
27781
+ addonId: null,
27782
+ access: "create"
27783
+ },
27559
27784
  "pipelineAnalytics.wipeAllAnalytics": {
27560
27785
  capName: "pipeline-analytics",
27561
27786
  capScope: "device",
@@ -27922,6 +28147,12 @@ Object.freeze({
27922
28147
  addonId: null,
27923
28148
  access: "view"
27924
28149
  },
28150
+ "pipelineOrchestrator.pauseForStorageMigration": {
28151
+ capName: "pipeline-orchestrator",
28152
+ capScope: "system",
28153
+ addonId: null,
28154
+ access: "create"
28155
+ },
27925
28156
  "pipelineOrchestrator.rebalance": {
27926
28157
  capName: "pipeline-orchestrator",
27927
28158
  capScope: "system",
@@ -27946,6 +28177,12 @@ Object.freeze({
27946
28177
  addonId: null,
27947
28178
  access: "view"
27948
28179
  },
28180
+ "pipelineOrchestrator.resumeForStorageMigration": {
28181
+ capName: "pipeline-orchestrator",
28182
+ capScope: "system",
28183
+ addonId: null,
28184
+ access: "create"
28185
+ },
27949
28186
  "pipelineOrchestrator.saveTemplate": {
27950
28187
  capName: "pipeline-orchestrator",
27951
28188
  capScope: "system",
@@ -28342,7 +28579,7 @@ Object.freeze({
28342
28579
  addonId: null,
28343
28580
  access: "create"
28344
28581
  },
28345
- "recording.cancelRelocate": {
28582
+ "recording.cancelStorageMigrationMove": {
28346
28583
  capName: "recording",
28347
28584
  capScope: "system",
28348
28585
  addonId: null,
@@ -28378,7 +28615,7 @@ Object.freeze({
28378
28615
  addonId: null,
28379
28616
  access: "view"
28380
28617
  },
28381
- "recording.getRelocateStatus": {
28618
+ "recording.getStorageMigrationMoveStatus": {
28382
28619
  capName: "recording",
28383
28620
  capScope: "system",
28384
28621
  addonId: null,
@@ -28402,6 +28639,12 @@ Object.freeze({
28402
28639
  addonId: null,
28403
28640
  access: "view"
28404
28641
  },
28642
+ "recording.pauseForStorageMigration": {
28643
+ capName: "recording",
28644
+ capScope: "system",
28645
+ addonId: null,
28646
+ access: "create"
28647
+ },
28405
28648
  "recording.pruneFootage": {
28406
28649
  capName: "recording",
28407
28650
  capScope: "system",
@@ -28420,7 +28663,7 @@ Object.freeze({
28420
28663
  addonId: null,
28421
28664
  access: "view"
28422
28665
  },
28423
- "recording.relocateFootage": {
28666
+ "recording.refreshStorageLocationsForMigration": {
28424
28667
  capName: "recording",
28425
28668
  capScope: "system",
28426
28669
  addonId: null,
@@ -28444,12 +28687,24 @@ Object.freeze({
28444
28687
  addonId: null,
28445
28688
  access: "create"
28446
28689
  },
28690
+ "recording.resumeForStorageMigration": {
28691
+ capName: "recording",
28692
+ capScope: "system",
28693
+ addonId: null,
28694
+ access: "create"
28695
+ },
28447
28696
  "recording.setDeviceConfig": {
28448
28697
  capName: "recording",
28449
28698
  capScope: "system",
28450
28699
  addonId: null,
28451
28700
  access: "create"
28452
28701
  },
28702
+ "recording.startStorageMigrationMove": {
28703
+ capName: "recording",
28704
+ capScope: "system",
28705
+ addonId: null,
28706
+ access: "create"
28707
+ },
28453
28708
  "recordingExport.cancelExport": {
28454
28709
  capName: "recordingExport",
28455
28710
  capScope: "system",
@@ -28840,6 +29095,30 @@ Object.freeze({
28840
29095
  addonId: null,
28841
29096
  access: "view"
28842
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
+ },
28843
29122
  "storageProvider.abortUpload": {
28844
29123
  capName: "storage-provider",
28845
29124
  capScope: "system",
@@ -29218,12 +29497,42 @@ Object.freeze({
29218
29497
  addonId: null,
29219
29498
  access: "create"
29220
29499
  },
29500
+ "terminalSession.adoptLegacyMonitor": {
29501
+ capName: "terminal-session",
29502
+ capScope: "system",
29503
+ addonId: null,
29504
+ access: "create"
29505
+ },
29221
29506
  "terminalSession.close": {
29222
29507
  capName: "terminal-session",
29223
29508
  capScope: "system",
29224
29509
  addonId: null,
29225
29510
  access: "create"
29226
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
+ },
29227
29536
  "terminalSession.listProfiles": {
29228
29537
  capName: "terminal-session",
29229
29538
  capScope: "system",
@@ -29242,12 +29551,30 @@ Object.freeze({
29242
29551
  addonId: null,
29243
29552
  access: "create"
29244
29553
  },
29554
+ "terminalSession.pullOutput": {
29555
+ capName: "terminal-session",
29556
+ capScope: "system",
29557
+ addonId: null,
29558
+ access: "create"
29559
+ },
29245
29560
  "terminalSession.resize": {
29246
29561
  capName: "terminal-session",
29247
29562
  capScope: "system",
29248
29563
  addonId: null,
29249
29564
  access: "create"
29250
29565
  },
29566
+ "terminalSession.setInstanceEnabled": {
29567
+ capName: "terminal-session",
29568
+ capScope: "system",
29569
+ addonId: null,
29570
+ access: "create"
29571
+ },
29572
+ "terminalSession.writeInput": {
29573
+ capName: "terminal-session",
29574
+ capScope: "system",
29575
+ addonId: null,
29576
+ access: "create"
29577
+ },
29251
29578
  "toast.onToast": {
29252
29579
  capName: "toast",
29253
29580
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-ai",
3
- "version": "0.2.15",
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",