@camstack/addon-pipeline 1.1.54 → 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 (39) 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 +159 -1471
  4. package/dist/detection-pipeline/index.mjs +139 -1451
  5. package/dist/{dist-BbaoC680.js → dist-ClE6_i0p.js} +1000 -40
  6. package/dist/{dist-CEcTeu1h.mjs → dist-CrjLGrkj.mjs} +1000 -40
  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 +777 -27
  10. package/dist/pipeline-runner/index.mjs +777 -28
  11. package/dist/recorder/index.js +1 -1
  12. package/dist/recorder/index.mjs +1 -1
  13. package/dist/{remote-source-plane-CNCqC_XG.mjs → remote-source-plane-B28iGi7h.mjs} +1 -1
  14. package/dist/{remote-source-plane-vN45KFSm.js → remote-source-plane-BAqEHSgm.js} +1 -1
  15. package/dist/session-decode/decode-worker-child.js +227 -6
  16. package/dist/session-decode/decode-worker-child.mjs +227 -6
  17. package/dist/step-definitions-C9kUXgC7.js +1514 -0
  18. package/dist/step-definitions-dCghpdRo.mjs +1479 -0
  19. package/dist/stream-broker/_stub.js +79 -79
  20. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-HS0tc6Sa.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-D4xH4Tm-.mjs} +3 -3
  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-B_v5r5ya.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-DgohfEDA.mjs → hostInit-Di9WUNlQ.mjs} +3 -3
  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/dist/{worker-protocol-DGIt_waM.mjs → worker-protocol-CyVJTZEO.mjs} +1 -0
  28. package/dist/{worker-protocol-DkL6GDxe.js → worker-protocol-PP4jKHHJ.js} +1 -0
  29. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-CA2Hd6xx.js → MaskShapeCanvas-DI4BY7W2-Ca93F1js.js} +1 -1
  30. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-DUN1VeC7.js → MotionZonesSettings-NcxxQN8r-CDqgb-WA.js} +1 -1
  31. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-BqZIAU5s.js → PrivacyMaskSettings-APgPLF7p-BlxPhY_w.js} +1 -1
  32. package/embed-dist/assets/index-B23riUw8.js +81 -0
  33. package/embed-dist/assets/index-Bmpl9O1K.css +2 -0
  34. package/embed-dist/index.html +2 -2
  35. package/package.json +1 -1
  36. package/python/inference_pool.py +11 -1
  37. 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
  38. package/embed-dist/assets/index-CC06JBcl.css +0 -2
  39. package/embed-dist/assets/index-CMkYypxB.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-BC9Yqte7.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",
@@ -11711,7 +11755,15 @@ var pipelineExecutorCapability = {
11711
11755
  image: _instanceof(Uint8Array).optional(),
11712
11756
  referenceImage: string().optional(),
11713
11757
  deviceId: number().optional(),
11714
- sessionId: string().optional()
11758
+ sessionId: string().optional(),
11759
+ /**
11760
+ * Execution plane. 'full' (default) runs the whole tree — benchmark,
11761
+ * reference-image, and detail-subtree calls. 'frame' is the live
11762
+ * per-frame dispatch: ONLY root-plane steps run; crop children
11763
+ * (inputClasses ≠ null) are skipped and served per-track via
11764
+ * pipelineRunner.runDetailSubtree (two-plane design).
11765
+ */
11766
+ plane: _enum(["full", "frame"]).optional()
11715
11767
  }), PipelineRunResultBridge, { kind: "mutation" }),
