@camstack/addon-model-studio 1.0.22 → 1.0.24
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-COOdMPIf.mjs} +1 -1
- package/dist/{PrivacyMaskSettings-CUB3plKT.mjs → PrivacyMaskSettings-CjUofahv.mjs} +2 -2
- package/dist/_stub.js +55 -26
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-D6bE3D1g.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C0lo-0LK.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-R5WCF0Gp.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-mBy3cfN8.mjs → hostInit-Do3PJRf0.mjs} +3 -3
- package/dist/model-studio.addon.js +1221 -57
- package/dist/model-studio.addon.mjs +1221 -57
- package/dist/{player-overlays-6JCUcHzw.mjs → player-overlays-AOOeo2bB.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{trash-2-CH1_KJWF.mjs → trash-2-CSYyXlO5.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-jmSb26M_.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C1iXLvbC.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-H4AVePnn.mjs
|
|
4665
4673
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4666
4674
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4667
4675
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -4811,6 +4819,9 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
4811
4819
|
EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
|
|
4812
4820
|
EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
|
|
4813
4821
|
EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
|
|
4822
|
+
/** Runner-sampled scrub thumbnail (~1/5 s/camera). Telemetry (D8): a lost
|
|
4823
|
+
* thumb is a scrub gap the recorder's keyframe backfill covers. */
|
|
4824
|
+
EventCategory["RecordingThumbSampled"] = "recording.thumb-sampled";
|
|
4814
4825
|
EventCategory["DetectionEvent"] = "detection.event";
|
|
4815
4826
|
EventCategory["SessionTrackNew"] = "session.track.new";
|
|
4816
4827
|
EventCategory["SessionTrackExpired"] = "session.track.expired";
|
|
@@ -5071,10 +5082,51 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5071
5082
|
EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
|
|
5072
5083
|
EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
|
|
5073
5084
|
EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
|
|
5085
|
+
/**
|
|
5086
|
+
* Unified track-lifecycle event: ONE category carrying `phase:
|
|
5087
|
+
* 'start' | 'update' | 'end'` with a rich, typed
|
|
5088
|
+
* `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
|
|
5089
|
+
* `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
|
|
5090
|
+
* pair — a consumer subscribes once and branches on `phase`.
|
|
5091
|
+
*/
|
|
5092
|
+
EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
|
|
5093
|
+
/**
|
|
5094
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5095
|
+
* (`phase:'start'`). Kept as a soft alias — no known subscribers.
|
|
5096
|
+
*/
|
|
5074
5097
|
EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
|
|
5098
|
+
/**
|
|
5099
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5100
|
+
* (`phase:'end'`). Kept as a soft alias — no known subscribers.
|
|
5101
|
+
*/
|
|
5075
5102
|
EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
|
|
5076
5103
|
EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
|
|
5077
5104
|
EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
|
|
5105
|
+
/**
|
|
5106
|
+
* Fired by `addon-post-analysis` when a parked (stationary) object appears
|
|
5107
|
+
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
5108
|
+
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
5109
|
+
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
5110
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
5111
|
+
*/
|
|
5112
|
+
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
5113
|
+
/**
|
|
5114
|
+
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
5115
|
+
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
5116
|
+
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
5117
|
+
* removed. Telemetry semantics (D8): a lost event only delays a refresh,
|
|
5118
|
+
* never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
|
|
5119
|
+
*/
|
|
5120
|
+
EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
|
|
5121
|
+
/**
|
|
5122
|
+
* Fired by `addon-post-analysis` whenever a gallery plate row changes:
|
|
5123
|
+
* `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
|
|
5124
|
+
* `'assigned'` / `'unassigned'` its vehicle link changed
|
|
5125
|
+
* (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
|
|
5126
|
+
* semantics (D8): a lost event only delays a refresh, never a correctness
|
|
5127
|
+
* issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
|
|
5128
|
+
*/
|
|
5129
|
+
EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
|
|
5078
5130
|
EventCategory["FrigateLiveEvent"] = "frigate.live-event";
|
|
5079
5131
|
EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
|
|
5080
5132
|
/**
|
|
@@ -6903,7 +6955,8 @@ var MODEL_FORMATS = [
|
|
|
6903
6955
|
"coreml",
|
|
6904
6956
|
"openvino",
|
|
6905
6957
|
"tflite",
|
|
6906
|
-
"pt"
|
|
6958
|
+
"pt",
|
|
6959
|
+
"gguf"
|
|
6907
6960
|
];
|
|
6908
6961
|
/**
|
|
6909
6962
|
* Multi-file format payload.
|
|
@@ -6947,7 +7000,8 @@ var ModelFormatsSchema = object({
|
|
|
6947
7000
|
coreml: ModelFormatEntrySchema.optional(),
|
|
6948
7001
|
openvino: ModelFormatEntrySchema.optional(),
|
|
6949
7002
|
tflite: ModelFormatEntrySchema.optional(),
|
|
6950
|
-
pt: ModelFormatEntrySchema.optional()
|
|
7003
|
+
pt: ModelFormatEntrySchema.optional(),
|
|
7004
|
+
gguf: ModelFormatEntrySchema.optional()
|
|
6951
7005
|
});
|
|
6952
7006
|
/**
|
|
6953
7007
|
* Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
|
|
@@ -6988,6 +7042,15 @@ var ModelCatalogEntrySchema = object({
|
|
|
6988
7042
|
width: number(),
|
|
6989
7043
|
height: number()
|
|
6990
7044
|
}),
|
|
7045
|
+
/**
|
|
7046
|
+
* Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
|
|
7047
|
+
* every detector / classifier / embedder. Set to 1 for a grayscale CTC text
|
|
7048
|
+
* recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
|
|
7049
|
+
* feeds a single-channel, EasyOCR-normalized tensor instead of the default
|
|
7050
|
+
* 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
|
|
7051
|
+
* Python inference pool.
|
|
7052
|
+
*/
|
|
7053
|
+
inputChannels: number().int().positive().optional(),
|
|
6991
7054
|
labels: array(LabelDefinitionSchema).readonly(),
|
|
6992
7055
|
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6993
7056
|
inputNormalization: _enum([
|
|
@@ -6997,6 +7060,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
6997
7060
|
]).optional(),
|
|
6998
7061
|
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6999
7062
|
/**
|
|
7063
|
+
* Per-MODEL postprocessor override. Absent ⇒ the step's own
|
|
7064
|
+
* `StepDefinition.postprocessor` applies (the normal case — every model in a
|
|
7065
|
+
* step shares its decode). Set it when a step hosts models with DIFFERENT raw
|
|
7066
|
+
* output layouts under one slot: e.g. object-detection is `'yolo'` by default,
|
|
7067
|
+
* but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
|
|
7068
|
+
* 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
|
|
7069
|
+
* by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
|
|
7070
|
+
*/
|
|
7071
|
+
postprocessor: custom().optional(),
|
|
7072
|
+
/**
|
|
7000
7073
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
7001
7074
|
* onto the canonical template) before this step runs, instead of a plain
|
|
7002
7075
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -9807,7 +9880,7 @@ object({
|
|
|
9807
9880
|
deviceId: number(),
|
|
9808
9881
|
timestamp: number()
|
|
9809
9882
|
});
|
|
9810
|
-
DeviceType.Button;
|
|
9883
|
+
DeviceType.Button, DeviceType.Camera;
|
|
9811
9884
|
/**
|
|
9812
9885
|
* Enum-state sensor — a string value picked from a finite option set.
|
|
9813
9886
|
* Drives HA `sensor` entries with `state_class: enum` (HVAC action
|
|
@@ -10473,7 +10546,8 @@ var ModelFormatSchema$1 = _enum([
|
|
|
10473
10546
|
"coreml",
|
|
10474
10547
|
"openvino",
|
|
10475
10548
|
"tflite",
|
|
10476
|
-
"pt"
|
|
10549
|
+
"pt",
|
|
10550
|
+
"gguf"
|
|
10477
10551
|
]);
|
|
10478
10552
|
var PipelineSlotSchema = _enum([
|
|
10479
10553
|
"detector",
|
|
@@ -10567,7 +10641,8 @@ var EngineProvisioningSchema = object({
|
|
|
10567
10641
|
runtimeId: _enum([
|
|
10568
10642
|
"onnx",
|
|
10569
10643
|
"openvino",
|
|
10570
|
-
"coreml"
|
|
10644
|
+
"coreml",
|
|
10645
|
+
"edgetpu"
|
|
10571
10646
|
]).nullable(),
|
|
10572
10647
|
device: string().nullable(),
|
|
10573
10648
|
state: _enum([
|
|
@@ -11779,6 +11854,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
|
|
|
11779
11854
|
deviceId: number(),
|
|
11780
11855
|
status: PtzAutotrackStatusSchema
|
|
11781
11856
|
});
|
|
11857
|
+
/**
|
|
11858
|
+
* scene-monitor — device-scoped reference-region state cap. An operator marks
|
|
11859
|
+
* a rect ROI on a camera frame and names one or more states; the engine
|
|
11860
|
+
* (pipeline-analytics, designated post-processing node) reports which state is
|
|
11861
|
+
* active on an ongoing basis. Two operator-selectable check modes share every-
|
|
11862
|
+
* thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
|
|
11863
|
+
* vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
|
|
11864
|
+
*
|
|
11865
|
+
* D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
|
|
11866
|
+
* derives the device-detail contribution; the provider carries NO hand-written
|
|
11867
|
+
* settings-contribution methods. `status.kind:'push'` — the engine pushes on
|
|
11868
|
+
* every hysteresis flip / availability change; consumers never poll.
|
|
11869
|
+
*/
|
|
11870
|
+
/** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
|
|
11871
|
+
* be added without a wire break (matching falls back to any-condition refs). */
|
|
11872
|
+
var SceneConditionSchema = string();
|
|
11873
|
+
/** One captured reference — condition-tagged, model-version-gated. `embedding`
|
|
11874
|
+
* is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
|
|
11875
|
+
var SceneReferenceSchema = object({
|
|
11876
|
+
embedding: array(number()),
|
|
11877
|
+
modelId: string(),
|
|
11878
|
+
condition: SceneConditionSchema,
|
|
11879
|
+
capturedAt: number(),
|
|
11880
|
+
thumbnailMediaId: string().optional()
|
|
11881
|
+
});
|
|
11882
|
+
var SceneMonitorStateSchema = object({
|
|
11883
|
+
id: string(),
|
|
11884
|
+
label: string(),
|
|
11885
|
+
references: array(SceneReferenceSchema),
|
|
11886
|
+
textPrompts: array(string()).optional(),
|
|
11887
|
+
referenceCount: number(),
|
|
11888
|
+
currentlyMatched: boolean()
|
|
11889
|
+
});
|
|
11890
|
+
/** Per-mode comparator params in a discriminated union so an `llm` scene never
|
|
11891
|
+
* carries similarity knobs and vice-versa. */
|
|
11892
|
+
var SceneCheckSchema = discriminatedUnion("mode", [object({
|
|
11893
|
+
mode: literal("similarity"),
|
|
11894
|
+
threshold: number().min(0).max(1),
|
|
11895
|
+
hysteresisCount: number().int().positive()
|
|
11896
|
+
}), object({
|
|
11897
|
+
mode: literal("llm"),
|
|
11898
|
+
prompt: string(),
|
|
11899
|
+
profileId: string().optional(),
|
|
11900
|
+
hysteresisCount: number().int().positive()
|
|
11901
|
+
})]);
|
|
11902
|
+
var SceneMonitorSchema = object({
|
|
11903
|
+
id: string(),
|
|
11904
|
+
label: string(),
|
|
11905
|
+
roi: MaskRectShapeSchema,
|
|
11906
|
+
enabled: boolean(),
|
|
11907
|
+
triggerMode: _enum([
|
|
11908
|
+
"periodic",
|
|
11909
|
+
"on-motion",
|
|
11910
|
+
"both"
|
|
11911
|
+
]),
|
|
11912
|
+
checkIntervalSec: number().optional(),
|
|
11913
|
+
check: SceneCheckSchema,
|
|
11914
|
+
states: array(SceneMonitorStateSchema),
|
|
11915
|
+
currentStateId: string().nullable(),
|
|
11916
|
+
lastCheckedAt: number().nullable(),
|
|
11917
|
+
lastConfidence: number().nullable(),
|
|
11918
|
+
currentCondition: SceneConditionSchema.nullable(),
|
|
11919
|
+
availability: _enum(["ok", "unavailable"]),
|
|
11920
|
+
unavailableReason: string().nullable()
|
|
11921
|
+
});
|
|
11922
|
+
var SceneMonitorStatusSchema = object({
|
|
11923
|
+
monitors: array(SceneMonitorSchema),
|
|
11924
|
+
lastFetchedAt: number()
|
|
11925
|
+
});
|
|
11926
|
+
DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
|
|
11927
|
+
deviceId: number(),
|
|
11928
|
+
label: string(),
|
|
11929
|
+
roi: MaskRectShapeSchema,
|
|
11930
|
+
check: SceneCheckSchema,
|
|
11931
|
+
triggerMode: _enum([
|
|
11932
|
+
"periodic",
|
|
11933
|
+
"on-motion",
|
|
11934
|
+
"both"
|
|
11935
|
+
]).optional(),
|
|
11936
|
+
checkIntervalSec: number().optional()
|
|
11937
|
+
}), SceneMonitorSchema, {
|
|
11938
|
+
kind: "mutation",
|
|
11939
|
+
auth: "admin"
|
|
11940
|
+
}), method(object({
|
|
11941
|
+
deviceId: number(),
|
|
11942
|
+
monitorId: string(),
|
|
11943
|
+
patch: object({
|
|
11944
|
+
label: string().optional(),
|
|
11945
|
+
roi: MaskRectShapeSchema.optional(),
|
|
11946
|
+
enabled: boolean().optional(),
|
|
11947
|
+
triggerMode: _enum([
|
|
11948
|
+
"periodic",
|
|
11949
|
+
"on-motion",
|
|
11950
|
+
"both"
|
|
11951
|
+
]).optional(),
|
|
11952
|
+
checkIntervalSec: number().optional(),
|
|
11953
|
+
check: SceneCheckSchema.optional()
|
|
11954
|
+
})
|
|
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
|
+
}), method(object({
|
|
11965
|
+
deviceId: number(),
|
|
11966
|
+
monitorId: string(),
|
|
11967
|
+
stateId: string().optional(),
|
|
11968
|
+
label: string().optional(),
|
|
11969
|
+
condition: SceneConditionSchema.optional()
|
|
11970
|
+
}), object({
|
|
11971
|
+
stateId: string(),
|
|
11972
|
+
referenceCount: number()
|
|
11973
|
+
}), {
|
|
11974
|
+
kind: "mutation",
|
|
11975
|
+
auth: "admin"
|
|
11976
|
+
}), method(object({
|
|
11977
|
+
deviceId: number(),
|
|
11978
|
+
monitorId: string(),
|
|
11979
|
+
stateId: string(),
|
|
11980
|
+
index: number()
|
|
11981
|
+
}), _void(), {
|
|
11982
|
+
kind: "mutation",
|
|
11983
|
+
auth: "admin"
|
|
11984
|
+
}), method(object({
|
|
11985
|
+
deviceId: number(),
|
|
11986
|
+
monitorId: string()
|
|
11987
|
+
}), _void(), {
|
|
11988
|
+
kind: "mutation",
|
|
11989
|
+
auth: "admin"
|
|
11990
|
+
});
|
|
11782
11991
|
object({
|
|
11783
11992
|
/** Whether the script is currently executing. */
|
|
11784
11993
|
isRunning: boolean(),
|
|
@@ -12186,6 +12395,36 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
|
|
|
12186
12395
|
* with the per-track detail panel and live overlay. */
|
|
12187
12396
|
trackIds: array(string()).readonly()
|
|
12188
12397
|
});
|
|
12398
|
+
/**
|
|
12399
|
+
* A parked ("stationary") object surfaced alongside occupancy — an object that
|
|
12400
|
+
* settled and stopped moving. It is NO LONGER a tracked object (the tracker was
|
|
12401
|
+
* told to forget it so it stops re-spawning tracks/events), but it IS still
|
|
12402
|
+
* physically present, so it keeps counting toward `frame` occupancy and is
|
|
12403
|
+
* listed here so the UI can show it in a dedicated "Stationary" section instead
|
|
12404
|
+
* of flooding the live event feed.
|
|
12405
|
+
*/
|
|
12406
|
+
var StationaryObjectSchema = object({
|
|
12407
|
+
id: string(),
|
|
12408
|
+
className: string(),
|
|
12409
|
+
bbox: object({
|
|
12410
|
+
x: number(),
|
|
12411
|
+
y: number(),
|
|
12412
|
+
w: number(),
|
|
12413
|
+
h: number()
|
|
12414
|
+
}),
|
|
12415
|
+
frameWidth: number().int().nonnegative(),
|
|
12416
|
+
frameHeight: number().int().nonnegative(),
|
|
12417
|
+
/** When the source track was first seen. */
|
|
12418
|
+
firstSeenAt: number().int(),
|
|
12419
|
+
/** When the object was recognised as parked (promotion time). */
|
|
12420
|
+
becameStationaryAt: number().int(),
|
|
12421
|
+
/** Last frame a detection confirmed the object is still there. */
|
|
12422
|
+
lastConfirmedAt: number().int(),
|
|
12423
|
+
/** Enrichment label carried from the source track (identity / plate). */
|
|
12424
|
+
label: string().optional(),
|
|
12425
|
+
/** Native-resolution key-frame media key for the parked object's best image. */
|
|
12426
|
+
keyFrameMediaKey: string().optional()
|
|
12427
|
+
});
|
|
12189
12428
|
var CameraOccupancySnapshotSchema = object({
|
|
12190
12429
|
/** Frame timestamp of the inference result that produced this snapshot. */
|
|
12191
12430
|
ts: number().int(),
|
|
@@ -12194,10 +12433,15 @@ var CameraOccupancySnapshotSchema = object({
|
|
|
12194
12433
|
frameHeight: number().int().nonnegative(),
|
|
12195
12434
|
/** Per-zone breakdown — one entry per defined zone (user + onboard). */
|
|
12196
12435
|
zones: array(ZoneScopeBreakdownSchema).readonly(),
|
|
12197
|
-
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12436
|
+
/** Frame-wide aggregate (everywhere, regardless of zone membership).
|
|
12437
|
+
* INCLUDES currently-confirmed stationary objects (they are still present). */
|
|
12198
12438
|
frame: PerScopeBreakdownSchema,
|
|
12199
12439
|
/** Detections that landed outside every zone. Empty when no zones defined. */
|
|
12200
|
-
unzoned: PerScopeBreakdownSchema
|
|
12440
|
+
unzoned: PerScopeBreakdownSchema,
|
|
12441
|
+
/** Parked objects on this camera (additive — absent on legacy snapshots).
|
|
12442
|
+
* Surfaced separately so the UI shows them in a dedicated section rather
|
|
12443
|
+
* than as repeated tracks/events. */
|
|
12444
|
+
stationaryObjects: array(StationaryObjectSchema).readonly().optional()
|
|
12201
12445
|
});
|
|
12202
12446
|
/**
|
|
12203
12447
|
* Time-series resolution. The history methods return one bucket per
|
|
@@ -12806,7 +13050,12 @@ var NotificationRuleConditionsSchema = object({
|
|
|
12806
13050
|
clipDescription: object({
|
|
12807
13051
|
text: string().min(1),
|
|
12808
13052
|
minSimilarity: number().min(0).max(1)
|
|
12809
|
-
}).optional()
|
|
13053
|
+
}).optional(),
|
|
13054
|
+
/** Match events whose recognized-entity label (face identity name or plate
|
|
13055
|
+
* vehicle name, propagated onto `event.data.label`) is one of these values.
|
|
13056
|
+
* Empty/absent → unaffected (back-compat). Enables "notify me when <named
|
|
13057
|
+
* vehicle/person> is seen". */
|
|
13058
|
+
labels: array(string()).readonly().optional()
|
|
12810
13059
|
});
|
|
12811
13060
|
var NotificationRuleTemplateSchema = object({
|
|
12812
13061
|
title: string(),
|
|
@@ -13064,11 +13313,19 @@ method(object({
|
|
|
13064
13313
|
* login page needs NO change.
|
|
13065
13314
|
*
|
|
13066
13315
|
* - `widget` — a Module-Federation widget the login page mounts (via
|
|
13067
|
-
* `loadRemoteBundle`) for an in-page ceremony.
|
|
13068
|
-
*
|
|
13069
|
-
*
|
|
13070
|
-
*
|
|
13071
|
-
*
|
|
13316
|
+
* `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
|
|
13317
|
+
* stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
|
|
13318
|
+
* mechanism kept for future use; no shipped addon uses it on the login
|
|
13319
|
+
* page (the passkey ceremony below runs natively in the shell instead).
|
|
13320
|
+
*
|
|
13321
|
+
* - `passkey` — a declarative WebAuthn ceremony the shell renders
|
|
13322
|
+
* natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
|
|
13323
|
+
* a remotely-loaded bundle). Carries the addon's effective `rpId` /
|
|
13324
|
+
* `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
|
|
13325
|
+
* can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
|
|
13326
|
+
* fetching any remote code pre-auth. Contribution stays unconditional —
|
|
13327
|
+
* enrollment state is never leaked pre-auth; visibility is a shell
|
|
13328
|
+
* decision.
|
|
13072
13329
|
*
|
|
13073
13330
|
* Every contribution carries a `stage`:
|
|
13074
13331
|
* - `primary` — shown on the first credentials screen (OIDC /
|
|
@@ -13082,30 +13339,45 @@ method(object({
|
|
|
13082
13339
|
*/
|
|
13083
13340
|
/** When a login method renders in the two-phase login flow. */
|
|
13084
13341
|
var LoginStageEnum = _enum(["primary", "second-factor"]);
|
|
13085
|
-
/** One login-method contribution — redirect button
|
|
13086
|
-
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
13091
|
-
|
|
13092
|
-
|
|
13093
|
-
|
|
13094
|
-
|
|
13095
|
-
|
|
13096
|
-
|
|
13097
|
-
|
|
13098
|
-
|
|
13099
|
-
|
|
13100
|
-
|
|
13101
|
-
|
|
13102
|
-
|
|
13103
|
-
|
|
13104
|
-
|
|
13105
|
-
|
|
13106
|
-
|
|
13107
|
-
|
|
13108
|
-
|
|
13342
|
+
/** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
|
|
13343
|
+
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13344
|
+
object({
|
|
13345
|
+
kind: literal("redirect"),
|
|
13346
|
+
/** Stable id within the login-method set (e.g. `auth-oidc/google`). */
|
|
13347
|
+
id: string(),
|
|
13348
|
+
/** Operator-facing button label. */
|
|
13349
|
+
label: string(),
|
|
13350
|
+
/** lucide-react icon name. */
|
|
13351
|
+
icon: string().optional(),
|
|
13352
|
+
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
13353
|
+
startUrl: string(),
|
|
13354
|
+
stage: LoginStageEnum
|
|
13355
|
+
}),
|
|
13356
|
+
object({
|
|
13357
|
+
kind: literal("widget"),
|
|
13358
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
|
|
13359
|
+
id: string(),
|
|
13360
|
+
/** Owning addon id — drives the public bundle URL + the MF namespace. */
|
|
13361
|
+
addonId: string(),
|
|
13362
|
+
/** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
|
|
13363
|
+
bundle: string(),
|
|
13364
|
+
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
13365
|
+
remote: WidgetRemoteSchema,
|
|
13366
|
+
stage: LoginStageEnum
|
|
13367
|
+
}),
|
|
13368
|
+
object({
|
|
13369
|
+
kind: literal("passkey"),
|
|
13370
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
|
|
13371
|
+
id: string(),
|
|
13372
|
+
/** Operator-facing button label. */
|
|
13373
|
+
label: string(),
|
|
13374
|
+
stage: LoginStageEnum,
|
|
13375
|
+
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
13376
|
+
rpId: string(),
|
|
13377
|
+
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
13378
|
+
origin: string().nullable()
|
|
13379
|
+
})
|
|
13380
|
+
]);
|
|
13109
13381
|
method(_void(), array(LoginMethodContributionSchema).readonly());
|
|
13110
13382
|
/**
|
|
13111
13383
|
* Orchestrator-side destination metadata. The orchestrator computes
|
|
@@ -14011,6 +14283,14 @@ var ConfigEntrySchema = object({
|
|
|
14011
14283
|
value: unknown(),
|
|
14012
14284
|
description: string().optional()
|
|
14013
14285
|
});
|
|
14286
|
+
var DeviceLinkModeSchema = _enum(["auto", "manual"]);
|
|
14287
|
+
/** One resolved linked device — the compact projection consumers need. */
|
|
14288
|
+
var LinkedDeviceSchema = object({
|
|
14289
|
+
deviceId: number(),
|
|
14290
|
+
name: string(),
|
|
14291
|
+
location: string().nullable(),
|
|
14292
|
+
features: array(string())
|
|
14293
|
+
});
|
|
14014
14294
|
var SavedDeviceRowSchema = object({
|
|
14015
14295
|
/** Numeric id reserved at allocateDeviceId time. */
|
|
14016
14296
|
id: number(),
|
|
@@ -14232,7 +14512,10 @@ method(object({
|
|
|
14232
14512
|
}), _void(), {
|
|
14233
14513
|
kind: "mutation",
|
|
14234
14514
|
auth: "admin"
|
|
14235
|
-
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }),
|
|
14515
|
+
}), method(object({ addonId: string() }), array(SavedDeviceRowSchema)), method(object({ addonId: string().optional() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), DeviceInfoSchema.nullable()), method(object({ parentDeviceId: number() }), array(DeviceInfoSchema)), method(object({ deviceId: number() }), object({
|
|
14516
|
+
mode: DeviceLinkModeSchema,
|
|
14517
|
+
devices: array(LinkedDeviceSchema)
|
|
14518
|
+
})), method(object({ deviceId: number() }), array(StreamSourceEntrySchema$1)), method(object({ deviceId: number() }), array(ConfigEntrySchema)), method(object({ deviceId: number() }), ConfigUISchemaOutput), method(object({
|
|
14236
14519
|
deviceId: number(),
|
|
14237
14520
|
values: record(string(), unknown())
|
|
14238
14521
|
}), object({ success: literal(true) }), {
|
|
@@ -14966,14 +15249,14 @@ var TargetKindCapsSchema = object({
|
|
|
14966
15249
|
* the union is large and not meant for runtime validation here; the exported
|
|
14967
15250
|
* `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
|
|
14968
15251
|
*/
|
|
14969
|
-
var ConfigSchemaPassthrough = unknown();
|
|
15252
|
+
var ConfigSchemaPassthrough$1 = unknown();
|
|
14970
15253
|
var TargetKindSchema = object({
|
|
14971
15254
|
kind: string(),
|
|
14972
15255
|
label: string(),
|
|
14973
15256
|
icon: string(),
|
|
14974
15257
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
14975
15258
|
addonId: string(),
|
|
14976
|
-
configSchema: ConfigSchemaPassthrough,
|
|
15259
|
+
configSchema: ConfigSchemaPassthrough$1,
|
|
14977
15260
|
supportsDiscovery: boolean(),
|
|
14978
15261
|
caps: TargetKindCapsSchema
|
|
14979
15262
|
});
|
|
@@ -15026,6 +15309,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
15026
15309
|
enabled: boolean()
|
|
15027
15310
|
}), _void(), { kind: "mutation" });
|
|
15028
15311
|
/**
|
|
15312
|
+
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
15313
|
+
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
15314
|
+
* caps stay wire-compatible without a circular cap→cap import.
|
|
15315
|
+
*
|
|
15316
|
+
* Errors are a discriminated-union RESULT, never thrown: the shape survives
|
|
15317
|
+
* every transport tier structurally, and failed calls still write usage rows.
|
|
15318
|
+
* Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
|
|
15319
|
+
*/
|
|
15320
|
+
var LlmUsageSchema = object({
|
|
15321
|
+
inputTokens: number(),
|
|
15322
|
+
outputTokens: number()
|
|
15323
|
+
});
|
|
15324
|
+
var LlmErrorCodeSchema = _enum([
|
|
15325
|
+
"timeout",
|
|
15326
|
+
"rate-limited",
|
|
15327
|
+
"auth",
|
|
15328
|
+
"refusal",
|
|
15329
|
+
"bad-request",
|
|
15330
|
+
"unavailable",
|
|
15331
|
+
"no-profile",
|
|
15332
|
+
"budget-exceeded",
|
|
15333
|
+
"adapter-error"
|
|
15334
|
+
]);
|
|
15335
|
+
var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
|
|
15336
|
+
ok: literal(true),
|
|
15337
|
+
text: string(),
|
|
15338
|
+
model: string(),
|
|
15339
|
+
usage: LlmUsageSchema,
|
|
15340
|
+
truncated: boolean(),
|
|
15341
|
+
latencyMs: number()
|
|
15342
|
+
}), object({
|
|
15343
|
+
ok: literal(false),
|
|
15344
|
+
code: LlmErrorCodeSchema,
|
|
15345
|
+
message: string(),
|
|
15346
|
+
retryAfterMs: number().optional()
|
|
15347
|
+
})]);
|
|
15348
|
+
/**
|
|
15349
|
+
* `Uint8Array` is the sanctioned binary convention — superjson + the UDS
|
|
15350
|
+
* MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
|
|
15351
|
+
* notification-output.cap.ts:27-31 precedents).
|
|
15352
|
+
*/
|
|
15353
|
+
var LlmImageSchema = object({
|
|
15354
|
+
bytes: _instanceof(Uint8Array),
|
|
15355
|
+
mimeType: string()
|
|
15356
|
+
});
|
|
15357
|
+
var LlmGenerateBaseInputSchema = object({
|
|
15358
|
+
/** Collection routing (the notification-output posture). */
|
|
15359
|
+
addonId: string().optional(),
|
|
15360
|
+
/** Explicit profile; else the resolution chain (spec §3). */
|
|
15361
|
+
profileId: string().optional(),
|
|
15362
|
+
/** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
|
|
15363
|
+
consumer: string(),
|
|
15364
|
+
system: string().optional(),
|
|
15365
|
+
/** v1: single-turn. `messages[]` is a v2 additive field. */
|
|
15366
|
+
prompt: string(),
|
|
15367
|
+
/** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
|
|
15368
|
+
jsonSchema: record(string(), unknown()).optional(),
|
|
15369
|
+
/** Per-call override of the profile default. */
|
|
15370
|
+
maxTokens: number().int().positive().optional(),
|
|
15371
|
+
temperature: number().optional()
|
|
15372
|
+
});
|
|
15373
|
+
/**
|
|
15374
|
+
* `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
|
|
15375
|
+
* on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
|
|
15376
|
+
* a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
|
|
15377
|
+
* cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
|
|
15378
|
+
* this only through the `llm` cap's methods.
|
|
15379
|
+
*
|
|
15380
|
+
* One running llama-server child per node in v1 (models are RAM-heavy).
|
|
15381
|
+
* Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
|
|
15382
|
+
* watchdog — operator decision #3).
|
|
15383
|
+
*/
|
|
15384
|
+
var ManagedModelRefSchema = discriminatedUnion("kind", [
|
|
15385
|
+
object({
|
|
15386
|
+
kind: literal("catalog"),
|
|
15387
|
+
catalogId: string()
|
|
15388
|
+
}),
|
|
15389
|
+
object({
|
|
15390
|
+
kind: literal("url"),
|
|
15391
|
+
url: string(),
|
|
15392
|
+
sha256: string().optional()
|
|
15393
|
+
}),
|
|
15394
|
+
object({
|
|
15395
|
+
kind: literal("path"),
|
|
15396
|
+
path: string()
|
|
15397
|
+
})
|
|
15398
|
+
]);
|
|
15399
|
+
var ManagedRuntimeConfigSchema = object({
|
|
15400
|
+
/** WHERE the runtime lives — hub or any agent. */
|
|
15401
|
+
nodeId: string(),
|
|
15402
|
+
/** Closed for v1; 'ollama' is a v2 candidate. */
|
|
15403
|
+
engine: _enum(["llama-cpp"]),
|
|
15404
|
+
model: ManagedModelRefSchema,
|
|
15405
|
+
contextSize: number().int().default(4096),
|
|
15406
|
+
/** 0 = CPU-only. */
|
|
15407
|
+
gpuLayers: number().int().default(0),
|
|
15408
|
+
/** Default: cpus-2, clamped ≥1 (resolved node-side). */
|
|
15409
|
+
threads: number().int().optional(),
|
|
15410
|
+
/** Concurrent slots. */
|
|
15411
|
+
parallel: number().int().default(1),
|
|
15412
|
+
/** Else lazy: first generate boots it. */
|
|
15413
|
+
autoStart: boolean().default(false),
|
|
15414
|
+
/** 0 = never; frees RAM after quiet periods. */
|
|
15415
|
+
idleStopMinutes: number().int().default(30)
|
|
15416
|
+
});
|
|
15417
|
+
var LlmRuntimeStatusSchema = object({
|
|
15418
|
+
/** Status is ALWAYS node-qualified. */
|
|
15419
|
+
nodeId: string(),
|
|
15420
|
+
state: _enum([
|
|
15421
|
+
"stopped",
|
|
15422
|
+
"downloading",
|
|
15423
|
+
"starting",
|
|
15424
|
+
"ready",
|
|
15425
|
+
"crashed",
|
|
15426
|
+
"failed"
|
|
15427
|
+
]),
|
|
15428
|
+
pid: number().optional(),
|
|
15429
|
+
port: number().optional(),
|
|
15430
|
+
modelPath: string().optional(),
|
|
15431
|
+
modelId: string().optional(),
|
|
15432
|
+
downloadProgress: number().min(0).max(1).optional(),
|
|
15433
|
+
lastError: string().optional(),
|
|
15434
|
+
crashesInWindow: number(),
|
|
15435
|
+
/** Child RSS (sampled best-effort). */
|
|
15436
|
+
memoryBytes: number().optional(),
|
|
15437
|
+
vramBytes: number().optional()
|
|
15438
|
+
});
|
|
15439
|
+
var LlmNodeModelSchema = object({
|
|
15440
|
+
file: string(),
|
|
15441
|
+
sizeBytes: number(),
|
|
15442
|
+
catalogId: string().optional(),
|
|
15443
|
+
installedAt: number().optional()
|
|
15444
|
+
});
|
|
15445
|
+
var LlmRuntimeDiskUsageSchema = object({
|
|
15446
|
+
nodeId: string(),
|
|
15447
|
+
modelsBytes: number(),
|
|
15448
|
+
freeBytes: number().optional()
|
|
15449
|
+
});
|
|
15450
|
+
method(LlmGenerateBaseInputSchema.extend({
|
|
15451
|
+
images: array(LlmImageSchema).optional(),
|
|
15452
|
+
runtime: ManagedRuntimeConfigSchema,
|
|
15453
|
+
/** The managed profile's timeout, threaded by the hub provider. */
|
|
15454
|
+
timeoutMs: number().int().positive().optional()
|
|
15455
|
+
}), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
15456
|
+
kind: "mutation",
|
|
15457
|
+
auth: "admin"
|
|
15458
|
+
}), method(object({}), _void(), {
|
|
15459
|
+
kind: "mutation",
|
|
15460
|
+
auth: "admin"
|
|
15461
|
+
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
15462
|
+
kind: "mutation",
|
|
15463
|
+
auth: "admin"
|
|
15464
|
+
}), method(object({ file: string() }), _void(), {
|
|
15465
|
+
kind: "mutation",
|
|
15466
|
+
auth: "admin"
|
|
15467
|
+
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
15468
|
+
/**
|
|
15469
|
+
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
15470
|
+
* methods concat-fan across providers; single-row methods route to ONE
|
|
15471
|
+
* provider by the `addonId` in the call input (the notification-output
|
|
15472
|
+
* posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
|
|
15473
|
+
* (hub-placed); the cap stays open for future providers.
|
|
15474
|
+
*
|
|
15475
|
+
* Profiles are ROWS (data), not addons: one row = one usable model endpoint.
|
|
15476
|
+
* `apiKey` is a password field — providers REDACT it on read and merge on
|
|
15477
|
+
* write; a stored key NEVER round-trips to a client.
|
|
15478
|
+
*/
|
|
15479
|
+
var LlmProfileKindSchema = _enum([
|
|
15480
|
+
"openai-compatible",
|
|
15481
|
+
"openai",
|
|
15482
|
+
"anthropic",
|
|
15483
|
+
"google",
|
|
15484
|
+
"managed-local"
|
|
15485
|
+
]);
|
|
15486
|
+
var LlmProfileSchema = object({
|
|
15487
|
+
id: string(),
|
|
15488
|
+
name: string(),
|
|
15489
|
+
kind: LlmProfileKindSchema,
|
|
15490
|
+
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
15491
|
+
addonId: string(),
|
|
15492
|
+
enabled: boolean(),
|
|
15493
|
+
/** Vendor model id, or the managed runtime's loaded model. */
|
|
15494
|
+
model: string(),
|
|
15495
|
+
/** Required for openai-compatible; override for cloud kinds. */
|
|
15496
|
+
baseUrl: string().optional(),
|
|
15497
|
+
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
15498
|
+
apiKey: string().optional(),
|
|
15499
|
+
supportsVision: boolean(),
|
|
15500
|
+
temperature: number().min(0).max(2).optional(),
|
|
15501
|
+
maxTokens: number().int().positive().optional(),
|
|
15502
|
+
timeoutMs: number().int().positive().default(6e4),
|
|
15503
|
+
extraHeaders: record(string(), string()).optional(),
|
|
15504
|
+
/** kind === 'managed-local' only (spec §4). */
|
|
15505
|
+
runtime: ManagedRuntimeConfigSchema.optional()
|
|
15506
|
+
});
|
|
15507
|
+
/** ConfigUISchema tree passed through untyped on the wire (the
|
|
15508
|
+
* notification-output `ConfigSchemaPassthrough` precedent at
|
|
15509
|
+
* notification-output.cap.ts:151); the exported TS type re-tightens it. */
|
|
15510
|
+
var ConfigSchemaPassthrough = unknown();
|
|
15511
|
+
var LlmProfileKindDescriptorSchema = object({
|
|
15512
|
+
kind: LlmProfileKindSchema,
|
|
15513
|
+
label: string(),
|
|
15514
|
+
icon: string(),
|
|
15515
|
+
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
15516
|
+
addonId: string(),
|
|
15517
|
+
configSchema: ConfigSchemaPassthrough
|
|
15518
|
+
});
|
|
15519
|
+
var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
|
|
15520
|
+
var LlmDefaultSchema = object({
|
|
15521
|
+
selector: LlmDefaultSelectorSchema,
|
|
15522
|
+
profileId: string()
|
|
15523
|
+
});
|
|
15524
|
+
/** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
|
|
15525
|
+
var LlmUsageRollupSchema = object({
|
|
15526
|
+
day: string(),
|
|
15527
|
+
consumer: string(),
|
|
15528
|
+
profileId: string(),
|
|
15529
|
+
calls: number(),
|
|
15530
|
+
okCalls: number(),
|
|
15531
|
+
errorCalls: number(),
|
|
15532
|
+
inputTokens: number(),
|
|
15533
|
+
outputTokens: number(),
|
|
15534
|
+
avgLatencyMs: number()
|
|
15535
|
+
});
|
|
15536
|
+
/** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
|
|
15537
|
+
var ManagedModelCatalogEntrySchema = object({
|
|
15538
|
+
id: string(),
|
|
15539
|
+
label: string(),
|
|
15540
|
+
family: string(),
|
|
15541
|
+
purpose: _enum(["text", "vision"]),
|
|
15542
|
+
url: string(),
|
|
15543
|
+
sha256: string(),
|
|
15544
|
+
sizeBytes: number(),
|
|
15545
|
+
quantization: string(),
|
|
15546
|
+
/** Load-time guidance shown in the picker. */
|
|
15547
|
+
minRamBytes: number(),
|
|
15548
|
+
contextSizeDefault: number().int(),
|
|
15549
|
+
/** Vision models: companion projector file. */
|
|
15550
|
+
mmprojUrl: string().optional()
|
|
15551
|
+
});
|
|
15552
|
+
var LlmRuntimeNodeSchema = object({
|
|
15553
|
+
nodeId: string(),
|
|
15554
|
+
reachable: boolean(),
|
|
15555
|
+
status: LlmRuntimeStatusSchema.optional(),
|
|
15556
|
+
disk: LlmRuntimeDiskUsageSchema.optional(),
|
|
15557
|
+
error: string().optional()
|
|
15558
|
+
});
|
|
15559
|
+
var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
|
|
15560
|
+
var ProfileRefInputSchema = object({
|
|
15561
|
+
addonId: string(),
|
|
15562
|
+
profileId: string()
|
|
15563
|
+
});
|
|
15564
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
15565
|
+
kind: "mutation",
|
|
15566
|
+
auth: "admin"
|
|
15567
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15568
|
+
kind: "mutation",
|
|
15569
|
+
auth: "admin"
|
|
15570
|
+
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
15571
|
+
kind: "mutation",
|
|
15572
|
+
auth: "admin"
|
|
15573
|
+
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
15574
|
+
selector: LlmDefaultSelectorSchema,
|
|
15575
|
+
profileId: string().nullable()
|
|
15576
|
+
}), _void(), {
|
|
15577
|
+
kind: "mutation",
|
|
15578
|
+
auth: "admin"
|
|
15579
|
+
}), method(object({
|
|
15580
|
+
since: number().optional(),
|
|
15581
|
+
until: number().optional(),
|
|
15582
|
+
consumer: string().optional(),
|
|
15583
|
+
profileId: string().optional()
|
|
15584
|
+
}), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
|
|
15585
|
+
nodeId: string(),
|
|
15586
|
+
model: ManagedModelRefSchema
|
|
15587
|
+
}), _void(), {
|
|
15588
|
+
kind: "mutation",
|
|
15589
|
+
auth: "admin"
|
|
15590
|
+
}), method(object({
|
|
15591
|
+
nodeId: string(),
|
|
15592
|
+
file: string()
|
|
15593
|
+
}), _void(), {
|
|
15594
|
+
kind: "mutation",
|
|
15595
|
+
auth: "admin"
|
|
15596
|
+
}), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
|
|
15597
|
+
kind: "mutation",
|
|
15598
|
+
auth: "admin"
|
|
15599
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15600
|
+
kind: "mutation",
|
|
15601
|
+
auth: "admin"
|
|
15602
|
+
});
|
|
15603
|
+
/**
|
|
15029
15604
|
* Zod schemas for persisted record types.
|
|
15030
15605
|
*
|
|
15031
15606
|
* These schemas serve as the single source of truth for types that are
|
|
@@ -15215,6 +15790,61 @@ var EventKindSchema = _enum([
|
|
|
15215
15790
|
"object",
|
|
15216
15791
|
"audio"
|
|
15217
15792
|
]);
|
|
15793
|
+
/**
|
|
15794
|
+
* Spatial filter for `listTracks` — the rect + polygon variants of the shared
|
|
15795
|
+
* MaskShape vocabulary (see `mask-shape.ts`). Coordinates are NORMALIZED 0..1
|
|
15796
|
+
* of the camera frame (top-left origin), matching the drawing-plane editor.
|
|
15797
|
+
*/
|
|
15798
|
+
var TrackZoneFilterSchema = discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
|
|
15799
|
+
/** Closed icon vocabulary so clients render a known glyph per kind. */
|
|
15800
|
+
var EventKindIconSchema = _enum([
|
|
15801
|
+
"motion",
|
|
15802
|
+
"audio",
|
|
15803
|
+
"person",
|
|
15804
|
+
"vehicle",
|
|
15805
|
+
"animal",
|
|
15806
|
+
"door",
|
|
15807
|
+
"pir",
|
|
15808
|
+
"smoke",
|
|
15809
|
+
"water",
|
|
15810
|
+
"button",
|
|
15811
|
+
"generic"
|
|
15812
|
+
]);
|
|
15813
|
+
var EventKindCategorySchema = _enum([
|
|
15814
|
+
"motion",
|
|
15815
|
+
"audio",
|
|
15816
|
+
"detection",
|
|
15817
|
+
"sensor",
|
|
15818
|
+
"custom"
|
|
15819
|
+
]);
|
|
15820
|
+
var EventKindDescriptorSchema = object({
|
|
15821
|
+
/** Stable kind id (e.g. 'motion', 'person', 'contact'). */
|
|
15822
|
+
kind: string(),
|
|
15823
|
+
label: string(),
|
|
15824
|
+
/** Hex color for timeline/legend rendering. */
|
|
15825
|
+
color: string(),
|
|
15826
|
+
icon: EventKindIconSchema,
|
|
15827
|
+
category: EventKindCategorySchema,
|
|
15828
|
+
/** Which cap + device contributes this kind. For built-ins the camera
|
|
15829
|
+
* itself; for sensor kinds the LINKED source device. */
|
|
15830
|
+
source: object({
|
|
15831
|
+
capName: string(),
|
|
15832
|
+
deviceId: number()
|
|
15833
|
+
})
|
|
15834
|
+
});
|
|
15835
|
+
var SensorEventSchema = object({
|
|
15836
|
+
id: string(),
|
|
15837
|
+
/** The CAMERA the event is attributed to (a sensor linked to N cameras
|
|
15838
|
+
* yields N rows, one per camera). */
|
|
15839
|
+
deviceId: number(),
|
|
15840
|
+
/** The linked sensor device whose state changed. */
|
|
15841
|
+
sourceDeviceId: number(),
|
|
15842
|
+
/** Event kind id — matches an `EventKindDescriptor.kind`. */
|
|
15843
|
+
kind: string(),
|
|
15844
|
+
/** Snapshot of the sensor cap's runtime-state slice at the change. */
|
|
15845
|
+
value: record(string(), unknown()).nullable(),
|
|
15846
|
+
timestamp: number()
|
|
15847
|
+
});
|
|
15218
15848
|
var TrackPositionSchema = object({
|
|
15219
15849
|
x: number(),
|
|
15220
15850
|
y: number(),
|
|
@@ -15227,6 +15857,46 @@ var TrackSnapshotSchema = object({
|
|
|
15227
15857
|
/** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
|
|
15228
15858
|
mediaKey: string()
|
|
15229
15859
|
});
|
|
15860
|
+
/**
|
|
15861
|
+
* Normalized 0..1 trajectory envelope (min/max over every position bbox,
|
|
15862
|
+
* divided by the track's detection-frame dims), computed at persist time.
|
|
15863
|
+
* Absent when the frame dims were unknown when the track was persisted
|
|
15864
|
+
* (legacy rows / dims-less sources) and on active (in-RAM) tracks.
|
|
15865
|
+
*/
|
|
15866
|
+
var TrackEnvelopeSchema = object({
|
|
15867
|
+
minX: number(),
|
|
15868
|
+
minY: number(),
|
|
15869
|
+
maxX: number(),
|
|
15870
|
+
maxY: number()
|
|
15871
|
+
});
|
|
15872
|
+
/**
|
|
15873
|
+
* Row projection for track list queries. `full` (default) returns the
|
|
15874
|
+
* complete Track including the frame-rate `positions[]` history and the
|
|
15875
|
+
* `snapshots[]` references — megabytes across a page of tracks. `slim`
|
|
15876
|
+
* keeps every scalar the list surfaces actually render (ids, class(es),
|
|
15877
|
+
* label / audioLabels / importance enrichment, firstSeen/lastSeen, state,
|
|
15878
|
+
* zonesVisited, bestEventId, envelope) and returns `positions` /
|
|
15879
|
+
* `snapshots` as EMPTY arrays — detail views re-fetch the full row via
|
|
15880
|
+
* `getTrack`. Mirrors the event-store `projection` convention
|
|
15881
|
+
* (`getObjectEvents` et al.).
|
|
15882
|
+
*/
|
|
15883
|
+
var TrackProjectionSchema = _enum(["full", "slim"]);
|
|
15884
|
+
/**
|
|
15885
|
+
* One audio-classification label heard on the track's camera while the
|
|
15886
|
+
* track was alive, aggregated per label. An "episode" is one persisted
|
|
15887
|
+
* audio event (the confident-classification path: score ≥ the device's
|
|
15888
|
+
* `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
|
|
15889
|
+
* one 32 ms inference chunk, so counts stay human-scaled.
|
|
15890
|
+
*/
|
|
15891
|
+
var TrackAudioLabelSchema = object({
|
|
15892
|
+
label: string(),
|
|
15893
|
+
/** Highest classification score observed across the label's episodes. */
|
|
15894
|
+
peakScore: number(),
|
|
15895
|
+
/** Number of coalesced audio-event episodes carrying this label. */
|
|
15896
|
+
count: number(),
|
|
15897
|
+
firstAt: number(),
|
|
15898
|
+
lastAt: number()
|
|
15899
|
+
});
|
|
15230
15900
|
var TrackSchema = object({
|
|
15231
15901
|
trackId: string(),
|
|
15232
15902
|
deviceId: number(),
|
|
@@ -15241,6 +15911,10 @@ var TrackSchema = object({
|
|
|
15241
15911
|
snapshots: array(TrackSnapshotSchema).readonly(),
|
|
15242
15912
|
/** Deduplicated zones the track has entered at least once. */
|
|
15243
15913
|
zonesVisited: array(string()).readonly(),
|
|
15914
|
+
/** Deduplicated set of detector classes observed for this track over its
|
|
15915
|
+
* life (a track may be reclassified, e.g. person→vehicle). Absent on
|
|
15916
|
+
* legacy rows written before class accumulation shipped. */
|
|
15917
|
+
classes: array(string()).readonly().optional(),
|
|
15244
15918
|
/** Cumulative normalized distance travelled (0..1 units = full frame width). */
|
|
15245
15919
|
totalDistance: number(),
|
|
15246
15920
|
state: TrackStateSchema,
|
|
@@ -15254,7 +15928,15 @@ var TrackSchema = object({
|
|
|
15254
15928
|
bestEventId: string().optional(),
|
|
15255
15929
|
/** Tag of the importance sub-signal that dominated the score
|
|
15256
15930
|
* (identity|dwell|proximity|class|confidence|travel|zone). */
|
|
15257
|
-
importanceReason: string().optional()
|
|
15931
|
+
importanceReason: string().optional(),
|
|
15932
|
+
/** Audio-classification labels heard on the camera during the track's
|
|
15933
|
+
* life (score ≥ device `classificationMinScore`), aggregated per label.
|
|
15934
|
+
* Absent on legacy rows / tracks with no confident audio. */
|
|
15935
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
15936
|
+
/** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
|
|
15937
|
+
* Populated from the persisted envelope columns on historical reads;
|
|
15938
|
+
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
15939
|
+
envelope: TrackEnvelopeSchema.optional()
|
|
15258
15940
|
});
|
|
15259
15941
|
var BaseEventFields = {
|
|
15260
15942
|
id: string(),
|
|
@@ -15364,11 +16046,13 @@ var MediaFileSchema = object({
|
|
|
15364
16046
|
sizeBytes: number(),
|
|
15365
16047
|
timestamp: number()
|
|
15366
16048
|
});
|
|
16049
|
+
var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
|
|
16050
|
+
var MAX_EVENT_QUERY_LIMIT = 5e3;
|
|
15367
16051
|
var DeviceEventQueryInput = object({
|
|
15368
16052
|
deviceId: number(),
|
|
15369
16053
|
since: number().optional(),
|
|
15370
16054
|
until: number().optional(),
|
|
15371
|
-
limit: number().int().min(1).max(
|
|
16055
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
|
|
15372
16056
|
/** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
|
|
15373
16057
|
* optional `mediaUrl` (populated by B5). `full` (default) keeps today's
|
|
15374
16058
|
* exact behaviour. Callers may omit this field — the store defaults to
|
|
@@ -15376,6 +16060,27 @@ var DeviceEventQueryInput = object({
|
|
|
15376
16060
|
projection: _enum(["full", "slim"]).optional()
|
|
15377
16061
|
});
|
|
15378
16062
|
var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: string().optional() });
|
|
16063
|
+
var RecentTracksQueryInput = object({
|
|
16064
|
+
/** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
|
|
16065
|
+
deviceIds: array(number()),
|
|
16066
|
+
/** Window lower bound on `lastSeen` (inclusive). */
|
|
16067
|
+
since: number().optional(),
|
|
16068
|
+
/** Window upper bound on `lastSeen` (inclusive). */
|
|
16069
|
+
until: number().optional(),
|
|
16070
|
+
/** Page size. Default 200, max 1000. */
|
|
16071
|
+
limit: number().int().min(1).max(1e3).default(200),
|
|
16072
|
+
/** Opaque continuation cursor from a previous page's `nextCursor`.
|
|
16073
|
+
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
16074
|
+
cursor: string().optional(),
|
|
16075
|
+
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
16076
|
+
projection: TrackProjectionSchema.optional()
|
|
16077
|
+
});
|
|
16078
|
+
var RecentTracksPageSchema = object({
|
|
16079
|
+
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
16080
|
+
tracks: array(TrackSchema).readonly(),
|
|
16081
|
+
/** Cursor for the next page, or null when this page is the last. */
|
|
16082
|
+
nextCursor: string().nullable()
|
|
16083
|
+
});
|
|
15379
16084
|
var KeyEventQueryInput = object({
|
|
15380
16085
|
deviceId: number(),
|
|
15381
16086
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
@@ -15402,7 +16107,7 @@ var KeyEventSchema = object({
|
|
|
15402
16107
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
15403
16108
|
windowMs: number().optional()
|
|
15404
16109
|
});
|
|
15405
|
-
|
|
16110
|
+
object({
|
|
15406
16111
|
trackId: string(),
|
|
15407
16112
|
className: string(),
|
|
15408
16113
|
confidence: number(),
|
|
@@ -15410,8 +16115,25 @@ var TrackedDetectionSchema = object({
|
|
|
15410
16115
|
zones: array(string()).readonly(),
|
|
15411
16116
|
state: TrackStateSchema
|
|
15412
16117
|
});
|
|
15413
|
-
var
|
|
15414
|
-
|
|
16118
|
+
var OverlayDetectionSchema = looseObject({
|
|
16119
|
+
id: string(),
|
|
16120
|
+
kind: _enum(["first-level", "detail"]),
|
|
16121
|
+
macroClass: string(),
|
|
16122
|
+
score: number(),
|
|
16123
|
+
bbox: object({
|
|
16124
|
+
x: number(),
|
|
16125
|
+
y: number(),
|
|
16126
|
+
width: number(),
|
|
16127
|
+
height: number()
|
|
16128
|
+
}),
|
|
16129
|
+
labels: array(looseObject({
|
|
16130
|
+
label: string(),
|
|
16131
|
+
score: number()
|
|
16132
|
+
})).readonly(),
|
|
16133
|
+
parentId: string().optional()
|
|
16134
|
+
});
|
|
16135
|
+
var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
|
|
16136
|
+
var SearchObjectEventsInput = object({
|
|
15415
16137
|
text: string(),
|
|
15416
16138
|
deviceId: number().optional(),
|
|
15417
16139
|
since: number().optional(),
|
|
@@ -15420,6 +16142,20 @@ var SearchObjectEventsInput = object({
|
|
|
15420
16142
|
limit: number().default(50),
|
|
15421
16143
|
minScore: number().min(0).max(1).default(.2)
|
|
15422
16144
|
});
|
|
16145
|
+
var TrackCascadeCountsSchema = object({
|
|
16146
|
+
/** Persisted track roots deleted (authoritative). */
|
|
16147
|
+
tracks: number().int(),
|
|
16148
|
+
/** Object events removed with their tracks (best-effort; see note above). */
|
|
16149
|
+
events: number().int(),
|
|
16150
|
+
/** Track/face/plate-owned media removed (best-effort). Never identity media. */
|
|
16151
|
+
media: number().int(),
|
|
16152
|
+
/** Unassigned (non-enrolled) face reads removed (best-effort). */
|
|
16153
|
+
faces: number().int(),
|
|
16154
|
+
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
16155
|
+
plates: number().int(),
|
|
16156
|
+
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16157
|
+
embeddings: number().int()
|
|
16158
|
+
});
|
|
15423
16159
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
15424
16160
|
deviceId: number(),
|
|
15425
16161
|
trackId: string()
|
|
@@ -15427,11 +16163,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15427
16163
|
deviceId: number(),
|
|
15428
16164
|
since: number().optional(),
|
|
15429
16165
|
until: number().optional(),
|
|
15430
|
-
limit: number().optional()
|
|
15431
|
-
|
|
15432
|
-
|
|
15433
|
-
|
|
15434
|
-
|
|
16166
|
+
limit: number().optional(),
|
|
16167
|
+
/** Spatial filter — only tracks whose trajectory intersects the zone
|
|
16168
|
+
* (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
|
|
16169
|
+
* envelope columns, then precisely tested per position. Tracks with
|
|
16170
|
+
* an unknown envelope (no frame dims at persist time) always match. */
|
|
16171
|
+
zone: TrackZoneFilterSchema.optional(),
|
|
16172
|
+
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
16173
|
+
* compatible — omitting the field keeps today's exact behaviour). */
|
|
16174
|
+
projection: TrackProjectionSchema.optional()
|
|
16175
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
16176
|
+
kind: "mutation",
|
|
16177
|
+
auth: "admin"
|
|
16178
|
+
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({
|
|
16179
|
+
deviceId: number(),
|
|
16180
|
+
since: number().optional(),
|
|
16181
|
+
until: number().optional(),
|
|
16182
|
+
kinds: array(string()).optional(),
|
|
16183
|
+
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
16184
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
15435
16185
|
deviceId: number(),
|
|
15436
16186
|
since: number(),
|
|
15437
16187
|
until: number(),
|
|
@@ -15451,6 +16201,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15451
16201
|
}), {
|
|
15452
16202
|
kind: "mutation",
|
|
15453
16203
|
auth: "admin"
|
|
16204
|
+
}), method(object({
|
|
16205
|
+
deviceId: number(),
|
|
16206
|
+
cutoffMs: number()
|
|
16207
|
+
}), TrackCascadeCountsSchema, {
|
|
16208
|
+
kind: "mutation",
|
|
16209
|
+
auth: "admin"
|
|
16210
|
+
}), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
|
|
16211
|
+
kind: "mutation",
|
|
16212
|
+
auth: "admin"
|
|
16213
|
+
}), method(object({
|
|
16214
|
+
deviceId: number(),
|
|
16215
|
+
trackIds: array(string()).min(1)
|
|
16216
|
+
}), object({
|
|
16217
|
+
deleted: number().int(),
|
|
16218
|
+
failed: array(string()).readonly()
|
|
16219
|
+
}), {
|
|
16220
|
+
kind: "mutation",
|
|
16221
|
+
auth: "admin"
|
|
15454
16222
|
}), method(object({
|
|
15455
16223
|
eventId: string(),
|
|
15456
16224
|
kind: MediaFileKindEnum.optional()
|
|
@@ -15459,7 +16227,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15459
16227
|
timestamp: number(),
|
|
15460
16228
|
frameWidth: number(),
|
|
15461
16229
|
frameHeight: number(),
|
|
15462
|
-
detections: array(
|
|
16230
|
+
detections: array(OverlayDetectionSchema).readonly()
|
|
15463
16231
|
}), object({
|
|
15464
16232
|
deviceId: number(),
|
|
15465
16233
|
trackId: string(),
|
|
@@ -16775,7 +17543,15 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
16775
17543
|
*/
|
|
16776
17544
|
disableIpv6: boolean().optional(),
|
|
16777
17545
|
/** Subscriber attribution. See `createSession` for the contract. */
|
|
16778
|
-
consumerAttribution: BrokerConsumerAttributionSchema.optional()
|
|
17546
|
+
consumerAttribution: BrokerConsumerAttributionSchema.optional(),
|
|
17547
|
+
/**
|
|
17548
|
+
* Client-side stream hints (viewport, downlink) — same contract as
|
|
17549
|
+
* `createSession.hints`. Client-offer viewers (the RN viewer's
|
|
17550
|
+
* `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
|
|
17551
|
+
* field their hints were silently stripped by the schema and the
|
|
17552
|
+
* adaptive ladder started blind on the client's display size.
|
|
17553
|
+
*/
|
|
17554
|
+
hints: webrtcClientHintsSchema.optional()
|
|
16779
17555
|
}), object({
|
|
16780
17556
|
sessionId: string(),
|
|
16781
17557
|
sdpAnswer: string()
|
|
@@ -18228,6 +19004,24 @@ DeviceType.Camera, method(object({
|
|
|
18228
19004
|
deviceId: number(),
|
|
18229
19005
|
status: OsdStatusSchema
|
|
18230
19006
|
});
|
|
19007
|
+
var VehicleSchema = object({
|
|
19008
|
+
id: string(),
|
|
19009
|
+
name: string(),
|
|
19010
|
+
sampleCount: number().int().nonnegative(),
|
|
19011
|
+
coverMediaKey: string().optional(),
|
|
19012
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
|
|
19013
|
+
coverBase64: string().optional()
|
|
19014
|
+
});
|
|
19015
|
+
var VehicleSampleInfoSchema = object({
|
|
19016
|
+
id: string(),
|
|
19017
|
+
/** The plate text this sample enrolled (self-labeling — no embedding). */
|
|
19018
|
+
text: string(),
|
|
19019
|
+
/** OCR confidence of the enrolled read (0..1). */
|
|
19020
|
+
score: number(),
|
|
19021
|
+
addedAt: number().int(),
|
|
19022
|
+
deviceId: number().int().optional(),
|
|
19023
|
+
base64: string().optional()
|
|
19024
|
+
});
|
|
18231
19025
|
var PlateInfoSchema = object({
|
|
18232
19026
|
plateId: string(),
|
|
18233
19027
|
deviceId: number().int(),
|
|
@@ -18239,6 +19033,16 @@ var PlateInfoSchema = object({
|
|
|
18239
19033
|
score: number(),
|
|
18240
19034
|
/** True when the text was manually corrected (exempt from retention). */
|
|
18241
19035
|
corrected: boolean(),
|
|
19036
|
+
/** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
|
|
19037
|
+
recognizedVehicleId: string().optional(),
|
|
19038
|
+
/** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
|
|
19039
|
+
vehicleName: string().optional(),
|
|
19040
|
+
/** True once the read was assigned to a vehicle (enrolled as a sample). */
|
|
19041
|
+
assigned: boolean(),
|
|
19042
|
+
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
19043
|
+
plateBbox: BoundingBoxSchema.optional(),
|
|
19044
|
+
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
19045
|
+
keyFrameMediaKey: string().optional(),
|
|
18242
19046
|
base64: string().optional()
|
|
18243
19047
|
});
|
|
18244
19048
|
var MediaFileLiteSchema = object({
|
|
@@ -18278,6 +19082,48 @@ method(object({
|
|
|
18278
19082
|
}), method(object({ plateId: string() }), _void(), {
|
|
18279
19083
|
kind: "mutation",
|
|
18280
19084
|
auth: "admin"
|
|
19085
|
+
}), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
19086
|
+
kind: "mutation",
|
|
19087
|
+
auth: "admin"
|
|
19088
|
+
}), method(object({
|
|
19089
|
+
id: string(),
|
|
19090
|
+
name: string().min(1)
|
|
19091
|
+
}), _void(), {
|
|
19092
|
+
kind: "mutation",
|
|
19093
|
+
auth: "admin"
|
|
19094
|
+
}), method(object({ id: string() }), _void(), {
|
|
19095
|
+
kind: "mutation",
|
|
19096
|
+
auth: "admin"
|
|
19097
|
+
}), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
|
|
19098
|
+
vehicleId: string(),
|
|
19099
|
+
sampleId: string()
|
|
19100
|
+
}), _void(), {
|
|
19101
|
+
kind: "mutation",
|
|
19102
|
+
auth: "admin"
|
|
19103
|
+
}), method(object({
|
|
19104
|
+
plateId: string(),
|
|
19105
|
+
vehicleId: string()
|
|
19106
|
+
}), _void(), {
|
|
19107
|
+
kind: "mutation",
|
|
19108
|
+
auth: "admin"
|
|
19109
|
+
}), method(object({ plateId: string() }), _void(), {
|
|
19110
|
+
kind: "mutation",
|
|
19111
|
+
auth: "admin"
|
|
19112
|
+
}), method(object({
|
|
19113
|
+
plateIds: array(string()).min(1),
|
|
19114
|
+
vehicleId: string()
|
|
19115
|
+
}), object({
|
|
19116
|
+
assigned: number().int(),
|
|
19117
|
+
failed: array(string()).readonly()
|
|
19118
|
+
}), {
|
|
19119
|
+
kind: "mutation",
|
|
19120
|
+
auth: "admin"
|
|
19121
|
+
}), method(object({ plateIds: array(string()).min(1) }), object({
|
|
19122
|
+
unassigned: number().int(),
|
|
19123
|
+
failed: array(string()).readonly()
|
|
19124
|
+
}), {
|
|
19125
|
+
kind: "mutation",
|
|
19126
|
+
auth: "admin"
|
|
18281
19127
|
});
|
|
18282
19128
|
var ModelFormatSchema = _enum(MODEL_FORMATS);
|
|
18283
19129
|
var HwAccelBackendInputSchema = _enum([
|
|
@@ -18356,6 +19202,10 @@ var GpuInfoSchema = object({
|
|
|
18356
19202
|
memoryMB: number().optional()
|
|
18357
19203
|
});
|
|
18358
19204
|
var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
|
|
19205
|
+
var CoralInfoSchema = object({
|
|
19206
|
+
type: literal("coral-edgetpu"),
|
|
19207
|
+
bus: string().optional()
|
|
19208
|
+
});
|
|
18359
19209
|
var HardwareInfoSchema = object({
|
|
18360
19210
|
platform: HardwarePlatformSchema,
|
|
18361
19211
|
arch: HardwareArchSchema,
|
|
@@ -18364,7 +19214,8 @@ var HardwareInfoSchema = object({
|
|
|
18364
19214
|
totalRAM_MB: number(),
|
|
18365
19215
|
availableRAM_MB: number(),
|
|
18366
19216
|
gpu: GpuInfoSchema.nullable(),
|
|
18367
|
-
npu: NpuInfoSchema.nullable()
|
|
19217
|
+
npu: NpuInfoSchema.nullable(),
|
|
19218
|
+
coral: CoralInfoSchema.nullable().optional()
|
|
18368
19219
|
});
|
|
18369
19220
|
var PlatformScoreSchema = object({
|
|
18370
19221
|
runtime: _enum(["node", "python"]),
|
|
@@ -18531,7 +19382,12 @@ var RecordingStorageUsageSchema = object({
|
|
|
18531
19382
|
/**
|
|
18532
19383
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
18533
19384
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
18534
|
-
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
19385
|
+
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
19386
|
+
* and the backward covered edge `prevEndMs` (exclusive end of the nearest
|
|
19387
|
+
* footage behind the epoch; `null` when none — optional so older providers
|
|
19388
|
+
* that omit it stay valid). `prevEndMs` lets a backward frame-step hop the
|
|
19389
|
+
* small inter-segment cracks (durMs under-covers the span to the next
|
|
19390
|
+
* startMs by ~11-17 ms) instead of no-opping at a segment head.
|
|
18535
19391
|
*/
|
|
18536
19392
|
var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
18537
19393
|
kind: literal("segment"),
|
|
@@ -18540,7 +19396,8 @@ var LocateSegmentResultSchema = discriminatedUnion("kind", [object({
|
|
|
18540
19396
|
bytes: number()
|
|
18541
19397
|
}), object({
|
|
18542
19398
|
kind: literal("gap"),
|
|
18543
|
-
nearestEdgeMs: number().nullable()
|
|
19399
|
+
nearestEdgeMs: number().nullable(),
|
|
19400
|
+
prevEndMs: number().nullable().optional()
|
|
18544
19401
|
})]);
|
|
18545
19402
|
/** Raw bytes of one finalized footage segment (read off disk on the recording node). */
|
|
18546
19403
|
var ReadSegmentBytesResultSchema = object({ data: _instanceof(Uint8Array) });
|
|
@@ -20109,6 +20966,12 @@ Object.freeze({
|
|
|
20109
20966
|
addonId: null,
|
|
20110
20967
|
access: "view"
|
|
20111
20968
|
},
|
|
20969
|
+
"deviceManager.getLinkedDevices": {
|
|
20970
|
+
capName: "device-manager",
|
|
20971
|
+
capScope: "system",
|
|
20972
|
+
addonId: null,
|
|
20973
|
+
access: "view"
|
|
20974
|
+
},
|
|
20112
20975
|
"deviceManager.getRoleDisplayDefaults": {
|
|
20113
20976
|
capName: "device-manager",
|
|
20114
20977
|
capScope: "system",
|
|
@@ -20823,6 +21686,168 @@ Object.freeze({
|
|
|
20823
21686
|
addonId: null,
|
|
20824
21687
|
access: "create"
|
|
20825
21688
|
},
|
|
21689
|
+
"llm.deleteModel": {
|
|
21690
|
+
capName: "llm",
|
|
21691
|
+
capScope: "system",
|
|
21692
|
+
addonId: null,
|
|
21693
|
+
access: "delete"
|
|
21694
|
+
},
|
|
21695
|
+
"llm.deleteProfile": {
|
|
21696
|
+
capName: "llm",
|
|
21697
|
+
capScope: "system",
|
|
21698
|
+
addonId: null,
|
|
21699
|
+
access: "delete"
|
|
21700
|
+
},
|
|
21701
|
+
"llm.generate": {
|
|
21702
|
+
capName: "llm",
|
|
21703
|
+
capScope: "system",
|
|
21704
|
+
addonId: null,
|
|
21705
|
+
access: "create"
|
|
21706
|
+
},
|
|
21707
|
+
"llm.generateVision": {
|
|
21708
|
+
capName: "llm",
|
|
21709
|
+
capScope: "system",
|
|
21710
|
+
addonId: null,
|
|
21711
|
+
access: "create"
|
|
21712
|
+
},
|
|
21713
|
+
"llm.getDefaults": {
|
|
21714
|
+
capName: "llm",
|
|
21715
|
+
capScope: "system",
|
|
21716
|
+
addonId: null,
|
|
21717
|
+
access: "view"
|
|
21718
|
+
},
|
|
21719
|
+
"llm.getRuntimeStatus": {
|
|
21720
|
+
capName: "llm",
|
|
21721
|
+
capScope: "system",
|
|
21722
|
+
addonId: null,
|
|
21723
|
+
access: "view"
|
|
21724
|
+
},
|
|
21725
|
+
"llm.getUsage": {
|
|
21726
|
+
capName: "llm",
|
|
21727
|
+
capScope: "system",
|
|
21728
|
+
addonId: null,
|
|
21729
|
+
access: "view"
|
|
21730
|
+
},
|
|
21731
|
+
"llm.installModel": {
|
|
21732
|
+
capName: "llm",
|
|
21733
|
+
capScope: "system",
|
|
21734
|
+
addonId: null,
|
|
21735
|
+
access: "create"
|
|
21736
|
+
},
|
|
21737
|
+
"llm.listModelCatalog": {
|
|
21738
|
+
capName: "llm",
|
|
21739
|
+
capScope: "system",
|
|
21740
|
+
addonId: null,
|
|
21741
|
+
access: "view"
|
|
21742
|
+
},
|
|
21743
|
+
"llm.listModels": {
|
|
21744
|
+
capName: "llm",
|
|
21745
|
+
capScope: "system",
|
|
21746
|
+
addonId: null,
|
|
21747
|
+
access: "view"
|
|
21748
|
+
},
|
|
21749
|
+
"llm.listNodeModels": {
|
|
21750
|
+
capName: "llm",
|
|
21751
|
+
capScope: "system",
|
|
21752
|
+
addonId: null,
|
|
21753
|
+
access: "view"
|
|
21754
|
+
},
|
|
21755
|
+
"llm.listProfileKinds": {
|
|
21756
|
+
capName: "llm",
|
|
21757
|
+
capScope: "system",
|
|
21758
|
+
addonId: null,
|
|
21759
|
+
access: "view"
|
|
21760
|
+
},
|
|
21761
|
+
"llm.listProfiles": {
|
|
21762
|
+
capName: "llm",
|
|
21763
|
+
capScope: "system",
|
|
21764
|
+
addonId: null,
|
|
21765
|
+
access: "view"
|
|
21766
|
+
},
|
|
21767
|
+
"llm.listRuntimeNodes": {
|
|
21768
|
+
capName: "llm",
|
|
21769
|
+
capScope: "system",
|
|
21770
|
+
addonId: null,
|
|
21771
|
+
access: "view"
|
|
21772
|
+
},
|
|
21773
|
+
"llm.setDefault": {
|
|
21774
|
+
capName: "llm",
|
|
21775
|
+
capScope: "system",
|
|
21776
|
+
addonId: null,
|
|
21777
|
+
access: "create"
|
|
21778
|
+
},
|
|
21779
|
+
"llm.startRuntime": {
|
|
21780
|
+
capName: "llm",
|
|
21781
|
+
capScope: "system",
|
|
21782
|
+
addonId: null,
|
|
21783
|
+
access: "create"
|
|
21784
|
+
},
|
|
21785
|
+
"llm.stopRuntime": {
|
|
21786
|
+
capName: "llm",
|
|
21787
|
+
capScope: "system",
|
|
21788
|
+
addonId: null,
|
|
21789
|
+
access: "create"
|
|
21790
|
+
},
|
|
21791
|
+
"llm.testProfile": {
|
|
21792
|
+
capName: "llm",
|
|
21793
|
+
capScope: "system",
|
|
21794
|
+
addonId: null,
|
|
21795
|
+
access: "create"
|
|
21796
|
+
},
|
|
21797
|
+
"llm.upsertProfile": {
|
|
21798
|
+
capName: "llm",
|
|
21799
|
+
capScope: "system",
|
|
21800
|
+
addonId: null,
|
|
21801
|
+
access: "create"
|
|
21802
|
+
},
|
|
21803
|
+
"llmRuntime.complete": {
|
|
21804
|
+
capName: "llm-runtime",
|
|
21805
|
+
capScope: "system",
|
|
21806
|
+
addonId: null,
|
|
21807
|
+
access: "create"
|
|
21808
|
+
},
|
|
21809
|
+
"llmRuntime.deleteModel": {
|
|
21810
|
+
capName: "llm-runtime",
|
|
21811
|
+
capScope: "system",
|
|
21812
|
+
addonId: null,
|
|
21813
|
+
access: "delete"
|
|
21814
|
+
},
|
|
21815
|
+
"llmRuntime.ensureStarted": {
|
|
21816
|
+
capName: "llm-runtime",
|
|
21817
|
+
capScope: "system",
|
|
21818
|
+
addonId: null,
|
|
21819
|
+
access: "create"
|
|
21820
|
+
},
|
|
21821
|
+
"llmRuntime.getDiskUsage": {
|
|
21822
|
+
capName: "llm-runtime",
|
|
21823
|
+
capScope: "system",
|
|
21824
|
+
addonId: null,
|
|
21825
|
+
access: "view"
|
|
21826
|
+
},
|
|
21827
|
+
"llmRuntime.installModel": {
|
|
21828
|
+
capName: "llm-runtime",
|
|
21829
|
+
capScope: "system",
|
|
21830
|
+
addonId: null,
|
|
21831
|
+
access: "create"
|
|
21832
|
+
},
|
|
21833
|
+
"llmRuntime.listLocalModels": {
|
|
21834
|
+
capName: "llm-runtime",
|
|
21835
|
+
capScope: "system",
|
|
21836
|
+
addonId: null,
|
|
21837
|
+
access: "view"
|
|
21838
|
+
},
|
|
21839
|
+
"llmRuntime.status": {
|
|
21840
|
+
capName: "llm-runtime",
|
|
21841
|
+
capScope: "system",
|
|
21842
|
+
addonId: null,
|
|
21843
|
+
access: "view"
|
|
21844
|
+
},
|
|
21845
|
+
"llmRuntime.stop": {
|
|
21846
|
+
capName: "llm-runtime",
|
|
21847
|
+
capScope: "system",
|
|
21848
|
+
addonId: null,
|
|
21849
|
+
access: "create"
|
|
21850
|
+
},
|
|
20826
21851
|
"localNetwork.getAllowedAddresses": {
|
|
20827
21852
|
capName: "local-network",
|
|
20828
21853
|
capScope: "system",
|
|
@@ -21453,6 +22478,12 @@ Object.freeze({
|
|
|
21453
22478
|
addonId: null,
|
|
21454
22479
|
access: "delete"
|
|
21455
22480
|
},
|
|
22481
|
+
"pipelineAnalytics.deleteTracks": {
|
|
22482
|
+
capName: "pipeline-analytics",
|
|
22483
|
+
capScope: "device",
|
|
22484
|
+
addonId: null,
|
|
22485
|
+
access: "delete"
|
|
22486
|
+
},
|
|
21456
22487
|
"pipelineAnalytics.getActiveTracks": {
|
|
21457
22488
|
capName: "pipeline-analytics",
|
|
21458
22489
|
capScope: "device",
|
|
@@ -21495,6 +22526,12 @@ Object.freeze({
|
|
|
21495
22526
|
addonId: null,
|
|
21496
22527
|
access: "view"
|
|
21497
22528
|
},
|
|
22529
|
+
"pipelineAnalytics.getSensorEvents": {
|
|
22530
|
+
capName: "pipeline-analytics",
|
|
22531
|
+
capScope: "device",
|
|
22532
|
+
addonId: null,
|
|
22533
|
+
access: "view"
|
|
22534
|
+
},
|
|
21498
22535
|
"pipelineAnalytics.getTrack": {
|
|
21499
22536
|
capName: "pipeline-analytics",
|
|
21500
22537
|
capScope: "device",
|
|
@@ -21507,6 +22544,18 @@ Object.freeze({
|
|
|
21507
22544
|
addonId: null,
|
|
21508
22545
|
access: "view"
|
|
21509
22546
|
},
|
|
22547
|
+
"pipelineAnalytics.listEventKinds": {
|
|
22548
|
+
capName: "pipeline-analytics",
|
|
22549
|
+
capScope: "device",
|
|
22550
|
+
addonId: null,
|
|
22551
|
+
access: "view"
|
|
22552
|
+
},
|
|
22553
|
+
"pipelineAnalytics.listRecentTracks": {
|
|
22554
|
+
capName: "pipeline-analytics",
|
|
22555
|
+
capScope: "device",
|
|
22556
|
+
addonId: null,
|
|
22557
|
+
access: "view"
|
|
22558
|
+
},
|
|
21510
22559
|
"pipelineAnalytics.listTracks": {
|
|
21511
22560
|
capName: "pipeline-analytics",
|
|
21512
22561
|
capScope: "device",
|
|
@@ -21519,12 +22568,24 @@ Object.freeze({
|
|
|
21519
22568
|
addonId: null,
|
|
21520
22569
|
access: "create"
|
|
21521
22570
|
},
|
|
22571
|
+
"pipelineAnalytics.pruneTracksBefore": {
|
|
22572
|
+
capName: "pipeline-analytics",
|
|
22573
|
+
capScope: "device",
|
|
22574
|
+
addonId: null,
|
|
22575
|
+
access: "create"
|
|
22576
|
+
},
|
|
21522
22577
|
"pipelineAnalytics.searchObjectEvents": {
|
|
21523
22578
|
capName: "pipeline-analytics",
|
|
21524
22579
|
capScope: "device",
|
|
21525
22580
|
addonId: null,
|
|
21526
22581
|
access: "view"
|
|
21527
22582
|
},
|
|
22583
|
+
"pipelineAnalytics.wipeAllAnalytics": {
|
|
22584
|
+
capName: "pipeline-analytics",
|
|
22585
|
+
capScope: "device",
|
|
22586
|
+
addonId: null,
|
|
22587
|
+
access: "delete"
|
|
22588
|
+
},
|
|
21528
22589
|
"pipelineExecutor.cacheFrameInPool": {
|
|
21529
22590
|
capName: "pipeline-executor",
|
|
21530
22591
|
capScope: "system",
|
|
@@ -22029,18 +23090,42 @@ Object.freeze({
|
|
|
22029
23090
|
addonId: null,
|
|
22030
23091
|
access: "create"
|
|
22031
23092
|
},
|
|
23093
|
+
"plateGallery.assignPlate": {
|
|
23094
|
+
capName: "plate-gallery",
|
|
23095
|
+
capScope: "system",
|
|
23096
|
+
addonId: null,
|
|
23097
|
+
access: "create"
|
|
23098
|
+
},
|
|
23099
|
+
"plateGallery.assignPlates": {
|
|
23100
|
+
capName: "plate-gallery",
|
|
23101
|
+
capScope: "system",
|
|
23102
|
+
addonId: null,
|
|
23103
|
+
access: "create"
|
|
23104
|
+
},
|
|
22032
23105
|
"plateGallery.correctPlateText": {
|
|
22033
23106
|
capName: "plate-gallery",
|
|
22034
23107
|
capScope: "system",
|
|
22035
23108
|
addonId: null,
|
|
22036
23109
|
access: "create"
|
|
22037
23110
|
},
|
|
23111
|
+
"plateGallery.createVehicle": {
|
|
23112
|
+
capName: "plate-gallery",
|
|
23113
|
+
capScope: "system",
|
|
23114
|
+
addonId: null,
|
|
23115
|
+
access: "create"
|
|
23116
|
+
},
|
|
22038
23117
|
"plateGallery.deletePlate": {
|
|
22039
23118
|
capName: "plate-gallery",
|
|
22040
23119
|
capScope: "system",
|
|
22041
23120
|
addonId: null,
|
|
22042
23121
|
access: "delete"
|
|
22043
23122
|
},
|
|
23123
|
+
"plateGallery.deleteVehicle": {
|
|
23124
|
+
capName: "plate-gallery",
|
|
23125
|
+
capScope: "system",
|
|
23126
|
+
addonId: null,
|
|
23127
|
+
access: "delete"
|
|
23128
|
+
},
|
|
22044
23129
|
"plateGallery.getPlateByTrack": {
|
|
22045
23130
|
capName: "plate-gallery",
|
|
22046
23131
|
capScope: "system",
|
|
@@ -22059,6 +23144,30 @@ Object.freeze({
|
|
|
22059
23144
|
addonId: null,
|
|
22060
23145
|
access: "view"
|
|
22061
23146
|
},
|
|
23147
|
+
"plateGallery.listVehicles": {
|
|
23148
|
+
capName: "plate-gallery",
|
|
23149
|
+
capScope: "system",
|
|
23150
|
+
addonId: null,
|
|
23151
|
+
access: "view"
|
|
23152
|
+
},
|
|
23153
|
+
"plateGallery.listVehicleSamples": {
|
|
23154
|
+
capName: "plate-gallery",
|
|
23155
|
+
capScope: "system",
|
|
23156
|
+
addonId: null,
|
|
23157
|
+
access: "view"
|
|
23158
|
+
},
|
|
23159
|
+
"plateGallery.removeVehicleSample": {
|
|
23160
|
+
capName: "plate-gallery",
|
|
23161
|
+
capScope: "system",
|
|
23162
|
+
addonId: null,
|
|
23163
|
+
access: "delete"
|
|
23164
|
+
},
|
|
23165
|
+
"plateGallery.renameVehicle": {
|
|
23166
|
+
capName: "plate-gallery",
|
|
23167
|
+
capScope: "system",
|
|
23168
|
+
addonId: null,
|
|
23169
|
+
access: "create"
|
|
23170
|
+
},
|
|
22062
23171
|
"plateGallery.searchPlates": {
|
|
22063
23172
|
capName: "plate-gallery",
|
|
22064
23173
|
capScope: "system",
|
|
@@ -22071,6 +23180,18 @@ Object.freeze({
|
|
|
22071
23180
|
addonId: null,
|
|
22072
23181
|
access: "view"
|
|
22073
23182
|
},
|
|
23183
|
+
"plateGallery.unassignPlate": {
|
|
23184
|
+
capName: "plate-gallery",
|
|
23185
|
+
capScope: "system",
|
|
23186
|
+
addonId: null,
|
|
23187
|
+
access: "create"
|
|
23188
|
+
},
|
|
23189
|
+
"plateGallery.unassignPlates": {
|
|
23190
|
+
capName: "plate-gallery",
|
|
23191
|
+
capScope: "system",
|
|
23192
|
+
addonId: null,
|
|
23193
|
+
access: "create"
|
|
23194
|
+
},
|
|
22074
23195
|
"platformProbe.getCapabilities": {
|
|
22075
23196
|
capName: "platform-probe",
|
|
22076
23197
|
capScope: "system",
|
|
@@ -22263,6 +23384,48 @@ Object.freeze({
|
|
|
22263
23384
|
addonId: null,
|
|
22264
23385
|
access: "create"
|
|
22265
23386
|
},
|
|
23387
|
+
"sceneMonitor.captureReference": {
|
|
23388
|
+
capName: "scene-monitor",
|
|
23389
|
+
capScope: "device",
|
|
23390
|
+
addonId: null,
|
|
23391
|
+
access: "create"
|
|
23392
|
+
},
|
|
23393
|
+
"sceneMonitor.createScene": {
|
|
23394
|
+
capName: "scene-monitor",
|
|
23395
|
+
capScope: "device",
|
|
23396
|
+
addonId: null,
|
|
23397
|
+
access: "create"
|
|
23398
|
+
},
|
|
23399
|
+
"sceneMonitor.deleteReference": {
|
|
23400
|
+
capName: "scene-monitor",
|
|
23401
|
+
capScope: "device",
|
|
23402
|
+
addonId: null,
|
|
23403
|
+
access: "delete"
|
|
23404
|
+
},
|
|
23405
|
+
"sceneMonitor.deleteScene": {
|
|
23406
|
+
capName: "scene-monitor",
|
|
23407
|
+
capScope: "device",
|
|
23408
|
+
addonId: null,
|
|
23409
|
+
access: "delete"
|
|
23410
|
+
},
|
|
23411
|
+
"sceneMonitor.listScenes": {
|
|
23412
|
+
capName: "scene-monitor",
|
|
23413
|
+
capScope: "device",
|
|
23414
|
+
addonId: null,
|
|
23415
|
+
access: "view"
|
|
23416
|
+
},
|
|
23417
|
+
"sceneMonitor.recheckNow": {
|
|
23418
|
+
capName: "scene-monitor",
|
|
23419
|
+
capScope: "device",
|
|
23420
|
+
addonId: null,
|
|
23421
|
+
access: "create"
|
|
23422
|
+
},
|
|
23423
|
+
"sceneMonitor.updateScene": {
|
|
23424
|
+
capName: "scene-monitor",
|
|
23425
|
+
capScope: "device",
|
|
23426
|
+
addonId: null,
|
|
23427
|
+
access: "create"
|
|
23428
|
+
},
|
|
22266
23429
|
"scriptRunner.run": {
|
|
22267
23430
|
capName: "script-runner",
|
|
22268
23431
|
capScope: "device",
|
|
@@ -23347,6 +24510,7 @@ Object.freeze({
|
|
|
23347
24510
|
Object.freeze({
|
|
23348
24511
|
"broker": "broker",
|
|
23349
24512
|
"device-export": "device-export",
|
|
24513
|
+
"llm": "ai",
|
|
23350
24514
|
"mesh-network": "mesh",
|
|
23351
24515
|
"mqtt-broker": "broker",
|
|
23352
24516
|
"network-access": "ingress",
|
|
@@ -23379,7 +24543,7 @@ object({
|
|
|
23379
24543
|
schemaVersion: literal(1)
|
|
23380
24544
|
});
|
|
23381
24545
|
//#endregion
|
|
23382
|
-
//#region ../system/dist/model-download-service-
|
|
24546
|
+
//#region ../system/dist/model-download-service-Cp9f4dk6.mjs
|
|
23383
24547
|
/** Build fetch headers, including HF auth token for huggingface.co URLs */
|
|
23384
24548
|
function buildHeaders(url) {
|
|
23385
24549
|
const headers = { "User-Agent": "CamStack/1.0" };
|