@camstack/addon-pipeline 1.2.128 → 1.2.130

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 (123) hide show
  1. package/dist/{addon-utils-BnprivSs.js → addon-utils-DH78p79i.js} +1 -1
  2. package/dist/audio-analyzer/index.js +3 -3
  3. package/dist/audio-analyzer/index.mjs +2 -2
  4. package/dist/detection-pipeline/index.js +241 -95
  5. package/dist/detection-pipeline/index.mjs +239 -93
  6. package/dist/{dist-BZUXb5S5.js → dist-DOw-izoI.js} +243 -75
  7. package/dist/{dist-HLAOw6Pe.mjs → dist-Wt81pN5Y.mjs} +243 -75
  8. package/dist/{event-loop-stall-monitor-BdArVUlx.js → event-loop-stall-monitor-Bld7jNCb.js} +1 -1
  9. package/dist/{event-loop-stall-monitor-BH-cL_hg.mjs → event-loop-stall-monitor-CtQCOZqm.mjs} +1 -1
  10. package/dist/{lazy-sharp-DTDXrhMG.js → lazy-sharp-BbNI2ZD-.js} +1 -1
  11. package/dist/motion-wasm/index.js +2 -2
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/pipeline-runner/index.js +4 -4
  14. package/dist/pipeline-runner/index.mjs +3 -3
  15. package/dist/{process-memory-CDPRLalN.mjs → process-memory-1_D3EZT9.mjs} +1 -1
  16. package/dist/{process-memory-Dh1SyzdJ.js → process-memory-D9H5qjDl.js} +1 -1
  17. package/dist/recorder/index.js +467 -29
  18. package/dist/recorder/index.mjs +465 -28
  19. package/dist/{segment-demux-js-D-TLcHW5.mjs → segment-demux-js-BW-Q-j2A.mjs} +1 -1
  20. package/dist/{segment-demux-js-DRutggd6.js → segment-demux-js-C2jBBqGW.js} +1 -1
  21. package/dist/session-decode/decode-worker-child.js +2 -2
  22. package/dist/session-decode/decode-worker-child.mjs +1 -1
  23. package/dist/stream-broker/_stub.js +2 -2
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BDR5z0Z9.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Dw-iwP4y.mjs} +3 -3
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bme2OZQp.mjs +26 -0
  26. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Do2DEtRt.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-D36MoVV1.mjs} +1 -1
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-Dmw5LWmP.mjs → hostInit-DEVCEYgu.mjs} +3 -3
  30. package/dist/stream-broker/index.js +906 -423
  31. package/dist/stream-broker/index.mjs +906 -423
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/dist/{worker-protocol-BxkCoVjw.js → worker-protocol-nAZl_Rsv.js} +1 -1
  34. package/dist/{worker-protocol-h7Smb_0i.mjs → worker-protocol-rpnr7Ldd.mjs} +1 -1
  35. package/package.json +1 -1
  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-312-pytest-9.1.1.pyc +0 -0
  40. package/python/__pycache__/test_inference_pool_backpressure.cpython-312.pyc +0 -0
  41. package/python/__pycache__/test_inference_pool_backpressure.cpython-314.pyc +0 -0
  42. package/python/__pycache__/test_inference_pool_coreml_cache.cpython-312-pytest-9.1.1.pyc +0 -0
  43. package/python/__pycache__/test_inference_pool_coreml_cache.cpython-312.pyc +0 -0
  44. package/python/__pycache__/test_inference_pool_coreml_cache.cpython-314.pyc +0 -0
  45. package/python/__pycache__/test_inference_pool_device_selection.cpython-312-pytest-9.1.1.pyc +0 -0
  46. package/python/__pycache__/test_inference_pool_device_selection.cpython-312.pyc +0 -0
  47. package/python/__pycache__/test_inference_pool_device_selection.cpython-314.pyc +0 -0
  48. package/python/__pycache__/test_inference_pool_layout.cpython-312-pytest-9.1.1.pyc +0 -0
  49. package/python/__pycache__/test_inference_pool_layout.cpython-314.pyc +0 -0
  50. package/python/__pycache__/test_inference_pool_memstats.cpython-312-pytest-9.1.1.pyc +0 -0
  51. package/python/__pycache__/test_inference_pool_memstats.cpython-312.pyc +0 -0
  52. package/python/__pycache__/test_inference_pool_memstats.cpython-314.pyc +0 -0
  53. package/python/__pycache__/test_inference_pool_ov_ppp.cpython-312-pytest-9.1.1.pyc +0 -0
  54. package/python/__pycache__/test_inference_pool_ov_ppp.cpython-312.pyc +0 -0
  55. package/python/__pycache__/test_inference_pool_ov_ppp.cpython-314.pyc +0 -0
  56. package/python/__pycache__/test_inference_pool_preprocess.cpython-312-pytest-9.1.1.pyc +0 -0
  57. package/python/__pycache__/test_inference_pool_preprocess.cpython-314.pyc +0 -0
  58. package/python/__pycache__/test_inference_pool_reconfigure.cpython-314.pyc +0 -0
  59. package/python/__pycache__/test_inference_pool_static_batch.cpython-312-pytest-9.1.1.pyc +0 -0
  60. package/python/__pycache__/test_inference_pool_static_batch.cpython-312.pyc +0 -0
  61. package/python/__pycache__/test_inference_pool_static_batch.cpython-314.pyc +0 -0
  62. package/python/__pycache__/yamnet_audio.cpython-314.pyc +0 -0
  63. package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
  64. package/python/postprocessors/__pycache__/__init__.cpython-313.pyc +0 -0
  65. package/python/postprocessors/__pycache__/__init__.cpython-314.pyc +0 -0
  66. package/python/postprocessors/__pycache__/_safety.cpython-313.pyc +0 -0
  67. package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
  68. package/python/postprocessors/__pycache__/arcface.cpython-313.pyc +0 -0
  69. package/python/postprocessors/__pycache__/arcface.cpython-314.pyc +0 -0
  70. package/python/postprocessors/__pycache__/clip.cpython-312.pyc +0 -0
  71. package/python/postprocessors/__pycache__/clip.cpython-313.pyc +0 -0
  72. package/python/postprocessors/__pycache__/clip.cpython-314.pyc +0 -0
  73. package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
  74. package/python/postprocessors/__pycache__/ctc.cpython-313.pyc +0 -0
  75. package/python/postprocessors/__pycache__/ctc.cpython-314.pyc +0 -0
  76. package/python/postprocessors/__pycache__/plate_slots.cpython-312.pyc +0 -0
  77. package/python/postprocessors/__pycache__/plate_slots.cpython-314.pyc +0 -0
  78. package/python/postprocessors/__pycache__/rfdetr.cpython-312.pyc +0 -0
  79. package/python/postprocessors/__pycache__/rfdetr.cpython-314.pyc +0 -0
  80. package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
  81. package/python/postprocessors/__pycache__/saliency.cpython-313.pyc +0 -0
  82. package/python/postprocessors/__pycache__/saliency.cpython-314.pyc +0 -0
  83. package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
  84. package/python/postprocessors/__pycache__/scrfd.cpython-313.pyc +0 -0
  85. package/python/postprocessors/__pycache__/scrfd.cpython-314.pyc +0 -0
  86. package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
  87. package/python/postprocessors/__pycache__/softmax.cpython-313.pyc +0 -0
  88. package/python/postprocessors/__pycache__/softmax.cpython-314.pyc +0 -0
  89. package/python/postprocessors/__pycache__/ssd.cpython-312.pyc +0 -0
  90. package/python/postprocessors/__pycache__/ssd.cpython-313.pyc +0 -0
  91. package/python/postprocessors/__pycache__/ssd.cpython-314.pyc +0 -0
  92. package/python/postprocessors/__pycache__/test_clip.cpython-312-pytest-9.1.1.pyc +0 -0
  93. package/python/postprocessors/__pycache__/test_clip.cpython-313-pytest-9.1.1.pyc +0 -0
  94. package/python/postprocessors/__pycache__/test_ctc.cpython-312-pytest-9.1.1.pyc +0 -0
  95. package/python/postprocessors/__pycache__/test_ctc.cpython-312.pyc +0 -0
  96. package/python/postprocessors/__pycache__/test_ctc.cpython-313-pytest-9.1.1.pyc +0 -0
  97. package/python/postprocessors/__pycache__/test_ctc.cpython-313.pyc +0 -0
  98. package/python/postprocessors/__pycache__/test_ctc.cpython-314.pyc +0 -0
  99. package/python/postprocessors/__pycache__/test_plate_slots.cpython-312-pytest-9.1.1.pyc +0 -0
  100. package/python/postprocessors/__pycache__/test_rfdetr.cpython-312-pytest-9.1.1.pyc +0 -0
  101. package/python/postprocessors/__pycache__/test_rfdetr.cpython-314.pyc +0 -0
  102. package/python/postprocessors/__pycache__/test_saliency.cpython-312-pytest-9.1.1.pyc +0 -0
  103. package/python/postprocessors/__pycache__/test_saliency.cpython-313-pytest-9.1.1.pyc +0 -0
  104. package/python/postprocessors/__pycache__/test_saliency.cpython-314.pyc +0 -0
  105. package/python/postprocessors/__pycache__/test_softmax.cpython-312-pytest-9.1.1.pyc +0 -0
  106. package/python/postprocessors/__pycache__/test_softmax.cpython-314.pyc +0 -0
  107. package/python/postprocessors/__pycache__/test_yolo_nms.cpython-312-pytest-9.1.1.pyc +0 -0
  108. package/python/postprocessors/__pycache__/test_yolo_nms.cpython-314.pyc +0 -0
  109. package/python/postprocessors/__pycache__/test_yolo_nms.cpython-39.pyc +0 -0
  110. package/python/postprocessors/__pycache__/test_yolonas.cpython-312-pytest-9.1.1.pyc +0 -0
  111. package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
  112. package/python/postprocessors/__pycache__/yamnet.cpython-313.pyc +0 -0
  113. package/python/postprocessors/__pycache__/yamnet.cpython-314.pyc +0 -0
  114. package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
  115. package/python/postprocessors/__pycache__/yolo.cpython-313.pyc +0 -0
  116. package/python/postprocessors/__pycache__/yolo.cpython-314.pyc +0 -0
  117. package/python/postprocessors/__pycache__/yolo.cpython-39.pyc +0 -0
  118. package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
  119. package/python/postprocessors/__pycache__/yolo_seg.cpython-313.pyc +0 -0
  120. package/python/postprocessors/__pycache__/yolo_seg.cpython-314.pyc +0 -0
  121. package/python/postprocessors/__pycache__/yolonas.cpython-312.pyc +0 -0
  122. package/python/postprocessors/__pycache__/yolonas.cpython-314.pyc +0 -0
  123. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Cs8bmrWP.mjs +0 -26
