camstack 1.1.25 → 1.1.27

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.
@@ -14522,7 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/sleep-Baang_XW.mjs
14525
+ // ../types/dist/sleep-CK899CTS.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -15316,7 +15316,8 @@ var MODEL_FORMATS = [
15316
15316
  "coreml",
15317
15317
  "openvino",
15318
15318
  "tflite",
15319
- "pt"
15319
+ "pt",
15320
+ "gguf"
15320
15321
  ];
15321
15322
  var ModelFormatEntrySchema = external_exports.object({
15322
15323
  url: external_exports.string(),
@@ -15338,7 +15339,8 @@ var ModelFormatsSchema = external_exports.object({
15338
15339
  coreml: ModelFormatEntrySchema.optional(),
15339
15340
  openvino: ModelFormatEntrySchema.optional(),
15340
15341
  tflite: ModelFormatEntrySchema.optional(),
15341
- pt: ModelFormatEntrySchema.optional()
15342
+ pt: ModelFormatEntrySchema.optional(),
15343
+ gguf: ModelFormatEntrySchema.optional()
15342
15344
  });
15343
15345
  var ModelVariantGroupSchema = external_exports.object({
15344
15346
  /** Top-level family, e.g. `yolo26` (later `d-fine`, `rf-detr`). */
@@ -15371,6 +15373,15 @@ var ModelCatalogEntrySchema = external_exports.object({
15371
15373
  width: external_exports.number(),
15372
15374
  height: external_exports.number()
15373
15375
  }),
15376
+ /**
15377
+ * Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
15378
+ * every detector / classifier / embedder. Set to 1 for a grayscale CTC text
15379
+ * recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
15380
+ * feeds a single-channel, EasyOCR-normalized tensor instead of the default
15381
+ * 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
15382
+ * Python inference pool.
15383
+ */
15384
+ inputChannels: external_exports.number().int().positive().optional(),
15374
15385
  labels: external_exports.array(LabelDefinitionSchema).readonly(),
15375
15386
  inputLayout: external_exports.enum(["nchw", "nhwc"]).optional(),
15376
15387
  inputNormalization: external_exports.enum([
@@ -15380,6 +15391,16 @@ var ModelCatalogEntrySchema = external_exports.object({
15380
15391
  ]).optional(),
15381
15392
  preprocessMode: external_exports.enum(["letterbox", "resize"]).optional(),
15382
15393
  /**
15394
+ * Per-MODEL postprocessor override. Absent ⇒ the step's own
15395
+ * `StepDefinition.postprocessor` applies (the normal case — every model in a
15396
+ * step shares its decode). Set it when a step hosts models with DIFFERENT raw
15397
+ * output layouts under one slot: e.g. object-detection is `'yolo'` by default,
15398
+ * but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
15399
+ * 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
15400
+ * by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
15401
+ */
15402
+ postprocessor: external_exports.custom().optional(),
15403
+ /**
15383
15404
  * When true, the executor produces a landmark-aligned crop (similarity warp
15384
15405
  * onto the canonical template) before this step runs, instead of a plain
15385
15406
  * axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
@@ -18380,7 +18401,10 @@ var doorbellCapability = {
18380
18401
  scope: "device",
18381
18402
  deviceNative: true,
18382
18403
  mode: "singleton",
18383
- deviceTypes: [DeviceType.Button],
18404
+ kind: "wrapper",
18405
+ defaultActive: false,
18406
+ deviceTypes: [DeviceType.Button, DeviceType.Camera],
18407
+ exposesDeviceSettings: true,
18384
18408
  methods: {},
18385
18409
  events: {
18386
18410
  /**
@@ -19164,7 +19188,8 @@ var ModelFormatSchema$1 = external_exports.enum([
19164
19188
  "coreml",
19165
19189
  "openvino",
19166
19190
  "tflite",
19167
- "pt"
19191
+ "pt",
19192
+ "gguf"
19168
19193
  ]);
19169
19194
  var PipelineSlotSchema = external_exports.enum([
19170
19195
  "detector",
@@ -19259,7 +19284,8 @@ var EngineProvisioningSchema = external_exports.object({
19259
19284
  runtimeId: external_exports.enum([
19260
19285
  "onnx",
19261
19286
  "openvino",
19262
- "coreml"
19287
+ "coreml",
19288
+ "edgetpu"
19263
19289
  ]).nullable(),
19264
19290
  device: external_exports.string().nullable(),
19265
19291
  state: external_exports.enum([
@@ -20887,6 +20913,148 @@ var ptzAutotrackCapability = {
20887
20913
  */
20888
20914
  runtimeState: PtzAutotrackRuntimeStateSchema
20889
20915
  };
20916
+ var SceneConditionSchema = external_exports.string();
20917
+ var SceneReferenceSchema = external_exports.object({
20918
+ embedding: external_exports.array(external_exports.number()),
20919
+ modelId: external_exports.string(),
20920
+ condition: SceneConditionSchema,
20921
+ capturedAt: external_exports.number(),
20922
+ thumbnailMediaId: external_exports.string().optional()
20923
+ });
20924
+ var SceneMonitorStateSchema = external_exports.object({
20925
+ id: external_exports.string(),
20926
+ label: external_exports.string(),
20927
+ references: external_exports.array(SceneReferenceSchema),
20928
+ textPrompts: external_exports.array(external_exports.string()).optional(),
20929
+ referenceCount: external_exports.number(),
20930
+ currentlyMatched: external_exports.boolean()
20931
+ });
20932
+ var SceneCheckSchema = external_exports.discriminatedUnion("mode", [external_exports.object({
20933
+ mode: external_exports.literal("similarity"),
20934
+ threshold: external_exports.number().min(0).max(1),
20935
+ hysteresisCount: external_exports.number().int().positive()
20936
+ }), external_exports.object({
20937
+ mode: external_exports.literal("llm"),
20938
+ prompt: external_exports.string(),
20939
+ profileId: external_exports.string().optional(),
20940
+ hysteresisCount: external_exports.number().int().positive()
20941
+ })]);
20942
+ var SceneMonitorSchema = external_exports.object({
20943
+ id: external_exports.string(),
20944
+ label: external_exports.string(),
20945
+ roi: MaskRectShapeSchema,
20946
+ enabled: external_exports.boolean(),
20947
+ triggerMode: external_exports.enum([
20948
+ "periodic",
20949
+ "on-motion",
20950
+ "both"
20951
+ ]),
20952
+ checkIntervalSec: external_exports.number().optional(),
20953
+ check: SceneCheckSchema,
20954
+ states: external_exports.array(SceneMonitorStateSchema),
20955
+ currentStateId: external_exports.string().nullable(),
20956
+ lastCheckedAt: external_exports.number().nullable(),
20957
+ lastConfidence: external_exports.number().nullable(),
20958
+ currentCondition: SceneConditionSchema.nullable(),
20959
+ availability: external_exports.enum(["ok", "unavailable"]),
20960
+ unavailableReason: external_exports.string().nullable()
20961
+ });
20962
+ var SceneMonitorStatusSchema = external_exports.object({
20963
+ monitors: external_exports.array(SceneMonitorSchema),
20964
+ lastFetchedAt: external_exports.number()
20965
+ });
20966
+ var sceneMonitorCapability = {
20967
+ name: "scene-monitor",
20968
+ scope: "device",
20969
+ mode: "singleton",
20970
+ kind: "wrapper",
20971
+ defaultActive: true,
20972
+ deviceTypes: [DeviceType.Camera],
20973
+ deviceConfig: { ui: {
20974
+ kind: "widget",
20975
+ widgetId: "host/scene-monitor-editor",
20976
+ tab: "scenes",
20977
+ label: "Scenes"
20978
+ } },
20979
+ methods: {
20980
+ listScenes: method(external_exports.object({ deviceId: external_exports.number() }), SceneMonitorStatusSchema),
20981
+ createScene: method(external_exports.object({
20982
+ deviceId: external_exports.number(),
20983
+ label: external_exports.string(),
20984
+ roi: MaskRectShapeSchema,
20985
+ check: SceneCheckSchema,
20986
+ triggerMode: external_exports.enum([
20987
+ "periodic",
20988
+ "on-motion",
20989
+ "both"
20990
+ ]).optional(),
20991
+ checkIntervalSec: external_exports.number().optional()
20992
+ }), SceneMonitorSchema, {
20993
+ kind: "mutation",
20994
+ auth: "admin"
20995
+ }),
20996
+ updateScene: method(external_exports.object({
20997
+ deviceId: external_exports.number(),
20998
+ monitorId: external_exports.string(),
20999
+ patch: external_exports.object({
21000
+ label: external_exports.string().optional(),
21001
+ roi: MaskRectShapeSchema.optional(),
21002
+ enabled: external_exports.boolean().optional(),
21003
+ triggerMode: external_exports.enum([
21004
+ "periodic",
21005
+ "on-motion",
21006
+ "both"
21007
+ ]).optional(),
21008
+ checkIntervalSec: external_exports.number().optional(),
21009
+ check: SceneCheckSchema.optional()
21010
+ })
21011
+ }), external_exports.void(), {
21012
+ kind: "mutation",
21013
+ auth: "admin"
21014
+ }),
21015
+ deleteScene: method(external_exports.object({
21016
+ deviceId: external_exports.number(),
21017
+ monitorId: external_exports.string()
21018
+ }), external_exports.void(), {
21019
+ kind: "mutation",
21020
+ auth: "admin"
21021
+ }),
21022
+ captureReference: method(external_exports.object({
21023
+ deviceId: external_exports.number(),
21024
+ monitorId: external_exports.string(),
21025
+ stateId: external_exports.string().optional(),
21026
+ label: external_exports.string().optional(),
21027
+ condition: SceneConditionSchema.optional()
21028
+ }), external_exports.object({
21029
+ stateId: external_exports.string(),
21030
+ referenceCount: external_exports.number()
21031
+ }), {
21032
+ kind: "mutation",
21033
+ auth: "admin"
21034
+ }),
21035
+ deleteReference: method(external_exports.object({
21036
+ deviceId: external_exports.number(),
21037
+ monitorId: external_exports.string(),
21038
+ stateId: external_exports.string(),
21039
+ index: external_exports.number()
21040
+ }), external_exports.void(), {
21041
+ kind: "mutation",
21042
+ auth: "admin"
21043
+ }),
21044
+ recheckNow: method(external_exports.object({
21045
+ deviceId: external_exports.number(),
21046
+ monitorId: external_exports.string()
21047
+ }), external_exports.void(), {
21048
+ kind: "mutation",
21049
+ auth: "admin"
21050
+ })
21051
+ },
21052
+ status: {
21053
+ schema: SceneMonitorStatusSchema,
21054
+ kind: "push"
21055
+ },
21056
+ runtimeState: SceneMonitorStatusSchema
21057
+ };
20890
21058
  var ScriptRunnerStatusSchema = external_exports.object({
20891
21059
  /** Whether the script is currently executing. */
20892
21060
  isRunning: external_exports.boolean(),
@@ -21475,6 +21643,28 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
21475
21643
  * with the per-track detail panel and live overlay. */
21476
21644
  trackIds: external_exports.array(external_exports.string()).readonly()
21477
21645
  });
21646
+ var StationaryObjectSchema = external_exports.object({
21647
+ id: external_exports.string(),
21648
+ className: external_exports.string(),
21649
+ bbox: external_exports.object({
21650
+ x: external_exports.number(),
21651
+ y: external_exports.number(),
21652
+ w: external_exports.number(),
21653
+ h: external_exports.number()
21654
+ }),
21655
+ frameWidth: external_exports.number().int().nonnegative(),
21656
+ frameHeight: external_exports.number().int().nonnegative(),
21657
+ /** When the source track was first seen. */
21658
+ firstSeenAt: external_exports.number().int(),
21659
+ /** When the object was recognised as parked (promotion time). */
21660
+ becameStationaryAt: external_exports.number().int(),
21661
+ /** Last frame a detection confirmed the object is still there. */
21662
+ lastConfirmedAt: external_exports.number().int(),
21663
+ /** Enrichment label carried from the source track (identity / plate). */
21664
+ label: external_exports.string().optional(),
21665
+ /** Native-resolution key-frame media key for the parked object's best image. */
21666
+ keyFrameMediaKey: external_exports.string().optional()
21667
+ });
21478
21668
  var CameraOccupancySnapshotSchema = external_exports.object({
21479
21669
  /** Frame timestamp of the inference result that produced this snapshot. */
21480
21670
  ts: external_exports.number().int(),
@@ -21483,10 +21673,15 @@ var CameraOccupancySnapshotSchema = external_exports.object({
21483
21673
  frameHeight: external_exports.number().int().nonnegative(),
21484
21674
  /** Per-zone breakdown — one entry per defined zone (user + onboard). */
21485
21675
  zones: external_exports.array(ZoneScopeBreakdownSchema).readonly(),
21486
- /** Frame-wide aggregate (everywhere, regardless of zone membership). */
21676
+ /** Frame-wide aggregate (everywhere, regardless of zone membership).
21677
+ * INCLUDES currently-confirmed stationary objects (they are still present). */
21487
21678
  frame: PerScopeBreakdownSchema,
21488
21679
  /** Detections that landed outside every zone. Empty when no zones defined. */
21489
- unzoned: PerScopeBreakdownSchema
21680
+ unzoned: PerScopeBreakdownSchema,
21681
+ /** Parked objects on this camera (additive — absent on legacy snapshots).
21682
+ * Surfaced separately so the UI shows them in a dedicated section rather
21683
+ * than as repeated tracks/events. */
21684
+ stationaryObjects: external_exports.array(StationaryObjectSchema).readonly().optional()
21490
21685
  });
21491
21686
  var HistoryResolutionEnum = external_exports.enum([
21492
21687
  "minute",
@@ -22291,7 +22486,12 @@ var NotificationRuleConditionsSchema = external_exports.object({
22291
22486
  clipDescription: external_exports.object({
22292
22487
  text: external_exports.string().min(1),
22293
22488
  minSimilarity: external_exports.number().min(0).max(1)
22294
- }).optional()
22489
+ }).optional(),
22490
+ /** Match events whose recognized-entity label (face identity name or plate
22491
+ * vehicle name, propagated onto `event.data.label`) is one of these values.
22492
+ * Empty/absent → unaffected (back-compat). Enables "notify me when <named
22493
+ * vehicle/person> is seen". */
22494
+ labels: external_exports.array(external_exports.string()).readonly().optional()
22295
22495
  });
22296
22496
  var NotificationRuleTemplateSchema = external_exports.object({
22297
22497
  title: external_exports.string(),
@@ -22649,7 +22849,23 @@ var WidgetLoginMethodSchema = external_exports.object({
22649
22849
  remote: WidgetRemoteSchema,
22650
22850
  stage: LoginStageEnum
22651
22851
  });
22652
- var LoginMethodContributionSchema = external_exports.discriminatedUnion("kind", [RedirectLoginMethodSchema, WidgetLoginMethodSchema]);
22852
+ var PasskeyLoginMethodSchema = external_exports.object({
22853
+ kind: external_exports.literal("passkey"),
22854
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
22855
+ id: external_exports.string(),
22856
+ /** Operator-facing button label. */
22857
+ label: external_exports.string(),
22858
+ stage: LoginStageEnum,
22859
+ /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
22860
+ rpId: external_exports.string(),
22861
+ /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
22862
+ origin: external_exports.string().nullable()
22863
+ });
22864
+ var LoginMethodContributionSchema = external_exports.discriminatedUnion("kind", [
22865
+ RedirectLoginMethodSchema,
22866
+ WidgetLoginMethodSchema,
22867
+ PasskeyLoginMethodSchema
22868
+ ]);
22653
22869
  var loginMethodCapability = {
22654
22870
  name: "login-method",
22655
22871
  scope: "system",
@@ -23527,6 +23743,13 @@ var ConfigEntrySchema2 = external_exports.object({
23527
23743
  value: external_exports.unknown(),
23528
23744
  description: external_exports.string().optional()
23529
23745
  });
23746
+ var DeviceLinkModeSchema = external_exports.enum(["auto", "manual"]);
23747
+ var LinkedDeviceSchema = external_exports.object({
23748
+ deviceId: external_exports.number(),
23749
+ name: external_exports.string(),
23750
+ location: external_exports.string().nullable(),
23751
+ features: external_exports.array(external_exports.string())
23752
+ });
23530
23753
  var SavedDeviceRowSchema = external_exports.object({
23531
23754
  /** Numeric id reserved at allocateDeviceId time. */
23532
23755
  id: external_exports.number(),
@@ -23629,6 +23852,7 @@ var deviceManagerCapability = {
23629
23852
  name: "device-manager",
23630
23853
  scope: "system",
23631
23854
  mode: "singleton",
23855
+ exposesDeviceSettings: true,
23632
23856
  methods: {
23633
23857
  /** Reserve (or re-resolve) a progressive numeric id for `(addonId, stableId)`.
23634
23858
  * Idempotent: returns the existing id if one is already persisted for the
@@ -23879,6 +24103,19 @@ var deviceManagerCapability = {
23879
24103
  getDevice: method(external_exports.object({ deviceId: external_exports.number() }), DeviceInfoSchema.nullable()),
23880
24104
  /** List children of a parent device (by parent numeric id). */
23881
24105
  getChildren: method(external_exports.object({ parentDeviceId: external_exports.number() }), external_exports.array(DeviceInfoSchema)),
24106
+ /**
24107
+ * Resolve the devices LINKED to a camera — the single policy authority
24108
+ * both consumers call (viewer devices panel + pipeline-analytics event
24109
+ * kinds/ingest). Device-tree children are ALWAYS included; mode 'auto'
24110
+ * (default) adds every device sharing the camera's non-null `location`,
24111
+ * mode 'manual' adds the persisted manual list instead. Excludes the
24112
+ * camera itself; deduped. Configuration is standard per-device settings
24113
+ * (see the module docblock) — there are no bespoke link mutations.
24114
+ */
24115
+ getLinkedDevices: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.object({
24116
+ mode: DeviceLinkModeSchema,
24117
+ devices: external_exports.array(LinkedDeviceSchema)
24118
+ })),
23882
24119
  /** Get stream sources for a camera device. */
23883
24120
  getStreamSources: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(StreamSourceEntrySchema$1)),
23884
24121
  /** Get config entries (key + value + description) for a device. */
@@ -24850,14 +25087,14 @@ var TargetKindCapsSchema = external_exports.object({
24850
25087
  ttl: external_exports.boolean(),
24851
25088
  bodyMaxLen: external_exports.number().int().positive()
24852
25089
  });
24853
- var ConfigSchemaPassthrough = external_exports.unknown();
25090
+ var ConfigSchemaPassthrough$1 = external_exports.unknown();
24854
25091
  var TargetKindSchema = external_exports.object({
24855
25092
  kind: external_exports.string(),
24856
25093
  label: external_exports.string(),
24857
25094
  icon: external_exports.string(),
24858
25095
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
24859
25096
  addonId: external_exports.string(),
24860
- configSchema: ConfigSchemaPassthrough,
25097
+ configSchema: ConfigSchemaPassthrough$1,
24861
25098
  supportsDiscovery: external_exports.boolean(),
24862
25099
  caps: TargetKindCapsSchema
24863
25100
  });
@@ -24915,6 +25152,305 @@ var notificationOutputCapability = {
24915
25152
  }), external_exports.void(), { kind: "mutation" })
24916
25153
  }
24917
25154
  };
25155
+ var LlmUsageSchema = external_exports.object({
25156
+ inputTokens: external_exports.number(),
25157
+ outputTokens: external_exports.number()
25158
+ });
25159
+ var LlmErrorCodeSchema = external_exports.enum([
25160
+ "timeout",
25161
+ "rate-limited",
25162
+ "auth",
25163
+ "refusal",
25164
+ "bad-request",
25165
+ "unavailable",
25166
+ "no-profile",
25167
+ "budget-exceeded",
25168
+ "adapter-error"
25169
+ ]);
25170
+ var LlmGenerateOkSchema = external_exports.object({
25171
+ ok: external_exports.literal(true),
25172
+ text: external_exports.string(),
25173
+ model: external_exports.string(),
25174
+ usage: LlmUsageSchema,
25175
+ truncated: external_exports.boolean(),
25176
+ latencyMs: external_exports.number()
25177
+ });
25178
+ var LlmGenerateErrSchema = external_exports.object({
25179
+ ok: external_exports.literal(false),
25180
+ code: LlmErrorCodeSchema,
25181
+ message: external_exports.string(),
25182
+ retryAfterMs: external_exports.number().optional()
25183
+ });
25184
+ var LlmGenerateResultSchema = external_exports.discriminatedUnion("ok", [LlmGenerateOkSchema, LlmGenerateErrSchema]);
25185
+ var LlmImageSchema = external_exports.object({
25186
+ bytes: external_exports.instanceof(Uint8Array),
25187
+ mimeType: external_exports.string()
25188
+ });
25189
+ var LlmGenerateBaseInputSchema = external_exports.object({
25190
+ /** Collection routing (the notification-output posture). */
25191
+ addonId: external_exports.string().optional(),
25192
+ /** Explicit profile; else the resolution chain (spec §3). */
25193
+ profileId: external_exports.string().optional(),
25194
+ /** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
25195
+ consumer: external_exports.string(),
25196
+ system: external_exports.string().optional(),
25197
+ /** v1: single-turn. `messages[]` is a v2 additive field. */
25198
+ prompt: external_exports.string(),
25199
+ /** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
25200
+ jsonSchema: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
25201
+ /** Per-call override of the profile default. */
25202
+ maxTokens: external_exports.number().int().positive().optional(),
25203
+ temperature: external_exports.number().optional()
25204
+ });
25205
+ var ManagedModelRefSchema = external_exports.discriminatedUnion("kind", [
25206
+ external_exports.object({
25207
+ kind: external_exports.literal("catalog"),
25208
+ catalogId: external_exports.string()
25209
+ }),
25210
+ external_exports.object({
25211
+ kind: external_exports.literal("url"),
25212
+ url: external_exports.string(),
25213
+ sha256: external_exports.string().optional()
25214
+ }),
25215
+ external_exports.object({
25216
+ kind: external_exports.literal("path"),
25217
+ path: external_exports.string()
25218
+ })
25219
+ ]);
25220
+ var ManagedRuntimeConfigSchema = external_exports.object({
25221
+ /** WHERE the runtime lives — hub or any agent. */
25222
+ nodeId: external_exports.string(),
25223
+ /** Closed for v1; 'ollama' is a v2 candidate. */
25224
+ engine: external_exports.enum(["llama-cpp"]),
25225
+ model: ManagedModelRefSchema,
25226
+ contextSize: external_exports.number().int().default(4096),
25227
+ /** 0 = CPU-only. */
25228
+ gpuLayers: external_exports.number().int().default(0),
25229
+ /** Default: cpus-2, clamped ≥1 (resolved node-side). */
25230
+ threads: external_exports.number().int().optional(),
25231
+ /** Concurrent slots. */
25232
+ parallel: external_exports.number().int().default(1),
25233
+ /** Else lazy: first generate boots it. */
25234
+ autoStart: external_exports.boolean().default(false),
25235
+ /** 0 = never; frees RAM after quiet periods. */
25236
+ idleStopMinutes: external_exports.number().int().default(30)
25237
+ });
25238
+ var LlmRuntimeStatusSchema = external_exports.object({
25239
+ /** Status is ALWAYS node-qualified. */
25240
+ nodeId: external_exports.string(),
25241
+ state: external_exports.enum([
25242
+ "stopped",
25243
+ "downloading",
25244
+ "starting",
25245
+ "ready",
25246
+ "crashed",
25247
+ "failed"
25248
+ ]),
25249
+ pid: external_exports.number().optional(),
25250
+ port: external_exports.number().optional(),
25251
+ modelPath: external_exports.string().optional(),
25252
+ modelId: external_exports.string().optional(),
25253
+ downloadProgress: external_exports.number().min(0).max(1).optional(),
25254
+ lastError: external_exports.string().optional(),
25255
+ crashesInWindow: external_exports.number(),
25256
+ /** Child RSS (sampled best-effort). */
25257
+ memoryBytes: external_exports.number().optional(),
25258
+ vramBytes: external_exports.number().optional()
25259
+ });
25260
+ var LlmNodeModelSchema = external_exports.object({
25261
+ file: external_exports.string(),
25262
+ sizeBytes: external_exports.number(),
25263
+ catalogId: external_exports.string().optional(),
25264
+ installedAt: external_exports.number().optional()
25265
+ });
25266
+ var LlmRuntimeDiskUsageSchema = external_exports.object({
25267
+ nodeId: external_exports.string(),
25268
+ modelsBytes: external_exports.number(),
25269
+ freeBytes: external_exports.number().optional()
25270
+ });
25271
+ var LlmRuntimeCompleteInputSchema = LlmGenerateBaseInputSchema.extend({
25272
+ images: external_exports.array(LlmImageSchema).optional(),
25273
+ runtime: ManagedRuntimeConfigSchema,
25274
+ /** The managed profile's timeout, threaded by the hub provider. */
25275
+ timeoutMs: external_exports.number().int().positive().optional()
25276
+ });
25277
+ var llmRuntimeCapability = {
25278
+ name: "llm-runtime",
25279
+ scope: "system",
25280
+ mode: "singleton",
25281
+ internal: true,
25282
+ methods: {
25283
+ complete: method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25284
+ ensureStarted: method(external_exports.object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
25285
+ kind: "mutation",
25286
+ auth: "admin"
25287
+ }),
25288
+ stop: method(external_exports.object({}), external_exports.void(), {
25289
+ kind: "mutation",
25290
+ auth: "admin"
25291
+ }),
25292
+ status: method(external_exports.object({}), LlmRuntimeStatusSchema),
25293
+ installModel: method(external_exports.object({ model: ManagedModelRefSchema }), external_exports.void(), {
25294
+ kind: "mutation",
25295
+ auth: "admin"
25296
+ }),
25297
+ deleteModel: method(external_exports.object({ file: external_exports.string() }), external_exports.void(), {
25298
+ kind: "mutation",
25299
+ auth: "admin"
25300
+ }),
25301
+ listLocalModels: method(external_exports.object({}), external_exports.array(LlmNodeModelSchema)),
25302
+ getDiskUsage: method(external_exports.object({}), LlmRuntimeDiskUsageSchema)
25303
+ }
25304
+ };
25305
+ var LlmProfileKindSchema = external_exports.enum([
25306
+ "openai-compatible",
25307
+ "openai",
25308
+ "anthropic",
25309
+ "google",
25310
+ "managed-local"
25311
+ ]);
25312
+ var LlmProfileSchema = external_exports.object({
25313
+ id: external_exports.string(),
25314
+ name: external_exports.string(),
25315
+ kind: LlmProfileKindSchema,
25316
+ /** Stamped by the provider — keeps the fanned catalog routable. */
25317
+ addonId: external_exports.string(),
25318
+ enabled: external_exports.boolean(),
25319
+ /** Vendor model id, or the managed runtime's loaded model. */
25320
+ model: external_exports.string(),
25321
+ /** Required for openai-compatible; override for cloud kinds. */
25322
+ baseUrl: external_exports.string().optional(),
25323
+ /** ConfigUISchema type:'password' — never round-trips (spec §5). */
25324
+ apiKey: external_exports.string().optional(),
25325
+ supportsVision: external_exports.boolean(),
25326
+ temperature: external_exports.number().min(0).max(2).optional(),
25327
+ maxTokens: external_exports.number().int().positive().optional(),
25328
+ timeoutMs: external_exports.number().int().positive().default(6e4),
25329
+ extraHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional(),
25330
+ /** kind === 'managed-local' only (spec §4). */
25331
+ runtime: ManagedRuntimeConfigSchema.optional()
25332
+ });
25333
+ var ConfigSchemaPassthrough = external_exports.unknown();
25334
+ var LlmProfileKindDescriptorSchema = external_exports.object({
25335
+ kind: LlmProfileKindSchema,
25336
+ label: external_exports.string(),
25337
+ icon: external_exports.string(),
25338
+ /** Stamped by each provider so the concat-fanned catalog stays routable. */
25339
+ addonId: external_exports.string(),
25340
+ configSchema: ConfigSchemaPassthrough
25341
+ });
25342
+ var LlmDefaultSelectorSchema = external_exports.union([external_exports.object({ consumer: external_exports.string() }), external_exports.object({ purpose: external_exports.enum(["text", "vision"]) })]);
25343
+ var LlmDefaultSchema = external_exports.object({
25344
+ selector: LlmDefaultSelectorSchema,
25345
+ profileId: external_exports.string()
25346
+ });
25347
+ var LlmUsageRollupSchema = external_exports.object({
25348
+ day: external_exports.string(),
25349
+ consumer: external_exports.string(),
25350
+ profileId: external_exports.string(),
25351
+ calls: external_exports.number(),
25352
+ okCalls: external_exports.number(),
25353
+ errorCalls: external_exports.number(),
25354
+ inputTokens: external_exports.number(),
25355
+ outputTokens: external_exports.number(),
25356
+ avgLatencyMs: external_exports.number()
25357
+ });
25358
+ var ManagedModelCatalogEntrySchema = external_exports.object({
25359
+ id: external_exports.string(),
25360
+ label: external_exports.string(),
25361
+ family: external_exports.string(),
25362
+ purpose: external_exports.enum(["text", "vision"]),
25363
+ url: external_exports.string(),
25364
+ sha256: external_exports.string(),
25365
+ sizeBytes: external_exports.number(),
25366
+ quantization: external_exports.string(),
25367
+ /** Load-time guidance shown in the picker. */
25368
+ minRamBytes: external_exports.number(),
25369
+ contextSizeDefault: external_exports.number().int(),
25370
+ /** Vision models: companion projector file. */
25371
+ mmprojUrl: external_exports.string().optional()
25372
+ });
25373
+ var LlmRuntimeNodeSchema = external_exports.object({
25374
+ nodeId: external_exports.string(),
25375
+ reachable: external_exports.boolean(),
25376
+ status: LlmRuntimeStatusSchema.optional(),
25377
+ disk: LlmRuntimeDiskUsageSchema.optional(),
25378
+ error: external_exports.string().optional()
25379
+ });
25380
+ var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: external_exports.array(LlmImageSchema).min(1) });
25381
+ var ProfileRefInputSchema = external_exports.object({
25382
+ addonId: external_exports.string(),
25383
+ profileId: external_exports.string()
25384
+ });
25385
+ var llmCapability = {
25386
+ name: "llm",
25387
+ scope: "system",
25388
+ mode: "collection",
25389
+ internal: false,
25390
+ providerKind: "ai",
25391
+ /** `nodeId` inputs below are DATA (the hub provider pins itself), never routing. */
25392
+ nodeIdMode: "data",
25393
+ methods: {
25394
+ generate: method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25395
+ generateVision: method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25396
+ listProfileKinds: method(external_exports.object({}), external_exports.array(LlmProfileKindDescriptorSchema)),
25397
+ listProfiles: method(external_exports.object({}), external_exports.array(LlmProfileSchema)),
25398
+ upsertProfile: method(external_exports.object({ profile: LlmProfileSchema }), LlmProfileSchema, {
25399
+ kind: "mutation",
25400
+ auth: "admin"
25401
+ }),
25402
+ deleteProfile: method(ProfileRefInputSchema, external_exports.void(), {
25403
+ kind: "mutation",
25404
+ auth: "admin"
25405
+ }),
25406
+ testProfile: method(ProfileRefInputSchema, LlmGenerateResultSchema, {
25407
+ kind: "mutation",
25408
+ auth: "admin"
25409
+ }),
25410
+ /** Live vendor enumeration (GET /models etc.). */
25411
+ listModels: method(ProfileRefInputSchema, external_exports.array(external_exports.string())),
25412
+ getDefaults: method(external_exports.object({}), external_exports.array(LlmDefaultSchema)),
25413
+ setDefault: method(external_exports.object({
25414
+ selector: LlmDefaultSelectorSchema,
25415
+ profileId: external_exports.string().nullable()
25416
+ }), external_exports.void(), {
25417
+ kind: "mutation",
25418
+ auth: "admin"
25419
+ }),
25420
+ getUsage: method(external_exports.object({
25421
+ since: external_exports.number().optional(),
25422
+ until: external_exports.number().optional(),
25423
+ consumer: external_exports.string().optional(),
25424
+ profileId: external_exports.string().optional()
25425
+ }), external_exports.array(LlmUsageRollupSchema)),
25426
+ listModelCatalog: method(external_exports.object({}), external_exports.array(ManagedModelCatalogEntrySchema)),
25427
+ listRuntimeNodes: method(external_exports.object({}), external_exports.array(LlmRuntimeNodeSchema)),
25428
+ listNodeModels: method(external_exports.object({ nodeId: external_exports.string() }), external_exports.array(LlmNodeModelSchema)),
25429
+ installModel: method(external_exports.object({
25430
+ nodeId: external_exports.string(),
25431
+ model: ManagedModelRefSchema
25432
+ }), external_exports.void(), {
25433
+ kind: "mutation",
25434
+ auth: "admin"
25435
+ }),
25436
+ deleteModel: method(external_exports.object({
25437
+ nodeId: external_exports.string(),
25438
+ file: external_exports.string()
25439
+ }), external_exports.void(), {
25440
+ kind: "mutation",
25441
+ auth: "admin"
25442
+ }),
25443
+ getRuntimeStatus: method(ProfileRefInputSchema, LlmRuntimeStatusSchema),
25444
+ startRuntime: method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
25445
+ kind: "mutation",
25446
+ auth: "admin"
25447
+ }),
25448
+ stopRuntime: method(ProfileRefInputSchema, external_exports.void(), {
25449
+ kind: "mutation",
25450
+ auth: "admin"
25451
+ })
25452
+ }
25453
+ };
24918
25454
  var MethodAccessSchema = external_exports.enum([
24919
25455
  "view",
24920
25456
  "create",
@@ -25032,6 +25568,55 @@ var EventKindSchema = external_exports.enum([
25032
25568
  "object",
25033
25569
  "audio"
25034
25570
  ]);
25571
+ var TrackZoneFilterSchema = external_exports.discriminatedUnion("kind", [MaskRectShapeSchema, MaskPolygonShapeSchema]);
25572
+ var EventKindIconSchema = external_exports.enum([
25573
+ "motion",
25574
+ "audio",
25575
+ "person",
25576
+ "vehicle",
25577
+ "animal",
25578
+ "door",
25579
+ "pir",
25580
+ "smoke",
25581
+ "water",
25582
+ "button",
25583
+ "generic"
25584
+ ]);
25585
+ var EventKindCategorySchema = external_exports.enum([
25586
+ "motion",
25587
+ "audio",
25588
+ "detection",
25589
+ "sensor",
25590
+ "custom"
25591
+ ]);
25592
+ var EventKindDescriptorSchema = external_exports.object({
25593
+ /** Stable kind id (e.g. 'motion', 'person', 'contact'). */
25594
+ kind: external_exports.string(),
25595
+ label: external_exports.string(),
25596
+ /** Hex color for timeline/legend rendering. */
25597
+ color: external_exports.string(),
25598
+ icon: EventKindIconSchema,
25599
+ category: EventKindCategorySchema,
25600
+ /** Which cap + device contributes this kind. For built-ins the camera
25601
+ * itself; for sensor kinds the LINKED source device. */
25602
+ source: external_exports.object({
25603
+ capName: external_exports.string(),
25604
+ deviceId: external_exports.number()
25605
+ })
25606
+ });
25607
+ var SensorEventSchema = external_exports.object({
25608
+ id: external_exports.string(),
25609
+ /** The CAMERA the event is attributed to (a sensor linked to N cameras
25610
+ * yields N rows, one per camera). */
25611
+ deviceId: external_exports.number(),
25612
+ /** The linked sensor device whose state changed. */
25613
+ sourceDeviceId: external_exports.number(),
25614
+ /** Event kind id — matches an `EventKindDescriptor.kind`. */
25615
+ kind: external_exports.string(),
25616
+ /** Snapshot of the sensor cap's runtime-state slice at the change. */
25617
+ value: external_exports.record(external_exports.string(), external_exports.unknown()).nullable(),
25618
+ timestamp: external_exports.number()
25619
+ });
25035
25620
  var TrackPositionSchema = external_exports.object({
25036
25621
  x: external_exports.number(),
25037
25622
  y: external_exports.number(),
@@ -25044,6 +25629,22 @@ var TrackSnapshotSchema = external_exports.object({
25044
25629
  /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
25045
25630
  mediaKey: external_exports.string()
25046
25631
  });
25632
+ var TrackEnvelopeSchema = external_exports.object({
25633
+ minX: external_exports.number(),
25634
+ minY: external_exports.number(),
25635
+ maxX: external_exports.number(),
25636
+ maxY: external_exports.number()
25637
+ });
25638
+ var TrackProjectionSchema = external_exports.enum(["full", "slim"]);
25639
+ var TrackAudioLabelSchema = external_exports.object({
25640
+ label: external_exports.string(),
25641
+ /** Highest classification score observed across the label's episodes. */
25642
+ peakScore: external_exports.number(),
25643
+ /** Number of coalesced audio-event episodes carrying this label. */
25644
+ count: external_exports.number(),
25645
+ firstAt: external_exports.number(),
25646
+ lastAt: external_exports.number()
25647
+ });
25047
25648
  var TrackSchema = external_exports.object({
25048
25649
  trackId: external_exports.string(),
25049
25650
  deviceId: external_exports.number(),
@@ -25058,6 +25659,10 @@ var TrackSchema = external_exports.object({
25058
25659
  snapshots: external_exports.array(TrackSnapshotSchema).readonly(),
25059
25660
  /** Deduplicated zones the track has entered at least once. */
25060
25661
  zonesVisited: external_exports.array(external_exports.string()).readonly(),
25662
+ /** Deduplicated set of detector classes observed for this track over its
25663
+ * life (a track may be reclassified, e.g. person→vehicle). Absent on
25664
+ * legacy rows written before class accumulation shipped. */
25665
+ classes: external_exports.array(external_exports.string()).readonly().optional(),
25061
25666
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
25062
25667
  totalDistance: external_exports.number(),
25063
25668
  state: TrackStateSchema,
@@ -25071,7 +25676,15 @@ var TrackSchema = external_exports.object({
25071
25676
  bestEventId: external_exports.string().optional(),
25072
25677
  /** Tag of the importance sub-signal that dominated the score
25073
25678
  * (identity|dwell|proximity|class|confidence|travel|zone). */
25074
- importanceReason: external_exports.string().optional()
25679
+ importanceReason: external_exports.string().optional(),
25680
+ /** Audio-classification labels heard on the camera during the track's
25681
+ * life (score ≥ device `classificationMinScore`), aggregated per label.
25682
+ * Absent on legacy rows / tracks with no confident audio. */
25683
+ audioLabels: external_exports.array(TrackAudioLabelSchema).readonly().optional(),
25684
+ /** Normalized 0..1 trajectory envelope (see {@link TrackEnvelopeSchema}).
25685
+ * Populated from the persisted envelope columns on historical reads;
25686
+ * absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
25687
+ envelope: TrackEnvelopeSchema.optional()
25075
25688
  });
25076
25689
  var BaseEventFields = {
25077
25690
  id: external_exports.string(),
@@ -25173,11 +25786,13 @@ var MediaFileSchema = external_exports.object({
25173
25786
  sizeBytes: external_exports.number(),
25174
25787
  timestamp: external_exports.number()
25175
25788
  });
25789
+ var DEFAULT_EVENT_QUERY_LIMIT = 1e3;
25790
+ var MAX_EVENT_QUERY_LIMIT = 5e3;
25176
25791
  var DeviceEventQueryInput = external_exports.object({
25177
25792
  deviceId: external_exports.number(),
25178
25793
  since: external_exports.number().optional(),
25179
25794
  until: external_exports.number().optional(),
25180
- limit: external_exports.number().int().min(1).max(5e3).default(1e3),
25795
+ limit: external_exports.number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT),
25181
25796
  /** `slim` drops heavy JSON fields (regions/bbox/zones) and carries an
25182
25797
  * optional `mediaUrl` (populated by B5). `full` (default) keeps today's
25183
25798
  * exact behaviour. Callers may omit this field — the store defaults to
@@ -25185,6 +25800,27 @@ var DeviceEventQueryInput = external_exports.object({
25185
25800
  projection: external_exports.enum(["full", "slim"]).optional()
25186
25801
  });
25187
25802
  var ObjectEventQueryInput = DeviceEventQueryInput.extend({ classFilter: external_exports.string().optional() });
25803
+ var RecentTracksQueryInput = external_exports.object({
25804
+ /** Devices to merge. An empty array yields `{ tracks: [], nextCursor: null }`. */
25805
+ deviceIds: external_exports.array(external_exports.number()),
25806
+ /** Window lower bound on `lastSeen` (inclusive). */
25807
+ since: external_exports.number().optional(),
25808
+ /** Window upper bound on `lastSeen` (inclusive). */
25809
+ until: external_exports.number().optional(),
25810
+ /** Page size. Default 200, max 1000. */
25811
+ limit: external_exports.number().int().min(1).max(1e3).default(200),
25812
+ /** Opaque continuation cursor from a previous page's `nextCursor`.
25813
+ * Encodes the (lastSeen, trackId) sort position — treat as opaque. */
25814
+ cursor: external_exports.string().optional(),
25815
+ /** See {@link TrackProjectionSchema}. Default `full`. */
25816
+ projection: TrackProjectionSchema.optional()
25817
+ });
25818
+ var RecentTracksPageSchema = external_exports.object({
25819
+ /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
25820
+ tracks: external_exports.array(TrackSchema).readonly(),
25821
+ /** Cursor for the next page, or null when this page is the last. */
25822
+ nextCursor: external_exports.string().nullable()
25823
+ });
25188
25824
  var KeyEventQueryInput = external_exports.object({
25189
25825
  deviceId: external_exports.number(),
25190
25826
  /** Window lower bound (track firstSeen ≥ since). */
@@ -25219,6 +25855,23 @@ var TrackedDetectionSchema = external_exports.object({
25219
25855
  zones: external_exports.array(external_exports.string()).readonly(),
25220
25856
  state: TrackStateSchema
25221
25857
  });
25858
+ var OverlayDetectionSchema = external_exports.looseObject({
25859
+ id: external_exports.string(),
25860
+ kind: external_exports.enum(["first-level", "detail"]),
25861
+ macroClass: external_exports.string(),
25862
+ score: external_exports.number(),
25863
+ bbox: external_exports.object({
25864
+ x: external_exports.number(),
25865
+ y: external_exports.number(),
25866
+ width: external_exports.number(),
25867
+ height: external_exports.number()
25868
+ }),
25869
+ labels: external_exports.array(external_exports.looseObject({
25870
+ label: external_exports.string(),
25871
+ score: external_exports.number()
25872
+ })).readonly(),
25873
+ parentId: external_exports.string().optional()
25874
+ });
25222
25875
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: external_exports.number() });
25223
25876
  var SearchObjectEventsInput = external_exports.object({
25224
25877
  text: external_exports.string(),
@@ -25229,6 +25882,20 @@ var SearchObjectEventsInput = external_exports.object({
25229
25882
  limit: external_exports.number().default(50),
25230
25883
  minScore: external_exports.number().min(0).max(1).default(0.2)
25231
25884
  });
25885
+ var TrackCascadeCountsSchema = external_exports.object({
25886
+ /** Persisted track roots deleted (authoritative). */
25887
+ tracks: external_exports.number().int(),
25888
+ /** Object events removed with their tracks (best-effort; see note above). */
25889
+ events: external_exports.number().int(),
25890
+ /** Track/face/plate-owned media removed (best-effort). Never identity media. */
25891
+ media: external_exports.number().int(),
25892
+ /** Unassigned (non-enrolled) face reads removed (best-effort). */
25893
+ faces: external_exports.number().int(),
25894
+ /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
25895
+ plates: external_exports.number().int(),
25896
+ /** Per-track CLIP search vectors removed (best-effort). */
25897
+ embeddings: external_exports.number().int()
25898
+ });
25232
25899
  var pipelineAnalyticsCapability = {
25233
25900
  name: "pipeline-analytics",
25234
25901
  scope: "device",
@@ -25250,8 +25917,27 @@ var pipelineAnalyticsCapability = {
25250
25917
  deviceId: external_exports.number(),
25251
25918
  since: external_exports.number().optional(),
25252
25919
  until: external_exports.number().optional(),
25253
- limit: external_exports.number().optional()
25920
+ limit: external_exports.number().optional(),
25921
+ /** Spatial filter — only tracks whose trajectory intersects the zone
25922
+ * (normalized 0..1 rect or polygon). SQL-prefiltered on the persisted
25923
+ * envelope columns, then precisely tested per position. Tracks with
25924
+ * an unknown envelope (no frame dims at persist time) always match. */
25925
+ zone: TrackZoneFilterSchema.optional(),
25926
+ /** See {@link TrackProjectionSchema}. Default `full` (backward
25927
+ * compatible — omitting the field keeps today's exact behaviour). */
25928
+ projection: TrackProjectionSchema.optional()
25254
25929
  }), external_exports.array(TrackSchema).readonly()),
25930
+ /**
25931
+ * Batched cluster-wide track listing — ONE call for the events page /
25932
+ * reel first paint instead of a per-camera `listTracks` fan-out. Merges
25933
+ * the persisted completed tracks of every requested device, sorted by
25934
+ * `lastSeen` DESC with a stable (lastSeen, trackId) cursor. Per-device
25935
+ * indexed pages (`idx_tracks_device_lastSeen`) are k-way merged
25936
+ * provider-side; `projection: 'slim'` drops the heavy `positions[]` /
25937
+ * `snapshots[]` JSON (returned as empty arrays). Active in-RAM tracks
25938
+ * are not included (same contract as `listTracks`).
25939
+ */
25940
+ listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
25255
25941
  clearTracks: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), {
25256
25942
  kind: "mutation",
25257
25943
  auth: "admin"
@@ -25260,6 +25946,26 @@ var pipelineAnalyticsCapability = {
25260
25946
  getObjectEvents: method(ObjectEventQueryInput, external_exports.array(ObjectEventSchema).readonly()),
25261
25947
  getAudioEvents: method(DeviceEventQueryInput, external_exports.array(AudioEventSchema).readonly()),
25262
25948
  /**
25949
+ * Every event kind the device can produce: built-ins (motion + audio),
25950
+ * detection classes actually observed for the device (from the track
25951
+ * history), and sensor kinds contributed by LINKED devices (resolved via
25952
+ * `device-manager.getLinkedDevices`, mapped through `EVENT_KIND_BY_CAP`).
25953
+ */
25954
+ listEventKinds: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(EventKindDescriptorSchema).readonly()),
25955
+ /**
25956
+ * Sensor-event history for a camera: state changes of LINKED sensor
25957
+ * devices, attributed to the camera at ingest time (one row per linked
25958
+ * camera). Mirrors `getAudioEvents` query semantics; `kinds` narrows to
25959
+ * a kind subset.
25960
+ */
25961
+ getSensorEvents: method(external_exports.object({
25962
+ deviceId: external_exports.number(),
25963
+ since: external_exports.number().optional(),
25964
+ until: external_exports.number().optional(),
25965
+ kinds: external_exports.array(external_exports.string()).optional(),
25966
+ limit: external_exports.number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
25967
+ }), external_exports.array(SensorEventSchema).readonly()),
25968
+ /**
25263
25969
  * Importance-ranked highlights for a device+window. Queries completed
25264
25970
  * tracks by (deviceId, firstSeen ∈ [since,until]), scores each (or reuses
25265
25971
  * the persisted score), filters by minImportance/classFilter, orders by
@@ -25282,12 +25988,14 @@ var pipelineAnalyticsCapability = {
25282
25988
  audio: external_exports.number().int()
25283
25989
  })).readonly()),
25284
25990
  /**
25285
- * Delete all events (motion + object + audio) for the given device
25286
- * that are older than `cutoffMs` (exclusive), and delete their
25287
- * thumbnails in lockstep. Returns per-kind deleted counts.
25288
- *
25289
- * Called by Phase B3 recorder orchestration to keep event history
25290
- * aligned with available footage.
25991
+ * @deprecated Prefer `pruneTracksBefore` the track is the ROOT of the
25992
+ * analytics model and retention must cascade from it (design §5.1). This
25993
+ * event-only prune leaves orphaned tracks/faces/plates/embeddings behind.
25994
+ * Retained as a compat shim for the Phase-B3 recorder orchestration caller,
25995
+ * which prunes events to keep history aligned with available footage and
25996
+ * reads the per-kind counts. Delete all events (motion + object + audio)
25997
+ * for the given device older than `cutoffMs` (exclusive) + their thumbnails
25998
+ * in lockstep; returns per-kind deleted counts.
25291
25999
  */
25292
26000
  pruneEventsBefore: method(external_exports.object({
25293
26001
  deviceId: external_exports.number(),
@@ -25300,8 +26008,57 @@ var pipelineAnalyticsCapability = {
25300
26008
  kind: "mutation",
25301
26009
  auth: "admin"
25302
26010
  }),
25303
- getEventMedia: method(external_exports.object({
25304
- eventId: external_exports.string(),
26011
+ /**
26012
+ * Track-centric retention entry point (design §5.1). Selects every
26013
+ * persisted track for the device whose `lastSeen < cutoffMs` (paged) and
26014
+ * runs the extensible whole-track deletion cascade (design §3): object
26015
+ * events + their media, track/face/plate-owned media, unassigned face
26016
+ * reads, per-track CLIP embeddings, then the track root LAST. ENROLLED
26017
+ * (assigned) faces/plates and `ownerKind:'identity'` media are exempt —
26018
+ * the durable matching gallery always persists. Fires the per-track
26019
+ * live-state cleanup so a pruned track can't linger in dispatch/overlay
26020
+ * state. Returns per-family deleted counts (`tracks` authoritative).
26021
+ *
26022
+ * Replaces `pruneEventsBefore` as the correct time-based retention prune.
26023
+ */
26024
+ pruneTracksBefore: method(external_exports.object({
26025
+ deviceId: external_exports.number(),
26026
+ cutoffMs: external_exports.number()
26027
+ }), TrackCascadeCountsSchema, {
26028
+ kind: "mutation",
26029
+ auth: "admin"
26030
+ }),
26031
+ /**
26032
+ * Operator "clean slate" for a device (design §5.3): prune EVERY track for
26033
+ * the device via the same cascade as `pruneTracksBefore` with `cutoffMs =
26034
+ * now`. One call per device — no client-side track enumeration. Enrolled
26035
+ * gallery + identity media are exempt (design §4). Returns per-family
26036
+ * deleted counts.
26037
+ */
26038
+ wipeAllAnalytics: method(external_exports.object({ deviceId: external_exports.number() }), TrackCascadeCountsSchema, {
26039
+ kind: "mutation",
26040
+ auth: "admin"
26041
+ }),
26042
+ /**
26043
+ * Delete whole tracks (object events) by id for the given device,
26044
+ * cascading their media in lockstep. Returns the number of tracks
26045
+ * actually deleted plus the ids that could not be removed.
26046
+ *
26047
+ * Operator-driven from the DI Events page (batch delete). Routes through
26048
+ * the same widened track-deletion cascade (design §5.2).
26049
+ */
26050
+ deleteTracks: method(external_exports.object({
26051
+ deviceId: external_exports.number(),
26052
+ trackIds: external_exports.array(external_exports.string()).min(1)
26053
+ }), external_exports.object({
26054
+ deleted: external_exports.number().int(),
26055
+ failed: external_exports.array(external_exports.string()).readonly()
26056
+ }), {
26057
+ kind: "mutation",
26058
+ auth: "admin"
26059
+ }),
26060
+ getEventMedia: method(external_exports.object({
26061
+ eventId: external_exports.string(),
25305
26062
  kind: MediaFileKindEnum.optional()
25306
26063
  }), external_exports.array(MediaFileSchema).readonly()),
25307
26064
  getTrackMedia: method(external_exports.object({ trackId: external_exports.string() }), external_exports.array(MediaFileSchema).readonly()),
@@ -25317,17 +26074,19 @@ var pipelineAnalyticsCapability = {
25317
26074
  },
25318
26075
  events: {
25319
26076
  /**
25320
- * Enriched frame emitted after refinement. Carries lightweight
25321
- * tracked-detection metadata (track id, class, zones, state) so
25322
- * downstream consumers (stream overlays, notifications) can
25323
- * annotate without querying full Track state.
26077
+ * Enriched frame emitted after refinement the live-overlay source of
26078
+ * truth (two-plane re-injection). Carries the frame's detections in the
26079
+ * `ObjectDetection` wire shape: first-level roots (with track info +
26080
+ * enrichment labels) plus synthesized `kind:'detail'` face/plate entries
26081
+ * re-projected from per-track detail state, so stream overlays render
26082
+ * boxes + recognized names without querying full Track state.
25324
26083
  */
25325
26084
  onFrameTracked: { data: external_exports.object({
25326
26085
  deviceId: external_exports.number(),
25327
26086
  timestamp: external_exports.number(),
25328
26087
  frameWidth: external_exports.number(),
25329
26088
  frameHeight: external_exports.number(),
25330
- detections: external_exports.array(TrackedDetectionSchema).readonly()
26089
+ detections: external_exports.array(OverlayDetectionSchema).readonly()
25331
26090
  }) },
25332
26091
  /** Track entered active state (first-seen). */
25333
26092
  onTrackStarted: { data: external_exports.object({
@@ -26860,7 +27619,15 @@ var webrtcSessionCapability = {
26860
27619
  */
26861
27620
  disableIpv6: external_exports.boolean().optional(),
26862
27621
  /** Subscriber attribution. See `createSession` for the contract. */
26863
- consumerAttribution: BrokerConsumerAttributionSchema.optional()
27622
+ consumerAttribution: BrokerConsumerAttributionSchema.optional(),
27623
+ /**
27624
+ * Client-side stream hints (viewport, downlink) — same contract as
27625
+ * `createSession.hints`. Client-offer viewers (the RN viewer's
27626
+ * `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
27627
+ * field their hints were silently stripped by the schema and the
27628
+ * adaptive ladder started blind on the client's display size.
27629
+ */
27630
+ hints: webrtcClientHintsSchema.optional()
26864
27631
  }), external_exports.object({
26865
27632
  sessionId: external_exports.string(),
26866
27633
  sdpAnswer: external_exports.string()
@@ -28685,6 +29452,24 @@ var osdCapability = {
28685
29452
  }
28686
29453
  }] }
28687
29454
  };
29455
+ var VehicleSchema = external_exports.object({
29456
+ id: external_exports.string(),
29457
+ name: external_exports.string(),
29458
+ sampleCount: external_exports.number().int().nonnegative(),
29459
+ coverMediaKey: external_exports.string().optional(),
29460
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
29461
+ coverBase64: external_exports.string().optional()
29462
+ });
29463
+ var VehicleSampleInfoSchema = external_exports.object({
29464
+ id: external_exports.string(),
29465
+ /** The plate text this sample enrolled (self-labeling — no embedding). */
29466
+ text: external_exports.string(),
29467
+ /** OCR confidence of the enrolled read (0..1). */
29468
+ score: external_exports.number(),
29469
+ addedAt: external_exports.number().int(),
29470
+ deviceId: external_exports.number().int().optional(),
29471
+ base64: external_exports.string().optional()
29472
+ });
28688
29473
  var PlateInfoSchema = external_exports.object({
28689
29474
  plateId: external_exports.string(),
28690
29475
  deviceId: external_exports.number().int(),
@@ -28696,6 +29481,16 @@ var PlateInfoSchema = external_exports.object({
28696
29481
  score: external_exports.number(),
28697
29482
  /** True when the text was manually corrected (exempt from retention). */
28698
29483
  corrected: external_exports.boolean(),
29484
+ /** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
29485
+ recognizedVehicleId: external_exports.string().optional(),
29486
+ /** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
29487
+ vehicleName: external_exports.string().optional(),
29488
+ /** True once the read was assigned to a vehicle (enrolled as a sample). */
29489
+ assigned: external_exports.boolean(),
29490
+ /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
29491
+ plateBbox: BoundingBoxSchema.optional(),
29492
+ /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
29493
+ keyFrameMediaKey: external_exports.string().optional(),
28699
29494
  base64: external_exports.string().optional()
28700
29495
  });
28701
29496
  var MediaFileLiteSchema = external_exports.object({
@@ -28749,6 +29544,58 @@ var plateGalleryCapability = {
28749
29544
  deletePlate: method(external_exports.object({ plateId: external_exports.string() }), external_exports.void(), {
28750
29545
  kind: "mutation",
28751
29546
  auth: "admin"
29547
+ }),
29548
+ listVehicles: method(external_exports.void(), external_exports.array(VehicleSchema).readonly()),
29549
+ createVehicle: method(external_exports.object({ name: external_exports.string().min(1) }), VehicleSchema, {
29550
+ kind: "mutation",
29551
+ auth: "admin"
29552
+ }),
29553
+ renameVehicle: method(external_exports.object({
29554
+ id: external_exports.string(),
29555
+ name: external_exports.string().min(1)
29556
+ }), external_exports.void(), {
29557
+ kind: "mutation",
29558
+ auth: "admin"
29559
+ }),
29560
+ deleteVehicle: method(external_exports.object({ id: external_exports.string() }), external_exports.void(), {
29561
+ kind: "mutation",
29562
+ auth: "admin"
29563
+ }),
29564
+ listVehicleSamples: method(external_exports.object({ vehicleId: external_exports.string() }), external_exports.array(VehicleSampleInfoSchema).readonly()),
29565
+ removeVehicleSample: method(external_exports.object({
29566
+ vehicleId: external_exports.string(),
29567
+ sampleId: external_exports.string()
29568
+ }), external_exports.void(), {
29569
+ kind: "mutation",
29570
+ auth: "admin"
29571
+ }),
29572
+ assignPlate: method(external_exports.object({
29573
+ plateId: external_exports.string(),
29574
+ vehicleId: external_exports.string()
29575
+ }), external_exports.void(), {
29576
+ kind: "mutation",
29577
+ auth: "admin"
29578
+ }),
29579
+ unassignPlate: method(external_exports.object({ plateId: external_exports.string() }), external_exports.void(), {
29580
+ kind: "mutation",
29581
+ auth: "admin"
29582
+ }),
29583
+ assignPlates: method(external_exports.object({
29584
+ plateIds: external_exports.array(external_exports.string()).min(1),
29585
+ vehicleId: external_exports.string()
29586
+ }), external_exports.object({
29587
+ assigned: external_exports.number().int(),
29588
+ failed: external_exports.array(external_exports.string()).readonly()
29589
+ }), {
29590
+ kind: "mutation",
29591
+ auth: "admin"
29592
+ }),
29593
+ unassignPlates: method(external_exports.object({ plateIds: external_exports.array(external_exports.string()).min(1) }), external_exports.object({
29594
+ unassigned: external_exports.number().int(),
29595
+ failed: external_exports.array(external_exports.string()).readonly()
29596
+ }), {
29597
+ kind: "mutation",
29598
+ auth: "admin"
28752
29599
  })
28753
29600
  }
28754
29601
  };
@@ -28830,6 +29677,10 @@ var GpuInfoSchema = external_exports.object({
28830
29677
  memoryMB: external_exports.number().optional()
28831
29678
  });
28832
29679
  var NpuInfoSchema = external_exports.object({ type: external_exports.enum(["apple-ane", "intel-npu"]) });
29680
+ var CoralInfoSchema = external_exports.object({
29681
+ type: external_exports.literal("coral-edgetpu"),
29682
+ bus: external_exports.string().optional()
29683
+ });
28833
29684
  var HardwareInfoSchema = external_exports.object({
28834
29685
  platform: HardwarePlatformSchema,
28835
29686
  arch: HardwareArchSchema,
@@ -28838,7 +29689,8 @@ var HardwareInfoSchema = external_exports.object({
28838
29689
  totalRAM_MB: external_exports.number(),
28839
29690
  availableRAM_MB: external_exports.number(),
28840
29691
  gpu: GpuInfoSchema.nullable(),
28841
- npu: NpuInfoSchema.nullable()
29692
+ npu: NpuInfoSchema.nullable(),
29693
+ coral: CoralInfoSchema.nullable().optional()
28842
29694
  });
28843
29695
  var PlatformScoreSchema = external_exports.object({
28844
29696
  runtime: external_exports.enum(["node", "python"]),
@@ -29052,7 +29904,8 @@ var LocateSegmentResultSchema = external_exports.discriminatedUnion("kind", [ext
29052
29904
  bytes: external_exports.number()
29053
29905
  }), external_exports.object({
29054
29906
  kind: external_exports.literal("gap"),
29055
- nearestEdgeMs: external_exports.number().nullable()
29907
+ nearestEdgeMs: external_exports.number().nullable(),
29908
+ prevEndMs: external_exports.number().nullable().optional()
29056
29909
  })]);
29057
29910
  var ReadSegmentBytesResultSchema = external_exports.object({ data: external_exports.instanceof(Uint8Array) });
29058
29911
  var recordingCapability = {
@@ -30675,6 +31528,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
30675
31528
  addonId: null,
30676
31529
  access: "view"
30677
31530
  },
31531
+ "deviceManager.getLinkedDevices": {
31532
+ capName: "device-manager",
31533
+ capScope: "system",
31534
+ addonId: null,
31535
+ access: "view"
31536
+ },
30678
31537
  "deviceManager.getRoleDisplayDefaults": {
30679
31538
  capName: "device-manager",
30680
31539
  capScope: "system",
@@ -31389,6 +32248,168 @@ var METHOD_ACCESS_MAP = Object.freeze({
31389
32248
  addonId: null,
31390
32249
  access: "create"
31391
32250
  },
32251
+ "llm.deleteModel": {
32252
+ capName: "llm",
32253
+ capScope: "system",
32254
+ addonId: null,
32255
+ access: "delete"
32256
+ },
32257
+ "llm.deleteProfile": {
32258
+ capName: "llm",
32259
+ capScope: "system",
32260
+ addonId: null,
32261
+ access: "delete"
32262
+ },
32263
+ "llm.generate": {
32264
+ capName: "llm",
32265
+ capScope: "system",
32266
+ addonId: null,
32267
+ access: "create"
32268
+ },
32269
+ "llm.generateVision": {
32270
+ capName: "llm",
32271
+ capScope: "system",
32272
+ addonId: null,
32273
+ access: "create"
32274
+ },
32275
+ "llm.getDefaults": {
32276
+ capName: "llm",
32277
+ capScope: "system",
32278
+ addonId: null,
32279
+ access: "view"
32280
+ },
32281
+ "llm.getRuntimeStatus": {
32282
+ capName: "llm",
32283
+ capScope: "system",
32284
+ addonId: null,
32285
+ access: "view"
32286
+ },
32287
+ "llm.getUsage": {
32288
+ capName: "llm",
32289
+ capScope: "system",
32290
+ addonId: null,
32291
+ access: "view"
32292
+ },
32293
+ "llm.installModel": {
32294
+ capName: "llm",
32295
+ capScope: "system",
32296
+ addonId: null,
32297
+ access: "create"
32298
+ },
32299
+ "llm.listModelCatalog": {
32300
+ capName: "llm",
32301
+ capScope: "system",
32302
+ addonId: null,
32303
+ access: "view"
32304
+ },
32305
+ "llm.listModels": {
32306
+ capName: "llm",
32307
+ capScope: "system",
32308
+ addonId: null,
32309
+ access: "view"
32310
+ },
32311
+ "llm.listNodeModels": {
32312
+ capName: "llm",
32313
+ capScope: "system",
32314
+ addonId: null,
32315
+ access: "view"
32316
+ },
32317
+ "llm.listProfileKinds": {
32318
+ capName: "llm",
32319
+ capScope: "system",
32320
+ addonId: null,
32321
+ access: "view"
32322
+ },
32323
+ "llm.listProfiles": {
32324
+ capName: "llm",
32325
+ capScope: "system",
32326
+ addonId: null,
32327
+ access: "view"
32328
+ },
32329
+ "llm.listRuntimeNodes": {
32330
+ capName: "llm",
32331
+ capScope: "system",
32332
+ addonId: null,
32333
+ access: "view"
32334
+ },
32335
+ "llm.setDefault": {
32336
+ capName: "llm",
32337
+ capScope: "system",
32338
+ addonId: null,
32339
+ access: "create"
32340
+ },
32341
+ "llm.startRuntime": {
32342
+ capName: "llm",
32343
+ capScope: "system",
32344
+ addonId: null,
32345
+ access: "create"
32346
+ },
32347
+ "llm.stopRuntime": {
32348
+ capName: "llm",
32349
+ capScope: "system",
32350
+ addonId: null,
32351
+ access: "create"
32352
+ },
32353
+ "llm.testProfile": {
32354
+ capName: "llm",
32355
+ capScope: "system",
32356
+ addonId: null,
32357
+ access: "create"
32358
+ },
32359
+ "llm.upsertProfile": {
32360
+ capName: "llm",
32361
+ capScope: "system",
32362
+ addonId: null,
32363
+ access: "create"
32364
+ },
32365
+ "llmRuntime.complete": {
32366
+ capName: "llm-runtime",
32367
+ capScope: "system",
32368
+ addonId: null,
32369
+ access: "create"
32370
+ },
32371
+ "llmRuntime.deleteModel": {
32372
+ capName: "llm-runtime",
32373
+ capScope: "system",
32374
+ addonId: null,
32375
+ access: "delete"
32376
+ },
32377
+ "llmRuntime.ensureStarted": {
32378
+ capName: "llm-runtime",
32379
+ capScope: "system",
32380
+ addonId: null,
32381
+ access: "create"
32382
+ },
32383
+ "llmRuntime.getDiskUsage": {
32384
+ capName: "llm-runtime",
32385
+ capScope: "system",
32386
+ addonId: null,
32387
+ access: "view"
32388
+ },
32389
+ "llmRuntime.installModel": {
32390
+ capName: "llm-runtime",
32391
+ capScope: "system",
32392
+ addonId: null,
32393
+ access: "create"
32394
+ },
32395
+ "llmRuntime.listLocalModels": {
32396
+ capName: "llm-runtime",
32397
+ capScope: "system",
32398
+ addonId: null,
32399
+ access: "view"
32400
+ },
32401
+ "llmRuntime.status": {
32402
+ capName: "llm-runtime",
32403
+ capScope: "system",
32404
+ addonId: null,
32405
+ access: "view"
32406
+ },
32407
+ "llmRuntime.stop": {
32408
+ capName: "llm-runtime",
32409
+ capScope: "system",
32410
+ addonId: null,
32411
+ access: "create"
32412
+ },
31392
32413
  "localNetwork.getAllowedAddresses": {
31393
32414
  capName: "local-network",
31394
32415
  capScope: "system",
@@ -32019,6 +33040,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32019
33040
  addonId: null,
32020
33041
  access: "delete"
32021
33042
  },
33043
+ "pipelineAnalytics.deleteTracks": {
33044
+ capName: "pipeline-analytics",
33045
+ capScope: "device",
33046
+ addonId: null,
33047
+ access: "delete"
33048
+ },
32022
33049
  "pipelineAnalytics.getActiveTracks": {
32023
33050
  capName: "pipeline-analytics",
32024
33051
  capScope: "device",
@@ -32061,6 +33088,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32061
33088
  addonId: null,
32062
33089
  access: "view"
32063
33090
  },
33091
+ "pipelineAnalytics.getSensorEvents": {
33092
+ capName: "pipeline-analytics",
33093
+ capScope: "device",
33094
+ addonId: null,
33095
+ access: "view"
33096
+ },
32064
33097
  "pipelineAnalytics.getTrack": {
32065
33098
  capName: "pipeline-analytics",
32066
33099
  capScope: "device",
@@ -32073,6 +33106,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
32073
33106
  addonId: null,
32074
33107
  access: "view"
32075
33108
  },
33109
+ "pipelineAnalytics.listEventKinds": {
33110
+ capName: "pipeline-analytics",
33111
+ capScope: "device",
33112
+ addonId: null,
33113
+ access: "view"
33114
+ },
33115
+ "pipelineAnalytics.listRecentTracks": {
33116
+ capName: "pipeline-analytics",
33117
+ capScope: "device",
33118
+ addonId: null,
33119
+ access: "view"
33120
+ },
32076
33121
  "pipelineAnalytics.listTracks": {
32077
33122
  capName: "pipeline-analytics",
32078
33123
  capScope: "device",
@@ -32085,12 +33130,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
32085
33130
  addonId: null,
32086
33131
  access: "create"
32087
33132
  },
33133
+ "pipelineAnalytics.pruneTracksBefore": {
33134
+ capName: "pipeline-analytics",
33135
+ capScope: "device",
33136
+ addonId: null,
33137
+ access: "create"
33138
+ },
32088
33139
  "pipelineAnalytics.searchObjectEvents": {
32089
33140
  capName: "pipeline-analytics",
32090
33141
  capScope: "device",
32091
33142
  addonId: null,
32092
33143
  access: "view"
32093
33144
  },
33145
+ "pipelineAnalytics.wipeAllAnalytics": {
33146
+ capName: "pipeline-analytics",
33147
+ capScope: "device",
33148
+ addonId: null,
33149
+ access: "delete"
33150
+ },
32094
33151
  "pipelineExecutor.cacheFrameInPool": {
32095
33152
  capName: "pipeline-executor",
32096
33153
  capScope: "system",
@@ -32595,18 +33652,42 @@ var METHOD_ACCESS_MAP = Object.freeze({
32595
33652
  addonId: null,
32596
33653
  access: "create"
32597
33654
  },
33655
+ "plateGallery.assignPlate": {
33656
+ capName: "plate-gallery",
33657
+ capScope: "system",
33658
+ addonId: null,
33659
+ access: "create"
33660
+ },
33661
+ "plateGallery.assignPlates": {
33662
+ capName: "plate-gallery",
33663
+ capScope: "system",
33664
+ addonId: null,
33665
+ access: "create"
33666
+ },
32598
33667
  "plateGallery.correctPlateText": {
32599
33668
  capName: "plate-gallery",
32600
33669
  capScope: "system",
32601
33670
  addonId: null,
32602
33671
  access: "create"
32603
33672
  },
33673
+ "plateGallery.createVehicle": {
33674
+ capName: "plate-gallery",
33675
+ capScope: "system",
33676
+ addonId: null,
33677
+ access: "create"
33678
+ },
32604
33679
  "plateGallery.deletePlate": {
32605
33680
  capName: "plate-gallery",
32606
33681
  capScope: "system",
32607
33682
  addonId: null,
32608
33683
  access: "delete"
32609
33684
  },
33685
+ "plateGallery.deleteVehicle": {
33686
+ capName: "plate-gallery",
33687
+ capScope: "system",
33688
+ addonId: null,
33689
+ access: "delete"
33690
+ },
32610
33691
  "plateGallery.getPlateByTrack": {
32611
33692
  capName: "plate-gallery",
32612
33693
  capScope: "system",
@@ -32625,6 +33706,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32625
33706
  addonId: null,
32626
33707
  access: "view"
32627
33708
  },
33709
+ "plateGallery.listVehicles": {
33710
+ capName: "plate-gallery",
33711
+ capScope: "system",
33712
+ addonId: null,
33713
+ access: "view"
33714
+ },
33715
+ "plateGallery.listVehicleSamples": {
33716
+ capName: "plate-gallery",
33717
+ capScope: "system",
33718
+ addonId: null,
33719
+ access: "view"
33720
+ },
33721
+ "plateGallery.removeVehicleSample": {
33722
+ capName: "plate-gallery",
33723
+ capScope: "system",
33724
+ addonId: null,
33725
+ access: "delete"
33726
+ },
33727
+ "plateGallery.renameVehicle": {
33728
+ capName: "plate-gallery",
33729
+ capScope: "system",
33730
+ addonId: null,
33731
+ access: "create"
33732
+ },
32628
33733
  "plateGallery.searchPlates": {
32629
33734
  capName: "plate-gallery",
32630
33735
  capScope: "system",
@@ -32637,6 +33742,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
32637
33742
  addonId: null,
32638
33743
  access: "view"
32639
33744
  },
33745
+ "plateGallery.unassignPlate": {
33746
+ capName: "plate-gallery",
33747
+ capScope: "system",
33748
+ addonId: null,
33749
+ access: "create"
33750
+ },
33751
+ "plateGallery.unassignPlates": {
33752
+ capName: "plate-gallery",
33753
+ capScope: "system",
33754
+ addonId: null,
33755
+ access: "create"
33756
+ },
32640
33757
  "platformProbe.getCapabilities": {
32641
33758
  capName: "platform-probe",
32642
33759
  capScope: "system",
@@ -32829,6 +33946,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
32829
33946
  addonId: null,
32830
33947
  access: "create"
32831
33948
  },
33949
+ "sceneMonitor.captureReference": {
33950
+ capName: "scene-monitor",
33951
+ capScope: "device",
33952
+ addonId: null,
33953
+ access: "create"
33954
+ },
33955
+ "sceneMonitor.createScene": {
33956
+ capName: "scene-monitor",
33957
+ capScope: "device",
33958
+ addonId: null,
33959
+ access: "create"
33960
+ },
33961
+ "sceneMonitor.deleteReference": {
33962
+ capName: "scene-monitor",
33963
+ capScope: "device",
33964
+ addonId: null,
33965
+ access: "delete"
33966
+ },
33967
+ "sceneMonitor.deleteScene": {
33968
+ capName: "scene-monitor",
33969
+ capScope: "device",
33970
+ addonId: null,
33971
+ access: "delete"
33972
+ },
33973
+ "sceneMonitor.listScenes": {
33974
+ capName: "scene-monitor",
33975
+ capScope: "device",
33976
+ addonId: null,
33977
+ access: "view"
33978
+ },
33979
+ "sceneMonitor.recheckNow": {
33980
+ capName: "scene-monitor",
33981
+ capScope: "device",
33982
+ addonId: null,
33983
+ access: "create"
33984
+ },
33985
+ "sceneMonitor.updateScene": {
33986
+ capName: "scene-monitor",
33987
+ capScope: "device",
33988
+ addonId: null,
33989
+ access: "create"
33990
+ },
32832
33991
  "scriptRunner.run": {
32833
33992
  capName: "script-runner",
32834
33993
  capScope: "device",
@@ -33913,6 +35072,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
33913
35072
  var CAP_PROVIDER_KIND_MAP = Object.freeze({
33914
35073
  "broker": "broker",
33915
35074
  "device-export": "device-export",
35075
+ "llm": "ai",
33916
35076
  "mesh-network": "mesh",
33917
35077
  "mqtt-broker": "broker",
33918
35078
  "network-access": "ingress",