@camstack/addon-pipeline 1.2.339 → 1.2.341

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 (34) hide show
  1. package/dist/audio-analyzer/index.js +3 -3
  2. package/dist/audio-analyzer/index.mjs +3 -3
  3. package/dist/{custom-model-catalog-BY35vysX.js → custom-model-catalog-CoJEC8nz.js} +5 -3
  4. package/dist/{custom-model-catalog-B5sCwSgr.mjs → custom-model-catalog-DNSmyZTT.mjs} +5 -3
  5. package/dist/detection-pipeline/index.js +188 -17
  6. package/dist/detection-pipeline/index.mjs +213 -42
  7. package/dist/{dist-BylL-kRe.mjs → dist-B8oPeJDI.mjs} +487 -57
  8. package/dist/{dist-BUqvRc-c.js → dist-PiNPe8uQ.js} +504 -56
  9. package/dist/{model-catalogs-DygV-lXw.js → model-catalogs-CEphd9Va.js} +1 -1
  10. package/dist/{model-catalogs-x1G07ScE.mjs → model-catalogs-RM3pkuZm.mjs} +1 -1
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-r1KgYS72.js → node-CMTBIa3-.js} +1 -1
  14. package/dist/{node-4Vnc6mbI.mjs → node-DFUmMJ_f.mjs} +1 -1
  15. package/dist/pipeline-runner/index.js +3 -3
  16. package/dist/pipeline-runner/index.mjs +3 -3
  17. package/dist/{process-memory-DOX7Esg9.mjs → process-memory-C4v8DBKn.mjs} +1 -1
  18. package/dist/{process-memory-Dr9tFNCX.js → process-memory-CzAfDP9P.js} +1 -1
  19. package/dist/recorder/index.js +12 -2
  20. package/dist/recorder/index.mjs +12 -2
  21. package/dist/{segment-demux-js-5UX_f1ey.js → segment-demux-js-C-n_ZsMK.js} +1 -1
  22. package/dist/{segment-demux-js-Brk0ORQN.mjs → segment-demux-js-CIpCdbx4.mjs} +1 -1
  23. package/dist/stream-broker/_stub.js +2 -2
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-oF4bquCk.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CIDS0Tr9.mjs} +2 -2
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BvfT5BVP.mjs +26 -0
  26. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Bt8aa0wk.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-LU_e-xJm.mjs} +1 -1
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-BOteWKrZ.mjs → hostInit-CW_cmeNQ.mjs} +2 -2
  30. package/dist/stream-broker/index.js +3 -3
  31. package/dist/stream-broker/index.mjs +3 -3
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1Y-WK-Zy.mjs +0 -26
@@ -12943,6 +12943,40 @@ var ModelFormatEntrySchema = object({
12943
12943
  revision: string().min(1).optional()
12944
12944
  });
12945
12945
  /**
12946
+ * What a node holds for one (model, format) (D746). `current` is a complete
12947
+ * copy at its catalog revision — exactly what `downloaded: true` means.
12948
+ * `stale` is bytes on disk that are not (yet) proven current under D743/D744:
12949
+ * no or a different revision record, or a missing sibling. `missing` is no
12950
+ * copy. `downloaded` alone folds `stale` into "not downloaded", which hid
12951
+ * reclaimable bytes and a copy about to be replaced.
12952
+ */
12953
+ var ModelOnDiskStateSchema = _enum([
12954
+ "current",
12955
+ "stale",
12956
+ "missing"
12957
+ ]);
12958
+ /**
12959
+ * The numeric precision of one format's BUILD (D746) — reported only when the
12960
+ * build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
12961
+ * CamStack Core ML export). Absent means "not stated", never "fp32".
12962
+ */
12963
+ var ModelFormatPrecisionSchema = _enum([
12964
+ "fp32",
12965
+ "fp16",
12966
+ "int8"
12967
+ ]);
12968
+ /**
12969
+ * One format of one model as a node's `pipelineExecutor.getSchema` reports it.
12970
+ * `onDisk` / `precision` are optional for version skew: a runner that predates
12971
+ * them omits them, and a reader falls back to `downloaded`.
12972
+ */
12973
+ var PipelineModelFormatStatusSchema = object({
12974
+ downloaded: boolean(),
12975
+ sizeMB: number(),
12976
+ onDisk: ModelOnDiskStateSchema.optional(),
12977
+ precision: ModelFormatPrecisionSchema.optional()
12978
+ });
12979
+ /**
12946
12980
  * Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
12947
12981
  * The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
12948
12982
  */
@@ -26539,7 +26573,7 @@ var FrameRefSchema = object({
26539
26573
  timestamp: number(),
26540
26574
  capturedAt: number().optional()
26541
26575
  });