@@ -6792,7 +6792,7 @@ function method(input, output, options) {
6792
6792
  input,
6793
6793
  output,
6794
6794
  kind: options?.kind ?? "query",
6795
- auth: options?.auth ?? "protected",
6795
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6796
6796
  ...options?.access !== void 0 ? { access: options.access } : {},
6797
6797
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6798
6798
  timeoutMs: options?.timeoutMs
@@ -6816,7 +6816,7 @@ function event(data) {
6816
6816
  }
6817
6817
  var StaticDirOutputSchema$1 = object({ staticDir: string() });
6818
6818
  var VersionOutputSchema$1 = object({ version: string() });
6819
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6819
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6820
6820
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6821
6821
  DeviceType["Camera"] = "camera";
6822
6822
  DeviceType["Hub"] = "hub";
@@ -7137,7 +7137,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
7137
7137
  }({});
7138
7138
  var StaticDirOutputSchema = object({ staticDir: string() });
7139
7139
  var VersionOutputSchema = object({ version: string() });
7140
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7140
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
7141
7141
  /**
7142
7142
  * device-ops — device-scoped cap that unifies the per-IDevice operations
7143
7143
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -8622,24 +8622,6 @@ var RecordingRetentionSchema = object({
8622
8622
  maxSizeGb: number().min(0).optional()
8623
8623
  });
8624
8624
  /**
8625
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
8626
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
8627
- * previews at. Five graduated steps; absent on a config = `standard` (the
8628
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
8629
- *
8630
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
8631
- * Each window's index sidecar carries its own tile dims, so a camera whose
8632
- * preset changed over time renders every historical window at the dims it was
8633
- * written with.
8634
- */
8635
- var ScrubThumbnailPresetSchema = _enum([
8636
- "minimal",
8637
- "low",
8638
- "standard",
8639
- "high",
8640
- "max"
8641
- ]);
8642
- /**
8643
8625
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
8644
8626
  *
8645
8627
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -8647,7 +8629,11 @@ var ScrubThumbnailPresetSchema = _enum([
8647
8629
  * other field is a storage knob (profiles, segment length, retention, scrub).
8648
8630
  *
8649
8631
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
8650
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
8632
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
8633
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
8634
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
8635
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
8636
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
8651
8637
  * A stale caller must fail loudly — silently stripping its legacy intent would
8652
8638
  * persist a band-less config, i.e. silently stop recording the camera.
8653
8639
  */
