@camstack/addon-pipeline-orchestrator 1.1.44 → 1.1.46

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/index.js CHANGED
@@ -4317,6 +4317,14 @@ function object(shape, params) {
4317
4317
  ...normalizeParams(params)
4318
4318
  });
4319
4319
  }
4320
+ function looseObject(shape, params) {
4321
+ return new ZodObject({
4322
+ type: "object",
4323
+ shape,
4324
+ catchall: unknown(),
4325
+ ...normalizeParams(params)
4326
+ });
4327
+ }
4320
4328
  var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
4321
4329
  $ZodUnion.init(inst, def);
4322
4330
  ZodType.init(inst, def);
@@ -4658,7 +4666,7 @@ function _instanceof(cls, params = {}) {
4658
4666
  return inst;
4659
4667
  }
4660
4668
  //#endregion
4661
- //#region ../types/dist/sleep-BC9Yqte7.mjs
4669
+ //#region ../types/dist/sleep-DkhOVOjW.mjs
4662
4670
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4663
4671
  EventCategory["SystemBoot"] = "system.boot";
4664
4672
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5068,10 +5076,43 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5068
5076
  EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
5069
5077
  EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
5070
5078
  EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
5079
+ /**
5080
+ * Unified track-lifecycle event: ONE category carrying `phase:
5081
+ * 'start' | 'update' | 'end'` with a rich, typed
5082
+ * `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
5083
+ * `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
5084
+ * pair — a consumer subscribes once and branches on `phase`.
5085
+ */
5086
+ EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
5087
+ /**
5088
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5089
+ * (`phase:'start'`). Kept as a soft alias — no known subscribers.
5090
+ */
5071
5091
  EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
5092
+ /**
5093
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5094
+ * (`phase:'end'`). Kept as a soft alias — no known subscribers.
5095
+ */
5072
5096
  EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
5073
5097
  EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
5074
5098
  EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
5099
+ /**
5100
+ * Fired by `addon-post-analysis` whenever a gallery face row changes:
5101
+ * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
5102
+ * `'unassigned'` its identity link changed, `'deleted'` the row was
5103
+ * removed. Telemetry semantics (D8): a lost event only delays a refresh,
5104
+ * never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
5105
+ */
5106
+ EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
5107
+ /**
5108
+ * Fired by `addon-post-analysis` whenever a gallery plate row changes:
5109
+ * `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
5110
+ * `'assigned'` / `'unassigned'` its vehicle link changed
5111
+ * (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
5112
+ * semantics (D8): a lost event only delays a refresh, never a correctness
5113
+ * issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
5114
+ */
5115
+ EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
5075
5116
  EventCategory["FrigateLiveEvent"] = "frigate.live-event";
5076
5117
  EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
5077
5118
  /**
@@ -7328,7 +7369,8 @@ var MODEL_FORMATS = [
7328
7369
  "coreml",
7329
7370
  "openvino",
7330
7371
  "tflite",
7331
- "pt"
7372
+ "pt",
7373
+ "gguf"
7332
7374
  ];
7333
7375
  /**
7334
7376
  * Multi-file format payload.
@@ -7372,7 +7414,8 @@ var ModelFormatsSchema = object({
7372
7414
  coreml: ModelFormatEntrySchema.optional(),
7373
7415
  openvino: ModelFormatEntrySchema.optional(),
7374
7416
  tflite: ModelFormatEntrySchema.optional(),
7375
- pt: ModelFormatEntrySchema.optional()
7417
+ pt: ModelFormatEntrySchema.optional(),
7418
+ gguf: ModelFormatEntrySchema.optional()
7376
7419
  });
7377
7420
  /**
7378
7421
  * Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
@@ -10928,7 +10971,8 @@ var ModelFormatSchema$1 = _enum([
10928
10971
  "coreml",
10929
10972
  "openvino",
10930
10973
  "tflite",
10931
- "pt"
10974
+ "pt",
10975
+ "gguf"
10932
10976
  ]);
10933
10977
  var PipelineSlotSchema = _enum([
10934
10978
  "detector",
@@ -11292,7 +11336,15 @@ var pipelineExecutorCapability = {
11292
11336
  image: _instanceof(Uint8Array).optional(),
11293
11337
  referenceImage: string().optional(),
11294
11338
  deviceId: number().optional(),
11295
- sessionId: string().optional()
11339
+ sessionId: string().optional(),
11340
+ /**
11341
+ * Execution plane. 'full' (default) runs the whole tree — benchmark,
11342
+ * reference-image, and detail-subtree calls. 'frame' is the live
11343
+ * per-frame dispatch: ONLY root-plane steps run; crop children
11344
+ * (inputClasses ≠ null) are skipped and served per-track via
11345
+ * pipelineRunner.runDetailSubtree (two-plane design).
11346
+ */
11347
+ plane: _enum(["full", "frame"]).optional()
11296
11348
  }), PipelineRunResultBridge, { kind: "mutation" }),
