clearcote 0.47.0 → 0.49.0
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/README.md +33 -14
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js +5 -0
- package/dist/cloud.js.map +1 -1
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +5 -1
- package/dist/docker.js.map +1 -1
- package/dist/download.d.ts +2 -0
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +2 -1
- package/dist/download.js.map +1 -1
- package/dist/forms.d.ts +233 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +736 -0
- package/dist/forms.js.map +1 -0
- package/dist/humanize.d.ts +66 -3
- package/dist/humanize.d.ts.map +1 -1
- package/dist/humanize.js +1523 -361
- package/dist/humanize.js.map +1 -1
- package/dist/index.d.ts +19 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -12
- package/dist/index.js.map +1 -1
- package/dist/isolated.d.ts +91 -4
- package/dist/isolated.d.ts.map +1 -1
- package/dist/isolated.js +311 -27
- package/dist/isolated.js.map +1 -1
- package/dist/motion.d.ts +42 -1
- package/dist/motion.d.ts.map +1 -1
- package/dist/motion.js +159 -40
- package/dist/motion.js.map +1 -1
- package/dist/pacing.d.ts +56 -0
- package/dist/pacing.d.ts.map +1 -0
- package/dist/pacing.js +203 -0
- package/dist/pacing.js.map +1 -0
- package/dist/widevine.d.ts +90 -5
- package/dist/widevine.d.ts.map +1 -1
- package/dist/widevine.js +391 -40
- package/dist/widevine.js.map +1 -1
- package/package.json +1 -1
package/dist/motion.js
CHANGED
|
@@ -152,28 +152,60 @@ export function minJerk(tau) {
|
|
|
152
152
|
const t = clamp(tau, 0, 1);
|
|
153
153
|
return t * t * t * (10 + t * (-15 + 6 * t));
|
|
154
154
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
// Salt for the path-shape stream. Like the rollover salt, a separate mulberry32(seed ^ salt) stream
|
|
156
|
+
// keeps makePersona's draw ORDER (and so every existing seed's motor identity) unchanged.
|
|
157
|
+
const SHAPE_SALT = 0x85ebca6b;
|
|
158
|
+
/** The persona's path-shape traits, drawn from a salted stream of its seed.
|
|
159
|
+
*
|
|
160
|
+
* Measured on r38 / SDK 0.48.0 (SC 209): 1 of 36 planned approaches passed the target, against 15–40 %
|
|
161
|
+
* for real reaches and 14/36 for the engine's recorded trajectories, because the primary submovement
|
|
162
|
+
* always aimed at 84–94 % of the distance. Same values as Python `_motion.shape_traits` and .NET
|
|
163
|
+
* `Motion.ShapeTraitsOf`. */
|
|
164
|
+
export function shapeTraits(p) {
|
|
165
|
+
const r = mulberry32((p.seed ^ SHAPE_SALT) >>> 0);
|
|
166
|
+
const overshootRate = lerp(0.15, 0.38, r());
|
|
167
|
+
const curve = lerp(0.75, 1.3, r());
|
|
168
|
+
const dragTempo = lerp(0.85, 1.2, r());
|
|
169
|
+
return { overshootRate, curve, dragTempo };
|
|
170
|
+
}
|
|
171
|
+
// Sub-pixel noise scale. The colored noise (OU drift + 8–12 Hz tremor + AR(1) jitter) stays, but smaller
|
|
172
|
+
// and carried mostly while the hand is moving: a mouse resting on the pad reports no counts, so a slow
|
|
173
|
+
// tail full of ±0.5 px wobble is what a quantizing page turns into 1 px zigzags.
|
|
174
|
+
const NOISE = 0.6;
|
|
175
|
+
/** floor(x + 0.5): the same rounding as Python `_js_round` and .NET `JsRound`. */
|
|
176
|
+
const jsRound = (x) => Math.floor(x + 0.5);
|
|
177
|
+
/** Time warp 1−(1−τ)^skew: skew > 1 moves the min-jerk speed peak before the midpoint. */
|
|
178
|
+
function skewed(tau, skew) {
|
|
179
|
+
const t = clamp(tau, 0, 1);
|
|
180
|
+
return skew !== 1 ? 1 - Math.pow(1 - t, skew) : t;
|
|
181
|
+
}
|
|
182
|
+
/** Sample ONE min-jerk submovement a→b along a bowed path, adding colored noise. Appends to `out`.
|
|
183
|
+
* `t0` is the absolute clock (ms) at the start (for tremor phase continuity). Returns the absolute
|
|
184
|
+
* clock at the end. `land` = put the final sample exactly on b with no noise. `bowFrac` = signed peak
|
|
185
|
+
* sideways deviation as a share of the submovement's length; `skew` = time warp (1 = symmetric). */
|
|
186
|
+
function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, land, bowFrac, skew) {
|
|
159
187
|
const dx = b.x - a.x, dy = b.y - a.y;
|
|
160
188
|
const dist = Math.hypot(dx, dy) || 1e-6;
|
|
161
189
|
const stepMs = 1000 / p.deviceHz;
|
|
162
190
|
// Cap the sample count so a very long move can't emit thousands of steps (defends the Fitts cap).
|
|
163
|
-
const n = Math.min(180, Math.max(4,
|
|
164
|
-
// perpendicular unit for the path bow; sign follows the persona's handedness bias
|
|
191
|
+
const n = Math.min(180, Math.max(4, jsRound(durMs / stepMs)));
|
|
165
192
|
const nx = -dy / dist, ny = dx / dist;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const
|
|
169
|
-
const
|
|
193
|
+
// A cubic with both control points offset by c peaks at 0.75 c; the first control point carries more
|
|
194
|
+
// of it, so the widest point of the arc comes before the middle, as in a reach.
|
|
195
|
+
const c = bowFrac * dist / 0.75;
|
|
196
|
+
const c1x = a.x + dx * 0.3 + nx * c * 1.15, c1y = a.y + dy * 0.3 + ny * c * 1.15;
|
|
197
|
+
const c2x = a.x + dx * 0.7 + nx * c * 0.85, c2y = a.y + dy * 0.7 + ny * c * 0.85;
|
|
170
198
|
let t = t0;
|
|
171
199
|
for (let i = 1; i <= n; i++) {
|
|
172
|
-
const
|
|
200
|
+
const tau = i / n;
|
|
201
|
+
const e = minJerk(skewed(tau, skew));
|
|
173
202
|
let px = bez(a.x, c1x, c2x, b.x, e);
|
|
174
203
|
let py = bez(a.y, c1y, c2y, b.y, e);
|
|
175
204
|
const last = i === n;
|
|
176
205
|
if (!(last && land)) {
|
|
206
|
+
// noise follows the speed envelope (min-jerk speed 30τ²(1−τ)² peaks at 1.875)
|
|
207
|
+
const v = 30 * tau * tau * (1 - tau) * (1 - tau) / 1.875;
|
|
208
|
+
const g = NOISE * (0.35 + 0.65 * v);
|
|
177
209
|
// Ornstein–Uhlenbeck drift (colored, low-frequency)
|
|
178
210
|
const k = stepMs / p.driftTau;
|
|
179
211
|
drift.x += -k * drift.x + Math.sqrt(2 * k) * p.driftAmp * gaussFrom(rng);
|
|
@@ -188,8 +220,8 @@ function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, la
|
|
|
188
220
|
// speed reversal every sample, manufacturing spurious "submovements" and a flat noise spectrum.
|
|
189
221
|
jit.x = 0.7 * jit.x + gaussFrom(rng) * p.jitter * 0.22;
|
|
190
222
|
jit.y = 0.7 * jit.y + gaussFrom(rng) * p.jitter * 0.22;
|
|
191
|
-
px += drift.x + trX + jit.x;
|
|
192
|
-
py += drift.y + trY + jit.y;
|
|
223
|
+
px += (drift.x + trX + jit.x) * g;
|
|
224
|
+
py += (drift.y + trY + jit.y) * g;
|
|
193
225
|
}
|
|
194
226
|
else {
|
|
195
227
|
px = b.x;
|
|
@@ -206,8 +238,19 @@ function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, la
|
|
|
206
238
|
/**
|
|
207
239
|
* Plan a free cursor move `from`→`to` as a sum of minimum-jerk submovements (primary + corrections)
|
|
208
240
|
* with Fitts-scaled duration and colored noise. Returns the samples to dispatch.
|
|
241
|
+
*
|
|
242
|
+
* A move with a button held (`held`) or one that seats a handle (`settle`) is a drag, planned by
|
|
243
|
+
* {@link planDrag}.
|
|
244
|
+
*
|
|
245
|
+
* Shape (SC 209/210): the primary submovement arcs (peak sideways deviation ~6–18 % of the distance,
|
|
246
|
+
* per-persona curvature and handedness), reaches its speed peak before the middle of the move, and
|
|
247
|
+
* either stops short of the target (a short corrective submovement closes the gap) or, in
|
|
248
|
+
* `shapeTraits(p).overshootRate` of moves, passes it by 3–28 px and comes back. Straightness (distance /
|
|
249
|
+
* path length) of the planned points lands around 0.85–0.95, the band of real reaches.
|
|
209
250
|
*/
|
|
210
251
|
export function planMove(from, to, p, opts = {}) {
|
|
252
|
+
if (opts.settle || opts.held)
|
|
253
|
+
return planDrag(from, to, p, { settle: opts.settle, rng: opts.rng });
|
|
211
254
|
const rng = opts.rng ?? Math.random;
|
|
212
255
|
const W = Math.max(6, opts.targetW ?? 24);
|
|
213
256
|
const D = Math.hypot(to.x - from.x, to.y - from.y);
|
|
@@ -222,45 +265,49 @@ export function planMove(from, to, p, opts = {}) {
|
|
|
222
265
|
const id = log2(D / W + 1);
|
|
223
266
|
const mtLo = Math.min(1700, Math.max(70, 40 + D * 0.6));
|
|
224
267
|
const mt = clamp((p.fittsA + p.fittsB * id) * (0.85 + 0.3 * rng()), mtLo, 1700);
|
|
225
|
-
|
|
226
|
-
|
|
268
|
+
const tr = shapeTraits(p);
|
|
269
|
+
const ux = (to.x - from.x) / D, uy = (to.y - from.y) / D;
|
|
270
|
+
// Submovement targets: the primary stops a little short of `to` or, in the persona's overshoot rate,
|
|
271
|
+
// passes it; one correction closes the residual (occasionally an intermediate one first).
|
|
227
272
|
const targets = [];
|
|
273
|
+
let over = false;
|
|
228
274
|
if (D >= 40) {
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
const nCorr = rng() < 0.08 * p.maxCorrections ? 2 : 1;
|
|
238
|
-
let cur = targets[0];
|
|
239
|
-
for (let i = 0; i < nCorr; i++) {
|
|
275
|
+
over = rng() < tr.overshootRate;
|
|
276
|
+
const along = over
|
|
277
|
+
? D + clamp(D * lerp(0.03, 0.08, rng()), 3, 28)
|
|
278
|
+
: D * clamp(p.primaryFrac + 0.05 + gaussFrom(rng) * 0.015, 0.88, 0.985);
|
|
279
|
+
const lat = gaussFrom(rng) * Math.min(6, D * 0.02);
|
|
280
|
+
targets.push({ x: from.x + ux * along - uy * lat, y: from.y + uy * along + ux * lat });
|
|
281
|
+
if (rng() < 0.08 * p.maxCorrections) {
|
|
282
|
+
const cur = targets[0];
|
|
240
283
|
const close = lerp(0.55, 0.8, rng());
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
nx.y += gaussFrom(rng) * 1.2;
|
|
245
|
-
targets.push(nx);
|
|
246
|
-
cur = nx;
|
|
284
|
+
const mx = cur.x + (to.x - cur.x) * close + gaussFrom(rng) * 1.0;
|
|
285
|
+
const my = cur.y + (to.y - cur.y) * close + gaussFrom(rng) * 1.0;
|
|
286
|
+
targets.push({ x: mx, y: my });
|
|
247
287
|
}
|
|
248
288
|
}
|
|
249
289
|
targets.push({ x: to.x, y: to.y });
|
|
250
|
-
// Allocate MT: primary ~62%, remaining split across corrections (each shorter).
|
|
251
290
|
const segDur = [];
|
|
252
291
|
if (targets.length === 1) {
|
|
253
292
|
segDur.push(mt);
|
|
254
293
|
}
|
|
255
294
|
else {
|
|
256
|
-
// Primary gets ~78% of the time
|
|
257
|
-
// the
|
|
295
|
+
// Primary gets ~78% of the time; with its skewed min-jerk profile the global speed peak lands
|
|
296
|
+
// ~0.3 of the way through the move, before the midpoint as in a reach. Corrections share the rest.
|
|
258
297
|
segDur.push(mt * 0.78);
|
|
259
298
|
const rest = mt * 0.22;
|
|
260
299
|
const nc = targets.length - 1;
|
|
261
300
|
for (let i = 0; i < nc; i++)
|
|
262
301
|
segDur.push((rest / nc) * lerp(0.8, 1.2, rng()));
|
|
263
302
|
}
|
|
303
|
+
// The primary's arc: handedness sign from the persona (1 move in 5 bends the other way), size from
|
|
304
|
+
// the persona's curvature trait. Corrections are short and nearly straight.
|
|
305
|
+
let sign = p.approachBias >= 0 ? 1 : -1;
|
|
306
|
+
if (rng() < 0.2)
|
|
307
|
+
sign = -sign;
|
|
308
|
+
let bow = sign * Math.min(0.25, (0.08 + Math.abs(gaussFrom(rng)) * 0.11) * tr.curve * (0.75 + Math.abs(p.approachBias)));
|
|
309
|
+
if (D * Math.abs(bow) > 110)
|
|
310
|
+
bow = bow < 0 ? -110 / D : 110 / D;
|
|
264
311
|
const drift = { x: 0, y: 0 };
|
|
265
312
|
const jit = { x: 0, y: 0 };
|
|
266
313
|
const tremorPhase = rng() * 2 * Math.PI;
|
|
@@ -268,18 +315,90 @@ export function planMove(from, to, p, opts = {}) {
|
|
|
268
315
|
for (let s = 0; s < targets.length; s++) {
|
|
269
316
|
const b = targets[s];
|
|
270
317
|
const last = s === targets.length - 1;
|
|
271
|
-
|
|
318
|
+
const first = s === 0;
|
|
319
|
+
t = sampleSubmove(out, a, b, Math.max(20, segDur[s]), p, rng, t, drift, jit, tremorPhase, last, first ? bow : bow * 0.15, first ? 1.25 : 1.0);
|
|
320
|
+
// motor re-planning gap; a reversal after passing the target comes back quicker
|
|
272
321
|
if (!last && out.length)
|
|
273
|
-
out[out.length - 1].sleepMs += lerp(
|
|
322
|
+
out[out.length - 1].sleepMs += over && first ? lerp(25, 90, rng()) : lerp(40, 120, rng());
|
|
274
323
|
a = b;
|
|
275
324
|
}
|
|
276
|
-
|
|
325
|
+
return out;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Plan a held-button drag `from`→`to` (slider handle, drag-and-drop, range thumb).
|
|
329
|
+
*
|
|
330
|
+
* Measured on r38 / SDK 0.48.0 (SC 209): the held leg reused the aimed-move planner, whose arc put the
|
|
331
|
+
* hand up to 47 px off the line between grab and drop — off a 40 px slider track. A drag is a slower,
|
|
332
|
+
* flatter movement: one skewed min-jerk leg along the line with at most ~5 px of arc and ±6 px of total
|
|
333
|
+
* sideways error, 0.5–2 s for 300–400 px (`shapeTraits(p).dragTempo`), and now and then (about 0.6× the
|
|
334
|
+
* persona's overshoot rate) a 2.5–10 px overshoot and pull-back. `settle` adds a couple of sub-pixel
|
|
335
|
+
* seating jiggles before landing exactly on `to`.
|
|
336
|
+
*/
|
|
337
|
+
export function planDrag(from, to, p, opts = {}) {
|
|
338
|
+
const rng = opts.rng ?? Math.random;
|
|
339
|
+
const settle = !!opts.settle;
|
|
340
|
+
const D = Math.hypot(to.x - from.x, to.y - from.y);
|
|
341
|
+
const out = [];
|
|
342
|
+
const stepMs = 1000 / p.deviceHz;
|
|
343
|
+
if (D < 1.5) {
|
|
344
|
+
out.push({ x: to.x, y: to.y, sleepMs: stepMs });
|
|
345
|
+
return out;
|
|
346
|
+
}
|
|
347
|
+
const tr = shapeTraits(p);
|
|
348
|
+
const ux = (to.x - from.x) / D, uy = (to.y - from.y) / D;
|
|
349
|
+
const mt = clamp((260 + 1.7 * D) * tr.dragTempo * lerp(0.9, 1.1, rng()), Math.min(500, 150 + 1.5 * D), 2000);
|
|
350
|
+
const over = D >= 60 && rng() < tr.overshootRate * 0.6;
|
|
351
|
+
const o = over ? clamp(D * lerp(0.01, 0.03, rng()), 2.5, 10) : 0;
|
|
352
|
+
const sign = p.approachBias >= 0 ? 1 : -1;
|
|
353
|
+
const h = sign * Math.min(5, D * 0.015) * lerp(0.3, 1.0, rng());
|
|
354
|
+
const tremorPhase = rng() * 2 * Math.PI;
|
|
355
|
+
const legs = [[0, D + o, mt * (over ? 0.86 : 1.0), h]];
|
|
356
|
+
if (over)
|
|
357
|
+
legs.push([D + o, D, mt * 0.14, 0]);
|
|
358
|
+
let drift = 0, jit = 0, t = 0;
|
|
359
|
+
for (let li = 0; li < legs.length; li++) {
|
|
360
|
+
const [s0, s1, dur, hh] = legs[li];
|
|
361
|
+
const n = Math.min(360, Math.max(4, jsRound(dur / stepMs)));
|
|
362
|
+
const dt = dur / n;
|
|
363
|
+
const lastLeg = li === legs.length - 1;
|
|
364
|
+
for (let i = 1; i <= n; i++) {
|
|
365
|
+
const tau = i / n;
|
|
366
|
+
const e = minJerk(skewed(tau, 1.2));
|
|
367
|
+
let along = s0 + (s1 - s0) * e;
|
|
368
|
+
const v = 30 * tau * tau * (1 - tau) * (1 - tau) / 1.875;
|
|
369
|
+
const k = dt / p.driftTau;
|
|
370
|
+
drift += -k * drift + Math.sqrt(2 * k) * p.driftAmp * 0.8 * gaussFrom(rng);
|
|
371
|
+
jit = 0.7 * jit + gaussFrom(rng) * p.jitter * 0.12;
|
|
372
|
+
const tAmp = p.tremorAmp * (0.7 + 0.3 * Math.sin((2 * Math.PI * t) / 850 + tremorPhase));
|
|
373
|
+
const tremor = tAmp * Math.sin(tremorPhase + (2 * Math.PI * p.tremorHz * t) / 1000);
|
|
374
|
+
along += tAmp * 0.6 * Math.sin(tremorPhase + 1.0 + (2 * Math.PI * (p.tremorHz * 0.93) * t) / 1000) * v;
|
|
375
|
+
let side = hh * Math.sin(Math.PI * e) + (drift + tremor + jit) * (0.6 + 0.4 * v);
|
|
376
|
+
side = clamp(side, -6, 6);
|
|
377
|
+
let px, py;
|
|
378
|
+
if (lastLeg && i === n && !settle) {
|
|
379
|
+
px = to.x;
|
|
380
|
+
py = to.y;
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
px = from.x + ux * along - uy * side;
|
|
384
|
+
py = from.y + uy * along + ux * side;
|
|
385
|
+
}
|
|
386
|
+
const sl = dt * lerp(0.88, 1.12, rng());
|
|
387
|
+
out.push({ x: px, y: py, sleepMs: sl });
|
|
388
|
+
t += sl;
|
|
389
|
+
}
|
|
390
|
+
if (!lastLeg && out.length)
|
|
391
|
+
out[out.length - 1].sleepMs += lerp(30, 80, rng()); // notices, stops, pulls back
|
|
392
|
+
}
|
|
393
|
+
if (settle) {
|
|
277
394
|
// A couple of tiny sub-pixel seating jiggles, then land exactly (slider handle "clunk" into place).
|
|
278
395
|
const jig = 1 + Math.floor(rng() * 2);
|
|
279
396
|
for (let i = 0; i < jig; i++) {
|
|
280
|
-
|
|
397
|
+
const jx = to.x + clamp(gaussFrom(rng) * 0.8, -1.5, 1.5);
|
|
398
|
+
const jy = to.y + clamp(gaussFrom(rng) * 0.8, -1.5, 1.5);
|
|
399
|
+
out.push({ x: jx, y: jy, sleepMs: lerp(30, 90, rng()) });
|
|
281
400
|
}
|
|
282
|
-
out.push({ x: to.x, y: to.y, sleepMs:
|
|
401
|
+
out.push({ x: to.x, y: to.y, sleepMs: stepMs });
|
|
283
402
|
}
|
|
284
403
|
return out;
|
|
285
404
|
}
|
package/dist/motion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"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"}
|
package/dist/pacing.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare const MAX_JUMP_PX = 40;
|
|
2
|
+
export declare const STALL_MS = 60;
|
|
3
|
+
export declare const FAST_PX_PER_MS = 3;
|
|
4
|
+
export declare const IDLE_MS = 40;
|
|
5
|
+
export declare const IDLE_HOP_PX = 20;
|
|
6
|
+
export interface PacedStep {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
sleepMs: number;
|
|
10
|
+
}
|
|
11
|
+
export interface WalkOpts<S extends PacedStep> {
|
|
12
|
+
now?: () => number;
|
|
13
|
+
sleep?: (ms: number) => Promise<unknown>;
|
|
14
|
+
maxJump?: number;
|
|
15
|
+
pinned?: (s: S, i: number) => boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Planned dispatch offsets (ms from the start) of every step, and the planned total. */
|
|
18
|
+
export declare function schedule(steps: readonly PacedStep[]): {
|
|
19
|
+
due: number[];
|
|
20
|
+
total: number;
|
|
21
|
+
};
|
|
22
|
+
/** The step to dispatch next: step i is the first not yet sent, `elapsed` ms have passed. */
|
|
23
|
+
export declare function nextIndex<S extends PacedStep>(steps: readonly S[], due: readonly number[], i: number, last: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
} | null, elapsed: number, maxJump?: number, pinned?: (s: S, i: number) => boolean): number;
|
|
27
|
+
/** Dispatch `steps` through `move` against a wall clock. Stops at the first move that throws.
|
|
28
|
+
* Resolves to the number of samples dispatched. */
|
|
29
|
+
export declare function walk<S extends PacedStep>(steps: readonly S[], move: (x: number, y: number) => Promise<unknown>, o?: WalkOpts<S>): Promise<number>;
|
|
30
|
+
/** How far inside the viewport a planned path is kept (SC 210 fix 2, verifier B: the planner's overshoot
|
|
31
|
+
* arcs left the window near its edges and the page saw no events while the pointer was outside). */
|
|
32
|
+
export declare const VIEW_MARGIN_PX = 2;
|
|
33
|
+
/** `steps` with every sample but the last moved inside the viewport `vw` x `vh` (`margin` px in). The last
|
|
34
|
+
* sample -- where the move was aimed -- is never changed, and a move aimed outside the viewport is
|
|
35
|
+
* returned as it is. Only coordinates change. Port of _pacing.keep_in_view. */
|
|
36
|
+
export declare function keepInView<S extends PacedStep>(steps: S[], vw: number, vh: number, margin?: number): S[];
|
|
37
|
+
/** The largest hop a SKIP may make between two dispatched points `dtMs` apart: maxJump, and IDLE_HOP_PX
|
|
38
|
+
* after an idle gap. Never more for a longer gap: a walk that fell behind stretches in time instead of
|
|
39
|
+
* catching up with a jump (the planner's own consecutive samples always go out). Port of
|
|
40
|
+
* _pacing._jump_cap. */
|
|
41
|
+
export declare const jumpCap: (maxJump: number, dtMs: number) => number;
|
|
42
|
+
/** px/ms arriving at sample k (0 for the first). */
|
|
43
|
+
export declare function speedAt(steps: readonly PacedStep[], k: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Cut an ambient plan so it lasts about `ms`. planAmbient keeps adding whole excursions + rests until
|
|
46
|
+
* its budget is spent and draws each rest sample's gap from 0.9-1.4x the frame time it counts, so its
|
|
47
|
+
* plan runs well past what was asked. Of the samples whose end falls in [lo*ms, hi*ms], keep up to the
|
|
48
|
+
* slowest one (inside a rest or the tail of a move). Only a tail is dropped; no sample is changed.
|
|
49
|
+
*
|
|
50
|
+
* The one exception to "about ms": when the whole window lies inside the first excursion (a short ask,
|
|
51
|
+
* ~300 ms, against a ~0.5-1 s glide) every candidate is mid-flight, and a pointer that stops dead at
|
|
52
|
+
* speed is a kinematic no hand produces. Then the cut moves forward to where that move has slowed down
|
|
53
|
+
* (<= 10 % of the plan's peak speed), as long as that is within `stretch` x ms.
|
|
54
|
+
*/
|
|
55
|
+
export declare function trimTo<S extends PacedStep>(steps: S[], ms: number, lo?: number, hi?: number, stretch?: number): S[];
|
|
56
|
+
//# sourceMappingURL=pacing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pacing.d.ts","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW,KAAK,CAAC;AAG9B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAGhC,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,MAAM,WAAW,SAAS;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAErE,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,SAAS;IAC3C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAKD,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKtF;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC7F,OAAO,EAAE,MAAM,EAAE,OAAO,SAAc,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,OAAqB,GACzF,MAAM,CAQR;AAED;oDACoD;AACpD,wBAAsB,IAAI,CAAC,CAAC,SAAS,SAAS,EAC5C,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAE,QAAQ,CAAC,CAAC,CAAM,GACzF,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;qGACqG;AACrG,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;gFAEgF;AAChF,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,CAAC,EAAE,CAWhH;AAED;;;yBAGyB;AACzB,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,MAAqE,CAAC;AAQ9H,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,SAAO,EAAE,EAAE,SAAO,EAAE,OAAO,SAAI,GAAG,CAAC,EAAE,CAiC1G"}
|
package/dist/pacing.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
// Wall-clock pacing for planned pointer paths (mirrors sdk/python/clearcote/_pacing.py).
|
|
2
|
+
//
|
|
3
|
+
// The motion planner (motion.ts planMove / planAmbient) returns samples {x, y, sleepMs} at the
|
|
4
|
+
// persona's device rate (~6-8 ms apart). Walking them as "dispatch, then sleep the planned gap" adds
|
|
5
|
+
// the dispatch round trip to EVERY sample: measured on PRO r38, one mouse.move costs 27 ms median, so a
|
|
6
|
+
// 1.05 s planned glide took 3.5-5.4 s and the page saw ~25 pointermove/s (SC 209).
|
|
7
|
+
//
|
|
8
|
+
// walk() schedules each sample at its planned offset from the start (the cumulative sum of the sleeps
|
|
9
|
+
// before it) and keeps that clock:
|
|
10
|
+
// on time -> sleep until the sample's planned time, then dispatch it;
|
|
11
|
+
// behind -> skip the samples whose time has passed and dispatch the most recent due one, so the
|
|
12
|
+
// path keeps the plan's shape and the move keeps the plan's duration;
|
|
13
|
+
// never skipped: the final sample (the move lands exactly where it was aimed) and a sample marked
|
|
14
|
+
// as changing button state (`pinned`);
|
|
15
|
+
// never a teleport: a skip may not put more than maxJump (40 px) between two dispatched points, and
|
|
16
|
+
// no more than IDLE_HOP_PX (20 px) after IDLE_MS (40 ms) with nothing sent; a longer hop
|
|
17
|
+
// dispatches the in-between sample instead, so a late walk stretches in time rather than
|
|
18
|
+
// jumping (SC 210 lab v2: the old cap, 3 px/ms x the time since the last dispatch, turned
|
|
19
|
+
// slow dispatches under load into hops of 60-103 px a few ms apart; an r40 engine walks
|
|
20
|
+
// any hop >= 24 px after >= 40 ms idle);
|
|
21
|
+
// a stall is a pause: a single dispatch slower than STALL_MS shifts the schedule by the excess
|
|
22
|
+
// instead of being caught up by skipping.
|
|
23
|
+
//
|
|
24
|
+
// Sleeps are local timers, never page.waitForTimeout (a CDP round trip a detector can score).
|
|
25
|
+
// Nothing here changes what the planner returns; only WHEN each sample goes out and which late ones
|
|
26
|
+
// are dropped.
|
|
27
|
+
export const MAX_JUMP_PX = 40;
|
|
28
|
+
// A single dispatch slower than this is a STALL (the page or the box was busy), not latency: nothing
|
|
29
|
+
// reached the page while it lasted, so the plan pauses with it instead of skipping ahead afterwards.
|
|
30
|
+
export const STALL_MS = 60;
|
|
31
|
+
// A fast hand: ~3 px/ms (a quick flick across a 1080p screen in ~0.6 s). No longer a dispatch cap (the
|
|
32
|
+
// hop cap is MAX_JUMP_PX / IDLE_HOP_PX since SC 210 round 2): kept as the speed bound the tests check.
|
|
33
|
+
export const FAST_PX_PER_MS = 3;
|
|
34
|
+
// After this long with nothing dispatched, a skip may hop at most IDLE_HOP_PX: what a hand at a moderate
|
|
35
|
+
// 2.5 px/ms covers in one 125 Hz report (8 ms), and below the 24 px an r40 engine walks.
|
|
36
|
+
export const IDLE_MS = 40;
|
|
37
|
+
export const IDLE_HOP_PX = 20;
|
|
38
|
+
const realNow = () => performance.now();
|
|
39
|
+
const realSleep = (ms) => new Promise((r) => setTimeout(r, Math.max(0, ms)));
|
|
40
|
+
/** Planned dispatch offsets (ms from the start) of every step, and the planned total. */
|
|
41
|
+
export function schedule(steps) {
|
|
42
|
+
const due = [];
|
|
43
|
+
let t = 0;
|
|
44
|
+
for (const s of steps) {
|
|
45
|
+
due.push(t);
|
|
46
|
+
t += Math.max(0, s.sleepMs);
|
|
47
|
+
}
|
|
48
|
+
return { due, total: t };
|
|
49
|
+
}
|
|
50
|
+
/** The step to dispatch next: step i is the first not yet sent, `elapsed` ms have passed. */
|
|
51
|
+
export function nextIndex(steps, due, i, last, elapsed, maxJump = MAX_JUMP_PX, pinned = () => false) {
|
|
52
|
+
const n = steps.length;
|
|
53
|
+
let j = i;
|
|
54
|
+
while (j + 1 < n && due[j + 1] <= elapsed && !pinned(steps[j], j))
|
|
55
|
+
j++;
|
|
56
|
+
if (last) {
|
|
57
|
+
while (j > i && Math.hypot(steps[j].x - last.x, steps[j].y - last.y) > maxJump)
|
|
58
|
+
j--;
|
|
59
|
+
}
|
|
60
|
+
return j;
|
|
61
|
+
}
|
|
62
|
+
/** Dispatch `steps` through `move` against a wall clock. Stops at the first move that throws.
|
|
63
|
+
* Resolves to the number of samples dispatched. */
|
|
64
|
+
export async function walk(steps, move, o = {}) {
|
|
65
|
+
const now = o.now ?? realNow;
|
|
66
|
+
const sleep = o.sleep ?? realSleep;
|
|
67
|
+
const maxJump = o.maxJump ?? MAX_JUMP_PX;
|
|
68
|
+
const pinned = o.pinned ?? (() => false);
|
|
69
|
+
if (!steps.length)
|
|
70
|
+
return 0;
|
|
71
|
+
const { due, total } = schedule(steps);
|
|
72
|
+
let t0 = now();
|
|
73
|
+
let tLast = t0;
|
|
74
|
+
let i = 0, sent = 0;
|
|
75
|
+
let last = null;
|
|
76
|
+
while (i < steps.length) {
|
|
77
|
+
const el = now() - t0;
|
|
78
|
+
if (el < due[i])
|
|
79
|
+
await sleep(due[i] - el);
|
|
80
|
+
else
|
|
81
|
+
i = nextIndex(steps, due, i, last, el, jumpCap(maxJump, now() - tLast), pinned);
|
|
82
|
+
const s = steps[i];
|
|
83
|
+
const tb = now();
|
|
84
|
+
try {
|
|
85
|
+
await move(s.x, s.y);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return sent;
|
|
89
|
+
}
|
|
90
|
+
sent++;
|
|
91
|
+
t0 += stallMs(now() - tb);
|
|
92
|
+
last = { x: s.x, y: s.y };
|
|
93
|
+
tLast = tb;
|
|
94
|
+
i++;
|
|
95
|
+
}
|
|
96
|
+
const el = now() - t0;
|
|
97
|
+
if (el < total)
|
|
98
|
+
await sleep(total - el); // the last sample's own dwell (a settle hold, a frame)
|
|
99
|
+
return sent;
|
|
100
|
+
}
|
|
101
|
+
/** How far inside the viewport a planned path is kept (SC 210 fix 2, verifier B: the planner's overshoot
|
|
102
|
+
* arcs left the window near its edges and the page saw no events while the pointer was outside). */
|
|
103
|
+
export const VIEW_MARGIN_PX = 2;
|
|
104
|
+
/** `steps` with every sample but the last moved inside the viewport `vw` x `vh` (`margin` px in). The last
|
|
105
|
+
* sample -- where the move was aimed -- is never changed, and a move aimed outside the viewport is
|
|
106
|
+
* returned as it is. Only coordinates change. Port of _pacing.keep_in_view. */
|
|
107
|
+
export function keepInView(steps, vw, vh, margin = VIEW_MARGIN_PX) {
|
|
108
|
+
if (!steps.length || !vw || !vh)
|
|
109
|
+
return steps;
|
|
110
|
+
const t = steps[steps.length - 1];
|
|
111
|
+
if (!(t.x >= 0 && t.x <= vw && t.y >= 0 && t.y <= vh))
|
|
112
|
+
return steps;
|
|
113
|
+
const lx = Math.min(margin, t.x), hx = Math.max(vw - margin, t.x);
|
|
114
|
+
const ly = Math.min(margin, t.y), hy = Math.max(vh - margin, t.y);
|
|
115
|
+
return steps.map((s, k) => {
|
|
116
|
+
if (k === steps.length - 1)
|
|
117
|
+
return s;
|
|
118
|
+
const x = Math.min(Math.max(s.x, lx), hx), y = Math.min(Math.max(s.y, ly), hy);
|
|
119
|
+
return x === s.x && y === s.y ? s : { ...s, x, y };
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/** The largest hop a SKIP may make between two dispatched points `dtMs` apart: maxJump, and IDLE_HOP_PX
|
|
123
|
+
* after an idle gap. Never more for a longer gap: a walk that fell behind stretches in time instead of
|
|
124
|
+
* catching up with a jump (the planner's own consecutive samples always go out). Port of
|
|
125
|
+
* _pacing._jump_cap. */
|
|
126
|
+
export const jumpCap = (maxJump, dtMs) => (dtMs < IDLE_MS ? maxJump : Math.min(maxJump, IDLE_HOP_PX));
|
|
127
|
+
// Measured on PRO r38 under load: one move answered after 523 ms. Catching that up by skipping coarsened
|
|
128
|
+
// the rest of the glide to maximum hops, and across the fixture's iframe the page saw a 110 px jump. A
|
|
129
|
+
// single dispatch slower than STALL_MS is a stall: nothing reached the page while it lasted, so the plan
|
|
130
|
+
// pauses with it and only STALL_MS is caught up.
|
|
131
|
+
const stallMs = (took) => (took > STALL_MS ? took - STALL_MS : 0);
|
|
132
|
+
/** px/ms arriving at sample k (0 for the first). */
|
|
133
|
+
export function speedAt(steps, k) {
|
|
134
|
+
if (k === 0)
|
|
135
|
+
return 0;
|
|
136
|
+
const a = steps[k - 1], b = steps[k];
|
|
137
|
+
return Math.hypot(b.x - a.x, b.y - a.y) / Math.max(1e-3, a.sleepMs);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Cut an ambient plan so it lasts about `ms`. planAmbient keeps adding whole excursions + rests until
|
|
141
|
+
* its budget is spent and draws each rest sample's gap from 0.9-1.4x the frame time it counts, so its
|
|
142
|
+
* plan runs well past what was asked. Of the samples whose end falls in [lo*ms, hi*ms], keep up to the
|
|
143
|
+
* slowest one (inside a rest or the tail of a move). Only a tail is dropped; no sample is changed.
|
|
144
|
+
*
|
|
145
|
+
* The one exception to "about ms": when the whole window lies inside the first excursion (a short ask,
|
|
146
|
+
* ~300 ms, against a ~0.5-1 s glide) every candidate is mid-flight, and a pointer that stops dead at
|
|
147
|
+
* speed is a kinematic no hand produces. Then the cut moves forward to where that move has slowed down
|
|
148
|
+
* (<= 10 % of the plan's peak speed), as long as that is within `stretch` x ms.
|
|
149
|
+
*/
|
|
150
|
+
export function trimTo(steps, ms, lo = 0.85, hi = 1.10, stretch = 2) {
|
|
151
|
+
if (!steps.length || ms <= 0)
|
|
152
|
+
return steps;
|
|
153
|
+
const { due, total } = schedule(steps);
|
|
154
|
+
if (total <= hi * ms)
|
|
155
|
+
return steps;
|
|
156
|
+
const end = steps.map((s, k) => due[k] + Math.max(0, s.sleepMs));
|
|
157
|
+
let best = -1, bestV = Infinity;
|
|
158
|
+
for (let k = 0; k < steps.length; k++) {
|
|
159
|
+
if (end[k] < lo * ms)
|
|
160
|
+
continue;
|
|
161
|
+
if (end[k] > hi * ms)
|
|
162
|
+
break;
|
|
163
|
+
const v = speedAt(steps, k);
|
|
164
|
+
if (v < bestV) {
|
|
165
|
+
best = k;
|
|
166
|
+
bestV = v;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (best < 0) {
|
|
170
|
+
best = 0;
|
|
171
|
+
for (let k = 0; k < steps.length; k++)
|
|
172
|
+
if (end[k] <= hi * ms)
|
|
173
|
+
best = k;
|
|
174
|
+
}
|
|
175
|
+
let peak = 0;
|
|
176
|
+
for (let k = 0; k < steps.length; k++)
|
|
177
|
+
peak = Math.max(peak, speedAt(steps, k));
|
|
178
|
+
if (peak > 0 && speedAt(steps, best) > 0.3 * peak) {
|
|
179
|
+
// First the rest of the +-20 % the caller was promised, then forward.
|
|
180
|
+
let wk = -1, wv = Infinity;
|
|
181
|
+
for (let k = 0; k < steps.length; k++) {
|
|
182
|
+
if (end[k] < 0.8 * ms || end[k] > 1.15 * ms)
|
|
183
|
+
continue;
|
|
184
|
+
const v = speedAt(steps, k);
|
|
185
|
+
if (v < wv) {
|
|
186
|
+
wk = k;
|
|
187
|
+
wv = v;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (wk >= 0 && wv <= 0.3 * peak)
|
|
191
|
+
return steps.slice(0, wk + 1);
|
|
192
|
+
for (let k = best + 1; k < steps.length; k++) {
|
|
193
|
+
if (end[k] > stretch * ms)
|
|
194
|
+
break;
|
|
195
|
+
if (speedAt(steps, k) <= 0.1 * peak) {
|
|
196
|
+
best = k;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return steps.slice(0, best + 1);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=pacing.js.map
|