@camstack/addon-model-studio 1.1.66 → 1.1.68

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 (17) hide show
  1. package/dist/{MotionZonesSettings-Db0aScD3.mjs → MotionZonesSettings-B-Wgpoan.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-cR3N_ytC.mjs → PrivacyMaskSettings-cvW1-2wy.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-DXVHDH0R.mjs → SceneMonitorEditor-CBu-rpX8.mjs} +3 -3
  4. package/dist/_stub.js +10 -10
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-THpTI09L.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-pQwHBXdf.mjs} +3 -3
  6. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BCT-V4ES.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CtdlusUe.mjs} +1 -1
  7. package/dist/{hostInit-DMExYUaf.mjs → hostInit-D7BQsze2.mjs} +2 -2
  8. package/dist/model-studio.addon.js +223 -7
  9. package/dist/model-studio.addon.mjs +223 -7
  10. package/dist/{player-overlays-lBkRCWTl.mjs → player-overlays-CQBflsvl.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-yDg54Ukl.mjs → responsive-Cd_eAI5T.mjs} +1 -1
  13. package/dist/{square-CRbl_bVG.mjs → square-CQxmAA1h.mjs} +1 -1
  14. package/dist/{trash-2-6w-9eKkh.mjs → trash-2-BgRN0d8G.mjs} +1 -1
  15. package/dist/{use-device-snapshot-czNca4dI.mjs → use-device-snapshot-DgGzfUGT.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-Dpo156ru.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-D6dxrOg6.mjs} +1 -1
  17. package/package.json +1 -1
@@ -8663,6 +8663,13 @@ var MediaRelocateModeSchema = _enum([
8663
8663
  ]);
