@camstack/addon-model-studio 1.1.212 → 1.1.214

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 (21) hide show
  1. package/dist/{MaskShapeCanvas-C4g96eMz.mjs → MaskShapeCanvas-DBaZffFb.mjs} +113 -113
  2. package/dist/{MotionZonesSettings-B_oqRPy4.mjs → MotionZonesSettings-BQ0UOfb8.mjs} +121 -121
  3. package/dist/{PrivacyMaskSettings-D8qtXvxt.mjs → PrivacyMaskSettings-q_9yxl4v.mjs} +25 -25
  4. package/dist/{SceneMonitorEditor-D87pvPnW.mjs → SceneMonitorEditor-Bmz5Y9X5.mjs} +299 -299
  5. package/dist/_stub.js +4893 -4652
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DWCpUk01.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-uW1Zd-nw.mjs} +4 -4
  7. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CL_c14D8.mjs +26 -0
  8. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs} +1 -1
  9. package/dist/addon-model-studio.css +1 -1
  10. package/dist/{hostInit-DN2AYYxs.mjs → hostInit-XNV3DgEX.mjs} +3 -3
  11. package/dist/model-studio.addon.js +214 -171
  12. package/dist/model-studio.addon.mjs +214 -171
  13. package/dist/{player-overlays-HkGtf6Z8.mjs → player-overlays-DyBPgoW8.mjs} +11 -11
  14. package/dist/remoteEntry.js +1 -1
  15. package/dist/{responsive-MsnrmZeO.mjs → responsive-CvxBWUH9.mjs} +22 -22
  16. package/dist/{scene-monitor-copy-DUC8dxNl.mjs → scene-monitor-copy-Bbrh5uOi.mjs} +13 -13
  17. package/dist/{square--tUmo3yW.mjs → square-Ebm5mZPx.mjs} +1 -1
  18. package/dist/{trash-2-m2KUou0G.mjs → trash-2-BX4TiX8o.mjs} +1 -1
  19. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-f7LkcCOd.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-r8bN15Ml.mjs} +1 -1
  20. package/package.json +1 -1
  21. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C9x9vbel.mjs +0 -26