@@ -8670,14 +8656,7 @@ var RecordingConfigSchema = object({
8670
8656
  * "off" is the absence of a covering band, never a band value.
8671
8657
  */
8672
8658
  bands: array(RecordingBandSchema).default([]),
8673
- retention: RecordingRetentionSchema.optional(),
8674
- /**
8675
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
8676
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
8677
- * windows only — existing sheets are immutable, and each window's index
8678
- * carries its own tile dims so mixed-preset history renders correctly.
8679
- */
8680
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
8659
+ retention: RecordingRetentionSchema.optional()
8681
8660
  }).strict();
8682
8661
  /**
8683
8662
  * Derive the {@link RecordingStorageModeSchema} summary from the authoritative
@@ -8793,10 +8772,11 @@ var RelocateFootageInputSchema = object({
8793
8772
  * `RecordingConfig.enabled` or camera wrapper bindings. */
8794
8773
  var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
8795
8774
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
8796
- var StorageMigrationMediaMoveInputSchema = object({
8775
+ var RelocateMediaInputSchema = object({
8797
8776
  toLocationId: string(),
8798
8777
  throttleMbps: number().min(1).max(1e3).optional()
8799
- }).extend({ leaseId: string().min(1) });
8778
+ });
8779
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
8800
8780
  /** The independently selectable logical storage classes. `recordings`
8801
8781
  * encompasses the high and mid segment profiles; `recordingsLow` is low
8802
8782
  * segments; `eventMedia` is post-analysis blobs. */
