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/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { C as getDefaultCliPath, S as SupportedPlatformsMap, T as operatingSystemName, _ as readCustomConfig, a as assertWechatDevtoolsPort, b as defaultCustomConfigFilePath, d as resolveDevtoolsAutomationDefaults, f as createAutoBootstrapDevtoolsConfig, g as overwriteCustomConfig, h as createLocaleConfig, i as assertWechatDevtoolsHost, l as getConfig, m as createCustomConfig, p as createAutoTrustProjectConfig, r as resolveWechatDevtoolsTarget, u as getConfiguredLocale, v as removeCustomConfigKey, w as isOperatingSystemSupported, x as resolvePath, y as defaultCustomConfigDirPath } from "./sessionStore-zdzy2UFM.js";
2
- import { d as MANAGED_PROJECT_MAX_WINDOWS_ENV, h as startWechatIdeAgent, i as recoverManagedWechatProjectsAfterInstallationExit, n as cleanupManagedWechatProjects, o as readManagedWechatProjectRecords, r as closeManagedWechatProject, t as beginManagedWechatProject, u as MANAGED_PROJECT_JOURNAL_ENV } from "./devtoolsProjectOwnership-yDD6h0dO.js";
3
- import { a as bootstrapWechatDevtoolsSettings, c as getAutomatorProtocolTimeoutMethod, d as isAutomatorProtocolTimeoutError, f as isAutomatorWsConnectError, g as resolveAutomatorSessionOptions, h as isRetryableAutomatorLaunchError, i as resolveProjectAutomatorPort, 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 } from "./automator-CRpB6_pA.js";
4
- import { $ as MINIDEV_NAMESPACE_COMMAND_NAMES, 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 handleConfigCommand, K as getRuntimeWechatDevtoolsServicePort, L as prepareAcceptanceProject, M as createAlias, N as createPathCompat, O as runWechatCliWithRetry, P as transformArgv, Q as MCP_COMMAND_NAME, R as runWechatIdeEngineBuild, S as quitWechatIde, T as setWechatIdeTicket, U as requestWechatDevtoolsHttp, V as openWechatIdeProjectByHttp, W as resetWechatIdeFileUtilsByHttp, X as promptForCliPath, Y as resolveCliPath, Z as CONFIG_COMMAND_NAME, _ as isWechatIdeLoggedIn, a as autoReplayWechatIde, at as isAutomatorCommand, b as openWechatIdeOtherProject, c as buildWechatIdeIpa, ct as printScreenshotHelp, d as clearWechatIdeCacheByAutomator, dt as parseAutomatorArgs, et as WEAPP_IDE_TOP_LEVEL_COMMAND_NAMES, f as closeWechatIdeProject, ft as readBooleanOption, g as getWechatIdeToolInfo, h as getWechatIdeTicket, i as autoPreviewWechatIde, it as getAutomatorCommandHelp, j as execute, k as runMinidev, l as buildWechatIdeNpm, lt as parseCompareArgs, m as getWechatIdeTestAccounts, mt as removeOption, n as parse, nt as isWeappIdeTopLevelCommand, o as autoWechatIde, ot as runAutomatorCommand, p as compileWechatIdeByAutomator, pt as readOptionValue, q as setRuntimeWechatDevtoolsServicePort, r as dispatchWechatCliCommand, rt as AUTOMATOR_COMMAND_NAMES, s as buildWechatIdeApk, st as parseScreenshotArgs, t as createCli, tt as WECHAT_CLI_COMMAND_NAMES, u as clearWechatIdeCache, ut as printCompareHelp, v as loginWechatIde, w as resetWechatIdeFileUtils, x as previewWechatIde, y as openWechatIde, z as runWechatIdeEngineBuildByHttp } from "./cli-ChMQqi5w.js";
5
- import { C as runWithSuspendedSharedInput, S as createSharedInputSession, _ as isWechatIdeLoginRequiredError, a as connectMiniProgram, b as promptWechatIdeLoginRetry, c as withMiniProgram, d as RETRY_CONFIRM_KEYS, f as RETRY_PROMPT_INITIAL_IGNORE_MS, g as formatWechatIdeLoginRequiredError, h as formatRetryHotkeyPrompt, l as runRetryableCommand, m as extractExecutionErrorText, n as acquireSharedMiniProgram, o as getSharedMiniProgramSessionCount, p as createWechatIdeLoginRequiredExitError, r as closeSharedMiniProgram, s as releaseSharedMiniProgram, u as RETRY_CANCEL_KEYS, v as isWechatIdeLoginRequiredExitError, w as waitForExclusiveKeypress, x as waitForRetryKeypress, y as promptRetryKeypress } from "./automator-session-gWEsSs_A.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-C1PF1B4P.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-Dl_1TH1x.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, 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 { a as assertWechatDevtoolsPort, t as persistAutomatorSession } from "./sessionStore-zdzy2UFM.js";
2
- import { h as startWechatIdeAgent, t as beginManagedWechatProject } from "./devtoolsProjectOwnership-yDD6h0dO.js";
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
- //#region src/cli/projectImport.ts
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
- //#endregion
69
- //#region src/cli/automator/managed.ts
70
- /** 受管启动持有完整窗口回执,失败清理不受启动 deadline 的短暂宽限限制。 */
68
+ // src/cli/automator/managed.ts
69
+ /** 受管启动持有完整窗口回执,快照始终由持久 journal 持有。 */
71
70
  async function launchManagedAutomator(options) {
72
- const { launcher, scope, target, projectPath, sourceProjectPath, port } = options;
73
- await scope.step(() => importManagedDevtoolsProject({
74
- cliPath: target.cliPath,
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
- intent = await beginManagedWechatProject({
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
- try {
159
- return rawDisconnect(...args);
160
- } finally {
161
- portLease.release();
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
- } finally {
170
- try {
171
- await ownedIntent.close();
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
- releasePortLeaseOnExit = false;
182
- disownPortLease();
241
+ disownResources();
242
+ allowCleanup();
183
243
  return connectedProgram;
184
244
  } catch (error) {
185
245
  const errors = [error];
186
- try {
187
- program?.disconnect();
188
- } catch (disconnectError) {
189
- errors.push(disconnectError);
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
- if (releasePortLeaseOnExit) {
204
- disownPortLease();
205
- await portLease.release().catch((releaseError) => errors.push(releaseError));
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 { c as withMiniProgram$1 } from "./automator-session-gWEsSs_A.js";
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
- //#region src/mcp/server.ts
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
- //#endregion
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
- //#endregion
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.2.0",
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": ">=22"
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.3.1",
68
- "@weapp-core/logger": "3.1.9",
69
- "@weapp-core/shared": "3.2.8",
70
- "@weapp-vite/devtools-runtime": "0.5.0",
71
- "@weapp-vite/miniprogram-automator": "1.3.0",
72
- "cac": "^7.0.1",
73
- "execa": "10.1.0",
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": "^7.2.0",
75
+ "pixelmatch": "^8.0.0",
76
76
  "pngjs": "^7.0.0",
77
- "zod": "^4.6.5"
77
+ "zod": "^4.6.7"
78
78
  },
79
79
  "devDependencies": {
80
- "@types/node": "^26.6.4"
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";