11716
11768
  /**
11717
11769
  * Batched run — N raw frames packed into one cap call. The provider
@@ -11908,6 +11960,28 @@ var NativeCropResultSchema = object({
11908
11960
  width: number().int().positive(),
11909
11961
  height: number().int().positive()
11910
11962
  });
11963
+ /** Parent detection context passed to `runDetailSubtree` — the crop's
11964
+ * originating detection, in FRAME-space coordinates. Reuses
11965
+ * `NativeCropBboxSchema`'s `{x,y,w,h}` shape (same numeric fields; here
11966
+ * the coordinates are frame-space rather than getNativeCrop's
11967
+ * normalized [0,1] convention). */
11968
+ var DetailParentSchema = object({
11969
+ bbox: NativeCropBboxSchema,
11970
+ className: string()
11971
+ });
11972
+ /** One child-step result from `runDetailSubtree` — an embedding, label,
11973
+ * or refined detection produced by running the crop-subtree on a
11974
+ * single tracked detection. */
11975
+ var DetailResultSchema = object({
11976
+ stepId: string(),
11977
+ className: string(),
11978
+ score: number(),
11979
+ /** FRAME-space bbox (already mapped back from crop space). */
11980
+ bbox: NativeCropBboxSchema.optional(),
11981
+ embedding: string().optional(),
11982
+ label: string().optional(),
11983
+ alignedCropJpeg: string().optional()
11984
+ });
11911
11985
  /**
11912
11986
  * Per-camera tunable ranges + defaults. Single source of truth used
11913
11987
  * by both the Zod data schema (validation + default fallback) and
@@ -12227,7 +12301,27 @@ var pipelineRunnerCapability = {
12227
12301
  handle: FrameHandleSchema,
12228
12302
  bbox: NativeCropBboxSchema,
12229
12303
  maxWidth: number().int().positive().optional()
12230
- }), NativeCropResultSchema.nullable())
12304
+ }), NativeCropResultSchema.nullable()),
12305
+ /**
12306
+ * Two-plane design: run the DETAIL subtree (crop children —
12307
+ * embedding, classifier, refiner steps whose `inputClasses ≠ null`)
12308
+ * for a single tracked detection. The per-frame plane (`runPipeline`
12309
+ * with `plane: 'frame'`) skips crop children entirely; a track-level
12310
+ * caller invokes this per-track, on its own cadence, instead of on
12311
+ * every frame. Takes either a `frameHandle` (shm lease/session —
12312
+ * preferred, zero-copy) or a `cropJpeg` fallback when the lease/
12313
+ * session backing the frame is already gone. `steps` narrows which
12314
+ * configured children to run (default: all configured children for
12315
+ * `parent.className`). Returns `null` when neither frame source is
12316
+ * resolvable (handle evicted and no cropJpeg fallback supplied).
12317
+ */
12318
+ runDetailSubtree: method(object({
12319
+ deviceId: number(),
12320
+ frameHandle: FrameHandleSchema.optional(),
12321
+ cropJpeg: string().optional(),
12322
+ parent: DetailParentSchema,
12323
+ steps: array(string()).optional()
12324
+ }), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" })
12231
12325
  }
12232
12326
  };
