@camstack/addon-admin-ui 1.1.50 → 1.1.51

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 (99) hide show
  1. package/dist/assets/{AddLocationWizard-CIqEDdCn.js → AddLocationWizard-C5_TbCTT.js} +1 -1
  2. package/dist/assets/{AddonCollectionPage-oYV5gLkL.js → AddonCollectionPage-DdcqJdFw.js} +1 -1
  3. package/dist/assets/Addons-DENvhGXs.js +1 -0
  4. package/dist/assets/{AdminTabs-BeF-jlOp.js → AdminTabs-rrSAZD3O.js} +1 -1
  5. package/dist/assets/AiProfiles-I6sx_kzO.js +1 -0
  6. package/dist/assets/{BrokerForm-CKF91l2P.js → BrokerForm-DL1TXr2B.js} +1 -1
  7. package/dist/assets/{Capabilities-DjYa3mVl.js → Capabilities-G9KINvPO.js} +1 -1
  8. package/dist/assets/CapabilityBadges-Q2qm_QNP.js +1 -0
  9. package/dist/assets/Cluster-D5fOIpSM.js +1 -0
  10. package/dist/assets/{Dashboard-B7W-1CPO.js → Dashboard-B9Qq3GKN.js} +1 -1
  11. package/dist/assets/Data-F4Z7wulI.js +1 -0
  12. package/dist/assets/DetectionIntelligence-DysJUSVa.js +1 -0
  13. package/dist/assets/DeviceDetail-DnOzyoSG.js +2 -0
  14. package/dist/assets/{Devices-DY58j8Im.js → Devices-BbPVwY-D.js} +1 -1
  15. package/dist/assets/EmbedPlayerPage-DDKRlZMR.js +1 -0
  16. package/dist/assets/Events-CdArV4tl.js +1 -0
  17. package/dist/assets/{FormBuilder-DF9HdVVE.js → FormBuilder-vCzPEjPM.js} +1 -1
  18. package/dist/assets/Identity-Dmu7k7pC.js +1 -0
  19. package/dist/assets/IntegrationDetail-CXnSPpKp.js +1 -0
  20. package/dist/assets/{Integrations-Cwy28tRf.js → Integrations-AlnqolAL.js} +1 -1
  21. package/dist/assets/Integrations-BIx0NuFX.js +1 -0
  22. package/dist/assets/{Logs-CH6InwRa.js → Logs-CBDPfk6Z.js} +1 -1
  23. package/dist/assets/{MotionZonesSettings-wgT8qNCk.js → MotionZonesSettings-CFYI6s-_.js} +1 -1
  24. package/dist/assets/{MyAccess-pia6abG8.js → MyAccess-6qmJkzue.js} +1 -1
  25. package/dist/assets/Network-CX6T3X7F.js +1 -0
  26. package/dist/assets/{NodeAddonsSettingsPanel-21ajRiKU.js → NodeAddonsSettingsPanel-CynxbOEk.js} +1 -1
  27. package/dist/assets/NotificationTargets-DFmIRZfI.js +1 -0
  28. package/dist/assets/Pipeline-HtfEITUn.js +1 -0
  29. package/dist/assets/{PrivacyMaskSettings-aoGQ9CVn.js → PrivacyMaskSettings-CbVO58Pz.js} +1 -1
  30. package/dist/assets/{ProviderIcon-B00C6yVI.js → ProviderIcon-Bc8wWWqT.js} +1 -1
  31. package/dist/assets/{ScanNetworkModal-DTAMAK8z.js → ScanNetworkModal-Bxjqv5aL.js} +1 -1
  32. package/dist/assets/{ServerManagement-B0UENejd.js → ServerManagement-QTJJqUUL.js} +1 -1
  33. package/dist/assets/{Settings-CyUdtPyP.js → Settings-DdHS4and.js} +1 -1
  34. package/dist/assets/{Showroom-DqNnYNbB.js → Showroom-BPudQyp1.js} +1 -1
  35. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DcgCF70N.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DzuuqQDr.js} +1 -1
  36. package/dist/assets/authed-media-XfBD4Ma-.js +1 -0
  37. package/dist/assets/{build-cluster-graph-DLb-k44M.js → build-cluster-graph-C8acdV1N.js} +2 -2
  38. package/dist/assets/circle-check-big-Ci2qKS9O.js +1 -0
  39. package/dist/assets/clock-DvPVZaz2.js +1 -0
  40. package/dist/assets/{copy-PDaNKoDE.js → copy-jHaoig1Z.js} +1 -1
  41. package/dist/assets/debounced-invalidate-BtUOLpbU.js +1 -0
  42. package/dist/assets/dist-BpbjPYkI.js +7 -0
  43. package/dist/assets/{dist-D248MGg1.js → dist-D9oUwgkq.js} +1 -1
  44. package/dist/assets/{download-iZu8ddva.js → download-B8Uv2BOb.js} +1 -1
  45. package/dist/assets/film-CzfyiWOL.js +1 -0
  46. package/dist/assets/{hostInit-DT-Sx4uZ.js → hostInit-DY1mt8Vv.js} +1 -1
  47. package/dist/assets/index-CRBZZNxE.css +2 -0
  48. package/dist/assets/index-msAq9OfF.js +4 -0
  49. package/dist/assets/{key-round-xzAl99gK.js → key-round-B1u42XSy.js} +1 -1
  50. package/dist/assets/{mf-entry-bootstrap-0-c91235d9.js → mf-entry-bootstrap-0-3bf5f308.js} +2 -2
  51. package/dist/assets/{pencil-DL1TJsTc.js → pencil-BEjUgvtJ.js} +1 -1
  52. package/dist/assets/{player-overlays-D3fMTMSy.js → player-overlays-DzoWZHnz.js} +1 -1
  53. package/dist/assets/plus-CDCmEkS2.js +1 -0
  54. package/dist/assets/{radio-Cidrh6lI.js → radio-CvK77vEM.js} +1 -1
  55. package/dist/assets/{refresh-cw-CQ8ZPCKP.js → refresh-cw-BoM3__QD.js} +1 -1
  56. package/dist/assets/remoteEntry-Bm4uDKFt.js +1 -0
  57. package/dist/assets/{rotate-ccw-CdNSKqrT.js → rotate-ccw-CG8Dl-0A.js} +1 -1
  58. package/dist/assets/rotate-cw-BcZwqoT5.js +1 -0
  59. package/dist/assets/{schemas-CuE8EXQ7.js → schemas-DSTjX9zr.js} +4 -4
  60. package/dist/assets/search-Dh7U_-43.js +1 -0
  61. package/dist/assets/send-DdbXLRkn.js +1 -0
  62. package/dist/assets/square-Mc9QW6dp.js +1 -0
  63. package/dist/assets/{square-check-big-DHo5VpxB.js → square-check-big-BIo_99Ss.js} +1 -1
  64. package/dist/assets/src-B_-PRq3y.js +67 -0
  65. package/dist/assets/src-DYmw2iAG.js +7 -0
  66. package/dist/assets/{upload-CbQEsRc1.js → upload-DUlWrtL9.js} +1 -1
  67. package/dist/assets/{useDevice-BIRPCUj3.js → useDevice-CDxSSKpG.js} +1 -1
  68. package/dist/assets/{useEventInvalidation-dY_jfjb6.js → useEventInvalidation-Bwynn5Fd.js} +1 -1
  69. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-B65PZoVz.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CmeeGMkM.js} +2 -2
  70. package/dist/assets/{wifi-CXcT5hFl.js → wifi-CW0cSDNa.js} +1 -1
  71. package/dist/assets/{zap-IxXrBEjL.js → zap-CPf6Bdf3.js} +1 -1
  72. package/dist/index.html +7 -7
  73. package/dist/server/addon.js +943 -39
  74. package/package.json +2 -1
  75. package/dist/assets/Addons-DXHAaRyv.js +0 -1
  76. package/dist/assets/CapabilityBadges-Ch3OxAx_.js +0 -1
  77. package/dist/assets/Cluster-B0VcGezF.js +0 -1
  78. package/dist/assets/Data-DTdFNsIK.js +0 -1
  79. package/dist/assets/DetectionIntelligence-Dlqt7Nfw.js +0 -1
  80. package/dist/assets/DeviceDetail-BoyqcoSb.js +0 -2
  81. package/dist/assets/EmbedPlayerPage-7fAe8VOM.js +0 -1
  82. package/dist/assets/Identity-CcxXGRs-.js +0 -1
  83. package/dist/assets/IntegrationDetail-3unRfrYT.js +0 -1
  84. package/dist/assets/Integrations-VffZ4PwO.js +0 -1
  85. package/dist/assets/Network-Cs7w2ldQ.js +0 -1
  86. package/dist/assets/NotificationTargets-BPToXpbO.js +0 -1
  87. package/dist/assets/Pipeline-D9UHFkhz.js +0 -1
  88. package/dist/assets/circle-check-big-B3D63yK2.js +0 -1
  89. package/dist/assets/dist-DK5byzu0.js +0 -7
  90. package/dist/assets/index-BFJ6KO0x.css +0 -2
  91. package/dist/assets/index-pSZYK5ny.js +0 -4
  92. package/dist/assets/plus-CRDyDYzj.js +0 -1
  93. package/dist/assets/remoteEntry-CMix6vvq.js +0 -1
  94. package/dist/assets/rotate-cw-DR-mTm0L.js +0 -1
  95. package/dist/assets/search-M9sg9sgJ.js +0 -1
  96. package/dist/assets/sparkles-Uqh90jkF.js +0 -1
  97. package/dist/assets/square-DeI3vDTo.js +0 -1
  98. package/dist/assets/src-B45-uhaF.js +0 -7
  99. package/dist/assets/src-DUz15ij3.js +0 -67
