@camstack/system 1.2.76 → 1.2.78

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 (56) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  8. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  9. package/dist/builtins/console-logging/index.js +1 -1
  10. package/dist/builtins/console-logging/index.mjs +1 -1
  11. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  12. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  13. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  15. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  17. package/dist/builtins/hub-forwarder/index.js +1 -1
  18. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  19. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  20. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  21. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  22. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  23. package/dist/builtins/local-network/local-network.addon.js +1 -1
  24. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  25. package/dist/builtins/loki-logging/index.js +1 -1
  26. package/dist/builtins/loki-logging/index.mjs +1 -1
  27. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  28. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  29. package/dist/builtins/platform-probe/index.js +1 -1
  30. package/dist/builtins/platform-probe/index.mjs +1 -1
  31. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  32. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  33. package/dist/builtins/snapshot/index.js +1 -1
  34. package/dist/builtins/snapshot/index.mjs +1 -1
  35. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  36. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -1
  39. package/dist/builtins/storage-orchestrator/index.d.ts +2 -0
  40. package/dist/builtins/storage-orchestrator/index.js +1 -0
  41. package/dist/builtins/storage-orchestrator/index.mjs +2 -2
  42. package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +73 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +2 -0
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +468 -8
  45. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +468 -9
  46. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +7 -0
  47. package/dist/builtins/system-config/system-config.addon.js +1 -1
  48. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  49. package/dist/builtins/winston-logging/index.js +1 -1
  50. package/dist/builtins/winston-logging/index.mjs +1 -1
  51. package/dist/{dist-CX8Z8M6S.mjs → dist-CIIFhXqm.mjs} +416 -45
  52. package/dist/{dist-B1W4mT4z.js → dist-cINpngi1.js} +427 -44
  53. package/dist/http/reverse-proxy.d.ts +5 -0
  54. package/dist/index.js +5 -3
  55. package/dist/index.mjs +6 -4
  56. package/package.json +4 -1
