@camstack/addon-terminal 0.1.33 → 0.1.34

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 +253 -80
  2. package/dist/addon.mjs +253 -80
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -6721,7 +6721,7 @@ function method(input, output, options) {
6721
6721
  input,
6722
6722
  output,
6723
6723
  kind: options?.kind ?? "query",
6724
- auth: options?.auth ?? "protected",
6724
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6725
6725
  ...options?.access !== void 0 ? { access: options.access } : {},
6726
6726
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6727
6727
  timeoutMs: options?.timeoutMs
@@ -6745,7 +6745,7 @@ function event(data) {
6745
6745
  }
6746
6746
  var StaticDirOutputSchema$1 = object({ staticDir: string() });
6747
6747
  var VersionOutputSchema$1 = object({ version: string() });
6748
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6748
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6749
6749
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6750
6750
  DeviceType["Camera"] = "camera";
6751
6751
  DeviceType["Hub"] = "hub";
@@ -7066,7 +7066,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
7066
7066
  }({});
7067
7067
  var StaticDirOutputSchema = object({ staticDir: string() });
7068
7068
  var VersionOutputSchema = object({ version: string() });
7069
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7069
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
7070
7070
  /**
7071
7071
  * device-ops — device-scoped cap that unifies the per-IDevice operations
7072
7072
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7700,24 +7700,6 @@ var RecordingRetentionSchema = object({
7700
7700
  maxSizeGb: number().min(0).optional()
7701
7701
  });
7702
7702
  /**
7703
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7704
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7705
- * previews at. Five graduated steps; absent on a config = `standard` (the
7706
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7707
- *
7708
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7709
- * Each window's index sidecar carries its own tile dims, so a camera whose
7710
- * preset changed over time renders every historical window at the dims it was
7711
- * written with.
7712
- */
7713
- var ScrubThumbnailPresetSchema = _enum([
7714
- "minimal",
7715
- "low",
7716
- "standard",
7717
- "high",
7718
- "max"
7719
- ]);
7720
- /**
7721
7703
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7722
7704
  *
7723
7705
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7725,7 +7707,11 @@ var ScrubThumbnailPresetSchema = _enum([
7725
7707
  * other field is a storage knob (profiles, segment length, retention, scrub).
7726
7708
  *
7727
7709
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7728
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7710
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7711
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7712
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7713
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7714
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7729
7715
  * A stale caller must fail loudly — silently stripping its legacy intent would
7730
7716
  * persist a band-less config, i.e. silently stop recording the camera.
7731
7717
  */
@@ -7748,14 +7734,7 @@ var RecordingConfigSchema = object({
7748
7734
  * "off" is the absence of a covering band, never a band value.
7749
7735
  */
7750
7736
  bands: array(RecordingBandSchema).default([]),
7751
- retention: RecordingRetentionSchema.optional(),
7752
- /**
7753
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7754
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7755
- * windows only — existing sheets are immutable, and each window's index
7756
- * carries its own tile dims so mixed-preset history renders correctly.
7757
- */
7758
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7737
+ retention: RecordingRetentionSchema.optional()
7759
7738
  }).strict();
