@camstack/addon-pipeline 1.1.55 → 1.1.56

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.
Files changed (37) hide show
  1. package/dist/audio-analyzer/index.js +1 -1
  2. package/dist/audio-analyzer/index.mjs +1 -1
  3. package/dist/detection-pipeline/index.js +23 -16
  4. package/dist/detection-pipeline/index.mjs +23 -16
  5. package/dist/{dist-DI57FC8K.js → dist-ClE6_i0p.js} +942 -38
  6. package/dist/{dist-RWGGPwVx.mjs → dist-CrjLGrkj.mjs} +942 -38
  7. package/dist/motion-wasm/index.js +1 -1
  8. package/dist/motion-wasm/index.mjs +1 -1
  9. package/dist/pipeline-runner/index.js +119 -11
  10. package/dist/pipeline-runner/index.mjs +119 -11
  11. package/dist/recorder/index.js +1 -1
  12. package/dist/recorder/index.mjs +1 -1
  13. package/dist/{remote-source-plane-DU0aRSPv.mjs → remote-source-plane-B28iGi7h.mjs} +1 -1
  14. package/dist/{remote-source-plane-CHgvzzA6.js → remote-source-plane-BAqEHSgm.js} +1 -1
  15. package/dist/session-decode/decode-worker-child.js +5 -3
  16. package/dist/session-decode/decode-worker-child.mjs +5 -3
  17. package/dist/{step-definitions-CNBFKjZe.js → step-definitions-C9kUXgC7.js} +2 -2
  18. package/dist/{step-definitions-CP9kVSml.mjs → step-definitions-dCghpdRo.mjs} +2 -2
  19. package/dist/stream-broker/_stub.js +79 -79
  20. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-mDCPzmT3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D4xH4Tm-.mjs} +2 -2
  21. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D2z_vRMH.mjs +26 -0
  22. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Dn_pxzP-.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-TWCUWhCm.mjs} +2 -2
  23. package/dist/stream-broker/{hostInit-GM_CI22k.mjs → hostInit-Di9WUNlQ.mjs} +2 -2
  24. package/dist/stream-broker/index.js +60 -3
  25. package/dist/stream-broker/index.mjs +60 -3
  26. package/dist/stream-broker/remoteEntry.js +1 -1
  27. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-BChW0ntM.js → MaskShapeCanvas-DI4BY7W2-Ca93F1js.js} +1 -1
  28. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-DDzqEbSe.js → MotionZonesSettings-NcxxQN8r-CDqgb-WA.js} +1 -1
  29. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-B879GXaf.js → PrivacyMaskSettings-APgPLF7p-BlxPhY_w.js} +1 -1
  30. package/embed-dist/assets/index-B23riUw8.js +81 -0
  31. package/embed-dist/assets/index-Bmpl9O1K.css +2 -0
  32. package/embed-dist/index.html +2 -2
  33. package/package.json +1 -1
  34. package/python/inference_pool.py +11 -1
  35. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B3gTdHEh.mjs +0 -26
  36. package/embed-dist/assets/index-CC06JBcl.css +0 -2
  37. package/embed-dist/assets/index-CNjQ5rAE.js +0 -81
@@ -4286,6 +4286,14 @@ function object(shape, params) {
4286
4286
  ...normalizeParams(params)
4287
4287
  });
4288
4288
  }
4289
+ function looseObject(shape, params) {
4290
+ return new ZodObject({
4291
+ type: "object",
4292
+ shape,
4293
+ catchall: unknown(),
4294
+ ...normalizeParams(params)
4295
+ });
4296
+ }
4289
4297
  var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
4290
4298
  $ZodUnion.init(inst, def);
4291
4299
  ZodType.init(inst, def);
@@ -4627,7 +4635,7 @@ function _instanceof(cls, params = {}) {
4627
4635
  return inst;
4628
4636
  }
4629
4637
  //#endregion
4630
- //#region ../types/dist/sleep-Baang_XW.mjs
4638
+ //#region ../types/dist/sleep-DkhOVOjW.mjs
4631
4639
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4632
4640
  EventCategory["SystemBoot"] = "system.boot";
4633
4641
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5037,10 +5045,43 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5037
5045
  EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
5038
5046
  EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
5039
5047
  EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
5048
+ /**
5049
+ * Unified track-lifecycle event: ONE category carrying `phase:
5050
+ * 'start' | 'update' | 'end'` with a rich, typed
5051
+ * `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
5052
+ * `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
5053
+ * pair — a consumer subscribes once and branches on `phase`.
5054
+ */
5055
+ EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
5056
+ /**
5057
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5058
+ * (`phase:'start'`). Kept as a soft alias — no known subscribers.
5059
+ */
5040
5060
  EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
5061
+ /**
5062
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5063
+ * (`phase:'end'`). Kept as a soft alias — no known subscribers.
5064
+ */
5041
5065
  EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
5042
5066
  EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
5043
5067
  EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
5068
+ /**
5069
+ * Fired by `addon-post-analysis` whenever a gallery face row changes:
5070
+ * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
5071
+ * `'unassigned'` its identity link changed, `'deleted'` the row was
5072
+ * removed. Telemetry semantics (D8): a lost event only delays a refresh,
5073
+ * never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
5074
+ */
5075
+ EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
5076
+ /**
5077
+ * Fired by `addon-post-analysis` whenever a gallery plate row changes:
5078
+ * `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
5079
+ * `'assigned'` / `'unassigned'` its vehicle link changed
5080
+ * (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
5081
+ * semantics (D8): a lost event only delays a refresh, never a correctness
5082
+ * issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
5083
+ */
5084
+ EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
5044
5085
  EventCategory["FrigateLiveEvent"] = "frigate.live-event";
5045
5086
  EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
