@roxybrowser/playwright 2.0.2-beta.12 → 2.0.2-beta.14
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/human/controller.d.ts +2 -0
- package/dist/human/controller.d.ts.map +1 -1
- package/dist/human/controller.js +31 -8
- package/dist/human/controller.js.map +1 -1
- package/dist/human/profile.js +18 -18
- package/dist/human/profile.js.map +1 -1
- package/dist/human/types.d.ts +1 -0
- package/dist/human/types.d.ts.map +1 -1
- package/dist/mcp/backend/keyboard.d.ts +0 -2
- package/dist/mcp/backend/keyboard.d.ts.map +1 -1
- package/dist/mcp/backend/keyboard.js +3 -13
- package/dist/mcp/backend/keyboard.js.map +1 -1
- package/dist/mcp/connectedBrowser.d.ts.map +1 -1
- package/dist/mcp/connectedBrowser.js +40 -2
- package/dist/mcp/connectedBrowser.js.map +1 -1
- package/dist/mcp/runtime.d.ts.map +1 -1
- package/dist/mcp/runtime.js +10 -2
- package/dist/mcp/runtime.js.map +1 -1
- package/dist/protocol/bidi/backend.d.ts.map +1 -1
- package/dist/protocol/bidi/backend.js +10 -3
- package/dist/protocol/bidi/backend.js.map +1 -1
- package/dist/protocol/cdp/backend.d.ts.map +1 -1
- package/dist/protocol/cdp/backend.js +8 -3
- package/dist/protocol/cdp/backend.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,8 @@ export declare class DefaultHumanController implements HumanController {
|
|
|
11
11
|
press(target: HumanActionTarget, key: string, options?: PressOptions): Promise<void>;
|
|
12
12
|
private resolveDefaults;
|
|
13
13
|
private ensureVisualization;
|
|
14
|
+
private prepareEditableTarget;
|
|
15
|
+
private typeText;
|
|
14
16
|
private enqueue;
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/human/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAGpB,qBAAa,sBAAuB,YAAW,eAAe;IAGhD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAqB;gBAEX,QAAQ,EAAE,2BAA2B;IAE5D,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvE,IAAI,CACR,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/human/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAGpB,qBAAa,sBAAuB,YAAW,eAAe;IAGhD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAqB;gBAEX,QAAQ,EAAE,2BAA2B;IAE5D,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvE,IAAI,CACR,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;IAQV,IAAI,CACR,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;IAMV,KAAK,CACT,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAShB,OAAO,CAAC,eAAe;YAIT,mBAAmB;YAUnB,qBAAqB;YAmBrB,QAAQ;YAgBR,OAAO;CAQtB"}
|
package/dist/human/controller.js
CHANGED
|
@@ -25,20 +25,20 @@ export class DefaultHumanController {
|
|
|
25
25
|
await target.hover(options);
|
|
26
26
|
}
|
|
27
27
|
async fill(target, value, options) {
|
|
28
|
-
|
|
29
|
-
await
|
|
28
|
+
const defaults = this.resolveDefaults(options);
|
|
29
|
+
await this.prepareEditableTarget(target, options, defaults);
|
|
30
|
+
await this.typeText(target, value, {
|
|
31
|
+
...(options?.human !== undefined ? { human: options.human } : {})
|
|
32
|
+
}, defaults);
|
|
30
33
|
}
|
|
31
34
|
async type(target, value, options) {
|
|
32
35
|
const defaults = this.resolveDefaults(options);
|
|
33
|
-
await this.
|
|
34
|
-
await
|
|
35
|
-
...options,
|
|
36
|
-
delay: options?.delay ?? defaults.typingDelayMs
|
|
37
|
-
});
|
|
36
|
+
await this.prepareEditableTarget(target, options, defaults);
|
|
37
|
+
await this.typeText(target, value, options, defaults);
|
|
38
38
|
}
|
|
39
39
|
async press(target, key, options) {
|
|
40
40
|
const defaults = this.resolveDefaults(options);
|
|
41
|
-
await this.
|
|
41
|
+
await this.prepareEditableTarget(target, options, defaults);
|
|
42
42
|
await target.press(key, {
|
|
43
43
|
...options,
|
|
44
44
|
delay: options?.delay ?? defaults.typingDelayMs
|
|
@@ -54,6 +54,29 @@ export class DefaultHumanController {
|
|
|
54
54
|
}
|
|
55
55
|
await evaluatableTarget.evaluate(BUBBLE_CURSOR_INSTALL_SOURCE);
|
|
56
56
|
}
|
|
57
|
+
async prepareEditableTarget(target, options, defaults) {
|
|
58
|
+
await this.ensureVisualization(target);
|
|
59
|
+
await this.enqueue(async () => {
|
|
60
|
+
await target.hover(options);
|
|
61
|
+
if (defaults.hoverBeforeClickMs > 0) {
|
|
62
|
+
await delay(defaults.hoverBeforeClickMs);
|
|
63
|
+
}
|
|
64
|
+
await target.click({
|
|
65
|
+
...(options ?? {}),
|
|
66
|
+
delay: defaults.clickHoldMs
|
|
67
|
+
});
|
|
68
|
+
await target.focus?.();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async typeText(target, value, options, defaults) {
|
|
72
|
+
const delay = options && "delay" in options && typeof options.delay === "number"
|
|
73
|
+
? options.delay
|
|
74
|
+
: defaults.typingDelayMs;
|
|
75
|
+
await target.type(value, {
|
|
76
|
+
...options,
|
|
77
|
+
delay
|
|
78
|
+
});
|
|
79
|
+
}
|
|
57
80
|
async enqueue(action) {
|
|
58
81
|
const run = this.actionQueue.then(action, action);
|
|
59
82
|
this.actionQueue = run.then(() => undefined, () => undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/human/controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAO1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,OAAO,sBAAsB;IAGJ;IAFrB,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAExC,YAA6B,QAAqC;QAArC,aAAQ,GAAR,QAAQ,CAA6B;IAAG,CAAC;IAEtE,KAAK,CAAC,KAAK,CAAC,MAAyB,EAAE,OAAsB;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,CAAC;gBACjB,GAAG,OAAO;gBACV,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,QAAQ,CAAC,WAAW;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAyB,EAAE,OAAsB;QAC3D,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CACR,MAAyB,EACzB,KAAa,EACb,OAAqB;QAErB,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/human/controller.ts"],"names":[],"mappings":"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"}
|
package/dist/human/profile.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
const PROFILE_DEFAULTS = {
|
|
2
2
|
cautious: {
|
|
3
3
|
profile: "cautious",
|
|
4
|
-
moveJitterMs:
|
|
5
|
-
clickHoldMs:
|
|
6
|
-
scrollStepPx:
|
|
7
|
-
typingDelayMs:
|
|
8
|
-
typingVarianceMs:
|
|
9
|
-
hoverBeforeClickMs:
|
|
4
|
+
moveJitterMs: 220,
|
|
5
|
+
clickHoldMs: 260,
|
|
6
|
+
scrollStepPx: 120,
|
|
7
|
+
typingDelayMs: 240,
|
|
8
|
+
typingVarianceMs: 90,
|
|
9
|
+
hoverBeforeClickMs: 680
|
|
10
10
|
},
|
|
11
11
|
balanced: {
|
|
12
12
|
profile: "balanced",
|
|
13
|
-
moveJitterMs:
|
|
14
|
-
clickHoldMs:
|
|
15
|
-
scrollStepPx:
|
|
16
|
-
typingDelayMs:
|
|
17
|
-
typingVarianceMs:
|
|
18
|
-
hoverBeforeClickMs:
|
|
13
|
+
moveJitterMs: 140,
|
|
14
|
+
clickHoldMs: 180,
|
|
15
|
+
scrollStepPx: 180,
|
|
16
|
+
typingDelayMs: 140,
|
|
17
|
+
typingVarianceMs: 55,
|
|
18
|
+
hoverBeforeClickMs: 380
|
|
19
19
|
},
|
|
20
20
|
fast: {
|
|
21
21
|
profile: "fast",
|
|
22
|
-
moveJitterMs:
|
|
23
|
-
clickHoldMs:
|
|
24
|
-
scrollStepPx:
|
|
25
|
-
typingDelayMs:
|
|
26
|
-
typingVarianceMs:
|
|
27
|
-
hoverBeforeClickMs:
|
|
22
|
+
moveJitterMs: 80,
|
|
23
|
+
clickHoldMs: 120,
|
|
24
|
+
scrollStepPx: 240,
|
|
25
|
+
typingDelayMs: 85,
|
|
26
|
+
typingVarianceMs: 30,
|
|
27
|
+
hoverBeforeClickMs: 180
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
export function resolveHumanizationOptions(options, base) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/human/profile.ts"],"names":[],"mappings":"AAMA,MAAM,gBAAgB,GAA0D;IAC9E,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/human/profile.ts"],"names":[],"mappings":"AAMA,MAAM,gBAAgB,GAA0D;IAC9E,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,GAAG;QAClB,gBAAgB,EAAE,EAAE;QACpB,kBAAkB,EAAE,GAAG;KACxB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,GAAG;QAClB,gBAAgB,EAAE,EAAE;QACpB,kBAAkB,EAAE,GAAG;KACxB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,EAAE;QACpB,kBAAkB,EAAE,GAAG;KACxB;CACF,CAAC;AAEF,MAAM,UAAU,0BAA0B,CACxC,OAA6B,EAC7B,IAAkC;IAElC,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC;IACpE,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE9C,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY;QACjF,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW;QAC7E,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY;QACjF,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,IAAI,OAAO,CAAC,aAAa;QACrF,gBAAgB,EACd,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,gBAAgB,IAAI,OAAO,CAAC,gBAAgB;QACjF,kBAAkB,EAChB,OAAO,EAAE,kBAAkB,IAAI,IAAI,EAAE,kBAAkB,IAAI,OAAO,CAAC,kBAAkB;KACxF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAU;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/human/types.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface ResolvedHumanizationOptions {
|
|
|
9
9
|
hoverBeforeClickMs: number;
|
|
10
10
|
}
|
|
11
11
|
export interface HumanActionTarget {
|
|
12
|
+
focus?(): Promise<void>;
|
|
12
13
|
click(options?: ClickOptions): Promise<void>;
|
|
13
14
|
hover(options?: HoverOptions): Promise<void>;
|
|
14
15
|
fill(value: string, options?: FillOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/human/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,WAAW,GACX,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/human/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,WAAW,GACX,YAAY,CAAC"}
|
|
@@ -14,7 +14,6 @@ export declare const type: import("./tool.js").Tool<z.ZodObject<{
|
|
|
14
14
|
target: z.ZodString;
|
|
15
15
|
text: z.ZodString;
|
|
16
16
|
submit: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
-
slowly: z.ZodOptional<z.ZodBoolean>;
|
|
18
17
|
human: z.ZodOptional<z.ZodObject<{
|
|
19
18
|
profile: z.ZodOptional<z.ZodEnum<{
|
|
20
19
|
cautious: "cautious";
|
|
@@ -37,7 +36,6 @@ declare const _default: (import("./tool.js").Tool<z.ZodObject<{
|
|
|
37
36
|
target: z.ZodString;
|
|
38
37
|
text: z.ZodString;
|
|
39
38
|
submit: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
-
slowly: z.ZodOptional<z.ZodBoolean>;
|
|
41
39
|
human: z.ZodOptional<z.ZodObject<{
|
|
42
40
|
profile: z.ZodOptional<z.ZodEnum<{
|
|
43
41
|
cautious: "cautious";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../../src/mcp/backend/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../../src/mcp/backend/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,eAAO,MAAM,KAAK;;;;;;;;;kBA2BhB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;kBA4Bf,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAEH,wBAGE"}
|
|
@@ -7,7 +7,6 @@ const humanSchema = z.object({
|
|
|
7
7
|
const typeSchema = elementSchema.extend({
|
|
8
8
|
text: z.string().describe("Text to type into the element"),
|
|
9
9
|
submit: z.boolean().optional().describe("Whether to submit entered text (press Enter after)"),
|
|
10
|
-
slowly: z.boolean().optional().describe("Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once."),
|
|
11
10
|
human: humanSchema.describe("Humanization settings for this typing action")
|
|
12
11
|
});
|
|
13
12
|
export const press = defineTabTool({
|
|
@@ -44,22 +43,13 @@ export const type = defineTabTool({
|
|
|
44
43
|
response.setIncludeSnapshot();
|
|
45
44
|
response.addTextResult(`Typed into "${params.element ?? params.target}".`);
|
|
46
45
|
const { locator, resolved } = await tab.targetLocator(params);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
response.addCode(`await page.${resolved}.press('Enter');`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
response.addCode(`await page.${resolved}.fill(${JSON.stringify(params.text)});`);
|
|
55
|
-
if (params.submit) {
|
|
56
|
-
response.addCode(`await page.${resolved}.press('Enter');`);
|
|
57
|
-
}
|
|
46
|
+
response.addCode(`await page.${resolved}.fill(${JSON.stringify(params.text)});`);
|
|
47
|
+
if (params.submit) {
|
|
48
|
+
response.addCode(`await page.${resolved}.press('Enter');`);
|
|
58
49
|
}
|
|
59
50
|
await tab.waitForCompletion(async () => {
|
|
60
51
|
await locator.type(params.text, {
|
|
61
52
|
...(params.submit !== undefined ? { submit: params.submit } : {}),
|
|
62
|
-
...(params.slowly !== undefined ? { slowly: params.slowly } : {}),
|
|
63
53
|
...(params.human !== undefined ? { human: params.human } : {}),
|
|
64
54
|
...tab.actionTimeoutOptions
|
|
65
55
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../../src/mcp/backend/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnE,mDAAmD,CACpD;CACF,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC7F,
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../../src/mcp/backend/keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectedBrowser.d.ts","sourceRoot":"","sources":["../../src/mcp/connectedBrowser.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAOV,uBAAuB,EACvB,sBAAsB,EAQvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"connectedBrowser.d.ts","sourceRoot":"","sources":["../../src/mcp/connectedBrowser.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAOV,uBAAuB,EACvB,sBAAsB,EAQvB,MAAM,YAAY,CAAC;AAk8GpB,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CAMlC"}
|
|
@@ -429,6 +429,24 @@ async function splitScrollDeltas(deltaX, deltaY, stepPx) {
|
|
|
429
429
|
}
|
|
430
430
|
return chunks.filter((chunk) => chunk.deltaX !== 0 || chunk.deltaY !== 0);
|
|
431
431
|
}
|
|
432
|
+
function maybeReverseScrollChunk(chunk, index, total) {
|
|
433
|
+
if (total < 3 || index === 0 || index === total - 1) {
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
if (Math.random() > 0.18) {
|
|
437
|
+
return null;
|
|
438
|
+
}
|
|
439
|
+
return {
|
|
440
|
+
deltaX: -Math.round(chunk.deltaX * (0.18 + Math.random() * 0.18)),
|
|
441
|
+
deltaY: -Math.round(chunk.deltaY * (0.18 + Math.random() * 0.18))
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
function shouldPauseToObserve(index, total) {
|
|
445
|
+
if (index === total - 1) {
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
return total > 2 && Math.random() < 0.22;
|
|
449
|
+
}
|
|
432
450
|
function extractBiDiValue(value) {
|
|
433
451
|
if (!value) {
|
|
434
452
|
return undefined;
|
|
@@ -814,8 +832,16 @@ class CdpConnectedBrowserSession {
|
|
|
814
832
|
const arg = target ? this.targetArg(target) : {};
|
|
815
833
|
await evaluateCdp(pageClient, ENSURE_BUBBLE_CURSOR_SOURCE, undefined, contextId).catch(() => false);
|
|
816
834
|
const chunks = await splitScrollDeltas(deltaX, deltaY, options?.stepPx ?? Math.max(Math.abs(deltaX), Math.abs(deltaY), 1));
|
|
817
|
-
for (const chunk of chunks) {
|
|
835
|
+
for (const [index, chunk] of chunks.entries()) {
|
|
818
836
|
await evaluateCdp(pageClient, SCROLL_ELEMENT_SOURCE, { ...arg, deltaX: chunk.deltaX, deltaY: chunk.deltaY }, contextId);
|
|
837
|
+
const reverseChunk = maybeReverseScrollChunk(chunk, index, chunks.length);
|
|
838
|
+
if (reverseChunk) {
|
|
839
|
+
await delay(60 + Math.round(Math.random() * 120));
|
|
840
|
+
await evaluateCdp(pageClient, SCROLL_ELEMENT_SOURCE, { ...arg, deltaX: reverseChunk.deltaX, deltaY: reverseChunk.deltaY }, contextId);
|
|
841
|
+
}
|
|
842
|
+
if (shouldPauseToObserve(index, chunks.length)) {
|
|
843
|
+
await delay(220 + Math.round(Math.random() * 520));
|
|
844
|
+
}
|
|
819
845
|
if ((options?.stepDelayMs ?? 0) > 0) {
|
|
820
846
|
await delay(options.stepDelayMs);
|
|
821
847
|
}
|
|
@@ -2067,12 +2093,24 @@ class BidiConnectedBrowserSession {
|
|
|
2067
2093
|
const arg = target ? ("nodeToken" in target ? { nodeToken: target.nodeToken } : { selector: target.selector }) : {};
|
|
2068
2094
|
await evaluateBiDi(this.client, tabId, ENSURE_BUBBLE_CURSOR_SOURCE).catch(() => false);
|
|
2069
2095
|
const chunks = await splitScrollDeltas(deltaX, deltaY, options?.stepPx ?? Math.max(Math.abs(deltaX), Math.abs(deltaY), 1));
|
|
2070
|
-
for (const chunk of chunks) {
|
|
2096
|
+
for (const [index, chunk] of chunks.entries()) {
|
|
2071
2097
|
await evaluateBiDi(this.client, tabId, SCROLL_ELEMENT_SOURCE, {
|
|
2072
2098
|
...arg,
|
|
2073
2099
|
deltaX: chunk.deltaX,
|
|
2074
2100
|
deltaY: chunk.deltaY
|
|
2075
2101
|
});
|
|
2102
|
+
const reverseChunk = maybeReverseScrollChunk(chunk, index, chunks.length);
|
|
2103
|
+
if (reverseChunk) {
|
|
2104
|
+
await delay(60 + Math.round(Math.random() * 120));
|
|
2105
|
+
await evaluateBiDi(this.client, tabId, SCROLL_ELEMENT_SOURCE, {
|
|
2106
|
+
...arg,
|
|
2107
|
+
deltaX: reverseChunk.deltaX,
|
|
2108
|
+
deltaY: reverseChunk.deltaY
|
|
2109
|
+
});
|
|
2110
|
+
}
|
|
2111
|
+
if (shouldPauseToObserve(index, chunks.length)) {
|
|
2112
|
+
await delay(220 + Math.round(Math.random() * 520));
|
|
2113
|
+
}
|
|
2076
2114
|
if ((options?.stepDelayMs ?? 0) > 0) {
|
|
2077
2115
|
await delay(options.stepDelayMs);
|
|
2078
2116
|
}
|