@camstack/addon-pipeline 1.2.38 → 1.2.39

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 (90) hide show
  1. package/dist/audio-analyzer/index.js +1 -1
  2. package/dist/audio-analyzer/index.mjs +1 -1
  3. package/dist/detection-pipeline/index.js +145 -175
  4. package/dist/detection-pipeline/index.mjs +120 -150
  5. package/dist/{dist-BvFLZyhW.js → dist-BtAvtroH.js} +260 -108
  6. package/dist/{dist-Du7_SNiR.mjs → dist-COgGdFMv.mjs} +260 -108
  7. package/dist/{step-definitions-C8tk9fPJ.mjs → event-loop-stall-monitor-naFYvcOO.mjs} +139 -2
  8. package/dist/{step-definitions-i8O-hxyI.js → event-loop-stall-monitor-shfwi1_b.js} +150 -1
  9. package/dist/lazy-sharp-B-mb8uWx.mjs +20 -0
  10. package/dist/lazy-sharp-CcYuXtsa.js +25 -0
  11. package/dist/motion-wasm/index.js +3 -3
  12. package/dist/motion-wasm/index.mjs +3 -3
  13. package/dist/pipeline-runner/index.js +3316 -2428
  14. package/dist/pipeline-runner/index.mjs +3315 -2428
  15. package/dist/recorder/index.js +102 -664
  16. package/dist/recorder/index.mjs +102 -658
  17. package/dist/stream-broker/_stub.js +2 -2
  18. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-ByuMjhL3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CjrKd4xX.mjs} +2 -2
  19. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B59GNAJq.mjs +26 -0
  20. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-83qNzMSL.mjs +26 -0
  21. package/dist/stream-broker/{hostInit-CfC64ye2.mjs → hostInit-BFH17kSk.mjs} +2 -2
  22. package/dist/stream-broker/index.js +717 -211
  23. package/dist/stream-broker/index.mjs +717 -211
  24. package/dist/stream-broker/remoteEntry.js +1 -1
  25. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-Dx-Vrpyt.js → MaskShapeCanvas-DI4BY7W2-yeSHfpUy.js} +1 -1
  26. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-9D-BWwQP.js → MotionZonesSettings-NcxxQN8r-Df4WxM6N.js} +1 -1
  27. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-HvAetfA4.js → PrivacyMaskSettings-APgPLF7p-COHSiTGq.js} +1 -1
  28. package/embed-dist/assets/index-4fJzjj4H.css +2 -0
  29. package/embed-dist/assets/index-Ct9M2v5n.js +112 -0
  30. package/embed-dist/index.html +2 -2
  31. package/package.json +2 -2
  32. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-ByHi7ZAe.mjs +0 -26
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CscpvIRR.mjs +0 -26
  34. package/embed-dist/assets/index-9Ob2YrIf.js +0 -343
  35. package/embed-dist/assets/index-CAe6Dg-X.css +0 -2
  36. package/python/__pycache__/inference_pool.cpython-312.pyc +0 -0
  37. package/python/__pycache__/inference_pool.cpython-313.pyc +0 -0
  38. package/python/__pycache__/inference_pool.cpython-314.pyc +0 -0
  39. package/python/__pycache__/test_inference_pool_backpressure.cpython-314.pyc +0 -0
  40. package/python/__pycache__/test_inference_pool_coreml_cache.cpython-314.pyc +0 -0
  41. package/python/__pycache__/test_inference_pool_device_selection.cpython-314.pyc +0 -0
  42. package/python/__pycache__/test_inference_pool_layout.cpython-314.pyc +0 -0
  43. package/python/__pycache__/test_inference_pool_preprocess.cpython-314.pyc +0 -0
  44. package/python/__pycache__/yamnet_audio.cpython-314.pyc +0 -0
  45. package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/python/postprocessors/__pycache__/__init__.cpython-313.pyc +0 -0
  47. package/python/postprocessors/__pycache__/__init__.cpython-314.pyc +0 -0
  48. package/python/postprocessors/__pycache__/_safety.cpython-313.pyc +0 -0
  49. package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
  50. package/python/postprocessors/__pycache__/arcface.cpython-313.pyc +0 -0
  51. package/python/postprocessors/__pycache__/arcface.cpython-314.pyc +0 -0
  52. package/python/postprocessors/__pycache__/clip.cpython-312.pyc +0 -0
  53. package/python/postprocessors/__pycache__/clip.cpython-313.pyc +0 -0
  54. package/python/postprocessors/__pycache__/clip.cpython-314.pyc +0 -0
  55. package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
  56. package/python/postprocessors/__pycache__/ctc.cpython-313.pyc +0 -0
  57. package/python/postprocessors/__pycache__/ctc.cpython-314.pyc +0 -0
  58. package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
  59. package/python/postprocessors/__pycache__/saliency.cpython-313.pyc +0 -0
  60. package/python/postprocessors/__pycache__/saliency.cpython-314.pyc +0 -0
  61. package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
  62. package/python/postprocessors/__pycache__/scrfd.cpython-313.pyc +0 -0
  63. package/python/postprocessors/__pycache__/scrfd.cpython-314.pyc +0 -0
  64. package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
  65. package/python/postprocessors/__pycache__/softmax.cpython-313.pyc +0 -0
  66. package/python/postprocessors/__pycache__/softmax.cpython-314.pyc +0 -0
  67. package/python/postprocessors/__pycache__/ssd.cpython-312.pyc +0 -0
  68. package/python/postprocessors/__pycache__/ssd.cpython-313.pyc +0 -0
  69. package/python/postprocessors/__pycache__/ssd.cpython-314.pyc +0 -0
  70. package/python/postprocessors/__pycache__/test_clip.cpython-312-pytest-9.1.1.pyc +0 -0
  71. package/python/postprocessors/__pycache__/test_clip.cpython-313-pytest-9.1.1.pyc +0 -0
  72. package/python/postprocessors/__pycache__/test_ctc.cpython-312-pytest-9.1.1.pyc +0 -0
  73. package/python/postprocessors/__pycache__/test_ctc.cpython-312.pyc +0 -0
  74. package/python/postprocessors/__pycache__/test_ctc.cpython-313-pytest-9.1.1.pyc +0 -0
  75. package/python/postprocessors/__pycache__/test_ctc.cpython-313.pyc +0 -0
  76. package/python/postprocessors/__pycache__/test_saliency.cpython-312-pytest-9.1.1.pyc +0 -0
  77. package/python/postprocessors/__pycache__/test_saliency.cpython-313-pytest-9.1.1.pyc +0 -0
  78. package/python/postprocessors/__pycache__/test_softmax.cpython-312-pytest-9.1.1.pyc +0 -0
  79. package/python/postprocessors/__pycache__/test_yolo_nms.cpython-312-pytest-9.1.1.pyc +0 -0
  80. package/python/postprocessors/__pycache__/test_yolo_nms.cpython-39.pyc +0 -0
  81. package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
  82. package/python/postprocessors/__pycache__/yamnet.cpython-313.pyc +0 -0
  83. package/python/postprocessors/__pycache__/yamnet.cpython-314.pyc +0 -0
  84. package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
  85. package/python/postprocessors/__pycache__/yolo.cpython-313.pyc +0 -0
  86. package/python/postprocessors/__pycache__/yolo.cpython-314.pyc +0 -0
  87. package/python/postprocessors/__pycache__/yolo.cpython-39.pyc +0 -0
  88. package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
  89. package/python/postprocessors/__pycache__/yolo_seg.cpython-313.pyc +0 -0
  90. package/python/postprocessors/__pycache__/yolo_seg.cpython-314.pyc +0 -0
