@camstack/addon-matter-broker 0.2.27 → 0.2.28

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 (3) hide show
  1. package/dist/addon.js +249 -79
  2. package/dist/addon.mjs +249 -79
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -6644,7 +6644,7 @@ function method(input, output, options) {
6644
6644
  input,
6645
6645
  output,
6646
6646
  kind: options?.kind ?? "query",
6647
- auth: options?.auth ?? "protected",
6647
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6648
6648
  ...options?.access !== void 0 ? { access: options.access } : {},
6649
6649
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6650
6650
  timeoutMs: options?.timeoutMs
@@ -6668,7 +6668,7 @@ function event$1(data) {
6668
6668
  }
6669
6669
  var StaticDirOutputSchema$1 = object({ staticDir: string$2() });
6670
6670
  var VersionOutputSchema$1 = object({ version: string$2() });
6671
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6671
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6672
6672
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6673
6673
  DeviceType["Camera"] = "camera";
6674
6674
  DeviceType["Hub"] = "hub";
@@ -6989,7 +6989,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6989
6989
  }({});
6990
6990
  var StaticDirOutputSchema = object({ staticDir: string$2() });
6991
6991
  var VersionOutputSchema = object({ version: string$2() });
6992
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
6992
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
6993
6993
  /**
6994
6994
  * device-ops — device-scoped cap that unifies the per-IDevice operations
6995
6995
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7615,24 +7615,6 @@ var RecordingRetentionSchema = object({
7615
7615
  maxSizeGb: number().min(0).optional()
7616
7616
  });
7617
7617
  /**
7618
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7619
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7620
- * previews at. Five graduated steps; absent on a config = `standard` (the
7621
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7622
- *
7623
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7624
- * Each window's index sidecar carries its own tile dims, so a camera whose
7625
- * preset changed over time renders every historical window at the dims it was
7626
- * written with.
7627
- */
7628
- var ScrubThumbnailPresetSchema = _enum([
7629
- "minimal",
7630
- "low",
7631
- "standard",
7632
- "high",
7633
- "max"
7634
- ]);
7635
- /**
7636
7618
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7637
7619
  *
7638
7620
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7640,7 +7622,11 @@ var ScrubThumbnailPresetSchema = _enum([
7640
7622
  * other field is a storage knob (profiles, segment length, retention, scrub).
7641
7623
  *
7642
7624
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7643
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7625
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7626
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7627
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7628
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7629
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7644
7630
  * A stale caller must fail loudly — silently stripping its legacy intent would
7645
7631
  * persist a band-less config, i.e. silently stop recording the camera.
7646
7632
  */
@@ -7663,14 +7649,7 @@ var RecordingConfigSchema = object({
7663
7649
  * "off" is the absence of a covering band, never a band value.
7664
7650
  */
7665
7651
  bands: array(RecordingBandSchema).default([]),
7666
- retention: RecordingRetentionSchema.optional(),
7667
- /**
7668
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7669
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7670
- * windows only — existing sheets are immutable, and each window's index
7671
- * carries its own tile dims so mixed-preset history renders correctly.
7672
- */
7673
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7652
+ retention: RecordingRetentionSchema.optional()
7674
7653
  }).strict();
