@camstack/addon-advanced-notifier 1.1.22 → 1.1.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/addon.js +986 -40
- package/dist/addon.mjs +986 -40
- package/package.json +5 -1
package/dist/addon.js
CHANGED
|
@@ -4291,6 +4291,14 @@ function object(shape, params) {
|
|
|
4291
4291
|
...normalizeParams(params)
|
|
4292
4292
|
});
|
|
4293
4293
|
}
|
|
4294
|
+
function looseObject(shape, params) {
|
|
4295
|
+
return new ZodObject({
|
|
4296
|
+
type: "object",
|
|
4297
|
+
shape,
|
|
4298
|
+
catchall: unknown(),
|
|
4299
|
+
...normalizeParams(params)
|
|
4300
|
+
});
|
|
4301
|
+
}
|
|
4294
4302
|
var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
|
|
4295
4303
|
$ZodUnion.init(inst, def);
|
|
4296
4304
|
ZodType.init(inst, def);
|
|
@@ -4632,7 +4640,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4632
4640
|
return inst;
|
|
4633
4641
|
}
|
|
4634
4642
|
//#endregion
|
|
4635
|
-
//#region ../types/dist/sleep-
|
|
4643
|
+
//#region ../types/dist/sleep-DkhOVOjW.mjs
|
|
4636
4644
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4637
4645
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4638
4646
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5042,10 +5050,43 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5042
5050
|
EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
|
|
5043
5051
|
EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
|
|
5044
5052
|
EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
|
|
5053
|
+
/**
|
|
5054
|
+
* Unified track-lifecycle event: ONE category carrying `phase:
|
|
5055
|
+
* 'start' | 'update' | 'end'` with a rich, typed
|
|
5056
|
+
* `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
|
|
5057
|
+
* `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
|
|
5058
|
+
* pair — a consumer subscribes once and branches on `phase`.
|
|
5059
|
+
*/
|
|
5060
|
+
EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
|
|
5061
|
+
/**
|
|
5062
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5063
|
+
* (`phase:'start'`). Kept as a soft alias — no known subscribers.
|
|
5064
|
+
*/
|
|
5045
5065
|
EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
|
|
5066
|
+
/**
|
|
5067
|
+
* @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
|
|
5068
|
+
* (`phase:'end'`). Kept as a soft alias — no known subscribers.
|
|
5069
|
+
*/
|
|
5046
5070
|
EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
|
|
5047
5071
|
EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
|
|
5048
5072
|
EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
|
|
5073
|
+
/**
|
|
5074
|
+
* Fired by `addon-post-analysis` whenever a gallery face row changes:
|
|
5075
|
+
* `kind:'buffered'` a new detected face was persisted, `'assigned'` /
|
|
5076
|
+
* `'unassigned'` its identity link changed, `'deleted'` the row was
|
|
5077
|
+
* removed. Telemetry semantics (D8): a lost event only delays a refresh,
|
|
5078
|
+
* never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
|
|
5079
|
+
*/
|
|
5080
|
+
EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
|
|
5081
|
+
/**
|
|
5082
|
+
* Fired by `addon-post-analysis` whenever a gallery plate row changes:
|
|
5083
|
+
* `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
|
|
5084
|
+
* `'assigned'` / `'unassigned'` its vehicle link changed
|
|
5085
|
+
* (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
|
|
5086
|
+
* semantics (D8): a lost event only delays a refresh, never a correctness
|
|
5087
|
+
* issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
|
|
5088
|
+
*/
|
|
5089
|
+
EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
|
|
5049
5090
|
EventCategory["FrigateLiveEvent"] = "frigate.live-event";
|
|
5050
5091
|
EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
|
|
5051
5092
|
/**
|
|
@@ -6874,7 +6915,8 @@ var MODEL_FORMATS = [
|
|
|
6874
6915
|
"coreml",
|
|
6875
6916
|
"openvino",
|
|
6876
6917
|
"tflite",
|
|
6877
|
-
"pt"
|
|
6918
|
+
"pt",
|
|
6919
|
+
"gguf"
|
|
6878
6920
|
];
|
|
6879
6921
|
/**
|
|
6880
6922
|
* Multi-file format payload.
|
|
@@ -6918,7 +6960,8 @@ var ModelFormatsSchema = object({
|
|
|
6918
6960
|
coreml: ModelFormatEntrySchema.optional(),
|
|
6919
6961
|
openvino: ModelFormatEntrySchema.optional(),
|
|
6920
6962
|
tflite: ModelFormatEntrySchema.optional(),
|
|
6921
|
-
pt: ModelFormatEntrySchema.optional()
|
|
6963
|
+
pt: ModelFormatEntrySchema.optional(),
|
|
6964
|
+
gguf: ModelFormatEntrySchema.optional()
|
|
6922
6965
|
});
|
|
6923
6966
|
/**
|
|
6924
6967
|
* Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
|
|
@@ -10427,7 +10470,8 @@ var ModelFormatSchema$1 = _enum([
|
|
|
10427
10470
|
"coreml",
|
|
10428
10471
|
"openvino",
|
|
10429
10472
|
"tflite",
|
|
10430
|
-
"pt"
|
|
10473
|
+
"pt",
|
|
10474
|
+
"gguf"
|
|
10431
10475
|
]);
|
|
10432
10476
|
var PipelineSlotSchema = _enum([
|
|
10433
10477
|
"detector",
|
|
@@ -10682,7 +10726,15 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
10682
10726
|
image: _instanceof(Uint8Array).optional(),
|
|
10683
10727
|
referenceImage: string().optional(),
|
|
10684
10728
|
deviceId: number().optional(),
|
|
10685
|
-
sessionId: string().optional()
|
|
10729
|
+
sessionId: string().optional(),
|
|
10730
|
+
/**
|
|
10731
|
+
* Execution plane. 'full' (default) runs the whole tree — benchmark,
|
|
10732
|
+
* reference-image, and detail-subtree calls. 'frame' is the live
|
|
10733
|
+
* per-frame dispatch: ONLY root-plane steps run; crop children
|
|
10734
|
+
* (inputClasses ≠ null) are skipped and served per-track via
|
|
10735
|
+
* pipelineRunner.runDetailSubtree (two-plane design).
|
|
10736
|
+
*/
|
|
10737
|
+
plane: _enum(["full", "frame"]).optional()
|
|
10686
10738
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
10687
10739
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
10688
10740
|
steps: array(PipelineStepInputSchema).min(1),
|
|
@@ -10825,6 +10877,28 @@ var NativeCropResultSchema = object({
|
|
|
10825
10877
|
width: number().int().positive(),
|
|
10826
10878
|
height: number().int().positive()
|
|
10827
10879
|
});
|
|
10880
|
+
/** Parent detection context passed to `runDetailSubtree` — the crop's
|
|
10881
|
+
* originating detection, in FRAME-space coordinates. Reuses
|
|
10882
|
+
* `NativeCropBboxSchema`'s `{x,y,w,h}` shape (same numeric fields; here
|
|
10883
|
+
* the coordinates are frame-space rather than getNativeCrop's
|
|
10884
|
+
* normalized [0,1] convention). */
|
|
10885
|
+
var DetailParentSchema = object({
|
|
10886
|
+
bbox: NativeCropBboxSchema,
|
|
10887
|
+
className: string()
|
|
10888
|
+
});
|
|
10889
|
+
/** One child-step result from `runDetailSubtree` — an embedding, label,
|
|
10890
|
+
* or refined detection produced by running the crop-subtree on a
|
|
10891
|
+
* single tracked detection. */
|
|
10892
|
+
var DetailResultSchema = object({
|
|
10893
|
+
stepId: string(),
|
|
10894
|
+
className: string(),
|
|
10895
|
+
score: number(),
|
|
10896
|
+
/** FRAME-space bbox (already mapped back from crop space). */
|
|
10897
|
+
bbox: NativeCropBboxSchema.optional(),
|
|
10898
|
+
embedding: string().optional(),
|
|
10899
|
+
label: string().optional(),
|
|
10900
|
+
alignedCropJpeg: string().optional()
|
|
10901
|
+
});
|
|
10828
10902
|
/**
|
|
10829
10903
|
* Per-camera tunable ranges + defaults. Single source of truth used
|
|
10830
10904
|
* by both the Zod data schema (validation + default fallback) and
|
|
@@ -11085,7 +11159,13 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
11085
11159
|
handle: FrameHandleSchema,
|
|
11086
11160
|
bbox: NativeCropBboxSchema,
|
|
11087
11161
|
maxWidth: number().int().positive().optional()
|
|
11088
|
-
}), NativeCropResultSchema.nullable())
|
|
11162
|
+
}), NativeCropResultSchema.nullable()), method(object({
|
|
11163
|
+
deviceId: number(),
|
|
11164
|
+
frameHandle: FrameHandleSchema.optional(),
|
|
11165
|
+
cropJpeg: string().optional(),
|
|
11166
|
+
parent: DetailParentSchema,
|
|
11167
|
+
steps: array(string()).optional()
|
|
11168
|
+
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" });
|
|
11089
11169
|
object({
|
|
11090
11170
|
detected: boolean(),
|
|
11091
11171
|
/** Ms epoch of the last detected-true observation. Null if never detected. */
|
|
@@ -11697,6 +11777,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
|
|
|
11697
11777
|
deviceId: number(),
|
|
11698
11778
|
status: PtzAutotrackStatusSchema
|
|
11699
11779
|
});
|
|
11780
|
+
/**
|
|
11781
|
+
* scene-monitor — device-scoped reference-region state cap. An operator marks
|
|
11782
|
+
* a rect ROI on a camera frame and names one or more states; the engine
|
|
11783
|
+
* (pipeline-analytics, designated post-processing node) reports which state is
|
|
11784
|
+
* active on an ongoing basis. Two operator-selectable check modes share every-
|
|
11785
|
+
* thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
|
|
11786
|
+
* vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
|
|
11787
|
+
*
|
|
11788
|
+
* D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
|
|
11789
|
+
* derives the device-detail contribution; the provider carries NO hand-written
|
|
11790
|
+
* settings-contribution methods. `status.kind:'push'` — the engine pushes on
|
|
11791
|
+
* every hysteresis flip / availability change; consumers never poll.
|
|
11792
|
+
*/
|
|
11793
|
+
/** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
|
|
11794
|
+
* be added without a wire break (matching falls back to any-condition refs). */
|
|
11795
|
+
var SceneConditionSchema = string();
|
|
11796
|
+
/** One captured reference — condition-tagged, model-version-gated. `embedding`
|
|
11797
|
+
* is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
|
|
11798
|
+
var SceneReferenceSchema = object({
|
|
11799
|
+
embedding: array(number()),
|
|
11800
|
+
modelId: string(),
|
|
11801
|
+
condition: SceneConditionSchema,
|
|
11802
|
+
capturedAt: number(),
|
|
11803
|
+
thumbnailMediaId: string().optional()
|
|
11804
|
+
});
|
|
11805
|
+
var SceneMonitorStateSchema = object({
|
|
11806
|
+
id: string(),
|
|
11807
|
+
label: string(),
|
|
11808
|
+
references: array(SceneReferenceSchema),
|
|
11809
|
+
textPrompts: array(string()).optional(),
|
|
11810
|
+
referenceCount: number(),
|
|
11811
|
+
currentlyMatched: boolean()
|
|
11812
|
+
});
|
|
11813
|
+
/** Per-mode comparator params in a discriminated union so an `llm` scene never
|
|
11814
|
+
* carries similarity knobs and vice-versa. */
|
|
11815
|
+
var SceneCheckSchema = discriminatedUnion("mode", [object({
|
|
11816
|
+
mode: literal("similarity"),
|
|
11817
|
+
threshold: number().min(0).max(1),
|
|
11818
|
+
hysteresisCount: number().int().positive()
|
|
11819
|
+
}), object({
|
|
11820
|
+
mode: literal("llm"),
|
|
11821
|
+
prompt: string(),
|
|
11822
|
+
profileId: string().optional(),
|
|
11823
|
+
hysteresisCount: number().int().positive()
|
|
11824
|
+
})]);
|
|
11825
|
+
var SceneMonitorSchema = object({
|
|
11826
|
+
id: string(),
|
|
11827
|
+
label: string(),
|
|
11828
|
+
roi: MaskRectShapeSchema,
|
|
11829
|
+
enabled: boolean(),
|
|
11830
|
+
triggerMode: _enum([
|
|
11831
|
+
"periodic",
|
|
11832
|
+
"on-motion",
|
|
11833
|
+
"both"
|
|
11834
|
+
]),
|
|
11835
|
+
checkIntervalSec: number().optional(),
|
|
11836
|
+
check: SceneCheckSchema,
|
|
11837
|
+
states: array(SceneMonitorStateSchema),
|
|
11838
|
+
currentStateId: string().nullable(),
|
|
11839
|
+
lastCheckedAt: number().nullable(),
|
|
11840
|
+
lastConfidence: number().nullable(),
|
|
11841
|
+
currentCondition: SceneConditionSchema.nullable(),
|
|
11842
|
+
availability: _enum(["ok", "unavailable"]),
|
|
11843
|
+
unavailableReason: string().nullable()
|
|
11844
|
+
});
|
|
11845
|
+
var SceneMonitorStatusSchema = object({
|
|
11846
|
+
monitors: array(SceneMonitorSchema),
|
|
11847
|
+
lastFetchedAt: number()
|
|
11848
|
+
});
|
|
11849
|
+
DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
|
|
11850
|
+
deviceId: number(),
|
|
11851
|
+
label: string(),
|
|
11852
|
+
roi: MaskRectShapeSchema,
|
|
11853
|
+
check: SceneCheckSchema,
|
|
11854
|
+
triggerMode: _enum([
|
|
11855
|
+
"periodic",
|
|
11856
|
+
"on-motion",
|
|
11857
|
+
"both"
|
|
11858
|
+
]).optional(),
|
|
11859
|
+
checkIntervalSec: number().optional()
|
|
11860
|
+
}), SceneMonitorSchema, {
|
|
11861
|
+
kind: "mutation",
|
|
11862
|
+
auth: "admin"
|
|
11863
|
+
}), method(object({
|
|
11864
|
+
deviceId: number(),
|
|
11865
|
+
monitorId: string(),
|
|
11866
|
+
patch: object({
|
|
11867
|
+
label: string().optional(),
|
|
11868
|
+
roi: MaskRectShapeSchema.optional(),
|
|
11869
|
+
enabled: boolean().optional(),
|
|
11870
|
+
triggerMode: _enum([
|
|
11871
|
+
"periodic",
|
|
11872
|
+
"on-motion",
|
|
11873
|
+
"both"
|
|
11874
|
+
]).optional(),
|
|
11875
|
+
checkIntervalSec: number().optional(),
|
|
11876
|
+
check: SceneCheckSchema.optional()
|
|
11877
|
+
})
|
|
11878
|
+
}), _void(), {
|
|
11879
|
+
kind: "mutation",
|
|
11880
|
+
auth: "admin"
|
|
11881
|
+
}), method(object({
|
|
11882
|
+
deviceId: number(),
|
|
11883
|
+
monitorId: string()
|
|
11884
|
+
}), _void(), {
|
|
11885
|
+
kind: "mutation",
|
|
11886
|
+
auth: "admin"
|
|
11887
|
+
}), method(object({
|
|
11888
|
+
deviceId: number(),
|
|
11889
|
+
monitorId: string(),
|
|
11890
|
+
stateId: string().optional(),
|
|
11891
|
+
label: string().optional(),
|
|
11892
|
+
condition: SceneConditionSchema.optional()
|
|
11893
|
+
}), object({
|
|
11894
|
+
stateId: string(),
|
|
11895
|
+
referenceCount: number()
|
|
11896
|
+
}), {
|
|
11897
|
+
kind: "mutation",
|
|
11898
|
+
auth: "admin"
|
|
11899
|
+
}), method(object({
|
|
11900
|
+
deviceId: number(),
|
|
11901
|
+
monitorId: string(),
|
|
11902
|
+
stateId: string(),
|
|
11903
|
+
index: number()
|
|
11904
|
+
}), _void(), {
|
|
11905
|
+
kind: "mutation",
|
|
11906
|
+
auth: "admin"
|
|
11907
|
+
}), method(object({
|
|
11908
|
+
deviceId: number(),
|
|
11909
|
+
monitorId: string()
|
|
11910
|
+
}), _void(), {
|
|
11911
|
+
kind: "mutation",
|
|
11912
|
+
auth: "admin"
|
|
11913
|
+
});
|
|
11700
11914
|
object({
|
|
11701
11915
|
/** Whether the script is currently executing. */
|
|
11702
11916
|
isRunning: boolean(),
|
|
@@ -12718,7 +12932,12 @@ var NotificationRuleConditionsSchema = object({
|
|
|
12718
12932
|
clipDescription: object({
|
|
12719
12933
|
text: string().min(1),
|
|
12720
12934
|
minSimilarity: number().min(0).max(1)
|
|
12721
|
-
}).optional()
|
|
12935
|
+
}).optional(),
|
|
12936
|
+
/** Match events whose recognized-entity label (face identity name or plate
|
|
12937
|
+
* vehicle name, propagated onto `event.data.label`) is one of these values.
|
|
12938
|
+
* Empty/absent → unaffected (back-compat). Enables "notify me when <named
|
|
12939
|
+
* vehicle/person> is seen". */
|
|
12940
|
+
labels: array(string()).readonly().optional()
|
|
12722
12941
|
});
|
|
12723
12942
|
var NotificationRuleTemplateSchema = object({
|
|
12724
12943
|
title: string(),
|
|
@@ -12988,11 +13207,19 @@ method(object({
|
|
|
12988
13207
|
* login page needs NO change.
|
|
12989
13208
|
*
|
|
12990
13209
|
* - `widget` — a Module-Federation widget the login page mounts (via
|
|
12991
|
-
* `loadRemoteBundle`) for an in-page ceremony.
|
|
12992
|
-
*
|
|
12993
|
-
*
|
|
12994
|
-
*
|
|
12995
|
-
*
|
|
13210
|
+
* `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
|
|
13211
|
+
* stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
|
|
13212
|
+
* mechanism kept for future use; no shipped addon uses it on the login
|
|
13213
|
+
* page (the passkey ceremony below runs natively in the shell instead).
|
|
13214
|
+
*
|
|
13215
|
+
* - `passkey` — a declarative WebAuthn ceremony the shell renders
|
|
13216
|
+
* natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
|
|
13217
|
+
* a remotely-loaded bundle). Carries the addon's effective `rpId` /
|
|
13218
|
+
* `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
|
|
13219
|
+
* can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
|
|
13220
|
+
* fetching any remote code pre-auth. Contribution stays unconditional —
|
|
13221
|
+
* enrollment state is never leaked pre-auth; visibility is a shell
|
|
13222
|
+
* decision.
|
|
12996
13223
|
*
|
|
12997
13224
|
* Every contribution carries a `stage`:
|
|
12998
13225
|
* - `primary` — shown on the first credentials screen (OIDC /
|
|
@@ -13006,30 +13233,45 @@ method(object({
|
|
|
13006
13233
|
*/
|
|
13007
13234
|
/** When a login method renders in the two-phase login flow. */
|
|
13008
13235
|
var LoginStageEnum = _enum(["primary", "second-factor"]);
|
|
13009
|
-
/** One login-method contribution — redirect button
|
|
13010
|
-
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13011
|
-
|
|
13012
|
-
|
|
13013
|
-
|
|
13014
|
-
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
13018
|
-
|
|
13019
|
-
|
|
13020
|
-
|
|
13021
|
-
|
|
13022
|
-
|
|
13023
|
-
|
|
13024
|
-
|
|
13025
|
-
|
|
13026
|
-
|
|
13027
|
-
|
|
13028
|
-
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
|
|
13032
|
-
|
|
13236
|
+
/** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
|
|
13237
|
+
var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
13238
|
+
object({
|
|
13239
|
+
kind: literal("redirect"),
|
|
13240
|
+
/** Stable id within the login-method set (e.g. `auth-oidc/google`). */
|
|
13241
|
+
id: string(),
|
|
13242
|
+
/** Operator-facing button label. */
|
|
13243
|
+
label: string(),
|
|
13244
|
+
/** lucide-react icon name. */
|
|
13245
|
+
icon: string().optional(),
|
|
13246
|
+
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
13247
|
+
startUrl: string(),
|
|
13248
|
+
stage: LoginStageEnum
|
|
13249
|
+
}),
|
|
13250
|
+
object({
|
|
13251
|
+
kind: literal("widget"),
|
|
13252
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
|
|
13253
|
+
id: string(),
|
|
13254
|
+
/** Owning addon id — drives the public bundle URL + the MF namespace. */
|
|
13255
|
+
addonId: string(),
|
|
13256
|
+
/** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
|
|
13257
|
+
bundle: string(),
|
|
13258
|
+
/** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
|
|
13259
|
+
remote: WidgetRemoteSchema,
|
|
13260
|
+
stage: LoginStageEnum
|
|
13261
|
+
}),
|
|
13262
|
+
object({
|
|
13263
|
+
kind: literal("passkey"),
|
|
13264
|
+
/** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
|
|
13265
|
+
id: string(),
|
|
13266
|
+
/** Operator-facing button label. */
|
|
13267
|
+
label: string(),
|
|
13268
|
+
stage: LoginStageEnum,
|
|
13269
|
+
/** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
|
|
13270
|
+
rpId: string(),
|
|
13271
|
+
/** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
|
|
13272
|
+
origin: string().nullable()
|
|
13273
|
+
})
|
|
13274
|
+
]);
|
|
13033
13275
|
method(_void(), array(LoginMethodContributionSchema).readonly());
|
|
13034
13276
|
/**
|
|
13035
13277
|
* Orchestrator-side destination metadata. The orchestrator computes
|
|
@@ -14857,14 +15099,14 @@ var TargetKindCapsSchema = object({
|
|
|
14857
15099
|
* the union is large and not meant for runtime validation here; the exported
|
|
14858
15100
|
* `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
|
|
14859
15101
|
*/
|
|
14860
|
-
var ConfigSchemaPassthrough = unknown();
|
|
15102
|
+
var ConfigSchemaPassthrough$1 = unknown();
|
|
14861
15103
|
var TargetKindSchema = object({
|
|
14862
15104
|
kind: string(),
|
|
14863
15105
|
label: string(),
|
|
14864
15106
|
icon: string(),
|
|
14865
15107
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
14866
15108
|
addonId: string(),
|
|
14867
|
-
configSchema: ConfigSchemaPassthrough,
|
|
15109
|
+
configSchema: ConfigSchemaPassthrough$1,
|
|
14868
15110
|
supportsDiscovery: boolean(),
|
|
14869
15111
|
caps: TargetKindCapsSchema
|
|
14870
15112
|
});
|
|
@@ -14931,6 +15173,298 @@ var notificationOutputCapability = {
|
|
|
14931
15173
|
}
|
|
14932
15174
|
};
|
|
14933
15175
|
/**
|
|
15176
|
+
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
15177
|
+
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
15178
|
+
* caps stay wire-compatible without a circular cap→cap import.
|
|
15179
|
+
*
|
|
15180
|
+
* Errors are a discriminated-union RESULT, never thrown: the shape survives
|
|
15181
|
+
* every transport tier structurally, and failed calls still write usage rows.
|
|
15182
|
+
* Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
|
|
15183
|
+
*/
|
|
15184
|
+
var LlmUsageSchema = object({
|
|
15185
|
+
inputTokens: number(),
|
|
15186
|
+
outputTokens: number()
|
|
15187
|
+
});
|
|
15188
|
+
var LlmErrorCodeSchema = _enum([
|
|
15189
|
+
"timeout",
|
|
15190
|
+
"rate-limited",
|
|
15191
|
+
"auth",
|
|
15192
|
+
"refusal",
|
|
15193
|
+
"bad-request",
|
|
15194
|
+
"unavailable",
|
|
15195
|
+
"no-profile",
|
|
15196
|
+
"budget-exceeded",
|
|
15197
|
+
"adapter-error"
|
|
15198
|
+
]);
|
|
15199
|
+
var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
|
|
15200
|
+
ok: literal(true),
|
|
15201
|
+
text: string(),
|
|
15202
|
+
model: string(),
|
|
15203
|
+
usage: LlmUsageSchema,
|
|
15204
|
+
truncated: boolean(),
|
|
15205
|
+
latencyMs: number()
|
|
15206
|
+
}), object({
|
|
15207
|
+
ok: literal(false),
|
|
15208
|
+
code: LlmErrorCodeSchema,
|
|
15209
|
+
message: string(),
|
|
15210
|
+
retryAfterMs: number().optional()
|
|
15211
|
+
})]);
|
|
15212
|
+
/**
|
|
15213
|
+
* `Uint8Array` is the sanctioned binary convention — superjson + the UDS
|
|
15214
|
+
* MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
|
|
15215
|
+
* notification-output.cap.ts:27-31 precedents).
|
|
15216
|
+
*/
|
|
15217
|
+
var LlmImageSchema = object({
|
|
15218
|
+
bytes: _instanceof(Uint8Array),
|
|
15219
|
+
mimeType: string()
|
|
15220
|
+
});
|
|
15221
|
+
var LlmGenerateBaseInputSchema = object({
|
|
15222
|
+
/** Collection routing (the notification-output posture). */
|
|
15223
|
+
addonId: string().optional(),
|
|
15224
|
+
/** Explicit profile; else the resolution chain (spec §3). */
|
|
15225
|
+
profileId: string().optional(),
|
|
15226
|
+
/** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
|
|
15227
|
+
consumer: string(),
|
|
15228
|
+
system: string().optional(),
|
|
15229
|
+
/** v1: single-turn. `messages[]` is a v2 additive field. */
|
|
15230
|
+
prompt: string(),
|
|
15231
|
+
/** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
|
|
15232
|
+
jsonSchema: record(string(), unknown()).optional(),
|
|
15233
|
+
/** Per-call override of the profile default. */
|
|
15234
|
+
maxTokens: number().int().positive().optional(),
|
|
15235
|
+
temperature: number().optional()
|
|
15236
|
+
});
|
|
15237
|
+
/**
|
|
15238
|
+
* `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
|
|
15239
|
+
* on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
|
|
15240
|
+
* a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
|
|
15241
|
+
* cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
|
|
15242
|
+
* this only through the `llm` cap's methods.
|
|
15243
|
+
*
|
|
15244
|
+
* One running llama-server child per node in v1 (models are RAM-heavy).
|
|
15245
|
+
* Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
|
|
15246
|
+
* watchdog — operator decision #3).
|
|
15247
|
+
*/
|
|
15248
|
+
var ManagedModelRefSchema = discriminatedUnion("kind", [
|
|
15249
|
+
object({
|
|
15250
|
+
kind: literal("catalog"),
|
|
15251
|
+
catalogId: string()
|
|
15252
|
+
}),
|
|
15253
|
+
object({
|
|
15254
|
+
kind: literal("url"),
|
|
15255
|
+
url: string(),
|
|
15256
|
+
sha256: string().optional()
|
|
15257
|
+
}),
|
|
15258
|
+
object({
|
|
15259
|
+
kind: literal("path"),
|
|
15260
|
+
path: string()
|
|
15261
|
+
})
|
|
15262
|
+
]);
|
|
15263
|
+
var ManagedRuntimeConfigSchema = object({
|
|
15264
|
+
/** WHERE the runtime lives — hub or any agent. */
|
|
15265
|
+
nodeId: string(),
|
|
15266
|
+
/** Closed for v1; 'ollama' is a v2 candidate. */
|
|
15267
|
+
engine: _enum(["llama-cpp"]),
|
|
15268
|
+
model: ManagedModelRefSchema,
|
|
15269
|
+
contextSize: number().int().default(4096),
|
|
15270
|
+
/** 0 = CPU-only. */
|
|
15271
|
+
gpuLayers: number().int().default(0),
|
|
15272
|
+
/** Default: cpus-2, clamped ≥1 (resolved node-side). */
|
|
15273
|
+
threads: number().int().optional(),
|
|
15274
|
+
/** Concurrent slots. */
|
|
15275
|
+
parallel: number().int().default(1),
|
|
15276
|
+
/** Else lazy: first generate boots it. */
|
|
15277
|
+
autoStart: boolean().default(false),
|
|
15278
|
+
/** 0 = never; frees RAM after quiet periods. */
|
|
15279
|
+
idleStopMinutes: number().int().default(30)
|
|
15280
|
+
});
|
|
15281
|
+
var LlmRuntimeStatusSchema = object({
|
|
15282
|
+
/** Status is ALWAYS node-qualified. */
|
|
15283
|
+
nodeId: string(),
|
|
15284
|
+
state: _enum([
|
|
15285
|
+
"stopped",
|
|
15286
|
+
"downloading",
|
|
15287
|
+
"starting",
|
|
15288
|
+
"ready",
|
|
15289
|
+
"crashed",
|
|
15290
|
+
"failed"
|
|
15291
|
+
]),
|
|
15292
|
+
pid: number().optional(),
|
|
15293
|
+
port: number().optional(),
|
|
15294
|
+
modelPath: string().optional(),
|
|
15295
|
+
modelId: string().optional(),
|
|
15296
|
+
downloadProgress: number().min(0).max(1).optional(),
|
|
15297
|
+
lastError: string().optional(),
|
|
15298
|
+
crashesInWindow: number(),
|
|
15299
|
+
/** Child RSS (sampled best-effort). */
|
|
15300
|
+
memoryBytes: number().optional(),
|
|
15301
|
+
vramBytes: number().optional()
|
|
15302
|
+
});
|
|
15303
|
+
var LlmNodeModelSchema = object({
|
|
15304
|
+
file: string(),
|
|
15305
|
+
sizeBytes: number(),
|
|
15306
|
+
catalogId: string().optional(),
|
|
15307
|
+
installedAt: number().optional()
|
|
15308
|
+
});
|
|
15309
|
+
var LlmRuntimeDiskUsageSchema = object({
|
|
15310
|
+
nodeId: string(),
|
|
15311
|
+
modelsBytes: number(),
|
|
15312
|
+
freeBytes: number().optional()
|
|
15313
|
+
});
|
|
15314
|
+
method(LlmGenerateBaseInputSchema.extend({
|
|
15315
|
+
images: array(LlmImageSchema).optional(),
|
|
15316
|
+
runtime: ManagedRuntimeConfigSchema,
|
|
15317
|
+
/** The managed profile's timeout, threaded by the hub provider. */
|
|
15318
|
+
timeoutMs: number().int().positive().optional()
|
|
15319
|
+
}), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
15320
|
+
kind: "mutation",
|
|
15321
|
+
auth: "admin"
|
|
15322
|
+
}), method(object({}), _void(), {
|
|
15323
|
+
kind: "mutation",
|
|
15324
|
+
auth: "admin"
|
|
15325
|
+
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
15326
|
+
kind: "mutation",
|
|
15327
|
+
auth: "admin"
|
|
15328
|
+
}), method(object({ file: string() }), _void(), {
|
|
15329
|
+
kind: "mutation",
|
|
15330
|
+
auth: "admin"
|
|
15331
|
+
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
15332
|
+
/**
|
|
15333
|
+
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
15334
|
+
* methods concat-fan across providers; single-row methods route to ONE
|
|
15335
|
+
* provider by the `addonId` in the call input (the notification-output
|
|
15336
|
+
* posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
|
|
15337
|
+
* (hub-placed); the cap stays open for future providers.
|
|
15338
|
+
*
|
|
15339
|
+
* Profiles are ROWS (data), not addons: one row = one usable model endpoint.
|
|
15340
|
+
* `apiKey` is a password field — providers REDACT it on read and merge on
|
|
15341
|
+
* write; a stored key NEVER round-trips to a client.
|
|
15342
|
+
*/
|
|
15343
|
+
var LlmProfileKindSchema = _enum([
|
|
15344
|
+
"openai-compatible",
|
|
15345
|
+
"openai",
|
|
15346
|
+
"anthropic",
|
|
15347
|
+
"google",
|
|
15348
|
+
"managed-local"
|
|
15349
|
+
]);
|
|
15350
|
+
var LlmProfileSchema = object({
|
|
15351
|
+
id: string(),
|
|
15352
|
+
name: string(),
|
|
15353
|
+
kind: LlmProfileKindSchema,
|
|
15354
|
+
/** Stamped by the provider — keeps the fanned catalog routable. */
|
|
15355
|
+
addonId: string(),
|
|
15356
|
+
enabled: boolean(),
|
|
15357
|
+
/** Vendor model id, or the managed runtime's loaded model. */
|
|
15358
|
+
model: string(),
|
|
15359
|
+
/** Required for openai-compatible; override for cloud kinds. */
|
|
15360
|
+
baseUrl: string().optional(),
|
|
15361
|
+
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
15362
|
+
apiKey: string().optional(),
|
|
15363
|
+
supportsVision: boolean(),
|
|
15364
|
+
temperature: number().min(0).max(2).optional(),
|
|
15365
|
+
maxTokens: number().int().positive().optional(),
|
|
15366
|
+
timeoutMs: number().int().positive().default(6e4),
|
|
15367
|
+
extraHeaders: record(string(), string()).optional(),
|
|
15368
|
+
/** kind === 'managed-local' only (spec §4). */
|
|
15369
|
+
runtime: ManagedRuntimeConfigSchema.optional()
|
|
15370
|
+
});
|
|
15371
|
+
/** ConfigUISchema tree passed through untyped on the wire (the
|
|
15372
|
+
* notification-output `ConfigSchemaPassthrough` precedent at
|
|
15373
|
+
* notification-output.cap.ts:151); the exported TS type re-tightens it. */
|
|
15374
|
+
var ConfigSchemaPassthrough = unknown();
|
|
15375
|
+
var LlmProfileKindDescriptorSchema = object({
|
|
15376
|
+
kind: LlmProfileKindSchema,
|
|
15377
|
+
label: string(),
|
|
15378
|
+
icon: string(),
|
|
15379
|
+
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
15380
|
+
addonId: string(),
|
|
15381
|
+
configSchema: ConfigSchemaPassthrough
|
|
15382
|
+
});
|
|
15383
|
+
var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
|
|
15384
|
+
var LlmDefaultSchema = object({
|
|
15385
|
+
selector: LlmDefaultSelectorSchema,
|
|
15386
|
+
profileId: string()
|
|
15387
|
+
});
|
|
15388
|
+
/** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
|
|
15389
|
+
var LlmUsageRollupSchema = object({
|
|
15390
|
+
day: string(),
|
|
15391
|
+
consumer: string(),
|
|
15392
|
+
profileId: string(),
|
|
15393
|
+
calls: number(),
|
|
15394
|
+
okCalls: number(),
|
|
15395
|
+
errorCalls: number(),
|
|
15396
|
+
inputTokens: number(),
|
|
15397
|
+
outputTokens: number(),
|
|
15398
|
+
avgLatencyMs: number()
|
|
15399
|
+
});
|
|
15400
|
+
/** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
|
|
15401
|
+
var ManagedModelCatalogEntrySchema = object({
|
|
15402
|
+
id: string(),
|
|
15403
|
+
label: string(),
|
|
15404
|
+
family: string(),
|
|
15405
|
+
purpose: _enum(["text", "vision"]),
|
|
15406
|
+
url: string(),
|
|
15407
|
+
sha256: string(),
|
|
15408
|
+
sizeBytes: number(),
|
|
15409
|
+
quantization: string(),
|
|
15410
|
+
/** Load-time guidance shown in the picker. */
|
|
15411
|
+
minRamBytes: number(),
|
|
15412
|
+
contextSizeDefault: number().int(),
|
|
15413
|
+
/** Vision models: companion projector file. */
|
|
15414
|
+
mmprojUrl: string().optional()
|
|
15415
|
+
});
|
|
15416
|
+
var LlmRuntimeNodeSchema = object({
|
|
15417
|
+
nodeId: string(),
|
|
15418
|
+
reachable: boolean(),
|
|
15419
|
+
status: LlmRuntimeStatusSchema.optional(),
|
|
15420
|
+
disk: LlmRuntimeDiskUsageSchema.optional(),
|
|
15421
|
+
error: string().optional()
|
|
15422
|
+
});
|
|
15423
|
+
var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
|
|
15424
|
+
var ProfileRefInputSchema = object({
|
|
15425
|
+
addonId: string(),
|
|
15426
|
+
profileId: string()
|
|
15427
|
+
});
|
|
15428
|
+
method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
15429
|
+
kind: "mutation",
|
|
15430
|
+
auth: "admin"
|
|
15431
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15432
|
+
kind: "mutation",
|
|
15433
|
+
auth: "admin"
|
|
15434
|
+
}), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
|
|
15435
|
+
kind: "mutation",
|
|
15436
|
+
auth: "admin"
|
|
15437
|
+
}), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
|
|
15438
|
+
selector: LlmDefaultSelectorSchema,
|
|
15439
|
+
profileId: string().nullable()
|
|
15440
|
+
}), _void(), {
|
|
15441
|
+
kind: "mutation",
|
|
15442
|
+
auth: "admin"
|
|
15443
|
+
}), method(object({
|
|
15444
|
+
since: number().optional(),
|
|
15445
|
+
until: number().optional(),
|
|
15446
|
+
consumer: string().optional(),
|
|
15447
|
+
profileId: string().optional()
|
|
15448
|
+
}), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
|
|
15449
|
+
nodeId: string(),
|
|
15450
|
+
model: ManagedModelRefSchema
|
|
15451
|
+
}), _void(), {
|
|
15452
|
+
kind: "mutation",
|
|
15453
|
+
auth: "admin"
|
|
15454
|
+
}), method(object({
|
|
15455
|
+
nodeId: string(),
|
|
15456
|
+
file: string()
|
|
15457
|
+
}), _void(), {
|
|
15458
|
+
kind: "mutation",
|
|
15459
|
+
auth: "admin"
|
|
15460
|
+
}), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
|
|
15461
|
+
kind: "mutation",
|
|
15462
|
+
auth: "admin"
|
|
15463
|
+
}), method(ProfileRefInputSchema, _void(), {
|
|
15464
|
+
kind: "mutation",
|
|
15465
|
+
auth: "admin"
|
|
15466
|
+
});
|
|
15467
|
+
/**
|
|
14934
15468
|
* Zod schemas for persisted record types.
|
|
14935
15469
|
*
|
|
14936
15470
|
* These schemas serve as the single source of truth for types that are
|
|
@@ -15146,6 +15680,10 @@ var TrackSchema = object({
|
|
|
15146
15680
|
snapshots: array(TrackSnapshotSchema).readonly(),
|
|
15147
15681
|
/** Deduplicated zones the track has entered at least once. */
|
|
15148
15682
|
zonesVisited: array(string()).readonly(),
|
|
15683
|
+
/** Deduplicated set of detector classes observed for this track over its
|
|
15684
|
+
* life (a track may be reclassified, e.g. person→vehicle). Absent on
|
|
15685
|
+
* legacy rows written before class accumulation shipped. */
|
|
15686
|
+
classes: array(string()).readonly().optional(),
|
|
15149
15687
|
/** Cumulative normalized distance travelled (0..1 units = full frame width). */
|
|
15150
15688
|
totalDistance: number(),
|
|
15151
15689
|
state: TrackStateSchema,
|
|
@@ -15307,7 +15845,7 @@ var KeyEventSchema = object({
|
|
|
15307
15845
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
15308
15846
|
windowMs: number().optional()
|
|
15309
15847
|
});
|
|
15310
|
-
|
|
15848
|
+
object({
|
|
15311
15849
|
trackId: string(),
|
|
15312
15850
|
className: string(),
|
|
15313
15851
|
confidence: number(),
|
|
@@ -15315,6 +15853,23 @@ var TrackedDetectionSchema = object({
|
|
|
15315
15853
|
zones: array(string()).readonly(),
|
|
15316
15854
|
state: TrackStateSchema
|
|
15317
15855
|
});
|
|
15856
|
+
var OverlayDetectionSchema = looseObject({
|
|
15857
|
+
id: string(),
|
|
15858
|
+
kind: _enum(["first-level", "detail"]),
|
|
15859
|
+
macroClass: string(),
|
|
15860
|
+
score: number(),
|
|
15861
|
+
bbox: object({
|
|
15862
|
+
x: number(),
|
|
15863
|
+
y: number(),
|
|
15864
|
+
width: number(),
|
|
15865
|
+
height: number()
|
|
15866
|
+
}),
|
|
15867
|
+
labels: array(looseObject({
|
|
15868
|
+
label: string(),
|
|
15869
|
+
score: number()
|
|
15870
|
+
})).readonly(),
|
|
15871
|
+
parentId: string().optional()
|
|
15872
|
+
});
|
|
15318
15873
|
var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
|
|
15319
15874
|
var SearchObjectEventsInput = object({
|
|
15320
15875
|
text: string(),
|
|
@@ -15325,6 +15880,20 @@ var SearchObjectEventsInput = object({
|
|
|
15325
15880
|
limit: number().default(50),
|
|
15326
15881
|
minScore: number().min(0).max(1).default(.2)
|
|
15327
15882
|
});
|
|
15883
|
+
var TrackCascadeCountsSchema = object({
|
|
15884
|
+
/** Persisted track roots deleted (authoritative). */
|
|
15885
|
+
tracks: number().int(),
|
|
15886
|
+
/** Object events removed with their tracks (best-effort; see note above). */
|
|
15887
|
+
events: number().int(),
|
|
15888
|
+
/** Track/face/plate-owned media removed (best-effort). Never identity media. */
|
|
15889
|
+
media: number().int(),
|
|
15890
|
+
/** Unassigned (non-enrolled) face reads removed (best-effort). */
|
|
15891
|
+
faces: number().int(),
|
|
15892
|
+
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
15893
|
+
plates: number().int(),
|
|
15894
|
+
/** Per-track CLIP search vectors removed (best-effort). */
|
|
15895
|
+
embeddings: number().int()
|
|
15896
|
+
});
|
|
15328
15897
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
15329
15898
|
deviceId: number(),
|
|
15330
15899
|
trackId: string()
|
|
@@ -15356,6 +15925,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15356
15925
|
}), {
|
|
15357
15926
|
kind: "mutation",
|
|
15358
15927
|
auth: "admin"
|
|
15928
|
+
}), method(object({
|
|
15929
|
+
deviceId: number(),
|
|
15930
|
+
cutoffMs: number()
|
|
15931
|
+
}), TrackCascadeCountsSchema, {
|
|
15932
|
+
kind: "mutation",
|
|
15933
|
+
auth: "admin"
|
|
15934
|
+
}), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
|
|
15935
|
+
kind: "mutation",
|
|
15936
|
+
auth: "admin"
|
|
15937
|
+
}), method(object({
|
|
15938
|
+
deviceId: number(),
|
|
15939
|
+
trackIds: array(string()).min(1)
|
|
15940
|
+
}), object({
|
|
15941
|
+
deleted: number().int(),
|
|
15942
|
+
failed: array(string()).readonly()
|
|
15943
|
+
}), {
|
|
15944
|
+
kind: "mutation",
|
|
15945
|
+
auth: "admin"
|
|
15359
15946
|
}), method(object({
|
|
15360
15947
|
eventId: string(),
|
|
15361
15948
|
kind: MediaFileKindEnum.optional()
|
|
@@ -15364,7 +15951,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
15364
15951
|
timestamp: number(),
|
|
15365
15952
|
frameWidth: number(),
|
|
15366
15953
|
frameHeight: number(),
|
|
15367
|
-
detections: array(
|
|
15954
|
+
detections: array(OverlayDetectionSchema).readonly()
|
|
15368
15955
|
}), object({
|
|
15369
15956
|
deviceId: number(),
|
|
15370
15957
|
trackId: string(),
|
|
@@ -18133,6 +18720,24 @@ DeviceType.Camera, method(object({
|
|
|
18133
18720
|
deviceId: number(),
|
|
18134
18721
|
status: OsdStatusSchema
|
|
18135
18722
|
});
|
|
18723
|
+
var VehicleSchema = object({
|
|
18724
|
+
id: string(),
|
|
18725
|
+
name: string(),
|
|
18726
|
+
sampleCount: number().int().nonnegative(),
|
|
18727
|
+
coverMediaKey: string().optional(),
|
|
18728
|
+
/** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
|
|
18729
|
+
coverBase64: string().optional()
|
|
18730
|
+
});
|
|
18731
|
+
var VehicleSampleInfoSchema = object({
|
|
18732
|
+
id: string(),
|
|
18733
|
+
/** The plate text this sample enrolled (self-labeling — no embedding). */
|
|
18734
|
+
text: string(),
|
|
18735
|
+
/** OCR confidence of the enrolled read (0..1). */
|
|
18736
|
+
score: number(),
|
|
18737
|
+
addedAt: number().int(),
|
|
18738
|
+
deviceId: number().int().optional(),
|
|
18739
|
+
base64: string().optional()
|
|
18740
|
+
});
|
|
18136
18741
|
var PlateInfoSchema = object({
|
|
18137
18742
|
plateId: string(),
|
|
18138
18743
|
deviceId: number().int(),
|
|
@@ -18144,6 +18749,16 @@ var PlateInfoSchema = object({
|
|
|
18144
18749
|
score: number(),
|
|
18145
18750
|
/** True when the text was manually corrected (exempt from retention). */
|
|
18146
18751
|
corrected: boolean(),
|
|
18752
|
+
/** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
|
|
18753
|
+
recognizedVehicleId: string().optional(),
|
|
18754
|
+
/** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
|
|
18755
|
+
vehicleName: string().optional(),
|
|
18756
|
+
/** True once the read was assigned to a vehicle (enrolled as a sample). */
|
|
18757
|
+
assigned: boolean(),
|
|
18758
|
+
/** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
|
|
18759
|
+
plateBbox: BoundingBoxSchema.optional(),
|
|
18760
|
+
/** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
|
|
18761
|
+
keyFrameMediaKey: string().optional(),
|
|
18147
18762
|
base64: string().optional()
|
|
18148
18763
|
});
|
|
18149
18764
|
var MediaFileLiteSchema = object({
|
|
@@ -18183,6 +18798,48 @@ method(object({
|
|
|
18183
18798
|
}), method(object({ plateId: string() }), _void(), {
|
|
18184
18799
|
kind: "mutation",
|
|
18185
18800
|
auth: "admin"
|
|
18801
|
+
}), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
18802
|
+
kind: "mutation",
|
|
18803
|
+
auth: "admin"
|
|
18804
|
+
}), method(object({
|
|
18805
|
+
id: string(),
|
|
18806
|
+
name: string().min(1)
|
|
18807
|
+
}), _void(), {
|
|
18808
|
+
kind: "mutation",
|
|
18809
|
+
auth: "admin"
|
|
18810
|
+
}), method(object({ id: string() }), _void(), {
|
|
18811
|
+
kind: "mutation",
|
|
18812
|
+
auth: "admin"
|
|
18813
|
+
}), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
|
|
18814
|
+
vehicleId: string(),
|
|
18815
|
+
sampleId: string()
|
|
18816
|
+
}), _void(), {
|
|
18817
|
+
kind: "mutation",
|
|
18818
|
+
auth: "admin"
|
|
18819
|
+
}), method(object({
|
|
18820
|
+
plateId: string(),
|
|
18821
|
+
vehicleId: string()
|
|
18822
|
+
}), _void(), {
|
|
18823
|
+
kind: "mutation",
|
|
18824
|
+
auth: "admin"
|
|
18825
|
+
}), method(object({ plateId: string() }), _void(), {
|
|
18826
|
+
kind: "mutation",
|
|
18827
|
+
auth: "admin"
|
|
18828
|
+
}), method(object({
|
|
18829
|
+
plateIds: array(string()).min(1),
|
|
18830
|
+
vehicleId: string()
|
|
18831
|
+
}), object({
|
|
18832
|
+
assigned: number().int(),
|
|
18833
|
+
failed: array(string()).readonly()
|
|
18834
|
+
}), {
|
|
18835
|
+
kind: "mutation",
|
|
18836
|
+
auth: "admin"
|
|
18837
|
+
}), method(object({ plateIds: array(string()).min(1) }), object({
|
|
18838
|
+
unassigned: number().int(),
|
|
18839
|
+
failed: array(string()).readonly()
|
|
18840
|
+
}), {
|
|
18841
|
+
kind: "mutation",
|
|
18842
|
+
auth: "admin"
|
|
18186
18843
|
});
|
|
18187
18844
|
var ModelFormatSchema = _enum(MODEL_FORMATS);
|
|
18188
18845
|
var HwAccelBackendInputSchema = _enum([
|
|
@@ -20728,6 +21385,168 @@ Object.freeze({
|
|
|
20728
21385
|
addonId: null,
|
|
20729
21386
|
access: "create"
|
|
20730
21387
|
},
|
|
21388
|
+
"llm.deleteModel": {
|
|
21389
|
+
capName: "llm",
|
|
21390
|
+
capScope: "system",
|
|
21391
|
+
addonId: null,
|
|
21392
|
+
access: "delete"
|
|
21393
|
+
},
|
|
21394
|
+
"llm.deleteProfile": {
|
|
21395
|
+
capName: "llm",
|
|
21396
|
+
capScope: "system",
|
|
21397
|
+
addonId: null,
|
|
21398
|
+
access: "delete"
|
|
21399
|
+
},
|
|
21400
|
+
"llm.generate": {
|
|
21401
|
+
capName: "llm",
|
|
21402
|
+
capScope: "system",
|
|
21403
|
+
addonId: null,
|
|
21404
|
+
access: "create"
|
|
21405
|
+
},
|
|
21406
|
+
"llm.generateVision": {
|
|
21407
|
+
capName: "llm",
|
|
21408
|
+
capScope: "system",
|
|
21409
|
+
addonId: null,
|
|
21410
|
+
access: "create"
|
|
21411
|
+
},
|
|
21412
|
+
"llm.getDefaults": {
|
|
21413
|
+
capName: "llm",
|
|
21414
|
+
capScope: "system",
|
|
21415
|
+
addonId: null,
|
|
21416
|
+
access: "view"
|
|
21417
|
+
},
|
|
21418
|
+
"llm.getRuntimeStatus": {
|
|
21419
|
+
capName: "llm",
|
|
21420
|
+
capScope: "system",
|
|
21421
|
+
addonId: null,
|
|
21422
|
+
access: "view"
|
|
21423
|
+
},
|
|
21424
|
+
"llm.getUsage": {
|
|
21425
|
+
capName: "llm",
|
|
21426
|
+
capScope: "system",
|
|
21427
|
+
addonId: null,
|
|
21428
|
+
access: "view"
|
|
21429
|
+
},
|
|
21430
|
+
"llm.installModel": {
|
|
21431
|
+
capName: "llm",
|
|
21432
|
+
capScope: "system",
|
|
21433
|
+
addonId: null,
|
|
21434
|
+
access: "create"
|
|
21435
|
+
},
|
|
21436
|
+
"llm.listModelCatalog": {
|
|
21437
|
+
capName: "llm",
|
|
21438
|
+
capScope: "system",
|
|
21439
|
+
addonId: null,
|
|
21440
|
+
access: "view"
|
|
21441
|
+
},
|
|
21442
|
+
"llm.listModels": {
|
|
21443
|
+
capName: "llm",
|
|
21444
|
+
capScope: "system",
|
|
21445
|
+
addonId: null,
|
|
21446
|
+
access: "view"
|
|
21447
|
+
},
|
|
21448
|
+
"llm.listNodeModels": {
|
|
21449
|
+
capName: "llm",
|
|
21450
|
+
capScope: "system",
|
|
21451
|
+
addonId: null,
|
|
21452
|
+
access: "view"
|
|
21453
|
+
},
|
|
21454
|
+
"llm.listProfileKinds": {
|
|
21455
|
+
capName: "llm",
|
|
21456
|
+
capScope: "system",
|
|
21457
|
+
addonId: null,
|
|
21458
|
+
access: "view"
|
|
21459
|
+
},
|
|
21460
|
+
"llm.listProfiles": {
|
|
21461
|
+
capName: "llm",
|
|
21462
|
+
capScope: "system",
|
|
21463
|
+
addonId: null,
|
|
21464
|
+
access: "view"
|
|
21465
|
+
},
|
|
21466
|
+
"llm.listRuntimeNodes": {
|
|
21467
|
+
capName: "llm",
|
|
21468
|
+
capScope: "system",
|
|
21469
|
+
addonId: null,
|
|
21470
|
+
access: "view"
|
|
21471
|
+
},
|
|
21472
|
+
"llm.setDefault": {
|
|
21473
|
+
capName: "llm",
|
|
21474
|
+
capScope: "system",
|
|
21475
|
+
addonId: null,
|
|
21476
|
+
access: "create"
|
|
21477
|
+
},
|
|
21478
|
+
"llm.startRuntime": {
|
|
21479
|
+
capName: "llm",
|
|
21480
|
+
capScope: "system",
|
|
21481
|
+
addonId: null,
|
|
21482
|
+
access: "create"
|
|
21483
|
+
},
|
|
21484
|
+
"llm.stopRuntime": {
|
|
21485
|
+
capName: "llm",
|
|
21486
|
+
capScope: "system",
|
|
21487
|
+
addonId: null,
|
|
21488
|
+
access: "create"
|
|
21489
|
+
},
|
|
21490
|
+
"llm.testProfile": {
|
|
21491
|
+
capName: "llm",
|
|
21492
|
+
capScope: "system",
|
|
21493
|
+
addonId: null,
|
|
21494
|
+
access: "create"
|
|
21495
|
+
},
|
|
21496
|
+
"llm.upsertProfile": {
|
|
21497
|
+
capName: "llm",
|
|
21498
|
+
capScope: "system",
|
|
21499
|
+
addonId: null,
|
|
21500
|
+
access: "create"
|
|
21501
|
+
},
|
|
21502
|
+
"llmRuntime.complete": {
|
|
21503
|
+
capName: "llm-runtime",
|
|
21504
|
+
capScope: "system",
|
|
21505
|
+
addonId: null,
|
|
21506
|
+
access: "create"
|
|
21507
|
+
},
|
|
21508
|
+
"llmRuntime.deleteModel": {
|
|
21509
|
+
capName: "llm-runtime",
|
|
21510
|
+
capScope: "system",
|
|
21511
|
+
addonId: null,
|
|
21512
|
+
access: "delete"
|
|
21513
|
+
},
|
|
21514
|
+
"llmRuntime.ensureStarted": {
|
|
21515
|
+
capName: "llm-runtime",
|
|
21516
|
+
capScope: "system",
|
|
21517
|
+
addonId: null,
|
|
21518
|
+
access: "create"
|
|
21519
|
+
},
|
|
21520
|
+
"llmRuntime.getDiskUsage": {
|
|
21521
|
+
capName: "llm-runtime",
|
|
21522
|
+
capScope: "system",
|
|
21523
|
+
addonId: null,
|
|
21524
|
+
access: "view"
|
|
21525
|
+
},
|
|
21526
|
+
"llmRuntime.installModel": {
|
|
21527
|
+
capName: "llm-runtime",
|
|
21528
|
+
capScope: "system",
|
|
21529
|
+
addonId: null,
|
|
21530
|
+
access: "create"
|
|
21531
|
+
},
|
|
21532
|
+
"llmRuntime.listLocalModels": {
|
|
21533
|
+
capName: "llm-runtime",
|
|
21534
|
+
capScope: "system",
|
|
21535
|
+
addonId: null,
|
|
21536
|
+
access: "view"
|
|
21537
|
+
},
|
|
21538
|
+
"llmRuntime.status": {
|
|
21539
|
+
capName: "llm-runtime",
|
|
21540
|
+
capScope: "system",
|
|
21541
|
+
addonId: null,
|
|
21542
|
+
access: "view"
|
|
21543
|
+
},
|
|
21544
|
+
"llmRuntime.stop": {
|
|
21545
|
+
capName: "llm-runtime",
|
|
21546
|
+
capScope: "system",
|
|
21547
|
+
addonId: null,
|
|
21548
|
+
access: "create"
|
|
21549
|
+
},
|
|
20731
21550
|
"localNetwork.getAllowedAddresses": {
|
|
20732
21551
|
capName: "local-network",
|
|
20733
21552
|
capScope: "system",
|
|
@@ -21358,6 +22177,12 @@ Object.freeze({
|
|
|
21358
22177
|
addonId: null,
|
|
21359
22178
|
access: "delete"
|
|
21360
22179
|
},
|
|
22180
|
+
"pipelineAnalytics.deleteTracks": {
|
|
22181
|
+
capName: "pipeline-analytics",
|
|
22182
|
+
capScope: "device",
|
|
22183
|
+
addonId: null,
|
|
22184
|
+
access: "delete"
|
|
22185
|
+
},
|
|
21361
22186
|
"pipelineAnalytics.getActiveTracks": {
|
|
21362
22187
|
capName: "pipeline-analytics",
|
|
21363
22188
|
capScope: "device",
|
|
@@ -21424,12 +22249,24 @@ Object.freeze({
|
|
|
21424
22249
|
addonId: null,
|
|
21425
22250
|
access: "create"
|
|
21426
22251
|
},
|
|
22252
|
+
"pipelineAnalytics.pruneTracksBefore": {
|
|
22253
|
+
capName: "pipeline-analytics",
|
|
22254
|
+
capScope: "device",
|
|
22255
|
+
addonId: null,
|
|
22256
|
+
access: "create"
|
|
22257
|
+
},
|
|
21427
22258
|
"pipelineAnalytics.searchObjectEvents": {
|
|
21428
22259
|
capName: "pipeline-analytics",
|
|
21429
22260
|
capScope: "device",
|
|
21430
22261
|
addonId: null,
|
|
21431
22262
|
access: "view"
|
|
21432
22263
|
},
|
|
22264
|
+
"pipelineAnalytics.wipeAllAnalytics": {
|
|
22265
|
+
capName: "pipeline-analytics",
|
|
22266
|
+
capScope: "device",
|
|
22267
|
+
addonId: null,
|
|
22268
|
+
access: "delete"
|
|
22269
|
+
},
|
|
21433
22270
|
"pipelineExecutor.cacheFrameInPool": {
|
|
21434
22271
|
capName: "pipeline-executor",
|
|
21435
22272
|
capScope: "system",
|
|
@@ -21928,18 +22765,48 @@ Object.freeze({
|
|
|
21928
22765
|
addonId: null,
|
|
21929
22766
|
access: "create"
|
|
21930
22767
|
},
|
|
22768
|
+
"pipelineRunner.runDetailSubtree": {
|
|
22769
|
+
capName: "pipeline-runner",
|
|
22770
|
+
capScope: "system",
|
|
22771
|
+
addonId: null,
|
|
22772
|
+
access: "create"
|
|
22773
|
+
},
|
|
22774
|
+
"plateGallery.assignPlate": {
|
|
22775
|
+
capName: "plate-gallery",
|
|
22776
|
+
capScope: "system",
|
|
22777
|
+
addonId: null,
|
|
22778
|
+
access: "create"
|
|
22779
|
+
},
|
|
22780
|
+
"plateGallery.assignPlates": {
|
|
22781
|
+
capName: "plate-gallery",
|
|
22782
|
+
capScope: "system",
|
|
22783
|
+
addonId: null,
|
|
22784
|
+
access: "create"
|
|
22785
|
+
},
|
|
21931
22786
|
"plateGallery.correctPlateText": {
|
|
21932
22787
|
capName: "plate-gallery",
|
|
21933
22788
|
capScope: "system",
|
|
21934
22789
|
addonId: null,
|
|
21935
22790
|
access: "create"
|
|
21936
22791
|
},
|
|
22792
|
+
"plateGallery.createVehicle": {
|
|
22793
|
+
capName: "plate-gallery",
|
|
22794
|
+
capScope: "system",
|
|
22795
|
+
addonId: null,
|
|
22796
|
+
access: "create"
|
|
22797
|
+
},
|
|
21937
22798
|
"plateGallery.deletePlate": {
|
|
21938
22799
|
capName: "plate-gallery",
|
|
21939
22800
|
capScope: "system",
|
|
21940
22801
|
addonId: null,
|
|
21941
22802
|
access: "delete"
|
|
21942
22803
|
},
|
|
22804
|
+
"plateGallery.deleteVehicle": {
|
|
22805
|
+
capName: "plate-gallery",
|
|
22806
|
+
capScope: "system",
|
|
22807
|
+
addonId: null,
|
|
22808
|
+
access: "delete"
|
|
22809
|
+
},
|
|
21943
22810
|
"plateGallery.getPlateByTrack": {
|
|
21944
22811
|
capName: "plate-gallery",
|
|
21945
22812
|
capScope: "system",
|
|
@@ -21958,6 +22825,30 @@ Object.freeze({
|
|
|
21958
22825
|
addonId: null,
|
|
21959
22826
|
access: "view"
|
|
21960
22827
|
},
|
|
22828
|
+
"plateGallery.listVehicles": {
|
|
22829
|
+
capName: "plate-gallery",
|
|
22830
|
+
capScope: "system",
|
|
22831
|
+
addonId: null,
|
|
22832
|
+
access: "view"
|
|
22833
|
+
},
|
|
22834
|
+
"plateGallery.listVehicleSamples": {
|
|
22835
|
+
capName: "plate-gallery",
|
|
22836
|
+
capScope: "system",
|
|
22837
|
+
addonId: null,
|
|
22838
|
+
access: "view"
|
|
22839
|
+
},
|
|
22840
|
+
"plateGallery.removeVehicleSample": {
|
|
22841
|
+
capName: "plate-gallery",
|
|
22842
|
+
capScope: "system",
|
|
22843
|
+
addonId: null,
|
|
22844
|
+
access: "delete"
|
|
22845
|
+
},
|
|
22846
|
+
"plateGallery.renameVehicle": {
|
|
22847
|
+
capName: "plate-gallery",
|
|
22848
|
+
capScope: "system",
|
|
22849
|
+
addonId: null,
|
|
22850
|
+
access: "create"
|
|
22851
|
+
},
|
|
21961
22852
|
"plateGallery.searchPlates": {
|
|
21962
22853
|
capName: "plate-gallery",
|
|
21963
22854
|
capScope: "system",
|
|
@@ -21970,6 +22861,18 @@ Object.freeze({
|
|
|
21970
22861
|
addonId: null,
|
|
21971
22862
|
access: "view"
|
|
21972
22863
|
},
|
|
22864
|
+
"plateGallery.unassignPlate": {
|
|
22865
|
+
capName: "plate-gallery",
|
|
22866
|
+
capScope: "system",
|
|
22867
|
+
addonId: null,
|
|
22868
|
+
access: "create"
|
|
22869
|
+
},
|
|
22870
|
+
"plateGallery.unassignPlates": {
|
|
22871
|
+
capName: "plate-gallery",
|
|
22872
|
+
capScope: "system",
|
|
22873
|
+
addonId: null,
|
|
22874
|
+
access: "create"
|
|
22875
|
+
},
|
|
21973
22876
|
"platformProbe.getCapabilities": {
|
|
21974
22877
|
capName: "platform-probe",
|
|
21975
22878
|
capScope: "system",
|
|
@@ -22162,6 +23065,48 @@ Object.freeze({
|
|
|
22162
23065
|
addonId: null,
|
|
22163
23066
|
access: "create"
|
|
22164
23067
|
},
|
|
23068
|
+
"sceneMonitor.captureReference": {
|
|
23069
|
+
capName: "scene-monitor",
|
|
23070
|
+
capScope: "device",
|
|
23071
|
+
addonId: null,
|
|
23072
|
+
access: "create"
|
|
23073
|
+
},
|
|
23074
|
+
"sceneMonitor.createScene": {
|
|
23075
|
+
capName: "scene-monitor",
|
|
23076
|
+
capScope: "device",
|
|
23077
|
+
addonId: null,
|
|
23078
|
+
access: "create"
|
|
23079
|
+
},
|
|
23080
|
+
"sceneMonitor.deleteReference": {
|
|
23081
|
+
capName: "scene-monitor",
|
|
23082
|
+
capScope: "device",
|
|
23083
|
+
addonId: null,
|
|
23084
|
+
access: "delete"
|
|
23085
|
+
},
|
|
23086
|
+
"sceneMonitor.deleteScene": {
|
|
23087
|
+
capName: "scene-monitor",
|
|
23088
|
+
capScope: "device",
|
|
23089
|
+
addonId: null,
|
|
23090
|
+
access: "delete"
|
|
23091
|
+
},
|
|
23092
|
+
"sceneMonitor.listScenes": {
|
|
23093
|
+
capName: "scene-monitor",
|
|
23094
|
+
capScope: "device",
|
|
23095
|
+
addonId: null,
|
|
23096
|
+
access: "view"
|
|
23097
|
+
},
|
|
23098
|
+
"sceneMonitor.recheckNow": {
|
|
23099
|
+
capName: "scene-monitor",
|
|
23100
|
+
capScope: "device",
|
|
23101
|
+
addonId: null,
|
|
23102
|
+
access: "create"
|
|
23103
|
+
},
|
|
23104
|
+
"sceneMonitor.updateScene": {
|
|
23105
|
+
capName: "scene-monitor",
|
|
23106
|
+
capScope: "device",
|
|
23107
|
+
addonId: null,
|
|
23108
|
+
access: "create"
|
|
23109
|
+
},
|
|
22165
23110
|
"scriptRunner.run": {
|
|
22166
23111
|
capName: "script-runner",
|
|
22167
23112
|
capScope: "device",
|
|
@@ -23246,6 +24191,7 @@ Object.freeze({
|
|
|
23246
24191
|
Object.freeze({
|
|
23247
24192
|
"broker": "broker",
|
|
23248
24193
|
"device-export": "device-export",
|
|
24194
|
+
"llm": "ai",
|
|
23249
24195
|
"mesh-network": "mesh",
|
|
23250
24196
|
"mqtt-broker": "broker",
|
|
23251
24197
|
"network-access": "ingress",
|