7760
7739
  /**
7761
7740
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7831,10 +7810,11 @@ var RelocateFootageInputSchema = object({
7831
7810
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7832
7811
  var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7833
7812
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7834
- var StorageMigrationMediaMoveInputSchema = object({
7813
+ var RelocateMediaInputSchema = object({
7835
7814
  toLocationId: string(),
7836
7815
  throttleMbps: number().min(1).max(1e3).optional()
7837
- }).extend({ leaseId: string().min(1) });
7816
+ });
7817
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
7838
7818
  /** The independently selectable logical storage classes. `recordings`
7839
7819
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7840
7820
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8129,7 +8109,26 @@ var LabelDefinitionSchema = object({
8129
8109
  description: string().optional(),
8130
8110
  icon: string().optional()
8131
8111
  });
8132
- var ClassMapDefinitionSchema = object({
8112
+ /**
8113
+ * Wire schema for a per-model CATALOG classMap override
8114
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8115
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8116
+ * detection pipeline executor actually routes.
8117
+ *
8118
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8119
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8120
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8121
+ * enum) — the two used to share the name `ClassMapDefinition`/
8122
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8123
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8124
+ * are not: it is two different concepts colliding on a name. Keep this type
8125
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8126
+ * would either narrow every `ClassMapDefinition` consumer to the four
8127
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8128
+ * schema exists for (see the "rejects a classMap whose target is not a
8129
+ * detection macro" test in `model-catalog-schema.test.ts`).
8130
+ */
8131
+ var DetectionCatalogClassMapSchema = object({
8133
8132
  mapping: record(string(), _enum([
8134
8133
  "person",
8135
8134
  "vehicle",
@@ -8334,7 +8333,7 @@ var ModelCatalogEntrySchema = object({
8334
8333
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8335
8334
  * labels already ARE the CamStack macros (Scrypted identity map).
8336
8335
  */
8337
- classMap: ClassMapDefinitionSchema.optional()
8336
+ classMap: DetectionCatalogClassMapSchema.optional()
8338
8337
  });
8339
8338
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8340
8339
  format: literal("openvino"),
@@ -8364,7 +8363,7 @@ var ModelConvertMetadataSchema = object({
8364
8363
  "segmentation"
8365
8364
  ]),
8366
8365
  faceAlignment: boolean().optional(),
8367
- classMap: ClassMapDefinitionSchema.optional()
8366
+ classMap: DetectionCatalogClassMapSchema.optional()
8368
8367
  });
8369
8368
  var ConvertResultSchema = object({
8370
8369
  entry: ModelCatalogEntrySchema,
@@ -9227,7 +9226,7 @@ var AddonPageDeclarationSchema = object({
9227
9226
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9228
9227
  sectionLabel: string().optional()
9229
9228
  });
9230
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9229
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9231
9230
  var AddonHttpRouteSchema = object({
9232
9231
  method: _enum([
9233
9232
  "GET",
@@ -9462,7 +9461,7 @@ var WidgetMetadataSchema = object({
9462
9461
  defaultColumns: number().int().min(1).max(12).default(6),
9463
9462
  defaultRows: number().int().min(1).max(12).default(1)
9464
9463
  });
9465
- method(_void(), array(WidgetMetadataSchema).readonly());
9464
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9466
9465
  /**
9467
9466
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9468
9467
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11086,7 +11085,7 @@ var CustomModelDescriptorSchema = object({
11086
11085
  stepId: string(),
11087
11086
  entry: ModelCatalogEntrySchema
11088
11087
  });
11089
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11088
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11090
11089
  /**
11091
11090
  * Query filter for settings-store collections.
11092
11091
  */
@@ -11173,7 +11172,8 @@ method(object({
11173
11172
  }), _void(), { kind: "mutation" }), method(object({
11174
11173
  namespace: string().optional(),
11175
11174
  collection: string(),
11176
- filter: QueryFilterSchema.optional()
11175
+ filter: QueryFilterSchema.optional(),
11176
+ columns: array(string()).readonly().optional()
11177
11177
  }), array(SettingsRecordSchema).readonly()), method(object({
11178
11178
  namespace: string().optional(),
11179
11179
  collection: string(),
@@ -11236,46 +11236,87 @@ var EngineInfoSchema = object({
11236
11236
  kind: _enum(["relational", "vector"]),
11237
11237
  displayName: string()
11238
11238
  });
11239
- method(_void(), EngineInfoSchema), method(object({
11239
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11240
11240
  namespace: string().optional(),
11241
11241
  collection: string(),
11242
11242
  key: string()
11243
- }), unknown()), method(object({
11243
+ }), unknown(), { auth: "admin" }), method(object({
11244
11244
  namespace: string().optional(),
11245
11245
  collection: string(),
11246
11246
  key: string(),
11247
11247
  value: unknown()
11248
- }), _void(), { kind: "mutation" }), method(object({
11248
+ }), _void(), {
11249
+ kind: "mutation",
11250
+ auth: "admin"
11251
+ }), method(object({
11249
11252
  namespace: string().optional(),
11250
11253
  collection: string(),
11251
- filter: QueryFilterSchema.optional()
11252
- }), array(SettingsRecordSchema).readonly()), method(object({
11254
+ filter: QueryFilterSchema.optional(),
11255
+ /**
11256
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11257
+ *
11258
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11259
+ * was wrong — corrected 2026-08-26 after the hop map
11260
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11261
+ * There is **no Zod parse at all** between the door and the engine: the
11262
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11263
+ * field declared here reaches `SqliteSettingsBackend` either way.
11264
+ *
11265
+ * What actually lost `columns` was the THIRD declaration of this shape:
11266
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11267
+ * interface the engine destructures from. The field existed on both
11268
+ * schemas and the engine still never read it, because nothing checks a
11269
+ * registered provider against `InferProvider<cap>` —
11270
+ * `ProviderRegistration.provider` is typed `object`.
11271
+ *
11272
+ * It is declared here anyway, and must stay in step with
11273
+ * `settings-store.query`: a caller reading only the cap definitions has
11274
+ * to be able to see that this call carries a projection.
11275
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11276
+ */
11277
+ columns: array(string()).readonly().optional()
11278
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11253
11279
  namespace: string().optional(),
11254
11280
  collection: string(),
11255
11281
  record: SettingsRecordSchema
11256
- }), _void(), { kind: "mutation" }), method(object({
11282
+ }), _void(), {
11283
+ kind: "mutation",
11284
+ auth: "admin"
11285
+ }), method(object({
11257
11286
  namespace: string().optional(),
11258
11287
  collection: string(),
11259
11288
  id: string(),
11260
11289
  data: record(string(), unknown())
11261
- }), _void(), { kind: "mutation" }), method(object({
11290
+ }), _void(), {
11291
+ kind: "mutation",
11292
+ auth: "admin"
11293
+ }), method(object({
11262
11294
  namespace: string().optional(),
11263
11295
  collection: string(),
11264
11296
  key: string()
11265
- }), _void(), { kind: "mutation" }), method(object({
11297
+ }), _void(), {
11298
+ kind: "mutation",
11299
+ auth: "admin"
11300
+ }), method(object({
11266
11301
  namespace: string().optional(),
11267
11302
  collection: string(),
11268
11303
  filter: MutationFilterSchema
11269
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11304
+ }), object({ deleted: number().int() }), {
11305
+ kind: "mutation",
11306
+ auth: "admin"
11307
+ }), method(object({
11270
11308
  namespace: string().optional(),
11271
11309
  collection: string(),
11272
11310
  filter: MutationFilterSchema,
11273
11311
  data: record(string(), unknown())
11274
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11312
+ }), object({ updated: number().int() }), {
11313
+ kind: "mutation",
11314
+ auth: "admin"
11315
+ }), method(object({
11275
11316
  namespace: string().optional(),
11276
11317
  collection: string(),
11277
11318
  filter: QueryFilterSchema.optional()
11278
- }), number()), method(object({
11319
+ }), number(), { auth: "admin" }), method(object({
11279
11320
  namespace: string().optional(),
11280
11321
  collection: string(),
11281
11322
  field: string(),
@@ -11285,15 +11326,18 @@ method(_void(), EngineInfoSchema), method(object({
11285
11326
  }), array(object({
11286
11327
  bucket: number().int(),
11287
11328
  count: number().int()
11288
- })).readonly()), method(object({
11329
+ })).readonly(), { auth: "admin" }), method(object({
11289
11330
  namespace: string().optional(),
11290
11331
  collection: string()
11291
- }), boolean()), method(object({
11332
+ }), boolean(), { auth: "admin" }), method(object({
11292
11333
  namespace: string().optional(),
11293
11334
  collection: string(),
11294
11335
  columns: array(CollectionColumnSchema).readonly(),
11295
11336
  indexes: array(CollectionIndexSchema).readonly().optional()
11296
- }), _void(), { kind: "mutation" });
11337
+ }), _void(), {
11338
+ kind: "mutation",
11339
+ auth: "admin"
11340
+ });
11297
11341
  /**
11298
11342
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11299
11343
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12528,7 +12572,7 @@ method(object({
12528
12572
  crop: _instanceof(Uint8Array),
12529
12573
  width: number(),
12530
12574
  height: number()
12531
- }), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12575
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12532
12576
  /**
12533
12577
  * filesystem-browse — per-node capability for browsing the node's local
12534
12578
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12821,19 +12865,22 @@ method(LlmGenerateBaseInputSchema.extend({
12821
12865
  runtime: ManagedRuntimeConfigSchema,
12822
12866
  /** The managed profile's timeout, threaded by the hub provider. */
12823
12867
  timeoutMs: number().int().positive().optional()
12824
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12868
+ }), LlmGenerateResultSchema, {
12869
+ kind: "mutation",
12870
+ auth: "admin"
12871
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12825
12872
  kind: "mutation",
12826
12873
  auth: "admin"
12827
12874
  }), method(object({}), _void(), {
12828
12875
  kind: "mutation",
12829
12876
  auth: "admin"
12830
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12877
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12831
12878
  kind: "mutation",
12832
12879
  auth: "admin"
12833
12880
  }), method(object({ file: string() }), _void(), {
12834
12881
  kind: "mutation",
12835
12882
  auth: "admin"
12836
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12883
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12837
12884
  /**
12838
12885
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12839
12886
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16344,7 +16391,7 @@ var OauthIntegrationDescriptorSchema = object({
16344
16391
  */
16345
16392
  refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
16346
16393
  });
16347
- method(_void(), OauthIntegrationDescriptorSchema);
16394
+ method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
16348
16395
  /**
16349
16396
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
16350
16397
  * per-frame detections emitted by the pipeline runner into tracked
@@ -17539,6 +17586,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17539
17586
  }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17540
17587
  kind: "mutation",
17541
17588
  auth: "admin"
17589
+ }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17590
+ kind: "mutation",
17591
+ auth: "admin"
17592
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17593
+ kind: "query",
17594
+ auth: "admin"
17595
+ }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17596
+ kind: "mutation",
17597
+ auth: "admin"
17542
17598
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17543
17599
  kind: "query",
17544
17600
  auth: "admin"
@@ -17693,6 +17749,11 @@ object({
17693
17749
  "jpeg"
17694
17750
  ])
17695
17751
  });
17752
+ /**
17753
+ * Process-local frame identity. It is serializable so it can ride an in-process
17754
+ * capability call, but `registryId` deliberately prevents resolution in any
17755
+ * other process or execution group.
17756
+ */
17696
17757
  var FrameRefSchema = object({
17697
17758
  registryId: string().min(1),
17698
17759
  id: string().min(1),
@@ -20002,7 +20063,7 @@ method(object({
20002
20063
  * linking rather than produce an eternal token.
20003
20064
  */
20004
20065
  ttlSec: union([number().int().positive(), literal("never")]).optional()
20005
- }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
20066
+ }), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
20006
20067
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
20007
20068
  providerId: string().min(1),
20008
20069
  displayName: string().min(1),
@@ -20097,10 +20158,13 @@ var EvictResultSchema = object({
20097
20158
  /** True when the provider has nothing left it is willing to drop on this location. */
20098
20159
  exhausted: boolean()
20099
20160
  });
20100
- method(object({ locationId: string() }), EvictableUsageSchema), method(object({
20161
+ method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
20101
20162
  locationId: string(),
20102
20163
  targetBytes: number().int().positive()
20103
- }), EvictResultSchema, { kind: "mutation" });
20164
+ }), EvictResultSchema, {
20165
+ kind: "mutation",
20166
+ auth: "admin"
20167
+ });
20104
20168
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
20105
20169
  kind: "mutation",
20106
20170
  auth: "admin"
@@ -20160,26 +20224,50 @@ var ReadChunkInputSchema = object({
20160
20224
  length: number()
20161
20225
  });
20162
20226
  var EndDownloadInputSchema = object({ downloadId: string() });
20163
- method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20227
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20164
20228
  location: StorageLocationSchema,
20165
20229
  relativePath: string()
20166
- }), string()), method(object({
20230
+ }), string(), { auth: "admin" }), method(object({
20167
20231
  location: StorageLocationSchema,
20168
20232
  relativePath: string(),
20169
20233
  data: _instanceof(Uint8Array)
20170
- }), _void(), { kind: "mutation" }), method(object({
20234
+ }), _void(), {
20235
+ kind: "mutation",
20236
+ auth: "admin"
20237
+ }), method(object({
20171
20238
  location: StorageLocationSchema,
20172
20239
  relativePath: string()
20173
- }), _instanceof(Uint8Array)), method(object({
20240
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
20174
20241
  location: StorageLocationSchema,
20175
20242
  relativePath: string()
20176
- }), boolean()), method(object({
20243
+ }), boolean(), { auth: "admin" }), method(object({
20177
20244
  location: StorageLocationSchema,
20178
20245
  prefix: string().optional()
20179
- }), array(string()).readonly()), method(object({
20246
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
20180
20247
  location: StorageLocationSchema,
20181
20248
  relativePath: string()
20182
- }), _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" });
20249
+ }), _void(), {
20250
+ kind: "mutation",
20251
+ auth: "admin"
20252
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20253
+ kind: "mutation",
20254
+ auth: "admin"
20255
+ }), method(WriteChunkInputSchema, _void(), {
20256
+ kind: "mutation",
20257
+ auth: "admin"
20258
+ }), method(FinalizeUploadInputSchema, _void(), {
20259
+ kind: "mutation",
20260
+ auth: "admin"
20261
+ }), method(AbortUploadInputSchema, _void(), {
20262
+ kind: "mutation",
20263
+ auth: "admin"
20264
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20265
+ kind: "mutation",
20266
+ auth: "admin"
20267
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20268
+ kind: "mutation",
20269
+ auth: "admin"
20270
+ });
20183
20271
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
20184
20272
  var ProfileSettingsSchemaBridge = unknown().nullable();
20185
20273
  var ProfileSettingsBagSchema = record(string(), unknown());
@@ -20481,7 +20569,8 @@ method(object({
20481
20569
  access: "create"
20482
20570
  }), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
20483
20571
  kind: "mutation",
20484
- access: "view"
20572
+ access: "view",
20573
+ auth: "admin"
20485
20574
  }), method(object({
20486
20575
  /** Required — the user the assertion belongs to (verified). */
20487
20576
  userId: string(),
@@ -20489,10 +20578,12 @@ method(object({
20489
20578
  response: record(string(), unknown())
20490
20579
  }), object({ verified: boolean() }), {
20491
20580
  kind: "mutation",
20492
- access: "view"
20581
+ access: "view",
20582
+ auth: "admin"
20493
20583
  }), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
20494
20584
  kind: "mutation",
20495
- access: "view"
20585
+ access: "view",
20586
+ auth: "admin"
20496
20587
  }), method(object({
20497
20588
  /** AuthenticationResponseJSON from the browser. */
20498
20589
  response: record(string(), unknown()) }), object({
@@ -20500,7 +20591,8 @@ response: record(string(), unknown()) }), object({
20500
20591
  userId: string().nullable()
20501
20592
  }), {
20502
20593
  kind: "mutation",
20503
- access: "view"
20594
+ access: "view",
20595
+ auth: "admin"
20504
20596
  }), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20505
20597
  userId: string(),
20506
20598
  credentialId: string()
@@ -20672,7 +20764,19 @@ var VectorStatsResultSchema = object({
20672
20764
  /** False when the backend ranks approximately. */
20673
20765
  exact: boolean()
20674
20766
  });
20675
- 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);
20767
+ method(VectorDeclareIndexInputSchema, _void(), {
20768
+ kind: "mutation",
20769
+ auth: "admin"
20770
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20771
+ kind: "mutation",
20772
+ auth: "admin"
20773
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20774
+ kind: "mutation",
20775
+ auth: "admin"
20776
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20777
+ kind: "mutation",
20778
+ auth: "admin"
20779
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20676
20780
  var ClipSchema = object({
20677
20781
  /** Opaque, provider-namespaced id. The default provider encodes the time
20678
20782
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -23125,7 +23229,27 @@ var MediaFileLiteSchema$1 = object({
23125
23229
  sizeBytes: number(),
23126
23230
  timestamp: number()
23127
23231
  });
23128
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
23232
+ method(object({
23233
+ /**
23234
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23235
+ *
23236
+ * Default `false`, the same inversion `listRecentFaces` and
23237
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23238
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23239
+ * on the live hub the same day: four identities cost 40,979 B with the
23240
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23241
+ * four times and the viewer holds at `staleTime: 30_000`.
23242
+ *
23243
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23244
+ * the `event-media` plane serves that key `immutable` with an ETag.
23245
+ *
23246
+ * **This is an INPUT field, so it does not reach the addon until the
23247
+ * next train** — the hub router validates cap inputs against its own
23248
+ * compiled Zod and strips a key it does not know. Until then the
23249
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23250
+ * is what ships, and the opt-in becomes reachable when the train lands.
23251
+ */
23252
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
23129
23253
  kind: "mutation",
23130
23254
  auth: "admin"
23131
23255
  }), method(object({
@@ -26015,8 +26139,10 @@ var PlateInfoSchema = object({
26015
26139
  keyFrameMediaKey: string().optional(),
26016
26140
  base64: string().optional(),
26017
26141
  /**
26018
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
26019
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26142
+ * Same crop as a data-plane URL, always present when the plate has a stored
26143
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
26144
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
26145
+ * left at its `true` default.
26020
26146
  */
26021
26147
  cropUrl: string().optional()
26022
26148
  });
@@ -26036,14 +26162,34 @@ var PlateClusterSchema = object({
26036
26162
  });
26037
26163
  method(object({
26038
26164
  deviceId: number().int().optional(),
26039
- limit: number().int().positive().optional()
26165
+ limit: number().int().positive().optional(),
26166
+ /**
26167
+ * Inline the base64 crop on every row. Default `true` — the existing
26168
+ * behaviour, kept so no caller breaks.
26169
+ *
26170
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
26171
+ * Measured on the live hub at the 500 rows the Plates view asks for:
26172
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
26173
+ * metadata without them — and the browser then caches the images.
26174
+ *
26175
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
26176
+ * plates were the one gallery list left without it.
26177
+ *
26178
+ * **This is an INPUT field, so it does not reach the addon until the
26179
+ * next train.** The hub router validates cap inputs against its own
26180
+ * compiled Zod and strips a key it does not know. Until the train
26181
+ * ships, sending `false` is harmless and keeps the crops inline.
26182
+ */
26183
+ includeCrops: boolean().optional()
26040
26184
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
26041
26185
  deviceId: number().int(),
26042
26186
  trackId: string()
26043
26187
  }), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
26044
26188
  text: string().min(1),
26045
26189
  maxDistance: number().int().min(0).optional(),
26046
- limit: number().int().positive().optional()
26190
+ limit: number().int().positive().optional(),
26191
+ /** See `listPlates.includeCrops`. Default `true`. */
26192
+ includeCrops: boolean().optional()
26047
26193
  }), array(PlateInfoSchema).readonly()), method(object({
26048
26194
  maxDistance: number().int().min(0).optional(),
26049
26195
  minClusterSize: number().int().min(2).optional(),
@@ -26057,7 +26203,13 @@ method(object({
26057
26203
  }), method(object({ plateId: string() }), _void(), {
26058
26204
  kind: "mutation",
26059
26205
  auth: "admin"
26060
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26206
+ }), method(object({
26207
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
26208
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
26209
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
26210
+ * INPUT field: stripped by the hub router until the train ships, which
26211
+ * resolves to `false` and is exactly the intended default. */
26212
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26061
26213
  kind: "mutation",
26062
26214
  auth: "admin"
26063
26215
  }), method(object({
@@ -33316,6 +33468,12 @@ Object.freeze({
33316
33468
  addonId: null,
33317
33469
  access: "create"
33318
33470
  },
33471
+ "pipelineAnalytics.cancelRelocateMedia": {
33472
+ capName: "pipeline-analytics",
33473
+ capScope: "device",
33474
+ addonId: null,
33475
+ access: "create"
33476
+ },
33319
33477
  "pipelineAnalytics.cancelStorageMigrationMove": {
33320
33478
  capName: "pipeline-analytics",
33321
33479
  capScope: "device",
@@ -33490,6 +33648,12 @@ Object.freeze({
33490
33648
  addonId: null,
33491
33649
  access: "view"
33492
33650
  },
33651
+ "pipelineAnalytics.listRelocateMediaJobs": {
33652
+ capName: "pipeline-analytics",
33653
+ capScope: "device",
33654
+ addonId: null,
33655
+ access: "view"
33656
+ },
33493
33657
  "pipelineAnalytics.listRetrainAnnotations": {
33494
33658
  capName: "pipeline-analytics",
33495
33659
  capScope: "device",
@@ -33568,6 +33732,12 @@ Object.freeze({
33568
33732
  addonId: null,
33569
33733
  access: "create"
33570
33734
  },
33735
+ "pipelineAnalytics.relocateMedia": {
33736
+ capName: "pipeline-analytics",
33737
+ capScope: "device",
33738
+ addonId: null,
33739
+ access: "create"
33740
+ },
33571
33741
  "pipelineAnalytics.restageRetrainTrack": {
33572
33742
  capName: "pipeline-analytics",
33573
33743
  capScope: "device",
@@ -44431,7 +44601,10 @@ function sanitizeProfileSettings(profileId, raw) {
44431
44601
  showContainers: true,
44432
44602
  showSensors: true
44433
44603
  };
44434
- for (const plugin of GLANCES_PLUGINS) if (typeof bag[plugin.key] === "boolean") out[plugin.key] = bag[plugin.key];
44604
+ for (const plugin of GLANCES_PLUGINS) {
44605
+ const value = bag[plugin.key];
44606
+ if (typeof value === "boolean") out[plugin.key] = value;
44607
+ }
44435
44608
  return out;
44436
44609
  }
44437
44610
  function profileSettingsToArgs(profileId, settings) {
package/dist/addon.mjs CHANGED
@@ -6698,7 +6698,7 @@ function method(input, output, options) {
6698
6698
  input,
6699
6699
  output,
6700
6700
  kind: options?.kind ?? "query",
6701
- auth: options?.auth ?? "protected",
6701
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6702
6702
  ...options?.access !== void 0 ? { access: options.access } : {},
6703
6703
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6704
6704
  timeoutMs: options?.timeoutMs
@@ -6722,7 +6722,7 @@ function event(data) {
6722
6722
  }
6723
6723
  var StaticDirOutputSchema$1 = object({ staticDir: string() });
6724
6724
  var VersionOutputSchema$1 = object({ version: string() });
6725
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6725
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6726
6726
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6727
6727
  DeviceType["Camera"] = "camera";
6728
6728
  DeviceType["Hub"] = "hub";
@@ -7043,7 +7043,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
7043
7043
  }({});
7044
7044
  var StaticDirOutputSchema = object({ staticDir: string() });
7045
7045
  var VersionOutputSchema = object({ version: string() });
7046
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7046
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
7047
7047
  /**
7048
7048
  * device-ops — device-scoped cap that unifies the per-IDevice operations
7049
7049
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7677,24 +7677,6 @@ var RecordingRetentionSchema = object({
7677
7677
  maxSizeGb: number().min(0).optional()
7678
7678
  });
7679
7679
  /**
7680
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7681
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7682
- * previews at. Five graduated steps; absent on a config = `standard` (the
7683
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7684
- *
7685
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7686
- * Each window's index sidecar carries its own tile dims, so a camera whose
7687
- * preset changed over time renders every historical window at the dims it was
7688
- * written with.
7689
- */
7690
- var ScrubThumbnailPresetSchema = _enum([
7691
- "minimal",
7692
- "low",
7693
- "standard",
7694
- "high",
7695
- "max"
7696
- ]);
7697
- /**
7698
7680
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7699
7681
  *
7700
7682
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7702,7 +7684,11 @@ var ScrubThumbnailPresetSchema = _enum([
7702
7684
  * other field is a storage knob (profiles, segment length, retention, scrub).
7703
7685
  *
7704
7686
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7705
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7687
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7688
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7689
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7690
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7691
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7706
7692
  * A stale caller must fail loudly — silently stripping its legacy intent would
7707
7693
  * persist a band-less config, i.e. silently stop recording the camera.
7708
7694
  */
@@ -7725,14 +7711,7 @@ var RecordingConfigSchema = object({
7725
7711
  * "off" is the absence of a covering band, never a band value.
7726
7712
  */
7727
7713
  bands: array(RecordingBandSchema).default([]),
7728
- retention: RecordingRetentionSchema.optional(),
7729
- /**
7730
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7731
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7732
- * windows only — existing sheets are immutable, and each window's index
7733
- * carries its own tile dims so mixed-preset history renders correctly.
7734
- */
7735
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7714
+ retention: RecordingRetentionSchema.optional()
7736
7715
  }).strict();
7737
7716
  /**
7738
7717
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7808,10 +7787,11 @@ var RelocateFootageInputSchema = object({
7808
7787
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7809
7788
  var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7810
7789
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7811
- var StorageMigrationMediaMoveInputSchema = object({
7790
+ var RelocateMediaInputSchema = object({
7812
7791
  toLocationId: string(),
7813
7792
  throttleMbps: number().min(1).max(1e3).optional()
7814
- }).extend({ leaseId: string().min(1) });
7793
+ });
7794
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
7815
7795
  /** The independently selectable logical storage classes. `recordings`
7816
7796
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7817
7797
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8106,7 +8086,26 @@ var LabelDefinitionSchema = object({
8106
8086
  description: string().optional(),
8107
8087
  icon: string().optional()
8108
8088
  });
8109
- var ClassMapDefinitionSchema = object({
8089
+ /**
8090
+ * Wire schema for a per-model CATALOG classMap override
8091
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8092
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8093
+ * detection pipeline executor actually routes.
8094
+ *
8095
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8096
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8097
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8098
+ * enum) — the two used to share the name `ClassMapDefinition`/
8099
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8100
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8101
+ * are not: it is two different concepts colliding on a name. Keep this type
8102
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8103
+ * would either narrow every `ClassMapDefinition` consumer to the four
8104
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8105
+ * schema exists for (see the "rejects a classMap whose target is not a
8106
+ * detection macro" test in `model-catalog-schema.test.ts`).
8107
+ */
8108
+ var DetectionCatalogClassMapSchema = object({
8110
8109
  mapping: record(string(), _enum([
8111
8110
  "person",
8112
8111
  "vehicle",
@@ -8311,7 +8310,7 @@ var ModelCatalogEntrySchema = object({
8311
8310
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8312
8311
  * labels already ARE the CamStack macros (Scrypted identity map).
8313
8312
  */
8314
- classMap: ClassMapDefinitionSchema.optional()
8313
+ classMap: DetectionCatalogClassMapSchema.optional()
8315
8314
  });
8316
8315
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8317
8316
  format: literal("openvino"),
@@ -8341,7 +8340,7 @@ var ModelConvertMetadataSchema = object({
8341
8340
  "segmentation"
8342
8341
  ]),
8343
8342
  faceAlignment: boolean().optional(),
8344
- classMap: ClassMapDefinitionSchema.optional()
8343
+ classMap: DetectionCatalogClassMapSchema.optional()
8345
8344
  });
8346
8345
  var ConvertResultSchema = object({
8347
8346
  entry: ModelCatalogEntrySchema,
@@ -9204,7 +9203,7 @@ var AddonPageDeclarationSchema = object({
9204
9203
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9205
9204
  sectionLabel: string().optional()
9206
9205
  });
9207
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9206
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9208
9207
  var AddonHttpRouteSchema = object({
9209
9208
  method: _enum([
9210
9209
  "GET",
@@ -9439,7 +9438,7 @@ var WidgetMetadataSchema = object({
9439
9438
  defaultColumns: number().int().min(1).max(12).default(6),
9440
9439
  defaultRows: number().int().min(1).max(12).default(1)
9441
9440
  });
9442
- method(_void(), array(WidgetMetadataSchema).readonly());
9441
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9443
9442
  /**
9444
9443
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9445
9444
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11063,7 +11062,7 @@ var CustomModelDescriptorSchema = object({
11063
11062
  stepId: string(),
11064
11063
  entry: ModelCatalogEntrySchema
11065
11064
  });
11066
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11065
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11067
11066
  /**
11068
11067
  * Query filter for settings-store collections.
11069
11068
  */
@@ -11150,7 +11149,8 @@ method(object({
11150
11149
  }), _void(), { kind: "mutation" }), method(object({
11151
11150
  namespace: string().optional(),
11152
11151
  collection: string(),
11153
- filter: QueryFilterSchema.optional()
11152
+ filter: QueryFilterSchema.optional(),
11153
+ columns: array(string()).readonly().optional()
11154
11154
  }), array(SettingsRecordSchema).readonly()), method(object({
11155
11155
  namespace: string().optional(),
11156
11156
  collection: string(),
@@ -11213,46 +11213,87 @@ var EngineInfoSchema = object({
11213
11213
  kind: _enum(["relational", "vector"]),
11214
11214
  displayName: string()
11215
11215
  });
11216
- method(_void(), EngineInfoSchema), method(object({
11216
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11217
11217
  namespace: string().optional(),
11218
11218
  collection: string(),
11219
11219
  key: string()
11220
- }), unknown()), method(object({
11220
+ }), unknown(), { auth: "admin" }), method(object({
11221
11221
  namespace: string().optional(),
11222
11222
  collection: string(),
11223
11223
  key: string(),
11224
11224
  value: unknown()
11225
- }), _void(), { kind: "mutation" }), method(object({
11225
+ }), _void(), {
11226
+ kind: "mutation",
11227
+ auth: "admin"
11228
+ }), method(object({
11226
11229
  namespace: string().optional(),
11227
11230
  collection: string(),
11228
- filter: QueryFilterSchema.optional()
11229
- }), array(SettingsRecordSchema).readonly()), method(object({
11231
+ filter: QueryFilterSchema.optional(),
11232
+ /**
11233
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11234
+ *
11235
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11236
+ * was wrong — corrected 2026-08-26 after the hop map
11237
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11238
+ * There is **no Zod parse at all** between the door and the engine: the
11239
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11240
+ * field declared here reaches `SqliteSettingsBackend` either way.
11241
+ *
11242
+ * What actually lost `columns` was the THIRD declaration of this shape:
11243
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11244
+ * interface the engine destructures from. The field existed on both
11245
+ * schemas and the engine still never read it, because nothing checks a
11246
+ * registered provider against `InferProvider<cap>` —
11247
+ * `ProviderRegistration.provider` is typed `object`.
11248
+ *
11249
+ * It is declared here anyway, and must stay in step with
11250
+ * `settings-store.query`: a caller reading only the cap definitions has
11251
+ * to be able to see that this call carries a projection.
11252
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11253
+ */
11254
+ columns: array(string()).readonly().optional()
11255
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11230
11256
  namespace: string().optional(),
11231
11257
  collection: string(),
11232
11258
  record: SettingsRecordSchema
11233
- }), _void(), { kind: "mutation" }), method(object({
11259
+ }), _void(), {
11260
+ kind: "mutation",
11261
+ auth: "admin"
11262
+ }), method(object({
11234
11263
  namespace: string().optional(),
11235
11264
  collection: string(),
11236
11265
  id: string(),
11237
11266
  data: record(string(), unknown())
11238
- }), _void(), { kind: "mutation" }), method(object({
11267
+ }), _void(), {
11268
+ kind: "mutation",
11269
+ auth: "admin"
11270
+ }), method(object({
11239
11271
  namespace: string().optional(),
11240
11272
  collection: string(),
11241
11273
  key: string()
11242
- }), _void(), { kind: "mutation" }), method(object({
11274
+ }), _void(), {
11275
+ kind: "mutation",
11276
+ auth: "admin"
11277
+ }), method(object({
11243
11278
  namespace: string().optional(),
11244
11279
  collection: string(),
11245
11280
  filter: MutationFilterSchema
11246
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11281
+ }), object({ deleted: number().int() }), {
11282
+ kind: "mutation",
11283
+ auth: "admin"
11284
+ }), method(object({
11247
11285
  namespace: string().optional(),
11248
11286
  collection: string(),
11249
11287
  filter: MutationFilterSchema,
11250
11288
  data: record(string(), unknown())
11251
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11289
+ }), object({ updated: number().int() }), {
11290
+ kind: "mutation",
11291
+ auth: "admin"
11292
+ }), method(object({
11252
11293
  namespace: string().optional(),
11253
11294
  collection: string(),
11254
11295
  filter: QueryFilterSchema.optional()
11255
- }), number()), method(object({
11296
+ }), number(), { auth: "admin" }), method(object({
11256
11297
  namespace: string().optional(),
11257
11298
  collection: string(),
11258
11299
  field: string(),
@@ -11262,15 +11303,18 @@ method(_void(), EngineInfoSchema), method(object({
11262
11303
  }), array(object({
11263
11304
  bucket: number().int(),
11264
11305
  count: number().int()
11265
- })).readonly()), method(object({
11306
+ })).readonly(), { auth: "admin" }), method(object({
11266
11307
  namespace: string().optional(),
11267
11308
  collection: string()
11268
- }), boolean()), method(object({
11309
+ }), boolean(), { auth: "admin" }), method(object({
11269
11310
  namespace: string().optional(),
11270
11311
  collection: string(),
11271
11312
  columns: array(CollectionColumnSchema).readonly(),
11272
11313
  indexes: array(CollectionIndexSchema).readonly().optional()
11273
- }), _void(), { kind: "mutation" });
11314
+ }), _void(), {
11315
+ kind: "mutation",
11316
+ auth: "admin"
11317
+ });
11274
11318
  /**
11275
11319
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11276
11320
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12505,7 +12549,7 @@ method(object({
12505
12549
  crop: _instanceof(Uint8Array),
12506
12550
  width: number(),
12507
12551
  height: number()
12508
- }), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12552
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12509
12553
  /**
12510
12554
  * filesystem-browse — per-node capability for browsing the node's local
12511
12555
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12798,19 +12842,22 @@ method(LlmGenerateBaseInputSchema.extend({
12798
12842
  runtime: ManagedRuntimeConfigSchema,
12799
12843
  /** The managed profile's timeout, threaded by the hub provider. */
12800
12844
  timeoutMs: number().int().positive().optional()
12801
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12845
+ }), LlmGenerateResultSchema, {
12846
+ kind: "mutation",
12847
+ auth: "admin"
12848
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12802
12849
  kind: "mutation",
12803
12850
  auth: "admin"
12804
12851
  }), method(object({}), _void(), {
12805
12852
  kind: "mutation",
12806
12853
  auth: "admin"
12807
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12854
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12808
12855
  kind: "mutation",
12809
12856
  auth: "admin"
12810
12857
  }), method(object({ file: string() }), _void(), {
12811
12858
  kind: "mutation",
12812
12859
  auth: "admin"
12813
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12860
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12814
12861
  /**
12815
12862
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12816
12863
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16321,7 +16368,7 @@ var OauthIntegrationDescriptorSchema = object({
16321
16368
  */
16322
16369
  refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
16323
16370
  });
16324
- method(_void(), OauthIntegrationDescriptorSchema);
16371
+ method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
16325
16372
  /**
16326
16373
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
16327
16374
  * per-frame detections emitted by the pipeline runner into tracked
@@ -17516,6 +17563,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17516
17563
  }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17517
17564
  kind: "mutation",
17518
17565
  auth: "admin"
17566
+ }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17567
+ kind: "mutation",
17568
+ auth: "admin"
17569
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17570
+ kind: "query",
17571
+ auth: "admin"
17572
+ }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17573
+ kind: "mutation",
17574
+ auth: "admin"
17519
17575
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17520
17576
  kind: "query",
17521
17577
  auth: "admin"
@@ -17670,6 +17726,11 @@ object({
17670
17726
  "jpeg"
17671
17727
  ])
17672
17728
  });
17729
+ /**
17730
+ * Process-local frame identity. It is serializable so it can ride an in-process
17731
+ * capability call, but `registryId` deliberately prevents resolution in any
17732
+ * other process or execution group.
17733
+ */
17673
17734
  var FrameRefSchema = object({
17674
17735
  registryId: string().min(1),
17675
17736
  id: string().min(1),
@@ -19979,7 +20040,7 @@ method(object({
19979
20040
  * linking rather than produce an eternal token.
19980
20041
  */
19981
20042
  ttlSec: union([number().int().positive(), literal("never")]).optional()
19982
- }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
20043
+ }), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
19983
20044
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19984
20045
  providerId: string().min(1),
19985
20046
  displayName: string().min(1),
@@ -20074,10 +20135,13 @@ var EvictResultSchema = object({
20074
20135
  /** True when the provider has nothing left it is willing to drop on this location. */
20075
20136
  exhausted: boolean()
20076
20137
  });
20077
- method(object({ locationId: string() }), EvictableUsageSchema), method(object({
20138
+ method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
20078
20139
  locationId: string(),
20079
20140
  targetBytes: number().int().positive()
20080
- }), EvictResultSchema, { kind: "mutation" });
20141
+ }), EvictResultSchema, {
20142
+ kind: "mutation",
20143
+ auth: "admin"
20144
+ });
20081
20145
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
20082
20146
  kind: "mutation",
20083
20147
  auth: "admin"
@@ -20137,26 +20201,50 @@ var ReadChunkInputSchema = object({
20137
20201
  length: number()
20138
20202
  });
20139
20203
  var EndDownloadInputSchema = object({ downloadId: string() });
20140
- method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20204
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20141
20205
  location: StorageLocationSchema,
20142
20206
  relativePath: string()
20143
- }), string()), method(object({
20207
+ }), string(), { auth: "admin" }), method(object({
20144
20208
  location: StorageLocationSchema,
20145
20209
  relativePath: string(),
20146
20210
  data: _instanceof(Uint8Array)
20147
- }), _void(), { kind: "mutation" }), method(object({
20211
+ }), _void(), {
20212
+ kind: "mutation",
20213
+ auth: "admin"
20214
+ }), method(object({
20148
20215
  location: StorageLocationSchema,
20149
20216
  relativePath: string()
20150
- }), _instanceof(Uint8Array)), method(object({
20217
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
20151
20218
  location: StorageLocationSchema,
20152
20219
  relativePath: string()
20153
- }), boolean()), method(object({
20220
+ }), boolean(), { auth: "admin" }), method(object({
20154
20221
  location: StorageLocationSchema,
20155
20222
  prefix: string().optional()
20156
- }), array(string()).readonly()), method(object({
20223
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
20157
20224
  location: StorageLocationSchema,
20158
20225
  relativePath: string()
20159
- }), _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" });
20226
+ }), _void(), {
20227
+ kind: "mutation",
20228
+ auth: "admin"
20229
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20230
+ kind: "mutation",
20231
+ auth: "admin"
20232
+ }), method(WriteChunkInputSchema, _void(), {
20233
+ kind: "mutation",
20234
+ auth: "admin"
20235
+ }), method(FinalizeUploadInputSchema, _void(), {
20236
+ kind: "mutation",
20237
+ auth: "admin"
20238
+ }), method(AbortUploadInputSchema, _void(), {
20239
+ kind: "mutation",
20240
+ auth: "admin"
20241
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20242
+ kind: "mutation",
20243
+ auth: "admin"
20244
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20245
+ kind: "mutation",
20246
+ auth: "admin"
20247
+ });
20160
20248
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
20161
20249
  var ProfileSettingsSchemaBridge = unknown().nullable();
20162
20250
  var ProfileSettingsBagSchema = record(string(), unknown());
@@ -20458,7 +20546,8 @@ method(object({
20458
20546
  access: "create"
20459
20547
  }), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
20460
20548
  kind: "mutation",
20461
- access: "view"
20549
+ access: "view",
20550
+ auth: "admin"
20462
20551
  }), method(object({
20463
20552
  /** Required — the user the assertion belongs to (verified). */
20464
20553
  userId: string(),
@@ -20466,10 +20555,12 @@ method(object({
20466
20555
  response: record(string(), unknown())
20467
20556
  }), object({ verified: boolean() }), {
20468
20557
  kind: "mutation",
20469
- access: "view"
20558
+ access: "view",
20559
+ auth: "admin"
20470
20560
  }), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
20471
20561
  kind: "mutation",
20472
- access: "view"
20562
+ access: "view",
20563
+ auth: "admin"
20473
20564
  }), method(object({
20474
20565
  /** AuthenticationResponseJSON from the browser. */
20475
20566
  response: record(string(), unknown()) }), object({
@@ -20477,7 +20568,8 @@ response: record(string(), unknown()) }), object({
20477
20568
  userId: string().nullable()
20478
20569
  }), {
20479
20570
  kind: "mutation",
20480
- access: "view"
20571
+ access: "view",
20572
+ auth: "admin"
20481
20573
  }), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20482
20574
  userId: string(),
20483
20575
  credentialId: string()
@@ -20649,7 +20741,19 @@ var VectorStatsResultSchema = object({
20649
20741
  /** False when the backend ranks approximately. */
20650
20742
  exact: boolean()
20651
20743
  });
20652
- 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);
20744
+ method(VectorDeclareIndexInputSchema, _void(), {
20745
+ kind: "mutation",
20746
+ auth: "admin"
20747
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20748
+ kind: "mutation",
20749
+ auth: "admin"
20750
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20751
+ kind: "mutation",
20752
+ auth: "admin"
20753
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20754
+ kind: "mutation",
20755
+ auth: "admin"
20756
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20653
20757
  var ClipSchema = object({
20654
20758
  /** Opaque, provider-namespaced id. The default provider encodes the time
20655
20759
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -23102,7 +23206,27 @@ var MediaFileLiteSchema$1 = object({
23102
23206
  sizeBytes: number(),
23103
23207
  timestamp: number()
23104
23208
  });
23105
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
23209
+ method(object({
23210
+ /**
23211
+ * Inline {@link IdentitySchema.coverBase64} on every row.
23212
+ *
23213
+ * Default `false`, the same inversion `listRecentFaces` and
23214
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
23215
+ * why the burden belongs on the caller that WANTS the bytes). Measured
23216
+ * on the live hub the same day: four identities cost 40,979 B with the
23217
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
23218
+ * four times and the viewer holds at `staleTime: 30_000`.
23219
+ *
23220
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
23221
+ * the `event-media` plane serves that key `immutable` with an ETag.
23222
+ *
23223
+ * **This is an INPUT field, so it does not reach the addon until the
23224
+ * next train** — the hub router validates cap inputs against its own
23225
+ * compiled Zod and strips a key it does not know. Until then the
23226
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
23227
+ * is what ships, and the opt-in becomes reachable when the train lands.
23228
+ */
23229
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
23106
23230
  kind: "mutation",
23107
23231
  auth: "admin"
23108
23232
  }), method(object({
@@ -25992,8 +26116,10 @@ var PlateInfoSchema = object({
25992
26116
  keyFrameMediaKey: string().optional(),
25993
26117
  base64: string().optional(),
25994
26118
  /**
25995
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
25996
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26119
+ * Same crop as a data-plane URL, always present when the plate has a stored
26120
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
26121
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
26122
+ * left at its `true` default.
25997
26123
  */
25998
26124
  cropUrl: string().optional()
25999
26125
  });
@@ -26013,14 +26139,34 @@ var PlateClusterSchema = object({
26013
26139
  });
26014
26140
  method(object({
26015
26141
  deviceId: number().int().optional(),
26016
- limit: number().int().positive().optional()
26142
+ limit: number().int().positive().optional(),
26143
+ /**
26144
+ * Inline the base64 crop on every row. Default `true` — the existing
26145
+ * behaviour, kept so no caller breaks.
26146
+ *
26147
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
26148
+ * Measured on the live hub at the 500 rows the Plates view asks for:
26149
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
26150
+ * metadata without them — and the browser then caches the images.
26151
+ *
26152
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
26153
+ * plates were the one gallery list left without it.
26154
+ *
26155
+ * **This is an INPUT field, so it does not reach the addon until the
26156
+ * next train.** The hub router validates cap inputs against its own
26157
+ * compiled Zod and strips a key it does not know. Until the train
26158
+ * ships, sending `false` is harmless and keeps the crops inline.
26159
+ */
26160
+ includeCrops: boolean().optional()
26017
26161
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
26018
26162
  deviceId: number().int(),
26019
26163
  trackId: string()
26020
26164
  }), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
26021
26165
  text: string().min(1),
26022
26166
  maxDistance: number().int().min(0).optional(),
26023
- limit: number().int().positive().optional()
26167
+ limit: number().int().positive().optional(),
26168
+ /** See `listPlates.includeCrops`. Default `true`. */
26169
+ includeCrops: boolean().optional()
26024
26170
  }), array(PlateInfoSchema).readonly()), method(object({
26025
26171
  maxDistance: number().int().min(0).optional(),
26026
26172
  minClusterSize: number().int().min(2).optional(),
@@ -26034,7 +26180,13 @@ method(object({
26034
26180
  }), method(object({ plateId: string() }), _void(), {
26035
26181
  kind: "mutation",
26036
26182
  auth: "admin"
26037
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26183
+ }), method(object({
26184
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
26185
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
26186
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
26187
+ * INPUT field: stripped by the hub router until the train ships, which
26188
+ * resolves to `false` and is exactly the intended default. */
26189
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
26038
26190
  kind: "mutation",
26039
26191
  auth: "admin"
26040
26192
  }), method(object({
@@ -33293,6 +33445,12 @@ Object.freeze({
33293
33445
  addonId: null,
33294
33446
  access: "create"
33295
33447
  },
33448
+ "pipelineAnalytics.cancelRelocateMedia": {
33449
+ capName: "pipeline-analytics",
33450
+ capScope: "device",
33451
+ addonId: null,
33452
+ access: "create"
33453
+ },
33296
33454
  "pipelineAnalytics.cancelStorageMigrationMove": {
33297
33455
  capName: "pipeline-analytics",
33298
33456
  capScope: "device",
@@ -33467,6 +33625,12 @@ Object.freeze({
33467
33625
  addonId: null,
33468
33626
  access: "view"
33469
33627
  },
33628
+ "pipelineAnalytics.listRelocateMediaJobs": {
33629
+ capName: "pipeline-analytics",
33630
+ capScope: "device",
33631
+ addonId: null,
33632
+ access: "view"
33633
+ },
33470
33634
  "pipelineAnalytics.listRetrainAnnotations": {
33471
33635
  capName: "pipeline-analytics",
33472
33636
  capScope: "device",
@@ -33545,6 +33709,12 @@ Object.freeze({
33545
33709
  addonId: null,
33546
33710
  access: "create"
33547
33711
  },
33712
+ "pipelineAnalytics.relocateMedia": {
33713
+ capName: "pipeline-analytics",
33714
+ capScope: "device",
33715
+ addonId: null,
33716
+ access: "create"
33717
+ },
33548
33718
  "pipelineAnalytics.restageRetrainTrack": {
33549
33719
  capName: "pipeline-analytics",
33550
33720
  capScope: "device",
@@ -44408,7 +44578,10 @@ function sanitizeProfileSettings(profileId, raw) {
44408
44578
  showContainers: true,
44409
44579
  showSensors: true
44410
44580
  };
44411
- for (const plugin of GLANCES_PLUGINS) if (typeof bag[plugin.key] === "boolean") out[plugin.key] = bag[plugin.key];
44581
+ for (const plugin of GLANCES_PLUGINS) {
44582
+ const value = bag[plugin.key];
44583
+ if (typeof value === "boolean") out[plugin.key] = value;
44584
+ }
44412
44585
  return out;
44413
44586
  }
44414
44587
  function profileSettingsToArgs(profileId, settings) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",