@camstack/types 1.2.105 → 1.2.107

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 (46) hide show
  1. package/dist/capabilities/addons.cap.d.ts +4 -4
  2. package/dist/capabilities/battery.cap.d.ts +4 -4
  3. package/dist/capabilities/control.cap.d.ts +4 -4
  4. package/dist/capabilities/core-blocks.cap.d.ts +8 -8
  5. package/dist/capabilities/custom-model-registry.cap.d.ts +4 -4
  6. package/dist/capabilities/data-store-provider.cap.d.ts +18 -0
  7. package/dist/capabilities/device-manager.cap.d.ts +1 -1
  8. package/dist/capabilities/face-gallery.cap.d.ts +3 -1
  9. package/dist/capabilities/llm-runtime.cap.d.ts +3 -3
  10. package/dist/capabilities/llm.cap.d.ts +4 -4
  11. package/dist/capabilities/model-convert.cap.d.ts +6 -6
  12. package/dist/capabilities/model-distributor.cap.d.ts +4 -4
  13. package/dist/capabilities/native-object-detection.cap.d.ts +15 -15
  14. package/dist/capabilities/notification-output.cap.d.ts +18 -18
  15. package/dist/capabilities/notification-rules.cap.d.ts +26 -26
  16. package/dist/capabilities/oauth-integration.cap.d.ts +2 -2
  17. package/dist/capabilities/osd-manager.cap.d.ts +14 -14
  18. package/dist/capabilities/pipeline-analytics.cap.d.ts +53 -53
  19. package/dist/capabilities/pipeline-executor.cap.d.ts +7 -7
  20. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +19 -19
  21. package/dist/capabilities/plate-gallery.cap.d.ts +3 -1
  22. package/dist/capabilities/platform-probe.cap.d.ts +2 -2
  23. package/dist/capabilities/recording-export.cap.d.ts +7 -7
  24. package/dist/capabilities/recording.cap.d.ts +9 -30
  25. package/dist/capabilities/scene-monitor.cap.d.ts +8 -8
  26. package/dist/capabilities/settings-store.cap.d.ts +17 -2
  27. package/dist/capabilities/sso-bridge.cap.d.ts +3 -3
  28. package/dist/capabilities/storage-migration.cap.d.ts +1 -1
  29. package/dist/capabilities/stream-broker.cap.d.ts +6 -6
  30. package/dist/capabilities/user-management.cap.d.ts +20 -20
  31. package/dist/capabilities/vacuum-control.cap.d.ts +13 -13
  32. package/dist/encode-profile.d.ts +2 -2
  33. package/dist/generated/addon-api.d.ts +2 -6
  34. package/dist/health/wiring-health.d.ts +8 -8
  35. package/dist/index.js +126 -110
  36. package/dist/index.mjs +127 -105
  37. package/dist/interfaces/addon.d.ts +29 -7
  38. package/dist/interfaces/adoption-job.d.ts +2 -2
  39. package/dist/interfaces/ops-log.d.ts +2 -2
  40. package/dist/interfaces/recording-config.d.ts +7 -57
  41. package/dist/interfaces/relocate.d.ts +4 -4
  42. package/dist/interfaces/storage.d.ts +23 -0
  43. package/dist/lifecycle/job.d.ts +4 -4
  44. package/dist/schemas/auth-records.d.ts +4 -4
  45. package/dist/types/models.d.ts +7 -7
  46. package/package.json +1 -1
@@ -46,9 +46,9 @@ export type VacuumState = z.infer<typeof VacuumStateSchema>;
46
46
  export declare const TankStatusSchema: z.ZodObject<{
47
47
  level: z.ZodNullable<z.ZodNumber>;
48
48
  status: z.ZodNullable<z.ZodEnum<{
49
+ full: "full";
49
50
  ok: "ok";
50
51
  low: "low";
51
- full: "full";
52
52
  }>>;
53
53
  }, z.core.$strip>;
54
54
  export type TankStatus = z.infer<typeof TankStatusSchema>;