5046
5087
  /**
@@ -7009,7 +7050,8 @@ var MODEL_FORMATS = [
7009
7050
  "coreml",
7010
7051
  "openvino",
7011
7052
  "tflite",
7012
- "pt"
7053
+ "pt",
7054
+ "gguf"
7013
7055
  ];
7014
7056
  /**
7015
7057
  * Multi-file format payload.
@@ -7053,7 +7095,8 @@ var ModelFormatsSchema = object({
7053
7095
  coreml: ModelFormatEntrySchema.optional(),
7054
7096
  openvino: ModelFormatEntrySchema.optional(),
7055
7097
  tflite: ModelFormatEntrySchema.optional(),
7056
- pt: ModelFormatEntrySchema.optional()
7098
+ pt: ModelFormatEntrySchema.optional(),
7099
+ gguf: ModelFormatEntrySchema.optional()
7057
7100
  });
7058
7101
  /**
7059
7102
  * Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
@@ -11347,7 +11390,8 @@ var ModelFormatSchema$1 = _enum([
11347
11390
  "coreml",
11348
11391
  "openvino",
11349
11392
  "tflite",
11350
- "pt"
11393
+ "pt",
11394
+ "gguf"
11351
11395
  ]);
11352
11396
  var PipelineSlotSchema = _enum([
11353
11397
  "detector",
@@ -12891,6 +12935,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
12891
12935
  deviceId: number(),
12892
12936
  status: PtzAutotrackStatusSchema
12893
12937
  });
12938
+ /**
12939
+ * scene-monitor — device-scoped reference-region state cap. An operator marks
12940
+ * a rect ROI on a camera frame and names one or more states; the engine
12941
+ * (pipeline-analytics, designated post-processing node) reports which state is
12942
+ * active on an ongoing basis. Two operator-selectable check modes share every-
12943
+ * thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
12944
+ * vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
12945
+ *
12946
+ * D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
12947
+ * derives the device-detail contribution; the provider carries NO hand-written
12948
+ * settings-contribution methods. `status.kind:'push'` — the engine pushes on
12949
+ * every hysteresis flip / availability change; consumers never poll.
12950
+ */
12951
+ /** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
12952
+ * be added without a wire break (matching falls back to any-condition refs). */
12953
+ var SceneConditionSchema = string();
12954
+ /** One captured reference — condition-tagged, model-version-gated. `embedding`
12955
+ * is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
12956
+ var SceneReferenceSchema = object({
12957
+ embedding: array(number()),
12958
+ modelId: string(),
12959
+ condition: SceneConditionSchema,
12960
+ capturedAt: number(),
12961
+ thumbnailMediaId: string().optional()
12962
+ });
12963
+ var SceneMonitorStateSchema = object({
12964
+ id: string(),
12965
+ label: string(),
12966
+ references: array(SceneReferenceSchema),
12967
+ textPrompts: array(string()).optional(),
12968
+ referenceCount: number(),
12969
+ currentlyMatched: boolean()
12970
+ });
12971
+ /** Per-mode comparator params in a discriminated union so an `llm` scene never
12972
+ * carries similarity knobs and vice-versa. */
12973
+ var SceneCheckSchema = discriminatedUnion("mode", [object({
12974
+ mode: literal("similarity"),
12975
+ threshold: number().min(0).max(1),
12976
+ hysteresisCount: number().int().positive()
12977
+ }), object({
12978
+ mode: literal("llm"),
12979
+ prompt: string(),
12980
+ profileId: string().optional(),
12981
+ hysteresisCount: number().int().positive()
12982
+ })]);
12983
+ var SceneMonitorSchema = object({
12984
+ id: string(),
12985
+ label: string(),
12986
+ roi: MaskRectShapeSchema,
12987
+ enabled: boolean(),
12988
+ triggerMode: _enum([
12989
+ "periodic",
12990
+ "on-motion",
12991
+ "both"
12992
+ ]),
12993
+ checkIntervalSec: number().optional(),
12994
+ check: SceneCheckSchema,
12995
+ states: array(SceneMonitorStateSchema),
12996
+ currentStateId: string().nullable(),
12997
+ lastCheckedAt: number().nullable(),
12998
+ lastConfidence: number().nullable(),
12999
+ currentCondition: SceneConditionSchema.nullable(),
13000
+ availability: _enum(["ok", "unavailable"]),
13001
+ unavailableReason: string().nullable()
13002
+ });
13003
+ var SceneMonitorStatusSchema = object({
13004
+ monitors: array(SceneMonitorSchema),
13005
+ lastFetchedAt: number()
13006
+ });
13007
+ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
13008
+ deviceId: number(),
13009
+ label: string(),
13010
+ roi: MaskRectShapeSchema,
13011
+ check: SceneCheckSchema,
13012
+ triggerMode: _enum([
13013
+ "periodic",
13014
+ "on-motion",
13015
+ "both"
13016
+ ]).optional(),
13017
+ checkIntervalSec: number().optional()
13018
+ }), SceneMonitorSchema, {
13019
+ kind: "mutation",
13020
+ auth: "admin"
13021
+ }), method(object({
13022
+ deviceId: number(),
13023
+ monitorId: string(),
13024
+ patch: object({
13025
+ label: string().optional(),
13026
+ roi: MaskRectShapeSchema.optional(),
13027
+ enabled: boolean().optional(),
13028
+ triggerMode: _enum([
13029
+ "periodic",
13030
+ "on-motion",
13031
+ "both"
13032
+ ]).optional(),
13033
+ checkIntervalSec: number().optional(),
13034
+ check: SceneCheckSchema.optional()
13035
+ })
13036
+ }), _void(), {
13037
+ kind: "mutation",
13038
+ auth: "admin"
13039
+ }), method(object({
13040
+ deviceId: number(),
13041
+ monitorId: string()
13042
+ }), _void(), {
13043
+ kind: "mutation",
13044
+ auth: "admin"
13045
+ }), method(object({
13046
+ deviceId: number(),
13047
+ monitorId: string(),
13048
+ stateId: string().optional(),
13049
+ label: string().optional(),
13050
+ condition: SceneConditionSchema.optional()
13051
+ }), object({
13052
+ stateId: string(),
13053
+ referenceCount: number()
13054
+ }), {
13055
+ kind: "mutation",
13056
+ auth: "admin"
13057
+ }), method(object({
13058
+ deviceId: number(),
13059
+ monitorId: string(),
13060
+ stateId: string(),
13061
+ index: number()
13062
+ }), _void(), {
13063
+ kind: "mutation",
13064
+ auth: "admin"
13065
+ }), method(object({
13066
+ deviceId: number(),
13067
+ monitorId: string()
13068
+ }), _void(), {
13069
+ kind: "mutation",
13070
+ auth: "admin"
13071
+ });
12894
13072
  object({
12895
13073
  /** Whether the script is currently executing. */
12896
13074
  isRunning: boolean(),
@@ -13985,7 +14163,12 @@ var NotificationRuleConditionsSchema = object({
13985
14163
  clipDescription: object({
13986
14164
  text: string().min(1),
13987
14165
  minSimilarity: number().min(0).max(1)
13988
- }).optional()
14166
+ }).optional(),
14167
+ /** Match events whose recognized-entity label (face identity name or plate
14168
+ * vehicle name, propagated onto `event.data.label`) is one of these values.
14169
+ * Empty/absent → unaffected (back-compat). Enables "notify me when <named
14170
+ * vehicle/person> is seen". */
14171
+ labels: array(string()).readonly().optional()
13989
14172
  });
