@camstack/addon-model-studio 1.1.41 → 1.1.43
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/{MotionZonesSettings-CjuAU9G1.mjs → MotionZonesSettings-BQmeOC6s.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-DGgoakvb.mjs → PrivacyMaskSettings-MznS24IR.mjs} +4 -4
- package/dist/{SceneMonitorEditor-BbhGQMS0.mjs → SceneMonitorEditor-slpx5RVW.mjs} +3 -3
- package/dist/_stub.js +3721 -3354
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C6iWEfrD.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dvg3AwY0.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Dz7eB41h.mjs +26 -0
- package/dist/{hostInit-DiT_J3FN.mjs → hostInit-9uaH_tWZ.mjs} +3 -3
- package/dist/model-studio.addon.js +304 -100
- package/dist/model-studio.addon.mjs +304 -100
- package/dist/{player-overlays-DxUZLAfW.mjs → player-overlays-ZV106hch.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-CTOSHDQc.mjs → responsive-BWcJ76VI.mjs} +1 -1
- package/dist/{square-xdu1CBwb.mjs → square-DK5dno3H.mjs} +1 -1
- package/dist/{trash-2-Dhb8HSyo.mjs → trash-2-B9ZCrm5O.mjs} +1 -1
- package/dist/{use-device-snapshot-B5bRXvO7.mjs → use-device-snapshot-_PNv-X_c.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CJdZ-nWm.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DQmO25Hm.mjs} +1 -1
- package/package.json +1 -1
- package/python/__pycache__/convert.cpython-314.pyc +0 -0
- package/python/__pycache__/convert_lib.cpython-312.pyc +0 -0
- package/python/__pycache__/convert_lib.cpython-314.pyc +0 -0
- package/python/__tests__/__pycache__/test_convert_lib.cpython-314.pyc +0 -0
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-4Obpn8FN.mjs +0 -26
|
@@ -7308,7 +7308,7 @@ function method(input, output, options) {
|
|
|
7308
7308
|
input,
|
|
7309
7309
|
output,
|
|
7310
7310
|
kind: options?.kind ?? "query",
|
|
7311
|
-
auth: options
|
|
7311
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
7312
7312
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
7313
7313
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
7314
7314
|
timeoutMs: options?.timeoutMs
|
|
@@ -7328,7 +7328,7 @@ function systemMethod(input, output, options) {
|
|
|
7328
7328
|
}
|
|
7329
7329
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
7330
7330
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
7331
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
7331
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
7332
7332
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
7333
7333
|
DeviceType["Camera"] = "camera";
|
|
7334
7334
|
DeviceType["Hub"] = "hub";
|
|
@@ -7649,7 +7649,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7649
7649
|
}({});
|
|
7650
7650
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
7651
7651
|
var VersionOutputSchema = object({ version: string() });
|
|
7652
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
7652
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
7653
7653
|
/**
|
|
7654
7654
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7655
7655
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -8263,24 +8263,6 @@ var RecordingRetentionSchema = object({
|
|
|
8263
8263
|
maxSizeGb: number().min(0).optional()
|
|
8264
8264
|
});
|
|
8265
8265
|
/**
|
|
8266
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
8267
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
8268
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
8269
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
8270
|
-
*
|
|
8271
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
8272
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
8273
|
-
* preset changed over time renders every historical window at the dims it was
|
|
8274
|
-
* written with.
|
|
8275
|
-
*/
|
|
8276
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
8277
|
-
"minimal",
|
|
8278
|
-
"low",
|
|
8279
|
-
"standard",
|
|
8280
|
-
"high",
|
|
8281
|
-
"max"
|
|
8282
|
-
]);
|
|
8283
|
-
/**
|
|
8284
8266
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
8285
8267
|
*
|
|
8286
8268
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -8288,7 +8270,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
8288
8270
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
8289
8271
|
*
|
|
8290
8272
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
8291
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
8273
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
8274
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
8275
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
8276
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
8277
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
8292
8278
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
8293
8279
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
8294
8280
|
*/
|
|
@@ -8311,14 +8297,7 @@ var RecordingConfigSchema = object({
|
|
|
8311
8297
|
* "off" is the absence of a covering band, never a band value.
|
|
8312
8298
|
*/
|
|
8313
8299
|
bands: array(RecordingBandSchema).default([]),
|
|
8314
|
-
retention: RecordingRetentionSchema.optional()
|
|
8315
|
-
/**
|
|
8316
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
8317
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
8318
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
8319
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
8320
|
-
*/
|
|
8321
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
8300
|
+
retention: RecordingRetentionSchema.optional()
|
|
8322
8301
|
}).strict();
|
|
8323
8302
|
/**
|
|
8324
8303
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -8394,10 +8373,11 @@ var RelocateFootageInputSchema = object({
|
|
|
8394
8373
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
8395
8374
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
8396
8375
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
8397
|
-
var
|
|
8376
|
+
var RelocateMediaInputSchema = object({
|
|
8398
8377
|
toLocationId: string(),
|
|
8399
8378
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
8400
|
-
})
|
|
8379
|
+
});
|
|
8380
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
8401
8381
|
/** The independently selectable logical storage classes. `recordings`
|
|
8402
8382
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
8403
8383
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8692,7 +8672,26 @@ var LabelDefinitionSchema = object({
|
|
|
8692
8672
|
description: string().optional(),
|
|
8693
8673
|
icon: string().optional()
|
|
8694
8674
|
});
|
|
8695
|
-
|
|
8675
|
+
/**
|
|
8676
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8677
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8678
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8679
|
+
* detection pipeline executor actually routes.
|
|
8680
|
+
*
|
|
8681
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8682
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8683
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8684
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8685
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8686
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8687
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8688
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8689
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8690
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8691
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8692
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8693
|
+
*/
|
|
8694
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8696
8695
|
mapping: record(string(), _enum([
|
|
8697
8696
|
"person",
|
|
8698
8697
|
"vehicle",
|
|
@@ -8897,7 +8896,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8897
8896
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8898
8897
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8899
8898
|
*/
|
|
8900
|
-
classMap:
|
|
8899
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8901
8900
|
});
|
|
8902
8901
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8903
8902
|
format: literal("openvino"),
|
|
@@ -8927,7 +8926,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8927
8926
|
"segmentation"
|
|
8928
8927
|
]),
|
|
8929
8928
|
faceAlignment: boolean().optional(),
|
|
8930
|
-
classMap:
|
|
8929
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8931
8930
|
});
|
|
8932
8931
|
var ConvertArtifactSchema = object({
|
|
8933
8932
|
format: _enum(MODEL_FORMATS),
|
|
@@ -9796,7 +9795,18 @@ var addonPagesSourceCapability = {
|
|
|
9796
9795
|
scope: "system",
|
|
9797
9796
|
mode: "collection",
|
|
9798
9797
|
internal: true,
|
|
9799
|
-
methods: {
|
|
9798
|
+
methods: {
|
|
9799
|
+
/**
|
|
9800
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
9801
|
+
* `data-store-provider`) — this was reachable on the AppRouter by ANY
|
|
9802
|
+
* authenticated session at the default `auth: 'protected'`. The only
|
|
9803
|
+
* consumer, the `addon-pages-aggregator` builtin, reads it via
|
|
9804
|
+
* `ctx.capabilities.getCollection('addon-pages-source')` — LOCAL-PROCESS
|
|
9805
|
+
* only, never tRPC (per `ctx.capabilities` seeing only the local
|
|
9806
|
+
* process). The public, enriched listing admin-ui actually consumes is
|
|
9807
|
+
* the separate `addon-pages` cap, unaffected by this change.
|
|
9808
|
+
*/
|
|
9809
|
+
listPages: method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" }) }
|
|
9800
9810
|
};
|
|
9801
9811
|
var AddonHttpRouteSchema = object({
|
|
9802
9812
|
method: _enum([
|
|
@@ -10032,7 +10042,7 @@ var WidgetMetadataSchema = object({
|
|
|
10032
10042
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
10033
10043
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
10034
10044
|
});
|
|
10035
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
10045
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
10036
10046
|
/**
|
|
10037
10047
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
10038
10048
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -11581,7 +11591,17 @@ var customModelRegistryCapability = {
|
|
|
11581
11591
|
scope: "system",
|
|
11582
11592
|
mode: "collection",
|
|
11583
11593
|
internal: true,
|
|
11584
|
-
methods: {
|
|
11594
|
+
methods: {
|
|
11595
|
+
/**
|
|
11596
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
11597
|
+
* `data-store-provider`) — this was reachable on the AppRouter by ANY
|
|
11598
|
+
* authenticated session at the default `auth: 'protected'`. The only
|
|
11599
|
+
* consumer, the detection-pipeline's model resolution
|
|
11600
|
+
* (`addon-pipeline/src/detection-pipeline/provider.ts`), calls
|
|
11601
|
+
* `ctx.api.customModelRegistry.listModels.query()` — UDS/Moleculer,
|
|
11602
|
+
* never tRPC — so `auth: 'admin'` costs it nothing.
|
|
11603
|
+
*/
|
|
11604
|
+
listModels: method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" }) }
|
|
11585
11605
|
};
|
|
11586
11606
|
/**
|
|
11587
11607
|
* Query filter for settings-store collections.
|
|
@@ -11669,7 +11689,8 @@ method(object({
|
|
|
11669
11689
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11670
11690
|
namespace: string().optional(),
|
|
11671
11691
|
collection: string(),
|
|
11672
|
-
filter: QueryFilterSchema.optional()
|
|
11692
|
+
filter: QueryFilterSchema.optional(),
|
|
11693
|
+
columns: array(string()).readonly().optional()
|
|
11673
11694
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11674
11695
|
namespace: string().optional(),
|
|
11675
11696
|
collection: string(),
|
|
@@ -11732,46 +11753,87 @@ var EngineInfoSchema = object({
|
|
|
11732
11753
|
kind: _enum(["relational", "vector"]),
|
|
11733
11754
|
displayName: string()
|
|
11734
11755
|
});
|
|
11735
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11756
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11736
11757
|
namespace: string().optional(),
|
|
11737
11758
|
collection: string(),
|
|
11738
11759
|
key: string()
|
|
11739
|
-
}), unknown()), method(object({
|
|
11760
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11740
11761
|
namespace: string().optional(),
|
|
11741
11762
|
collection: string(),
|
|
11742
11763
|
key: string(),
|
|
11743
11764
|
value: unknown()
|
|
11744
|
-
}), _void(), {
|
|
11765
|
+
}), _void(), {
|
|
11766
|
+
kind: "mutation",
|
|
11767
|
+
auth: "admin"
|
|
11768
|
+
}), method(object({
|
|
11745
11769
|
namespace: string().optional(),
|
|
11746
11770
|
collection: string(),
|
|
11747
|
-
filter: QueryFilterSchema.optional()
|
|
11748
|
-
|
|
11771
|
+
filter: QueryFilterSchema.optional(),
|
|
11772
|
+
/**
|
|
11773
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11774
|
+
*
|
|
11775
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11776
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11777
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11778
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11779
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11780
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11781
|
+
*
|
|
11782
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11783
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11784
|
+
* interface the engine destructures from. The field existed on both
|
|
11785
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11786
|
+
* registered provider against `InferProvider<cap>` —
|
|
11787
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11788
|
+
*
|
|
11789
|
+
* It is declared here anyway, and must stay in step with
|
|
11790
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11791
|
+
* to be able to see that this call carries a projection.
|
|
11792
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11793
|
+
*/
|
|
11794
|
+
columns: array(string()).readonly().optional()
|
|
11795
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11749
11796
|
namespace: string().optional(),
|
|
11750
11797
|
collection: string(),
|
|
11751
11798
|
record: SettingsRecordSchema
|
|
11752
|
-
}), _void(), {
|
|
11799
|
+
}), _void(), {
|
|
11800
|
+
kind: "mutation",
|
|
11801
|
+
auth: "admin"
|
|
11802
|
+
}), method(object({
|
|
11753
11803
|
namespace: string().optional(),
|
|
11754
11804
|
collection: string(),
|
|
11755
11805
|
id: string(),
|
|
11756
11806
|
data: record(string(), unknown())
|
|
11757
|
-
}), _void(), {
|
|
11807
|
+
}), _void(), {
|
|
11808
|
+
kind: "mutation",
|
|
11809
|
+
auth: "admin"
|
|
11810
|
+
}), method(object({
|
|
11758
11811
|
namespace: string().optional(),
|
|
11759
11812
|
collection: string(),
|
|
11760
11813
|
key: string()
|
|
11761
|
-
}), _void(), {
|
|
11814
|
+
}), _void(), {
|
|
11815
|
+
kind: "mutation",
|
|
11816
|
+
auth: "admin"
|
|
11817
|
+
}), method(object({
|
|
11762
11818
|
namespace: string().optional(),
|
|
11763
11819
|
collection: string(),
|
|
11764
11820
|
filter: MutationFilterSchema
|
|
11765
|
-
}), object({ deleted: number().int() }), {
|
|
11821
|
+
}), object({ deleted: number().int() }), {
|
|
11822
|
+
kind: "mutation",
|
|
11823
|
+
auth: "admin"
|
|
11824
|
+
}), method(object({
|
|
11766
11825
|
namespace: string().optional(),
|
|
11767
11826
|
collection: string(),
|
|
11768
11827
|
filter: MutationFilterSchema,
|
|
11769
11828
|
data: record(string(), unknown())
|
|
11770
|
-
}), object({ updated: number().int() }), {
|
|
11829
|
+
}), object({ updated: number().int() }), {
|
|
11830
|
+
kind: "mutation",
|
|
11831
|
+
auth: "admin"
|
|
11832
|
+
}), method(object({
|
|
11771
11833
|
namespace: string().optional(),
|
|
11772
11834
|
collection: string(),
|
|
11773
11835
|
filter: QueryFilterSchema.optional()
|
|
11774
|
-
}), number()), method(object({
|
|
11836
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11775
11837
|
namespace: string().optional(),
|
|
11776
11838
|
collection: string(),
|
|
11777
11839
|
field: string(),
|
|
@@ -11781,15 +11843,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11781
11843
|
}), array(object({
|
|
11782
11844
|
bucket: number().int(),
|
|
11783
11845
|
count: number().int()
|
|
11784
|
-
})).readonly()), method(object({
|
|
11846
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11785
11847
|
namespace: string().optional(),
|
|
11786
11848
|
collection: string()
|
|
11787
|
-
}), boolean()), method(object({
|
|
11849
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11788
11850
|
namespace: string().optional(),
|
|
11789
11851
|
collection: string(),
|
|
11790
11852
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11791
11853
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11792
|
-
}), _void(), {
|
|
11854
|
+
}), _void(), {
|
|
11855
|
+
kind: "mutation",
|
|
11856
|
+
auth: "admin"
|
|
11857
|
+
});
|
|
11793
11858
|
/**
|
|
11794
11859
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11795
11860
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12917,7 +12982,7 @@ method(object({
|
|
|
12917
12982
|
crop: _instanceof(Uint8Array),
|
|
12918
12983
|
width: number(),
|
|
12919
12984
|
height: number()
|
|
12920
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12985
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12921
12986
|
/**
|
|
12922
12987
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12923
12988
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -13210,19 +13275,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
13210
13275
|
runtime: ManagedRuntimeConfigSchema,
|
|
13211
13276
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
13212
13277
|
timeoutMs: number().int().positive().optional()
|
|
13213
|
-
}), LlmGenerateResultSchema, {
|
|
13278
|
+
}), LlmGenerateResultSchema, {
|
|
13279
|
+
kind: "mutation",
|
|
13280
|
+
auth: "admin"
|
|
13281
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
13214
13282
|
kind: "mutation",
|
|
13215
13283
|
auth: "admin"
|
|
13216
13284
|
}), method(object({}), _void(), {
|
|
13217
13285
|
kind: "mutation",
|
|
13218
13286
|
auth: "admin"
|
|
13219
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13287
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
13220
13288
|
kind: "mutation",
|
|
13221
13289
|
auth: "admin"
|
|
13222
13290
|
}), method(object({ file: string() }), _void(), {
|
|
13223
13291
|
kind: "mutation",
|
|
13224
13292
|
auth: "admin"
|
|
13225
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
13293
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
13226
13294
|
/**
|
|
13227
13295
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
13228
13296
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16701,7 +16769,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16701
16769
|
*/
|
|
16702
16770
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16703
16771
|
});
|
|
16704
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16772
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16705
16773
|
/**
|
|
16706
16774
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16707
16775
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17896,6 +17964,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17896
17964
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17897
17965
|
kind: "mutation",
|
|
17898
17966
|
auth: "admin"
|
|
17967
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17968
|
+
kind: "mutation",
|
|
17969
|
+
auth: "admin"
|
|
17970
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17971
|
+
kind: "query",
|
|
17972
|
+
auth: "admin"
|
|
17973
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17974
|
+
kind: "mutation",
|
|
17975
|
+
auth: "admin"
|
|
17899
17976
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17900
17977
|
kind: "query",
|
|
17901
17978
|
auth: "admin"
|
|
@@ -18050,6 +18127,11 @@ object({
|
|
|
18050
18127
|
"jpeg"
|
|
18051
18128
|
])
|
|
18052
18129
|
});
|
|
18130
|
+
/**
|
|
18131
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
18132
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
18133
|
+
* other process or execution group.
|
|
18134
|
+
*/
|
|
18053
18135
|
var FrameRefSchema = object({
|
|
18054
18136
|
registryId: string().min(1),
|
|
18055
18137
|
id: string().min(1),
|
|
@@ -20215,7 +20297,7 @@ method(object({
|
|
|
20215
20297
|
* linking rather than produce an eternal token.
|
|
20216
20298
|
*/
|
|
20217
20299
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
20218
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
20300
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
20219
20301
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
20220
20302
|
providerId: string().min(1),
|
|
20221
20303
|
displayName: string().min(1),
|
|
@@ -20310,10 +20392,13 @@ var EvictResultSchema = object({
|
|
|
20310
20392
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
20311
20393
|
exhausted: boolean()
|
|
20312
20394
|
});
|
|
20313
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
20395
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
20314
20396
|
locationId: string(),
|
|
20315
20397
|
targetBytes: number().int().positive()
|
|
20316
|
-
}), EvictResultSchema, {
|
|
20398
|
+
}), EvictResultSchema, {
|
|
20399
|
+
kind: "mutation",
|
|
20400
|
+
auth: "admin"
|
|
20401
|
+
});
|
|
20317
20402
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
20318
20403
|
kind: "mutation",
|
|
20319
20404
|
auth: "admin"
|
|
@@ -20373,26 +20458,50 @@ var ReadChunkInputSchema = object({
|
|
|
20373
20458
|
length: number()
|
|
20374
20459
|
});
|
|
20375
20460
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
20376
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20461
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20377
20462
|
location: StorageLocationSchema,
|
|
20378
20463
|
relativePath: string()
|
|
20379
|
-
}), string()), method(object({
|
|
20464
|
+
}), string(), { auth: "admin" }), method(object({
|
|
20380
20465
|
location: StorageLocationSchema,
|
|
20381
20466
|
relativePath: string(),
|
|
20382
20467
|
data: _instanceof(Uint8Array)
|
|
20383
|
-
}), _void(), {
|
|
20468
|
+
}), _void(), {
|
|
20469
|
+
kind: "mutation",
|
|
20470
|
+
auth: "admin"
|
|
20471
|
+
}), method(object({
|
|
20384
20472
|
location: StorageLocationSchema,
|
|
20385
20473
|
relativePath: string()
|
|
20386
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
20474
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
20387
20475
|
location: StorageLocationSchema,
|
|
20388
20476
|
relativePath: string()
|
|
20389
|
-
}), boolean()), method(object({
|
|
20477
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
20390
20478
|
location: StorageLocationSchema,
|
|
20391
20479
|
prefix: string().optional()
|
|
20392
|
-
}), array(string()).readonly()), method(object({
|
|
20480
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
20393
20481
|
location: StorageLocationSchema,
|
|
20394
20482
|
relativePath: string()
|
|
20395
|
-
}), _void(), {
|
|
20483
|
+
}), _void(), {
|
|
20484
|
+
kind: "mutation",
|
|
20485
|
+
auth: "admin"
|
|
20486
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
20487
|
+
kind: "mutation",
|
|
20488
|
+
auth: "admin"
|
|
20489
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
20490
|
+
kind: "mutation",
|
|
20491
|
+
auth: "admin"
|
|
20492
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
20493
|
+
kind: "mutation",
|
|
20494
|
+
auth: "admin"
|
|
20495
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
20496
|
+
kind: "mutation",
|
|
20497
|
+
auth: "admin"
|
|
20498
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
20499
|
+
kind: "mutation",
|
|
20500
|
+
auth: "admin"
|
|
20501
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
20502
|
+
kind: "mutation",
|
|
20503
|
+
auth: "admin"
|
|
20504
|
+
});
|
|
20396
20505
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20397
20506
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20398
20507
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20650,7 +20759,8 @@ method(object({
|
|
|
20650
20759
|
access: "create"
|
|
20651
20760
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20652
20761
|
kind: "mutation",
|
|
20653
|
-
access: "view"
|
|
20762
|
+
access: "view",
|
|
20763
|
+
auth: "admin"
|
|
20654
20764
|
}), method(object({
|
|
20655
20765
|
/** Required — the user the assertion belongs to (verified). */
|
|
20656
20766
|
userId: string(),
|
|
@@ -20658,10 +20768,12 @@ method(object({
|
|
|
20658
20768
|
response: record(string(), unknown())
|
|
20659
20769
|
}), object({ verified: boolean() }), {
|
|
20660
20770
|
kind: "mutation",
|
|
20661
|
-
access: "view"
|
|
20771
|
+
access: "view",
|
|
20772
|
+
auth: "admin"
|
|
20662
20773
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20663
20774
|
kind: "mutation",
|
|
20664
|
-
access: "view"
|
|
20775
|
+
access: "view",
|
|
20776
|
+
auth: "admin"
|
|
20665
20777
|
}), method(object({
|
|
20666
20778
|
/** AuthenticationResponseJSON from the browser. */
|
|
20667
20779
|
response: record(string(), unknown()) }), object({
|
|
@@ -20669,7 +20781,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20669
20781
|
userId: string().nullable()
|
|
20670
20782
|
}), {
|
|
20671
20783
|
kind: "mutation",
|
|
20672
|
-
access: "view"
|
|
20784
|
+
access: "view",
|
|
20785
|
+
auth: "admin"
|
|
20673
20786
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20674
20787
|
userId: string(),
|
|
20675
20788
|
credentialId: string()
|
|
@@ -20841,7 +20954,19 @@ var VectorStatsResultSchema = object({
|
|
|
20841
20954
|
/** False when the backend ranks approximately. */
|
|
20842
20955
|
exact: boolean()
|
|
20843
20956
|
});
|
|
20844
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20957
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20958
|
+
kind: "mutation",
|
|
20959
|
+
auth: "admin"
|
|
20960
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20961
|
+
kind: "mutation",
|
|
20962
|
+
auth: "admin"
|
|
20963
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20964
|
+
kind: "mutation",
|
|
20965
|
+
auth: "admin"
|
|
20966
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20967
|
+
kind: "mutation",
|
|
20968
|
+
auth: "admin"
|
|
20969
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20845
20970
|
var ClipSchema = object({
|
|
20846
20971
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20847
20972
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -22564,7 +22689,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
22564
22689
|
sizeBytes: number(),
|
|
22565
22690
|
timestamp: number()
|
|
22566
22691
|
});
|
|
22567
|
-
method(
|
|
22692
|
+
method(object({
|
|
22693
|
+
/**
|
|
22694
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22695
|
+
*
|
|
22696
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22697
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22698
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22699
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22700
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22701
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22702
|
+
*
|
|
22703
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22704
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22705
|
+
*
|
|
22706
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22707
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22708
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22709
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22710
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22711
|
+
*/
|
|
22712
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
22568
22713
|
kind: "mutation",
|
|
22569
22714
|
auth: "admin"
|
|
22570
22715
|
}), method(object({
|
|
@@ -24711,8 +24856,10 @@ var PlateInfoSchema = object({
|
|
|
24711
24856
|
keyFrameMediaKey: string().optional(),
|
|
24712
24857
|
base64: string().optional(),
|
|
24713
24858
|
/**
|
|
24714
|
-
* Same crop as a data-plane URL
|
|
24715
|
-
* never inlines JPEG; `listPlates`
|
|
24859
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24860
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24861
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24862
|
+
* left at its `true` default.
|
|
24716
24863
|
*/
|
|
24717
24864
|
cropUrl: string().optional()
|
|
24718
24865
|
});
|
|
@@ -24732,14 +24879,34 @@ var PlateClusterSchema = object({
|
|
|
24732
24879
|
});
|
|
24733
24880
|
method(object({
|
|
24734
24881
|
deviceId: number().int().optional(),
|
|
24735
|
-
limit: number().int().positive().optional()
|
|
24882
|
+
limit: number().int().positive().optional(),
|
|
24883
|
+
/**
|
|
24884
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24885
|
+
* behaviour, kept so no caller breaks.
|
|
24886
|
+
*
|
|
24887
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24888
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24889
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24890
|
+
* metadata without them — and the browser then caches the images.
|
|
24891
|
+
*
|
|
24892
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24893
|
+
* plates were the one gallery list left without it.
|
|
24894
|
+
*
|
|
24895
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24896
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24897
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24898
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24899
|
+
*/
|
|
24900
|
+
includeCrops: boolean().optional()
|
|
24736
24901
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24737
24902
|
deviceId: number().int(),
|
|
24738
24903
|
trackId: string()
|
|
24739
24904
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24740
24905
|
text: string().min(1),
|
|
24741
24906
|
maxDistance: number().int().min(0).optional(),
|
|
24742
|
-
limit: number().int().positive().optional()
|
|
24907
|
+
limit: number().int().positive().optional(),
|
|
24908
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24909
|
+
includeCrops: boolean().optional()
|
|
24743
24910
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24744
24911
|
maxDistance: number().int().min(0).optional(),
|
|
24745
24912
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24753,7 +24920,13 @@ method(object({
|
|
|
24753
24920
|
}), method(object({ plateId: string() }), _void(), {
|
|
24754
24921
|
kind: "mutation",
|
|
24755
24922
|
auth: "admin"
|
|
24756
|
-
}), method(
|
|
24923
|
+
}), method(object({
|
|
24924
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24925
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24926
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24927
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24928
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24929
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24757
24930
|
kind: "mutation",
|
|
24758
24931
|
auth: "admin"
|
|
24759
24932
|
}), method(object({
|
|
@@ -30130,6 +30303,12 @@ Object.freeze({
|
|
|
30130
30303
|
addonId: null,
|
|
30131
30304
|
access: "create"
|
|
30132
30305
|
},
|
|
30306
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
30307
|
+
capName: "pipeline-analytics",
|
|
30308
|
+
capScope: "device",
|
|
30309
|
+
addonId: null,
|
|
30310
|
+
access: "create"
|
|
30311
|
+
},
|
|
30133
30312
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
30134
30313
|
capName: "pipeline-analytics",
|
|
30135
30314
|
capScope: "device",
|
|
@@ -30304,6 +30483,12 @@ Object.freeze({
|
|
|
30304
30483
|
addonId: null,
|
|
30305
30484
|
access: "view"
|
|
30306
30485
|
},
|
|
30486
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
30487
|
+
capName: "pipeline-analytics",
|
|
30488
|
+
capScope: "device",
|
|
30489
|
+
addonId: null,
|
|
30490
|
+
access: "view"
|
|
30491
|
+
},
|
|
30307
30492
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
30308
30493
|
capName: "pipeline-analytics",
|
|
30309
30494
|
capScope: "device",
|
|
@@ -30382,6 +30567,12 @@ Object.freeze({
|
|
|
30382
30567
|
addonId: null,
|
|
30383
30568
|
access: "create"
|
|
30384
30569
|
},
|
|
30570
|
+
"pipelineAnalytics.relocateMedia": {
|
|
30571
|
+
capName: "pipeline-analytics",
|
|
30572
|
+
capScope: "device",
|
|
30573
|
+
addonId: null,
|
|
30574
|
+
access: "create"
|
|
30575
|
+
},
|
|
30385
30576
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
30386
30577
|
capName: "pipeline-analytics",
|
|
30387
30578
|
capScope: "device",
|
|
@@ -35682,6 +35873,38 @@ var ScryptedCatalogDriftSchema = object({
|
|
|
35682
35873
|
]),
|
|
35683
35874
|
details: string().optional()
|
|
35684
35875
|
});
|
|
35876
|
+
/**
|
|
35877
|
+
* Curated PUBLIC Frigate catalog entry (D214 addendum). Named + exported so
|
|
35878
|
+
* the UI's `listFrigateCatalog` result parses against the SAME schema this
|
|
35879
|
+
* action's output is declared with (see `modelStudioActions.listFrigateCatalog`
|
|
35880
|
+
* below) — one shape, not a hand-duplicated interface on the UI side.
|
|
35881
|
+
*/
|
|
35882
|
+
var FrigateCatalogEntrySchema = object({
|
|
35883
|
+
id: string(),
|
|
35884
|
+
label: string(),
|
|
35885
|
+
format: _enum(MODEL_FORMATS),
|
|
35886
|
+
sizeMB: number(),
|
|
35887
|
+
inputSize: number(),
|
|
35888
|
+
notes: string()
|
|
35889
|
+
});
|
|
35890
|
+
/**
|
|
35891
|
+
* Frigate+ `/v1/model/list` entry (see `frigate-plus.ts`). `isBaseModel` is
|
|
35892
|
+
* the Base/Custom discriminator Frigate's own UI groups on. Named + exported
|
|
35893
|
+
* for the same reason as {@link FrigateCatalogEntrySchema}.
|
|
35894
|
+
*/
|
|
35895
|
+
var FrigatePlusModelSchema = object({
|
|
35896
|
+
id: string(),
|
|
35897
|
+
name: string(),
|
|
35898
|
+
type: string(),
|
|
35899
|
+
isBaseModel: boolean(),
|
|
35900
|
+
baseModel: string(),
|
|
35901
|
+
supportedDetectors: array(string()).readonly(),
|
|
35902
|
+
trainDate: string(),
|
|
35903
|
+
hailoDevice: string().optional(),
|
|
35904
|
+
verifiedImages: number(),
|
|
35905
|
+
width: number().optional(),
|
|
35906
|
+
height: number().optional()
|
|
35907
|
+
});
|
|
35685
35908
|
var modelStudioActions = defineCustomActions({
|
|
35686
35909
|
registerCustomModel: customAction(CustomModelDescriptorSchema, object({ ok: literal(true) }), { kind: "mutation" }),
|
|
35687
35910
|
removeCustomModel: customAction(object({ modelId: string() }), object({ removed: boolean() }), { kind: "mutation" }),
|
|
@@ -35730,14 +35953,7 @@ var modelStudioActions = defineCustomActions({
|
|
|
35730
35953
|
* the hub's modelsDir and registers the descriptor with the public URL
|
|
35731
35954
|
* (other nodes download on demand — no Distribute needed).
|
|
35732
35955
|
*/
|
|
35733
|
-
listFrigateCatalog: customAction(_void(), array(
|
|
35734
|
-
id: string(),
|
|
35735
|
-
label: string(),
|
|
35736
|
-
format: _enum(MODEL_FORMATS),
|
|
35737
|
-
sizeMB: number(),
|
|
35738
|
-
inputSize: number(),
|
|
35739
|
-
notes: string()
|
|
35740
|
-
})).readonly()),
|
|
35956
|
+
listFrigateCatalog: customAction(_void(), array(FrigateCatalogEntrySchema).readonly()),
|
|
35741
35957
|
importFrigateCatalogModel: customAction(object({
|
|
35742
35958
|
catalogId: string(),
|
|
35743
35959
|
modelId: string().optional(),
|
|
@@ -35777,19 +35993,7 @@ var modelStudioActions = defineCustomActions({
|
|
|
35777
35993
|
ok: boolean(),
|
|
35778
35994
|
error: string().optional()
|
|
35779
35995
|
}), { kind: "mutation" }),
|
|
35780
|
-
frigatePlusListModels: customAction(_void(), array(
|
|
35781
|
-
id: string(),
|
|
35782
|
-
name: string(),
|
|
35783
|
-
type: string(),
|
|
35784
|
-
isBaseModel: boolean(),
|
|
35785
|
-
baseModel: string(),
|
|
35786
|
-
supportedDetectors: array(string()).readonly(),
|
|
35787
|
-
trainDate: string(),
|
|
35788
|
-
hailoDevice: string().optional(),
|
|
35789
|
-
verifiedImages: number(),
|
|
35790
|
-
width: number().optional(),
|
|
35791
|
-
height: number().optional()
|
|
35792
|
-
})).readonly()),
|
|
35996
|
+
frigatePlusListModels: customAction(_void(), array(FrigatePlusModelSchema).readonly()),
|
|
35793
35997
|
importFrigatePlusModel: customAction(object({
|
|
35794
35998
|
plusModelId: string(),
|
|
35795
35999
|
modelId: string(),
|