@@ -7497,14 +7497,7 @@ var RecordingConfigSchema = object({
7497
7497
  * windows only — existing sheets are immutable, and each window's index
7498
7498
  * carries its own tile dims so mixed-preset history renders correctly.
7499
7499
  */
7500
- scrubThumbnails: ScrubThumbnailPresetSchema.optional(),
7501
- /**
7502
- * OPT-IN thumbnail-strip generation for this camera: every keyframe of the
7503
- * low recording saved as a JPEG (the fast-drag scrub depth), a derived
7504
- * cache that eviction reclaims with the footage. Absent/false = no strips
7505
- * are written and scrub reads exact keyframes at every velocity.
7506
- */
7507
- stripsEnabled: boolean().optional()
7500
+ scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7508
7501
  }).strict();
7509
7502
  /**
7510
7503
  * Derive the {@link RecordingStorageModeSchema} summary from the authoritative
@@ -7582,7 +7575,7 @@ var OpsLogQueryInputSchema = object({
7582
7575
  /**
7583
7576
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7584
7577
  *
7585
- * One shape shared by the recorder's `relocateFootage` (segments + strips) and
7578
+ * One shape shared by the recorder's `relocateFootage` (segments) and
7586
7579
  * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7587
7580
  * page renders both movers with one component. Jobs are in-RAM (a restart
7588
7581
  * forgets them — re-running is safe by construction: copy-if-absent, delete
@@ -7604,7 +7597,7 @@ var RelocateJobSchema = object({
7604
7597
  toLocationId: string(),
7605
7598
  /** Scoped device, or null = every device. */