7675
7654
  /**
7676
7655
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7746,10 +7725,11 @@ var RelocateFootageInputSchema = object({
7746
7725
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7747
7726
  var StorageMigrationLeaseInputSchema = object({ leaseId: string$2().min(1) });
7748
7727
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string$2().min(1) });
7749
- var StorageMigrationMediaMoveInputSchema = object({
7728
+ var RelocateMediaInputSchema = object({
7750
7729
  toLocationId: string$2(),
7751
7730
  throttleMbps: number().min(1).max(1e3).optional()
7752
- }).extend({ leaseId: string$2().min(1) });
7731
+ });
7732
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string$2().min(1) });
7753
7733
  /** The independently selectable logical storage classes. `recordings`
7754
7734
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7755
7735
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8044,7 +8024,26 @@ var LabelDefinitionSchema = object({
8044
8024
  description: string$2().optional(),
8045
8025
  icon: string$2().optional()
8046
8026
  });
8047
- var ClassMapDefinitionSchema = object({
8027
+ /**
8028
+ * Wire schema for a per-model CATALOG classMap override
8029
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8030
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8031
+ * detection pipeline executor actually routes.
8032
+ *
8033
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8034
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8035
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8036
+ * enum) — the two used to share the name `ClassMapDefinition`/
8037
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8038
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8039
+ * are not: it is two different concepts colliding on a name. Keep this type
8040
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8041
+ * would either narrow every `ClassMapDefinition` consumer to the four
8042
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8043
+ * schema exists for (see the "rejects a classMap whose target is not a
8044
+ * detection macro" test in `model-catalog-schema.test.ts`).
8045
+ */
8046
+ var DetectionCatalogClassMapSchema = object({
8048
8047
  mapping: record(string$2(), _enum([
8049
8048
  "person",
8050
8049
  "vehicle",
@@ -8249,7 +8248,7 @@ var ModelCatalogEntrySchema = object({
8249
8248
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8250
8249
  * labels already ARE the CamStack macros (Scrypted identity map).
8251
8250
  */
8252
- classMap: ClassMapDefinitionSchema.optional()
8251
+ classMap: DetectionCatalogClassMapSchema.optional()
8253
8252
  });
8254
8253
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8255
8254
  format: literal("openvino"),
@@ -8279,7 +8278,7 @@ var ModelConvertMetadataSchema = object({
8279
8278
  "segmentation"
8280
8279
  ]),
8281
8280
  faceAlignment: boolean().optional(),
8282
- classMap: ClassMapDefinitionSchema.optional()
8281
+ classMap: DetectionCatalogClassMapSchema.optional()
8283
8282
  });
8284
8283
  var ConvertResultSchema = object({
8285
8284
  entry: ModelCatalogEntrySchema,
@@ -9142,7 +9141,7 @@ var AddonPageDeclarationSchema = object({
9142
9141
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9143
9142
  sectionLabel: string$2().optional()
9144
9143
  });
9145
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9144
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9146
9145
  var AddonHttpRouteSchema = object({
9147
9146
  method: _enum([
9148
9147
  "GET",
@@ -9377,7 +9376,7 @@ var WidgetMetadataSchema = object({
9377
9376
  defaultColumns: number().int().min(1).max(12).default(6),
9378
9377
  defaultRows: number().int().min(1).max(12).default(1)
9379
9378
  });
9380
- method(_void(), array(WidgetMetadataSchema).readonly());
9379
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9381
9380
  /**
9382
9381
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9383
9382
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11050,7 +11049,7 @@ var CustomModelDescriptorSchema = object({
11050
11049
  stepId: string$2(),
11051
11050
  entry: ModelCatalogEntrySchema
11052
11051
  });
11053
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11052
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11054
11053
  /**
11055
11054
  * Query filter for settings-store collections.
11056
11055
  */
@@ -11137,7 +11136,8 @@ method(object({
11137
11136
  }), _void(), { kind: "mutation" }), method(object({
11138
11137
  namespace: string$2().optional(),
11139
11138
  collection: string$2(),
11140
- filter: QueryFilterSchema.optional()
11139
+ filter: QueryFilterSchema.optional(),
11140
+ columns: array(string$2()).readonly().optional()
11141
11141
  }), array(SettingsRecordSchema).readonly()), method(object({
11142
11142
  namespace: string$2().optional(),
11143
11143
  collection: string$2(),
@@ -11200,46 +11200,87 @@ var EngineInfoSchema = object({
11200
11200
  kind: _enum(["relational", "vector"]),
11201
11201
  displayName: string$2()
11202
11202
  });
11203
- method(_void(), EngineInfoSchema), method(object({
11203
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11204
11204
  namespace: string$2().optional(),
11205
11205
  collection: string$2(),
11206
11206
  key: string$2()
11207
- }), unknown()), method(object({
11207
+ }), unknown(), { auth: "admin" }), method(object({
11208
11208
  namespace: string$2().optional(),
11209
11209
  collection: string$2(),
11210
11210
  key: string$2(),
11211
11211
  value: unknown()
11212
- }), _void(), { kind: "mutation" }), method(object({
11212
+ }), _void(), {
11213
+ kind: "mutation",
11214
+ auth: "admin"
11215
+ }), method(object({
11213
11216
  namespace: string$2().optional(),
11214
11217
  collection: string$2(),
11215
- filter: QueryFilterSchema.optional()
11216
- }), array(SettingsRecordSchema).readonly()), method(object({
11218
+ filter: QueryFilterSchema.optional(),
11219
+ /**
11220
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11221
+ *
11222
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11223
+ * was wrong — corrected 2026-08-26 after the hop map
11224
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11225
+ * There is **no Zod parse at all** between the door and the engine: the
11226
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11227
+ * field declared here reaches `SqliteSettingsBackend` either way.
11228
+ *
11229
+ * What actually lost `columns` was the THIRD declaration of this shape:
11230
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11231
+ * interface the engine destructures from. The field existed on both
11232
+ * schemas and the engine still never read it, because nothing checks a
11233
+ * registered provider against `InferProvider<cap>` —
11234
+ * `ProviderRegistration.provider` is typed `object`.
11235
+ *
11236
+ * It is declared here anyway, and must stay in step with
11237
+ * `settings-store.query`: a caller reading only the cap definitions has
11238
+ * to be able to see that this call carries a projection.
11239
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11240
+ */
11241
+ columns: array(string$2()).readonly().optional()
11242
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11217
11243
  namespace: string$2().optional(),
11218
11244
  collection: string$2(),
11219
11245
  record: SettingsRecordSchema
11220
- }), _void(), { kind: "mutation" }), method(object({
11246
+ }), _void(), {
11247
+ kind: "mutation",
11248
+ auth: "admin"
11249
+ }), method(object({
11221
11250
  namespace: string$2().optional(),
11222
11251
  collection: string$2(),
11223
11252
  id: string$2(),
11224
11253
  data: record(string$2(), unknown())
11225
- }), _void(), { kind: "mutation" }), method(object({
11254
+ }), _void(), {
11255
+ kind: "mutation",
11256
+ auth: "admin"
11257
+ }), method(object({
11226
11258
  namespace: string$2().optional(),
11227
11259
  collection: string$2(),
11228
11260
  key: string$2()
11229
- }), _void(), { kind: "mutation" }), method(object({
11261
+ }), _void(), {
11262
+ kind: "mutation",
11263
+ auth: "admin"
11264
+ }), method(object({
11230
11265
  namespace: string$2().optional(),
11231
11266
  collection: string$2(),
11232
11267
  filter: MutationFilterSchema
11233
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11268
+ }), object({ deleted: number().int() }), {
11269
+ kind: "mutation",
11270
+ auth: "admin"
11271
+ }), method(object({
11234
11272
  namespace: string$2().optional(),
11235
11273
  collection: string$2(),
11236
11274
  filter: MutationFilterSchema,
11237
11275
  data: record(string$2(), unknown())
11238
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11276
+ }), object({ updated: number().int() }), {
11277
+ kind: "mutation",
11278
+ auth: "admin"
11279
+ }), method(object({
11239
11280
  namespace: string$2().optional(),
11240
11281
  collection: string$2(),
11241
11282
  filter: QueryFilterSchema.optional()
11242
- }), number()), method(object({
11283
+ }), number(), { auth: "admin" }), method(object({
11243
11284
  namespace: string$2().optional(),
11244
11285
  collection: string$2(),
11245
11286
  field: string$2(),
@@ -11249,15 +11290,18 @@ method(_void(), EngineInfoSchema), method(object({
11249
11290
  }), array(object({
11250
11291
  bucket: number().int(),
11251
11292
  count: number().int()
11252
- })).readonly()), method(object({
11293
+ })).readonly(), { auth: "admin" }), method(object({
11253
11294
  namespace: string$2().optional(),
11254
11295
  collection: string$2()
11255
- }), boolean()), method(object({
11296
+ }), boolean(), { auth: "admin" }), method(object({
11256
11297
  namespace: string$2().optional(),
11257
11298
  collection: string$2(),
11258
11299
  columns: array(CollectionColumnSchema).readonly(),
11259
11300
  indexes: array(CollectionIndexSchema).readonly().optional()
11260
- }), _void(), { kind: "mutation" });
11301
+ }), _void(), {
11302
+ kind: "mutation",
11303
+ auth: "admin"
11304
+ });
11261
11305
  /**
11262
11306
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11263
11307
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12564,7 +12608,7 @@ method(object({
12564
12608
  crop: _instanceof(Uint8Array),
12565
12609
  width: number(),
12566
12610
  height: number()
12567
- }), EmbeddingResultSchema), method(object({ text: string$2() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12611
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string$2() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12568
12612
  /**
12569
12613
  * filesystem-browse — per-node capability for browsing the node's local
12570
12614
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12857,19 +12901,22 @@ method(LlmGenerateBaseInputSchema.extend({
12857
12901
  runtime: ManagedRuntimeConfigSchema,
12858
12902
  /** The managed profile's timeout, threaded by the hub provider. */
12859
12903
  timeoutMs: number().int().positive().optional()
12860
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12904
+ }), LlmGenerateResultSchema, {
12905
+ kind: "mutation",
12906
+ auth: "admin"
12907
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12861
12908
  kind: "mutation",
12862
12909
  auth: "admin"
12863
12910
  }), method(object({}), _void(), {
12864
12911
  kind: "mutation",
12865
12912
  auth: "admin"
12866
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12913
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12867
12914
  kind: "mutation",
12868
12915
  auth: "admin"
12869
12916
  }), method(object({ file: string$2() }), _void(), {
12870
12917
  kind: "mutation",
12871
12918
  auth: "admin"
12872
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12919
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12873
12920
  /**
12874
12921
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12875
12922
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16380,7 +16427,7 @@ var OauthIntegrationDescriptorSchema = object({
16380
16427
  */
16381
16428
  refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
16382
16429
  });
16383
- method(_void(), OauthIntegrationDescriptorSchema);
16430
+ method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
16384
16431
  /**
16385
16432
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
16386
16433
  * per-frame detections emitted by the pipeline runner into tracked
@@ -17575,6 +17622,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17575
17622
  }), method(object({ jobId: string$2() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
17576
17623
  kind: "mutation",
17577
17624
  auth: "admin"
17625
+ }), method(RelocateMediaInputSchema, object({ jobId: string$2() }), {
17626
+ kind: "mutation",
17627
+ auth: "admin"
17628
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17629
+ kind: "query",
17630
+ auth: "admin"
17631
+ }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
17632
+ kind: "mutation",
17633
+ auth: "admin"
17578
17634
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17579
17635
  kind: "query",
17580
17636
  auth: "admin"
@@ -17729,6 +17785,11 @@ object({
17729
17785
  "jpeg"
17730
17786
  ])
17731
17787
  });
17788
+ /**
17789
+ * Process-local frame identity. It is serializable so it can ride an in-process
17790
+ * capability call, but `registryId` deliberately prevents resolution in any
17791
+ * other process or execution group.
17792
+ */
17732
17793
  var FrameRefSchema = object({
17733
17794
  registryId: string$2().min(1),
17734
17795
  id: string$2().min(1),
@@ -19934,7 +19995,7 @@ method(object({
19934
19995
  * linking rather than produce an eternal token.
19935
19996
  */
19936
19997
  ttlSec: union([number().int().positive(), literal("never")]).optional()
19937
- }), object({ token: string$2() })), method(object({ token: string$2() }), SsoBridgeClaimsSchema.nullable());
19998
+ }), object({ token: string$2() }), { auth: "admin" }), method(object({ token: string$2() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
19938
19999
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19939
20000
  providerId: string$2().min(1),
19940
20001
  displayName: string$2().min(1),
@@ -20029,10 +20090,13 @@ var EvictResultSchema = object({
20029
20090
  /** True when the provider has nothing left it is willing to drop on this location. */
20030
20091
  exhausted: boolean()
20031
20092
  });
20032
- method(object({ locationId: string$2() }), EvictableUsageSchema), method(object({
20093
+ method(object({ locationId: string$2() }), EvictableUsageSchema, { auth: "admin" }), method(object({
20033
20094
  locationId: string$2(),
20034
20095
  targetBytes: number().int().positive()
20035
- }), EvictResultSchema, { kind: "mutation" });
20096
+ }), EvictResultSchema, {
20097
+ kind: "mutation",
20098
+ auth: "admin"
20099
+ });
20036
20100
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string$2() }), {
20037
20101
  kind: "mutation",
20038
20102
  auth: "admin"
@@ -20092,26 +20156,50 @@ var ReadChunkInputSchema = object({
20092
20156
  length: number()
20093
20157
  });
20094
20158
  var EndDownloadInputSchema = object({ downloadId: string$2() });
20095
- method(_void(), ProviderInfoSchema), method(object({ config: record(string$2(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20159
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string$2(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20096
20160
  location: StorageLocationSchema,
20097
20161
  relativePath: string$2()
20098
- }), string$2()), method(object({
20162
+ }), string$2(), { auth: "admin" }), method(object({
20099
20163
  location: StorageLocationSchema,
20100
20164
  relativePath: string$2(),
20101
20165
  data: _instanceof(Uint8Array)
20102
- }), _void(), { kind: "mutation" }), method(object({
20166
+ }), _void(), {
20167
+ kind: "mutation",
20168
+ auth: "admin"
20169
+ }), method(object({
20103
20170
  location: StorageLocationSchema,
20104
20171
  relativePath: string$2()
20105
- }), _instanceof(Uint8Array)), method(object({
20172
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
20106
20173
  location: StorageLocationSchema,
20107
20174
  relativePath: string$2()
20108
- }), boolean()), method(object({
20175
+ }), boolean(), { auth: "admin" }), method(object({
20109
20176
  location: StorageLocationSchema,
20110
20177
  prefix: string$2().optional()
20111
- }), array(string$2()).readonly()), method(object({
20178
+ }), array(string$2()).readonly(), { auth: "admin" }), method(object({
20112
20179
  location: StorageLocationSchema,
20113
20180
  relativePath: string$2()
20114
- }), _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" });
20181
+ }), _void(), {
20182
+ kind: "mutation",
20183
+ auth: "admin"
20184
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20185
+ kind: "mutation",
20186
+ auth: "admin"
20187
+ }), method(WriteChunkInputSchema, _void(), {
20188
+ kind: "mutation",
20189
+ auth: "admin"
20190
+ }), method(FinalizeUploadInputSchema, _void(), {
20191
+ kind: "mutation",
20192
+ auth: "admin"
20193
+ }), method(AbortUploadInputSchema, _void(), {
20194
+ kind: "mutation",
20195
+ auth: "admin"
20196
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20197
+ kind: "mutation",
20198
+ auth: "admin"
20199
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20200
+ kind: "mutation",
20201
+ auth: "admin"
20202
+ });
20115
20203
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
20116
20204
  var ProfileSettingsSchemaBridge = unknown().nullable();
20117
20205
  var ProfileSettingsBagSchema = record(string$2(), unknown());
@@ -20369,7 +20457,8 @@ method(object({
20369
20457
  access: "create"
20370
20458
  }), method(object({ userId: string$2().optional() }), object({ optionsJSON: record(string$2(), unknown()) }), {
20371
20459
  kind: "mutation",
20372
- access: "view"
20460
+ access: "view",
20461
+ auth: "admin"
20373
20462
  }), method(object({
20374
20463
  /** Required — the user the assertion belongs to (verified). */
20375
20464
  userId: string$2(),
@@ -20377,10 +20466,12 @@ method(object({
20377
20466
  response: record(string$2(), unknown())
20378
20467
  }), object({ verified: boolean() }), {
20379
20468
  kind: "mutation",
20380
- access: "view"
20469
+ access: "view",
20470
+ auth: "admin"
20381
20471
  }), method(object({}), object({ optionsJSON: record(string$2(), unknown()) }), {
20382
20472
  kind: "mutation",
20383
- access: "view"
20473
+ access: "view",
20474
+ auth: "admin"
20384
20475
  }), method(object({
20385
20476
  /** AuthenticationResponseJSON from the browser. */
20386
20477
  response: record(string$2(), unknown()) }), object({
@@ -20388,7 +20479,8 @@ response: record(string$2(), unknown()) }), object({
20388
20479
  userId: string$2().nullable()
20389
20480
  }), {
20390
20481
  kind: "mutation",
20391
- access: "view"
20482
+ access: "view",
20483
+ auth: "admin"
20392
20484
  }), method(object({ userId: string$2() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20393
20485
  userId: string$2(),
20394
20486
  credentialId: string$2()
@@ -20560,7 +20652,19 @@ var VectorStatsResultSchema = object({
20560
20652
  /** False when the backend ranks approximately. */
20561
20653
  exact: boolean()
20562
20654
  });
20563
- 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);
20655
+ method(VectorDeclareIndexInputSchema, _void(), {
20656
+ kind: "mutation",
20657
+ auth: "admin"
20658
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20659
+ kind: "mutation",
20660
+ auth: "admin"
20661
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20662
+ kind: "mutation",
20663
+ auth: "admin"
20664
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20665
+ kind: "mutation",
20666
+ auth: "admin"
20667
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20564
20668
  var ClipSchema = object({
20565
20669
  /** Opaque, provider-namespaced id. The default provider encodes the time
20566
20670
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -23030,7 +23134,27 @@ var MediaFileLiteSchema$1 = object({
23030
23134
  sizeBytes: number(),
23031
23135
  timestamp: number()
23032
23136
  });
23033
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string$2().min(1) }), IdentitySchema, {
23137
+ method(object({
23138
+ /**
23139
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23140
+ *
23141
+ * Default `false`, the same inversion `listRecentFaces` and
23142
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23143
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23144
+ * on the live hub the same day: four identities cost 40,979 B with the
23145
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23146
+ * four times and the viewer holds at `staleTime: 30_000`.
23147
+ *
23148
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23149
+ * the `event-media` plane serves that key `immutable` with an ETag.
23150
+ *
23151
+ * **This is an INPUT field, so it does not reach the addon until the
23152
+ * next train** — the hub router validates cap inputs against its own
23153
+ * compiled Zod and strips a key it does not know. Until then the
23154
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23155
+ * is what ships, and the opt-in becomes reachable when the train lands.
23156
+ */
23157
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string$2().min(1) }), IdentitySchema, {
23034
23158
  kind: "mutation",
23035
23159
  auth: "admin"
23036
23160
  }), method(object({
@@ -25920,8 +26044,10 @@ var PlateInfoSchema = object({
25920
26044
  keyFrameMediaKey: string$2().optional(),
25921
26045
  base64: string$2().optional(),
25922
26046
  /**
25923
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
25924
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26047
+ * Same crop as a data-plane URL, always present when the plate has a stored
26048
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
26049
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
26050
+ * left at its `true` default.
25925
26051
  */
25926
26052
  cropUrl: string$2().optional()
25927
26053
  });
@@ -25941,14 +26067,34 @@ var PlateClusterSchema = object({
25941
26067
  });
25942
26068
  method(object({
25943
26069
  deviceId: number().int().optional(),
25944
- limit: number().int().positive().optional()
26070
+ limit: number().int().positive().optional(),
26071
+ /**
26072
+ * Inline the base64 crop on every row. Default `true` — the existing
26073
+ * behaviour, kept so no caller breaks.
26074
+ *
26075
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
26076
+ * Measured on the live hub at the 500 rows the Plates view asks for:
26077
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
26078
+ * metadata without them — and the browser then caches the images.
26079
+ *
26080
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
26081
+ * plates were the one gallery list left without it.
26082
+ *
26083
+ * **This is an INPUT field, so it does not reach the addon until the
26084
+ * next train.** The hub router validates cap inputs against its own
26085
+ * compiled Zod and strips a key it does not know. Until the train
26086
+ * ships, sending `false` is harmless and keeps the crops inline.
26087
+ */
26088
+ includeCrops: boolean().optional()
25945
26089
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
25946
26090
  deviceId: number().int(),
25947
26091
  trackId: string$2()
25948
26092
  }), PlateInfoSchema.nullable()), method(object({ plateId: string$2() }), array(MediaFileLiteSchema).readonly()), method(object({
25949
26093
  text: string$2().min(1),
25950
26094
  maxDistance: number().int().min(0).optional(),
25951
- limit: number().int().positive().optional()
26095
+ limit: number().int().positive().optional(),
26096
+ /** See `listPlates.includeCrops`. Default `true`. */
26097
+ includeCrops: boolean().optional()
25952
26098
  }), array(PlateInfoSchema).readonly()), method(object({
25953
26099
  maxDistance: number().int().min(0).optional(),
25954
26100
  minClusterSize: number().int().min(2).optional(),
@@ -25962,7 +26108,13 @@ method(object({
25962
26108
  }), method(object({ plateId: string$2() }), _void(), {
25963
26109
  kind: "mutation",
25964
26110
  auth: "admin"
25965
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
26111
+ }), method(object({
26112
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
26113
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
26114
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
26115
+ * INPUT field: stripped by the hub router until the train ships, which
26116
+ * resolves to `false` and is exactly the intended default. */
26117
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
25966
26118
  kind: "mutation",
25967
26119
  auth: "admin"
25968
26120
  }), method(object({
@@ -33223,6 +33375,12 @@ Object.freeze({
33223
33375
  addonId: null,
33224
33376
  access: "create"
33225
33377
  },
33378
+ "pipelineAnalytics.cancelRelocateMedia": {
33379
+ capName: "pipeline-analytics",
33380
+ capScope: "device",
33381
+ addonId: null,
33382
+ access: "create"
33383
+ },
33226
33384
  "pipelineAnalytics.cancelStorageMigrationMove": {
33227
33385
  capName: "pipeline-analytics",
33228
33386
  capScope: "device",
@@ -33397,6 +33555,12 @@ Object.freeze({
33397
33555
  addonId: null,
33398
33556
  access: "view"
33399
33557
  },
33558
+ "pipelineAnalytics.listRelocateMediaJobs": {
33559
+ capName: "pipeline-analytics",
33560
+ capScope: "device",
33561
+ addonId: null,
33562
+ access: "view"
33563
+ },
33400
33564
  "pipelineAnalytics.listRetrainAnnotations": {
33401
33565
  capName: "pipeline-analytics",
33402
33566
  capScope: "device",
@@ -33475,6 +33639,12 @@ Object.freeze({
33475
33639
  addonId: null,
33476
33640
  access: "create"
33477
33641
  },
33642
+ "pipelineAnalytics.relocateMedia": {
33643
+ capName: "pipeline-analytics",
33644
+ capScope: "device",
33645
+ addonId: null,
33646
+ access: "create"
33647
+ },
33478
33648
  "pipelineAnalytics.restageRetrainTrack": {
33479
33649
  capName: "pipeline-analytics",
33480
33650
  capScope: "device",
package/dist/addon.mjs CHANGED
@@ -6642,7 +6642,7 @@ function method(input, output, options) {
6642
6642
  input,
6643
6643
  output,
6644
6644
  kind: options?.kind ?? "query",
6645
- auth: options?.auth ?? "protected",
6645
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6646
6646
  ...options?.access !== void 0 ? { access: options.access } : {},
6647
6647
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6648
6648
  timeoutMs: options?.timeoutMs
@@ -6666,7 +6666,7 @@ function event$1(data) {
6666
6666
  }
6667
6667
  var StaticDirOutputSchema$1 = object({ staticDir: string$2() });
6668
6668
  var VersionOutputSchema$1 = object({ version: string$2() });
6669
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6669
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6670
6670
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6671
6671
  DeviceType["Camera"] = "camera";
6672
6672
  DeviceType["Hub"] = "hub";
@@ -6987,7 +6987,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6987
6987
  }({});
6988
6988
  var StaticDirOutputSchema = object({ staticDir: string$2() });
6989
6989
  var VersionOutputSchema = object({ version: string$2() });
6990
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
6990
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
6991
6991
  /**
6992
6992
  * device-ops — device-scoped cap that unifies the per-IDevice operations
6993
6993
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7613,24 +7613,6 @@ var RecordingRetentionSchema = object({
7613
7613
  maxSizeGb: number().min(0).optional()
7614
7614
  });
7615
7615
  /**
7616
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7617
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7618
- * previews at. Five graduated steps; absent on a config = `standard` (the
7619
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7620
- *
7621
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7622
- * Each window's index sidecar carries its own tile dims, so a camera whose
7623
- * preset changed over time renders every historical window at the dims it was
7624
- * written with.
7625
- */
7626
- var ScrubThumbnailPresetSchema = _enum([
7627
- "minimal",
7628
- "low",
7629
- "standard",
7630
- "high",
7631
- "max"
7632
- ]);
7633
- /**
7634
7616
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7635
7617
  *
7636
7618
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7638,7 +7620,11 @@ var ScrubThumbnailPresetSchema = _enum([
7638
7620
  * other field is a storage knob (profiles, segment length, retention, scrub).
7639
7621
  *
7640
7622
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7641
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7623
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7624
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7625
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7626
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7627
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7642
7628
  * A stale caller must fail loudly — silently stripping its legacy intent would
7643
7629
  * persist a band-less config, i.e. silently stop recording the camera.
7644
7630
  */
@@ -7661,14 +7647,7 @@ var RecordingConfigSchema = object({
7661
7647
  * "off" is the absence of a covering band, never a band value.
7662
7648
  */
7663
7649
  bands: array(RecordingBandSchema).default([]),
7664
- retention: RecordingRetentionSchema.optional(),
7665
- /**
7666
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7667
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7668
- * windows only — existing sheets are immutable, and each window's index
7669
- * carries its own tile dims so mixed-preset history renders correctly.
7670
- */
7671
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7650
+ retention: RecordingRetentionSchema.optional()
7672
7651
  }).strict();
7673
7652
  /**
7674
7653
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7744,10 +7723,11 @@ var RelocateFootageInputSchema = object({
7744
7723
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7745
7724
  var StorageMigrationLeaseInputSchema = object({ leaseId: string$2().min(1) });
7746
7725
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string$2().min(1) });
7747
- var StorageMigrationMediaMoveInputSchema = object({
7726
+ var RelocateMediaInputSchema = object({
7748
7727
  toLocationId: string$2(),
7749
7728
  throttleMbps: number().min(1).max(1e3).optional()
7750
- }).extend({ leaseId: string$2().min(1) });
7729
+ });
7730
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string$2().min(1) });
7751
7731
  /** The independently selectable logical storage classes. `recordings`
7752
7732
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7753
7733
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8042,7 +8022,26 @@ var LabelDefinitionSchema = object({
8042
8022
  description: string$2().optional(),
8043
8023
  icon: string$2().optional()
8044
8024
  });
8045
- var ClassMapDefinitionSchema = object({
8025
+ /**
8026
+ * Wire schema for a per-model CATALOG classMap override
8027
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8028
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8029
+ * detection pipeline executor actually routes.
8030
+ *
8031
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8032
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8033
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8034
+ * enum) — the two used to share the name `ClassMapDefinition`/
8035
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8036
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8037
+ * are not: it is two different concepts colliding on a name. Keep this type
8038
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8039
+ * would either narrow every `ClassMapDefinition` consumer to the four
8040
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8041
+ * schema exists for (see the "rejects a classMap whose target is not a
8042
+ * detection macro" test in `model-catalog-schema.test.ts`).
8043
+ */
8044
+ var DetectionCatalogClassMapSchema = object({
8046
8045
  mapping: record(string$2(), _enum([
8047
8046
  "person",
8048
8047
  "vehicle",
@@ -8247,7 +8246,7 @@ var ModelCatalogEntrySchema = object({
8247
8246
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8248
8247
  * labels already ARE the CamStack macros (Scrypted identity map).
8249
8248
  */
8250
- classMap: ClassMapDefinitionSchema.optional()
8249
+ classMap: DetectionCatalogClassMapSchema.optional()
8251
8250
  });
8252
8251
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8253
8252
  format: literal("openvino"),
@@ -8277,7 +8276,7 @@ var ModelConvertMetadataSchema = object({
8277
8276
  "segmentation"
8278
8277
  ]),
8279
8278
  faceAlignment: boolean().optional(),
8280
- classMap: ClassMapDefinitionSchema.optional()
8279
+ classMap: DetectionCatalogClassMapSchema.optional()
8281
8280
  });
8282
8281
  var ConvertResultSchema = object({
8283
8282
  entry: ModelCatalogEntrySchema,
@@ -9140,7 +9139,7 @@ var AddonPageDeclarationSchema = object({
9140
9139
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9141
9140
  sectionLabel: string$2().optional()
9142
9141
  });
9143
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9142
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9144
9143
  var AddonHttpRouteSchema = object({
9145
9144
  method: _enum([
9146
9145
  "GET",
@@ -9375,7 +9374,7 @@ var WidgetMetadataSchema = object({
9375
9374
  defaultColumns: number().int().min(1).max(12).default(6),
9376
9375
  defaultRows: number().int().min(1).max(12).default(1)
9377
9376
  });
9378
- method(_void(), array(WidgetMetadataSchema).readonly());
9377
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9379
9378
  /**
9380
9379
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9381
9380
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11048,7 +11047,7 @@ var CustomModelDescriptorSchema = object({
11048
11047
  stepId: string$2(),
11049
11048
  entry: ModelCatalogEntrySchema
11050
11049
  });
11051
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11050
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11052
11051
  /**
11053
11052
  * Query filter for settings-store collections.
11054
11053
  */
@@ -11135,7 +11134,8 @@ method(object({
11135
11134
  }), _void(), { kind: "mutation" }), method(object({
11136
11135
  namespace: string$2().optional(),
11137
11136
  collection: string$2(),
11138
- filter: QueryFilterSchema.optional()
11137
+ filter: QueryFilterSchema.optional(),
11138
+ columns: array(string$2()).readonly().optional()
11139
11139
  }), array(SettingsRecordSchema).readonly()), method(object({
11140
11140
  namespace: string$2().optional(),
11141
11141
  collection: string$2(),
@@ -11198,46 +11198,87 @@ var EngineInfoSchema = object({
11198
11198
  kind: _enum(["relational", "vector"]),
11199
11199
  displayName: string$2()
11200
11200
  });
11201
- method(_void(), EngineInfoSchema), method(object({
11201
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11202
11202
  namespace: string$2().optional(),
11203
11203
  collection: string$2(),
11204
11204
  key: string$2()
11205
- }), unknown()), method(object({
11205
+ }), unknown(), { auth: "admin" }), method(object({
11206
11206
  namespace: string$2().optional(),
11207
11207
  collection: string$2(),
11208
11208
  key: string$2(),
11209
11209
  value: unknown()
11210
- }), _void(), { kind: "mutation" }), method(object({
11210
+ }), _void(), {
11211
+ kind: "mutation",
11212
+ auth: "admin"
11213
+ }), method(object({
11211
11214
  namespace: string$2().optional(),
11212
11215
  collection: string$2(),
11213
- filter: QueryFilterSchema.optional()
11214
- }), array(SettingsRecordSchema).readonly()), method(object({
11216
+ filter: QueryFilterSchema.optional(),
11217
+ /**
11218
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11219
+ *
11220
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11221
+ * was wrong — corrected 2026-08-26 after the hop map
11222
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11223
+ * There is **no Zod parse at all** between the door and the engine: the
11224
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11225
+ * field declared here reaches `SqliteSettingsBackend` either way.
11226
+ *
11227
+ * What actually lost `columns` was the THIRD declaration of this shape:
11228
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11229
+ * interface the engine destructures from. The field existed on both
11230
+ * schemas and the engine still never read it, because nothing checks a
11231
+ * registered provider against `InferProvider<cap>` —
11232
+ * `ProviderRegistration.provider` is typed `object`.
11233
+ *
11234
+ * It is declared here anyway, and must stay in step with
11235
+ * `settings-store.query`: a caller reading only the cap definitions has
11236
+ * to be able to see that this call carries a projection.
11237
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11238
+ */
11239
+ columns: array(string$2()).readonly().optional()
11240
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11215
11241
  namespace: string$2().optional(),
11216
11242
  collection: string$2(),
11217
11243
  record: SettingsRecordSchema
11218
- }), _void(), { kind: "mutation" }), method(object({
11244
+ }), _void(), {
11245
+ kind: "mutation",
11246
+ auth: "admin"
11247
+ }), method(object({
11219
11248
  namespace: string$2().optional(),
11220
11249
  collection: string$2(),
11221
11250
  id: string$2(),
11222
11251
  data: record(string$2(), unknown())
11223
- }), _void(), { kind: "mutation" }), method(object({
11252
+ }), _void(), {
11253
+ kind: "mutation",
11254
+ auth: "admin"
11255
+ }), method(object({
11224
11256
  namespace: string$2().optional(),
11225
11257
  collection: string$2(),
11226
11258
  key: string$2()
11227
- }), _void(), { kind: "mutation" }), method(object({
11259
+ }), _void(), {
11260
+ kind: "mutation",
11261
+ auth: "admin"
11262
+ }), method(object({
11228
11263
  namespace: string$2().optional(),
11229
11264
  collection: string$2(),
11230
11265
  filter: MutationFilterSchema
11231
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11266
+ }), object({ deleted: number().int() }), {
11267
+ kind: "mutation",
11268
+ auth: "admin"
11269
+ }), method(object({
11232
11270
  namespace: string$2().optional(),
11233
11271
  collection: string$2(),
11234
11272
  filter: MutationFilterSchema,
11235
11273
  data: record(string$2(), unknown())
11236
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11274
+ }), object({ updated: number().int() }), {
11275
+ kind: "mutation",
11276
+ auth: "admin"
11277
+ }), method(object({
11237
11278
  namespace: string$2().optional(),
11238
11279
  collection: string$2(),
11239
11280
  filter: QueryFilterSchema.optional()
11240
- }), number()), method(object({
11281
+ }), number(), { auth: "admin" }), method(object({
11241
11282
  namespace: string$2().optional(),
11242
11283
  collection: string$2(),
11243
11284
  field: string$2(),
@@ -11247,15 +11288,18 @@ method(_void(), EngineInfoSchema), method(object({
11247
11288
  }), array(object({
11248
11289
  bucket: number().int(),
11249
11290
  count: number().int()
11250
- })).readonly()), method(object({
11291
+ })).readonly(), { auth: "admin" }), method(object({
11251
11292
  namespace: string$2().optional(),
11252
11293
  collection: string$2()
11253
- }), boolean()), method(object({
11294
+ }), boolean(), { auth: "admin" }), method(object({
11254
11295
  namespace: string$2().optional(),
11255
11296
  collection: string$2(),
11256
11297
  columns: array(CollectionColumnSchema).readonly(),
11257
11298
  indexes: array(CollectionIndexSchema).readonly().optional()
11258
- }), _void(), { kind: "mutation" });
11299
+ }), _void(), {
11300
+ kind: "mutation",
11301
+ auth: "admin"
11302
+ });
11259
11303
  /**
11260
11304
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11261
11305
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12562,7 +12606,7 @@ method(object({
12562
12606
  crop: _instanceof(Uint8Array),
12563
12607
  width: number(),
12564
12608
  height: number()
12565
- }), EmbeddingResultSchema), method(object({ text: string$2() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12609
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string$2() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12566
12610
  /**
12567
12611
  * filesystem-browse — per-node capability for browsing the node's local
12568
12612
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12855,19 +12899,22 @@ method(LlmGenerateBaseInputSchema.extend({
12855
12899
  runtime: ManagedRuntimeConfigSchema,
12856
12900
  /** The managed profile's timeout, threaded by the hub provider. */
12857
12901
  timeoutMs: number().int().positive().optional()
12858
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12902
+ }), LlmGenerateResultSchema, {
12903
+ kind: "mutation",
12904
+ auth: "admin"
12905
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12859
12906
  kind: "mutation",
12860
12907
  auth: "admin"
12861
12908
  }), method(object({}), _void(), {
12862
12909
  kind: "mutation",
12863
12910
  auth: "admin"
12864
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12911
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12865
12912
  kind: "mutation",
12866
12913
  auth: "admin"
12867
12914
  }), method(object({ file: string$2() }), _void(), {
12868
12915
  kind: "mutation",
12869
12916
  auth: "admin"
12870
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12917
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12871
12918
  /**
12872
12919
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12873
12920
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16378,7 +16425,7 @@ var OauthIntegrationDescriptorSchema = object({
16378
16425
  */
16379
16426
  refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
16380
16427
  });
16381
- method(_void(), OauthIntegrationDescriptorSchema);
16428
+ method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
16382
16429
  /**
16383
16430
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
16384
16431
  * per-frame detections emitted by the pipeline runner into tracked
@@ -17573,6 +17620,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17573
17620
  }), method(object({ jobId: string$2() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
17574
17621
  kind: "mutation",
17575
17622
  auth: "admin"
17623
+ }), method(RelocateMediaInputSchema, object({ jobId: string$2() }), {
17624
+ kind: "mutation",
17625
+ auth: "admin"
17626
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17627
+ kind: "query",
17628
+ auth: "admin"
17629
+ }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
17630
+ kind: "mutation",
17631
+ auth: "admin"
17576
17632
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17577
17633
  kind: "query",
17578
17634
  auth: "admin"
@@ -17727,6 +17783,11 @@ object({
17727
17783
  "jpeg"
17728
17784
  ])
17729
17785
  });
17786
+ /**
17787
+ * Process-local frame identity. It is serializable so it can ride an in-process
17788
+ * capability call, but `registryId` deliberately prevents resolution in any
17789
+ * other process or execution group.
17790
+ */
17730
17791
  var FrameRefSchema = object({
17731
17792
  registryId: string$2().min(1),
17732
17793
  id: string$2().min(1),
@@ -19932,7 +19993,7 @@ method(object({
19932
19993
  * linking rather than produce an eternal token.
19933
19994
  */
19934
19995
  ttlSec: union([number().int().positive(), literal("never")]).optional()
19935
- }), object({ token: string$2() })), method(object({ token: string$2() }), SsoBridgeClaimsSchema.nullable());
19996
+ }), object({ token: string$2() }), { auth: "admin" }), method(object({ token: string$2() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
19936
19997
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19937
19998
  providerId: string$2().min(1),
19938
19999
  displayName: string$2().min(1),
@@ -20027,10 +20088,13 @@ var EvictResultSchema = object({
20027
20088
  /** True when the provider has nothing left it is willing to drop on this location. */
20028
20089
  exhausted: boolean()
20029
20090
  });
20030
- method(object({ locationId: string$2() }), EvictableUsageSchema), method(object({
20091
+ method(object({ locationId: string$2() }), EvictableUsageSchema, { auth: "admin" }), method(object({
20031
20092
  locationId: string$2(),
20032
20093
  targetBytes: number().int().positive()
20033
- }), EvictResultSchema, { kind: "mutation" });
20094
+ }), EvictResultSchema, {
20095
+ kind: "mutation",
20096
+ auth: "admin"
20097
+ });
20034
20098
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string$2() }), {
20035
20099
  kind: "mutation",
20036
20100
  auth: "admin"
@@ -20090,26 +20154,50 @@ var ReadChunkInputSchema = object({
20090
20154
  length: number()
20091
20155
  });
20092
20156
  var EndDownloadInputSchema = object({ downloadId: string$2() });
20093
- method(_void(), ProviderInfoSchema), method(object({ config: record(string$2(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20157
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string$2(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20094
20158
  location: StorageLocationSchema,
20095
20159
  relativePath: string$2()
20096
- }), string$2()), method(object({
20160
+ }), string$2(), { auth: "admin" }), method(object({
20097
20161
  location: StorageLocationSchema,
20098
20162
  relativePath: string$2(),
20099
20163
  data: _instanceof(Uint8Array)
20100
- }), _void(), { kind: "mutation" }), method(object({
20164
+ }), _void(), {
20165
+ kind: "mutation",
20166
+ auth: "admin"
20167
+ }), method(object({
20101
20168
  location: StorageLocationSchema,
20102
20169
  relativePath: string$2()
20103
- }), _instanceof(Uint8Array)), method(object({
20170
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
20104
20171
  location: StorageLocationSchema,
20105
20172
  relativePath: string$2()
20106
- }), boolean()), method(object({
20173
+ }), boolean(), { auth: "admin" }), method(object({
20107
20174
  location: StorageLocationSchema,
20108
20175
  prefix: string$2().optional()
20109
- }), array(string$2()).readonly()), method(object({
20176
+ }), array(string$2()).readonly(), { auth: "admin" }), method(object({
20110
20177
  location: StorageLocationSchema,
20111
20178
  relativePath: string$2()
20112
- }), _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" });
20179
+ }), _void(), {
20180
+ kind: "mutation",
20181
+ auth: "admin"
20182
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20183
+ kind: "mutation",
20184
+ auth: "admin"
20185
+ }), method(WriteChunkInputSchema, _void(), {
20186
+ kind: "mutation",
20187
+ auth: "admin"
20188
+ }), method(FinalizeUploadInputSchema, _void(), {
20189
+ kind: "mutation",
20190
+ auth: "admin"
20191
+ }), method(AbortUploadInputSchema, _void(), {
20192
+ kind: "mutation",
20193
+ auth: "admin"
20194
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20195
+ kind: "mutation",
20196
+ auth: "admin"
20197
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20198
+ kind: "mutation",
20199
+ auth: "admin"
20200
+ });
20113
20201
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
20114
20202
  var ProfileSettingsSchemaBridge = unknown().nullable();
20115
20203
  var ProfileSettingsBagSchema = record(string$2(), unknown());
@@ -20367,7 +20455,8 @@ method(object({
20367
20455
  access: "create"
20368
20456
  }), method(object({ userId: string$2().optional() }), object({ optionsJSON: record(string$2(), unknown()) }), {
20369
20457
  kind: "mutation",
20370
- access: "view"
20458
+ access: "view",
20459
+ auth: "admin"
20371
20460
  }), method(object({
20372
20461
  /** Required — the user the assertion belongs to (verified). */
20373
20462
  userId: string$2(),
@@ -20375,10 +20464,12 @@ method(object({
20375
20464
  response: record(string$2(), unknown())
20376
20465
  }), object({ verified: boolean() }), {
20377
20466
  kind: "mutation",
20378
- access: "view"
20467
+ access: "view",
20468
+ auth: "admin"
20379
20469
  }), method(object({}), object({ optionsJSON: record(string$2(), unknown()) }), {
20380
20470
  kind: "mutation",
20381
- access: "view"
20471
+ access: "view",
20472
+ auth: "admin"
20382
20473
  }), method(object({
20383
20474
  /** AuthenticationResponseJSON from the browser. */
20384
20475
  response: record(string$2(), unknown()) }), object({
@@ -20386,7 +20477,8 @@ response: record(string$2(), unknown()) }), object({
20386
20477
  userId: string$2().nullable()
20387
20478
  }), {
20388
20479
  kind: "mutation",
20389
- access: "view"
20480
+ access: "view",
20481
+ auth: "admin"
20390
20482
  }), method(object({ userId: string$2() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20391
20483
  userId: string$2(),
20392
20484
  credentialId: string$2()
@@ -20558,7 +20650,19 @@ var VectorStatsResultSchema = object({
20558
20650
  /** False when the backend ranks approximately. */
20559
20651
  exact: boolean()
20560
20652
  });
20561
- 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);
20653
+ method(VectorDeclareIndexInputSchema, _void(), {
20654
+ kind: "mutation",
20655
+ auth: "admin"
20656
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20657
+ kind: "mutation",
20658
+ auth: "admin"
20659
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20660
+ kind: "mutation",
20661
+ auth: "admin"
20662
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20663
+ kind: "mutation",
20664
+ auth: "admin"
20665
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20562
20666
  var ClipSchema = object({
20563
20667
  /** Opaque, provider-namespaced id. The default provider encodes the time
20564
20668
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -23028,7 +23132,27 @@ var MediaFileLiteSchema$1 = object({
23028
23132
  sizeBytes: number(),
23029
23133
  timestamp: number()
23030
23134
  });
23031
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string$2().min(1) }), IdentitySchema, {
23135
+ method(object({
23136
+ /**
23137
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23138
+ *
23139
+ * Default `false`, the same inversion `listRecentFaces` and
23140
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23141
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23142
+ * on the live hub the same day: four identities cost 40,979 B with the
23143
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23144
+ * four times and the viewer holds at `staleTime: 30_000`.
23145
+ *
23146
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23147
+ * the `event-media` plane serves that key `immutable` with an ETag.
23148
+ *
23149
+ * **This is an INPUT field, so it does not reach the addon until the
23150
+ * next train** — the hub router validates cap inputs against its own
23151
+ * compiled Zod and strips a key it does not know. Until then the
23152
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23153
+ * is what ships, and the opt-in becomes reachable when the train lands.
23154
+ */
23155
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string$2().min(1) }), IdentitySchema, {
23032
23156
  kind: "mutation",
23033
23157
  auth: "admin"
23034
23158
  }), method(object({
@@ -25918,8 +26042,10 @@ var PlateInfoSchema = object({
25918
26042
  keyFrameMediaKey: string$2().optional(),
25919
26043
  base64: string$2().optional(),
25920
26044
  /**
25921
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
25922
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26045
+ * Same crop as a data-plane URL, always present when the plate has a stored
26046
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
26047
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
26048
+ * left at its `true` default.
25923
26049
  */
25924
26050
  cropUrl: string$2().optional()
25925
26051
  });
@@ -25939,14 +26065,34 @@ var PlateClusterSchema = object({
25939
26065
  });
25940
26066
  method(object({
25941
26067
  deviceId: number().int().optional(),
25942
- limit: number().int().positive().optional()
26068
+ limit: number().int().positive().optional(),
26069
+ /**
26070
+ * Inline the base64 crop on every row. Default `true` — the existing
26071
+ * behaviour, kept so no caller breaks.
26072
+ *
26073
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
26074
+ * Measured on the live hub at the 500 rows the Plates view asks for:
26075
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
26076
+ * metadata without them — and the browser then caches the images.
26077
+ *
26078
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
26079
+ * plates were the one gallery list left without it.
26080
+ *
26081
+ * **This is an INPUT field, so it does not reach the addon until the
26082
+ * next train.** The hub router validates cap inputs against its own
26083
+ * compiled Zod and strips a key it does not know. Until the train
26084
+ * ships, sending `false` is harmless and keeps the crops inline.
26085
+ */
26086
+ includeCrops: boolean().optional()
25943
26087
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
25944
26088
  deviceId: number().int(),
25945
26089
  trackId: string$2()
25946
26090
  }), PlateInfoSchema.nullable()), method(object({ plateId: string$2() }), array(MediaFileLiteSchema).readonly()), method(object({
25947
26091
  text: string$2().min(1),
25948
26092
  maxDistance: number().int().min(0).optional(),
25949
- limit: number().int().positive().optional()
26093
+ limit: number().int().positive().optional(),
26094
+ /** See `listPlates.includeCrops`. Default `true`. */
26095
+ includeCrops: boolean().optional()
25950
26096
  }), array(PlateInfoSchema).readonly()), method(object({
25951
26097
  maxDistance: number().int().min(0).optional(),
25952
26098
  minClusterSize: number().int().min(2).optional(),
@@ -25960,7 +26106,13 @@ method(object({
25960
26106
  }), method(object({ plateId: string$2() }), _void(), {
25961
26107
  kind: "mutation",
25962
26108
  auth: "admin"
25963
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
26109
+ }), method(object({
26110
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
26111
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
26112
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
26113
+ * INPUT field: stripped by the hub router until the train ships, which
26114
+ * resolves to `false` and is exactly the intended default. */
26115
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string$2().min(1) }), VehicleSchema, {
25964
26116
  kind: "mutation",
25965
26117
  auth: "admin"
25966
26118
  }), method(object({
@@ -33221,6 +33373,12 @@ Object.freeze({
33221
33373
  addonId: null,
33222
33374
  access: "create"
33223
33375
  },
33376
+ "pipelineAnalytics.cancelRelocateMedia": {
33377
+ capName: "pipeline-analytics",
33378
+ capScope: "device",
33379
+ addonId: null,
33380
+ access: "create"
33381
+ },
33224
33382
  "pipelineAnalytics.cancelStorageMigrationMove": {
33225
33383
  capName: "pipeline-analytics",
33226
33384
  capScope: "device",
@@ -33395,6 +33553,12 @@ Object.freeze({
33395
33553
  addonId: null,
33396
33554
  access: "view"
33397
33555
  },
33556
+ "pipelineAnalytics.listRelocateMediaJobs": {
33557
+ capName: "pipeline-analytics",
33558
+ capScope: "device",
33559
+ addonId: null,
33560
+ access: "view"
33561
+ },
33398
33562
  "pipelineAnalytics.listRetrainAnnotations": {
33399
33563
  capName: "pipeline-analytics",
33400
33564
  capScope: "device",
@@ -33473,6 +33637,12 @@ Object.freeze({
33473
33637
  addonId: null,
33474
33638
  access: "create"
33475
33639
  },
33640
+ "pipelineAnalytics.relocateMedia": {
33641
+ capName: "pipeline-analytics",
33642
+ capScope: "device",
33643
+ addonId: null,
33644
+ access: "create"
33645
+ },
33476
33646
  "pipelineAnalytics.restageRetrainTrack": {
33477
33647
  capName: "pipeline-analytics",
33478
33648
  capScope: "device",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.27",
3
+ "version": "0.2.28",
4
4
  "description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
5
5
  "keywords": [
6
6
  "camstack",