weapp-ide-cli 6.2.0 → 6.3.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 +59 -3
- package/dist/{automator-CRpB6_pA.js → automator-BOe32upt.js} +388 -142
- package/dist/automator-VSjgHujY.js +1 -0
- package/dist/automator-session-VOB03glx.js +186 -0
- package/dist/{sessionStore-zdzy2UFM.js → automatorProject-DjYLqMj6.js} +495 -219
- package/dist/{cli-ChMQqi5w.js → cli-CFlqFpIw.js} +372 -61
- package/dist/cli.js +2 -2
- package/dist/commands-DmirGBy4.js +1 -0
- package/dist/{commands-C1PF1B4P.js → commands-mslf7-sP.js} +3 -2
- package/dist/{devtoolsProjectOwnership-yDD6h0dO.js → devtoolsProjectOwnership-BMfSAg4n.js} +394 -98
- package/dist/index.d.ts +123 -39
- package/dist/index.js +8 -8
- package/dist/{managed-Sq8y8FzP.js → managed-B04Xo9U_.js} +107 -55
- package/dist/run-mcp-83-VKZVA.js +1 -0
- package/dist/{run-mcp-Dl_1TH1x.js → run-mcp-Ni139Z5C.js} +11 -1
- package/package.json +9 -9
- 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.d.ts
CHANGED
|
@@ -16,6 +16,37 @@ interface WechatDevtoolsProfileOptions {
|
|
|
16
16
|
platform?: NodeJS.Platform;
|
|
17
17
|
}
|
|
18
18
|
//#endregion
|
|
19
|
+
//#region src/devtoolsTarget/types.d.ts
|
|
20
|
+
type WechatDevtoolsChannel = 'stable' | 'rc' | 'nightly';
|
|
21
|
+
interface ResolvedWechatDevtoolsTarget extends WechatDevtoolsMetadata {
|
|
22
|
+
cliPath: string;
|
|
23
|
+
installationId: string;
|
|
24
|
+
appPath: string;
|
|
25
|
+
profileDir: string;
|
|
26
|
+
}
|
|
27
|
+
interface WechatDevtoolsSelectionOptions {
|
|
28
|
+
cliPath?: string;
|
|
29
|
+
target?: ResolvedWechatDevtoolsTarget;
|
|
30
|
+
devtoolsChannel?: WechatDevtoolsChannel;
|
|
31
|
+
devtoolsVersion?: string;
|
|
32
|
+
requireOfficialLatest?: boolean;
|
|
33
|
+
}
|
|
34
|
+
interface ResolveWechatDevtoolsTargetOptions extends WechatDevtoolsProfileOptions, WechatDevtoolsSelectionOptions {
|
|
35
|
+
searchRoots?: string[];
|
|
36
|
+
registryPath?: string;
|
|
37
|
+
}
|
|
38
|
+
interface WechatDevtoolsInstallation {
|
|
39
|
+
cliPath: string;
|
|
40
|
+
target?: ResolvedWechatDevtoolsTarget;
|
|
41
|
+
error?: string;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/devtoolsTarget/discovery.d.ts
|
|
45
|
+
/** 产品版本按数字段比较,避免日期版本的字符串排序漂移。 */
|
|
46
|
+
export declare function compareWechatDevtoolsVersions(a: string, b: string): number;
|
|
47
|
+
/** 只扫描已知安装根,不递归遍历磁盘,也不执行候选应用。 */
|
|
48
|
+
export declare function listWechatDevtoolsInstallations(options?: ResolveWechatDevtoolsTargetOptions): Promise<WechatDevtoolsInstallation[]>;
|
|
49
|
+
//#endregion
|
|
19
50
|
//#region src/devtoolsTarget/host.d.ts
|
|
20
51
|
interface WechatDevtoolsHostInspectionOptions {
|
|
21
52
|
platform?: NodeJS.Platform;
|
|
@@ -27,19 +58,36 @@ export declare function assertWechatDevtoolsHost(target: ResolvedWechatDevtoolsT
|
|
|
27
58
|
/** HTTP 与 WebSocket 的显式端口均需由所选安装持有,端口号本身不是宿主身份。 */
|
|
28
59
|
export declare function assertWechatDevtoolsPort(target: ResolvedWechatDevtoolsTarget, port: number, options?: WechatDevtoolsHostInspectionOptions): Promise<void>;
|
|
29
60
|
//#endregion
|
|
61
|
+
//#region src/devtoolsTarget/official.d.ts
|
|
62
|
+
export declare const WECHAT_DEVTOOLS_OFFICIAL_CHANNELS_URL = "https://devtools.wxqcloud.qq.com.cn/WechatWebDev/nightly/versions/config.json";
|
|
63
|
+
/** 官方查询只提供版本证据,默认选择不依赖网络可用性。 */
|
|
64
|
+
export declare function readOfficialWechatDevtoolsVersion(channel?: WechatDevtoolsChannel): Promise<{
|
|
65
|
+
version: string;
|
|
66
|
+
source: string;
|
|
67
|
+
queriedAt: string;
|
|
68
|
+
}>;
|
|
69
|
+
/** 仅显式严格模式要求所选安装匹配官方渠道最新版本。 */
|
|
70
|
+
export declare function assertOfficialWechatDevtoolsVersion(target: ResolvedWechatDevtoolsTarget): Promise<{
|
|
71
|
+
version: string;
|
|
72
|
+
source: string;
|
|
73
|
+
queriedAt: string;
|
|
74
|
+
}>;
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region src/devtoolsTarget/registry.d.ts
|
|
77
|
+
/** 校验安装后登记真实 CLI 路径,不更改默认选择或登录数据。 */
|
|
78
|
+
export declare function registerWechatDevtoolsInstallation(cliPath: string, registryPath?: string): Promise<ResolvedWechatDevtoolsTarget>;
|
|
79
|
+
/** 允许移除已经失效的登记;不会删除应用或用户配置。 */
|
|
80
|
+
export declare function unregisterWechatDevtoolsInstallation(cliPath: string, registryPath?: string): Promise<void>;
|
|
81
|
+
//#endregion
|
|
30
82
|
//#region src/devtoolsTarget/index.d.ts
|
|
31
|
-
export
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
appPath: string;
|
|
35
|
-
profileDir: string;
|
|
36
|
-
}
|
|
37
|
-
export interface ResolveWechatDevtoolsTargetOptions extends WechatDevtoolsProfileOptions {
|
|
38
|
-
cliPath?: string;
|
|
39
|
-
target?: ResolvedWechatDevtoolsTarget;
|
|
40
|
-
}
|
|
41
|
-
/** 一次解析 CLI、应用身份及配置目录,供本次操作的所有阶段共同使用。 */
|
|
83
|
+
export declare function validateWechatDevtoolsSelection(options: WechatDevtoolsSelectionOptions): void;
|
|
84
|
+
export declare function readWechatDevtoolsSelectionEnvironment(env?: NodeJS.ProcessEnv): WechatDevtoolsSelectionOptions;
|
|
85
|
+
/** 每次操作只解析一次安装,显式选择覆盖继承的配置但不写回全局设置。 */
|
|
42
86
|
export declare function resolveWechatDevtoolsTarget(options?: ResolveWechatDevtoolsTargetOptions): Promise<ResolvedWechatDevtoolsTarget>;
|
|
87
|
+
/** 命令的所有异步阶段复用同一安装,彼此并发的调用不会污染环境变量。 */
|
|
88
|
+
export declare function withWechatDevtoolsSelection<T>(options: ResolveWechatDevtoolsTargetOptions, runner: (target: ResolvedWechatDevtoolsTarget) => Promise<T>): Promise<T>;
|
|
89
|
+
/** 读取当前操作固定的安装;没有活动选择时不触发发现或启动。 */
|
|
90
|
+
export declare function getActiveWechatDevtoolsTarget(): ResolvedWechatDevtoolsTarget | undefined;
|
|
43
91
|
//#endregion
|
|
44
92
|
//#region src/cli/agentStart.d.ts
|
|
45
93
|
export interface StartWechatIdeAgentOptions {
|
|
@@ -50,6 +98,8 @@ export interface StartWechatIdeAgentOptions {
|
|
|
50
98
|
trustProject?: boolean;
|
|
51
99
|
timeout?: number;
|
|
52
100
|
signal?: AbortSignal;
|
|
101
|
+
/** 预检完成后、命令派发前登记启动意图;钩子开始后取消仍按派发结果未知处理。 */
|
|
102
|
+
onBeforeDispatch?: () => void | Promise<void>;
|
|
53
103
|
/** 官方回执验证后先登记窗口所有权,再检查取消状态。 */
|
|
54
104
|
onStarted?: (result: StartWechatIdeAgentResult) => void | Promise<void>;
|
|
55
105
|
}
|
|
@@ -62,7 +112,7 @@ export interface StartWechatIdeAgentResult {
|
|
|
62
112
|
export declare function startWechatIdeAgent(options: StartWechatIdeAgentOptions): Promise<StartWechatIdeAgentResult>;
|
|
63
113
|
//#endregion
|
|
64
114
|
//#region src/cli/automator/context.d.ts
|
|
65
|
-
interface AutomatorInstallationOptions extends DevtoolsRuntimeSessionOptions {
|
|
115
|
+
interface AutomatorInstallationOptions extends DevtoolsRuntimeSessionOptions, WechatDevtoolsSelectionOptions {
|
|
66
116
|
target?: ResolvedWechatDevtoolsTarget;
|
|
67
117
|
signal?: AbortSignal;
|
|
68
118
|
}
|
|
@@ -173,7 +223,7 @@ export declare function removeOption(argv: readonly string[], optionName: string
|
|
|
173
223
|
type MiniProgramLike = AutomatorMiniProgram;
|
|
174
224
|
type MiniProgramPage = AutomatorPage;
|
|
175
225
|
type MiniProgramElement = AutomatorElement;
|
|
176
|
-
interface AutomatorSessionOptions extends DevtoolsRuntimeSessionOptions {
|
|
226
|
+
interface AutomatorSessionOptions extends DevtoolsRuntimeSessionOptions, WechatDevtoolsSelectionOptions {
|
|
177
227
|
signal?: AbortSignal;
|
|
178
228
|
target?: ResolvedWechatDevtoolsTarget;
|
|
179
229
|
}
|
|
@@ -329,8 +379,17 @@ export declare function parseCompareArgs(argv: string[]): CompareOptions;
|
|
|
329
379
|
*/
|
|
330
380
|
export declare function handleConfigCommand(argv: string[]): Promise<void>;
|
|
331
381
|
//#endregion
|
|
382
|
+
//#region src/cli/devtoolsSelection.d.ts
|
|
383
|
+
/** 包装参数不会透传官方 CLI,选项值和双横线后的内容保持原样。 */
|
|
384
|
+
export declare function splitWechatDevtoolsSelectionArgs(argv: readonly string[]): {
|
|
385
|
+
args: string[];
|
|
386
|
+
selection: WechatDevtoolsSelectionOptions;
|
|
387
|
+
};
|
|
388
|
+
/** 显式选择在任何 helper 或 CLI 回退之前固定,避免入口间选版漂移。 */
|
|
389
|
+
export declare function withWechatDevtoolsSelectionArgs<T>(argv: readonly string[], runner: (args: string[]) => Promise<T>): Promise<T>;
|
|
390
|
+
//#endregion
|
|
332
391
|
//#region src/cli/http.d.ts
|
|
333
|
-
export interface WechatDevtoolsHttpCommandOptions {
|
|
392
|
+
export interface WechatDevtoolsHttpCommandOptions extends WechatDevtoolsSelectionOptions {
|
|
334
393
|
cliPath?: string;
|
|
335
394
|
target?: ResolvedWechatDevtoolsTarget;
|
|
336
395
|
port?: number;
|
|
@@ -552,9 +611,7 @@ export declare function promptWechatIdeLoginRetry(options: WechatIdeLoginRetryOp
|
|
|
552
611
|
* @description 基于 cac 注册顶层命令,用于统一识别入口。
|
|
553
612
|
*/
|
|
554
613
|
export declare function createCli(): import("cac").CAC;
|
|
555
|
-
/**
|
|
556
|
-
* @description CLI 入口解析与分发。
|
|
557
|
-
*/
|
|
614
|
+
/** 在分发前剥离公共选择参数并固定本次安装。 */
|
|
558
615
|
export declare function parse(argv: string[]): Promise<void>;
|
|
559
616
|
//#endregion
|
|
560
617
|
//#region src/cli/run-automator.d.ts
|
|
@@ -573,7 +630,7 @@ export declare function getAutomatorCommandHelp(command: string): string | undef
|
|
|
573
630
|
export declare function runAutomatorCommand(command: string, argv: string[]): Promise<void>;
|
|
574
631
|
//#endregion
|
|
575
632
|
//#region src/cli/run-login.d.ts
|
|
576
|
-
export interface RunWechatCliWithRetryOptions {
|
|
633
|
+
export interface RunWechatCliWithRetryOptions extends WechatDevtoolsSelectionOptions {
|
|
577
634
|
target?: ResolvedWechatDevtoolsTarget;
|
|
578
635
|
silent?: boolean;
|
|
579
636
|
timeout?: number;
|
|
@@ -623,24 +680,24 @@ export declare function parseScreenshotArgs(argv: string[]): ScreenshotOptions;
|
|
|
623
680
|
export declare function validateWechatCliCommandArgs(argv: readonly string[]): void;
|
|
624
681
|
//#endregion
|
|
625
682
|
//#region src/cli/wechat-commands.d.ts
|
|
626
|
-
export interface LoginWechatIdeOptions {
|
|
683
|
+
export interface LoginWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
627
684
|
qrFormat?: 'base64' | 'image' | 'terminal';
|
|
628
685
|
qrOutput?: string;
|
|
629
686
|
qrSize?: string;
|
|
630
687
|
resultOutput?: string;
|
|
631
688
|
}
|
|
632
|
-
export interface OpenWechatIdeOptions {
|
|
689
|
+
export interface OpenWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
633
690
|
appid?: string;
|
|
634
691
|
extAppid?: string;
|
|
635
692
|
platform?: string;
|
|
636
693
|
projectPath?: string;
|
|
637
694
|
trustProject?: boolean;
|
|
638
695
|
}
|
|
639
|
-
export interface BuildWechatIdeNpmOptions {
|
|
696
|
+
export interface BuildWechatIdeNpmOptions extends WechatDevtoolsSelectionOptions {
|
|
640
697
|
compileType?: string;
|
|
641
698
|
projectPath?: string;
|
|
642
699
|
}
|
|
643
|
-
export interface PreviewWechatIdeOptions {
|
|
700
|
+
export interface PreviewWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
644
701
|
appid?: string;
|
|
645
702
|
compileCondition?: string;
|
|
646
703
|
extAppid?: string;
|
|
@@ -650,14 +707,14 @@ export interface PreviewWechatIdeOptions {
|
|
|
650
707
|
qrOutput?: string;
|
|
651
708
|
qrSize?: string;
|
|
652
709
|
}
|
|
653
|
-
export interface AutoPreviewWechatIdeOptions {
|
|
710
|
+
export interface AutoPreviewWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
654
711
|
appid?: string;
|
|
655
712
|
compileCondition?: string;
|
|
656
713
|
extAppid?: string;
|
|
657
714
|
infoOutput?: string;
|
|
658
715
|
projectPath?: string;
|
|
659
716
|
}
|
|
660
|
-
export interface UploadWechatIdeOptions {
|
|
717
|
+
export interface UploadWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
661
718
|
appid?: string;
|
|
662
719
|
desc: string;
|
|
663
720
|
extAppid?: string;
|
|
@@ -665,7 +722,7 @@ export interface UploadWechatIdeOptions {
|
|
|
665
722
|
projectPath?: string;
|
|
666
723
|
version: string;
|
|
667
724
|
}
|
|
668
|
-
export interface AutoWechatIdeOptions {
|
|
725
|
+
export interface AutoWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
669
726
|
account?: string;
|
|
670
727
|
appid?: string;
|
|
671
728
|
extAppid?: string;
|
|
@@ -675,7 +732,7 @@ export interface AutoWechatIdeOptions {
|
|
|
675
732
|
ticket?: string;
|
|
676
733
|
trustProject?: boolean;
|
|
677
734
|
}
|
|
678
|
-
export interface AutoReplayWechatIdeOptions {
|
|
735
|
+
export interface AutoReplayWechatIdeOptions extends WechatDevtoolsSelectionOptions {
|
|
679
736
|
account?: string;
|
|
680
737
|
appid?: string;
|
|
681
738
|
extAppid?: string;
|
|
@@ -687,21 +744,21 @@ export interface AutoReplayWechatIdeOptions {
|
|
|
687
744
|
ticket?: string;
|
|
688
745
|
trustProject?: boolean;
|
|
689
746
|
}
|
|
690
|
-
export interface OpenWechatIdeOtherProjectOptions {
|
|
747
|
+
export interface OpenWechatIdeOtherProjectOptions extends WechatDevtoolsSelectionOptions {
|
|
691
748
|
projectPath?: string;
|
|
692
749
|
}
|
|
693
|
-
export interface CloseWechatIdeProjectOptions {
|
|
750
|
+
export interface CloseWechatIdeProjectOptions extends WechatDevtoolsSelectionOptions {
|
|
694
751
|
projectPath?: string;
|
|
695
752
|
cliPath?: string;
|
|
696
753
|
target?: ResolvedWechatDevtoolsTarget;
|
|
697
754
|
}
|
|
698
|
-
export interface ClearWechatIdeCacheOptions {
|
|
755
|
+
export interface ClearWechatIdeCacheOptions extends WechatDevtoolsSelectionOptions {
|
|
699
756
|
clean: 'all' | 'auth' | 'compile' | 'file' | 'network' | 'session' | 'storage';
|
|
700
757
|
}
|
|
701
|
-
export interface ResetWechatIdeFileUtilsOptions {
|
|
758
|
+
export interface ResetWechatIdeFileUtilsOptions extends WechatDevtoolsSelectionOptions {
|
|
702
759
|
projectPath: string;
|
|
703
760
|
}
|
|
704
|
-
export interface WechatIdeAutomatorSessionOptions {
|
|
761
|
+
export interface WechatIdeAutomatorSessionOptions extends WechatDevtoolsSelectionOptions {
|
|
705
762
|
port?: number;
|
|
706
763
|
preferOpenedSession?: boolean;
|
|
707
764
|
preserveProjectRoot?: boolean;
|
|
@@ -719,7 +776,7 @@ export interface ClearWechatIdeCacheByAutomatorOptions extends WechatIdeAutomato
|
|
|
719
776
|
export interface SetWechatIdeTicketOptions extends WechatIdeAutomatorSessionOptions {
|
|
720
777
|
ticket: string;
|
|
721
778
|
}
|
|
722
|
-
export interface BuildWechatIdeApkOptions {
|
|
779
|
+
export interface BuildWechatIdeApkOptions extends WechatDevtoolsSelectionOptions {
|
|
723
780
|
desc?: string;
|
|
724
781
|
isUploadResourceBundle?: boolean;
|
|
725
782
|
keyAlias: string;
|
|
@@ -731,7 +788,7 @@ export interface BuildWechatIdeApkOptions {
|
|
|
731
788
|
storePass: string;
|
|
732
789
|
useAab?: boolean;
|
|
733
790
|
}
|
|
734
|
-
export interface BuildWechatIdeIpaOptions {
|
|
791
|
+
export interface BuildWechatIdeIpaOptions extends WechatDevtoolsSelectionOptions {
|
|
735
792
|
certificateName?: string;
|
|
736
793
|
isDistribute: boolean;
|
|
737
794
|
isRemoteBuild?: boolean;
|
|
@@ -760,7 +817,7 @@ export declare function loginWechatIde(options?: LoginWechatIdeOptions): Promise
|
|
|
760
817
|
export declare function isWechatIdeLoggedIn(options?: {
|
|
761
818
|
nonInteractive?: boolean;
|
|
762
819
|
silent?: boolean;
|
|
763
|
-
}): Promise<void>;
|
|
820
|
+
} & WechatDevtoolsSelectionOptions): Promise<void>;
|
|
764
821
|
/**
|
|
765
822
|
* @description 调用微信开发者工具 build-npm 命令。
|
|
766
823
|
*/
|
|
@@ -792,7 +849,7 @@ export declare function closeWechatIdeProject(options?: CloseWechatIdeProjectOpt
|
|
|
792
849
|
/**
|
|
793
850
|
* @description 调用微信开发者工具 quit 命令。
|
|
794
851
|
*/
|
|
795
|
-
export declare function quitWechatIde(): Promise<void>;
|
|
852
|
+
export declare function quitWechatIde(options?: WechatDevtoolsSelectionOptions): Promise<void>;
|
|
796
853
|
/**
|
|
797
854
|
* @description 调用微信开发者工具 cache 命令。
|
|
798
855
|
*/
|
|
@@ -800,7 +857,7 @@ export declare function clearWechatIdeCache(options: ClearWechatIdeCacheOptions)
|
|
|
800
857
|
/**
|
|
801
858
|
* @description 调用微信开发者工具 open-other 命令。
|
|
802
859
|
*/
|
|
803
|
-
export declare function openWechatIdeOtherProject(
|
|
860
|
+
export declare function openWechatIdeOtherProject(options?: OpenWechatIdeOtherProjectOptions): Promise<void>;
|
|
804
861
|
/**
|
|
805
862
|
* @description 通过微信开发者工具 HTTP 服务端口重置指定项目的 fileutils 状态。
|
|
806
863
|
*/
|
|
@@ -1003,7 +1060,7 @@ interface ManagedWechatInstallationExitEvidence {
|
|
|
1003
1060
|
installationId: string;
|
|
1004
1061
|
profileDir: string;
|
|
1005
1062
|
previous: {
|
|
1006
|
-
state: 'starting' | 'unconfirmed' | 'failed';
|
|
1063
|
+
state: 'starting' | 'unconfirmed' | 'failed' | 'borrowed';
|
|
1007
1064
|
error?: string;
|
|
1008
1065
|
updatedAt: string;
|
|
1009
1066
|
recordSha256: string;
|
|
@@ -1060,6 +1117,20 @@ interface ManagedWechatWindowCloseEvidence {
|
|
|
1060
1117
|
cursors: ManagedWechatWindowLogCursor[];
|
|
1061
1118
|
};
|
|
1062
1119
|
}
|
|
1120
|
+
interface ManagedWechatProjectSnapshot {
|
|
1121
|
+
protocol: 'wechat-devtools-project-snapshot-v1';
|
|
1122
|
+
sourceProjectPath: string;
|
|
1123
|
+
token: string;
|
|
1124
|
+
state: 'reserved' | 'ready' | 'removed';
|
|
1125
|
+
directoryIdentity?: {
|
|
1126
|
+
dev: string;
|
|
1127
|
+
ino: string;
|
|
1128
|
+
};
|
|
1129
|
+
dispatchedAt?: string;
|
|
1130
|
+
cleanupStartedAt?: string;
|
|
1131
|
+
removedAt?: string;
|
|
1132
|
+
cleanupError?: string;
|
|
1133
|
+
}
|
|
1063
1134
|
interface ManagedWechatProjectRecord {
|
|
1064
1135
|
schemaVersion: 1;
|
|
1065
1136
|
id: string;
|
|
@@ -1079,10 +1150,11 @@ interface ManagedWechatProjectRecord {
|
|
|
1079
1150
|
closeAcknowledgedAt?: string;
|
|
1080
1151
|
/** 端口退出不是窗口退出;保存所选 profile 的增量销毁证据供父任务恢复。 */
|
|
1081
1152
|
windowClose?: ManagedWechatWindowCloseEvidence;
|
|
1082
|
-
releasedReason?: 'borrowed' | 'project-closed' | 'installation-exited';
|
|
1153
|
+
releasedReason?: 'borrowed' | 'project-closed' | 'installation-exited' | 'not-started';
|
|
1083
1154
|
/** 显式恢复只终结已退出安装的活资源;原启动失败与归属缺口仍保留。 */
|
|
1084
1155
|
installationExitRecovery?: ManagedWechatInstallationExitEvidence;
|
|
1085
1156
|
error?: string;
|
|
1157
|
+
snapshot?: ManagedWechatProjectSnapshot;
|
|
1086
1158
|
}
|
|
1087
1159
|
interface BeginManagedWechatProjectOptions {
|
|
1088
1160
|
target: ResolvedWechatDevtoolsTarget;
|
|
@@ -1092,10 +1164,15 @@ interface BeginManagedWechatProjectOptions {
|
|
|
1092
1164
|
journalPath?: string;
|
|
1093
1165
|
/** 当前任务根作用域最多持有一个窗口;双项目验收须显式指定两个。 */
|
|
1094
1166
|
maxOwnedWindows?: 1 | 2;
|
|
1167
|
+
/** 将输入项目的布局快照持久绑定当前任务 owner。 */
|
|
1168
|
+
snapshotProject?: boolean;
|
|
1095
1169
|
}
|
|
1096
1170
|
interface ManagedWechatProjectIntent {
|
|
1097
1171
|
id: string;
|
|
1098
1172
|
journalPath: string;
|
|
1173
|
+
projectPath: string;
|
|
1174
|
+
prepareSnapshot: (populate: (projectPath: string) => Promise<void>) => Promise<void>;
|
|
1175
|
+
markLaunchDispatched: () => Promise<void>;
|
|
1099
1176
|
confirm: (result: {
|
|
1100
1177
|
openedProjectWindow: boolean;
|
|
1101
1178
|
port: number;
|
|
@@ -1129,6 +1206,13 @@ export declare const MANAGED_PROJECT_MAX_WINDOWS_ENV = "WEAPP_IDE_MANAGED_PROJEC
|
|
|
1129
1206
|
/** 仅递归当前任务明确传递的 children;不扫描用户缓存,不跟随符号链接。 */
|
|
1130
1207
|
export declare function readManagedWechatProjectRecords(journalPath?: string): Promise<ManagedWechatProjectRecord[]>;
|
|
1131
1208
|
//#endregion
|
|
1209
|
+
//#region src/devtoolsProjectOwnership/snapshot/index.d.ts
|
|
1210
|
+
/** 窗口已经释放不代表本任务快照也已回收。 */
|
|
1211
|
+
export declare function isManagedWechatProjectFullyReleased(record: {
|
|
1212
|
+
state: ManagedWechatProjectRecord['state'];
|
|
1213
|
+
snapshot?: Pick<NonNullable<ManagedWechatProjectRecord['snapshot']>, 'state'>;
|
|
1214
|
+
}): boolean;
|
|
1215
|
+
//#endregion
|
|
1132
1216
|
//#region src/devtoolsProjectOwnership/index.d.ts
|
|
1133
1217
|
/** 窗口销毁与连接断开分别验证;失败保留登记供后续继续观察。 */
|
|
1134
1218
|
export declare function closeManagedWechatProject(options: {
|
|
@@ -1236,4 +1320,4 @@ export declare function execute(cliPath: string, argv: string[], options?: Execu
|
|
|
1236
1320
|
*/
|
|
1237
1321
|
export declare function resolvePath(filePath: string): string;
|
|
1238
1322
|
//#endregion
|
|
1239
|
-
export { type AutomatorSessionOptions, type BaseConfig, type BeginManagedWechatProjectOptions, type CleanupManagedWechatProjectsOptions, type ConfigSource, type DevtoolsConnectionInput, type DevtoolsContext, type DevtoolsElementSnapshot, type DevtoolsPageSnapshot, type DevtoolsToolResult, type ManagedWechatHostIdentity, type ManagedWechatInstallationExitEvidence, type ManagedWechatProjectIntent, type ManagedWechatProjectRecord, type ManagedWechatProjectState, type ManagedWechatWindowCloseCall, type ManagedWechatWindowCloseEvidence, type ManagedWechatWindowLogCursor, type MiniProgramElement, type MiniProgramEventMap, type MiniProgramLike, type MiniProgramPage, type ResolvedConfig, type WechatDevtoolsHostInspectionOptions, closeSharedMiniProgram, getSharedMiniProgramSessionCount, readElementSnapshot, releaseSharedMiniProgram, resolveProjectPath, toSerializableValue };
|
|
1323
|
+
export { type AutomatorSessionOptions, type BaseConfig, type BeginManagedWechatProjectOptions, type CleanupManagedWechatProjectsOptions, type ConfigSource, type DevtoolsConnectionInput, type DevtoolsContext, type DevtoolsElementSnapshot, type DevtoolsPageSnapshot, type DevtoolsToolResult, type ManagedWechatHostIdentity, type ManagedWechatInstallationExitEvidence, type ManagedWechatProjectIntent, type ManagedWechatProjectRecord, type ManagedWechatProjectSnapshot, type ManagedWechatProjectState, type ManagedWechatWindowCloseCall, type ManagedWechatWindowCloseEvidence, type ManagedWechatWindowLogCursor, type MiniProgramElement, type MiniProgramEventMap, type MiniProgramLike, type MiniProgramPage, type ResolveWechatDevtoolsTargetOptions, type ResolvedConfig, type ResolvedWechatDevtoolsTarget, type WechatDevtoolsChannel, type WechatDevtoolsHostInspectionOptions, type WechatDevtoolsInstallation, type WechatDevtoolsSelectionOptions, closeSharedMiniProgram, getSharedMiniProgramSessionCount, readElementSnapshot, releaseSharedMiniProgram, resolveProjectPath, toSerializableValue };
|
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-DjYLqMj6.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-BMfSAg4n.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-BOe32upt.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-CFlqFpIw.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-VOB03glx.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-mslf7-sP.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-Ni139Z5C.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,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { i as persistAutomatorSession, m as assertWechatDevtoolsPort, n as readAutomatorProjectPlan, t as populateAutomatorProjectSnapshot } from "./automatorProject-DjYLqMj6.js";
|
|
2
|
+
import { m as startWechatIdeAgent, t as beginManagedWechatProject } from "./devtoolsProjectOwnership-BMfSAg4n.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { withMachineE2ELease } from "@weapp-vite/devtools-runtime";
|
|
5
5
|
import { execa } from "execa";
|
|
@@ -67,30 +67,77 @@ async function importManagedDevtoolsProject(options) {
|
|
|
67
67
|
}
|
|
68
68
|
//#endregion
|
|
69
69
|
//#region src/cli/automator/managed.ts
|
|
70
|
-
/**
|
|
70
|
+
/** 受管启动持有完整窗口回执,快照始终由持久 journal 持有。 */
|
|
71
71
|
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;
|
|
72
|
+
const { launcher, scope, target, sourceProjectPath, port } = options;
|
|
73
|
+
let projectPath = options.projectPath;
|
|
74
|
+
let portLease;
|
|
90
75
|
let intent;
|
|
91
76
|
let program;
|
|
77
|
+
let allowCleanup;
|
|
78
|
+
const acquisitionSettled = new Promise((resolve) => {
|
|
79
|
+
allowCleanup = resolve;
|
|
80
|
+
});
|
|
81
|
+
let cleaning;
|
|
82
|
+
const cleanupLaunch = () => cleaning ??= (async () => {
|
|
83
|
+
await acquisitionSettled;
|
|
84
|
+
const errors = [];
|
|
85
|
+
let disconnected = !program;
|
|
86
|
+
try {
|
|
87
|
+
await program?.disconnect();
|
|
88
|
+
disconnected = true;
|
|
89
|
+
} catch (error) {
|
|
90
|
+
errors.push(error);
|
|
91
|
+
}
|
|
92
|
+
let projectClosed = !intent;
|
|
93
|
+
try {
|
|
94
|
+
await intent?.close();
|
|
95
|
+
projectClosed = true;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
errors.push(error);
|
|
98
|
+
}
|
|
99
|
+
if (disconnected && projectClosed) await portLease?.release().catch((error) => errors.push(error));
|
|
100
|
+
if (errors.length) throw new AggregateError(errors, "Managed DevTools session cleanup failed");
|
|
101
|
+
})().catch((error) => {
|
|
102
|
+
cleaning = void 0;
|
|
103
|
+
throw error;
|
|
104
|
+
});
|
|
105
|
+
let disownResources = () => {};
|
|
92
106
|
try {
|
|
93
|
-
|
|
107
|
+
disownResources = scope.own(cleanupLaunch, "managed-automator-session");
|
|
108
|
+
const snapshotPlan = options.preserveProjectRoot ? void 0 : await readAutomatorProjectPlan(projectPath);
|
|
109
|
+
scope.throwIfAborted();
|
|
110
|
+
if (snapshotPlan) {
|
|
111
|
+
intent = await beginManagedWechatProject({
|
|
112
|
+
target,
|
|
113
|
+
projectPath,
|
|
114
|
+
port,
|
|
115
|
+
snapshotProject: true
|
|
116
|
+
});
|
|
117
|
+
if (!intent) throw new Error("DEVTOOLS_MANAGED_PROJECT_JOURNAL_REQUIRED: managed launch requires a project ownership journal.");
|
|
118
|
+
projectPath = intent.projectPath;
|
|
119
|
+
await intent.prepareSnapshot(async (destination) => await populateAutomatorProjectSnapshot(snapshotPlan, destination));
|
|
120
|
+
scope.throwIfAborted();
|
|
121
|
+
}
|
|
122
|
+
await scope.step(() => importManagedDevtoolsProject({
|
|
123
|
+
cliPath: target.cliPath,
|
|
124
|
+
projectPath,
|
|
125
|
+
trusted: options.trustProject,
|
|
126
|
+
timeout: scope.remainingMs(),
|
|
127
|
+
signal: scope.signal
|
|
128
|
+
}), { stage: "project-import" });
|
|
129
|
+
scope.throwIfAborted();
|
|
130
|
+
portLease = await scope.step(() => acquireAutomatorPortLease(port), {
|
|
131
|
+
stage: "port-lease",
|
|
132
|
+
disposeLate: (lease) => lease.release()
|
|
133
|
+
});
|
|
134
|
+
const rawReleasePortLease = portLease.release.bind(portLease);
|
|
135
|
+
let releasedPortLease;
|
|
136
|
+
portLease.release = () => releasedPortLease ??= rawReleasePortLease().catch((error) => {
|
|
137
|
+
releasedPortLease = void 0;
|
|
138
|
+
throw error;
|
|
139
|
+
});
|
|
140
|
+
intent ??= await beginManagedWechatProject({
|
|
94
141
|
target,
|
|
95
142
|
projectPath,
|
|
96
143
|
port
|
|
@@ -104,6 +151,7 @@ async function launchManagedAutomator(options) {
|
|
|
104
151
|
trustProject: options.trustProject,
|
|
105
152
|
signal: scope.signal,
|
|
106
153
|
timeout: scope.remainingMs(),
|
|
154
|
+
...snapshotPlan ? { onBeforeDispatch: async () => await intent.markLaunchDispatched() } : {},
|
|
107
155
|
onStarted: async (result) => await intent.confirm({
|
|
108
156
|
openedProjectWindow: result.openedProjectWindow,
|
|
109
157
|
port: result.autoPort
|
|
@@ -153,56 +201,60 @@ async function launchManagedAutomator(options) {
|
|
|
153
201
|
}
|
|
154
202
|
const connectedProgram = program;
|
|
155
203
|
const ownedIntent = intent;
|
|
204
|
+
const ownedPortLease = portLease;
|
|
156
205
|
const rawDisconnect = connectedProgram.disconnect.bind(connectedProgram);
|
|
206
|
+
let disconnecting;
|
|
157
207
|
connectedProgram.disconnect = (...args) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
208
|
+
disconnecting ??= (async () => {
|
|
209
|
+
await rawDisconnect(...args);
|
|
210
|
+
await ownedPortLease.release();
|
|
211
|
+
})().catch((error) => {
|
|
212
|
+
disconnecting = void 0;
|
|
213
|
+
throw error;
|
|
214
|
+
});
|
|
215
|
+
return disconnecting;
|
|
163
216
|
};
|
|
164
217
|
let closing;
|
|
165
218
|
connectedProgram.close = async () => {
|
|
166
219
|
closing ??= (async () => {
|
|
220
|
+
const errors = [];
|
|
221
|
+
let disconnected = false;
|
|
167
222
|
try {
|
|
168
|
-
connectedProgram.disconnect();
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
} finally {
|
|
173
|
-
await portLease.release();
|
|
174
|
-
}
|
|
223
|
+
await connectedProgram.disconnect();
|
|
224
|
+
disconnected = true;
|
|
225
|
+
} catch (error) {
|
|
226
|
+
errors.push(error);
|
|
175
227
|
}
|
|
228
|
+
let projectClosed = false;
|
|
229
|
+
try {
|
|
230
|
+
await ownedIntent.close();
|
|
231
|
+
projectClosed = true;
|
|
232
|
+
} catch (error) {
|
|
233
|
+
errors.push(error);
|
|
234
|
+
}
|
|
235
|
+
if (disconnected && projectClosed) await ownedPortLease.release().catch((error) => errors.push(error));
|
|
236
|
+
if (errors.length) throw new AggregateError(errors, "Managed DevTools session cleanup failed");
|
|
176
237
|
})().finally(() => {
|
|
177
238
|
closing = void 0;
|
|
178
239
|
});
|
|
179
240
|
return await closing;
|
|
180
241
|
};
|
|
181
|
-
|
|
182
|
-
|
|
242
|
+
disownResources();
|
|
243
|
+
allowCleanup();
|
|
183
244
|
return connectedProgram;
|
|
184
245
|
} catch (error) {
|
|
185
246
|
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
|
-
}
|
|
247
|
+
if (intent) try {
|
|
248
|
+
await intent.fail(error);
|
|
249
|
+
} catch (recordError) {
|
|
250
|
+
errors.push(recordError);
|
|
202
251
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
await
|
|
252
|
+
allowCleanup();
|
|
253
|
+
try {
|
|
254
|
+
await cleanupLaunch();
|
|
255
|
+
disownResources();
|
|
256
|
+
} catch (cleanupError) {
|
|
257
|
+
errors.push(...cleanupError instanceof AggregateError ? cleanupError.errors : [cleanupError]);
|
|
206
258
|
}
|
|
207
259
|
if (errors.length > 1) throw new AggregateError(errors, "Managed DevTools launch failed and project cleanup did not complete.", { cause: error });
|
|
208
260
|
throw error;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as runMcpCommand } from "./run-mcp-Ni139Z5C.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as withMiniProgram$1 } from "./automator-session-VOB03glx.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";
|
|
@@ -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(),
|