@@ -9091,7 +9071,26 @@ var LabelDefinitionSchema = object({
9091
9071
  description: string().optional(),
9092
9072
  icon: string().optional()
9093
9073
  });
9094
- var ClassMapDefinitionSchema = object({
9074
+ /**
9075
+ * Wire schema for a per-model CATALOG classMap override
9076
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
9077
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
9078
+ * detection pipeline executor actually routes.
9079
+ *
9080
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
9081
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
9082
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
9083
+ * enum) — the two used to share the name `ClassMapDefinition`/
9084
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
9085
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
9086
+ * are not: it is two different concepts colliding on a name. Keep this type
9087
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
9088
+ * would either narrow every `ClassMapDefinition` consumer to the four
9089
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
9090
+ * schema exists for (see the "rejects a classMap whose target is not a
9091
+ * detection macro" test in `model-catalog-schema.test.ts`).
9092
+ */
9093
+ var DetectionCatalogClassMapSchema = object({
9095
9094
  mapping: record(string(), _enum([
9096
9095
  "person",
9097
9096
  "vehicle",
@@ -9309,7 +9308,7 @@ var ModelCatalogEntrySchema = object({
9309
9308
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
9310
9309
  * labels already ARE the CamStack macros (Scrypted identity map).
9311
9310
  */
9312
- classMap: ClassMapDefinitionSchema.optional()
9311
+ classMap: DetectionCatalogClassMapSchema.optional()
9313
9312
  });
9314
9313
  var ConvertTargetSchema = discriminatedUnion("format", [object({
9315
9314
  format: literal("openvino"),
@@ -9339,7 +9338,7 @@ var ModelConvertMetadataSchema = object({
9339
9338
  "segmentation"
9340
9339
  ]),
9341
9340
  faceAlignment: boolean().optional(),
9342
- classMap: ClassMapDefinitionSchema.optional()
9341
+ classMap: DetectionCatalogClassMapSchema.optional()
9343
9342
  });
9344
9343
  var ConvertResultSchema = object({
9345
9344
  entry: ModelCatalogEntrySchema,
@@ -10202,7 +10201,7 @@ var AddonPageDeclarationSchema = object({
10202
10201
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
10203
10202
  sectionLabel: string().optional()
10204
10203
  });
10205
- method(_void(), array(AddonPageDeclarationSchema).readonly());
10204
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
10206
10205
  var AddonHttpRouteSchema = object({
10207
10206
  method: _enum([
10208
10207
  "GET",
@@ -10442,7 +10441,20 @@ var addonWidgetsSourceCapability = {
10442
10441
  scope: "system",
10443
10442
  mode: "collection",
10444
10443
  internal: true,
10445
- methods: { listWidgets: method(_void(), array(WidgetMetadataSchema).readonly()) }
10444
+ methods: {
10445
+ /**
10446
+ * `internal: true` did not gate the mount (see the 2026-08-26 note on
10447
+ * `data-store-provider`) — this was reachable on the AppRouter by ANY
10448
+ * authenticated session at the default `auth: 'protected'`. The only
10449
+ * consumer, the `addon-widgets-aggregator` builtin, reads it via
10450
+ * `ctx.capabilities.getCollection('addon-widgets-source')` — LOCAL-PROCESS
10451
+ * only, never tRPC. The public, enriched listing admin-ui actually
10452
+ * consumes is the separate `addon-widgets` cap (`listWidgets` there is
10453
+ * gated separately, and a `preAuth: true` widget is surfaced through the
10454
+ * PUBLIC `auth.listLoginMethods` contribution channel instead) —
10455
+ * neither is affected by this change.
10456
+ */
10457
+ listWidgets: method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" }) }
10446
10458
  };
10447
10459
  /**
10448
10460
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
@@ -12378,7 +12390,7 @@ var CustomModelDescriptorSchema = object({
12378
12390
  stepId: string(),
12379
12391
  entry: ModelCatalogEntrySchema
12380
12392
  });
12381
- method(_void(), array(CustomModelDescriptorSchema).readonly());
12393
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
12382
12394
  /**
12383
12395
  * Query filter for settings-store collections.
12384
12396
  */
@@ -12465,7 +12477,8 @@ method(object({
12465
12477
  }), _void(), { kind: "mutation" }), method(object({
12466
12478
  namespace: string().optional(),
12467
12479
  collection: string(),
12468
- filter: QueryFilterSchema.optional()
12480
+ filter: QueryFilterSchema.optional(),
12481
+ columns: array(string()).readonly().optional()
12469
12482
  }), array(SettingsRecordSchema).readonly()), method(object({
12470
12483
  namespace: string().optional(),
12471
12484
  collection: string(),
@@ -12528,46 +12541,87 @@ var EngineInfoSchema = object({
12528
12541
  kind: _enum(["relational", "vector"]),
12529
12542
  displayName: string()
12530
12543
  });
12531
- method(_void(), EngineInfoSchema), method(object({
12544
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
12532
12545
  namespace: string().optional(),
12533
12546
  collection: string(),
12534
12547
  key: string()
12535
- }), unknown()), method(object({
12548
+ }), unknown(), { auth: "admin" }), method(object({
12536
12549
  namespace: string().optional(),
12537
12550
  collection: string(),
12538
12551
  key: string(),
12539
12552
  value: unknown()
12540
- }), _void(), { kind: "mutation" }), method(object({
12553
+ }), _void(), {
12554
+ kind: "mutation",
12555
+ auth: "admin"
12556
+ }), method(object({
12541
12557
  namespace: string().optional(),
12542
12558
  collection: string(),
12543
- filter: QueryFilterSchema.optional()
12544
- }), array(SettingsRecordSchema).readonly()), method(object({
12559
+ filter: QueryFilterSchema.optional(),
12560
+ /**
12561
+ * SQL-level column projection — MUST mirror `settings-store.query`.
12562
+ *
12563
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
12564
+ * was wrong — corrected 2026-08-26 after the hop map
12565
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
12566
+ * There is **no Zod parse at all** between the door and the engine: the
12567
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
12568
+ * field declared here reaches `SqliteSettingsBackend` either way.
12569
+ *
12570
+ * What actually lost `columns` was the THIRD declaration of this shape:
12571
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
12572
+ * interface the engine destructures from. The field existed on both
12573
+ * schemas and the engine still never read it, because nothing checks a
12574
+ * registered provider against `InferProvider<cap>` —
12575
+ * `ProviderRegistration.provider` is typed `object`.
12576
+ *
12577
+ * It is declared here anyway, and must stay in step with
12578
+ * `settings-store.query`: a caller reading only the cap definitions has
12579
+ * to be able to see that this call carries a projection.
12580
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
12581
+ */
12582
+ columns: array(string()).readonly().optional()
12583
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
12545
12584
  namespace: string().optional(),
12546
12585
  collection: string(),
12547
12586
  record: SettingsRecordSchema
12548
- }), _void(), { kind: "mutation" }), method(object({
12587
+ }), _void(), {
12588
+ kind: "mutation",
12589
+ auth: "admin"
12590
+ }), method(object({
12549
12591
  namespace: string().optional(),
12550
12592
  collection: string(),
12551
12593
  id: string(),
12552
12594
  data: record(string(), unknown())
12553
- }), _void(), { kind: "mutation" }), method(object({
12595
+ }), _void(), {
12596
+ kind: "mutation",
12597
+ auth: "admin"
12598
+ }), method(object({
12554
12599
  namespace: string().optional(),
12555
12600
  collection: string(),
12556
12601
  key: string()
12557
- }), _void(), { kind: "mutation" }), method(object({
12602
+ }), _void(), {
12603
+ kind: "mutation",
12604
+ auth: "admin"
12605
+ }), method(object({
12558
12606
  namespace: string().optional(),
12559
12607
  collection: string(),
12560
12608
  filter: MutationFilterSchema
12561
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
12609
+ }), object({ deleted: number().int() }), {
12610
+ kind: "mutation",
12611
+ auth: "admin"
12612
+ }), method(object({
12562
12613
  namespace: string().optional(),
12563
12614
  collection: string(),
12564
12615
  filter: MutationFilterSchema,
12565
12616
  data: record(string(), unknown())
12566
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
12617
+ }), object({ updated: number().int() }), {
12618
+ kind: "mutation",
12619
+ auth: "admin"
12620
+ }), method(object({
12567
12621
  namespace: string().optional(),
12568
12622
  collection: string(),
12569
12623
  filter: QueryFilterSchema.optional()
12570
- }), number()), method(object({
12624
+ }), number(), { auth: "admin" }), method(object({
12571
12625
  namespace: string().optional(),
12572
12626
  collection: string(),
12573
12627
  field: string(),
@@ -12577,15 +12631,18 @@ method(_void(), EngineInfoSchema), method(object({
12577
12631
  }), array(object({
12578
12632
  bucket: number().int(),
12579
12633
  count: number().int()
12580
- })).readonly()), method(object({
12634
+ })).readonly(), { auth: "admin" }), method(object({
12581
12635
  namespace: string().optional(),
12582
12636
  collection: string()
12583
- }), boolean()), method(object({
12637
+ }), boolean(), { auth: "admin" }), method(object({
12584
12638
  namespace: string().optional(),
12585
12639
  collection: string(),
12586
12640
  columns: array(CollectionColumnSchema).readonly(),
12587
12641
  indexes: array(CollectionIndexSchema).readonly().optional()
12588
- }), _void(), { kind: "mutation" });
12642
+ }), _void(), {
12643
+ kind: "mutation",
12644
+ auth: "admin"
12645
+ });
12589
12646
  /**
12590
12647
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
12591
12648
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -13744,7 +13801,7 @@ method(object({
13744
13801
  crop: _instanceof(Uint8Array),
13745
13802
  width: number(),
13746
13803
  height: number()
13747
- }), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
13804
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
13748
13805
  /**
13749
13806
  * filesystem-browse — per-node capability for browsing the node's local
13750
13807
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -14037,19 +14094,22 @@ method(LlmGenerateBaseInputSchema.extend({
14037
14094
  runtime: ManagedRuntimeConfigSchema,
14038
14095
  /** The managed profile's timeout, threaded by the hub provider. */
14039
14096
  timeoutMs: number().int().positive().optional()
14040
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
14097
+ }), LlmGenerateResultSchema, {
14098
+ kind: "mutation",
14099
+ auth: "admin"
14100
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
14041
14101
  kind: "mutation",
14042
14102
  auth: "admin"
14043
14103
  }), method(object({}), _void(), {
14044
14104
  kind: "mutation",
14045
14105
  auth: "admin"
14046
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
14106
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
14047
14107
  kind: "mutation",
14048
14108
  auth: "admin"
14049
14109
  }), method(object({ file: string() }), _void(), {
14050
14110
  kind: "mutation",
14051
14111
  auth: "admin"
14052
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
14112
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
14053
14113
  /**
14054
14114
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
14055
14115
  * methods concat-fan across providers; single-row methods route to ONE
@@ -17865,7 +17925,7 @@ var OauthIntegrationDescriptorSchema = object({
17865
17925
  */
17866
17926
  refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
17867
17927
  });
17868
- method(_void(), OauthIntegrationDescriptorSchema);
17928
+ method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
17869
17929
  /**
17870
17930
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
17871
17931
  * per-frame detections emitted by the pipeline runner into tracked
@@ -19060,6 +19120,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19060
19120
  }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19061
19121
  kind: "mutation",
19062
19122
  auth: "admin"
19123
+ }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
19124
+ kind: "mutation",
19125
+ auth: "admin"
19126
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
19127
+ kind: "query",
19128
+ auth: "admin"
19129
+ }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19130
+ kind: "mutation",
19131
+ auth: "admin"
19063
19132
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
19064
19133
  kind: "query",
19065
19134
  auth: "admin"
@@ -19214,6 +19283,11 @@ object({
19214
19283
  "jpeg"
19215
19284
  ])
19216
19285
  });
19286
+ /**
19287
+ * Process-local frame identity. It is serializable so it can ride an in-process
19288
+ * capability call, but `registryId` deliberately prevents resolution in any
19289
+ * other process or execution group.
19290
+ */
19217
19291
  var FrameRefSchema = object({
19218
19292
  registryId: string().min(1),
19219
19293
  id: string().min(1),
@@ -21673,7 +21747,7 @@ method(object({
21673
21747
  * linking rather than produce an eternal token.
21674
21748
  */
21675
21749
  ttlSec: union([number().int().positive(), literal("never")]).optional()
21676
- }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
21750
+ }), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
21677
21751
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
21678
21752
  providerId: string().min(1),
21679
21753
  displayName: string().min(1),
@@ -21774,8 +21848,15 @@ var storageEvictableCapability = {
21774
21848
  mode: "collection",
21775
21849
  internal: true,
21776
21850
  methods: {
21851
+ /**
21852
+ * `internal: true` did not gate the mount (see the 2026-08-26 note on
21853
+ * `data-store-provider`) — this was reachable on the AppRouter by ANY
21854
+ * authenticated session at the default `auth: 'protected'`. The only
21855
+ * consumer is the orchestrator's `StoragePressureManager`, which calls
21856
+ * `ctx.api` — never tRPC — so `auth: 'admin'` costs it nothing.
21857
+ */
21777
21858
  /** Bytes this provider holds on the given location — drives proportional fan-out. */
21778
- getEvictableUsage: method(object({ locationId: string() }), EvictableUsageSchema),
21859
+ getEvictableUsage: method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }),
21779
21860
  /**
21780
21861
  * Free approximately `targetBytes` of this provider's OWN least-valuable
21781
21862
  * data on the location (oldest footage, expired clips, …). Returns what it
@@ -21784,7 +21865,10 @@ var storageEvictableCapability = {
21784
21865
  evict: method(object({
21785
21866
  locationId: string(),
21786
21867
  targetBytes: number().int().positive()
21787
- }), EvictResultSchema, { kind: "mutation" })
21868
+ }), EvictResultSchema, {
21869
+ kind: "mutation",
21870
+ auth: "admin"
21871
+ })
21788
21872
  }
21789
21873
  };
21790
21874
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
@@ -21846,26 +21930,50 @@ var ReadChunkInputSchema = object({
21846
21930
  length: number()
21847
21931
  });
21848
21932
  var EndDownloadInputSchema = object({ downloadId: string() });
21849
- method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
21933
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
21850
21934
  location: StorageLocationSchema,
21851
21935
  relativePath: string()
21852
- }), string()), method(object({
21936
+ }), string(), { auth: "admin" }), method(object({
21853
21937
  location: StorageLocationSchema,
21854
21938
  relativePath: string(),
21855
21939
  data: _instanceof(Uint8Array)
21856
- }), _void(), { kind: "mutation" }), method(object({
21940
+ }), _void(), {
21941
+ kind: "mutation",
21942
+ auth: "admin"
21943
+ }), method(object({
21857
21944
  location: StorageLocationSchema,
21858
21945
  relativePath: string()
21859
- }), _instanceof(Uint8Array)), method(object({
21946
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
21860
21947
  location: StorageLocationSchema,
21861
21948
  relativePath: string()
21862
- }), boolean()), method(object({
21949
+ }), boolean(), { auth: "admin" }), method(object({
21863
21950
  location: StorageLocationSchema,
21864
21951
  prefix: string().optional()
21865
- }), array(string()).readonly()), method(object({
21952
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
21866
21953
  location: StorageLocationSchema,
21867
21954
  relativePath: string()
21868
- }), _void(), { kind: "mutation" }), method(object({ location: StorageLocationSchema }), number().nullable()), method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: "mutation" }), method(WriteChunkInputSchema, _void(), { kind: "mutation" }), method(FinalizeUploadInputSchema, _void(), { kind: "mutation" }), method(AbortUploadInputSchema, _void(), { kind: "mutation" }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: "mutation" }), method(ReadChunkInputSchema, _instanceof(Uint8Array)), method(EndDownloadInputSchema, _void(), { kind: "mutation" });
21955
+ }), _void(), {
21956
+ kind: "mutation",
21957
+ auth: "admin"
21958
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
21959
+ kind: "mutation",
21960
+ auth: "admin"
21961
+ }), method(WriteChunkInputSchema, _void(), {
21962
+ kind: "mutation",
21963
+ auth: "admin"
21964
+ }), method(FinalizeUploadInputSchema, _void(), {
21965
+ kind: "mutation",
21966
+ auth: "admin"
21967
+ }), method(AbortUploadInputSchema, _void(), {
21968
+ kind: "mutation",
21969
+ auth: "admin"
21970
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
21971
+ kind: "mutation",
21972
+ auth: "admin"
21973
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
21974
+ kind: "mutation",
21975
+ auth: "admin"
21976
+ });
21869
21977
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
21870
21978
  var ProfileSettingsSchemaBridge = unknown().nullable();
21871
21979
  var ProfileSettingsBagSchema = record(string(), unknown());
@@ -22123,7 +22231,8 @@ method(object({
22123
22231
  access: "create"
22124
22232
  }), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
22125
22233
  kind: "mutation",
22126
- access: "view"
22234
+ access: "view",
22235
+ auth: "admin"
22127
22236
  }), method(object({
22128
22237
  /** Required — the user the assertion belongs to (verified). */
22129
22238
  userId: string(),
@@ -22131,10 +22240,12 @@ method(object({
22131
22240
  response: record(string(), unknown())
22132
22241
  }), object({ verified: boolean() }), {
22133
22242
  kind: "mutation",
22134
- access: "view"
22243
+ access: "view",
22244
+ auth: "admin"
22135
22245
  }), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
22136
22246
  kind: "mutation",
22137
- access: "view"
22247
+ access: "view",
22248
+ auth: "admin"
22138
22249
  }), method(object({
22139
22250
  /** AuthenticationResponseJSON from the browser. */
22140
22251
  response: record(string(), unknown()) }), object({
@@ -22142,7 +22253,8 @@ response: record(string(), unknown()) }), object({
22142
22253
  userId: string().nullable()
22143
22254
  }), {
22144
22255
  kind: "mutation",
22145
- access: "view"
22256
+ access: "view",
22257
+ auth: "admin"
22146
22258
  }), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
22147
22259
  userId: string(),
22148
22260
  credentialId: string()
@@ -22314,7 +22426,19 @@ var VectorStatsResultSchema = object({
22314
22426
  /** False when the backend ranks approximately. */
22315
22427
  exact: boolean()
22316
22428
  });
22317
- method(VectorDeclareIndexInputSchema, _void(), { kind: "mutation" }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, { kind: "mutation" }), method(VectorQueryInputSchema, VectorQueryResultSchema), method(VectorGetInputSchema, VectorGetResultSchema), method(VectorDeleteInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorStatsInputSchema, VectorStatsResultSchema);
22429
+ method(VectorDeclareIndexInputSchema, _void(), {
22430
+ kind: "mutation",
22431
+ auth: "admin"
22432
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
22433
+ kind: "mutation",
22434
+ auth: "admin"
22435
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
22436
+ kind: "mutation",
22437
+ auth: "admin"
22438
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
22439
+ kind: "mutation",
22440
+ auth: "admin"
22441
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
22318
22442
  var ClipSchema = object({
22319
22443
  /** Opaque, provider-namespaced id. The default provider encodes the time
22320
22444
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -24184,7 +24308,27 @@ var MediaFileLiteSchema$1 = object({
24184
24308
  sizeBytes: number(),
24185
24309
  timestamp: number()
24186
24310
  });
24187
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
24311
+ method(object({
24312
+ /**
24313
+ * Inline {@link IdentitySchema.coverBase64} on every row.
24314
+ *
24315
+ * Default `false`, the same inversion `listRecentFaces` and
24316
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
24317
+ * why the burden belongs on the caller that WANTS the bytes). Measured
24318
+ * on the live hub the same day: four identities cost 40,979 B with the
24319
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
24320
+ * four times and the viewer holds at `staleTime: 30_000`.
24321
+ *
24322
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
24323
+ * the `event-media` plane serves that key `immutable` with an ETag.
24324
+ *
24325
+ * **This is an INPUT field, so it does not reach the addon until the
24326
+ * next train** — the hub router validates cap inputs against its own
24327
+ * compiled Zod and strips a key it does not know. Until then the
24328
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
24329
+ * is what ships, and the opt-in becomes reachable when the train lands.
24330
+ */
24331
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
24188
24332
  kind: "mutation",
24189
24333
  auth: "admin"
24190
24334
  }), method(object({
@@ -26395,7 +26539,13 @@ method(object({
26395
26539
  }), method(object({ plateId: string() }), _void(), {
26396
26540
  kind: "mutation",
26397
26541
  auth: "admin"
26398
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26542
+ }), method(object({
26543
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
26544
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
26545
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
26546
+ * INPUT field: stripped by the hub router until the train ships, which
26547
+ * resolves to `false` and is exactly the intended default. */
26548
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26399
26549
  kind: "mutation",
26400
26550
  auth: "admin"
26401
26551
  }), method(object({
@@ -31944,6 +32094,12 @@ Object.freeze({
31944
32094
  addonId: null,
31945
32095
  access: "create"
31946
32096
  },
32097
+ "pipelineAnalytics.cancelRelocateMedia": {
32098
+ capName: "pipeline-analytics",
32099
+ capScope: "device",
32100
+ addonId: null,
32101
+ access: "create"
32102
+ },
31947
32103
  "pipelineAnalytics.cancelStorageMigrationMove": {
31948
32104
  capName: "pipeline-analytics",
31949
32105
  capScope: "device",
@@ -32118,6 +32274,12 @@ Object.freeze({
32118
32274
  addonId: null,
32119
32275
  access: "view"
32120
32276
  },
32277
+ "pipelineAnalytics.listRelocateMediaJobs": {
32278
+ capName: "pipeline-analytics",
32279
+ capScope: "device",
32280
+ addonId: null,
32281
+ access: "view"
32282
+ },
32121
32283
  "pipelineAnalytics.listRetrainAnnotations": {
32122
32284
  capName: "pipeline-analytics",
32123
32285
  capScope: "device",
@@ -32196,6 +32358,12 @@ Object.freeze({
32196
32358
  addonId: null,
32197
32359
  access: "create"
32198
32360
  },
32361
+ "pipelineAnalytics.relocateMedia": {
32362
+ capName: "pipeline-analytics",
32363
+ capScope: "device",
32364
+ addonId: null,
32365
+ access: "create"
32366
+ },
32199
32367
  "pipelineAnalytics.restageRetrainTrack": {
32200
32368
  capName: "pipeline-analytics",
32201
32369
  capScope: "device",