@@ -68,33 +68,33 @@ export declare const VacuumControlStatusSchema: z.ZodObject<{
68
68
  cleanWater: z.ZodNullable<z.ZodObject<{
69
69
  level: z.ZodNullable<z.ZodNumber>;
70
70
  status: z.ZodNullable<z.ZodEnum<{
71
+ full: "full";
71
72
  ok: "ok";
72
73
  low: "low";
73
- full: "full";
74
74
  }>>;
75
75
  }, z.core.$strip>>;
76
76
  dirtyWater: z.ZodNullable<z.ZodObject<{
77
77
  level: z.ZodNullable<z.ZodNumber>;
78
78
  status: z.ZodNullable<z.ZodEnum<{
79
+ full: "full";
79
80
  ok: "ok";
80
81
  low: "low";
81
- full: "full";
82
82
  }>>;
83
83
  }, z.core.$strip>>;
84
84
  detergent: z.ZodNullable<z.ZodObject<{
85
85
  level: z.ZodNullable<z.ZodNumber>;
86
86
  status: z.ZodNullable<z.ZodEnum<{
87
+ full: "full";
87
88
  ok: "ok";
88
89
  low: "low";
89
- full: "full";
90
90
  }>>;
91
91
  }, z.core.$strip>>;
92
92
  dustBin: z.ZodNullable<z.ZodObject<{
93
93
  level: z.ZodNullable<z.ZodNumber>;
94
94
  status: z.ZodNullable<z.ZodEnum<{
95
+ full: "full";
95
96
  ok: "ok";
96
97
  low: "low";
97
- full: "full";
98
98
  }>>;
99
99
  }, z.core.$strip>>;
100
100
  progressPercent: z.ZodNullable<z.ZodNumber>;
@@ -147,33 +147,33 @@ export declare const vacuumControlCapability: {
147
147
  cleanWater: z.ZodNullable<z.ZodObject<{
148
148
  level: z.ZodNullable<z.ZodNumber>;
149
149
  status: z.ZodNullable<z.ZodEnum<{
150
+ full: "full";
150
151
  ok: "ok";
151
152
  low: "low";
152
- full: "full";
153
153
  }>>;
154
154
  }, z.core.$strip>>;
155
155
  dirtyWater: z.ZodNullable<z.ZodObject<{
156
156
  level: z.ZodNullable<z.ZodNumber>;
157
157
  status: z.ZodNullable<z.ZodEnum<{
158
+ full: "full";
158
159
  ok: "ok";
159
160
  low: "low";
160
- full: "full";
161
161
  }>>;
162
162
  }, z.core.$strip>>;
163
163
  detergent: z.ZodNullable<z.ZodObject<{
164
164
  level: z.ZodNullable<z.ZodNumber>;
165
165
  status: z.ZodNullable<z.ZodEnum<{
166
+ full: "full";
166
167
  ok: "ok";
167
168
  low: "low";
168
- full: "full";
169
169
  }>>;
170
170
  }, z.core.$strip>>;
171
171
  dustBin: z.ZodNullable<z.ZodObject<{
172
172
  level: z.ZodNullable<z.ZodNumber>;
173
173
  status: z.ZodNullable<z.ZodEnum<{
174
+ full: "full";
174
175
  ok: "ok";
175
176
  low: "low";
176
- full: "full";
177
177
  }>>;
178
178
  }, z.core.$strip>>;
179
179
  progressPercent: z.ZodNullable<z.ZodNumber>;
@@ -203,33 +203,33 @@ export declare const vacuumControlCapability: {
203
203
  cleanWater: z.ZodNullable<z.ZodObject<{
204
204
  level: z.ZodNullable<z.ZodNumber>;
205
205
  status: z.ZodNullable<z.ZodEnum<{
206
+ full: "full";
206
207
  ok: "ok";
207
208
  low: "low";
208
- full: "full";
209
209
  }>>;
210
210
  }, z.core.$strip>>;
211
211
  dirtyWater: z.ZodNullable<z.ZodObject<{
212
212
  level: z.ZodNullable<z.ZodNumber>;
213
213
  status: z.ZodNullable<z.ZodEnum<{
214
+ full: "full";
214
215
  ok: "ok";
215
216
  low: "low";
216
- full: "full";
217
217
  }>>;
218
218
  }, z.core.$strip>>;
219
219
  detergent: z.ZodNullable<z.ZodObject<{
220
220
  level: z.ZodNullable<z.ZodNumber>;
221
221
  status: z.ZodNullable<z.ZodEnum<{
222
+ full: "full";
222
223
  ok: "ok";
223
224
  low: "low";
224
- full: "full";
225
225
  }>>;
226
226
  }, z.core.$strip>>;
227
227
  dustBin: z.ZodNullable<z.ZodObject<{
228
228
  level: z.ZodNullable<z.ZodNumber>;
229
229
  status: z.ZodNullable<z.ZodEnum<{
230
+ full: "full";
230
231
  ok: "ok";
231
232
  low: "low";
232
- full: "full";
233
233
  }>>;
234
234
  }, z.core.$strip>>;
235
235
  progressPercent: z.ZodNullable<z.ZodNumber>;
@@ -30,11 +30,11 @@ export declare const VideoEncodeSchema: z.ZodObject<{
30
30
  gopFrames: z.ZodOptional<z.ZodNumber>;
31
31
  bf: z.ZodOptional<z.ZodNumber>;
32
32
  preset: z.ZodOptional<z.ZodEnum<{
33
+ fast: "fast";
33
34
  ultrafast: "ultrafast";
34
35
  superfast: "superfast";
35
36
  veryfast: "veryfast";
36
37
  faster: "faster";
37
- fast: "fast";
38
38
  medium: "medium";
39
39
  }>>;
40
40
  tune: z.ZodOptional<z.ZodEnum<{
@@ -77,11 +77,11 @@ export declare const EncodeProfileSchema: z.ZodObject<{
77
77
  gopFrames: z.ZodOptional<z.ZodNumber>;
78
78
  bf: z.ZodOptional<z.ZodNumber>;
79
79
  preset: z.ZodOptional<z.ZodEnum<{
80
+ fast: "fast";
80
81
  ultrafast: "ultrafast";
81
82
  superfast: "superfast";
82
83
  veryfast: "veryfast";
83
84
  faster: "faster";
84
- fast: "fast";
85
85
  medium: "medium";
86
86
  }>>;
87
87
  tune: z.ZodOptional<z.ZodEnum<{
@@ -2876,9 +2876,7 @@ export type AppRouter = TrpcCoreRouter<{
2876
2876
  transformer: true;
2877
2877
  }, TRPCDecorateCreateRouterOptions<{
2878
2878
  listIdentities: TRPCQueryProcedure<{
2879
- input: {
2880
- nodeId?: string | undefined;
2881
- } | undefined;
2879
+ input: z.input<typeof faceGalleryCapability.methods.listIdentities.input>;
2882
2880
  output: z.infer<typeof faceGalleryCapability.methods.listIdentities.output>;
2883
2881
  meta: object;
2884
2882
  }>;
@@ -5919,9 +5917,7 @@ export type AppRouter = TrpcCoreRouter<{
5919
5917
  meta: object;
5920
5918
  }>;
5921
5919
  listVehicles: TRPCQueryProcedure<{
5922
- input: {
5923
- nodeId?: string | undefined;
5924
- } | undefined;
5920
+ input: z.input<typeof plateGalleryCapability.methods.listVehicles.input>;
5925
5921
  output: z.infer<typeof plateGalleryCapability.methods.listVehicles.output>;
5926
5922
  meta: object;
5927
5923
  }>;
@@ -11,18 +11,18 @@
11
11
  import { z } from 'zod';
12
12
  /** What kind of target a probe addressed. */
13
13
  export declare const wiringProbeKindSchema: z.ZodEnum<{
14
- widget: "widget";
15
14
  device: "device";
16
15
  singleton: "singleton";
16
+ widget: "widget";
17
17
  }>;
18
18
  export type WiringProbeKind = z.infer<typeof wiringProbeKindSchema>;
19
19
  /** Result of probing a single (cap|widget [, device]) target. */
20
20
  export declare const wiringProbeResultSchema: z.ZodObject<{
21
21
  capName: z.ZodString;
22
22
  kind: z.ZodEnum<{
23
- widget: "widget";
24
23
  device: "device";
25
24
  singleton: "singleton";
25
+ widget: "widget";
26
26
  }>;
27
27
  deviceId: z.ZodOptional<z.ZodNumber>;
28
28
  reachable: z.ZodBoolean;
@@ -36,9 +36,9 @@ export declare const wiringAddonHealthSchema: z.ZodObject<{
36
36
  caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
37
37
  capName: z.ZodString;
38
38
  kind: z.ZodEnum<{
39
- widget: "widget";
40
39
  device: "device";
41
40
  singleton: "singleton";
41
+ widget: "widget";
42
42
  }>;
43
43
  deviceId: z.ZodOptional<z.ZodNumber>;
44
44
  reachable: z.ZodBoolean;
@@ -48,9 +48,9 @@ export declare const wiringAddonHealthSchema: z.ZodObject<{
48
48
  widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
49
49
  capName: z.ZodString;
50
50
  kind: z.ZodEnum<{
51
- widget: "widget";
52
51
  device: "device";
53
52
  singleton: "singleton";
53
+ widget: "widget";
54
54
  }>;
55
55
  deviceId: z.ZodOptional<z.ZodNumber>;
56
56
  reachable: z.ZodBoolean;
@@ -67,9 +67,9 @@ export declare const wiringNodeHealthSchema: z.ZodObject<{
67
67
  caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
68
68
  capName: z.ZodString;
69
69
  kind: z.ZodEnum<{
70
- widget: "widget";
71
70
  device: "device";
72
71
  singleton: "singleton";
72
+ widget: "widget";
73
73
  }>;
74
74
  deviceId: z.ZodOptional<z.ZodNumber>;
75
75
  reachable: z.ZodBoolean;
@@ -79,9 +79,9 @@ export declare const wiringNodeHealthSchema: z.ZodObject<{
79
79
  widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
80
80
  capName: z.ZodString;
81
81
  kind: z.ZodEnum<{
82
- widget: "widget";
83
82
  device: "device";
84
83
  singleton: "singleton";
84
+ widget: "widget";
85
85
  }>;
86
86
  deviceId: z.ZodOptional<z.ZodNumber>;
87
87
  reachable: z.ZodBoolean;
@@ -103,9 +103,9 @@ export declare const wiringHealthSnapshotSchema: z.ZodObject<{
103
103
  caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
104
104
  capName: z.ZodString;
105
105
  kind: z.ZodEnum<{
106
- widget: "widget";
107
106
  device: "device";
108
107
  singleton: "singleton";
108
+ widget: "widget";
109
109
  }>;
110
110
  deviceId: z.ZodOptional<z.ZodNumber>;
111
111
  reachable: z.ZodBoolean;
@@ -115,9 +115,9 @@ export declare const wiringHealthSnapshotSchema: z.ZodObject<{
115
115
  widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
116
116
  capName: z.ZodString;
117
117
  kind: z.ZodEnum<{
118
- widget: "widget";
119
118
  device: "device";
120
119
  singleton: "singleton";
120
+ widget: "widget";
121
121
  }>;
122
122
  deviceId: z.ZodOptional<z.ZodNumber>;
123
123
  reachable: z.ZodBoolean;
package/dist/index.js CHANGED
@@ -1578,83 +1578,6 @@ var RecordingRetentionSchema = zod.z.object({
1578
1578
  maxSizeGb: zod.z.number().min(0).optional()
1579
1579
  });
1580
1580
  /**
1581
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
1582
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
1583
- * previews at. Five graduated steps; absent on a config = `standard` (the
1584
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
1585
- *
1586
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
1587
- * Each window's index sidecar carries its own tile dims, so a camera whose
1588
- * preset changed over time renders every historical window at the dims it was
1589
- * written with.
1590
- */
1591
- var ScrubThumbnailPresetSchema = zod.z.enum([
1592
- "minimal",
1593
- "low",
1594
- "standard",
1595
- "high",
1596
- "max"
1597
- ]);
1598
- /** The default preset when a config omits `scrubThumbnails`. */
1599
- var DEFAULT_SCRUB_THUMBNAIL_PRESET = "standard";
1600
- /**
1601
- * Preset → tile geometry + JPEG quality. Every step is 16:9; the graduated
1602
- * ladder trades sheet size (and remote fetch cost) for scrub crispness.
1603
- * `standard` matches the shipped `sheet-geometry`/`sheet-composer` defaults
1604
- * (480×270 q72), so an unset config is byte-identical to today. The map is
1605
- * strictly monotone in resolution AND quality across the ordered steps.
1606
- */
1607
- var SCRUB_THUMBNAIL_PRESETS = {
1608
- minimal: {
1609
- tileWidth: 240,
1610
- tileHeight: 135,
1611
- quality: 55
1612
- },
1613
- low: {
1614
- tileWidth: 320,
1615
- tileHeight: 180,
1616
- quality: 60
1617
- },
1618
- standard: {
1619
- tileWidth: 480,
1620
- tileHeight: 270,
1621
- quality: 72
1622
- },
1623
- high: {
1624
- tileWidth: 640,
1625
- tileHeight: 360,
1626
- quality: 80
1627
- },
1628
- max: {
1629
- tileWidth: 960,
1630
- tileHeight: 540,
1631
- quality: 85
1632
- }
1633
- };
1634
- /** Human labels for each preset (resolution-tagged), for settings UIs. */
1635
- var SCRUB_THUMBNAIL_PRESET_LABELS = {
1636
- minimal: "Minimal (240p)",
1637
- low: "Low (320p)",
1638
- standard: "Standard (480p)",
1639
- high: "High (640p)",
1640
- max: "Max (960p)"
1641
- };
1642
- /** Ordered low→high so a UI can render the ladder in graduated order. */
1643
- var SCRUB_THUMBNAIL_PRESET_ORDER = [
1644
- "minimal",
1645
- "low",
1646
- "standard",
1647
- "high",
1648
- "max"
1649
- ];
1650
- /**
1651
- * Resolve the geometry for a recording config's scrub-thumbnail preset,
1652
- * defaulting to `standard` when unset. Pure — no I/O.
1653
- */
1654
- function resolveScrubThumbnailGeometry(preset) {
1655
- return SCRUB_THUMBNAIL_PRESETS[preset ?? "standard"];
1656
- }
1657
- /**
1658
1581
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
1659
1582
  *
1660
1583
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -1662,7 +1585,11 @@ function resolveScrubThumbnailGeometry(preset) {
1662
1585
  * other field is a storage knob (profiles, segment length, retention, scrub).
1663
1586
  *
1664
1587
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
1665
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
1588
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
1589
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
1590
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
1591
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
1592
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
1666
1593
  * A stale caller must fail loudly — silently stripping its legacy intent would
1667
1594
  * persist a band-less config, i.e. silently stop recording the camera.
1668
1595
  */
@@ -1685,14 +1612,7 @@ var RecordingConfigSchema = zod.z.object({
1685
1612
  * "off" is the absence of a covering band, never a band value.
1686
1613
  */
1687
1614
  bands: zod.z.array(RecordingBandSchema).default([]),
1688
- retention: RecordingRetentionSchema.optional(),
1689
- /**
1690
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
1691
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
1692
- * windows only — existing sheets are immutable, and each window's index
1693
- * carries its own tile dims so mixed-preset history renders correctly.
1694
- */
1695
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
1615
+ retention: RecordingRetentionSchema.optional()
1696
1616
  }).strict();
1697
1617
  /**
1698
1618
  * Derive the {@link RecordingStorageModeSchema} summary from the authoritative
@@ -7307,11 +7227,26 @@ var settingsStoreCapability = {
7307
7227
  key: zod.z.string(),
7308
7228
  value: zod.z.unknown()
7309
7229
  }), zod.z.void(), { kind: "mutation" }),
7310
- /** Get all entries matching an optional filter. */
7230
+ /**
7231
+ * Rows matching a filter.
7232
+ *
7233
+ * `columns` is a SQL-level projection: the engine SELECTs only those
7234
+ * columns (plus the primary key) instead of the whole row. It is the only
7235
+ * way to stop paying disk for a column that is discarded — a heavy JSON
7236
+ * column dominates the row, and dropping it in JS after the read pays every
7237
+ * byte first. Measured on the live `pipeline-analytics:tracks` table: a
7238
+ * 501-row page is 4.6 MB whole and 0.11 MB projected, same index, same
7239
+ * plan.
7240
+ *
7241
+ * The engine REFUSES a column it cannot serve rather than omitting it —
7242
+ * see `SettingsQueryInput.columns` for why a projection may not be
7243
+ * forgiving the way a predicate is.
7244
+ */
7311
7245
  query: require_sleep.method(zod.z.object({
7312
7246
  namespace: zod.z.string().optional(),
7313
7247
  collection: zod.z.string(),
7314
- filter: QueryFilterSchema.optional()
7248
+ filter: QueryFilterSchema.optional(),
7249
+ columns: zod.z.array(zod.z.string()).readonly().optional()
7315
7250
  }), zod.z.array(SettingsRecordSchema).readonly()),
7316
7251
  /** Insert a new record. */
7317
7252
  insert: require_sleep.method(zod.z.object({
@@ -7439,6 +7374,23 @@ var EngineInfoSchema = zod.z.object({
7439
7374
  * go through `settings-store`; they never see this cap, and an engine
7440
7375
  * never sees a caller.
7441
7376
  *
7377
+ * ⚠ **`internal: true` DOES NOT gate the mount, and until 2026-08-26 this
7378
+ * comment claimed otherwise.** `resolveCapMount` never reads the field, so this
7379
+ * cap was live on the AppRouter with every method at the default
7380
+ * `auth: 'protected'` — i.e. readable by ANY authenticated session, admin or
7381
+ * not. Verified against the live hub: `dataStoreProvider.query` returned raw
7382
+ * settings rows including a provider credential, bypassing the secret redaction
7383
+ * that `deviceManager.listAll` and friends go through.
7384
+ *
7385
+ * Every method is now `auth: 'admin'` EXPLICITLY, including the five reads —
7386
+ * they had no options object at all, which is exactly how they kept the
7387
+ * permissive default while the mutations looked deliberate. The explicit
7388
+ * annotation is the fix that works today; making `internal` mean something at
7389
+ * mount time is the systemic one, and it is not free: 22 caps declare it, only
7390
+ * 4 are `mount: 'skip'`, and forcing admin on all of them would change the auth
7391
+ * of surfaces the viewer and admin-ui call as non-admin users. That decision is
7392
+ * the operator's, not a side effect of this file.
7393
+ *
7442
7394
  * Design notes:
7443
7395
  * - **Stateless dispatch.** Every method carries its own
7444
7396
  * `namespace` + `collection`, so an engine keeps no per-caller state
@@ -7460,64 +7412,105 @@ var dataStoreProviderCapability = {
7460
7412
  internal: true,
7461
7413
  methods: {
7462
7414
  /** Self-description — how the orchestrator picks a registrant. */
7463
- getEngineInfo: require_sleep.method(zod.z.void(), EngineInfoSchema),
7415
+ getEngineInfo: require_sleep.method(zod.z.void(), EngineInfoSchema, { auth: "admin" }),
7464
7416
  /** Get a single value by key from a collection. */
7465
7417
  get: require_sleep.method(zod.z.object({
7466
7418
  namespace: zod.z.string().optional(),
7467
7419
  collection: zod.z.string(),
7468
7420
  key: zod.z.string()
7469
- }), zod.z.unknown()),
7421
+ }), zod.z.unknown(), { auth: "admin" }),
7470
7422
  /** Set a value by key in a collection (upsert). */
7471
7423
  set: require_sleep.method(zod.z.object({
7472
7424
  namespace: zod.z.string().optional(),
7473
7425
  collection: zod.z.string(),
7474
7426
  key: zod.z.string(),
7475
7427
  value: zod.z.unknown()
7476
- }), zod.z.void(), { kind: "mutation" }),
7428
+ }), zod.z.void(), {
7429
+ kind: "mutation",
7430
+ auth: "admin"
7431
+ }),
7477
7432
  /** Get all entries matching an optional filter. */
7478
7433
  query: require_sleep.method(zod.z.object({
7479
7434
  namespace: zod.z.string().optional(),
7480
7435
  collection: zod.z.string(),
7481
- filter: QueryFilterSchema.optional()
7482
- }), zod.z.array(SettingsRecordSchema).readonly()),
7436
+ filter: QueryFilterSchema.optional(),
7437
+ /**
7438
+ * SQL-level column projection — MUST mirror `settings-store.query`.
7439
+ *
7440
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
7441
+ * was wrong — corrected 2026-08-26 after the hop map
7442
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
7443
+ * There is **no Zod parse at all** between the door and the engine: the
7444
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
7445
+ * field declared here reaches `SqliteSettingsBackend` either way.
7446
+ *
7447
+ * What actually lost `columns` was the THIRD declaration of this shape:
7448
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
7449
+ * interface the engine destructures from. The field existed on both
7450
+ * schemas and the engine still never read it, because nothing checks a
7451
+ * registered provider against `InferProvider<cap>` —
7452
+ * `ProviderRegistration.provider` is typed `object`.
7453
+ *
7454
+ * It is declared here anyway, and must stay in step with
7455
+ * `settings-store.query`: a caller reading only the cap definitions has
7456
+ * to be able to see that this call carries a projection.
7457
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
7458
+ */
7459
+ columns: zod.z.array(zod.z.string()).readonly().optional()
7460
+ }), zod.z.array(SettingsRecordSchema).readonly(), { auth: "admin" }),
7483
7461
  /** Insert a new record. */
7484
7462
  insert: require_sleep.method(zod.z.object({
7485
7463
  namespace: zod.z.string().optional(),
7486
7464
  collection: zod.z.string(),
7487
7465
  record: SettingsRecordSchema
7488
- }), zod.z.void(), { kind: "mutation" }),
7466
+ }), zod.z.void(), {
7467
+ kind: "mutation",
7468
+ auth: "admin"
7469
+ }),
7489
7470
  /** Update an existing record by ID. */
7490
7471
  update: require_sleep.method(zod.z.object({
7491
7472
  namespace: zod.z.string().optional(),
7492
7473
  collection: zod.z.string(),
7493
7474
  id: zod.z.string(),
7494
7475
  data: zod.z.record(zod.z.string(), zod.z.unknown())
7495
- }), zod.z.void(), { kind: "mutation" }),
7476
+ }), zod.z.void(), {
7477
+ kind: "mutation",
7478
+ auth: "admin"
7479
+ }),
7496
7480
  /** Delete a record by key/ID. */
7497
7481
  delete: require_sleep.method(zod.z.object({
7498
7482
  namespace: zod.z.string().optional(),
7499
7483
  collection: zod.z.string(),
7500
7484
  key: zod.z.string()
7501
- }), zod.z.void(), { kind: "mutation" }),
7485
+ }), zod.z.void(), {
7486
+ kind: "mutation",
7487
+ auth: "admin"
7488
+ }),
7502
7489
  /** Delete every record matching `filter`, in one statement. */
7503
7490
  deleteWhere: require_sleep.method(zod.z.object({
7504
7491
  namespace: zod.z.string().optional(),
7505
7492
  collection: zod.z.string(),
7506
7493
  filter: MutationFilterSchema
7507
- }), zod.z.object({ deleted: zod.z.number().int() }), { kind: "mutation" }),
7494
+ }), zod.z.object({ deleted: zod.z.number().int() }), {
7495
+ kind: "mutation",
7496
+ auth: "admin"
7497
+ }),
7508
7498
  /** Apply `data` to every record matching `filter`, in one statement. */
7509
7499
  updateWhere: require_sleep.method(zod.z.object({
7510
7500
  namespace: zod.z.string().optional(),
7511
7501
  collection: zod.z.string(),
7512
7502
  filter: MutationFilterSchema,
7513
7503
  data: zod.z.record(zod.z.string(), zod.z.unknown())
7514
- }), zod.z.object({ updated: zod.z.number().int() }), { kind: "mutation" }),
7504
+ }), zod.z.object({ updated: zod.z.number().int() }), {
7505
+ kind: "mutation",
7506
+ auth: "admin"
7507
+ }),
7515
7508
  /** Count entries in a collection, optionally filtered. */
