@camstack/types 1.1.32 → 1.1.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/addon.js +1 -1
  2. package/dist/addon.mjs +1 -1
  3. package/dist/capabilities/addons.cap.d.ts +1 -1
  4. package/dist/capabilities/alerts.cap.d.ts +5 -5
  5. package/dist/capabilities/camera-streams.cap.d.ts +5 -5
  6. package/dist/capabilities/cap-router-predicates.d.ts +32 -0
  7. package/dist/capabilities/capability-definition.d.ts +18 -13
  8. package/dist/capabilities/consumables.cap.d.ts +1 -1
  9. package/dist/capabilities/custom-model-registry.cap.d.ts +36 -0
  10. package/dist/capabilities/index.d.ts +8 -15
  11. package/dist/capabilities/integrations.cap.d.ts +1 -1
  12. package/dist/capabilities/model-convert.cap.d.ts +21 -3
  13. package/dist/capabilities/model-distributor.cap.d.ts +36 -0
  14. package/dist/capabilities/network-quality.cap.d.ts +1 -1
  15. package/dist/capabilities/nodes.cap.d.ts +1 -1
  16. package/dist/capabilities/pipeline-executor.cap.d.ts +135 -8
  17. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +87 -44
  18. package/dist/capabilities/pipeline-runner.cap.d.ts +10 -69
  19. package/dist/capabilities/snapshot.cap.d.ts +3 -3
  20. package/dist/capabilities/stream-broker.cap.d.ts +9 -1
  21. package/dist/capabilities/system.cap.d.ts +1 -1
  22. package/dist/capabilities/toast.cap.d.ts +1 -1
  23. package/dist/capabilities/webrtc-session.cap.d.ts +15 -1
  24. package/dist/encode-profile.d.ts +2 -2
  25. package/dist/enums/event-category.d.ts +12 -0
  26. package/dist/generated/addon-api.d.ts +746 -636
  27. package/dist/generated/capability-router-map.d.ts +4 -16
  28. package/dist/generated/device-proxy.d.ts +0 -2
  29. package/dist/generated/method-access-map.d.ts +1 -1
  30. package/dist/generated/system-proxy.d.ts +2 -2
  31. package/dist/index.d.ts +1 -3
  32. package/dist/index.js +416 -348
  33. package/dist/index.mjs +403 -342
  34. package/dist/interfaces/capability.d.ts +0 -7
  35. package/dist/interfaces/event-bus.d.ts +9 -0
  36. package/dist/interfaces/pipeline-executor-capability.d.ts +14 -1
  37. package/dist/interfaces/pipeline-runner-capability.d.ts +11 -11
  38. package/dist/interfaces/recording-config.d.ts +2 -2
  39. package/dist/{sleep-CZDdRBua.mjs → sleep-Cc14_yxc.mjs} +12 -4
  40. package/dist/{sleep-Dirr8nGw.js → sleep-DmP-uxoe.js} +12 -4
  41. package/dist/types/agent-pipeline-settings.d.ts +18 -6
  42. package/dist/types/camera-pipeline.d.ts +17 -3
  43. package/dist/types/model-variant-groups.d.ts +90 -0
  44. package/dist/types/models.d.ts +60 -3
  45. package/package.json +1 -1
  46. package/dist/capabilities/restreamer.cap.d.ts +0 -54
  47. package/dist/capabilities/snapshot-provider.cap.d.ts +0 -43
  48. package/dist/capabilities/streaming-engine.cap.d.ts +0 -61
  49. package/dist/capabilities/webrtc.cap.d.ts +0 -75
  50. package/dist/interfaces/restreamer.d.ts +0 -23
  51. package/dist/interfaces/streaming.d.ts +0 -28
  52. package/dist/interfaces/webrtc-provider.d.ts +0 -34
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-Dirr8nGw.js");
2
+ const require_sleep = require("./sleep-DmP-uxoe.js");
3
3
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
4
  let zod = require("zod");
5
5
  //#region src/health/wiring-health.ts
@@ -115,6 +115,28 @@ var ModelFormatsSchema = zod.z.object({
115
115
  tflite: ModelFormatEntrySchema.optional(),
116
116
  pt: ModelFormatEntrySchema.optional()
117
117
  });
