@camstack/addon-osd-manager 0.1.180 → 0.1.181
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.
- package/dist/{MotionZonesSettings-ZY8nEZ4A.mjs → MotionZonesSettings-r-5gadcs.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-CBh-nVj6.mjs → PrivacyMaskSettings-DPJp4rMl.mjs} +4 -4
- package/dist/{SceneMonitorEditor-CCZdsPeR.mjs → SceneMonitorEditor-H5pQrHy7.mjs} +3 -3
- package/dist/_stub.js +4298 -4298
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-odNWYe2P.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-C2I-8Qsr.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CYSzhahm.mjs +26 -0
- package/dist/addon-osd-manager.css +1 -1
- package/dist/{hostInit-C4sW45bX.mjs → hostInit-CaDP2Kts.mjs} +2 -2
- package/dist/index.js +152 -23
- package/dist/index.mjs +152 -23
- package/dist/{player-overlays-ClqS_7qr.mjs → player-overlays-CWcXFKuD.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-OY2AYs2K.mjs → responsive-BpY0yafY.mjs} +1 -1
- package/dist/{scene-monitor-copy-D50g5tDa.mjs → scene-monitor-copy-413cUke-.mjs} +1 -1
- package/dist/{square-CMXmMI2_.mjs → square-CtY8II3Z.mjs} +1 -1
- package/dist/{trash-2-CS8cJOvy.mjs → trash-2-m46kRm2C.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-Ga9h-wWR.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-7EsNkWO1.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4hHi1KB.mjs +0 -26
package/dist/index.js
CHANGED
|
@@ -28085,6 +28085,97 @@ 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
|
+
/**
|
|
28088
28179
|
* The wire shapes of the Best settings plan and apply (D745), used by the
|
|
28089
28180
|
* `pipeline-orchestrator` cap. The recommender's own types
|
|
28090
28181
|
* (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
|
|
@@ -28161,7 +28252,9 @@ var DeviceDemandSchema = object({
|
|
|
28161
28252
|
"estimate",
|
|
28162
28253
|
"none"
|
|
28163
28254
|
]),
|
|
28164
|
-
observedForMs: number().nullable()
|
|
28255
|
+
observedForMs: number().nullable(),
|
|
28256
|
+
/** How on-motion sessions were charged: per-device observation, or split by share (D748). */
|
|
28257
|
+
placement: SessionPlacementPolicySchema
|
|
28165
28258
|
});
|
|
28166
28259
|
var DeviceModelChoiceSchema = object({
|
|
28167
28260
|
modelId: string(),
|
|
@@ -28233,14 +28326,24 @@ var BestSettingsWarningSchema = discriminatedUnion("kind", [
|
|
|
28233
28326
|
deviceKey: string()
|
|
28234
28327
|
})
|
|
28235
28328
|
]);
|
|
28236
|
-
var BestSettingsOptionsSchema = object({
|
|
28237
|
-
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
28238
|
-
headroom: number().min(.3).max(.5).default(.4)
|
|
28329
|
+
var BestSettingsOptionsSchema = object({
|
|
28330
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
28331
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
28332
|
+
/**
|
|
28333
|
+
* What-if shares (D748): plan as if these node/device shares were stored
|
|
28334
|
+
* and the policy were `share`. Absent = the stored shares under the stored
|
|
28335
|
+
* policy. A what-if plan is for display; apply always re-plans from what
|
|
28336
|
+
* is stored.
|
|
28337
|
+
*/
|
|
28338
|
+
shares: LoadBalancingSharesInputSchema.optional()
|
|
28339
|
+
});
|
|
28239
28340
|
var BestSettingsPlanSchema = object({
|
|
28240
28341
|
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
28241
28342
|
planHash: string(),
|
|
28242
28343
|
family: literal("yolov9"),
|
|
28243
28344
|
headroom: number(),
|
|
28345
|
+
/** Planned under what-if shares (D748): for display — apply refuses it as stale. */
|
|
28346
|
+
whatIf: boolean(),
|
|
28244
28347
|
generatedAt: number(),
|
|
28245
28348
|
nodes: array(NodeRecommendationSchema).readonly(),
|
|
28246
28349
|
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
@@ -29694,7 +29797,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
29694
29797
|
settings: record(string(), unknown()).readonly().optional()
|
|
29695
29798
|
});
|
|
29696
29799
|
var CameraPipelineSettingsSchema = object({
|
|
29697
|
-
pinnedAgentNodeId: string().optional(),
|
|
29698
29800
|
stepToggles: record(string(), boolean()).optional(),
|
|
29699
29801
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
29700
29802
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -30342,18 +30444,6 @@ var pipelineOrchestratorCapability = {
|
|
|
30342
30444
|
auth: "admin"
|
|
30343
30445
|
}),
|
|
30344
30446
|
/**
|
|
30345
|
-
* Set a node's detection WEIGHT (relative share for the quota balancer).
|
|
30346
|
-
* `null` clears it (back to the implicit weight 1). Unpinned cameras
|
|
30347
|
-
* distribute proportionally to weight; `maxCameras` still clamps on top.
|
|
30348
|
-
*/
|
|
30349
|
-
setAgentDetectWeight: method(object({
|
|
30350
|
-
agentNodeId: string(),
|
|
30351
|
-
detectWeight: number().positive().nullable()
|
|
30352
|
-
}), object({ success: literal(true) }), {
|
|
30353
|
-
kind: "mutation",
|
|
30354
|
-
auth: "admin"
|
|
30355
|
-
}),
|
|
30356
|
-
/**
|
|
30357
30447
|
* Set one node's placement CAPABILITIES — the per-node record that
|
|
30358
30448
|
* replaced the four flat orchestrator lists (`enabledNodes`,
|
|
30359
30449
|
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`).
|
|
@@ -30493,6 +30583,33 @@ var pipelineOrchestratorCapability = {
|
|
|
30493
30583
|
kind: "mutation",
|
|
30494
30584
|
auth: "admin"
|
|
30495
30585
|
}),
|
|
30586
|
+
/**
|
|
30587
|
+
* Load balancing (D748) — write node shares (`detectWeight`) and per-node
|
|
30588
|
+
* device shares (inference-device `weight`) in ONE atomic read-modify-write
|
|
30589
|
+
* of the agent settings — the only writer of node shares (the per-node
|
|
30590
|
+
* `setAgentDetectWeight` it replaced raced its siblings, one RMW each).
|
|
30591
|
+
* A node or device left out keeps its weight. Never changes the
|
|
30592
|
+
* `sessionPlacement` policy.
|
|
30593
|
+
*/
|
|
30594
|
+
setLoadBalancingShares: method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
30595
|
+
kind: "mutation",
|
|
30596
|
+
auth: "admin"
|
|
30597
|
+
}),
|
|
30598
|
+
/**
|
|
30599
|
+
* Load balancing (D748) — what placement actually did: per node and
|
|
30600
|
+
* device, sessions now, sessions started and the time-weighted share of
|
|
30601
|
+
* PARALLEL sessions over `windowMs`; the cluster's parallel peak; yields
|
|
30602
|
+
* a share election made; and every device pin the session path cannot
|
|
30603
|
+
* honour. In memory on the hub — a restart starts a new window.
|
|
30604
|
+
*/
|
|
30605
|
+
getPlacementStats: method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }),
|
|
30606
|
+
/**
|
|
30607
|
+
* Load balancing (D748) — shares proportional to each node's measured
|
|
30608
|
+
* capacity at the models Best settings would pick, iterated (≤ 3 rounds)
|
|
30609
|
+
* until the shares stop moving; per device, an ADVISORY session cap.
|
|
30610
|
+
* Writes nothing.
|
|
30611
|
+
*/
|
|
30612
|
+
suggestShares: method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }),
|
|
30496
30613
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
30497
30614
|
getCameraSettings: method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()),
|
|
30498
30615
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -51724,6 +51841,12 @@ Object.freeze({
|
|
|
51724
51841
|
addonId: null,
|
|
51725
51842
|
access: "view"
|
|
51726
51843
|
},
|
|
51844
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
51845
|
+
capName: "pipeline-orchestrator",
|
|
51846
|
+
capScope: "system",
|
|
51847
|
+
addonId: null,
|
|
51848
|
+
access: "view"
|
|
51849
|
+
},
|
|
51727
51850
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
51728
51851
|
capName: "pipeline-orchestrator",
|
|
51729
51852
|
capScope: "system",
|
|
@@ -51814,12 +51937,6 @@ Object.freeze({
|
|
|
51814
51937
|
addonId: null,
|
|
51815
51938
|
access: "create"
|
|
51816
51939
|
},
|
|
51817
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
51818
|
-
capName: "pipeline-orchestrator",
|
|
51819
|
-
capScope: "system",
|
|
51820
|
-
addonId: null,
|
|
51821
|
-
access: "create"
|
|
51822
|
-
},
|
|
51823
51940
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
51824
51941
|
capName: "pipeline-orchestrator",
|
|
51825
51942
|
capScope: "system",
|
|
@@ -51874,12 +51991,24 @@ Object.freeze({
|
|
|
51874
51991
|
addonId: null,
|
|
51875
51992
|
access: "create"
|
|
51876
51993
|
},
|
|
51994
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
51995
|
+
capName: "pipeline-orchestrator",
|
|
51996
|
+
capScope: "system",
|
|
51997
|
+
addonId: null,
|
|
51998
|
+
access: "create"
|
|
51999
|
+
},
|
|
51877
52000
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
51878
52001
|
capName: "pipeline-orchestrator",
|
|
51879
52002
|
capScope: "system",
|
|
51880
52003
|
addonId: null,
|
|
51881
52004
|
access: "create"
|
|
51882
52005
|
},
|
|
52006
|
+
"pipelineOrchestrator.suggestShares": {
|
|
52007
|
+
capName: "pipeline-orchestrator",
|
|
52008
|
+
capScope: "system",
|
|
52009
|
+
addonId: null,
|
|
52010
|
+
access: "view"
|
|
52011
|
+
},
|
|
51883
52012
|
"pipelineOrchestrator.unassignAudio": {
|
|
51884
52013
|
capName: "pipeline-orchestrator",
|
|
51885
52014
|
capScope: "system",
|
package/dist/index.mjs
CHANGED
|
@@ -28081,6 +28081,97 @@ 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
|
+
/**
|
|
28084
28175
|
* The wire shapes of the Best settings plan and apply (D745), used by the
|
|
28085
28176
|
* `pipeline-orchestrator` cap. The recommender's own types
|
|
28086
28177
|
* (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
|
|
@@ -28157,7 +28248,9 @@ var DeviceDemandSchema = object({
|
|
|
28157
28248
|
"estimate",
|
|
28158
28249
|
"none"
|
|
28159
28250
|
]),
|
|
28160
|
-
observedForMs: number().nullable()
|
|
28251
|
+
observedForMs: number().nullable(),
|
|
28252
|
+
/** How on-motion sessions were charged: per-device observation, or split by share (D748). */
|
|
28253
|
+
placement: SessionPlacementPolicySchema
|
|
28161
28254
|
});
|
|
28162
28255
|
var DeviceModelChoiceSchema = object({
|
|
28163
28256
|
modelId: string(),
|
|
@@ -28229,14 +28322,24 @@ var BestSettingsWarningSchema = discriminatedUnion("kind", [
|
|
|
28229
28322
|
deviceKey: string()
|
|
28230
28323
|
})
|
|
28231
28324
|
]);
|
|
28232
|
-
var BestSettingsOptionsSchema = object({
|
|
28233
|
-
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
28234
|
-
headroom: number().min(.3).max(.5).default(.4)
|
|
28325
|
+
var BestSettingsOptionsSchema = object({
|
|
28326
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
28327
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
28328
|
+
/**
|
|
28329
|
+
* What-if shares (D748): plan as if these node/device shares were stored
|
|
28330
|
+
* and the policy were `share`. Absent = the stored shares under the stored
|
|
28331
|
+
* policy. A what-if plan is for display; apply always re-plans from what
|
|
28332
|
+
* is stored.
|
|
28333
|
+
*/
|
|
28334
|
+
shares: LoadBalancingSharesInputSchema.optional()
|
|
28335
|
+
});
|
|
28235
28336
|
var BestSettingsPlanSchema = object({
|
|
28236
28337
|
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
28237
28338
|
planHash: string(),
|
|
28238
28339
|
family: literal("yolov9"),
|
|
28239
28340
|
headroom: number(),
|
|
28341
|
+
/** Planned under what-if shares (D748): for display — apply refuses it as stale. */
|
|
28342
|
+
whatIf: boolean(),
|
|
28240
28343
|
generatedAt: number(),
|
|
28241
28344
|
nodes: array(NodeRecommendationSchema).readonly(),
|
|
28242
28345
|
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
@@ -29690,7 +29793,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
29690
29793
|
settings: record(string(), unknown()).readonly().optional()
|
|
29691
29794
|
});
|
|
29692
29795
|
var CameraPipelineSettingsSchema = object({
|
|
29693
|
-
pinnedAgentNodeId: string().optional(),
|
|
29694
29796
|
stepToggles: record(string(), boolean()).optional(),
|
|
29695
29797
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
29696
29798
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -30338,18 +30440,6 @@ var pipelineOrchestratorCapability = {
|
|
|
30338
30440
|
auth: "admin"
|
|
30339
30441
|
}),
|
|
30340
30442
|
/**
|
|
30341
|
-
* Set a node's detection WEIGHT (relative share for the quota balancer).
|
|
30342
|
-
* `null` clears it (back to the implicit weight 1). Unpinned cameras
|
|
30343
|
-
* distribute proportionally to weight; `maxCameras` still clamps on top.
|
|
30344
|
-
*/
|
|
30345
|
-
setAgentDetectWeight: method(object({
|
|
30346
|
-
agentNodeId: string(),
|
|
30347
|
-
detectWeight: number().positive().nullable()
|
|
30348
|
-
}), object({ success: literal(true) }), {
|
|
30349
|
-
kind: "mutation",
|
|
30350
|
-
auth: "admin"
|
|
30351
|
-
}),
|
|
30352
|
-
/**
|
|
30353
30443
|
* Set one node's placement CAPABILITIES — the per-node record that
|
|
30354
30444
|
* replaced the four flat orchestrator lists (`enabledNodes`,
|
|
30355
30445
|
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`).
|
|
@@ -30489,6 +30579,33 @@ var pipelineOrchestratorCapability = {
|
|
|
30489
30579
|
kind: "mutation",
|
|
30490
30580
|
auth: "admin"
|
|
30491
30581
|
}),
|
|
30582
|
+
/**
|
|
30583
|
+
* Load balancing (D748) — write node shares (`detectWeight`) and per-node
|
|
30584
|
+
* device shares (inference-device `weight`) in ONE atomic read-modify-write
|
|
30585
|
+
* of the agent settings — the only writer of node shares (the per-node
|
|
30586
|
+
* `setAgentDetectWeight` it replaced raced its siblings, one RMW each).
|
|
30587
|
+
* A node or device left out keeps its weight. Never changes the
|
|
30588
|
+
* `sessionPlacement` policy.
|
|
30589
|
+
*/
|
|
30590
|
+
setLoadBalancingShares: method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
30591
|
+
kind: "mutation",
|
|
30592
|
+
auth: "admin"
|
|
30593
|
+
}),
|
|
30594
|
+
/**
|
|
30595
|
+
* Load balancing (D748) — what placement actually did: per node and
|
|
30596
|
+
* device, sessions now, sessions started and the time-weighted share of
|
|
30597
|
+
* PARALLEL sessions over `windowMs`; the cluster's parallel peak; yields
|
|
30598
|
+
* a share election made; and every device pin the session path cannot
|
|
30599
|
+
* honour. In memory on the hub — a restart starts a new window.
|
|
30600
|
+
*/
|
|
30601
|
+
getPlacementStats: method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }),
|
|
30602
|
+
/**
|
|
30603
|
+
* Load balancing (D748) — shares proportional to each node's measured
|
|
30604
|
+
* capacity at the models Best settings would pick, iterated (≤ 3 rounds)
|
|
30605
|
+
* until the shares stop moving; per device, an ADVISORY session cap.
|
|
30606
|
+
* Writes nothing.
|
|
30607
|
+
*/
|
|
30608
|
+
suggestShares: method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }),
|
|
30492
30609
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
30493
30610
|
getCameraSettings: method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()),
|
|
30494
30611
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -51720,6 +51837,12 @@ Object.freeze({
|
|
|
51720
51837
|
addonId: null,
|
|
51721
51838
|
access: "view"
|
|
51722
51839
|
},
|
|
51840
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
51841
|
+
capName: "pipeline-orchestrator",
|
|
51842
|
+
capScope: "system",
|
|
51843
|
+
addonId: null,
|
|
51844
|
+
access: "view"
|
|
51845
|
+
},
|
|
51723
51846
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
51724
51847
|
capName: "pipeline-orchestrator",
|
|
51725
51848
|
capScope: "system",
|
|
@@ -51810,12 +51933,6 @@ Object.freeze({
|
|
|
51810
51933
|
addonId: null,
|
|
51811
51934
|
access: "create"
|
|
51812
51935
|
},
|
|
51813
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
51814
|
-
capName: "pipeline-orchestrator",
|
|
51815
|
-
capScope: "system",
|
|
51816
|
-
addonId: null,
|
|
51817
|
-
access: "create"
|
|
51818
|
-
},
|
|
51819
51936
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
51820
51937
|
capName: "pipeline-orchestrator",
|
|
51821
51938
|
capScope: "system",
|
|
@@ -51870,12 +51987,24 @@ Object.freeze({
|
|
|
51870
51987
|
addonId: null,
|
|
51871
51988
|
access: "create"
|
|
51872
51989
|
},
|
|
51990
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
51991
|
+
capName: "pipeline-orchestrator",
|
|
51992
|
+
capScope: "system",
|
|
51993
|
+
addonId: null,
|
|
51994
|
+
access: "create"
|
|
51995
|
+
},
|
|
51873
51996
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
51874
51997
|
capName: "pipeline-orchestrator",
|
|
51875
51998
|
capScope: "system",
|
|
51876
51999
|
addonId: null,
|
|
51877
52000
|
access: "create"
|
|
51878
52001
|
},
|
|
52002
|
+
"pipelineOrchestrator.suggestShares": {
|
|
52003
|
+
capName: "pipeline-orchestrator",
|
|
52004
|
+
capScope: "system",
|
|
52005
|
+
addonId: null,
|
|
52006
|
+
access: "view"
|
|
52007
|
+
},
|
|
51879
52008
|
"pipelineOrchestrator.unassignAudio": {
|
|
51880
52009
|
capName: "pipeline-orchestrator",
|
|
51881
52010
|
capScope: "system",
|
|
@@ -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-
|
|
2
|
+
import { c as i, s as a } from "./responsive-BpY0yafY.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",
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-7EsNkWO1.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-
|
|
3
|
+
import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CYSzhahm.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-
|
|
2
|
+
import { c as i } from "./responsive-BpY0yafY.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"
|
|
@@ -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-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-C2I-8Qsr.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|