@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
|
@@ -4320,6 +4320,14 @@ function object(shape, params) {
|
|
|
4320
4320
|
...normalizeParams(params)
|
|
4321
4321
|
});
|
|
4322
4322
|
}
|
|
4323
|
+
function looseObject(shape, params) {
|
|
4324
|
+
return new ZodObject({
|
|
4325
|
+
type: "object",
|
|
4326
|
+
shape,
|
|
4327
|
+
catchall: unknown(),
|
|
4328
|
+
...normalizeParams(params)
|
|
4329
|
+
});
|
|
4330
|
+
}
|
|
4323
4331
|
var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
|
|
4324
4332
|
$ZodUnion.init(inst, def);
|
|
4325
4333
|
ZodType.init(inst, def);
|
|
@@ -4661,7 +4669,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4661
4669
|
return inst;
|
|
4662
4670
|
}
|
|
4663
4671
|
//#endregion
|
|
4664
|
-
//#region ../types/dist/
|
|
4672
|
+
//#region ../types/dist/event-category-CFZs3jI4.mjs
|
|
4665
4673
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4666
4674
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4667
4675
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5071,10 +5079,51 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5071
5079
|
EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
|
|
5072
5080
|
EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
|
|
5073
5081
|
EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
|
|
5082
|
+
/**
|
|
5083
|
+
* Unified track-lifecycle event: ONE category carrying `phase:
|
|
5084
|
+
* 'start' | 'update' | 'end'` with a rich, typed
|
|
5085
|
+
* `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
|
|
5086
|
+
* `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
|
|
5087
|
+
* pair — a consumer subscribes once and branches on `phase`.
|
|
5088
|
+
*/
|
|
5089
|
+
EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
|
|
5090
|
+
/**
|
|
5091
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5092
|
+
* (`phase:'start'`). Kept as a soft alias — no known subscribers.
|
|
5093
|
+
*/
|
|
5074
5094
|
EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
|
|
5095
|
+
/**
|
|
5096
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5097
|
+
* (`phase:'end'`). Kept as a soft alias — no known subscribers.
|
|
5098
|
+
*/
|
|
5075
5099
|
EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
|
|
5076
5100
|
EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
|
|
5077
5101
|
EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
|
|
5102
|
+
/**
|
|
5103
|
+
* Fired by `addon-post-analysis` when a parked (stationary) object appears
|
|
5104
|
+
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
5105
|
+
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
5106
|
+
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
5107
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
5108
|
+
*/
|
|
5109
|
+
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
5110
|
+
/**
|
|
5111
|
+
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
5112
|
+
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
5113
|
+
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
5114
|
+
* removed. Telemetry semantics (D8): a lost event only delays a refresh,
|
|
5115
|
+
* never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
|
|
5116
|
+
*/
|
|
5117
|
+
EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
|
|
5118
|
+
/**
|
|
5119
|
+
* Fired by `addon-post-analysis` whenever a gallery plate row changes:
|
|
5120
|
+
* `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
|
|
5121
|
+
* `'assigned'` / `'unassigned'` its vehicle link changed
|
|
5122
|
+
* (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
|
|
5123
|
+
* semantics (D8): a lost event only delays a refresh, never a correctness
|
|
5124
|
+
* issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
|
|
5125
|
+
*/
|
|
5126
|
+
EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
|
|
5078
5127
|
EventCategory["FrigateLiveEvent"] = "frigate.live-event";
|
|
5079
5128
|
EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
|
|
5080
5129
|
/**
|
|
@@ -6903,7 +6952,8 @@ var MODEL_FORMATS = [
|
|
|
6903
6952
|
"coreml",
|
|
6904
6953
|
"openvino",
|
|
6905
6954
|
"tflite",
|
|
6906
|
-
"pt"
|
|
6955
|
+
"pt",
|
|
6956
|
+
"gguf"
|
|
6907
6957
|
];
|
|
6908
6958
|
/**
|
|
6909
6959
|
* Multi-file format payload.
|
|
@@ -6947,7 +6997,8 @@ var ModelFormatsSchema = object({
|
|
|
6947
6997
|
coreml: ModelFormatEntrySchema.optional(),
|
|
6948
6998
|
openvino: ModelFormatEntrySchema.optional(),
|
|
6949
6999
|
tflite: ModelFormatEntrySchema.optional(),
|
|
6950
|
-
pt: ModelFormatEntrySchema.optional()
|
|
7000
|
+
pt: ModelFormatEntrySchema.optional(),
|
|
7001
|
+
gguf: ModelFormatEntrySchema.optional()
|
|
6951
7002
|
});
|
|
6952
7003
|
/**
|
|
6953
7004
|
* Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
|
|
@@ -6988,6 +7039,15 @@ var ModelCatalogEntrySchema = object({
|
|
|
6988
7039
|
width: number(),
|
|
6989
7040
|
height: number()
|
|
6990
7041
|
}),
|
|
7042
|
+
/**
|
|
7043
|
+
* Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
|
|
7044
|
+
* every detector / classifier / embedder. Set to 1 for a grayscale CTC text
|
|
7045
|
+
* recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
|
|
7046
|
+
* feeds a single-channel, EasyOCR-normalized tensor instead of the default
|
|
7047
|
+
* 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
|
|
7048
|
+
* Python inference pool.
|
|
7049
|
+
*/
|
|
7050
|
+
inputChannels: number().int().positive().optional(),
|
|
6991
7051
|
labels: array(LabelDefinitionSchema).readonly(),
|
|
6992
7052
|
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6993
7053
|
inputNormalization: _enum([
|
|
@@ -6997,6 +7057,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
6997
7057
|
]).optional(),
|
|
6998
7058
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6999
7059
|
/**
|
|
7060
|
+
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
7061
|
+
* `StepDefinition.postprocessor` applies (the normal case — every model in a
|
|
7062
|
+
* step shares its decode). Set it when a step hosts models with DIFFERENT raw
|
|
7063
|
+
* output layouts under one slot: e.g. object-detection is `'yolo'` by default,
|
|
7064
|
+
* but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
|
|
7065
|
+
* 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
|
|
7066
|
+
* by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
|
|
7067
|
+
*/
|
|
7068
|
+
postprocessor: custom().optional(),
|
|
7069
|
+
/**
|
|
7000
7070
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
7001
7071
|
* onto the canonical template) before this step runs, instead of a plain
|
|
7002
7072
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -10473,7 +10543,8 @@ var ModelFormatSchema$1 = _enum([
|
|
|
10473
10543
|
"coreml",
|
|
10474
10544
|
"openvino",
|
|
10475
10545
|
"tflite",
|
|
10476
|
-
"pt"
|
|
10546
|
+
"pt",
|
|
10547
|
+
"gguf"
|
|
10477
10548
|
]);
|
|
10478
10549
|
var PipelineSlotSchema = _enum([
|
|
10479
10550
|
"detector",
|
|
@@ -10567,7 +10638,8 @@ var EngineProvisioningSchema = object({
|
|
|
10567
10638
|
runtimeId: _enum([
|
|
10568
10639
|
"onnx",
|
|
10569
10640
|
"openvino",
|
|
10570
|
-
"coreml"
|
|
10641
|
+
"coreml",
|
|
10642
|
+
"edgetpu"
|
|
10571
10643
|
]).nullable(),
|
|
10572
10644
|
device: string().nullable(),
|
|
10573
10645
|
state: _enum([
|
|
@@ -10728,7 +10800,15 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
10728
10800
|
image: _instanceof(Uint8Array).optional(),
|
|
10729
10801
|
referenceImage: string().optional(),
|
|
10730
10802
|
deviceId: number().optional(),
|
|
10731
|
-
sessionId: string().optional()
|
|
10803
|
+
sessionId: string().optional(),
|
|
10804
|
+
/**
|
|
10805
|
+
* Execution plane. 'full' (default) runs the whole tree — benchmark,
|
|
10806
|
+
* reference-image, and detail-subtree calls. 'frame' is the live
|
|
10807
|
+
* per-frame dispatch: ONLY root-plane steps run; crop children
|
|
10808
|
+
* (inputClasses ≠ null) are skipped and served per-track via
|
|
10809
|
+
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
10810
|
+
*/
|
|
10811
|
+
plane: _enum(["full", "frame"]).optional()
|
|
10732
10812
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
10733
10813
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
10734
10814
|
steps: array(PipelineStepInputSchema).min(1),
|
|
@@ -10871,6 +10951,28 @@ var NativeCropResultSchema = object({
|
|
|
10871
10951
|
width: number().int().positive(),
|
|
10872
10952
|
height: number().int().positive()
|
|
10873
10953
|
});
|
|
10954
|
+
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
10955
|
+
* originating detection, in FRAME-space coordinates. Reuses
|
|
10956
|
+
* `NativeCropBboxSchema`'s `{x,y,w,h}` shape (same numeric fields; here
|
|
10957
|
+
* the coordinates are frame-space rather than getNativeCrop's
|
|
10958
|
+
* normalized [0,1] convention). */
|
|
10959
|
+
var DetailParentSchema = object({
|
|
10960
|
+
bbox: NativeCropBboxSchema,
|
|
10961
|
+
className: string()
|
|
10962
|
+
});
|
|
10963
|
+
/** One child-step result from `runDetailSubtree` — an embedding, label,
|
|
10964
|
+
* or refined detection produced by running the crop-subtree on a
|
|
10965
|
+
* single tracked detection. */
|
|
10966
|
+
var DetailResultSchema = object({
|
|
10967
|
+
stepId: string(),
|
|
10968
|
+
className: string(),
|
|
10969
|
+
score: number(),
|
|
10970
|
+
/** FRAME-space bbox (already mapped back from crop space). */
|
|
10971
|
+
bbox: NativeCropBboxSchema.optional(),
|
|
10972
|
+
embedding: string().optional(),
|
|
10973
|
+
label: string().optional(),
|
|
10974
|
+
alignedCropJpeg: string().optional()
|
|
10975
|
+
});
|
|
10874
10976
|
/**
|
|
10875
10977
|
* Per-camera tunable ranges + defaults. Single source of truth used
|
|
10876
10978
|
* by both the Zod data schema (validation + default fallback) and
|
|
@@ -11131,7 +11233,13 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
11131
11233
|
handle: FrameHandleSchema,
|
|
11132
11234
|
bbox: NativeCropBboxSchema,
|
|
11133
11235
|
maxWidth: number().int().positive().optional()
|
|
11134
|
-
}), NativeCropResultSchema.nullable())
|
|
11236
|
+
}), NativeCropResultSchema.nullable()), method(object({
|
|
11237
|
+
deviceId: number(),
|
|
11238
|
+
frameHandle: FrameHandleSchema.optional(),
|
|
11239
|
+
cropJpeg: string().optional(),
|
|
11240
|
+
parent: DetailParentSchema,
|
|
11241
|
+
steps: array(string()).optional()
|
|
11242
|
+
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" });
|
|
11135
11243
|
object({
|
|
11136
11244
|
detected: boolean(),
|
|
11137
11245
|
/** Ms epoch of the last detected-true observation. Null if never detected. */
|
|
@@ -11743,6 +11851,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
|
|
|
11743
11851
|
deviceId: number(),
|
|
11744
11852
|
status: PtzAutotrackStatusSchema
|
|
11745
11853
|
});
|
|
11854
|
+
/**
|
|
11855
|
+
* scene-monitor — device-scoped reference-region state cap. An operator marks
|
|
11856
|
+
* a rect ROI on a camera frame and names one or more states; the engine
|
|
11857
|
+
* (pipeline-analytics, designated post-processing node) reports which state is
|
|
11858
|
+
* active on an ongoing basis. Two operator-selectable check modes share every-
|
|
11859
|
+
* thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
|
|
11860
|
+
* vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
|
|
11861
|
+
*
|
|
11862
|
+
* D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
|
|
11863
|
+
* derives the device-detail contribution; the provider carries NO hand-written
|
|
11864
|
+
* settings-contribution methods. `status.kind:'push'` — the engine pushes on
|
|
11865
|
+
* every hysteresis flip / availability change; consumers never poll.
|
|
11866
|
+
*/
|
|
11867
|
+
/** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
|
|
11868
|
+
* be added without a wire break (matching falls back to any-condition refs). */
|
|
11869
|
+
var SceneConditionSchema = string();
|
|
11870
|
+
/** One captured reference — condition-tagged, model-version-gated. `embedding`
|
|
11871
|
+
* is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
|
|
11872
|
+
var SceneReferenceSchema = object({
|
|
11873
|
+
embedding: array(number()),
|
|
11874
|
+
modelId: string(),
|
|
11875
|
+
condition: SceneConditionSchema,
|
|
11876
|
+
capturedAt: number(),
|
|
11877
|
+
thumbnailMediaId: string().optional()
|
|
11878
|
+
});
|
|
11879
|
+
var SceneMonitorStateSchema = object({
|
|
11880
|
+
id: string(),
|
|
11881
|
+
label: string(),
|
|
11882
|
+
references: array(SceneReferenceSchema),
|
|
11883
|
+
textPrompts: array(string()).optional(),
|
|
11884
|
+
referenceCount: number(),
|
|
11885
|
+
currentlyMatched: boolean()
|
|
11886
|
+
});
|
|
11887
|
+
/** Per-mode comparator params in a discriminated union so an `llm` scene never
|
|
11888
|
+
* carries similarity knobs and vice-versa. */
|
|
11889
|
+
var SceneCheckSchema = discriminatedUnion("mode", [object({
|
|
11890
|
+
mode: literal("similarity"),
|
|
11891
|
+
threshold: number().min(0).max(1),
|
|
11892
|
+
hysteresisCount: number().int().positive()
|
|
11893
|
+
}), object({
|
|
11894
|
+
mode: literal("llm"),
|
|
11895
|
+
prompt: string(),
|
|
11896
|
+
profileId: string().optional(),
|
|
11897
|
+
hysteresisCount: number().int().positive()
|
|
11898
|
+
})]);
|
|
11899
|
+
var SceneMonitorSchema = object({
|
|
11900
|
+
id: string(),
|
|
11901
|
+
label: string(),
|
|
11902
|
+
roi: MaskRectShapeSchema,
|
|
11903
|
+
enabled: boolean(),
|
|
11904
|
+
triggerMode: _enum([
|
|
11905
|
+
"periodic",
|
|
11906
|
+
"on-motion",
|
|
11907
|
+
"both"
|
|
11908
|
+
]),
|
|
11909
|
+
checkIntervalSec: number().optional(),
|
|
11910
|
+
check: SceneCheckSchema,
|
|
11911
|
+
states: array(SceneMonitorStateSchema),
|
|
11912
|
+
currentStateId: string().nullable(),
|
|
11913
|
+
lastCheckedAt: number().nullable(),
|
|
11914
|
+
lastConfidence: number().nullable(),
|
|
11915
|
+
currentCondition: SceneConditionSchema.nullable(),
|
|
11916
|
+
availability: _enum(["ok", "unavailable"]),
|
|
11917
|
+
unavailableReason: string().nullable()
|
|
11918
|
+
});
|
|
11919
|
+
var SceneMonitorStatusSchema = object({
|
|
11920
|
+
monitors: array(SceneMonitorSchema),
|
|
11921
|
+
lastFetchedAt: number()
|
|
11922
|
+
});
|
|
11923
|
+
DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
|
|
11924
|
+
deviceId: number(),
|
|
11925
|
+
label: string(),
|
|
11926
|
+
roi: MaskRectShapeSchema,
|
|
11927
|
+
check: SceneCheckSchema,
|
|
11928
|
+
triggerMode: _enum([
|
|
11929
|
+
"periodic",
|
|
11930
|
+
"on-motion",
|
|
11931
|
+
"both"
|
|
11932
|
+
]).optional(),
|
|
11933
|
+
checkIntervalSec: number().optional()
|
|
11934
|
+
}), SceneMonitorSchema, {
|
|
11935
|
+
kind: "mutation",
|
|
11936
|
+
auth: "admin"
|
|
11937
|
+
}), method(object({
|
|
11938
|
+
deviceId: number(),
|
|
11939
|
+
monitorId: string(),
|
|
11940
|
+
patch: object({
|
|
11941
|
+
label: string().optional(),
|
|
11942
|
+
roi: MaskRectShapeSchema.optional(),
|
|
11943
|
+
enabled: boolean().optional(),
|
|
11944
|
+
triggerMode: _enum([
|
|
11945
|
+
"periodic",
|
|
11946
|
+
"on-motion",
|
|
11947
|
+
"both"
|
|
11948
|
+
]).optional(),
|
|
11949
|
+
checkIntervalSec: number().optional(),
|
|
11950
|
+
check: SceneCheckSchema.optional()
|
|
11951
|
+
})
|
|
11952
|
+
}), _void(), {
|
|
11953
|
+
kind: "mutation",
|
|
11954
|
+
auth: "admin"
|
|
11955
|
+
}), method(object({
|
|
11956
|
+
deviceId: number(),
|
|
11957
|
+
monitorId: string()
|
|
11958
|
+
}), _void(), {
|
|
11959
|
+
kind: "mutation",
|
|
11960
|
+
auth: "admin"
|
|
11961
|
+
}), method(object({
|
|
11962
|
+
deviceId: number(),
|
|
11963
|
+
monitorId: string(),
|
|
11964
|
+
stateId: string().optional(),
|
|
11965
|
+
label: string().optional(),
|
|
11966
|
+
condition: SceneConditionSchema.optional()
|
|
11967
|
+
}), object({
|
|
11968
|
+
stateId: string(),
|
|
11969
|
+
referenceCount: number()
|
|
11970
|
+
}), {
|
|
11971
|
+
kind: "mutation",
|
|
11972
|
+
auth: "admin"
|
|
11973
|
+
}), method(object({
|
|
11974
|
+
deviceId: number(),
|
|
11975
|
+
monitorId: string(),
|
|
11976
|
+
stateId: string(),
|
|
11977
|
+
index: number()
|
|
11978
|
+
}), _void(), {
|
|
11979
|
+
kind: "mutation",
|
|
11980
|
+
auth: "admin"
|
|
11981
|
+
}), method(object({
|
|
11982
|
+
deviceId: number(),
|
|
11983
|
+
monitorId: string()
|
|
11984
|
+
}), _void(), {
|
|
11985
|
+
kind: "mutation",
|
|
11986
|
+
auth: "admin"
|
|
11987
|
+
});
|
|
11746
11988
|
object({
|
|
11747
11989
|
/** Whether the script is currently executing. */
|
|
11748
11990
|
isRunning: boolean(),
|
|
@@ -12150,6 +12392,36 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
|
|
|
12150
12392
|
* with the per-track detail panel and live overlay. */
|
|
12151
12393
|
trackIds: array(string()).readonly()
|
|
12152
12394
|
});
|
|
12395
|
+
/**
|
|
12396
|
+
* A parked ("stationary") object surfaced alongside occupancy — an object that
|
|
12397
|
+
* settled and stopped moving. It is NO LONGER a tracked object (the tracker was
|
|
12398
|
+
* told to forget it so it stops re-spawning tracks/events), but it IS still
|
|
12399
|
+
* physically present, so it keeps counting toward `frame` occupancy and is
|
|
12400
|
+
* listed here so the UI can show it in a dedicated "Stationary" section instead
|
|
12401
|
+
* of flooding the live event feed.
|
|
12402
|
+
*/
|
|
12403
|
+
var StationaryObjectSchema = object({
|
|
12404
|
+
id: string(),
|
|
12405
|
+
className: string(),
|
|
12406
|
+
bbox: object({
|
|
12407
|
+
x: number(),
|
|
12408
|
+
y: number(),
|
|
12409
|
+
w: number(),
|
|
12410
|
+
h: number()
|
|
12411
|
+
}),
|
|
12412
|
+
frameWidth: number().int().nonnegative(),
|
|
12413
|
+
frameHeight: number().int().nonnegative(),
|
|
12414
|
+
/** When the source track was first seen. */
|
|
12415
|
+
firstSeenAt: number().int(),
|
|
12416
|
+
/** When the object was recognised as parked (promotion time). */
|
|
12417
|
+
becameStationaryAt: number().int(),
|
|
12418
|
+
/** Last frame a detection confirmed the object is still there. */
|
|
12419
|
+
lastConfirmedAt: number().int(),
|
|
12420
|
+
/** Enrichment label carried from the source track (identity / plate). */
|
|
12421
|
+
label: string().optional(),
|
|
12422
|
+
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
12423
|
+
keyFrameMediaKey: string().optional()
|
|
12424
|
+
});
|
|
12153
12425
|
var CameraOccupancySnapshotSchema = object({
|
|
12154
12426
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
12155
12427
|
ts: number().int(),
|
|
@@ -12158,10 +12430,15 @@ var CameraOccupancySnapshotSchema = object({
|
|
|
12158
12430
|
frameHeight: number().int().nonnegative(),
|
|
12159
12431
|
/** Per-zone breakdown — one entry per defined zone (user + onboard). */
|
|
12160
12432
|
zones: array(ZoneScopeBreakdownSchema).readonly(),
|
|
12161
|
-
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12433
|
+
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12434
|
+
* INCLUDES currently-confirmed stationary objects (they are still present). */
|
|
12162
12435
|
frame: PerScopeBreakdownSchema,
|
|
12163
12436
|
/** Detections that landed outside every zone. Empty when no zones defined. */
|
|
12164
|
-
unzoned: PerScopeBreakdownSchema
|
|
12437
|
+
unzoned: PerScopeBreakdownSchema,
|
|
12438
|
+
/** Parked objects on this camera (additive — absent on legacy snapshots).
|
|
12439
|
+
* Surfaced separately so the UI shows them in a dedicated section rather
|
|
12440
|
+
* than as repeated tracks/events. */
|
|
12441
|
+
stationaryObjects: array(StationaryObjectSchema).readonly().optional()
|
|
12165
12442
|
});
|
|
12166
12443
|
/**
|
|
12167
12444
|
* Time-series resolution. The history methods return one bucket per
|
|
@@ -12770,7 +13047,12 @@ var NotificationRuleConditionsSchema = object({
|
|
|
12770
13047
|
clipDescription: object({
|
|
12771
13048
|
text: string().min(1),
|
|
12772
13049
|
minSimilarity: number().min(0).max(1)
|
|
12773
|
-
}).optional()
|
|
13050
|
+
}).optional(),
|
|
13051
|
+
/** Match events whose recognized-entity label (face identity name or plate
|
|
13052
|
+
* vehicle name, propagated onto `event.data.label`) is one of these values.
|
|
13053
|
+
* Empty/absent → unaffected (back-compat). Enables "notify me when <named
|
|
13054
|
+
* vehicle/person> is seen". */
|
|
13055
|
+
labels: array(string()).readonly().optional()
|
|
12774
13056
|
});
|
|
12775
13057
|
var NotificationRuleTemplateSchema = object({
|
|
12776
13058
|
title: string(),
|
|
@@ -13028,11 +13310,19 @@ method(object({
|
|
|
13028
13310
|
* login page needs NO change.
|
|
13029
13311
|
*
|
|
13030
13312
|
* - `widget` — a Module-Federation widget the login page mounts (via
|
|
13031
|
-
* `loadRemoteBundle`) for an in-page ceremony.
|
|
13032
|
-
*
|
|
13033
|
-
*
|
|
13034
|
-
*
|
|
13035
|
-
*
|
|
13313
|
+
* `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
|
|
13314
|
+
* stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
|
|
13315
|
+
* mechanism kept for future use; no shipped addon uses it on the login
|
|
13316
|
+
* page (the passkey ceremony below runs natively in the shell instead).
|
|
13317
|
+
*
|
|
13318
|
+
* - `passkey` — a declarative WebAuthn ceremony the shell renders
|
|
13319
|
+
* natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
|
|
13320
|
+
* a remotely-loaded bundle). Carries the addon's effective `rpId` /
|
|
13321
|
+
* `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
|
|
13322
|
+
* can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
|
|
13323
|
+
* fetching any remote code pre-auth. Contribution stays unconditional —
|
|
13324
|
+
* enrollment state is never leaked pre-auth; visibility is a shell
|
|
13325
|
+
* decision.
|
|
13036
13326
|
*
|
|
13037
13327
|
* Every contribution carries a `stage`:
|
|
13038
13328
|
* - `primary` — shown on the first credentials screen (OIDC /
|
|
@@ -13046,30 +13336,45 @@ method(object({
|
|
|
13046
13336
|
*/
|
|
13047
13337
|
/** When a login method renders in the two-phase login flow. */
|
|
13048
13338
|
var LoginStageEnum = _enum(["primary", "second-factor"]);
|
|
13049
|
-
/** One login-method contribution — redirect button
|
|
13050
|
-
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13051
|
-
|
|
13052
|
-
|
|
13053
|
-
|
|
13054
|
-
|
|
13055
|
-
|
|
13056
|
-
|
|
13057
|
-
|
|
13058
|
-
|
|
13059
|
-
|
|
13060
|
-
|
|
13061
|
-
|
|
13062
|
-
|
|
13063
|
-
|
|
13064
|
-
|
|
13065
|
-
|
|
13066
|
-
|
|
13067
|
-
|
|
13068
|
-
|
|
13069
|
-
|
|
13070
|
-
|
|
13071
|
-
|
|
13072
|
-
|
|
13339
|
+
/** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
|
|
13340
|
+
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13341
|
+
object({
|
|
13342
|
+
kind: literal("redirect"),
|
|
13343
|
+
/** Stable id within the login-method set (e.g. `auth-oidc/google`). */
|
|
13344
|
+
id: string(),
|
|
13345
|
+
/** Operator-facing button label. */
|
|
13346
|
+
label: string(),
|
|
13347
|
+
/** lucide-react icon name. */
|
|
13348
|
+
icon: string().optional(),
|
|
13349
|
+
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
13350
|
+
startUrl: string(),
|
|
13351
|
+
stage: LoginStageEnum
|
|
13352
|
+
}),
|
|
13353
|
+
object({
|
|
13354
|
+
kind: literal("widget"),
|
|
13355
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
|
|
13356
|
+
id: string(),
|
|
13357
|
+
/** Owning addon id — drives the public bundle URL + the MF namespace. */
|
|
13358
|
+
addonId: string(),
|
|
13359
|
+
/** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
|
|
13360
|
+
bundle: string(),
|
|
13361
|
+
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
13362
|
+
remote: WidgetRemoteSchema,
|
|
13363
|
+
stage: LoginStageEnum
|
|
13364
|
+
}),
|
|
13365
|
+
object({
|
|
13366
|
+
kind: literal("passkey"),
|
|
13367
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
|
|
13368
|
+
id: string(),
|
|
13369
|
+
/** Operator-facing button label. */
|
|
13370
|
+
label: string(),
|
|
13371
|
+
stage: LoginStageEnum,
|
|
13372
|
+
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
13373
|
+
rpId: string(),
|
|
13374
|
+
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
13375
|
+
origin: string().nullable()
|
|
13376
|
+
})
|
|
13377
|
+
]);
|
|
13073
13378
|
method(_void(), array(LoginMethodContributionSchema).readonly());
|
|
13074
13379
|
/**
|
|
13075
13380
|
* Orchestrator-side destination metadata. The orchestrator computes
|
|
@@ -14930,14 +15235,14 @@ var TargetKindCapsSchema = object({
|
|
|
14930
15235
|
* the union is large and not meant for runtime validation here; the exported
|
|
14931
15236
|
* `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
|
|
14932
15237
|
*/
|
|
14933
|
-
var ConfigSchemaPassthrough = unknown();
|
|
15238
|
+
var ConfigSchemaPassthrough$1 = unknown();
|
|
14934
15239
|
var TargetKindSchema = object({
|
|
14935
15240
|
kind: string(),
|
|
14936
15241
|
label: string(),
|
|
14937
15242
|
icon: string(),
|
|
14938
15243
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
14939
15244
|
addonId: string(),
|
|
14940
|
-
configSchema: ConfigSchemaPassthrough,
|
|
15245
|
+
configSchema: ConfigSchemaPassthrough$1,
|
|
14941
15246
|
supportsDiscovery: boolean(),
|
|
14942
15247
|
caps: TargetKindCapsSchema
|
|
14943
15248
|
});
|
|
@@ -14990,6 +15295,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
14990
15295
|
enabled: boolean()
|
|
14991
15296
|
}), _void(), { kind: "mutation" });
|
|
14992
15297
|
/**
|
|
15298
|
+
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
15299
|
+
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
15300
|
+
* caps stay wire-compatible without a circular cap→cap import.
|
|
15301
|
+
*
|
|
15302
|
+
* Errors are a discriminated-union RESULT, never thrown: the shape survives
|
|
15303
|
+
* every transport tier structurally, and failed calls still write usage rows.
|
|
15304
|
+
* Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
|
|
15305
|
+
*/
|
|
15306
|
+
var LlmUsageSchema = object({
|
|
15307
|
+
inputTokens: number(),
|
|
15308
|
+
outputTokens: number()
|
|
15309
|
+
});
|
|
15310
|
+
var LlmErrorCodeSchema = _enum([
|
|
15311
|
+
"timeout",
|
|
15312
|
+
"rate-limited",
|
|
15313
|
+
"auth",
|
|
15314
|
+
"refusal",
|
|
15315
|
+
"bad-request",
|
|
15316
|
+
"unavailable",
|
|
15317
|
+
"no-profile",
|
|
15318
|
+
"budget-exceeded",
|
|
15319
|
+
"adapter-error"
|
|
15320
|
+
]);
|
|
15321
|
+
var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
|
|
15322
|
+
ok: literal(true),
|
|
15323
|
+
text: string(),
|
|
15324
|
+
model: string(),
|
|
15325
|
+
usage: LlmUsageSchema,
|
|
15326
|
+
truncated: boolean(),
|
|
15327
|
+
latencyMs: number()
|
|
15328
|
+
}), object({
|
|
15329
|
+
ok: literal(false),
|
|
15330
|
+
code: LlmErrorCodeSchema,
|
|
15331
|
+
message: string(),
|
|
15332
|
+
retryAfterMs: number().optional()
|
|
15333
|
+
})]);
|
|
15334
|
+
/**
|
|
15335
|
+
* `Uint8Array` is the sanctioned binary convention — superjson + the UDS
|
|
15336
|
+
* MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
|
|
15337
|
+
* notification-output.cap.ts:27-31 precedents).
|
|
15338
|
+
*/
|
|
15339
|
+
var LlmImageSchema = object({
|
|
15340
|
+
bytes: _instanceof(Uint8Array),
|
|
15341
|
+
mimeType: string()
|
|
15342
|
+
});
|
|
15343
|
+
var LlmGenerateBaseInputSchema = object({
|
|
15344
|
+
/** Collection routing (the notification-output posture). */
|
|
15345
|
+
addonId: string().optional(),
|
|
15346
|
+
/** Explicit profile; else the resolution chain (spec §3). */
|
|
15347
|
+
profileId: string().optional(),
|
|
15348
|
+
/** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
|
|
15349
|
+
consumer: string(),
|
|
15350
|
+
system: string().optional(),
|
|
15351
|
+
/** v1: single-turn. `messages[]` is a v2 additive field. */
|
|
15352
|
+
prompt: string(),
|
|
15353
|
+
/** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
|
|
15354
|
+
jsonSchema: record(string(), unknown()).optional(),
|
|
15355
|
+
/** Per-call override of the profile default. */
|
|
15356
|
+
maxTokens: number().int().positive().optional(),
|
|
15357
|
+
temperature: number().optional()
|
|
15358
|
+
});
|
|
15359
|
+
/**
|
|
15360
|
+
* `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
|
|
15361
|
+
* on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
|
|
15362
|
+
* a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
|
|
15363
|
+
* cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
|
|
15364
|
+
* this only through the `llm` cap's methods.
|
|
15365
|
+
*
|
|
15366
|
+
* One running llama-server child per node in v1 (models are RAM-heavy).
|
|
15367
|
+
* Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
|
|
15368
|
+
* watchdog — operator decision #3).
|
|
15369
|
+
*/
|
|
15370
|
+
var ManagedModelRefSchema = discriminatedUnion("kind", [
|
|
15371
|
+
object({
|
|
15372
|
+
kind: literal("catalog"),
|
|
15373
|
+
catalogId: string()
|
|
15374
|
+
}),
|
|
15375
|
+
object({
|
|
15376
|
+
kind: literal("url"),
|
|
15377
|
+
url: string(),
|
|
15378
|
+
sha256: string().optional()
|
|
15379
|
+
}),
|
|
15380
|
+
object({
|
|
15381
|
+
kind: literal("path"),
|
|
15382
|
+
path: string()
|
|
15383
|
+
})
|
|
15384
|
+
]);
|
|
15385
|
+
var ManagedRuntimeConfigSchema = object({
|
|
15386
|
+
/** WHERE the runtime lives — hub or any agent. */
|
|
15387
|
+
nodeId: string(),
|
|
15388
|
+
/** Closed for v1; 'ollama' is a v2 candidate. */
|
|
15389
|
+
engine: _enum(["llama-cpp"]),
|
|
15390
|
+
model: ManagedModelRefSchema,
|
|
15391
|
+
contextSize: number().int().default(4096),
|
|
15392
|
+
/** 0 = CPU-only. */
|
|
15393
|
+
gpuLayers: number().int().default(0),
|
|
15394
|
+
/** Default: cpus-2, clamped ≥1 (resolved node-side). */
|
|
15395
|
+
threads: number().int().optional(),
|
|
15396
|
+
/** Concurrent slots. */
|
|
15397
|
+
parallel: number().int().default(1),
|
|
15398
|
+
/** Else lazy: first generate boots it. */
|
|
15399
|
+
autoStart: boolean().default(false),
|
|
15400
|
+
/** 0 = never; frees RAM after quiet periods. */
|
|
15401
|
+
idleStopMinutes: number().int().default(30)
|
|
15402
|
+
});
|
|
15403
|
+
var LlmRuntimeStatusSchema = object({
|
|
15404
|
+
/** Status is ALWAYS node-qualified. */
|
|
15405
|
+
nodeId: string(),
|
|
15406
|
+
state: _enum([
|
|
15407
|
+
"stopped",
|
|
15408
|
+
"downloading",
|
|
15409
|
+
"starting",
|
|
15410
|
+
"ready",
|
|
15411
|
+
"crashed",
|
|
15412
|
+
"failed"
|
|
15413
|
+
]),
|
|
15414
|
+
pid: number().optional(),
|
|
15415
|
+
port: number().optional(),
|
|
15416
|
+
modelPath: string().optional(),
|
|
15417
|
+
modelId: string().optional(),
|
|
15418
|
+
downloadProgress: number().min(0).max(1).optional(),
|
|
15419
|
+
lastError: string().optional(),
|
|
15420
|
+
crashesInWindow: number(),
|
|
15421
|
+
/** Child RSS (sampled best-effort). */
|
|
15422
|
+
memoryBytes: number().optional(),
|
|
15423
|
+
vramBytes: number().optional()
|
|
15424
|
+
});
|
|
15425
|
+
var LlmNodeModelSchema = object({
|
|
15426
|
+
file: string(),
|
|
15427
|
+
sizeBytes: number(),
|
|
15428
|
+
catalogId: string().optional(),
|
|
15429
|
+
installedAt: number().optional()
|
|
15430
|
+
});
|
|
15431
|
+
var LlmRuntimeDiskUsageSchema = object({
|
|
15432
|
+
nodeId: string(),
|
|
15433
|
+
modelsBytes: number(),
|
|
15434
|
+
freeBytes: number().optional()
|
|
15435
|
+
});
|
|
15436
|
+
method(LlmGenerateBaseInputSchema.extend({
|
|
15437
|
+
images: array(LlmImageSchema).optional(),
|
|
15438
|
+
runtime: ManagedRuntimeConfigSchema,
|
|
15439
|
+
/** The managed profile's timeout, threaded by the hub provider. */
|
|
15440
|
+
timeoutMs: number().int().positive().optional()
|
|
15441
|
+
}), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
15442
|
+
kind: "mutation",
|
|
15443
|
+
auth: "admin"
|
|
15444
|
+
}), method(object({}), _void(), {
|
|
15445
|
+
kind: "mutation",
|
|
15446
|
+
auth: "admin"
|
|
15447
|
+
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
15448
|
+
kind: "mutation",
|
|
15449
|
+
auth: "admin"
|
|
15450
|
+
}), method(object({ file: string() }), _void(), {
|
|
15451
|
+
kind: "mutation",
|
|
15452
|
+
auth: "admin"
|
|
15453
|
+
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
15454
|
+
/**
|
|
15455
|
+
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
15456
|
+
* methods concat-fan across providers; single-row methods route to ONE
|
|
15457
|
+
* provider by the `addonId` in the call input (the notification-output
|
|
15458
|
+
* posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
|
|
15459
|
+
* (hub-placed); the cap stays open for future providers.
|
|
15460
|
+
*
|
|
15461
|
+
* Profiles are ROWS (data), not addons: one row = one usable model endpoint.
|
|
15462
|
+
* `apiKey` is a password field — providers REDACT it on read and merge on
|
|
15463
|
+
* write; a stored key NEVER round-trips to a client.
|
|
15464
|
+
*/
|
|
15465
|
+
var LlmProfileKindSchema = _enum([
|
|
15466
|
+
"openai-compatible",
|
|
15467
|
+
"openai",
|
|
15468
|
+
"anthropic",
|
|
15469
|
+
"google",
|
|
15470
|
+
"managed-local"
|
|
15471
|
+
]);
|
|
15472
|
+
var LlmProfileSchema = object({
|
|
15473
|
+
id: string(),
|
|
15474
|
+
name: string(),
|
|
15475
|
+
kind: LlmProfileKindSchema,
|
|
15476
|
+
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
15477
|
+
addonId: string(),
|
|
15478
|
+
enabled: boolean(),
|
|
15479
|
+
/** Vendor model id, or the managed runtime's loaded model. */
|
|
15480
|
+
model: string(),
|
|
15481
|
+
/** Required for openai-compatible; override for cloud kinds. */
|
|
15482
|
+
baseUrl: string().optional(),
|
|
15483
|
+
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
15484
|
+
apiKey: string().optional(),
|
|
15485
|
+
supportsVision: boolean(),
|
|
15486
|
+
temperature: number().min(0).max(2).optional(),
|
|
15487
|
+
maxTokens: number().int().positive().optional(),
|
|
15488
|
+
timeoutMs: number().int().positive().default(6e4),
|
|
15489
|
+
extraHeaders: record(string(), string()).optional(),
|
|
15490
|
+
/** kind === 'managed-local' only (spec §4). */
|
|
15491
|
+
runtime: ManagedRuntimeConfigSchema.optional()
|
|
15492
|
+
});
|
|
15493
|
+
/** ConfigUISchema tree passed through untyped on the wire (the
|
|
15494
|
+
* notification-output `ConfigSchemaPassthrough` precedent at
|
|
15495
|
+
* notification-output.cap.ts:151); the exported TS type re-tightens it. */
|
|
15496
|
+
var ConfigSchemaPassthrough = unknown();
|
|
15497
|
+
var LlmProfileKindDescriptorSchema = object({
|
|
15498
|
+
kind: LlmProfileKindSchema,
|
|
15499
|
+
label: string(),
|
|
15500
|
+
icon: string(),
|
|
15501
|
+
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
15502
|
+
addonId: string(),
|
|
15503
|
+
configSchema: ConfigSchemaPassthrough
|
|
15504
|
+
});
|
|
15505
|
+
var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
|
|
15506
|
+
var LlmDefaultSchema = object({
|
|
15507
|
+
selector: LlmDefaultSelectorSchema,
|
|
15508
|
+
profileId: string()
|
|
15509
|
+
});
|
|
15510
|
+
/** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
|
|
15511
|
+
var LlmUsageRollupSchema = object({
|
|
15512
|
+
day: string(),
|
|
15513
|
+
consumer: string(),
|
|
15514
|
+
profileId: string(),
|
|
15515
|
+
calls: number(),
|
|
15516
|
+
okCalls: number(),
|
|
15517
|
+
errorCalls: number(),
|
|
15518
|
+
inputTokens: number(),
|
|
15519
|
+
outputTokens: number(),
|
|
15520
|
+
avgLatencyMs: number()
|
|
15521
|
+
});
|
|
15522
|
+
/** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
|
|
15523
|
+
var ManagedModelCatalogEntrySchema = object({
|
|
15524
|
+
id: string(),
|
|
15525
|
+
label: string(),
|
|
15526
|
+
family: string(),
|
|
15527
|
+
purpose: _enum(["text", "vision"]),
|
|
15528
|
+
url: string(),
|
|
15529
|
+
sha256: string(),
|
|
15530
|
+
sizeBytes: number(),
|
|
15531
|
+
quantization: string(),
|
|
15532
|
+
/** Load-time guidance shown in the picker. */
|
|
15533
|
+
minRamBytes: number(),
|
|
15534
|
+
contextSizeDefault: number().int(),
|
|
15535
|
+
/** Vision models: companion projector file. */
|
|
15536
|
+
mmprojUrl: string().optional()
|
|
15537
|
+
});
|
|
15538
|
+
var LlmRuntimeNodeSchema = object({
|
|
15539
|
+
nodeId: string(),
|
|
15540
|
+
reachable: boolean(),
|
|
15541
|
+
status: LlmRuntimeStatusSchema.optional(),
|
|
15542
|
+
disk: LlmRuntimeDiskUsageSchema.optional(),
|
|
15543
|
+
error: string().optional()
|
|
15544
|
+
});
|
|
15545
|
+
var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
|
|
15546
|
+
var ProfileRefInputSchema = object({
|
|
15547
|
+
addonId: string(),
|
|
15548
|
+
profileId: string()
|
|
15549
|
+
});
|
|
15550
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
15551
|
+
kind: "mutation",
|
|
15552
|
+
auth: "admin"
|
|
15553
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15554
|
+
kind: "mutation",
|
|
15555
|
+
auth: "admin"
|
|
15556
|
+
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
15557
|
+
kind: "mutation",
|
|
15558
|
+
auth: "admin"
|
|
15559
|
+
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
15560
|
+
selector: LlmDefaultSelectorSchema,
|
|
15561
|
+
profileId: string().nullable()
|
|
15562
|
+
}), _void(), {
|
|
15563
|
+
kind: "mutation",
|
|
15564
|
+
auth: "admin"
|
|
15565
|
+
}), method(object({
|
|
15566
|
+
since: number().optional(),
|
|
15567
|
+
until: number().optional(),
|
|
15568
|
+
consumer: string().optional(),
|
|
15569
|
+
profileId: string().optional()
|
|
15570
|
+
}), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
|
|
15571
|
+
nodeId: string(),
|
|
15572
|
+
model: ManagedModelRefSchema
|
|
15573
|
+
}), _void(), {
|
|
15574
|
+
kind: "mutation",
|
|
15575
|
+
auth: "admin"
|
|
15576
|
+
}), method(object({
|
|
15577
|
+
nodeId: string(),
|
|
15578
|
+
file: string()
|
|
15579
|
+
}), _void(), {
|
|
15580
|
+
kind: "mutation",
|
|
15581
|
+
auth: "admin"
|
|
15582
|
+
}), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
|
|
15583
|
+
kind: "mutation",
|
|
15584
|
+
auth: "admin"
|
|
15585
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15586
|
+
kind: "mutation",
|
|
15587
|
+
auth: "admin"
|
|
15588
|
+
});
|
|
15589
|
+
/**
|
|
14993
15590
|
* Zod schemas for persisted record types.
|
|
14994
15591
|
*
|
|
14995
15592
|
* These schemas serve as the single source of truth for types that are
|
|
@@ -15191,6 +15788,22 @@ var TrackSnapshotSchema = object({
|
|
|
15191
15788
|
/** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
|
|
15192
15789
|
mediaKey: string()
|
|
15193
15790
|
});
|
|
15791
|
+
/**
|
|
15792
|
+
* One audio-classification label heard on the track's camera while the
|
|
15793
|
+
* track was alive, aggregated per label. An "episode" is one persisted
|
|
15794
|
+
* audio event (the confident-classification path: score ≥ the device's
|
|
15795
|
+
* `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
|
|
15796
|
+
* one 32 ms inference chunk, so counts stay human-scaled.
|
|
15797
|
+
*/
|
|
15798
|
+
var TrackAudioLabelSchema = object({
|
|
15799
|
+
label: string(),
|
|
15800
|
+
/** Highest classification score observed across the label's episodes. */
|
|
15801
|
+
peakScore: number(),
|
|
15802
|
+
/** Number of coalesced audio-event episodes carrying this label. */
|
|
15803
|
+
count: number(),
|
|
15804
|
+
firstAt: number(),
|
|
15805
|
+
lastAt: number()
|
|
15806
|
+
});
|
|
15194
15807
|
var TrackSchema = object({
|
|
15195
15808
|
trackId: string(),
|
|
15196
15809
|
deviceId: number(),
|
|
@@ -15205,6 +15818,10 @@ var TrackSchema = object({
|
|
|
15205
15818
|
snapshots: array(TrackSnapshotSchema).readonly(),
|
|
15206
15819
|
/** Deduplicated zones the track has entered at least once. */
|
|
15207
15820
|
zonesVisited: array(string()).readonly(),
|
|
15821
|
+
/** Deduplicated set of detector classes observed for this track over its
|
|
15822
|
+
* life (a track may be reclassified, e.g. person→vehicle). Absent on
|
|
15823
|
+
* legacy rows written before class accumulation shipped. */
|
|
15824
|
+
classes: array(string()).readonly().optional(),
|
|
15208
15825
|
/** Cumulative normalized distance travelled (0..1 units = full frame width). */
|
|
15209
15826
|
totalDistance: number(),
|
|
15210
15827
|
state: TrackStateSchema,
|
|
@@ -15218,7 +15835,11 @@ var TrackSchema = object({
|
|
|
15218
15835
|
bestEventId: string().optional(),
|
|
15219
15836
|
/** Tag of the importance sub-signal that dominated the score
|
|
15220
15837
|
* (identity|dwell|proximity|class|confidence|travel|zone). */
|
|
15221
|
-
importanceReason: string().optional()
|
|
15838
|
+
importanceReason: string().optional(),
|
|
15839
|
+
/** Audio-classification labels heard on the camera during the track's
|
|
15840
|
+
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
15841
|
+
* Absent on legacy rows / tracks with no confident audio. */
|
|
15842
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional()
|
|
15222
15843
|
});
|
|
15223
15844
|
var BaseEventFields = {
|
|
15224
15845
|
id: string(),
|
|
@@ -15366,7 +15987,7 @@ var KeyEventSchema = object({
|
|
|
15366
15987
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
15367
15988
|
windowMs: number().optional()
|
|
15368
15989
|
});
|
|
15369
|
-
|
|
15990
|
+
object({
|
|
15370
15991
|
trackId: string(),
|
|
15371
15992
|
className: string(),
|
|
15372
15993
|
confidence: number(),
|
|
@@ -15374,6 +15995,23 @@ var TrackedDetectionSchema = object({
|
|
|
15374
15995
|
zones: array(string()).readonly(),
|
|
15375
15996
|
state: TrackStateSchema
|
|
15376
15997
|
});
|
|
15998
|
+
var OverlayDetectionSchema = looseObject({
|
|
15999
|
+
id: string(),
|
|
16000
|
+
kind: _enum(["first-level", "detail"]),
|
|
16001
|
+
macroClass: string(),
|
|
16002
|
+
score: number(),
|
|
16003
|
+
bbox: object({
|
|
16004
|
+
x: number(),
|
|
16005
|
+
y: number(),
|
|
16006
|
+
width: number(),
|
|
16007
|
+
height: number()
|
|
16008
|
+
}),
|
|
16009
|
+
labels: array(looseObject({
|
|
16010
|
+
label: string(),
|
|
16011
|
+
score: number()
|
|
16012
|
+
})).readonly(),
|
|
16013
|
+
parentId: string().optional()
|
|
16014
|
+
});
|
|
15377
16015
|
var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
|
|
15378
16016
|
var SearchObjectEventsInput = object({
|
|
15379
16017
|
text: string(),
|
|
@@ -15384,6 +16022,20 @@ var SearchObjectEventsInput = object({
|
|
|
15384
16022
|
limit: number().default(50),
|
|
15385
16023
|
minScore: number().min(0).max(1).default(.2)
|
|
15386
16024
|
});
|
|
16025
|
+
var TrackCascadeCountsSchema = object({
|
|
16026
|
+
/** Persisted track roots deleted (authoritative). */
|
|
16027
|
+
tracks: number().int(),
|
|
16028
|
+
/** Object events removed with their tracks (best-effort; see note above). */
|
|
16029
|
+
events: number().int(),
|
|
16030
|
+
/** Track/face/plate-owned media removed (best-effort). Never identity media. */
|
|
16031
|
+
media: number().int(),
|
|
16032
|
+
/** Unassigned (non-enrolled) face reads removed (best-effort). */
|
|
16033
|
+
faces: number().int(),
|
|
16034
|
+
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
16035
|
+
plates: number().int(),
|
|
16036
|
+
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16037
|
+
embeddings: number().int()
|
|
16038
|
+
});
|
|
15387
16039
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
15388
16040
|
deviceId: number(),
|
|
15389
16041
|
trackId: string()
|
|
@@ -15416,15 +16068,33 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15416
16068
|
kind: "mutation",
|
|
15417
16069
|
auth: "admin"
|
|
15418
16070
|
}), method(object({
|
|
15419
|
-
eventId: string(),
|
|
15420
|
-
kind: MediaFileKindEnum.optional()
|
|
15421
|
-
}), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), object({
|
|
15422
16071
|
deviceId: number(),
|
|
15423
|
-
|
|
15424
|
-
|
|
15425
|
-
|
|
15426
|
-
|
|
15427
|
-
}), object({
|
|
16072
|
+
cutoffMs: number()
|
|
16073
|
+
}), TrackCascadeCountsSchema, {
|
|
16074
|
+
kind: "mutation",
|
|
16075
|
+
auth: "admin"
|
|
16076
|
+
}), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
|
|
16077
|
+
kind: "mutation",
|
|
16078
|
+
auth: "admin"
|
|
16079
|
+
}), method(object({
|
|
16080
|
+
deviceId: number(),
|
|
16081
|
+
trackIds: array(string()).min(1)
|
|
16082
|
+
}), object({
|
|
16083
|
+
deleted: number().int(),
|
|
16084
|
+
failed: array(string()).readonly()
|
|
16085
|
+
}), {
|
|
16086
|
+
kind: "mutation",
|
|
16087
|
+
auth: "admin"
|
|
16088
|
+
}), method(object({
|
|
16089
|
+
eventId: string(),
|
|
16090
|
+
kind: MediaFileKindEnum.optional()
|
|
16091
|
+
}), array(MediaFileSchema).readonly()), method(object({ trackId: string() }), array(MediaFileSchema).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), object({
|
|
16092
|
+
deviceId: number(),
|
|
16093
|
+
timestamp: number(),
|
|
16094
|
+
frameWidth: number(),
|
|
16095
|
+
frameHeight: number(),
|
|
16096
|
+
detections: array(OverlayDetectionSchema).readonly()
|
|
16097
|
+
}), object({
|
|
15428
16098
|
deviceId: number(),
|
|
15429
16099
|
trackId: string(),
|
|
15430
16100
|
className: string()
|
|
@@ -16739,7 +17409,15 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
16739
17409
|
*/
|
|
16740
17410
|
disableIpv6: boolean().optional(),
|
|
16741
17411
|
/** Subscriber attribution. See `createSession` for the contract. */
|
|
16742
|
-
consumerAttribution: BrokerConsumerAttributionSchema.optional()
|
|
17412
|
+
consumerAttribution: BrokerConsumerAttributionSchema.optional(),
|
|
17413
|
+
/**
|
|
17414
|
+
* Client-side stream hints (viewport, downlink) — same contract as
|
|
17415
|
+
* `createSession.hints`. Client-offer viewers (the RN viewer's
|
|
17416
|
+
* `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
|
|
17417
|
+
* field their hints were silently stripped by the schema and the
|
|
17418
|
+
* adaptive ladder started blind on the client's display size.
|
|
17419
|
+
*/
|
|
17420
|
+
hints: webrtcClientHintsSchema.optional()
|
|
16743
17421
|
}), object({
|
|
16744
17422
|
sessionId: string(),
|
|
16745
17423
|
sdpAnswer: string()
|
|
@@ -18192,6 +18870,24 @@ DeviceType.Camera, method(object({
|
|
|
18192
18870
|
deviceId: number(),
|
|
18193
18871
|
status: OsdStatusSchema
|
|
18194
18872
|
});
|
|
18873
|
+
var VehicleSchema = object({
|
|
18874
|
+
id: string(),
|
|
18875
|
+
name: string(),
|
|
18876
|
+
sampleCount: number().int().nonnegative(),
|
|
18877
|
+
coverMediaKey: string().optional(),
|
|
18878
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
|
|
18879
|
+
coverBase64: string().optional()
|
|
18880
|
+
});
|
|
18881
|
+
var VehicleSampleInfoSchema = object({
|
|
18882
|
+
id: string(),
|
|
18883
|
+
/** The plate text this sample enrolled (self-labeling — no embedding). */
|
|
18884
|
+
text: string(),
|
|
18885
|
+
/** OCR confidence of the enrolled read (0..1). */
|
|
18886
|
+
score: number(),
|
|
18887
|
+
addedAt: number().int(),
|
|
18888
|
+
deviceId: number().int().optional(),
|
|
18889
|
+
base64: string().optional()
|
|
18890
|
+
});
|
|
18195
18891
|
var PlateInfoSchema = object({
|
|
18196
18892
|
plateId: string(),
|
|
18197
18893
|
deviceId: number().int(),
|
|
@@ -18203,6 +18899,16 @@ var PlateInfoSchema = object({
|
|
|
18203
18899
|
score: number(),
|
|
18204
18900
|
/** True when the text was manually corrected (exempt from retention). */
|
|
18205
18901
|
corrected: boolean(),
|
|
18902
|
+
/** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
|
|
18903
|
+
recognizedVehicleId: string().optional(),
|
|
18904
|
+
/** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
|
|
18905
|
+
vehicleName: string().optional(),
|
|
18906
|
+
/** True once the read was assigned to a vehicle (enrolled as a sample). */
|
|
18907
|
+
assigned: boolean(),
|
|
18908
|
+
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
18909
|
+
plateBbox: BoundingBoxSchema.optional(),
|
|
18910
|
+
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
18911
|
+
keyFrameMediaKey: string().optional(),
|
|
18206
18912
|
base64: string().optional()
|
|
18207
18913
|
});
|
|
18208
18914
|
var MediaFileLiteSchema = object({
|
|
@@ -18242,6 +18948,48 @@ method(object({
|
|
|
18242
18948
|
}), method(object({ plateId: string() }), _void(), {
|
|
18243
18949
|
kind: "mutation",
|
|
18244
18950
|
auth: "admin"
|
|
18951
|
+
}), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
18952
|
+
kind: "mutation",
|
|
18953
|
+
auth: "admin"
|
|
18954
|
+
}), method(object({
|
|
18955
|
+
id: string(),
|
|
18956
|
+
name: string().min(1)
|
|
18957
|
+
}), _void(), {
|
|
18958
|
+
kind: "mutation",
|
|
18959
|
+
auth: "admin"
|
|
18960
|
+
}), method(object({ id: string() }), _void(), {
|
|
18961
|
+
kind: "mutation",
|
|
18962
|
+
auth: "admin"
|
|
18963
|
+
}), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
|
|
18964
|
+
vehicleId: string(),
|
|
18965
|
+
sampleId: string()
|
|
18966
|
+
}), _void(), {
|
|
18967
|
+
kind: "mutation",
|
|
18968
|
+
auth: "admin"
|
|
18969
|
+
}), method(object({
|
|
18970
|
+
plateId: string(),
|
|
18971
|
+
vehicleId: string()
|
|
18972
|
+
}), _void(), {
|
|
18973
|
+
kind: "mutation",
|
|
18974
|
+
auth: "admin"
|
|
18975
|
+
}), method(object({ plateId: string() }), _void(), {
|
|
18976
|
+
kind: "mutation",
|
|
18977
|
+
auth: "admin"
|
|
18978
|
+
}), method(object({
|
|
18979
|
+
plateIds: array(string()).min(1),
|
|
18980
|
+
vehicleId: string()
|
|
18981
|
+
}), object({
|
|
18982
|
+
assigned: number().int(),
|
|
18983
|
+
failed: array(string()).readonly()
|
|
18984
|
+
}), {
|
|
18985
|
+
kind: "mutation",
|
|
18986
|
+
auth: "admin"
|
|
18987
|
+
}), method(object({ plateIds: array(string()).min(1) }), object({
|
|
18988
|
+
unassigned: number().int(),
|
|
18989
|
+
failed: array(string()).readonly()
|
|
18990
|
+
}), {
|
|
18991
|
+
kind: "mutation",
|
|
18992
|
+
auth: "admin"
|
|
18245
18993
|
});
|
|
18246
18994
|
var ModelFormatSchema = _enum(MODEL_FORMATS);
|
|
18247
18995
|
var HwAccelBackendInputSchema = _enum([
|
|
@@ -18320,6 +19068,10 @@ var GpuInfoSchema = object({
|
|
|
18320
19068
|
memoryMB: number().optional()
|
|
18321
19069
|
});
|
|
18322
19070
|
var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
|
|
19071
|
+
var CoralInfoSchema = object({
|
|
19072
|
+
type: literal("coral-edgetpu"),
|
|
19073
|
+
bus: string().optional()
|
|
19074
|
+
});
|
|
18323
19075
|
var HardwareInfoSchema = object({
|
|
18324
19076
|
platform: HardwarePlatformSchema,
|
|
18325
19077
|
arch: HardwareArchSchema,
|
|
@@ -18328,7 +19080,8 @@ var HardwareInfoSchema = object({
|
|
|
18328
19080
|
totalRAM_MB: number(),
|
|
18329
19081
|
availableRAM_MB: number(),
|
|
18330
19082
|
gpu: GpuInfoSchema.nullable(),
|
|
18331
|
-
npu: NpuInfoSchema.nullable()
|
|
19083
|
+
npu: NpuInfoSchema.nullable(),
|
|
19084
|
+
coral: CoralInfoSchema.nullable().optional()
|
|
18332
19085
|
});
|
|
18333
19086
|
var PlatformScoreSchema = object({
|
|
18334
19087
|
runtime: _enum(["node", "python"]),
|
|
@@ -20787,6 +21540,168 @@ Object.freeze({
|
|
|
20787
21540
|
addonId: null,
|
|
20788
21541
|
access: "create"
|
|
20789
21542
|
},
|
|
21543
|
+
"llm.deleteModel": {
|
|
21544
|
+
capName: "llm",
|
|
21545
|
+
capScope: "system",
|
|
21546
|
+
addonId: null,
|
|
21547
|
+
access: "delete"
|
|
21548
|
+
},
|
|
21549
|
+
"llm.deleteProfile": {
|
|
21550
|
+
capName: "llm",
|
|
21551
|
+
capScope: "system",
|
|
21552
|
+
addonId: null,
|
|
21553
|
+
access: "delete"
|
|
21554
|
+
},
|
|
21555
|
+
"llm.generate": {
|
|
21556
|
+
capName: "llm",
|
|
21557
|
+
capScope: "system",
|
|
21558
|
+
addonId: null,
|
|
21559
|
+
access: "create"
|
|
21560
|
+
},
|
|
21561
|
+
"llm.generateVision": {
|
|
21562
|
+
capName: "llm",
|
|
21563
|
+
capScope: "system",
|
|
21564
|
+
addonId: null,
|
|
21565
|
+
access: "create"
|
|
21566
|
+
},
|
|
21567
|
+
"llm.getDefaults": {
|
|
21568
|
+
capName: "llm",
|
|
21569
|
+
capScope: "system",
|
|
21570
|
+
addonId: null,
|
|
21571
|
+
access: "view"
|
|
21572
|
+
},
|
|
21573
|
+
"llm.getRuntimeStatus": {
|
|
21574
|
+
capName: "llm",
|
|
21575
|
+
capScope: "system",
|
|
21576
|
+
addonId: null,
|
|
21577
|
+
access: "view"
|
|
21578
|
+
},
|
|
21579
|
+
"llm.getUsage": {
|
|
21580
|
+
capName: "llm",
|
|
21581
|
+
capScope: "system",
|
|
21582
|
+
addonId: null,
|
|
21583
|
+
access: "view"
|
|
21584
|
+
},
|
|
21585
|
+
"llm.installModel": {
|
|
21586
|
+
capName: "llm",
|
|
21587
|
+
capScope: "system",
|
|
21588
|
+
addonId: null,
|
|
21589
|
+
access: "create"
|
|
21590
|
+
},
|
|
21591
|
+
"llm.listModelCatalog": {
|
|
21592
|
+
capName: "llm",
|
|
21593
|
+
capScope: "system",
|
|
21594
|
+
addonId: null,
|
|
21595
|
+
access: "view"
|
|
21596
|
+
},
|
|
21597
|
+
"llm.listModels": {
|
|
21598
|
+
capName: "llm",
|
|
21599
|
+
capScope: "system",
|
|
21600
|
+
addonId: null,
|
|
21601
|
+
access: "view"
|
|
21602
|
+
},
|
|
21603
|
+
"llm.listNodeModels": {
|
|
21604
|
+
capName: "llm",
|
|
21605
|
+
capScope: "system",
|
|
21606
|
+
addonId: null,
|
|
21607
|
+
access: "view"
|
|
21608
|
+
},
|
|
21609
|
+
"llm.listProfileKinds": {
|
|
21610
|
+
capName: "llm",
|
|
21611
|
+
capScope: "system",
|
|
21612
|
+
addonId: null,
|
|
21613
|
+
access: "view"
|
|
21614
|
+
},
|
|
21615
|
+
"llm.listProfiles": {
|
|
21616
|
+
capName: "llm",
|
|
21617
|
+
capScope: "system",
|
|
21618
|
+
addonId: null,
|
|
21619
|
+
access: "view"
|
|
21620
|
+
},
|
|
21621
|
+
"llm.listRuntimeNodes": {
|
|
21622
|
+
capName: "llm",
|
|
21623
|
+
capScope: "system",
|
|
21624
|
+
addonId: null,
|
|
21625
|
+
access: "view"
|
|
21626
|
+
},
|
|
21627
|
+
"llm.setDefault": {
|
|
21628
|
+
capName: "llm",
|
|
21629
|
+
capScope: "system",
|
|
21630
|
+
addonId: null,
|
|
21631
|
+
access: "create"
|
|
21632
|
+
},
|
|
21633
|
+
"llm.startRuntime": {
|
|
21634
|
+
capName: "llm",
|
|
21635
|
+
capScope: "system",
|
|
21636
|
+
addonId: null,
|
|
21637
|
+
access: "create"
|
|
21638
|
+
},
|
|
21639
|
+
"llm.stopRuntime": {
|
|
21640
|
+
capName: "llm",
|
|
21641
|
+
capScope: "system",
|
|
21642
|
+
addonId: null,
|
|
21643
|
+
access: "create"
|
|
21644
|
+
},
|
|
21645
|
+
"llm.testProfile": {
|
|
21646
|
+
capName: "llm",
|
|
21647
|
+
capScope: "system",
|
|
21648
|
+
addonId: null,
|
|
21649
|
+
access: "create"
|
|
21650
|
+
},
|
|
21651
|
+
"llm.upsertProfile": {
|
|
21652
|
+
capName: "llm",
|
|
21653
|
+
capScope: "system",
|
|
21654
|
+
addonId: null,
|
|
21655
|
+
access: "create"
|
|
21656
|
+
},
|
|
21657
|
+
"llmRuntime.complete": {
|
|
21658
|
+
capName: "llm-runtime",
|
|
21659
|
+
capScope: "system",
|
|
21660
|
+
addonId: null,
|
|
21661
|
+
access: "create"
|
|
21662
|
+
},
|
|
21663
|
+
"llmRuntime.deleteModel": {
|
|
21664
|
+
capName: "llm-runtime",
|
|
21665
|
+
capScope: "system",
|
|
21666
|
+
addonId: null,
|
|
21667
|
+
access: "delete"
|
|
21668
|
+
},
|
|
21669
|
+
"llmRuntime.ensureStarted": {
|
|
21670
|
+
capName: "llm-runtime",
|
|
21671
|
+
capScope: "system",
|
|
21672
|
+
addonId: null,
|
|
21673
|
+
access: "create"
|
|
21674
|
+
},
|
|
21675
|
+
"llmRuntime.getDiskUsage": {
|
|
21676
|
+
capName: "llm-runtime",
|
|
21677
|
+
capScope: "system",
|
|
21678
|
+
addonId: null,
|
|
21679
|
+
access: "view"
|
|
21680
|
+
},
|
|
21681
|
+
"llmRuntime.installModel": {
|
|
21682
|
+
capName: "llm-runtime",
|
|
21683
|
+
capScope: "system",
|
|
21684
|
+
addonId: null,
|
|
21685
|
+
access: "create"
|
|
21686
|
+
},
|
|
21687
|
+
"llmRuntime.listLocalModels": {
|
|
21688
|
+
capName: "llm-runtime",
|
|
21689
|
+
capScope: "system",
|
|
21690
|
+
addonId: null,
|
|
21691
|
+
access: "view"
|
|
21692
|
+
},
|
|
21693
|
+
"llmRuntime.status": {
|
|
21694
|
+
capName: "llm-runtime",
|
|
21695
|
+
capScope: "system",
|
|
21696
|
+
addonId: null,
|
|
21697
|
+
access: "view"
|
|
21698
|
+
},
|
|
21699
|
+
"llmRuntime.stop": {
|
|
21700
|
+
capName: "llm-runtime",
|
|
21701
|
+
capScope: "system",
|
|
21702
|
+
addonId: null,
|
|
21703
|
+
access: "create"
|
|
21704
|
+
},
|
|
20790
21705
|
"localNetwork.getAllowedAddresses": {
|
|
20791
21706
|
capName: "local-network",
|
|
20792
21707
|
capScope: "system",
|
|
@@ -21417,6 +22332,12 @@ Object.freeze({
|
|
|
21417
22332
|
addonId: null,
|
|
21418
22333
|
access: "delete"
|
|
21419
22334
|
},
|
|
22335
|
+
"pipelineAnalytics.deleteTracks": {
|
|
22336
|
+
capName: "pipeline-analytics",
|
|
22337
|
+
capScope: "device",
|
|
22338
|
+
addonId: null,
|
|
22339
|
+
access: "delete"
|
|
22340
|
+
},
|
|
21420
22341
|
"pipelineAnalytics.getActiveTracks": {
|
|
21421
22342
|
capName: "pipeline-analytics",
|
|
21422
22343
|
capScope: "device",
|
|
@@ -21483,12 +22404,24 @@ Object.freeze({
|
|
|
21483
22404
|
addonId: null,
|
|
21484
22405
|
access: "create"
|
|
21485
22406
|
},
|
|
22407
|
+
"pipelineAnalytics.pruneTracksBefore": {
|
|
22408
|
+
capName: "pipeline-analytics",
|
|
22409
|
+
capScope: "device",
|
|
22410
|
+
addonId: null,
|
|
22411
|
+
access: "create"
|
|
22412
|
+
},
|
|
21486
22413
|
"pipelineAnalytics.searchObjectEvents": {
|
|
21487
22414
|
capName: "pipeline-analytics",
|
|
21488
22415
|
capScope: "device",
|
|
21489
22416
|
addonId: null,
|
|
21490
22417
|
access: "view"
|
|
21491
22418
|
},
|
|
22419
|
+
"pipelineAnalytics.wipeAllAnalytics": {
|
|
22420
|
+
capName: "pipeline-analytics",
|
|
22421
|
+
capScope: "device",
|
|
22422
|
+
addonId: null,
|
|
22423
|
+
access: "delete"
|
|
22424
|
+
},
|
|
21492
22425
|
"pipelineExecutor.cacheFrameInPool": {
|
|
21493
22426
|
capName: "pipeline-executor",
|
|
21494
22427
|
capScope: "system",
|
|
@@ -21987,18 +22920,48 @@ Object.freeze({
|
|
|
21987
22920
|
addonId: null,
|
|
21988
22921
|
access: "create"
|
|
21989
22922
|
},
|
|
22923
|
+
"pipelineRunner.runDetailSubtree": {
|
|
22924
|
+
capName: "pipeline-runner",
|
|
22925
|
+
capScope: "system",
|
|
22926
|
+
addonId: null,
|
|
22927
|
+
access: "create"
|
|
22928
|
+
},
|
|
22929
|
+
"plateGallery.assignPlate": {
|
|
22930
|
+
capName: "plate-gallery",
|
|
22931
|
+
capScope: "system",
|
|
22932
|
+
addonId: null,
|
|
22933
|
+
access: "create"
|
|
22934
|
+
},
|
|
22935
|
+
"plateGallery.assignPlates": {
|
|
22936
|
+
capName: "plate-gallery",
|
|
22937
|
+
capScope: "system",
|
|
22938
|
+
addonId: null,
|
|
22939
|
+
access: "create"
|
|
22940
|
+
},
|
|
21990
22941
|
"plateGallery.correctPlateText": {
|
|
21991
22942
|
capName: "plate-gallery",
|
|
21992
22943
|
capScope: "system",
|
|
21993
22944
|
addonId: null,
|
|
21994
22945
|
access: "create"
|
|
21995
22946
|
},
|
|
22947
|
+
"plateGallery.createVehicle": {
|
|
22948
|
+
capName: "plate-gallery",
|
|
22949
|
+
capScope: "system",
|
|
22950
|
+
addonId: null,
|
|
22951
|
+
access: "create"
|
|
22952
|
+
},
|
|
21996
22953
|
"plateGallery.deletePlate": {
|
|
21997
22954
|
capName: "plate-gallery",
|
|
21998
22955
|
capScope: "system",
|
|
21999
22956
|
addonId: null,
|
|
22000
22957
|
access: "delete"
|
|
22001
22958
|
},
|
|
22959
|
+
"plateGallery.deleteVehicle": {
|
|
22960
|
+
capName: "plate-gallery",
|
|
22961
|
+
capScope: "system",
|
|
22962
|
+
addonId: null,
|
|
22963
|
+
access: "delete"
|
|
22964
|
+
},
|
|
22002
22965
|
"plateGallery.getPlateByTrack": {
|
|
22003
22966
|
capName: "plate-gallery",
|
|
22004
22967
|
capScope: "system",
|
|
@@ -22017,6 +22980,30 @@ Object.freeze({
|
|
|
22017
22980
|
addonId: null,
|
|
22018
22981
|
access: "view"
|
|
22019
22982
|
},
|
|
22983
|
+
"plateGallery.listVehicles": {
|
|
22984
|
+
capName: "plate-gallery",
|
|
22985
|
+
capScope: "system",
|
|
22986
|
+
addonId: null,
|
|
22987
|
+
access: "view"
|
|
22988
|
+
},
|
|
22989
|
+
"plateGallery.listVehicleSamples": {
|
|
22990
|
+
capName: "plate-gallery",
|
|
22991
|
+
capScope: "system",
|
|
22992
|
+
addonId: null,
|
|
22993
|
+
access: "view"
|
|
22994
|
+
},
|
|
22995
|
+
"plateGallery.removeVehicleSample": {
|
|
22996
|
+
capName: "plate-gallery",
|
|
22997
|
+
capScope: "system",
|
|
22998
|
+
addonId: null,
|
|
22999
|
+
access: "delete"
|
|
23000
|
+
},
|
|
23001
|
+
"plateGallery.renameVehicle": {
|
|
23002
|
+
capName: "plate-gallery",
|
|
23003
|
+
capScope: "system",
|
|
23004
|
+
addonId: null,
|
|
23005
|
+
access: "create"
|
|
23006
|
+
},
|
|
22020
23007
|
"plateGallery.searchPlates": {
|
|
22021
23008
|
capName: "plate-gallery",
|
|
22022
23009
|
capScope: "system",
|
|
@@ -22029,6 +23016,18 @@ Object.freeze({
|
|
|
22029
23016
|
addonId: null,
|
|
22030
23017
|
access: "view"
|
|
22031
23018
|
},
|
|
23019
|
+
"plateGallery.unassignPlate": {
|
|
23020
|
+
capName: "plate-gallery",
|
|
23021
|
+
capScope: "system",
|
|
23022
|
+
addonId: null,
|
|
23023
|
+
access: "create"
|
|
23024
|
+
},
|
|
23025
|
+
"plateGallery.unassignPlates": {
|
|
23026
|
+
capName: "plate-gallery",
|
|
23027
|
+
capScope: "system",
|
|
23028
|
+
addonId: null,
|
|
23029
|
+
access: "create"
|
|
23030
|
+
},
|
|
22032
23031
|
"platformProbe.getCapabilities": {
|
|
22033
23032
|
capName: "platform-probe",
|
|
22034
23033
|
capScope: "system",
|
|
@@ -22221,6 +23220,48 @@ Object.freeze({
|
|
|
22221
23220
|
addonId: null,
|
|
22222
23221
|
access: "create"
|
|
22223
23222
|
},
|
|
23223
|
+
"sceneMonitor.captureReference": {
|
|
23224
|
+
capName: "scene-monitor",
|
|
23225
|
+
capScope: "device",
|
|
23226
|
+
addonId: null,
|
|
23227
|
+
access: "create"
|
|
23228
|
+
},
|
|
23229
|
+
"sceneMonitor.createScene": {
|
|
23230
|
+
capName: "scene-monitor",
|
|
23231
|
+
capScope: "device",
|
|
23232
|
+
addonId: null,
|
|
23233
|
+
access: "create"
|
|
23234
|
+
},
|
|
23235
|
+
"sceneMonitor.deleteReference": {
|
|
23236
|
+
capName: "scene-monitor",
|
|
23237
|
+
capScope: "device",
|
|
23238
|
+
addonId: null,
|
|
23239
|
+
access: "delete"
|
|
23240
|
+
},
|
|
23241
|
+
"sceneMonitor.deleteScene": {
|
|
23242
|
+
capName: "scene-monitor",
|
|
23243
|
+
capScope: "device",
|
|
23244
|
+
addonId: null,
|
|
23245
|
+
access: "delete"
|
|
23246
|
+
},
|
|
23247
|
+
"sceneMonitor.listScenes": {
|
|
23248
|
+
capName: "scene-monitor",
|
|
23249
|
+
capScope: "device",
|
|
23250
|
+
addonId: null,
|
|
23251
|
+
access: "view"
|
|
23252
|
+
},
|
|
23253
|
+
"sceneMonitor.recheckNow": {
|
|
23254
|
+
capName: "scene-monitor",
|
|
23255
|
+
capScope: "device",
|
|
23256
|
+
addonId: null,
|
|
23257
|
+
access: "create"
|
|
23258
|
+
},
|
|
23259
|
+
"sceneMonitor.updateScene": {
|
|
23260
|
+
capName: "scene-monitor",
|
|
23261
|
+
capScope: "device",
|
|
23262
|
+
addonId: null,
|
|
23263
|
+
access: "create"
|
|
23264
|
+
},
|
|
22224
23265
|
"scriptRunner.run": {
|
|
22225
23266
|
capName: "script-runner",
|
|
22226
23267
|
capScope: "device",
|
|
@@ -23305,6 +24346,7 @@ Object.freeze({
|
|
|
23305
24346
|
Object.freeze({
|
|
23306
24347
|
"broker": "broker",
|
|
23307
24348
|
"device-export": "device-export",
|
|
24349
|
+
"llm": "ai",
|
|
23308
24350
|
"mesh-network": "mesh",
|
|
23309
24351
|
"mqtt-broker": "broker",
|
|
23310
24352
|
"network-access": "ingress",
|