camstack 1.1.24 → 1.1.26

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-BC9Yqte7.mjs
14525
+ // ../types/dist/sleep-Br7r_3fq.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):
@@ -19164,7 +19185,8 @@ var ModelFormatSchema$1 = external_exports.enum([
19164
19185
  "coreml",
19165
19186
  "openvino",
19166
19187
  "tflite",
19167
- "pt"
19188
+ "pt",
19189
+ "gguf"
19168
19190
  ]);
19169
19191
  var PipelineSlotSchema = external_exports.enum([
19170
19192
  "detector",
@@ -19259,7 +19281,8 @@ var EngineProvisioningSchema = external_exports.object({
19259
19281
  runtimeId: external_exports.enum([
19260
19282
  "onnx",
19261
19283
  "openvino",
19262
- "coreml"
19284
+ "coreml",
19285
+ "edgetpu"
19263
19286
  ]).nullable(),
19264
19287
  device: external_exports.string().nullable(),
19265
19288
  state: external_exports.enum([
@@ -19507,7 +19530,15 @@ var pipelineExecutorCapability = {
19507
19530
  image: external_exports.instanceof(Uint8Array).optional(),
19508
19531
  referenceImage: external_exports.string().optional(),
19509
19532
  deviceId: external_exports.number().optional(),
19510
- sessionId: external_exports.string().optional()
19533
+ sessionId: external_exports.string().optional(),
19534
+ /**
19535
+ * Execution plane. 'full' (default) runs the whole tree — benchmark,
19536
+ * reference-image, and detail-subtree calls. 'frame' is the live
19537
+ * per-frame dispatch: ONLY root-plane steps run; crop children
19538
+ * (inputClasses ≠ null) are skipped and served per-track via
19539
+ * pipelineRunner.runDetailSubtree (two-plane design).
19540
+ */
19541
+ plane: external_exports.enum(["full", "frame"]).optional()
19511
19542
  }), PipelineRunResultBridge, { kind: "mutation" }),
19512
19543
  /**
19513
19544
  * Batched run — N raw frames packed into one cap call. The provider
@@ -19690,6 +19721,20 @@ var NativeCropResultSchema = external_exports.object({
19690
19721
  width: external_exports.number().int().positive(),
19691
19722
  height: external_exports.number().int().positive()
19692
19723
  });
19724
+ var DetailParentSchema = external_exports.object({
19725
+ bbox: NativeCropBboxSchema,
19726
+ className: external_exports.string()
19727
+ });
19728
+ var DetailResultSchema = external_exports.object({
19729
+ stepId: external_exports.string(),
19730
+ className: external_exports.string(),
19731
+ score: external_exports.number(),
19732
+ /** FRAME-space bbox (already mapped back from crop space). */
19733
+ bbox: NativeCropBboxSchema.optional(),
19734
+ embedding: external_exports.string().optional(),
19735
+ label: external_exports.string().optional(),
19736
+ alignedCropJpeg: external_exports.string().optional()
19737
+ });
19693
19738
  var motionCooldownMsField = {
19694
19739
  min: 0,
19695
19740
  max: 6e4,
@@ -20030,7 +20075,27 @@ var pipelineRunnerCapability = {
20030
20075
  handle: FrameHandleSchema,
20031
20076
  bbox: NativeCropBboxSchema,
20032
20077
  maxWidth: external_exports.number().int().positive().optional()
20033
- }), NativeCropResultSchema.nullable())
20078
+ }), NativeCropResultSchema.nullable()),
20079
+ /**
20080
+ * Two-plane design: run the DETAIL subtree (crop children —
20081
+ * embedding, classifier, refiner steps whose `inputClasses ≠ null`)
20082
+ * for a single tracked detection. The per-frame plane (`runPipeline`
20083
+ * with `plane: 'frame'`) skips crop children entirely; a track-level
20084
+ * caller invokes this per-track, on its own cadence, instead of on
20085
+ * every frame. Takes either a `frameHandle` (shm lease/session —
20086
+ * preferred, zero-copy) or a `cropJpeg` fallback when the lease/
20087
+ * session backing the frame is already gone. `steps` narrows which
20088
+ * configured children to run (default: all configured children for
20089
+ * `parent.className`). Returns `null` when neither frame source is
20090
+ * resolvable (handle evicted and no cropJpeg fallback supplied).
20091
+ */
20092
+ runDetailSubtree: method(external_exports.object({
20093
+ deviceId: external_exports.number(),
20094
+ frameHandle: FrameHandleSchema.optional(),
20095
+ cropJpeg: external_exports.string().optional(),
20096
+ parent: DetailParentSchema,
20097
+ steps: external_exports.array(external_exports.string()).optional()
20098
+ }), external_exports.object({ details: external_exports.array(DetailResultSchema) }).nullable(), { kind: "mutation" })
20034
20099
  }
20035
20100
  };