7606
7599
  deviceId: number().nullable(),
7607
- /** What the job moves (owner-addon specific: segments/strips or media). */
7600
+ /** What the job moves (owner-addon specific: segments or media). */
7608
7601
  entities: array(string()),
7609
7602
  filesMoved: number().int(),
7610
7603
  bytesMoved: number().int(),
@@ -7618,7 +7611,7 @@ var RelocateFootageInputSchema = object({
7618
7611
  deviceId: number().optional(),
7619
7612
  fromLocationId: string(),
7620
7613
  toLocationId: string(),
7621
- entities: array(_enum(["segments", "strips"])).optional(),
7614
+ entities: array(_enum(["segments"])).optional(),
7622
7615
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7623
7616
  * never allowed to starve live writers. */
7624
7617
  throttleMbps: number().min(1).max(1e3).optional()
@@ -16266,6 +16259,167 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
16266
16259
  auth: "admin"
16267
16260
  });
16268
16261
  /**
16262
+ * Query filter for settings-store collections.
16263
+ */
16264
+ var QueryFilterSchema = object({
16265
+ where: record(string(), unknown()).optional(),
16266
+ whereIn: record(string(), array(unknown())).optional(),
16267
+ whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
16268
+ orderBy: object({
16269
+ field: string(),
16270
+ direction: _enum(["asc", "desc"])
16271
+ }).optional(),
16272
+ limit: number().optional(),
16273
+ offset: number().optional()
16274
+ });
16275
+ /** A single stored record: `{ id, data }`. */
16276
+ var SettingsRecordSchema = object({
16277
+ id: string(),
16278
+ data: record(string(), unknown())
16279
+ });
16280
+ /**
16281
+ * Column declaration for a structured (SQL-backed) collection.
16282
+ *
16283
+ * Logical types — the backend translates each to the matching SQLite
16284
+ * storage class and handles per-type marshaling:
16285
+ * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
16286
+ * - `JSON` — TEXT under the hood; serialised on write, parsed on read
16287
+ * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
16288
+ */
16289
+ var CollectionColumnSchema = object({
16290
+ name: string(),
16291
+ type: _enum([
16292
+ "TEXT",
16293
+ "INTEGER",
16294
+ "REAL",
16295
+ "JSON",
16296
+ "BOOLEAN"
16297
+ ]),
16298
+ primaryKey: boolean().optional(),
16299
+ notNull: boolean().optional(),
16300
+ unique: boolean().optional()
16301
+ });
16302
+ var CollectionIndexSchema = object({
16303
+ name: string(),
16304
+ columns: array(string()).readonly(),
16305
+ unique: boolean().optional()
16306
+ });
16307
+ method(object({
16308
+ namespace: string().optional(),
16309
+ collection: string(),
16310
+ key: string()
16311
+ }), unknown()), method(object({
16312
+ namespace: string().optional(),
16313
+ collection: string(),
16314
+ key: string(),
16315
+ value: unknown()
16316
+ }), _void(), { kind: "mutation" }), method(object({
16317
+ namespace: string().optional(),
16318
+ collection: string(),
16319
+ filter: QueryFilterSchema.optional()
16320
+ }), array(SettingsRecordSchema).readonly()), method(object({
16321
+ namespace: string().optional(),
16322
+ collection: string(),
16323
+ record: SettingsRecordSchema
16324
+ }), _void(), { kind: "mutation" }), method(object({
16325
+ namespace: string().optional(),
16326
+ collection: string(),
16327
+ id: string(),
16328
+ data: record(string(), unknown())
16329
+ }), _void(), { kind: "mutation" }), method(object({
16330
+ namespace: string().optional(),
16331
+ collection: string(),
16332
+ key: string()
16333
+ }), _void(), { kind: "mutation" }), method(object({
16334
+ namespace: string().optional(),
16335
+ collection: string(),
16336
+ filter: QueryFilterSchema.optional()
16337
+ }), number()), method(object({
16338
+ namespace: string().optional(),
16339
+ collection: string(),
16340
+ field: string(),
16341
+ bucketSize: number().int().positive(),
16342
+ origin: number().int(),
16343
+ filter: QueryFilterSchema.optional()
16344
+ }), array(object({
16345
+ bucket: number().int(),
16346
+ count: number().int()
16347
+ })).readonly()), method(object({
16348
+ namespace: string().optional(),
16349
+ collection: string()
16350
+ }), boolean()), method(object({
16351
+ namespace: string().optional(),
16352
+ collection: string(),
16353
+ columns: array(CollectionColumnSchema).readonly(),
16354
+ indexes: array(CollectionIndexSchema).readonly().optional()
16355
+ }), _void(), { kind: "mutation" });
16356
+ /**
16357
+ * What one engine says about itself. The orchestrator uses `kind` to pick
16358
+ * a registrant for a collection; `engineId` is what a log line names when
16359
+ * a call is routed or refused.
16360
+ */
16361
+ var EngineInfoSchema = object({
16362
+ engineId: string(),
16363
+ /**
16364
+ * `relational` — rows, columns, indexes, the surface `settings-store`
16365
+ * has always described. `vector` — an embedding store answering
16366
+ * similarity queries. A registrant declares exactly one; an engine that
16367
+ * does both registers twice, because "both" would make the routing
16368
+ * decision ambiguous at exactly the point it must not be.
16369
+ */
16370
+ kind: _enum(["relational", "vector"]),
16371
+ displayName: string()
16372
+ });
16373
+ method(_void(), EngineInfoSchema), method(object({
16374
+ namespace: string().optional(),
16375
+ collection: string(),
16376
+ key: string()
16377
+ }), unknown()), method(object({
16378
+ namespace: string().optional(),
16379
+ collection: string(),
16380
+ key: string(),
16381
+ value: unknown()
16382
+ }), _void(), { kind: "mutation" }), method(object({
16383
+ namespace: string().optional(),
16384
+ collection: string(),
16385
+ filter: QueryFilterSchema.optional()
16386
+ }), array(SettingsRecordSchema).readonly()), method(object({
16387
+ namespace: string().optional(),
16388
+ collection: string(),
16389
+ record: SettingsRecordSchema
16390
+ }), _void(), { kind: "mutation" }), method(object({
16391
+ namespace: string().optional(),
16392
+ collection: string(),
16393
+ id: string(),
16394
+ data: record(string(), unknown())
16395
+ }), _void(), { kind: "mutation" }), method(object({
16396
+ namespace: string().optional(),
16397
+ collection: string(),
16398
+ key: string()
16399
+ }), _void(), { kind: "mutation" }), method(object({
16400
+ namespace: string().optional(),
16401
+ collection: string(),
16402
+ filter: QueryFilterSchema.optional()
16403
+ }), number()), method(object({
16404
+ namespace: string().optional(),
16405
+ collection: string(),
16406
+ field: string(),
16407
+ bucketSize: number().int().positive(),
16408
+ origin: number().int(),
16409
+ filter: QueryFilterSchema.optional()
16410
+ }), array(object({
16411
+ bucket: number().int(),
16412
+ count: number().int()
16413
+ })).readonly()), method(object({
16414
+ namespace: string().optional(),
16415
+ collection: string()
16416
+ }), boolean()), method(object({
16417
+ namespace: string().optional(),
16418
+ collection: string(),
16419
+ columns: array(CollectionColumnSchema).readonly(),
16420
+ indexes: array(CollectionIndexSchema).readonly().optional()
16421
+ }), _void(), { kind: "mutation" });
16422
+ /**
16269
16423
  * detection-pipeline — device-scoped facade over the system
16270
16424
  * `pipeline-executor`.
16271
16425
  *
@@ -19528,6 +19682,28 @@ var ServerUpdateStateSchema = _enum([
19528
19682
  "pending-restart",
19529
19683
  "awaiting-confirmation"
19530
19684
  ]);
19685
+ var ImageContractSchema = object({
19686
+ state: _enum([
19687
+ "in-sync",
19688
+ "behind-patch",
19689
+ "behind-series",
19690
+ "ahead",
19691
+ "unknown"
19692
+ ]),
19693
+ /** The baked seed closure version — the image/app-bundle fingerprint. */
19694
+ seedVersion: string().nullable(),
19695
+ /** Best-known version the deployment contract delivers today. */
19696
+ contractVersion: string().nullable(),
19697
+ /**
19698
+ * Where `contractVersion` came from: a real registry check (`registry`), or
19699
+ * the node's own running version (`running` — a node can never run code
19700
+ * newer than the newest release, so `seed < running` proves image staleness
19701
+ * even before any registry check has run).
19702
+ */
19703
+ contractSource: _enum(["registry", "running"]).nullable(),
19704
+ /** One operator-grade sentence: this node runs image X; the contract says Y. */
19705
+ message: string()
19706
+ });
19531
19707
  var ServerRollbackInfoSchema = object({
19532
19708
  /** The version that failed (or was manually rolled back). */
19533
19709
  fromVersion: string(),
@@ -19564,7 +19740,12 @@ var ServerPackageStatusSchema = object({
19564
19740
  * versions are being IGNORED. Surfaced as a warning in the UI.
19565
19741
  */
19566
19742
  stateFileCorrupt: boolean(),
19567
- lastCheckedAtMs: number().nullable()
19743
+ lastCheckedAtMs: number().nullable(),
19744
+ /**
19745
+ * Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
19746
+ * version skew: an older provider's payload simply omits it.
19747
+ */
19748
+ imageContract: ImageContractSchema.optional()
19568
19749
  });
19569
19750
  var ServerUpdateCheckResultSchema = object({
19570
19751
  packageName: string(),
@@ -19599,101 +19780,6 @@ version: string().optional() }), ServerUpdateActionResultSchema, {
19599
19780
  auth: "admin"
19600
19781
  });
19601
19782
  /**
19602
- * Query filter for settings-store collections.
19603
- */
19604
- var QueryFilterSchema = object({
19605
- where: record(string(), unknown()).optional(),
19606
- whereIn: record(string(), array(unknown())).optional(),
19607
- whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
19608
- orderBy: object({
19609
- field: string(),
19610
- direction: _enum(["asc", "desc"])
19611
- }).optional(),
19612
- limit: number().optional(),
19613
- offset: number().optional()
19614
- });
19615
- /** A single stored record: `{ id, data }`. */
19616
- var SettingsRecordSchema = object({
19617
- id: string(),
19618
- data: record(string(), unknown())
19619
- });
19620
- /**
19621
- * Column declaration for a structured (SQL-backed) collection.
19622
- *
19623
- * Logical types — the backend translates each to the matching SQLite
19624
- * storage class and handles per-type marshaling:
19625
- * - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
19626
- * - `JSON` — TEXT under the hood; serialised on write, parsed on read
19627
- * - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
19628
- */
19629
- var CollectionColumnSchema = object({
19630
- name: string(),
19631
- type: _enum([
19632
- "TEXT",
19633
- "INTEGER",
19634
- "REAL",
19635
- "JSON",
19636
- "BOOLEAN"
19637
- ]),
19638
- primaryKey: boolean().optional(),
19639
- notNull: boolean().optional(),
19640
- unique: boolean().optional()
19641
- });
19642
- var CollectionIndexSchema = object({
19643
- name: string(),
19644
- columns: array(string()).readonly(),
19645
- unique: boolean().optional()
19646
- });
19647
- method(object({
19648
- namespace: string().optional(),
19649
- collection: string(),
19650
- key: string()
19651
- }), unknown()), method(object({
19652
- namespace: string().optional(),
19653
- collection: string(),
19654
- key: string(),
19655
- value: unknown()
19656
- }), _void(), { kind: "mutation" }), method(object({
19657
- namespace: string().optional(),
19658
- collection: string(),
19659
- filter: QueryFilterSchema.optional()
19660
- }), array(SettingsRecordSchema).readonly()), method(object({
19661
- namespace: string().optional(),
19662
- collection: string(),
19663
- record: SettingsRecordSchema
19664
- }), _void(), { kind: "mutation" }), method(object({
19665
- namespace: string().optional(),
19666
- collection: string(),
19667
- id: string(),
19668
- data: record(string(), unknown())
19669
- }), _void(), { kind: "mutation" }), method(object({
19670
- namespace: string().optional(),
19671
- collection: string(),
19672
- key: string()
19673
- }), _void(), { kind: "mutation" }), method(object({
19674
- namespace: string().optional(),
19675
- collection: string(),
19676
- filter: QueryFilterSchema.optional()
19677
- }), number()), method(object({
19678
- namespace: string().optional(),
19679
- collection: string(),
19680
- field: string(),
19681
- bucketSize: number().int().positive(),
19682
- origin: number().int(),
19683
- filter: QueryFilterSchema.optional()
19684
- }), array(object({
19685
- bucket: number().int(),
19686
- count: number().int()
19687
- })).readonly()), method(object({
19688
- namespace: string().optional(),
19689
- collection: string()
19690
- }), boolean()), method(object({
19691
- namespace: string().optional(),
19692
- collection: string(),
19693
- columns: array(CollectionColumnSchema).readonly(),
19694
- indexes: array(CollectionIndexSchema).readonly().optional()
19695
- }), _void(), { kind: "mutation" });
19696
- /**
19697
19783
  * `smtp-provider` — pluggable email delivery surface.
19698
19784
  *
19699
19785
  * Collection cap: a deployment may install multiple SMTP relays (e.g.
@@ -22458,7 +22544,7 @@ var recordingCapability = {
22458
22544
  auth: "admin"
22459
22545
  }),
22460
22546
  /**
22461
- * Move footage (segments and/or strips) from one recordings location to
22547
+ * Move footage (recorded segments) from one recordings location to
22462
22548
  * another — the drain workflow's mover (entity-routing spec Phase 4).
22463
22549
  * Throttled copy → size-verify → delete source → index refresh; resumable
22464
22550
  * by construction (copy-if-absent). Single-flight: one job at a time.
@@ -23783,6 +23869,72 @@ Object.freeze({
23783
23869
  addonId: null,
23784
23870
  access: "view"
23785
23871
  },
23872
+ "dataStoreProvider.count": {
23873
+ capName: "data-store-provider",
23874
+ capScope: "system",
23875
+ addonId: null,
23876
+ access: "view"
23877
+ },
23878
+ "dataStoreProvider.declareCollection": {
23879
+ capName: "data-store-provider",
23880
+ capScope: "system",
23881
+ addonId: null,
23882
+ access: "create"
23883
+ },
23884
+ "dataStoreProvider.delete": {
23885
+ capName: "data-store-provider",
23886
+ capScope: "system",
23887
+ addonId: null,
23888
+ access: "delete"
23889
+ },
23890
+ "dataStoreProvider.get": {
23891
+ capName: "data-store-provider",
23892
+ capScope: "system",
23893
+ addonId: null,
23894
+ access: "view"
23895
+ },
23896
+ "dataStoreProvider.getEngineInfo": {
23897
+ capName: "data-store-provider",
23898
+ capScope: "system",
23899
+ addonId: null,
23900
+ access: "view"
23901
+ },
23902
+ "dataStoreProvider.histogram": {
23903
+ capName: "data-store-provider",
23904
+ capScope: "system",
23905
+ addonId: null,
23906
+ access: "view"
23907
+ },
23908
+ "dataStoreProvider.insert": {
23909
+ capName: "data-store-provider",
23910
+ capScope: "system",
23911
+ addonId: null,
23912
+ access: "create"
23913
+ },
23914
+ "dataStoreProvider.isEmpty": {
23915
+ capName: "data-store-provider",
23916
+ capScope: "system",
23917
+ addonId: null,
23918
+ access: "view"
23919
+ },
23920
+ "dataStoreProvider.query": {
23921
+ capName: "data-store-provider",
23922
+ capScope: "system",
23923
+ addonId: null,
23924
+ access: "view"
23925
+ },
23926
+ "dataStoreProvider.set": {
23927
+ capName: "data-store-provider",
23928
+ capScope: "system",
23929
+ addonId: null,
23930
+ access: "create"
23931
+ },
23932
+ "dataStoreProvider.update": {
23933
+ capName: "data-store-provider",
23934
+ capScope: "system",
23935
+ addonId: null,
23936
+ access: "create"
23937
+ },
23786
23938
  "dayNight.getOptions": {
23787
23939
  capName: "day-night",
23788
23940
  capScope: "device",