@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
package/dist/server.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server implementation for WeChat Mini Program automation
|
|
3
|
+
*/
|
|
4
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
|
+
import { ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { SessionStore } from './core/session.js';
|
|
8
|
+
import { registerTools } from './tools/index.js';
|
|
9
|
+
import { mergeServerConfig } from './config/defaults.js';
|
|
10
|
+
export async function startServer(config = {}) {
|
|
11
|
+
// Merge config with defaults to ensure all fields are present
|
|
12
|
+
const fullConfig = mergeServerConfig(config);
|
|
13
|
+
const { capabilities, outputDir, sessionTimeout, logLevel, enableFileLog, logBufferSize, logFlushInterval, enableSessionReport, } = fullConfig;
|
|
14
|
+
// Generate unique session ID for this server instance
|
|
15
|
+
// Each stdio transport connection gets a unique session
|
|
16
|
+
const sessionId = `session-${process.pid}-${Date.now()}`;
|
|
17
|
+
// Create session store with configuration
|
|
18
|
+
const sessionStore = new SessionStore({
|
|
19
|
+
outputDir,
|
|
20
|
+
sessionTimeout,
|
|
21
|
+
enableSessionReport,
|
|
22
|
+
loggerConfig: {
|
|
23
|
+
level: logLevel,
|
|
24
|
+
enableFileLog,
|
|
25
|
+
outputDir,
|
|
26
|
+
bufferSize: logBufferSize,
|
|
27
|
+
flushInterval: logFlushInterval,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const server = new Server({
|
|
31
|
+
name: 'creatoria-miniapp-mcp',
|
|
32
|
+
version: '0.1.0',
|
|
33
|
+
}, {
|
|
34
|
+
capabilities: {
|
|
35
|
+
tools: {},
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
// Register tools based on capabilities
|
|
39
|
+
// registerTools now actually registers the CallToolRequestSchema handler
|
|
40
|
+
const tools = registerTools(server, {
|
|
41
|
+
capabilities,
|
|
42
|
+
sessionId, // Pass the unique session ID
|
|
43
|
+
getSession: (sid) => {
|
|
44
|
+
const session = sessionStore.getOrCreate(sid);
|
|
45
|
+
sessionStore.updateActivity(sid);
|
|
46
|
+
return session;
|
|
47
|
+
},
|
|
48
|
+
deleteSession: (sid) => sessionStore.delete(sid),
|
|
49
|
+
});
|
|
50
|
+
// List available tools
|
|
51
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
52
|
+
return { tools };
|
|
53
|
+
});
|
|
54
|
+
// Cleanup on shutdown
|
|
55
|
+
process.on('SIGINT', async () => {
|
|
56
|
+
console.error('\nShutting down MCP server...');
|
|
57
|
+
try {
|
|
58
|
+
await sessionStore.dispose();
|
|
59
|
+
console.error('Cleanup completed');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('Error during cleanup:', error);
|
|
63
|
+
}
|
|
64
|
+
process.exit(0);
|
|
65
|
+
});
|
|
66
|
+
process.on('SIGTERM', async () => {
|
|
67
|
+
console.error('\nShutting down MCP server...');
|
|
68
|
+
try {
|
|
69
|
+
await sessionStore.dispose();
|
|
70
|
+
console.error('Cleanup completed');
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('Error during cleanup:', error);
|
|
74
|
+
}
|
|
75
|
+
process.exit(0);
|
|
76
|
+
});
|
|
77
|
+
// Start server with stdio transport
|
|
78
|
+
const transport = new StdioServerTransport();
|
|
79
|
+
await server.connect(transport);
|
|
80
|
+
console.error('WeChat Mini Program MCP Server running on stdio');
|
|
81
|
+
console.error(`Capabilities: ${capabilities.join(', ')}`);
|
|
82
|
+
console.error(`Tools registered: ${tools.length}`);
|
|
83
|
+
return server;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assert tools for MCP server
|
|
3
|
+
* Provides assertion utilities for testing mini program functionality
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Assert that an element exists on the page
|
|
8
|
+
*/
|
|
9
|
+
export declare function assertExists(session: SessionState, args: {
|
|
10
|
+
selector: string;
|
|
11
|
+
pagePath?: string;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Assert that an element does not exist on the page
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertNotExists(session: SessionState, args: {
|
|
20
|
+
selector: string;
|
|
21
|
+
pagePath?: string;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
message: string;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Assert element text equals expected value
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertText(session: SessionState, args: {
|
|
30
|
+
refId: string;
|
|
31
|
+
expected: string;
|
|
32
|
+
}): Promise<{
|
|
33
|
+
success: boolean;
|
|
34
|
+
message: string;
|
|
35
|
+
actual: string;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Assert element text contains expected substring
|
|
39
|
+
*/
|
|
40
|
+
export declare function assertTextContains(session: SessionState, args: {
|
|
41
|
+
refId: string;
|
|
42
|
+
expected: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
success: boolean;
|
|
45
|
+
message: string;
|
|
46
|
+
actual: string;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Assert element value equals expected value
|
|
50
|
+
*/
|
|
51
|
+
export declare function assertValue(session: SessionState, args: {
|
|
52
|
+
refId: string;
|
|
53
|
+
expected: string;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
success: boolean;
|
|
56
|
+
message: string;
|
|
57
|
+
actual: string;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Assert element attribute equals expected value
|
|
61
|
+
*/
|
|
62
|
+
export declare function assertAttribute(session: SessionState, args: {
|
|
63
|
+
refId: string;
|
|
64
|
+
name: string;
|
|
65
|
+
expected: string;
|
|
66
|
+
}): Promise<{
|
|
67
|
+
success: boolean;
|
|
68
|
+
message: string;
|
|
69
|
+
actual: string;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* Assert element property equals expected value
|
|
73
|
+
*/
|
|
74
|
+
export declare function assertProperty(session: SessionState, args: {
|
|
75
|
+
refId: string;
|
|
76
|
+
name: string;
|
|
77
|
+
expected: any;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
success: boolean;
|
|
80
|
+
message: string;
|
|
81
|
+
actual: any;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Assert page data equals expected value
|
|
85
|
+
*/
|
|
86
|
+
export declare function assertData(session: SessionState, args: {
|
|
87
|
+
path?: string;
|
|
88
|
+
expected: any;
|
|
89
|
+
pagePath?: string;
|
|
90
|
+
}): Promise<{
|
|
91
|
+
success: boolean;
|
|
92
|
+
message: string;
|
|
93
|
+
actual: any;
|
|
94
|
+
}>;
|
|
95
|
+
/**
|
|
96
|
+
* Assert element is visible (has non-zero size)
|
|
97
|
+
*/
|
|
98
|
+
export declare function assertVisible(session: SessionState, args: {
|
|
99
|
+
refId: string;
|
|
100
|
+
}): Promise<{
|
|
101
|
+
success: boolean;
|
|
102
|
+
message: string;
|
|
103
|
+
size: {
|
|
104
|
+
width: number;
|
|
105
|
+
height: number;
|
|
106
|
+
};
|
|
107
|
+
}>;
|
|
108
|
+
//# sourceMappingURL=assert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/tools/assert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,CAiCD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,CA6CD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAiCD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAiCD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAiCD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAkCD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,GAAG,CAAA;CACd,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,GAAG,CAAA;CACZ,CAAC,CAkCD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,GAAG,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,GAAG,CAAA;CACZ,CAAC,CAkCD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAA;CACd,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC,CAAC,CA8BD"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assert tools for MCP server
|
|
3
|
+
* Provides assertion utilities for testing mini program functionality
|
|
4
|
+
*/
|
|
5
|
+
import * as pageTools from './page.js';
|
|
6
|
+
import * as elementTools from './element.js';
|
|
7
|
+
/**
|
|
8
|
+
* Assert that an element exists on the page
|
|
9
|
+
*/
|
|
10
|
+
export async function assertExists(session, args) {
|
|
11
|
+
const { selector, pagePath } = args;
|
|
12
|
+
const logger = session.logger;
|
|
13
|
+
try {
|
|
14
|
+
logger?.info('Asserting element exists', { selector, pagePath });
|
|
15
|
+
// Try to query the element
|
|
16
|
+
const result = await pageTools.query(session, {
|
|
17
|
+
selector,
|
|
18
|
+
pagePath,
|
|
19
|
+
save: false,
|
|
20
|
+
});
|
|
21
|
+
if (!result.exists) {
|
|
22
|
+
throw new Error(`Assertion failed: Element not found with selector: ${selector}`);
|
|
23
|
+
}
|
|
24
|
+
logger?.info('Element exists assertion passed', { selector });
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
message: `Element exists: ${selector}`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
32
|
+
logger?.error('Element exists assertion failed', {
|
|
33
|
+
error: errorMessage,
|
|
34
|
+
selector,
|
|
35
|
+
});
|
|
36
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Assert that an element does not exist on the page
|
|
41
|
+
*/
|
|
42
|
+
export async function assertNotExists(session, args) {
|
|
43
|
+
const { selector, pagePath } = args;
|
|
44
|
+
const logger = session.logger;
|
|
45
|
+
try {
|
|
46
|
+
logger?.info('Asserting element does not exist', { selector, pagePath });
|
|
47
|
+
// Try to query the element
|
|
48
|
+
const result = await pageTools.query(session, {
|
|
49
|
+
selector,
|
|
50
|
+
pagePath,
|
|
51
|
+
save: false,
|
|
52
|
+
});
|
|
53
|
+
if (result.exists) {
|
|
54
|
+
throw new Error(`Assertion failed: Element should not exist but found with selector: ${selector}`);
|
|
55
|
+
}
|
|
56
|
+
logger?.info('Element not exists assertion passed', { selector });
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
message: `Element does not exist: ${selector}`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
64
|
+
// If error is "Element not found", the assertion passes
|
|
65
|
+
if (errorMessage.includes('Element not found')) {
|
|
66
|
+
logger?.info('Element not exists assertion passed', { selector });
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
message: `Element does not exist: ${selector}`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
logger?.error('Element not exists assertion failed', {
|
|
73
|
+
error: errorMessage,
|
|
74
|
+
selector,
|
|
75
|
+
});
|
|
76
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Assert element text equals expected value
|
|
81
|
+
*/
|
|
82
|
+
export async function assertText(session, args) {
|
|
83
|
+
const { refId, expected } = args;
|
|
84
|
+
const logger = session.logger;
|
|
85
|
+
try {
|
|
86
|
+
logger?.info('Asserting element text', { refId, expected });
|
|
87
|
+
const result = await elementTools.getText(session, { refId });
|
|
88
|
+
const actual = result.text;
|
|
89
|
+
if (actual !== expected) {
|
|
90
|
+
throw new Error(`Assertion failed: Text mismatch. Expected: "${expected}", Actual: "${actual}"`);
|
|
91
|
+
}
|
|
92
|
+
logger?.info('Text assertion passed', { refId, expected, actual });
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
message: `Text matches: "${expected}"`,
|
|
96
|
+
actual,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
101
|
+
logger?.error('Text assertion failed', {
|
|
102
|
+
error: errorMessage,
|
|
103
|
+
refId,
|
|
104
|
+
expected,
|
|
105
|
+
});
|
|
106
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Assert element text contains expected substring
|
|
111
|
+
*/
|
|
112
|
+
export async function assertTextContains(session, args) {
|
|
113
|
+
const { refId, expected } = args;
|
|
114
|
+
const logger = session.logger;
|
|
115
|
+
try {
|
|
116
|
+
logger?.info('Asserting element text contains', { refId, expected });
|
|
117
|
+
const result = await elementTools.getText(session, { refId });
|
|
118
|
+
const actual = result.text;
|
|
119
|
+
if (!actual.includes(expected)) {
|
|
120
|
+
throw new Error(`Assertion failed: Text does not contain expected substring. Expected to contain: "${expected}", Actual: "${actual}"`);
|
|
121
|
+
}
|
|
122
|
+
logger?.info('Text contains assertion passed', { refId, expected, actual });
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
message: `Text contains: "${expected}"`,
|
|
126
|
+
actual,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
131
|
+
logger?.error('Text contains assertion failed', {
|
|
132
|
+
error: errorMessage,
|
|
133
|
+
refId,
|
|
134
|
+
expected,
|
|
135
|
+
});
|
|
136
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Assert element value equals expected value
|
|
141
|
+
*/
|
|
142
|
+
export async function assertValue(session, args) {
|
|
143
|
+
const { refId, expected } = args;
|
|
144
|
+
const logger = session.logger;
|
|
145
|
+
try {
|
|
146
|
+
logger?.info('Asserting element value', { refId, expected });
|
|
147
|
+
const result = await elementTools.getValue(session, { refId });
|
|
148
|
+
const actual = result.value;
|
|
149
|
+
if (actual !== expected) {
|
|
150
|
+
throw new Error(`Assertion failed: Value mismatch. Expected: "${expected}", Actual: "${actual}"`);
|
|
151
|
+
}
|
|
152
|
+
logger?.info('Value assertion passed', { refId, expected, actual });
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
message: `Value matches: "${expected}"`,
|
|
156
|
+
actual,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
161
|
+
logger?.error('Value assertion failed', {
|
|
162
|
+
error: errorMessage,
|
|
163
|
+
refId,
|
|
164
|
+
expected,
|
|
165
|
+
});
|
|
166
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Assert element attribute equals expected value
|
|
171
|
+
*/
|
|
172
|
+
export async function assertAttribute(session, args) {
|
|
173
|
+
const { refId, name, expected } = args;
|
|
174
|
+
const logger = session.logger;
|
|
175
|
+
try {
|
|
176
|
+
logger?.info('Asserting element attribute', { refId, name, expected });
|
|
177
|
+
const result = await elementTools.getAttribute(session, { refId, name });
|
|
178
|
+
const actual = result.value;
|
|
179
|
+
if (actual !== expected) {
|
|
180
|
+
throw new Error(`Assertion failed: Attribute "${name}" mismatch. Expected: "${expected}", Actual: "${actual}"`);
|
|
181
|
+
}
|
|
182
|
+
logger?.info('Attribute assertion passed', { refId, name, expected, actual });
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
message: `Attribute "${name}" matches: "${expected}"`,
|
|
186
|
+
actual,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
191
|
+
logger?.error('Attribute assertion failed', {
|
|
192
|
+
error: errorMessage,
|
|
193
|
+
refId,
|
|
194
|
+
name,
|
|
195
|
+
expected,
|
|
196
|
+
});
|
|
197
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Assert element property equals expected value
|
|
202
|
+
*/
|
|
203
|
+
export async function assertProperty(session, args) {
|
|
204
|
+
const { refId, name, expected } = args;
|
|
205
|
+
const logger = session.logger;
|
|
206
|
+
try {
|
|
207
|
+
logger?.info('Asserting element property', { refId, name, expected });
|
|
208
|
+
const result = await elementTools.getProperty(session, { refId, name });
|
|
209
|
+
const actual = result.value;
|
|
210
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
211
|
+
throw new Error(`Assertion failed: Property "${name}" mismatch. Expected: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`);
|
|
212
|
+
}
|
|
213
|
+
logger?.info('Property assertion passed', { refId, name, expected, actual });
|
|
214
|
+
return {
|
|
215
|
+
success: true,
|
|
216
|
+
message: `Property "${name}" matches`,
|
|
217
|
+
actual,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
222
|
+
logger?.error('Property assertion failed', {
|
|
223
|
+
error: errorMessage,
|
|
224
|
+
refId,
|
|
225
|
+
name,
|
|
226
|
+
expected,
|
|
227
|
+
});
|
|
228
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Assert page data equals expected value
|
|
233
|
+
*/
|
|
234
|
+
export async function assertData(session, args) {
|
|
235
|
+
const { path, expected, pagePath } = args;
|
|
236
|
+
const logger = session.logger;
|
|
237
|
+
try {
|
|
238
|
+
logger?.info('Asserting page data', { path, expected, pagePath });
|
|
239
|
+
const result = await pageTools.getData(session, { path, pagePath });
|
|
240
|
+
const actual = result.data;
|
|
241
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
242
|
+
throw new Error(`Assertion failed: Page data${path ? ` at path "${path}"` : ''} mismatch. Expected: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`);
|
|
243
|
+
}
|
|
244
|
+
logger?.info('Data assertion passed', { path, expected, actual, pagePath });
|
|
245
|
+
return {
|
|
246
|
+
success: true,
|
|
247
|
+
message: `Page data${path ? ` at "${path}"` : ''} matches`,
|
|
248
|
+
actual,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
253
|
+
logger?.error('Data assertion failed', {
|
|
254
|
+
error: errorMessage,
|
|
255
|
+
path,
|
|
256
|
+
expected,
|
|
257
|
+
pagePath,
|
|
258
|
+
});
|
|
259
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Assert element is visible (has non-zero size)
|
|
264
|
+
*/
|
|
265
|
+
export async function assertVisible(session, args) {
|
|
266
|
+
const { refId } = args;
|
|
267
|
+
const logger = session.logger;
|
|
268
|
+
try {
|
|
269
|
+
logger?.info('Asserting element is visible', { refId });
|
|
270
|
+
const result = await elementTools.getSize(session, { refId });
|
|
271
|
+
const size = result.size;
|
|
272
|
+
if (!size || size.width === 0 || size.height === 0) {
|
|
273
|
+
throw new Error(`Assertion failed: Element is not visible. Size: ${JSON.stringify(size)}`);
|
|
274
|
+
}
|
|
275
|
+
logger?.info('Visible assertion passed', { refId, size });
|
|
276
|
+
return {
|
|
277
|
+
success: true,
|
|
278
|
+
message: `Element is visible`,
|
|
279
|
+
size,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
284
|
+
logger?.error('Visible assertion failed', {
|
|
285
|
+
error: errorMessage,
|
|
286
|
+
refId,
|
|
287
|
+
});
|
|
288
|
+
throw new Error(`Assertion failed: ${errorMessage}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/tools/assert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automator tool implementations
|
|
3
|
+
* Handles launch, connect, disconnect, and close operations
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Launch WeChat DevTools and connect to miniprogram
|
|
8
|
+
*/
|
|
9
|
+
export declare function launch(session: SessionState, args: {
|
|
10
|
+
projectPath: string;
|
|
11
|
+
cliPath?: string;
|
|
12
|
+
port?: number;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
port?: number;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Connect to an already running WeChat DevTools instance
|
|
20
|
+
* Note: The port must be configured in WeChat DevTools settings before connecting
|
|
21
|
+
*/
|
|
22
|
+
export declare function connect(session: SessionState, args?: {
|
|
23
|
+
port?: number;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
success: boolean;
|
|
26
|
+
message: string;
|
|
27
|
+
port?: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Disconnect from miniprogram but keep IDE process running
|
|
31
|
+
*/
|
|
32
|
+
export declare function disconnect(session: SessionState): Promise<{
|
|
33
|
+
success: boolean;
|
|
34
|
+
message: string;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Close miniprogram session completely
|
|
38
|
+
* This will disconnect and cleanup all resources
|
|
39
|
+
* The session itself will be deleted by the caller
|
|
40
|
+
*/
|
|
41
|
+
export declare function close(session: SessionState): Promise<{
|
|
42
|
+
success: boolean;
|
|
43
|
+
message: string;
|
|
44
|
+
}>;
|
|
45
|
+
//# sourceMappingURL=automator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automator.d.ts","sourceRoot":"","sources":["../../src/tools/automator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAY/C;;GAEG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GACA,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC,CAkDD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAA;CACT,GACL,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC,CA8CD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,CA6CD;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,CAwCD"}
|