camstack 1.1.25 → 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-Baang_XW.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([
@@ -20887,6 +20910,148 @@ var ptzAutotrackCapability = {
20887
20910
  */
20888
20911
  runtimeState: PtzAutotrackRuntimeStateSchema
20889
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
+ };
20890
21055
  var ScriptRunnerStatusSchema = external_exports.object({
20891
21056
  /** Whether the script is currently executing. */
20892
21057
  isRunning: external_exports.boolean(),
@@ -21475,6 +21640,28 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
21475
21640
  * with the per-track detail panel and live overlay. */
21476
21641
  trackIds: external_exports.array(external_exports.string()).readonly()
21477
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
+ });
21478
21665
  var CameraOccupancySnapshotSchema = external_exports.object({
21479
21666
  /** Frame timestamp of the inference result that produced this snapshot. */
21480
21667
  ts: external_exports.number().int(),
@@ -21483,10 +21670,15 @@ var CameraOccupancySnapshotSchema = external_exports.object({
21483
21670
  frameHeight: external_exports.number().int().nonnegative(),
21484
21671
  /** Per-zone breakdown — one entry per defined zone (user + onboard). */
21485
21672
  zones: external_exports.array(ZoneScopeBreakdownSchema).readonly(),
21486
- /** 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). */
21487
21675
  frame: PerScopeBreakdownSchema,
21488
21676
  /** Detections that landed outside every zone. Empty when no zones defined. */
21489
- 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()
21490
21682
  });
21491
21683
  var HistoryResolutionEnum = external_exports.enum([
21492
21684
  "minute",
@@ -22291,7 +22483,12 @@ var NotificationRuleConditionsSchema = external_exports.object({
22291
22483
  clipDescription: external_exports.object({
22292
22484
  text: external_exports.string().min(1),
22293
22485
  minSimilarity: external_exports.number().min(0).max(1)
22294
- }).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()
22295
22492
  });
22296
22493
  var NotificationRuleTemplateSchema = external_exports.object({
22297
22494
  title: external_exports.string(),
@@ -22649,7 +22846,23 @@ var WidgetLoginMethodSchema = external_exports.object({
22649
22846
  remote: WidgetRemoteSchema,
22650
22847
  stage: LoginStageEnum
22651
22848
  });
22652
- 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
+ ]);
22653
22866
  var loginMethodCapability = {
22654
22867
  name: "login-method",
22655
22868
  scope: "system",
@@ -24850,14 +25063,14 @@ var TargetKindCapsSchema = external_exports.object({
24850
25063
  ttl: external_exports.boolean(),
24851
25064
  bodyMaxLen: external_exports.number().int().positive()
24852
25065
  });
24853
- var ConfigSchemaPassthrough = external_exports.unknown();
25066
+ var ConfigSchemaPassthrough$1 = external_exports.unknown();
24854
25067
  var TargetKindSchema = external_exports.object({
24855
25068
  kind: external_exports.string(),
24856
25069
  label: external_exports.string(),
24857
25070
  icon: external_exports.string(),
24858
25071
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
24859
25072
  addonId: external_exports.string(),
24860
- configSchema: ConfigSchemaPassthrough,
25073
+ configSchema: ConfigSchemaPassthrough$1,
24861
25074
  supportsDiscovery: external_exports.boolean(),
24862
25075
  caps: TargetKindCapsSchema
24863
25076
  });
@@ -24915,6 +25128,305 @@ var notificationOutputCapability = {
24915
25128
  }), external_exports.void(), { kind: "mutation" })
24916
25129
  }
24917
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
+ };
24918
25430
  var MethodAccessSchema = external_exports.enum([
24919
25431
  "view",
24920
25432
  "create",
@@ -25044,6 +25556,15 @@ var TrackSnapshotSchema = external_exports.object({
25044
25556
  /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
25045
25557
  mediaKey: external_exports.string()
25046
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
+ });
25047
25568
  var TrackSchema = external_exports.object({
25048
25569
  trackId: external_exports.string(),
25049
25570
  deviceId: external_exports.number(),
@@ -25058,6 +25579,10 @@ var TrackSchema = external_exports.object({
25058
25579
  snapshots: external_exports.array(TrackSnapshotSchema).readonly(),
25059
25580
  /** Deduplicated zones the track has entered at least once. */
25060
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(),
25061
25586
  /** Cumulative normalized distance travelled (0..1 units = full frame width). */
25062
25587
  totalDistance: external_exports.number(),
25063
25588
  state: TrackStateSchema,
@@ -25071,7 +25596,11 @@ var TrackSchema = external_exports.object({
25071
25596
  bestEventId: external_exports.string().optional(),
25072
25597
  /** Tag of the importance sub-signal that dominated the score
25073
25598
  * (identity|dwell|proximity|class|confidence|travel|zone). */
25074
- 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()
25075
25604
  });
25076
25605
  var BaseEventFields = {
25077
25606
  id: external_exports.string(),
@@ -25219,6 +25748,23 @@ var TrackedDetectionSchema = external_exports.object({
25219
25748
  zones: external_exports.array(external_exports.string()).readonly(),
25220
25749
  state: TrackStateSchema
25221
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
+ });
25222
25768
  var ScoredObjectEventSchema = ObjectEventSchema.extend({ score: external_exports.number() });
25223
25769
  var SearchObjectEventsInput = external_exports.object({
25224
25770
  text: external_exports.string(),
@@ -25229,6 +25775,20 @@ var SearchObjectEventsInput = external_exports.object({
25229
25775
  limit: external_exports.number().default(50),
25230
25776
  minScore: external_exports.number().min(0).max(1).default(0.2)
25231
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
+ });
25232
25792
  var pipelineAnalyticsCapability = {
25233
25793
  name: "pipeline-analytics",
25234
25794
  scope: "device",
@@ -25282,12 +25842,14 @@ var pipelineAnalyticsCapability = {
25282
25842
  audio: external_exports.number().int()
25283
25843
  })).readonly()),
25284
25844
  /**
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.
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.
25291
25853
  */
25292
25854
  pruneEventsBefore: method(external_exports.object({
25293
25855
  deviceId: external_exports.number(),
@@ -25300,6 +25862,55 @@ var pipelineAnalyticsCapability = {
25300
25862
  kind: "mutation",
25301
25863
  auth: "admin"
25302
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
+ }),
25303
25914
  getEventMedia: method(external_exports.object({
25304
25915
  eventId: external_exports.string(),
25305
25916
  kind: MediaFileKindEnum.optional()
@@ -25317,17 +25928,19 @@ var pipelineAnalyticsCapability = {
25317
25928
  },
25318
25929
  events: {
25319
25930
  /**
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.
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.
25324
25937
  */
25325
25938
  onFrameTracked: { data: external_exports.object({
25326
25939
  deviceId: external_exports.number(),
25327
25940
  timestamp: external_exports.number(),
25328
25941
  frameWidth: external_exports.number(),
25329
25942
  frameHeight: external_exports.number(),
25330
- detections: external_exports.array(TrackedDetectionSchema).readonly()
25943
+ detections: external_exports.array(OverlayDetectionSchema).readonly()
25331
25944
  }) },
25332
25945
  /** Track entered active state (first-seen). */
25333
25946
  onTrackStarted: { data: external_exports.object({
@@ -26860,7 +27473,15 @@ var webrtcSessionCapability = {
26860
27473
  */
26861
27474
  disableIpv6: external_exports.boolean().optional(),
26862
27475
  /** Subscriber attribution. See `createSession` for the contract. */
26863
- 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()
26864
27485
  }), external_exports.object({
26865
27486
  sessionId: external_exports.string(),
26866
27487
  sdpAnswer: external_exports.string()
@@ -28685,6 +29306,24 @@ var osdCapability = {
28685
29306
  }
28686
29307
  }] }
28687
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
+ });
28688
29327
  var PlateInfoSchema = external_exports.object({
28689
29328
  plateId: external_exports.string(),
28690
29329
  deviceId: external_exports.number().int(),
@@ -28696,6 +29335,16 @@ var PlateInfoSchema = external_exports.object({
28696
29335
  score: external_exports.number(),
28697
29336
  /** True when the text was manually corrected (exempt from retention). */
28698
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(),
28699
29348
  base64: external_exports.string().optional()
28700
29349
  });
28701
29350
  var MediaFileLiteSchema = external_exports.object({
@@ -28749,6 +29398,58 @@ var plateGalleryCapability = {
28749
29398
  deletePlate: method(external_exports.object({ plateId: external_exports.string() }), external_exports.void(), {
28750
29399
  kind: "mutation",
28751
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"
28752
29453
  })
28753
29454
  }
28754
29455
  };
@@ -28830,6 +29531,10 @@ var GpuInfoSchema = external_exports.object({
28830
29531
  memoryMB: external_exports.number().optional()
28831
29532
  });
28832
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
+ });
28833
29538
  var HardwareInfoSchema = external_exports.object({
28834
29539
  platform: HardwarePlatformSchema,
28835
29540
  arch: HardwareArchSchema,
@@ -28838,7 +29543,8 @@ var HardwareInfoSchema = external_exports.object({
28838
29543
  totalRAM_MB: external_exports.number(),
28839
29544
  availableRAM_MB: external_exports.number(),
28840
29545
  gpu: GpuInfoSchema.nullable(),
28841
- npu: NpuInfoSchema.nullable()
29546
+ npu: NpuInfoSchema.nullable(),
29547
+ coral: CoralInfoSchema.nullable().optional()
28842
29548
  });
28843
29549
  var PlatformScoreSchema = external_exports.object({
28844
29550
  runtime: external_exports.enum(["node", "python"]),
@@ -31389,6 +32095,168 @@ var METHOD_ACCESS_MAP = Object.freeze({
31389
32095
  addonId: null,
31390
32096
  access: "create"
31391
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
+ },
31392
32260
  "localNetwork.getAllowedAddresses": {
31393
32261
  capName: "local-network",
31394
32262
  capScope: "system",
@@ -32019,6 +32887,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
32019
32887
  addonId: null,
32020
32888
  access: "delete"
32021
32889
  },
32890
+ "pipelineAnalytics.deleteTracks": {
32891
+ capName: "pipeline-analytics",
32892
+ capScope: "device",
32893
+ addonId: null,
32894
+ access: "delete"
32895
+ },
32022
32896
  "pipelineAnalytics.getActiveTracks": {
32023
32897
  capName: "pipeline-analytics",
32024
32898
  capScope: "device",
@@ -32085,12 +32959,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
32085
32959
  addonId: null,
32086
32960
  access: "create"
32087
32961
  },
32962
+ "pipelineAnalytics.pruneTracksBefore": {
32963
+ capName: "pipeline-analytics",
32964
+ capScope: "device",
32965
+ addonId: null,
32966
+ access: "create"
32967
+ },
32088
32968
  "pipelineAnalytics.searchObjectEvents": {
32089
32969
  capName: "pipeline-analytics",
32090
32970
  capScope: "device",
32091
32971
  addonId: null,
32092
32972
  access: "view"
32093
32973
  },
32974
+ "pipelineAnalytics.wipeAllAnalytics": {
32975
+ capName: "pipeline-analytics",
32976
+ capScope: "device",
32977
+ addonId: null,
32978
+ access: "delete"
32979
+ },
32094
32980
  "pipelineExecutor.cacheFrameInPool": {
32095
32981
  capName: "pipeline-executor",
32096
32982
  capScope: "system",
@@ -32595,18 +33481,42 @@ var METHOD_ACCESS_MAP = Object.freeze({
32595
33481
  addonId: null,
32596
33482
  access: "create"
32597
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
+ },
32598
33496
  "plateGallery.correctPlateText": {
32599
33497
  capName: "plate-gallery",
32600
33498
  capScope: "system",
32601
33499
  addonId: null,
32602
33500
  access: "create"
32603
33501
  },
33502
+ "plateGallery.createVehicle": {
33503
+ capName: "plate-gallery",
33504
+ capScope: "system",
33505
+ addonId: null,
33506
+ access: "create"
33507
+ },
32604
33508
  "plateGallery.deletePlate": {
32605
33509
  capName: "plate-gallery",
32606
33510
  capScope: "system",
32607
33511
  addonId: null,
32608
33512
  access: "delete"
32609
33513
  },
33514
+ "plateGallery.deleteVehicle": {
33515
+ capName: "plate-gallery",
33516
+ capScope: "system",
33517
+ addonId: null,
33518
+ access: "delete"
33519
+ },
32610
33520
  "plateGallery.getPlateByTrack": {
32611
33521
  capName: "plate-gallery",
32612
33522
  capScope: "system",
@@ -32625,6 +33535,30 @@ var METHOD_ACCESS_MAP = Object.freeze({
32625
33535
  addonId: null,
32626
33536
  access: "view"
32627
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
+ },
32628
33562
  "plateGallery.searchPlates": {
32629
33563
  capName: "plate-gallery",
32630
33564
  capScope: "system",
@@ -32637,6 +33571,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
32637
33571
  addonId: null,
32638
33572
  access: "view"
32639
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
+ },
32640
33586
  "platformProbe.getCapabilities": {
32641
33587
  capName: "platform-probe",
32642
33588
  capScope: "system",
@@ -32829,6 +33775,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
32829
33775
  addonId: null,
32830
33776
  access: "create"
32831
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
+ },
32832
33820
  "scriptRunner.run": {
32833
33821
  capName: "script-runner",
32834
33822
  capScope: "device",
@@ -33913,6 +34901,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
33913
34901
  var CAP_PROVIDER_KIND_MAP = Object.freeze({
33914
34902
  "broker": "broker",
33915
34903
  "device-export": "device-export",
34904
+ "llm": "ai",
33916
34905
  "mesh-network": "mesh",
33917
34906
  "mqtt-broker": "broker",
33918
34907
  "network-access": "ingress",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-F4PHL6CW.js";
4
+ } from "./chunk-VLAF6UXF.js";
5
5
  import "./chunk-K3NQKI34.js";
6
6
 
7
7
  // src/cli.ts
@@ -1079,7 +1079,7 @@ function isUnknown(_value) {
1079
1079
  return true;
1080
1080
  }
1081
1081
  async function resolveServerInteractive(presetNamespace) {
1082
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-BDNJGQ2G.js");
1082
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-BJ6SMXC2.js");
1083
1083
  if (presetNamespace) {
1084
1084
  const spinner4 = clack.spinner();
1085
1085
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-F4PHL6CW.js";
8
+ } from "./chunk-VLAF6UXF.js";
9
9
  import "./chunk-K3NQKI34.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.1.25",
3
+ "version": "1.1.26",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",