7516
7509
  count: require_sleep.method(zod.z.object({
7517
7510
  namespace: zod.z.string().optional(),
7518
7511
  collection: zod.z.string(),
7519
7512
  filter: QueryFilterSchema.optional()
7520
- }), zod.z.number()),
7513
+ }), zod.z.number(), { auth: "admin" }),
7521
7514
  /** Grouped counts per ((field-origin)/bucketSize) bucket, filtered. */
7522
7515
  histogram: require_sleep.method(zod.z.object({
7523
7516
  namespace: zod.z.string().optional(),
@@ -7529,19 +7522,22 @@ var dataStoreProviderCapability = {
7529
7522
  }), zod.z.array(zod.z.object({
7530
7523
  bucket: zod.z.number().int(),
7531
7524
  count: zod.z.number().int()
7532
- })).readonly()),
7525
+ })).readonly(), { auth: "admin" }),
7533
7526
  /** Check if a collection is empty. */
7534
7527
  isEmpty: require_sleep.method(zod.z.object({
7535
7528
  namespace: zod.z.string().optional(),
7536
7529
  collection: zod.z.string()
7537
- }), zod.z.boolean()),
7530
+ }), zod.z.boolean(), { auth: "admin" }),
7538
7531
  /** Declare a typed (SQL-backed) collection with columns + indexes. */