@@ -4288,6 +4288,14 @@ function object(shape, params) {
4288
4288
  ...normalizeParams(params)
4289
4289
  });
4290
4290
  }
4291
+ function looseObject(shape, params) {
4292
+ return new ZodObject({
4293
+ type: "object",
4294
+ shape,
4295
+ catchall: unknown(),
4296
+ ...normalizeParams(params)
4297
+ });
4298
+ }
4291
4299
  var ZodUnion = /*@__PURE__*/ $constructor("ZodUnion", (inst, def) => {
4292
4300
  $ZodUnion.init(inst, def);
4293
4301
  ZodType.init(inst, def);
@@ -4629,7 +4637,7 @@ function _instanceof(cls, params = {}) {
4629
4637
  return inst;
4630
4638
  }
4631
4639
  //#endregion
4632
- //#region ../types/dist/sleep-Baang_XW.mjs
4640
+ //#region ../types/dist/sleep-DkhOVOjW.mjs
4633
4641
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4634
4642
  EventCategory["SystemBoot"] = "system.boot";
4635
4643
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5039,10 +5047,43 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5039
5047
  EventCategory["EnrichmentEmbeddingStored"] = "enrichment.embedding.stored";
5040
5048
  EventCategory["EnrichmentSceneStateChanged"] = "enrichment.scene.state-changed";
5041
5049
  EventCategory["EnrichmentActivitySummary"] = "enrichment.activity.summary";
5050
+ /**
5051
+ * Unified track-lifecycle event: ONE category carrying `phase:
5052
+ * 'start' | 'update' | 'end'` with a rich, typed
5053
+ * `PipelineAnalyticsTrackLifecyclePayload`. Supersedes the thin
5054
+ * `PipelineAnalyticsTrackStarted` / `PipelineAnalyticsTrackEnded`
5055
+ * pair — a consumer subscribes once and branches on `phase`.
5056
+ */
5057
+ EventCategory["PipelineAnalyticsTrackLifecycle"] = "pipeline-analytics.track-lifecycle";
5058
+ /**
5059
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5060
+ * (`phase:'start'`). Kept as a soft alias — no known subscribers.
5061
+ */
5042
5062
  EventCategory["PipelineAnalyticsTrackStarted"] = "pipeline-analytics.track-started";
5063
+ /**
5064
+ * @deprecated Superseded by {@link PipelineAnalyticsTrackLifecycle}
5065
+ * (`phase:'end'`). Kept as a soft alias — no known subscribers.
5066
+ */
5043
5067
  EventCategory["PipelineAnalyticsTrackEnded"] = "pipeline-analytics.track-ended";
5044
5068
  EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
5045
5069
  EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
5070
+ /**
5071
+ * Fired by `addon-post-analysis` whenever a gallery face row changes:
5072
+ * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
5073
+ * `'unassigned'` its identity link changed, `'deleted'` the row was
5074
+ * removed. Telemetry semantics (D8): a lost event only delays a refresh,
5075
+ * never a correctness issue. Payload `PipelineAnalyticsFaceGalleryChangedPayload`.
5076
+ */
5077
+ EventCategory["PipelineAnalyticsFaceGalleryChanged"] = "pipeline-analytics.face-gallery-changed";
5078
+ /**
5079
+ * Fired by `addon-post-analysis` whenever a gallery plate row changes:
5080
+ * `kind:'buffered'` a new read was persisted (`PlateRecognizer.onTrackEnd`),
5081
+ * `'assigned'` / `'unassigned'` its vehicle link changed
5082
+ * (`PlateGalleryProvider`), `'deleted'` the row was removed. Telemetry
5083
+ * semantics (D8): a lost event only delays a refresh, never a correctness
5084
+ * issue. Payload `PipelineAnalyticsPlateGalleryChangedPayload`.
5085
+ */
5086
+ EventCategory["PipelineAnalyticsPlateGalleryChanged"] = "pipeline-analytics.plate-gallery-changed";
5046
5087
  EventCategory["FrigateLiveEvent"] = "frigate.live-event";
5047
5088
  EventCategory["CameraStreamsProfileSlotsChanged"] = "camera-streams.onProfileSlotsChanged";
5048
5089
  /**
@@ -6880,7 +6921,8 @@ var MODEL_FORMATS = [
6880
6921
  "coreml",
6881
6922
  "openvino",
6882
6923
  "tflite",
6883
- "pt"
6924
+ "pt",
6925
+ "gguf"
6884
6926
  ];
6885
6927
  /**
6886
6928
  * Multi-file format payload.
@@ -6924,7 +6966,8 @@ var ModelFormatsSchema = object({
6924
6966
  coreml: ModelFormatEntrySchema.optional(),
6925
6967
  openvino: ModelFormatEntrySchema.optional(),
6926
6968
  tflite: ModelFormatEntrySchema.optional(),
6927
- pt: ModelFormatEntrySchema.optional()
6969
+ pt: ModelFormatEntrySchema.optional(),
6970
+ gguf: ModelFormatEntrySchema.optional()
6928
6971
  });
6929
6972
  /**
6930
6973
  * Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
@@ -10419,7 +10462,8 @@ var ModelFormatSchema$1 = _enum([
10419
10462
  "coreml",
10420
10463
  "openvino",
10421
10464
  "tflite",
10422
- "pt"
10465
+ "pt",
10466
+ "gguf"
10423
10467
  ]);
10424
10468
  var PipelineSlotSchema = _enum([
10425
10469
  "detector",
@@ -11725,6 +11769,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
11725
11769
  deviceId: number(),
11726
11770
  status: PtzAutotrackStatusSchema
11727
11771
  });
11772
+ /**
11773
+ * scene-monitor — device-scoped reference-region state cap. An operator marks
11774
+ * a rect ROI on a camera frame and names one or more states; the engine
11775
+ * (pipeline-analytics, designated post-processing node) reports which state is
11776
+ * active on an ongoing basis. Two operator-selectable check modes share every-
11777
+ * thing except the comparator: `similarity` (CLIP cosine at the same ROI coords
11778
+ * vs condition-tagged references) and `llm` (vision-LLM judgment over the crop).
11779
+ *
11780
+ * D14 device-config archetype (`deviceConfig.ui.kind:'widget'`) — the framework
11781
+ * derives the device-detail contribution; the provider carries NO hand-written
11782
+ * settings-contribution methods. `status.kind:'push'` — the engine pushes on
11783
+ * every hysteresis flip / availability change; consumers never poll.
11784
+ */
11785
+ /** Extensible condition tag. Seeded 'day' | 'night'; open by design so more can
11786
+ * be added without a wire break (matching falls back to any-condition refs). */
11787
+ var SceneConditionSchema = string();
11788
+ /** One captured reference — condition-tagged, model-version-gated. `embedding`
11789
+ * is `number[]` (Float32Array does NOT survive MsgPack/UDS). */
11790
+ var SceneReferenceSchema = object({
11791
+ embedding: array(number()),
11792
+ modelId: string(),
11793
+ condition: SceneConditionSchema,
11794
+ capturedAt: number(),
11795
+ thumbnailMediaId: string().optional()
11796
+ });
11797
+ var SceneMonitorStateSchema = object({
11798
+ id: string(),
11799
+ label: string(),
11800
+ references: array(SceneReferenceSchema),
11801
+ textPrompts: array(string()).optional(),
11802
+ referenceCount: number(),
11803
+ currentlyMatched: boolean()
11804
+ });
11805
+ /** Per-mode comparator params in a discriminated union so an `llm` scene never
11806
+ * carries similarity knobs and vice-versa. */
11807
+ var SceneCheckSchema = discriminatedUnion("mode", [object({
11808
+ mode: literal("similarity"),
11809
+ threshold: number().min(0).max(1),
11810
+ hysteresisCount: number().int().positive()
11811
+ }), object({
11812
+ mode: literal("llm"),
11813
+ prompt: string(),
11814
+ profileId: string().optional(),
11815
+ hysteresisCount: number().int().positive()
11816
+ })]);
11817
+ var SceneMonitorSchema = object({
11818
+ id: string(),
11819
+ label: string(),
11820
+ roi: MaskRectShapeSchema,
11821
+ enabled: boolean(),
11822
+ triggerMode: _enum([
11823
+ "periodic",
11824
+ "on-motion",
11825
+ "both"
11826
+ ]),
11827
+ checkIntervalSec: number().optional(),
11828
+ check: SceneCheckSchema,
11829
+ states: array(SceneMonitorStateSchema),
11830
+ currentStateId: string().nullable(),
11831
+ lastCheckedAt: number().nullable(),
11832
+ lastConfidence: number().nullable(),
11833
+ currentCondition: SceneConditionSchema.nullable(),
11834
+ availability: _enum(["ok", "unavailable"]),
11835
+ unavailableReason: string().nullable()
11836
+ });
11837
+ var SceneMonitorStatusSchema = object({
11838
+ monitors: array(SceneMonitorSchema),
11839
+ lastFetchedAt: number()
11840
+ });
11841
+ DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({
11842
+ deviceId: number(),
11843
+ label: string(),
11844
+ roi: MaskRectShapeSchema,
11845
+ check: SceneCheckSchema,
11846
+ triggerMode: _enum([
11847
+ "periodic",
11848
+ "on-motion",
11849
+ "both"
11850
+ ]).optional(),
11851
+ checkIntervalSec: number().optional()
11852
+ }), SceneMonitorSchema, {
11853
+ kind: "mutation",
11854
+ auth: "admin"
11855
+ }), method(object({
11856
+ deviceId: number(),
11857
+ monitorId: string(),
11858
+ patch: object({
11859
+ label: string().optional(),
11860
+ roi: MaskRectShapeSchema.optional(),
11861
+ enabled: boolean().optional(),
11862
+ triggerMode: _enum([
11863
+ "periodic",
11864
+ "on-motion",
11865
+ "both"
11866
+ ]).optional(),
11867
+ checkIntervalSec: number().optional(),
11868
+ check: SceneCheckSchema.optional()
11869
+ })
11870
+ }), _void(), {
11871
+ kind: "mutation",
11872
+ auth: "admin"
11873
+ }), method(object({
11874
+ deviceId: number(),
11875
+ monitorId: string()
11876
+ }), _void(), {
11877
+ kind: "mutation",
11878
+ auth: "admin"
11879
+ }), method(object({
11880
+ deviceId: number(),
11881
+ monitorId: string(),
11882
+ stateId: string().optional(),
11883
+ label: string().optional(),
11884
+ condition: SceneConditionSchema.optional()
11885
+ }), object({
11886
+ stateId: string(),
11887
+ referenceCount: number()
11888
+ }), {
11889
+ kind: "mutation",
11890
+ auth: "admin"
11891
+ }), method(object({
11892
+ deviceId: number(),
11893
+ monitorId: string(),
11894
+ stateId: string(),
11895
+ index: number()
11896
+ }), _void(), {
11897
+ kind: "mutation",
11898
+ auth: "admin"
11899
+ }), method(object({
11900
+ deviceId: number(),
11901
+ monitorId: string()
11902
+ }), _void(), {
11903
+ kind: "mutation",
11904
+ auth: "admin"
11905
+ });
11728
11906
  object({
11729
11907
  /** Whether the script is currently executing. */
11730
11908
  isRunning: boolean(),
@@ -12746,7 +12924,12 @@ var NotificationRuleConditionsSchema = object({
12746
12924
  clipDescription: object({
12747
12925
  text: string().min(1),
12748
12926
  minSimilarity: number().min(0).max(1)
12749
- }).optional()
12927
+ }).optional(),
12928
+ /** Match events whose recognized-entity label (face identity name or plate
12929
+ * vehicle name, propagated onto `event.data.label`) is one of these values.
12930
+ * Empty/absent → unaffected (back-compat). Enables "notify me when <named
12931
+ * vehicle/person> is seen". */
12932
+ labels: array(string()).readonly().optional()
12750
12933
  });
12751
12934
  var NotificationRuleTemplateSchema = object({
12752
12935
  title: string(),
@@ -13004,11 +13187,19 @@ method(object({
13004
13187
  * login page needs NO change.
13005
13188
  *
13006
13189
  * - `widget` — a Module-Federation widget the login page mounts (via
13007
- * `loadRemoteBundle`) for an in-page ceremony. Covers the passkey
13008
- * login ceremony, which must run `@simplewebauthn/browser` INSIDE the
13009
- * addon bundle. The referenced widget also declares `preAuth: true` in
13010
- * its `addon-widgets-source` catalog entry. `auth.listLoginMethods`
13011
- * stamps a public `bundleUrl` from `addonId` + `bundle`.
13190
+ * `loadRemoteBundle`) for an in-page ceremony. `auth.listLoginMethods`
13191
+ * stamps a public `bundleUrl` from `addonId` + `bundle`. Generic
13192
+ * mechanism kept for future use; no shipped addon uses it on the login
13193
+ * page (the passkey ceremony below runs natively in the shell instead).
13194
+ *
13195
+ * - `passkey` — a declarative WebAuthn ceremony the shell renders
13196
+ * natively (`@simplewebauthn/browser` lives in `addon-admin-ui`, not in
13197
+ * a remotely-loaded bundle). Carries the addon's effective `rpId` /
13198
+ * `origin` (from its `resolveRpID()` / `resolveOrigin()`) so the shell
13199
+ * can gate visibility (IP-literal origin, hostname/rpId mismatch) WITHOUT
13200
+ * fetching any remote code pre-auth. Contribution stays unconditional —
13201
+ * enrollment state is never leaked pre-auth; visibility is a shell
13202
+ * decision.
13012
13203
  *
13013
13204
  * Every contribution carries a `stage`:
13014
13205
  * - `primary` — shown on the first credentials screen (OIDC /
@@ -13022,30 +13213,45 @@ method(object({
13022
13213
  */
13023
13214
  /** When a login method renders in the two-phase login flow. */
13024
13215
  var LoginStageEnum = _enum(["primary", "second-factor"]);
13025
- /** One login-method contribution — redirect button OR pre-auth widget. */
13026
- var LoginMethodContributionSchema = discriminatedUnion("kind", [object({
13027
- kind: literal("redirect"),
13028
- /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
13029
- id: string(),
13030
- /** Operator-facing button label. */
13031
- label: string(),
13032
- /** lucide-react icon name. */
13033
- icon: string().optional(),
13034
- /** Addon-owned HTTP route the button navigates to (GET). */
13035
- startUrl: string(),
13036
- stage: LoginStageEnum
13037
- }), object({
13038
- kind: literal("widget"),
13039
- /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
13040
- id: string(),
13041
- /** Owning addon id drives the public bundle URL + the MF namespace. */
13042
- addonId: string(),
13043
- /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
13044
- bundle: string(),
13045
- /** MF remote descriptor `{ remoteName, exposedModule, componentKey }`. */
13046
- remote: WidgetRemoteSchema,
13047
- stage: LoginStageEnum
13048
- })]);
13216
+ /** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
13217
+ var LoginMethodContributionSchema = discriminatedUnion("kind", [
13218
+ object({
13219
+ kind: literal("redirect"),
13220
+ /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
13221
+ id: string(),
13222
+ /** Operator-facing button label. */
13223
+ label: string(),
13224
+ /** lucide-react icon name. */
13225
+ icon: string().optional(),
13226
+ /** Addon-owned HTTP route the button navigates to (GET). */
13227
+ startUrl: string(),
13228
+ stage: LoginStageEnum
13229
+ }),
13230
+ object({
13231
+ kind: literal("widget"),
13232
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
13233
+ id: string(),
13234
+ /** Owning addon id — drives the public bundle URL + the MF namespace. */
13235
+ addonId: string(),
13236
+ /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
13237
+ bundle: string(),
13238
+ /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
13239
+ remote: WidgetRemoteSchema,
13240
+ stage: LoginStageEnum
13241
+ }),
13242
+ object({
13243
+ kind: literal("passkey"),
13244
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
13245
+ id: string(),
13246
+ /** Operator-facing button label. */
13247
+ label: string(),
13248
+ stage: LoginStageEnum,
13249
+ /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
13250
+ rpId: string(),
13251
+ /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
13252
+ origin: string().nullable()
13253
+ })
13254
+ ]);
13049
13255
  method(_void(), array(LoginMethodContributionSchema).readonly());
13050
13256
  /**
13051
13257
  * Orchestrator-side destination metadata. The orchestrator computes
@@ -14873,14 +15079,14 @@ var TargetKindCapsSchema = object({
14873
15079
  * the union is large and not meant for runtime validation here; the exported
14874
15080
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
14875
15081
  */
14876
- var ConfigSchemaPassthrough = unknown();
15082
+ var ConfigSchemaPassthrough$1 = unknown();
14877
15083
  var TargetKindSchema = object({
14878
15084
  kind: string(),
14879
15085
  label: string(),
14880
15086
  icon: string(),
14881
15087
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
14882
15088
  addonId: string(),
14883
- configSchema: ConfigSchemaPassthrough,
15089
+ configSchema: ConfigSchemaPassthrough$1,
14884
15090
  supportsDiscovery: boolean(),
14885
15091
  caps: TargetKindCapsSchema
14886
15092
  });
@@ -14933,6 +15139,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
14933
15139
  enabled: boolean()
14934
15140
  }), _void(), { kind: "mutation" });
14935
15141
  /**
15142
+ * Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
15143
+ * surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
15144
+ * caps stay wire-compatible without a circular cap→cap import.
15145
+ *
15146
+ * Errors are a discriminated-union RESULT, never thrown: the shape survives
15147
+ * every transport tier structurally, and failed calls still write usage rows.
15148
+ * Token counts only in v1 — no costUsd (operator decision, 2026-07-15).
15149
+ */
15150
+ var LlmUsageSchema = object({
15151
+ inputTokens: number(),
15152
+ outputTokens: number()
15153
+ });
15154
+ var LlmErrorCodeSchema = _enum([
15155
+ "timeout",
15156
+ "rate-limited",
15157
+ "auth",
15158
+ "refusal",
15159
+ "bad-request",
15160
+ "unavailable",
15161
+ "no-profile",
15162
+ "budget-exceeded",
15163
+ "adapter-error"
15164
+ ]);
15165
+ var LlmGenerateResultSchema = discriminatedUnion("ok", [object({
15166
+ ok: literal(true),
15167
+ text: string(),
15168
+ model: string(),
15169
+ usage: LlmUsageSchema,
15170
+ truncated: boolean(),
15171
+ latencyMs: number()
15172
+ }), object({
15173
+ ok: literal(false),
15174
+ code: LlmErrorCodeSchema,
15175
+ message: string(),
15176
+ retryAfterMs: number().optional()
15177
+ })]);
15178
+ /**
15179
+ * `Uint8Array` is the sanctioned binary convention — superjson + the UDS
15180
+ * MsgPack channel round-trip typed arrays (embedding-encoder.cap.ts:29,
15181
+ * notification-output.cap.ts:27-31 precedents).
15182
+ */
15183
+ var LlmImageSchema = object({
15184
+ bytes: _instanceof(Uint8Array),
15185
+ mimeType: string()
15186
+ });
15187
+ var LlmGenerateBaseInputSchema = object({
15188
+ /** Collection routing (the notification-output posture). */
15189
+ addonId: string().optional(),
15190
+ /** Explicit profile; else the resolution chain (spec §3). */
15191
+ profileId: string().optional(),
15192
+ /** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
15193
+ consumer: string(),
15194
+ system: string().optional(),
15195
+ /** v1: single-turn. `messages[]` is a v2 additive field. */
15196
+ prompt: string(),
15197
+ /** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
15198
+ jsonSchema: record(string(), unknown()).optional(),
15199
+ /** Per-call override of the profile default. */
15200
+ maxTokens: number().int().positive().optional(),
15201
+ temperature: number().optional()
15202
+ });
15203
+ /**
15204
+ * `llm-runtime` — node-side managed llama.cpp executor (spec §4). Registered
15205
+ * on EVERY node where `addon-ai` is installed; the hub `llm` provider reaches
15206
+ * a specific node's runtime with `nodePin(profile.runtime.nodeId)` — normal
15207
+ * cap routing, zero bespoke plumbing. `internal: true`: the operator reaches
15208
+ * this only through the `llm` cap's methods.
15209
+ *
15210
+ * One running llama-server child per node in v1 (models are RAM-heavy).
15211
+ * Resource ceiling = llama-server flags + idleStopMinutes ONLY (no RSS
15212
+ * watchdog — operator decision #3).
15213
+ */
15214
+ var ManagedModelRefSchema = discriminatedUnion("kind", [
15215
+ object({
15216
+ kind: literal("catalog"),
15217
+ catalogId: string()
15218
+ }),
15219
+ object({
15220
+ kind: literal("url"),
15221
+ url: string(),
15222
+ sha256: string().optional()
15223
+ }),
15224
+ object({
15225
+ kind: literal("path"),
15226
+ path: string()
15227
+ })
15228
+ ]);
15229
+ var ManagedRuntimeConfigSchema = object({
15230
+ /** WHERE the runtime lives — hub or any agent. */
15231
+ nodeId: string(),
15232
+ /** Closed for v1; 'ollama' is a v2 candidate. */
15233
+ engine: _enum(["llama-cpp"]),
15234
+ model: ManagedModelRefSchema,
15235
+ contextSize: number().int().default(4096),
15236
+ /** 0 = CPU-only. */
15237
+ gpuLayers: number().int().default(0),
15238
+ /** Default: cpus-2, clamped ≥1 (resolved node-side). */
15239
+ threads: number().int().optional(),
15240
+ /** Concurrent slots. */
15241
+ parallel: number().int().default(1),
15242
+ /** Else lazy: first generate boots it. */
15243
+ autoStart: boolean().default(false),
15244
+ /** 0 = never; frees RAM after quiet periods. */
15245
+ idleStopMinutes: number().int().default(30)
15246
+ });
15247
+ var LlmRuntimeStatusSchema = object({
15248
+ /** Status is ALWAYS node-qualified. */
15249
+ nodeId: string(),
15250
+ state: _enum([
15251
+ "stopped",
15252
+ "downloading",
15253
+ "starting",
15254
+ "ready",
15255
+ "crashed",
15256
+ "failed"
15257
+ ]),
15258
+ pid: number().optional(),
15259
+ port: number().optional(),
15260
+ modelPath: string().optional(),
15261
+ modelId: string().optional(),
15262
+ downloadProgress: number().min(0).max(1).optional(),
15263
+ lastError: string().optional(),
15264
+ crashesInWindow: number(),
15265
+ /** Child RSS (sampled best-effort). */
15266
+ memoryBytes: number().optional(),
15267
+ vramBytes: number().optional()
15268
+ });
15269
+ var LlmNodeModelSchema = object({
15270
+ file: string(),
15271
+ sizeBytes: number(),
15272
+ catalogId: string().optional(),
15273
+ installedAt: number().optional()
15274
+ });
15275
+ var LlmRuntimeDiskUsageSchema = object({
15276
+ nodeId: string(),
15277
+ modelsBytes: number(),
15278
+ freeBytes: number().optional()
15279
+ });
15280
+ method(LlmGenerateBaseInputSchema.extend({
15281
+ images: array(LlmImageSchema).optional(),
15282
+ runtime: ManagedRuntimeConfigSchema,
15283
+ /** The managed profile's timeout, threaded by the hub provider. */
15284
+ timeoutMs: number().int().positive().optional()
15285
+ }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
15286
+ kind: "mutation",
15287
+ auth: "admin"
15288
+ }), method(object({}), _void(), {
15289
+ kind: "mutation",
15290
+ auth: "admin"
15291
+ }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
15292
+ kind: "mutation",
15293
+ auth: "admin"
15294
+ }), method(object({ file: string() }), _void(), {
15295
+ kind: "mutation",
15296
+ auth: "admin"
15297
+ }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
15298
+ /**
15299
+ * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
15300
+ * methods concat-fan across providers; single-row methods route to ONE
15301
+ * provider by the `addonId` in the call input (the notification-output
15302
+ * posture, notification-output.cap.ts:215-250). Provided by `addon-ai`
15303
+ * (hub-placed); the cap stays open for future providers.
15304
+ *
15305
+ * Profiles are ROWS (data), not addons: one row = one usable model endpoint.
15306
+ * `apiKey` is a password field — providers REDACT it on read and merge on
15307
+ * write; a stored key NEVER round-trips to a client.
15308
+ */
15309
+ var LlmProfileKindSchema = _enum([
15310
+ "openai-compatible",
15311
+ "openai",
15312
+ "anthropic",
15313
+ "google",
15314
+ "managed-local"
15315
+ ]);
15316
+ var LlmProfileSchema = object({
15317
+ id: string(),
15318
+ name: string(),
15319
+ kind: LlmProfileKindSchema,
15320
+ /** Stamped by the provider — keeps the fanned catalog routable. */
15321
+ addonId: string(),
15322
+ enabled: boolean(),
15323
+ /** Vendor model id, or the managed runtime's loaded model. */
15324
+ model: string(),
15325
+ /** Required for openai-compatible; override for cloud kinds. */
15326
+ baseUrl: string().optional(),
15327
+ /** ConfigUISchema type:'password' — never round-trips (spec §5). */
15328
+ apiKey: string().optional(),
15329
+ supportsVision: boolean(),
15330
+ temperature: number().min(0).max(2).optional(),
15331
+ maxTokens: number().int().positive().optional(),
15332
+ timeoutMs: number().int().positive().default(6e4),
15333
+ extraHeaders: record(string(), string()).optional(),
15334
+ /** kind === 'managed-local' only (spec §4). */
15335
+ runtime: ManagedRuntimeConfigSchema.optional()
15336
+ });
15337
+ /** ConfigUISchema tree passed through untyped on the wire (the
15338
+ * notification-output `ConfigSchemaPassthrough` precedent at
15339
+ * notification-output.cap.ts:151); the exported TS type re-tightens it. */
15340
+ var ConfigSchemaPassthrough = unknown();
15341
+ var LlmProfileKindDescriptorSchema = object({
15342
+ kind: LlmProfileKindSchema,
15343
+ label: string(),
15344
+ icon: string(),
15345
+ /** Stamped by each provider so the concat-fanned catalog stays routable. */
15346
+ addonId: string(),
15347
+ configSchema: ConfigSchemaPassthrough
15348
+ });
15349
+ var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
15350
+ var LlmDefaultSchema = object({
15351
+ selector: LlmDefaultSelectorSchema,
15352
+ profileId: string()
15353
+ });
15354
+ /** Server-side rollup row — getUsage never dumps raw call rows (spec §6). */
15355
+ var LlmUsageRollupSchema = object({
15356
+ day: string(),
15357
+ consumer: string(),
15358
+ profileId: string(),
15359
+ calls: number(),
15360
+ okCalls: number(),
15361
+ errorCalls: number(),
15362
+ inputTokens: number(),
15363
+ outputTokens: number(),
15364
+ avgLatencyMs: number()
15365
+ });
15366
+ /** LLM-facing view over the reused ModelCatalogEntry mechanism (spec §4.2). */
15367
+ var ManagedModelCatalogEntrySchema = object({
15368
+ id: string(),
15369
+ label: string(),
15370
+ family: string(),
15371
+ purpose: _enum(["text", "vision"]),
15372
+ url: string(),
15373
+ sha256: string(),
15374
+ sizeBytes: number(),
15375
+ quantization: string(),
15376
+ /** Load-time guidance shown in the picker. */
15377
+ minRamBytes: number(),
15378
+ contextSizeDefault: number().int(),
15379
+ /** Vision models: companion projector file. */
15380
+ mmprojUrl: string().optional()
15381
+ });
15382
+ var LlmRuntimeNodeSchema = object({
15383
+ nodeId: string(),
15384
+ reachable: boolean(),
15385
+ status: LlmRuntimeStatusSchema.optional(),
15386
+ disk: LlmRuntimeDiskUsageSchema.optional(),
15387
+ error: string().optional()
15388
+ });
15389
+ var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: array(LlmImageSchema).min(1) });
15390
+ var ProfileRefInputSchema = object({
15391
+ addonId: string(),
15392
+ profileId: string()
15393
+ });
15394
+ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
15395
+ kind: "mutation",
15396
+ auth: "admin"
15397
+ }), method(ProfileRefInputSchema, _void(), {
15398
+ kind: "mutation",
15399
+ auth: "admin"
15400
+ }), method(ProfileRefInputSchema, LlmGenerateResultSchema, {
15401
+ kind: "mutation",
15402
+ auth: "admin"
15403
+ }), method(ProfileRefInputSchema, array(string())), method(object({}), array(LlmDefaultSchema)), method(object({
15404
+ selector: LlmDefaultSelectorSchema,
15405
+ profileId: string().nullable()
15406
+ }), _void(), {
15407
+ kind: "mutation",
15408
+ auth: "admin"
15409
+ }), method(object({
15410
+ since: number().optional(),
15411
+ until: number().optional(),
15412
+ consumer: string().optional(),
15413
+ profileId: string().optional()
15414
+ }), array(LlmUsageRollupSchema)), method(object({}), array(ManagedModelCatalogEntrySchema)), method(object({}), array(LlmRuntimeNodeSchema)), method(object({ nodeId: string() }), array(LlmNodeModelSchema)), method(object({
15415
+ nodeId: string(),
15416
+ model: ManagedModelRefSchema
15417
+ }), _void(), {
15418
+ kind: "mutation",
15419
+ auth: "admin"
15420
+ }), method(object({
15421
+ nodeId: string(),
15422
+ file: string()
15423
+ }), _void(), {
15424
+ kind: "mutation",
15425
+ auth: "admin"
15426
+ }), method(ProfileRefInputSchema, LlmRuntimeStatusSchema), method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
15427
+ kind: "mutation",
15428
+ auth: "admin"
15429
+ }), method(ProfileRefInputSchema, _void(), {
15430
+ kind: "mutation",
15431
+ auth: "admin"
15432
+ });
15433
+ /**
14936
15434
  * Zod schemas for persisted record types.
14937
15435
  *
14938
15436
  * These schemas serve as the single source of truth for types that are
@@ -15148,6 +15646,10 @@ var TrackSchema = object({
15148
15646
  snapshots: array(TrackSnapshotSchema).readonly(),
15149
15647
  /** Deduplicated zones the track has entered at least once. */
