@camstack/addon-osd-manager 0.1.183 → 0.1.184

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 (18) hide show
  1. package/dist/{MotionZonesSettings-zw2RZO3c.mjs → MotionZonesSettings-D6SgWxHM.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-MfIH7-Fl.mjs → PrivacyMaskSettings-CVXHA1TY.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-B9fe5VoP.mjs → SceneMonitorEditor-DfXktuc-.mjs} +3 -3
  4. package/dist/_stub.js +10 -10
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-ChI8RP64.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-WQk_9a7Q.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CTH5s3ZX.mjs +26 -0
  7. package/dist/{hostInit-BRdQ6lL_.mjs → hostInit-B13AG8B3.mjs} +3 -3
  8. package/dist/index.js +239 -181
  9. package/dist/index.mjs +239 -181
  10. package/dist/{player-overlays-DBos84dy.mjs → player-overlays-2U369Hn_.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-CSrcORLE.mjs → responsive-CX9nMQmP.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-DvcsgzM2.mjs → scene-monitor-copy-mbiaJvpA.mjs} +1 -1
  14. package/dist/{square-BALj2dYA.mjs → square-c2Ehe_cj.mjs} +1 -1
  15. package/dist/{trash-2-BMJXCVQ3.mjs → trash-2-C8s1nBjB.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-2kWEtYV7.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-Bi3cgGjf.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CWgx3QDa.mjs +0 -26
package/dist/index.mjs CHANGED
@@ -5378,7 +5378,7 @@ var ZodIssueCode = {
5378
5378
  var ZodFirstPartyTypeKind;
5379
5379
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5380
5380
  //#endregion
5381
- //#region ../types/dist/sleep-C16NCZR2.mjs
5381
+ //#region ../types/dist/sleep-DAJ9Er57.mjs
5382
5382
  /**
5383
5383
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5384
5384
  * window to float samples (D455).
@@ -28081,148 +28081,17 @@ var pipelineExecutorCapability = {
28081
28081
  }
28082
28082
  };
28083
28083
  /**
28084
- * Wire shapes of the Load balancing surface (D748): the session placement
28085
- * policy, the atomic share write, the observed placement statistics, the
28086
- * hardware share suggestion and the stale device pins.
28087
- */
28088
- /**
28089
- * How a new detection session picks its node and device.
28090
- * - `least-loaded` — the historical rule: lowest `attached / weight`, a
28091
- * constant node order at a tie (D37). An idle node always ties at 0, so a
28092
- * weight only bites once a node already holds a session.
28093
- * - `share` — the share of PARALLEL sessions is held to the weights, and a
28094
- * full or drowning node yields to a free one (D748).
28095
- */
28096
- var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
28097
- var LoadBalancingSharesInputSchema = object({
28098
- /** nodeId → share (> 0). A node left out keeps its weight. */
28099
- nodes: record(string(), number().positive()).default({}),
28100
- /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
28101
- devices: record(string(), record(string(), number().positive())).default({})
28102
- });
28103
- var PlacementStatsInputSchema = object({
28104
- /** Window the observed shares are averaged over (default 1 h, max 24 h). */
28105
- windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
28106
- var PlacementDeviceStatsSchema = object({
28107
- deviceKey: string(),
28108
- /** Sessions running on this device now. */
28109
- sessionsNow: number(),
28110
- /** Sessions started on this device inside the window. */
28111
- sessionsStarted: number(),
28112
- /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
28113
- observedShare: number().nullable()
28114
- });
28115
- var PlacementNodeStatsSchema = object({
28116
- nodeId: string(),
28117
- sessionsNow: number(),
28118
- sessionsStarted: number(),
28119
- /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
28120
- observedShare: number().nullable(),
28121
- /** Most sessions this node ran at once inside the window. */
28122
- peakSessions: number(),
28123
- /** Sessions a share election handed elsewhere because this node was full or drowning. */
28124
- yieldsAway: number(),
28125
- devices: array(PlacementDeviceStatsSchema).readonly()
28126
- });
28127
- /** A camera's device pin that the session path cannot honour. */
28128
- var StaleDevicePinSchema = object({
28129
- deviceId: number(),
28130
- deviceKey: string(),
28131
- /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
28132
- reason: _enum(["disabled", "absent"])
28133
- });
28134
- var PlacementStatsSchema = object({
28135
- policy: SessionPlacementPolicySchema,
28136
- windowMs: number(),
28137
- /** How much of the window was actually observed (the hub keeps it in memory). */
28138
- observedForMs: number(),
28139
- sessionsNow: number(),
28140
- /** Most parallel sessions across the cluster inside the window. */
28141
- clusterPeakSessions: number(),
28142
- nodes: array(PlacementNodeStatsSchema).readonly(),
28143
- stalePins: array(StaleDevicePinSchema).readonly()
28144
- });
28145
- var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
28146
- var SuggestedDeviceShareSchema = object({
28147
- deviceKey: string(),
28148
- /** Share of the node (0–100, rounded). */
28149
- share: number(),
28150
- modelId: string().nullable(),
28151
- /** Inferences per second at that model, from the measured table. */
28152
- fps: number().nullable(),
28153
- measured: boolean(),
28154
- /** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
28155
- suggestedMaxSessions: number().nullable()
28156
- });
28157
- var SuggestedNodeShareSchema = object({
28158
- nodeId: string(),
28159
- /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
28160
- share: number().nullable(),
28161
- /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
28162
- capacitySessions: number(),
28163
- devices: array(SuggestedDeviceShareSchema).readonly(),
28164
- skippedReason: string().nullable()
28165
- });
28166
- var SuggestSharesResultSchema = object({
28167
- headroom: number(),
28168
- /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
28169
- cameraFps: number(),
28170
- /** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
28171
- iterations: number(),
28172
- nodes: array(SuggestedNodeShareSchema).readonly()
28173
- });
28174
- /**
28175
- * Where the node and device shares come from (D750).
28176
- * - `auto` — computed by the system from the cluster's measured capacity at
28177
- * the Auto tune models, and recomputed whenever a node or device joins,
28178
- * leaves, is switched on or off, or changes model.
28179
- * - `manual` — the operator's stored sliders. A node or device that cannot
28180
- * take sessions gives its share to the others in proportion; the stored
28181
- * values are never rewritten for that.
28182
- */
28183
- var ShareSourceSchema = _enum(["auto", "manual"]);
28184
- var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
28185
- object({
28186
- nodes: record(string(), number()),
28187
- devices: record(string(), record(string(), number()))
28188
- });
28189
- var EffectiveDeviceShareSchema = object({
28190
- deviceKey: string(),
28191
- /** Can take sessions now (enabled, available, can run the root). */
28192
- eligible: boolean(),
28193
- /** The share the source assigns, as a percentage of the node's devices. */
28194
- configuredPct: number(),
28195
- /** The share actually used, after an ineligible device's share went to the others. */
28196
- effectivePct: number()
28197
- });
28198
- var EffectiveNodeShareSchema = object({
28199
- nodeId: string(),
28200
- eligible: boolean(),
28201
- configuredPct: number(),
28202
- effectivePct: number(),
28203
- devices: array(EffectiveDeviceShareSchema).readonly()
28204
- });
28205
- var EffectiveSharesSchema = object({
28206
- source: ShareSourceSchema,
28207
- policy: SessionPlacementPolicySchema,
28208
- /** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
28209
- autoPending: boolean(),
28210
- /** When the automatic shares were last computed (ms epoch); null = never. */
28211
- computedAt: number().nullable(),
28212
- /** What made the system recompute them last. */
28213
- trigger: string().nullable(),
28214
- nodes: array(EffectiveNodeShareSchema).readonly(),
28215
- /** The relative weights the election reads (before eligibility). */
28216
- nodeWeights: record(string(), number()),
28217
- deviceWeights: record(string(), record(string(), number()))
28218
- });
28219
- /**
28220
28084
  * The wire shapes of the Auto tune plan and apply (D745), used by the
28221
28085
  * `pipeline-orchestrator` cap. The recommender's own types
28222
- * (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
28086
+ * (`recommend.ts`) are the TS face of the same data; these
28223
28087
  * schemas are what crosses the cap boundary.
28224
28088
  */
28225
28089
  var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
28090
+ /** The operator's range for it. */
28091
+ var MIN_SESSIONS_PER_DEVICE_RANGE = {
28092
+ min: 1,
28093
+ max: 8
28094
+ };
28226
28095
  var HardwareClassIdSchema = _enum([
28227
28096
  "intel-core-ultra",
28228
28097
  "intel-n-series",
@@ -28240,8 +28109,9 @@ var AcceleratorKindSchema = _enum([
28240
28109
  ]);
28241
28110
  var RecommendationReasonSchema = discriminatedUnion("kind", [
28242
28111
  object({
28243
- kind: literal("fits"),
28244
- utilisation: number()
28112
+ kind: literal("capacity"),
28113
+ sessions: number(),
28114
+ minSessions: number()
28245
28115
  }),
28246
28116
  object({
28247
28117
  kind: literal("tie-faster"),
@@ -28256,16 +28126,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
28256
28126
  }),
28257
28127
  object({
28258
28128
  kind: literal("no-fit-lightest"),
28259
- utilisation: number()
28129
+ sessions: number(),
28130
+ minSessions: number()
28260
28131
  }),
28261
28132
  object({
28262
28133
  kind: literal("derived-latency"),
28263
28134
  modelId: string()
28264
28135
  }),
28265
- object({
28266
- kind: literal("estimated-load"),
28267
- observedForMs: number().nullable()
28268
- }),
28269
28136
  object({ kind: literal("cpu-device") }),
28270
28137
  object({ kind: literal("coral-untouched") }),
28271
28138
  object({ kind: literal("device-disabled") }),
@@ -28281,28 +28148,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
28281
28148
  format: ModelFormatSchema$1
28282
28149
  })
28283
28150
  ]);
28284
- var DeviceDemandSchema = object({
28285
- nodeId: string(),
28286
- deviceKey: string(),
28287
- demandFps: number(),
28288
- maxCameraFps: number(),
28289
- alwaysOnCameras: number(),
28290
- onMotionSessions: number(),
28291
- onMotionSource: _enum([
28292
- "observed-24h",
28293
- "estimate",
28294
- "none"
28295
- ]),
28296
- observedForMs: number().nullable(),
28297
- /** How on-motion sessions were charged: per-device observation, or split by share (D748). */
28298
- placement: SessionPlacementPolicySchema
28299
- });
28300
28151
  var DeviceModelChoiceSchema = object({
28301
28152
  modelId: string(),
28302
28153
  p50Ms: number(),
28303
28154
  fps: number(),
28304
28155
  measured: boolean(),
28305
- utilisation: number(),
28156
+ /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
28157
+ capacitySessions: number(),
28306
28158
  personRecall: number()
28307
28159
  });
28308
28160
  var DeviceRecommendationSchema = object({
@@ -28310,7 +28162,6 @@ var DeviceRecommendationSchema = object({
28310
28162
  accelerator: AcceleratorKindSchema.nullable(),
28311
28163
  enabled: boolean(),
28312
28164
  available: boolean(),
28313
- demand: DeviceDemandSchema.nullable(),
28314
28165
  chosen: DeviceModelChoiceSchema.nullable(),
28315
28166
  reasons: array(RecommendationReasonSchema).readonly()
28316
28167
  });
@@ -28371,20 +28222,20 @@ var AutoTuneOptionsSchema = object({
28371
28222
  /** Share of each accelerator's throughput kept free (0.3–0.5). */
28372
28223
  headroom: number().min(.3).max(.5).default(.4),
28373
28224
  /**
28374
- * What-if shares (D748): plan as if these node/device shares were stored
28375
- * and the policy were `share`. Absent = the stored shares under the stored
28376
- * policy. A what-if plan is for display; apply always re-plans from what
28377
- * is stored.
28225
+ * The least number of parallel sessions every device must sustain at the
28226
+ * camera rate with the headroom kept free (D755). The most accurate model
28227
+ * that reaches it wins.
28378
28228
  */
28379
- shares: LoadBalancingSharesInputSchema.optional()
28229
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
28380
28230
  });
28381
28231
  var AutoTunePlanSchema = object({
28382
28232
  /** Hash of everything the apply will write — the apply refuses a different one. */
28383
28233
  planHash: string(),
28384
28234
  family: literal("yolov9"),
28385
28235
  headroom: number(),
28386
- /** Planned under what-if shares (D748): for display — apply refuses it as stale. */
28387
- whatIf: boolean(),
28236
+ minSessionsPerDevice: number(),
28237
+ /** The detection rate a session is counted at (the fastest camera running the pipeline root). */
28238
+ cameraFps: number(),
28388
28239
  generatedAt: number(),
28389
28240
  nodes: array(NodeRecommendationSchema).readonly(),
28390
28241
  nodeChanges: array(NodeDeviceChangeSchema).readonly(),
@@ -28394,7 +28245,8 @@ var AutoTunePlanSchema = object({
28394
28245
  });
28395
28246
  var AutoTuneApplyInputSchema = object({
28396
28247
  planHash: string(),
28397
- headroom: number().min(.3).max(.5).default(.4)
28248
+ headroom: number().min(.3).max(.5).default(.4),
28249
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
28398
28250
  });
28399
28251
  var AutoTunePhaseResultSchema = object({
28400
28252
  phase: _enum([
@@ -28426,6 +28278,177 @@ var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
28426
28278
  reason: _enum(["apply-in-progress"])
28427
28279
  })
28428
28280
  ]);
28281
+ /**
28282
+ * Wire shapes of the Load balancing surface (D748): the session placement
28283
+ * policy, the atomic share write, the observed placement statistics, the
28284
+ * hardware share suggestion and the stale device pins.
28285
+ */
28286
+ /**
28287
+ * How a new detection session picks its node and device.
28288
+ * - `least-loaded` — the historical rule: lowest `attached / weight`, a
28289
+ * constant node order at a tie (D37). An idle node always ties at 0, so a
28290
+ * weight only bites once a node already holds a session.
28291
+ * - `share` — the share of PARALLEL sessions is held to the weights, and a
28292
+ * full or drowning node yields to a free one (D748).
28293
+ */
28294
+ var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
28295
+ var LoadBalancingSharesInputSchema = object({
28296
+ /** nodeId → share (> 0). A node left out keeps its weight. */
28297
+ nodes: record(string(), number().positive()).default({}),
28298
+ /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
28299
+ devices: record(string(), record(string(), number().positive())).default({})
28300
+ });
28301
+ var PlacementStatsInputSchema = object({
28302
+ /** Window the observed shares are averaged over (default 1 h, max 24 h). */
28303
+ windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
28304
+ var PlacementDeviceStatsSchema = object({
28305
+ deviceKey: string(),
28306
+ /** Sessions running on this device now. */
28307
+ sessionsNow: number(),
28308
+ /** Sessions started on this device inside the window. */
28309
+ sessionsStarted: number(),
28310
+ /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
28311
+ observedShare: number().nullable()
28312
+ });
28313
+ var PlacementNodeStatsSchema = object({
28314
+ nodeId: string(),
28315
+ sessionsNow: number(),
28316
+ sessionsStarted: number(),
28317
+ /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
28318
+ observedShare: number().nullable(),
28319
+ /** Most sessions this node ran at once inside the window. */
28320
+ peakSessions: number(),
28321
+ /** Sessions a share election handed elsewhere because this node was full or drowning. */
28322
+ yieldsAway: number(),
28323
+ devices: array(PlacementDeviceStatsSchema).readonly()
28324
+ });
28325
+ /** A camera's device pin that the session path cannot honour. */
28326
+ var StaleDevicePinSchema = object({
28327
+ deviceId: number(),
28328
+ deviceKey: string(),
28329
+ /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
28330
+ reason: _enum(["disabled", "absent"])
28331
+ });
28332
+ var PlacementStatsSchema = object({
28333
+ policy: SessionPlacementPolicySchema,
28334
+ windowMs: number(),
28335
+ /** How much of the window was actually observed (the hub keeps it in memory). */
28336
+ observedForMs: number(),
28337
+ sessionsNow: number(),
28338
+ /** Most parallel sessions across the cluster inside the window. */
28339
+ clusterPeakSessions: number(),
28340
+ nodes: array(PlacementNodeStatsSchema).readonly(),
28341
+ stalePins: array(StaleDevicePinSchema).readonly()
28342
+ });
28343
+ /**
28344
+ * Where an automatic share's capacity comes from (D755).
28345
+ * - `hardware` — the static capacity of each device at its Auto tune model:
28346
+ * the measured latency table for the node's hardware class.
28347
+ * - `benchmark` — the node's own measured capacity (node benchmark results).
28348
+ * A node with no results falls back to `hardware`, and says so.
28349
+ */
28350
+ var CapacitySourceSchema = _enum(["hardware", "benchmark"]);
28351
+ /** Why a node under the `benchmark` source was sized from hardware instead. */
28352
+ var CapacityFallbackSchema = _enum(["no-benchmark-results", "partial-benchmark-results"]);
28353
+ var SuggestSharesInputSchema = object({
28354
+ headroom: number().min(.3).max(.5).default(.4),
28355
+ /** Default `hardware`. */
28356
+ source: CapacitySourceSchema.default("hardware")
28357
+ });
28358
+ var SuggestedDeviceShareSchema = object({
28359
+ deviceKey: string(),
28360
+ /** Share of the node (0–100, rounded). */
28361
+ share: number(),
28362
+ modelId: string().nullable(),
28363
+ /** Inferences per second at that model, from the measured table; null when sized by a benchmark. */
28364
+ fps: number().nullable(),
28365
+ /** False for a table cell derived from another chip; true for a measured cell or a benchmark. */
28366
+ measured: boolean(),
28367
+ /**
28368
+ * Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋ from the table,
28369
+ * or the benchmark's measured max sessions. Never enforced.
28370
+ */
28371
+ suggestedMaxSessions: number().nullable()
28372
+ });
28373
+ var SuggestedNodeShareSchema = object({
28374
+ nodeId: string(),
28375
+ /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
28376
+ share: number().nullable(),
28377
+ /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
28378
+ capacitySessions: number(),
28379
+ devices: array(SuggestedDeviceShareSchema).readonly(),
28380
+ skippedReason: string().nullable(),
28381
+ /** What this node's capacity was read from; null when the node is skipped. */
28382
+ capacitySource: CapacitySourceSchema.nullable(),
28383
+ /** Set when the `benchmark` source was asked for and this node used `hardware`. */
28384
+ capacityFallback: CapacityFallbackSchema.nullable()
28385
+ });
28386
+ var SuggestSharesResultSchema = object({
28387
+ headroom: number(),
28388
+ /** The source asked for; each node says what it actually used. */
28389
+ source: CapacitySourceSchema,
28390
+ /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
28391
+ cameraFps: number(),
28392
+ /** The Auto tune capacity floor the models were picked at. */
28393
+ minSessionsPerDevice: number(),
28394
+ nodes: array(SuggestedNodeShareSchema).readonly()
28395
+ });
28396
+ /**
28397
+ * Where the node and device shares come from (D750, D755).
28398
+ * - `hardware` (default) — computed by the system from each node's static
28399
+ * capacity (its accelerators at their Auto tune models, from the measured
28400
+ * latency table), recomputed whenever a node or device joins, leaves, is
28401
+ * switched on or off, or changes model. No load input.
28402
+ * - `benchmark` — the same, from each node's measured capacity (node
28403
+ * benchmark results); a node without results falls back to `hardware`.
28404
+ * - `manual` — the operator's stored sliders.
28405
+ * Either way a node or device that cannot take sessions gives its share to
28406
+ * the others in proportion; the stored values are never rewritten for that.
28407
+ */
28408
+ var ShareSourceSchema = _enum([
28409
+ "hardware",
28410
+ "benchmark",
28411
+ "manual"
28412
+ ]);
28413
+ var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
28414
+ object({
28415
+ nodes: record(string(), number()),
28416
+ devices: record(string(), record(string(), number()))
28417
+ });
28418
+ var EffectiveDeviceShareSchema = object({
28419
+ deviceKey: string(),
28420
+ /** Can take sessions now (enabled, available, can run the root). */
28421
+ eligible: boolean(),
28422
+ /** The share the source assigns, as a percentage of the node's devices. */
28423
+ configuredPct: number(),
28424
+ /** The share actually used, after an ineligible device's share went to the others. */
28425
+ effectivePct: number()
28426
+ });
28427
+ var EffectiveNodeShareSchema = object({
28428
+ nodeId: string(),
28429
+ eligible: boolean(),
28430
+ configuredPct: number(),
28431
+ effectivePct: number(),
28432
+ /** Automatic sources: what this node's share was computed from; null under `manual` or before the first answer. */
28433
+ capacitySource: CapacitySourceSchema.nullable(),
28434
+ /** Automatic `benchmark`: why this node used `hardware` instead. */
28435
+ capacityFallback: CapacityFallbackSchema.nullable(),
28436
+ devices: array(EffectiveDeviceShareSchema).readonly()
28437
+ });
28438
+ var EffectiveSharesSchema = object({
28439
+ source: ShareSourceSchema,
28440
+ policy: SessionPlacementPolicySchema,
28441
+ /** An automatic source with no computed answer yet: the stored sliders are used meanwhile. */
28442
+ autoPending: boolean(),
28443
+ /** When the automatic shares were last computed (ms epoch); null = never. */
28444
+ computedAt: number().nullable(),
28445
+ /** What made the system recompute them last. */
28446
+ trigger: string().nullable(),
28447
+ nodes: array(EffectiveNodeShareSchema).readonly(),
28448
+ /** The relative weights the election reads (before eligibility). */
28449
+ nodeWeights: record(string(), number()),
28450
+ deviceWeights: record(string(), record(string(), number()))
28451
+ });
28429
28452
  object({
28430
28453
  activeCameras: number(),
28431
28454
  throttledCameras: number(),
@@ -29837,8 +29860,10 @@ var CameraStepOverridePatchSchema = object({
29837
29860
  modelId: string().optional(),
29838
29861
  settings: record(string(), unknown()).readonly().optional()
29839
29862
  });
29863
+ var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
29840
29864
  var CameraPipelineSettingsSchema = object({
29841
29865
  stepToggles: record(string(), boolean()).optional(),
29866
+ stepSettings: CameraStepSettingsSchema.optional(),
29842
29867
  stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
29843
29868
  pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
29844
29869
  });
@@ -30604,9 +30629,11 @@ var pipelineOrchestratorCapability = {
30604
30629
  auth: "admin"
30605
30630
  }),
30606
30631
  /**
30607
- * Auto tune (D745) — DRY RUN. Recommends ONE detector family (YOLOv9)
30608
- * for the whole cluster from each node's static hardware class, the
30609
- * measured latency table and the detection demand, and lists every write
30632
+ * Auto tune (D745, D755) — DRY RUN. Recommends ONE detector family
30633
+ * (YOLOv9) for the whole cluster from each node's static hardware class
30634
+ * and the measured latency table: per device, the most accurate model
30635
+ * that sustains at least `minSessionsPerDevice` parallel sessions at the
30636
+ * camera rate with the headroom kept free (no load input), and lists every write
30610
30637
  * the apply would make: the node model pins set, the enrichment pins and
30611
30638
  * model-bound thresholds removed (node level and per camera), and the
30612
30639
  * per-camera detector thresholds cleared. Writes nothing. Step
@@ -30645,10 +30672,12 @@ var pipelineOrchestratorCapability = {
30645
30672
  */
30646
30673
  getPlacementStats: method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }),
30647
30674
  /**
30648
- * Load balancing (D748) — shares proportional to each node's measured
30649
- * capacity at the models Auto tune would pick, iterated (≤ 3 rounds)
30650
- * until the shares stop moving; per device, an ADVISORY session cap.
30651
- * Writes nothing.
30675
+ * Load balancing (D748, D755) — shares proportional to each node's
30676
+ * capacity in parallel sessions: from the latency table at the models
30677
+ * Auto tune picks (`hardware`), or from node benchmark results
30678
+ * (`benchmark`, each node without results falling back to `hardware` and
30679
+ * saying so). The automatic shares are exactly this answer. Per device,
30680
+ * an ADVISORY session cap. Writes nothing.
30652
30681
  */
30653
30682
  suggestShares: method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }),
30654
30683
  /**
@@ -30659,9 +30688,11 @@ var pipelineOrchestratorCapability = {
30659
30688
  */
30660
30689
  getEffectiveShares: method(_void(), EffectiveSharesSchema, { auth: "admin" }),
30661
30690
  /**
30662
- * Load balancing (D750) — switch between automatic and manual shares.
30663
- * Going manual seeds the sliders with the current automatic shares (one
30664
- * atomic write), so nothing jumps; going automatic recomputes at once.
30691
+ * Load balancing (D750, D755) — switch the share source: `hardware`
30692
+ * (automatic, from static capacity), `benchmark` (automatic, from node
30693
+ * benchmark results) or `manual`. Going manual seeds the sliders with the
30694
+ * current automatic shares (one atomic write), so nothing jumps; going
30695
+ * to an automatic source recomputes at once.
30665
30696
  */
30666
30697
  setShareSource: method(SetShareSourceInputSchema, object({ success: literal(true) }), {
30667
30698
  kind: "mutation",
@@ -30696,6 +30727,22 @@ var pipelineOrchestratorCapability = {
30696
30727
  kind: "mutation",
30697
30728
  auth: "admin"
30698
30729
  }),
30730
+ /**
30731
+ * Write or clear one step's CAMERA-WIDE settings (D754) — the fields this
30732
+ * camera overrides on every accelerator it runs on. `settings` is the
30733
+ * whole field-level bag for that step (only the overridden keys; a
30734
+ * model-bound field travels with its binding key); `null` or `{}` clears
30735
+ * it. Merged at dispatch between the node base and the per-(node,device)
30736
+ * override, key by key.
30737
+ */
30738
+ setCameraStepSettings: method(object({
30739
+ deviceId: number(),
30740
+ addonId: string(),
30741
+ settings: record(string(), unknown()).nullable()
30742
+ }), object({ success: literal(true) }), {
30743
+ kind: "mutation",
30744
+ auth: "admin"
30745
+ }),
30699
30746
  /** Write or clear the wholesale per-agent pipeline override. Pass `pipeline: null` to drop the override. */
30700
30747
  setCameraPipelineForAgent: method(object({
30701
30748
  deviceId: number(),
@@ -52036,6 +52083,12 @@ Object.freeze({
52036
52083
  addonId: null,
52037
52084
  access: "create"
52038
52085
  },
52086
+ "pipelineOrchestrator.setCameraStepSettings": {
52087
+ capName: "pipeline-orchestrator",
52088
+ capScope: "system",
52089
+ addonId: null,
52090
+ access: "create"
52091
+ },
52039
52092
  "pipelineOrchestrator.setCameraStepToggle": {
52040
52093
  capName: "pipeline-orchestrator",
52041
52094
  capScope: "system",
@@ -57660,6 +57713,11 @@ Object.freeze({
57660
57713
  form: "single",
57661
57714
  optional: false
57662
57715
  }],
57716
+ "pipelineOrchestrator.setCameraStepSettings": [{
57717
+ name: "deviceId",
57718
+ form: "single",
57719
+ optional: false
57720
+ }],
57663
57721
  "pipelineOrchestrator.setCameraStepToggle": [{
57664
57722
  name: "deviceId",
57665
57723
  form: "single",
@@ -1,5 +1,5 @@
1
1
  import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
- import { c as i, s as a } from "./responsive-CSrcORLE.mjs";
2
+ import { c as i, s as a } from "./responsive-CX9nMQmP.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-2kWEtYV7.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-Bi3cgGjf.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
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_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CWgx3QDa.mjs";
3
+ import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CTH5s3ZX.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
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) => {
@@ -1,5 +1,5 @@
1
1
  import { b as e, c as t, g as n, m as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C5jUMd7X.mjs";
2
- import { c as i } from "./responsive-CSrcORLE.mjs";
2
+ import { c as i } from "./responsive-CX9nMQmP.mjs";
3
3
  var a = i("camera", [["path", {
4
4
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
5
5
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { c as e } from "./responsive-CSrcORLE.mjs";
1
+ import { c as e } from "./responsive-CX9nMQmP.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { c as e } from "./responsive-CSrcORLE.mjs";
1
+ import { c as e } from "./responsive-CX9nMQmP.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-ChI8RP64.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-WQk_9a7Q.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-osd-manager",
3
- "version": "0.1.183",
3
+ "version": "0.1.184",
4
4
  "description": "Binds camera on-screen-display slots to live state and recognitions",
5
5
  "keywords": [
6
6
  "camstack",