7539
7532
  declareCollection: require_sleep.method(zod.z.object({
7540
7533
  namespace: zod.z.string().optional(),
7541
7534
  collection: zod.z.string(),
7542
7535
  columns: zod.z.array(CollectionColumnSchema).readonly(),
7543
7536
  indexes: zod.z.array(CollectionIndexSchema).readonly().optional()
7544
- }), zod.z.void(), { kind: "mutation" })
7537
+ }), zod.z.void(), {
7538
+ kind: "mutation",
7539
+ auth: "admin"
7540
+ })
7545
7541
  }
7546
7542
  };
7547
7543
  //#endregion
@@ -23600,7 +23596,27 @@ var faceGalleryCapability = {
23600
23596
  scope: "system",
23601
23597
  mode: "singleton",
23602
23598
  methods: {
23603
- listIdentities: require_sleep.method(zod.z.void(), zod.z.array(IdentitySchema).readonly()),
23599
+ listIdentities: require_sleep.method(zod.z.object({
23600
+ /**
23601
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23602
+ *
23603
+ * Default `false`, the same inversion `listRecentFaces` and
23604
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23605
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23606
+ * on the live hub the same day: four identities cost 40,979 B with the
23607
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23608
+ * four times and the viewer holds at `staleTime: 30_000`.
23609
+ *
23610
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23611
+ * the `event-media` plane serves that key `immutable` with an ETag.
23612
+ *
23613
+ * **This is an INPUT field, so it does not reach the addon until the
23614
+ * next train** — the hub router validates cap inputs against its own
23615
+ * compiled Zod and strips a key it does not know. Until then the
23616
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23617
+ * is what ships, and the opt-in becomes reachable when the train lands.
23618
+ */
23619
+ includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(IdentitySchema).readonly()),
23604
23620
  createIdentity: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), IdentitySchema, {
23605
23621
  kind: "mutation",
23606
23622
  auth: "admin"
@@ -27048,7 +27064,13 @@ var plateGalleryCapability = {
27048
27064
  kind: "mutation",
27049
27065
  auth: "admin"
27050
27066
  }),
27051
- listVehicles: require_sleep.method(zod.z.void(), zod.z.array(VehicleSchema).readonly()),
27067
+ listVehicles: require_sleep.method(zod.z.object({
27068
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
27069
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
27070
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
27071
+ * INPUT field: stripped by the hub router until the train ships, which
27072
+ * resolves to `false` and is exactly the intended default. */
27073
+ includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(VehicleSchema).readonly()),
27052
27074
  createVehicle: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), VehicleSchema, {
27053
27075
  kind: "mutation",
27054
27076
  auth: "admin"
@@ -47860,7 +47882,6 @@ exports.DEFAULT_POOL_MEMORY_POLICY = DEFAULT_POOL_MEMORY_POLICY;
47860
47882
  exports.DEFAULT_RECORDING_PROFILES = DEFAULT_RECORDING_PROFILES;
47861
47883
  exports.DEFAULT_RETENTION = DEFAULT_RETENTION;
47862
47884
  exports.DEFAULT_RUNTIME_STATE_DURABILITY = require_sleep.DEFAULT_RUNTIME_STATE_DURABILITY;
47863
- exports.DEFAULT_SCRUB_THUMBNAIL_PRESET = DEFAULT_SCRUB_THUMBNAIL_PRESET;
47864
47885
  exports.DEFAULT_TIMELAPSE_PREVIEW_TEXT = DEFAULT_TIMELAPSE_PREVIEW_TEXT;
47865
47886
  exports.DETAIL_CROP_PADDING_FIELD = DETAIL_CROP_PADDING_FIELD;
47866
47887
  exports.DETAIL_CROP_PADDING_KEY = DETAIL_CROP_PADDING_KEY;
@@ -48384,9 +48405,6 @@ exports.SCENE_DEFAULT_UNCOVERED_POLICY = SCENE_DEFAULT_UNCOVERED_POLICY;
48384
48405
  exports.SCENE_DIVERGED = SCENE_DIVERGED;
48385
48406
  exports.SCENE_RESET_RECAPTURES = SCENE_RESET_RECAPTURES;
48386
48407
  exports.SCOPE_PRESETS = SCOPE_PRESETS;
48387
- exports.SCRUB_THUMBNAIL_PRESETS = SCRUB_THUMBNAIL_PRESETS;
48388
- exports.SCRUB_THUMBNAIL_PRESET_LABELS = SCRUB_THUMBNAIL_PRESET_LABELS;
48389
- exports.SCRUB_THUMBNAIL_PRESET_ORDER = SCRUB_THUMBNAIL_PRESET_ORDER;
48390
48408
  exports.SENSOR_FEATURES = SENSOR_FEATURES;
48391
48409
  exports.SENSOR_MAP = SENSOR_MAP;
48392
48410
  exports.SOURCE_INFO_METADATA_KEY = SOURCE_INFO_METADATA_KEY;
@@ -48409,7 +48427,6 @@ exports.ScopedTokenSchema = ScopedTokenSchema;
48409
48427
  exports.ScopedTokenSummarySchema = ScopedTokenSummarySchema;
48410
48428
  exports.ScoredObjectEventSchema = ScoredObjectEventSchema;
48411
48429
  exports.ScriptRunnerStatusSchema = ScriptRunnerStatusSchema;
48412
- exports.ScrubThumbnailPresetSchema = ScrubThumbnailPresetSchema;
48413
48430
  exports.SearchResultSchema = SearchResultSchema;
48414
48431
  exports.SendEmailInputSchema = SendEmailInputSchema;
48415
48432
  exports.SendEmailResultSchema = SendEmailResultSchema;
@@ -48907,7 +48924,6 @@ exports.resolveMutate = resolveMutate;
48907
48924
  exports.resolvePoolMemoryPolicy = resolvePoolMemoryPolicy;
48908
48925
  exports.resolveRecordingProfiles = resolveRecordingProfiles;
48909
48926
  exports.resolveRunnerId = resolveRunnerId;
48910
- exports.resolveScrubThumbnailGeometry = resolveScrubThumbnailGeometry;
48911
48927
  exports.resolveVariantModelId = resolveVariantModelId;
48912
48928
  exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
48913
48929
  exports.roleSpec = roleSpec;