weapp-ide-cli 6.2.0 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -3
- package/dist/automator-BqhUtMJp.js +1 -0
- package/dist/{automator-CRpB6_pA.js → automator-Esp3BjoT.js} +391 -152
- package/dist/automator-session-Ba27VW0_.js +184 -0
- package/dist/{sessionStore-zdzy2UFM.js → automatorProject-DPU-pEF0.js} +497 -240
- package/dist/{cli-ChMQqi5w.js → cli-Dd1RJ5PH.js} +396 -115
- package/dist/cli.js +3 -4
- package/dist/{commands-C1PF1B4P.js → commands-5entj0Rh.js} +5 -6
- package/dist/commands-DR-8MVFm.js +1 -0
- package/dist/{devtoolsProjectOwnership-yDD6h0dO.js → devtoolsProjectOwnership-C4jj8msU.js} +478 -155
- package/dist/index.d.ts +111 -137
- package/dist/index.js +8 -8
- package/dist/{managed-Sq8y8FzP.js → managed-hSCZXTon.js} +109 -59
- package/dist/{run-mcp-Dl_1TH1x.js → run-mcp-CbmskSgr.js} +14 -7
- package/dist/run-mcp-D1w7-oPp.js +1 -0
- package/package.json +12 -12
- package/dist/automator-BkZZsGtn.js +0 -1
- package/dist/automator-session-gWEsSs_A.js +0 -558
- package/dist/commands-CZVPfkE9.js +0 -1
- package/dist/run-mcp-CPv8cesh.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { C as
|
|
2
|
-
import {
|
|
3
|
-
import { a as bootstrapWechatDevtoolsSettings, c as getAutomatorProtocolTimeoutMethod, d as isAutomatorProtocolTimeoutError, f as isAutomatorWsConnectError, g as
|
|
4
|
-
import { $ as
|
|
5
|
-
import {
|
|
6
|
-
import { a as navigateBack, c as pageStack, d as remote, f as scrollTo, g as tap, h as takeScreenshot, i as input, l as reLaunch, m as systemInfo, n as captureScreenshotBuffer, o as navigateTo, p as switchTab, r as currentPage, s as pageData, t as audit, u as redirectTo } from "./commands-
|
|
7
|
-
import { a as readElementSnapshot, i as registerWeappIdeMcpTools, n as startWeappIdeMcpServer, o as resolveProjectPath, r as createWeappIdeMcpServer, s as toSerializableValue, t as runMcpCommand } from "./run-mcp-
|
|
8
|
-
export { AUTOMATOR_COMMAND_NAMES, CONFIG_COMMAND_NAME, MANAGED_PROJECT_JOURNAL_ENV, MANAGED_PROJECT_MAX_WINDOWS_ENV, MCP_COMMAND_NAME, MINIDEV_NAMESPACE_COMMAND_NAMES, RETRY_CANCEL_KEYS, RETRY_CONFIRM_KEYS, RETRY_PROMPT_INITIAL_IGNORE_MS, SupportedPlatformsMap, WEAPP_IDE_TOP_LEVEL_COMMAND_NAMES, WECHAT_CLI_COMMAND_NAMES, WECHAT_DEVTOOLS_ENGINE_BUILD_STATUSES, acquireSharedMiniProgram, assertWechatDevtoolsHost, assertWechatDevtoolsPort, audit, autoPreviewWechatIde, autoReplayWechatIde, autoWechatIde, beginManagedWechatProject, bootstrapWechatDevtoolsSettings, buildWechatIdeApk, buildWechatIdeIpa, buildWechatIdeNpm, captureScreenshotBuffer, cleanupManagedWechatProjects, clearWechatIdeCache, clearWechatIdeCacheByAutomator, closeManagedWechatProject, closeSharedMiniProgram, closeWechatIdeProject, compileWechatIdeByAutomator, connectMiniProgram, connectOpenedAutomator, createAlias, createAutoBootstrapDevtoolsConfig, createAutoTrustProjectConfig, createCli, createCustomConfig, createLocaleConfig, createPathCompat, createSharedInputSession, createWeappIdeMcpServer, createWechatIdeLoginRequiredExitError, currentPage, defaultCustomConfigDirPath, defaultCustomConfigFilePath, detectWechatDevtoolsServicePort, dispatchWechatCliCommand, execute, extractExecutionErrorText, formatAutomatorLoginError, formatRetryHotkeyPrompt, formatWechatIdeLoginRequiredError, getAutomatorCommandHelp, getAutomatorProtocolTimeoutMethod, getConfig, getConfiguredLocale, getDefaultCliPath, getRuntimeWechatDevtoolsServicePort, getSharedMiniProgramSessionCount, getWechatIdeTestAccounts, getWechatIdeTicket, getWechatIdeToolInfo, handleConfigCommand, input, isAutomatorCommand, isAutomatorLoginError, isAutomatorPortInUseError, isAutomatorProtocolTimeoutError, isAutomatorWsConnectError, isDevtoolsExtensionContextInvalidatedError, isDevtoolsHttpPortError, isOperatingSystemSupported, isRetryableAutomatorLaunchError, isWeappIdeTopLevelCommand, isWechatIdeEngineBuildEndpointMissingError, isWechatIdeLoggedIn, isWechatIdeLoginRequiredError, isWechatIdeLoginRequiredExitError, launchAutomator, loginWechatIde, navigateBack, navigateTo, openWechatIde, openWechatIdeOtherProject, openWechatIdeProjectByHttp, operatingSystemName, overwriteCustomConfig, pageData, pageStack, parse, parseAutomatorArgs, parseCompareArgs, parseScreenshotArgs, persistOpenedAutomatorSession, pollWechatIdeEngineBuildResultByHttp, prepareAcceptanceProject, previewWechatIde, printCompareHelp, printScreenshotHelp, promptForCliPath, promptRetryKeypress, promptWechatIdeLoginRetry, queryWechatIdeLogin, quitWechatIde, reLaunch, readBooleanOption, readCustomConfig, readElementSnapshot, readManagedWechatProjectRecords, readOptionValue, recoverManagedWechatProjectsAfterInstallationExit, redirectTo, refreshWechatIdeTicket, registerWeappIdeMcpTools, releaseSharedMiniProgram, remote, removeCustomConfigKey, removeOption, requestWechatDevtoolsHttp, resetWechatIdeFileUtils, resetWechatIdeFileUtilsByHttp, resolveAutomatorSessionOptions, resolveCliPath, resolveDevtoolsAutomationDefaults, resolvePath, resolveProjectAutomatorPort, resolveProjectPath, resolveWechatDevtoolsTarget, runAutomatorCommand, runMcpCommand, runMinidev, runRetryableCommand, runWechatCliWithRetry, runWechatIdeEngineBuild, runWechatIdeEngineBuildByHttp, runWithSuspendedSharedInput, scrollTo, setRuntimeWechatDevtoolsServicePort, setWechatIdeTicket, startForwardConsole, startWeappIdeMcpServer, startWechatIdeAgent, startWechatIdeEngineBuildByHttp, switchTab, systemInfo, takeScreenshot, tap, toSerializableValue, transformArgv, uploadWechatIde, validateWechatCliCommandArgs, waitForExclusiveKeypress, waitForRetryKeypress, withMiniProgram };
|
|
1
|
+
import { A as operatingSystemName, B as removeCustomConfigKey, C as registerWechatDevtoolsInstallation, D as SupportedPlatformsMap, F as createAutoTrustProjectConfig, H as defaultCustomConfigFilePath, I as createCustomConfig, L as createLocaleConfig, O as getDefaultCliPath, P as createAutoBootstrapDevtoolsConfig, R as overwriteCustomConfig, U as resolvePath, V as defaultCustomConfigDirPath, _ as WECHAT_DEVTOOLS_OFFICIAL_CHANNELS_URL, b as compareWechatDevtoolsVersions, c as getActiveWechatDevtoolsTarget, d as validateWechatDevtoolsSelection, f as withWechatDevtoolsSelection, k as isOperatingSystemSupported, l as readWechatDevtoolsSelectionEnvironment, m as assertWechatDevtoolsPort, o as MANAGED_PROJECT_JOURNAL_ENV, p as assertWechatDevtoolsHost, s as MANAGED_PROJECT_MAX_WINDOWS_ENV, u as resolveWechatDevtoolsTarget, v as assertOfficialWechatDevtoolsVersion, w as unregisterWechatDevtoolsInstallation, x as listWechatDevtoolsInstallations, y as readOfficialWechatDevtoolsVersion, z as readCustomConfig } from "./automatorProject-DPU-pEF0.js";
|
|
2
|
+
import { a as isManagedWechatProjectFullyReleased, i as recoverManagedWechatProjectsAfterInstallationExit, m as startWechatIdeAgent, n as cleanupManagedWechatProjects, r as closeManagedWechatProject, s as readManagedWechatProjectRecords, t as beginManagedWechatProject } from "./devtoolsProjectOwnership-C4jj8msU.js";
|
|
3
|
+
import { A as waitForExclusiveKeypress, C as isWechatIdeLoginRequiredError, D as waitForRetryKeypress, E as promptWechatIdeLoginRetry, O as createSharedInputSession, P as resolveAutomatorSessionOptions, S as formatWechatIdeLoginRequiredError, T as promptRetryKeypress, _ as RETRY_CONFIRM_KEYS, a as bootstrapWechatDevtoolsSettings, b as extractExecutionErrorText, c as getAutomatorProtocolTimeoutMethod, d as isAutomatorProtocolTimeoutError, f as isAutomatorWsConnectError, g as RETRY_CANCEL_KEYS, h as isRetryableAutomatorLaunchError, i as resolveProjectAutomatorPort, k as runWithSuspendedSharedInput, l as isAutomatorLoginError, m as isDevtoolsHttpPortError, n as launchAutomator, o as detectWechatDevtoolsServicePort, p as isDevtoolsExtensionContextInvalidatedError, r as persistOpenedAutomatorSession, s as formatAutomatorLoginError, t as connectOpenedAutomator, u as isAutomatorPortInUseError, v as RETRY_PROMPT_INITIAL_IGNORE_MS, w as isWechatIdeLoginRequiredExitError, x as formatRetryHotkeyPrompt, y as createWechatIdeLoginRequiredExitError } from "./automator-Esp3BjoT.js";
|
|
4
|
+
import { $ as getConfig, A as queryWechatIdeLogin, B as WECHAT_DEVTOOLS_ENGINE_BUILD_STATUSES, C as refreshWechatIdeTicket, D as validateWechatCliCommandArgs, E as uploadWechatIde, F as startForwardConsole, G as startWechatIdeEngineBuildByHttp, H as pollWechatIdeEngineBuildResultByHttp, I as isWechatIdeEngineBuildEndpointMissingError, J as splitWechatDevtoolsSelectionArgs, K as getRuntimeWechatDevtoolsServicePort, L as prepareAcceptanceProject, M as createAlias, N as createPathCompat, O as runWechatCliWithRetry, P as transformArgv, Q as promptForCliPath, R as runWechatIdeEngineBuild, S as quitWechatIde, T as setWechatIdeTicket, U as requestWechatDevtoolsHttp, V as openWechatIdeProjectByHttp, W as resetWechatIdeFileUtilsByHttp, X as handleConfigCommand, Y as withWechatDevtoolsSelectionArgs, Z as resolveCliPath, _ as isWechatIdeLoggedIn, _t as readBooleanOption, a as autoReplayWechatIde, at as WEAPP_IDE_TOP_LEVEL_COMMAND_NAMES, b as openWechatIdeOtherProject, c as buildWechatIdeIpa, ct as AUTOMATOR_COMMAND_NAMES, d as clearWechatIdeCacheByAutomator, dt as runAutomatorCommand, et as getConfiguredLocale, f as closeWechatIdeProject, ft as parseScreenshotArgs, g as getWechatIdeToolInfo, gt as parseAutomatorArgs, h as getWechatIdeTicket, ht as printCompareHelp, i as autoPreviewWechatIde, it as MINIDEV_NAMESPACE_COMMAND_NAMES, j as execute, k as runMinidev, l as buildWechatIdeNpm, lt as getAutomatorCommandHelp, m as getWechatIdeTestAccounts, mt as parseCompareArgs, n as parse, nt as CONFIG_COMMAND_NAME, o as autoWechatIde, ot as WECHAT_CLI_COMMAND_NAMES, p as compileWechatIdeByAutomator, pt as printScreenshotHelp, q as setRuntimeWechatDevtoolsServicePort, r as dispatchWechatCliCommand, rt as MCP_COMMAND_NAME, s as buildWechatIdeApk, st as isWeappIdeTopLevelCommand, t as createCli, tt as resolveDevtoolsAutomationDefaults, u as clearWechatIdeCache, ut as isAutomatorCommand, v as loginWechatIde, vt as readOptionValue, w as resetWechatIdeFileUtils, x as previewWechatIde, y as openWechatIde, yt as removeOption, z as runWechatIdeEngineBuildByHttp } from "./cli-Dd1RJ5PH.js";
|
|
5
|
+
import { c as releaseSharedMiniProgram, i as closeSharedMiniProgram, l as withMiniProgram, n as acquireSharedMiniProgram, o as connectMiniProgram, s as getSharedMiniProgramSessionCount, u as runRetryableCommand } from "./automator-session-Ba27VW0_.js";
|
|
6
|
+
import { a as navigateBack, c as pageStack, d as remote, f as scrollTo, g as tap, h as takeScreenshot, i as input, l as reLaunch, m as systemInfo, n as captureScreenshotBuffer, o as navigateTo, p as switchTab, r as currentPage, s as pageData, t as audit, u as redirectTo } from "./commands-5entj0Rh.js";
|
|
7
|
+
import { a as readElementSnapshot, i as registerWeappIdeMcpTools, n as startWeappIdeMcpServer, o as resolveProjectPath, r as createWeappIdeMcpServer, s as toSerializableValue, t as runMcpCommand } from "./run-mcp-CbmskSgr.js";
|
|
8
|
+
export { AUTOMATOR_COMMAND_NAMES, CONFIG_COMMAND_NAME, MANAGED_PROJECT_JOURNAL_ENV, MANAGED_PROJECT_MAX_WINDOWS_ENV, MCP_COMMAND_NAME, MINIDEV_NAMESPACE_COMMAND_NAMES, RETRY_CANCEL_KEYS, RETRY_CONFIRM_KEYS, RETRY_PROMPT_INITIAL_IGNORE_MS, SupportedPlatformsMap, WEAPP_IDE_TOP_LEVEL_COMMAND_NAMES, WECHAT_CLI_COMMAND_NAMES, WECHAT_DEVTOOLS_ENGINE_BUILD_STATUSES, WECHAT_DEVTOOLS_OFFICIAL_CHANNELS_URL, acquireSharedMiniProgram, assertOfficialWechatDevtoolsVersion, assertWechatDevtoolsHost, assertWechatDevtoolsPort, audit, autoPreviewWechatIde, autoReplayWechatIde, autoWechatIde, beginManagedWechatProject, bootstrapWechatDevtoolsSettings, buildWechatIdeApk, buildWechatIdeIpa, buildWechatIdeNpm, captureScreenshotBuffer, cleanupManagedWechatProjects, clearWechatIdeCache, clearWechatIdeCacheByAutomator, closeManagedWechatProject, closeSharedMiniProgram, closeWechatIdeProject, compareWechatDevtoolsVersions, compileWechatIdeByAutomator, connectMiniProgram, connectOpenedAutomator, createAlias, createAutoBootstrapDevtoolsConfig, createAutoTrustProjectConfig, createCli, createCustomConfig, createLocaleConfig, createPathCompat, createSharedInputSession, createWeappIdeMcpServer, createWechatIdeLoginRequiredExitError, currentPage, defaultCustomConfigDirPath, defaultCustomConfigFilePath, detectWechatDevtoolsServicePort, dispatchWechatCliCommand, execute, extractExecutionErrorText, formatAutomatorLoginError, formatRetryHotkeyPrompt, formatWechatIdeLoginRequiredError, getActiveWechatDevtoolsTarget, getAutomatorCommandHelp, getAutomatorProtocolTimeoutMethod, getConfig, getConfiguredLocale, getDefaultCliPath, getRuntimeWechatDevtoolsServicePort, getSharedMiniProgramSessionCount, getWechatIdeTestAccounts, getWechatIdeTicket, getWechatIdeToolInfo, handleConfigCommand, input, isAutomatorCommand, isAutomatorLoginError, isAutomatorPortInUseError, isAutomatorProtocolTimeoutError, isAutomatorWsConnectError, isDevtoolsExtensionContextInvalidatedError, isDevtoolsHttpPortError, isManagedWechatProjectFullyReleased, isOperatingSystemSupported, isRetryableAutomatorLaunchError, isWeappIdeTopLevelCommand, isWechatIdeEngineBuildEndpointMissingError, isWechatIdeLoggedIn, isWechatIdeLoginRequiredError, isWechatIdeLoginRequiredExitError, launchAutomator, listWechatDevtoolsInstallations, loginWechatIde, navigateBack, navigateTo, openWechatIde, openWechatIdeOtherProject, openWechatIdeProjectByHttp, operatingSystemName, overwriteCustomConfig, pageData, pageStack, parse, parseAutomatorArgs, parseCompareArgs, parseScreenshotArgs, persistOpenedAutomatorSession, pollWechatIdeEngineBuildResultByHttp, prepareAcceptanceProject, previewWechatIde, printCompareHelp, printScreenshotHelp, promptForCliPath, promptRetryKeypress, promptWechatIdeLoginRetry, queryWechatIdeLogin, quitWechatIde, reLaunch, readBooleanOption, readCustomConfig, readElementSnapshot, readManagedWechatProjectRecords, readOfficialWechatDevtoolsVersion, readOptionValue, readWechatDevtoolsSelectionEnvironment, recoverManagedWechatProjectsAfterInstallationExit, redirectTo, refreshWechatIdeTicket, registerWeappIdeMcpTools, registerWechatDevtoolsInstallation, releaseSharedMiniProgram, remote, removeCustomConfigKey, removeOption, requestWechatDevtoolsHttp, resetWechatIdeFileUtils, resetWechatIdeFileUtilsByHttp, resolveAutomatorSessionOptions, resolveCliPath, resolveDevtoolsAutomationDefaults, resolvePath, resolveProjectAutomatorPort, resolveProjectPath, resolveWechatDevtoolsTarget, runAutomatorCommand, runMcpCommand, runMinidev, runRetryableCommand, runWechatCliWithRetry, runWechatIdeEngineBuild, runWechatIdeEngineBuildByHttp, runWithSuspendedSharedInput, scrollTo, setRuntimeWechatDevtoolsServicePort, setWechatIdeTicket, splitWechatDevtoolsSelectionArgs, startForwardConsole, startWeappIdeMcpServer, startWechatIdeAgent, startWechatIdeEngineBuildByHttp, switchTab, systemInfo, takeScreenshot, tap, toSerializableValue, transformArgv, unregisterWechatDevtoolsInstallation, uploadWechatIde, validateWechatCliCommandArgs, validateWechatDevtoolsSelection, waitForExclusiveKeypress, waitForRetryKeypress, withMiniProgram, withWechatDevtoolsSelection, withWechatDevtoolsSelectionArgs };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { i as persistAutomatorSession, m as assertWechatDevtoolsPort, n as readAutomatorProjectPlan, t as populateAutomatorProjectSnapshot } from "./automatorProject-DPU-pEF0.js";
|
|
2
|
+
import { m as startWechatIdeAgent, t as beginManagedWechatProject } from "./devtoolsProjectOwnership-C4jj8msU.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { withMachineE2ELease } from "@weapp-vite/devtools-runtime";
|
|
5
5
|
import { execa } from "execa";
|
|
6
6
|
import fs from "node:fs/promises";
|
|
7
7
|
import process from "node:process";
|
|
8
8
|
import { acquireAutomatorPortLease } from "@weapp-vite/miniprogram-automator";
|
|
9
|
-
|
|
9
|
+
// src/cli/projectImport.ts
|
|
10
10
|
function isRecord(value) {
|
|
11
11
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12
12
|
}
|
|
@@ -65,32 +65,78 @@ async function importManagedDevtoolsProject(options) {
|
|
|
65
65
|
options.signal.throwIfAborted();
|
|
66
66
|
})));
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/** 受管启动持有完整窗口回执,失败清理不受启动 deadline 的短暂宽限限制。 */
|
|
68
|
+
// src/cli/automator/managed.ts
|
|
69
|
+
/** 受管启动持有完整窗口回执,快照始终由持久 journal 持有。 */
|
|
71
70
|
async function launchManagedAutomator(options) {
|
|
72
|
-
const { launcher, scope, target,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
projectPath,
|
|
76
|
-
trusted: options.trustProject,
|
|
77
|
-
timeout: scope.remainingMs(),
|
|
78
|
-
signal: scope.signal
|
|
79
|
-
}), { stage: "project-import" });
|
|
80
|
-
scope.throwIfAborted();
|
|
81
|
-
const portLease = await scope.step(() => acquireAutomatorPortLease(port), {
|
|
82
|
-
stage: "port-lease",
|
|
83
|
-
disposeLate: (lease) => lease.release()
|
|
84
|
-
});
|
|
85
|
-
const rawReleasePortLease = portLease.release.bind(portLease);
|
|
86
|
-
let releasedPortLease;
|
|
87
|
-
portLease.release = () => releasedPortLease ??= rawReleasePortLease();
|
|
88
|
-
const disownPortLease = scope.own(() => portLease.release(), "automator-port-lease");
|
|
89
|
-
let releasePortLeaseOnExit = true;
|
|
71
|
+
const { launcher, scope, target, sourceProjectPath, port } = options;
|
|
72
|
+
let projectPath = options.projectPath;
|
|
73
|
+
let portLease;
|
|
90
74
|
let intent;
|
|
91
75
|
let program;
|
|
76
|
+
let allowCleanup;
|
|
77
|
+
const acquisitionSettled = new Promise((resolve) => {
|
|
78
|
+
allowCleanup = resolve;
|
|
79
|
+
});
|
|
80
|
+
let cleaning;
|
|
81
|
+
const cleanupLaunch = () => cleaning ??= (async () => {
|
|
82
|
+
await acquisitionSettled;
|
|
83
|
+
const errors = [];
|
|
84
|
+
let disconnected = !program;
|
|
85
|
+
try {
|
|
86
|
+
await program?.disconnect();
|
|
87
|
+
disconnected = true;
|
|
88
|
+
} catch (error) {
|
|
89
|
+
errors.push(error);
|
|
90
|
+
}
|
|
91
|
+
let projectClosed = !intent;
|
|
92
|
+
try {
|
|
93
|
+
await intent?.close();
|
|
94
|
+
projectClosed = true;
|
|
95
|
+
} catch (error) {
|
|
96
|
+
errors.push(error);
|
|
97
|
+
}
|
|
98
|
+
if (disconnected && projectClosed) await portLease?.release().catch((error) => errors.push(error));
|
|
99
|
+
if (errors.length) throw new AggregateError(errors, "Managed DevTools session cleanup failed");
|
|
100
|
+
})().catch((error) => {
|
|
101
|
+
cleaning = void 0;
|
|
102
|
+
throw error;
|
|
103
|
+
});
|
|
104
|
+
let disownResources = () => {};
|
|
92
105
|
try {
|
|
93
|
-
|
|
106
|
+
disownResources = scope.own(cleanupLaunch, "managed-automator-session");
|
|
107
|
+
const snapshotPlan = options.preserveProjectRoot ? void 0 : await readAutomatorProjectPlan(projectPath);
|
|
108
|
+
scope.throwIfAborted();
|
|
109
|
+
if (snapshotPlan) {
|
|
110
|
+
intent = await beginManagedWechatProject({
|
|
111
|
+
target,
|
|
112
|
+
projectPath,
|
|
113
|
+
port,
|
|
114
|
+
snapshotProject: true
|
|
115
|
+
});
|
|
116
|
+
if (!intent) throw new Error("DEVTOOLS_MANAGED_PROJECT_JOURNAL_REQUIRED: managed launch requires a project ownership journal.");
|
|
117
|
+
projectPath = intent.projectPath;
|
|
118
|
+
await intent.prepareSnapshot(async (destination) => await populateAutomatorProjectSnapshot(snapshotPlan, destination));
|
|
119
|
+
scope.throwIfAborted();
|
|
120
|
+
}
|
|
121
|
+
await scope.step(() => importManagedDevtoolsProject({
|
|
122
|
+
cliPath: target.cliPath,
|
|
123
|
+
projectPath,
|
|
124
|
+
trusted: options.trustProject,
|
|
125
|
+
timeout: scope.remainingMs(),
|
|
126
|
+
signal: scope.signal
|
|
127
|
+
}), { stage: "project-import" });
|
|
128
|
+
scope.throwIfAborted();
|
|
129
|
+
portLease = await scope.step(() => acquireAutomatorPortLease(port), {
|
|
130
|
+
stage: "port-lease",
|
|
131
|
+
disposeLate: (lease) => lease.release()
|
|
132
|
+
});
|
|
133
|
+
const rawReleasePortLease = portLease.release.bind(portLease);
|
|
134
|
+
let releasedPortLease;
|
|
135
|
+
portLease.release = () => releasedPortLease ??= rawReleasePortLease().catch((error) => {
|
|
136
|
+
releasedPortLease = void 0;
|
|
137
|
+
throw error;
|
|
138
|
+
});
|
|
139
|
+
intent ??= await beginManagedWechatProject({
|
|
94
140
|
target,
|
|
95
141
|
projectPath,
|
|
96
142
|
port
|
|
@@ -104,6 +150,7 @@ async function launchManagedAutomator(options) {
|
|
|
104
150
|
trustProject: options.trustProject,
|
|
105
151
|
signal: scope.signal,
|
|
106
152
|
timeout: scope.remainingMs(),
|
|
153
|
+
...snapshotPlan ? { onBeforeDispatch: async () => await intent.markLaunchDispatched() } : {},
|
|
107
154
|
onStarted: async (result) => await intent.confirm({
|
|
108
155
|
openedProjectWindow: result.openedProjectWindow,
|
|
109
156
|
port: result.autoPort
|
|
@@ -153,60 +200,63 @@ async function launchManagedAutomator(options) {
|
|
|
153
200
|
}
|
|
154
201
|
const connectedProgram = program;
|
|
155
202
|
const ownedIntent = intent;
|
|
203
|
+
const ownedPortLease = portLease;
|
|
156
204
|
const rawDisconnect = connectedProgram.disconnect.bind(connectedProgram);
|
|
205
|
+
let disconnecting;
|
|
157
206
|
connectedProgram.disconnect = (...args) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
207
|
+
disconnecting ??= (async () => {
|
|
208
|
+
await rawDisconnect(...args);
|
|
209
|
+
await ownedPortLease.release();
|
|
210
|
+
})().catch((error) => {
|
|
211
|
+
disconnecting = void 0;
|
|
212
|
+
throw error;
|
|
213
|
+
});
|
|
214
|
+
return disconnecting;
|
|
163
215
|
};
|
|
164
216
|
let closing;
|
|
165
217
|
connectedProgram.close = async () => {
|
|
166
218
|
closing ??= (async () => {
|
|
219
|
+
const errors = [];
|
|
220
|
+
let disconnected = false;
|
|
167
221
|
try {
|
|
168
|
-
connectedProgram.disconnect();
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
} finally {
|
|
173
|
-
await portLease.release();
|
|
174
|
-
}
|
|
222
|
+
await connectedProgram.disconnect();
|
|
223
|
+
disconnected = true;
|
|
224
|
+
} catch (error) {
|
|
225
|
+
errors.push(error);
|
|
175
226
|
}
|
|
227
|
+
let projectClosed = false;
|
|
228
|
+
try {
|
|
229
|
+
await ownedIntent.close();
|
|
230
|
+
projectClosed = true;
|
|
231
|
+
} catch (error) {
|
|
232
|
+
errors.push(error);
|
|
233
|
+
}
|
|
234
|
+
if (disconnected && projectClosed) await ownedPortLease.release().catch((error) => errors.push(error));
|
|
235
|
+
if (errors.length) throw new AggregateError(errors, "Managed DevTools session cleanup failed");
|
|
176
236
|
})().finally(() => {
|
|
177
237
|
closing = void 0;
|
|
178
238
|
});
|
|
179
239
|
return await closing;
|
|
180
240
|
};
|
|
181
|
-
|
|
182
|
-
|
|
241
|
+
disownResources();
|
|
242
|
+
allowCleanup();
|
|
183
243
|
return connectedProgram;
|
|
184
244
|
} catch (error) {
|
|
185
245
|
const errors = [error];
|
|
186
|
-
try {
|
|
187
|
-
|
|
188
|
-
} catch (
|
|
189
|
-
errors.push(
|
|
190
|
-
}
|
|
191
|
-
if (intent) {
|
|
192
|
-
try {
|
|
193
|
-
await intent.fail(error);
|
|
194
|
-
} catch (recordError) {
|
|
195
|
-
errors.push(recordError);
|
|
196
|
-
}
|
|
197
|
-
try {
|
|
198
|
-
await intent.close();
|
|
199
|
-
} catch (closeError) {
|
|
200
|
-
errors.push(closeError);
|
|
201
|
-
}
|
|
246
|
+
if (intent) try {
|
|
247
|
+
await intent.fail(error);
|
|
248
|
+
} catch (recordError) {
|
|
249
|
+
errors.push(recordError);
|
|
202
250
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
await
|
|
251
|
+
allowCleanup();
|
|
252
|
+
try {
|
|
253
|
+
await cleanupLaunch();
|
|
254
|
+
disownResources();
|
|
255
|
+
} catch (cleanupError) {
|
|
256
|
+
errors.push(...cleanupError instanceof AggregateError ? cleanupError.errors : [cleanupError]);
|
|
206
257
|
}
|
|
207
258
|
if (errors.length > 1) throw new AggregateError(errors, "Managed DevTools launch failed and project cleanup did not complete.", { cause: error });
|
|
208
259
|
throw error;
|
|
209
260
|
}
|
|
210
261
|
}
|
|
211
|
-
//#endregion
|
|
212
262
|
export { launchManagedAutomator };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as withMiniProgram$1 } from "./automator-session-Ba27VW0_.js";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { readDevtoolsElementSnapshot as readElementSnapshot, resolveDevtoolsProjectPath as resolveProjectPath, toDevtoolsSerializableValue as toSerializableValue } from "@weapp-vite/devtools-runtime";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import process from "node:process";
|
|
6
6
|
import { Buffer } from "node:buffer";
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
|
|
8
|
+
// src/mcp/server.ts
|
|
9
9
|
function createResolvedProjectPath(workspaceRoot, projectPath) {
|
|
10
10
|
return path.isAbsolute(projectPath) ? path.normalize(projectPath) : path.resolve(workspaceRoot ?? process.cwd(), projectPath);
|
|
11
11
|
}
|
|
@@ -15,6 +15,9 @@ function createResolvedOutputPath(workspaceRoot, outputPath) {
|
|
|
15
15
|
async function withConnectedMiniProgram(runtimeHooks, workspaceRoot, input, runner) {
|
|
16
16
|
return await runtimeHooks.withMiniProgram({
|
|
17
17
|
cliPath: input.cliPath,
|
|
18
|
+
devtoolsChannel: input.devtoolsChannel,
|
|
19
|
+
devtoolsVersion: input.devtoolsVersion,
|
|
20
|
+
requireOfficialLatest: input.requireOfficialLatest,
|
|
18
21
|
preferOpenedSession: input.preferOpenedSession,
|
|
19
22
|
port: input.port,
|
|
20
23
|
projectPath: createResolvedProjectPath(workspaceRoot, input.projectPath),
|
|
@@ -31,6 +34,13 @@ async function withConnectedPage(runtimeHooks, workspaceRoot, input, runner) {
|
|
|
31
34
|
function defineConnectionSchema() {
|
|
32
35
|
return {
|
|
33
36
|
cliPath: z.string().trim().min(1).optional().describe("指定微信开发者工具 CLI 安装路径"),
|
|
37
|
+
devtoolsChannel: z.enum([
|
|
38
|
+
"stable",
|
|
39
|
+
"rc",
|
|
40
|
+
"nightly"
|
|
41
|
+
]).optional(),
|
|
42
|
+
devtoolsVersion: z.string().regex(/^\d+(?:\.\d+){2,}$/).optional(),
|
|
43
|
+
requireOfficialLatest: z.boolean().optional(),
|
|
34
44
|
projectPath: z.string().trim().min(1).describe("小程序项目路径,支持 workspaceRoot 相对路径"),
|
|
35
45
|
timeout: z.number().int().positive().optional(),
|
|
36
46
|
port: z.number().int().positive().max(65535).optional(),
|
|
@@ -378,8 +388,7 @@ async function createWeappIdeMcpServer(options) {
|
|
|
378
388
|
server
|
|
379
389
|
};
|
|
380
390
|
}
|
|
381
|
-
|
|
382
|
-
//#region src/mcp/runtime.ts
|
|
391
|
+
// src/mcp/runtime.ts
|
|
383
392
|
async function startWeappIdeMcpServer(options = {}) {
|
|
384
393
|
const { serveStdio } = await import("@modelcontextprotocol/server/stdio");
|
|
385
394
|
const serverOptions = {
|
|
@@ -397,8 +406,7 @@ async function startWeappIdeMcpServer(options = {}) {
|
|
|
397
406
|
await handle.close();
|
|
398
407
|
} };
|
|
399
408
|
}
|
|
400
|
-
|
|
401
|
-
//#region src/cli/run-mcp.ts
|
|
409
|
+
// src/cli/run-mcp.ts
|
|
402
410
|
function readOptionValue(argv, optionName) {
|
|
403
411
|
const optionWithEqual = `${optionName}=`;
|
|
404
412
|
for (let index = 0; index < argv.length; index += 1) {
|
|
@@ -445,5 +453,4 @@ async function runMcpCommand(argv) {
|
|
|
445
453
|
workspaceRoot: readOptionValue(argv, "--workspace-root")
|
|
446
454
|
});
|
|
447
455
|
}
|
|
448
|
-
//#endregion
|
|
449
456
|
export { readElementSnapshot as a, registerWeappIdeMcpTools as i, startWeappIdeMcpServer as n, resolveProjectPath as o, createWeappIdeMcpServer as r, toSerializableValue as s, runMcpCommand as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as runMcpCommand } from "./run-mcp-CbmskSgr.js";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "weapp-ide-cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.4.0",
|
|
5
5
|
"description": "Command-line tools for automating WeChat DevTools and mini-program projects.",
|
|
6
6
|
"author": "ice breaker <1324318532@qq.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -57,27 +57,27 @@
|
|
|
57
57
|
"dist"
|
|
58
58
|
],
|
|
59
59
|
"engines": {
|
|
60
|
-
"node": ">=
|
|
60
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
61
61
|
},
|
|
62
62
|
"publishConfig": {
|
|
63
63
|
"access": "public",
|
|
64
64
|
"registry": "https://registry.npmjs.org"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@modelcontextprotocol/server": "^2.
|
|
68
|
-
"@weapp-core/logger": "3.
|
|
69
|
-
"@weapp-core/shared": "3.
|
|
70
|
-
"@weapp-vite/devtools-runtime": "0.
|
|
71
|
-
"@weapp-vite/miniprogram-automator": "1.
|
|
72
|
-
"cac": "^7.0
|
|
73
|
-
"execa": "10.1
|
|
67
|
+
"@modelcontextprotocol/server": "^2.4.0",
|
|
68
|
+
"@weapp-core/logger": "3.2.0",
|
|
69
|
+
"@weapp-core/shared": "3.4.0",
|
|
70
|
+
"@weapp-vite/devtools-runtime": "0.7.0",
|
|
71
|
+
"@weapp-vite/miniprogram-automator": "1.5.0",
|
|
72
|
+
"cac": "^7.1.0",
|
|
73
|
+
"execa": "10.2.1",
|
|
74
74
|
"pathe": "^2.0.3",
|
|
75
|
-
"pixelmatch": "^
|
|
75
|
+
"pixelmatch": "^8.0.0",
|
|
76
76
|
"pngjs": "^7.0.0",
|
|
77
|
-
"zod": "^4.6.
|
|
77
|
+
"zod": "^4.6.7"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@types/node": "^26.6.
|
|
80
|
+
"@types/node": "^26.6.5"
|
|
81
81
|
},
|
|
82
82
|
"tsd": {
|
|
83
83
|
"compilerOptions": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { n as launchAutomator } from "./automator-CRpB6_pA.js";
|