@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wDAAwD,CAAA;AAE9F;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAA;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,CAAA;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,CAAC,CAAA;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAe,CAAA;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,WAAW,EAAE,EAAE,EAAE,2BAA2B;IAC5C,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;IACpE,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,iBAAiB;IACpD,YAAY,EAAE,oBAAoB;IAClC,SAAS,EAAE,kBAAkB;IAC7B,OAAO,EAAE,eAAe;IACxB,cAAc,EAAE,uBAAuB;IACvC,QAAQ,EAAE,iBAAiB;IAC3B,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,uBAAuB;IACtC,gBAAgB,EAAE,0BAA0B;IAC5C,mBAAmB,EAAE,KAAK,EAAE,oDAAoD;IAChF,qBAAqB,EAAE,KAAK,EAAE,6DAA6D;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ export declare function loadConfigFile(filePath: string): Partial<ServerConfig>;
|
|
|
26
26
|
* - MCP_OUTPUT_DIR
|
|
27
27
|
* - MCP_TIMEOUT
|
|
28
28
|
* - MCP_SESSION_TIMEOUT
|
|
29
|
+
* - MCP_LAUNCH_TIMEOUT
|
|
30
|
+
* - MCP_CONNECT_TIMEOUT
|
|
31
|
+
* - MCP_SCREENSHOT_TIMEOUT
|
|
29
32
|
*/
|
|
30
33
|
export declare function loadConfigFromEnv(): Partial<ServerConfig>;
|
|
31
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAc/C;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAoB9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAwBrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBtE;AAED
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAc/C;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAoB9E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAwBrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,CA8DzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,GAAE,OAAO,CAAC,YAAY,CAAM,EACtC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,EACrC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,QAAQ,CAAC,YAAY,CAAC,CAYxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACd,GACL,QAAQ,CAAC,YAAY,CAAC,CAwCxB"}
|
package/dist/config/loader.js
CHANGED
|
@@ -91,6 +91,9 @@ export function loadConfigFile(filePath) {
|
|
|
91
91
|
* - MCP_OUTPUT_DIR
|
|
92
92
|
* - MCP_TIMEOUT
|
|
93
93
|
* - MCP_SESSION_TIMEOUT
|
|
94
|
+
* - MCP_LAUNCH_TIMEOUT
|
|
95
|
+
* - MCP_CONNECT_TIMEOUT
|
|
96
|
+
* - MCP_SCREENSHOT_TIMEOUT
|
|
94
97
|
*/
|
|
95
98
|
export function loadConfigFromEnv() {
|
|
96
99
|
const config = {};
|
|
@@ -124,6 +127,24 @@ export function loadConfigFromEnv() {
|
|
|
124
127
|
config.sessionTimeout = timeout;
|
|
125
128
|
}
|
|
126
129
|
}
|
|
130
|
+
if (process.env.MCP_LAUNCH_TIMEOUT) {
|
|
131
|
+
const timeout = parseInt(process.env.MCP_LAUNCH_TIMEOUT, 10);
|
|
132
|
+
if (!isNaN(timeout)) {
|
|
133
|
+
config.launchTimeout = timeout;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (process.env.MCP_CONNECT_TIMEOUT) {
|
|
137
|
+
const timeout = parseInt(process.env.MCP_CONNECT_TIMEOUT, 10);
|
|
138
|
+
if (!isNaN(timeout)) {
|
|
139
|
+
config.connectTimeout = timeout;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (process.env.MCP_SCREENSHOT_TIMEOUT) {
|
|
143
|
+
const timeout = parseInt(process.env.MCP_SCREENSHOT_TIMEOUT, 10);
|
|
144
|
+
if (!isNaN(timeout)) {
|
|
145
|
+
config.screenshotTimeout = timeout;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
127
148
|
return config;
|
|
128
149
|
}
|
|
129
150
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-key serial queue (mutex).
|
|
3
|
+
*
|
|
4
|
+
* The WeChat automation SDK uses a single WebSocket with a serial request/response
|
|
5
|
+
* protocol. Operations like screenshot cannot run concurrently — firing several at
|
|
6
|
+
* once makes all but one hang until they time out. This mutex serializes calls that
|
|
7
|
+
* share a key (e.g. a session id) so concurrent callers are queued instead of racing.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Run `task` exclusively for the given `key`. Calls with the same key execute one at a
|
|
11
|
+
* time, in arrival order. Calls with different keys do not block each other.
|
|
12
|
+
*
|
|
13
|
+
* @param key - Serialization key (e.g. session id)
|
|
14
|
+
* @param task - The async operation to run under the lock
|
|
15
|
+
*/
|
|
16
|
+
export declare function runExclusive<T>(key: string, task: () => Promise<T>): Promise<T>;
|
|
17
|
+
/**
|
|
18
|
+
* Serialize an operation against all other operations on the same session.
|
|
19
|
+
*
|
|
20
|
+
* The SDK multiplexes every request over ONE WebSocket. Running independent
|
|
21
|
+
* operations (screenshot, evaluate, navigate, …) concurrently makes them race for
|
|
22
|
+
* that single connection and all but one hang until timeout. Sharing one lock per
|
|
23
|
+
* session turns concurrent calls into an orderly queue.
|
|
24
|
+
*
|
|
25
|
+
* @param sessionId - The session whose SDK operations must run one at a time
|
|
26
|
+
* @param task - The async SDK operation to run under the session lock
|
|
27
|
+
*/
|
|
28
|
+
export declare function withSessionLock<T>(sessionId: string, task: () => Promise<T>): Promise<T>;
|
|
29
|
+
//# sourceMappingURL=mutex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutex.d.ts","sourceRoot":"","sources":["../../../src/runtime/concurrency/mutex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBrF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAExF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-key serial queue (mutex).
|
|
3
|
+
*
|
|
4
|
+
* The WeChat automation SDK uses a single WebSocket with a serial request/response
|
|
5
|
+
* protocol. Operations like screenshot cannot run concurrently — firing several at
|
|
6
|
+
* once makes all but one hang until they time out. This mutex serializes calls that
|
|
7
|
+
* share a key (e.g. a session id) so concurrent callers are queued instead of racing.
|
|
8
|
+
*/
|
|
9
|
+
const tails = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Run `task` exclusively for the given `key`. Calls with the same key execute one at a
|
|
12
|
+
* time, in arrival order. Calls with different keys do not block each other.
|
|
13
|
+
*
|
|
14
|
+
* @param key - Serialization key (e.g. session id)
|
|
15
|
+
* @param task - The async operation to run under the lock
|
|
16
|
+
*/
|
|
17
|
+
export async function runExclusive(key, task) {
|
|
18
|
+
const prev = tails.get(key) ?? Promise.resolve();
|
|
19
|
+
// Chain after the predecessor, ignoring its outcome so one caller's error
|
|
20
|
+
// never rejects the next caller in the queue.
|
|
21
|
+
const run = prev.then(() => task(), () => task());
|
|
22
|
+
// Advance the tail. Settle to a non-throwing promise so the chain stays clean.
|
|
23
|
+
const settled = run.then(() => undefined, () => undefined);
|
|
24
|
+
tails.set(key, settled);
|
|
25
|
+
// Drop the entry once this task is the last one, to avoid unbounded growth.
|
|
26
|
+
settled.then(() => {
|
|
27
|
+
if (tails.get(key) === settled)
|
|
28
|
+
tails.delete(key);
|
|
29
|
+
});
|
|
30
|
+
return run;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Serialize an operation against all other operations on the same session.
|
|
34
|
+
*
|
|
35
|
+
* The SDK multiplexes every request over ONE WebSocket. Running independent
|
|
36
|
+
* operations (screenshot, evaluate, navigate, …) concurrently makes them race for
|
|
37
|
+
* that single connection and all but one hang until timeout. Sharing one lock per
|
|
38
|
+
* session turns concurrent calls into an orderly queue.
|
|
39
|
+
*
|
|
40
|
+
* @param sessionId - The session whose SDK operations must run one at a time
|
|
41
|
+
* @param task - The async SDK operation to run under the session lock
|
|
42
|
+
*/
|
|
43
|
+
export function withSessionLock(sessionId, task) {
|
|
44
|
+
return runExclusive(`session:${sessionId}`, task);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=mutex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../../src/runtime/concurrency/mutex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,GAAW,EAAE,IAAsB;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;IAEhD,0EAA0E;IAC1E,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,IAAI,EAAE,EACZ,GAAG,EAAE,CAAC,IAAI,EAAE,CACb,CAAA;IAED,+EAA+E;IAC/E,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAA;IACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAEvB,4EAA4E;IAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAI,SAAiB,EAAE,IAAsB;IAC1E,OAAO,YAAY,CAAC,WAAW,SAAS,EAAE,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP port reachability probe.
|
|
3
|
+
*
|
|
4
|
+
* Used by connect and launch handlers to fail fast when DevTools isn't listening,
|
|
5
|
+
* instead of waiting for the full WebSocket timeout.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Probe whether a TCP port is reachable.
|
|
9
|
+
* Resolves true immediately on successful connect, false on timeout/error.
|
|
10
|
+
*
|
|
11
|
+
* @param port - Port number to probe
|
|
12
|
+
* @param timeoutMs - Timeout in milliseconds
|
|
13
|
+
*/
|
|
14
|
+
export declare function probePort(port: number, timeoutMs: number): Promise<boolean>;
|
|
15
|
+
//# sourceMappingURL=probe-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-port.d.ts","sourceRoot":"","sources":["../../../src/runtime/network/probe-port.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB3E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TCP port reachability probe.
|
|
3
|
+
*
|
|
4
|
+
* Used by connect and launch handlers to fail fast when DevTools isn't listening,
|
|
5
|
+
* instead of waiting for the full WebSocket timeout.
|
|
6
|
+
*/
|
|
7
|
+
import net from 'node:net';
|
|
8
|
+
/**
|
|
9
|
+
* Probe whether a TCP port is reachable.
|
|
10
|
+
* Resolves true immediately on successful connect, false on timeout/error.
|
|
11
|
+
*
|
|
12
|
+
* @param port - Port number to probe
|
|
13
|
+
* @param timeoutMs - Timeout in milliseconds
|
|
14
|
+
*/
|
|
15
|
+
export function probePort(port, timeoutMs) {
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
const socket = new net.Socket();
|
|
18
|
+
let settled = false;
|
|
19
|
+
const finish = (result) => {
|
|
20
|
+
if (settled)
|
|
21
|
+
return;
|
|
22
|
+
settled = true;
|
|
23
|
+
socket.destroy();
|
|
24
|
+
resolve(result);
|
|
25
|
+
};
|
|
26
|
+
socket.setTimeout(timeoutMs);
|
|
27
|
+
socket.on('connect', () => finish(true));
|
|
28
|
+
socket.on('timeout', () => finish(false));
|
|
29
|
+
socket.on('error', () => finish(false));
|
|
30
|
+
socket.connect(port, '127.0.0.1');
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=probe-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-port.js","sourceRoot":"","sources":["../../../src/runtime/network/probe-port.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,GAAG,MAAM,UAAU,CAAA;AAE1B;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiB;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA;QAC/B,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,MAAM,MAAM,GAAG,CAAC,MAAe,EAAE,EAAE;YACjC,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC,CAAA;QAED,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAEvC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/runtime/timeout/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../src/runtime/timeout/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,uDAAuD;;IAEvD,kDAAkD;;IAElD,iDAAiD;;IAEjD,kDAAkD;;IAElD,qDAAqD;;IAErD,8DAA8D;;IAE9D,qDAAqD;;IAErD,iDAAiD;;IAEjD,mDAAmD;;IAEnD,oDAAoD;;IAEpD,kDAAkD;;IAElD,+CAA+C;;CAEvC,CAAA;AAEV;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE9F"}
|
|
@@ -24,15 +24,17 @@ export async function withTimeout(promise, timeoutMs, operation) {
|
|
|
24
24
|
timeoutId = setTimeout(() => {
|
|
25
25
|
reject(new Error(`${operation} timed out after ${timeoutMs}ms`));
|
|
26
26
|
}, timeoutMs);
|
|
27
|
+
// Prevent the timer from keeping the Node.js process alive after timeout.
|
|
28
|
+
// Note: the underlying SDK promise cannot be aborted (no cancel API), but
|
|
29
|
+
// unref + clearTimeout removes our timer leak.
|
|
30
|
+
if (typeof timeoutId.unref === 'function')
|
|
31
|
+
timeoutId.unref();
|
|
27
32
|
});
|
|
28
33
|
try {
|
|
29
|
-
|
|
30
|
-
clearTimeout(timeoutId);
|
|
31
|
-
return result;
|
|
34
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
32
35
|
}
|
|
33
|
-
|
|
36
|
+
finally {
|
|
34
37
|
clearTimeout(timeoutId);
|
|
35
|
-
throw error;
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/runtime/timeout/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAyB,CAAA;IAE7B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAClD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,SAAS,IAAI,CAAC,CAAC,CAAA;QAClE,CAAC,EAAE,SAAS,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../src/runtime/timeout/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAyB,CAAA;IAE7B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAClD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,SAAS,IAAI,CAAC,CAAC,CAAA;QAClE,CAAC,EAAE,SAAS,CAAC,CAAA;QACb,0EAA0E;QAC1E,0EAA0E;QAC1E,+CAA+C;QAC/C,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;YAAE,SAAS,CAAC,KAAK,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;IACtD,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAU,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,uDAAuD;IACvD,OAAO,EAAE,KAAK;IACd,kDAAkD;IAClD,QAAQ,EAAE,IAAI;IACd,iDAAiD;IACjD,MAAM,EAAE,KAAK;IACb,kDAAkD;IAClD,OAAO,EAAE,KAAK;IACd,qDAAqD;IACrD,UAAU,EAAE,KAAK;IACjB,8DAA8D;IAC9D,kBAAkB,EAAE,KAAK;IACzB,qDAAqD;IACrD,UAAU,EAAE,KAAK;IACjB,iDAAiD;IACjD,MAAM,EAAE,KAAK;IACb,mDAAmD;IACnD,SAAS,EAAE,IAAI;IACf,oDAAoD;IACpD,UAAU,EAAE,IAAI;IAChB,kDAAkD;IAClD,OAAO,EAAE,KAAK;IACd,+CAA+C;IAC/C,KAAK,EAAE,KAAK;CACJ,CAAA;AAEV;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,aAAiC,EAAE,gBAAwB;IACpF,OAAO,aAAa,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAA;AACtE,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,wBAAsB,WAAW,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,wBAAsB,WAAW,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsGrF"}
|
package/dist/server.js
CHANGED
|
@@ -10,7 +10,7 @@ import { mergeServerConfig } from './config/defaults.js';
|
|
|
10
10
|
export async function startServer(config = {}) {
|
|
11
11
|
// Merge config with defaults to ensure all fields are present
|
|
12
12
|
const fullConfig = mergeServerConfig(config);
|
|
13
|
-
const { capabilities, outputDir, sessionTimeout, logLevel, enableFileLog, logBufferSize, logFlushInterval, enableSessionReport, } = fullConfig;
|
|
13
|
+
const { capabilities, outputDir, sessionTimeout, logLevel, enableFileLog, logBufferSize, logFlushInterval, enableSessionReport, projectPath, cliPath, port, timeout, launchTimeout, connectTimeout, screenshotTimeout, } = fullConfig;
|
|
14
14
|
// Generate unique session ID for this server instance
|
|
15
15
|
// Each stdio transport connection gets a unique session
|
|
16
16
|
const sessionId = `session-${process.pid}-${Date.now()}`;
|
|
@@ -41,7 +41,8 @@ export async function startServer(config = {}) {
|
|
|
41
41
|
capabilities,
|
|
42
42
|
sessionId, // Pass the unique session ID
|
|
43
43
|
getSession: (sid) => {
|
|
44
|
-
const
|
|
44
|
+
const sessionConfig = { projectPath, cliPath, port, timeout, launchTimeout, connectTimeout, screenshotTimeout };
|
|
45
|
+
const session = sessionStore.getOrCreate(sid, sessionConfig);
|
|
45
46
|
sessionStore.updateActivity(sid);
|
|
46
47
|
return session;
|
|
47
48
|
},
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAgC,EAAE;IAClE,8DAA8D;IAC9D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,cAAc,EACd,QAAQ,EACR,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -18,6 +18,9 @@ export interface ServerConfig {
|
|
|
18
18
|
logFlushInterval?: number;
|
|
19
19
|
enableSessionReport?: boolean;
|
|
20
20
|
enableFailureSnapshot?: boolean;
|
|
21
|
+
launchTimeout?: number;
|
|
22
|
+
connectTimeout?: number;
|
|
23
|
+
screenshotTimeout?: number;
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
23
26
|
* Cached element with page metadata for invalidation
|
|
@@ -54,6 +57,8 @@ export interface SessionConfig {
|
|
|
54
57
|
evaluateTimeout?: number;
|
|
55
58
|
/** Timeout for launch operations (ms). Defaults to 60000 (60s) */
|
|
56
59
|
launchTimeout?: number;
|
|
60
|
+
/** Timeout for connect operations (ms). Defaults to 30000 (30s) */
|
|
61
|
+
connectTimeout?: number;
|
|
57
62
|
/** Timeout for screenshot operations (ms). Defaults to 10000 (10s) */
|
|
58
63
|
screenshotTimeout?: number;
|
|
59
64
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAE9F,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# 连接 / 截图超时问题诊断与优化方案
|
|
2
|
+
|
|
3
|
+
> 版本: 1.0.0
|
|
4
|
+
> 日期: 2026-05-31
|
|
5
|
+
> 状态: 🔍 诊断完成,待修复
|
|
6
|
+
|
|
7
|
+
## 0. 调研结论速览(TL;DR)
|
|
8
|
+
|
|
9
|
+
| 任务 | 结论 |
|
|
10
|
+
|------|------|
|
|
11
|
+
| **1. 代码是否需要更新以适配小程序 CLI** | ⚠️ 需要少量更新。SDK `miniprogram-automator@0.12.1` 是当前最新可用版本,CLI 路径/端口适配本身没问题,但 **launch 传入的 `timeout` 参数 SDK 内部根本没使用**,connect 的 `wsEndpoint` 在不传 port 时传了 `undefined` 会触发 SDK 异常路径。 |
|
|
12
|
+
| **2. 修复现有超时问题** | 🔴 必须修复。**根因是 `connect`/`launch` 两个 handler 完全没有超时/重试保护**,连接超时卡死的概率最高;截图虽已有保护,但 `withTimeout` 实现有「超时后底层 promise 不取消」的泄漏缺陷。 |
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. 问题现象
|
|
17
|
+
|
|
18
|
+
- 调用 `automator_connect` / `automator_launch` 经常卡住无响应,最终 MCP 调用超时
|
|
19
|
+
- 调用 `miniprogram_screenshot`(尤其 `fullPage`)偶发卡顿
|
|
20
|
+
- 卡死后后续工具调用全部被阻塞
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. 根因分析(基于 SDK 源码逐行确认)
|
|
25
|
+
|
|
26
|
+
### 2.1 🔴 P0:connect / launch 无任何超时保护(连接卡死的主因)
|
|
27
|
+
|
|
28
|
+
**位置**:
|
|
29
|
+
- `src/capabilities/automator/handlers/connect.ts:47`
|
|
30
|
+
- `src/capabilities/automator/handlers/launch.ts:58`
|
|
31
|
+
|
|
32
|
+
两个 handler 都是直接 `await automator.connect()/launch()`,**没有 `withTimeout` 也没有 `withRetry`**,与 screenshot/evaluate 的保护策略不一致。
|
|
33
|
+
|
|
34
|
+
#### SDK connect 内部行为(`node_modules/miniprogram-automator/out/Launcher.js` + `Connection.js`)
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
connect(opts) → connectTool(opts) → Connection.create(wsEndpoint) → new ws(endpoint)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`Connection.create` 仅 `new ws(e)` 并监听 `open`,**没有连接超时**。
|
|
41
|
+
当出现以下情况时,`new ws()` 会永久挂起、既不 resolve 也不 reject:
|
|
42
|
+
- 端口可达(TCP 层通),但 DevTools 未开启「CLI/HTTP 调用」
|
|
43
|
+
- DevTools 进程假死 / 自动化端口被占用但无响应
|
|
44
|
+
- 防火墙吞包(SYN 通、握手后无数据)
|
|
45
|
+
|
|
46
|
+
→ **这是「连接经常超时」的根因**:超时不是发生在我们这层,而是 SDK 的 WebSocket 永远不返回,MCP 层只能等到上游(MCP client)整体超时。
|
|
47
|
+
|
|
48
|
+
#### SDK launch 内部行为(已逐行核验 Launcher.js + licia/waitUntil.js)
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
launch() → spawn(cli) → waitUntil(condition, timeout=30s, interval=1s) → checkVersion() → sleep(5000) → 返回
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
condition 内部:`p(spawn error) || f(exit+15s 超时标志) || (d = await connectTool({wsEndpoint:'ws://127.0.0.1:'+port}))`
|
|
55
|
+
|
|
56
|
+
**关键缺陷(决定性)**:`licia/waitUntil` 的超时判断 `elapsed >= timeout` **只在 condition() 这个 Promise resolve 之后**才执行:
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
evalCondition().then(function(val){
|
|
60
|
+
var elapsed = now() - startTime
|
|
61
|
+
if (val) resolve(val)
|
|
62
|
+
else if (timeout && elapsed >= timeout) reject(...) // ← 只有 condition 返回后才走到
|
|
63
|
+
else setTimeout(pollCondition, interval)
|
|
64
|
+
}, reject)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
而 condition 里 `await connectTool()` → `Connection.create()` → `new ws()`。**端口通但 DevTools 无响应时 `new ws()` 永不 resolve → condition() 永不返回 → 30s 超时判断永远执行不到 → launch 永久挂死。SDK 的 30s `timeout` 在最常见故障场景下完全失效。**
|
|
68
|
+
|
|
69
|
+
- `ILaunchOptions.timeout`(默认 `3e4`)**确实被用作 waitUntil 的总超时**(我初版误判为"未引用",此处已纠正);但因上面缺陷,它只在「CLI 进程起不来 / 端口轮询返回 false」时生效,对「ws 挂起」无效
|
|
70
|
+
- CLI 进程 `exit` 后再过 **15s** 才把 `f=!0` 置位(仅覆盖进程崩溃场景)
|
|
71
|
+
- 因此 **launch 与 connect 共享同一根因**:都死在 `Connection.create` 那个无超时的 `new ws()`
|
|
72
|
+
|
|
73
|
+
### 2.2 🟠 P1:`withTimeout` 超时后底层 promise 不取消(资源泄漏 + 误导性日志)
|
|
74
|
+
|
|
75
|
+
**位置**:`src/runtime/timeout/timeout.ts:20-44`
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const result = await Promise.race([promise, timeoutPromise])
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`Promise.race` 在超时时只是让外层 race 出结果,**底层 SDK 调用仍在继续运行**。后果:
|
|
82
|
+
1. SDK `Connection` 内部用自增 `id` 累积 pending callback(`Connection.js:30,46`),超时后这些 callback 永不清理 → 内存泄漏
|
|
83
|
+
2. 截图重试时,上一次「超时」的截图请求其实还在跑,与重试请求并发,**加重 DevTools 负载**,让超时更易复现
|
|
84
|
+
3. `setTimeout` 定时器未 `unref()`,进程退出时可能被 timer 拖住
|
|
85
|
+
|
|
86
|
+
### 2.3 🟡 P2:connect 的 wsEndpoint 默认值缺陷
|
|
87
|
+
|
|
88
|
+
**位置**:`src/capabilities/automator/handlers/connect.ts:47-49`
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const miniProgram = await automator.connect({
|
|
92
|
+
wsEndpoint: port ? `ws://localhost:${port}` : undefined, // ← undefined
|
|
93
|
+
} as any)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`IConnectOptions.wsEndpoint` 是**必填 string**。传 `undefined` 时 SDK 走 `new ws(undefined)`,行为未定义(多数情况立刻抛错或挂起),错误信息也不友好。应在 handler 层兜底默认端口 9420。
|
|
97
|
+
|
|
98
|
+
### 2.4 🟡 P2:launch 未利用 connectTimeout 配置 + 缺少 connectTimeout 配置项
|
|
99
|
+
|
|
100
|
+
`SessionConfig` 有 `launchTimeout`/`screenshotTimeout`,但 **没有 `connectTimeout`**,且 launch handler 没有读取 `launchTimeout` 来做外层 race 兜底。
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 3. 修复方案
|
|
105
|
+
|
|
106
|
+
### 3.1 P0:给 connect / launch 加超时 + 重试保护
|
|
107
|
+
|
|
108
|
+
**connect.ts**:
|
|
109
|
+
- `wsEndpoint` 不传 port 时兜底为 `ws://127.0.0.1:9420`(与 SDK 默认端口一致,用 127.0.0.1 避免 localhost 解析到 IPv6 ::1 导致连不上)
|
|
110
|
+
- 用 `withTimeout` 包裹,默认 `connectTimeout = 30s`
|
|
111
|
+
- 用 `withRetry` 包裹,`maxRetries: 1`,`shouldRetry: onConnectionError`
|
|
112
|
+
|
|
113
|
+
**launch.ts**:
|
|
114
|
+
- 用 `withTimeout` 包裹,默认 `launchTimeout = 60s`(SDK 内部轮询 + sleep(5s) 较慢,给足余量)
|
|
115
|
+
- 不再依赖 SDK 失效的 `timeout` 参数,改由外层 race 兜底
|
|
116
|
+
- 超时时给出明确指引:"请检查 DevTools 是否已打开、自动化端口是否开启"
|
|
117
|
+
|
|
118
|
+
### 3.2 P1:修复 withTimeout(unref + 可选 onTimeout 清理)
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
export async function withTimeout<T>(
|
|
122
|
+
promise: Promise<T>,
|
|
123
|
+
timeoutMs: number,
|
|
124
|
+
operation: string
|
|
125
|
+
): Promise<T> {
|
|
126
|
+
let timeoutId: NodeJS.Timeout
|
|
127
|
+
const timeoutPromise = new Promise<T>((_, reject) => {
|
|
128
|
+
timeoutId = setTimeout(() => {
|
|
129
|
+
reject(new Error(`${operation} timed out after ${timeoutMs}ms`))
|
|
130
|
+
}, timeoutMs)
|
|
131
|
+
// 避免 timer 阻止进程退出
|
|
132
|
+
if (typeof timeoutId.unref === 'function') timeoutId.unref()
|
|
133
|
+
})
|
|
134
|
+
try {
|
|
135
|
+
return await Promise.race([promise, timeoutPromise])
|
|
136
|
+
} finally {
|
|
137
|
+
clearTimeout(timeoutId!)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
> 注:底层 SDK promise 无法真正 abort(SDK 未暴露 cancel),但 `unref` + `finally clearTimeout` 已能消除 timer 泄漏。SDK pending callback 泄漏需 SDK 层支持,列为已知限制。
|
|
143
|
+
|
|
144
|
+
### 3.3 P2:新增 connectTimeout 配置项
|
|
145
|
+
|
|
146
|
+
- `types.ts` `SessionConfig` 增加 `connectTimeout?: number`
|
|
147
|
+
- `config/defaults.ts` 增加默认值 30000
|
|
148
|
+
- `config/loader.ts` 支持 `MCP_CONNECT_TIMEOUT` 环境变量
|
|
149
|
+
- `timeout.ts` `DEFAULT_TIMEOUTS.connect` 已存在(30000),复用
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 4. 任务 1(适配 CLI)结论详述
|
|
154
|
+
|
|
155
|
+
`miniprogram-automator@0.12.1` 已是该包目前可用最新版本,对接的是微信开发者工具 CLI(`/Applications/wechatwebdevtools.app/Contents/MacOS/cli`),CLI 接口长期稳定,**不需要为「适配新版 CLI」做大改**。需要做的「代码更新」仅限:
|
|
156
|
+
|
|
157
|
+
1. launch 应显式传 `timeout`(= launchTimeout),SDK 确实会用它做轮询总超时;但因 SDK ws 挂起缺陷,仍需外层 race 兜底
|
|
158
|
+
2. connect `wsEndpoint` 兜底默认端口(见 3.3),并改用 `127.0.0.1` 与 SDK launch 内部一致(避免 localhost → IPv6 ::1)
|
|
159
|
+
3. 在 handler 层补齐超时/重试(见 3.1),这才是 CLI 交互不稳定时的真正防护
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 5. 验证计划
|
|
164
|
+
|
|
165
|
+
- 单元测试:connect/launch handler 在底层 promise 永不 resolve 时,能在 `connectTimeout/launchTimeout` 内抛出明确错误(用 fake miniProgram + 永挂 promise)
|
|
166
|
+
- 单元测试:`withTimeout` 超时后 timer 被清理(无 open handle)
|
|
167
|
+
- 回归:`pnpm test:unit` 全绿、`pnpm typecheck` 通过
|
|
168
|
+
- 集成(需真机 DevTools):故意不开自动化端口,确认 connect 在 30s 内失败而非永久挂起
|