15150
15648
  zonesVisited: array(string()).readonly(),
15649
+ /** Deduplicated set of detector classes observed for this track over its
15650
+ * life (a track may be reclassified, e.g. person→vehicle). Absent on
15651
+ * legacy rows written before class accumulation shipped. */
15652
+ classes: array(string()).readonly().optional(),
15151
15653
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
15152
15654
  totalDistance: number(),
15153
15655
  state: TrackStateSchema,
@@ -15309,7 +15811,7 @@ var KeyEventSchema = object({
15309
15811
  /** Track lifetime in ms (lastSeen - firstSeen). */
15310
15812
  windowMs: number().optional()
15311
15813
  });
15312
- var TrackedDetectionSchema = object({
15814
+ object({
15313
15815
  trackId: string(),
15314
15816
  className: string(),
15315
15817
  confidence: number(),
@@ -15317,6 +15819,23 @@ var TrackedDetectionSchema = object({
15317
15819
  zones: array(string()).readonly(),
15318
15820
  state: TrackStateSchema
15319
15821
  });
15822
+ var OverlayDetectionSchema = looseObject({
15823
+ id: string(),
15824
+ kind: _enum(["first-level", "detail"]),
15825
+ macroClass: string(),
15826
+ score: number(),
15827
+ bbox: object({
15828
+ x: number(),
15829
+ y: number(),
15830
+ width: number(),
15831
+ height: number()
15832
+ }),
15833
+ labels: array(looseObject({
15834
+ label: string(),
15835
+ score: number()
15836
+ })).readonly(),
15837
+ parentId: string().optional()
15838
+ });
15320
15839
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
15321
15840
  var SearchObjectEventsInput = object({
15322
15841
  text: string(),
@@ -15327,6 +15846,20 @@ var SearchObjectEventsInput = object({
15327
15846
  limit: number().default(50),
15328
15847
  minScore: number().min(0).max(1).default(.2)
15329
15848
  });
15849
+ var TrackCascadeCountsSchema = object({
15850
+ /** Persisted track roots deleted (authoritative). */
15851
+ tracks: number().int(),
15852
+ /** Object events removed with their tracks (best-effort; see note above). */
15853
+ events: number().int(),
15854
+ /** Track/face/plate-owned media removed (best-effort). Never identity media. */
15855
+ media: number().int(),
15856
+ /** Unassigned (non-enrolled) face reads removed (best-effort). */
15857
+ faces: number().int(),
15858
+ /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
15859
+ plates: number().int(),
15860
+ /** Per-track CLIP search vectors removed (best-effort). */
15861
+ embeddings: number().int()
15862
+ });
15330
15863
  DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
15331
15864
  deviceId: number(),
15332
15865
  trackId: string()
@@ -15358,6 +15891,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15358
15891
  }), {
15359
15892
  kind: "mutation",
15360
15893
  auth: "admin"
15894
+ }), method(object({
15895
+ deviceId: number(),
15896
+ cutoffMs: number()
15897
+ }), TrackCascadeCountsSchema, {
15898
+ kind: "mutation",
15899
+ auth: "admin"
15900
+ }), method(object({ deviceId: number() }), TrackCascadeCountsSchema, {
15901
+ kind: "mutation",
15902
+ auth: "admin"
15903
+ }), method(object({
15904
+ deviceId: number(),
15905
+ trackIds: array(string()).min(1)
15906
+ }), object({
15907
+ deleted: number().int(),
15908
+ failed: array(string()).readonly()
15909
+ }), {
15910
+ kind: "mutation",
15911
+ auth: "admin"
15361
15912
  }), method(object({
15362
15913
  eventId: string(),
15363
15914
  kind: MediaFileKindEnum.optional()
@@ -15366,7 +15917,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15366
15917
  timestamp: number(),
15367
15918
  frameWidth: number(),
15368
15919
  frameHeight: number(),
15369
- detections: array(TrackedDetectionSchema).readonly()
15920
+ detections: array(OverlayDetectionSchema).readonly()
15370
15921
  }), object({
15371
15922
  deviceId: number(),
15372
15923
  trackId: string(),
@@ -18135,6 +18686,24 @@ DeviceType.Camera, method(object({
18135
18686
  deviceId: number(),
18136
18687
  status: OsdStatusSchema
18137
18688
  });
18689
+ var VehicleSchema = object({
18690
+ id: string(),
18691
+ name: string(),
18692
+ sampleCount: number().int().nonnegative(),
18693
+ coverMediaKey: string().optional(),
18694
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
18695
+ coverBase64: string().optional()
18696
+ });
18697
+ var VehicleSampleInfoSchema = object({
18698
+ id: string(),
18699
+ /** The plate text this sample enrolled (self-labeling — no embedding). */
18700
+ text: string(),
18701
+ /** OCR confidence of the enrolled read (0..1). */
18702
+ score: number(),
18703
+ addedAt: number().int(),
18704
+ deviceId: number().int().optional(),
18705
+ base64: string().optional()
18706
+ });
18138
18707
  var PlateInfoSchema = object({
18139
18708
  plateId: string(),
18140
18709
  deviceId: number().int(),
@@ -18146,6 +18715,16 @@ var PlateInfoSchema = object({
18146
18715
  score: number(),
18147
18716
  /** True when the text was manually corrected (exempt from retention). */
18148
18717
  corrected: boolean(),
18718
+ /** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
18719
+ recognizedVehicleId: string().optional(),
18720
+ /** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
18721
+ vehicleName: string().optional(),
18722
+ /** True once the read was assigned to a vehicle (enrolled as a sample). */
18723
+ assigned: boolean(),
18724
+ /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
18725
+ plateBbox: BoundingBoxSchema.optional(),
18726
+ /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
18727
+ keyFrameMediaKey: string().optional(),
18149
18728
  base64: string().optional()
18150
18729
  });
18151
18730
  var MediaFileLiteSchema = object({
@@ -18185,6 +18764,48 @@ method(object({
18185
18764
  }), method(object({ plateId: string() }), _void(), {
18186
18765
  kind: "mutation",
18187
18766
  auth: "admin"
18767
+ }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
18768
+ kind: "mutation",
18769
+ auth: "admin"
18770
+ }), method(object({
18771
+ id: string(),
18772
+ name: string().min(1)
18773
+ }), _void(), {
18774
+ kind: "mutation",
18775
+ auth: "admin"
18776
+ }), method(object({ id: string() }), _void(), {
18777
+ kind: "mutation",
18778
+ auth: "admin"
18779
+ }), method(object({ vehicleId: string() }), array(VehicleSampleInfoSchema).readonly()), method(object({
18780
+ vehicleId: string(),
18781
+ sampleId: string()
18782
+ }), _void(), {
18783
+ kind: "mutation",
18784
+ auth: "admin"
18785
+ }), method(object({
18786
+ plateId: string(),
18787
+ vehicleId: string()
18788
+ }), _void(), {
18789
+ kind: "mutation",
18790
+ auth: "admin"
18791
+ }), method(object({ plateId: string() }), _void(), {
18792
+ kind: "mutation",
18793
+ auth: "admin"
18794
+ }), method(object({
18795
+ plateIds: array(string()).min(1),
18796
+ vehicleId: string()
18797
+ }), object({
18798
+ assigned: number().int(),
18799
+ failed: array(string()).readonly()
18800
+ }), {
18801
+ kind: "mutation",
18802
+ auth: "admin"
18803
+ }), method(object({ plateIds: array(string()).min(1) }), object({
18804
+ unassigned: number().int(),
18805
+ failed: array(string()).readonly()
18806
+ }), {
18807
+ kind: "mutation",
18808
+ auth: "admin"
18188
18809
  });
18189
18810
  var ModelFormatSchema = _enum(MODEL_FORMATS);
18190
18811
  var HwAccelBackendInputSchema = _enum([
@@ -20730,6 +21351,168 @@ Object.freeze({
20730
21351
  addonId: null,
20731
21352
  access: "create"
20732
21353
  },
21354
+ "llm.deleteModel": {
21355
+ capName: "llm",
21356
+ capScope: "system",
21357
+ addonId: null,
21358
+ access: "delete"
21359
+ },
21360
+ "llm.deleteProfile": {
21361
+ capName: "llm",
21362
+ capScope: "system",
21363
+ addonId: null,
21364
+ access: "delete"
21365
+ },
21366
+ "llm.generate": {
21367
+ capName: "llm",
21368
+ capScope: "system",
21369
+ addonId: null,
21370
+ access: "create"
21371
+ },
21372
+ "llm.generateVision": {
21373
+ capName: "llm",
21374
+ capScope: "system",
21375
+ addonId: null,
21376
+ access: "create"
21377
+ },
21378
+ "llm.getDefaults": {
21379
+ capName: "llm",
21380
+ capScope: "system",
21381
+ addonId: null,
21382
+ access: "view"
21383
+ },
21384
+ "llm.getRuntimeStatus": {
21385
+ capName: "llm",
21386
+ capScope: "system",
21387
+ addonId: null,
21388
+ access: "view"
21389
+ },
21390
+ "llm.getUsage": {
21391
+ capName: "llm",
21392
+ capScope: "system",
21393
+ addonId: null,
21394
+ access: "view"
21395
+ },
21396
+ "llm.installModel": {
21397
+ capName: "llm",
21398
+ capScope: "system",
21399
+ addonId: null,
21400
+ access: "create"
21401
+ },
21402
+ "llm.listModelCatalog": {
21403
+ capName: "llm",
21404
+ capScope: "system",
21405
+ addonId: null,
21406
+ access: "view"
21407
+ },
21408
+ "llm.listModels": {
21409
+ capName: "llm",
21410
+ capScope: "system",
21411
+ addonId: null,
21412
+ access: "view"
21413
+ },
21414
+ "llm.listNodeModels": {
21415
+ capName: "llm",
21416
+ capScope: "system",
21417
+ addonId: null,
21418
+ access: "view"
21419
+ },
21420
+ "llm.listProfileKinds": {
21421
+ capName: "llm",
21422
+ capScope: "system",
21423
+ addonId: null,
21424
+ access: "view"
21425
+ },
21426
+ "llm.listProfiles": {
21427
+ capName: "llm",
21428
+ capScope: "system",
21429
+ addonId: null,
21430
+ access: "view"
21431
+ },
21432
+ "llm.listRuntimeNodes": {
21433
+ capName: "llm",
21434
+ capScope: "system",
21435
+ addonId: null,
21436
+ access: "view"
21437
+ },
21438
+ "llm.setDefault": {
21439
+ capName: "llm",
21440
+ capScope: "system",
21441
+ addonId: null,
21442
+ access: "create"
21443
+ },
21444
+ "llm.startRuntime": {
21445
+ capName: "llm",
21446
+ capScope: "system",
21447
+ addonId: null,
21448
+ access: "create"
21449
+ },
21450
+ "llm.stopRuntime": {
21451
+ capName: "llm",
21452
+ capScope: "system",
21453
+ addonId: null,
21454
+ access: "create"
21455
+ },
21456
+ "llm.testProfile": {
21457
+ capName: "llm",
21458
+ capScope: "system",
21459
+ addonId: null,
21460
+ access: "create"
21461
+ },
21462
+ "llm.upsertProfile": {
21463
+ capName: "llm",
21464
+ capScope: "system",
21465
+ addonId: null,
21466
+ access: "create"
21467
+ },
21468
+ "llmRuntime.complete": {
21469
+ capName: "llm-runtime",
21470
+ capScope: "system",
21471
+ addonId: null,
21472
+ access: "create"
21473
+ },
21474
+ "llmRuntime.deleteModel": {
21475
+ capName: "llm-runtime",
21476
+ capScope: "system",
21477
+ addonId: null,
21478
+ access: "delete"
21479
+ },
21480
+ "llmRuntime.ensureStarted": {
21481
+ capName: "llm-runtime",
21482
+ capScope: "system",
21483
+ addonId: null,
21484
+ access: "create"
21485
+ },
21486
+ "llmRuntime.getDiskUsage": {
21487
+ capName: "llm-runtime",
21488
+ capScope: "system",
21489
+ addonId: null,
21490
+ access: "view"
21491
+ },
21492
+ "llmRuntime.installModel": {
21493
+ capName: "llm-runtime",
21494
+ capScope: "system",
21495
+ addonId: null,
21496
+ access: "create"
21497
+ },
21498
+ "llmRuntime.listLocalModels": {
21499
+ capName: "llm-runtime",
21500
+ capScope: "system",
21501
+ addonId: null,
21502
+ access: "view"
21503
+ },
21504
+ "llmRuntime.status": {
21505
+ capName: "llm-runtime",
21506
+ capScope: "system",
21507
+ addonId: null,
21508
+ access: "view"
21509
+ },
21510
+ "llmRuntime.stop": {
21511
+ capName: "llm-runtime",
21512
+ capScope: "system",
21513
+ addonId: null,
21514
+ access: "create"
21515
+ },
20733
21516
  "localNetwork.getAllowedAddresses": {
20734
21517
  capName: "local-network",
20735
21518
  capScope: "system",
@@ -21360,6 +22143,12 @@ Object.freeze({
21360
22143
  addonId: null,
21361
22144
  access: "delete"
21362
22145
  },
22146
+ "pipelineAnalytics.deleteTracks": {
22147
+ capName: "pipeline-analytics",
22148
+ capScope: "device",
22149
+ addonId: null,
22150
+ access: "delete"
22151
+ },
21363
22152
  "pipelineAnalytics.getActiveTracks": {
21364
22153
  capName: "pipeline-analytics",
21365
22154
  capScope: "device",
@@ -21426,12 +22215,24 @@ Object.freeze({
21426
22215
  addonId: null,
21427
22216
  access: "create"
21428
22217
  },
22218
+ "pipelineAnalytics.pruneTracksBefore": {
22219
+ capName: "pipeline-analytics",
22220
+ capScope: "device",
22221
+ addonId: null,
22222
+ access: "create"
22223
+ },
21429
22224
  "pipelineAnalytics.searchObjectEvents": {
21430
22225
  capName: "pipeline-analytics",
21431
22226
  capScope: "device",
21432
22227
  addonId: null,
21433
22228
  access: "view"
21434
22229
  },
22230
+ "pipelineAnalytics.wipeAllAnalytics": {
22231
+ capName: "pipeline-analytics",
22232
+ capScope: "device",
22233
+ addonId: null,
22234
+ access: "delete"
22235
+ },
21435
22236
  "pipelineExecutor.cacheFrameInPool": {
21436
22237
  capName: "pipeline-executor",
21437
22238
  capScope: "system",
@@ -21936,18 +22737,42 @@ Object.freeze({
21936
22737
  addonId: null,
21937
22738
  access: "create"
21938
22739
  },
22740
+ "plateGallery.assignPlate": {
22741
+ capName: "plate-gallery",
22742
+ capScope: "system",
22743
+ addonId: null,
22744
+ access: "create"
22745
+ },
22746
+ "plateGallery.assignPlates": {
22747
+ capName: "plate-gallery",
22748
+ capScope: "system",
22749
+ addonId: null,
22750
+ access: "create"
22751
+ },
21939
22752
  "plateGallery.correctPlateText": {
21940
22753
  capName: "plate-gallery",
21941
22754
  capScope: "system",
21942
22755
  addonId: null,
21943
22756
  access: "create"
21944
22757
  },
22758
+ "plateGallery.createVehicle": {
22759
+ capName: "plate-gallery",
22760
+ capScope: "system",
22761
+ addonId: null,
22762
+ access: "create"
22763
+ },
21945
22764
  "plateGallery.deletePlate": {
21946
22765
  capName: "plate-gallery",
21947
22766
  capScope: "system",
21948
22767
  addonId: null,
21949
22768
  access: "delete"
21950
22769
  },
22770
+ "plateGallery.deleteVehicle": {
22771
+ capName: "plate-gallery",
22772
+ capScope: "system",
22773
+ addonId: null,
22774
+ access: "delete"
22775
+ },
21951
22776
  "plateGallery.getPlateByTrack": {
21952
22777
  capName: "plate-gallery",
21953
22778
  capScope: "system",
@@ -21966,6 +22791,30 @@ Object.freeze({
21966
22791
  addonId: null,
21967
22792
  access: "view"
21968
22793
  },
22794
+ "plateGallery.listVehicles": {
22795
+ capName: "plate-gallery",
22796
+ capScope: "system",
22797
+ addonId: null,
22798
+ access: "view"
22799
+ },
22800
+ "plateGallery.listVehicleSamples": {
22801
+ capName: "plate-gallery",
22802
+ capScope: "system",
22803
+ addonId: null,
22804
+ access: "view"
22805
+ },
22806
+ "plateGallery.removeVehicleSample": {
22807
+ capName: "plate-gallery",
22808
+ capScope: "system",
22809
+ addonId: null,
22810
+ access: "delete"
22811
+ },
22812
+ "plateGallery.renameVehicle": {
22813
+ capName: "plate-gallery",
22814
+ capScope: "system",
22815
+ addonId: null,
22816
+ access: "create"
22817
+ },
21969
22818
  "plateGallery.searchPlates": {
21970
22819
  capName: "plate-gallery",
21971
22820
  capScope: "system",
@@ -21978,6 +22827,18 @@ Object.freeze({
21978
22827
  addonId: null,
21979
22828
  access: "view"
21980
22829
  },
22830
+ "plateGallery.unassignPlate": {
22831
+ capName: "plate-gallery",
22832
+ capScope: "system",
22833
+ addonId: null,
22834
+ access: "create"
22835
+ },
22836
+ "plateGallery.unassignPlates": {
22837
+ capName: "plate-gallery",
22838
+ capScope: "system",
22839
+ addonId: null,
22840
+ access: "create"
22841
+ },
21981
22842
  "platformProbe.getCapabilities": {
21982
22843
  capName: "platform-probe",
21983
22844
  capScope: "system",
@@ -22170,6 +23031,48 @@ Object.freeze({
22170
23031
  addonId: null,
22171
23032
  access: "create"
22172
23033
  },
23034
+ "sceneMonitor.captureReference": {
23035
+ capName: "scene-monitor",
23036
+ capScope: "device",
23037
+ addonId: null,
23038
+ access: "create"
23039
+ },
23040
+ "sceneMonitor.createScene": {
23041
+ capName: "scene-monitor",
23042
+ capScope: "device",
23043
+ addonId: null,
23044
+ access: "create"
23045
+ },
23046
+ "sceneMonitor.deleteReference": {
23047
+ capName: "scene-monitor",
23048
+ capScope: "device",
23049
+ addonId: null,
23050
+ access: "delete"
23051
+ },
23052
+ "sceneMonitor.deleteScene": {
23053
+ capName: "scene-monitor",
23054
+ capScope: "device",
23055
+ addonId: null,
23056
+ access: "delete"
23057
+ },
23058
+ "sceneMonitor.listScenes": {
23059
+ capName: "scene-monitor",
23060
+ capScope: "device",
23061
+ addonId: null,
23062
+ access: "view"
23063
+ },
23064
+ "sceneMonitor.recheckNow": {
23065
+ capName: "scene-monitor",
23066
+ capScope: "device",
23067
+ addonId: null,
23068
+ access: "create"
23069
+ },
23070
+ "sceneMonitor.updateScene": {
23071
+ capName: "scene-monitor",
23072
+ capScope: "device",
23073
+ addonId: null,
23074
+ access: "create"
23075
+ },
22173
23076
  "scriptRunner.run": {
22174
23077
  capName: "script-runner",
22175
23078
  capScope: "device",
@@ -23254,6 +24157,7 @@ Object.freeze({
23254
24157
  Object.freeze({
23255
24158
  "broker": "broker",
23256
24159
  "device-export": "device-export",
24160
+ "llm": "ai",
23257
24161
  "mesh-network": "mesh",
23258
24162
  "mqtt-broker": "broker",
23259
24163
  "network-access": "ingress",
@@ -23304,7 +24208,7 @@ var AdminUIAddon = class extends BaseAddon {
23304
24208
  capability: adminUiCapability,
23305
24209
  provider: {
23306
24210
  getStaticDir: async () => ({ staticDir: resolveAdminUiDistDir() }),
23307
- getVersion: async () => ({ version: "1.1.50" })
24211
+ getVersion: async () => ({ version: "1.1.51" })
23308
24212
  }
23309
24213
  }];
23310
24214
  }