@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.js CHANGED
@@ -5382,7 +5382,7 @@ var ZodIssueCode = {
5382
5382
  var ZodFirstPartyTypeKind;
5383
5383
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5384
5384
  //#endregion
5385
- //#region ../types/dist/sleep-C16NCZR2.mjs
5385
+ //#region ../types/dist/sleep-DAJ9Er57.mjs
5386
5386
  /**
5387
5387
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5388
5388
  * window to float samples (D455).
@@ -28085,148 +28085,17 @@ var pipelineExecutorCapability = {
28085
28085
  }
28086
28086
  };
28087
28087
  /**
28088
- * Wire shapes of the Load balancing surface (D748): the session placement
28089
- * policy, the atomic share write, the observed placement statistics, the
28090
- * hardware share suggestion and the stale device pins.
28091
- */
28092
- /**
28093
- * How a new detection session picks its node and device.
28094
- * - `least-loaded` — the historical rule: lowest `attached / weight`, a
28095
- * constant node order at a tie (D37). An idle node always ties at 0, so a
28096
- * weight only bites once a node already holds a session.
28097
- * - `share` — the share of PARALLEL sessions is held to the weights, and a
28098
- * full or drowning node yields to a free one (D748).
28099
- */
28100
- var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
28101
- var LoadBalancingSharesInputSchema = object({
28102
- /** nodeId → share (> 0). A node left out keeps its weight. */
28103
- nodes: record(string(), number().positive()).default({}),
28104
- /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
28105
- devices: record(string(), record(string(), number().positive())).default({})
28106
- });
28107
- var PlacementStatsInputSchema = object({
28108
- /** Window the observed shares are averaged over (default 1 h, max 24 h). */
28109
- windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
28110
- var PlacementDeviceStatsSchema = object({
28111
- deviceKey: string(),
28112
- /** Sessions running on this device now. */
28113
- sessionsNow: number(),
28114
- /** Sessions started on this device inside the window. */
28115
- sessionsStarted: number(),
28116
- /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
28117
- observedShare: number().nullable()
28118
- });
28119
- var PlacementNodeStatsSchema = object({
28120
- nodeId: string(),
28121
- sessionsNow: number(),
28122
- sessionsStarted: number(),
28123
- /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
28124
- observedShare: number().nullable(),
28125
- /** Most sessions this node ran at once inside the window. */
28126
- peakSessions: number(),
28127
- /** Sessions a share election handed elsewhere because this node was full or drowning. */
28128
- yieldsAway: number(),
28129
- devices: array(PlacementDeviceStatsSchema).readonly()
28130
- });
28131
- /** A camera's device pin that the session path cannot honour. */
28132
- var StaleDevicePinSchema = object({
28133
- deviceId: number(),
28134
- deviceKey: string(),
28135
- /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
28136
- reason: _enum(["disabled", "absent"])
28137
- });
28138
- var PlacementStatsSchema = object({
28139
- policy: SessionPlacementPolicySchema,
28140
- windowMs: number(),
28141
- /** How much of the window was actually observed (the hub keeps it in memory). */
28142
- observedForMs: number(),
28143
- sessionsNow: number(),
28144
- /** Most parallel sessions across the cluster inside the window. */
28145
- clusterPeakSessions: number(),
28146
- nodes: array(PlacementNodeStatsSchema).readonly(),
28147
- stalePins: array(StaleDevicePinSchema).readonly()
28148
- });
28149
- var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
28150
- var SuggestedDeviceShareSchema = object({
28151
- deviceKey: string(),
28152
- /** Share of the node (0–100, rounded). */
28153
- share: number(),
28154
- modelId: string().nullable(),
28155
- /** Inferences per second at that model, from the measured table. */
28156
- fps: number().nullable(),
28157
- measured: boolean(),
28158
- /** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
28159
- suggestedMaxSessions: number().nullable()
28160
- });
28161
- var SuggestedNodeShareSchema = object({
28162
- nodeId: string(),
28163
- /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
28164
- share: number().nullable(),
28165
- /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
28166
- capacitySessions: number(),
28167
- devices: array(SuggestedDeviceShareSchema).readonly(),
28168
- skippedReason: string().nullable()
28169
- });
28170
- var SuggestSharesResultSchema = object({
28171
- headroom: number(),
28172
- /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
28173
- cameraFps: number(),
28174
- /** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
28175
- iterations: number(),
28176
- nodes: array(SuggestedNodeShareSchema).readonly()
28177
- });
28178
- /**
28179
- * Where the node and device shares come from (D750).
28180
- * - `auto` — computed by the system from the cluster's measured capacity at
28181
- * the Auto tune models, and recomputed whenever a node or device joins,
28182
- * leaves, is switched on or off, or changes model.
28183
- * - `manual` — the operator's stored sliders. A node or device that cannot
28184
- * take sessions gives its share to the others in proportion; the stored
28185
- * values are never rewritten for that.
28186
- */
28187
- var ShareSourceSchema = _enum(["auto", "manual"]);
28188
- var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
28189
- object({
28190
- nodes: record(string(), number()),
28191
- devices: record(string(), record(string(), number()))
28192
- });
28193
- var EffectiveDeviceShareSchema = object({
28194
- deviceKey: string(),
28195
- /** Can take sessions now (enabled, available, can run the root). */
28196
- eligible: boolean(),
28197
- /** The share the source assigns, as a percentage of the node's devices. */
28198
- configuredPct: number(),
28199
- /** The share actually used, after an ineligible device's share went to the others. */
28200
- effectivePct: number()
28201
- });
28202
- var EffectiveNodeShareSchema = object({
28203
- nodeId: string(),
28204
- eligible: boolean(),
28205
- configuredPct: number(),
28206
- effectivePct: number(),
28207
- devices: array(EffectiveDeviceShareSchema).readonly()
28208
- });
28209
- var EffectiveSharesSchema = object({
28210
- source: ShareSourceSchema,
28211
- policy: SessionPlacementPolicySchema,
28212
- /** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
28213
- autoPending: boolean(),
28214
- /** When the automatic shares were last computed (ms epoch); null = never. */
28215
- computedAt: number().nullable(),
28216
- /** What made the system recompute them last. */
28217
- trigger: string().nullable(),
28218
- nodes: array(EffectiveNodeShareSchema).readonly(),
28219
- /** The relative weights the election reads (before eligibility). */
28220
- nodeWeights: record(string(), number()),
28221
- deviceWeights: record(string(), record(string(), number()))
28222
- });
28223
- /**
28224
28088
  * The wire shapes of the Auto tune plan and apply (D745), used by the
28225
28089
  * `pipeline-orchestrator` cap. The recommender's own types
28226
- * (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
28090
+ * (`recommend.ts`) are the TS face of the same data; these
28227
28091
  * schemas are what crosses the cap boundary.
28228
28092
  */
28229
28093
  var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
28094
+ /** The operator's range for it. */
28095
+ var MIN_SESSIONS_PER_DEVICE_RANGE = {
28096
+ min: 1,
28097
+ max: 8
28098
+ };
28230
28099
  var HardwareClassIdSchema = _enum([
28231
28100
  "intel-core-ultra",
28232
28101
  "intel-n-series",
@@ -28244,8 +28113,9 @@ var AcceleratorKindSchema = _enum([
28244
28113
  ]);
28245
28114
  var RecommendationReasonSchema = discriminatedUnion("kind", [
28246
28115
  object({
28247
- kind: literal("fits"),
28248
- utilisation: number()
28116
+ kind: literal("capacity"),
28117
+ sessions: number(),
28118
+ minSessions: number()
28249
28119
  }),
28250
28120
  object({
28251
28121
  kind: literal("tie-faster"),
@@ -28260,16 +28130,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
28260
28130
  }),
28261
28131
  object({
28262
28132
  kind: literal("no-fit-lightest"),
28263
- utilisation: number()
28133
+ sessions: number(),
28134
+ minSessions: number()
28264
28135
  }),
28265
28136
  object({
28266
28137
  kind: literal("derived-latency"),
28267
28138
  modelId: string()
28268
28139
  }),
28269
- object({
28270
- kind: literal("estimated-load"),
28271
- observedForMs: number().nullable()
28272
- }),
28273
28140
  object({ kind: literal("cpu-device") }),
28274
28141
  object({ kind: literal("coral-untouched") }),
28275
28142
  object({ kind: literal("device-disabled") }),
@@ -28285,28 +28152,13 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
28285
28152
  format: ModelFormatSchema$1
28286
28153
  })
28287
28154
  ]);
28288
- var DeviceDemandSchema = object({
28289
- nodeId: string(),
28290
- deviceKey: string(),
28291
- demandFps: number(),
28292
- maxCameraFps: number(),
28293
- alwaysOnCameras: number(),
28294
- onMotionSessions: number(),
28295
- onMotionSource: _enum([
28296
- "observed-24h",
28297
- "estimate",
28298
- "none"
28299
- ]),
28300
- observedForMs: number().nullable(),
28301
- /** How on-motion sessions were charged: per-device observation, or split by share (D748). */
28302
- placement: SessionPlacementPolicySchema
28303
- });
28304
28155
  var DeviceModelChoiceSchema = object({
28305
28156
  modelId: string(),
28306
28157
  p50Ms: number(),
28307
28158
  fps: number(),
28308
28159
  measured: boolean(),
28309
- utilisation: number(),
28160
+ /** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
28161
+ capacitySessions: number(),
28310
28162
  personRecall: number()
28311
28163
  });
28312
28164
  var DeviceRecommendationSchema = object({
@@ -28314,7 +28166,6 @@ var DeviceRecommendationSchema = object({
28314
28166
  accelerator: AcceleratorKindSchema.nullable(),
28315
28167
  enabled: boolean(),
28316
28168
  available: boolean(),
28317
- demand: DeviceDemandSchema.nullable(),
28318
28169
  chosen: DeviceModelChoiceSchema.nullable(),
28319
28170
  reasons: array(RecommendationReasonSchema).readonly()
28320
28171
  });
@@ -28375,20 +28226,20 @@ var AutoTuneOptionsSchema = object({
28375
28226
  /** Share of each accelerator's throughput kept free (0.3–0.5). */
28376
28227
  headroom: number().min(.3).max(.5).default(.4),
28377
28228
  /**
28378
- * What-if shares (D748): plan as if these node/device shares were stored
28379
- * and the policy were `share`. Absent = the stored shares under the stored
28380
- * policy. A what-if plan is for display; apply always re-plans from what
28381
- * is stored.
28229
+ * The least number of parallel sessions every device must sustain at the
28230
+ * camera rate with the headroom kept free (D755). The most accurate model
28231
+ * that reaches it wins.
28382
28232
  */
28383
- shares: LoadBalancingSharesInputSchema.optional()
28233
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
28384
28234
  });
28385
28235
  var AutoTunePlanSchema = object({
28386
28236
  /** Hash of everything the apply will write — the apply refuses a different one. */
28387
28237
  planHash: string(),
28388
28238
  family: literal("yolov9"),
28389
28239
  headroom: number(),
28390
- /** Planned under what-if shares (D748): for display — apply refuses it as stale. */
28391
- whatIf: boolean(),
28240
+ minSessionsPerDevice: number(),
28241
+ /** The detection rate a session is counted at (the fastest camera running the pipeline root). */
28242
+ cameraFps: number(),
28392
28243
  generatedAt: number(),
28393
28244
  nodes: array(NodeRecommendationSchema).readonly(),
28394
28245
  nodeChanges: array(NodeDeviceChangeSchema).readonly(),
@@ -28398,7 +28249,8 @@ var AutoTunePlanSchema = object({
28398
28249
  });
28399
28250
  var AutoTuneApplyInputSchema = object({
28400
28251
  planHash: string(),
28401
- headroom: number().min(.3).max(.5).default(.4)
28252
+ headroom: number().min(.3).max(.5).default(.4),
28253
+ minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
28402
28254
  });
28403
28255
  var AutoTunePhaseResultSchema = object({
28404
28256
  phase: _enum([
@@ -28430,6 +28282,177 @@ var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
28430
28282
  reason: _enum(["apply-in-progress"])
28431
28283
  })
28432
28284
  ]);
28285
+ /**
28286
+ * Wire shapes of the Load balancing surface (D748): the session placement
28287
+ * policy, the atomic share write, the observed placement statistics, the
28288
+ * hardware share suggestion and the stale device pins.
28289
+ */
28290
+ /**
28291
+ * How a new detection session picks its node and device.
28292
+ * - `least-loaded` — the historical rule: lowest `attached / weight`, a
28293
+ * constant node order at a tie (D37). An idle node always ties at 0, so a
28294
+ * weight only bites once a node already holds a session.
28295
+ * - `share` — the share of PARALLEL sessions is held to the weights, and a
28296
+ * full or drowning node yields to a free one (D748).
28297
+ */
28298
+ var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
28299
+ var LoadBalancingSharesInputSchema = object({
28300
+ /** nodeId → share (> 0). A node left out keeps its weight. */
28301
+ nodes: record(string(), number().positive()).default({}),
28302
+ /** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
28303
+ devices: record(string(), record(string(), number().positive())).default({})
28304
+ });
28305
+ var PlacementStatsInputSchema = object({
28306
+ /** Window the observed shares are averaged over (default 1 h, max 24 h). */
28307
+ windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
28308
+ var PlacementDeviceStatsSchema = object({
28309
+ deviceKey: string(),
28310
+ /** Sessions running on this device now. */
28311
+ sessionsNow: number(),
28312
+ /** Sessions started on this device inside the window. */
28313
+ sessionsStarted: number(),
28314
+ /** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
28315
+ observedShare: number().nullable()
28316
+ });
28317
+ var PlacementNodeStatsSchema = object({
28318
+ nodeId: string(),
28319
+ sessionsNow: number(),
28320
+ sessionsStarted: number(),
28321
+ /** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
28322
+ observedShare: number().nullable(),
28323
+ /** Most sessions this node ran at once inside the window. */
28324
+ peakSessions: number(),
28325
+ /** Sessions a share election handed elsewhere because this node was full or drowning. */
28326
+ yieldsAway: number(),
28327
+ devices: array(PlacementDeviceStatsSchema).readonly()
28328
+ });
28329
+ /** A camera's device pin that the session path cannot honour. */
28330
+ var StaleDevicePinSchema = object({
28331
+ deviceId: number(),
28332
+ deviceKey: string(),
28333
+ /** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
28334
+ reason: _enum(["disabled", "absent"])
28335
+ });
28336
+ var PlacementStatsSchema = object({
28337
+ policy: SessionPlacementPolicySchema,
28338
+ windowMs: number(),
28339
+ /** How much of the window was actually observed (the hub keeps it in memory). */
28340
+ observedForMs: number(),
28341
+ sessionsNow: number(),
28342
+ /** Most parallel sessions across the cluster inside the window. */
28343
+ clusterPeakSessions: number(),
28344
+ nodes: array(PlacementNodeStatsSchema).readonly(),
28345
+ stalePins: array(StaleDevicePinSchema).readonly()
28346
+ });
28347
+ /**
28348
+ * Where an automatic share's capacity comes from (D755).
28349
+ * - `hardware` — the static capacity of each device at its Auto tune model:
28350
+ * the measured latency table for the node's hardware class.
28351
+ * - `benchmark` — the node's own measured capacity (node benchmark results).
28352
+ * A node with no results falls back to `hardware`, and says so.
28353
+ */
28354
+ var CapacitySourceSchema = _enum(["hardware", "benchmark"]);
28355
+ /** Why a node under the `benchmark` source was sized from hardware instead. */
28356
+ var CapacityFallbackSchema = _enum(["no-benchmark-results", "partial-benchmark-results"]);
28357
+ var SuggestSharesInputSchema = object({
28358
+ headroom: number().min(.3).max(.5).default(.4),
28359
+ /** Default `hardware`. */
28360
+ source: CapacitySourceSchema.default("hardware")
28361
+ });
28362
+ var SuggestedDeviceShareSchema = object({
28363
+ deviceKey: string(),
28364
+ /** Share of the node (0–100, rounded). */
28365
+ share: number(),
28366
+ modelId: string().nullable(),
28367
+ /** Inferences per second at that model, from the measured table; null when sized by a benchmark. */
28368
+ fps: number().nullable(),
28369
+ /** False for a table cell derived from another chip; true for a measured cell or a benchmark. */
28370
+ measured: boolean(),
28371
+ /**
28372
+ * Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋ from the table,
28373
+ * or the benchmark's measured max sessions. Never enforced.
28374
+ */
28375
+ suggestedMaxSessions: number().nullable()
28376
+ });
28377
+ var SuggestedNodeShareSchema = object({
28378
+ nodeId: string(),
28379
+ /** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
28380
+ share: number().nullable(),
28381
+ /** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
28382
+ capacitySessions: number(),
28383
+ devices: array(SuggestedDeviceShareSchema).readonly(),
28384
+ skippedReason: string().nullable(),
28385
+ /** What this node's capacity was read from; null when the node is skipped. */
28386
+ capacitySource: CapacitySourceSchema.nullable(),
28387
+ /** Set when the `benchmark` source was asked for and this node used `hardware`. */
28388
+ capacityFallback: CapacityFallbackSchema.nullable()
28389
+ });
28390
+ var SuggestSharesResultSchema = object({
28391
+ headroom: number(),
28392
+ /** The source asked for; each node says what it actually used. */
28393
+ source: CapacitySourceSchema,
28394
+ /** Camera detection rate the capacity is counted in (the fastest camera's fps). */
28395
+ cameraFps: number(),
28396
+ /** The Auto tune capacity floor the models were picked at. */
28397
+ minSessionsPerDevice: number(),
28398
+ nodes: array(SuggestedNodeShareSchema).readonly()
28399
+ });
28400
+ /**
28401
+ * Where the node and device shares come from (D750, D755).
28402
+ * - `hardware` (default) — computed by the system from each node's static
28403
+ * capacity (its accelerators at their Auto tune models, from the measured
28404
+ * latency table), recomputed whenever a node or device joins, leaves, is
28405
+ * switched on or off, or changes model. No load input.
28406
+ * - `benchmark` — the same, from each node's measured capacity (node
28407
+ * benchmark results); a node without results falls back to `hardware`.
28408
+ * - `manual` — the operator's stored sliders.
28409
+ * Either way a node or device that cannot take sessions gives its share to
28410
+ * the others in proportion; the stored values are never rewritten for that.
28411
+ */
28412
+ var ShareSourceSchema = _enum([
28413
+ "hardware",
28414
+ "benchmark",
28415
+ "manual"
28416
+ ]);
28417
+ var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
28418
+ object({
28419
+ nodes: record(string(), number()),
28420
+ devices: record(string(), record(string(), number()))
28421
+ });
28422
+ var EffectiveDeviceShareSchema = object({
28423
+ deviceKey: string(),
28424
+ /** Can take sessions now (enabled, available, can run the root). */
28425
+ eligible: boolean(),
28426
+ /** The share the source assigns, as a percentage of the node's devices. */
28427
+ configuredPct: number(),
28428
+ /** The share actually used, after an ineligible device's share went to the others. */
28429
+ effectivePct: number()
28430
+ });
28431
+ var EffectiveNodeShareSchema = object({
28432
+ nodeId: string(),
28433
+ eligible: boolean(),
28434
+ configuredPct: number(),
28435
+ effectivePct: number(),
28436
+ /** Automatic sources: what this node's share was computed from; null under `manual` or before the first answer. */
28437
+ capacitySource: CapacitySourceSchema.nullable(),
28438
+ /** Automatic `benchmark`: why this node used `hardware` instead. */
28439
+ capacityFallback: CapacityFallbackSchema.nullable(),
28440
+ devices: array(EffectiveDeviceShareSchema).readonly()
28441
+ });
28442
+ var EffectiveSharesSchema = object({
28443
+ source: ShareSourceSchema,
28444
+ policy: SessionPlacementPolicySchema,
28445
+ /** An automatic source with no computed answer yet: the stored sliders are used meanwhile. */
28446
+ autoPending: boolean(),
28447
+ /** When the automatic shares were last computed (ms epoch); null = never. */
28448
+ computedAt: number().nullable(),
28449
+ /** What made the system recompute them last. */
28450
+ trigger: string().nullable(),
28451
+ nodes: array(EffectiveNodeShareSchema).readonly(),
28452
+ /** The relative weights the election reads (before eligibility). */
28453
+ nodeWeights: record(string(), number()),
28454
+ deviceWeights: record(string(), record(string(), number()))
28455
+ });
28433
28456
  object({
28434
28457
  activeCameras: number(),
28435
28458
  throttledCameras: number(),
@@ -29841,8 +29864,10 @@ var CameraStepOverridePatchSchema = object({
29841
29864
  modelId: string().optional(),
29842
29865
  settings: record(string(), unknown()).readonly().optional()
29843
29866
  });
29867
+ var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
29844
29868
  var CameraPipelineSettingsSchema = object({
29845
29869
  stepToggles: record(string(), boolean()).optional(),
29870
+ stepSettings: CameraStepSettingsSchema.optional(),
29846
29871
  stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
29847
29872
  pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
29848
29873
  });
@@ -30608,9 +30633,11 @@ var pipelineOrchestratorCapability = {
30608
30633
  auth: "admin"
30609
30634
  }),
30610
30635
  /**
30611
- * Auto tune (D745) — DRY RUN. Recommends ONE detector family (YOLOv9)
30612
- * for the whole cluster from each node's static hardware class, the
30613
- * measured latency table and the detection demand, and lists every write
30636
+ * Auto tune (D745, D755) — DRY RUN. Recommends ONE detector family
30637
+ * (YOLOv9) for the whole cluster from each node's static hardware class
30638
+ * and the measured latency table: per device, the most accurate model
30639
+ * that sustains at least `minSessionsPerDevice` parallel sessions at the
30640
+ * camera rate with the headroom kept free (no load input), and lists every write
30614
30641
  * the apply would make: the node model pins set, the enrichment pins and
30615
30642
  * model-bound thresholds removed (node level and per camera), and the
30616
30643
  * per-camera detector thresholds cleared. Writes nothing. Step
@@ -30649,10 +30676,12 @@ var pipelineOrchestratorCapability = {
30649
30676
  */
30650
30677
  getPlacementStats: method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }),
30651
30678
  /**
30652
- * Load balancing (D748) — shares proportional to each node's measured
30653
- * capacity at the models Auto tune would pick, iterated (≤ 3 rounds)
30654
- * until the shares stop moving; per device, an ADVISORY session cap.
30655
- * Writes nothing.
30679
+ * Load balancing (D748, D755) — shares proportional to each node's
30680
+ * capacity in parallel sessions: from the latency table at the models
30681
+ * Auto tune picks (`hardware`), or from node benchmark results
30682
+ * (`benchmark`, each node without results falling back to `hardware` and
30683
+ * saying so). The automatic shares are exactly this answer. Per device,
30684
+ * an ADVISORY session cap. Writes nothing.
30656
30685
  */
30657
30686
  suggestShares: method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }),
30658
30687
  /**
@@ -30663,9 +30692,11 @@ var pipelineOrchestratorCapability = {
30663
30692
  */
30664
30693
  getEffectiveShares: method(_void(), EffectiveSharesSchema, { auth: "admin" }),
30665
30694
  /**
30666
- * Load balancing (D750) — switch between automatic and manual shares.
30667
- * Going manual seeds the sliders with the current automatic shares (one
30668
- * atomic write), so nothing jumps; going automatic recomputes at once.
30695
+ * Load balancing (D750, D755) — switch the share source: `hardware`
30696
+ * (automatic, from static capacity), `benchmark` (automatic, from node
30697
+ * benchmark results) or `manual`. Going manual seeds the sliders with the
30698
+ * current automatic shares (one atomic write), so nothing jumps; going
30699
+ * to an automatic source recomputes at once.
30669
30700
  */
30670
30701
  setShareSource: method(SetShareSourceInputSchema, object({ success: literal(true) }), {
30671
30702
  kind: "mutation",
@@ -30700,6 +30731,22 @@ var pipelineOrchestratorCapability = {
30700
30731
  kind: "mutation",
30701
30732
  auth: "admin"
30702
30733
  }),
30734
+ /**
30735
+ * Write or clear one step's CAMERA-WIDE settings (D754) — the fields this
30736
+ * camera overrides on every accelerator it runs on. `settings` is the
30737
+ * whole field-level bag for that step (only the overridden keys; a
30738
+ * model-bound field travels with its binding key); `null` or `{}` clears
30739
+ * it. Merged at dispatch between the node base and the per-(node,device)
30740
+ * override, key by key.
30741
+ */
30742
+ setCameraStepSettings: method(object({
30743
+ deviceId: number(),
30744
+ addonId: string(),
30745
+ settings: record(string(), unknown()).nullable()
30746
+ }), object({ success: literal(true) }), {
30747
+ kind: "mutation",
30748
+ auth: "admin"
30749
+ }),
30703
30750
  /** Write or clear the wholesale per-agent pipeline override. Pass `pipeline: null` to drop the override. */
30704
30751
  setCameraPipelineForAgent: method(object({
30705
30752
  deviceId: number(),
@@ -52040,6 +52087,12 @@ Object.freeze({
52040
52087
  addonId: null,
52041
52088
  access: "create"
52042
52089
  },
52090
+ "pipelineOrchestrator.setCameraStepSettings": {
52091
+ capName: "pipeline-orchestrator",
52092
+ capScope: "system",
52093
+ addonId: null,
52094
+ access: "create"
52095
+ },
52043
52096
  "pipelineOrchestrator.setCameraStepToggle": {
52044
52097
  capName: "pipeline-orchestrator",
52045
52098
  capScope: "system",
@@ -57664,6 +57717,11 @@ Object.freeze({
57664
57717
  form: "single",
57665
57718
  optional: false
57666
57719
  }],
57720
+ "pipelineOrchestrator.setCameraStepSettings": [{
57721
+ name: "deviceId",
57722
+ form: "single",
57723
+ optional: false
57724
+ }],
57667
57725
  "pipelineOrchestrator.setCameraStepToggle": [{
57668
57726
  name: "deviceId",
57669
57727
  form: "single",