13990
14173
  var NotificationRuleTemplateSchema = object({
13991
14174
  title: string(),
@@ -14328,11 +14511,19 @@ method(object({
14328
14511
  * login page needs NO change.
14329
14512
  *
14330
14513
  * - `widget` — a Module-Federation widget the login page mounts (via
14331
- * `loadRemoteBundle`) for an in-page ceremony. Covers the passkey
14332
- * login ceremony, which must run `@simplewebauthn/browser` INSIDE the
14333
- * addon bundle. The referenced widget also declares `preAuth: true` in
14334
- * its `addon-widgets-source` catalog entry. `auth.listLoginMethods`
14335
- * stamps a public `bundleUrl` from `addonId` + `bundle`.
14514
+ * `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
14515
+ * stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
14516
+ * mechanism kept for future use; no shipped addon uses it on the login
14517
+ * page (the passkey ceremony below runs natively in the shell instead).
14518
+ *
14519
+ * - `passkey` — a declarative WebAuthn ceremony the shell renders
14520
+ * natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
14521
+ * a remotely-loaded bundle). Carries the addon's effective `rpId` /
14522
+ * `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
14523
+ * can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
14524
+ * fetching any remote code pre-auth. Contribution stays unconditional —
14525
+ * enrollment state is never leaked pre-auth; visibility is a shell
14526
+ * decision.
14336
14527
  *
14337
14528
  * Every contribution carries a `stage`:
14338
14529
  * - `primary` — shown on the first credentials screen (OIDC /
@@ -14346,30 +14537,45 @@ method(object({
14346
14537
  */
14347
14538
  /** When a login method renders in the two-phase login flow. */
14348
14539
  var LoginStageEnum = _enum(["primary", "second-factor"]);
14349
- /** One login-method contribution — redirect button OR pre-auth widget. */
14350
- var LoginMethodContributionSchema = discriminatedUnion("kind", [object({
14351
- kind: literal("redirect"),
14352
- /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
14353
- id: string(),
14354
- /** Operator-facing button label. */
14355
- label: string(),
14356
- /** lucide-react icon name. */
14357
- icon: string().optional(),
14358
- /** Addon-owned HTTP route the button navigates to (GET). */
14359
- startUrl: string(),
14360
- stage: LoginStageEnum
14361
- }), object({
14362
- kind: literal("widget"),
14363
- /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
14364
- id: string(),
14365
- /** Owning addon id drives the public bundle URL + the MF namespace. */
14366
- addonId: string(),
14367
- /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
14368
- bundle: string(),
14369
- /** MF remote descriptor `{ remoteName, exposedModule, componentKey }`. */
14370
- remote: WidgetRemoteSchema,
14371
- stage: LoginStageEnum
14372
- })]);
14540
+ /** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
14541
+ var LoginMethodContributionSchema = discriminatedUnion("kind", [
14542
+ object({
14543
+ kind: literal("redirect"),
14544
+ /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
14545
+ id: string(),
14546
+ /** Operator-facing button label. */
14547
+ label: string(),
14548
+ /** lucide-react icon name. */
14549
+ icon: string().optional(),
14550
+ /** Addon-owned HTTP route the button navigates to (GET). */
14551
+ startUrl: string(),
14552
+ stage: LoginStageEnum
14553
+ }),
14554
+ object({
14555
+ kind: literal("widget"),
14556
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
14557
+ id: string(),
14558
+ /** Owning addon id — drives the public bundle URL + the MF namespace. */
14559
+ addonId: string(),
14560
+ /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
14561
+ bundle: string(),
14562
+ /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
14563
+ remote: WidgetRemoteSchema,
14564
+ stage: LoginStageEnum
14565
+ }),
14566
+ object({
14567
+ kind: literal("passkey"),
14568
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
14569
+ id: string(),
14570
+ /** Operator-facing button label. */
14571
+ label: string(),
14572
+ stage: LoginStageEnum,
14573
+ /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
14574
+ rpId: string(),
14575
+ /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
14576
+ origin: string().nullable()
14577
+ })
14578
+ ]);
14373
14579
  method(_void(), array(LoginMethodContributionSchema).readonly());
14374
14580
  /**
14375
14581
  * Orchestrator-side destination metadata. The orchestrator computes
@@ -16249,14 +16455,14 @@ var TargetKindCapsSchema = object({
16249
16455
  * the union is large and not meant for runtime validation here; the exported
16250
16456
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
16251
16457
  */
16252
- var ConfigSchemaPassthrough = unknown();
16458
+ var ConfigSchemaPassthrough$1 = unknown();
16253
16459
  var TargetKindSchema = object({
16254
16460
  kind: string(),
16255
16461
  label: string(),
16256
16462
  icon: string(),
16257
16463
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
16258
16464
  addonId: string(),
16259
- configSchema: ConfigSchemaPassthrough,
16465
+ configSchema: ConfigSchemaPassthrough$1,
16260
16466
  supportsDiscovery: boolean(),
16261
16467
  caps: TargetKindCapsSchema
16262
16468
  });
@@ -16309,6 +16515,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
16309
16515
  enabled: boolean()
16310
16516
  }), _void(), { kind: "mutation" });
16311
16517
  /**
16518
+ * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
16519
+ * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
16520
+ * caps stay wire-compatible without a circular cap→cap import.
16521
+ *
16522
+ * Errors are a discriminated-union RESULT, never thrown: the shape survives
16523
+ * every transport tier structurally, and failed calls still write usage rows.
16524
+ * Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
16525
+ */
16526
+ var LlmUsageSchema = object({
16527
+ inputTokens: number(),
16528
+ outputTokens: number()
16529
+ });
16530
+ var LlmErrorCodeSchema = _enum([
16531
+ "timeout",
16532
+ "rate-limited",
16533
+ "auth",
16534
+ "refusal",
16535
+ "bad-request",
16536
+ "unavailable",
16537
+ "no-profile",
16538
+ "budget-exceeded",
16539
+ "adapter-error"
16540
+ ]);
16541
+ var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
16542
+ ok: literal(true),
16543
+ text: string(),
16544
+ model: string(),
16545
+ usage: LlmUsageSchema,
16546
+ truncated: boolean(),
16547
+ latencyMs: number()
16548
+ }), object({
16549
+ ok: literal(false),
16550
+ code: LlmErrorCodeSchema,
16551
+ message: string(),
16552
+ retryAfterMs: number().optional()
16553
+ })]);
16554
+ /**
16555
+ * `Uint8Array` is the sanctioned binary convention — superjson + the UDS
16556
+ * MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
16557
+ * notification-output.cap.ts:27-31 precedents).
16558
+ */
16559
+ var LlmImageSchema = object({
16560
+ bytes: _instanceof(Uint8Array),
16561
+ mimeType: string()
16562
+ });
16563
+ var LlmGenerateBaseInputSchema = object({
16564
+ /** Collection routing (the notification-output posture). */
16565
+ addonId: string().optional(),
16566
+ /** Explicit profile; else the resolution chain (spec §3). */
16567
+ profileId: string().optional(),
16568
+ /** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
16569
+ consumer: string(),
16570
+ system: string().optional(),
16571
+ /** v1: single-turn. `messages[]` is a v2 additive field. */
16572
+ prompt: string(),
16573
+ /** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
16574
+ jsonSchema: record(string(), unknown()).optional(),
16575
+ /** Per-call override of the profile default. */
16576
+ maxTokens: number().int().positive().optional(),
16577
+ temperature: number().optional()
16578
+ });
16579
+ /**
16580
+ * `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
16581
+ * on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
16582
+ * a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
16583
+ * cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
16584
+ * this only through the `llm` cap's methods.
16585
+ *
16586
+ * One running llama-server child per node in v1 (models are RAM-heavy).
16587
+ * Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
16588
+ * watchdog — operator decision #3).
16589
+ */
16590
+ var ManagedModelRefSchema = discriminatedUnion("kind", [
16591
+ object({
16592
+ kind: literal("catalog"),
16593
+ catalogId: string()
16594
+ }),
16595
+ object({
16596
+ kind: literal("url"),
16597
+ url: string(),
16598
+ sha256: string().optional()
16599
+ }),
16600
+ object({
16601
+ kind: literal("path"),
16602
+ path: string()
16603
+ })
16604
+ ]);
16605
+ var ManagedRuntimeConfigSchema = object({
16606
+ /** WHERE the runtime lives — hub or any agent. */
16607
+ nodeId: string(),
16608
+ /** Closed for v1; 'ollama' is a v2 candidate. */
16609
+ engine: _enum(["llama-cpp"]),
16610
+ model: ManagedModelRefSchema,
16611
+ contextSize: number().int().default(4096),
16612
+ /** 0 = CPU-only. */
16613
+ gpuLayers: number().int().default(0),
16614
+ /** Default: cpus-2, clamped ≥1 (resolved node-side). */
16615
+ threads: number().int().optional(),
16616
+ /** Concurrent slots. */
16617
+ parallel: number().int().default(1),
16618
+ /** Else lazy: first generate boots it. */
16619
+ autoStart: boolean().default(false),
16620
+ /** 0 = never; frees RAM after quiet periods. */
16621
+ idleStopMinutes: number().int().default(30)
16622
+ });
16623
+ var LlmRuntimeStatusSchema = object({
16624
+ /** Status is ALWAYS node-qualified. */
16625
+ nodeId: string(),
16626
+ state: _enum([
16627
+ "stopped",
16628
+ "downloading",
16629
+ "starting",
16630
+ "ready",
16631
+ "crashed",
16632
+ "failed"
16633
+ ]),
16634
+ pid: number().optional(),
16635
+ port: number().optional(),
16636
+ modelPath: string().optional(),
16637
+ modelId: string().optional(),
16638
+ downloadProgress: number().min(0).max(1).optional(),
16639
+ lastError: string().optional(),
16640
+ crashesInWindow: number(),
16641
+ /** Child RSS (sampled best-effort). */
16642
+ memoryBytes: number().optional(),
16643
+ vramBytes: number().optional()
16644
+ });
16645
+ var LlmNodeModelSchema = object({
16646
+ file: string(),
16647
+ sizeBytes: number(),
16648
+ catalogId: string().optional(),
16649
+ installedAt: number().optional()
16650
+ });
16651
+ var LlmRuntimeDiskUsageSchema = object({
16652
+ nodeId: string(),
16653
+ modelsBytes: number(),
16654
+ freeBytes: number().optional()
16655
+ });
16656
+ method(LlmGenerateBaseInputSchema.extend({
16657
+ images: array(LlmImageSchema).optional(),
16658
+ runtime: ManagedRuntimeConfigSchema,
16659
+ /** The managed profile's timeout, threaded by the hub provider. */
16660
+ timeoutMs: number().int().positive().optional()
16661
+ }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
16662
+ kind: "mutation",
16663
+ auth: "admin"
16664
+ }), method(object({}), _void(), {
16665
+ kind: "mutation",
16666
+ auth: "admin"
16667
+ }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
16668
+ kind: "mutation",
16669
+ auth: "admin"
16670
+ }), method(object({ file: string() }), _void(), {
16671
+ kind: "mutation",
16672
+ auth: "admin"
16673
+ }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
16674
+ /**
16675
+ * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
16676
+ * methods concat-fan across providers; single-row methods route to ONE
16677
+ * provider by the `addonId` in the call input (the notification-output
16678
+ * posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
16679
+ * (hub-placed); the cap stays open for future providers.
16680
+ *
16681
+ * Profiles are ROWS (data), not addons: one row = one usable model endpoint.
16682
+ * `apiKey` is a password field — providers REDACT it on read and merge on
16683
+ * write; a stored key NEVER round-trips to a client.
16684
+ */
16685
+ var LlmProfileKindSchema = _enum([
16686
+ "openai-compatible",
16687
+ "openai",
16688
+ "anthropic",
16689
+ "google",
16690
+ "managed-local"
16691
+ ]);
16692
+ var LlmProfileSchema = object({
16693
+ id: string(),
16694
+ name: string(),
16695
+ kind: LlmProfileKindSchema,
16696
+ /** Stamped by the provider — keeps the fanned catalog routable. */
16697
+ addonId: string(),
16698
+ enabled: boolean(),
16699
+ /** Vendor model id, or the managed runtime's loaded model. */
16700
+ model: string(),
16701
+ /** Required for openai-compatible; override for cloud kinds. */
16702
+ baseUrl: string().optional(),
16703
+ /** ConfigUISchema type:'password' — never round-trips (spec §5). */
16704
+ apiKey: string().optional(),
16705
+ supportsVision: boolean(),
16706
+ temperature: number().min(0).max(2).optional(),
16707
+ maxTokens: number().int().positive().optional(),
16708
+ timeoutMs: number().int().positive().default(6e4),
16709
+ extraHeaders: record(string(), string()).optional(),
16710
+ /** kind === 'managed-local' only (spec §4). */
16711
+ runtime: ManagedRuntimeConfigSchema.optional()
16712
+ });
16713
+ /** ConfigUISchema tree passed through untyped on the wire (the
16714
+ * notification-output `ConfigSchemaPassthrough` precedent at
16715
+ * notification-output.cap.ts:151); the exported TS type re-tightens it. */
16716
+ var ConfigSchemaPassthrough = unknown();
16717
+ var LlmProfileKindDescriptorSchema = object({
16718
+ kind: LlmProfileKindSchema,
16719
+ label: string(),
16720
+ icon: string(),
16721
+ /** Stamped by each provider so the concat-fanned catalog stays routable. */
16722
+ addonId: string(),
16723
+ configSchema: ConfigSchemaPassthrough
16724
+ });
16725
+ var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
16726
+ var LlmDefaultSchema = object({
16727
+ selector: LlmDefaultSelectorSchema,
16728
+ profileId: string()
16729
+ });
16730
+ /** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
16731
+ var LlmUsageRollupSchema = object({
16732
+ day: string(),
16733
+ consumer: string(),
16734
+ profileId: string(),
16735
+ calls: number(),
16736
+ okCalls: number(),
16737
+ errorCalls: number(),
16738
+ inputTokens: number(),
16739
+ outputTokens: number(),
16740
+ avgLatencyMs: number()
16741
+ });
16742
+ /** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
16743
+ var ManagedModelCatalogEntrySchema = object({
16744
+ id: string(),
16745
+ label: string(),
16746
+ family: string(),
16747
+ purpose: _enum(["text", "vision"]),
16748
+ url: string(),
16749
+ sha256: string(),
16750
+ sizeBytes: number(),
16751
+ quantization: string(),
16752
+ /** Load-time guidance shown in the picker. */
16753
+ minRamBytes: number(),
16754
+ contextSizeDefault: number().int(),
16755
+ /** Vision models: companion projector file. */
16756
+ mmprojUrl: string().optional()
16757
+ });
16758
+ var LlmRuntimeNodeSchema = object({
16759
+ nodeId: string(),
16760
+ reachable: boolean(),
16761
+ status: LlmRuntimeStatusSchema.optional(),
16762
+ disk: LlmRuntimeDiskUsageSchema.optional(),
16763
+ error: string().optional()
16764
+ });
16765
+ var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
16766
+ var ProfileRefInputSchema = object({
16767
+ addonId: string(),
16768
+ profileId: string()
16769
+ });
16770
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
16771
+ kind: "mutation",
16772
+ auth: "admin"
16773
+ }), method(ProfileRefInputSchema, _void(), {
16774
+ kind: "mutation",
16775
+ auth: "admin"
16776
+ }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
16777
+ kind: "mutation",
16778
+ auth: "admin"
16779
+ }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
16780
+ selector: LlmDefaultSelectorSchema,
16781
+ profileId: string().nullable()
16782
+ }), _void(), {
16783
+ kind: "mutation",
16784
+ auth: "admin"
16785
+ }), method(object({
16786
+ since: number().optional(),
16787
+ until: number().optional(),
16788
+ consumer: string().optional(),
16789
+ profileId: string().optional()
16790
+ }), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
16791
+ nodeId: string(),
16792
+ model: ManagedModelRefSchema
16793
+ }), _void(), {
16794
+ kind: "mutation",
16795
+ auth: "admin"
16796
+ }), method(object({
16797
+ nodeId: string(),
16798
+ file: string()
16799
+ }), _void(), {
16800
+ kind: "mutation",
16801
+ auth: "admin"
16802
+ }), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
16803
+ kind: "mutation",
16804
+ auth: "admin"
16805
+ }), method(ProfileRefInputSchema, _void(), {
16806
+ kind: "mutation",
16807
+ auth: "admin"
16808
+ });
16809
+ /**
16312
16810
  * Zod schemas for persisted record types.
16313
16811
  *
16314
16812
  * These schemas serve as the single source of truth for types that are
@@ -16524,6 +17022,10 @@ var TrackSchema = object({
16524
17022
  snapshots: array(TrackSnapshotSchema).readonly(),
16525
17023
  /** Deduplicated zones the track has entered at least once. */