118
+ /**
119
+ * Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
120
+ * the reduced `PipelineModelOption` returned in `pipeline.getSchema()` so the
121
+ * grouped Family→Tier→Variant picker renders identically in the config UI and
122
+ * in the pipeline/device steppers. The flat `id` stays the source of truth for
123
+ * resolution/download/persistence; this is a presentation overlay resolved back
124
+ * to an `id`.
125
+ */
126
+ var ModelVariantGroupSchema = zod.z.object({
127
+ /** Top-level family, e.g. `yolo26` (later `d-fine`, `rf-detr`). */
128
+ family: zod.z.string(),
129
+ /** Size within the family, e.g. `n` | `s` | `m` | `l`. */
130
+ tier: zod.z.string(),
131
+ /** Quantization axis. Omit ⇒ the fp32 base build. */
132
+ precision: zod.z.enum(["fp32", "int8"]).optional(),
133
+ /**
134
+ * Speed-optimization axis. Omit ⇒ the standard build. `fast` marks a
135
+ * latency-optimized export (e.g. ReLU-activation / reduced-input variant)
136
+ * — the slot the future performance variants plug into.
137
+ */
138
+ optimization: zod.z.enum(["standard", "fast"]).optional()
139
+ });
118
140
  var ModelCatalogEntrySchema = zod.z.object({
119
141
  id: zod.z.string(),
120
142
  name: zod.z.string(),
@@ -144,7 +166,43 @@ var ModelCatalogEntrySchema = zod.z.object({
144
166
  * Auxiliary files required at runtime (labels JSON, charset dict, etc.).
145
167
  * Downloaded into the same modelsDir alongside the model file.
146
168
  */
147
- extraFiles: zod.z.array(ModelExtraFileSchema).readonly().optional()
169
+ extraFiles: zod.z.array(ModelExtraFileSchema).readonly().optional(),
170
+ /**
171
+ * LEGACY entry — retained in the catalog so a persisted operator selection
172
+ * still RESOLVES (and can be re-activated), but hidden from the selectable
173
+ * model list and excluded from the auto format-default pick. Set on the
174
+ * superseded / consolidated models (older lineages, redundant fp16 IRs) so
175
+ * the active lineup stays the coherent curated ladder without deleting a
176
+ * model anyone may still be pinned to. `resolveModelForFormat` keeps honoring
177
+ * an explicit legacy id that has a build for the node's format.
178
+ */
179
+ legacy: zod.z.boolean().optional(),
180
+ /**
181
+ * Measured quality/latency metadata — populated from the benchmark addon on
182
+ * the real node classes. Absent = not yet measured (most entries today; the
183
+ * catalog historically carried only `sizeMB`, a poor cross-architecture
184
+ * speed proxy). `p95LatencyMs` is keyed by node class (e.g. `n100`, `mac`).
185
+ */
186
+ metrics: zod.z.object({
187
+ map50: zod.z.number().optional(),
188
+ p95LatencyMs: zod.z.record(zod.z.string(), zod.z.number()).optional()
189
+ }).optional(),
190
+ /**
191
+ * SPDX-ish license id of the model weights (e.g. `AGPL-3.0` for Ultralytics
192
+ * YOLO26, `GPL-3.0` for YOLOv9, `Apache-2.0` for D-FINE/RF-DETR). Matters for
193
+ * the retraining addon and any future commercial distribution.
194
+ */
195
+ license: zod.z.string().optional(),
196
+ /**
197
+ * Variant-selector grouping. The UI groups models by `family` + `tier` and
198
+ * offers `precision` / `optimization` as variant axes WITHIN a tier — so all
199
+ * of a family's sizes and quantizations collapse into one grouped picker
200
+ * instead of a flat list of `yolo26s`, `yolo26s-int8`, … Absent ⇒ ungrouped
201
+ * (legacy / custom models) — never shown in the grouped selector. The flat
202
+ * `id` stays the source of truth for resolution/download/persistence; grouping
203
+ * is a presentation overlay resolved back to an `id`.
204
+ */
205
+ group: ModelVariantGroupSchema.optional()
148
206
  });
149
207
  var ConvertTargetSchema = zod.z.discriminatedUnion("format", [zod.z.object({
150
208
  format: zod.z.literal("openvino"),
@@ -187,6 +245,135 @@ var ConvertResultSchema = zod.z.object({
187
245
  artifacts: zod.z.array(ConvertArtifactSchema).readonly()
188
246
  });
189
247
  //#endregion
248
+ //#region src/types/model-variant-groups.ts
249
+ var FORMAT_KEYS = [
250
+ "onnx",
251
+ "coreml",
252
+ "openvino",
253
+ "tflite",
254
+ "pt"
255
+ ];
256
+ function familyLabel(family) {
257
+ return family.toUpperCase();
258
+ }
259
+ /** Strip a leading family label from a base model name → clean tier label. */
260
+ function tierLabel(family, baseName) {
261
+ const fl = familyLabel(family);
262
+ const stripped = baseName.replace(new RegExp(`^${fl}\\s+`, "i"), "").trim();
263
+ return stripped.length > 0 ? stripped : baseName;
264
+ }
265
+ function variantLabel(precision, optimization) {
266
+ const parts = [];
267
+ if (optimization === "fast") parts.push("Fast");
268
+ parts.push(precision === "int8" ? "Int8" : "Standard");
269
+ return parts.join(" · ");
270
+ }
271
+ function entryFormats(entry) {
272
+ return FORMAT_KEYS.filter((f) => entry.formats[f] !== void 0);
273
+ }
274
+ function smallestSizeMB(entry) {
275
+ const sizes = FORMAT_KEYS.map((f) => entry.formats[f]?.sizeMB).filter((n) => typeof n === "number");
276
+ return sizes.length > 0 ? Math.min(...sizes) : 0;
277
+ }
278
+ var TIER_ORDER = [
279
+ "n",
280
+ "s",
281
+ "m",
282
+ "l",
283
+ "x"
284
+ ];
285
+ var PRECISION_ORDER = ["fp32", "int8"];
286
+ /**
287
+ * Fold a flat catalog into the `family → tier → variant` tree. Deterministic
288
+ * ordering: tiers by the canonical size ladder (unknown tiers appended
289
+ * alphabetically), variants standard-before-int8 and fast last.
290
+ */
291
+ function buildModelVariantGroups(models) {
292
+ const byFamily = /* @__PURE__ */ new Map();
293
+ for (const m of models) {
294
+ if (m.legacy === true || m.group === void 0) continue;
295
+ const { family, tier } = m.group;
296
+ const tiers = byFamily.get(family) ?? /* @__PURE__ */ new Map();
297
+ const entries = tiers.get(tier) ?? [];
298
+ entries.push(m);
299
+ tiers.set(tier, entries);
300
+ byFamily.set(family, tiers);
301
+ }
302
+ const families = [];
303
+ for (const [family, tiers] of byFamily) {
304
+ const tierList = [];
305
+ for (const [tier, entries] of tiers) {
306
+ const options = entries.map((e) => {
307
+ const precision = e.group?.precision ?? "fp32";
308
+ const optimization = e.group?.optimization ?? "standard";
309
+ return {
310
+ modelId: e.id,
311
+ precision,
312
+ optimization,
313
+ label: variantLabel(precision, optimization),
314
+ formats: entryFormats(e),
315
+ sizeMB: smallestSizeMB(e)
316
+ };
317
+ }).toSorted((a, b) => {
318
+ if (a.optimization !== b.optimization) return a.optimization === "fast" ? 1 : -1;
319
+ return PRECISION_ORDER.indexOf(a.precision) - PRECISION_ORDER.indexOf(b.precision);
320
+ });
321
+ const base = options.find((o) => o.precision === "fp32" && o.optimization === "standard") ?? options[0];
322
+ if (base === void 0) continue;
323
+ const baseEntry = entries.find((e) => e.id === base.modelId);
324
+ tierList.push({
325
+ tier,
326
+ label: baseEntry ? tierLabel(family, baseEntry.name) : tier.toUpperCase(),
327
+ baseModelId: base.modelId,
328
+ options
329
+ });
330
+ }
331
+ tierList.sort((a, b) => {
332
+ const ia = TIER_ORDER.indexOf(a.tier);
333
+ const ib = TIER_ORDER.indexOf(b.tier);
334
+ if (ia !== -1 && ib !== -1) return ia - ib;
335
+ if (ia !== -1) return -1;
336
+ if (ib !== -1) return 1;
337
+ return a.tier.localeCompare(b.tier);
338
+ });
339
+ families.push({
340
+ family,
341
+ label: familyLabel(family),
342
+ tiers: tierList
343
+ });
344
+ }
345
+ families.sort((a, b) => a.family.localeCompare(b.family));
346
+ return families;
347
+ }
348
+ /**
349
+ * Map a grouped selection back to a flat catalog model id. Returns `null` when
350
+ * no entry matches (the UI then falls back to the tier base / format default).
351
+ * `precision`/`optimization` default to `fp32`/`standard` (the base build).
352
+ */
353
+ function resolveVariantModelId(models, selection) {
354
+ const precision = selection.precision ?? "fp32";
355
+ const optimization = selection.optimization ?? "standard";
356
+ for (const m of models) {
357
+ if (m.group === void 0) continue;
358
+ if (m.group.family !== selection.family || m.group.tier !== selection.tier) continue;
359
+ if ((m.group.precision ?? "fp32") !== precision) continue;
360
+ if ((m.group.optimization ?? "standard") !== optimization) continue;
361
+ return m.id;
362
+ }
363
+ return null;
364
+ }
365
+ /** Inverse: describe a flat model id as a grouped selection, or `null`. */
366
+ function describeModelVariant(models, modelId) {
367
+ const entry = models.find((m) => m.id === modelId);
368
+ if (entry?.group === void 0) return null;
369
+ return {
370
+ family: entry.group.family,
371
+ tier: entry.group.tier,
372
+ precision: entry.group.precision ?? "fp32",
373
+ optimization: entry.group.optimization ?? "standard"
374
+ };
375
+ }
376
+ //#endregion
190
377
  //#region src/interfaces/addon.ts
191
378
  var DEFAULT_ADDON_PLACEMENT = "hub-only";
192
379
  /**
@@ -572,8 +759,8 @@ var RecordingModeSchema = zod.z.enum([
572
759
  "onAudioThreshold"
573
760
  ]);
574
761
  /**
575
- * First-class, authoritative per-camera storage mode — the netta choice the UI
576
- * reads directly (never inferred from `rules`):
762
+ * First-class, authoritative per-camera storage mode — the explicit choice the
763
+ * UI reads directly (never inferred from `rules`):
577
764
  * - `off` — not recording.
578
765
  * - `events` — record only around triggers (motion / audio threshold),
579
766
  * with pre/post-buffer.
@@ -4478,42 +4665,14 @@ onBrightnessChanged: { data: zod.z.object({
4478
4665
  runtimeState: BrightnessStatusSchema
4479
4666
  };
4480
4667
  //#endregion
4481
- //#region src/capabilities/streaming-engine.cap.ts
4668
+ //#region src/capabilities/stream-broker.cap.ts
4669
+ /** Stream delivery format. (Relocated from the retired `streaming-engine` cap.) */
4482
4670
  var StreamFormatSchema = zod.z.enum([
4483
4671
  "webrtc",
4484
4672
  "hls",
4485
4673
  "mjpeg",
4486
4674
  "rtsp"
4487
4675
  ]);
4488
- var StreamInfoSchema = zod.z.object({
4489
- streamId: zod.z.string(),
4490
- format: StreamFormatSchema,
4491
- url: zod.z.string().nullable(),
4492
- active: zod.z.boolean()
4493
- });
4494
- var streamingEngineCapability = {
4495
- name: "streaming-engine",
4496
- scope: "system",
4497
- mode: "singleton",
4498
- internal: true,
4499
- methods: {
4500
- registerStream: require_sleep.method(zod.z.object({
4501
- streamId: zod.z.string(),
4502
- sourceUrl: zod.z.string(),
4503
- codec: zod.z.string().optional()
4504
- }), zod.z.void(), { kind: "mutation" }),
4505
- unregisterStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
4506
- getStreamUrl: require_sleep.method(zod.z.object({
4507
- streamId: zod.z.string(),
4508
- format: StreamFormatSchema
4509
- }), zod.z.string().nullable()),
4510
- listStreams: require_sleep.method(zod.z.void(), zod.z.array(StreamInfoSchema))
4511
- },
4512
- /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
4513
- mount: { kind: "skip" }
4514
- };
4515
- //#endregion
4516
- //#region src/capabilities/stream-broker.cap.ts
4517
4676
  var RtspRestreamEntrySchema = zod.z.object({
4518
4677
  brokerId: zod.z.string(),
4519
4678
  url: zod.z.string(),
@@ -5507,37 +5666,7 @@ var consumablesCapability = {
5507
5666
  scope: "device",
5508
5667
  deviceNative: true,
5509
5668
  mode: "singleton",
5510
- deviceTypes: [
5511
- require_sleep.DeviceType.Camera,
5512
- require_sleep.DeviceType.Hub,
5513
- require_sleep.DeviceType.Light,
5514
- require_sleep.DeviceType.Siren,
5515
- require_sleep.DeviceType.Switch,
5516
- require_sleep.DeviceType.Sensor,
5517
- require_sleep.DeviceType.Thermostat,
5518
- require_sleep.DeviceType.Button,
5519
- require_sleep.DeviceType.EventEmitter,
5520
- require_sleep.DeviceType.Update,
5521
- require_sleep.DeviceType.Generic,
5522
- require_sleep.DeviceType.Notifier,
5523
- require_sleep.DeviceType.Script,
5524
- require_sleep.DeviceType.Automation,
5525
- require_sleep.DeviceType.Lock,
5526
- require_sleep.DeviceType.Cover,
5527
- require_sleep.DeviceType.Valve,
5528
- require_sleep.DeviceType.Humidifier,
5529
- require_sleep.DeviceType.WaterHeater,
5530
- require_sleep.DeviceType.Fan,
5531
- require_sleep.DeviceType.MediaPlayer,
5532
- require_sleep.DeviceType.AlarmPanel,
5533
- require_sleep.DeviceType.Control,
5534
- require_sleep.DeviceType.Presence,
5535
- require_sleep.DeviceType.Weather,
5536
- require_sleep.DeviceType.Vacuum,
5537
- require_sleep.DeviceType.LawnMower,
5538
- require_sleep.DeviceType.Container,
5539
- require_sleep.DeviceType.Image
5540
- ],
5669
+ deviceTypes: Object.values(require_sleep.DeviceType),
5541
5670
  deviceConfig: { ui: {
5542
5671
  kind: "widget",
5543
5672
  widgetId: "host/consumables-panel",
@@ -7303,7 +7432,6 @@ var PipelineDefaultStepSchema = zod.z.lazy(() => zod.z.object({
7303
7432
  enabled: zod.z.boolean(),
7304
7433
  modelId: zod.z.string(),
7305
7434
  children: zod.z.array(PipelineDefaultStepSchema).readonly(),
7306
- engine: PipelineEngineChoiceSchema.optional(),
7307
7435
  group: zod.z.string().optional(),
7308
7436
  settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
7309
7437
  }));
@@ -7328,7 +7456,9 @@ var PipelineModelOptionSchema = zod.z.object({
7328
7456
  formats: zod.z.record(zod.z.string(), zod.z.object({
7329
7457
  downloaded: zod.z.boolean(),
7330
7458
  sizeMB: zod.z.number()
7331
- }))
7459
+ })),
7460
+ group: ModelVariantGroupSchema.optional(),
7461
+ legacy: zod.z.boolean().optional()
7332
7462
  });
7333
7463
  var ConfigFieldBridge = zod.z.custom();
7334
7464
  var PipelineAddonSchemaSchema = zod.z.object({
@@ -7379,15 +7509,42 @@ var EngineProvisioningSchema = zod.z.object({
7379
7509
  ]),
7380
7510
  progress: zod.z.number().optional(),
7381
7511
  error: zod.z.string().optional(),
7382
- nextRetryAt: zod.z.number().optional()
7512
+ nextRetryAt: zod.z.number().optional(),
7513
+ /**
7514
+ * Gate A (config-correctness gate at engine change): human-readable
7515
+ * config issues surfaced EAGERLY when the node's engine changes — model
7516
+ * substitutions ("chose X, running Y") and zero-build steps ("no model
7517
+ * has a <format> build"). Additive/optional: informational only, never
7518
+ * enforced here — `assertEngineReady` (readiness) still gates inference.
7519
+ * Absent/empty when the node-default tree resolves cleanly.
7520
+ */
7521
+ configIssues: zod.z.array(zod.z.string()).optional()
7383
7522
  });
7384
7523
  var PipelineStepInputSchema = zod.z.lazy(() => zod.z.object({
7385
7524
  addonId: zod.z.string(),
7386
- modelId: zod.z.string(),
7525
+ modelId: zod.z.string().optional(),
7387
7526
  enabled: zod.z.boolean().default(true),
7388
7527
  children: zod.z.array(PipelineStepInputSchema).optional(),
7389
7528
  settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
7390
7529
  }));
7530
+ var ModelSubstitutionSchema = zod.z.object({
7531
+ addonId: zod.z.string(),
7532
+ chosen: zod.z.string(),
7533
+ running: zod.z.string(),
7534
+ format: zod.z.string()
7535
+ });
7536
+ var PipelineValidationIssueSchema = zod.z.object({
7537
+ addonId: zod.z.string(),
7538
+ kind: zod.z.enum(["unknown-addon", "no-format-build"]),
7539
+ detail: zod.z.string()
7540
+ });
7541
+ var PipelineValidationResultSchema = zod.z.object({
7542
+ ok: zod.z.boolean(),
7543
+ issues: zod.z.array(PipelineValidationIssueSchema).readonly(),
7544
+ substitutions: zod.z.array(ModelSubstitutionSchema).readonly(),
7545
+ /** The node's `currentEngine.format` this validation ran against. */
7546
+ format: zod.z.string()
7547
+ });
7391
7548
  var ReferenceImageEntrySchema = zod.z.object({
7392
7549
  filename: zod.z.string(),
7393
7550
  stepIds: zod.z.array(zod.z.string()).readonly().optional()
@@ -7504,6 +7661,19 @@ var pipelineExecutorCapability = {
7504
7661
  getGlobalSteps: require_sleep.method(zod.z.void(), zod.z.array(PipelineDefaultStepSchema).readonly().nullable()),
7505
7662
  getGlobalPipelineConfig: require_sleep.method(zod.z.void(), PipelineConfigBridge),
7506
7663
  getOrchestratorConfigSchema: require_sleep.method(zod.z.void(), ConfigUISchemaBridge),
7664
+ /**
7665
+ * Gate B (pre-init config-correctness gate). PURE COMPUTE against this
7666
+ * node's `currentEngine.format` — resolves `steps` the same way the
7667
+ * runtime dispatch path would, and reports what WOULD happen without
7668
+ * touching any node-global state. Called by the orchestrator at attach
7669
+ * time (`attachOn`), node-pinned to the TARGET node, so config problems
7670
+ * surface BEFORE `pipelineRunner.attachCamera` rather than at the first
7671
+ * per-frame resolve. `ok` is false iff `issues` is non-empty (both
7672
+ * `unknown-addon` and `no-format-build` are HARD issues); `substitutions`
7673
+ * is informational (a degraded-but-loadable model swap) and never
7674
+ * affects `ok`. Never throws.
7675
+ */
7676
+ validatePipeline: require_sleep.method(zod.z.object({ steps: zod.z.array(PipelineStepInputSchema) }), PipelineValidationResultSchema),
7507
7677
  listTemplates: require_sleep.method(zod.z.void(), zod.z.array(PipelineTemplateSchema$1).readonly()),
7508
7678
  saveTemplate: require_sleep.method(zod.z.object({
7509
7679
  name: zod.z.string(),
@@ -7890,6 +8060,13 @@ var RunnerFrameSourceSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ k
7890
8060
  kind: zod.z.literal("remote-restream"),
7891
8061
  /** The camera's source-owner node (slice 1: always the hub). */
7892
8062
  ownerNodeId: zod.z.string(),
8063
+ /**
8064
+ * The owner's LAN-reachable host, resolved by the orchestrator from the
8065
+ * per-node `reachableHost` override (Cluster UI). When present the runner
8066
+ * dials THIS host for the owner's restream, in preference to the
8067
+ * `CAMSTACK_HUB_URL`-derived default. Absent → auto-detect fallback.
8068
+ */
8069
+ ownerReachableHost: zod.z.string().optional(),
7893
8070
  /** Operator override for the owner host the runner dials. */
7894
8071
  hubHostnameOverride: zod.z.string().optional()
7895
8072
  })]).describe("Per-camera frame-source mode for the runner (P2c)");
@@ -7898,13 +8075,11 @@ var RunnerFrameSourceSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ k
7898
8075
  * specific runner instance via `attachCamera`. Carries everything the
7899
8076
  * runner needs to subscribe to the local broker and execute inference.
7900
8077
  *
7901
- * Stateless-pipeline model: the full pipeline content (`engine`, `steps`,
7902
- * optional `audio`) travels with the attach payload. The runner keeps it
7903
- * in RAM for the lifetime of the attach — on rebalance, edit, or
7904
- * restart the orchestrator re-sends the latest snapshot.
7905
- *
7906
- * `engine`/`steps`/`audio` are optional during the additive migration
7907
- * window; once orchestrator + UI are migrated they become required.
8078
+ * Stateless-pipeline model: the pipeline content (`steps`, optional
8079
+ * `audio`) travels with the attach payload. The runner keeps it in RAM
8080
+ * for the lifetime of the attach — on rebalance, edit, or restart the
8081
+ * orchestrator re-sends the latest snapshot. Engine is NOT carried: it is
8082
+ * node-local, resolved by the executing runner at dispatch time.
7908
8083
  */
7909
8084
  var RunnerCameraConfigSchema = zod.z.object({
7910
8085
  deviceId: zod.z.number(),
@@ -7955,14 +8130,11 @@ var RunnerCameraConfigSchema = zod.z.object({
7955
8130
  */
7956
8131
  motionSources: MotionSourcesSchema.default(["analyzer"]),
7957
8132
  pipelineEnabled: zod.z.boolean().default(true),
7958
- /** Engine choice for video steps (runtime+backend+format). */
7959
- engine: PipelineEngineChoiceSchema.optional(),
7960
8133
  /** Ordered tree of video steps. Absent → runner skips video detection. */
7961
8134
  steps: zod.z.array(PipelineStepInputSchema).readonly().optional(),
7962
8135
  /** Audio classification branch. `enabled:false` disables, null skips. */
7963
8136
  audio: zod.z.object({
7964
- engine: PipelineEngineChoiceSchema,
7965
- modelId: zod.z.string(),
8137
+ modelId: zod.z.string().optional(),
7966
8138
  enabled: zod.z.boolean()
7967
8139
  }).nullable().optional(),
7968
8140
  /**
@@ -12258,6 +12430,7 @@ function createSystemProxy(api) {
12258
12430
  getGlobalSteps: (input) => dispatch("pipelineExecutor", "getGlobalSteps", "query", input),
12259
12431
  getGlobalPipelineConfig: (input) => dispatch("pipelineExecutor", "getGlobalPipelineConfig", "query", input),
12260
12432
  getOrchestratorConfigSchema: (input) => dispatch("pipelineExecutor", "getOrchestratorConfigSchema", "query", input),
12433
+ validatePipeline: (input) => dispatch("pipelineExecutor", "validatePipeline", "query", input),
12261
12434
  listTemplates: (input) => dispatch("pipelineExecutor", "listTemplates", "query", input),
12262
12435
  saveTemplate: (input) => dispatch("pipelineExecutor", "saveTemplate", "mutation", input),
12263
12436
  updateTemplate: (input) => dispatch("pipelineExecutor", "updateTemplate", "mutation", input),
@@ -12289,6 +12462,7 @@ function createSystemProxy(api) {
12289
12462
  getGlobalMetrics: (input) => dispatch("pipelineOrchestrator", "getGlobalMetrics", "query", input),
12290
12463
  getCapabilityBindings: (input) => dispatch("pipelineOrchestrator", "getCapabilityBindings", "query", input),
12291
12464
  setCapabilityBinding: (input) => dispatch("pipelineOrchestrator", "setCapabilityBinding", "mutation", input),
12465
+ getIngestOwner: (input) => dispatch("pipelineOrchestrator", "getIngestOwner", "query", input),
12292
12466
  getDecoderAssignments: (input) => dispatch("pipelineOrchestrator", "getDecoderAssignments", "query", input),
12293
12467
  getAudioNodeLoad: (input) => dispatch("pipelineOrchestrator", "getAudioNodeLoad", "query", input),
12294
12468
  getAgentSettings: (input) => dispatch("pipelineOrchestrator", "getAgentSettings", "query", input),
@@ -12298,6 +12472,7 @@ function createSystemProxy(api) {
12298
12472
  setAgentMaxCameras: (input) => dispatch("pipelineOrchestrator", "setAgentMaxCameras", "mutation", input),
12299
12473
  setAgentDetectWeight: (input) => dispatch("pipelineOrchestrator", "setAgentDetectWeight", "mutation", input),
12300
12474
  setAgentCapabilities: (input) => dispatch("pipelineOrchestrator", "setAgentCapabilities", "mutation", input),
12475
+ setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
12301
12476
  getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
12302
12477
  listTemplates: (input) => dispatch("pipelineOrchestrator", "listTemplates", "query", input),
12303
12478
  saveTemplate: (input) => dispatch("pipelineOrchestrator", "saveTemplate", "mutation", input),
@@ -14410,6 +14585,65 @@ var cameraPipelineConfigCapability = {
14410
14585
  methods: {}
14411
14586
  };
14412
14587
  //#endregion
14588
+ //#region src/capabilities/cap-router-predicates.ts
14589
+ /**
14590
+ * Shared cap-router predicates — the SINGLE source for the structural Zod-shape
14591
+ * checks + naming used by BOTH the runtime cap-router builder
14592
+ * (`@camstack/system` `cap-router-builder.ts` + the server's
14593
+ * `cap-router-runtime.ts`) AND the codegen scripts (`scripts/generate-cap-*.ts`).
14594
+ *
14595
+ * These used to be independently reimplemented on each side, held in sync only
14596
+ * by "must stay byte-identical" comments — a live drift risk. Consolidating them
14597
+ * here (next to `resolveCapMount` / `expandCapMethods`, the other shared model)
14598
+ * makes the two paths provably agree. Each predicate accepts both Zod 4
14599
+ * (`_def.type`) and legacy Zod 3 (`_def.typeName` / `constructor.name`) shapes.
14600
+ */
14601
+ /** `z.void()` — input carries no data. */
14602
+ function isVoidInput(schema) {
14603
+ const def = schema._def;
14604
+ return schema.constructor?.name === "ZodVoid" || def?.type === "void" || def?.typeName === "ZodVoid";
14605
+ }
14606
+ /** `z.object()` — supports `.loose()` for out-of-band `nodeId`/`addonId` keys. */
14607
+ function isObjectInput(schema) {
14608
+ const def = schema._def;
14609
+ return schema.constructor?.name === "ZodObject" || def?.type === "object" || def?.typeName === "ZodObject";
14610
+ }
14611
+ /**
14612
+ * Structural "is this Zod schema an array output" check — bottoms out at
14613
+ * `ZodArray` through the canonical Zod 4 wrappers (readonly/optional/nullable/
14614
+ * default). Bounded unwrap guards against a malformed/cyclic schema.
14615
+ */
14616
+ function isArrayOutputSchema(schema) {
14617
+ let cur = schema;
14618
+ for (let depth = 0; depth < 8 && cur != null; depth += 1) {
14619
+ const def = cur._def;
14620
+ const ctor = cur.constructor?.name;
14621
+ if (ctor === "ZodArray" || def?.type === "array") return true;
14622
+ if (!(ctor === "ZodReadonly" || def?.type === "readonly" || ctor === "ZodOptional" || def?.type === "optional" || ctor === "ZodNullable" || def?.type === "nullable" || ctor === "ZodDefault" || def?.type === "default") || def?.innerType == null) return false;
14623
+ cur = def.innerType;
14624
+ }
14625
+ return false;
14626
+ }
14627
+ /**
14628
+ * Apply `.loose()` to an object input schema when available (Zod 4) so the
14629
+ * router accepts the out-of-band `nodeId`/`addonId` selector keys without
14630
+ * stripping them. Falls back to the schema unchanged when `.loose()` is absent.
14631
+ */
14632
+ function looseSchema(schema) {
14633
+ const loose = schema.loose;
14634
+ return typeof loose === "function" ? loose.call(schema) : schema;
14635
+ }
14636
+ /** Auth level → base-procedure key. `superAdmin` collapses to `admin`. */
14637
+ function procedureAuthKey(auth) {
14638
+ if (auth === "public") return "public";
14639
+ if (auth === "admin" || auth === "superAdmin") return "admin";
14640
+ return "protected";
14641
+ }
14642
+ /** kebab-case cap name → camelCase router-map key. */
14643
+ function kebabToCamel(s) {
14644
+ return s.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
14645
+ }
14646
+ //#endregion
14413
14647
  //#region src/capabilities/custom-actions.ts
14414
14648
  /**
14415
14649
  * Identity — preserves literal types for downstream inference.
@@ -17198,11 +17432,11 @@ var pipelineAnalyticsCapability = {
17198
17432
  //#endregion
17199
17433
  //#region src/capabilities/pipeline-orchestrator.cap.ts
17200
17434
  var CameraPipelineConfigSchema = zod.z.object({
17201
- engine: PipelineEngineChoiceSchema,
17435
+ engine: PipelineEngineChoiceSchema.optional(),
17202
17436
  steps: zod.z.array(PipelineStepInputSchema).readonly(),
17203
17437
  audio: zod.z.object({
17204
- engine: PipelineEngineChoiceSchema,
17205
- modelId: zod.z.string(),
17438
+ engine: PipelineEngineChoiceSchema.optional(),
17439
+ modelId: zod.z.string().optional(),
17206
17440
  enabled: zod.z.boolean(),
17207
17441
  settings: zod.z.record(zod.z.string(), zod.z.unknown()).readonly().optional()
17208
17442
  }).nullable().optional()
@@ -17217,7 +17451,7 @@ var PipelineTemplateSchema = zod.z.object({
17217
17451
  });
17218
17452
  var AgentAddonConfigSchema = zod.z.object({
17219
17453
  enabled: zod.z.boolean(),
17220
- modelId: zod.z.string(),
17454
+ modelId: zod.z.string().optional(),
17221
17455
  settings: zod.z.record(zod.z.string(), zod.z.unknown()).readonly()
17222
17456
  });
17223
17457
  var AgentPipelineSettingsSchema = zod.z.object({
@@ -17232,7 +17466,15 @@ var AgentPipelineSettingsSchema = zod.z.object({
17232
17466
  /** Node is eligible to run audio-analyzer sessions. */
17233
17467
  audio: zod.z.boolean().optional(),
17234
17468
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
17235
- ingest: zod.z.boolean().optional()
17469
+ ingest: zod.z.boolean().optional(),
17470
+ /**
17471
+ * Operator override for the LAN host a cross-node decoder dials to reach
17472
+ * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
17473
+ * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
17474
+ * it already uses to reach the hub). Set this only when the auto-detected
17475
+ * address is wrong (multi-homed host, NAT, custom interface).
17476
+ */
17477
+ reachableHost: zod.z.string().optional()
17236
17478
  });
17237
17479
  var CameraPipelineForAgentSchema = zod.z.object({
17238
17480
  steps: zod.z.array(PipelineStepInputSchema).readonly(),
@@ -17338,6 +17580,15 @@ var GlobalMetricsSchema = zod.z.object({
17338
17580
  * capability providers.
17339
17581
  */
17340
17582
  var CapabilityBindingsSchema = zod.z.record(zod.z.string(), zod.z.string());
17583
+ /**
17584
+ * The cluster's single camera-source owner (`clusterRoles.ingestNode`) plus
17585
+ * its LAN-reachable host, if one is registered. See `getIngestOwner`.
17586
+ */
17587
+ var IngestOwnerSchema = zod.z.object({
17588
+ ownerNodeId: zod.z.string(),
17589
+ reachableHost: zod.z.string().optional(),
17590
+ configIssue: zod.z.string().optional()
17591
+ });
17341
17592
  /** Stream entry surfaced from the stream-catalog for one device. */
17342
17593
  var CameraSourceStreamSchema = zod.z.object({
17343
17594
  camStreamId: zod.z.string(),
@@ -17354,6 +17605,14 @@ var CameraAssignmentStatusSchema = zod.z.object({
17354
17605
  detectionNodeId: zod.z.string().nullable(),
17355
17606
  decoderNodeId: zod.z.string().nullable(),
17356
17607
  audioNodeId: zod.z.string().nullable(),
17608
+ /**
17609
+ * The node that OWNS this camera's physical source pull (dials the RTSP and
17610
+ * hosts the broker/restream) — the cluster ingest owner today
17611
+ * (`clusterRoles.ingestNode`), per-camera once source assignment lands. Lets
17612
+ * the UI show WHERE a camera is sourced without SSH/logs, and is the node the
17613
+ * broker block below was read from (pinned). Nullable only pre-wiring.
17614
+ */
17615
+ sourceNodeId: zod.z.string().nullable(),
17357
17616
  pinned: zod.z.object({
17358
17617
  detection: zod.z.boolean(),
17359
17618
  decoder: zod.z.boolean(),
@@ -17560,6 +17819,14 @@ var pipelineOrchestratorCapability = {
17560
17819
  kind: "mutation",
17561
17820
  auth: "admin"
17562
17821
  }),
17822
+ /**
17823
+ * The cluster's single camera-source owner — resolved UNCONDITIONALLY
17824
+ * from `clusterRoles.ingestNode` (NOT the detection-decode
17825
+ * `remoteSourcingNodes` knob). Consumers (recorder/snapshot/audio) pin
17826
+ * their broker calls to `ownerNodeId` and dial `reachableHost` when
17827
+ * present. Defaults to `{ ownerNodeId: 'hub' }`.
17828
+ */
17829
+ getIngestOwner: require_sleep.method(zod.z.void(), IngestOwnerSchema),
17563
17830
  /** Pin a device's decoder to a specific node. */
17564
17831
  assignDecoder: require_sleep.method(zod.z.object({
17565
17832
  deviceId: zod.z.number(),
@@ -17706,6 +17973,22 @@ var pipelineOrchestratorCapability = {
17706
17973
  kind: "mutation",
17707
17974
  auth: "admin"
17708
17975
  }),
17976
+ /**
17977
+ * Set (or clear) the operator override for the LAN host a cross-node
17978
+ * decoder dials to reach this node's restream. Pass a non-empty string to
17979
+ * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
17980
+ * default); pass `null` or an empty string to clear it and revert to
17981
+ * auto-detect. Applied on the next dispatch cycle — takes effect for new
17982
+ * cross-node attaches; existing attaches keep their current host until
17983
+ * re-dispatched.
17984
+ */
17985
+ setAgentReachableHost: require_sleep.method(zod.z.object({
17986
+ agentNodeId: zod.z.string(),
17987
+ reachableHost: zod.z.string().nullable()
17988
+ }), zod.z.object({ success: zod.z.literal(true) }), {
17989
+ kind: "mutation",
17990
+ auth: "admin"
17991
+ }),
17709
17992
  /** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
17710
17993
  getCameraSettings: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraPipelineSettingsSchema.nullable()),
17711
17994
  /** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
@@ -17798,36 +18081,6 @@ var pipelineOrchestratorCapability = {
17798
18081
  }
17799
18082
  };
17800
18083
  //#endregion
17801
- //#region src/capabilities/restreamer.cap.ts
17802
- var RegisteredStreamSchema = zod.z.object({
17803
- streamId: zod.z.string(),
17804
- label: zod.z.string().optional(),
17805
- codec: zod.z.string(),
17806
- type: zod.z.enum(["video", "audio"]),
17807
- sourceUrl: zod.z.string()
17808
- });
17809
- var ExposedResourceSchema = zod.z.object({
17810
- streamId: zod.z.string(),
17811
- format: zod.z.string(),
17812
- value: zod.z.string()
17813
- });
17814
- var restreamerCapability = {
17815
- name: "restreamer",
17816
- scope: "system",
17817
- mode: "collection",
17818
- internal: true,
17819
- methods: {
17820
- registerDevice: require_sleep.method(zod.z.object({
17821
- deviceId: zod.z.number(),
17822
- streams: zod.z.array(RegisteredStreamSchema).readonly()
17823
- }), zod.z.void(), { kind: "mutation" }),
17824
- unregisterDevice: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
17825
- getExposedResources: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(ExposedResourceSchema).readonly())
17826
- },
17827
- /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
17828
- mount: { kind: "skip" }
17829
- };
17830
- //#endregion
17831
18084
  //#region src/capabilities/settings-store.cap.ts
17832
18085
  /**
17833
18086
  * Query filter for settings-store collections.
@@ -18055,9 +18308,9 @@ var smtpProviderCapability = {
18055
18308
  /**
18056
18309
  * A single device snapshot returned as base64 JPEG/PNG.
18057
18310
  *
18058
- * Shared with the `snapshot-provider` collection cap the orchestrator
18059
- * receives the same shape from each native provider and from the
18060
- * broker-based fallback.
18311
+ * The `SnapshotAddon` wrapper returns this shape whether the frame came from
18312
+ * the device-native provider (onboard capture) or from the stream-broker
18313
+ * prebuffer fallback.
18061
18314
  */
18062
18315
  var SnapshotImageSchema = zod.z.object({
18063
18316
  base64: zod.z.string(),
@@ -18133,38 +18386,6 @@ var snapshotCapability = {
18133
18386
  }
18134
18387
  };
18135
18388
  //#endregion
18136
- //#region src/capabilities/snapshot-provider.cap.ts
18137
- /**
18138
- * snapshot-provider — collection of native snapshot implementations.
18139
- *
18140
- * Device provider addons (ONVIF, Frigate, etc.) register here
18141
- * when they can capture frames through a protocol-native path (e.g.
18142
- * ONVIF GetSnapshotUri, Frigate /api/<cam>/latest.jpg). The `snapshot`
18143
- * singleton orchestrator iterates over the collection, asking each
18144
- * provider whether it supports the requested device, and calls the
18145
- * first matching one.
18146
- *
18147
- * If no provider in the collection supports a device, the orchestrator
18148
- * falls back to `stream-broker.grabFrame` (universal fallback).
18149
- *
18150
- * Public tRPC router (auto-mounted) so out-of-process addons, agents,
18151
- * and advanced clients can bypass the orchestrator when needed.
18152
- */
18153
- var snapshotProviderCapability = {
18154
- name: "snapshot-provider",
18155
- scope: "system",
18156
- mode: "collection",
18157
- methods: {
18158
- supportsDevice: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.boolean()),
18159
- getSnapshot: require_sleep.method(zod.z.object({
18160
- deviceId: zod.z.number(),
18161
- streamId: zod.z.string().optional()
18162
- }), SnapshotImageSchema.nullable())
18163
- },
18164
- /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
18165
- mount: { kind: "custom" }
18166
- };
18167
- //#endregion
18168
18389
  //#region src/capabilities/sso-bridge.cap.ts
18169
18390
  /**
18170
18391
  * `sso-bridge` — internal hub-only cap that lets SSO-style auth
@@ -18699,11 +18920,12 @@ var videoclipsCapability = {
18699
18920
  }
18700
18921
  };
18701
18922
  //#endregion
18702
- //#region src/capabilities/webrtc.cap.ts
18923
+ //#region src/capabilities/webrtc-session.cap.ts
18703
18924
  /**
18704
- * Optional client-side hints sent at session creation to help the
18705
- * provider pick the best native source. All fields are optional —
18706
- * a viewer that knows nothing still gets a sane default.
18925
+ * Optional client-side hints sent at session creation to help the provider
18926
+ * pick the best native source. All fields optional — a viewer that knows
18927
+ * nothing still gets a sane default. (Relocated from the retired `webrtc`
18928
+ * collection cap; this `webrtc-session` cap is the live signaling surface.)
18707
18929
  */
18708
18930
  var webrtcClientHintsSchema = zod.z.object({
18709
18931
  viewportWidth: zod.z.number().int().positive().optional(),
@@ -18714,51 +18936,6 @@ var webrtcClientHintsSchema = zod.z.object({
18714
18936
  /** Hard tier override; takes precedence over scoring when registered. */
18715
18937
  prefersTier: zod.z.string().optional()
18716
18938
  }).partial();
18717
- var webrtcCapability = {
18718
- name: "webrtc",
18719
- scope: "system",
18720
- mode: "collection",
18721
- internal: true,
18722
- methods: {
18723
- handleOffer: require_sleep.method(zod.z.object({
18724
- streamId: zod.z.string(),
18725
- sdpOffer: zod.z.string()
18726
- }), zod.z.string(), { kind: "mutation" }),
18727
- supportsStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.boolean()),
18728
- registerStream: require_sleep.method(zod.z.object({
18729
- streamId: zod.z.string(),
18730
- codec: zod.z.string()
18731
- }), zod.z.void(), { kind: "mutation" }),
18732
- unregisterStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
18733
- /**
18734
- * Two-step server-offer signaling. `hints` is optional — providers
18735
- * that don't care about adaptive source selection ignore it.
18736
- */
18737
- createSession: require_sleep.method(zod.z.object({
18738
- streamId: zod.z.string(),
18739
- hints: webrtcClientHintsSchema.optional()
18740
- }), zod.z.object({
18741
- sessionId: zod.z.string(),
18742
- sdpOffer: zod.z.string()
18743
- }), { kind: "mutation" }),
18744
- handleAnswer: require_sleep.method(zod.z.object({
18745
- sessionId: zod.z.string(),
18746
- sdpAnswer: zod.z.string()
18747
- }), zod.z.void(), { kind: "mutation" }),
18748
- closeSession: require_sleep.method(zod.z.object({ sessionId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
18749
- /**
18750
- * Whether this provider supports adaptive bitrate for the given stream.
18751
- * Currently always false — adaptive selection is one-shot at session
18752
- * start, not in-session encoder switching. Phase 5 plans to layer
18753
- * encoder-driven adaptation on top.
18754
- */
18755
- hasAdaptiveBitrate: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.boolean())
18756
- },
18757
- /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
18758
- mount: { kind: "skip" }
18759
- };
18760
- //#endregion
18761
- //#region src/capabilities/webrtc-session.cap.ts
18762
18939
  /**
18763
18940
  * Discriminated target for a WebRTC session. The client sends this
18764
18941
  * structured object instead of building / parsing brokerId strings;
@@ -19031,7 +19208,7 @@ var webrtcSessionCapability = {
19031
19208
  }).nullable() }))
19032
19209
  },
19033
19210
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
19034
- mount: { kind: "custom" }
19211
+ mount: { kind: "server-provided" }
19035
19212
  };
19036
19213
  //#endregion
19037
19214
  //#region src/capabilities/accessories.cap.ts
@@ -19710,7 +19887,7 @@ var addonsCapability = {
19710
19887
  }), LogStreamEntrySchema, { kind: "subscription" })
19711
19888
  },
19712
19889
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
19713
- mount: { kind: "service-backed" }
19890
+ mount: { kind: "server-provided" }
19714
19891
  };
19715
19892
  //#endregion
19716
19893
  //#region src/capabilities/button.cap.ts
@@ -20126,7 +20303,7 @@ var integrationsCapability = {
20126
20303
  })
20127
20304
  },
20128
20305
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
20129
- mount: { kind: "service-backed" }
20306
+ mount: { kind: "server-provided" }
20130
20307
  };
20131
20308
  //#endregion
20132
20309
  //#region src/capabilities/intercom.cap.ts
@@ -20773,7 +20950,7 @@ var networkQualityCapability = {
20773
20950
  }), zod.z.void(), { kind: "mutation" })
20774
20951
  },
20775
20952
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
20776
- mount: { kind: "service-backed" }
20953
+ mount: { kind: "server-provided" }
20777
20954
  };
20778
20955
  //#endregion
20779
20956
  //#region src/capabilities/nodes.cap.ts
@@ -20965,7 +21142,7 @@ var nodesCapability = {
20965
21142
  })
20966
21143
  },
20967
21144
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
20968
- mount: { kind: "service-backed" }
21145
+ mount: { kind: "server-provided" }
20969
21146
  };
20970
21147
  //#endregion
20971
21148
  //#region src/capabilities/osd.cap.ts
@@ -21959,7 +22136,7 @@ var systemCapability = {
21959
22136
  })
21960
22137
  },
21961
22138
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
21962
- mount: { kind: "service-backed" }
22139
+ mount: { kind: "server-provided" }
21963
22140
  };
21964
22141
  //#endregion
21965
22142
  //#region src/capabilities/toast.cap.ts
@@ -21999,7 +22176,7 @@ var toastCapability = {
21999
22176
  mode: "singleton",
22000
22177
  methods: { onToast: require_sleep.method(zod.z.void(), ToastSchema, { kind: "subscription" }) },
22001
22178
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
22002
- mount: { kind: "service-backed" }
22179
+ mount: { kind: "server-provided" }
22003
22180
  };
22004
22181
  //#endregion
22005
22182
  //#region src/capabilities/user-management.cap.ts
@@ -22379,13 +22556,11 @@ var CAPABILITY_NAMES = {
22379
22556
  ptzAutotrack: "ptz-autotrack",
22380
22557
  reboot: "reboot",
22381
22558
  recording: "recording",
22382
- restreamer: "restreamer",
22383
22559
  scriptRunner: "script-runner",
22384
22560
  settingsStore: "settings-store",
22385
22561
  smoke: "smoke",
22386
22562
  smtpProvider: "smtp-provider",
22387
22563
  snapshot: "snapshot",
22388
- snapshotProvider: "snapshot-provider",
22389
22564
  ssoBridge: "sso-bridge",
22390
22565
  storage: "storage",
22391
22566
  storageEvictable: "storage-evictable",
@@ -22393,7 +22568,6 @@ var CAPABILITY_NAMES = {
22393
22568
  streamBroker: "stream-broker",
22394
22569
  streamCatalog: "stream-catalog",
22395
22570
  streamParams: "stream-params",
22396
- streamingEngine: "streaming-engine",
22397
22571
  switch: "switch",
22398
22572
  system: "system",
22399
22573
  tamper: "tamper",
@@ -22409,7 +22583,6 @@ var CAPABILITY_NAMES = {
22409
22583
  videoclips: "videoclips",
22410
22584
  waterHeater: "water-heater",
22411
22585
  weather: "weather",
22412
- webrtc: "webrtc",
22413
22586
  webrtcSession: "webrtc-session",
22414
22587
  zoneAnalytics: "zone-analytics",
22415
22588
  zoneRules: "zone-rules",
@@ -22833,10 +23006,6 @@ var CAPABILITY_ROUTER_KEYS = [
22833
23006
  key: "recording",
22834
23007
  name: "recording"
22835
23008
  },
22836
- {
22837
- key: "restreamer",
22838
- name: "restreamer"
22839
- },
22840
23009
  {
22841
23010
  key: "scriptRunner",
22842
23011
  name: "script-runner"
@@ -22857,10 +23026,6 @@ var CAPABILITY_ROUTER_KEYS = [
22857
23026
  key: "snapshot",
22858
23027
  name: "snapshot"
22859
23028
  },
22860
- {
22861
- key: "snapshotProvider",
22862
- name: "snapshot-provider"
22863
- },
22864
23029
  {
22865
23030
  key: "ssoBridge",
22866
23031
  name: "sso-bridge"
@@ -22889,10 +23054,6 @@ var CAPABILITY_ROUTER_KEYS = [
22889
23054
  key: "streamParams",
22890
23055
  name: "stream-params"
22891
23056
  },
22892
- {
22893
- key: "streamingEngine",
22894
- name: "streaming-engine"
22895
- },
22896
23057
  {
22897
23058
  key: "switch",
22898
23059
  name: "switch"
@@ -22953,10 +23114,6 @@ var CAPABILITY_ROUTER_KEYS = [
22953
23114
  key: "weather",
22954
23115
  name: "weather"
22955
23116
  },
22956
- {
22957
- key: "webrtc",
22958
- name: "webrtc"
22959
- },
22960
23117
  {
22961
23118
  key: "webrtcSession",
22962
23119
  name: "webrtc-session"
@@ -23088,13 +23245,11 @@ var ALL_CAPABILITY_DEFINITIONS = [
23088
23245
  ptzAutotrackCapability,
23089
23246
  rebootCapability,
23090
23247
  recordingCapability,
23091
- restreamerCapability,
23092
23248
  scriptRunnerCapability,
23093
23249
  settingsStoreCapability,
23094
23250
  smokeCapability,
23095
23251
  smtpProviderCapability,
23096
23252
  snapshotCapability,
23097
- snapshotProviderCapability,
23098
23253
  ssoBridgeCapability,
23099
23254
  storageCapability,
23100
23255
  storageEvictableCapability,
@@ -23102,7 +23257,6 @@ var ALL_CAPABILITY_DEFINITIONS = [
23102
23257
  streamBrokerCapability,
23103
23258
  streamCatalogCapability,
23104
23259
  streamParamsCapability,
23105
- streamingEngineCapability,
23106
23260
  switchCapability,
23107
23261
  systemCapability,
23108
23262
  tamperCapability,
@@ -23118,7 +23272,6 @@ var ALL_CAPABILITY_DEFINITIONS = [
23118
23272
  videoclipsCapability,
23119
23273
  waterHeaterCapability,
23120
23274
  weatherCapability,
23121
- webrtcCapability,
23122
23275
  webrtcSessionCapability,
23123
23276
  zoneAnalyticsCapability,
23124
23277
  zoneRulesCapability,
@@ -26017,6 +26170,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
26017
26170
  addonId: null,
26018
26171
  access: "create"
26019
26172
  },
26173
+ "pipelineExecutor.validatePipeline": {
26174
+ capName: "pipeline-executor",
26175
+ capScope: "system",
26176
+ addonId: null,
26177
+ access: "view"
26178
+ },
26020
26179
  "pipelineOrchestrator.assignAudio": {
26021
26180
  capName: "pipeline-orchestrator",
26022
26181
  capScope: "system",
@@ -26125,6 +26284,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
26125
26284
  addonId: null,
26126
26285
  access: "view"
26127
26286
  },
26287
+ "pipelineOrchestrator.getIngestOwner": {
26288
+ capName: "pipeline-orchestrator",
26289
+ capScope: "system",
26290
+ addonId: null,
26291
+ access: "view"
26292
+ },
26128
26293
  "pipelineOrchestrator.getPipelineAssignment": {
26129
26294
  capName: "pipeline-orchestrator",
26130
26295
  capScope: "system",
@@ -26197,6 +26362,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
26197
26362
  addonId: null,
26198
26363
  access: "create"
26199
26364
  },
26365
+ "pipelineOrchestrator.setAgentReachableHost": {
26366
+ capName: "pipeline-orchestrator",
26367
+ capScope: "system",
26368
+ addonId: null,
26369
+ access: "create"
26370
+ },
26200
26371
  "pipelineOrchestrator.setCameraPipelineForAgent": {
26201
26372
  capName: "pipeline-orchestrator",
26202
26373
  capScope: "system",
@@ -26527,24 +26698,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
26527
26698
  addonId: null,
26528
26699
  access: "create"
26529
26700
  },
26530
- "restreamer.getExposedResources": {
26531
- capName: "restreamer",
26532
- capScope: "system",
26533
- addonId: null,
26534
- access: "view"
26535
- },
26536
- "restreamer.registerDevice": {
26537
- capName: "restreamer",
26538
- capScope: "system",
26539
- addonId: null,
26540
- access: "create"
26541
- },
26542
- "restreamer.unregisterDevice": {
26543
- capName: "restreamer",
26544
- capScope: "system",
26545
- addonId: null,
26546
- access: "delete"
26547
- },
26548
26701
  "scriptRunner.run": {
26549
26702
  capName: "script-runner",
26550
26703
  capScope: "device",
@@ -26647,18 +26800,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
26647
26800
  addonId: null,
26648
26801
  access: "create"
26649
26802
  },
26650
- "snapshotProvider.getSnapshot": {
26651
- capName: "snapshot-provider",
26652
- capScope: "system",
26653
- addonId: null,
26654
- access: "view"
26655
- },
26656
- "snapshotProvider.supportsDevice": {
26657
- capName: "snapshot-provider",
26658
- capScope: "system",
26659
- addonId: null,
26660
- access: "view"
26661
- },
26662
26803
  "ssoBridge.signBridgeToken": {
26663
26804
  capName: "sso-bridge",
26664
26805
  capScope: "system",
@@ -27085,30 +27226,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
27085
27226
  addonId: null,
27086
27227
  access: "view"
27087
27228
  },
27088
- "streamingEngine.getStreamUrl": {
27089
- capName: "streaming-engine",
27090
- capScope: "system",
27091
- addonId: null,
27092
- access: "view"
27093
- },
27094
- "streamingEngine.listStreams": {
27095
- capName: "streaming-engine",
27096
- capScope: "system",
27097
- addonId: null,
27098
- access: "view"
27099
- },
27100
- "streamingEngine.registerStream": {
27101
- capName: "streaming-engine",
27102
- capScope: "system",
27103
- addonId: null,
27104
- access: "create"
27105
- },
27106
- "streamingEngine.unregisterStream": {
27107
- capName: "streaming-engine",
27108
- capScope: "system",
27109
- addonId: null,
27110
- access: "delete"
27111
- },
27112
27229
  "streamParams.getConfigSchema": {
27113
27230
  capName: "stream-params",
27114
27231
  capScope: "device",
@@ -27475,54 +27592,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
27475
27592
  addonId: null,
27476
27593
  access: "create"
27477
27594
  },
27478
- "webrtc.closeSession": {
27479
- capName: "webrtc",
27480
- capScope: "system",
27481
- addonId: null,
27482
- access: "create"
27483
- },
27484
- "webrtc.createSession": {
27485
- capName: "webrtc",
27486
- capScope: "system",
27487
- addonId: null,
27488
- access: "create"
27489
- },
27490
- "webrtc.handleAnswer": {
27491
- capName: "webrtc",
27492
- capScope: "system",
27493
- addonId: null,
27494
- access: "create"
27495
- },
27496
- "webrtc.handleOffer": {
27497
- capName: "webrtc",
27498
- capScope: "system",
27499
- addonId: null,
27500
- access: "create"
27501
- },
27502
- "webrtc.hasAdaptiveBitrate": {
27503
- capName: "webrtc",
27504
- capScope: "system",
27505
- addonId: null,
27506
- access: "view"
27507
- },
27508
- "webrtc.registerStream": {
27509
- capName: "webrtc",
27510
- capScope: "system",
27511
- addonId: null,
27512
- access: "create"
27513
- },
27514
- "webrtc.supportsStream": {
27515
- capName: "webrtc",
27516
- capScope: "system",
27517
- addonId: null,
27518
- access: "view"
27519
- },
27520
- "webrtc.unregisterStream": {
27521
- capName: "webrtc",
27522
- capScope: "system",
27523
- addonId: null,
27524
- access: "delete"
27525
- },
27526
27595
  "webrtcSession.addIceCandidate": {
27527
27596
  capName: "webrtc-session",
27528
27597
  capScope: "device",
@@ -27723,12 +27792,10 @@ var KNOWN_CAP_NAMES = [
27723
27792
  "ptz-autotrack",
27724
27793
  "reboot",
27725
27794
  "recording",
27726
- "restreamer",
27727
27795
  "script-runner",
27728
27796
  "settings-store",
27729
27797
  "smtp-provider",
27730
27798
  "snapshot",
27731
- "snapshot-provider",
27732
27799
  "sso-bridge",
27733
27800
  "storage",
27734
27801
  "storage-evictable",
@@ -27736,7 +27803,6 @@ var KNOWN_CAP_NAMES = [
27736
27803
  "stream-broker",
27737
27804
  "stream-catalog",
27738
27805
  "stream-params",
27739
- "streaming-engine",
27740
27806
  "switch",
27741
27807
  "system",
27742
27808
  "toast",
@@ -27748,7 +27814,6 @@ var KNOWN_CAP_NAMES = [
27748
27814
  "valve",
27749
27815
  "videoclips",
27750
27816
  "water-heater",
27751
- "webrtc",
27752
27817
  "webrtc-session",
27753
27818
  "zone-analytics",
27754
27819
  "zone-rules",
@@ -27856,22 +27921,18 @@ var SYSTEM_CAP_NAMES = [
27856
27921
  "plate-gallery",
27857
27922
  "platform-probe",
27858
27923
  "recording",
27859
- "restreamer",
27860
27924
  "settings-store",
27861
27925
  "smtp-provider",
27862
- "snapshot-provider",
27863
27926
  "sso-bridge",
27864
27927
  "storage",
27865
27928
  "storage-evictable",
27866
27929
  "storage-provider",
27867
27930
  "stream-broker",
27868
- "streaming-engine",
27869
27931
  "system",
27870
27932
  "toast",
27871
27933
  "turn-provider",
27872
27934
  "user-management",
27873
- "user-passkeys",
27874
- "webrtc"
27935
+ "user-passkeys"
27875
27936
  ];
27876
27937
  //#endregion
27877
27938
  //#region src/generated/scope-presets.ts
@@ -28653,7 +28714,6 @@ exports.EventSourceType = EventSourceType;
28653
28714
  exports.ExportSetupFieldSchema = ExportSetupFieldSchema;
28654
28715
  exports.ExportSetupSchema = ExportSetupSchema;
28655
28716
  exports.ExposedDeviceSchema = ExposedDeviceSchema;
28656
- exports.ExposedResourceSchema = ExposedResourceSchema;
28657
28717
  exports.ExposureModeSchema = ExposureModeSchema;
28658
28718
  exports.ExpressionEvalError = ExpressionEvalError;
28659
28719
  exports.ExpressionParseError = ExpressionParseError;
@@ -28682,6 +28742,7 @@ exports.ImageSettingsOptionsSchema = ImageSettingsOptionsSchema;
28682
28742
  exports.ImageSettingsPatchSchema = ImageSettingsPatchSchema;
28683
28743
  exports.ImageSettingsStatusSchema = ImageSettingsStatusSchema;
28684
28744
  exports.ImageStatusSchema = ImageStatusSchema;
28745
+ exports.IngestOwnerSchema = IngestOwnerSchema;
28685
28746
  exports.InstalledPackageSchema = InstalledPackageSchema;
28686
28747
  exports.IntegrationLiteSchema = IntegrationLiteSchema;
28687
28748
  exports.IntegrationWithStateSchema = IntegrationWithStateSchema;
@@ -28730,6 +28791,8 @@ exports.ModelDistributeResultSchema = ModelDistributeResultSchema;
28730
28791
  exports.ModelExtraFileSchema = ModelExtraFileSchema;
28731
28792
  exports.ModelFormatEntrySchema = ModelFormatEntrySchema;
28732
28793
  exports.ModelFormatsSchema = ModelFormatsSchema;
28794
+ exports.ModelSubstitutionSchema = ModelSubstitutionSchema;
28795
+ exports.ModelVariantGroupSchema = ModelVariantGroupSchema;
28733
28796
  exports.MotionAnalysisResultSchema = MotionAnalysisResultSchema;
28734
28797
  exports.MotionEventSchema = MotionEventSchema;
28735
28798
  exports.MotionOnMotionChangedDataSchema = MotionOnMotionChangedDataSchema;
@@ -28786,6 +28849,8 @@ exports.PipelineDefaultStepSchema = PipelineDefaultStepSchema;
28786
28849
  exports.PipelineEngineChoiceSchema = PipelineEngineChoiceSchema;
28787
28850
  exports.PipelineRunResultBridge = PipelineRunResultBridge;
28788
28851
  exports.PipelineStepInputSchema = PipelineStepInputSchema;
28852
+ exports.PipelineValidationIssueSchema = PipelineValidationIssueSchema;
28853
+ exports.PipelineValidationResultSchema = PipelineValidationResultSchema;
28789
28854
  exports.PlaceholderReasonSchema = PlaceholderReasonSchema;
28790
28855
  exports.PolygonPointSchema = PolygonPointSchema;
28791
28856
  exports.PowerMeterStatusSchema = PowerMeterStatusSchema;
@@ -28836,7 +28901,6 @@ exports.RecordingStorageModeSchema = RecordingStorageModeSchema;
28836
28901
  exports.RecordingStorageUsageSchema = RecordingStorageUsageSchema;
28837
28902
  exports.RecordingTriggersSchema = RecordingTriggersSchema;
28838
28903
  exports.RecordingWeekdaySchema = RecordingWeekdaySchema;
28839
- exports.RegisteredStreamSchema = RegisteredStreamSchema;
28840
28904
  exports.RenderedAsSchema = RenderedAsSchema;
28841
28905
  exports.ReportMotionInputSchema = ReportMotionInputSchema;
28842
28906
  exports.RingBuffer = RingBuffer;
@@ -28890,7 +28954,6 @@ exports.StorageTestLocationResultSchema = TestLocationResultSchema;
28890
28954
  exports.StorageWriteChunkInputSchema = WriteChunkInputSchema;
28891
28955
  exports.StreamCodecSchema = StreamCodecSchema;
28892
28956
  exports.StreamFormatSchema = StreamFormatSchema;
28893
- exports.StreamInfoSchema = StreamInfoSchema;
28894
28957
  exports.StreamNetworkStatsSchema = StreamNetworkStatsSchema;
28895
28958
  exports.StreamParamsOptionsSchema = StreamParamsOptionsSchema;
28896
28959
  exports.StreamParamsStatusSchema = StreamParamsStatusSchema;
@@ -28995,6 +29058,7 @@ exports.bindAddonActions = bindAddonActions;
28995
29058
  exports.brightnessCapability = brightnessCapability;
28996
29059
  exports.brokerCapability = brokerCapability;
28997
29060
  exports.buildAddonRouteProvider = buildAddonRouteProvider;
29061
+ exports.buildModelVariantGroups = buildModelVariantGroups;
28998
29062
  exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
28999
29063
  exports.buttonCapability = buttonCapability;
29000
29064
  exports.cameraCredentialsCapability = cameraCredentialsCapability;
@@ -29031,6 +29095,7 @@ exports.dayNightCapability = dayNightCapability;
29031
29095
  exports.decoderCapability = decoderCapability;
29032
29096
  exports.defaultDeviceFor = defaultDeviceFor;
29033
29097
  exports.defineCustomActions = defineCustomActions;
29098
+ exports.describeModelVariant = describeModelVariant;
29034
29099
  exports.detectionPipelineCapability = detectionPipelineCapability;
29035
29100
  exports.deviceAdoptionCapability = deviceAdoptionCapability;
29036
29101
  exports.deviceCustomAction = deviceCustomAction;
@@ -29083,10 +29148,14 @@ exports.imageSettingsCapability = imageSettingsCapability;
29083
29148
  exports.integrationsCapability = integrationsCapability;
29084
29149
  exports.intercomCapability = intercomCapability;
29085
29150
  exports.isAgentOnlyPlacement = isAgentOnlyPlacement;
29151
+ exports.isArrayOutputSchema = isArrayOutputSchema;
29086
29152
  exports.isDeployableToAgent = isDeployableToAgent;
29087
29153
  exports.isDeviceConfigCap = require_sleep.isDeviceConfigCap;
29088
29154
  exports.isEvent = require_sleep.isEvent;
29155
+ exports.isObjectInput = isObjectInput;
29156
+ exports.isVoidInput = isVoidInput;
29089
29157
  exports.jobKindSchema = jobKindSchema;
29158
+ exports.kebabToCamel = kebabToCamel;
29090
29159
  exports.lawnMowerControlCapability = lawnMowerControlCapability;
29091
29160
  exports.lifecycleJobSchema = lifecycleJobSchema;
29092
29161
  exports.lifecycleJobScopeSchema = lifecycleJobScopeSchema;
@@ -29096,6 +29165,7 @@ exports.localNetworkCapability = localNetworkCapability;
29096
29165
  exports.locationSimilarity = locationSimilarity;
29097
29166
  exports.lockControlCapability = lockControlCapability;
29098
29167
  exports.logDestinationCapability = logDestinationCapability;
29168
+ exports.looseSchema = looseSchema;
29099
29169
  exports.makeProfileBrokerId = require_sleep.makeProfileBrokerId;
29100
29170
  exports.makeSourceBrokerId = require_sleep.makeSourceBrokerId;
29101
29171
  exports.mapAudioLabelToMacro = mapAudioLabelToMacro;
@@ -29149,6 +29219,7 @@ exports.prepareNotification = prepareNotification;
29149
29219
  exports.presenceCapability = presenceCapability;
29150
29220
  exports.pressureSensorCapability = pressureSensorCapability;
29151
29221
  exports.privacyMaskCapability = privacyMaskCapability;
29222
+ exports.procedureAuthKey = procedureAuthKey;
29152
29223
  exports.ptzAutotrackCapability = ptzAutotrackCapability;
29153
29224
  exports.ptzCapability = ptzCapability;
29154
29225
  exports.pythonScriptForBackend = pythonScriptForBackend;
@@ -29168,7 +29239,7 @@ exports.resolveDeviceProfile = resolveDeviceProfile;
29168
29239
  exports.resolveFormat = resolveFormat;
29169
29240
  exports.resolveModelFormat = resolveModelFormat;
29170
29241
  exports.resolveRunnerId = resolveRunnerId;
29171
- exports.restreamerCapability = restreamerCapability;
29242
+ exports.resolveVariantModelId = resolveVariantModelId;
29172
29243
  exports.runInferenceStep = runInferenceStep;
29173
29244
  exports.runtimeDevices = runtimeDevices;
29174
29245
  exports.scopeKey = require_sleep.scopeKey;
@@ -29182,7 +29253,6 @@ exports.sleepCancellable = require_sleep.sleepCancellable;
29182
29253
  exports.smokeCapability = smokeCapability;
29183
29254
  exports.smtpProviderCapability = smtpProviderCapability;
29184
29255
  exports.snapshotCapability = snapshotCapability;
29185
- exports.snapshotProviderCapability = snapshotProviderCapability;
29186
29256
  exports.ssoBridgeCapability = ssoBridgeCapability;
29187
29257
  exports.storageCapability = storageCapability;
29188
29258
  exports.storageEvictableCapability = storageEvictableCapability;
@@ -29192,7 +29262,6 @@ exports.streamCatalogCapability = streamCatalogCapability;
29192
29262
  exports.streamParamsCapability = streamParamsCapability;
29193
29263
  exports.streamPixels = streamPixels;
29194
29264
  exports.streamQualityLabel = streamQualityLabel;
29195
- exports.streamingEngineCapability = streamingEngineCapability;
29196
29265
  exports.supportedRuntimes = supportedRuntimes;
29197
29266
  exports.switchCapability = switchCapability;
29198
29267
  exports.synthesizeSourceInfo = synthesizeSourceInfo;
@@ -29223,7 +29292,6 @@ exports.vibrationCapability = vibrationCapability;
29223
29292
  exports.videoclipsCapability = videoclipsCapability;
29224
29293
  exports.waterHeaterCapability = waterHeaterCapability;
29225
29294
  exports.weatherCapability = weatherCapability;
29226
- exports.webrtcCapability = webrtcCapability;
29227
29295
  exports.webrtcClientHintsSchema = webrtcClientHintsSchema;
29228
29296
  exports.webrtcSessionCapability = webrtcSessionCapability;
29229
29297
  exports.wiringAddonHealthSchema = wiringAddonHealthSchema;