@@ -3681,12 +3681,11 @@ var RecordingConfigSchema = z.object({
3681
3681
  /**
3682
3682
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
3683
3683
  *
3684
- * One shape shared by the recorder's `relocateFootage` (segments) and
3685
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
3686
- * page renders both movers with one component. Jobs are in-RAM (a restart
3687
- * forgets them re-running is safe by construction: copy-if-absent, delete
3688
- * after verify) and each completed/failed run also lands one durable ops-log
3689
- * row on the owning addon's surface.
3684
+ * One shape shared by the recorder and pipeline-analytics internal movers.
3685
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
3686
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
3687
+ * Each completed/failed run also lands one durable ops-log row on its owning
3688
+ * addon surface.
3690
3689
  */
3691
3690
  var RelocateJobStateSchema = z.enum([
3692
3691
  "running",
@@ -3713,19 +3712,100 @@ var RelocateJobSchema = z.object({
3713
3712
  finishedAt: z.number().nullable(),
3714
3713
  error: z.string().nullable()
3715
3714
  });
3715
+ /** Profile-derived footage selection used only by the migration coordinator:
3716
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
3717
+ var RelocateFootageClassSchema = z.enum(["recordings", "recordingsLow"]);
3716
3718
  var RelocateFootageInputSchema = z.object({
3717
- deviceId: z.number().optional(),
3718
3719
  fromLocationId: z.string(),
3719
3720
  toLocationId: z.string(),
3720
3721
  entities: z.array(z.enum(["segments"])).optional(),
3722
+ /** Limits relocation to the logical profile class. Omit only for the
3723
+ * pre-orchestration compatibility path. */
3724
+ footageClass: RelocateFootageClassSchema.optional(),
3721
3725
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
3722
3726
  * never allowed to starve live writers. */
3723
3727
  throttleMbps: z.number().min(1).max(1e3).optional()
3724
3728
  });
3725
- var RelocateMediaInputSchema = z.object({
3726
- deviceId: z.number().optional(),
3729
+ /** Internal, lease-scoped participant operation. It is intentionally separate
3730
+ * from persistent recording settings: a migration never changes
3731
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
3732
+ var StorageMigrationLeaseInputSchema = z.object({ leaseId: z.string().min(1) });
3733
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: z.string().min(1) });
3734
+ var StorageMigrationMediaMoveInputSchema = z.object({
3727
3735
  toLocationId: z.string(),
3728
3736
  throttleMbps: z.number().min(1).max(1e3).optional()
3737
+ }).extend({ leaseId: z.string().min(1) });
3738
+ /** The independently selectable logical storage classes. `recordings`
3739
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
3740
+ * segments; `eventMedia` is post-analysis blobs. */
3741
+ var StorageMigrationClassSchema = z.enum([
3742
+ "recordings",
3743
+ "recordingsLow",
3744
+ "eventMedia"
3745
+ ]);
3746
+ /** A destination is always an existing, fully-qualified location id. The
3747
+ * migration API intentionally never changes a source location's `basePath`:
3748
+ * callers create a new `<type>:<slug>` location, then select it here. */
3749
+ var StorageMigrationDestinationsSchema = z.object({
3750
+ recordings: z.string().min(1).optional(),
3751
+ recordingsLow: z.string().min(1).optional(),
3752
+ eventMedia: z.string().min(1).optional()
3753
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
3754
+ /** Shared input for planning and starting an orchestrated storage migration. */
3755
+ var StorageMigrationInputSchema = z.object({
3756
+ destinations: StorageMigrationDestinationsSchema,
3757
+ throttleMbps: z.number().min(1).max(1e3).optional()
3758
+ });
3759
+ /** The durable coordinator state machine. The only phase that changes default
3760
+ * locations is `repointing`, after every selected mover has completed and been
3761
+ * verified. */
3762
+ var StorageMigrationPhaseSchema = z.enum([
3763
+ "planning",
3764
+ "pausing",
3765
+ "moving",
3766
+ "verifying",
3767
+ "repointing",
3768
+ "refreshing",
3769
+ "resuming",
3770
+ "done",
3771
+ "failed",
3772
+ "cancelled"
3773
+ ]);
3774
+ var StorageMigrationParticipantSchema = z.enum([
3775
+ "pipeline",
3776
+ "recorder",
3777
+ "analytics"
3778
+ ]);
3779
+ var StorageMigrationMoveSchema = z.object({
3780
+ storageClass: StorageMigrationClassSchema,
3781
+ fromLocationId: z.string(),
3782
+ toLocationId: z.string(),
3783
+ moverJobId: z.string().nullable(),
3784
+ state: RelocateJobStateSchema.nullable(),
3785
+ error: z.string().nullable()
3786
+ });
3787
+ var StorageMigrationJobSchema = z.object({
3788
+ jobId: z.string(),
3789
+ phase: StorageMigrationPhaseSchema,
3790
+ destinations: StorageMigrationDestinationsSchema,
3791
+ throttleMbps: z.number(),
3792
+ moves: z.array(StorageMigrationMoveSchema),
3793
+ pauseLeaseId: z.string().nullable(),
3794
+ pausedParticipants: z.array(StorageMigrationParticipantSchema),
3795
+ repointed: z.boolean(),
3796
+ cancelRequested: z.boolean(),
3797
+ startedAt: z.number(),
3798
+ updatedAt: z.number(),
3799
+ finishedAt: z.number().nullable(),
3800
+ error: z.string().nullable()
3801
+ });
3802
+ var StorageMigrationPlanSchema = z.object({
3803
+ destinations: StorageMigrationDestinationsSchema,
3804
+ moves: z.array(z.object({
3805
+ storageClass: StorageMigrationClassSchema,
3806
+ fromLocationId: z.string(),
3807
+ toLocationId: z.string()
3808
+ }))
3729
3809
  });
3730
3810
  /**
3731
3811
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -14451,20 +14531,28 @@ var pipelineAnalyticsCapability = {
14451
14531
  }),
14452
14532
  /** The events ops-log rows (newest-first), optionally scoped to one camera.
14453
14533
  * Backed by a declared pipeline-analytics SQLite collection. */
14454
- /**
14455
- * Move event-media blobs onto `toLocationId` (entity-routing spec Phase
14456
- * 4): per-row copy → stamp row.locationId delete old blob. Rows already
14457
- * at the target are skipped, so a re-run resumes. Single-flight.
14458
- */
14459
- relocateMedia: method(RelocateMediaInputSchema, z.object({ jobId: z.string() }), {
14534
+ /** Internal migration-participant lease. It drains active MediaStore
14535
+ * writes and refuses new ones without changing analytics bindings. */
14536
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ paused: z.literal(true) }), {
14460
14537
  kind: "mutation",
14461
14538
  auth: "admin"
14462
14539
  }),
14463
- getMediaRelocateStatus: method(z.object({}), z.array(RelocateJobSchema).readonly(), {
14464
- kind: "query",
14540
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ resumed: z.literal(true) }), {
14541
+ kind: "mutation",
14465
14542
  auth: "admin"
14466
14543
  }),
14467
- cancelMediaRelocate: method(z.object({ jobId: z.string() }), z.object({ cancelled: z.boolean() }), {
14544
+ /** Drops cached location roots after the storage coordinator repoints a
14545
+ * default so future event-media writes use the new root. */
14546
+ refreshStorageLocationsForMigration: method(StorageMigrationLeaseInputSchema, z.object({ refreshed: z.literal(true) }), {
14547
+ kind: "mutation",
14548
+ auth: "admin"
14549
+ }),
14550
+ startStorageMigrationMove: method(StorageMigrationMediaMoveInputSchema, z.object({ jobId: z.string() }), {
14551
+ kind: "mutation",
14552
+ auth: "admin"
14553
+ }),
14554
+ getStorageMigrationMoveStatus: method(z.object({ jobId: z.string() }), RelocateJobSchema.nullable(), { auth: "admin" }),
14555
+ cancelStorageMigrationMove: method(z.object({ jobId: z.string() }), z.object({ cancelled: z.boolean() }), {
14468
14556
  kind: "mutation",
14469
14557
  auth: "admin"
14470
14558
  }),
@@ -16542,6 +16630,16 @@ var pipelineOrchestratorCapability = {
16542
16630
  nodeIdMode: "data",
16543
16631
  exposesDeviceSettings: true,
16544
16632
  methods: {
16633
+ /** Internal storage-migration participant lease. While held, dispatch
16634
+ * requests are accepted as pending but no new runner attachment starts. */
16635
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ paused: z.literal(true) }), {
16636
+ kind: "mutation",
16637
+ auth: "admin"
16638
+ }),
16639
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ resumed: z.literal(true) }), {
16640
+ kind: "mutation",
16641
+ auth: "admin"
16642
+ }),
16545
16643
  /**
16546
16644
  * Pin a camera's pipeline to a specific agent (L1 affinity).
16547
16645
  * The orchestrator re-evaluates the assignment immediately and persists
@@ -17707,6 +17805,28 @@ var storageEvictableCapability = {
17707
17805
  }), EvictResultSchema, { kind: "mutation" })
17708
17806
  }
17709
17807
  };
17808
+ /**
17809
+ * The single operator-facing storage migration surface. It coordinates the
17810
+ * pipeline, recorder and post-analysis participants; callers never mutate a
17811
+ * camera recording config or invoke an individual mover directly.
17812
+ */
17813
+ var storageMigrationCapability = {
17814
+ name: "storage-migration",
17815
+ scope: "system",
17816
+ mode: "singleton",
17817
+ methods: {
17818
+ plan: method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }),
17819
+ start: method(StorageMigrationInputSchema, z.object({ jobId: z.string() }), {
17820
+ kind: "mutation",
17821
+ auth: "admin"
17822
+ }),
17823
+ status: method(z.object({ jobId: z.string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }),
17824
+ cancel: method(z.object({ jobId: z.string() }), z.object({ cancelled: z.boolean() }), {
17825
+ kind: "mutation",
17826
+ auth: "admin"
17827
+ })
17828
+ }
17829
+ };
17710
17830
  var ProviderInfoSchema = z.discriminatedUnion("shouldSaveDiskSpace", [z.object({
17711
17831
  providerId: z.string().min(1),
17712
17832
  displayName: z.string().min(1),
@@ -17856,12 +17976,49 @@ var TerminalProfileInfoSchema = z.object({
17856
17976
  description: z.string().optional()
17857
17977
  });
17858
17978
  /**
17979
+ * A durable operator-created Terminal instance. Profiles are templates; only
17980
+ * an instance declares a camera.
17981
+ */
17982
+ var TerminalInstanceInfoSchema = z.object({
17983
+ instanceId: z.string(),
17984
+ cameraStableId: z.string(),
17985
+ nodeId: z.string(),
17986
+ profileId: z.string(),
17987
+ profileLabel: z.string(),
17988
+ name: z.string(),
17989
+ enabled: z.boolean()
17990
+ });
17991
+ var TerminalLegacyCameraSchema = z.object({
17992
+ stableId: z.string(),
17993
+ nodeId: z.string(),
17994
+ profileId: z.string(),
17995
+ profileLabel: z.string(),
17996
+ name: z.string(),
17997
+ /** Only legacy monitor cameras can retain their historic stable identity. */
17998
+ adoptable: z.boolean()
17999
+ });
18000
+ var TerminalOutputEventSchema = z.discriminatedUnion("kind", [z.object({
18001
+ seq: z.number().int().positive(),
18002
+ kind: z.literal("data"),
18003
+ data: z.string()
18004
+ }), z.object({
18005
+ seq: z.number().int().positive(),
18006
+ kind: z.literal("exit"),
18007
+ exitCode: z.number().int(),
18008
+ signal: z.number().int().optional()
18009
+ })]);
18010
+ var TerminalOutputBatchSchema = z.object({
18011
+ cursor: z.number().int().nonnegative(),
18012
+ reset: z.boolean(),
18013
+ snapshot: z.string().optional(),
18014
+ events: z.array(TerminalOutputEventSchema).readonly()
18015
+ });
18016
+ /**
17859
18017
  * terminal-session — singleton system capability for interactive TTY sessions.
17860
18018
  *
17861
- * Phase 1 (this cap): open/resize/close/list a pty running an allowlisted
17862
- * profile, streamed to xterm.js over the data plane. Phase 2 (streaming a
17863
- * session as a camera) is a separate device-provider concern and does not
17864
- * change this contract.
18019
+ * Owns both live PTY lifecycle and durable Terminal instance management.
18020
+ * Profiles are allowlisted templates; an explicit instance is the only path
18021
+ * that declares a camera.
17865
18022
  */
17866
18023
  var terminalSessionCapability = {
17867
18024
  name: "terminal-session",
@@ -17870,6 +18027,37 @@ var terminalSessionCapability = {
17870
18027
  methods: {
17871
18028
  /** Pre-declared profiles the operator may open. */
17872
18029
  listProfiles: method(z.void(), z.array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18030
+ /** Explicit durable Terminal instances, managed centrally on the hub. */
18031
+ listInstances: method(z.void(), z.array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }),
18032
+ createInstance: method(z.object({
18033
+ targetNodeId: z.string().min(1),
18034
+ profileId: z.string().min(1),
18035
+ name: z.string().trim().min(1).max(160).optional()
18036
+ }), TerminalInstanceInfoSchema, {
18037
+ kind: "mutation",
18038
+ auth: "admin"
18039
+ }),
18040
+ deleteInstance: method(z.object({ instanceId: z.string().min(1) }), z.void(), {
18041
+ kind: "mutation",
18042
+ auth: "admin"
18043
+ }),
18044
+ setInstanceEnabled: method(z.object({
18045
+ instanceId: z.string().min(1),
18046
+ enabled: z.boolean()
18047
+ }), TerminalInstanceInfoSchema, {
18048
+ kind: "mutation",
18049
+ auth: "admin"
18050
+ }),
18051
+ /** Existing automatic cameras are shown for explicit migration only. */
18052
+ listLegacyCameras: method(z.void(), z.array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }),
18053
+ /** Explicitly adopt one legacy monitor camera, retaining its stable id. */
18054
+ adoptLegacyMonitor: method(z.object({
18055
+ stableId: z.string().min(1),
18056
+ name: z.string().trim().min(1).max(160).optional()
18057
+ }), TerminalInstanceInfoSchema, {
18058
+ kind: "mutation",
18059
+ auth: "admin"
18060
+ }),
17873
18061
  /** Live sessions currently hosted by the provider. */
17874
18062
  listSessions: method(z.void(), z.array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }),
17875
18063
  /**
@@ -17893,6 +18081,34 @@ var terminalSessionCapability = {
17893
18081
  kind: "mutation",
17894
18082
  auth: "admin"
17895
18083
  }),
18084
+ /**
18085
+ * Pull ordered output after a cursor. This capability transport is what
18086
+ * makes remote-agent terminals possible; `reset + snapshot` repairs a
18087
+ * caller that fell behind the bounded replay window.
18088
+ */
18089
+ pullOutput: method(z.object({
18090
+ sessionId: z.string(),
18091
+ afterSeq: z.number().int().nonnegative(),
18092
+ waitMs: z.number().int().min(0).max(2e3).default(0),
18093
+ /**
18094
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18095
+ * browser's initial repaint remains immediate; the camera snapshot
18096
+ * relay uses it to avoid encoding a blank startup frame.
18097
+ */
18098
+ waitForOutput: z.boolean().optional()
18099
+ }), TerminalOutputBatchSchema, {
18100
+ kind: "mutation",
18101
+ auth: "admin",
18102
+ timeoutMs: 15e3
18103
+ }),
18104
+ /** Write terminal input through the node-routable capability plane. */
18105
+ writeInput: method(z.object({
18106
+ sessionId: z.string(),
18107
+ data: z.string().max(64 * 1024)
18108
+ }), z.void(), {
18109
+ kind: "mutation",
18110
+ auth: "admin"
18111
+ }),
17896
18112
  /** Terminate a live session and release its pty. */
17897
18113
  close: method(z.object({ sessionId: z.string() }), z.void(), {
17898
18114
  kind: "mutation",
@@ -20883,6 +21099,7 @@ var FaceInfoSchema = z.object({
20883
21099
  var FaceFilterEnum = z.enum([
20884
21100
  "unassigned",
20885
21101
  "recognized",
21102
+ "identified",
20886
21103
  "all"
20887
21104
  ]);
20888
21105
  var MediaFileLiteSchema$1 = z.object({
@@ -20922,6 +21139,8 @@ var faceGalleryCapability = {
20922
21139
  auth: "admin"
20923
21140
  }),
20924
21141
  listRecentFaces: method(z.object({
21142
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21143
+ deviceId: z.number().int().optional(),
20925
21144
  limit: z.number().int().positive().optional(),
20926
21145
  filter: FaceFilterEnum.optional(),
20927
21146
  /**
@@ -23493,6 +23712,10 @@ var OsdSourceSchema = z.discriminatedUnion("kind", [
23493
23712
  capName: z.string().min(1).max(64),
23494
23713
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23495
23714
  valuePath: z.string().min(1).max(64)
23715
+ }),
23716
+ z.object({
23717
+ kind: z.literal("latest-recognition"),
23718
+ recognition: z.enum(["person", "plate"])
23496
23719
  })
23497
23720
  ]);
23498
23721
  var OsdSlotBindingSchema = z.object({
@@ -23631,6 +23854,21 @@ var osdManagerCapability = {
23631
23854
  auth: "admin"
23632
23855
  }),
23633
23856
  /**
23857
+ * Replace one camera's binding configuration from another. Writable source
23858
+ * slots are mapped by ordinal onto writable target slots so different
23859
+ * provider slot ids do not make the copied configuration disappear.
23860
+ */
23861
+ copyDeviceConfiguration: method(z.object({
23862
+ sourceDeviceId: z.number().int(),
23863
+ targetDeviceId: z.number().int()
23864
+ }), z.object({
23865
+ copied: z.number().int().nonnegative(),
23866
+ skipped: z.number().int().nonnegative()
23867
+ }), {
23868
+ kind: "mutation",
23869
+ auth: "admin"
23870
+ }),
23871
+ /**
23634
23872
  * Render without writing. `binding` overrides the stored one so an
23635
23873
  * editor can preview an unsaved change. Mutation kind only to carry
23636
23874
  * the binding object safely; no side effects.
@@ -24904,12 +25142,6 @@ var recordingCapability = {
24904
25142
  auth: "admin"
24905
25143
  }),
24906
25144
  /**
24907
- * Move footage (recorded segments) from one recordings location to
24908
- * another — the drain workflow's mover (entity-routing spec Phase 4).
24909
- * Throttled copy → size-verify → delete source → index refresh; resumable
24910
- * by construction (copy-if-absent). Single-flight: one job at a time.
24911
- */
24912
- /**
24913
25145
  * Render a short GIF from recorded footage around `aroundMs` (low profile,
24914
25146
  * palette-free ffmpeg gif). Synchronous — the window is a few seconds of
24915
25147
  * `low`, rendering in ~1-2s. Built for notification attachments: the
@@ -24961,16 +25193,28 @@ var recordingCapability = {
24961
25193
  kind: "mutation",
24962
25194
  auth: "admin"
24963
25195
  }),
24964
- relocateFootage: method(RelocateFootageInputSchema, z.object({ jobId: z.string() }), {
25196
+ /** Internal migration-participant lease. Blocks new recorder attaches and
25197
+ * waits for writers to exit while their watchers index final segments. */
25198
+ pauseForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ paused: z.literal(true) }), {
24965
25199
  kind: "mutation",
24966
25200
  auth: "admin"
24967
25201
  }),
24968
- /** Every known relocate job (in-RAM, newest-first). */
24969
- getRelocateStatus: method(z.object({}), z.array(RelocateJobSchema).readonly(), {
24970
- kind: "query",
25202
+ resumeForStorageMigration: method(StorageMigrationLeaseInputSchema, z.object({ resumed: z.literal(true) }), {
25203
+ kind: "mutation",
24971
25204
  auth: "admin"
24972
25205
  }),
24973
- cancelRelocate: method(z.object({ jobId: z.string() }), z.object({ cancelled: z.boolean() }), {
25206
+ /** Re-resolve location roots after the coordinator changes defaults. */
25207
+ refreshStorageLocationsForMigration: method(StorageMigrationLeaseInputSchema, z.object({ refreshed: z.literal(true) }), {
25208
+ kind: "mutation",
25209
+ auth: "admin"
25210
+ }),
25211
+ /** Internal mover, callable only by the storage-migration coordinator. */
25212
+ startStorageMigrationMove: method(StorageMigrationFootageMoveInputSchema, z.object({ jobId: z.string() }), {
25213
+ kind: "mutation",
25214
+ auth: "admin"
25215
+ }),
25216
+ getStorageMigrationMoveStatus: method(z.object({ jobId: z.string() }), RelocateJobSchema.nullable(), { auth: "admin" }),
25217
+ cancelStorageMigrationMove: method(z.object({ jobId: z.string() }), z.object({ cancelled: z.boolean() }), {
24974
25218
  kind: "mutation",
24975
25219
  auth: "admin"
24976
25220
  })
@@ -27522,6 +27766,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
27522
27766
  ssoBridgeCapability,
27523
27767
  storageCapability,
27524
27768
  storageEvictableCapability,
27769
+ storageMigrationCapability,
27525
27770
  storageProviderCapability,
27526
27771
  streamBrokerCapability,
27527
27772
  streamCatalogCapability,
@@ -30448,6 +30693,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30448
30693
  addonId: null,
30449
30694
  access: "delete"
30450
30695
  },
30696
+ "osdManager.copyDeviceConfiguration": {
30697
+ capName: "osd-manager",
30698
+ capScope: "system",
30699
+ addonId: null,
30700
+ access: "create"
30701
+ },
30451
30702
  "osdManager.getConditionSupport": {
30452
30703
  capName: "osd-manager",
30453
30704
  capScope: "system",
@@ -30544,7 +30795,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
30544
30795
  addonId: null,
30545
30796
  access: "create"
30546
30797
  },
30547
- "pipelineAnalytics.cancelMediaRelocate": {
30798
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30548
30799
  capName: "pipeline-analytics",
30549
30800
  capScope: "device",
30550
30801
  addonId: null,
@@ -30616,12 +30867,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
30616
30867
  addonId: null,
30617
30868
  access: "view"
30618
30869
  },
30619
- "pipelineAnalytics.getMediaRelocateStatus": {
30620
- capName: "pipeline-analytics",
30621
- capScope: "device",
30622
- addonId: null,
30623
- access: "view"
30624
- },
30625
30870
  "pipelineAnalytics.getMotionEvents": {
30626
30871
  capName: "pipeline-analytics",
30627
30872
  capScope: "device",
@@ -30658,6 +30903,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30658
30903
  addonId: null,
30659
30904
  access: "view"
30660
30905
  },
30906
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30907
+ capName: "pipeline-analytics",
30908
+ capScope: "device",
30909
+ addonId: null,
30910
+ access: "view"
30911
+ },
30661
30912
  "pipelineAnalytics.getTrack": {
30662
30913
  capName: "pipeline-analytics",
30663
30914
  capScope: "device",
@@ -30736,6 +30987,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30736
30987
  addonId: null,
30737
30988
  access: "view"
30738
30989
  },
30990
+ "pipelineAnalytics.pauseForStorageMigration": {
30991
+ capName: "pipeline-analytics",
30992
+ capScope: "device",
30993
+ addonId: null,
30994
+ access: "create"
30995
+ },
30739
30996
  "pipelineAnalytics.proposeRetrainAnnotations": {
30740
30997
  capName: "pipeline-analytics",
30741
30998
  capScope: "device",
@@ -30766,7 +31023,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
30766
31023
  addonId: null,
30767
31024
  access: "create"
30768
31025
  },
30769
- "pipelineAnalytics.relocateMedia": {
31026
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30770
31027
  capName: "pipeline-analytics",
30771
31028
  capScope: "device",
30772
31029
  addonId: null,
@@ -30778,6 +31035,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30778
31035
  addonId: null,
30779
31036
  access: "create"
30780
31037
  },
31038
+ "pipelineAnalytics.resumeForStorageMigration": {
31039
+ capName: "pipeline-analytics",
31040
+ capScope: "device",
31041
+ addonId: null,
31042
+ access: "create"
31043
+ },
30781
31044
  "pipelineAnalytics.saveRetrainAnnotations": {
30782
31045
  capName: "pipeline-analytics",
30783
31046
  capScope: "device",
@@ -30802,6 +31065,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30802
31065
  addonId: null,
30803
31066
  access: "create"
30804
31067
  },
31068
+ "pipelineAnalytics.startStorageMigrationMove": {
31069
+ capName: "pipeline-analytics",
31070
+ capScope: "device",
31071
+ addonId: null,
31072
+ access: "create"
31073
+ },
30805
31074
  "pipelineAnalytics.wipeAllAnalytics": {
30806
31075
  capName: "pipeline-analytics",
30807
31076
  capScope: "device",
@@ -31168,6 +31437,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31168
31437
  addonId: null,
31169
31438
  access: "view"
31170
31439
  },
31440
+ "pipelineOrchestrator.pauseForStorageMigration": {
31441
+ capName: "pipeline-orchestrator",
31442
+ capScope: "system",
31443
+ addonId: null,
31444
+ access: "create"
31445
+ },
31171
31446
  "pipelineOrchestrator.rebalance": {
31172
31447
  capName: "pipeline-orchestrator",
31173
31448
  capScope: "system",
@@ -31192,6 +31467,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31192
31467
  addonId: null,
31193
31468
  access: "view"
31194
31469
  },
31470
+ "pipelineOrchestrator.resumeForStorageMigration": {
31471
+ capName: "pipeline-orchestrator",
31472
+ capScope: "system",
31473
+ addonId: null,
31474
+ access: "create"
31475
+ },
31195
31476
  "pipelineOrchestrator.saveTemplate": {
31196
31477
  capName: "pipeline-orchestrator",
31197
31478
  capScope: "system",
@@ -31588,7 +31869,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
31588
31869
  addonId: null,
31589
31870
  access: "create"
31590
31871
  },
31591
- "recording.cancelRelocate": {
31872
+ "recording.cancelStorageMigrationMove": {
31592
31873
  capName: "recording",
31593
31874
  capScope: "system",
31594
31875
  addonId: null,
@@ -31624,7 +31905,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
31624
31905
  addonId: null,
31625
31906
  access: "view"
31626
31907
  },
31627
- "recording.getRelocateStatus": {
31908
+ "recording.getStorageMigrationMoveStatus": {
31628
31909
  capName: "recording",
31629
31910
  capScope: "system",
31630
31911
  addonId: null,
@@ -31648,6 +31929,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31648
31929
  addonId: null,
31649
31930
  access: "view"
31650
31931
  },
31932
+ "recording.pauseForStorageMigration": {
31933
+ capName: "recording",
31934
+ capScope: "system",
31935
+ addonId: null,
31936
+ access: "create"
31937
+ },
31651
31938
  "recording.pruneFootage": {
31652
31939
  capName: "recording",
31653
31940
  capScope: "system",
@@ -31666,7 +31953,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
31666
31953
  addonId: null,
31667
31954
  access: "view"
31668
31955
  },
31669
- "recording.relocateFootage": {
31956
+ "recording.refreshStorageLocationsForMigration": {
31670
31957
  capName: "recording",
31671
31958
  capScope: "system",
31672
31959
  addonId: null,
@@ -31690,12 +31977,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
31690
31977
  addonId: null,
31691
31978
  access: "create"
31692
31979
  },
31980
+ "recording.resumeForStorageMigration": {
31981
+ capName: "recording",
31982
+ capScope: "system",
31983
+ addonId: null,
31984
+ access: "create"
31985
+ },
31693
31986
  "recording.setDeviceConfig": {
31694
31987
  capName: "recording",
31695
31988
  capScope: "system",
31696
31989
  addonId: null,
31697
31990
  access: "create"
31698
31991
  },
31992
+ "recording.startStorageMigrationMove": {
31993
+ capName: "recording",
31994
+ capScope: "system",
31995
+ addonId: null,
31996
+ access: "create"
31997
+ },
31699
31998
  "recordingExport.cancelExport": {
31700
31999
  capName: "recordingExport",
31701
32000
  capScope: "system",
@@ -32086,6 +32385,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32086
32385
  addonId: null,
32087
32386
  access: "view"
32088
32387
  },
32388
+ "storageMigration.cancel": {
32389
+ capName: "storage-migration",
32390
+ capScope: "system",
32391
+ addonId: null,
32392
+ access: "create"
32393
+ },
32394
+ "storageMigration.plan": {
32395
+ capName: "storage-migration",
32396
+ capScope: "system",
32397
+ addonId: null,
32398
+ access: "view"
32399
+ },
32400
+ "storageMigration.start": {
32401
+ capName: "storage-migration",
32402
+ capScope: "system",
32403
+ addonId: null,
32404
+ access: "create"
32405
+ },
32406
+ "storageMigration.status": {
32407
+ capName: "storage-migration",
32408
+ capScope: "system",
32409
+ addonId: null,
32410
+ access: "view"
32411
+ },
32089
32412
  "storageProvider.abortUpload": {
32090
32413
  capName: "storage-provider",
32091
32414
  capScope: "system",
@@ -32464,12 +32787,42 @@ var METHOD_ACCESS_MAP = Object.freeze({
32464
32787
  addonId: null,
32465
32788
  access: "create"
32466
32789
  },
32790
+ "terminalSession.adoptLegacyMonitor": {
32791
+ capName: "terminal-session",
32792
+ capScope: "system",
32793
+ addonId: null,
32794
+ access: "create"
32795
+ },
32467
32796
  "terminalSession.close": {
32468
32797
  capName: "terminal-session",
32469
32798
  capScope: "system",
32470
32799
  addonId: null,
32471
32800
  access: "create"
32472
32801
  },
32802
+ "terminalSession.createInstance": {
32803
+ capName: "terminal-session",
32804
+ capScope: "system",
32805
+ addonId: null,
32806
+ access: "create"
32807
+ },
32808
+ "terminalSession.deleteInstance": {
32809
+ capName: "terminal-session",
32810
+ capScope: "system",
32811
+ addonId: null,
32812
+ access: "delete"
32813
+ },
32814
+ "terminalSession.listInstances": {
32815
+ capName: "terminal-session",
32816
+ capScope: "system",
32817
+ addonId: null,
32818
+ access: "view"
32819
+ },
32820
+ "terminalSession.listLegacyCameras": {
32821
+ capName: "terminal-session",
32822
+ capScope: "system",
32823
+ addonId: null,
32824
+ access: "view"
32825
+ },
32473
32826
  "terminalSession.listProfiles": {
32474
32827
  capName: "terminal-session",
32475
32828
  capScope: "system",
@@ -32488,12 +32841,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32488
32841
  addonId: null,
32489
32842
  access: "create"
32490
32843
  },
32844
+ "terminalSession.pullOutput": {
32845
+ capName: "terminal-session",
32846
+ capScope: "system",
32847
+ addonId: null,
32848
+ access: "create"
32849
+ },
32491
32850
  "terminalSession.resize": {
32492
32851
  capName: "terminal-session",
32493
32852
  capScope: "system",
32494
32853
  addonId: null,
32495
32854
  access: "create"
32496
32855
  },
32856
+ "terminalSession.setInstanceEnabled": {
32857
+ capName: "terminal-session",
32858
+ capScope: "system",
32859
+ addonId: null,
32860
+ access: "create"
32861
+ },
32862
+ "terminalSession.writeInput": {
32863
+ capName: "terminal-session",
32864
+ capScope: "system",
32865
+ addonId: null,
32866
+ access: "create"
32867
+ },
32497
32868
  "toast.onToast": {
32498
32869
  capName: "toast",
32499
32870
  capScope: "system",
@@ -33360,4 +33731,4 @@ function enumerateInferenceDevices(hw) {
33360
33731
  return out;
33361
33732
  }
33362
33733
  //#endregion
33363
- export { parseStreamParamsFormPatch as $, deviceManagerCapability as A, expandCapMethods as At, isCollectionArrayMethod as B, EventCategory as Bt, bareAddonId as C, WELL_KNOWN_TAB_MAP as Ct, coreBlocksCapability as D, createEvent as Dt, coreBlockIdFromAddonId as E, asString as Et, enumerateItemArrayFields as F, parseJsonUnknown as Ft, lifecycleJobSchema as G, isSameAddonId as H, enumerateSchemaFields as I, readinessKey as It, logLevelAtMost as J, localNetworkCapability as K, extractNestedAddonId as L, resolveCapMount as Lt, deviceStatusCapability as M, isDeviceConfigCap as Mt, doorbellCapability as N, nodePin as Nt, dataStoreProviderCapability as O, emitDownForOwnedCaps as Ot, enumerateInferenceDevices as P, parseJsonObject as Pt, objectInputDeclaresAddonId as Q, filesystemBrowseCapability as R, scopeKey as Rt, backupCapability as S, ReadinessTimeoutError as St, coreBlockAddonId as T, asNumber as Tt, isVoidInput as U, isObjectInput as V, kebabToCamel as W, metricsProviderCapability as X, looseSchema as Y, normalizeUnit as Z, addonPagesCapability as _, DEVICE_STATUS_METHOD as _t, CAP_NAMES_WITH_STATUS as a, settingsStoreCapability as at, alertsCapability as b, DeviceType as bt, CoreBlockSchema as c, storageProviderCapability as ct, METHOD_ACCESS_MAP as d, vectorDimFromBase64 as dt, platformProbeCapability as et, RUNTIME_DEFAULTS as f, vectorStoreCapability as ft, UserRecordSchema as g, DEVICE_SETTINGS_CONTRIBUTION_METHODS as gt, StorageLocationTypeSchema as h, DATAPLANE_SECRET_HEADER as ht, BatteryStatusSchema as i, scoreRuntimes as it, deviceStateCapability as j, hydrateSchema as jt, decodeVectorBase64 as k, emitReadiness as kt, DeclaredDevices as l, streamQualityLabel as lt, ScopedTokenSchema as m, BaseAddon as mt, AlertSchema as n, scopesAllowAddon as nt, CORE_BLOCKS_ADDON_ID as o, snapshotCapability as ot, STREAM_PROFILE_META as p, errMsg as pt, logDestinationCapability as q, ApiKeyRecordSchema as r, scopesAllowDeviceCap as rt, CORE_BLOCK_ADDON_PREFIX as s, storageCapability as st, ALL_CAPABILITY_DEFINITIONS as t, procedureAuthKey as tt, DeviceStatusSchema as u, userManagementCapability as ut, addonSettingsCapability as v, DeviceFeature as vt, buildStreamParamsConfigSchema as w, asJsonObject as wt, authProviderCapability as x, ReadinessRegistry as xt, addonWidgetsCapability as y, DeviceRole as yt, isArrayOutputSchema as z, sleep as zt };
33734
+ export { objectInputDeclaresAddonId as $, decodeVectorBase64 as A, emitDownForOwnedCaps as At, isArrayOutputSchema as B, scopeKey as Bt, backupCapability as C, ReadinessRegistry as Ct, coreBlockIdFromAddonId as D, asNumber as Dt, coreBlockAddonId as E, asJsonObject as Et, enumerateInferenceDevices as F, nodePin as Ft, kebabToCamel as G, isObjectInput as H, EventCategory as Ht, enumerateItemArrayFields as I, parseJsonObject as It, logDestinationCapability as J, lifecycleJobSchema as K, enumerateSchemaFields as L, parseJsonUnknown as Lt, deviceStateCapability as M, expandCapMethods as Mt, deviceStatusCapability as N, hydrateSchema as Nt, coreBlocksCapability as O, asString as Ot, doorbellCapability as P, isDeviceConfigCap as Pt, normalizeUnit as Q, extractNestedAddonId as R, readinessKey as Rt, authProviderCapability as S, DeviceType as St, buildStreamParamsConfigSchema as T, WELL_KNOWN_TAB_MAP as Tt, isSameAddonId as U, isCollectionArrayMethod as V, sleep as Vt, isVoidInput as W, looseSchema as X, logLevelAtMost as Y, metricsProviderCapability as Z, UserRecordSchema as _, DATAPLANE_SECRET_HEADER as _t, CAP_NAMES_WITH_STATUS as a, scoreRuntimes as at, addonWidgetsCapability as b, DeviceFeature as bt, CoreBlockSchema as c, storageCapability as ct, METHOD_ACCESS_MAP as d, streamQualityLabel as dt, parseStreamParamsFormPatch as et, RUNTIME_DEFAULTS as f, userManagementCapability as ft, StorageMigrationJobSchema as g, BaseAddon as gt, StorageLocationTypeSchema as h, errMsg as ht, BatteryStatusSchema as i, scopesAllowDeviceCap as it, deviceManagerCapability as j, emitReadiness as jt, dataStoreProviderCapability as k, createEvent as kt, DeclaredDevices as l, storageMigrationCapability as lt, ScopedTokenSchema as m, vectorStoreCapability as mt, AlertSchema as n, procedureAuthKey as nt, CORE_BLOCKS_ADDON_ID as o, settingsStoreCapability as ot, STREAM_PROFILE_META as p, vectorDimFromBase64 as pt, localNetworkCapability as q, ApiKeyRecordSchema as r, scopesAllowAddon as rt, CORE_BLOCK_ADDON_PREFIX as s, snapshotCapability as st, ALL_CAPABILITY_DEFINITIONS as t, platformProbeCapability as tt, DeviceStatusSchema as u, storageProviderCapability as ut, addonPagesCapability as v, DEVICE_SETTINGS_CONTRIBUTION_METHODS as vt, bareAddonId as w, ReadinessTimeoutError as wt, alertsCapability as x, DeviceRole as xt, addonSettingsCapability as y, DEVICE_STATUS_METHOD as yt, filesystemBrowseCapability as z, resolveCapMount as zt };