@creatoria/miniapp-mcp 0.1.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 +469 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +144 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +73 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +118 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +50 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +189 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/core/element-ref.d.ts +44 -0
- package/dist/core/element-ref.d.ts.map +1 -0
- package/dist/core/element-ref.js +213 -0
- package/dist/core/element-ref.js.map +1 -0
- package/dist/core/logger.d.ts +55 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +378 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/output.d.ts +21 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +56 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/report-generator.d.ts +24 -0
- package/dist/core/report-generator.d.ts.map +1 -0
- package/dist/core/report-generator.js +212 -0
- package/dist/core/report-generator.js.map +1 -0
- package/dist/core/session.d.ts +83 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +306 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/timeout.d.ts +49 -0
- package/dist/core/timeout.d.ts.map +1 -0
- package/dist/core/timeout.js +67 -0
- package/dist/core/timeout.js.map +1 -0
- package/dist/core/tool-logger.d.ts +83 -0
- package/dist/core/tool-logger.d.ts.map +1 -0
- package/dist/core/tool-logger.js +453 -0
- package/dist/core/tool-logger.js.map +1 -0
- package/dist/core/validation.d.ts +39 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +93 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +85 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/assert.d.ts +108 -0
- package/dist/tools/assert.d.ts.map +1 -0
- package/dist/tools/assert.js +291 -0
- package/dist/tools/assert.js.map +1 -0
- package/dist/tools/automator.d.ts +45 -0
- package/dist/tools/automator.d.ts.map +1 -0
- package/dist/tools/automator.js +186 -0
- package/dist/tools/automator.js.map +1 -0
- package/dist/tools/element.d.ts +253 -0
- package/dist/tools/element.d.ts.map +1 -0
- package/dist/tools/element.js +615 -0
- package/dist/tools/element.js.map +1 -0
- package/dist/tools/index.d.ts +97 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1565 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/miniprogram.d.ts +79 -0
- package/dist/tools/miniprogram.d.ts.map +1 -0
- package/dist/tools/miniprogram.js +245 -0
- package/dist/tools/miniprogram.js.map +1 -0
- package/dist/tools/network.d.ts +65 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +205 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/page.d.ts +108 -0
- package/dist/tools/page.d.ts.map +1 -0
- package/dist/tools/page.js +307 -0
- package/dist/tools/page.js.map +1 -0
- package/dist/tools/record.d.ts +86 -0
- package/dist/tools/record.d.ts.map +1 -0
- package/dist/tools/record.js +316 -0
- package/dist/tools/record.js.map +1 -0
- package/dist/tools/snapshot.d.ts +82 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +258 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/types.d.ts +240 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/SIMPLE_USAGE.md +210 -0
- package/docs/api/README.md +244 -0
- package/docs/api/assert.md +1015 -0
- package/docs/api/automator.md +345 -0
- package/docs/api/element.md +1454 -0
- package/docs/api/miniprogram.md +558 -0
- package/docs/api/network.md +883 -0
- package/docs/api/page.md +909 -0
- package/docs/api/record.md +963 -0
- package/docs/api/snapshot.md +792 -0
- package/docs/architecture.E-Docs.md +1359 -0
- package/docs/architecture.F1.md +720 -0
- package/docs/architecture.F2.md +871 -0
- package/docs/architecture.F3.md +905 -0
- package/docs/architecture.md +90 -0
- package/docs/charter.A1.align.yaml +170 -0
- package/docs/charter.A2.align.yaml +199 -0
- package/docs/charter.A3.align.yaml +242 -0
- package/docs/charter.A4.align.yaml +227 -0
- package/docs/charter.B1.align.yaml +179 -0
- package/docs/charter.B2.align.yaml +200 -0
- package/docs/charter.B3.align.yaml +200 -0
- package/docs/charter.B4.align.yaml +188 -0
- package/docs/charter.C1.align.yaml +190 -0
- package/docs/charter.C2.align.yaml +202 -0
- package/docs/charter.C3.align.yaml +211 -0
- package/docs/charter.C4.align.yaml +263 -0
- package/docs/charter.C5.align.yaml +220 -0
- package/docs/charter.D1.align.yaml +190 -0
- package/docs/charter.D2.align.yaml +234 -0
- package/docs/charter.D3.align.yaml +206 -0
- package/docs/charter.E-Docs.align.yaml +294 -0
- package/docs/charter.F1.align.yaml +193 -0
- package/docs/charter.F2.align.yaml +248 -0
- package/docs/charter.F3.align.yaml +287 -0
- package/docs/charter.G.align.yaml +174 -0
- package/docs/charter.align.yaml +111 -0
- package/docs/examples/session-report-usage.md +449 -0
- package/docs/maintenance.md +682 -0
- package/docs/playwright-mcp/350/260/203/347/240/224.md +53 -0
- package/docs/setup-guide.md +775 -0
- package/docs/tasks.A1.atomize.md +296 -0
- package/docs/tasks.A2.atomize.md +408 -0
- package/docs/tasks.A3.atomize.md +564 -0
- package/docs/tasks.A4.atomize.md +496 -0
- package/docs/tasks.B1.atomize.md +352 -0
- package/docs/tasks.B2.atomize.md +561 -0
- package/docs/tasks.B3.atomize.md +508 -0
- package/docs/tasks.B4.atomize.md +504 -0
- package/docs/tasks.C1.atomize.md +540 -0
- package/docs/tasks.C2.atomize.md +665 -0
- package/docs/tasks.C3.atomize.md +745 -0
- package/docs/tasks.C4.atomize.md +908 -0
- package/docs/tasks.C5.atomize.md +755 -0
- package/docs/tasks.D1.atomize.md +547 -0
- package/docs/tasks.D2.atomize.md +619 -0
- package/docs/tasks.D3.atomize.md +790 -0
- package/docs/tasks.E-Docs.atomize.md +1204 -0
- package/docs/tasks.atomize.md +189 -0
- package/docs/troubleshooting.md +855 -0
- package/docs//345/256/214/346/225/264/345/256/236/347/216/260/346/226/271/346/241/210.md +155 -0
- package/docs//345/274/200/345/217/221/344/273/273/345/212/241/350/256/241/345/210/222.md +110 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226API/345/256/214/346/225/264/346/226/207/346/241/243.md +894 -0
- package/docs//345/276/256/344/277/241/345/260/217/347/250/213/345/272/217/350/207/252/345/212/250/345/214/226/345/256/214/346/225/264/346/223/215/344/275/234/346/211/213/345/206/214.md +1885 -0
- package/docs//346/216/245/345/217/243/346/226/271/346/241/210.md +565 -0
- package/docs//347/254/254/344/270/200/347/211/210/346/234/254/346/226/271/346/241/210.md +380 -0
- package/package.json +87 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Mock tool implementations
|
|
3
|
+
* Handles wx.request and other network API mocking
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Mock a WeChat API method (wx.*)
|
|
7
|
+
* Useful for testing without real network calls
|
|
8
|
+
*/
|
|
9
|
+
export async function mockWxMethod(session, args) {
|
|
10
|
+
const { method, result, type = 'success' } = args;
|
|
11
|
+
const logger = session.logger;
|
|
12
|
+
try {
|
|
13
|
+
if (!session.miniProgram) {
|
|
14
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
15
|
+
}
|
|
16
|
+
logger?.info('Mocking wx method', { method, type });
|
|
17
|
+
// Mock the WeChat API method
|
|
18
|
+
session.miniProgram.mockWxMethod(method, result, { type });
|
|
19
|
+
logger?.info('Wx method mocked successfully', { method, type });
|
|
20
|
+
return {
|
|
21
|
+
success: true,
|
|
22
|
+
message: `Successfully mocked wx.${method} to return ${type}`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
27
|
+
logger?.error('Mock wx method failed', {
|
|
28
|
+
error: errorMessage,
|
|
29
|
+
method,
|
|
30
|
+
});
|
|
31
|
+
throw new Error(`Failed to mock wx.${method}: ${errorMessage}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Restore a previously mocked WeChat API method
|
|
36
|
+
*/
|
|
37
|
+
export async function restoreWxMethod(session, args) {
|
|
38
|
+
const { method } = args;
|
|
39
|
+
const logger = session.logger;
|
|
40
|
+
try {
|
|
41
|
+
if (!session.miniProgram) {
|
|
42
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
43
|
+
}
|
|
44
|
+
logger?.info('Restoring wx method', { method });
|
|
45
|
+
// Restore the WeChat API method to its original behavior
|
|
46
|
+
session.miniProgram.restoreWxMethod(method);
|
|
47
|
+
logger?.info('Wx method restored successfully', { method });
|
|
48
|
+
return {
|
|
49
|
+
success: true,
|
|
50
|
+
message: `Successfully restored wx.${method} to original behavior`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
55
|
+
logger?.error('Restore wx method failed', {
|
|
56
|
+
error: errorMessage,
|
|
57
|
+
method,
|
|
58
|
+
});
|
|
59
|
+
throw new Error(`Failed to restore wx.${method}: ${errorMessage}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Mock wx.request to return specific data
|
|
64
|
+
* Convenient wrapper for mocking network requests
|
|
65
|
+
*/
|
|
66
|
+
export async function mockRequest(session, args) {
|
|
67
|
+
const { data = {}, statusCode = 200, header = {}, type = 'success' } = args;
|
|
68
|
+
const logger = session.logger;
|
|
69
|
+
try {
|
|
70
|
+
if (!session.miniProgram) {
|
|
71
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
72
|
+
}
|
|
73
|
+
logger?.info('Mocking wx.request', { statusCode, type });
|
|
74
|
+
const result = {
|
|
75
|
+
data,
|
|
76
|
+
statusCode,
|
|
77
|
+
header,
|
|
78
|
+
};
|
|
79
|
+
// Mock wx.request
|
|
80
|
+
session.miniProgram.mockWxMethod('request', result, { type });
|
|
81
|
+
logger?.info('wx.request mocked successfully', { statusCode, type });
|
|
82
|
+
return {
|
|
83
|
+
success: true,
|
|
84
|
+
message: `Successfully mocked wx.request to return ${type} with status ${statusCode}`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
89
|
+
logger?.error('Mock request failed', {
|
|
90
|
+
error: errorMessage,
|
|
91
|
+
});
|
|
92
|
+
throw new Error(`Failed to mock wx.request: ${errorMessage}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Mock wx.request to fail with specific error
|
|
97
|
+
* Useful for testing error handling
|
|
98
|
+
*/
|
|
99
|
+
export async function mockRequestFailure(session, args) {
|
|
100
|
+
const { errMsg = 'request:fail', errno = -1 } = args;
|
|
101
|
+
const logger = session.logger;
|
|
102
|
+
try {
|
|
103
|
+
if (!session.miniProgram) {
|
|
104
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
105
|
+
}
|
|
106
|
+
logger?.info('Mocking wx.request failure', { errMsg, errno });
|
|
107
|
+
const result = {
|
|
108
|
+
errMsg,
|
|
109
|
+
errno,
|
|
110
|
+
};
|
|
111
|
+
// Mock wx.request to fail
|
|
112
|
+
session.miniProgram.mockWxMethod('request', result, { type: 'fail' });
|
|
113
|
+
logger?.info('wx.request failure mocked successfully', { errMsg });
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
message: `Successfully mocked wx.request to fail with: ${errMsg}`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
121
|
+
logger?.error('Mock request failure failed', {
|
|
122
|
+
error: errorMessage,
|
|
123
|
+
});
|
|
124
|
+
throw new Error(`Failed to mock wx.request failure: ${errorMessage}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Restore wx.request to original behavior
|
|
129
|
+
*/
|
|
130
|
+
export async function restoreRequest(session) {
|
|
131
|
+
const logger = session.logger;
|
|
132
|
+
try {
|
|
133
|
+
if (!session.miniProgram) {
|
|
134
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
135
|
+
}
|
|
136
|
+
logger?.info('Restoring wx.request');
|
|
137
|
+
// Restore wx.request
|
|
138
|
+
session.miniProgram.restoreWxMethod('request');
|
|
139
|
+
logger?.info('wx.request restored successfully');
|
|
140
|
+
return {
|
|
141
|
+
success: true,
|
|
142
|
+
message: 'Successfully restored wx.request to original behavior',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
147
|
+
logger?.error('Restore request failed', {
|
|
148
|
+
error: errorMessage,
|
|
149
|
+
});
|
|
150
|
+
throw new Error(`Failed to restore wx.request: ${errorMessage}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Restore all mocked WeChat API methods
|
|
155
|
+
*/
|
|
156
|
+
export async function restoreAllMocks(session) {
|
|
157
|
+
const logger = session.logger;
|
|
158
|
+
try {
|
|
159
|
+
if (!session.miniProgram) {
|
|
160
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
161
|
+
}
|
|
162
|
+
logger?.info('Restoring all mocked wx methods');
|
|
163
|
+
// Common methods that might be mocked
|
|
164
|
+
const commonMethods = [
|
|
165
|
+
'request',
|
|
166
|
+
'uploadFile',
|
|
167
|
+
'downloadFile',
|
|
168
|
+
'connectSocket',
|
|
169
|
+
'getStorage',
|
|
170
|
+
'setStorage',
|
|
171
|
+
'removeStorage',
|
|
172
|
+
'clearStorage',
|
|
173
|
+
'getSystemInfo',
|
|
174
|
+
'getLocation',
|
|
175
|
+
'chooseImage',
|
|
176
|
+
'showToast',
|
|
177
|
+
'showModal',
|
|
178
|
+
'navigateTo',
|
|
179
|
+
'redirectTo',
|
|
180
|
+
];
|
|
181
|
+
let restoredCount = 0;
|
|
182
|
+
for (const method of commonMethods) {
|
|
183
|
+
try {
|
|
184
|
+
session.miniProgram.restoreWxMethod(method);
|
|
185
|
+
restoredCount++;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Ignore errors for methods that weren't mocked
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
logger?.info('All mocks restored', { restoredCount });
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
message: `Successfully restored ${restoredCount} mocked wx methods`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
199
|
+
logger?.error('Restore all mocks failed', {
|
|
200
|
+
error: errorMessage,
|
|
201
|
+
});
|
|
202
|
+
throw new Error(`Failed to restore all mocks: ${errorMessage}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page tool implementations
|
|
3
|
+
* Handles page-level operations: query elements, data access, method calls
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Query a single element on the page
|
|
8
|
+
* Returns an ElementRef that can be used in subsequent element operations
|
|
9
|
+
*/
|
|
10
|
+
export declare function query(session: SessionState, args: {
|
|
11
|
+
selector: string;
|
|
12
|
+
pagePath?: string;
|
|
13
|
+
save?: boolean;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
success: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
refId?: string;
|
|
18
|
+
exists: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Query all matching elements on the page
|
|
22
|
+
* Returns an array of ElementRefs
|
|
23
|
+
*/
|
|
24
|
+
export declare function queryAll(session: SessionState, args: {
|
|
25
|
+
selector: string;
|
|
26
|
+
pagePath?: string;
|
|
27
|
+
save?: boolean;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
message: string;
|
|
31
|
+
refIds?: string[];
|
|
32
|
+
count: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Wait for a condition to be met
|
|
36
|
+
* Supports: selector (string), timeout (number), or function
|
|
37
|
+
*/
|
|
38
|
+
export declare function waitFor(session: SessionState, args: {
|
|
39
|
+
condition: string | number;
|
|
40
|
+
pagePath?: string;
|
|
41
|
+
timeout?: number;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
message: string;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Get page data
|
|
48
|
+
* Optionally specify a path to get nested data
|
|
49
|
+
*/
|
|
50
|
+
export declare function getData(session: SessionState, args?: {
|
|
51
|
+
path?: string;
|
|
52
|
+
pagePath?: string;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
success: boolean;
|
|
55
|
+
message: string;
|
|
56
|
+
data: any;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Set page data
|
|
60
|
+
* Updates the page's data object
|
|
61
|
+
*/
|
|
62
|
+
export declare function setData(session: SessionState, args: {
|
|
63
|
+
data: Record<string, any>;
|
|
64
|
+
pagePath?: string;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
success: boolean;
|
|
67
|
+
message: string;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Call a method on the page
|
|
71
|
+
* Invokes a method defined in the page's JS logic
|
|
72
|
+
*/
|
|
73
|
+
export declare function callMethod(session: SessionState, args: {
|
|
74
|
+
method: string;
|
|
75
|
+
args?: any[];
|
|
76
|
+
pagePath?: string;
|
|
77
|
+
}): Promise<{
|
|
78
|
+
success: boolean;
|
|
79
|
+
message: string;
|
|
80
|
+
result?: any;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Get page size
|
|
84
|
+
* Returns page width, height, and scrollable height
|
|
85
|
+
*/
|
|
86
|
+
export declare function getSize(session: SessionState, args?: {
|
|
87
|
+
pagePath?: string;
|
|
88
|
+
}): Promise<{
|
|
89
|
+
success: boolean;
|
|
90
|
+
message: string;
|
|
91
|
+
size: {
|
|
92
|
+
width: number;
|
|
93
|
+
height: number;
|
|
94
|
+
scrollHeight: number;
|
|
95
|
+
};
|
|
96
|
+
}>;
|
|
97
|
+
/**
|
|
98
|
+
* Get page scroll position
|
|
99
|
+
* Returns the current vertical scroll offset
|
|
100
|
+
*/
|
|
101
|
+
export declare function getScrollTop(session: SessionState, args?: {
|
|
102
|
+
pagePath?: string;
|
|
103
|
+
}): Promise<{
|
|
104
|
+
success: boolean;
|
|
105
|
+
message: string;
|
|
106
|
+
scrollTop: number;
|
|
107
|
+
}>;
|
|
108
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/tools/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page tool implementations
|
|
3
|
+
* Handles page-level operations: query elements, data access, method calls
|
|
4
|
+
*/
|
|
5
|
+
import { resolvePage } from '../core/element-ref.js';
|
|
6
|
+
import { generateRefId } from '../core/element-ref.js';
|
|
7
|
+
/**
|
|
8
|
+
* Query a single element on the page
|
|
9
|
+
* Returns an ElementRef that can be used in subsequent element operations
|
|
10
|
+
*/
|
|
11
|
+
export async function query(session, args) {
|
|
12
|
+
const { selector, pagePath, save = true } = args;
|
|
13
|
+
const logger = session.logger;
|
|
14
|
+
try {
|
|
15
|
+
if (!session.miniProgram) {
|
|
16
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
17
|
+
}
|
|
18
|
+
logger?.info('Querying element', { selector, pagePath });
|
|
19
|
+
// Resolve page (current or specified)
|
|
20
|
+
const page = await resolvePage(session, pagePath);
|
|
21
|
+
// Query element
|
|
22
|
+
const element = await page.$(selector);
|
|
23
|
+
if (!element) {
|
|
24
|
+
logger?.info('Element not found', { selector });
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
message: `Element not found: ${selector}`,
|
|
28
|
+
exists: false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Save element to session if requested
|
|
32
|
+
let refId;
|
|
33
|
+
if (save) {
|
|
34
|
+
refId = generateRefId();
|
|
35
|
+
session.elements.set(refId, {
|
|
36
|
+
element,
|
|
37
|
+
pagePath: page.path || 'unknown',
|
|
38
|
+
cachedAt: new Date(),
|
|
39
|
+
});
|
|
40
|
+
logger?.info(`Cached element with refId: ${refId}`, { selector, pagePath: page.path });
|
|
41
|
+
}
|
|
42
|
+
logger?.info('Element queried successfully', { selector, refId });
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
message: `Element found: ${selector}`,
|
|
46
|
+
refId,
|
|
47
|
+
exists: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
52
|
+
logger?.error('Query failed', {
|
|
53
|
+
error: errorMessage,
|
|
54
|
+
selector,
|
|
55
|
+
});
|
|
56
|
+
throw new Error(`Query failed: ${errorMessage}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Query all matching elements on the page
|
|
61
|
+
* Returns an array of ElementRefs
|
|
62
|
+
*/
|
|
63
|
+
export async function queryAll(session, args) {
|
|
64
|
+
const { selector, pagePath, save = true } = args;
|
|
65
|
+
const logger = session.logger;
|
|
66
|
+
try {
|
|
67
|
+
if (!session.miniProgram) {
|
|
68
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
69
|
+
}
|
|
70
|
+
logger?.info('Querying all elements', { selector, pagePath });
|
|
71
|
+
// Resolve page (current or specified)
|
|
72
|
+
const page = await resolvePage(session, pagePath);
|
|
73
|
+
// Query all elements
|
|
74
|
+
const elements = await page.$$(selector);
|
|
75
|
+
const count = elements.length;
|
|
76
|
+
logger?.info(`Found ${count} elements`, { selector });
|
|
77
|
+
// Save elements to session if requested
|
|
78
|
+
let refIds;
|
|
79
|
+
if (save && count > 0) {
|
|
80
|
+
refIds = [];
|
|
81
|
+
for (const element of elements) {
|
|
82
|
+
const refId = generateRefId();
|
|
83
|
+
session.elements.set(refId, {
|
|
84
|
+
element,
|
|
85
|
+
pagePath: page.path || 'unknown',
|
|
86
|
+
cachedAt: new Date(),
|
|
87
|
+
});
|
|
88
|
+
refIds.push(refId);
|
|
89
|
+
}
|
|
90
|
+
logger?.info(`Cached ${count} elements`, { selector, refIds, pagePath: page.path });
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
message: `Found ${count} elements matching: ${selector}`,
|
|
95
|
+
refIds,
|
|
96
|
+
count,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
101
|
+
logger?.error('QueryAll failed', {
|
|
102
|
+
error: errorMessage,
|
|
103
|
+
selector,
|
|
104
|
+
});
|
|
105
|
+
throw new Error(`QueryAll failed: ${errorMessage}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Wait for a condition to be met
|
|
110
|
+
* Supports: selector (string), timeout (number), or function
|
|
111
|
+
*/
|
|
112
|
+
export async function waitFor(session, args) {
|
|
113
|
+
const { condition, pagePath, timeout } = args;
|
|
114
|
+
const logger = session.logger;
|
|
115
|
+
try {
|
|
116
|
+
if (!session.miniProgram) {
|
|
117
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
118
|
+
}
|
|
119
|
+
logger?.info('Waiting for condition', { condition, pagePath, timeout });
|
|
120
|
+
// Resolve page (current or specified)
|
|
121
|
+
const page = await resolvePage(session, pagePath);
|
|
122
|
+
// Wait for condition
|
|
123
|
+
if (typeof condition === 'number') {
|
|
124
|
+
await page.waitFor(condition);
|
|
125
|
+
logger?.info(`Waited for ${condition}ms`);
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
message: `Waited for ${condition}ms`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// String condition (selector)
|
|
133
|
+
await page.waitFor(condition);
|
|
134
|
+
logger?.info(`Waited for selector: ${condition}`);
|
|
135
|
+
return {
|
|
136
|
+
success: true,
|
|
137
|
+
message: `Element appeared: ${condition}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
143
|
+
logger?.error('WaitFor failed', {
|
|
144
|
+
error: errorMessage,
|
|
145
|
+
condition,
|
|
146
|
+
});
|
|
147
|
+
throw new Error(`WaitFor failed: ${errorMessage}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get page data
|
|
152
|
+
* Optionally specify a path to get nested data
|
|
153
|
+
*/
|
|
154
|
+
export async function getData(session, args = {}) {
|
|
155
|
+
const { path, pagePath } = args;
|
|
156
|
+
const logger = session.logger;
|
|
157
|
+
try {
|
|
158
|
+
if (!session.miniProgram) {
|
|
159
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
160
|
+
}
|
|
161
|
+
logger?.info('Getting page data', { path, pagePath });
|
|
162
|
+
// Resolve page (current or specified)
|
|
163
|
+
const page = await resolvePage(session, pagePath);
|
|
164
|
+
// Get data
|
|
165
|
+
const data = await page.data(path);
|
|
166
|
+
logger?.info('Page data retrieved', { path, dataType: typeof data });
|
|
167
|
+
return {
|
|
168
|
+
success: true,
|
|
169
|
+
message: path ? `Data at path "${path}" retrieved` : 'Page data retrieved',
|
|
170
|
+
data,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
175
|
+
logger?.error('GetData failed', {
|
|
176
|
+
error: errorMessage,
|
|
177
|
+
path,
|
|
178
|
+
});
|
|
179
|
+
throw new Error(`GetData failed: ${errorMessage}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Set page data
|
|
184
|
+
* Updates the page's data object
|
|
185
|
+
*/
|
|
186
|
+
export async function setData(session, args) {
|
|
187
|
+
const { data, pagePath } = args;
|
|
188
|
+
const logger = session.logger;
|
|
189
|
+
try {
|
|
190
|
+
if (!session.miniProgram) {
|
|
191
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
192
|
+
}
|
|
193
|
+
logger?.info('Setting page data', { data, pagePath });
|
|
194
|
+
// Resolve page (current or specified)
|
|
195
|
+
const page = await resolvePage(session, pagePath);
|
|
196
|
+
// Set data
|
|
197
|
+
await page.setData(data);
|
|
198
|
+
logger?.info('Page data set successfully', { keys: Object.keys(data) });
|
|
199
|
+
return {
|
|
200
|
+
success: true,
|
|
201
|
+
message: `Page data updated with ${Object.keys(data).length} keys`,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
206
|
+
logger?.error('SetData failed', {
|
|
207
|
+
error: errorMessage,
|
|
208
|
+
data,
|
|
209
|
+
});
|
|
210
|
+
throw new Error(`SetData failed: ${errorMessage}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Call a method on the page
|
|
215
|
+
* Invokes a method defined in the page's JS logic
|
|
216
|
+
*/
|
|
217
|
+
export async function callMethod(session, args) {
|
|
218
|
+
const { method, args: methodArgs = [], pagePath } = args;
|
|
219
|
+
const logger = session.logger;
|
|
220
|
+
try {
|
|
221
|
+
if (!session.miniProgram) {
|
|
222
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
223
|
+
}
|
|
224
|
+
logger?.info('Calling page method', { method, args: methodArgs, pagePath });
|
|
225
|
+
// Resolve page (current or specified)
|
|
226
|
+
const page = await resolvePage(session, pagePath);
|
|
227
|
+
// Call method
|
|
228
|
+
const result = await page.callMethod(method, ...methodArgs);
|
|
229
|
+
logger?.info('Page method called successfully', { method, result });
|
|
230
|
+
return {
|
|
231
|
+
success: true,
|
|
232
|
+
message: `Method "${method}" called successfully`,
|
|
233
|
+
result,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
238
|
+
logger?.error('CallMethod failed', {
|
|
239
|
+
error: errorMessage,
|
|
240
|
+
method,
|
|
241
|
+
});
|
|
242
|
+
throw new Error(`CallMethod failed: ${errorMessage}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get page size
|
|
247
|
+
* Returns page width, height, and scrollable height
|
|
248
|
+
*/
|
|
249
|
+
export async function getSize(session, args = {}) {
|
|
250
|
+
const { pagePath } = args;
|
|
251
|
+
const logger = session.logger;
|
|
252
|
+
try {
|
|
253
|
+
if (!session.miniProgram) {
|
|
254
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
255
|
+
}
|
|
256
|
+
logger?.info('Getting page size', { pagePath });
|
|
257
|
+
// Resolve page (current or specified)
|
|
258
|
+
const page = await resolvePage(session, pagePath);
|
|
259
|
+
// Get size
|
|
260
|
+
const size = await page.size();
|
|
261
|
+
logger?.info('Page size retrieved', { size });
|
|
262
|
+
return {
|
|
263
|
+
success: true,
|
|
264
|
+
message: 'Page size retrieved',
|
|
265
|
+
size: size,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
270
|
+
logger?.error('GetSize failed', {
|
|
271
|
+
error: errorMessage,
|
|
272
|
+
});
|
|
273
|
+
throw new Error(`GetSize failed: ${errorMessage}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get page scroll position
|
|
278
|
+
* Returns the current vertical scroll offset
|
|
279
|
+
*/
|
|
280
|
+
export async function getScrollTop(session, args = {}) {
|
|
281
|
+
const { pagePath } = args;
|
|
282
|
+
const logger = session.logger;
|
|
283
|
+
try {
|
|
284
|
+
if (!session.miniProgram) {
|
|
285
|
+
throw new Error('MiniProgram not connected. Call miniprogram_launch or miniprogram_connect first.');
|
|
286
|
+
}
|
|
287
|
+
logger?.info('Getting page scrollTop', { pagePath });
|
|
288
|
+
// Resolve page (current or specified)
|
|
289
|
+
const page = await resolvePage(session, pagePath);
|
|
290
|
+
// Get scrollTop
|
|
291
|
+
const scrollTop = await page.scrollTop();
|
|
292
|
+
logger?.info('Page scrollTop retrieved', { scrollTop });
|
|
293
|
+
return {
|
|
294
|
+
success: true,
|
|
295
|
+
message: 'Page scroll position retrieved',
|
|
296
|
+
scrollTop,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
301
|
+
logger?.error('GetScrollTop failed', {
|
|
302
|
+
error: errorMessage,
|
|
303
|
+
});
|
|
304
|
+
throw new Error(`GetScrollTop failed: ${errorMessage}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/tools/page.ts"],"names":[],"mappings":"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"}
|