@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.
- package/dist/addon.js +253 -80
- package/dist/addon.mjs +253 -80
- 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
|
|
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
|
|
7813
|
+
var RelocateMediaInputSchema = object({
|
|
7835
7814
|
toLocationId: string(),
|
|
7836
7815
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7837
|
-
})
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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(), {
|
|
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
|
-
|
|
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(), {
|
|
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(), {
|
|
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(), {
|
|
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() }), {
|
|
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() }), {
|
|
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(), {
|
|
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, {
|
|
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, {
|
|
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(), {
|
|
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(), {
|
|
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(), {
|
|
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(
|
|
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
|
|
26019
|
-
* never inlines JPEG; `listPlates`
|
|
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(
|
|
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)
|
|
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
|
|
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
|
|
7790
|
+
var RelocateMediaInputSchema = object({
|
|
7812
7791
|
toLocationId: string(),
|
|
7813
7792
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7814
|
-
})
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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(), {
|
|
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
|
-
|
|
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(), {
|
|
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(), {
|
|
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(), {
|
|
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() }), {
|
|
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() }), {
|
|
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(), {
|
|
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, {
|
|
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, {
|
|
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(), {
|
|
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(), {
|
|
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(), {
|
|
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(
|
|
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
|
|
25996
|
-
* never inlines JPEG; `listPlates`
|
|
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(
|
|
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)
|
|
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) {
|