8664
8664
  var RelocateMediaInputSchema = object({
8665
8665
  toLocationId: string(),
8666
+ /**
8667
+ * Restrict the pass to rows currently on this location. Omitted / `'*'` =
8668
+ * every row that is not already on `toLocationId` (the historical
8669
+ * behaviour). A named source is what a from→to migration needs: without it
8670
+ * "move events off disk 2" also emptied disk 1.
8671
+ */
8672
+ fromLocationId: string().optional(),
8666
8673
  throttleMbps: number().min(1).max(1e3).optional(),
8667
8674
  /** Omitted = `move`, the pre-existing behaviour. */
8668
8675
  mode: MediaRelocateModeSchema.optional()
@@ -8730,6 +8737,19 @@ var StorageMigrationDestinationsSchema = object({
8730
8737
  galleryMedia: string().min(1).optional()
8731
8738
  }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
8732
8739
  /**
8740
+ * Optional named source per class. Omitted = the class's current default
8741
+ * (the historical behaviour). A named source that is NOT the default is a
8742
+ * drain of that disk: bytes move, the default stays, and the source is
8743
+ * disabled when the move finishes.
8744
+ */
8745
+ var StorageMigrationSourcesSchema = object({
8746
+ recordings: string().min(1).optional(),
8747
+ recordingsLow: string().min(1).optional(),
8748
+ eventMedia: string().min(1).optional(),
8749
+ backups: string().min(1).optional(),
8750
+ galleryMedia: string().min(1).optional()
8751
+ }).optional();
8752
+ /**
8733
8753
  * How a migration sequences the cutover against the byte move.
8734
8754
  *
8735
8755
  * - `blocking` — the historical order: pause, move every byte, repoint,
@@ -8751,6 +8771,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
8751
8771
  /** Shared input for planning and starting an orchestrated storage migration. */
8752
8772
  var StorageMigrationInputSchema = object({
8753
8773
  destinations: StorageMigrationDestinationsSchema,
8774
+ /** Omitted = each class's current default. */
8775
+ sources: StorageMigrationSourcesSchema,
8754
8776
  throttleMbps: number().min(1).max(1e3).optional(),
8755
8777
  /** Omitted = `blocking`, which stays the default. */
8756
8778
  mode: StorageMigrationModeSchema.optional()
@@ -8830,6 +8852,13 @@ var StorageMigrationMoveSchema = object({
8830
8852
  storageClass: StorageMigrationClassSchema,
8831
8853
  fromLocationId: string(),
8832
8854
  toLocationId: string(),
8855
+ /**
8856
+ * True when `from` was NOT the class default at plan time. The move still
8857
+ * copies bytes, but the default is left alone and the source is disabled
8858
+ * once the copy verifies. Absent on jobs planned before this field existed
8859
+ * — those jobs always repointed, which is `false`.
8860
+ */
8861
+ freezeSource: boolean().optional(),
8833
8862
  moverJobId: string().nullable(),
8834
8863
  state: RelocateJobStateSchema.nullable(),
8835
8864
  error: string().nullable(),
@@ -8843,6 +8872,7 @@ var StorageMigrationJobSchema = object({
8843
8872
  * can tell a seconds-long cutover from a thirty-hour one. */
8844
8873
  mode: StorageMigrationModeSchema,
8845
8874
  destinations: StorageMigrationDestinationsSchema,
8875
+ sources: StorageMigrationSourcesSchema,
8846
8876
  throttleMbps: number(),
8847
8877
  moves: array(StorageMigrationMoveSchema),
8848
8878
  pauseLeaseId: string().nullable(),
@@ -8868,6 +8898,7 @@ var StorageMigrationFindingSchema = object({
8868
8898
  });
8869
8899
  var StorageMigrationPlanSchema = object({
8870
8900
  destinations: StorageMigrationDestinationsSchema,
8901
+ sources: StorageMigrationSourcesSchema,
8871
8902
  /** The mode this plan was built for. A plan is only valid for its mode: the
8872
8903
  * `eventMedia` seal gate and the single-cardinality refusal both depend on
8873
8904
  * it. */
@@ -8875,7 +8906,8 @@ var StorageMigrationPlanSchema = object({
8875
8906
  moves: array(object({
8876
8907
  storageClass: StorageMigrationClassSchema,
8877
8908
  fromLocationId: string(),
8878
- toLocationId: string()
8909
+ toLocationId: string(),
8910
+ freezeSource: boolean().optional()
8879
8911
  })),
8880
8912
  findings: array(StorageMigrationFindingSchema)
8881
8913
  });
@@ -9053,10 +9085,51 @@ var LedgerWalkReportSchema = object({
9053
9085
  var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
9054
9086
  var RelocatableMediaCountInputSchema = object({
9055
9087
  toLocationId: string().min(1),
9088
+ /** Restrict the count to one source; omitted / `'*'` = every non-target row. */
9089
+ fromLocationId: string().optional(),
9056
9090
  /** Omitted = `move`. */
9057
9091
  mode: MediaRelocateModeSchema.optional()
9058
9092
  });
9059
9093
  /**
9094
+ * Operator cleanup of leftover analytics rows, optional debug media, and
9095
+ * ghost ledger entries on frozen footage locations.
9096
+ *
9097
+ * A pass is tens of minutes on a standing backlog. The hub method RETURNS
9098
+ * `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
9099
+ * is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
9100
+ * with no operator-visible status.
9101
+ */
9102
+ var StorageCleanupPhaseSchema = _enum([
9103
+ "orphans",
9104
+ "debug-media",
9105
+ "ghost-ledger",
9106
+ "done",
9107
+ "failed",
9108
+ "cancelled"
9109
+ ]);
9110
+ var StorageCleanupInputSchema = object({
9111
+ /** Also walk motion stills / track filmstrips. Off by default. */
9112
+ includeDebugMedia: boolean().optional() });
9113
+ var StorageCleanupJobSchema = object({
9114
+ jobId: string(),
9115
+ phase: StorageCleanupPhaseSchema,
9116
+ includeDebugMedia: boolean(),
9117
+ orphansReclaimed: number().int().nonnegative(),
9118
+ orphanBytesReclaimed: number().int().nonnegative(),
9119
+ debugMediaReclaimed: number().int().nonnegative(),
9120
+ debugMediaBytesReclaimed: number().int().nonnegative(),
9121
+ ghostsForgotten: number().int().nonnegative(),
9122
+ ghostBytesForgotten: number().int().nonnegative(),
9123
+ /** Short operator-facing line: current collection, pass, or location. */
9124
+ detail: string().nullable(),
9125
+ cancelRequested: boolean(),
9126
+ startedAt: number(),
9127
+ updatedAt: number(),
9128
+ finishedAt: number().nullable(),
9129
+ error: string().nullable()
9130
+ });
9131
+ var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
9132
+ /**
9060
9133
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
9061
9134
  * storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
9062
9135
  * so the persisted record schema and the consumer-facing cap can both consume it
@@ -9084,11 +9157,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
9084
9157
  * The default location for a type uses `id === <type>:default` by
9085
9158
  * convention (the bare type ref like `'backups'` resolves to it).
9086
9159
  *
9087
- * `isSystem: true` marks a location as orchestrator-seeded and
9088
- * undeletable. The bootstrap-installed defaults (one per type) carry
9089
- * this flag; operator-added locations don't. Editing the config of
9090
- * a system location is allowed (path migration, provider swap) but
9091
- * deleting it is rejected at the cap level.
9160
+ * `isSystem` is a legacy persisted flag. Seed still creates the initial
9161
+ * `<type>:default` locations; the flag is no longer a lock, a badge, or a
9162
+ * prune selector. New writes leave it false. Deletion is gated on uniqueness
9163
+ * / last-enabled, not on this bit.
9092
9164
  */
9093
9165
  var StorageLocationSchema = object({
9094
9166
  id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
@@ -19657,6 +19729,47 @@ var RebuildStatusSchema = object({
19657
19729
  /** Present when the pass ended by throwing. */
19658
19730
  error: string().nullable()
19659
19731
  });
19732
+ /**
19733
+ * Acknowledgement that a debug-media reclaim STARTED.
19734
+ *
19735
+ * The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
19736
+ * it runs detached and this returns immediately. Awaiting it is how the
19737
+ * `addons.custom` door hit the 60 s UDS deadline while the walk carried on
19738
+ * with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
19739
+ */
19740
+ var MediaReclaimStartResultSchema = object({
19741
+ started: boolean(),
19742
+ /** True when a pass was already running; the new request is ignored. */
19743
+ alreadyRunning: boolean()
19744
+ });
19745
+ var MediaReclaimInputSchema = object({
19746
+ mode: _enum(["report", "reclaim"]).default("report"),
19747
+ scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
19748
+ deviceIds: array(number().int()).min(1).optional(),
19749
+ restart: boolean().optional(),
19750
+ pageSize: number().int().min(50).max(5e3).optional(),
19751
+ maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
19752
+ maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
19753
+ maxBytesPerRun: number().int().min(1).optional(),
19754
+ budgetMinutes: number().int().min(1).max(720).optional(),
19755
+ throttleBytesPerSec: number().int().min(64 * 1024).optional(),
19756
+ graceMinutes: number().int().min(1).max(10080).optional()
19757
+ });
19758
+ var MediaReclaimStatusSchema = object({
19759
+ running: boolean(),
19760
+ mode: _enum(["report", "reclaim"]).nullable(),
19761
+ totalExamined: number(),
19762
+ totalEligible: number(),
19763
+ totalReclaimed: number(),
19764
+ totalBytesReclaimed: number(),
19765
+ totalRefused: number(),
19766
+ /** Device+scope windows finished in this pass. */
19767
+ devicesDone: number(),
19768
+ complete: boolean().nullable(),
19769
+ startedAtMs: number().nullable(),
19770
+ finishedAtMs: number().nullable(),
19771
+ error: string().nullable()
19772
+ });
19660
19773
  var ReplayFrameInputSchema = object({
19661
19774
  timestamp: number(),
19662
19775
  frame: PipelineRunResultBridge
@@ -19798,6 +19911,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19798
19911
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
19799
19912
  kind: "query",
19800
19913
  auth: "admin"
19914
+ }), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
19915
+ kind: "mutation",
19916
+ auth: "admin"
19917
+ }), method(object({}), MediaReclaimStatusSchema, {
19918
+ kind: "query",
19919
+ auth: "admin"
19801
19920
  }), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
19802
19921
  kind: "query",
19803
19922
  auth: "admin"
@@ -21768,7 +21887,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
21768
21887
  }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
21769
21888
  kind: "mutation",
21770
21889
  auth: "admin"
21771
- });
21890
+ }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
21891
+ kind: "mutation",
21892
+ auth: "admin"
21893
+ }), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
21894
+ kind: "mutation",
21895
+ auth: "admin"
21896
+ }), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
21772
21897
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
21773
21898
  providerId: string().min(1),
21774
21899
  displayName: string().min(1),
@@ -27146,6 +27271,33 @@ var RecordingRebalanceInputSchema = object({
27146
27271
  minMoveGb: number().min(0).optional()
27147
27272
  });
27148
27273
  /**
27274
+ * Operator-facing placement of one camera onto a recordings location.
27275
+ *
27276
+ * `pinLocationId` is the operator instruction: a location id, or `null` for
27277
+ * Auto (the planner may move this camera). `locationId` is where high/mid
27278
+ * currently write — the plan, which may disagree with the pin when Auto.
27279
+ */
27280
+ var RecordingDevicePlacementSchema = object({
27281
+ deviceId: number().int(),
27282
+ profile: string(),
27283
+ locationId: string()
27284
+ });
27285
+ var RecordingDevicePinSchema = object({
27286
+ deviceId: number().int(),
27287
+ /** Recordings-class location this camera is pinned to. */
27288
+ locationId: string()
27289
+ });
27290
+ var RecordingPlacementViewSchema = object({
27291
+ assignments: array(RecordingDevicePlacementSchema),
27292
+ pins: array(RecordingDevicePinSchema),
27293
+ defaultLocations: record(string(), string())
27294
+ });
27295
+ var RecordingSetDevicePlacementInputSchema = object({
27296
+ deviceId: number().int(),
27297
+ /** `null` = Auto. Otherwise a `recordings:*` location id. */
27298
+ locationId: string().nullable()
27299
+ });
27300
+ /**
27149
27301
  * Result of locating footage at a wall-clock instant for one device/profile.
27150
27302
  * `segment` carries the covering segment's window; `gap` reports the forward
27151
27303
  * nearest covered edge (`null` past the end of footage / when none exists)
@@ -27371,6 +27523,12 @@ method(object({
27371
27523
  }), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
27372
27524
  kind: "mutation",
27373
27525
  auth: "admin"
27526
+ }), method(object({}), RecordingPlacementViewSchema, {
27527
+ kind: "query",
27528
+ auth: "admin"
27529
+ }), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
27530
+ kind: "mutation",
27531
+ auth: "admin"
27374
27532
  });
27375
27533
  /**
27376
27534
  * `recording-export` cap — render a footage time range into a single downloadable
@@ -32451,6 +32609,12 @@ Object.freeze({
32451
32609
  addonId: null,
32452
32610
  access: "view"
32453
32611
  },
32612
+ "pipelineAnalytics.getMediaReclaimStatus": {
32613
+ capName: "pipeline-analytics",
32614
+ capScope: "device",
32615
+ addonId: null,
32616
+ access: "view"
32617
+ },
32454
32618
  "pipelineAnalytics.getMotionEvents": {
32455
32619
  capName: "pipeline-analytics",
32456
32620
  capScope: "device",
@@ -32625,6 +32789,12 @@ Object.freeze({
32625
32789
  addonId: null,
32626
32790
  access: "create"
32627
32791
  },
32792
+ "pipelineAnalytics.reclaimDebugMedia": {
32793
+ capName: "pipeline-analytics",
32794
+ capScope: "device",
32795
+ addonId: null,
32796
+ access: "create"
32797
+ },
32628
32798
  "pipelineAnalytics.reconcileFromDisk": {
32629
32799
  capName: "pipeline-analytics",
32630
32800
  capScope: "device",
@@ -33549,6 +33719,12 @@ Object.freeze({
33549
33719
  addonId: null,
33550
33720
  access: "view"
33551
33721
  },
33722
+ "recording.getPlacement": {
33723
+ capName: "recording",
33724
+ capScope: "system",
33725
+ addonId: null,
33726
+ access: "view"
33727
+ },
33552
33728
  "recording.getPlaybackManifest": {
33553
33729
  capName: "recording",
33554
33730
  capScope: "system",
@@ -33675,6 +33851,12 @@ Object.freeze({
33675
33851
  addonId: null,
33676
33852
  access: "create"
33677
33853
  },
33854
+ "recording.setDevicePlacement": {
33855
+ capName: "recording",
33856
+ capScope: "system",
33857
+ addonId: null,
33858
+ access: "create"
33859
+ },
33678
33860
  "recording.startStorageMigrationMove": {
33679
33861
  capName: "recording",
33680
33862
  capScope: "system",
@@ -34119,12 +34301,36 @@ Object.freeze({
34119
34301
  addonId: null,
34120
34302
  access: "create"
34121
34303
  },
34304
+ "storageMigration.cleanupCancel": {
34305
+ capName: "storage-migration",
34306
+ capScope: "system",
34307
+ addonId: null,
34308
+ access: "create"
34309
+ },
34310
+ "storageMigration.cleanupStart": {
34311
+ capName: "storage-migration",
34312
+ capScope: "system",
34313
+ addonId: null,
34314
+ access: "create"
34315
+ },
34316
+ "storageMigration.cleanupStatus": {
34317
+ capName: "storage-migration",
34318
+ capScope: "system",
34319
+ addonId: null,
34320
+ access: "view"
34321
+ },
34122
34322
  "storageMigration.drain": {
34123
34323
  capName: "storage-migration",
34124
34324
  capScope: "system",
34125
34325
  addonId: null,
34126
34326
  access: "create"
34127
34327
  },
34328
+ "storageMigration.history": {
34329
+ capName: "storage-migration",
34330
+ capScope: "system",
34331
+ addonId: null,
34332
+ access: "view"
34333
+ },
34128
34334
  "storageMigration.movers": {
34129
34335
  capName: "storage-migration",
34130
34336
  capScope: "system",
@@ -36241,6 +36447,11 @@ Object.freeze({
36241
36447
  form: "single",
36242
36448
  optional: true
36243
36449
  }],
36450
+ "pipelineAnalytics.reclaimDebugMedia": [{
36451
+ name: "deviceIds",
36452
+ form: "array",
36453
+ optional: true
36454
+ }],
36244
36455
  "pipelineAnalytics.reconcileFromDisk": [{
36245
36456
  name: "deviceId",
36246
36457
  form: "single",
@@ -36606,6 +36817,11 @@ Object.freeze({
36606
36817
  form: "single",
36607
36818
  optional: false
36608
36819
  }],
36820
+ "recording.setDevicePlacement": [{
36821
+ name: "deviceId",
36822
+ form: "single",
36823
+ optional: false
36824
+ }],
36609
36825
  "recording.startStorageMigrationMove": [{
36610
36826
  name: "deviceId",
36611
36827
  form: "single",