@@ -5747,7 +5747,7 @@ var ZodIssueCode = {
5747
5747
  var ZodFirstPartyTypeKind;
5748
5748
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5749
5749
  //#endregion
5750
- //#region ../types/dist/sleep-C16NCZR2.mjs
5750
+ //#region ../types/dist/sleep-DAJ9Er57.mjs
5751
5751
  /**
5752
5752
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5753
5753
  * window to float samples (D455).
@@ -24267,148 +24267,17 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
24267
24267
  settings: record(string(), unknown()).optional()
24268
24268
  }), AudioTestResultSchema, { kind: "mutation" }), method(_void(), ConfigUISchemaNullableBridge);
24269
24269
  /**
24270
- * Wire shapes of the Load balancing surface (D748): the session placement
24271
- * policy, the atomic share write, the observed placement statistics, the
24272
- * hardware share suggestion and the stale device pins.
24273
- */
24274
- /**
24275
- * How a new detection session picks its node and device.
24276
- * - `least-loaded` — the historical rule: lowest `attached / weight`, a
24277
- * constant node order at a tie (D37). An idle node always ties at 0, so a
24278
- * weight only bites once a node already holds a session.
24279
- * - `share` — the share of PARALLEL sessions is held to the weights, and a
24280
- * full or drowning node yields to a free one (D748).
24281
- */
24282
- var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
24283
- var LoadBalancingSharesInputSchema = object({
24284
- /** nodeId → share (> 0). A node left out keeps its weight. */
24285
- nodes: record(string(), number().positive()).default({}),
24286
- /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
24287
- devices: record(string(), record(string(), number().positive())).default({})
24288
- });
24289
- var PlacementStatsInputSchema = object({
24290
- /** Window the observed shares are averaged over (default 1 h, max 24 h). */
24291
- windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
24292
- var PlacementDeviceStatsSchema = object({
24293
- deviceKey: string(),
24294
- /** Sessions running on this device now. */
24295
- sessionsNow: number(),
24296
- /** Sessions started on this device inside the window. */
24297
- sessionsStarted: number(),
24298
- /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
24299
- observedShare: number().nullable()
24300
- });
24301
- var PlacementNodeStatsSchema = object({
24302
- nodeId: string(),
24303
- sessionsNow: number(),
24304
- sessionsStarted: number(),
24305
- /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
24306
- observedShare: number().nullable(),
24307
- /** Most sessions this node ran at once inside the window. */
24308
- peakSessions: number(),
24309
- /** Sessions a share election handed elsewhere because this node was full or drowning. */
24310
- yieldsAway: number(),
24311
- devices: array(PlacementDeviceStatsSchema).readonly()
24312
- });
24313
- /** A camera's device pin that the session path cannot honour. */
24314
- var StaleDevicePinSchema = object({
24315
- deviceId: number(),
24316
- deviceKey: string(),
24317
- /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
24318
- reason: _enum(["disabled", "absent"])
24319
- });
24320
- var PlacementStatsSchema = object({
24321
- policy: SessionPlacementPolicySchema,
24322
- windowMs: number(),
24323
- /** How much of the window was actually observed (the hub keeps it in memory). */
24324
- observedForMs: number(),
24325
- sessionsNow: number(),
24326
- /** Most parallel sessions across the cluster inside the window. */
24327
- clusterPeakSessions: number(),
24328
- nodes: array(PlacementNodeStatsSchema).readonly(),
24329
- stalePins: array(StaleDevicePinSchema).readonly()
24330
- });
24331
- var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
24332
- var SuggestedDeviceShareSchema = object({
24333
- deviceKey: string(),
24334
- /** Share of the node (0–100, rounded). */
24335
- share: number(),
24336
- modelId: string().nullable(),
24337
- /** Inferences per second at that model, from the measured table. */
24338
- fps: number().nullable(),
24339
- measured: boolean(),
24340
- /** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
24341
- suggestedMaxSessions: number().nullable()
24342
- });
24343
- var SuggestedNodeShareSchema = object({
24344
- nodeId: string(),
24345
- /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
24346
- share: number().nullable(),
24347
- /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
24348
- capacitySessions: number(),
24349
- devices: array(SuggestedDeviceShareSchema).readonly(),
24350
- skippedReason: string().nullable()
24351
- });
24352
- var SuggestSharesResultSchema = object({
24353
- headroom: number(),
24354
- /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
24355
- cameraFps: number(),
24356
- /** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
24357
- iterations: number(),
24358
- nodes: array(SuggestedNodeShareSchema).readonly()
24359
- });
24360
- /**
24361
- * Where the node and device shares come from (D750).
24362
- * - `auto` — computed by the system from the cluster's measured capacity at
24363
- * the Auto tune models, and recomputed whenever a node or device joins,
24364
- * leaves, is switched on or off, or changes model.
24365
- * - `manual` — the operator's stored sliders. A node or device that cannot
24366
- * take sessions gives its share to the others in proportion; the stored
24367
- * values are never rewritten for that.
24368
- */
24369
- var ShareSourceSchema = _enum(["auto", "manual"]);
24370
- var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
24371
- object({
24372
- nodes: record(string(), number()),
24373
- devices: record(string(), record(string(), number()))
24374
- });
24375
- var EffectiveDeviceShareSchema = object({
24376
- deviceKey: string(),
24377
- /** Can take sessions now (enabled, available, can run the root). */
24378
- eligible: boolean(),
24379
- /** The share the source assigns, as a percentage of the node's devices. */
24380
- configuredPct: number(),
24381
- /** The share actually used, after an ineligible device's share went to the others. */
24382
- effectivePct: number()
24383
- });
24384
- var EffectiveNodeShareSchema = object({
24385
- nodeId: string(),
24386
- eligible: boolean(),
24387
- configuredPct: number(),
24388
- effectivePct: number(),
24389
- devices: array(EffectiveDeviceShareSchema).readonly()
24390
- });
24391
- var EffectiveSharesSchema = object({
24392
- source: ShareSourceSchema,
24393
- policy: SessionPlacementPolicySchema,
24394
- /** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
24395
- autoPending: boolean(),
24396
- /** When the automatic shares were last computed (ms epoch); null = never. */
24397
- computedAt: number().nullable(),
24398
- /** What made the system recompute them last. */
24399
- trigger: string().nullable(),
24400
- nodes: array(EffectiveNodeShareSchema).readonly(),
24401
- /** The relative weights the election reads (before eligibility). */
24402
- nodeWeights: record(string(), number()),
24403
- deviceWeights: record(string(), record(string(), number()))
24404
- });
24405
- /**
24406
24270
  * The wire shapes of the Auto tune plan and apply (D745), used by the
24407
24271
  * `pipeline-orchestrator` cap. The recommender's own types
24408
- * (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
24272
+ * (`recommend.ts`) are the TS face of the same data; these
24409
24273
  * schemas are what crosses the cap boundary.
24410
24274
  */
24411
24275
  var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
24276
+ /** The operator's range for it. */
24277
+ var MIN_SESSIONS_PER_DEVICE_RANGE = {
24278
+ min: 1,
24279
+ max: 8
24280
+ };
24412
24281
  var HardwareClassIdSchema = _enum([
24413
24282
  "intel-core-ultra",
24414
24283
  "intel-n-series",
@@ -24426,8 +24295,9 @@ var AcceleratorKindSchema = _enum([
24426
24295
  ]);
24427
24296
  var RecommendationReasonSchema = discriminatedUnion("kind", [
24428
24297
  object({
24429
- kind: literal("fits"),
24430
- utilisation: number()
24298
+ kind: literal("capacity"),
24299
+ sessions: number(),
24300
+ minSessions: number()
24431
24301
  }),
24432
24302
  object({
24433
24303
  kind: literal("tie-faster"),
@@ -24442,16 +24312,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
24442
24312
  }),
24443
24313
  object({
24444
24314
  kind: literal("no-fit-lightest"),
24445
- utilisation: number()
24315
+ sessions: number(),
24316
+ minSessions: number()
24446
24317
  }),
24447
24318
  object({
24448
24319
  kind: literal("derived-latency"),
24449
24320
  modelId: string()
24450
24321
  }),
24451
- object({
24452
- kind: literal("estimated-load"),
24453
- observedForMs: number().nullable()
24454
- }),
24455
24322
  object({ kind: literal("cpu-device") }),
24456
24323
  object({ kind: literal("coral-untouched") }),
24457
24324
  object({ kind: literal("device-disabled") }),
@@ -24467,28 +24334,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
24467
24334
  format: ModelFormatSchema$1
24468
24335
  })
24469
24336
  ]);
24470
- var DeviceDemandSchema = object({
24471
- nodeId: string(),
24472
- deviceKey: string(),
24473
- demandFps: number(),
24474
- maxCameraFps: number(),
24475
- alwaysOnCameras: number(),
24476
- onMotionSessions: number(),
24477
- onMotionSource: _enum([
24478
- "observed-24h",
24479
- "estimate",
24480
- "none"
24481
- ]),
24482
- observedForMs: number().nullable(),
24483
- /** How on-motion sessions were charged: per-device observation, or split by share (D748). */
24484
- placement: SessionPlacementPolicySchema
24485
- });
24486
24337
  var DeviceModelChoiceSchema = object({
24487
24338
  modelId: string(),
24488
24339
  p50Ms: number(),
24489
24340
  fps: number(),
24490
24341
  measured: boolean(),
24491
- utilisation: number(),
24342
+ /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
24343
+ capacitySessions: number(),
24492
24344
  personRecall: number()
24493
24345
  });
24494
24346
  var DeviceRecommendationSchema = object({
@@ -24496,7 +24348,6 @@ var DeviceRecommendationSchema = object({
24496
24348
  accelerator: AcceleratorKindSchema.nullable(),
24497
24349
  enabled: boolean(),
24498
24350
  available: boolean(),
24499
- demand: DeviceDemandSchema.nullable(),
24500
24351
  chosen: DeviceModelChoiceSchema.nullable(),
24501
24352
  reasons: array(RecommendationReasonSchema).readonly()
24502
24353
  });
@@ -24557,20 +24408,20 @@ var AutoTuneOptionsSchema = object({
24557
24408
  /** Share of each accelerator's throughput kept free (0.3–0.5). */
24558
24409
  headroom: number().min(.3).max(.5).default(.4),
24559
24410
  /**
24560
- * What-if shares (D748): plan as if these node/device shares were stored
24561
- * and the policy were `share`. Absent = the stored shares under the stored
24562
- * policy. A what-if plan is for display; apply always re-plans from what
24563
- * is stored.
24411
+ * The least number of parallel sessions every device must sustain at the
24412
+ * camera rate with the headroom kept free (D755). The most accurate model
24413
+ * that reaches it wins.
24564
24414
  */
24565
- shares: LoadBalancingSharesInputSchema.optional()
24415
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
24566
24416
  });
24567
24417
  var AutoTunePlanSchema = object({
24568
24418
  /** Hash of everything the apply will write — the apply refuses a different one. */
24569
24419
  planHash: string(),
24570
24420
  family: literal("yolov9"),
24571
24421
  headroom: number(),
24572
- /** Planned under what-if shares (D748): for display — apply refuses it as stale. */
24573
- whatIf: boolean(),
24422
+ minSessionsPerDevice: number(),
24423
+ /** The detection rate a session is counted at (the fastest camera running the pipeline root). */
24424
+ cameraFps: number(),
24574
24425
  generatedAt: number(),
24575
24426
  nodes: array(NodeRecommendationSchema).readonly(),
24576
24427
  nodeChanges: array(NodeDeviceChangeSchema).readonly(),
@@ -24580,7 +24431,8 @@ var AutoTunePlanSchema = object({
24580
24431
  });
24581
24432
  var AutoTuneApplyInputSchema = object({
24582
24433
  planHash: string(),
24583
- headroom: number().min(.3).max(.5).default(.4)
24434
+ headroom: number().min(.3).max(.5).default(.4),
24435
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
24584
24436
  });
24585
24437
  var AutoTunePhaseResultSchema = object({
24586
24438
  phase: _enum([
@@ -24612,6 +24464,177 @@ var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
24612
24464
  reason: _enum(["apply-in-progress"])
24613
24465
  })
24614
24466
  ]);
24467
+ /**
24468
+ * Wire shapes of the Load balancing surface (D748): the session placement
24469
+ * policy, the atomic share write, the observed placement statistics, the
24470
+ * hardware share suggestion and the stale device pins.
24471
+ */
24472
+ /**
24473
+ * How a new detection session picks its node and device.
24474
+ * - `least-loaded` — the historical rule: lowest `attached / weight`, a
24475
+ * constant node order at a tie (D37). An idle node always ties at 0, so a
24476
+ * weight only bites once a node already holds a session.
24477
+ * - `share` — the share of PARALLEL sessions is held to the weights, and a
24478
+ * full or drowning node yields to a free one (D748).
24479
+ */
24480
+ var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
24481
+ var LoadBalancingSharesInputSchema = object({
24482
+ /** nodeId → share (> 0). A node left out keeps its weight. */
24483
+ nodes: record(string(), number().positive()).default({}),
24484
+ /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
24485
+ devices: record(string(), record(string(), number().positive())).default({})
24486
+ });
24487
+ var PlacementStatsInputSchema = object({
24488
+ /** Window the observed shares are averaged over (default 1 h, max 24 h). */
24489
+ windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
24490
+ var PlacementDeviceStatsSchema = object({
24491
+ deviceKey: string(),
24492
+ /** Sessions running on this device now. */
24493
+ sessionsNow: number(),
24494
+ /** Sessions started on this device inside the window. */
24495
+ sessionsStarted: number(),
24496
+ /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
24497
+ observedShare: number().nullable()
24498
+ });
24499
+ var PlacementNodeStatsSchema = object({
24500
+ nodeId: string(),
24501
+ sessionsNow: number(),
24502
+ sessionsStarted: number(),
24503
+ /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
24504
+ observedShare: number().nullable(),
24505
+ /** Most sessions this node ran at once inside the window. */
24506
+ peakSessions: number(),
24507
+ /** Sessions a share election handed elsewhere because this node was full or drowning. */
24508
+ yieldsAway: number(),
24509
+ devices: array(PlacementDeviceStatsSchema).readonly()
24510
+ });
24511
+ /** A camera's device pin that the session path cannot honour. */
24512
+ var StaleDevicePinSchema = object({
24513
+ deviceId: number(),
24514
+ deviceKey: string(),
24515
+ /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
24516
+ reason: _enum(["disabled", "absent"])
24517
+ });
24518
+ var PlacementStatsSchema = object({
24519
+ policy: SessionPlacementPolicySchema,
24520
+ windowMs: number(),
24521
+ /** How much of the window was actually observed (the hub keeps it in memory). */
24522
+ observedForMs: number(),
24523
+ sessionsNow: number(),
24524
+ /** Most parallel sessions across the cluster inside the window. */
24525
+ clusterPeakSessions: number(),
24526
+ nodes: array(PlacementNodeStatsSchema).readonly(),
24527
+ stalePins: array(StaleDevicePinSchema).readonly()
24528
+ });
24529
+ /**
24530
+ * Where an automatic share's capacity comes from (D755).
24531
+ * - `hardware` — the static capacity of each device at its Auto tune model:
24532
+ * the measured latency table for the node's hardware class.
24533
+ * - `benchmark` — the node's own measured capacity (node benchmark results).
24534
+ * A node with no results falls back to `hardware`, and says so.
24535
+ */
24536
+ var CapacitySourceSchema = _enum(["hardware", "benchmark"]);
24537
+ /** Why a node under the `benchmark` source was sized from hardware instead. */
24538
+ var CapacityFallbackSchema = _enum(["no-benchmark-results", "partial-benchmark-results"]);
24539
+ var SuggestSharesInputSchema = object({
24540
+ headroom: number().min(.3).max(.5).default(.4),
24541
+ /** Default `hardware`. */
24542
+ source: CapacitySourceSchema.default("hardware")
24543
+ });
24544
+ var SuggestedDeviceShareSchema = object({
24545
+ deviceKey: string(),
24546
+ /** Share of the node (0–100, rounded). */
24547
+ share: number(),
24548
+ modelId: string().nullable(),
24549
+ /** Inferences per second at that model, from the measured table; null when sized by a benchmark. */
24550
+ fps: number().nullable(),
24551
+ /** False for a table cell derived from another chip; true for a measured cell or a benchmark. */
24552
+ measured: boolean(),
24553
+ /**
24554
+ * Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋ from the table,
24555
+ * or the benchmark's measured max sessions. Never enforced.
24556
+ */
24557
+ suggestedMaxSessions: number().nullable()
24558
+ });
24559
+ var SuggestedNodeShareSchema = object({
24560
+ nodeId: string(),
24561
+ /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
24562
+ share: number().nullable(),
24563
+ /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
24564
+ capacitySessions: number(),
24565
+ devices: array(SuggestedDeviceShareSchema).readonly(),
24566
+ skippedReason: string().nullable(),
24567
+ /** What this node's capacity was read from; null when the node is skipped. */
24568
+ capacitySource: CapacitySourceSchema.nullable(),
24569
+ /** Set when the `benchmark` source was asked for and this node used `hardware`. */
24570
+ capacityFallback: CapacityFallbackSchema.nullable()
24571
+ });
24572
+ var SuggestSharesResultSchema = object({
24573
+ headroom: number(),
24574
+ /** The source asked for; each node says what it actually used. */
24575
+ source: CapacitySourceSchema,
24576
+ /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
24577
+ cameraFps: number(),
24578
+ /** The Auto tune capacity floor the models were picked at. */
24579
+ minSessionsPerDevice: number(),
24580
+ nodes: array(SuggestedNodeShareSchema).readonly()
24581
+ });
24582
+ /**
24583
+ * Where the node and device shares come from (D750, D755).
24584
+ * - `hardware` (default) — computed by the system from each node's static
24585
+ * capacity (its accelerators at their Auto tune models, from the measured
24586
+ * latency table), recomputed whenever a node or device joins, leaves, is
24587
+ * switched on or off, or changes model. No load input.
24588
+ * - `benchmark` — the same, from each node's measured capacity (node
24589
+ * benchmark results); a node without results falls back to `hardware`.
24590
+ * - `manual` — the operator's stored sliders.
24591
+ * Either way a node or device that cannot take sessions gives its share to
24592
+ * the others in proportion; the stored values are never rewritten for that.
24593
+ */
24594
+ var ShareSourceSchema = _enum([
24595
+ "hardware",
24596
+ "benchmark",
24597
+ "manual"
24598
+ ]);
24599
+ var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
24600
+ object({
24601
+ nodes: record(string(), number()),
24602
+ devices: record(string(), record(string(), number()))
24603
+ });
24604
+ var EffectiveDeviceShareSchema = object({
24605
+ deviceKey: string(),
24606
+ /** Can take sessions now (enabled, available, can run the root). */
24607
+ eligible: boolean(),
24608
+ /** The share the source assigns, as a percentage of the node's devices. */
24609
+ configuredPct: number(),
24610
+ /** The share actually used, after an ineligible device's share went to the others. */
24611
+ effectivePct: number()
24612
+ });
24613
+ var EffectiveNodeShareSchema = object({
24614
+ nodeId: string(),
24615
+ eligible: boolean(),
24616
+ configuredPct: number(),
24617
+ effectivePct: number(),
24618
+ /** Automatic sources: what this node's share was computed from; null under `manual` or before the first answer. */
24619
+ capacitySource: CapacitySourceSchema.nullable(),
24620
+ /** Automatic `benchmark`: why this node used `hardware` instead. */
24621
+ capacityFallback: CapacityFallbackSchema.nullable(),
24622
+ devices: array(EffectiveDeviceShareSchema).readonly()
24623
+ });
24624
+ var EffectiveSharesSchema = object({
24625
+ source: ShareSourceSchema,
24626
+ policy: SessionPlacementPolicySchema,
24627
+ /** An automatic source with no computed answer yet: the stored sliders are used meanwhile. */
24628
+ autoPending: boolean(),
24629
+ /** When the automatic shares were last computed (ms epoch); null = never. */
24630
+ computedAt: number().nullable(),
24631
+ /** What made the system recompute them last. */
24632
+ trigger: string().nullable(),
24633
+ nodes: array(EffectiveNodeShareSchema).readonly(),
24634
+ /** The relative weights the election reads (before eligibility). */
24635
+ nodeWeights: record(string(), number()),
24636
+ deviceWeights: record(string(), record(string(), number()))
24637
+ });
24615
24638
  object({
24616
24639
  activeCameras: number(),
24617
24640
  throttledCameras: number(),
@@ -25791,8 +25814,10 @@ var CameraStepOverridePatchSchema = object({
25791
25814
  modelId: string().optional(),
25792
25815
  settings: record(string(), unknown()).readonly().optional()
25793
25816
  });
25817
+ var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
25794
25818
  var CameraPipelineSettingsSchema = object({
25795
25819
  stepToggles: record(string(), boolean()).optional(),
25820
+ stepSettings: CameraStepSettingsSchema.optional(),
25796
25821
  stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
25797
25822
  pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
25798
25823
  });
@@ -26356,6 +26381,13 @@ method(object({
26356
26381
  }), object({ success: literal(true) }), {
26357
26382
  kind: "mutation",
26358
26383
  auth: "admin"
26384
+ }), method(object({
26385
+ deviceId: number(),
26386
+ addonId: string(),
26387
+ settings: record(string(), unknown()).nullable()
26388
+ }), object({ success: literal(true) }), {
26389
+ kind: "mutation",
26390
+ auth: "admin"
26359
26391
  }), method(object({
26360
26392
  deviceId: number(),
26361
26393
  agentNodeId: string(),
@@ -42529,6 +42561,12 @@ Object.freeze({
42529
42561
  addonId: null,
42530
42562
  access: "create"
42531
42563
  },
42564
+ "pipelineOrchestrator.setCameraStepSettings": {
42565
+ capName: "pipeline-orchestrator",
42566
+ capScope: "system",
42567
+ addonId: null,
42568
+ access: "create"
42569
+ },
42532
42570
  "pipelineOrchestrator.setCameraStepToggle": {
42533
42571
  capName: "pipeline-orchestrator",
42534
42572
  capScope: "system",
@@ -47977,6 +48015,11 @@ Object.freeze({
47977
48015
  form: "single",
47978
48016
  optional: false
47979
48017
  }],
48018
+ "pipelineOrchestrator.setCameraStepSettings": [{
48019
+ name: "deviceId",
48020
+ form: "single",
48021
+ optional: false
48022
+ }],
47980
48023
  "pipelineOrchestrator.setCameraStepToggle": [{
47981
48024
  name: "deviceId",
47982
48025
  form: "single",
@@ -1,5 +1,5 @@
1
- import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
2
- import { b as i, y as a } from "./responsive-MsnrmZeO.mjs";
1
+ import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
+ import { b as i, y as a } from "./responsive-CvxBWUH9.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -10,11 +10,11 @@ var l = i("chevron-down", [["path", {
10
10
  }]]);
11
11
  //#endregion
12
12
  //#region ../ui-library/src/composites/widget-panel.tsx
13
- r();
14
- function d({ title: t, icon: n, headerRight: r, collapsible: i = !1, defaultOpen: a = !0, bodyClassName: d = "p-3", children: f }) {
15
- let [p, m] = e(a), h = !i || p, g = /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s("span", {
13
+ e();
14
+ function d({ title: e, icon: n, headerRight: r, collapsible: i = !1, defaultOpen: a = !0, bodyClassName: d = "p-3", children: f }) {
15
+ let [p, m] = t(a), h = !i || p, g = /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s("span", {
16
16
  className: "flex items-center gap-2 text-xs font-semibold uppercase tracking-wider text-foreground",
17
- children: [n, t]
17
+ children: [n, e]
18
18
  }), i ? o(p ? l : u, { className: "h-3.5 w-3.5 text-foreground-subtle" }) : r] }), _ = `px-4 py-2 flex items-center justify-between ${h ? "border-b border-border" : ""}`;
19
19
  return /* @__PURE__ */ s("div", {
20
20
  className: "rounded-lg border border-border bg-surface overflow-hidden",
@@ -32,13 +32,13 @@ function d({ title: t, icon: n, headerRight: r, collapsible: i = !1, defaultOpen
32
32
  }) : null]
33
33
  });
34
34
  }
35
- r(), a("camstack:player-overlays-state", null);
35
+ e(), a("camstack:player-overlays-state", null);
36
36
  var f = a("camstack:player-overlays-actions", null);
37
37
  function p(e) {
38
- let r = t(f);
39
- n(() => {
40
- if (!(!r || !e)) return r.setLayer(e), () => r.removeLayer(e.id);
41
- }, [r, e]);
38
+ let t = n(f);
39
+ r(() => {
40
+ if (!(!t || !e)) return t.setLayer(e), () => t.removeLayer(e.id);
41
+ }, [t, e]);
42
42
  }
43
43
  //#endregion
44
44
  export { l as i, d as n, u as r, p as t };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-f7LkcCOd.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-r8bN15Ml.mjs";
2
2
  export { t as get, e as init };
@@ -1,8 +1,8 @@
1
- import { c as e, g as t, h as n, l as r, n as i, p as a, r as o, t as s, u as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
1
+ import { _ as e, b as t, c as n, g as r, l as i, m as a, n as o, r as s, t as c, u as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
- import { d as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C9x9vbel.mjs";
3
+ import { f as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CL_c14D8.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
- l();
5
+ t();
6
6
  var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
7
7
  let t = p(e);
8
8
  return t.charAt(0).toUpperCase() + t.slice(1);
@@ -19,23 +19,23 @@ var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) =
19
19
  }, g = (e) => {
20
20
  for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
21
21
  return !1;
22
- }, _ = o(({ color: e = "currentColor", size: t = 24, strokeWidth: n = 2, absoluteStrokeWidth: r, className: a = "", children: o, iconNode: s, ...c }, l) => i("svg", {
22
+ }, _ = s(({ color: e = "currentColor", size: t = 24, strokeWidth: n = 2, absoluteStrokeWidth: r, className: i = "", children: a, iconNode: s, ...c }, l) => o("svg", {
23
23
  ref: l,
24
24
  ...h,
25
25
  width: t,
26
26
  height: t,
27
27
  stroke: e,
28
28
  strokeWidth: r ? Number(n) * 24 / Number(t) : n,
29
- className: d("lucide", a),
30
- ...!o && !g(c) && { "aria-hidden": "true" },
29
+ className: d("lucide", i),
30
+ ...!a && !g(c) && { "aria-hidden": "true" },
31
31
  ...c
32
- }, [...s.map(([e, t]) => i(e, t)), ...Array.isArray(o) ? o : [o]]));
32
+ }, [...s.map(([e, t]) => o(e, t)), ...Array.isArray(a) ? a : [a]]));
33
33
  //#endregion
34
34
  //#region ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
35
- l();
35
+ t();
36
36
  var v = (e, t) => {
37
- let n = o(({ className: n, ...r }, a) => i(_, {
38
- ref: a,
37
+ let n = s(({ className: n, ...r }, i) => o(_, {
38
+ ref: i,
39
39
  iconNode: t,
40
40
  className: d(`lucide-${f(m(e))}`, `lucide-${e}`, n),
41
41
  ...r
@@ -44,32 +44,32 @@ var v = (e, t) => {
44
44
  };
45
45
  //#endregion
46
46
  //#region ../ui-library/src/lib/shared-context.ts
47
- l();
47
+ t();
48
48
  function y(e, t) {
49
- if (typeof globalThis > "u") return s(t);
49
+ if (typeof globalThis > "u") return c(t);
50
50
  let n = globalThis.__camstackSharedContexts, r = n ?? /* @__PURE__ */ new Map();
51
51
  n || (globalThis.__camstackSharedContexts = r);
52
52
  let i = r.get(e);
53
53
  if (i) return i;
54
- let a = s(t);
54
+ let a = c(t);
55
55
  return r.set(e, a), a;
56
56
  }
57
57
  //#endregion
58
58
  //#region ../ui-library/src/contexts/system-context.tsx
59
- l();
59
+ t();
60
60
  var b = y("camstack:system", null);
61
61
  function x() {
62
- let e = r(b);
62
+ let e = i(b);
63
63
  if (!e) throw Error("useSystem(): no <SystemProvider> in tree");
64
64
  return e;
65
65
  }
66
66
  //#endregion
67
67
  //#region ../ui-library/src/hooks/use-device-proxy.ts
68
- l();
68
+ t();
69
69
  var S = "capability.binding-changed";
70
70
  function C(e, t) {
71
- let [r, i] = n(null);
72
- return c(() => {
71
+ let [n, i] = r(null);
72
+ return l(() => {
73
73
  if (t === null) {
74
74
  i(null);
75
75
  return;
@@ -94,11 +94,11 @@ function C(e, t) {
94
94
  return () => {
95
95
  n = !0, a?.unsubscribe();
96
96
  };
97
- }, [e, t]), a(() => r ? u(e, r) : null, [e, r]);
97
+ }, [e, t]), a(() => n ? u(e, n) : null, [e, n]);
98
98
  }
99
- function w(n) {
100
- let r = e((e) => n ? n.subscribe(() => e()) : () => void 0, [n]), i = e(() => n?.value, [n]);
101
- return t(r, i, i);
99
+ function w(t) {
100
+ let r = n((e) => t ? t.subscribe(() => e()) : () => void 0, [t]), i = n(() => t?.value, [t]);
101
+ return e(r, i, i);
102
102
  }
103
103
  //#endregion
104
104
  //#region ../ui-library/src/lib/cap-error.ts