11297
11349
  /**
11298
11350
  * Batched run — N raw frames packed into one cap call. The provider
@@ -11522,6 +11574,28 @@ var NativeCropResultSchema = object({
11522
11574
  width: number().int().positive(),
11523
11575
  height: number().int().positive()
11524
11576
  });
11577
+ /** Parent detection context passed to `runDetailSubtree` — the crop's
11578
+ * originating detection, in FRAME-space coordinates. Reuses
11579
+ * `NativeCropBboxSchema`'s `{x,y,w,h}` shape (same numeric fields; here
11580
+ * the coordinates are frame-space rather than getNativeCrop's
11581
+ * normalized [0,1] convention). */
11582
+ var DetailParentSchema = object({
11583
+ bbox: NativeCropBboxSchema,
11584
+ className: string()
11585
+ });
11586
+ /** One child-step result from `runDetailSubtree` — an embedding, label,
11587
+ * or refined detection produced by running the crop-subtree on a
11588
+ * single tracked detection. */
11589
+ var DetailResultSchema = object({
11590
+ stepId: string(),
11591
+ className: string(),
11592
+ score: number(),
11593
+ /** FRAME-space bbox (already mapped back from crop space). */
11594
+ bbox: NativeCropBboxSchema.optional(),
11595
+ embedding: string().optional(),
11596
+ label: string().optional(),
11597
+ alignedCropJpeg: string().optional()
11598
+ });
11525
11599
  /**
11526
11600
  * Per-camera tunable ranges + defaults. Single source of truth used
11527
11601
  * by both the Zod data schema (validation + default fallback) and
@@ -11906,7 +11980,13 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
11906
11980
  handle: FrameHandleSchema,
11907
11981
  bbox: NativeCropBboxSchema,
11908
11982
  maxWidth: number().int().positive().optional()
11909
- }), NativeCropResultSchema.nullable());
11983
+ }), NativeCropResultSchema.nullable()), method(object({
11984
+ deviceId: number(),
11985
+ frameHandle: FrameHandleSchema.optional(),
11986
+ cropJpeg: string().optional(),
11987
+ parent: DetailParentSchema,
11988
+ steps: array(string()).optional()
11989
+ }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" });
11910
11990
  object({
11911
11991
  detected: boolean(),
11912
11992
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -12518,6 +12598,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
12518
12598
  deviceId: number(),
12519
12599
  status: PtzAutotrackStatusSchema
12520
12600
  });
12601
+ /**
12602
+ * scene-monitor — device-scoped reference-region state cap. An operator marks
12603
+ * a rect ROI on a camera frame and names one or more states; the engine
12604
+ * (pipeline-analytics, designated post-processing node) reports which state is
12605
+ * active on an ongoing basis. Two operator-selectable check modes share every-
12606
+ * thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
12607
+ * vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
12608
+ *
12609
+ * D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
12610
+ * derives the device-detail contribution; the provider carries NO hand-written
12611
+ * settings-contribution methods. `status.kind:'push'` — the engine pushes on
12612
+ * every hysteresis flip / availability change; consumers never poll.
12613
+ */
12614
+ /** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
12615
+ * be added without a wire break (matching falls back to any-condition refs). */
12616
+ var SceneConditionSchema = string();
12617
+ /** One captured reference — condition-tagged, model-version-gated. `embedding`
12618
+ * is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
12619
+ var SceneReferenceSchema = object({
12620
+ embedding: array(number()),
12621
+ modelId: string(),
12622
+ condition: SceneConditionSchema,
12623
+ capturedAt: number(),
12624
+ thumbnailMediaId: string().optional()
12625
+ });
12626
+ var SceneMonitorStateSchema = object({
12627
+ id: string(),
12628
+ label: string(),
12629
+ references: array(SceneReferenceSchema),
12630
+ textPrompts: array(string()).optional(),
12631
+ referenceCount: number(),
12632
+ currentlyMatched: boolean()
12633
+ });
12634
+ /** Per-mode comparator params in a discriminated union so an `llm` scene never
12635
+ * carries similarity knobs and vice-versa. */
12636
+ var SceneCheckSchema = discriminatedUnion("mode", [object({
12637
+ mode: literal("similarity"),
12638
+ threshold: number().min(0).max(1),
12639
+ hysteresisCount: number().int().positive()
12640
+ }), object({
12641
+ mode: literal("llm"),
12642
+ prompt: string(),
12643
+ profileId: string().optional(),
12644
+ hysteresisCount: number().int().positive()
12645
+ })]);
12646
+ var SceneMonitorSchema = object({
12647
+ id: string(),
12648
+ label: string(),
12649
+ roi: MaskRectShapeSchema,
12650
+ enabled: boolean(),
12651
+ triggerMode: _enum([
12652
+ "periodic",
12653
+ "on-motion",
12654
+ "both"
12655
+ ]),
12656
+ checkIntervalSec: number().optional(),
12657
+ check: SceneCheckSchema,
12658
+ states: array(SceneMonitorStateSchema),
12659
+ currentStateId: string().nullable(),
12660
+ lastCheckedAt: number().nullable(),
12661
+ lastConfidence: number().nullable(),
12662
+ currentCondition: SceneConditionSchema.nullable(),
12663
+ availability: _enum(["ok", "unavailable"]),
12664
+ unavailableReason: string().nullable()
12665
+ });
12666
+ var SceneMonitorStatusSchema = object({
12667
+ monitors: array(SceneMonitorSchema),
12668
+ lastFetchedAt: number()
12669
+ });
12670
+ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
12671
+ deviceId: number(),
12672
+ label: string(),
12673
+ roi: MaskRectShapeSchema,
12674
+ check: SceneCheckSchema,
12675
+ triggerMode: _enum([
12676
+ "periodic",
12677
+ "on-motion",
12678
+ "both"
12679
+ ]).optional(),
12680
+ checkIntervalSec: number().optional()
12681
+ }), SceneMonitorSchema, {
12682
+ kind: "mutation",
12683
+ auth: "admin"
12684
+ }), method(object({
12685
+ deviceId: number(),
12686
+ monitorId: string(),
12687
+ patch: object({
12688
+ label: string().optional(),
12689
+ roi: MaskRectShapeSchema.optional(),
12690
+ enabled: boolean().optional(),
12691
+ triggerMode: _enum([
12692
+ "periodic",
12693
+ "on-motion",
12694
+ "both"
12695
+ ]).optional(),
12696
+ checkIntervalSec: number().optional(),
12697
+ check: SceneCheckSchema.optional()
12698
+ })
12699
+ }), _void(), {
12700
+ kind: "mutation",
12701
+ auth: "admin"
12702
+ }), method(object({
12703
+ deviceId: number(),
12704
+ monitorId: string()
12705
+ }), _void(), {
12706
+ kind: "mutation",
12707
+ auth: "admin"
12708
+ }), method(object({
12709
+ deviceId: number(),
12710
+ monitorId: string(),
12711
+ stateId: string().optional(),
12712
+ label: string().optional(),
12713
+ condition: SceneConditionSchema.optional()
12714
+ }), object({
12715
+ stateId: string(),
12716
+ referenceCount: number()
12717
+ }), {
12718
+ kind: "mutation",
12719
+ auth: "admin"
12720
+ }), method(object({
12721
+ deviceId: number(),
12722
+ monitorId: string(),
12723
+ stateId: string(),
12724
+ index: number()
12725
+ }), _void(), {
12726
+ kind: "mutation",
12727
+ auth: "admin"
12728
+ }), method(object({
12729
+ deviceId: number(),
12730
+ monitorId: string()
12731
+ }), _void(), {
12732
+ kind: "mutation",
12733
+ auth: "admin"
12734
+ });
12521
12735
  object({
12522
12736
  /** Whether the script is currently executing. */
12523
12737
  isRunning: boolean(),
@@ -13586,7 +13800,12 @@ var NotificationRuleConditionsSchema = object({
13586
13800
  clipDescription: object({
13587
13801
  text: string().min(1),
13588
13802
  minSimilarity: number().min(0).max(1)
13589
- }).optional()
13803
+ }).optional(),
13804
+ /** Match events whose recognized-entity label (face identity name or plate
13805
+ * vehicle name, propagated onto `event.data.label`) is one of these values.
13806
+ * Empty/absent → unaffected (back-compat). Enables "notify me when <named
13807
+ * vehicle/person> is seen". */
13808
+ labels: array(string()).readonly().optional()
13590
13809
  });