20036
20101
  var MotionStatusSchema = external_exports.object({
@@ -20845,6 +20910,148 @@ var ptzAutotrackCapability = {
20845
20910
  */
20846
20911
  runtimeState: PtzAutotrackRuntimeStateSchema
20847
20912
  };
20913
+ var SceneConditionSchema = external_exports.string();
20914
+ var SceneReferenceSchema = external_exports.object({
20915
+ embedding: external_exports.array(external_exports.number()),
20916
+ modelId: external_exports.string(),
20917
+ condition: SceneConditionSchema,
20918
+ capturedAt: external_exports.number(),
20919
+ thumbnailMediaId: external_exports.string().optional()
20920
+ });
20921
+ var SceneMonitorStateSchema = external_exports.object({
20922
+ id: external_exports.string(),
20923
+ label: external_exports.string(),
20924
+ references: external_exports.array(SceneReferenceSchema),
20925
+ textPrompts: external_exports.array(external_exports.string()).optional(),
20926
+ referenceCount: external_exports.number(),
20927
+ currentlyMatched: external_exports.boolean()
20928
+ });
20929
+ var SceneCheckSchema = external_exports.discriminatedUnion("mode", [external_exports.object({
20930
+ mode: external_exports.literal("similarity"),
20931
+ threshold: external_exports.number().min(0).max(1),
20932
+ hysteresisCount: external_exports.number().int().positive()
20933
+ }), external_exports.object({
20934
+ mode: external_exports.literal("llm"),
20935
+ prompt: external_exports.string(),
20936
+ profileId: external_exports.string().optional(),
20937
+ hysteresisCount: external_exports.number().int().positive()
20938
+ })]);
20939
+ var SceneMonitorSchema = external_exports.object({
20940
+ id: external_exports.string(),
20941
+ label: external_exports.string(),
20942
+ roi: MaskRectShapeSchema,
20943
+ enabled: external_exports.boolean(),
20944
+ triggerMode: external_exports.enum([
20945
+ "periodic",
20946
+ "on-motion",
20947
+ "both"
20948
+ ]),
20949
+ checkIntervalSec: external_exports.number().optional(),
20950
+ check: SceneCheckSchema,
20951
+ states: external_exports.array(SceneMonitorStateSchema),
20952
+ currentStateId: external_exports.string().nullable(),
20953
+ lastCheckedAt: external_exports.number().nullable(),
20954
+ lastConfidence: external_exports.number().nullable(),
20955
+ currentCondition: SceneConditionSchema.nullable(),
20956
+ availability: external_exports.enum(["ok", "unavailable"]),
20957
+ unavailableReason: external_exports.string().nullable()
20958
+ });
20959
+ var SceneMonitorStatusSchema = external_exports.object({
20960
+ monitors: external_exports.array(SceneMonitorSchema),
20961
+ lastFetchedAt: external_exports.number()
20962
+ });
20963
+ var sceneMonitorCapability = {
20964
+ name: "scene-monitor",
20965
+ scope: "device",
20966
+ mode: "singleton",
20967
+ kind: "wrapper",
20968
+ defaultActive: true,
20969
+ deviceTypes: [DeviceType.Camera],
20970
+ deviceConfig: { ui: {
20971
+ kind: "widget",
20972
+ widgetId: "host/scene-monitor-editor",
20973
+ tab: "scenes",
20974
+ label: "Scenes"
20975
+ } },
20976
+ methods: {
20977
+ listScenes: method(external_exports.object({ deviceId: external_exports.number() }), SceneMonitorStatusSchema),
20978
+ createScene: method(external_exports.object({
20979
+ deviceId: external_exports.number(),
20980
+ label: external_exports.string(),
20981
+ roi: MaskRectShapeSchema,
20982
+ check: SceneCheckSchema,
20983
+ triggerMode: external_exports.enum([
20984
+ "periodic",
20985
+ "on-motion",
20986
+ "both"
20987
+ ]).optional(),
20988
+ checkIntervalSec: external_exports.number().optional()
20989
+ }), SceneMonitorSchema, {
20990
+ kind: "mutation",
20991
+ auth: "admin"
20992
+ }),
20993
+ updateScene: method(external_exports.object({
20994
+ deviceId: external_exports.number(),
20995
+ monitorId: external_exports.string(),
20996
+ patch: external_exports.object({
20997
+ label: external_exports.string().optional(),
20998
+ roi: MaskRectShapeSchema.optional(),
20999
+ enabled: external_exports.boolean().optional(),
21000
+ triggerMode: external_exports.enum([
21001
+ "periodic",
21002
+ "on-motion",
21003
+ "both"
21004
+ ]).optional(),
21005
+ checkIntervalSec: external_exports.number().optional(),
21006
+ check: SceneCheckSchema.optional()
21007
+ })
21008
+ }), external_exports.void(), {
21009
+ kind: "mutation",
21010
+ auth: "admin"
21011
+ }),
21012
+ deleteScene: method(external_exports.object({
21013
+ deviceId: external_exports.number(),
21014
+ monitorId: external_exports.string()
21015
+ }), external_exports.void(), {
21016
+ kind: "mutation",
21017
+ auth: "admin"
21018
+ }),
21019
+ captureReference: method(external_exports.object({
21020
+ deviceId: external_exports.number(),
21021
+ monitorId: external_exports.string(),
21022
+ stateId: external_exports.string().optional(),
21023
+ label: external_exports.string().optional(),
21024
+ condition: SceneConditionSchema.optional()
21025
+ }), external_exports.object({
21026
+ stateId: external_exports.string(),
21027
+ referenceCount: external_exports.number()
21028
+ }), {
21029
+ kind: "mutation",
21030
+ auth: "admin"
21031
+ }),
21032
+ deleteReference: method(external_exports.object({
21033
+ deviceId: external_exports.number(),
21034
+ monitorId: external_exports.string(),
21035
+ stateId: external_exports.string(),
21036
+ index: external_exports.number()
21037
+ }), external_exports.void(), {
21038
+ kind: "mutation",
21039
+ auth: "admin"
21040
+ }),
21041
+ recheckNow: method(external_exports.object({
21042
+ deviceId: external_exports.number(),
21043
+ monitorId: external_exports.string()
21044
+ }), external_exports.void(), {
21045
+ kind: "mutation",
21046
+ auth: "admin"
21047
+ })
21048
+ },
21049
+ status: {
21050
+ schema: SceneMonitorStatusSchema,
21051
+ kind: "push"
21052
+ },
21053
+ runtimeState: SceneMonitorStatusSchema
21054
+ };
20848
21055
  var ScriptRunnerStatusSchema = external_exports.object({
20849
21056
  /** Whether the script is currently executing. */
20850
21057
  isRunning: external_exports.boolean(),
@@ -21433,6 +21640,28 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
21433
21640
  * with the per-track detail panel and live overlay. */
21434
21641
  trackIds: external_exports.array(external_exports.string()).readonly()
21435
21642
  });
21643
+ var StationaryObjectSchema = external_exports.object({
21644
+ id: external_exports.string(),
21645
+ className: external_exports.string(),
21646
+ bbox: external_exports.object({
21647
+ x: external_exports.number(),
21648
+ y: external_exports.number(),
21649
+ w: external_exports.number(),
21650
+ h: external_exports.number()
21651
+ }),
21652
+ frameWidth: external_exports.number().int().nonnegative(),
21653
+ frameHeight: external_exports.number().int().nonnegative(),
21654
+ /** When the source track was first seen. */
21655
+ firstSeenAt: external_exports.number().int(),
21656
+ /** When the object was recognised as parked (promotion time). */
21657
+ becameStationaryAt: external_exports.number().int(),
21658
+ /** Last frame a detection confirmed the object is still there. */
21659
+ lastConfirmedAt: external_exports.number().int(),
21660
+ /** Enrichment label carried from the source track (identity / plate). */
21661
+ label: external_exports.string().optional(),
21662
+ /** Native-resolution key-frame media key for the parked object's best image. */
21663
+ keyFrameMediaKey: external_exports.string().optional()
21664
+ });
21436
21665
  var CameraOccupancySnapshotSchema = external_exports.object({
21437
21666
  /** Frame timestamp of the inference result that produced this snapshot. */
21438
21667
  ts: external_exports.number().int(),
@@ -21441,10 +21670,15 @@ var CameraOccupancySnapshotSchema = external_exports.object({
21441
21670
  frameHeight: external_exports.number().int().nonnegative(),
21442
21671
  /** Per-zone breakdown — one entry per defined zone (user + onboard). */
21443
21672
  zones: external_exports.array(ZoneScopeBreakdownSchema).readonly(),
21444
- /** Frame-wide aggregate (everywhere, regardless of zone membership). */
21673
+ /** Frame-wide aggregate (everywhere, regardless of zone membership).
21674
+ * INCLUDES currently-confirmed stationary objects (they are still present). */
21445
21675
  frame: PerScopeBreakdownSchema,
21446
21676
  /** Detections that landed outside every zone. Empty when no zones defined. */
21447
- unzoned: PerScopeBreakdownSchema
21677
+ unzoned: PerScopeBreakdownSchema,
21678
+ /** Parked objects on this camera (additive — absent on legacy snapshots).
21679
+ * Surfaced separately so the UI shows them in a dedicated section rather
21680
+ * than as repeated tracks/events. */
21681
+ stationaryObjects: external_exports.array(StationaryObjectSchema).readonly().optional()
21448
21682
  });
21449
21683
  var HistoryResolutionEnum = external_exports.enum([
21450
21684
  "minute",
@@ -22249,7 +22483,12 @@ var NotificationRuleConditionsSchema = external_exports.object({
22249
22483
  clipDescription: external_exports.object({
22250
22484
  text: external_exports.string().min(1),
22251
22485
  minSimilarity: external_exports.number().min(0).max(1)
22252
- }).optional()
22486
+ }).optional(),
22487
+ /** Match events whose recognized-entity label (face identity name or plate
22488
+ * vehicle name, propagated onto `event.data.label`) is one of these values.
22489
+ * Empty/absent → unaffected (back-compat). Enables "notify me when <named
22490
+ * vehicle/person> is seen". */
22491
+ labels: external_exports.array(external_exports.string()).readonly().optional()
22253
22492
  });
22254
22493
  var NotificationRuleTemplateSchema = external_exports.object({
22255
22494
  title: external_exports.string(),
@@ -22607,7 +22846,23 @@ var WidgetLoginMethodSchema = external_exports.object({
22607
22846
  remote: WidgetRemoteSchema,
22608
22847
  stage: LoginStageEnum
22609
22848
  });
22610
- var LoginMethodContributionSchema = external_exports.discriminatedUnion("kind", [RedirectLoginMethodSchema, WidgetLoginMethodSchema]);
22849
+ var PasskeyLoginMethodSchema = external_exports.object({
22850
+ kind: external_exports.literal("passkey"),
22851
+ /** Stable id within the login-method set (e.g. `auth-webauthn/passkey-direct-login`). */
22852
+ id: external_exports.string(),
22853
+ /** Operator-facing button label. */
22854
+ label: external_exports.string(),
22855
+ stage: LoginStageEnum,
22856
+ /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
22857
+ rpId: external_exports.string(),
22858
+ /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
22859
+ origin: external_exports.string().nullable()
22860
+ });
22861
+ var LoginMethodContributionSchema = external_exports.discriminatedUnion("kind", [
22862
+ RedirectLoginMethodSchema,
22863
+ WidgetLoginMethodSchema,
22864
+ PasskeyLoginMethodSchema
22865
+ ]);
22611
22866
  var loginMethodCapability = {
22612
22867
  name: "login-method",
22613
22868
  scope: "system",
@@ -24808,14 +25063,14 @@ var TargetKindCapsSchema = external_exports.object({
24808
25063
  ttl: external_exports.boolean(),
24809
25064
  bodyMaxLen: external_exports.number().int().positive()
24810
25065
  });
24811
- var ConfigSchemaPassthrough = external_exports.unknown();
25066
+ var ConfigSchemaPassthrough$1 = external_exports.unknown();
24812
25067
  var TargetKindSchema = external_exports.object({
24813
25068
  kind: external_exports.string(),
24814
25069
  label: external_exports.string(),
24815
25070
  icon: external_exports.string(),
24816
25071
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
24817
25072
  addonId: external_exports.string(),
24818
- configSchema: ConfigSchemaPassthrough,
25073
+ configSchema: ConfigSchemaPassthrough$1,
24819
25074
  supportsDiscovery: external_exports.boolean(),
24820
25075
  caps: TargetKindCapsSchema
24821
25076
  });
@@ -24873,6 +25128,305 @@ var notificationOutputCapability = {
24873
25128
  }), external_exports.void(), { kind: "mutation" })
24874
25129
  }
24875
25130
  };
25131
+ var LlmUsageSchema = external_exports.object({
25132
+ inputTokens: external_exports.number(),
25133
+ outputTokens: external_exports.number()
25134
+ });
25135
+ var LlmErrorCodeSchema = external_exports.enum([
25136
+ "timeout",
25137
+ "rate-limited",
25138
+ "auth",
25139
+ "refusal",
25140
+ "bad-request",
25141
+ "unavailable",
25142
+ "no-profile",
25143
+ "budget-exceeded",
25144
+ "adapter-error"
25145
+ ]);
25146
+ var LlmGenerateOkSchema = external_exports.object({
25147
+ ok: external_exports.literal(true),
25148
+ text: external_exports.string(),
25149
+ model: external_exports.string(),
25150
+ usage: LlmUsageSchema,
25151
+ truncated: external_exports.boolean(),
25152
+ latencyMs: external_exports.number()
25153
+ });
25154
+ var LlmGenerateErrSchema = external_exports.object({
25155
+ ok: external_exports.literal(false),
25156
+ code: LlmErrorCodeSchema,
25157
+ message: external_exports.string(),
25158
+ retryAfterMs: external_exports.number().optional()
25159
+ });
25160
+ var LlmGenerateResultSchema = external_exports.discriminatedUnion("ok", [LlmGenerateOkSchema, LlmGenerateErrSchema]);
25161
+ var LlmImageSchema = external_exports.object({
25162
+ bytes: external_exports.instanceof(Uint8Array),
25163
+ mimeType: external_exports.string()
25164
+ });
25165
+ var LlmGenerateBaseInputSchema = external_exports.object({
25166
+ /** Collection routing (the notification-output posture). */
25167
+ addonId: external_exports.string().optional(),
25168
+ /** Explicit profile; else the resolution chain (spec §3). */
25169
+ profileId: external_exports.string().optional(),
25170
+ /** MANDATORY usage tag: 'ai-summary', 'notifier-rules', 'adhoc-ui', … */
25171
+ consumer: external_exports.string(),
25172
+ system: external_exports.string().optional(),
25173
+ /** v1: single-turn. `messages[]` is a v2 additive field. */
25174
+ prompt: external_exports.string(),
25175
+ /** Structured output — adapter-mapped (response_format / forced tool / responseSchema). */
25176
+ jsonSchema: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
25177
+ /** Per-call override of the profile default. */
25178
+ maxTokens: external_exports.number().int().positive().optional(),
25179
+ temperature: external_exports.number().optional()
25180
+ });
25181
+ var ManagedModelRefSchema = external_exports.discriminatedUnion("kind", [
25182
+ external_exports.object({
25183
+ kind: external_exports.literal("catalog"),
25184
+ catalogId: external_exports.string()
25185
+ }),
25186
+ external_exports.object({
25187
+ kind: external_exports.literal("url"),
25188
+ url: external_exports.string(),
25189
+ sha256: external_exports.string().optional()
25190
+ }),
25191
+ external_exports.object({
25192
+ kind: external_exports.literal("path"),
25193
+ path: external_exports.string()
25194
+ })
25195
+ ]);
25196
+ var ManagedRuntimeConfigSchema = external_exports.object({
25197
+ /** WHERE the runtime lives — hub or any agent. */
25198
+ nodeId: external_exports.string(),
25199
+ /** Closed for v1; 'ollama' is a v2 candidate. */
25200
+ engine: external_exports.enum(["llama-cpp"]),
25201
+ model: ManagedModelRefSchema,
25202
+ contextSize: external_exports.number().int().default(4096),
25203
+ /** 0 = CPU-only. */
25204
+ gpuLayers: external_exports.number().int().default(0),
25205
+ /** Default: cpus-2, clamped ≥1 (resolved node-side). */
25206
+ threads: external_exports.number().int().optional(),
25207
+ /** Concurrent slots. */
25208
+ parallel: external_exports.number().int().default(1),
25209
+ /** Else lazy: first generate boots it. */
25210
+ autoStart: external_exports.boolean().default(false),
25211
+ /** 0 = never; frees RAM after quiet periods. */
25212
+ idleStopMinutes: external_exports.number().int().default(30)
25213
+ });
25214
+ var LlmRuntimeStatusSchema = external_exports.object({
25215
+ /** Status is ALWAYS node-qualified. */
25216
+ nodeId: external_exports.string(),
25217
+ state: external_exports.enum([
25218
+ "stopped",
25219
+ "downloading",
25220
+ "starting",
25221
+ "ready",
25222
+ "crashed",
25223
+ "failed"
25224
+ ]),
25225
+ pid: external_exports.number().optional(),
25226
+ port: external_exports.number().optional(),
25227
+ modelPath: external_exports.string().optional(),
25228
+ modelId: external_exports.string().optional(),
25229
+ downloadProgress: external_exports.number().min(0).max(1).optional(),
25230
+ lastError: external_exports.string().optional(),
25231
+ crashesInWindow: external_exports.number(),
25232
+ /** Child RSS (sampled best-effort). */
25233
+ memoryBytes: external_exports.number().optional(),
25234
+ vramBytes: external_exports.number().optional()
25235
+ });
25236
+ var LlmNodeModelSchema = external_exports.object({
25237
+ file: external_exports.string(),
25238
+ sizeBytes: external_exports.number(),
25239
+ catalogId: external_exports.string().optional(),
25240
+ installedAt: external_exports.number().optional()
25241
+ });
25242
+ var LlmRuntimeDiskUsageSchema = external_exports.object({
25243
+ nodeId: external_exports.string(),
25244
+ modelsBytes: external_exports.number(),
25245
+ freeBytes: external_exports.number().optional()
25246
+ });
25247
+ var LlmRuntimeCompleteInputSchema = LlmGenerateBaseInputSchema.extend({
25248
+ images: external_exports.array(LlmImageSchema).optional(),
25249
+ runtime: ManagedRuntimeConfigSchema,
25250
+ /** The managed profile's timeout, threaded by the hub provider. */
25251
+ timeoutMs: external_exports.number().int().positive().optional()
25252
+ });
25253
+ var llmRuntimeCapability = {
25254
+ name: "llm-runtime",
25255
+ scope: "system",
25256
+ mode: "singleton",
25257
+ internal: true,
25258
+ methods: {
25259
+ complete: method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25260
+ ensureStarted: method(external_exports.object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
25261
+ kind: "mutation",
25262
+ auth: "admin"
25263
+ }),
25264
+ stop: method(external_exports.object({}), external_exports.void(), {
25265
+ kind: "mutation",
25266
+ auth: "admin"
25267
+ }),
25268
+ status: method(external_exports.object({}), LlmRuntimeStatusSchema),
25269
+ installModel: method(external_exports.object({ model: ManagedModelRefSchema }), external_exports.void(), {
25270
+ kind: "mutation",
25271
+ auth: "admin"
25272
+ }),
25273
+ deleteModel: method(external_exports.object({ file: external_exports.string() }), external_exports.void(), {
25274
+ kind: "mutation",
25275
+ auth: "admin"
25276
+ }),
25277
+ listLocalModels: method(external_exports.object({}), external_exports.array(LlmNodeModelSchema)),
25278
+ getDiskUsage: method(external_exports.object({}), LlmRuntimeDiskUsageSchema)
25279
+ }
25280
+ };
25281
+ var LlmProfileKindSchema = external_exports.enum([
25282
+ "openai-compatible",
25283
+ "openai",
25284
+ "anthropic",
25285
+ "google",
25286
+ "managed-local"
25287
+ ]);
25288
+ var LlmProfileSchema = external_exports.object({
25289
+ id: external_exports.string(),
25290
+ name: external_exports.string(),
25291
+ kind: LlmProfileKindSchema,
25292
+ /** Stamped by the provider — keeps the fanned catalog routable. */
25293
+ addonId: external_exports.string(),
25294
+ enabled: external_exports.boolean(),
25295
+ /** Vendor model id, or the managed runtime's loaded model. */
25296
+ model: external_exports.string(),
25297
+ /** Required for openai-compatible; override for cloud kinds. */
25298
+ baseUrl: external_exports.string().optional(),
25299
+ /** ConfigUISchema type:'password' — never round-trips (spec §5). */
25300
+ apiKey: external_exports.string().optional(),
25301
+ supportsVision: external_exports.boolean(),
25302
+ temperature: external_exports.number().min(0).max(2).optional(),
25303
+ maxTokens: external_exports.number().int().positive().optional(),
25304
+ timeoutMs: external_exports.number().int().positive().default(6e4),
25305
+ extraHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional(),
25306
+ /** kind === 'managed-local' only (spec §4). */
25307
+ runtime: ManagedRuntimeConfigSchema.optional()
25308
+ });
25309
+ var ConfigSchemaPassthrough = external_exports.unknown();
25310
+ var LlmProfileKindDescriptorSchema = external_exports.object({
25311
+ kind: LlmProfileKindSchema,
25312
+ label: external_exports.string(),
25313
+ icon: external_exports.string(),
25314
+ /** Stamped by each provider so the concat-fanned catalog stays routable. */
25315
+ addonId: external_exports.string(),
25316
+ configSchema: ConfigSchemaPassthrough
25317
+ });
25318
+ var LlmDefaultSelectorSchema = external_exports.union([external_exports.object({ consumer: external_exports.string() }), external_exports.object({ purpose: external_exports.enum(["text", "vision"]) })]);
25319
+ var LlmDefaultSchema = external_exports.object({
25320
+ selector: LlmDefaultSelectorSchema,
25321
+ profileId: external_exports.string()
25322
+ });
25323
+ var LlmUsageRollupSchema = external_exports.object({
25324
+ day: external_exports.string(),
25325
+ consumer: external_exports.string(),
25326
+ profileId: external_exports.string(),
25327
+ calls: external_exports.number(),
25328
+ okCalls: external_exports.number(),
25329
+ errorCalls: external_exports.number(),
25330
+ inputTokens: external_exports.number(),
25331
+ outputTokens: external_exports.number(),
25332
+ avgLatencyMs: external_exports.number()
25333
+ });
25334
+ var ManagedModelCatalogEntrySchema = external_exports.object({
25335
+ id: external_exports.string(),
25336
+ label: external_exports.string(),
25337
+ family: external_exports.string(),
25338
+ purpose: external_exports.enum(["text", "vision"]),
25339
+ url: external_exports.string(),
25340
+ sha256: external_exports.string(),
25341
+ sizeBytes: external_exports.number(),
25342
+ quantization: external_exports.string(),
25343
+ /** Load-time guidance shown in the picker. */
25344
+ minRamBytes: external_exports.number(),
25345
+ contextSizeDefault: external_exports.number().int(),
25346
+ /** Vision models: companion projector file. */
25347
+ mmprojUrl: external_exports.string().optional()
25348
+ });
25349
+ var LlmRuntimeNodeSchema = external_exports.object({
25350
+ nodeId: external_exports.string(),
25351
+ reachable: external_exports.boolean(),
25352
+ status: LlmRuntimeStatusSchema.optional(),
25353
+ disk: LlmRuntimeDiskUsageSchema.optional(),
25354
+ error: external_exports.string().optional()
25355
+ });
25356
+ var GenerateVisionInputSchema = LlmGenerateBaseInputSchema.extend({ images: external_exports.array(LlmImageSchema).min(1) });
25357
+ var ProfileRefInputSchema = external_exports.object({
25358
+ addonId: external_exports.string(),
25359
+ profileId: external_exports.string()
25360
+ });
25361
+ var llmCapability = {
25362
+ name: "llm",
25363
+ scope: "system",
25364
+ mode: "collection",
25365
+ internal: false,
25366
+ providerKind: "ai",
25367
+ /** `nodeId` inputs below are DATA (the hub provider pins itself), never routing. */
25368
+ nodeIdMode: "data",
25369
+ methods: {
25370
+ generate: method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25371
+ generateVision: method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
25372
+ listProfileKinds: method(external_exports.object({}), external_exports.array(LlmProfileKindDescriptorSchema)),
25373
+ listProfiles: method(external_exports.object({}), external_exports.array(LlmProfileSchema)),
25374
+ upsertProfile: method(external_exports.object({ profile: LlmProfileSchema }), LlmProfileSchema, {
25375
+ kind: "mutation",
25376
+ auth: "admin"
25377
+ }),
25378
+ deleteProfile: method(ProfileRefInputSchema, external_exports.void(), {
25379
+ kind: "mutation",
25380
+ auth: "admin"
25381
+ }),
25382
+ testProfile: method(ProfileRefInputSchema, LlmGenerateResultSchema, {
25383
+ kind: "mutation",
25384
+ auth: "admin"
25385
+ }),
25386
+ /** Live vendor enumeration (GET /models etc.). */
25387
+ listModels: method(ProfileRefInputSchema, external_exports.array(external_exports.string())),
25388
+ getDefaults: method(external_exports.object({}), external_exports.array(LlmDefaultSchema)),
25389
+ setDefault: method(external_exports.object({
25390
+ selector: LlmDefaultSelectorSchema,
25391
+ profileId: external_exports.string().nullable()
25392
+ }), external_exports.void(), {
25393
+ kind: "mutation",
25394
+ auth: "admin"
25395
+ }),
25396
+ getUsage: method(external_exports.object({
25397
+ since: external_exports.number().optional(),
25398
+ until: external_exports.number().optional(),
25399
+ consumer: external_exports.string().optional(),
25400
+ profileId: external_exports.string().optional()
25401
+ }), external_exports.array(LlmUsageRollupSchema)),
25402
+ listModelCatalog: method(external_exports.object({}), external_exports.array(ManagedModelCatalogEntrySchema)),
25403
+ listRuntimeNodes: method(external_exports.object({}), external_exports.array(LlmRuntimeNodeSchema)),
25404
+ listNodeModels: method(external_exports.object({ nodeId: external_exports.string() }), external_exports.array(LlmNodeModelSchema)),
25405
+ installModel: method(external_exports.object({
25406
+ nodeId: external_exports.string(),
25407
+ model: ManagedModelRefSchema
25408
+ }), external_exports.void(), {
25409
+ kind: "mutation",
25410
+ auth: "admin"
25411
+ }),
25412
+ deleteModel: method(external_exports.object({
25413
+ nodeId: external_exports.string(),
25414
+ file: external_exports.string()
25415
+ }), external_exports.void(), {
25416
+ kind: "mutation",
25417
+ auth: "admin"
25418
+ }),
25419
+ getRuntimeStatus: method(ProfileRefInputSchema, LlmRuntimeStatusSchema),
25420
+ startRuntime: method(ProfileRefInputSchema, LlmRuntimeStatusSchema, {
25421
+ kind: "mutation",
25422
+ auth: "admin"
25423
+ }),
25424
+ stopRuntime: method(ProfileRefInputSchema, external_exports.void(), {
25425
+ kind: "mutation",
25426
+ auth: "admin"
25427
+ })
25428
+ }
25429
+ };
24876
25430
  var MethodAccessSchema = external_exports.enum([
24877
25431
  "view",
24878
25432
  "create",
@@ -25002,6 +25556,15 @@ var TrackSnapshotSchema = external_exports.object({
25002
25556
  /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
25003
25557
  mediaKey: external_exports.string()
25004
25558
  });
25559
+ var TrackAudioLabelSchema = external_exports.object({
25560
+ label: external_exports.string(),
25561
+ /** Highest classification score observed across the label's episodes. */
25562
+ peakScore: external_exports.number(),
25563
+ /** Number of coalesced audio-event episodes carrying this label. */
25564
+ count: external_exports.number(),
25565
+ firstAt: external_exports.number(),
25566
+ lastAt: external_exports.number()
25567
+ });
25005
25568
  var TrackSchema = external_exports.object({
25006
25569
  trackId: external_exports.string(),
25007
25570
  deviceId: external_exports.number(),
@@ -25016,6 +25579,10 @@ var TrackSchema = external_exports.object({
25016
25579
  snapshots: external_exports.array(TrackSnapshotSchema).readonly(),
25017
25580
  /** Deduplicated zones the track has entered at least once. */
25018
25581
  zonesVisited: external_exports.array(external_exports.string()).readonly(),
25582
+ /** Deduplicated set of detector classes observed for this track over its
25583
+ * life (a track may be reclassified, e.g. person→vehicle). Absent on
25584
+ * legacy rows written before class accumulation shipped. */
25585
+ classes: external_exports.array(external_exports.string()).readonly().optional(),
25019
25586
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
25020
25587
  totalDistance: external_exports.number(),
25021
25588
  state: TrackStateSchema,
@@ -25029,7 +25596,11 @@ var TrackSchema = external_exports.object({
25029
25596
  bestEventId: external_exports.string().optional(),
25030
25597
  /** Tag of the importance sub-signal that dominated the score
25031
25598
  * (identity|dwell|proximity|class|confidence|travel|zone). */
25032
- importanceReason: external_exports.string().optional()
25599
+ importanceReason: external_exports.string().optional(),
25600
+ /** Audio-classification labels heard on the camera during the track's
25601
+ * life (score ≥ device `classificationMinScore`), aggregated per label.
25602
+ * Absent on legacy rows / tracks with no confident audio. */
25603
+ audioLabels: external_exports.array(TrackAudioLabelSchema).readonly().optional()
25033
25604
  });
25034
25605
  var BaseEventFields = {
25035
25606
  id: external_exports.string(),
@@ -25177,6 +25748,23 @@ var TrackedDetectionSchema = external_exports.object({
25177
25748
  zones: external_exports.array(external_exports.string()).readonly(),
25178
25749
  state: TrackStateSchema
25179
25750
  });
25751
+ var OverlayDetectionSchema = external_exports.looseObject({
25752
+ id: external_exports.string(),
25753
+ kind: external_exports.enum(["first-level", "detail"]),
25754
+ macroClass: external_exports.string(),
25755
+ score: external_exports.number(),
25756
+ bbox: external_exports.object({
25757
+ x: external_exports.number(),
25758
+ y: external_exports.number(),
25759
+ width: external_exports.number(),
25760
+ height: external_exports.number()
25761
+ }),
25762
+ labels: external_exports.array(external_exports.looseObject({
25763
+ label: external_exports.string(),
25764
+ score: external_exports.number()
25765
+ })).readonly(),
25766
+ parentId: external_exports.string().optional()
25767
+ });
25180
25768
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: external_exports.number() });
25181
25769
  var SearchObjectEventsInput = external_exports.object({
25182
25770
  text: external_exports.string(),
@@ -25187,6 +25775,20 @@ var SearchObjectEventsInput = external_exports.object({
25187
25775
  limit: external_exports.number().default(50),
25188
25776
  minScore: external_exports.number().min(0).max(1).default(0.2)
25189
25777
  });
25778
+ var TrackCascadeCountsSchema = external_exports.object({
25779
+ /** Persisted track roots deleted (authoritative). */
25780
+ tracks: external_exports.number().int(),
25781
+ /** Object events removed with their tracks (best-effort; see note above). */
25782
+ events: external_exports.number().int(),
25783
+ /** Track/face/plate-owned media removed (best-effort). Never identity media. */
25784
+ media: external_exports.number().int(),
25785
+ /** Unassigned (non-enrolled) face reads removed (best-effort). */
25786
+ faces: external_exports.number().int(),
25787
+ /** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
25788
+ plates: external_exports.number().int(),
25789
+ /** Per-track CLIP search vectors removed (best-effort). */
25790
+ embeddings: external_exports.number().int()
25791
+ });
25190
25792
  var pipelineAnalyticsCapability = {
25191
25793
  name: "pipeline-analytics",
25192
25794
  scope: "device",
@@ -25240,12 +25842,14 @@ var pipelineAnalyticsCapability = {
25240
25842
  audio: external_exports.number().int()
25241
25843
  })).readonly()),
25242
25844
  /**
25243
- * Delete all events (motion + object + audio) for the given device
25244
- * that are older than `cutoffMs` (exclusive), and delete their
25245
- * thumbnails in lockstep. Returns per-kind deleted counts.
25246
- *
25247
- * Called by Phase B3 recorder orchestration to keep event history
25248
- * aligned with available footage.
25845
+ * @deprecated Prefer `pruneTracksBefore` the track is the ROOT of the
25846
+ * analytics model and retention must cascade from it (design §5.1). This
25847
+ * event-only prune leaves orphaned tracks/faces/plates/embeddings behind.
25848
+ * Retained as a compat shim for the Phase-B3 recorder orchestration caller,
25849
+ * which prunes events to keep history aligned with available footage and
25850
+ * reads the per-kind counts. Delete all events (motion + object + audio)
25851
+ * for the given device older than `cutoffMs` (exclusive) + their thumbnails
25852
+ * in lockstep; returns per-kind deleted counts.
25249
25853
  */
25250
25854
  pruneEventsBefore: method(external_exports.object({
25251
25855
  deviceId: external_exports.number(),
@@ -25258,6 +25862,55 @@ var pipelineAnalyticsCapability = {
25258
25862
  kind: "mutation",
25259
25863
  auth: "admin"
25260
25864
  }),
25865
+ /**
25866
+ * Track-centric retention entry point (design §5.1). Selects every
25867
+ * persisted track for the device whose `lastSeen < cutoffMs` (paged) and
25868
+ * runs the extensible whole-track deletion cascade (design §3): object
25869
+ * events + their media, track/face/plate-owned media, unassigned face
25870
+ * reads, per-track CLIP embeddings, then the track root LAST. ENROLLED
25871
+ * (assigned) faces/plates and `ownerKind:'identity'` media are exempt —
25872
+ * the durable matching gallery always persists. Fires the per-track
25873
+ * live-state cleanup so a pruned track can't linger in dispatch/overlay
25874
+ * state. Returns per-family deleted counts (`tracks` authoritative).
25875
+ *
25876
+ * Replaces `pruneEventsBefore` as the correct time-based retention prune.
25877
+ */
25878
+ pruneTracksBefore: method(external_exports.object({
25879
+ deviceId: external_exports.number(),
25880
+ cutoffMs: external_exports.number()
25881
+ }), TrackCascadeCountsSchema, {
25882
+ kind: "mutation",
25883
+ auth: "admin"
25884
+ }),
25885
+ /**
25886
+ * Operator "clean slate" for a device (design §5.3): prune EVERY track for
25887
+ * the device via the same cascade as `pruneTracksBefore` with `cutoffMs =
25888
+ * now`. One call per device — no client-side track enumeration. Enrolled
25889
+ * gallery + identity media are exempt (design §4). Returns per-family
25890
+ * deleted counts.
25891
+ */
25892
+ wipeAllAnalytics: method(external_exports.object({ deviceId: external_exports.number() }), TrackCascadeCountsSchema, {
25893
+ kind: "mutation",
25894
+ auth: "admin"
25895
+ }),
25896
+ /**
25897
+ * Delete whole tracks (object events) by id for the given device,
25898
+ * cascading their media in lockstep. Returns the number of tracks
25899
+ * actually deleted plus the ids that could not be removed.
25900
+ *
25901
+ * Operator-driven from the DI Events page (batch delete). Routes through
25902
+ * the same widened track-deletion cascade (design §5.2).
25903
+ */
25904
+ deleteTracks: method(external_exports.object({
25905
+ deviceId: external_exports.number(),
25906
+ trackIds: external_exports.array(external_exports.string()).min(1)
25907
+ }), external_exports.object({
25908
+ deleted: external_exports.number().int(),
25909
+ failed: external_exports.array(external_exports.string()).readonly()
25910
+ }), {
25911
+ kind: "mutation",
25912
+ auth: "admin"
25913
+ }),
25261
25914
  getEventMedia: method(external_exports.object({
25262
25915
  eventId: external_exports.string(),
25263
25916
  kind: MediaFileKindEnum.optional()
@@ -25275,17 +25928,19 @@ var pipelineAnalyticsCapability = {
25275
25928
  },
25276
25929
  events: {
25277
25930
  /**
25278
- * Enriched frame emitted after refinement. Carries lightweight
25279
- * tracked-detection metadata (track id, class, zones, state) so
25280
- * downstream consumers (stream overlays, notifications) can
25281
- * annotate without querying full Track state.
25931
+ * Enriched frame emitted after refinement the live-overlay source of
25932
+ * truth (two-plane re-injection). Carries the frame's detections in the
25933
+ * `ObjectDetection` wire shape: first-level roots (with track info +
25934
+ * enrichment labels) plus synthesized `kind:'detail'` face/plate entries
25935
+ * re-projected from per-track detail state, so stream overlays render
25936
+ * boxes + recognized names without querying full Track state.
25282
25937
  */
25283
25938
  onFrameTracked: { data: external_exports.object({
25284
25939
  deviceId: external_exports.number(),
25285
25940
  timestamp: external_exports.number(),
25286
25941
  frameWidth: external_exports.number(),
25287
25942
  frameHeight: external_exports.number(),
25288
- detections: external_exports.array(TrackedDetectionSchema).readonly()
25943
+ detections: external_exports.array(OverlayDetectionSchema).readonly()
25289
25944
  }) },
25290
25945
  /** Track entered active state (first-seen). */
25291
25946
  onTrackStarted: { data: external_exports.object({
@@ -26818,7 +27473,15 @@ var webrtcSessionCapability = {
26818
27473
  */
26819
27474
  disableIpv6: external_exports.boolean().optional(),
26820
27475
  /** Subscriber attribution. See `createSession` for the contract. */
26821
- consumerAttribution: BrokerConsumerAttributionSchema.optional()
27476
+ consumerAttribution: BrokerConsumerAttributionSchema.optional(),
27477
+ /**
27478
+ * Client-side stream hints (viewport, downlink) — same contract as
27479
+ * `createSession.hints`. Client-offer viewers (the RN viewer's
27480
+ * `WebrtcLiveSession`) negotiate via `handleOffer`, so without this
27481
+ * field their hints were silently stripped by the schema and the
27482
+ * adaptive ladder started blind on the client's display size.
27483
+ */
27484
+ hints: webrtcClientHintsSchema.optional()
26822
27485
  }), external_exports.object({
26823
27486
  sessionId: external_exports.string(),
26824
27487
  sdpAnswer: external_exports.string()
@@ -28643,6 +29306,24 @@ var osdCapability = {
28643
29306
  }
28644
29307
  }] }
28645
29308
  };
29309
+ var VehicleSchema = external_exports.object({
29310
+ id: external_exports.string(),
29311
+ name: external_exports.string(),
29312
+ sampleCount: external_exports.number().int().nonnegative(),
29313
+ coverMediaKey: external_exports.string().optional(),
29314
+ /** Inline base64 of the cover sample's plate crop, resolved from `coverMediaKey`. */
29315
+ coverBase64: external_exports.string().optional()
29316
+ });
29317
+ var VehicleSampleInfoSchema = external_exports.object({
29318
+ id: external_exports.string(),
29319
+ /** The plate text this sample enrolled (self-labeling — no embedding). */
29320
+ text: external_exports.string(),
29321
+ /** OCR confidence of the enrolled read (0..1). */
29322
+ score: external_exports.number(),
29323
+ addedAt: external_exports.number().int(),
29324
+ deviceId: external_exports.number().int().optional(),
29325
+ base64: external_exports.string().optional()
29326
+ });
28646
29327
  var PlateInfoSchema = external_exports.object({
28647
29328
  plateId: external_exports.string(),
28648
29329
  deviceId: external_exports.number().int(),
@@ -28654,6 +29335,16 @@ var PlateInfoSchema = external_exports.object({
28654
29335
  score: external_exports.number(),
28655
29336
  /** True when the text was manually corrected (exempt from retention). */
28656
29337
  corrected: external_exports.boolean(),
29338
+ /** Recognized vehicle id when a matcher lookup named this read (SQL NULL → absent). */
29339
+ recognizedVehicleId: external_exports.string().optional(),
29340
+ /** Resolved vehicle name for `recognizedVehicleId` (UI convenience). */
29341
+ vehicleName: external_exports.string().optional(),
29342
+ /** True once the read was assigned to a vehicle (enrolled as a sample). */
29343
+ assigned: external_exports.boolean(),
29344
+ /** keyFrame parity: the plate bbox (pixel space) on the native key frame. */
29345
+ plateBbox: BoundingBoxSchema.optional(),
29346
+ /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
29347
+ keyFrameMediaKey: external_exports.string().optional(),
28657
29348
  base64: external_exports.string().optional()
28658
29349
  });
28659
29350
  var MediaFileLiteSchema = external_exports.object({
@@ -28707,6 +29398,58 @@ var plateGalleryCapability = {
28707
29398
  deletePlate: method(external_exports.object({ plateId: external_exports.string() }), external_exports.void(), {
28708
29399
  kind: "mutation",
28709
29400
  auth: "admin"
29401
+ }),
29402
+ listVehicles: method(external_exports.void(), external_exports.array(VehicleSchema).readonly()),
29403
+ createVehicle: method(external_exports.object({ name: external_exports.string().min(1) }), VehicleSchema, {
29404
+ kind: "mutation",
29405
+ auth: "admin"
29406
+ }),
29407
+ renameVehicle: method(external_exports.object({
29408
+ id: external_exports.string(),
29409
+ name: external_exports.string().min(1)
29410
+ }), external_exports.void(), {
29411
+ kind: "mutation",
29412
+ auth: "admin"
29413
+ }),
29414
+ deleteVehicle: method(external_exports.object({ id: external_exports.string() }), external_exports.void(), {
29415
+ kind: "mutation",
29416
+ auth: "admin"
29417
+ }),
29418
+ listVehicleSamples: method(external_exports.object({ vehicleId: external_exports.string() }), external_exports.array(VehicleSampleInfoSchema).readonly()),
29419
+ removeVehicleSample: method(external_exports.object({
29420
+ vehicleId: external_exports.string(),
29421
+ sampleId: external_exports.string()
29422
+ }), external_exports.void(), {
29423
+ kind: "mutation",
29424
+ auth: "admin"
29425
+ }),
29426
+ assignPlate: method(external_exports.object({
29427
+ plateId: external_exports.string(),
29428
+ vehicleId: external_exports.string()
29429
+ }), external_exports.void(), {
29430
+ kind: "mutation",
29431
+ auth: "admin"
29432
+ }),
29433
+ unassignPlate: method(external_exports.object({ plateId: external_exports.string() }), external_exports.void(), {
29434
+ kind: "mutation",
29435
+ auth: "admin"
29436
+ }),
29437
+ assignPlates: method(external_exports.object({
29438
+ plateIds: external_exports.array(external_exports.string()).min(1),
29439
+ vehicleId: external_exports.string()
29440
+ }), external_exports.object({
29441
+ assigned: external_exports.number().int(),
29442
+ failed: external_exports.array(external_exports.string()).readonly()
29443
+ }), {
29444
+ kind: "mutation",
29445
+ auth: "admin"
29446
+ }),
29447
+ unassignPlates: method(external_exports.object({ plateIds: external_exports.array(external_exports.string()).min(1) }), external_exports.object({
29448
+ unassigned: external_exports.number().int(),
29449
+ failed: external_exports.array(external_exports.string()).readonly()
29450
+ }), {
29451
+ kind: "mutation",
29452
+ auth: "admin"
28710
29453
  })
28711
29454
  }
28712
29455
  };
@@ -28788,6 +29531,10 @@ var GpuInfoSchema = external_exports.object({
28788
29531
  memoryMB: external_exports.number().optional()
28789
29532
  });
28790
29533
  var NpuInfoSchema = external_exports.object({ type: external_exports.enum(["apple-ane", "intel-npu"]) });
29534
+ var CoralInfoSchema = external_exports.object({
29535
+ type: external_exports.literal("coral-edgetpu"),
29536
+ bus: external_exports.string().optional()
29537
+ });
28791
29538
  var HardwareInfoSchema = external_exports.object({
28792
29539
  platform: HardwarePlatformSchema,
28793
29540
  arch: HardwareArchSchema,
@@ -28796,7 +29543,8 @@ var HardwareInfoSchema = external_exports.object({
28796
29543
  totalRAM_MB: external_exports.number(),
28797
29544
  availableRAM_MB: external_exports.number(),
28798
29545
  gpu: GpuInfoSchema.nullable(),
28799
- npu: NpuInfoSchema.nullable()
29546
+ npu: NpuInfoSchema.nullable(),
29547
+ coral: CoralInfoSchema.nullable().optional()
28800
29548
  });
28801
29549
  var PlatformScoreSchema = external_exports.object({
28802
29550
  runtime: external_exports.enum(["node", "python"]),
@@ -31347,6 +32095,168 @@ var METHOD_ACCESS_MAP = Object.freeze({
31347
32095
  addonId: null,
31348
32096
  access: "create"
31349
32097
  },
32098
+ "llm.deleteModel": {
32099
+ capName: "llm",
32100
+ capScope: "system",
32101
+ addonId: null,
32102
+ access: "delete"
32103
+ },
32104
+ "llm.deleteProfile": {
32105
+ capName: "llm",
32106
+ capScope: "system",
32107
+ addonId: null,
32108
+ access: "delete"
32109
+ },
32110
+ "llm.generate": {
32111
+ capName: "llm",
32112
+ capScope: "system",
32113
+ addonId: null,
32114
+ access: "create"
32115
+ },
32116
+ "llm.generateVision": {
32117
+ capName: "llm",
32118
+ capScope: "system",
32119
+ addonId: null,
32120
+ access: "create"
32121
+ },
32122
+ "llm.getDefaults": {
32123
+ capName: "llm",
32124
+ capScope: "system",
32125
+ addonId: null,
32126
+ access: "view"
32127
+ },
32128
+ "llm.getRuntimeStatus": {
32129
+ capName: "llm",
32130
+ capScope: "system",
32131
+ addonId: null,
32132
+ access: "view"
32133
+ },
32134
+ "llm.getUsage": {
32135
+ capName: "llm",
32136
+ capScope: "system",
32137
+ addonId: null,
32138
+ access: "view"
32139
+ },
32140
+ "llm.installModel": {
32141
+ capName: "llm",
32142
+ capScope: "system",
32143
+ addonId: null,
32144
+ access: "create"
32145
+ },
32146
+ "llm.listModelCatalog": {
32147
+ capName: "llm",
32148
+ capScope: "system",
32149
+ addonId: null,
32150
+ access: "view"
32151
+ },
32152
+ "llm.listModels": {
32153
+ capName: "llm",
32154
+ capScope: "system",
32155
+ addonId: null,
32156
+ access: "view"
32157
+ },
32158
+ "llm.listNodeModels": {
32159
+ capName: "llm",
32160
+ capScope: "system",
32161
+ addonId: null,
32162
+ access: "view"
32163
+ },
32164
+ "llm.listProfileKinds": {
32165
+ capName: "llm",
32166
+ capScope: "system",
32167
+ addonId: null,
32168
+ access: "view"
32169
+ },
32170
+ "llm.listProfiles": {
32171
+ capName: "llm",
32172
+ capScope: "system",
32173
+ addonId: null,
32174
+ access: "view"
32175
+ },
32176
+ "llm.listRuntimeNodes": {
32177
+ capName: "llm",
32178
+ capScope: "system",
32179
+ addonId: null,
32180
+ access: "view"
32181
+ },
32182
+ "llm.setDefault": {
32183
+ capName: "llm",
32184
+ capScope: "system",
32185
+ addonId: null,
32186
+ access: "create"
32187
+ },
32188
+ "llm.startRuntime": {
32189
+ capName: "llm",
32190
+ capScope: "system",
32191
+ addonId: null,
32192
+ access: "create"
32193
+ },
32194
+ "llm.stopRuntime": {
32195
+ capName: "llm",
32196
+ capScope: "system",
32197
+ addonId: null,
32198
+ access: "create"
32199
+ },
32200
+ "llm.testProfile": {
32201
+ capName: "llm",
32202
+ capScope: "system",
32203
+ addonId: null,
32204
+ access: "create"
32205
+ },
32206
+ "llm.upsertProfile": {
32207
+ capName: "llm",
32208
+ capScope: "system",
32209
+ addonId: null,
32210
+ access: "create"
32211
+ },
32212
+ "llmRuntime.complete": {
32213
+ capName: "llm-runtime",
32214
+ capScope: "system",
32215
+ addonId: null,
32216
+ access: "create"
32217
+ },
32218
+ "llmRuntime.deleteModel": {
32219
+ capName: "llm-runtime",
32220
+ capScope: "system",
32221
+ addonId: null,
32222
+ access: "delete"
32223
+ },
32224
+ "llmRuntime.ensureStarted": {
32225
+ capName: "llm-runtime",
32226
+ capScope: "system",
32227
+ addonId: null,
32228
+ access: "create"
32229
+ },
32230
+ "llmRuntime.getDiskUsage": {
32231
+ capName: "llm-runtime",
32232
+ capScope: "system",
32233
+ addonId: null,
32234
+ access: "view"
32235
+ },
32236
+ "llmRuntime.installModel": {
32237
+ capName: "llm-runtime",
32238
+ capScope: "system",
32239
+ addonId: null,
32240
+ access: "create"
32241
+ },
32242
+ "llmRuntime.listLocalModels": {
32243
+ capName: "llm-runtime",
32244
+ capScope: "system",
32245
+ addonId: null,
32246
+ access: "view"
32247
+ },
32248
+ "llmRuntime.status": {
32249
+ capName: "llm-runtime",
32250
+ capScope: "system",
32251
+ addonId: null,
32252
+ access: "view"
32253
+ },
32254
+ "llmRuntime.stop": {
32255
+ capName: "llm-runtime",
32256
+ capScope: "system",
32257
+ addonId: null,
32258
+ access: "create"
32259
+ },
31350
32260
  "localNetwork.getAllowedAddresses": {
31351
32261
  capName: "local-network",
31352
32262
  capScope: "system",
@@ -31977,6 +32887,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
31977
32887
  addonId: null,
31978
32888
  access: "delete"
31979
32889
  },
32890
+ "pipelineAnalytics.deleteTracks": {
32891
+ capName: "pipeline-analytics",
32892
+ capScope: "device",
32893
+ addonId: null,
32894
+ access: "delete"
32895
+ },
31980
32896
  "pipelineAnalytics.getActiveTracks": {
31981
32897
  capName: "pipeline-analytics",
31982
32898
  capScope: "device",
@@ -32043,12 +32959,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
32043
32959
  addonId: null,
32044
32960
  access: "create"
32045
32961
  },
32962
+ "pipelineAnalytics.pruneTracksBefore": {
32963
+ capName: "pipeline-analytics",
32964
+ capScope: "device",
32965
+ addonId: null,
32966
+ access: "create"
32967
+ },
32046
32968
  "pipelineAnalytics.searchObjectEvents": {
32047
32969
  capName: "pipeline-analytics",
32048
32970
  capScope: "device",
32049
32971
  addonId: null,
32050
32972
  access: "view"
32051
32973
  },
32974
+ "pipelineAnalytics.wipeAllAnalytics": {
32975
+ capName: "pipeline-analytics",
32976
+ capScope: "device",
32977
+ addonId: null,
32978
+ access: "delete"
32979
+ },
32052
32980
  "pipelineExecutor.cacheFrameInPool": {
32053
32981
  capName: "pipeline-executor",
32054
32982
  capScope: "system",
@@ -32547,18 +33475,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
32547
33475
  addonId: null,
32548
33476
  access: "create"
32549
33477
  },
33478
+ "pipelineRunner.runDetailSubtree": {
33479
+ capName: "pipeline-runner",
33480
+ capScope: "system",
33481
+ addonId: null,
33482
+ access: "create"
33483
+ },
33484
+ "plateGallery.assignPlate": {
33485
+ capName: "plate-gallery",
33486
+ capScope: "system",
33487
+ addonId: null,
33488
+ access: "create"
33489
+ },
33490
+ "plateGallery.assignPlates": {
33491
+ capName: "plate-gallery",
33492
+ capScope: "system",
33493
+ addonId: null,
33494
+ access: "create"
33495
+ },
32550
33496
  "plateGallery.correctPlateText": {
32551
33497
  capName: "plate-gallery",
32552
33498
  capScope: "system",
32553
33499
  addonId: null,
32554
33500
  access: "create"
32555
33501
  },
33502
+ "plateGallery.createVehicle": {
33503
+ capName: "plate-gallery",
33504
+ capScope: "system",
33505
+ addonId: null,
33506
+ access: "create"
33507
+ },
32556
33508
  "plateGallery.deletePlate": {
32557
33509
  capName: "plate-gallery",
32558
33510
  capScope: "system",
32559
33511
  addonId: null,
32560
33512
  access: "delete"
32561
33513
  },
33514
+ "plateGallery.deleteVehicle": {
33515
+ capName: "plate-gallery",
33516
+ capScope: "system",
33517
+ addonId: null,
33518
+ access: "delete"
33519
+ },
32562
33520
  "plateGallery.getPlateByTrack": {
32563
33521
  capName: "plate-gallery",
32564
33522
  capScope: "system",
@@ -32577,6 +33535,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32577
33535
  addonId: null,
32578
33536
  access: "view"
32579
33537
  },
33538
+ "plateGallery.listVehicles": {
33539
+ capName: "plate-gallery",
33540
+ capScope: "system",
33541
+ addonId: null,
33542
+ access: "view"
33543
+ },
33544
+ "plateGallery.listVehicleSamples": {
33545
+ capName: "plate-gallery",
33546
+ capScope: "system",
33547
+ addonId: null,
33548
+ access: "view"
33549
+ },
33550
+ "plateGallery.removeVehicleSample": {
33551
+ capName: "plate-gallery",
33552
+ capScope: "system",
33553
+ addonId: null,
33554
+ access: "delete"
33555
+ },
33556
+ "plateGallery.renameVehicle": {
33557
+ capName: "plate-gallery",
33558
+ capScope: "system",
33559
+ addonId: null,
33560
+ access: "create"
33561
+ },
32580
33562
  "plateGallery.searchPlates": {
32581
33563
  capName: "plate-gallery",
32582
33564
  capScope: "system",
@@ -32589,6 +33571,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
32589
33571
  addonId: null,
32590
33572
  access: "view"
32591
33573
  },
33574
+ "plateGallery.unassignPlate": {
33575
+ capName: "plate-gallery",
33576
+ capScope: "system",
33577
+ addonId: null,
33578
+ access: "create"
33579
+ },
33580
+ "plateGallery.unassignPlates": {
33581
+ capName: "plate-gallery",
33582
+ capScope: "system",
33583
+ addonId: null,
33584
+ access: "create"
33585
+ },
32592
33586
  "platformProbe.getCapabilities": {
32593
33587
  capName: "platform-probe",
32594
33588
  capScope: "system",
@@ -32781,6 +33775,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
32781
33775
  addonId: null,
32782
33776
  access: "create"
32783
33777
  },
33778
+ "sceneMonitor.captureReference": {
33779
+ capName: "scene-monitor",
33780
+ capScope: "device",
33781
+ addonId: null,
33782
+ access: "create"
33783
+ },
33784
+ "sceneMonitor.createScene": {
33785
+ capName: "scene-monitor",
33786
+ capScope: "device",
33787
+ addonId: null,
33788
+ access: "create"
33789
+ },
33790
+ "sceneMonitor.deleteReference": {
33791
+ capName: "scene-monitor",
33792
+ capScope: "device",
33793
+ addonId: null,
33794
+ access: "delete"
33795
+ },
33796
+ "sceneMonitor.deleteScene": {
33797
+ capName: "scene-monitor",
33798
+ capScope: "device",
33799
+ addonId: null,
33800
+ access: "delete"
33801
+ },
33802
+ "sceneMonitor.listScenes": {
33803
+ capName: "scene-monitor",
33804
+ capScope: "device",
33805
+ addonId: null,
33806
+ access: "view"
33807
+ },
33808
+ "sceneMonitor.recheckNow": {
33809
+ capName: "scene-monitor",
33810
+ capScope: "device",
33811
+ addonId: null,
33812
+ access: "create"
33813
+ },
33814
+ "sceneMonitor.updateScene": {
33815
+ capName: "scene-monitor",
33816
+ capScope: "device",
33817
+ addonId: null,
33818
+ access: "create"
33819
+ },
32784
33820
  "scriptRunner.run": {
32785
33821
  capName: "script-runner",
32786
33822
  capScope: "device",
@@ -33865,6 +34901,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
33865
34901
  var CAP_PROVIDER_KIND_MAP = Object.freeze({
33866
34902
  "broker": "broker",
33867
34903
  "device-export": "device-export",
34904
+ "llm": "ai",
33868
34905
  "mesh-network": "mesh",
33869
34906
  "mqtt-broker": "broker",
33870
34907
  "network-access": "ingress",