@creatoria/miniapp-mcp 0.2.2 → 0.2.3
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 +30 -0
- package/dist/capabilities/automator/handlers/connect.d.ts.map +1 -1
- package/dist/capabilities/automator/handlers/connect.js +40 -4
- package/dist/capabilities/automator/handlers/connect.js.map +1 -1
- package/dist/capabilities/automator/handlers/disconnect.d.ts.map +1 -1
- package/dist/capabilities/automator/handlers/disconnect.js +5 -2
- package/dist/capabilities/automator/handlers/disconnect.js.map +1 -1
- package/dist/capabilities/automator/handlers/launch.d.ts +5 -0
- package/dist/capabilities/automator/handlers/launch.d.ts.map +1 -1
- package/dist/capabilities/automator/handlers/launch.js +34 -4
- package/dist/capabilities/automator/handlers/launch.js.map +1 -1
- package/dist/capabilities/automator/schemas/launch.d.ts +3 -0
- package/dist/capabilities/automator/schemas/launch.d.ts.map +1 -1
- package/dist/capabilities/automator/schemas/launch.js +4 -0
- package/dist/capabilities/automator/schemas/launch.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/call-wx.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/call-wx.js +5 -0
- package/dist/capabilities/miniprogram/handlers/call-wx.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/evaluate.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/evaluate.js +5 -0
- package/dist/capabilities/miniprogram/handlers/evaluate.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/navigate.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/navigate.js +5 -0
- package/dist/capabilities/miniprogram/handlers/navigate.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/page-stack.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/page-stack.js +5 -0
- package/dist/capabilities/miniprogram/handlers/page-stack.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/screenshot.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/screenshot.js +16 -2
- package/dist/capabilities/miniprogram/handlers/screenshot.js.map +1 -1
- package/dist/capabilities/miniprogram/handlers/system-info.d.ts.map +1 -1
- package/dist/capabilities/miniprogram/handlers/system-info.js +5 -0
- package/dist/capabilities/miniprogram/handlers/system-info.js.map +1 -1
- package/dist/config/defaults.d.ts +4 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +8 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +21 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/runtime/concurrency/mutex.d.ts +29 -0
- package/dist/runtime/concurrency/mutex.d.ts.map +1 -0
- package/dist/runtime/concurrency/mutex.js +46 -0
- package/dist/runtime/concurrency/mutex.js.map +1 -0
- package/dist/runtime/network/probe-port.d.ts +15 -0
- package/dist/runtime/network/probe-port.d.ts.map +1 -0
- package/dist/runtime/network/probe-port.js +33 -0
- package/dist/runtime/network/probe-port.js.map +1 -0
- package/dist/runtime/timeout/timeout.d.ts.map +1 -1
- package/dist/runtime/timeout/timeout.js +7 -5
- package/dist/runtime/timeout/timeout.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/current/03-connect-screenshot-timeout-diagnosis.md +168 -0
- package/docs/current/04-toolchain-version-baseline.md +123 -0
- package/docs/current/README.md +3 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -271,6 +271,31 @@ All async operations are protected with configurable timeouts to prevent hanging
|
|
|
271
271
|
| Element queries | 10s |
|
|
272
272
|
| Wait operations | 30s |
|
|
273
273
|
|
|
274
|
+
### Configuring Timeouts
|
|
275
|
+
|
|
276
|
+
All timeouts are configurable via `.mcp.json` (values in milliseconds):
|
|
277
|
+
|
|
278
|
+
| Config field | Default | Scope |
|
|
279
|
+
|--------------|---------|-------|
|
|
280
|
+
| `timeout` | 30000 (30s) | Global default (navigation, wait, etc.) |
|
|
281
|
+
| `evaluateTimeout` | 5000 (5s) | `evaluate` / wx API calls |
|
|
282
|
+
| `launchTimeout` | 60000 (60s) | `miniprogram_launch` |
|
|
283
|
+
| `connectTimeout` | 30000 (30s) | `miniprogram_connect` |
|
|
284
|
+
| `screenshotTimeout` | 10000 (10s) | Screenshot capture (fullPage base timeout also derives from this) |
|
|
285
|
+
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"projectPath": "/path/to/miniprogram",
|
|
289
|
+
"timeout": 30000,
|
|
290
|
+
"evaluateTimeout": 5000,
|
|
291
|
+
"launchTimeout": 60000,
|
|
292
|
+
"connectTimeout": 30000,
|
|
293
|
+
"screenshotTimeout": 10000
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
See [Toolchain Version Baseline & Timeout Configuration](./docs/current/04-toolchain-version-baseline.md) for tuning guidance.
|
|
298
|
+
|
|
274
299
|
### Retry Mechanism
|
|
275
300
|
|
|
276
301
|
Transient errors are automatically retried with configurable strategies:
|
|
@@ -282,10 +307,15 @@ Transient errors are automatically retried with configurable strategies:
|
|
|
282
307
|
|
|
283
308
|
- **Node.js**: >= 18.0.0
|
|
284
309
|
- **WeChat DevTools**: [Download](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)
|
|
310
|
+
- Recommended: latest stable (v2.01.2510260 / 2025-10 or newer)
|
|
311
|
+
- Minimum for `auto` command: v1.05.2111232
|
|
285
312
|
- Enable CLI/HTTP calls in Settings -> Security
|
|
286
313
|
- Default automation port: 9420
|
|
314
|
+
- **miniprogram-automator**: 0.12.1 (2023-11-07) — the official SDK is no longer actively maintained but remains functional
|
|
287
315
|
- **Mini Program Project**: Any WeChat mini program with `project.config.json` or `app.json`
|
|
288
316
|
|
|
317
|
+
See [Toolchain Version Baseline](./docs/current/04-toolchain-version-baseline.md) for full version and compatibility details.
|
|
318
|
+
|
|
289
319
|
## Examples
|
|
290
320
|
|
|
291
321
|
### Natural Language Testing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/connect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/connect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAWrD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CAwFxB"}
|
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import automator from 'miniprogram-automator';
|
|
5
5
|
import { disconnect } from './disconnect.js';
|
|
6
|
+
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
7
|
+
import { withRetry, RetryPredicates } from '../../../runtime/retry/retry.js';
|
|
8
|
+
import { probePort } from '../../../runtime/network/probe-port.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default automation port for WeChat DevTools (matches SDK internal default)
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_PORT = 9420;
|
|
6
13
|
/**
|
|
7
14
|
* Connect to an already running WeChat DevTools instance
|
|
8
15
|
* Note: The port must be configured in WeChat DevTools settings before connecting
|
|
@@ -17,10 +24,39 @@ export async function connect(session, args = {}) {
|
|
|
17
24
|
logger?.warn('MiniProgram already connected, disconnecting first');
|
|
18
25
|
await disconnect(session);
|
|
19
26
|
}
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
// TCP port reachability probe — fail fast when DevTools isn't listening.
|
|
28
|
+
// Skip in Jest (JEST_WORKER_ID is auto-injected) and when explicitly disabled.
|
|
29
|
+
if (!process.env.JEST_WORKER_ID && process.env.MCP_SKIP_PORT_PROBE !== '1') {
|
|
30
|
+
const effectivePort = port ?? DEFAULT_PORT;
|
|
31
|
+
logger?.debug('Probing automation port for reachability', { port: effectivePort });
|
|
32
|
+
const reachable = await probePort(effectivePort, 3000);
|
|
33
|
+
if (!reachable) {
|
|
34
|
+
throw new Error(`Cannot reach automation port ${effectivePort}. Is WeChat DevTools running with automation enabled (Settings → Security → CLI/HTTP)?`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Build wsEndpoint. SDK requires a non-empty string; falling back to the
|
|
38
|
+
// default automation port avoids `new ws(undefined)`. Use 127.0.0.1 (not
|
|
39
|
+
// localhost) to match the SDK's own launch path and avoid IPv6 ::1 misroute.
|
|
40
|
+
const wsEndpoint = `ws://127.0.0.1:${port ?? DEFAULT_PORT}`;
|
|
41
|
+
// Resolve connect timeout (config → default 30s). The SDK's Connection.create
|
|
42
|
+
// wraps `new ws()` with NO connection timeout, so a reachable-but-unresponsive
|
|
43
|
+
// DevTools (automation disabled) would hang forever without this guard.
|
|
44
|
+
const timeoutMs = getTimeout(session.config?.connectTimeout, DEFAULT_TIMEOUTS.connect);
|
|
45
|
+
// Connect with timeout + single retry on transient connection errors.
|
|
46
|
+
// Unlike screenshot (which uses onConnectionError — no timeout retry), connect
|
|
47
|
+
// retries on timeout too. Reason: when the port just opened, the WebSocket
|
|
48
|
+
// handshake may not be ready yet; a brief timeout retry is harmless here because
|
|
49
|
+
// there is no in-flight SDK request consuming WebSocket bandwidth.
|
|
50
|
+
const miniProgram = await withRetry(() => withTimeout(automator.connect({ wsEndpoint }), timeoutMs, 'Connect to DevTools'), {
|
|
51
|
+
maxRetries: 1,
|
|
52
|
+
delayMs: 1000,
|
|
53
|
+
shouldRetry: RetryPredicates.onTransientError,
|
|
54
|
+
onRetry: (attempt, error, delay) => {
|
|
55
|
+
logger?.warn(`Connect retry attempt ${attempt}`, {
|
|
56
|
+
error: error.message,
|
|
57
|
+
nextDelayMs: delay,
|
|
58
|
+
});
|
|
59
|
+
},
|
|
24
60
|
});
|
|
25
61
|
// Store in session (use 'as any' to bypass type incompatibility between official types and our interface)
|
|
26
62
|
session.miniProgram = miniProgram;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/connect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,uBAAuB,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/disconnect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/disconnect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmDjF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Disconnect handler - Disconnects from miniprogram but keeps IDE running
|
|
3
3
|
*/
|
|
4
|
+
import { withTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
4
5
|
/**
|
|
5
6
|
* Disconnect from miniprogram but keep IDE process running
|
|
6
7
|
*/
|
|
@@ -15,8 +16,10 @@ export async function disconnect(session) {
|
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
logger?.info('Disconnecting from miniprogram');
|
|
18
|
-
// Disconnect from miniprogram-automator
|
|
19
|
-
|
|
19
|
+
// Disconnect from miniprogram-automator with timeout protection.
|
|
20
|
+
// The underlying ws close can hang if DevTools is unresponsive; the catch
|
|
21
|
+
// block below still clears session state on timeout.
|
|
22
|
+
await withTimeout(session.miniProgram.disconnect(), DEFAULT_TIMEOUTS.default, 'Disconnect from miniprogram');
|
|
20
23
|
// Clear miniProgram reference but keep session
|
|
21
24
|
session.miniProgram = undefined;
|
|
22
25
|
// Clear element cache
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/disconnect.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/disconnect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAUnF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,gDAAgD,CAAC,CAAA;YAC9D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,sBAAsB;aAChC,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAE9C,iEAAiE;QACjE,0EAA0E;QAC1E,qDAAqD;QACrD,MAAM,WAAW,CACf,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,EAChC,gBAAgB,CAAC,OAAO,EACxB,6BAA6B,CAC9B,CAAA;QAED,+CAA+C;QAC/C,OAAO,CAAC,WAAW,GAAG,SAAS,CAAA;QAE/B,sBAAsB;QACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QAExB,mBAAmB;QACnB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;QAElB,MAAM,EAAE,IAAI,CAAC,4CAA4C,CAAC,CAAA;QAE1D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4CAA4C;SACtD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,CAAC,sCAAsC,EAAE;YACpD,KAAK,EAAE,YAAY;SACpB,CAAC,CAAA;QAEF,oDAAoD;QACpD,OAAO,CAAC,WAAW,GAAG,SAAS,CAAA;QAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACxB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;QAElB,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -9,6 +9,11 @@ export interface LaunchArgs {
|
|
|
9
9
|
projectPath: string;
|
|
10
10
|
cliPath?: string;
|
|
11
11
|
port?: number;
|
|
12
|
+
/**
|
|
13
|
+
* Reuse an already-running DevTools on the port via connect (≈10ms) instead of
|
|
14
|
+
* spawning a new instance (≈13s). Defaults to true. Set false to force a fresh launch.
|
|
15
|
+
*/
|
|
16
|
+
reuseExisting?: boolean;
|
|
12
17
|
}
|
|
13
18
|
/**
|
|
14
19
|
* Launch result
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/launch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/launch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAerD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CA2F3F"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import automator from 'miniprogram-automator';
|
|
5
5
|
import { disconnect } from './disconnect.js';
|
|
6
|
+
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
7
|
+
import { probePort } from '../../../runtime/network/probe-port.js';
|
|
6
8
|
/**
|
|
7
9
|
* Default automation port for WeChat DevTools
|
|
8
10
|
*/
|
|
@@ -15,25 +17,53 @@ const DEFAULT_CLI_PATH = '/Applications/wechatwebdevtools.app/Contents/MacOS/cli
|
|
|
15
17
|
* Launch WeChat DevTools and connect to miniprogram
|
|
16
18
|
*/
|
|
17
19
|
export async function launch(session, args) {
|
|
18
|
-
const { projectPath, cliPath = DEFAULT_CLI_PATH, port = DEFAULT_PORT } = args;
|
|
20
|
+
const { projectPath, cliPath = DEFAULT_CLI_PATH, port = DEFAULT_PORT, reuseExisting = true } = args;
|
|
19
21
|
const logger = session.logger;
|
|
20
22
|
try {
|
|
21
23
|
logger?.info('Launching miniprogram', {
|
|
22
24
|
projectPath,
|
|
23
25
|
cliPath,
|
|
24
26
|
port,
|
|
27
|
+
reuseExisting,
|
|
25
28
|
});
|
|
26
29
|
// Check if already connected
|
|
27
30
|
if (session.miniProgram) {
|
|
28
31
|
logger?.warn('MiniProgram already connected, disconnecting first');
|
|
29
32
|
await disconnect(session);
|
|
30
33
|
}
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
const connectTimeoutMs = getTimeout(session.config?.connectTimeout, DEFAULT_TIMEOUTS.connect);
|
|
35
|
+
// Fast path: reuse an already-running DevTools on this port.
|
|
36
|
+
// Real-world data: connect ≈10ms vs full launch ≈13s (SDK spawns the process,
|
|
37
|
+
// polls, then sleeps a hardcoded 5s). Skip the spawn when a service is already up.
|
|
38
|
+
if (reuseExisting && !process.env.JEST_WORKER_ID) {
|
|
39
|
+
const alreadyRunning = await probePort(port, 1000);
|
|
40
|
+
if (alreadyRunning) {
|
|
41
|
+
// The running DevTools may host a different project than `projectPath`.
|
|
42
|
+
// We connect to whatever is already on the port; surface that in the log.
|
|
43
|
+
logger?.warn('Automation port already listening, reusing via connect (fast path). The running instance may host a different project than the requested projectPath; pass reuseExisting=false to force a fresh launch.', { port, requestedProjectPath: projectPath });
|
|
44
|
+
const miniProgram = await withTimeout(automator.connect({ wsEndpoint: `ws://127.0.0.1:${port}` }), connectTimeoutMs, 'Connect to existing DevTools');
|
|
45
|
+
session.miniProgram = miniProgram;
|
|
46
|
+
session.config = { ...session.config, projectPath, cliPath, port };
|
|
47
|
+
logger?.info('MiniProgram connected via fast path', { port });
|
|
48
|
+
return {
|
|
49
|
+
success: true,
|
|
50
|
+
message: `Reused running DevTools on port ${port} (fast path, may host a different project than ${projectPath})`,
|
|
51
|
+
port,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Resolve launch timeout (config → default 60s). The SDK uses `timeout` as the
|
|
56
|
+
// total poll budget in waitUntil, but its internal poll awaits `new ws()` which
|
|
57
|
+
// has no timeout — a reachable-but-unresponsive port can hang the SDK past its
|
|
58
|
+
// own budget. The outer withTimeout is the real guard against that.
|
|
59
|
+
const timeoutMs = getTimeout(session.config?.launchTimeout, DEFAULT_TIMEOUTS.launch);
|
|
60
|
+
// Launch with outer timeout protection
|
|
61
|
+
const miniProgram = await withTimeout(automator.launch({
|
|
33
62
|
projectPath,
|
|
34
63
|
cliPath,
|
|
35
64
|
port,
|
|
36
|
-
|
|
65
|
+
timeout: timeoutMs,
|
|
66
|
+
}), timeoutMs, 'Launch miniprogram');
|
|
37
67
|
// Store in session (use 'as any' to bypass type incompatibility between official types and our interface)
|
|
38
68
|
session.miniProgram = miniProgram;
|
|
39
69
|
session.config = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/launch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,SAAS,MAAM,uBAAuB,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/handlers/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,17 @@ export declare const automatorLaunchSchema: z.ZodObject<{
|
|
|
4
4
|
projectPath: z.ZodString;
|
|
5
5
|
cliPath: z.ZodOptional<z.ZodString>;
|
|
6
6
|
port: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
reuseExisting: z.ZodOptional<z.ZodBoolean>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
projectPath: string;
|
|
9
10
|
cliPath?: string | undefined;
|
|
10
11
|
port?: number | undefined;
|
|
12
|
+
reuseExisting?: boolean | undefined;
|
|
11
13
|
}, {
|
|
12
14
|
projectPath: string;
|
|
13
15
|
cliPath?: string | undefined;
|
|
14
16
|
port?: number | undefined;
|
|
17
|
+
reuseExisting?: boolean | undefined;
|
|
15
18
|
}>;
|
|
16
19
|
export declare const automatorLaunchDefinition: ToolSchemaDefinition;
|
|
17
20
|
//# sourceMappingURL=launch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/schemas/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEjE,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/automator/schemas/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAuBsB,CAAA;AAExD,eAAO,MAAM,yBAAyB,EAAE,oBAKvC,CAAA"}
|
|
@@ -15,6 +15,10 @@ export const automatorLaunchSchema = z
|
|
|
15
15
|
.max(65535)
|
|
16
16
|
.optional()
|
|
17
17
|
.describe('Automation port for WeChat DevTools'),
|
|
18
|
+
reuseExisting: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Reuse a DevTools already listening on the port via connect (~10ms) instead of spawning a new instance (~13s). Defaults to true. Note: when reusing, the running instance may host a different project than projectPath. Set false to force a fresh launch.'),
|
|
18
22
|
})
|
|
19
23
|
.describe('Launch WeChat Mini Program with automator');
|
|
20
24
|
export const automatorLaunchDefinition = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/schemas/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,wDAAwD,CAAC;IACnE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;SAC5C,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../../src/capabilities/automator/schemas/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,wDAAwD,CAAC;IACnE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;SAC5C,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,KAAK,CAAC;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,4PAA4P,CAC7P;CACJ,CAAC;KACD,QAAQ,CAAC,2CAA2C,CAAC,CAAA;AAExD,MAAM,CAAC,MAAM,yBAAyB,GAAyB;IAC7D,IAAI,EAAE,oBAAoB;IAC1B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,2CAA2C;IACxD,KAAK,EAAE,qBAAqB;CAC7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-wx.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/call-wx.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"call-wx.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/call-wx.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAG3F"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* CallWx handler - Call WeChat API methods (wx.*)
|
|
3
3
|
*/
|
|
4
4
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
5
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
5
6
|
/**
|
|
6
7
|
* Call a WeChat API method (wx.*)
|
|
7
8
|
*/
|
|
8
9
|
export async function callWx(session, args) {
|
|
10
|
+
// Serialize against all other SDK operations on this session (shared single WebSocket).
|
|
11
|
+
return withSessionLock(session.sessionId, () => callWxImpl(session, args));
|
|
12
|
+
}
|
|
13
|
+
async function callWxImpl(session, args) {
|
|
9
14
|
const { method, args: wxArgs = [] } = args;
|
|
10
15
|
const logger = session.logger;
|
|
11
16
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-wx.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/call-wx.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"call-wx.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/call-wx.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAmBvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAqB,EAAE,IAAgB;IAClE,wFAAwF;IACxF,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAqB,EAAE,IAAgB;IAC/D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,cAAc,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAEtD,+BAA+B;QAC/B,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAE9E,6CAA6C;QAC7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,EACnD,SAAS,EACT,MAAM,MAAM,OAAO,CACpB,CAAA;QAED,MAAM,EAAE,IAAI,CAAC,MAAM,MAAM,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAExD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,0BAA0B,MAAM,EAAE;YAC3C,MAAM;SACP,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,CAAC,MAAM,MAAM,cAAc,EAAE;YACxC,KAAK,EAAE,YAAY;YACnB,MAAM;YACN,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QAEF,MAAM,IAAI,KAAK,CAAC,MAAM,MAAM,iBAAiB,YAAY,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAGjG"}
|
|
@@ -10,10 +10,15 @@
|
|
|
10
10
|
* - Never pass untrusted user input directly to this function
|
|
11
11
|
*/
|
|
12
12
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
13
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
13
14
|
/**
|
|
14
15
|
* Evaluate JavaScript code in the mini program context
|
|
15
16
|
*/
|
|
16
17
|
export async function evaluate(session, args) {
|
|
18
|
+
// Serialize against all other SDK operations on this session (shared single WebSocket).
|
|
19
|
+
return withSessionLock(session.sessionId, () => evaluateImpl(session, args));
|
|
20
|
+
}
|
|
21
|
+
async function evaluateImpl(session, args) {
|
|
17
22
|
const { expression, args: evalArgs = [] } = args;
|
|
18
23
|
const logger = session.logger;
|
|
19
24
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAmBvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB,EAAE,IAAkB;IACtE,wFAAwF;IACxF,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAqB,EAAE,IAAkB;IACnE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,6CAA6C;QAC7C,MAAM,EAAE,IAAI,CAAC,kCAAkC,EAAE;YAC/C,UAAU;YACV,SAAS,EAAE,QAAQ,CAAC,MAAM;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;QAEF,kEAAkE;QAClE,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAExF,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,EACrD,SAAS,EACT,qBAAqB,CACtB,CAAA;QAED,MAAM,EAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAEjD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mCAAmC;YAC5C,MAAM;SACP,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3E,mCAAmC;QACnC,MAAM,EAAE,KAAK,CAAC,8BAA8B,EAAE;YAC5C,KAAK,EAAE,YAAY;YACnB,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;QAEF,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAA;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,CAAA;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAGjG"}
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
* Navigate handler - Page navigation operations
|
|
3
3
|
*/
|
|
4
4
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
5
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
5
6
|
/**
|
|
6
7
|
* Navigate to a page in the mini program
|
|
7
8
|
* Supports: navigateTo, redirectTo, reLaunch, switchTab, navigateBack
|
|
8
9
|
*/
|
|
9
10
|
export async function navigate(session, args) {
|
|
11
|
+
// Serialize against all other SDK operations on this session (shared single WebSocket).
|
|
12
|
+
return withSessionLock(session.sessionId, () => navigateImpl(session, args));
|
|
13
|
+
}
|
|
14
|
+
async function navigateImpl(session, args) {
|
|
10
15
|
const { method, url, delta } = args;
|
|
11
16
|
const logger = session.logger;
|
|
12
17
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAoBvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB,EAAE,IAAkB;IACtE,wFAAwF;IACxF,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAqB,EAAE,IAAkB;IACnE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAE1D,wCAAwC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAElF,oDAAoD;QACpD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW;gBACd,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAA;gBAClD,CAAC;gBACD,MAAM,WAAW,CACf,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAChC,SAAS,EACT,eAAe,MAAM,GAAG,CACzB,CAAA;gBACD,MAAK;YAEP,KAAK,cAAc;gBACjB,MAAM,WAAW,CACf,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,EACvC,SAAS,EACT,2BAA2B,CAC5B,CAAA;gBACD,MAAK;YAEP;gBACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,iDAAiD;QACjD,MAAM,WAAW,GAAG,MAAM,WAAW,CACnC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,EACjC,gBAAgB,CAAC,SAAS,EAC1B,kBAAkB,CACS,CAAA;QAC7B,MAAM,WAAW,GAAG,WAAW,EAAE,IAAI,IAAI,SAAS,CAAA;QAElD,MAAM,EAAE,IAAI,CAAC,wCAAwC,WAAW,EAAE,CAAC,CAAA;QAEnE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,gCAAgC,MAAM,EAAE;YACjD,WAAW,EAAE,WAAW;SACzB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,CAAC,mBAAmB,EAAE;YACjC,KAAK,EAAE,YAAY;YACnB,MAAM;YACN,GAAG;SACJ,CAAC,CAAA;QAEF,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAA;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-stack.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/page-stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"page-stack.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/page-stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAAA;CAC3D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAGlF"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* PageStack handler - Get current page stack
|
|
3
3
|
*/
|
|
4
4
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
5
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
5
6
|
/**
|
|
6
7
|
* Get current page stack
|
|
7
8
|
*/
|
|
8
9
|
export async function getPageStack(session) {
|
|
10
|
+
// Serialize against all other SDK operations on this session (shared single WebSocket).
|
|
11
|
+
return withSessionLock(session.sessionId, () => getPageStackImpl(session));
|
|
12
|
+
}
|
|
13
|
+
async function getPageStackImpl(session) {
|
|
9
14
|
const logger = session.logger;
|
|
10
15
|
try {
|
|
11
16
|
if (!session.miniProgram) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-stack.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/page-stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"page-stack.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/page-stack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAWvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,wFAAwF;IACxF,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAElC,yCAAyC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;QACjF,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAC/B,SAAS,EACT,gBAAgB,CACR,CAAA;QAEV,4BAA4B;QAC5B,OAAO,CAAC,KAAK,GAAG,SAAS,CAAA;QAEzB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;SACxB,CAAC,CAAC,CAAA;QAEH,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAE7D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mCAAmC;YAC5C,KAAK;SACN,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;QAElE,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/screenshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/screenshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAM3B"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
6
6
|
import { withRetry, RetryPredicates } from '../../../runtime/retry/retry.js';
|
|
7
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
7
8
|
/**
|
|
8
9
|
* Take a screenshot of the mini program
|
|
9
10
|
* Returns base64 string if returnBase64 is true, otherwise saves to file
|
|
@@ -15,6 +16,13 @@ import { withRetry, RetryPredicates } from '../../../runtime/retry/retry.js';
|
|
|
15
16
|
* @param args.returnBase64 - Return screenshot as base64 string instead of saving to file
|
|
16
17
|
*/
|
|
17
18
|
export async function screenshot(session, args = {}) {
|
|
19
|
+
// Serialize against ALL SDK operations on this session, not just other screenshots.
|
|
20
|
+
// The SDK multiplexes every request over one WebSocket, so a screenshot racing a
|
|
21
|
+
// concurrent navigate/evaluate would also hang. Queueing per session turns any
|
|
22
|
+
// concurrency into an orderly sequence (real-world test: concurrent 1/8 → 8/8).
|
|
23
|
+
return withSessionLock(session.sessionId, () => screenshotImpl(session, args));
|
|
24
|
+
}
|
|
25
|
+
async function screenshotImpl(session, args = {}) {
|
|
18
26
|
const { filename, fullPage = false, returnBase64 = false } = args;
|
|
19
27
|
const logger = session.logger;
|
|
20
28
|
const outputManager = session.outputManager;
|
|
@@ -32,7 +40,10 @@ export async function screenshot(session, args = {}) {
|
|
|
32
40
|
const buffer = (await withRetry(() => withTimeout(session.miniProgram.screenshot({ fullPage }), timeoutMs, 'Screenshot capture (base64)'), {
|
|
33
41
|
maxRetries: 2,
|
|
34
42
|
delayMs: 1000,
|
|
35
|
-
|
|
43
|
+
// Only retry on a dropped connection. Do NOT retry on timeout: under the
|
|
44
|
+
// session lock the underlying request isn't cancelled, so a retry just
|
|
45
|
+
// queues more work onto an already-busy WebSocket and makes things worse.
|
|
46
|
+
shouldRetry: RetryPredicates.onConnectionError,
|
|
36
47
|
onRetry: (attempt, error, delay) => {
|
|
37
48
|
logger?.warn(`Screenshot retry attempt ${attempt}`, {
|
|
38
49
|
error: error.message,
|
|
@@ -79,7 +90,10 @@ export async function screenshot(session, args = {}) {
|
|
|
79
90
|
}), timeoutMs, 'Screenshot capture'), {
|
|
80
91
|
maxRetries: 2,
|
|
81
92
|
delayMs: 1000,
|
|
82
|
-
|
|
93
|
+
// Only retry on a dropped connection. Do NOT retry on timeout: under the
|
|
94
|
+
// session lock the underlying request isn't cancelled, so a retry just
|
|
95
|
+
// queues more work onto an already-busy WebSocket and makes things worse.
|
|
96
|
+
shouldRetry: RetryPredicates.onConnectionError,
|
|
83
97
|
onRetry: (attempt, error, delay) => {
|
|
84
98
|
logger?.warn(`Screenshot retry attempt ${attempt}`, {
|
|
85
99
|
error: error.message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/screenshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-info.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/system-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"system-info.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/system-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,GAAG,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGpF"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* SystemInfo handler - Get system information
|
|
3
3
|
*/
|
|
4
4
|
import { withTimeout, getTimeout, DEFAULT_TIMEOUTS } from '../../../runtime/timeout/timeout.js';
|
|
5
|
+
import { withSessionLock } from '../../../runtime/concurrency/mutex.js';
|
|
5
6
|
/**
|
|
6
7
|
* Get system information
|
|
7
8
|
*/
|
|
8
9
|
export async function getSystemInfo(session) {
|
|
10
|
+
// Serialize against all other SDK operations on this session (shared single WebSocket).
|
|
11
|
+
return withSessionLock(session.sessionId, () => getSystemInfoImpl(session));
|
|
12
|
+
}
|
|
13
|
+
async function getSystemInfoImpl(session) {
|
|
9
14
|
const logger = session.logger;
|
|
10
15
|
try {
|
|
11
16
|
if (!session.miniProgram) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-info.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/system-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"system-info.js","sourceRoot":"","sources":["../../../../src/capabilities/miniprogram/handlers/system-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAWvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAqB;IACvD,wFAAwF;IACxF,OAAO,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAqB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAE1C,0CAA0C;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAClF,MAAM,UAAU,GAAG,MAAM,WAAW,CAClC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,EAChC,SAAS,EACT,iBAAiB,CAClB,CAAA;QAED,MAAM,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAE5C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2CAA2C;YACpD,UAAU;SACX,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;QAEnE,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC"}
|
|
@@ -30,6 +30,10 @@ export declare const DEFAULT_EVALUATE_TIMEOUT: number;
|
|
|
30
30
|
* Default timeout for launch operations (60 seconds in milliseconds)
|
|
31
31
|
*/
|
|
32
32
|
export declare const DEFAULT_LAUNCH_TIMEOUT: number;
|
|
33
|
+
/**
|
|
34
|
+
* Default timeout for connect operations (30 seconds in milliseconds)
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULT_CONNECT_TIMEOUT: number;
|
|
33
37
|
/**
|
|
34
38
|
* Default timeout for screenshot operations (10 seconds in milliseconds)
|
|
35
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,sBAAsB,2DAA2D,CAAA;AAE9F;;GAEG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAE3C;;GAEG;AACH,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAiB,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAY,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAW,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,UAAW,CAAA;AAE5C;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAG,MAAe,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C;;GAEG;AACH,eAAO,MAAM,0BAA0B,OAAO,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,sBAAsB,2DAA2D,CAAA;AAE9F;;GAEG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAE3C;;GAEG;AACH,eAAO,MAAM,kBAAkB,mBAAmB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAiB,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAY,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,wBAAwB,QAAW,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAY,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,oBAAoB,UAAW,CAAA;AAE5C;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAG,MAAe,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C;;GAEG;AACH,eAAO,MAAM,0BAA0B,OAAO,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAkBxD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,aAAa,CAS1D,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAS3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAO9F"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -29,6 +29,10 @@ export const DEFAULT_EVALUATE_TIMEOUT = 5 * 1000;
|
|
|
29
29
|
* Default timeout for launch operations (60 seconds in milliseconds)
|
|
30
30
|
*/
|
|
31
31
|
export const DEFAULT_LAUNCH_TIMEOUT = 60 * 1000;
|
|
32
|
+
/**
|
|
33
|
+
* Default timeout for connect operations (30 seconds in milliseconds)
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_CONNECT_TIMEOUT = 30 * 1000;
|
|
32
36
|
/**
|
|
33
37
|
* Default timeout for screenshot operations (10 seconds in milliseconds)
|
|
34
38
|
*/
|
|
@@ -67,6 +71,9 @@ export const DEFAULT_SERVER_CONFIG = {
|
|
|
67
71
|
logFlushInterval: DEFAULT_LOG_FLUSH_INTERVAL,
|
|
68
72
|
enableSessionReport: false, // F3: Session report generation (default: disabled)
|
|
69
73
|
enableFailureSnapshot: false, // F2: Automatic failure snapshot capture (default: disabled)
|
|
74
|
+
launchTimeout: DEFAULT_LAUNCH_TIMEOUT,
|
|
75
|
+
connectTimeout: DEFAULT_CONNECT_TIMEOUT,
|
|
76
|
+
screenshotTimeout: DEFAULT_SCREENSHOT_TIMEOUT,
|
|
70
77
|
};
|
|
71
78
|
/**
|
|
72
79
|
* Default session configuration
|
|
@@ -78,6 +85,7 @@ export const DEFAULT_SESSION_CONFIG = {
|
|
|
78
85
|
timeout: DEFAULT_TIMEOUT,
|
|
79
86
|
evaluateTimeout: DEFAULT_EVALUATE_TIMEOUT,
|
|
80
87
|
launchTimeout: DEFAULT_LAUNCH_TIMEOUT,
|
|
88
|
+
connectTimeout: DEFAULT_CONNECT_TIMEOUT,
|
|
81
89
|
screenshotTimeout: DEFAULT_SCREENSHOT_TIMEOUT,
|
|
82
90
|
};
|
|
83
91
|
/**
|