13591
13810
  var NotificationRuleTemplateSchema = object({
13592
13811
  title: string(),
@@ -13844,11 +14063,19 @@ method(object({
13844
14063
  * login page needs NO change.
13845
14064
  *
13846
14065
  * - `widget` — a Module-Federation widget the login page mounts (via
13847
- * `loadRemoteBundle`) for an in-page ceremony. Covers the passkey
13848
- * login ceremony, which must run `@simplewebauthn/browser` INSIDE the
13849
- * addon bundle. The referenced widget also declares `preAuth: true` in
13850
- * its `addon-widgets-source` catalog entry. `auth.listLoginMethods`
13851
- * stamps a public `bundleUrl` from `addonId` + `bundle`.
14066
+ * `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
14067
+ * stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
14068
+ * mechanism kept for future use; no shipped addon uses it on the login
14069
+ * page (the passkey ceremony below runs natively in the shell instead).
14070
+ *
14071
+ * - `passkey` — a declarative WebAuthn ceremony the shell renders
14072
+ * natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
14073
+ * a remotely-loaded bundle). Carries the addon's effective `rpId` /
14074
+ * `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
14075
+ * can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
14076
+ * fetching any remote code pre-auth. Contribution stays unconditional —
14077
+ * enrollment state is never leaked pre-auth; visibility is a shell
14078
+ * decision.
13852
14079
  *
13853
14080
  * Every contribution carries a `stage`:
13854
14081
  * - `primary` — shown on the first credentials screen (OIDC /
@@ -13862,30 +14089,45 @@ method(object({
13862
14089
  */
13863
14090
  /** When a login method renders in the two-phase login flow. */
13864
14091
  var LoginStageEnum = _enum(["primary", "second-factor"]);
13865
- /** One login-method contribution — redirect button OR pre-auth widget. */
13866
- var LoginMethodContributionSchema = discriminatedUnion("kind", [object({
13867
- kind: literal("redirect"),
13868
- /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
13869
- id: string(),
13870
- /** Operator-facing button label. */
13871
- label: string(),
13872
- /** lucide-react icon name. */
13873
- icon: string().optional(),
13874
- /** Addon-owned HTTP route the button navigates to (GET). */
13875
- startUrl: string(),
13876
- stage: LoginStageEnum
13877
- }), object({
13878
- kind: literal("widget"),
13879
- /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
13880
- id: string(),
13881
- /** Owning addon id drives the public bundle URL + the MF namespace. */
13882
- addonId: string(),
13883
- /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
13884
- bundle: string(),
13885
- /** MF remote descriptor `{ remoteName, exposedModule, componentKey }`. */
13886
- remote: WidgetRemoteSchema,
13887
- stage: LoginStageEnum
13888
- })]);
14092
+ /** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
14093
+ var LoginMethodContributionSchema = discriminatedUnion("kind", [
14094
+ object({
14095
+ kind: literal("redirect"),
14096
+ /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
14097
+ id: string(),
14098
+ /** Operator-facing button label. */
14099
+ label: string(),
14100
+ /** lucide-react icon name. */
14101
+ icon: string().optional(),
14102
+ /** Addon-owned HTTP route the button navigates to (GET). */
14103
+ startUrl: string(),
14104
+ stage: LoginStageEnum
14105
+ }),
14106
+ object({
14107
+ kind: literal("widget"),
14108
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
14109
+ id: string(),
14110
+ /** Owning addon id — drives the public bundle URL + the MF namespace. */
14111
+ addonId: string(),
14112
+ /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
14113
+ bundle: string(),
14114
+ /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
14115
+ remote: WidgetRemoteSchema,
14116
+ stage: LoginStageEnum
14117
+ }),
14118
+ object({
14119
+ kind: literal("passkey"),
14120
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
14121
+ id: string(),
14122
+ /** Operator-facing button label. */
14123
+ label: string(),
14124
+ stage: LoginStageEnum,
14125
+ /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
14126
+ rpId: string(),
14127
+ /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
14128
+ origin: string().nullable()
14129
+ })
14130
+ ]);
13889
14131
  method(_void(), array(LoginMethodContributionSchema).readonly());
13890
14132
  /**
13891
14133
  * Orchestrator-side destination metadata. The orchestrator computes
@@ -15772,14 +16014,14 @@ var TargetKindCapsSchema = object({
15772
16014
  * the union is large and not meant for runtime validation here; the exported
15773
16015
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
15774
16016
  */
15775
- var ConfigSchemaPassthrough = unknown();
16017
+ var ConfigSchemaPassthrough$1 = unknown();
15776
16018
  var TargetKindSchema = object({
15777
16019
  kind: string(),
15778
16020
  label: string(),
15779
16021
  icon: string(),
15780
16022
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
15781
16023
  addonId: string(),
15782
- configSchema: ConfigSchemaPassthrough,
16024
+ configSchema: ConfigSchemaPassthrough$1,
15783
16025
  supportsDiscovery: boolean(),
15784
16026
  caps: TargetKindCapsSchema
15785
16027
  });
@@ -15832,6 +16074,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
15832
16074
  enabled: boolean()
15833
16075
  }), _void(), { kind: "mutation" });
15834
16076
  /**
16077
+ * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
16078
+ * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
16079
+ * caps stay wire-compatible without a circular cap→cap import.
16080
+ *
16081
+ * Errors are a discriminated-union RESULT, never thrown: the shape survives
16082
+ * every transport tier structurally, and failed calls still write usage rows.
16083
+ * Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
16084
+ */
16085
+ var LlmUsageSchema = object({
16086
+ inputTokens: number(),
16087
+ outputTokens: number()
16088
+ });
16089
+ var LlmErrorCodeSchema = _enum([
16090
+ "timeout",
16091
+ "rate-limited",
16092
+ "auth",
16093
+ "refusal",
16094
+ "bad-request",
16095
+ "unavailable",
16096
+ "no-profile",
16097
+ "budget-exceeded",
16098
+ "adapter-error"
16099
+ ]);
16100
+ var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
16101
+ ok: literal(true),
16102
+ text: string(),
16103
+ model: string(),
16104
+ usage: LlmUsageSchema,
16105
+ truncated: boolean(),
16106
+ latencyMs: number()
16107
+ }), object({
16108
+ ok: literal(false),
16109
+ code: LlmErrorCodeSchema,
16110
+ message: string(),
16111
+ retryAfterMs: number().optional()
16112
+ })]);
16113
+ /**
16114
+ * `Uint8Array` is the sanctioned binary convention — superjson + the UDS
16115
+ * MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
16116
+ * notification-output.cap.ts:27-31 precedents).
16117
+ */
16118
+ var LlmImageSchema = object({
16119
+ bytes: _instanceof(Uint8Array),
16120
+ mimeType: string()
16121
+ });
16122
+ var LlmGenerateBaseInputSchema = object({
16123
+ /** Collection routing (the notification-output posture). */
16124
+ addonId: string().optional(),
16125
+ /** Explicit profile; else the resolution chain (spec §3). */
16126
+ profileId: string().optional(),
16127
+ /** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
16128
+ consumer: string(),
16129
+ system: string().optional(),
16130
+ /** v1: single-turn. `messages[]` is a v2 additive field. */
16131
+ prompt: string(),
16132
+ /** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
16133
+ jsonSchema: record(string(), unknown()).optional(),
16134
+ /** Per-call override of the profile default. */
16135
+ maxTokens: number().int().positive().optional(),
16136
+ temperature: number().optional()
16137
+ });
16138
+ /**
16139
+ * `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
16140
+ * on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
16141
+ * a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
16142
+ * cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
16143
+ * this only through the `llm` cap's methods.
16144
+ *
16145
+ * One running llama-server child per node in v1 (models are RAM-heavy).
16146
+ * Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
16147
+ * watchdog — operator decision #3).
16148
+ */
16149
+ var ManagedModelRefSchema = discriminatedUnion("kind", [
16150
+ object({
16151
+ kind: literal("catalog"),
16152
+ catalogId: string()
16153
+ }),
16154
+ object({
16155
+ kind: literal("url"),
16156
+ url: string(),
16157
+ sha256: string().optional()
16158
+ }),
16159
+ object({
16160
+ kind: literal("path"),
16161
+ path: string()
16162
+ })
16163
+ ]);
16164
+ var ManagedRuntimeConfigSchema = object({
16165
+ /** WHERE the runtime lives — hub or any agent. */
16166
+ nodeId: string(),
16167
+ /** Closed for v1; 'ollama' is a v2 candidate. */
16168
+ engine: _enum(["llama-cpp"]),
16169
+ model: ManagedModelRefSchema,
16170
+ contextSize: number().int().default(4096),
16171
+ /** 0 = CPU-only. */
16172
+ gpuLayers: number().int().default(0),
16173
+ /** Default: cpus-2, clamped ≥1 (resolved node-side). */
16174
+ threads: number().int().optional(),
16175
+ /** Concurrent slots. */
16176
+ parallel: number().int().default(1),
16177
+ /** Else lazy: first generate boots it. */
16178
+ autoStart: boolean().default(false),
16179
+ /** 0 = never; frees RAM after quiet periods. */
16180
+ idleStopMinutes: number().int().default(30)
16181
+ });
16182
+ var LlmRuntimeStatusSchema = object({
16183
+ /** Status is ALWAYS node-qualified. */
16184
+ nodeId: string(),
16185
+ state: _enum([
16186
+ "stopped",
16187
+ "downloading",
16188
+ "starting",
16189
+ "ready",
16190
+ "crashed",
16191
+ "failed"
16192
+ ]),
16193
+ pid: number().optional(),
16194
+ port: number().optional(),
16195
+ modelPath: string().optional(),
16196
+ modelId: string().optional(),
16197
+ downloadProgress: number().min(0).max(1).optional(),
16198
+ lastError: string().optional(),
16199
+ crashesInWindow: number(),
16200
+ /** Child RSS (sampled best-effort). */
16201
+ memoryBytes: number().optional(),
16202
+ vramBytes: number().optional()
16203
+ });
16204
+ var LlmNodeModelSchema = object({
16205
+ file: string(),
16206
+ sizeBytes: number(),
16207
+ catalogId: string().optional(),
16208
+ installedAt: number().optional()
16209
+ });
16210
+ var LlmRuntimeDiskUsageSchema = object({
16211
+ nodeId: string(),
16212
+ modelsBytes: number(),
16213
+ freeBytes: number().optional()
16214
+ });
16215
+ method(LlmGenerateBaseInputSchema.extend({
16216
+ images: array(LlmImageSchema).optional(),
16217
+ runtime: ManagedRuntimeConfigSchema,
16218
+ /** The managed profile's timeout, threaded by the hub provider. */
16219
+ timeoutMs: number().int().positive().optional()
16220
+ }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
16221
+ kind: "mutation",
16222
+ auth: "admin"
16223
+ }), method(object({}), _void(), {
16224
+ kind: "mutation",
16225
+ auth: "admin"
16226
+ }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
16227
+ kind: "mutation",
16228
+ auth: "admin"
16229
+ }), method(object({ file: string() }), _void(), {
16230
+ kind: "mutation",
16231
+ auth: "admin"
16232
+ }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
16233
+ /**
16234
+ * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
16235
+ * methods concat-fan across providers; single-row methods route to ONE
16236
+ * provider by the `addonId` in the call input (the notification-output
16237
+ * posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
16238
+ * (hub-placed); the cap stays open for future providers.
16239
+ *
16240
+ * Profiles are ROWS (data), not addons: one row = one usable model endpoint.
16241
+ * `apiKey` is a password field — providers REDACT it on read and merge on
16242
+ * write; a stored key NEVER round-trips to a client.
16243
+ */
16244
+ var LlmProfileKindSchema = _enum([
16245
+ "openai-compatible",
16246
+ "openai",
16247
+ "anthropic",
16248
+ "google",
16249
+ "managed-local"
16250
+ ]);
16251
+ var LlmProfileSchema = object({
16252
+ id: string(),
16253
+ name: string(),
16254
+ kind: LlmProfileKindSchema,
16255
+ /** Stamped by the provider — keeps the fanned catalog routable. */
16256
+ addonId: string(),
16257
+ enabled: boolean(),
16258
+ /** Vendor model id, or the managed runtime's loaded model. */
16259
+ model: string(),
16260
+ /** Required for openai-compatible; override for cloud kinds. */
16261
+ baseUrl: string().optional(),
16262
+ /** ConfigUISchema type:'password' — never round-trips (spec §5). */
16263
+ apiKey: string().optional(),
16264
+ supportsVision: boolean(),
16265
+ temperature: number().min(0).max(2).optional(),
16266
+ maxTokens: number().int().positive().optional(),
16267
+ timeoutMs: number().int().positive().default(6e4),
16268
+ extraHeaders: record(string(), string()).optional(),
16269
+ /** kind === 'managed-local' only (spec §4). */
16270
+ runtime: ManagedRuntimeConfigSchema.optional()
16271
+ });
16272
+ /** ConfigUISchema tree passed through untyped on the wire (the
16273
+ * notification-output `ConfigSchemaPassthrough` precedent at
16274
+ * notification-output.cap.ts:151); the exported TS type re-tightens it. */
16275
+ var ConfigSchemaPassthrough = unknown();
16276
+ var LlmProfileKindDescriptorSchema = object({
16277
+ kind: LlmProfileKindSchema,
16278
+ label: string(),
16279
+ icon: string(),
16280
+ /** Stamped by each provider so the concat-fanned catalog stays routable. */
16281
+ addonId: string(),
16282
+ configSchema: ConfigSchemaPassthrough
16283
+ });
16284
+ var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
16285
+ var LlmDefaultSchema = object({
16286
+ selector: LlmDefaultSelectorSchema,
16287
+ profileId: string()
16288
+ });
16289
+ /** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
16290
+ var LlmUsageRollupSchema = object({
16291
+ day: string(),
16292
+ consumer: string(),
16293
+ profileId: string(),
16294
+ calls: number(),
16295
+ okCalls: number(),
16296
+ errorCalls: number(),
16297
+ inputTokens: number(),
16298
+ outputTokens: number(),
16299
+ avgLatencyMs: number()
16300
+ });
16301
+ /** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
16302
+ var ManagedModelCatalogEntrySchema = object({
16303
+ id: string(),
16304
+ label: string(),
16305
+ family: string(),
16306
+ purpose: _enum(["text", "vision"]),
16307
+ url: string(),
16308
+ sha256: string(),
16309
+ sizeBytes: number(),
16310
+ quantization: string(),
16311
+ /** Load-time guidance shown in the picker. */
16312
+ minRamBytes: number(),
16313
+ contextSizeDefault: number().int(),
16314
+ /** Vision models: companion projector file. */
16315
+ mmprojUrl: string().optional()
16316
+ });
16317
+ var LlmRuntimeNodeSchema = object({
16318
+ nodeId: string(),
16319
+ reachable: boolean(),
16320
+ status: LlmRuntimeStatusSchema.optional(),
16321
+ disk: LlmRuntimeDiskUsageSchema.optional(),
16322
+ error: string().optional()
16323
+ });
16324
+ var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
16325
+ var ProfileRefInputSchema = object({
16326
+ addonId: string(),
16327
+ profileId: string()
16328
+ });
16329
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
16330
+ kind: "mutation",
16331
+ auth: "admin"
16332
+ }), method(ProfileRefInputSchema, _void(), {
16333
+ kind: "mutation",
16334
+ auth: "admin"
16335
+ }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
16336
+ kind: "mutation",
16337
+ auth: "admin"
16338
+ }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
16339
+ selector: LlmDefaultSelectorSchema,
16340
+ profileId: string().nullable()
16341
+ }), _void(), {
16342
+ kind: "mutation",
16343
+ auth: "admin"
16344
+ }), method(object({
16345
+ since: number().optional(),
16346
+ until: number().optional(),
16347
+ consumer: string().optional(),
16348
+ profileId: string().optional()
16349
+ }), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
16350
+ nodeId: string(),
16351
+ model: ManagedModelRefSchema
16352
+ }), _void(), {
16353
+ kind: "mutation",
16354
+ auth: "admin"
16355
+ }), method(object({
16356
+ nodeId: string(),
16357
+ file: string()
16358
+ }), _void(), {
16359
+ kind: "mutation",
16360
+ auth: "admin"
16361
+ }), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
16362
+ kind: "mutation",
16363
+ auth: "admin"
16364
+ }), method(ProfileRefInputSchema, _void(), {
16365
+ kind: "mutation",
16366
+ auth: "admin"
16367
+ });
16368
+ /**
15835
16369
  * Zod schemas for persisted record types.
15836
16370
  *
15837
16371
  * These schemas serve as the single source of truth for types that are
@@ -16047,6 +16581,10 @@ var TrackSchema = object({
16047
16581
  snapshots: array(TrackSnapshotSchema).readonly(),
16048
16582
  /** Deduplicated zones the track has entered at least once. */
