@camstack/addon-ai 0.4.20 → 0.4.22
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 +263 -80
- package/dist/addon.mjs +263 -80
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -6852,7 +6852,7 @@ function method(input, output, options) {
|
|
|
6852
6852
|
input,
|
|
6853
6853
|
output,
|
|
6854
6854
|
kind: options?.kind ?? "query",
|
|
6855
|
-
auth: options
|
|
6855
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6856
6856
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6857
6857
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6858
6858
|
timeoutMs: options?.timeoutMs
|
|
@@ -6872,7 +6872,7 @@ function systemMethod(input, output, options) {
|
|
|
6872
6872
|
}
|
|
6873
6873
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6874
6874
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6875
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6875
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6876
6876
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6877
6877
|
DeviceType["Camera"] = "camera";
|
|
6878
6878
|
DeviceType["Hub"] = "hub";
|
|
@@ -7193,7 +7193,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7193
7193
|
}({});
|
|
7194
7194
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
7195
7195
|
var VersionOutputSchema = object({ version: string() });
|
|
7196
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
7196
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
7197
7197
|
/**
|
|
7198
7198
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7199
7199
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7807,24 +7807,6 @@ var RecordingRetentionSchema = object({
|
|
|
7807
7807
|
maxSizeGb: number$1().min(0).optional()
|
|
7808
7808
|
});
|
|
7809
7809
|
/**
|
|
7810
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7811
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7812
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7813
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7814
|
-
*
|
|
7815
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7816
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7817
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7818
|
-
* written with.
|
|
7819
|
-
*/
|
|
7820
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7821
|
-
"minimal",
|
|
7822
|
-
"low",
|
|
7823
|
-
"standard",
|
|
7824
|
-
"high",
|
|
7825
|
-
"max"
|
|
7826
|
-
]);
|
|
7827
|
-
/**
|
|
7828
7810
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7829
7811
|
*
|
|
7830
7812
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7832,7 +7814,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7832
7814
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7833
7815
|
*
|
|
7834
7816
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7835
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7817
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7818
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7819
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7820
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7821
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7836
7822
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7837
7823
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7838
7824
|
*/
|
|
@@ -7855,14 +7841,7 @@ var RecordingConfigSchema = object({
|
|
|
7855
7841
|
* "off" is the absence of a covering band, never a band value.
|
|
7856
7842
|
*/
|
|
7857
7843
|
bands: array(RecordingBandSchema).default([]),
|
|
7858
|
-
retention: RecordingRetentionSchema.optional()
|
|
7859
|
-
/**
|
|
7860
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7861
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7862
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7863
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7864
|
-
*/
|
|
7865
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7844
|
+
retention: RecordingRetentionSchema.optional()
|
|
7866
7845
|
}).strict();
|
|
7867
7846
|
/**
|
|
7868
7847
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7938,10 +7917,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7938
7917
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7939
7918
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7940
7919
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7941
|
-
var
|
|
7920
|
+
var RelocateMediaInputSchema = object({
|
|
7942
7921
|
toLocationId: string(),
|
|
7943
7922
|
throttleMbps: number$1().min(1).max(1e3).optional()
|
|
7944
|
-
})
|
|
7923
|
+
});
|
|
7924
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7945
7925
|
/** The independently selectable logical storage classes. `recordings`
|
|
7946
7926
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7947
7927
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8236,7 +8216,26 @@ var LabelDefinitionSchema = object({
|
|
|
8236
8216
|
description: string().optional(),
|
|
8237
8217
|
icon: string().optional()
|
|
8238
8218
|
});
|
|
8239
|
-
|
|
8219
|
+
/**
|
|
8220
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8221
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8222
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8223
|
+
* detection pipeline executor actually routes.
|
|
8224
|
+
*
|
|
8225
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8226
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8227
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8228
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8229
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8230
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8231
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8232
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8233
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8234
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8235
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8236
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8237
|
+
*/
|
|
8238
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8240
8239
|
mapping: record(string(), _enum([
|
|
8241
8240
|
"person",
|
|
8242
8241
|
"vehicle",
|
|
@@ -8441,7 +8440,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8441
8440
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8442
8441
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8443
8442
|
*/
|
|
8444
|
-
classMap:
|
|
8443
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8445
8444
|
});
|
|
8446
8445
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8447
8446
|
format: literal("openvino"),
|
|
@@ -8471,7 +8470,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8471
8470
|
"segmentation"
|
|
8472
8471
|
]),
|
|
8473
8472
|
faceAlignment: boolean().optional(),
|
|
8474
|
-
classMap:
|
|
8473
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8475
8474
|
});
|
|
8476
8475
|
var ConvertResultSchema = object({
|
|
8477
8476
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9334,7 +9333,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9334
9333
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9335
9334
|
sectionLabel: string().optional()
|
|
9336
9335
|
});
|
|
9337
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9336
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9338
9337
|
var AddonHttpRouteSchema = object({
|
|
9339
9338
|
method: _enum([
|
|
9340
9339
|
"GET",
|
|
@@ -9569,7 +9568,7 @@ var WidgetMetadataSchema = object({
|
|
|
9569
9568
|
defaultColumns: number$1().int().min(1).max(12).default(6),
|
|
9570
9569
|
defaultRows: number$1().int().min(1).max(12).default(1)
|
|
9571
9570
|
});
|
|
9572
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9571
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9573
9572
|
/**
|
|
9574
9573
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9575
9574
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -11091,7 +11090,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
11091
11090
|
stepId: string(),
|
|
11092
11091
|
entry: ModelCatalogEntrySchema
|
|
11093
11092
|
});
|
|
11094
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
11093
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
11095
11094
|
/**
|
|
11096
11095
|
* Query filter for settings-store collections.
|
|
11097
11096
|
*/
|
|
@@ -11178,7 +11177,8 @@ method(object({
|
|
|
11178
11177
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11179
11178
|
namespace: string().optional(),
|
|
11180
11179
|
collection: string(),
|
|
11181
|
-
filter: QueryFilterSchema.optional()
|
|
11180
|
+
filter: QueryFilterSchema.optional(),
|
|
11181
|
+
columns: array(string()).readonly().optional()
|
|
11182
11182
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11183
11183
|
namespace: string().optional(),
|
|
11184
11184
|
collection: string(),
|
|
@@ -11241,46 +11241,87 @@ var EngineInfoSchema = object({
|
|
|
11241
11241
|
kind: _enum(["relational", "vector"]),
|
|
11242
11242
|
displayName: string()
|
|
11243
11243
|
});
|
|
11244
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11244
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11245
11245
|
namespace: string().optional(),
|
|
11246
11246
|
collection: string(),
|
|
11247
11247
|
key: string()
|
|
11248
|
-
}), unknown()), method(object({
|
|
11248
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11249
11249
|
namespace: string().optional(),
|
|
11250
11250
|
collection: string(),
|
|
11251
11251
|
key: string(),
|
|
11252
11252
|
value: unknown()
|
|
11253
|
-
}), _void(), {
|
|
11253
|
+
}), _void(), {
|
|
11254
|
+
kind: "mutation",
|
|
11255
|
+
auth: "admin"
|
|
11256
|
+
}), method(object({
|
|
11254
11257
|
namespace: string().optional(),
|
|
11255
11258
|
collection: string(),
|
|
11256
|
-
filter: QueryFilterSchema.optional()
|
|
11257
|
-
|
|
11259
|
+
filter: QueryFilterSchema.optional(),
|
|
11260
|
+
/**
|
|
11261
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11262
|
+
*
|
|
11263
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11264
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11265
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11266
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11267
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11268
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11269
|
+
*
|
|
11270
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11271
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11272
|
+
* interface the engine destructures from. The field existed on both
|
|
11273
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11274
|
+
* registered provider against `InferProvider<cap>` —
|
|
11275
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11276
|
+
*
|
|
11277
|
+
* It is declared here anyway, and must stay in step with
|
|
11278
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11279
|
+
* to be able to see that this call carries a projection.
|
|
11280
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11281
|
+
*/
|
|
11282
|
+
columns: array(string()).readonly().optional()
|
|
11283
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11258
11284
|
namespace: string().optional(),
|
|
11259
11285
|
collection: string(),
|
|
11260
11286
|
record: SettingsRecordSchema
|
|
11261
|
-
}), _void(), {
|
|
11287
|
+
}), _void(), {
|
|
11288
|
+
kind: "mutation",
|
|
11289
|
+
auth: "admin"
|
|
11290
|
+
}), method(object({
|
|
11262
11291
|
namespace: string().optional(),
|
|
11263
11292
|
collection: string(),
|
|
11264
11293
|
id: string(),
|
|
11265
11294
|
data: record(string(), unknown())
|
|
11266
|
-
}), _void(), {
|
|
11295
|
+
}), _void(), {
|
|
11296
|
+
kind: "mutation",
|
|
11297
|
+
auth: "admin"
|
|
11298
|
+
}), method(object({
|
|
11267
11299
|
namespace: string().optional(),
|
|
11268
11300
|
collection: string(),
|
|
11269
11301
|
key: string()
|
|
11270
|
-
}), _void(), {
|
|
11302
|
+
}), _void(), {
|
|
11303
|
+
kind: "mutation",
|
|
11304
|
+
auth: "admin"
|
|
11305
|
+
}), method(object({
|
|
11271
11306
|
namespace: string().optional(),
|
|
11272
11307
|
collection: string(),
|
|
11273
11308
|
filter: MutationFilterSchema
|
|
11274
|
-
}), object({ deleted: number$1().int() }), {
|
|
11309
|
+
}), object({ deleted: number$1().int() }), {
|
|
11310
|
+
kind: "mutation",
|
|
11311
|
+
auth: "admin"
|
|
11312
|
+
}), method(object({
|
|
11275
11313
|
namespace: string().optional(),
|
|
11276
11314
|
collection: string(),
|
|
11277
11315
|
filter: MutationFilterSchema,
|
|
11278
11316
|
data: record(string(), unknown())
|
|
11279
|
-
}), object({ updated: number$1().int() }), {
|
|
11317
|
+
}), object({ updated: number$1().int() }), {
|
|
11318
|
+
kind: "mutation",
|
|
11319
|
+
auth: "admin"
|
|
11320
|
+
}), method(object({
|
|
11280
11321
|
namespace: string().optional(),
|
|
11281
11322
|
collection: string(),
|
|
11282
11323
|
filter: QueryFilterSchema.optional()
|
|
11283
|
-
}), number$1()), method(object({
|
|
11324
|
+
}), number$1(), { auth: "admin" }), method(object({
|
|
11284
11325
|
namespace: string().optional(),
|
|
11285
11326
|
collection: string(),
|
|
11286
11327
|
field: string(),
|
|
@@ -11290,15 +11331,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11290
11331
|
}), array(object({
|
|
11291
11332
|
bucket: number$1().int(),
|
|
11292
11333
|
count: number$1().int()
|
|
11293
|
-
})).readonly()), method(object({
|
|
11334
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11294
11335
|
namespace: string().optional(),
|
|
11295
11336
|
collection: string()
|
|
11296
|
-
}), boolean()), method(object({
|
|
11337
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11297
11338
|
namespace: string().optional(),
|
|
11298
11339
|
collection: string(),
|
|
11299
11340
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11300
11341
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11301
|
-
}), _void(), {
|
|
11342
|
+
}), _void(), {
|
|
11343
|
+
kind: "mutation",
|
|
11344
|
+
auth: "admin"
|
|
11345
|
+
});
|
|
11302
11346
|
/**
|
|
11303
11347
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11304
11348
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12426,7 +12470,7 @@ method(object({
|
|
|
12426
12470
|
crop: _instanceof(Uint8Array),
|
|
12427
12471
|
width: number$1(),
|
|
12428
12472
|
height: number$1()
|
|
12429
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12473
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12430
12474
|
/**
|
|
12431
12475
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12432
12476
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12738,12 +12782,28 @@ var llmRuntimeCapability = {
|
|
|
12738
12782
|
mode: "singleton",
|
|
12739
12783
|
internal: true,
|
|
12740
12784
|
methods: {
|
|
12785
|
+
/**
|
|
12786
|
+
* `complete`, `status`, `listLocalModels` and `getDiskUsage` had NO
|
|
12787
|
+
* `auth` override — `internal: true` did not gate the mount (see the
|
|
12788
|
+
* 2026-08-26 note on `data-store-provider`), so they were reachable on
|
|
12789
|
+
* the AppRouter by ANY authenticated session at the default
|
|
12790
|
+
* `auth: 'protected'`, inconsistent with the rest of this cap (already
|
|
12791
|
+
* `auth: 'admin'`) and with this file's own docblock: "the operator
|
|
12792
|
+
* reaches this only through the `llm` cap's methods." The sole caller,
|
|
12793
|
+
* `addon-ai`'s `runtime-client.ts`, reaches every method here via
|
|
12794
|
+
* `ctx.api` + `nodePin` — never tRPC — so `auth: 'admin'` costs it
|
|
12795
|
+
* nothing; the public `llm` cap (which end users and non-admin sessions
|
|
12796
|
+
* legitimately call for chat/generation) is untouched.
|
|
12797
|
+
*/
|
|
12741
12798
|
complete: method(LlmGenerateBaseInputSchema.extend({
|
|
12742
12799
|
images: array(LlmImageSchema).optional(),
|
|
12743
12800
|
runtime: ManagedRuntimeConfigSchema,
|
|
12744
12801
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12745
12802
|
timeoutMs: number$1().int().positive().optional()
|
|
12746
|
-
}), LlmGenerateResultSchema, {
|
|
12803
|
+
}), LlmGenerateResultSchema, {
|
|
12804
|
+
kind: "mutation",
|
|
12805
|
+
auth: "admin"
|
|
12806
|
+
}),
|
|
12747
12807
|
ensureStarted: method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12748
12808
|
kind: "mutation",
|
|
12749
12809
|
auth: "admin"
|
|
@@ -12752,7 +12812,7 @@ var llmRuntimeCapability = {
|
|
|
12752
12812
|
kind: "mutation",
|
|
12753
12813
|
auth: "admin"
|
|
12754
12814
|
}),
|
|
12755
|
-
status: method(object({}), LlmRuntimeStatusSchema),
|
|
12815
|
+
status: method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }),
|
|
12756
12816
|
installModel: method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12757
12817
|
kind: "mutation",
|
|
12758
12818
|
auth: "admin"
|
|
@@ -12761,8 +12821,8 @@ var llmRuntimeCapability = {
|
|
|
12761
12821
|
kind: "mutation",
|
|
12762
12822
|
auth: "admin"
|
|
12763
12823
|
}),
|
|
12764
|
-
listLocalModels: method(object({}), array(LlmNodeModelSchema)),
|
|
12765
|
-
getDiskUsage: method(object({}), LlmRuntimeDiskUsageSchema)
|
|
12824
|
+
listLocalModels: method(object({}), array(LlmNodeModelSchema), { auth: "admin" }),
|
|
12825
|
+
getDiskUsage: method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" })
|
|
12766
12826
|
}
|
|
12767
12827
|
};
|
|
12768
12828
|
/**
|
|
@@ -16285,7 +16345,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16285
16345
|
*/
|
|
16286
16346
|
refreshTokenTtlSec: union([number$1().int().positive(), literal("never")]).optional()
|
|
16287
16347
|
});
|
|
16288
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16348
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16289
16349
|
/**
|
|
16290
16350
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16291
16351
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17480,6 +17540,15 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
17480
17540
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17481
17541
|
kind: "mutation",
|
|
17482
17542
|
auth: "admin"
|
|
17543
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17544
|
+
kind: "mutation",
|
|
17545
|
+
auth: "admin"
|
|
17546
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17547
|
+
kind: "query",
|
|
17548
|
+
auth: "admin"
|
|
17549
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17550
|
+
kind: "mutation",
|
|
17551
|
+
auth: "admin"
|
|
17483
17552
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17484
17553
|
kind: "query",
|
|
17485
17554
|
auth: "admin"
|
|
@@ -17634,6 +17703,11 @@ object({
|
|
|
17634
17703
|
"jpeg"
|
|
17635
17704
|
])
|
|
17636
17705
|
});
|
|
17706
|
+
/**
|
|
17707
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17708
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17709
|
+
* other process or execution group.
|
|
17710
|
+
*/
|
|
17637
17711
|
var FrameRefSchema = object({
|
|
17638
17712
|
registryId: string().min(1),
|
|
17639
17713
|
id: string().min(1),
|
|
@@ -19799,7 +19873,7 @@ method(object({
|
|
|
19799
19873
|
* linking rather than produce an eternal token.
|
|
19800
19874
|
*/
|
|
19801
19875
|
ttlSec: union([number$1().int().positive(), literal("never")]).optional()
|
|
19802
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19876
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19803
19877
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19804
19878
|
providerId: string().min(1),
|
|
19805
19879
|
displayName: string().min(1),
|
|
@@ -19894,10 +19968,13 @@ var EvictResultSchema = object({
|
|
|
19894
19968
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19895
19969
|
exhausted: boolean()
|
|
19896
19970
|
});
|
|
19897
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19971
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19898
19972
|
locationId: string(),
|
|
19899
19973
|
targetBytes: number$1().int().positive()
|
|
19900
|
-
}), EvictResultSchema, {
|
|
19974
|
+
}), EvictResultSchema, {
|
|
19975
|
+
kind: "mutation",
|
|
19976
|
+
auth: "admin"
|
|
19977
|
+
});
|
|
19901
19978
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19902
19979
|
kind: "mutation",
|
|
19903
19980
|
auth: "admin"
|
|
@@ -19957,26 +20034,50 @@ var ReadChunkInputSchema = object({
|
|
|
19957
20034
|
length: number$1()
|
|
19958
20035
|
});
|
|
19959
20036
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19960
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20037
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19961
20038
|
location: StorageLocationSchema,
|
|
19962
20039
|
relativePath: string()
|
|
19963
|
-
}), string()), method(object({
|
|
20040
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19964
20041
|
location: StorageLocationSchema,
|
|
19965
20042
|
relativePath: string(),
|
|
19966
20043
|
data: _instanceof(Uint8Array)
|
|
19967
|
-
}), _void(), {
|
|
20044
|
+
}), _void(), {
|
|
20045
|
+
kind: "mutation",
|
|
20046
|
+
auth: "admin"
|
|
20047
|
+
}), method(object({
|
|
19968
20048
|
location: StorageLocationSchema,
|
|
19969
20049
|
relativePath: string()
|
|
19970
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
20050
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19971
20051
|
location: StorageLocationSchema,
|
|
19972
20052
|
relativePath: string()
|
|
19973
|
-
}), boolean()), method(object({
|
|
20053
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
19974
20054
|
location: StorageLocationSchema,
|
|
19975
20055
|
prefix: string().optional()
|
|
19976
|
-
}), array(string()).readonly()), method(object({
|
|
20056
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
19977
20057
|
location: StorageLocationSchema,
|
|
19978
20058
|
relativePath: string()
|
|
19979
|
-
}), _void(), {
|
|
20059
|
+
}), _void(), {
|
|
20060
|
+
kind: "mutation",
|
|
20061
|
+
auth: "admin"
|
|
20062
|
+
}), method(object({ location: StorageLocationSchema }), number$1().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
20063
|
+
kind: "mutation",
|
|
20064
|
+
auth: "admin"
|
|
20065
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
20066
|
+
kind: "mutation",
|
|
20067
|
+
auth: "admin"
|
|
20068
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
20069
|
+
kind: "mutation",
|
|
20070
|
+
auth: "admin"
|
|
20071
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
20072
|
+
kind: "mutation",
|
|
20073
|
+
auth: "admin"
|
|
20074
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
20075
|
+
kind: "mutation",
|
|
20076
|
+
auth: "admin"
|
|
20077
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
20078
|
+
kind: "mutation",
|
|
20079
|
+
auth: "admin"
|
|
20080
|
+
});
|
|
19980
20081
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19981
20082
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19982
20083
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20234,7 +20335,8 @@ method(object({
|
|
|
20234
20335
|
access: "create"
|
|
20235
20336
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20236
20337
|
kind: "mutation",
|
|
20237
|
-
access: "view"
|
|
20338
|
+
access: "view",
|
|
20339
|
+
auth: "admin"
|
|
20238
20340
|
}), method(object({
|
|
20239
20341
|
/** Required — the user the assertion belongs to (verified). */
|
|
20240
20342
|
userId: string(),
|
|
@@ -20242,10 +20344,12 @@ method(object({
|
|
|
20242
20344
|
response: record(string(), unknown())
|
|
20243
20345
|
}), object({ verified: boolean() }), {
|
|
20244
20346
|
kind: "mutation",
|
|
20245
|
-
access: "view"
|
|
20347
|
+
access: "view",
|
|
20348
|
+
auth: "admin"
|
|
20246
20349
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20247
20350
|
kind: "mutation",
|
|
20248
|
-
access: "view"
|
|
20351
|
+
access: "view",
|
|
20352
|
+
auth: "admin"
|
|
20249
20353
|
}), method(object({
|
|
20250
20354
|
/** AuthenticationResponseJSON from the browser. */
|
|
20251
20355
|
response: record(string(), unknown()) }), object({
|
|
@@ -20253,7 +20357,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20253
20357
|
userId: string().nullable()
|
|
20254
20358
|
}), {
|
|
20255
20359
|
kind: "mutation",
|
|
20256
|
-
access: "view"
|
|
20360
|
+
access: "view",
|
|
20361
|
+
auth: "admin"
|
|
20257
20362
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20258
20363
|
userId: string(),
|
|
20259
20364
|
credentialId: string()
|
|
@@ -20425,7 +20530,19 @@ var VectorStatsResultSchema = object({
|
|
|
20425
20530
|
/** False when the backend ranks approximately. */
|
|
20426
20531
|
exact: boolean()
|
|
20427
20532
|
});
|
|
20428
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20533
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20534
|
+
kind: "mutation",
|
|
20535
|
+
auth: "admin"
|
|
20536
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20537
|
+
kind: "mutation",
|
|
20538
|
+
auth: "admin"
|
|
20539
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20540
|
+
kind: "mutation",
|
|
20541
|
+
auth: "admin"
|
|
20542
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20543
|
+
kind: "mutation",
|
|
20544
|
+
auth: "admin"
|
|
20545
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20429
20546
|
var ClipSchema = object({
|
|
20430
20547
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20431
20548
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -22148,7 +22265,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
22148
22265
|
sizeBytes: number$1(),
|
|
22149
22266
|
timestamp: number$1()
|
|
22150
22267
|
});
|
|
22151
|
-
method(
|
|
22268
|
+
method(object({
|
|
22269
|
+
/**
|
|
22270
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22271
|
+
*
|
|
22272
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22273
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22274
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22275
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22276
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22277
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22278
|
+
*
|
|
22279
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22280
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22281
|
+
*
|
|
22282
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22283
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22284
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22285
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22286
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22287
|
+
*/
|
|
22288
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
22152
22289
|
kind: "mutation",
|
|
22153
22290
|
auth: "admin"
|
|
22154
22291
|
}), method(object({
|
|
@@ -24295,8 +24432,10 @@ var PlateInfoSchema = object({
|
|
|
24295
24432
|
keyFrameMediaKey: string().optional(),
|
|
24296
24433
|
base64: string().optional(),
|
|
24297
24434
|
/**
|
|
24298
|
-
* Same crop as a data-plane URL
|
|
24299
|
-
* never inlines JPEG; `listPlates`
|
|
24435
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24436
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24437
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24438
|
+
* left at its `true` default.
|
|
24300
24439
|
*/
|
|
24301
24440
|
cropUrl: string().optional()
|
|
24302
24441
|
});
|
|
@@ -24316,14 +24455,34 @@ var PlateClusterSchema = object({
|
|
|
24316
24455
|
});
|
|
24317
24456
|
method(object({
|
|
24318
24457
|
deviceId: number$1().int().optional(),
|
|
24319
|
-
limit: number$1().int().positive().optional()
|
|
24458
|
+
limit: number$1().int().positive().optional(),
|
|
24459
|
+
/**
|
|
24460
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24461
|
+
* behaviour, kept so no caller breaks.
|
|
24462
|
+
*
|
|
24463
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24464
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24465
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24466
|
+
* metadata without them — and the browser then caches the images.
|
|
24467
|
+
*
|
|
24468
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24469
|
+
* plates were the one gallery list left without it.
|
|
24470
|
+
*
|
|
24471
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24472
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24473
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24474
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24475
|
+
*/
|
|
24476
|
+
includeCrops: boolean().optional()
|
|
24320
24477
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24321
24478
|
deviceId: number$1().int(),
|
|
24322
24479
|
trackId: string()
|
|
24323
24480
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24324
24481
|
text: string().min(1),
|
|
24325
24482
|
maxDistance: number$1().int().min(0).optional(),
|
|
24326
|
-
limit: number$1().int().positive().optional()
|
|
24483
|
+
limit: number$1().int().positive().optional(),
|
|
24484
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24485
|
+
includeCrops: boolean().optional()
|
|
24327
24486
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24328
24487
|
maxDistance: number$1().int().min(0).optional(),
|
|
24329
24488
|
minClusterSize: number$1().int().min(2).optional(),
|
|
@@ -24337,7 +24496,13 @@ method(object({
|
|
|
24337
24496
|
}), method(object({ plateId: string() }), _void(), {
|
|
24338
24497
|
kind: "mutation",
|
|
24339
24498
|
auth: "admin"
|
|
24340
|
-
}), method(
|
|
24499
|
+
}), method(object({
|
|
24500
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24501
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24502
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24503
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24504
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24505
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24341
24506
|
kind: "mutation",
|
|
24342
24507
|
auth: "admin"
|
|
24343
24508
|
}), method(object({
|
|
@@ -29714,6 +29879,12 @@ Object.freeze({
|
|
|
29714
29879
|
addonId: null,
|
|
29715
29880
|
access: "create"
|
|
29716
29881
|
},
|
|
29882
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29883
|
+
capName: "pipeline-analytics",
|
|
29884
|
+
capScope: "device",
|
|
29885
|
+
addonId: null,
|
|
29886
|
+
access: "create"
|
|
29887
|
+
},
|
|
29717
29888
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29718
29889
|
capName: "pipeline-analytics",
|
|
29719
29890
|
capScope: "device",
|
|
@@ -29888,6 +30059,12 @@ Object.freeze({
|
|
|
29888
30059
|
addonId: null,
|
|
29889
30060
|
access: "view"
|
|
29890
30061
|
},
|
|
30062
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
30063
|
+
capName: "pipeline-analytics",
|
|
30064
|
+
capScope: "device",
|
|
30065
|
+
addonId: null,
|
|
30066
|
+
access: "view"
|
|
30067
|
+
},
|
|
29891
30068
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29892
30069
|
capName: "pipeline-analytics",
|
|
29893
30070
|
capScope: "device",
|
|
@@ -29966,6 +30143,12 @@ Object.freeze({
|
|
|
29966
30143
|
addonId: null,
|
|
29967
30144
|
access: "create"
|
|
29968
30145
|
},
|
|
30146
|
+
"pipelineAnalytics.relocateMedia": {
|
|
30147
|
+
capName: "pipeline-analytics",
|
|
30148
|
+
capScope: "device",
|
|
30149
|
+
addonId: null,
|
|
30150
|
+
access: "create"
|
|
30151
|
+
},
|
|
29969
30152
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29970
30153
|
capName: "pipeline-analytics",
|
|
29971
30154
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -6878,7 +6878,7 @@ function method(input, output, options) {
|
|
|
6878
6878
|
input,
|
|
6879
6879
|
output,
|
|
6880
6880
|
kind: options?.kind ?? "query",
|
|
6881
|
-
auth: options
|
|
6881
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6882
6882
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6883
6883
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6884
6884
|
timeoutMs: options?.timeoutMs
|
|
@@ -6898,7 +6898,7 @@ function systemMethod(input, output, options) {
|
|
|
6898
6898
|
}
|
|
6899
6899
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6900
6900
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6901
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6901
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6902
6902
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6903
6903
|
DeviceType["Camera"] = "camera";
|
|
6904
6904
|
DeviceType["Hub"] = "hub";
|
|
@@ -7219,7 +7219,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7219
7219
|
}({});
|
|
7220
7220
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
7221
7221
|
var VersionOutputSchema = object({ version: string() });
|
|
7222
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
7222
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
7223
7223
|
/**
|
|
7224
7224
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7225
7225
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7833,24 +7833,6 @@ var RecordingRetentionSchema = object({
|
|
|
7833
7833
|
maxSizeGb: number$1().min(0).optional()
|
|
7834
7834
|
});
|
|
7835
7835
|
/**
|
|
7836
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7837
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7838
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7839
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7840
|
-
*
|
|
7841
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7842
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7843
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7844
|
-
* written with.
|
|
7845
|
-
*/
|
|
7846
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7847
|
-
"minimal",
|
|
7848
|
-
"low",
|
|
7849
|
-
"standard",
|
|
7850
|
-
"high",
|
|
7851
|
-
"max"
|
|
7852
|
-
]);
|
|
7853
|
-
/**
|
|
7854
7836
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7855
7837
|
*
|
|
7856
7838
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7858,7 +7840,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7858
7840
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7859
7841
|
*
|
|
7860
7842
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7861
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7843
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7844
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7845
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7846
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7847
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7862
7848
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7863
7849
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7864
7850
|
*/
|
|
@@ -7881,14 +7867,7 @@ var RecordingConfigSchema = object({
|
|
|
7881
7867
|
* "off" is the absence of a covering band, never a band value.
|
|
7882
7868
|
*/
|
|
7883
7869
|
bands: array(RecordingBandSchema).default([]),
|
|
7884
|
-
retention: RecordingRetentionSchema.optional()
|
|
7885
|
-
/**
|
|
7886
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7887
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7888
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7889
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7890
|
-
*/
|
|
7891
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7870
|
+
retention: RecordingRetentionSchema.optional()
|
|
7892
7871
|
}).strict();
|
|
7893
7872
|
/**
|
|
7894
7873
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7964,10 +7943,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7964
7943
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7965
7944
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7966
7945
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7967
|
-
var
|
|
7946
|
+
var RelocateMediaInputSchema = object({
|
|
7968
7947
|
toLocationId: string(),
|
|
7969
7948
|
throttleMbps: number$1().min(1).max(1e3).optional()
|
|
7970
|
-
})
|
|
7949
|
+
});
|
|
7950
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7971
7951
|
/** The independently selectable logical storage classes. `recordings`
|
|
7972
7952
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7973
7953
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8262,7 +8242,26 @@ var LabelDefinitionSchema = object({
|
|
|
8262
8242
|
description: string().optional(),
|
|
8263
8243
|
icon: string().optional()
|
|
8264
8244
|
});
|
|
8265
|
-
|
|
8245
|
+
/**
|
|
8246
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8247
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8248
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8249
|
+
* detection pipeline executor actually routes.
|
|
8250
|
+
*
|
|
8251
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8252
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8253
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8254
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8255
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8256
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8257
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8258
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8259
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8260
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8261
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8262
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8263
|
+
*/
|
|
8264
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8266
8265
|
mapping: record(string(), _enum([
|
|
8267
8266
|
"person",
|
|
8268
8267
|
"vehicle",
|
|
@@ -8467,7 +8466,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8467
8466
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8468
8467
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8469
8468
|
*/
|
|
8470
|
-
classMap:
|
|
8469
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8471
8470
|
});
|
|
8472
8471
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8473
8472
|
format: literal("openvino"),
|
|
@@ -8497,7 +8496,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8497
8496
|
"segmentation"
|
|
8498
8497
|
]),
|
|
8499
8498
|
faceAlignment: boolean().optional(),
|
|
8500
|
-
classMap:
|
|
8499
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8501
8500
|
});
|
|
8502
8501
|
var ConvertResultSchema = object({
|
|
8503
8502
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9360,7 +9359,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9360
9359
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9361
9360
|
sectionLabel: string().optional()
|
|
9362
9361
|
});
|
|
9363
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9362
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9364
9363
|
var AddonHttpRouteSchema = object({
|
|
9365
9364
|
method: _enum([
|
|
9366
9365
|
"GET",
|
|
@@ -9595,7 +9594,7 @@ var WidgetMetadataSchema = object({
|
|
|
9595
9594
|
defaultColumns: number$1().int().min(1).max(12).default(6),
|
|
9596
9595
|
defaultRows: number$1().int().min(1).max(12).default(1)
|
|
9597
9596
|
});
|
|
9598
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9597
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9599
9598
|
/**
|
|
9600
9599
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9601
9600
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -11117,7 +11116,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
11117
11116
|
stepId: string(),
|
|
11118
11117
|
entry: ModelCatalogEntrySchema
|
|
11119
11118
|
});
|
|
11120
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
11119
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
11121
11120
|
/**
|
|
11122
11121
|
* Query filter for settings-store collections.
|
|
11123
11122
|
*/
|
|
@@ -11204,7 +11203,8 @@ method(object({
|
|
|
11204
11203
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11205
11204
|
namespace: string().optional(),
|
|
11206
11205
|
collection: string(),
|
|
11207
|
-
filter: QueryFilterSchema.optional()
|
|
11206
|
+
filter: QueryFilterSchema.optional(),
|
|
11207
|
+
columns: array(string()).readonly().optional()
|
|
11208
11208
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11209
11209
|
namespace: string().optional(),
|
|
11210
11210
|
collection: string(),
|
|
@@ -11267,46 +11267,87 @@ var EngineInfoSchema = object({
|
|
|
11267
11267
|
kind: _enum(["relational", "vector"]),
|
|
11268
11268
|
displayName: string()
|
|
11269
11269
|
});
|
|
11270
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11270
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11271
11271
|
namespace: string().optional(),
|
|
11272
11272
|
collection: string(),
|
|
11273
11273
|
key: string()
|
|
11274
|
-
}), unknown()), method(object({
|
|
11274
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11275
11275
|
namespace: string().optional(),
|
|
11276
11276
|
collection: string(),
|
|
11277
11277
|
key: string(),
|
|
11278
11278
|
value: unknown()
|
|
11279
|
-
}), _void(), {
|
|
11279
|
+
}), _void(), {
|
|
11280
|
+
kind: "mutation",
|
|
11281
|
+
auth: "admin"
|
|
11282
|
+
}), method(object({
|
|
11280
11283
|
namespace: string().optional(),
|
|
11281
11284
|
collection: string(),
|
|
11282
|
-
filter: QueryFilterSchema.optional()
|
|
11283
|
-
|
|
11285
|
+
filter: QueryFilterSchema.optional(),
|
|
11286
|
+
/**
|
|
11287
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11288
|
+
*
|
|
11289
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11290
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11291
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11292
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11293
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11294
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11295
|
+
*
|
|
11296
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11297
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11298
|
+
* interface the engine destructures from. The field existed on both
|
|
11299
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11300
|
+
* registered provider against `InferProvider<cap>` —
|
|
11301
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11302
|
+
*
|
|
11303
|
+
* It is declared here anyway, and must stay in step with
|
|
11304
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11305
|
+
* to be able to see that this call carries a projection.
|
|
11306
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11307
|
+
*/
|
|
11308
|
+
columns: array(string()).readonly().optional()
|
|
11309
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11284
11310
|
namespace: string().optional(),
|
|
11285
11311
|
collection: string(),
|
|
11286
11312
|
record: SettingsRecordSchema
|
|
11287
|
-
}), _void(), {
|
|
11313
|
+
}), _void(), {
|
|
11314
|
+
kind: "mutation",
|
|
11315
|
+
auth: "admin"
|
|
11316
|
+
}), method(object({
|
|
11288
11317
|
namespace: string().optional(),
|
|
11289
11318
|
collection: string(),
|
|
11290
11319
|
id: string(),
|
|
11291
11320
|
data: record(string(), unknown())
|
|
11292
|
-
}), _void(), {
|
|
11321
|
+
}), _void(), {
|
|
11322
|
+
kind: "mutation",
|
|
11323
|
+
auth: "admin"
|
|
11324
|
+
}), method(object({
|
|
11293
11325
|
namespace: string().optional(),
|
|
11294
11326
|
collection: string(),
|
|
11295
11327
|
key: string()
|
|
11296
|
-
}), _void(), {
|
|
11328
|
+
}), _void(), {
|
|
11329
|
+
kind: "mutation",
|
|
11330
|
+
auth: "admin"
|
|
11331
|
+
}), method(object({
|
|
11297
11332
|
namespace: string().optional(),
|
|
11298
11333
|
collection: string(),
|
|
11299
11334
|
filter: MutationFilterSchema
|
|
11300
|
-
}), object({ deleted: number$1().int() }), {
|
|
11335
|
+
}), object({ deleted: number$1().int() }), {
|
|
11336
|
+
kind: "mutation",
|
|
11337
|
+
auth: "admin"
|
|
11338
|
+
}), method(object({
|
|
11301
11339
|
namespace: string().optional(),
|
|
11302
11340
|
collection: string(),
|
|
11303
11341
|
filter: MutationFilterSchema,
|
|
11304
11342
|
data: record(string(), unknown())
|
|
11305
|
-
}), object({ updated: number$1().int() }), {
|
|
11343
|
+
}), object({ updated: number$1().int() }), {
|
|
11344
|
+
kind: "mutation",
|
|
11345
|
+
auth: "admin"
|
|
11346
|
+
}), method(object({
|
|
11306
11347
|
namespace: string().optional(),
|
|
11307
11348
|
collection: string(),
|
|
11308
11349
|
filter: QueryFilterSchema.optional()
|
|
11309
|
-
}), number$1()), method(object({
|
|
11350
|
+
}), number$1(), { auth: "admin" }), method(object({
|
|
11310
11351
|
namespace: string().optional(),
|
|
11311
11352
|
collection: string(),
|
|
11312
11353
|
field: string(),
|
|
@@ -11316,15 +11357,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11316
11357
|
}), array(object({
|
|
11317
11358
|
bucket: number$1().int(),
|
|
11318
11359
|
count: number$1().int()
|
|
11319
|
-
})).readonly()), method(object({
|
|
11360
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11320
11361
|
namespace: string().optional(),
|
|
11321
11362
|
collection: string()
|
|
11322
|
-
}), boolean()), method(object({
|
|
11363
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11323
11364
|
namespace: string().optional(),
|
|
11324
11365
|
collection: string(),
|
|
11325
11366
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11326
11367
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11327
|
-
}), _void(), {
|
|
11368
|
+
}), _void(), {
|
|
11369
|
+
kind: "mutation",
|
|
11370
|
+
auth: "admin"
|
|
11371
|
+
});
|
|
11328
11372
|
/**
|
|
11329
11373
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11330
11374
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12452,7 +12496,7 @@ method(object({
|
|
|
12452
12496
|
crop: _instanceof(Uint8Array),
|
|
12453
12497
|
width: number$1(),
|
|
12454
12498
|
height: number$1()
|
|
12455
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12499
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12456
12500
|
/**
|
|
12457
12501
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12458
12502
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12764,12 +12808,28 @@ var llmRuntimeCapability = {
|
|
|
12764
12808
|
mode: "singleton",
|
|
12765
12809
|
internal: true,
|
|
12766
12810
|
methods: {
|
|
12811
|
+
/**
|
|
12812
|
+
* `complete`, `status`, `listLocalModels` and `getDiskUsage` had NO
|
|
12813
|
+
* `auth` override — `internal: true` did not gate the mount (see the
|
|
12814
|
+
* 2026-08-26 note on `data-store-provider`), so they were reachable on
|
|
12815
|
+
* the AppRouter by ANY authenticated session at the default
|
|
12816
|
+
* `auth: 'protected'`, inconsistent with the rest of this cap (already
|
|
12817
|
+
* `auth: 'admin'`) and with this file's own docblock: "the operator
|
|
12818
|
+
* reaches this only through the `llm` cap's methods." The sole caller,
|
|
12819
|
+
* `addon-ai`'s `runtime-client.ts`, reaches every method here via
|
|
12820
|
+
* `ctx.api` + `nodePin` — never tRPC — so `auth: 'admin'` costs it
|
|
12821
|
+
* nothing; the public `llm` cap (which end users and non-admin sessions
|
|
12822
|
+
* legitimately call for chat/generation) is untouched.
|
|
12823
|
+
*/
|
|
12767
12824
|
complete: method(LlmGenerateBaseInputSchema.extend({
|
|
12768
12825
|
images: array(LlmImageSchema).optional(),
|
|
12769
12826
|
runtime: ManagedRuntimeConfigSchema,
|
|
12770
12827
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12771
12828
|
timeoutMs: number$1().int().positive().optional()
|
|
12772
|
-
}), LlmGenerateResultSchema, {
|
|
12829
|
+
}), LlmGenerateResultSchema, {
|
|
12830
|
+
kind: "mutation",
|
|
12831
|
+
auth: "admin"
|
|
12832
|
+
}),
|
|
12773
12833
|
ensureStarted: method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12774
12834
|
kind: "mutation",
|
|
12775
12835
|
auth: "admin"
|
|
@@ -12778,7 +12838,7 @@ var llmRuntimeCapability = {
|
|
|
12778
12838
|
kind: "mutation",
|
|
12779
12839
|
auth: "admin"
|
|
12780
12840
|
}),
|
|
12781
|
-
status: method(object({}), LlmRuntimeStatusSchema),
|
|
12841
|
+
status: method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }),
|
|
12782
12842
|
installModel: method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12783
12843
|
kind: "mutation",
|
|
12784
12844
|
auth: "admin"
|
|
@@ -12787,8 +12847,8 @@ var llmRuntimeCapability = {
|
|
|
12787
12847
|
kind: "mutation",
|
|
12788
12848
|
auth: "admin"
|
|
12789
12849
|
}),
|
|
12790
|
-
listLocalModels: method(object({}), array(LlmNodeModelSchema)),
|
|
12791
|
-
getDiskUsage: method(object({}), LlmRuntimeDiskUsageSchema)
|
|
12850
|
+
listLocalModels: method(object({}), array(LlmNodeModelSchema), { auth: "admin" }),
|
|
12851
|
+
getDiskUsage: method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" })
|
|
12792
12852
|
}
|
|
12793
12853
|
};
|
|
12794
12854
|
/**
|
|
@@ -16311,7 +16371,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16311
16371
|
*/
|
|
16312
16372
|
refreshTokenTtlSec: union([number$1().int().positive(), literal("never")]).optional()
|
|
16313
16373
|
});
|
|
16314
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16374
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16315
16375
|
/**
|
|
16316
16376
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16317
16377
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17506,6 +17566,15 @@ DeviceType.Camera, method(object({ deviceId: number$1() }), array(TrackSchema).r
|
|
|
17506
17566
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17507
17567
|
kind: "mutation",
|
|
17508
17568
|
auth: "admin"
|
|
17569
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17570
|
+
kind: "mutation",
|
|
17571
|
+
auth: "admin"
|
|
17572
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17573
|
+
kind: "query",
|
|
17574
|
+
auth: "admin"
|
|
17575
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17576
|
+
kind: "mutation",
|
|
17577
|
+
auth: "admin"
|
|
17509
17578
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17510
17579
|
kind: "query",
|
|
17511
17580
|
auth: "admin"
|
|
@@ -17660,6 +17729,11 @@ object({
|
|
|
17660
17729
|
"jpeg"
|
|
17661
17730
|
])
|
|
17662
17731
|
});
|
|
17732
|
+
/**
|
|
17733
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17734
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17735
|
+
* other process or execution group.
|
|
17736
|
+
*/
|
|
17663
17737
|
var FrameRefSchema = object({
|
|
17664
17738
|
registryId: string().min(1),
|
|
17665
17739
|
id: string().min(1),
|
|
@@ -19825,7 +19899,7 @@ method(object({
|
|
|
19825
19899
|
* linking rather than produce an eternal token.
|
|
19826
19900
|
*/
|
|
19827
19901
|
ttlSec: union([number$1().int().positive(), literal("never")]).optional()
|
|
19828
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19902
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19829
19903
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19830
19904
|
providerId: string().min(1),
|
|
19831
19905
|
displayName: string().min(1),
|
|
@@ -19920,10 +19994,13 @@ var EvictResultSchema = object({
|
|
|
19920
19994
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19921
19995
|
exhausted: boolean()
|
|
19922
19996
|
});
|
|
19923
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19997
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19924
19998
|
locationId: string(),
|
|
19925
19999
|
targetBytes: number$1().int().positive()
|
|
19926
|
-
}), EvictResultSchema, {
|
|
20000
|
+
}), EvictResultSchema, {
|
|
20001
|
+
kind: "mutation",
|
|
20002
|
+
auth: "admin"
|
|
20003
|
+
});
|
|
19927
20004
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19928
20005
|
kind: "mutation",
|
|
19929
20006
|
auth: "admin"
|
|
@@ -19983,26 +20060,50 @@ var ReadChunkInputSchema = object({
|
|
|
19983
20060
|
length: number$1()
|
|
19984
20061
|
});
|
|
19985
20062
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19986
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20063
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19987
20064
|
location: StorageLocationSchema,
|
|
19988
20065
|
relativePath: string()
|
|
19989
|
-
}), string()), method(object({
|
|
20066
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19990
20067
|
location: StorageLocationSchema,
|
|
19991
20068
|
relativePath: string(),
|
|
19992
20069
|
data: _instanceof(Uint8Array)
|
|
19993
|
-
}), _void(), {
|
|
20070
|
+
}), _void(), {
|
|
20071
|
+
kind: "mutation",
|
|
20072
|
+
auth: "admin"
|
|
20073
|
+
}), method(object({
|
|
19994
20074
|
location: StorageLocationSchema,
|
|
19995
20075
|
relativePath: string()
|
|
19996
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
20076
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19997
20077
|
location: StorageLocationSchema,
|
|
19998
20078
|
relativePath: string()
|
|
19999
|
-
}), boolean()), method(object({
|
|
20079
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
20000
20080
|
location: StorageLocationSchema,
|
|
20001
20081
|
prefix: string().optional()
|
|
20002
|
-
}), array(string()).readonly()), method(object({
|
|
20082
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
20003
20083
|
location: StorageLocationSchema,
|
|
20004
20084
|
relativePath: string()
|
|
20005
|
-
}), _void(), {
|
|
20085
|
+
}), _void(), {
|
|
20086
|
+
kind: "mutation",
|
|
20087
|
+
auth: "admin"
|
|
20088
|
+
}), method(object({ location: StorageLocationSchema }), number$1().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
20089
|
+
kind: "mutation",
|
|
20090
|
+
auth: "admin"
|
|
20091
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
20092
|
+
kind: "mutation",
|
|
20093
|
+
auth: "admin"
|
|
20094
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
20095
|
+
kind: "mutation",
|
|
20096
|
+
auth: "admin"
|
|
20097
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
20098
|
+
kind: "mutation",
|
|
20099
|
+
auth: "admin"
|
|
20100
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
20101
|
+
kind: "mutation",
|
|
20102
|
+
auth: "admin"
|
|
20103
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
20104
|
+
kind: "mutation",
|
|
20105
|
+
auth: "admin"
|
|
20106
|
+
});
|
|
20006
20107
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20007
20108
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20008
20109
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20260,7 +20361,8 @@ method(object({
|
|
|
20260
20361
|
access: "create"
|
|
20261
20362
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20262
20363
|
kind: "mutation",
|
|
20263
|
-
access: "view"
|
|
20364
|
+
access: "view",
|
|
20365
|
+
auth: "admin"
|
|
20264
20366
|
}), method(object({
|
|
20265
20367
|
/** Required — the user the assertion belongs to (verified). */
|
|
20266
20368
|
userId: string(),
|
|
@@ -20268,10 +20370,12 @@ method(object({
|
|
|
20268
20370
|
response: record(string(), unknown())
|
|
20269
20371
|
}), object({ verified: boolean() }), {
|
|
20270
20372
|
kind: "mutation",
|
|
20271
|
-
access: "view"
|
|
20373
|
+
access: "view",
|
|
20374
|
+
auth: "admin"
|
|
20272
20375
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20273
20376
|
kind: "mutation",
|
|
20274
|
-
access: "view"
|
|
20377
|
+
access: "view",
|
|
20378
|
+
auth: "admin"
|
|
20275
20379
|
}), method(object({
|
|
20276
20380
|
/** AuthenticationResponseJSON from the browser. */
|
|
20277
20381
|
response: record(string(), unknown()) }), object({
|
|
@@ -20279,7 +20383,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20279
20383
|
userId: string().nullable()
|
|
20280
20384
|
}), {
|
|
20281
20385
|
kind: "mutation",
|
|
20282
|
-
access: "view"
|
|
20386
|
+
access: "view",
|
|
20387
|
+
auth: "admin"
|
|
20283
20388
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20284
20389
|
userId: string(),
|
|
20285
20390
|
credentialId: string()
|
|
@@ -20451,7 +20556,19 @@ var VectorStatsResultSchema = object({
|
|
|
20451
20556
|
/** False when the backend ranks approximately. */
|
|
20452
20557
|
exact: boolean()
|
|
20453
20558
|
});
|
|
20454
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20559
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20560
|
+
kind: "mutation",
|
|
20561
|
+
auth: "admin"
|
|
20562
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20563
|
+
kind: "mutation",
|
|
20564
|
+
auth: "admin"
|
|
20565
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20566
|
+
kind: "mutation",
|
|
20567
|
+
auth: "admin"
|
|
20568
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20569
|
+
kind: "mutation",
|
|
20570
|
+
auth: "admin"
|
|
20571
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20455
20572
|
var ClipSchema = object({
|
|
20456
20573
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20457
20574
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -22174,7 +22291,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
22174
22291
|
sizeBytes: number$1(),
|
|
22175
22292
|
timestamp: number$1()
|
|
22176
22293
|
});
|
|
22177
|
-
method(
|
|
22294
|
+
method(object({
|
|
22295
|
+
/**
|
|
22296
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22297
|
+
*
|
|
22298
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22299
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22300
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22301
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22302
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22303
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22304
|
+
*
|
|
22305
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22306
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22307
|
+
*
|
|
22308
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22309
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22310
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22311
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22312
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22313
|
+
*/
|
|
22314
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
22178
22315
|
kind: "mutation",
|
|
22179
22316
|
auth: "admin"
|
|
22180
22317
|
}), method(object({
|
|
@@ -24321,8 +24458,10 @@ var PlateInfoSchema = object({
|
|
|
24321
24458
|
keyFrameMediaKey: string().optional(),
|
|
24322
24459
|
base64: string().optional(),
|
|
24323
24460
|
/**
|
|
24324
|
-
* Same crop as a data-plane URL
|
|
24325
|
-
* never inlines JPEG; `listPlates`
|
|
24461
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24462
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24463
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24464
|
+
* left at its `true` default.
|
|
24326
24465
|
*/
|
|
24327
24466
|
cropUrl: string().optional()
|
|
24328
24467
|
});
|
|
@@ -24342,14 +24481,34 @@ var PlateClusterSchema = object({
|
|
|
24342
24481
|
});
|
|
24343
24482
|
method(object({
|
|
24344
24483
|
deviceId: number$1().int().optional(),
|
|
24345
|
-
limit: number$1().int().positive().optional()
|
|
24484
|
+
limit: number$1().int().positive().optional(),
|
|
24485
|
+
/**
|
|
24486
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24487
|
+
* behaviour, kept so no caller breaks.
|
|
24488
|
+
*
|
|
24489
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24490
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24491
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24492
|
+
* metadata without them — and the browser then caches the images.
|
|
24493
|
+
*
|
|
24494
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24495
|
+
* plates were the one gallery list left without it.
|
|
24496
|
+
*
|
|
24497
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24498
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24499
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24500
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24501
|
+
*/
|
|
24502
|
+
includeCrops: boolean().optional()
|
|
24346
24503
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24347
24504
|
deviceId: number$1().int(),
|
|
24348
24505
|
trackId: string()
|
|
24349
24506
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24350
24507
|
text: string().min(1),
|
|
24351
24508
|
maxDistance: number$1().int().min(0).optional(),
|
|
24352
|
-
limit: number$1().int().positive().optional()
|
|
24509
|
+
limit: number$1().int().positive().optional(),
|
|
24510
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24511
|
+
includeCrops: boolean().optional()
|
|
24353
24512
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24354
24513
|
maxDistance: number$1().int().min(0).optional(),
|
|
24355
24514
|
minClusterSize: number$1().int().min(2).optional(),
|
|
@@ -24363,7 +24522,13 @@ method(object({
|
|
|
24363
24522
|
}), method(object({ plateId: string() }), _void(), {
|
|
24364
24523
|
kind: "mutation",
|
|
24365
24524
|
auth: "admin"
|
|
24366
|
-
}), method(
|
|
24525
|
+
}), method(object({
|
|
24526
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24527
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24528
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24529
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24530
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24531
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24367
24532
|
kind: "mutation",
|
|
24368
24533
|
auth: "admin"
|
|
24369
24534
|
}), method(object({
|
|
@@ -29740,6 +29905,12 @@ Object.freeze({
|
|
|
29740
29905
|
addonId: null,
|
|
29741
29906
|
access: "create"
|
|
29742
29907
|
},
|
|
29908
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29909
|
+
capName: "pipeline-analytics",
|
|
29910
|
+
capScope: "device",
|
|
29911
|
+
addonId: null,
|
|
29912
|
+
access: "create"
|
|
29913
|
+
},
|
|
29743
29914
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29744
29915
|
capName: "pipeline-analytics",
|
|
29745
29916
|
capScope: "device",
|
|
@@ -29914,6 +30085,12 @@ Object.freeze({
|
|
|
29914
30085
|
addonId: null,
|
|
29915
30086
|
access: "view"
|
|
29916
30087
|
},
|
|
30088
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
30089
|
+
capName: "pipeline-analytics",
|
|
30090
|
+
capScope: "device",
|
|
30091
|
+
addonId: null,
|
|
30092
|
+
access: "view"
|
|
30093
|
+
},
|
|
29917
30094
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29918
30095
|
capName: "pipeline-analytics",
|
|
29919
30096
|
capScope: "device",
|
|
@@ -29992,6 +30169,12 @@ Object.freeze({
|
|
|
29992
30169
|
addonId: null,
|
|
29993
30170
|
access: "create"
|
|
29994
30171
|
},
|
|
30172
|
+
"pipelineAnalytics.relocateMedia": {
|
|
30173
|
+
capName: "pipeline-analytics",
|
|
30174
|
+
capScope: "device",
|
|
30175
|
+
addonId: null,
|
|
30176
|
+
access: "create"
|
|
30177
|
+
},
|
|
29995
30178
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29996
30179
|
capName: "pipeline-analytics",
|
|
29997
30180
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-ai",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
4
4
|
"description": "AI addon for CamStack — the `llm` collection provider (cloud, LAN, and camstack-managed local llama.cpp profiles) plus the per-node `llm-runtime` managed executor.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|