16526
17024
  zonesVisited: array(string()).readonly(),
17025
+ /** Deduplicated set of detector classes observed for this track over its
17026
+ * life (a track may be reclassified, e.g. person→vehicle). Absent on
17027
+ * legacy rows written before class accumulation shipped. */
17028
+ classes: array(string()).readonly().optional(),
16527
17029
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
16528
17030
  totalDistance: number(),
16529
17031
  state: TrackStateSchema,
@@ -16685,7 +17187,7 @@ var KeyEventSchema = object({
16685
17187
  /** Track lifetime in ms (lastSeen - firstSeen). */
16686
17188
  windowMs: number().optional()
16687
17189
  });
16688
- var TrackedDetectionSchema = object({
17190
+ object({
16689
17191
  trackId: string(),
16690
17192
  className: string(),
16691
17193
  confidence: number(),
@@ -16693,6 +17195,23 @@ var TrackedDetectionSchema = object({
16693
17195
  zones: array(string()).readonly(),
16694
17196
  state: TrackStateSchema
16695
17197
  });
17198
+ var OverlayDetectionSchema = looseObject({
17199
+ id: string(),
17200
+ kind: _enum(["first-level", "detail"]),
17201
+ macroClass: string(),
17202
+ score: number(),
17203
+ bbox: object({
17204
+ x: number(),
17205
+ y: number(),
17206
+ width: number(),
17207
+ height: number()
17208
+ }),
17209
+ labels: array(looseObject({
17210
+ label: string(),
17211
+ score: number()
17212
+ })).readonly(),
17213
+ parentId: string().optional()
17214
+ });
16696
17215
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
16697
17216
  var SearchObjectEventsInput = object({
16698
17217
  text: string(),
@@ -16703,6 +17222,20 @@ var SearchObjectEventsInput = object({
16703
17222
  limit: number().default(50),
16704
17223
  minScore: number().min(0).max(1).default(.2)
16705
17224
  });
17225
+ var TrackCascadeCountsSchema = object({
17226
+ /** Persisted track roots deleted (authoritative). */
17227
+ tracks: number().int(),
17228
+ /** Object events removed with their tracks (best-effort; see note above). */
17229
+ events: number().int(),
17230
+ /** Track/face/plate-owned media removed (best-effort). Never identity media. */
17231
+ media: number().int(),
17232
+ /** Unassigned (non-enrolled) face reads removed (best-effort). */
17233
+ faces: number().int(),
17234
+ /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
17235
+ plates: number().int(),
17236
+ /** Per-track CLIP search vectors removed (best-effort). */
17237
+ embeddings: number().int()
17238
+ });
16706
17239
  DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
16707
17240
  deviceId: number(),
16708
17241
  trackId: string()
@@ -16734,6 +17267,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16734
17267
  }), {
16735
17268
  kind: "mutation",
16736
17269
  auth: "admin"
17270
+ }), method(object({
17271
+ deviceId: number(),
17272
+ cutoffMs: number()
17273
+ }), TrackCascadeCountsSchema, {
17274
+ kind: "mutation",
17275
+ auth: "admin"
17276
+ }), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
17277
+ kind: "mutation",
17278
+ auth: "admin"
17279
+ }), method(object({
17280
+ deviceId: number(),
17281
+ trackIds: array(string()).min(1)
17282
+ }), object({
17283
+ deleted: number().int(),
17284
+ failed: array(string()).readonly()
17285
+ }), {
17286
+ kind: "mutation",
17287
+ auth: "admin"
16737
17288
  }), method(object({
16738
17289
  eventId: string(),
16739
17290
  kind: MediaFileKindEnum.optional()
@@ -16742,7 +17293,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16742
17293
  timestamp: number(),
16743
17294
  frameWidth: number(),
16744
17295
  frameHeight: number(),
16745
- detections: array(TrackedDetectionSchema).readonly()
17296
+ detections: array(OverlayDetectionSchema).readonly()
16746
17297
  }), object({
16747
17298
  deviceId: number(),
16748
17299
  trackId: string(),
@@ -19606,6 +20157,24 @@ DeviceType.Camera, method(object({
19606
20157
  deviceId: number(),
19607
20158
  status: OsdStatusSchema
19608
20159
  });
20160
+ var VehicleSchema = object({
20161
+ id: string(),
20162
+ name: string(),
20163
+ sampleCount: number().int().nonnegative(),
20164
+ coverMediaKey: string().optional(),
20165
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
20166
+ coverBase64: string().optional()
20167
+ });
20168
+ var VehicleSampleInfoSchema = object({
20169
+ id: string(),
20170
+ /** The plate text this sample enrolled (self-labeling — no embedding). */
20171
+ text: string(),
20172
+ /** OCR confidence of the enrolled read (0..1). */
20173
+ score: number(),
20174
+ addedAt: number().int(),
20175
+ deviceId: number().int().optional(),
20176
+ base64: string().optional()
20177
+ });
19609
20178
  var PlateInfoSchema = object({
19610
20179
  plateId: string(),
19611
20180
  deviceId: number().int(),
@@ -19617,6 +20186,16 @@ var PlateInfoSchema = object({
19617
20186
  score: number(),
19618
20187
  /** True when the text was manually corrected (exempt from retention). */
19619
20188
  corrected: boolean(),
20189
+ /** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
20190
+ recognizedVehicleId: string().optional(),
20191
+ /** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
20192
+ vehicleName: string().optional(),
20193
+ /** True once the read was assigned to a vehicle (enrolled as a sample). */
20194
+ assigned: boolean(),
20195
+ /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
20196
+ plateBbox: BoundingBoxSchema.optional(),
20197
+ /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
20198
+ keyFrameMediaKey: string().optional(),
19620
20199
  base64: string().optional()
19621
20200
  });
19622
20201
  var MediaFileLiteSchema = object({
@@ -19656,6 +20235,48 @@ method(object({
19656
20235
  }), method(object({ plateId: string() }), _void(), {
19657
20236
  kind: "mutation",
19658
20237
  auth: "admin"
20238
+ }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
20239
+ kind: "mutation",
20240
+ auth: "admin"
20241
+ }), method(object({
20242
+ id: string(),
20243
+ name: string().min(1)
20244
+ }), _void(), {
20245
+ kind: "mutation",
20246
+ auth: "admin"
20247
+ }), method(object({ id: string() }), _void(), {
20248
+ kind: "mutation",
20249
+ auth: "admin"
20250
+ }), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
20251
+ vehicleId: string(),
20252
+ sampleId: string()
20253
+ }), _void(), {
20254
+ kind: "mutation",
20255
+ auth: "admin"
20256
+ }), method(object({
20257
+ plateId: string(),
20258
+ vehicleId: string()
20259
+ }), _void(), {
20260
+ kind: "mutation",
20261
+ auth: "admin"
20262
+ }), method(object({ plateId: string() }), _void(), {
20263
+ kind: "mutation",
20264
+ auth: "admin"
20265
+ }), method(object({
20266
+ plateIds: array(string()).min(1),
20267
+ vehicleId: string()
20268
+ }), object({
20269
+ assigned: number().int(),
20270
+ failed: array(string()).readonly()
20271
+ }), {
20272
+ kind: "mutation",
20273
+ auth: "admin"
20274
+ }), method(object({ plateIds: array(string()).min(1) }), object({
20275
+ unassigned: number().int(),
20276
+ failed: array(string()).readonly()
20277
+ }), {
20278
+ kind: "mutation",
20279
+ auth: "admin"
19659
20280
  });
19660
20281
  var ModelFormatSchema = _enum(MODEL_FORMATS);
19661
20282
  var HwAccelBackendInputSchema = _enum([
@@ -22234,6 +22855,168 @@ Object.freeze({
22234
22855
  addonId: null,
22235
22856
  access: "create"
22236
22857
  },
22858
+ "llm.deleteModel": {
22859
+ capName: "llm",
22860
+ capScope: "system",
22861
+ addonId: null,
22862
+ access: "delete"
22863
+ },
22864
+ "llm.deleteProfile": {
22865
+ capName: "llm",
22866
+ capScope: "system",
22867
+ addonId: null,
22868
+ access: "delete"
22869
+ },
22870
+ "llm.generate": {
22871
+ capName: "llm",
22872
+ capScope: "system",
22873
+ addonId: null,
22874
+ access: "create"
22875
+ },
22876
+ "llm.generateVision": {
22877
+ capName: "llm",
22878
+ capScope: "system",
22879
+ addonId: null,
22880
+ access: "create"
22881
+ },
22882
+ "llm.getDefaults": {
22883
+ capName: "llm",
22884
+ capScope: "system",
22885
+ addonId: null,
22886
+ access: "view"
22887
+ },
22888
+ "llm.getRuntimeStatus": {
22889
+ capName: "llm",
22890
+ capScope: "system",
22891
+ addonId: null,
22892
+ access: "view"
22893
+ },
22894
+ "llm.getUsage": {
22895
+ capName: "llm",
22896
+ capScope: "system",
22897
+ addonId: null,
22898
+ access: "view"
22899
+ },
22900
+ "llm.installModel": {
22901
+ capName: "llm",
22902
+ capScope: "system",
22903
+ addonId: null,
22904
+ access: "create"
22905
+ },
22906
+ "llm.listModelCatalog": {
22907
+ capName: "llm",
22908
+ capScope: "system",
22909
+ addonId: null,
22910
+ access: "view"
22911
+ },
22912
+ "llm.listModels": {
22913
+ capName: "llm",
22914
+ capScope: "system",
22915
+ addonId: null,
22916
+ access: "view"
22917
+ },
22918
+ "llm.listNodeModels": {
22919
+ capName: "llm",
22920
+ capScope: "system",
22921
+ addonId: null,
22922
+ access: "view"
22923
+ },
22924
+ "llm.listProfileKinds": {
22925
+ capName: "llm",
22926
+ capScope: "system",
22927
+ addonId: null,
22928
+ access: "view"
22929
+ },
22930
+ "llm.listProfiles": {
22931
+ capName: "llm",
22932
+ capScope: "system",
22933
+ addonId: null,
22934
+ access: "view"
22935
+ },
22936
+ "llm.listRuntimeNodes": {
22937
+ capName: "llm",
22938
+ capScope: "system",
22939
+ addonId: null,
22940
+ access: "view"
22941
+ },
22942
+ "llm.setDefault": {
22943
+ capName: "llm",
22944
+ capScope: "system",
22945
+ addonId: null,
22946
+ access: "create"
22947
+ },
22948
+ "llm.startRuntime": {
22949
+ capName: "llm",
22950
+ capScope: "system",
22951
+ addonId: null,
22952
+ access: "create"
22953
+ },
22954
+ "llm.stopRuntime": {
22955
+ capName: "llm",
22956
+ capScope: "system",
22957
+ addonId: null,
22958
+ access: "create"
22959
+ },
22960
+ "llm.testProfile": {
22961
+ capName: "llm",
22962
+ capScope: "system",
22963
+ addonId: null,
22964
+ access: "create"
22965
+ },
22966
+ "llm.upsertProfile": {
22967
+ capName: "llm",
22968
+ capScope: "system",
22969
+ addonId: null,
22970
+ access: "create"
22971
+ },
22972
+ "llmRuntime.complete": {
22973
+ capName: "llm-runtime",
22974
+ capScope: "system",
22975
+ addonId: null,
22976
+ access: "create"
22977
+ },
22978
+ "llmRuntime.deleteModel": {
22979
+ capName: "llm-runtime",
22980
+ capScope: "system",
22981
+ addonId: null,
22982
+ access: "delete"
22983
+ },
22984
+ "llmRuntime.ensureStarted": {
22985
+ capName: "llm-runtime",
22986
+ capScope: "system",
22987
+ addonId: null,
22988
+ access: "create"
22989
+ },
22990
+ "llmRuntime.getDiskUsage": {
22991
+ capName: "llm-runtime",
22992
+ capScope: "system",
22993
+ addonId: null,
22994
+ access: "view"
22995
+ },
22996
+ "llmRuntime.installModel": {
22997
+ capName: "llm-runtime",
22998
+ capScope: "system",
22999
+ addonId: null,
23000
+ access: "create"
23001
+ },
23002
+ "llmRuntime.listLocalModels": {
23003
+ capName: "llm-runtime",
23004
+ capScope: "system",
23005
+ addonId: null,
23006
+ access: "view"
23007
+ },
23008
+ "llmRuntime.status": {
23009
+ capName: "llm-runtime",
23010
+ capScope: "system",
23011
+ addonId: null,
23012
+ access: "view"
23013
+ },
23014
+ "llmRuntime.stop": {
23015
+ capName: "llm-runtime",
23016
+ capScope: "system",
23017
+ addonId: null,
23018
+ access: "create"
23019
+ },
22237
23020
  "localNetwork.getAllowedAddresses": {
22238
23021
  capName: "local-network",
22239
23022
  capScope: "system",
@@ -22864,6 +23647,12 @@ Object.freeze({
22864
23647
  addonId: null,
22865
23648
  access: "delete"
22866
23649
  },
23650
+ "pipelineAnalytics.deleteTracks": {
23651
+ capName: "pipeline-analytics",
23652
+ capScope: "device",
23653
+ addonId: null,
23654
+ access: "delete"
23655
+ },
22867
23656
  "pipelineAnalytics.getActiveTracks": {
22868
23657
  capName: "pipeline-analytics",
22869
23658
  capScope: "device",
@@ -22930,12 +23719,24 @@ Object.freeze({
22930
23719
  addonId: null,
22931
23720
  access: "create"
22932
23721
  },
23722
+ "pipelineAnalytics.pruneTracksBefore": {
23723
+ capName: "pipeline-analytics",
23724
+ capScope: "device",
23725
+ addonId: null,
23726
+ access: "create"
23727
+ },
22933
23728
  "pipelineAnalytics.searchObjectEvents": {
22934
23729
  capName: "pipeline-analytics",
22935
23730
  capScope: "device",
22936
23731
  addonId: null,
22937
23732
  access: "view"
22938
23733
  },
23734
+ "pipelineAnalytics.wipeAllAnalytics": {
23735
+ capName: "pipeline-analytics",
23736
+ capScope: "device",
23737
+ addonId: null,
23738
+ access: "delete"
23739
+ },
22939
23740
  "pipelineExecutor.cacheFrameInPool": {
22940
23741
  capName: "pipeline-executor",
22941
23742
  capScope: "system",
@@ -23440,18 +24241,42 @@ Object.freeze({
23440
24241
  addonId: null,
23441
24242
  access: "create"
23442
24243
  },
24244
+ "plateGallery.assignPlate": {
24245
+ capName: "plate-gallery",
24246
+ capScope: "system",
24247
+ addonId: null,
24248
+ access: "create"
24249
+ },
24250
+ "plateGallery.assignPlates": {
24251
+ capName: "plate-gallery",
24252
+ capScope: "system",
24253
+ addonId: null,
24254
+ access: "create"
24255
+ },
23443
24256
  "plateGallery.correctPlateText": {
23444
24257
  capName: "plate-gallery",
23445
24258
  capScope: "system",
23446
24259
  addonId: null,
23447
24260
  access: "create"
23448
24261
  },
24262
+ "plateGallery.createVehicle": {
24263
+ capName: "plate-gallery",
24264
+ capScope: "system",
24265
+ addonId: null,
24266
+ access: "create"
24267
+ },
23449
24268
  "plateGallery.deletePlate": {
23450
24269
  capName: "plate-gallery",
23451
24270
  capScope: "system",
23452
24271
  addonId: null,
23453
24272
  access: "delete"
23454
24273
  },
24274
+ "plateGallery.deleteVehicle": {
24275
+ capName: "plate-gallery",
24276
+ capScope: "system",
24277
+ addonId: null,
24278
+ access: "delete"
24279
+ },
23455
24280
  "plateGallery.getPlateByTrack": {
23456
24281
  capName: "plate-gallery",
23457
24282
  capScope: "system",
@@ -23470,6 +24295,30 @@ Object.freeze({
23470
24295
  addonId: null,
23471
24296
  access: "view"
23472
24297
  },
24298
+ "plateGallery.listVehicles": {
24299
+ capName: "plate-gallery",
24300
+ capScope: "system",
24301
+ addonId: null,
24302
+ access: "view"
24303
+ },
24304
+ "plateGallery.listVehicleSamples": {
24305
+ capName: "plate-gallery",
24306
+ capScope: "system",
24307
+ addonId: null,
24308
+ access: "view"
24309
+ },
24310
+ "plateGallery.removeVehicleSample": {
24311
+ capName: "plate-gallery",
24312
+ capScope: "system",
24313
+ addonId: null,
24314
+ access: "delete"
24315
+ },
24316
+ "plateGallery.renameVehicle": {
24317
+ capName: "plate-gallery",
24318
+ capScope: "system",
24319
+ addonId: null,
24320
+ access: "create"
24321
+ },
23473
24322
  "plateGallery.searchPlates": {
23474
24323
  capName: "plate-gallery",
23475
24324
  capScope: "system",
@@ -23482,6 +24331,18 @@ Object.freeze({
23482
24331
  addonId: null,
23483
24332
  access: "view"
23484
24333
  },
24334
+ "plateGallery.unassignPlate": {
24335
+ capName: "plate-gallery",
24336
+ capScope: "system",
24337
+ addonId: null,
24338
+ access: "create"
24339
+ },
24340
+ "plateGallery.unassignPlates": {
24341
+ capName: "plate-gallery",
24342
+ capScope: "system",
24343
+ addonId: null,
24344
+ access: "create"
24345
+ },
23485
24346
  "platformProbe.getCapabilities": {
23486
24347
  capName: "platform-probe",
23487
24348
  capScope: "system",
@@ -23674,6 +24535,48 @@ Object.freeze({
23674
24535
  addonId: null,
23675
24536
  access: "create"
23676
24537
  },
24538
+ "sceneMonitor.captureReference": {
24539
+ capName: "scene-monitor",
24540
+ capScope: "device",
24541
+ addonId: null,
24542
+ access: "create"
24543
+ },
24544
+ "sceneMonitor.createScene": {
24545
+ capName: "scene-monitor",
24546
+ capScope: "device",
24547
+ addonId: null,
24548
+ access: "create"
24549
+ },
24550
+ "sceneMonitor.deleteReference": {
24551
+ capName: "scene-monitor",
24552
+ capScope: "device",
24553
+ addonId: null,
24554
+ access: "delete"
24555
+ },
24556
+ "sceneMonitor.deleteScene": {
24557
+ capName: "scene-monitor",
24558
+ capScope: "device",
24559
+ addonId: null,
24560
+ access: "delete"
24561
+ },
24562
+ "sceneMonitor.listScenes": {
24563
+ capName: "scene-monitor",
24564
+ capScope: "device",
24565
+ addonId: null,
24566
+ access: "view"
24567
+ },
24568
+ "sceneMonitor.recheckNow": {
24569
+ capName: "scene-monitor",
24570
+ capScope: "device",
24571
+ addonId: null,
24572
+ access: "create"
24573
+ },
24574
+ "sceneMonitor.updateScene": {
24575
+ capName: "scene-monitor",
24576
+ capScope: "device",
24577
+ addonId: null,
24578
+ access: "create"
24579
+ },
23677
24580
  "scriptRunner.run": {
23678
24581
  capName: "script-runner",
23679
24582
  capScope: "device",
@@ -24758,6 +25661,7 @@ Object.freeze({
24758
25661
  Object.freeze({
24759
25662
  "broker": "broker",
24760
25663
  "device-export": "device-export",
25664
+ "llm": "ai",
24761
25665
  "mesh-network": "mesh",
24762
25666
  "mqtt-broker": "broker",
24763
25667
  "network-access": "ingress",