@camstack/addon-model-studio 1.0.21 → 1.0.23
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-xXTYDtIM.mjs → MotionZonesSettings-V2yIs-HU.mjs} +1 -1
- package/dist/{PrivacyMaskSettings-CUB3plKT.mjs → PrivacyMaskSettings-Dyra_2OQ.mjs} +2 -2
- package/dist/_stub.js +55 -26
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BZHMr_NM.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DLo6NxsJ.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DZNCAksg.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-B0Kz_Xao.mjs → hostInit-BjWAUtz3.mjs} +3 -3
- package/dist/model-studio.addon.js +1095 -53
- package/dist/model-studio.addon.mjs +1095 -53
- package/dist/{player-overlays-6JCUcHzw.mjs → player-overlays-CyvsNo4x.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{trash-2-CH1_KJWF.mjs → trash-2-DFa9I1X0.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BeSSIZvy.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DInm_HJ2.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DGeSi8Rf.mjs +0 -26
|
@@ -4297,6 +4297,14 @@ function object(shape, params) {
|
|
|
4297
4297
|
...normalizeParams(params)
|
|
4298
4298
|
});
|
|
4299
4299
|
}
|
|
4300
|
+
function looseObject(shape, params) {
|
|
4301
|
+
return new ZodObject({
|
|
4302
|
+
type: "object",
|
|
4303
|
+
shape,
|
|
4304
|
+
catchall: unknown(),
|
|
4305
|
+
...normalizeParams(params)
|
|
4306
|
+
});
|
|
4307
|
+
}
|
|
4300
4308
|
var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
|
|
4301
4309
|
$ZodUnion.init(inst, def);
|
|
4302
4310
|
ZodType.init(inst, def);
|
|
@@ -4638,7 +4646,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4638
4646
|
return inst;
|
|
4639
4647
|
}
|
|
4640
4648
|
//#endregion
|
|
4641
|
-
//#region ../types/dist/
|
|
4649
|
+
//#region ../types/dist/event-category-CFZs3jI4.mjs
|
|
4642
4650
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4643
4651
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4644
4652
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5048,10 +5056,51 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5048
5056
|
EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
|
|
5049
5057
|
EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
|
|
5050
5058
|
EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
|
|
5059
|
+
/**
|
|
5060
|
+
* Unified track-lifecycle event: ONE category carrying `phase:
|
|
5061
|
+
* 'start' | 'update' | 'end'` with a rich, typed
|
|
5062
|
+
* `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
|
|
5063
|
+
* `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
|
|
5064
|
+
* pair — a consumer subscribes once and branches on `phase`.
|
|
5065
|
+
*/
|
|
5066
|
+
EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
|
|
5067
|
+
/**
|
|
5068
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5069
|
+
* (`phase:'start'`). Kept as a soft alias — no known subscribers.
|
|
5070
|
+
*/
|
|
5051
5071
|
EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
|
|
5072
|
+
/**
|
|
5073
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5074
|
+
* (`phase:'end'`). Kept as a soft alias — no known subscribers.
|
|
5075
|
+
*/
|
|
5052
5076
|
EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
|
|
5053
5077
|
EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
|
|
5054
5078
|
EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
|
|
5079
|
+
/**
|
|
5080
|
+
* Fired by `addon-post-analysis` when a parked (stationary) object appears
|
|
5081
|
+
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
5082
|
+
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
5083
|
+
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
5084
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
5085
|
+
*/
|
|
5086
|
+
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
5087
|
+
/**
|
|
5088
|
+
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
5089
|
+
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
5090
|
+
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
5091
|
+
* removed. Telemetry semantics (D8): a lost event only delays a refresh,
|
|
5092
|
+
* never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
|
|
5093
|
+
*/
|
|
5094
|
+
EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
|
|
5095
|
+
/**
|
|
5096
|
+
* Fired by `addon-post-analysis` whenever a gallery plate row changes:
|
|
5097
|
+
* `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
|
|
5098
|
+
* `'assigned'` / `'unassigned'` its vehicle link changed
|
|
5099
|
+
* (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
|
|
5100
|
+
* semantics (D8): a lost event only delays a refresh, never a correctness
|
|
5101
|
+
* issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
|
|
5102
|
+
*/
|
|
5103
|
+
EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
|
|
5055
5104
|
EventCategory["FrigateLiveEvent"] = "frigate.live-event";
|
|
5056
5105
|
EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
|
|
5057
5106
|
/**
|
|
@@ -6880,7 +6929,8 @@ var MODEL_FORMATS = [
|
|
|
6880
6929
|
"coreml",
|
|
6881
6930
|
"openvino",
|
|
6882
6931
|
"tflite",
|
|
6883
|
-
"pt"
|
|
6932
|
+
"pt",
|
|
6933
|
+
"gguf"
|
|
6884
6934
|
];
|
|
6885
6935
|
/**
|
|
6886
6936
|
* Multi-file format payload.
|
|
@@ -6924,7 +6974,8 @@ var ModelFormatsSchema = object({
|
|
|
6924
6974
|
coreml: ModelFormatEntrySchema.optional(),
|
|
6925
6975
|
openvino: ModelFormatEntrySchema.optional(),
|
|
6926
6976
|
tflite: ModelFormatEntrySchema.optional(),
|
|
6927
|
-
pt: ModelFormatEntrySchema.optional()
|
|
6977
|
+
pt: ModelFormatEntrySchema.optional(),
|
|
6978
|
+
gguf: ModelFormatEntrySchema.optional()
|
|
6928
6979
|
});
|
|
6929
6980
|
/**
|
|
6930
6981
|
* Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
|
|
@@ -6965,6 +7016,15 @@ var ModelCatalogEntrySchema = object({
|
|
|
6965
7016
|
width: number(),
|
|
6966
7017
|
height: number()
|
|
6967
7018
|
}),
|
|
7019
|
+
/**
|
|
7020
|
+
* Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
|
|
7021
|
+
* every detector / classifier / embedder. Set to 1 for a grayscale CTC text
|
|
7022
|
+
* recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
|
|
7023
|
+
* feeds a single-channel, EasyOCR-normalized tensor instead of the default
|
|
7024
|
+
* 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
|
|
7025
|
+
* Python inference pool.
|
|
7026
|
+
*/
|
|
7027
|
+
inputChannels: number().int().positive().optional(),
|
|
6968
7028
|
labels: array(LabelDefinitionSchema).readonly(),
|
|
6969
7029
|
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6970
7030
|
inputNormalization: _enum([
|
|
@@ -6974,6 +7034,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
6974
7034
|
]).optional(),
|
|
6975
7035
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6976
7036
|
/**
|
|
7037
|
+
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
7038
|
+
* `StepDefinition.postprocessor` applies (the normal case — every model in a
|
|
7039
|
+
* step shares its decode). Set it when a step hosts models with DIFFERENT raw
|
|
7040
|
+
* output layouts under one slot: e.g. object-detection is `'yolo'` by default,
|
|
7041
|
+
* but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
|
|
7042
|
+
* 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
|
|
7043
|
+
* by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
|
|
7044
|
+
*/
|
|
7045
|
+
postprocessor: custom().optional(),
|
|
7046
|
+
/**
|
|
6977
7047
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
6978
7048
|
* onto the canonical template) before this step runs, instead of a plain
|
|
6979
7049
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -10450,7 +10520,8 @@ var ModelFormatSchema$1 = _enum([
|
|
|
10450
10520
|
"coreml",
|
|
10451
10521
|
"openvino",
|
|
10452
10522
|
"tflite",
|
|
10453
|
-
"pt"
|
|
10523
|
+
"pt",
|
|
10524
|
+
"gguf"
|
|
10454
10525
|
]);
|
|
10455
10526
|
var PipelineSlotSchema = _enum([
|
|
10456
10527
|
"detector",
|
|
@@ -10544,7 +10615,8 @@ var EngineProvisioningSchema = object({
|
|
|
10544
10615
|
runtimeId: _enum([
|
|
10545
10616
|
"onnx",
|
|
10546
10617
|
"openvino",
|
|
10547
|
-
"coreml"
|
|
10618
|
+
"coreml",
|
|
10619
|
+
"edgetpu"
|
|
10548
10620
|
]).nullable(),
|
|
10549
10621
|
device: string().nullable(),
|
|
10550
10622
|
state: _enum([
|
|
@@ -10705,7 +10777,15 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
10705
10777
|
image: _instanceof(Uint8Array).optional(),
|
|
10706
10778
|
referenceImage: string().optional(),
|
|
10707
10779
|
deviceId: number().optional(),
|
|
10708
|
-
sessionId: string().optional()
|
|
10780
|
+
sessionId: string().optional(),
|
|
10781
|
+
/**
|
|
10782
|
+
* Execution plane. 'full' (default) runs the whole tree — benchmark,
|
|
10783
|
+
* reference-image, and detail-subtree calls. 'frame' is the live
|
|
10784
|
+
* per-frame dispatch: ONLY root-plane steps run; crop children
|
|
10785
|
+
* (inputClasses ≠ null) are skipped and served per-track via
|
|
10786
|
+
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
10787
|
+
*/
|
|
10788
|
+
plane: _enum(["full", "frame"]).optional()
|
|
10709
10789
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
10710
10790
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
10711
10791
|
steps: array(PipelineStepInputSchema).min(1),
|
|
@@ -10848,6 +10928,28 @@ var NativeCropResultSchema = object({
|
|
|
10848
10928
|
width: number().int().positive(),
|
|
10849
10929
|
height: number().int().positive()
|
|
10850
10930
|
});
|
|
10931
|
+
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
10932
|
+
* originating detection, in FRAME-space coordinates. Reuses
|
|
10933
|
+
* `NativeCropBboxSchema`'s `{x,y,w,h}` shape (same numeric fields; here
|
|
10934
|
+
* the coordinates are frame-space rather than getNativeCrop's
|
|
10935
|
+
* normalized [0,1] convention). */
|
|
10936
|
+
var DetailParentSchema = object({
|
|
10937
|
+
bbox: NativeCropBboxSchema,
|
|
10938
|
+
className: string()
|
|
10939
|
+
});
|
|
10940
|
+
/** One child-step result from `runDetailSubtree` — an embedding, label,
|
|
10941
|
+
* or refined detection produced by running the crop-subtree on a
|
|
10942
|
+
* single tracked detection. */
|
|
10943
|
+
var DetailResultSchema = object({
|
|
10944
|
+
stepId: string(),
|
|
10945
|
+
className: string(),
|
|
10946
|
+
score: number(),
|
|
10947
|
+
/** FRAME-space bbox (already mapped back from crop space). */
|
|
10948
|
+
bbox: NativeCropBboxSchema.optional(),
|
|
10949
|
+
embedding: string().optional(),
|
|
10950
|
+
label: string().optional(),
|
|
10951
|
+
alignedCropJpeg: string().optional()
|
|
10952
|
+
});
|
|
10851
10953
|
/**
|
|
10852
10954
|
* Per-camera tunable ranges + defaults. Single source of truth used
|
|
10853
10955
|
* by both the Zod data schema (validation + default fallback) and
|
|
@@ -11108,7 +11210,13 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
11108
11210
|
handle: FrameHandleSchema,
|
|
11109
11211
|
bbox: NativeCropBboxSchema,
|
|
11110
11212
|
maxWidth: number().int().positive().optional()
|
|
11111
|
-
}), NativeCropResultSchema.nullable())
|
|
11213
|
+
}), NativeCropResultSchema.nullable()), method(object({
|
|
11214
|
+
deviceId: number(),
|
|
11215
|
+
frameHandle: FrameHandleSchema.optional(),
|
|
11216
|
+
cropJpeg: string().optional(),
|
|
11217
|
+
parent: DetailParentSchema,
|
|
11218
|
+
steps: array(string()).optional()
|
|
11219
|
+
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" });
|
|
11112
11220
|
object({
|
|
11113
11221
|
detected: boolean(),
|
|
11114
11222
|
/** Ms epoch of the last detected-true observation. Null if never detected. */
|
|
@@ -11720,6 +11828,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
|
|
|
11720
11828
|
deviceId: number(),
|
|
11721
11829
|
status: PtzAutotrackStatusSchema
|
|
11722
11830
|
});
|
|
11831
|
+
/**
|
|
11832
|
+
* scene-monitor — device-scoped reference-region state cap. An operator marks
|
|
11833
|
+
* a rect ROI on a camera frame and names one or more states; the engine
|
|
11834
|
+
* (pipeline-analytics, designated post-processing node) reports which state is
|
|
11835
|
+
* active on an ongoing basis. Two operator-selectable check modes share every-
|
|
11836
|
+
* thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
|
|
11837
|
+
* vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
|
|
11838
|
+
*
|
|
11839
|
+
* D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
|
|
11840
|
+
* derives the device-detail contribution; the provider carries NO hand-written
|
|
11841
|
+
* settings-contribution methods. `status.kind:'push'` — the engine pushes on
|
|
11842
|
+
* every hysteresis flip / availability change; consumers never poll.
|
|
11843
|
+
*/
|
|
11844
|
+
/** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
|
|
11845
|
+
* be added without a wire break (matching falls back to any-condition refs). */
|
|
11846
|
+
var SceneConditionSchema = string();
|
|
11847
|
+
/** One captured reference — condition-tagged, model-version-gated. `embedding`
|
|
11848
|
+
* is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
|
|
11849
|
+
var SceneReferenceSchema = object({
|
|
11850
|
+
embedding: array(number()),
|
|
11851
|
+
modelId: string(),
|
|
11852
|
+
condition: SceneConditionSchema,
|
|
11853
|
+
capturedAt: number(),
|
|
11854
|
+
thumbnailMediaId: string().optional()
|
|
11855
|
+
});
|
|
11856
|
+
var SceneMonitorStateSchema = object({
|
|
11857
|
+
id: string(),
|
|
11858
|
+
label: string(),
|
|
11859
|
+
references: array(SceneReferenceSchema),
|
|
11860
|
+
textPrompts: array(string()).optional(),
|
|
11861
|
+
referenceCount: number(),
|
|
11862
|
+
currentlyMatched: boolean()
|
|
11863
|
+
});
|
|
11864
|
+
/** Per-mode comparator params in a discriminated union so an `llm` scene never
|
|
11865
|
+
* carries similarity knobs and vice-versa. */
|
|
11866
|
+
var SceneCheckSchema = discriminatedUnion("mode", [object({
|
|
11867
|
+
mode: literal("similarity"),
|
|
11868
|
+
threshold: number().min(0).max(1),
|
|
11869
|
+
hysteresisCount: number().int().positive()
|
|
11870
|
+
}), object({
|
|
11871
|
+
mode: literal("llm"),
|
|
11872
|
+
prompt: string(),
|
|
11873
|
+
profileId: string().optional(),
|
|
11874
|
+
hysteresisCount: number().int().positive()
|
|
11875
|
+
})]);
|
|
11876
|
+
var SceneMonitorSchema = object({
|
|
11877
|
+
id: string(),
|
|
11878
|
+
label: string(),
|
|
11879
|
+
roi: MaskRectShapeSchema,
|
|
11880
|
+
enabled: boolean(),
|
|
11881
|
+
triggerMode: _enum([
|
|
11882
|
+
"periodic",
|
|
11883
|
+
"on-motion",
|
|
11884
|
+
"both"
|
|
11885
|
+
]),
|
|
11886
|
+
checkIntervalSec: number().optional(),
|
|
11887
|
+
check: SceneCheckSchema,
|
|
11888
|
+
states: array(SceneMonitorStateSchema),
|
|
11889
|
+
currentStateId: string().nullable(),
|
|
11890
|
+
lastCheckedAt: number().nullable(),
|
|
11891
|
+
lastConfidence: number().nullable(),
|
|
11892
|
+
currentCondition: SceneConditionSchema.nullable(),
|
|
11893
|
+
availability: _enum(["ok", "unavailable"]),
|
|
11894
|
+
unavailableReason: string().nullable()
|
|
11895
|
+
});
|
|
11896
|
+
var SceneMonitorStatusSchema = object({
|
|
11897
|
+
monitors: array(SceneMonitorSchema),
|
|
11898
|
+
lastFetchedAt: number()
|
|
11899
|
+
});
|
|
11900
|
+
DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
|
|
11901
|
+
deviceId: number(),
|
|
11902
|
+
label: string(),
|
|
11903
|
+
roi: MaskRectShapeSchema,
|
|
11904
|
+
check: SceneCheckSchema,
|
|
11905
|
+
triggerMode: _enum([
|
|
11906
|
+
"periodic",
|
|
11907
|
+
"on-motion",
|
|
11908
|
+
"both"
|
|
11909
|
+
]).optional(),
|
|
11910
|
+
checkIntervalSec: number().optional()
|
|
11911
|
+
}), SceneMonitorSchema, {
|
|
11912
|
+
kind: "mutation",
|
|
11913
|
+
auth: "admin"
|
|
11914
|
+
}), method(object({
|
|
11915
|
+
deviceId: number(),
|
|
11916
|
+
monitorId: string(),
|
|
11917
|
+
patch: object({
|
|
11918
|
+
label: string().optional(),
|
|
11919
|
+
roi: MaskRectShapeSchema.optional(),
|
|
11920
|
+
enabled: boolean().optional(),
|
|
11921
|
+
triggerMode: _enum([
|
|
11922
|
+
"periodic",
|
|
11923
|
+
"on-motion",
|
|
11924
|
+
"both"
|
|
11925
|
+
]).optional(),
|
|
11926
|
+
checkIntervalSec: number().optional(),
|
|
11927
|
+
check: SceneCheckSchema.optional()
|
|
11928
|
+
})
|
|
11929
|
+
}), _void(), {
|
|
11930
|
+
kind: "mutation",
|
|
11931
|
+
auth: "admin"
|
|
11932
|
+
}), method(object({
|
|
11933
|
+
deviceId: number(),
|
|
11934
|
+
monitorId: string()
|
|
11935
|
+
}), _void(), {
|
|
11936
|
+
kind: "mutation",
|
|
11937
|
+
auth: "admin"
|
|
11938
|
+
}), method(object({
|
|
11939
|
+
deviceId: number(),
|
|
11940
|
+
monitorId: string(),
|
|
11941
|
+
stateId: string().optional(),
|
|
11942
|
+
label: string().optional(),
|
|
11943
|
+
condition: SceneConditionSchema.optional()
|
|
11944
|
+
}), object({
|
|
11945
|
+
stateId: string(),
|
|
11946
|
+
referenceCount: number()
|
|
11947
|
+
}), {
|
|
11948
|
+
kind: "mutation",
|
|
11949
|
+
auth: "admin"
|
|
11950
|
+
}), method(object({
|
|
11951
|
+
deviceId: number(),
|
|
11952
|
+
monitorId: string(),
|
|
11953
|
+
stateId: string(),
|
|
11954
|
+
index: number()
|
|
11955
|
+
}), _void(), {
|
|
11956
|
+
kind: "mutation",
|
|
11957
|
+
auth: "admin"
|
|
11958
|
+
}), method(object({
|
|
11959
|
+
deviceId: number(),
|
|
11960
|
+
monitorId: string()
|
|
11961
|
+
}), _void(), {
|
|
11962
|
+
kind: "mutation",
|
|
11963
|
+
auth: "admin"
|
|
11964
|
+
});
|
|
11723
11965
|
object({
|
|
11724
11966
|
/** Whether the script is currently executing. */
|
|
11725
11967
|
isRunning: boolean(),
|
|
@@ -12127,6 +12369,36 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
|
|
|
12127
12369
|
* with the per-track detail panel and live overlay. */
|
|
12128
12370
|
trackIds: array(string()).readonly()
|
|
12129
12371
|
});
|
|
12372
|
+
/**
|
|
12373
|
+
* A parked ("stationary") object surfaced alongside occupancy — an object that
|
|
12374
|
+
* settled and stopped moving. It is NO LONGER a tracked object (the tracker was
|
|
12375
|
+
* told to forget it so it stops re-spawning tracks/events), but it IS still
|
|
12376
|
+
* physically present, so it keeps counting toward `frame` occupancy and is
|
|
12377
|
+
* listed here so the UI can show it in a dedicated "Stationary" section instead
|
|
12378
|
+
* of flooding the live event feed.
|
|
12379
|
+
*/
|
|
12380
|
+
var StationaryObjectSchema = object({
|
|
12381
|
+
id: string(),
|
|
12382
|
+
className: string(),
|
|
12383
|
+
bbox: object({
|
|
12384
|
+
x: number(),
|
|
12385
|
+
y: number(),
|
|
12386
|
+
w: number(),
|
|
12387
|
+
h: number()
|
|
12388
|
+
}),
|
|
12389
|
+
frameWidth: number().int().nonnegative(),
|
|
12390
|
+
frameHeight: number().int().nonnegative(),
|
|
12391
|
+
/** When the source track was first seen. */
|
|
12392
|
+
firstSeenAt: number().int(),
|
|
12393
|
+
/** When the object was recognised as parked (promotion time). */
|
|
12394
|
+
becameStationaryAt: number().int(),
|
|
12395
|
+
/** Last frame a detection confirmed the object is still there. */
|
|
12396
|
+
lastConfirmedAt: number().int(),
|
|
12397
|
+
/** Enrichment label carried from the source track (identity / plate). */
|
|
12398
|
+
label: string().optional(),
|
|
12399
|
+
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
12400
|
+
keyFrameMediaKey: string().optional()
|
|
12401
|
+
});
|
|
12130
12402
|
var CameraOccupancySnapshotSchema = object({
|
|
12131
12403
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
12132
12404
|
ts: number().int(),
|
|
@@ -12135,10 +12407,15 @@ var CameraOccupancySnapshotSchema = object({
|
|
|
12135
12407
|
frameHeight: number().int().nonnegative(),
|
|
12136
12408
|
/** Per-zone breakdown — one entry per defined zone (user + onboard). */
|
|
12137
12409
|
zones: array(ZoneScopeBreakdownSchema).readonly(),
|
|
12138
|
-
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12410
|
+
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12411
|
+
* INCLUDES currently-confirmed stationary objects (they are still present). */
|
|
12139
12412
|
frame: PerScopeBreakdownSchema,
|
|
12140
12413
|
/** Detections that landed outside every zone. Empty when no zones defined. */
|
|
12141
|
-
unzoned: PerScopeBreakdownSchema
|
|
12414
|
+
unzoned: PerScopeBreakdownSchema,
|
|
12415
|
+
/** Parked objects on this camera (additive — absent on legacy snapshots).
|
|
12416
|
+
* Surfaced separately so the UI shows them in a dedicated section rather
|
|
12417
|
+
* than as repeated tracks/events. */
|
|
12418
|
+
stationaryObjects: array(StationaryObjectSchema).readonly().optional()
|
|
12142
12419
|
});
|
|
12143
12420
|
/**
|
|
12144
12421
|
* Time-series resolution. The history methods return one bucket per
|
|
@@ -12747,7 +13024,12 @@ var NotificationRuleConditionsSchema = object({
|
|
|
12747
13024
|
clipDescription: object({
|
|
12748
13025
|
text: string().min(1),
|
|
12749
13026
|
minSimilarity: number().min(0).max(1)
|
|
12750
|
-
}).optional()
|
|
13027
|
+
}).optional(),
|
|
13028
|
+
/** Match events whose recognized-entity label (face identity name or plate
|
|
13029
|
+
* vehicle name, propagated onto `event.data.label`) is one of these values.
|
|
13030
|
+
* Empty/absent → unaffected (back-compat). Enables "notify me when <named
|
|
13031
|
+
* vehicle/person> is seen". */
|
|
13032
|
+
labels: array(string()).readonly().optional()
|
|
12751
13033
|
});
|
|
12752
13034
|
var NotificationRuleTemplateSchema = object({
|
|
12753
13035
|
title: string(),
|
|
@@ -13005,11 +13287,19 @@ method(object({
|
|
|
13005
13287
|
* login page needs NO change.
|
|
13006
13288
|
*
|
|
13007
13289
|
* - `widget` — a Module-Federation widget the login page mounts (via
|
|
13008
|
-
* `loadRemoteBundle`) for an in-page ceremony.
|
|
13009
|
-
*
|
|
13010
|
-
*
|
|
13011
|
-
*
|
|
13012
|
-
*
|
|
13290
|
+
* `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
|
|
13291
|
+
* stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
|
|
13292
|
+
* mechanism kept for future use; no shipped addon uses it on the login
|
|
13293
|
+
* page (the passkey ceremony below runs natively in the shell instead).
|
|
13294
|
+
*
|
|
13295
|
+
* - `passkey` — a declarative WebAuthn ceremony the shell renders
|
|
13296
|
+
* natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
|
|
13297
|
+
* a remotely-loaded bundle). Carries the addon's effective `rpId` /
|
|
13298
|
+
* `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
|
|
13299
|
+
* can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
|
|
13300
|
+
* fetching any remote code pre-auth. Contribution stays unconditional —
|
|
13301
|
+
* enrollment state is never leaked pre-auth; visibility is a shell
|
|
13302
|
+
* decision.
|
|
13013
13303
|
*
|
|
13014
13304
|
* Every contribution carries a `stage`:
|
|
13015
13305
|
* - `primary` — shown on the first credentials screen (OIDC /
|
|
@@ -13023,30 +13313,45 @@ method(object({
|
|
|
13023
13313
|
*/
|
|
13024
13314
|
/** When a login method renders in the two-phase login flow. */
|
|
13025
13315
|
var LoginStageEnum = _enum(["primary", "second-factor"]);
|
|
13026
|
-
/** One login-method contribution — redirect button
|
|
13027
|
-
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13028
|
-
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
|
|
13032
|
-
|
|
13033
|
-
|
|
13034
|
-
|
|
13035
|
-
|
|
13036
|
-
|
|
13037
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13316
|
+
/** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
|
|
13317
|
+
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13318
|
+
object({
|
|
13319
|
+
kind: literal("redirect"),
|
|
13320
|
+
/** Stable id within the login-method set (e.g. `auth-oidc/google`). */
|
|
13321
|
+
id: string(),
|
|
13322
|
+
/** Operator-facing button label. */
|
|
13323
|
+
label: string(),
|
|
13324
|
+
/** lucide-react icon name. */
|
|
13325
|
+
icon: string().optional(),
|
|
13326
|
+
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
13327
|
+
startUrl: string(),
|
|
13328
|
+
stage: LoginStageEnum
|
|
13329
|
+
}),
|
|
13330
|
+
object({
|
|
13331
|
+
kind: literal("widget"),
|
|
13332
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
|
|
13333
|
+
id: string(),
|
|
13334
|
+
/** Owning addon id — drives the public bundle URL + the MF namespace. */
|
|
13335
|
+
addonId: string(),
|
|
13336
|
+
/** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
|
|
13337
|
+
bundle: string(),
|
|
13338
|
+
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
13339
|
+
remote: WidgetRemoteSchema,
|
|
13340
|
+
stage: LoginStageEnum
|
|
13341
|
+
}),
|
|
13342
|
+
object({
|
|
13343
|
+
kind: literal("passkey"),
|
|
13344
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
|
|
13345
|
+
id: string(),
|
|
13346
|
+
/** Operator-facing button label. */
|
|
13347
|
+
label: string(),
|
|
13348
|
+
stage: LoginStageEnum,
|
|
13349
|
+
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
13350
|
+
rpId: string(),
|
|
13351
|
+
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
13352
|
+
origin: string().nullable()
|
|
13353
|
+
})
|
|
13354
|
+
]);
|
|
13050
13355
|
method(_void(), array(LoginMethodContributionSchema).readonly());
|
|
13051
13356
|
/**
|
|
13052
13357
|
* Orchestrator-side destination metadata. The orchestrator computes
|
|
@@ -14907,14 +15212,14 @@ var TargetKindCapsSchema = object({
|
|
|
14907
15212
|
* the union is large and not meant for runtime validation here; the exported
|
|
14908
15213
|
* `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
|
|
14909
15214
|
*/
|
|
14910
|
-
var ConfigSchemaPassthrough = unknown();
|
|
15215
|
+
var ConfigSchemaPassthrough$1 = unknown();
|
|
14911
15216
|
var TargetKindSchema = object({
|
|
14912
15217
|
kind: string(),
|
|
14913
15218
|
label: string(),
|
|
14914
15219
|
icon: string(),
|
|
14915
15220
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
14916
15221
|
addonId: string(),
|
|
14917
|
-
configSchema: ConfigSchemaPassthrough,
|
|
15222
|
+
configSchema: ConfigSchemaPassthrough$1,
|
|
14918
15223
|
supportsDiscovery: boolean(),
|
|
14919
15224
|
caps: TargetKindCapsSchema
|
|
14920
15225
|
});
|
|
@@ -14967,6 +15272,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
14967
15272
|
enabled: boolean()
|
|
14968
15273
|
}), _void(), { kind: "mutation" });
|
|
14969
15274
|
/**
|
|
15275
|
+
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
15276
|
+
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
15277
|
+
* caps stay wire-compatible without a circular cap→cap import.
|
|
15278
|
+
*
|
|
15279
|
+
* Errors are a discriminated-union RESULT, never thrown: the shape survives
|
|
15280
|
+
* every transport tier structurally, and failed calls still write usage rows.
|
|
15281
|
+
* Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
|
|
15282
|
+
*/
|
|
15283
|
+
var LlmUsageSchema = object({
|
|
15284
|
+
inputTokens: number(),
|
|
15285
|
+
outputTokens: number()
|
|
15286
|
+
});
|
|
15287
|
+
var LlmErrorCodeSchema = _enum([
|
|
15288
|
+
"timeout",
|
|
15289
|
+
"rate-limited",
|
|
15290
|
+
"auth",
|
|
15291
|
+
"refusal",
|
|
15292
|
+
"bad-request",
|
|
15293
|
+
"unavailable",
|
|
15294
|
+
"no-profile",
|
|
15295
|
+
"budget-exceeded",
|
|
15296
|
+
"adapter-error"
|
|
15297
|
+
]);
|
|
15298
|
+
var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
|
|
15299
|
+
ok: literal(true),
|
|
15300
|
+
text: string(),
|
|
15301
|
+
model: string(),
|
|
15302
|
+
usage: LlmUsageSchema,
|
|
15303
|
+
truncated: boolean(),
|
|
15304
|
+
latencyMs: number()
|
|
15305
|
+
}), object({
|
|
15306
|
+
ok: literal(false),
|
|
15307
|
+
code: LlmErrorCodeSchema,
|
|
15308
|
+
message: string(),
|
|
15309
|
+
retryAfterMs: number().optional()
|
|
15310
|
+
})]);
|
|
15311
|
+
/**
|
|
15312
|
+
* `Uint8Array` is the sanctioned binary convention — superjson + the UDS
|
|
15313
|
+
* MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
|
|
15314
|
+
* notification-output.cap.ts:27-31 precedents).
|
|
15315
|
+
*/
|
|
15316
|
+
var LlmImageSchema = object({
|
|
15317
|
+
bytes: _instanceof(Uint8Array),
|
|
15318
|
+
mimeType: string()
|
|
15319
|
+
});
|
|
15320
|
+
var LlmGenerateBaseInputSchema = object({
|
|
15321
|
+
/** Collection routing (the notification-output posture). */
|
|
15322
|
+
addonId: string().optional(),
|
|
15323
|
+
/** Explicit profile; else the resolution chain (spec §3). */
|
|
15324
|
+
profileId: string().optional(),
|
|
15325
|
+
/** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
|
|
15326
|
+
consumer: string(),
|
|
15327
|
+
system: string().optional(),
|
|
15328
|
+
/** v1: single-turn. `messages[]` is a v2 additive field. */
|
|
15329
|
+
prompt: string(),
|
|
15330
|
+
/** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
|
|
15331
|
+
jsonSchema: record(string(), unknown()).optional(),
|
|
15332
|
+
/** Per-call override of the profile default. */
|
|
15333
|
+
maxTokens: number().int().positive().optional(),
|
|
15334
|
+
temperature: number().optional()
|
|
15335
|
+
});
|
|
15336
|
+
/**
|
|
15337
|
+
* `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
|
|
15338
|
+
* on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
|
|
15339
|
+
* a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
|
|
15340
|
+
* cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
|
|
15341
|
+
* this only through the `llm` cap's methods.
|
|
15342
|
+
*
|
|
15343
|
+
* One running llama-server child per node in v1 (models are RAM-heavy).
|
|
15344
|
+
* Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
|
|
15345
|
+
* watchdog — operator decision #3).
|
|
15346
|
+
*/
|
|
15347
|
+
var ManagedModelRefSchema = discriminatedUnion("kind", [
|
|
15348
|
+
object({
|
|
15349
|
+
kind: literal("catalog"),
|
|
15350
|
+
catalogId: string()
|
|
15351
|
+
}),
|
|
15352
|
+
object({
|
|
15353
|
+
kind: literal("url"),
|
|
15354
|
+
url: string(),
|
|
15355
|
+
sha256: string().optional()
|
|
15356
|
+
}),
|
|
15357
|
+
object({
|
|
15358
|
+
kind: literal("path"),
|
|
15359
|
+
path: string()
|
|
15360
|
+
})
|
|
15361
|
+
]);
|
|
15362
|
+
var ManagedRuntimeConfigSchema = object({
|
|
15363
|
+
/** WHERE the runtime lives — hub or any agent. */
|
|
15364
|
+
nodeId: string(),
|
|
15365
|
+
/** Closed for v1; 'ollama' is a v2 candidate. */
|
|
15366
|
+
engine: _enum(["llama-cpp"]),
|
|
15367
|
+
model: ManagedModelRefSchema,
|
|
15368
|
+
contextSize: number().int().default(4096),
|
|
15369
|
+
/** 0 = CPU-only. */
|
|
15370
|
+
gpuLayers: number().int().default(0),
|
|
15371
|
+
/** Default: cpus-2, clamped ≥1 (resolved node-side). */
|
|
15372
|
+
threads: number().int().optional(),
|
|
15373
|
+
/** Concurrent slots. */
|
|
15374
|
+
parallel: number().int().default(1),
|
|
15375
|
+
/** Else lazy: first generate boots it. */
|
|
15376
|
+
autoStart: boolean().default(false),
|
|
15377
|
+
/** 0 = never; frees RAM after quiet periods. */
|
|
15378
|
+
idleStopMinutes: number().int().default(30)
|
|
15379
|
+
});
|
|
15380
|
+
var LlmRuntimeStatusSchema = object({
|
|
15381
|
+
/** Status is ALWAYS node-qualified. */
|
|
15382
|
+
nodeId: string(),
|
|
15383
|
+
state: _enum([
|
|
15384
|
+
"stopped",
|
|
15385
|
+
"downloading",
|
|
15386
|
+
"starting",
|
|
15387
|
+
"ready",
|
|
15388
|
+
"crashed",
|
|
15389
|
+
"failed"
|
|
15390
|
+
]),
|
|
15391
|
+
pid: number().optional(),
|
|
15392
|
+
port: number().optional(),
|
|
15393
|
+
modelPath: string().optional(),
|
|
15394
|
+
modelId: string().optional(),
|
|
15395
|
+
downloadProgress: number().min(0).max(1).optional(),
|
|
15396
|
+
lastError: string().optional(),
|
|
15397
|
+
crashesInWindow: number(),
|
|
15398
|
+
/** Child RSS (sampled best-effort). */
|
|
15399
|
+
memoryBytes: number().optional(),
|
|
15400
|
+
vramBytes: number().optional()
|
|
15401
|
+
});
|
|
15402
|
+
var LlmNodeModelSchema = object({
|
|
15403
|
+
file: string(),
|
|
15404
|
+
sizeBytes: number(),
|
|
15405
|
+
catalogId: string().optional(),
|
|
15406
|
+
installedAt: number().optional()
|
|
15407
|
+
});
|
|
15408
|
+
var LlmRuntimeDiskUsageSchema = object({
|
|
15409
|
+
nodeId: string(),
|
|
15410
|
+
modelsBytes: number(),
|
|
15411
|
+
freeBytes: number().optional()
|
|
15412
|
+
});
|
|
15413
|
+
method(LlmGenerateBaseInputSchema.extend({
|
|
15414
|
+
images: array(LlmImageSchema).optional(),
|
|
15415
|
+
runtime: ManagedRuntimeConfigSchema,
|
|
15416
|
+
/** The managed profile's timeout, threaded by the hub provider. */
|
|
15417
|
+
timeoutMs: number().int().positive().optional()
|
|
15418
|
+
}), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
15419
|
+
kind: "mutation",
|
|
15420
|
+
auth: "admin"
|
|
15421
|
+
}), method(object({}), _void(), {
|
|
15422
|
+
kind: "mutation",
|
|
15423
|
+
auth: "admin"
|
|
15424
|
+
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
15425
|
+
kind: "mutation",
|
|
15426
|
+
auth: "admin"
|
|
15427
|
+
}), method(object({ file: string() }), _void(), {
|
|
15428
|
+
kind: "mutation",
|
|
15429
|
+
auth: "admin"
|
|
15430
|
+
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
15431
|
+
/**
|
|
15432
|
+
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
15433
|
+
* methods concat-fan across providers; single-row methods route to ONE
|
|
15434
|
+
* provider by the `addonId` in the call input (the notification-output
|
|
15435
|
+
* posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
|
|
15436
|
+
* (hub-placed); the cap stays open for future providers.
|
|
15437
|
+
*
|
|
15438
|
+
* Profiles are ROWS (data), not addons: one row = one usable model endpoint.
|
|
15439
|
+
* `apiKey` is a password field — providers REDACT it on read and merge on
|
|
15440
|
+
* write; a stored key NEVER round-trips to a client.
|
|
15441
|
+
*/
|
|
15442
|
+
var LlmProfileKindSchema = _enum([
|
|
15443
|
+
"openai-compatible",
|
|
15444
|
+
"openai",
|
|
15445
|
+
"anthropic",
|
|
15446
|
+
"google",
|
|
15447
|
+
"managed-local"
|
|
15448
|
+
]);
|
|
15449
|
+
var LlmProfileSchema = object({
|
|
15450
|
+
id: string(),
|
|
15451
|
+
name: string(),
|
|
15452
|
+
kind: LlmProfileKindSchema,
|
|
15453
|
+
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
15454
|
+
addonId: string(),
|
|
15455
|
+
enabled: boolean(),
|
|
15456
|
+
/** Vendor model id, or the managed runtime's loaded model. */
|
|
15457
|
+
model: string(),
|
|
15458
|
+
/** Required for openai-compatible; override for cloud kinds. */
|
|
15459
|
+
baseUrl: string().optional(),
|
|
15460
|
+
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
15461
|
+
apiKey: string().optional(),
|
|
15462
|
+
supportsVision: boolean(),
|
|
15463
|
+
temperature: number().min(0).max(2).optional(),
|
|
15464
|
+
maxTokens: number().int().positive().optional(),
|
|
15465
|
+
timeoutMs: number().int().positive().default(6e4),
|
|
15466
|
+
extraHeaders: record(string(), string()).optional(),
|
|
15467
|
+
/** kind === 'managed-local' only (spec §4). */
|
|
15468
|
+
runtime: ManagedRuntimeConfigSchema.optional()
|
|
15469
|
+
});
|
|
15470
|
+
/** ConfigUISchema tree passed through untyped on the wire (the
|
|
15471
|
+
* notification-output `ConfigSchemaPassthrough` precedent at
|
|
15472
|
+
* notification-output.cap.ts:151); the exported TS type re-tightens it. */
|
|
15473
|
+
var ConfigSchemaPassthrough = unknown();
|
|
15474
|
+
var LlmProfileKindDescriptorSchema = object({
|
|
15475
|
+
kind: LlmProfileKindSchema,
|
|
15476
|
+
label: string(),
|
|
15477
|
+
icon: string(),
|
|
15478
|
+
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
15479
|
+
addonId: string(),
|
|
15480
|
+
configSchema: ConfigSchemaPassthrough
|
|
15481
|
+
});
|
|
15482
|
+
var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
|
|
15483
|
+
var LlmDefaultSchema = object({
|
|
15484
|
+
selector: LlmDefaultSelectorSchema,
|
|
15485
|
+
profileId: string()
|
|
15486
|
+
});
|
|
15487
|
+
/** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
|
|
15488
|
+
var LlmUsageRollupSchema = object({
|
|
15489
|
+
day: string(),
|
|
15490
|
+
consumer: string(),
|
|
15491
|
+
profileId: string(),
|
|
15492
|
+
calls: number(),
|
|
15493
|
+
okCalls: number(),
|
|
15494
|
+
errorCalls: number(),
|
|
15495
|
+
inputTokens: number(),
|
|
15496
|
+
outputTokens: number(),
|
|
15497
|
+
avgLatencyMs: number()
|
|
15498
|
+
});
|
|
15499
|
+
/** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
|
|
15500
|
+
var ManagedModelCatalogEntrySchema = object({
|
|
15501
|
+
id: string(),
|
|
15502
|
+
label: string(),
|
|
15503
|
+
family: string(),
|
|
15504
|
+
purpose: _enum(["text", "vision"]),
|
|
15505
|
+
url: string(),
|
|
15506
|
+
sha256: string(),
|
|
15507
|
+
sizeBytes: number(),
|
|
15508
|
+
quantization: string(),
|
|
15509
|
+
/** Load-time guidance shown in the picker. */
|
|
15510
|
+
minRamBytes: number(),
|
|
15511
|
+
contextSizeDefault: number().int(),
|
|
15512
|
+
/** Vision models: companion projector file. */
|
|
15513
|
+
mmprojUrl: string().optional()
|
|
15514
|
+
});
|
|
15515
|
+
var LlmRuntimeNodeSchema = object({
|
|
15516
|
+
nodeId: string(),
|
|
15517
|
+
reachable: boolean(),
|
|
15518
|
+
status: LlmRuntimeStatusSchema.optional(),
|
|
15519
|
+
disk: LlmRuntimeDiskUsageSchema.optional(),
|
|
15520
|
+
error: string().optional()
|
|
15521
|
+
});
|
|
15522
|
+
var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
|
|
15523
|
+
var ProfileRefInputSchema = object({
|
|
15524
|
+
addonId: string(),
|
|
15525
|
+
profileId: string()
|
|
15526
|
+
});
|
|
15527
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
15528
|
+
kind: "mutation",
|
|
15529
|
+
auth: "admin"
|
|
15530
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15531
|
+
kind: "mutation",
|
|
15532
|
+
auth: "admin"
|
|
15533
|
+
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
15534
|
+
kind: "mutation",
|
|
15535
|
+
auth: "admin"
|
|
15536
|
+
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
15537
|
+
selector: LlmDefaultSelectorSchema,
|
|
15538
|
+
profileId: string().nullable()
|
|
15539
|
+
}), _void(), {
|
|
15540
|
+
kind: "mutation",
|
|
15541
|
+
auth: "admin"
|
|
15542
|
+
}), method(object({
|
|
15543
|
+
since: number().optional(),
|
|
15544
|
+
until: number().optional(),
|
|
15545
|
+
consumer: string().optional(),
|
|
15546
|
+
profileId: string().optional()
|
|
15547
|
+
}), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
|
|
15548
|
+
nodeId: string(),
|
|
15549
|
+
model: ManagedModelRefSchema
|
|
15550
|
+
}), _void(), {
|
|
15551
|
+
kind: "mutation",
|
|
15552
|
+
auth: "admin"
|
|
15553
|
+
}), method(object({
|
|
15554
|
+
nodeId: string(),
|
|
15555
|
+
file: string()
|
|
15556
|
+
}), _void(), {
|
|
15557
|
+
kind: "mutation",
|
|
15558
|
+
auth: "admin"
|
|
15559
|
+
}), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
|
|
15560
|
+
kind: "mutation",
|
|
15561
|
+
auth: "admin"
|
|
15562
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15563
|
+
kind: "mutation",
|
|
15564
|
+
auth: "admin"
|
|
15565
|
+
});
|
|
15566
|
+
/**
|
|
14970
15567
|
* Zod schemas for persisted record types.
|
|
14971
15568
|
*
|
|
14972
15569
|
* These schemas serve as the single source of truth for types that are
|
|
@@ -15168,6 +15765,22 @@ var TrackSnapshotSchema = object({
|
|
|
15168
15765
|
/** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
|
|
15169
15766
|
mediaKey: string()
|
|
15170
15767
|
});
|
|
15768
|
+
/**
|
|
15769
|
+
* One audio-classification label heard on the track's camera while the
|
|
15770
|
+
* track was alive, aggregated per label. An "episode" is one persisted
|
|
15771
|
+
* audio event (the confident-classification path: score ≥ the device's
|
|
15772
|
+
* `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
|
|
15773
|
+
* one 32 ms inference chunk, so counts stay human-scaled.
|
|
15774
|
+
*/
|
|
15775
|
+
var TrackAudioLabelSchema = object({
|
|
15776
|
+
label: string(),
|
|
15777
|
+
/** Highest classification score observed across the label's episodes. */
|
|
15778
|
+
peakScore: number(),
|
|
15779
|
+
/** Number of coalesced audio-event episodes carrying this label. */
|
|
15780
|
+
count: number(),
|
|
15781
|
+
firstAt: number(),
|
|
15782
|
+
lastAt: number()
|
|
15783
|
+
});
|
|
15171
15784
|
var TrackSchema = object({
|
|
15172
15785
|
trackId: string(),
|
|
15173
15786
|
deviceId: number(),
|
|
@@ -15182,6 +15795,10 @@ var TrackSchema = object({
|
|
|
15182
15795
|
snapshots: array(TrackSnapshotSchema).readonly(),
|
|
15183
15796
|
/** Deduplicated zones the track has entered at least once. */
|
|
15184
15797
|
zonesVisited: array(string()).readonly(),
|
|
15798
|
+
/** Deduplicated set of detector classes observed for this track over its
|
|
15799
|
+
* life (a track may be reclassified, e.g. person→vehicle). Absent on
|
|
15800
|
+
* legacy rows written before class accumulation shipped. */
|
|
15801
|
+
classes: array(string()).readonly().optional(),
|
|
15185
15802
|
/** Cumulative normalized distance travelled (0..1 units = full frame width). */
|
|
15186
15803
|
totalDistance: number(),
|
|
15187
15804
|
state: TrackStateSchema,
|
|
@@ -15195,7 +15812,11 @@ var TrackSchema = object({
|
|
|
15195
15812
|
bestEventId: string().optional(),
|
|
15196
15813
|
/** Tag of the importance sub-signal that dominated the score
|
|
15197
15814
|
* (identity|dwell|proximity|class|confidence|travel|zone). */
|
|
15198
|
-
importanceReason: string().optional()
|
|
15815
|
+
importanceReason: string().optional(),
|
|
15816
|
+
/** Audio-classification labels heard on the camera during the track's
|
|
15817
|
+
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
15818
|
+
* Absent on legacy rows / tracks with no confident audio. */
|
|
15819
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
15199
15820
|
});
|
|
15200
15821
|
var BaseEventFields = {
|
|
15201
15822
|
id: string(),
|
|
@@ -15343,7 +15964,7 @@ var KeyEventSchema = object({
|
|
|
15343
15964
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
15344
15965
|
windowMs: number().optional()
|
|
15345
15966
|
});
|
|
15346
|
-
|
|
15967
|
+
object({
|
|
15347
15968
|
trackId: string(),
|
|
15348
15969
|
className: string(),
|
|
15349
15970
|
confidence: number(),
|
|
@@ -15351,6 +15972,23 @@ var TrackedDetectionSchema = object({
|
|
|
15351
15972
|
zones: array(string()).readonly(),
|
|
15352
15973
|
state: TrackStateSchema
|
|
15353
15974
|
});
|
|
15975
|
+
var OverlayDetectionSchema = looseObject({
|
|
15976
|
+
id: string(),
|
|
15977
|
+
kind: _enum(["first-level", "detail"]),
|
|
15978
|
+
macroClass: string(),
|
|
15979
|
+
score: number(),
|
|
15980
|
+
bbox: object({
|
|
15981
|
+
x: number(),
|
|
15982
|
+
y: number(),
|
|
15983
|
+
width: number(),
|
|
15984
|
+
height: number()
|
|
15985
|
+
}),
|
|
15986
|
+
labels: array(looseObject({
|
|
15987
|
+
label: string(),
|
|
15988
|
+
score: number()
|
|
15989
|
+
})).readonly(),
|
|
15990
|
+
parentId: string().optional()
|
|
15991
|
+
});
|
|
15354
15992
|
var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
|
|
15355
15993
|
var SearchObjectEventsInput = object({
|
|
15356
15994
|
text: string(),
|
|
@@ -15361,6 +15999,20 @@ var SearchObjectEventsInput = object({
|
|
|
15361
15999
|
limit: number().default(50),
|
|
15362
16000
|
minScore: number().min(0).max(1).default(.2)
|
|
15363
16001
|
});
|
|
16002
|
+
var TrackCascadeCountsSchema = object({
|
|
16003
|
+
/** Persisted track roots deleted (authoritative). */
|
|
16004
|
+
tracks: number().int(),
|
|
16005
|
+
/** Object events removed with their tracks (best-effort; see note above). */
|
|
16006
|
+
events: number().int(),
|
|
16007
|
+
/** Track/face/plate-owned media removed (best-effort). Never identity media. */
|
|
16008
|
+
media: number().int(),
|
|
16009
|
+
/** Unassigned (non-enrolled) face reads removed (best-effort). */
|
|
16010
|
+
faces: number().int(),
|
|
16011
|
+
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
16012
|
+
plates: number().int(),
|
|
16013
|
+
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16014
|
+
embeddings: number().int()
|
|
16015
|
+
});
|
|
15364
16016
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
15365
16017
|
deviceId: number(),
|
|
15366
16018
|
trackId: string()
|
|
@@ -15393,15 +16045,33 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15393
16045
|
kind: "mutation",
|
|
15394
16046
|
auth: "admin"
|
|
15395
16047
|
}), method(object({
|
|
15396
|
-
eventId: string(),
|
|
15397
|
-
kind: MediaFileKindEnum.optional()
|
|
15398
|
-
}), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), object({
|
|
15399
16048
|
deviceId: number(),
|
|
15400
|
-
|
|
15401
|
-
|
|
15402
|
-
|
|
15403
|
-
|
|
15404
|
-
}), object({
|
|
16049
|
+
cutoffMs: number()
|
|
16050
|
+
}), TrackCascadeCountsSchema, {
|
|
16051
|
+
kind: "mutation",
|
|
16052
|
+
auth: "admin"
|
|
16053
|
+
}), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
|
|
16054
|
+
kind: "mutation",
|
|
16055
|
+
auth: "admin"
|
|
16056
|
+
}), method(object({
|
|
16057
|
+
deviceId: number(),
|
|
16058
|
+
trackIds: array(string()).min(1)
|
|
16059
|
+
}), object({
|
|
16060
|
+
deleted: number().int(),
|
|
16061
|
+
failed: array(string()).readonly()
|
|
16062
|
+
}), {
|
|
16063
|
+
kind: "mutation",
|
|
16064
|
+
auth: "admin"
|
|
16065
|
+
}), method(object({
|
|
16066
|
+
eventId: string(),
|
|
16067
|
+
kind: MediaFileKindEnum.optional()
|
|
16068
|
+
}), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), object({
|
|
16069
|
+
deviceId: number(),
|
|
16070
|
+
timestamp: number(),
|
|
16071
|
+
frameWidth: number(),
|
|
16072
|
+
frameHeight: number(),
|
|
16073
|
+
detections: array(OverlayDetectionSchema).readonly()
|
|
16074
|
+
}), object({
|
|
15405
16075
|
deviceId: number(),
|
|
15406
16076
|
trackId: string(),
|
|
15407
16077
|
className: string()
|
|
@@ -16716,7 +17386,15 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
16716
17386
|
*/
|
|
16717
17387
|
disableIpv6: boolean().optional(),
|
|
16718
17388
|
/** Subscriber attribution. See `createSession` for the contract. */
|
|
16719
|
-
consumerAttribution: BrokerConsumerAttributionSchema.optional()
|
|
17389
|
+
consumerAttribution: BrokerConsumerAttributionSchema.optional(),
|
|
17390
|
+
/**
|
|
17391
|
+
* Client-side stream hints (viewport, downlink) — same contract as
|
|
17392
|
+
* `createSession.hints`. Client-offer viewers (the RN viewer's
|
|
17393
|
+
* `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
|
|
17394
|
+
* field their hints were silently stripped by the schema and the
|
|
17395
|
+
* adaptive ladder started blind on the client's display size.
|
|
17396
|
+
*/
|
|
17397
|
+
hints: webrtcClientHintsSchema.optional()
|
|
16720
17398
|
}), object({
|
|
16721
17399
|
sessionId: string(),
|
|
16722
17400
|
sdpAnswer: string()
|
|
@@ -18169,6 +18847,24 @@ DeviceType.Camera, method(object({
|
|
|
18169
18847
|
deviceId: number(),
|
|
18170
18848
|
status: OsdStatusSchema
|
|
18171
18849
|
});
|
|
18850
|
+
var VehicleSchema = object({
|
|
18851
|
+
id: string(),
|
|
18852
|
+
name: string(),
|
|
18853
|
+
sampleCount: number().int().nonnegative(),
|
|
18854
|
+
coverMediaKey: string().optional(),
|
|
18855
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
|
|
18856
|
+
coverBase64: string().optional()
|
|
18857
|
+
});
|
|
18858
|
+
var VehicleSampleInfoSchema = object({
|
|
18859
|
+
id: string(),
|
|
18860
|
+
/** The plate text this sample enrolled (self-labeling — no embedding). */
|
|
18861
|
+
text: string(),
|
|
18862
|
+
/** OCR confidence of the enrolled read (0..1). */
|
|
18863
|
+
score: number(),
|
|
18864
|
+
addedAt: number().int(),
|
|
18865
|
+
deviceId: number().int().optional(),
|
|
18866
|
+
base64: string().optional()
|
|
18867
|
+
});
|
|
18172
18868
|
var PlateInfoSchema = object({
|
|
18173
18869
|
plateId: string(),
|
|
18174
18870
|
deviceId: number().int(),
|
|
@@ -18180,6 +18876,16 @@ var PlateInfoSchema = object({
|
|
|
18180
18876
|
score: number(),
|
|
18181
18877
|
/** True when the text was manually corrected (exempt from retention). */
|
|
18182
18878
|
corrected: boolean(),
|
|
18879
|
+
/** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
|
|
18880
|
+
recognizedVehicleId: string().optional(),
|
|
18881
|
+
/** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
|
|
18882
|
+
vehicleName: string().optional(),
|
|
18883
|
+
/** True once the read was assigned to a vehicle (enrolled as a sample). */
|
|
18884
|
+
assigned: boolean(),
|
|
18885
|
+
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
18886
|
+
plateBbox: BoundingBoxSchema.optional(),
|
|
18887
|
+
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
18888
|
+
keyFrameMediaKey: string().optional(),
|
|
18183
18889
|
base64: string().optional()
|
|
18184
18890
|
});
|
|
18185
18891
|
var MediaFileLiteSchema = object({
|
|
@@ -18219,6 +18925,48 @@ method(object({
|
|
|
18219
18925
|
}), method(object({ plateId: string() }), _void(), {
|
|
18220
18926
|
kind: "mutation",
|
|
18221
18927
|
auth: "admin"
|
|
18928
|
+
}), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
18929
|
+
kind: "mutation",
|
|
18930
|
+
auth: "admin"
|
|
18931
|
+
}), method(object({
|
|
18932
|
+
id: string(),
|
|
18933
|
+
name: string().min(1)
|
|
18934
|
+
}), _void(), {
|
|
18935
|
+
kind: "mutation",
|
|
18936
|
+
auth: "admin"
|
|
18937
|
+
}), method(object({ id: string() }), _void(), {
|
|
18938
|
+
kind: "mutation",
|
|
18939
|
+
auth: "admin"
|
|
18940
|
+
}), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
|
|
18941
|
+
vehicleId: string(),
|
|
18942
|
+
sampleId: string()
|
|
18943
|
+
}), _void(), {
|
|
18944
|
+
kind: "mutation",
|
|
18945
|
+
auth: "admin"
|
|
18946
|
+
}), method(object({
|
|
18947
|
+
plateId: string(),
|
|
18948
|
+
vehicleId: string()
|
|
18949
|
+
}), _void(), {
|
|
18950
|
+
kind: "mutation",
|
|
18951
|
+
auth: "admin"
|
|
18952
|
+
}), method(object({ plateId: string() }), _void(), {
|
|
18953
|
+
kind: "mutation",
|
|
18954
|
+
auth: "admin"
|
|
18955
|
+
}), method(object({
|
|
18956
|
+
plateIds: array(string()).min(1),
|
|
18957
|
+
vehicleId: string()
|
|
18958
|
+
}), object({
|
|
18959
|
+
assigned: number().int(),
|
|
18960
|
+
failed: array(string()).readonly()
|
|
18961
|
+
}), {
|
|
18962
|
+
kind: "mutation",
|
|
18963
|
+
auth: "admin"
|
|
18964
|
+
}), method(object({ plateIds: array(string()).min(1) }), object({
|
|
18965
|
+
unassigned: number().int(),
|
|
18966
|
+
failed: array(string()).readonly()
|
|
18967
|
+
}), {
|
|
18968
|
+
kind: "mutation",
|
|
18969
|
+
auth: "admin"
|
|
18222
18970
|
});
|
|
18223
18971
|
var ModelFormatSchema = _enum(MODEL_FORMATS);
|
|
18224
18972
|
var HwAccelBackendInputSchema = _enum([
|
|
@@ -18297,6 +19045,10 @@ var GpuInfoSchema = object({
|
|
|
18297
19045
|
memoryMB: number().optional()
|
|
18298
19046
|
});
|
|
18299
19047
|
var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
|
|
19048
|
+
var CoralInfoSchema = object({
|
|
19049
|
+
type: literal("coral-edgetpu"),
|
|
19050
|
+
bus: string().optional()
|
|
19051
|
+
});
|
|
18300
19052
|
var HardwareInfoSchema = object({
|
|
18301
19053
|
platform: HardwarePlatformSchema,
|
|
18302
19054
|
arch: HardwareArchSchema,
|
|
@@ -18305,7 +19057,8 @@ var HardwareInfoSchema = object({
|
|
|
18305
19057
|
totalRAM_MB: number(),
|
|
18306
19058
|
availableRAM_MB: number(),
|
|
18307
19059
|
gpu: GpuInfoSchema.nullable(),
|
|
18308
|
-
npu: NpuInfoSchema.nullable()
|
|
19060
|
+
npu: NpuInfoSchema.nullable(),
|
|
19061
|
+
coral: CoralInfoSchema.nullable().optional()
|
|
18309
19062
|
});
|
|
18310
19063
|
var PlatformScoreSchema = object({
|
|
18311
19064
|
runtime: _enum(["node", "python"]),
|
|
@@ -20764,6 +21517,168 @@ Object.freeze({
|
|
|
20764
21517
|
addonId: null,
|
|
20765
21518
|
access: "create"
|
|
20766
21519
|
},
|
|
21520
|
+
"llm.deleteModel": {
|
|
21521
|
+
capName: "llm",
|
|
21522
|
+
capScope: "system",
|
|
21523
|
+
addonId: null,
|
|
21524
|
+
access: "delete"
|
|
21525
|
+
},
|
|
21526
|
+
"llm.deleteProfile": {
|
|
21527
|
+
capName: "llm",
|
|
21528
|
+
capScope: "system",
|
|
21529
|
+
addonId: null,
|
|
21530
|
+
access: "delete"
|
|
21531
|
+
},
|
|
21532
|
+
"llm.generate": {
|
|
21533
|
+
capName: "llm",
|
|
21534
|
+
capScope: "system",
|
|
21535
|
+
addonId: null,
|
|
21536
|
+
access: "create"
|
|
21537
|
+
},
|
|
21538
|
+
"llm.generateVision": {
|
|
21539
|
+
capName: "llm",
|
|
21540
|
+
capScope: "system",
|
|
21541
|
+
addonId: null,
|
|
21542
|
+
access: "create"
|
|
21543
|
+
},
|
|
21544
|
+
"llm.getDefaults": {
|
|
21545
|
+
capName: "llm",
|
|
21546
|
+
capScope: "system",
|
|
21547
|
+
addonId: null,
|
|
21548
|
+
access: "view"
|
|
21549
|
+
},
|
|
21550
|
+
"llm.getRuntimeStatus": {
|
|
21551
|
+
capName: "llm",
|
|
21552
|
+
capScope: "system",
|
|
21553
|
+
addonId: null,
|
|
21554
|
+
access: "view"
|
|
21555
|
+
},
|
|
21556
|
+
"llm.getUsage": {
|
|
21557
|
+
capName: "llm",
|
|
21558
|
+
capScope: "system",
|
|
21559
|
+
addonId: null,
|
|
21560
|
+
access: "view"
|
|
21561
|
+
},
|
|
21562
|
+
"llm.installModel": {
|
|
21563
|
+
capName: "llm",
|
|
21564
|
+
capScope: "system",
|
|
21565
|
+
addonId: null,
|
|
21566
|
+
access: "create"
|
|
21567
|
+
},
|
|
21568
|
+
"llm.listModelCatalog": {
|
|
21569
|
+
capName: "llm",
|
|
21570
|
+
capScope: "system",
|
|
21571
|
+
addonId: null,
|
|
21572
|
+
access: "view"
|
|
21573
|
+
},
|
|
21574
|
+
"llm.listModels": {
|
|
21575
|
+
capName: "llm",
|
|
21576
|
+
capScope: "system",
|
|
21577
|
+
addonId: null,
|
|
21578
|
+
access: "view"
|
|
21579
|
+
},
|
|
21580
|
+
"llm.listNodeModels": {
|
|
21581
|
+
capName: "llm",
|
|
21582
|
+
capScope: "system",
|
|
21583
|
+
addonId: null,
|
|
21584
|
+
access: "view"
|
|
21585
|
+
},
|
|
21586
|
+
"llm.listProfileKinds": {
|
|
21587
|
+
capName: "llm",
|
|
21588
|
+
capScope: "system",
|
|
21589
|
+
addonId: null,
|
|
21590
|
+
access: "view"
|
|
21591
|
+
},
|
|
21592
|
+
"llm.listProfiles": {
|
|
21593
|
+
capName: "llm",
|
|
21594
|
+
capScope: "system",
|
|
21595
|
+
addonId: null,
|
|
21596
|
+
access: "view"
|
|
21597
|
+
},
|
|
21598
|
+
"llm.listRuntimeNodes": {
|
|
21599
|
+
capName: "llm",
|
|
21600
|
+
capScope: "system",
|
|
21601
|
+
addonId: null,
|
|
21602
|
+
access: "view"
|
|
21603
|
+
},
|
|
21604
|
+
"llm.setDefault": {
|
|
21605
|
+
capName: "llm",
|
|
21606
|
+
capScope: "system",
|
|
21607
|
+
addonId: null,
|
|
21608
|
+
access: "create"
|
|
21609
|
+
},
|
|
21610
|
+
"llm.startRuntime": {
|
|
21611
|
+
capName: "llm",
|
|
21612
|
+
capScope: "system",
|
|
21613
|
+
addonId: null,
|
|
21614
|
+
access: "create"
|
|
21615
|
+
},
|
|
21616
|
+
"llm.stopRuntime": {
|
|
21617
|
+
capName: "llm",
|
|
21618
|
+
capScope: "system",
|
|
21619
|
+
addonId: null,
|
|
21620
|
+
access: "create"
|
|
21621
|
+
},
|
|
21622
|
+
"llm.testProfile": {
|
|
21623
|
+
capName: "llm",
|
|
21624
|
+
capScope: "system",
|
|
21625
|
+
addonId: null,
|
|
21626
|
+
access: "create"
|
|
21627
|
+
},
|
|
21628
|
+
"llm.upsertProfile": {
|
|
21629
|
+
capName: "llm",
|
|
21630
|
+
capScope: "system",
|
|
21631
|
+
addonId: null,
|
|
21632
|
+
access: "create"
|
|
21633
|
+
},
|
|
21634
|
+
"llmRuntime.complete": {
|
|
21635
|
+
capName: "llm-runtime",
|
|
21636
|
+
capScope: "system",
|
|
21637
|
+
addonId: null,
|
|
21638
|
+
access: "create"
|
|
21639
|
+
},
|
|
21640
|
+
"llmRuntime.deleteModel": {
|
|
21641
|
+
capName: "llm-runtime",
|
|
21642
|
+
capScope: "system",
|
|
21643
|
+
addonId: null,
|
|
21644
|
+
access: "delete"
|
|
21645
|
+
},
|
|
21646
|
+
"llmRuntime.ensureStarted": {
|
|
21647
|
+
capName: "llm-runtime",
|
|
21648
|
+
capScope: "system",
|
|
21649
|
+
addonId: null,
|
|
21650
|
+
access: "create"
|
|
21651
|
+
},
|
|
21652
|
+
"llmRuntime.getDiskUsage": {
|
|
21653
|
+
capName: "llm-runtime",
|
|
21654
|
+
capScope: "system",
|
|
21655
|
+
addonId: null,
|
|
21656
|
+
access: "view"
|
|
21657
|
+
},
|
|
21658
|
+
"llmRuntime.installModel": {
|
|
21659
|
+
capName: "llm-runtime",
|
|
21660
|
+
capScope: "system",
|
|
21661
|
+
addonId: null,
|
|
21662
|
+
access: "create"
|
|
21663
|
+
},
|
|
21664
|
+
"llmRuntime.listLocalModels": {
|
|
21665
|
+
capName: "llm-runtime",
|
|
21666
|
+
capScope: "system",
|
|
21667
|
+
addonId: null,
|
|
21668
|
+
access: "view"
|
|
21669
|
+
},
|
|
21670
|
+
"llmRuntime.status": {
|
|
21671
|
+
capName: "llm-runtime",
|
|
21672
|
+
capScope: "system",
|
|
21673
|
+
addonId: null,
|
|
21674
|
+
access: "view"
|
|
21675
|
+
},
|
|
21676
|
+
"llmRuntime.stop": {
|
|
21677
|
+
capName: "llm-runtime",
|
|
21678
|
+
capScope: "system",
|
|
21679
|
+
addonId: null,
|
|
21680
|
+
access: "create"
|
|
21681
|
+
},
|
|
20767
21682
|
"localNetwork.getAllowedAddresses": {
|
|
20768
21683
|
capName: "local-network",
|
|
20769
21684
|
capScope: "system",
|
|
@@ -21394,6 +22309,12 @@ Object.freeze({
|
|
|
21394
22309
|
addonId: null,
|
|
21395
22310
|
access: "delete"
|
|
21396
22311
|
},
|
|
22312
|
+
"pipelineAnalytics.deleteTracks": {
|
|
22313
|
+
capName: "pipeline-analytics",
|
|
22314
|
+
capScope: "device",
|
|
22315
|
+
addonId: null,
|
|
22316
|
+
access: "delete"
|
|
22317
|
+
},
|
|
21397
22318
|
"pipelineAnalytics.getActiveTracks": {
|
|
21398
22319
|
capName: "pipeline-analytics",
|
|
21399
22320
|
capScope: "device",
|
|
@@ -21460,12 +22381,24 @@ Object.freeze({
|
|
|
21460
22381
|
addonId: null,
|
|
21461
22382
|
access: "create"
|
|
21462
22383
|
},
|
|
22384
|
+
"pipelineAnalytics.pruneTracksBefore": {
|
|
22385
|
+
capName: "pipeline-analytics",
|
|
22386
|
+
capScope: "device",
|
|
22387
|
+
addonId: null,
|
|
22388
|
+
access: "create"
|
|
22389
|
+
},
|
|
21463
22390
|
"pipelineAnalytics.searchObjectEvents": {
|
|
21464
22391
|
capName: "pipeline-analytics",
|
|
21465
22392
|
capScope: "device",
|
|
21466
22393
|
addonId: null,
|
|
21467
22394
|
access: "view"
|
|
21468
22395
|
},
|
|
22396
|
+
"pipelineAnalytics.wipeAllAnalytics": {
|
|
22397
|
+
capName: "pipeline-analytics",
|
|
22398
|
+
capScope: "device",
|
|
22399
|
+
addonId: null,
|
|
22400
|
+
access: "delete"
|
|
22401
|
+
},
|
|
21469
22402
|
"pipelineExecutor.cacheFrameInPool": {
|
|
21470
22403
|
capName: "pipeline-executor",
|
|
21471
22404
|
capScope: "system",
|
|
@@ -21964,18 +22897,48 @@ Object.freeze({
|
|
|
21964
22897
|
addonId: null,
|
|
21965
22898
|
access: "create"
|
|
21966
22899
|
},
|
|
22900
|
+
"pipelineRunner.runDetailSubtree": {
|
|
22901
|
+
capName: "pipeline-runner",
|
|
22902
|
+
capScope: "system",
|
|
22903
|
+
addonId: null,
|
|
22904
|
+
access: "create"
|
|
22905
|
+
},
|
|
22906
|
+
"plateGallery.assignPlate": {
|
|
22907
|
+
capName: "plate-gallery",
|
|
22908
|
+
capScope: "system",
|
|
22909
|
+
addonId: null,
|
|
22910
|
+
access: "create"
|
|
22911
|
+
},
|
|
22912
|
+
"plateGallery.assignPlates": {
|
|
22913
|
+
capName: "plate-gallery",
|
|
22914
|
+
capScope: "system",
|
|
22915
|
+
addonId: null,
|
|
22916
|
+
access: "create"
|
|
22917
|
+
},
|
|
21967
22918
|
"plateGallery.correctPlateText": {
|
|
21968
22919
|
capName: "plate-gallery",
|
|
21969
22920
|
capScope: "system",
|
|
21970
22921
|
addonId: null,
|
|
21971
22922
|
access: "create"
|
|
21972
22923
|
},
|
|
22924
|
+
"plateGallery.createVehicle": {
|
|
22925
|
+
capName: "plate-gallery",
|
|
22926
|
+
capScope: "system",
|
|
22927
|
+
addonId: null,
|
|
22928
|
+
access: "create"
|
|
22929
|
+
},
|
|
21973
22930
|
"plateGallery.deletePlate": {
|
|
21974
22931
|
capName: "plate-gallery",
|
|
21975
22932
|
capScope: "system",
|
|
21976
22933
|
addonId: null,
|
|
21977
22934
|
access: "delete"
|
|
21978
22935
|
},
|
|
22936
|
+
"plateGallery.deleteVehicle": {
|
|
22937
|
+
capName: "plate-gallery",
|
|
22938
|
+
capScope: "system",
|
|
22939
|
+
addonId: null,
|
|
22940
|
+
access: "delete"
|
|
22941
|
+
},
|
|
21979
22942
|
"plateGallery.getPlateByTrack": {
|
|
21980
22943
|
capName: "plate-gallery",
|
|
21981
22944
|
capScope: "system",
|
|
@@ -21994,6 +22957,30 @@ Object.freeze({
|
|
|
21994
22957
|
addonId: null,
|
|
21995
22958
|
access: "view"
|
|
21996
22959
|
},
|
|
22960
|
+
"plateGallery.listVehicles": {
|
|
22961
|
+
capName: "plate-gallery",
|
|
22962
|
+
capScope: "system",
|
|
22963
|
+
addonId: null,
|
|
22964
|
+
access: "view"
|
|
22965
|
+
},
|
|
22966
|
+
"plateGallery.listVehicleSamples": {
|
|
22967
|
+
capName: "plate-gallery",
|
|
22968
|
+
capScope: "system",
|
|
22969
|
+
addonId: null,
|
|
22970
|
+
access: "view"
|
|
22971
|
+
},
|
|
22972
|
+
"plateGallery.removeVehicleSample": {
|
|
22973
|
+
capName: "plate-gallery",
|
|
22974
|
+
capScope: "system",
|
|
22975
|
+
addonId: null,
|
|
22976
|
+
access: "delete"
|
|
22977
|
+
},
|
|
22978
|
+
"plateGallery.renameVehicle": {
|
|
22979
|
+
capName: "plate-gallery",
|
|
22980
|
+
capScope: "system",
|
|
22981
|
+
addonId: null,
|
|
22982
|
+
access: "create"
|
|
22983
|
+
},
|
|
21997
22984
|
"plateGallery.searchPlates": {
|
|
21998
22985
|
capName: "plate-gallery",
|
|
21999
22986
|
capScope: "system",
|
|
@@ -22006,6 +22993,18 @@ Object.freeze({
|
|
|
22006
22993
|
addonId: null,
|
|
22007
22994
|
access: "view"
|
|
22008
22995
|
},
|
|
22996
|
+
"plateGallery.unassignPlate": {
|
|
22997
|
+
capName: "plate-gallery",
|
|
22998
|
+
capScope: "system",
|
|
22999
|
+
addonId: null,
|
|
23000
|
+
access: "create"
|
|
23001
|
+
},
|
|
23002
|
+
"plateGallery.unassignPlates": {
|
|
23003
|
+
capName: "plate-gallery",
|
|
23004
|
+
capScope: "system",
|
|
23005
|
+
addonId: null,
|
|
23006
|
+
access: "create"
|
|
23007
|
+
},
|
|
22009
23008
|
"platformProbe.getCapabilities": {
|
|
22010
23009
|
capName: "platform-probe",
|
|
22011
23010
|
capScope: "system",
|
|
@@ -22198,6 +23197,48 @@ Object.freeze({
|
|
|
22198
23197
|
addonId: null,
|
|
22199
23198
|
access: "create"
|
|
22200
23199
|
},
|
|
23200
|
+
"sceneMonitor.captureReference": {
|
|
23201
|
+
capName: "scene-monitor",
|
|
23202
|
+
capScope: "device",
|
|
23203
|
+
addonId: null,
|
|
23204
|
+
access: "create"
|
|
23205
|
+
},
|
|
23206
|
+
"sceneMonitor.createScene": {
|
|
23207
|
+
capName: "scene-monitor",
|
|
23208
|
+
capScope: "device",
|
|
23209
|
+
addonId: null,
|
|
23210
|
+
access: "create"
|
|
23211
|
+
},
|
|
23212
|
+
"sceneMonitor.deleteReference": {
|
|
23213
|
+
capName: "scene-monitor",
|
|
23214
|
+
capScope: "device",
|
|
23215
|
+
addonId: null,
|
|
23216
|
+
access: "delete"
|
|
23217
|
+
},
|
|
23218
|
+
"sceneMonitor.deleteScene": {
|
|
23219
|
+
capName: "scene-monitor",
|
|
23220
|
+
capScope: "device",
|
|
23221
|
+
addonId: null,
|
|
23222
|
+
access: "delete"
|
|
23223
|
+
},
|
|
23224
|
+
"sceneMonitor.listScenes": {
|
|
23225
|
+
capName: "scene-monitor",
|
|
23226
|
+
capScope: "device",
|
|
23227
|
+
addonId: null,
|
|
23228
|
+
access: "view"
|
|
23229
|
+
},
|
|
23230
|
+
"sceneMonitor.recheckNow": {
|
|
23231
|
+
capName: "scene-monitor",
|
|
23232
|
+
capScope: "device",
|
|
23233
|
+
addonId: null,
|
|
23234
|
+
access: "create"
|
|
23235
|
+
},
|
|
23236
|
+
"sceneMonitor.updateScene": {
|
|
23237
|
+
capName: "scene-monitor",
|
|
23238
|
+
capScope: "device",
|
|
23239
|
+
addonId: null,
|
|
23240
|
+
access: "create"
|
|
23241
|
+
},
|
|
22201
23242
|
"scriptRunner.run": {
|
|
22202
23243
|
capName: "script-runner",
|
|
22203
23244
|
capScope: "device",
|
|
@@ -23282,6 +24323,7 @@ Object.freeze({
|
|
|
23282
24323
|
Object.freeze({
|
|
23283
24324
|
"broker": "broker",
|
|
23284
24325
|
"device-export": "device-export",
|
|
24326
|
+
"llm": "ai",
|
|
23285
24327
|
"mesh-network": "mesh",
|
|
23286
24328
|
"mqtt-broker": "broker",
|
|
23287
24329
|
"network-access": "ingress",
|