16049
16583
  zonesVisited: array(string()).readonly(),
16584
+ /** Deduplicated set of detector classes observed for this track over its
16585
+ * life (a track may be reclassified, e.g. person→vehicle). Absent on
16586
+ * legacy rows written before class accumulation shipped. */
16587
+ classes: array(string()).readonly().optional(),
16050
16588
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
16051
16589
  totalDistance: number(),
16052
16590
  state: TrackStateSchema,
@@ -16208,7 +16746,7 @@ var KeyEventSchema = object({
16208
16746
  /** Track lifetime in ms (lastSeen - firstSeen). */
16209
16747
  windowMs: number().optional()
16210
16748
  });
16211
- var TrackedDetectionSchema = object({
16749
+ object({
16212
16750
  trackId: string(),
16213
16751
  className: string(),
16214
16752
  confidence: number(),
@@ -16216,6 +16754,23 @@ var TrackedDetectionSchema = object({
16216
16754
  zones: array(string()).readonly(),
16217
16755
  state: TrackStateSchema
16218
16756
  });
16757
+ var OverlayDetectionSchema = looseObject({
16758
+ id: string(),
16759
+ kind: _enum(["first-level", "detail"]),
16760
+ macroClass: string(),
16761
+ score: number(),
16762
+ bbox: object({
16763
+ x: number(),
16764
+ y: number(),
16765
+ width: number(),
16766
+ height: number()
16767
+ }),
16768
+ labels: array(looseObject({
16769
+ label: string(),
16770
+ score: number()
16771
+ })).readonly(),
16772
+ parentId: string().optional()
16773
+ });
16219
16774
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
16220
16775
  var SearchObjectEventsInput = object({
16221
16776
  text: string(),
@@ -16226,6 +16781,20 @@ var SearchObjectEventsInput = object({
16226
16781
  limit: number().default(50),
16227
16782
  minScore: number().min(0).max(1).default(.2)
16228
16783
  });
16784
+ var TrackCascadeCountsSchema = object({
16785
+ /** Persisted track roots deleted (authoritative). */
16786
+ tracks: number().int(),
16787
+ /** Object events removed with their tracks (best-effort; see note above). */
16788
+ events: number().int(),
16789
+ /** Track/face/plate-owned media removed (best-effort). Never identity media. */
16790
+ media: number().int(),
16791
+ /** Unassigned (non-enrolled) face reads removed (best-effort). */
16792
+ faces: number().int(),
16793
+ /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
16794
+ plates: number().int(),
16795
+ /** Per-track CLIP search vectors removed (best-effort). */
16796
+ embeddings: number().int()
16797
+ });
16229
16798
  DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
16230
16799
  deviceId: number(),
16231
16800
  trackId: string()
@@ -16257,6 +16826,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16257
16826
  }), {
16258
16827
  kind: "mutation",
16259
16828
  auth: "admin"
16829
+ }), method(object({
16830
+ deviceId: number(),
16831
+ cutoffMs: number()
16832
+ }), TrackCascadeCountsSchema, {
16833
+ kind: "mutation",
16834
+ auth: "admin"
16835
+ }), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
16836
+ kind: "mutation",
16837
+ auth: "admin"
16838
+ }), method(object({
16839
+ deviceId: number(),
16840
+ trackIds: array(string()).min(1)
16841
+ }), object({
16842
+ deleted: number().int(),
16843
+ failed: array(string()).readonly()
16844
+ }), {
16845
+ kind: "mutation",
16846
+ auth: "admin"
16260
16847
  }), method(object({
16261
16848
  eventId: string(),
16262
16849
  kind: MediaFileKindEnum.optional()
@@ -16265,7 +16852,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16265
16852
  timestamp: number(),
16266
16853
  frameWidth: number(),
16267
16854
  frameHeight: number(),
16268
- detections: array(TrackedDetectionSchema).readonly()
16855
+ detections: array(OverlayDetectionSchema).readonly()
16269
16856
  }), object({
16270
16857
  deviceId: number(),
16271
16858
  trackId: string(),
@@ -19245,6 +19832,24 @@ DeviceType.Camera, method(object({
19245
19832
  deviceId: number(),
19246
19833
  status: OsdStatusSchema
19247
19834
  });
19835
+ var VehicleSchema = object({
19836
+ id: string(),
19837
+ name: string(),
19838
+ sampleCount: number().int().nonnegative(),
19839
+ coverMediaKey: string().optional(),
19840
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
19841
+ coverBase64: string().optional()
19842
+ });
19843
+ var VehicleSampleInfoSchema = object({
19844
+ id: string(),
19845
+ /** The plate text this sample enrolled (self-labeling — no embedding). */
19846
+ text: string(),
19847
+ /** OCR confidence of the enrolled read (0..1). */
19848
+ score: number(),
19849
+ addedAt: number().int(),
19850
+ deviceId: number().int().optional(),
19851
+ base64: string().optional()
19852
+ });
19248
19853
  var PlateInfoSchema = object({
19249
19854
  plateId: string(),
19250
19855
  deviceId: number().int(),
@@ -19256,6 +19861,16 @@ var PlateInfoSchema = object({
19256
19861
  score: number(),
19257
19862
  /** True when the text was manually corrected (exempt from retention). */
19258
19863
  corrected: boolean(),
19864
+ /** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
19865
+ recognizedVehicleId: string().optional(),
19866
+ /** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
19867
+ vehicleName: string().optional(),
19868
+ /** True once the read was assigned to a vehicle (enrolled as a sample). */
19869
+ assigned: boolean(),
19870
+ /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
19871
+ plateBbox: BoundingBoxSchema.optional(),
19872
+ /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
19873
+ keyFrameMediaKey: string().optional(),
19259
19874
  base64: string().optional()
19260
19875
  });
19261
19876
  var MediaFileLiteSchema = object({
@@ -19295,6 +19910,48 @@ method(object({
19295
19910
  }), method(object({ plateId: string() }), _void(), {
19296
19911
  kind: "mutation",
19297
19912
  auth: "admin"
19913
+ }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
19914
+ kind: "mutation",
19915
+ auth: "admin"
19916
+ }), method(object({
19917
+ id: string(),
19918
+ name: string().min(1)
19919
+ }), _void(), {
19920
+ kind: "mutation",
19921
+ auth: "admin"
19922
+ }), method(object({ id: string() }), _void(), {
19923
+ kind: "mutation",
19924
+ auth: "admin"
19925
+ }), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
19926
+ vehicleId: string(),
19927
+ sampleId: string()
19928
+ }), _void(), {
19929
+ kind: "mutation",
19930
+ auth: "admin"
19931
+ }), method(object({
19932
+ plateId: string(),
19933
+ vehicleId: string()
19934
+ }), _void(), {
19935
+ kind: "mutation",
19936
+ auth: "admin"
19937
+ }), method(object({ plateId: string() }), _void(), {
19938
+ kind: "mutation",
19939
+ auth: "admin"
19940
+ }), method(object({
19941
+ plateIds: array(string()).min(1),
19942
+ vehicleId: string()
19943
+ }), object({
19944
+ assigned: number().int(),
19945
+ failed: array(string()).readonly()
19946
+ }), {
19947
+ kind: "mutation",
19948
+ auth: "admin"
19949
+ }), method(object({ plateIds: array(string()).min(1) }), object({
19950
+ unassigned: number().int(),
19951
+ failed: array(string()).readonly()
19952
+ }), {
19953
+ kind: "mutation",
19954
+ auth: "admin"
19298
19955
  });
19299
19956
  var ModelFormatSchema = _enum(MODEL_FORMATS);
19300
19957
  var HwAccelBackendInputSchema = _enum([
@@ -21840,6 +22497,168 @@ Object.freeze({
21840
22497
  addonId: null,
21841
22498
  access: "create"
21842
22499
  },
22500
+ "llm.deleteModel": {
22501
+ capName: "llm",
22502
+ capScope: "system",
22503
+ addonId: null,
22504
+ access: "delete"
22505
+ },
22506
+ "llm.deleteProfile": {
22507
+ capName: "llm",
22508
+ capScope: "system",
22509
+ addonId: null,
22510
+ access: "delete"
22511
+ },
22512
+ "llm.generate": {
22513
+ capName: "llm",
22514
+ capScope: "system",
22515
+ addonId: null,
22516
+ access: "create"
22517
+ },
22518
+ "llm.generateVision": {
22519
+ capName: "llm",
22520
+ capScope: "system",
22521
+ addonId: null,
22522
+ access: "create"
22523
+ },
22524
+ "llm.getDefaults": {
22525
+ capName: "llm",
22526
+ capScope: "system",
22527
+ addonId: null,
22528
+ access: "view"
22529
+ },
22530
+ "llm.getRuntimeStatus": {
22531
+ capName: "llm",
22532
+ capScope: "system",
22533
+ addonId: null,
22534
+ access: "view"
22535
+ },
22536
+ "llm.getUsage": {
22537
+ capName: "llm",
22538
+ capScope: "system",
22539
+ addonId: null,
22540
+ access: "view"
22541
+ },
22542
+ "llm.installModel": {
22543
+ capName: "llm",
22544
+ capScope: "system",
22545
+ addonId: null,
22546
+ access: "create"
22547
+ },
22548
+ "llm.listModelCatalog": {
22549
+ capName: "llm",
22550
+ capScope: "system",
22551
+ addonId: null,
22552
+ access: "view"
22553
+ },
22554
+ "llm.listModels": {
22555
+ capName: "llm",
22556
+ capScope: "system",
22557
+ addonId: null,
22558
+ access: "view"
22559
+ },
22560
+ "llm.listNodeModels": {
22561
+ capName: "llm",
22562
+ capScope: "system",
22563
+ addonId: null,
22564
+ access: "view"
22565
+ },
22566
+ "llm.listProfileKinds": {
22567
+ capName: "llm",
22568
+ capScope: "system",
22569
+ addonId: null,
22570
+ access: "view"
22571
+ },
22572
+ "llm.listProfiles": {
22573
+ capName: "llm",
22574
+ capScope: "system",
22575
+ addonId: null,
22576
+ access: "view"
22577
+ },
22578
+ "llm.listRuntimeNodes": {
22579
+ capName: "llm",
22580
+ capScope: "system",
22581
+ addonId: null,
22582
+ access: "view"
22583
+ },
22584
+ "llm.setDefault": {
22585
+ capName: "llm",
22586
+ capScope: "system",
22587
+ addonId: null,
22588
+ access: "create"
22589
+ },
22590
+ "llm.startRuntime": {
22591
+ capName: "llm",
22592
+ capScope: "system",
22593
+ addonId: null,
22594
+ access: "create"
22595
+ },
22596
+ "llm.stopRuntime": {
22597
+ capName: "llm",
22598
+ capScope: "system",
22599
+ addonId: null,
22600
+ access: "create"
22601
+ },
22602
+ "llm.testProfile": {
22603
+ capName: "llm",
22604
+ capScope: "system",
22605
+ addonId: null,
22606
+ access: "create"
22607
+ },
22608
+ "llm.upsertProfile": {
22609
+ capName: "llm",
22610
+ capScope: "system",
22611
+ addonId: null,
22612
+ access: "create"
22613
+ },
22614
+ "llmRuntime.complete": {
22615
+ capName: "llm-runtime",
22616
+ capScope: "system",
22617
+ addonId: null,
22618
+ access: "create"
22619
+ },
22620
+ "llmRuntime.deleteModel": {
22621
+ capName: "llm-runtime",
22622
+ capScope: "system",
22623
+ addonId: null,
22624
+ access: "delete"
22625
+ },
22626
+ "llmRuntime.ensureStarted": {
22627
+ capName: "llm-runtime",
22628
+ capScope: "system",
22629
+ addonId: null,
22630
+ access: "create"
22631
+ },
22632
+ "llmRuntime.getDiskUsage": {
22633
+ capName: "llm-runtime",
22634
+ capScope: "system",
22635
+ addonId: null,
22636
+ access: "view"
22637
+ },
22638
+ "llmRuntime.installModel": {
22639
+ capName: "llm-runtime",
22640
+ capScope: "system",
22641
+ addonId: null,
22642
+ access: "create"
22643
+ },
22644
+ "llmRuntime.listLocalModels": {
22645
+ capName: "llm-runtime",
22646
+ capScope: "system",
22647
+ addonId: null,
22648
+ access: "view"
22649
+ },
22650
+ "llmRuntime.status": {
22651
+ capName: "llm-runtime",
22652
+ capScope: "system",
22653
+ addonId: null,
22654
+ access: "view"
22655
+ },
22656
+ "llmRuntime.stop": {
22657
+ capName: "llm-runtime",
22658
+ capScope: "system",
22659
+ addonId: null,
22660
+ access: "create"
22661
+ },
21843
22662
  "localNetwork.getAllowedAddresses": {
21844
22663
  capName: "local-network",
21845
22664
  capScope: "system",
@@ -22470,6 +23289,12 @@ Object.freeze({
22470
23289
  addonId: null,
22471
23290
  access: "delete"
22472
23291
  },
23292
+ "pipelineAnalytics.deleteTracks": {
23293
+ capName: "pipeline-analytics",
23294
+ capScope: "device",
23295
+ addonId: null,
23296
+ access: "delete"
23297
+ },
22473
23298
  "pipelineAnalytics.getActiveTracks": {
22474
23299
  capName: "pipeline-analytics",
22475
23300
  capScope: "device",
@@ -22536,12 +23361,24 @@ Object.freeze({
22536
23361
  addonId: null,
22537
23362
  access: "create"
22538
23363
  },
23364
+ "pipelineAnalytics.pruneTracksBefore": {
23365
+ capName: "pipeline-analytics",
23366
+ capScope: "device",
23367
+ addonId: null,
23368
+ access: "create"
23369
+ },
22539
23370
  "pipelineAnalytics.searchObjectEvents": {
22540
23371
  capName: "pipeline-analytics",
22541
23372
  capScope: "device",
22542
23373
  addonId: null,
22543
23374
  access: "view"
22544
23375
  },
23376
+ "pipelineAnalytics.wipeAllAnalytics": {
23377
+ capName: "pipeline-analytics",
23378
+ capScope: "device",
23379
+ addonId: null,
23380
+ access: "delete"
23381
+ },
22545
23382
  "pipelineExecutor.cacheFrameInPool": {
22546
23383
  capName: "pipeline-executor",
22547
23384
  capScope: "system",
@@ -23040,18 +23877,48 @@ Object.freeze({
23040
23877
  addonId: null,
23041
23878
  access: "create"
23042
23879
  },
23880
+ "pipelineRunner.runDetailSubtree": {
23881
+ capName: "pipeline-runner",
23882
+ capScope: "system",
23883
+ addonId: null,
23884
+ access: "create"
23885
+ },
23886
+ "plateGallery.assignPlate": {
23887
+ capName: "plate-gallery",
23888
+ capScope: "system",
23889
+ addonId: null,
23890
+ access: "create"
23891
+ },
23892
+ "plateGallery.assignPlates": {
23893
+ capName: "plate-gallery",
23894
+ capScope: "system",
23895
+ addonId: null,
23896
+ access: "create"
23897
+ },
23043
23898
  "plateGallery.correctPlateText": {
23044
23899
  capName: "plate-gallery",
23045
23900
  capScope: "system",
23046
23901
  addonId: null,
23047
23902
  access: "create"
23048
23903
  },
23904
+ "plateGallery.createVehicle": {
23905
+ capName: "plate-gallery",
23906
+ capScope: "system",
23907
+ addonId: null,
23908
+ access: "create"
23909
+ },
23049
23910
  "plateGallery.deletePlate": {
23050
23911
  capName: "plate-gallery",
23051
23912
  capScope: "system",
23052
23913
  addonId: null,
23053
23914
  access: "delete"
23054
23915
  },
23916
+ "plateGallery.deleteVehicle": {
23917
+ capName: "plate-gallery",
23918
+ capScope: "system",
23919
+ addonId: null,
23920
+ access: "delete"
23921
+ },
23055
23922
  "plateGallery.getPlateByTrack": {
23056
23923
  capName: "plate-gallery",
23057
23924
  capScope: "system",
@@ -23070,6 +23937,30 @@ Object.freeze({
23070
23937
  addonId: null,
23071
23938
  access: "view"
23072
23939
  },
23940
+ "plateGallery.listVehicles": {
23941
+ capName: "plate-gallery",
23942
+ capScope: "system",
23943
+ addonId: null,
23944
+ access: "view"
23945
+ },
23946
+ "plateGallery.listVehicleSamples": {
23947
+ capName: "plate-gallery",
23948
+ capScope: "system",
23949
+ addonId: null,
23950
+ access: "view"
23951
+ },
23952
+ "plateGallery.removeVehicleSample": {
23953
+ capName: "plate-gallery",
23954
+ capScope: "system",
23955
+ addonId: null,
23956
+ access: "delete"
23957
+ },
23958
+ "plateGallery.renameVehicle": {
23959
+ capName: "plate-gallery",
23960
+ capScope: "system",
23961
+ addonId: null,
23962
+ access: "create"
23963
+ },
23073
23964
  "plateGallery.searchPlates": {
23074
23965
  capName: "plate-gallery",
23075
23966
  capScope: "system",
@@ -23082,6 +23973,18 @@ Object.freeze({
23082
23973
  addonId: null,
23083
23974
  access: "view"
23084
23975
  },
23976
+ "plateGallery.unassignPlate": {
23977
+ capName: "plate-gallery",
23978
+ capScope: "system",
23979
+ addonId: null,
23980
+ access: "create"
23981
+ },
23982
+ "plateGallery.unassignPlates": {
23983
+ capName: "plate-gallery",
23984
+ capScope: "system",
23985
+ addonId: null,
23986
+ access: "create"
23987
+ },
23085
23988
  "platformProbe.getCapabilities": {
23086
23989
  capName: "platform-probe",
23087
23990
  capScope: "system",
@@ -23274,6 +24177,48 @@ Object.freeze({
23274
24177
  addonId: null,
23275
24178
  access: "create"
23276
24179
  },
24180
+ "sceneMonitor.captureReference": {
24181
+ capName: "scene-monitor",
24182
+ capScope: "device",
24183
+ addonId: null,
24184
+ access: "create"
24185
+ },
24186
+ "sceneMonitor.createScene": {
24187
+ capName: "scene-monitor",
24188
+ capScope: "device",
24189
+ addonId: null,
24190
+ access: "create"
24191
+ },
24192
+ "sceneMonitor.deleteReference": {
24193
+ capName: "scene-monitor",
24194
+ capScope: "device",
24195
+ addonId: null,
24196
+ access: "delete"
24197
+ },
24198
+ "sceneMonitor.deleteScene": {
24199
+ capName: "scene-monitor",
24200
+ capScope: "device",
24201
+ addonId: null,
24202
+ access: "delete"
24203
+ },
24204
+ "sceneMonitor.listScenes": {
24205
+ capName: "scene-monitor",
24206
+ capScope: "device",
24207
+ addonId: null,
24208
+ access: "view"
24209
+ },
24210
+ "sceneMonitor.recheckNow": {
24211
+ capName: "scene-monitor",
24212
+ capScope: "device",
24213
+ addonId: null,
24214
+ access: "create"
24215
+ },
24216
+ "sceneMonitor.updateScene": {
24217
+ capName: "scene-monitor",
24218
+ capScope: "device",
24219
+ addonId: null,
24220
+ access: "create"
24221
+ },
23277
24222
  "scriptRunner.run": {
23278
24223
  capName: "script-runner",
23279
24224
  capScope: "device",
@@ -24358,6 +25303,7 @@ Object.freeze({
24358
25303
  Object.freeze({
24359
25304
  "broker": "broker",
24360
25305
  "device-export": "device-export",
25306
+ "llm": "ai",
24361
25307
  "mesh-network": "mesh",
24362
25308
  "mqtt-broker": "broker",
24363
25309
  "network-access": "ingress",