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