@camstack/types 1.2.104 → 1.2.106

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 +1 -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 +5 -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 +88 -101
  36. package/dist/index.mjs +89 -96
  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
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({
@@ -7478,7 +7413,17 @@ var dataStoreProviderCapability = {
7478
7413
  query: require_sleep.method(zod.z.object({
7479
7414
  namespace: zod.z.string().optional(),
7480
7415
  collection: zod.z.string(),
7481
- filter: QueryFilterSchema.optional()
7416
+ filter: QueryFilterSchema.optional(),
7417
+ /**
7418
+ * SQL-level column projection — MUST mirror `settings-store.query`.
7419
+ *
7420
+ * This is the second schema the same call passes through, and Zod
7421
+ * objects STRIP what they do not declare: a field present on the door
7422
+ * and absent here does not error, it silently disappears one hop before
7423
+ * the engine, and the caller concludes the projection does nothing.
7424
+ * `data-door-schema-parity.spec.ts` is what keeps the two in step.
7425
+ */
7426
+ columns: zod.z.array(zod.z.string()).readonly().optional()
7482
7427
  }), zod.z.array(SettingsRecordSchema).readonly()),
7483
7428
  /** Insert a new record. */
7484
7429
  insert: require_sleep.method(zod.z.object({
@@ -23600,7 +23545,27 @@ var faceGalleryCapability = {
23600
23545
  scope: "system",
23601
23546
  mode: "singleton",
23602
23547
  methods: {
23603
- listIdentities: require_sleep.method(zod.z.void(), zod.z.array(IdentitySchema).readonly()),
23548
+ listIdentities: require_sleep.method(zod.z.object({
23549
+ /**
23550
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23551
+ *
23552
+ * Default `false`, the same inversion `listRecentFaces` and
23553
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23554
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23555
+ * on the live hub the same day: four identities cost 40,979 B with the
23556
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23557
+ * four times and the viewer holds at `staleTime: 30_000`.
23558
+ *
23559
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23560
+ * the `event-media` plane serves that key `immutable` with an ETag.
23561
+ *
23562
+ * **This is an INPUT field, so it does not reach the addon until the
23563
+ * next train** — the hub router validates cap inputs against its own
23564
+ * compiled Zod and strips a key it does not know. Until then the
23565
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23566
+ * is what ships, and the opt-in becomes reachable when the train lands.
23567
+ */
23568
+ includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(IdentitySchema).readonly()),
23604
23569
  createIdentity: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), IdentitySchema, {
23605
23570
  kind: "mutation",
23606
23571
  auth: "admin"
@@ -26961,8 +26926,10 @@ var PlateInfoSchema = zod.z.object({
26961
26926
  keyFrameMediaKey: zod.z.string().optional(),
26962
26927
  base64: zod.z.string().optional(),
26963
26928
  /**
26964
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
26965
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26929
+ * Same crop as a data-plane URL, always present when the plate has a stored
26930
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
26931
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
26932
+ * left at its `true` default.
26966
26933
  */
26967
26934
  cropUrl: zod.z.string().optional()
26968
26935
  });
@@ -26995,7 +26962,25 @@ var plateGalleryCapability = {
26995
26962
  methods: {
26996
26963
  listPlates: require_sleep.method(zod.z.object({
26997
26964
  deviceId: zod.z.number().int().optional(),
26998
- limit: zod.z.number().int().positive().optional()
26965
+ limit: zod.z.number().int().positive().optional(),
26966
+ /**
26967
+ * Inline the base64 crop on every row. Default `true` — the existing
26968
+ * behaviour, kept so no caller breaks.
26969
+ *
26970
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
26971
+ * Measured on the live hub at the 500 rows the Plates view asks for:
26972
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
26973
+ * metadata without them — and the browser then caches the images.
26974
+ *
26975
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
26976
+ * plates were the one gallery list left without it.
26977
+ *
26978
+ * **This is an INPUT field, so it does not reach the addon until the
26979
+ * next train.** The hub router validates cap inputs against its own
26980
+ * compiled Zod and strips a key it does not know. Until the train
26981
+ * ships, sending `false` is harmless and keeps the crops inline.
26982
+ */
26983
+ includeCrops: zod.z.boolean().optional()
26999
26984
  }).optional(), zod.z.array(PlateInfoSchema).readonly()),
27000
26985
  getPlateByTrack: require_sleep.method(zod.z.object({
27001
26986
  deviceId: zod.z.number().int(),
@@ -27006,7 +26991,9 @@ var plateGalleryCapability = {
27006
26991
  searchPlates: require_sleep.method(zod.z.object({
27007
26992
  text: zod.z.string().min(1),
27008
26993
  maxDistance: zod.z.number().int().min(0).optional(),
27009
- limit: zod.z.number().int().positive().optional()
26994
+ limit: zod.z.number().int().positive().optional(),
26995
+ /** See `listPlates.includeCrops`. Default `true`. */
26996
+ includeCrops: zod.z.boolean().optional()
27010
26997
  }), zod.z.array(PlateInfoSchema).readonly()),
27011
26998
  /** Suggest groups of near-identical reads (same physical plate) for review/merge. */
27012
26999
  suggestPlateClusters: require_sleep.method(zod.z.object({
@@ -27026,7 +27013,13 @@ var plateGalleryCapability = {
27026
27013
  kind: "mutation",
27027
27014
  auth: "admin"
27028
27015
  }),
27029
- listVehicles: require_sleep.method(zod.z.void(), zod.z.array(VehicleSchema).readonly()),
27016
+ listVehicles: require_sleep.method(zod.z.object({
27017
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
27018
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
27019
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
27020
+ * INPUT field: stripped by the hub router until the train ships, which
27021
+ * resolves to `false` and is exactly the intended default. */
27022
+ includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(VehicleSchema).readonly()),
27030
27023
  createVehicle: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), VehicleSchema, {
27031
27024
  kind: "mutation",
27032
27025
  auth: "admin"
@@ -47838,7 +47831,6 @@ exports.DEFAULT_POOL_MEMORY_POLICY = DEFAULT_POOL_MEMORY_POLICY;
47838
47831
  exports.DEFAULT_RECORDING_PROFILES = DEFAULT_RECORDING_PROFILES;
47839
47832
  exports.DEFAULT_RETENTION = DEFAULT_RETENTION;
47840
47833
  exports.DEFAULT_RUNTIME_STATE_DURABILITY = require_sleep.DEFAULT_RUNTIME_STATE_DURABILITY;
47841
- exports.DEFAULT_SCRUB_THUMBNAIL_PRESET = DEFAULT_SCRUB_THUMBNAIL_PRESET;
47842
47834
  exports.DEFAULT_TIMELAPSE_PREVIEW_TEXT = DEFAULT_TIMELAPSE_PREVIEW_TEXT;
47843
47835
  exports.DETAIL_CROP_PADDING_FIELD = DETAIL_CROP_PADDING_FIELD;
47844
47836
  exports.DETAIL_CROP_PADDING_KEY = DETAIL_CROP_PADDING_KEY;
@@ -48362,9 +48354,6 @@ exports.SCENE_DEFAULT_UNCOVERED_POLICY = SCENE_DEFAULT_UNCOVERED_POLICY;
48362
48354
  exports.SCENE_DIVERGED = SCENE_DIVERGED;
48363
48355
  exports.SCENE_RESET_RECAPTURES = SCENE_RESET_RECAPTURES;
48364
48356
  exports.SCOPE_PRESETS = SCOPE_PRESETS;
48365
- exports.SCRUB_THUMBNAIL_PRESETS = SCRUB_THUMBNAIL_PRESETS;
48366
- exports.SCRUB_THUMBNAIL_PRESET_LABELS = SCRUB_THUMBNAIL_PRESET_LABELS;
48367
- exports.SCRUB_THUMBNAIL_PRESET_ORDER = SCRUB_THUMBNAIL_PRESET_ORDER;
48368
48357
  exports.SENSOR_FEATURES = SENSOR_FEATURES;
48369
48358
  exports.SENSOR_MAP = SENSOR_MAP;
48370
48359
  exports.SOURCE_INFO_METADATA_KEY = SOURCE_INFO_METADATA_KEY;
@@ -48387,7 +48376,6 @@ exports.ScopedTokenSchema = ScopedTokenSchema;
48387
48376
  exports.ScopedTokenSummarySchema = ScopedTokenSummarySchema;
48388
48377
  exports.ScoredObjectEventSchema = ScoredObjectEventSchema;
48389
48378
  exports.ScriptRunnerStatusSchema = ScriptRunnerStatusSchema;
48390
- exports.ScrubThumbnailPresetSchema = ScrubThumbnailPresetSchema;
48391
48379
  exports.SearchResultSchema = SearchResultSchema;
48392
48380
  exports.SendEmailInputSchema = SendEmailInputSchema;
48393
48381
  exports.SendEmailResultSchema = SendEmailResultSchema;
@@ -48885,7 +48873,6 @@ exports.resolveMutate = resolveMutate;
48885
48873
  exports.resolvePoolMemoryPolicy = resolvePoolMemoryPolicy;
48886
48874
  exports.resolveRecordingProfiles = resolveRecordingProfiles;
48887
48875
  exports.resolveRunnerId = resolveRunnerId;
48888
- exports.resolveScrubThumbnailGeometry = resolveScrubThumbnailGeometry;
48889
48876
  exports.resolveVariantModelId = resolveVariantModelId;
48890
48877
  exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
48891
48878
  exports.roleSpec = roleSpec;