26542
- var ModelFormatSchema$1 = _enum([
26576
+ var ModelFormatSchema$2 = _enum([
26543
26577
  "onnx",
26544
26578
  "coreml",
26545
26579
  "openvino",
@@ -26557,7 +26591,7 @@ var PipelineSlotSchema = _enum([
26557
26591
  var PipelineEngineChoiceSchema = object({
26558
26592
  runtime: literal("python"),
26559
26593
  backend: string(),
26560
- format: ModelFormatSchema$1,
26594
+ format: ModelFormatSchema$2,
26561
26595
  device: string().optional()
26562
26596
  });
26563
26597
  /**
@@ -26614,10 +26648,7 @@ var PipelineTemplateSchema$1 = object({
26614
26648
  var PipelineModelOptionSchema = object({
26615
26649
  id: string(),
26616
26650
  name: string(),
26617
- formats: record(string(), object({
26618
- downloaded: boolean(),
26619
- sizeMB: number()
26620
- })),
26651
+ formats: record(string(), PipelineModelFormatStatusSchema),
26621
26652
  group: ModelVariantGroupSchema.optional(),
26622
26653
  legacy: boolean().optional(),
26623
26654
  provider: ModelProviderIdSchema.optional(),
@@ -26832,6 +26863,32 @@ var pipelineExecutorCapability = {
26832
26863
  auth: "admin"
26833
26864
  }),
26834
26865
  /**
26866
+ * Auto tune (D745): the MODEL-BOUND thresholds (`bindsToModel` keys of
26867
+ * the object-detection root, and their binding keys) stored in THIS node's
26868
+ * per-camera detector settings — and, unless `dryRun`, remove them so the
26869
+ * running model's own defaults apply. Every other key of a camera's store
26870
+ * is kept. `nodeId` is the ROUTING key. `deviceIds` absent ⇒ every camera
26871
+ * with a store. A camera whose store could not be read is `refused`, never
26872
+ * reported as clean.
26873
+ */
26874
+ clearModelBoundDeviceOverrides: method(object({
26875
+ nodeId: string(),
26876
+ deviceIds: array(number()).readonly().optional(),
26877
+ dryRun: boolean()
26878
+ }), object({
26879
+ entries: array(object({
26880
+ deviceId: number(),
26881
+ keys: array(string()).readonly()
26882
+ })).readonly(),
26883
+ refused: array(object({
26884
+ deviceId: number(),
26885
+ reason: string()
26886
+ })).readonly()
26887
+ }), {
26888
+ kind: "mutation",
26889
+ auth: "admin"
26890
+ }),
26891
+ /**
26835
26892
  * Which of THIS node's inference devices the executor currently refuses,
26836
26893
  * and why. `nodeId` is the ROUTING key (stripped by the generated router).
26837
26894
  *
@@ -26926,12 +26983,12 @@ var pipelineExecutorCapability = {
26926
26983
  downloadModel: method(object({
26927
26984
  addonId: string(),
26928
26985
  modelId: string(),
26929
- format: ModelFormatSchema$1
26986
+ format: ModelFormatSchema$2
26930
26987
  }), DownloadModelResultSchema, { kind: "mutation" }),
26931
26988
  deleteModel: method(object({
26932
26989
  addonId: string(),
26933
26990
  modelId: string(),
26934
- format: ModelFormatSchema$1
26991
+ format: ModelFormatSchema$2
26935
26992
  }), object({ success: literal(true) }), { kind: "mutation" }),
26936
26993
  /**
26937
26994
  * Stateless single-frame execution. Callers (runner, benchmark) pass
@@ -27177,6 +27234,352 @@ var pipelineExecutorCapability = {
27177
27234
  getDetectionConfigSchema: method(_void(), ConfigUISchemaNullableBridge)
27178
27235
  }
27179
27236
  };
27237
+ /**
27238
+ * Wire shapes of the Load balancing surface (D748): the session placement
27239
+ * policy, the atomic share write, the observed placement statistics, the
27240
+ * hardware share suggestion and the stale device pins.
27241
+ */
27242
+ /**
27243
+ * How a new detection session picks its node and device.
27244
+ * - `least-loaded` — the historical rule: lowest `attached / weight`, a
27245
+ * constant node order at a tie (D37). An idle node always ties at 0, so a
27246
+ * weight only bites once a node already holds a session.
27247
+ * - `share` — the share of PARALLEL sessions is held to the weights, and a
27248
+ * full or drowning node yields to a free one (D748).
27249
+ */
27250
+ var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
27251
+ var LoadBalancingSharesInputSchema = object({
27252
+ /** nodeId → share (> 0). A node left out keeps its weight. */
27253
+ nodes: record(string(), number().positive()).default({}),
27254
+ /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
27255
+ devices: record(string(), record(string(), number().positive())).default({})
27256
+ });
27257
+ var PlacementStatsInputSchema = object({
27258
+ /** Window the observed shares are averaged over (default 1 h, max 24 h). */
27259
+ windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
27260
+ var PlacementDeviceStatsSchema = object({
27261
+ deviceKey: string(),
27262
+ /** Sessions running on this device now. */
27263
+ sessionsNow: number(),
27264
+ /** Sessions started on this device inside the window. */
27265
+ sessionsStarted: number(),
27266
+ /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
27267
+ observedShare: number().nullable()
27268
+ });
27269
+ var PlacementNodeStatsSchema = object({
27270
+ nodeId: string(),
27271
+ sessionsNow: number(),
27272
+ sessionsStarted: number(),
27273
+ /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
27274
+ observedShare: number().nullable(),
27275
+ /** Most sessions this node ran at once inside the window. */
27276
+ peakSessions: number(),
27277
+ /** Sessions a share election handed elsewhere because this node was full or drowning. */
27278
+ yieldsAway: number(),
27279
+ devices: array(PlacementDeviceStatsSchema).readonly()
27280
+ });
27281
+ /** A camera's device pin that the session path cannot honour. */
27282
+ var StaleDevicePinSchema = object({
27283
+ deviceId: number(),
27284
+ deviceKey: string(),
27285
+ /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
27286
+ reason: _enum(["disabled", "absent"])
27287
+ });
27288
+ var PlacementStatsSchema = object({
27289
+ policy: SessionPlacementPolicySchema,
27290
+ windowMs: number(),
27291
+ /** How much of the window was actually observed (the hub keeps it in memory). */
27292
+ observedForMs: number(),
27293
+ sessionsNow: number(),
27294
+ /** Most parallel sessions across the cluster inside the window. */
27295
+ clusterPeakSessions: number(),
27296
+ nodes: array(PlacementNodeStatsSchema).readonly(),
27297
+ stalePins: array(StaleDevicePinSchema).readonly()
27298
+ });
27299
+ var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
27300
+ var SuggestedDeviceShareSchema = object({
27301
+ deviceKey: string(),
27302
+ /** Share of the node (0–100, rounded). */
27303
+ share: number(),
27304
+ modelId: string().nullable(),
27305
+ /** Inferences per second at that model, from the measured table. */
27306
+ fps: number().nullable(),
27307
+ measured: boolean(),
27308
+ /** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
27309
+ suggestedMaxSessions: number().nullable()
27310
+ });
27311
+ var SuggestedNodeShareSchema = object({
27312
+ nodeId: string(),
27313
+ /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
27314
+ share: number().nullable(),
27315
+ /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
27316
+ capacitySessions: number(),
27317
+ devices: array(SuggestedDeviceShareSchema).readonly(),
27318
+ skippedReason: string().nullable()
27319
+ });
27320
+ var SuggestSharesResultSchema = object({
27321
+ headroom: number(),
27322
+ /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
27323
+ cameraFps: number(),
27324
+ /** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
27325
+ iterations: number(),
27326
+ nodes: array(SuggestedNodeShareSchema).readonly()
27327
+ });
27328
+ /**
27329
+ * Where the node and device shares come from (D750).
27330
+ * - `auto` — computed by the system from the cluster's measured capacity at
27331
+ * the Auto tune models, and recomputed whenever a node or device joins,
27332
+ * leaves, is switched on or off, or changes model.
27333
+ * - `manual` — the operator's stored sliders. A node or device that cannot
27334
+ * take sessions gives its share to the others in proportion; the stored
27335
+ * values are never rewritten for that.
27336
+ */
27337
+ var ShareSourceSchema = _enum(["auto", "manual"]);
27338
+ var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
27339
+ object({
27340
+ nodes: record(string(), number()),
27341
+ devices: record(string(), record(string(), number()))
27342
+ });
27343
+ var EffectiveDeviceShareSchema = object({
27344
+ deviceKey: string(),
27345
+ /** Can take sessions now (enabled, available, can run the root). */
27346
+ eligible: boolean(),
27347
+ /** The share the source assigns, as a percentage of the node's devices. */
27348
+ configuredPct: number(),
27349
+ /** The share actually used, after an ineligible device's share went to the others. */
27350
+ effectivePct: number()
27351
+ });
27352
+ var EffectiveNodeShareSchema = object({
27353
+ nodeId: string(),
27354
+ eligible: boolean(),
27355
+ configuredPct: number(),
27356
+ effectivePct: number(),
27357
+ devices: array(EffectiveDeviceShareSchema).readonly()
27358
+ });
27359
+ var EffectiveSharesSchema = object({
27360
+ source: ShareSourceSchema,
27361
+ policy: SessionPlacementPolicySchema,
27362
+ /** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
27363
+ autoPending: boolean(),
27364
+ /** When the automatic shares were last computed (ms epoch); null = never. */
27365
+ computedAt: number().nullable(),
27366
+ /** What made the system recompute them last. */
27367
+ trigger: string().nullable(),
27368
+ nodes: array(EffectiveNodeShareSchema).readonly(),
27369
+ /** The relative weights the election reads (before eligibility). */
27370
+ nodeWeights: record(string(), number()),
27371
+ deviceWeights: record(string(), record(string(), number()))
27372
+ });
27373
+ /**
27374
+ * The wire shapes of the Auto tune plan and apply (D745), used by the
27375
+ * `pipeline-orchestrator` cap. The recommender's own types
27376
+ * (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
27377
+ * schemas are what crosses the cap boundary.
27378
+ */
27379
+ var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
27380
+ var HardwareClassIdSchema = _enum([
27381
+ "intel-core-ultra",
27382
+ "intel-n-series",
27383
+ "apple-m-base",
27384
+ "apple-m-pro",
27385
+ "unknown"
27386
+ ]);
27387
+ var AcceleratorKindSchema = _enum([
27388
+ "intel-npu",
27389
+ "intel-igpu",
27390
+ "x86-cpu",
27391
+ "arm-cpu",
27392
+ "apple-ane",
27393
+ "coral"
27394
+ ]);
27395
+ var RecommendationReasonSchema = discriminatedUnion("kind", [
27396
+ object({
27397
+ kind: literal("fits"),
27398
+ utilisation: number()
27399
+ }),
27400
+ object({
27401
+ kind: literal("tie-faster"),
27402
+ over: string(),
27403
+ recallDelta: number()
27404
+ }),
27405
+ object({
27406
+ kind: literal("stepped-down"),
27407
+ from: string(),
27408
+ to: string(),
27409
+ limitedBy: string()
27410
+ }),
27411
+ object({
27412
+ kind: literal("no-fit-lightest"),
27413
+ utilisation: number()
27414
+ }),
27415
+ object({
27416
+ kind: literal("derived-latency"),
27417
+ modelId: string()
27418
+ }),
27419
+ object({
27420
+ kind: literal("estimated-load"),
27421
+ observedForMs: number().nullable()
27422
+ }),
27423
+ object({ kind: literal("cpu-device") }),
27424
+ object({ kind: literal("coral-untouched") }),
27425
+ object({ kind: literal("device-disabled") }),
27426
+ object({ kind: literal("device-unavailable") }),
27427
+ object({ kind: literal("node-offline") }),
27428
+ object({ kind: literal("no-hardware-facts") }),
27429
+ object({
27430
+ kind: literal("no-measured-data"),
27431
+ hardwareClass: HardwareClassIdSchema
27432
+ }),
27433
+ object({
27434
+ kind: literal("no-family-build"),
27435
+ format: ModelFormatSchema$1
27436
+ })
27437
+ ]);
27438
+ var DeviceDemandSchema = object({
27439
+ nodeId: string(),
27440
+ deviceKey: string(),
27441
+ demandFps: number(),
27442
+ maxCameraFps: number(),
27443
+ alwaysOnCameras: number(),
27444
+ onMotionSessions: number(),
27445
+ onMotionSource: _enum([
27446
+ "observed-24h",
27447
+ "estimate",
27448
+ "none"
27449
+ ]),
27450
+ observedForMs: number().nullable(),
27451
+ /** How on-motion sessions were charged: per-device observation, or split by share (D748). */
27452
+ placement: SessionPlacementPolicySchema
27453
+ });
27454
+ var DeviceModelChoiceSchema = object({
27455
+ modelId: string(),
27456
+ p50Ms: number(),
27457
+ fps: number(),
27458
+ measured: boolean(),
27459
+ utilisation: number(),
27460
+ personRecall: number()
27461
+ });
27462
+ var DeviceRecommendationSchema = object({
27463
+ deviceKey: string(),
27464
+ accelerator: AcceleratorKindSchema.nullable(),
27465
+ enabled: boolean(),
27466
+ available: boolean(),
27467
+ demand: DeviceDemandSchema.nullable(),
27468
+ chosen: DeviceModelChoiceSchema.nullable(),
27469
+ reasons: array(RecommendationReasonSchema).readonly()
27470
+ });
27471
+ var NodeRecommendationSchema = object({
27472
+ nodeId: string(),
27473
+ reachable: boolean(),
27474
+ hardwareClass: HardwareClassIdSchema.nullable(),
27475
+ cpuModel: string().nullable(),
27476
+ skipped: boolean(),
27477
+ acceleratorModelId: string().nullable(),
27478
+ devices: array(DeviceRecommendationSchema).readonly(),
27479
+ reasons: array(RecommendationReasonSchema).readonly()
27480
+ });
27481
+ var ModelPinChangeSchema = object({
27482
+ stepId: string(),
27483
+ before: string().nullable(),
27484
+ after: string().nullable()
27485
+ });
27486
+ var NodeDeviceChangeSchema = object({
27487
+ nodeId: string(),
27488
+ deviceKey: string(),
27489
+ madeExplicit: boolean(),
27490
+ modelPins: array(ModelPinChangeSchema).readonly(),
27491
+ thresholds: array(object({
27492
+ stepId: string(),
27493
+ keys: array(string()).readonly()
27494
+ })).readonly()
27495
+ });
27496
+ var CameraOverrideClearSchema = object({
27497
+ deviceId: number(),
27498
+ source: _enum(["step-override", "wholesale"]),
27499
+ nodeId: string(),
27500
+ deviceKey: string().nullable(),
27501
+ stepId: string(),
27502
+ modelIdBefore: string().nullable(),
27503
+ keys: array(string()).readonly()
27504
+ });
27505
+ var DetectorStoreClearSchema = object({
27506
+ deviceId: number(),
27507
+ keys: array(string()).readonly()
27508
+ });
27509
+ var AutoTuneWarningSchema = discriminatedUnion("kind", [
27510
+ object({
27511
+ kind: literal("detector-store-cluster-wide"),
27512
+ skippedNodes: array(string()).readonly()
27513
+ }),
27514
+ object({
27515
+ kind: literal("detector-store-unreadable"),
27516
+ error: string()
27517
+ }),
27518
+ object({
27519
+ kind: literal("coral-enabled"),
27520
+ nodeId: string(),
27521
+ deviceKey: string()
27522
+ })
27523
+ ]);
27524
+ var AutoTuneOptionsSchema = object({
27525
+ /** Share of each accelerator's throughput kept free (0.3–0.5). */
27526
+ headroom: number().min(.3).max(.5).default(.4),
27527
+ /**
27528
+ * What-if shares (D748): plan as if these node/device shares were stored
27529
+ * and the policy were `share`. Absent = the stored shares under the stored
27530
+ * policy. A what-if plan is for display; apply always re-plans from what
27531
+ * is stored.
27532
+ */
27533
+ shares: LoadBalancingSharesInputSchema.optional()
27534
+ });
27535
+ var AutoTunePlanSchema = object({
27536
+ /** Hash of everything the apply will write — the apply refuses a different one. */
27537
+ planHash: string(),
27538
+ family: literal("yolov9"),
27539
+ headroom: number(),
27540
+ /** Planned under what-if shares (D748): for display — apply refuses it as stale. */
27541
+ whatIf: boolean(),
27542
+ generatedAt: number(),
27543
+ nodes: array(NodeRecommendationSchema).readonly(),
27544
+ nodeChanges: array(NodeDeviceChangeSchema).readonly(),
27545
+ cameraClears: array(CameraOverrideClearSchema).readonly(),
27546
+ detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
27547
+ warnings: array(AutoTuneWarningSchema).readonly()
27548
+ });
27549
+ var AutoTuneApplyInputSchema = object({
27550
+ planHash: string(),
27551
+ headroom: number().min(.3).max(.5).default(.4)
27552
+ });
27553
+ var AutoTunePhaseResultSchema = object({
27554
+ phase: _enum([
27555
+ "download",
27556
+ "camera-overrides",
27557
+ "detector-thresholds",
27558
+ "node-models",
27559
+ "redispatch"
27560
+ ]),
27561
+ ok: boolean(),
27562
+ detail: string()
27563
+ });
27564
+ var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
27565
+ object({
27566
+ kind: literal("applied"),
27567
+ planHash: string(),
27568
+ phases: array(AutoTunePhaseResultSchema).readonly()
27569
+ }),
27570
+ object({
27571
+ kind: literal("aborted"),
27572
+ phases: array(AutoTunePhaseResultSchema).readonly()
27573
+ }),
27574
+ object({
27575
+ kind: literal("stale"),
27576
+ plan: AutoTunePlanSchema
27577
+ }),
27578
+ object({
27579
+ kind: literal("refused"),
27580
+ reason: _enum(["apply-in-progress"])
27581
+ })
27582
+ ]);
27180
27583
  object({
27181
27584
  activeCameras: number(),
27182
27585
  throttledCameras: number(),
@@ -28549,7 +28952,6 @@ var CameraStepOverridePatchSchema = object({
28549
28952
  settings: record(string(), unknown()).readonly().optional()
28550
28953
  });
28551
28954
  var CameraPipelineSettingsSchema = object({
28552
- pinnedAgentNodeId: string().optional(),
28553
28955
  stepToggles: record(string(), boolean()).optional(),
28554
28956
  stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
28555
28957
  pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
@@ -29048,12 +29450,6 @@ method(object({
29048
29450
  }), object({ success: literal(true) }), {
29049
29451
  kind: "mutation",
29050
29452
  auth: "admin"
29051
- }), method(object({
29052
- agentNodeId: string(),
29053
- detectWeight: number().positive().nullable()
29054
- }), object({ success: literal(true) }), {
29055
- kind: "mutation",
29056
- auth: "admin"
29057
29453
  }), method(object({
29058
29454
  agentNodeId: string(),
29059
29455
  detect: boolean().nullable().optional(),
@@ -29095,6 +29491,15 @@ method(object({
29095
29491
  }), {
29096
29492
  kind: "mutation",
29097
29493
  auth: "admin"
29494
+ }), method(AutoTuneOptionsSchema, AutoTunePlanSchema, { auth: "admin" }), method(AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, {
29495
+ kind: "mutation",
29496
+ auth: "admin"
29497
+ }), method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
29498
+ kind: "mutation",
29499
+ auth: "admin"
29500
+ }), method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }), method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }), method(_void(), EffectiveSharesSchema, { auth: "admin" }), method(SetShareSourceInputSchema, object({ success: literal(true) }), {
29501
+ kind: "mutation",
29502
+ auth: "admin"
29098
29503
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
29099
29504
  deviceId: number(),
29100
29505
  addonId: string(),
@@ -41168,6 +41573,8 @@ Object.freeze({
41168
41573
  vehicle: .65,
41169
41574
  animal: .65
41170
41575
  });
41576
+ var HF_REPO = "camstack/camstack-models";
41577
+ `${HF_REPO}`;
41171
41578
  /**
41172
41579
  * Accessory device helpers — shared across drivers.
41173
41580
  *
@@ -45704,6 +46111,12 @@ Object.freeze({
45704
46111
  addonId: null,
45705
46112
  access: "delete"
45706
46113
  },
46114
+ "pipelineExecutor.clearModelBoundDeviceOverrides": {
46115
+ capName: "pipeline-executor",
46116
+ capScope: "system",
46117
+ addonId: null,
46118
+ access: "delete"
46119
+ },
45707
46120
  "pipelineExecutor.deleteModel": {
45708
46121
  capName: "pipeline-executor",
45709
46122
  capScope: "system",
@@ -45920,6 +46333,12 @@ Object.freeze({
45920
46333
  addonId: null,
45921
46334
  access: "view"
45922
46335
  },
46336
+ "pipelineOrchestrator.applyAutoTune": {
46337
+ capName: "pipeline-orchestrator",
46338
+ capScope: "system",
46339
+ addonId: null,
46340
+ access: "create"
46341
+ },
45923
46342
  "pipelineOrchestrator.applyDeviceSettingsPatch": {
45924
46343
  capName: "pipeline-orchestrator",
45925
46344
  capScope: "system",
@@ -46034,6 +46453,12 @@ Object.freeze({
46034
46453
  addonId: null,
46035
46454
  access: "view"
46036
46455
  },
46456
+ "pipelineOrchestrator.getEffectiveShares": {
46457
+ capName: "pipeline-orchestrator",
46458
+ capScope: "system",
46459
+ addonId: null,
46460
+ access: "view"
46461
+ },
46037
46462
  "pipelineOrchestrator.getGlobalMetrics": {
46038
46463
  capName: "pipeline-orchestrator",
46039
46464
  capScope: "system",
@@ -46070,6 +46495,12 @@ Object.freeze({
46070
46495
  addonId: null,
46071
46496
  access: "view"
46072
46497
  },
46498
+ "pipelineOrchestrator.getPlacementStats": {
46499
+ capName: "pipeline-orchestrator",
46500
+ capScope: "system",
46501
+ addonId: null,
46502
+ access: "view"
46503
+ },
46073
46504
  "pipelineOrchestrator.getReconcileFromDiskStatus": {
46074
46505
  capName: "pipeline-orchestrator",
46075
46506
  capScope: "system",
@@ -46094,6 +46525,12 @@ Object.freeze({
46094
46525
  addonId: null,
46095
46526
  access: "create"
46096
46527
  },
46528
+ "pipelineOrchestrator.planAutoTune": {
46529
+ capName: "pipeline-orchestrator",
46530
+ capScope: "system",
46531
+ addonId: null,
46532
+ access: "view"
46533
+ },
46097
46534
  "pipelineOrchestrator.rebalance": {
46098
46535
  capName: "pipeline-orchestrator",
46099
46536
  capScope: "system",
@@ -46154,12 +46591,6 @@ Object.freeze({
46154
46591
  addonId: null,
46155
46592
  access: "create"
46156
46593
  },
46157
- "pipelineOrchestrator.setAgentDetectWeight": {
46158
- capName: "pipeline-orchestrator",
46159
- capScope: "system",
46160
- addonId: null,
46161
- access: "create"
46162
- },
46163
46594
  "pipelineOrchestrator.setAgentInferenceDevices": {
46164
46595
  capName: "pipeline-orchestrator",
46165
46596
  capScope: "system",
@@ -46214,12 +46645,30 @@ Object.freeze({
46214
46645
  addonId: null,
46215
46646
  access: "create"
46216
46647
  },
46648
+ "pipelineOrchestrator.setLoadBalancingShares": {
46649
+ capName: "pipeline-orchestrator",
46650
+ capScope: "system",
46651
+ addonId: null,
46652
+ access: "create"
46653
+ },
46217
46654
  "pipelineOrchestrator.setPipelineDevicePin": {
46218
46655
  capName: "pipeline-orchestrator",
46219
46656
  capScope: "system",
46220
46657
  addonId: null,
46221
46658
  access: "create"
46222
46659
  },
46660
+ "pipelineOrchestrator.setShareSource": {
46661
+ capName: "pipeline-orchestrator",
46662
+ capScope: "system",
46663
+ addonId: null,
46664
+ access: "create"
46665
+ },
46666
+ "pipelineOrchestrator.suggestShares": {
46667
+ capName: "pipeline-orchestrator",
46668
+ capScope: "system",
46669
+ addonId: null,
46670
+ access: "view"
46671
+ },
46223
46672
  "pipelineOrchestrator.unassignAudio": {
46224
46673
  capName: "pipeline-orchestrator",
46225
46674
  capScope: "system",
@@ -51516,6 +51965,11 @@ Object.freeze({
51516
51965
  form: "single",
51517
51966
  optional: false
51518
51967
  }],
51968
+ "pipelineExecutor.clearModelBoundDeviceOverrides": [{
51969
+ name: "deviceIds",
51970
+ form: "array",
51971
+ optional: true
51972
+ }],
51519
51973
  "pipelineExecutor.runPipeline": [{
51520
51974
  name: "deviceId",
51521
51975
  form: "single",
@@ -53422,41 +53876,6 @@ function stepModelRunsOnFormat(models, modelId, format) {
53422
53876
  }
53423
53877
  return models.some((m) => m.legacy !== true && hasBuild(m, format));
53424
53878
  }
53425
- /**
53426
- * Model-bound step settings (D738): an operator value that is only meaningful
53427
- * for ONE model, stored together with that model's id.
53428
- *
53429
- * The per-class confidence floors are the case it exists for. A score is a
53430
- * property of one detector's output scale — on this hub the median score of a
53431
- * correct person was 0.78 on `yolov9m-320-int8`, 0.68 on `yolo26s-320-int8`,
53432
- * 0.40 on `yolo26n-320-int8` and 0.89 on `yolo26s` (640) — so a floor tuned on
53433
- * one model is wrong on the next. The DEFAULT of such a field belongs to the
53434
- * model (the catalog entry); an operator OVERRIDE belongs to the model it was
53435
- * made for.
53436
- *
53437
- * The binding is checked at READ time against the model that RUNS, never
53438
- * enforced by a write on the model-change path: a model can change without any
53439
- * operator write at all (an unpinned root follows the elected device's
53440
- * hardware-aware default, D736), and an event-driven reset could be dropped
53441
- * (events are telemetry, D8/D11). So:
53442
- *
53443
- * effective = override when the stored binding names the running model
53444
- * | override when no binding is stored (a legacy / programmatic
53445
- * value — it applies to whatever runs, as before D738)
53446
- * | the running model's default, when it declares one
53447
- * | the field's global default.
53448
- *
53449
- * Storage shape: the value stays a plain number under its own key (every
53450
- * reader of the raw settings bag keeps working), and the binding is a SIBLING
53451
- * key, {@link modelBindingKey}. Both are flat so the shallow per-key merges of
53452
- * the settings layers (node fold, camera override) carry a value and its
53453
- * binding together whenever one layer writes both — which every writer here
53454
- * does.
53455
- *
53456
- * Lives in the bare `@camstack/types` entry, which every addon bundles, so the
53457
- * runner (`addon-pipeline`) and the editors (`ui-library`, `addon-admin-ui`)
53458
- * apply the same rule.
53459
- */
53460
53879
  /** Suffix of the sibling key that names the model a stored value was made for. */
53461
53880
  var MODEL_BINDING_SUFFIX = "ModelId";
53462
53881
  /** `minConfidencePerson` → `minConfidencePersonModelId`. */
@@ -53516,6 +53935,17 @@ function applyModelBoundSettings(settings, boundKeys, runningModelId) {
53516
53935
  }
53517
53936
  return out;
53518
53937
  }
53938
+ /**
53939
+ * The keys of every `bindsToModel` field of a step's config schema, groups
53940
+ * flattened (D738). One definition for the runner (which applies the binding)
53941
+ * and the orchestrator's Auto tune (which clears those overrides, D745).
53942
+ */
53943
+ function collectModelBoundKeys(fields) {
53944
+ return fields.flatMap((field) => {
53945
+ if (field.type === "group") return collectModelBoundKeys(field.fields);
53946
+ return "key" in field && "bindsToModel" in field && field.bindsToModel === true ? [field.key] : [];
53947
+ });
53948
+ }
53519
53949
  /** Side of the square, as a multiple of the face box's longer side. */
53520
53950
  var ROOT_FACE_REFINE_SCALE = 1.6;
53521
53951
  /**
@@ -54734,4 +55164,4 @@ function enumerateInferenceDevices(hw) {
54734
55164
  return out;
54735
55165
  }
54736
55166
  //#endregion
54737
- export { cameraStreamsCapability as $, string as $n, resolveEgressDecodeHwAccel as $t, NativeLeaseSettingsSchema as A, createEvent as An, logChannelsCapability as At, RecordingSignalStatusSchema as B, parseProfileBrokerId as Bn, parseProcStatus as Bt, EncodeProfileSchema as C, DeviceType as Cn, gifFromMp4Args as Ct, LABEL_SUPPLY_MACRO as D, CAM_PROFILE_ORDER as Dn, linkedLabelStepId as Dt, G711_SCALE_CORRECTION_DB as E, BaseAddon as En, isFirstLevelMacroClass as Et, RECORDING_EXPORT_MAX_READ_BYTES as F, isEvent as Fn, memoizePinnedFfmpeg as Ft, addonWidgetsSourceCapability as G, boolean as Gn, pipelineRunnerCapability as Gt, VIDEOCLIPS_MAX_OFFER_BYTES as H, sleep as Hn, pickDetailCropConvention as Ht, RECORDING_SOURCE_CAMSTACK as I, makeProfileBrokerId as In, migrateLegacyDeviceSignalConfig as It, audioAnalysisCapability as J, literal as Jn, recordingCapability as Jt, allowedSuppliedEffect as K, discriminatedUnion as Kn, rankStreams as Kt, RECORDING_SOURCE_CAMSTACK_ADDON as L, makeSourceBrokerId as Ln, modeMayWrite as Lt, PoolMemoryWatchdog as M, defineCustomActions as Mn, maskUrlCredentials as Mt, RATE_CONTROL_RELAXED as N, expandAudioChunkToF32le as Nn, mayReadLocation as Nt, LABEL_SUPPLY_VOCABULARIES as O, CamProfileSchema as On, linkedStepOf as Ot, RATE_CONTROL_TIGHT as P, hydrateSchema as Pn, mayWriteToLocation as Pt, cameraOwnsMotionViaSensor as Q, record as Qn, resolveCreateExportSubject as Qt, ROOT_SUPPLIABLE_STEP_IDS as R, nodePin as Rn, motionDetectionCapability as Rt, EVENT_PAD_MS as S, DeviceFeature as Sn, gifDeriveSpeed as St, FailureCounters as T, BOOT_RECOVERY_BACKOFF_MS as Tn, inferModelProvider as Tt, VISIT_MERGE_GAP_MS as U, _enum as Un, pickNativeLeaseOverride as Ut, RingBuffer as V, selectAssignedProfileSlots as Vn, pickClusterStepSettings as Vt, YAMNET_TO_MACRO as W, array as Wn, pipelineExecutorCapability as Wt, audioKindId as X, object as Xn, recordingSignalCapability as Xt, audioAnalyzerCapability as Y, number as Yn, recordingExportCapability as Yt, batteryCapability as Z, preprocess as Zn, resolveClusterStepModelId as Zt, DEFAULT_DETAIL_CROP_CONVENTION as _, Fmp4BoxSplitter as _n, evictionPolicyOfLocation as _t, BackgroundRunRegistry as a, rootSuppliesOf as an, declareLogChannel as at, DEVICE_BACKEND_TO_FORMAT as b, invocationFromEncodeProfile as bn, ffmpegRate as bt, CLIP_STILL_REASON_CODE_HEADER as c, storageEvictableCapability as cn, deriveDetailCropRect as ct, CLUSTER_MODEL_SCOPED_STEPS as d, stripRetiredBandPreBufferSec as dn, detectionPipelineCapability as dt, resolveLocationMode as en, union as er, clipExportFailure as et, COCO_80_LABELS as f, supportedRuntimes as fn, egressTranscodeSharingKey as ft, DEFAULT_CLUSTER_STEP_SETTINGS as g, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as gn, evictionPolicyForMode as gt, DEFAULT_AUDIO_ANALYZER_CONFIG as h, AUDIO_PRESETS as hn, evaluateZoneRules as ht, AUDIO_MACRO_LABELS as i, resolveRootSupply as in, createLogChannelsProvider as it, OpsLogEntrySchema as j, customAction as jn, mapAudioLabelToMacro as jt, NativeLeaseAdmissionSchema as k, audioChunkBytesPerSample as kn, loadContributionCapability as kt, CLIP_STILL_REASON_HEADER as l, storageOccupancyCapability as ln, deriveRecordingMode as lt, CROP_SUPPLY_SOURCES as m, webrtcSessionCapability as mn, enumerateInferenceDevices as mt, APPLE_SA_TO_MACRO as n, resolvePoolMemoryPolicy as nn, containingParentIndex as nt, BatteryStatusSchema as o, runtimeDevices as on, defaultDeviceFor as ot, COCO_TO_MACRO as p, videoclipsCapability as pn, egressTransportFromRequest as pt, applyModelBoundSettings as q, lazy as qn, recordingArchiveCapability as qt, AUDIO_BACKEND_CHOICES as r, resolveRecordingProfiles as rn, createHwAccelCache as rt, CLIP_BROKER_PACED_RATES as s, stepModelRunsOnFormat as sn, deriveBatteryPresence as st, APPEARANCE_BLOCKS as t, resolveModelBoundSetting as tn, EventCategory as tr, clipExportFailureOf as tt, CLIP_STREAM_TRANSPORT_HEADER as u, streamBrokerCapability as un, deriveRootFaceRefineRect as ut, DEFAULT_EVENTS_BAND_BUFFER_SEC as v, buildFfmpegArgs as vn, exportSubjectOf as vt, ExportRecordSchema as w, errMsg as wn, hfModelUrl as wt, EVENT_OWNER_TYPES as x, isSoftwareDecode as xn, gbToBytes as xt, DEFAULT_NATIVE_LEASE_SETTINGS as y, evaluateSensorEdge as yn, failureContributionCapability as yt, RecordingConfigSchema as z, parseJsonUnknown as zn, overlayClusterStepSettings as zt };
55167
+ export { cameraOwnsMotionViaSensor as $, object as $n, recordingSignalCapability as $t, NativeLeaseAdmissionSchema as A, CAM_PROFILE_ORDER as An, linkedStepOf as At, RecordingConfigSchema as B, makeSourceBrokerId as Bn, modelBindingKey as Bt, EncodeProfileSchema as C, invocationFromEncodeProfile as Cn, gbToBytes as Ct, HF_REPO as D, errMsg as Dn, inferModelProvider as Dt, G711_SCALE_CORRECTION_DB as E, DeviceType as En, hfModelUrl as Et, RATE_CONTROL_TIGHT as F, defineCustomActions as Fn, mayReadLocation as Ft, YAMNET_TO_MACRO as G, sleep as Gn, pickDetailCropConvention as Gt, RingBuffer as H, parseJsonUnknown as Hn, overlayClusterStepSettings as Ht, RECORDING_EXPORT_MAX_READ_BYTES as I, expandAudioChunkToF32le as In, mayWriteToLocation as It, applyModelBoundSettings as J, boolean as Jn, pipelineRunnerCapability as Jt, addonWidgetsSourceCapability as K, _enum as Kn, pickNativeLeaseOverride as Kt, RECORDING_SOURCE_CAMSTACK as L, hydrateSchema as Ln, memoizePinnedFfmpeg as Lt, OpsLogEntrySchema as M, audioChunkBytesPerSample as Mn, logChannelsCapability as Mt, PoolMemoryWatchdog as N, createEvent as Nn, mapAudioLabelToMacro as Nt, LABEL_SUPPLY_MACRO as O, BOOT_RECOVERY_BACKOFF_MS as On, isFirstLevelMacroClass as Ot, RATE_CONTROL_RELAXED as P, customAction as Pn, maskUrlCredentials as Pt, batteryCapability as Q, number as Qn, recordingExportCapability as Qt, RECORDING_SOURCE_CAMSTACK_ADDON as R, isEvent as Rn, migrateLegacyDeviceSignalConfig as Rt, EVENT_PAD_MS as S, evaluateSensorEdge as Sn, ffmpegRate as St, FailureCounters as T, DeviceFeature as Tn, gifFromMp4Args as Tt, VIDEOCLIPS_MAX_OFFER_BYTES as U, parseProfileBrokerId as Un, parseProcStatus as Ut, RecordingSignalStatusSchema as V, nodePin as Vn, motionDetectionCapability as Vt, VISIT_MERGE_GAP_MS as W, selectAssignedProfileSlots as Wn, pickClusterStepSettings as Wt, audioAnalyzerCapability as X, lazy as Xn, recordingArchiveCapability as Xt, audioAnalysisCapability as Y, discriminatedUnion as Yn, rankStreams as Yt, audioKindId as Z, literal as Zn, recordingCapability as Zt, DEFAULT_DETAIL_CROP_CONVENTION as _, webrtcSessionCapability as _n, evaluateZoneRules as _t, BackgroundRunRegistry as a, resolvePoolMemoryPolicy as an, createHwAccelCache as at, DEVICE_BACKEND_TO_FORMAT as b, Fmp4BoxSplitter as bn, exportSubjectOf as bt, CLIP_STILL_REASON_CODE_HEADER as c, rootSuppliesOf as cn, defaultDeviceFor as ct, CLUSTER_MODEL_SCOPED_STEPS as d, storageEvictableCapability as dn, deriveRecordingMode as dt, resolveClusterStepModelId as en, preprocess as er, cameraStreamsCapability as et, COCO_80_LABELS as f, storageOccupancyCapability as fn, deriveRootFaceRefineRect as ft, DEFAULT_CLUSTER_STEP_SETTINGS as g, videoclipsCapability as gn, enumerateInferenceDevices as gt, DEFAULT_AUDIO_ANALYZER_CONFIG as h, supportedRuntimes as hn, egressTransportFromRequest as ht, AUDIO_MACRO_LABELS as i, resolveModelBoundSetting as in, EventCategory as ir, containingParentIndex as it, NativeLeaseSettingsSchema as j, CamProfileSchema as jn, loadContributionCapability as jt, LABEL_SUPPLY_VOCABULARIES as k, BaseAddon as kn, linkedLabelStepId as kt, CLIP_STILL_REASON_HEADER as l, runtimeDevices as ln, deriveBatteryPresence as lt, CROP_SUPPLY_SOURCES as m, stripRetiredBandPreBufferSec as mn, egressTranscodeSharingKey as mt, APPLE_SA_TO_MACRO as n, resolveEgressDecodeHwAccel as nn, string as nr, clipExportFailureOf as nt, BatteryStatusSchema as o, resolveRecordingProfiles as on, createLogChannelsProvider as ot, COCO_TO_MACRO as p, streamBrokerCapability as pn, detectionPipelineCapability as pt, allowedSuppliedEffect as q, array as qn, pipelineExecutorCapability as qt, AUDIO_BACKEND_CHOICES as r, resolveLocationMode as rn, union as rr, collectModelBoundKeys as rt, CLIP_BROKER_PACED_RATES as s, resolveRootSupply as sn, declareLogChannel as st, APPEARANCE_BLOCKS as t, resolveCreateExportSubject as tn, record as tr, clipExportFailure as tt, CLIP_STREAM_TRANSPORT_HEADER as u, stepModelRunsOnFormat as un, deriveDetailCropRect as ut, DEFAULT_EVENTS_BAND_BUFFER_SEC as v, AUDIO_PRESETS as vn, evictionPolicyForMode as vt, ExportRecordSchema as w, isSoftwareDecode as wn, gifDeriveSpeed as wt, EVENT_OWNER_TYPES as x, buildFfmpegArgs as xn, failureContributionCapability as xt, DEFAULT_NATIVE_LEASE_SETTINGS as y, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as yn, evictionPolicyOfLocation as yt, ROOT_SUPPLIABLE_STEP_IDS as z, makeProfileBrokerId as zn, modeMayWrite as zt };