12233
12327
  object({
@@ -12841,6 +12935,140 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
12841
12935
  deviceId: number(),
12842
12936
  status: PtzAutotrackStatusSchema
12843
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
+ });
12844
13072
  object({
12845
13073
  /** Whether the script is currently executing. */
12846
13074
  isRunning: boolean(),
@@ -13935,7 +14163,12 @@ var NotificationRuleConditionsSchema = object({
13935
14163
  clipDescription: object({
13936
14164
  text: string().min(1),
13937
14165
  minSimilarity: number().min(0).max(1)
13938
- }).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()
13939
14172
  });
13940
14173
  var NotificationRuleTemplateSchema = object({
13941
14174
  title: string(),
@@ -14278,11 +14511,19 @@ method(object({
14278
14511
  * login page needs NO change.
14279
14512
  *
14280
14513
  * - `widget` — a Module-Federation widget the login page mounts (via
14281
- * `loadRemoteBundle`) for an in-page ceremony. Covers the passkey
14282
- * login ceremony, which must run `@simplewebauthn/browser` INSIDE the
14283
- * addon bundle. The referenced widget also declares `preAuth: true` in
14284
- * its `addon-widgets-source` catalog entry. `auth.listLoginMethods`
14285
- * 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.
14286
14527
  *
14287
14528
  * Every contribution carries a `stage`:
14288
14529
  * - `primary` — shown on the first credentials screen (OIDC /
@@ -14296,30 +14537,45 @@ method(object({
14296
14537
  */
14297
14538
  /** When a login method renders in the two-phase login flow. */
14298
14539
  var LoginStageEnum = _enum(["primary", "second-factor"]);
14299
- /** One login-method contribution — redirect button OR pre-auth widget. */
14300
- var LoginMethodContributionSchema = discriminatedUnion("kind", [object({
14301
- kind: literal("redirect"),
14302
- /** Stable id within the login-method set (e.g. `auth-oidc/google`). */
14303
- id: string(),
14304
- /** Operator-facing button label. */
14305
- label: string(),
14306
- /** lucide-react icon name. */
14307
- icon: string().optional(),
14308
- /** Addon-owned HTTP route the button navigates to (GET). */
14309
- startUrl: string(),
14310
- stage: LoginStageEnum
14311
- }), object({
14312
- kind: literal("widget"),
14313
- /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-login`). */
14314
- id: string(),
14315
- /** Owning addon id drives the public bundle URL + the MF namespace. */
14316
- addonId: string(),
14317
- /** Bundle filename inside the addon's dist dir (`remoteEntry.js`). */
14318
- bundle: string(),
14319
- /** MF remote descriptor `{ remoteName, exposedModule, componentKey }`. */
14320
- remote: WidgetRemoteSchema,
14321
- stage: LoginStageEnum
14322
- })]);
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
+ ]);
14323
14579
  method(_void(), array(LoginMethodContributionSchema).readonly());
14324
14580
  /**
14325
14581
  * Orchestrator-side destination metadata. The orchestrator computes
@@ -16199,14 +16455,14 @@ var TargetKindCapsSchema = object({
16199
16455
  * the union is large and not meant for runtime validation here; the exported
16200
16456
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
16201
16457
  */
16202
- var ConfigSchemaPassthrough = unknown();
16458
+ var ConfigSchemaPassthrough$1 = unknown();
16203
16459
  var TargetKindSchema = object({
16204
16460
  kind: string(),
16205
16461
  label: string(),
16206
16462
  icon: string(),
16207
16463
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
16208
16464
  addonId: string(),
16209
- configSchema: ConfigSchemaPassthrough,
16465
+ configSchema: ConfigSchemaPassthrough$1,
16210
16466
  supportsDiscovery: boolean(),
16211
16467
  caps: TargetKindCapsSchema
16212
16468
  });
@@ -16259,6 +16515,298 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
16259
16515
  enabled: boolean()
16260
16516
  }), _void(), { kind: "mutation" });
16261
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
+ /**
16262
16810
  * Zod schemas for persisted record types.
16263
16811
  *
16264
16812
  * These schemas serve as the single source of truth for types that are
@@ -16474,6 +17022,10 @@ var TrackSchema = object({
16474
17022
  snapshots: array(TrackSnapshotSchema).readonly(),
16475
17023
  /** Deduplicated zones the track has entered at least once. */
16476
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(),
16477
17029
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
16478
17030
  totalDistance: number(),
16479
17031
  state: TrackStateSchema,
@@ -16635,7 +17187,7 @@ var KeyEventSchema = object({
16635
17187
  /** Track lifetime in ms (lastSeen - firstSeen). */
16636
17188
  windowMs: number().optional()
16637
17189
  });
16638
- var TrackedDetectionSchema = object({
17190
+ object({
16639
17191
  trackId: string(),
16640
17192
  className: string(),
16641
17193
  confidence: number(),
@@ -16643,6 +17195,23 @@ var TrackedDetectionSchema = object({
16643
17195
  zones: array(string()).readonly(),
16644
17196
  state: TrackStateSchema
16645
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
+ });
16646
17215
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: number() });
16647
17216
  var SearchObjectEventsInput = object({
16648
17217
  text: string(),
@@ -16653,6 +17222,20 @@ var SearchObjectEventsInput = object({
16653
17222
  limit: number().default(50),
16654
17223
  minScore: number().min(0).max(1).default(.2)
16655
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
+ });
16656
17239
  DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
16657
17240
  deviceId: number(),
16658
17241
  trackId: string()
@@ -16684,6 +17267,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16684
17267
  }), {
16685
17268
  kind: "mutation",
16686
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"
16687
17288
  }), method(object({
16688
17289
  eventId: string(),
16689
17290
  kind: MediaFileKindEnum.optional()
@@ -16692,7 +17293,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16692
17293
  timestamp: number(),
16693
17294
  frameWidth: number(),
16694
17295
  frameHeight: number(),
16695
- detections: array(TrackedDetectionSchema).readonly()
17296
+ detections: array(OverlayDetectionSchema).readonly()
16696
17297
  }), object({
16697
17298
  deviceId: number(),
16698
17299
  trackId: string(),
@@ -19556,6 +20157,24 @@ DeviceType.Camera, method(object({
19556
20157
  deviceId: number(),
19557
20158
  status: OsdStatusSchema
19558
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
+ });
19559
20178
  var PlateInfoSchema = object({
19560
20179
  plateId: string(),
19561
20180
  deviceId: number().int(),
@@ -19567,6 +20186,16 @@ var PlateInfoSchema = object({
19567
20186
  score: number(),
19568
20187
  /** True when the text was manually corrected (exempt from retention). */
19569
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(),
19570
20199
  base64: string().optional()
19571
20200
  });
19572
20201
  var MediaFileLiteSchema = object({
@@ -19606,6 +20235,48 @@ method(object({
19606
20235
  }), method(object({ plateId: string() }), _void(), {
19607
20236
  kind: "mutation",
19608
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"
19609
20280
  });
19610
20281
  var ModelFormatSchema = _enum(MODEL_FORMATS);
19611
20282
  var HwAccelBackendInputSchema = _enum([
@@ -22184,6 +22855,168 @@ Object.freeze({
22184
22855
  addonId: null,
22185
22856
  access: "create"
22186
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
+ },
22187
23020
  "localNetwork.getAllowedAddresses": {
22188
23021
  capName: "local-network",
22189
23022
  capScope: "system",
@@ -22814,6 +23647,12 @@ Object.freeze({
22814
23647
  addonId: null,
22815
23648
  access: "delete"
22816
23649
  },
23650
+ "pipelineAnalytics.deleteTracks": {
23651
+ capName: "pipeline-analytics",
23652
+ capScope: "device",
23653
+ addonId: null,
23654
+ access: "delete"
23655
+ },
22817
23656
  "pipelineAnalytics.getActiveTracks": {
22818
23657
  capName: "pipeline-analytics",
22819
23658
  capScope: "device",
@@ -22880,12 +23719,24 @@ Object.freeze({
22880
23719
  addonId: null,
22881
23720
  access: "create"
22882
23721
  },
23722
+ "pipelineAnalytics.pruneTracksBefore": {
23723
+ capName: "pipeline-analytics",
23724
+ capScope: "device",
23725
+ addonId: null,
23726
+ access: "create"
23727
+ },
22883
23728
  "pipelineAnalytics.searchObjectEvents": {
22884
23729
  capName: "pipeline-analytics",
22885
23730
  capScope: "device",
22886
23731
  addonId: null,
22887
23732
  access: "view"
22888
23733
  },
23734
+ "pipelineAnalytics.wipeAllAnalytics": {
23735
+ capName: "pipeline-analytics",
23736
+ capScope: "device",
23737
+ addonId: null,
23738
+ access: "delete"
23739
+ },
22889
23740
  "pipelineExecutor.cacheFrameInPool": {
22890
23741
  capName: "pipeline-executor",
22891
23742
  capScope: "system",
@@ -23384,18 +24235,48 @@ Object.freeze({
23384
24235
  addonId: null,
23385
24236
  access: "create"
23386
24237
  },
24238
+ "pipelineRunner.runDetailSubtree": {
24239
+ capName: "pipeline-runner",
24240
+ capScope: "system",
24241
+ addonId: null,
24242
+ access: "create"
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
+ },
23387
24256
  "plateGallery.correctPlateText": {
23388
24257
  capName: "plate-gallery",
23389
24258
  capScope: "system",
23390
24259
  addonId: null,
23391
24260
  access: "create"
23392
24261
  },
24262
+ "plateGallery.createVehicle": {
24263
+ capName: "plate-gallery",
24264
+ capScope: "system",
24265
+ addonId: null,
24266
+ access: "create"
24267
+ },
23393
24268
  "plateGallery.deletePlate": {
23394
24269
  capName: "plate-gallery",
23395
24270
  capScope: "system",
23396
24271
  addonId: null,
23397
24272
  access: "delete"
23398
24273
  },
24274
+ "plateGallery.deleteVehicle": {
24275
+ capName: "plate-gallery",
24276
+ capScope: "system",
24277
+ addonId: null,
24278
+ access: "delete"
24279
+ },
23399
24280
  "plateGallery.getPlateByTrack": {
23400
24281
  capName: "plate-gallery",
23401
24282
  capScope: "system",
@@ -23414,6 +24295,30 @@ Object.freeze({
23414
24295
  addonId: null,
23415
24296
  access: "view"
23416
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
+ },
23417
24322
  "plateGallery.searchPlates": {
23418
24323
  capName: "plate-gallery",
23419
24324
  capScope: "system",
@@ -23426,6 +24331,18 @@ Object.freeze({
23426
24331
  addonId: null,
23427
24332
  access: "view"
23428
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
+ },
23429
24346
  "platformProbe.getCapabilities": {
23430
24347
  capName: "platform-probe",
23431
24348
  capScope: "system",
@@ -23618,6 +24535,48 @@ Object.freeze({
23618
24535
  addonId: null,
23619
24536
  access: "create"
23620
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
+ },
23621
24580
  "scriptRunner.run": {
23622
24581
  capName: "script-runner",
23623
24582
  capScope: "device",
@@ -24702,6 +25661,7 @@ Object.freeze({
24702
25661
  Object.freeze({
24703
25662
  "broker": "broker",
24704
25663
  "device-export": "device-export",
25664
+ "llm": "ai",
24705
25665
  "mesh-network": "mesh",
24706
25666
  "mqtt-broker": "broker",
24707
25667
  "network-access": "ingress",