@weapp-vite/mcp 1.2.1 → 1.3.1
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 +56 -0
- package/dist/index.d.mts +67 -1
- package/dist/index.d.ts +67 -1
- package/dist/index.mjs +1660 -219
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -35,6 +35,16 @@ const handle = await startWeappViteMcpServer({
|
|
|
35
35
|
await handle.close?.()
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
`streamable-http` 模式会同时暴露 DevTools runtime REST 接口,默认前缀为
|
|
39
|
+
`/api/weapp/devtools`。可以通过 `restEndpoint` 调整,或设为 `false` 关闭:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const handle = await startWeappViteMcpServer({
|
|
43
|
+
transport: 'streamable-http',
|
|
44
|
+
restEndpoint: '/api/weapp/devtools',
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
38
48
|
## 主要 Tools
|
|
39
49
|
|
|
40
50
|
- `workspace_catalog`: 输出 `weapp-vite / wevu / wevu-compiler` 目录、版本、脚本
|
|
@@ -47,6 +57,50 @@ await handle.close?.()
|
|
|
47
57
|
- `compare_weapp_screenshot`: 面向“截图对比 / diff / baseline / 视觉回归”语义,执行 `weapp-vite compare --json`
|
|
48
58
|
- `run_repo_command`: 执行仓库级命令(`pnpm/node/git/rg`)
|
|
49
59
|
|
|
60
|
+
### DevTools Runtime Tools
|
|
61
|
+
|
|
62
|
+
这些工具复用 `weapp-ide-cli` 的 automator 会话能力,面向已经能被微信开发者工具打开的小程序项目:
|
|
63
|
+
|
|
64
|
+
- `weapp_devtools_connect`: 确认 DevTools automator 会话可用
|
|
65
|
+
- `weapp_devtools_active_page` / `weapp_devtools_page_stack`: 读取当前页面与页面栈
|
|
66
|
+
- `weapp_devtools_route`: 执行 `navigateTo` / `redirectTo` / `reLaunch` / `switchTab` / `navigateBack`
|
|
67
|
+
- `weapp_devtools_capture`: 截取当前小程序视口
|
|
68
|
+
- `weapp_devtools_host_api`: 调用 `wx.*` API
|
|
69
|
+
- `weapp_devtools_console`: 读取 MCP 会话期间捕获的 console/exception 日志
|
|
70
|
+
- `weapp_runtime_find_node` / `weapp_runtime_find_nodes` / `weapp_runtime_wait_node`: 查询和等待页面元素
|
|
71
|
+
- `weapp_runtime_page_state` / `weapp_runtime_update_page_state` / `weapp_runtime_invoke_page`: 操作页面实例
|
|
72
|
+
- `weapp_runtime_tap_node` / `weapp_runtime_input_node`: 操作页面元素
|
|
73
|
+
- `weapp_runtime_component_state` / `weapp_runtime_update_component_state` / `weapp_runtime_invoke_component`: 操作组件实例
|
|
74
|
+
- `weapp_runtime_find_child` / `weapp_runtime_find_children`: 查询组件内部元素
|
|
75
|
+
- `weapp_runtime_node_markup` / `weapp_runtime_node_styles` / `weapp_runtime_node_attrs` / `weapp_runtime_measure_node`: 读取元素结构与渲染信息
|
|
76
|
+
|
|
77
|
+
建议调用顺序:先 `weapp_devtools_connect`,再 `weapp_devtools_active_page`,之后再执行 `weapp_devtools_capture` 或 `weapp_runtime_*`。
|
|
78
|
+
|
|
79
|
+
### DevTools Runtime REST
|
|
80
|
+
|
|
81
|
+
REST 接口和 MCP runtime tools 复用同一个 automator 会话管理器,适合脚本或其他非 MCP 客户端连续操控模拟器:
|
|
82
|
+
|
|
83
|
+
- `POST /api/weapp/devtools/connect`
|
|
84
|
+
- `POST /api/weapp/devtools/route`
|
|
85
|
+
- `GET|POST /api/weapp/devtools/active-page`
|
|
86
|
+
- `GET|POST /api/weapp/devtools/page-stack`
|
|
87
|
+
- `POST /api/weapp/devtools/capture`
|
|
88
|
+
- `POST /api/weapp/devtools/host-api`
|
|
89
|
+
- `GET|DELETE /api/weapp/devtools/console`
|
|
90
|
+
- `DELETE /api/weapp/devtools/session`
|
|
91
|
+
|
|
92
|
+
示例:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
curl -X POST http://127.0.0.1:3088/api/weapp/devtools/route \
|
|
96
|
+
-H 'content-type: application/json' \
|
|
97
|
+
-d '{"projectPath":"dist/build/mp-weixin","transition":"reLaunch","path":"pages/index/index"}'
|
|
98
|
+
|
|
99
|
+
curl -X POST http://127.0.0.1:3088/api/weapp/devtools/capture \
|
|
100
|
+
-H 'content-type: application/json' \
|
|
101
|
+
-d '{"projectPath":"dist/build/mp-weixin","outputPath":".tmp/home.png"}'
|
|
102
|
+
```
|
|
103
|
+
|
|
50
104
|
## 主要 Resources
|
|
51
105
|
|
|
52
106
|
- `weapp-vite://workspace/catalog`
|
|
@@ -64,6 +118,8 @@ await handle.close?.()
|
|
|
64
118
|
|
|
65
119
|
- `plan-weapp-vite-change`: 生成 weapp-vite/wevu 改造计划提示词
|
|
66
120
|
- `debug-wevu-runtime`: 生成 wevu runtime 排查提示词
|
|
121
|
+
- `inspect-mini-program-page`: 连接 DevTools 并检查页面渲染状态
|
|
122
|
+
- `recover-mini-program-connection`: 按固定顺序恢复 automator 连接
|
|
67
123
|
|
|
68
124
|
## 开发
|
|
69
125
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DevtoolsRuntimeHooks } from '@weapp-vite/devtools-runtime';
|
|
1
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
3
|
|
|
3
4
|
declare const MCP_SERVER_NAME = "@weapp-vite/mcp";
|
|
@@ -85,14 +86,78 @@ declare function searchTextInDirectory(root: string, query: string, options?: {
|
|
|
85
86
|
maxResults?: number;
|
|
86
87
|
}): Promise<SearchMatch[]>;
|
|
87
88
|
|
|
89
|
+
interface MiniProgramElement {
|
|
90
|
+
tagName?: string;
|
|
91
|
+
$?: (selector: string) => Promise<MiniProgramElement | null>;
|
|
92
|
+
$$?: (selector: string) => Promise<MiniProgramElement[]>;
|
|
93
|
+
tap: () => Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
interface MiniProgramPage {
|
|
96
|
+
path: string;
|
|
97
|
+
query?: unknown;
|
|
98
|
+
$: (selector: string) => Promise<MiniProgramElement | null>;
|
|
99
|
+
$$?: (selector: string) => Promise<MiniProgramElement[]>;
|
|
100
|
+
data: (path?: string) => Promise<unknown>;
|
|
101
|
+
size: () => Promise<unknown>;
|
|
102
|
+
scrollTop: () => Promise<unknown>;
|
|
103
|
+
waitFor: (milliseconds: number) => Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
interface MiniProgramLike {
|
|
106
|
+
on: (name: 'console' | 'exception', handler: (payload: unknown) => void) => void;
|
|
107
|
+
off?: (name: 'console' | 'exception', handler: (payload: unknown) => void) => void;
|
|
108
|
+
currentPage: () => Promise<MiniProgramPage>;
|
|
109
|
+
systemInfo: () => Promise<unknown>;
|
|
110
|
+
pageStack: () => Promise<MiniProgramPage[]>;
|
|
111
|
+
navigateTo: (url: string) => Promise<MiniProgramPage>;
|
|
112
|
+
redirectTo: (url: string) => Promise<MiniProgramPage>;
|
|
113
|
+
reLaunch: (url: string) => Promise<MiniProgramPage>;
|
|
114
|
+
switchTab: (url: string) => Promise<MiniProgramPage>;
|
|
115
|
+
navigateBack: () => Promise<MiniProgramPage>;
|
|
116
|
+
screenshot: () => Promise<string | Uint8Array>;
|
|
117
|
+
callWxMethod: (method: string, ...args: unknown[]) => Promise<unknown>;
|
|
118
|
+
}
|
|
119
|
+
interface RuntimeConnectionInput {
|
|
120
|
+
projectPath: string;
|
|
121
|
+
timeout?: number;
|
|
122
|
+
preferOpenedSession?: boolean;
|
|
123
|
+
}
|
|
124
|
+
interface RuntimeConsoleLogEntry {
|
|
125
|
+
level: string;
|
|
126
|
+
message: string;
|
|
127
|
+
timestamp: number;
|
|
128
|
+
raw: unknown;
|
|
129
|
+
}
|
|
130
|
+
declare class RuntimeSessionManager {
|
|
131
|
+
private readonly workspaceRoot;
|
|
132
|
+
private readonly runtimeHooks;
|
|
133
|
+
private readonly logs;
|
|
134
|
+
private readonly attachedSessions;
|
|
135
|
+
private readonly maxLogs;
|
|
136
|
+
constructor(workspaceRoot: string, runtimeHooks?: DevtoolsRuntimeHooks);
|
|
137
|
+
close(input: RuntimeConnectionInput): Promise<void>;
|
|
138
|
+
clearLogs(): void;
|
|
139
|
+
getLogs(): RuntimeConsoleLogEntry[];
|
|
140
|
+
resolveProjectPath(projectPath: string): string;
|
|
141
|
+
resolveWorkspacePath(filePath: string): string;
|
|
142
|
+
withMiniProgram<T>(input: RuntimeConnectionInput, runner: (miniProgram: MiniProgramLike) => Promise<T>): Promise<T>;
|
|
143
|
+
withPage<T>(input: RuntimeConnectionInput, runner: (page: MiniProgramPage, miniProgram: MiniProgramLike) => Promise<T>): Promise<T>;
|
|
144
|
+
private attach;
|
|
145
|
+
private detach;
|
|
146
|
+
private pushLog;
|
|
147
|
+
}
|
|
148
|
+
|
|
88
149
|
interface CreateServerOptions {
|
|
150
|
+
runtimeHooks?: DevtoolsRuntimeHooks;
|
|
89
151
|
workspaceRoot?: string;
|
|
90
152
|
}
|
|
91
153
|
declare function createWeappViteMcpServer(options?: CreateServerOptions): Promise<{
|
|
154
|
+
runtimeManager: RuntimeSessionManager;
|
|
92
155
|
server: McpServer;
|
|
93
156
|
workspaceRoot: string;
|
|
94
157
|
}>;
|
|
95
158
|
|
|
159
|
+
declare const DEFAULT_RUNTIME_REST_ENDPOINT = "/api/weapp/devtools";
|
|
160
|
+
|
|
96
161
|
declare const DEFAULT_MCP_HOST = "127.0.0.1";
|
|
97
162
|
declare const DEFAULT_MCP_PORT = 3088;
|
|
98
163
|
declare const DEFAULT_MCP_ENDPOINT = "/mcp";
|
|
@@ -101,6 +166,7 @@ interface StartMcpServerOptions extends CreateServerOptions {
|
|
|
101
166
|
host?: string;
|
|
102
167
|
port?: number;
|
|
103
168
|
endpoint?: string;
|
|
169
|
+
restEndpoint?: string | false;
|
|
104
170
|
unref?: boolean;
|
|
105
171
|
quiet?: boolean;
|
|
106
172
|
onReady?: (message: string) => void;
|
|
@@ -135,5 +201,5 @@ declare function resolveWorkspaceRoot(start?: string): string;
|
|
|
135
201
|
declare function assertInsideRoot(root: string, targetPath: string): string;
|
|
136
202
|
declare function resolveSubPath(root: string, relativePath: string): string;
|
|
137
203
|
|
|
138
|
-
export { DEFAULT_MAX_FILE_CHARS, DEFAULT_MAX_OUTPUT_CHARS, DEFAULT_MAX_RESULTS, DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_TIMEOUT_MS, EXPOSED_PACKAGES, MCP_SERVER_NAME, MCP_SERVER_VERSION, SKIPPED_DIR_NAMES, assertInsideRoot, createWeappViteMcpServer, formatJson, listFilesInDirectory, loadExposedCatalog, loadPackageSummary, normalizeErrorMessage, readFileContent, resolveSubPath, resolveWorkspaceRoot, runCommand, searchTextInDirectory, startStdioServer, startWeappViteMcpServer, toToolError, toToolResult };
|
|
204
|
+
export { DEFAULT_MAX_FILE_CHARS, DEFAULT_MAX_OUTPUT_CHARS, DEFAULT_MAX_RESULTS, DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_RUNTIME_REST_ENDPOINT, DEFAULT_TIMEOUT_MS, EXPOSED_PACKAGES, MCP_SERVER_NAME, MCP_SERVER_VERSION, SKIPPED_DIR_NAMES, assertInsideRoot, createWeappViteMcpServer, formatJson, listFilesInDirectory, loadExposedCatalog, loadPackageSummary, normalizeErrorMessage, readFileContent, resolveSubPath, resolveWorkspaceRoot, runCommand, searchTextInDirectory, startStdioServer, startWeappViteMcpServer, toToolError, toToolResult };
|
|
139
205
|
export type { CommandResult, CreateServerOptions, ExposedPackageId, ExposedPackageSummary, McpServerHandle, SearchMatch, StartMcpServerOptions };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DevtoolsRuntimeHooks } from '@weapp-vite/devtools-runtime';
|
|
1
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
3
|
|
|
3
4
|
declare const MCP_SERVER_NAME = "@weapp-vite/mcp";
|
|
@@ -85,14 +86,78 @@ declare function searchTextInDirectory(root: string, query: string, options?: {
|
|
|
85
86
|
maxResults?: number;
|
|
86
87
|
}): Promise<SearchMatch[]>;
|
|
87
88
|
|
|
89
|
+
interface MiniProgramElement {
|
|
90
|
+
tagName?: string;
|
|
91
|
+
$?: (selector: string) => Promise<MiniProgramElement | null>;
|
|
92
|
+
$$?: (selector: string) => Promise<MiniProgramElement[]>;
|
|
93
|
+
tap: () => Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
interface MiniProgramPage {
|
|
96
|
+
path: string;
|
|
97
|
+
query?: unknown;
|
|
98
|
+
$: (selector: string) => Promise<MiniProgramElement | null>;
|
|
99
|
+
$$?: (selector: string) => Promise<MiniProgramElement[]>;
|
|
100
|
+
data: (path?: string) => Promise<unknown>;
|
|
101
|
+
size: () => Promise<unknown>;
|
|
102
|
+
scrollTop: () => Promise<unknown>;
|
|
103
|
+
waitFor: (milliseconds: number) => Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
interface MiniProgramLike {
|
|
106
|
+
on: (name: 'console' | 'exception', handler: (payload: unknown) => void) => void;
|
|
107
|
+
off?: (name: 'console' | 'exception', handler: (payload: unknown) => void) => void;
|
|
108
|
+
currentPage: () => Promise<MiniProgramPage>;
|
|
109
|
+
systemInfo: () => Promise<unknown>;
|
|
110
|
+
pageStack: () => Promise<MiniProgramPage[]>;
|
|
111
|
+
navigateTo: (url: string) => Promise<MiniProgramPage>;
|
|
112
|
+
redirectTo: (url: string) => Promise<MiniProgramPage>;
|
|
113
|
+
reLaunch: (url: string) => Promise<MiniProgramPage>;
|
|
114
|
+
switchTab: (url: string) => Promise<MiniProgramPage>;
|
|
115
|
+
navigateBack: () => Promise<MiniProgramPage>;
|
|
116
|
+
screenshot: () => Promise<string | Uint8Array>;
|
|
117
|
+
callWxMethod: (method: string, ...args: unknown[]) => Promise<unknown>;
|
|
118
|
+
}
|
|
119
|
+
interface RuntimeConnectionInput {
|
|
120
|
+
projectPath: string;
|
|
121
|
+
timeout?: number;
|
|
122
|
+
preferOpenedSession?: boolean;
|
|
123
|
+
}
|
|
124
|
+
interface RuntimeConsoleLogEntry {
|
|
125
|
+
level: string;
|
|
126
|
+
message: string;
|
|
127
|
+
timestamp: number;
|
|
128
|
+
raw: unknown;
|
|
129
|
+
}
|
|
130
|
+
declare class RuntimeSessionManager {
|
|
131
|
+
private readonly workspaceRoot;
|
|
132
|
+
private readonly runtimeHooks;
|
|
133
|
+
private readonly logs;
|
|
134
|
+
private readonly attachedSessions;
|
|
135
|
+
private readonly maxLogs;
|
|
136
|
+
constructor(workspaceRoot: string, runtimeHooks?: DevtoolsRuntimeHooks);
|
|
137
|
+
close(input: RuntimeConnectionInput): Promise<void>;
|
|
138
|
+
clearLogs(): void;
|
|
139
|
+
getLogs(): RuntimeConsoleLogEntry[];
|
|
140
|
+
resolveProjectPath(projectPath: string): string;
|
|
141
|
+
resolveWorkspacePath(filePath: string): string;
|
|
142
|
+
withMiniProgram<T>(input: RuntimeConnectionInput, runner: (miniProgram: MiniProgramLike) => Promise<T>): Promise<T>;
|
|
143
|
+
withPage<T>(input: RuntimeConnectionInput, runner: (page: MiniProgramPage, miniProgram: MiniProgramLike) => Promise<T>): Promise<T>;
|
|
144
|
+
private attach;
|
|
145
|
+
private detach;
|
|
146
|
+
private pushLog;
|
|
147
|
+
}
|
|
148
|
+
|
|
88
149
|
interface CreateServerOptions {
|
|
150
|
+
runtimeHooks?: DevtoolsRuntimeHooks;
|
|
89
151
|
workspaceRoot?: string;
|
|
90
152
|
}
|
|
91
153
|
declare function createWeappViteMcpServer(options?: CreateServerOptions): Promise<{
|
|
154
|
+
runtimeManager: RuntimeSessionManager;
|
|
92
155
|
server: McpServer;
|
|
93
156
|
workspaceRoot: string;
|
|
94
157
|
}>;
|
|
95
158
|
|
|
159
|
+
declare const DEFAULT_RUNTIME_REST_ENDPOINT = "/api/weapp/devtools";
|
|
160
|
+
|
|
96
161
|
declare const DEFAULT_MCP_HOST = "127.0.0.1";
|
|
97
162
|
declare const DEFAULT_MCP_PORT = 3088;
|
|
98
163
|
declare const DEFAULT_MCP_ENDPOINT = "/mcp";
|
|
@@ -101,6 +166,7 @@ interface StartMcpServerOptions extends CreateServerOptions {
|
|
|
101
166
|
host?: string;
|
|
102
167
|
port?: number;
|
|
103
168
|
endpoint?: string;
|
|
169
|
+
restEndpoint?: string | false;
|
|
104
170
|
unref?: boolean;
|
|
105
171
|
quiet?: boolean;
|
|
106
172
|
onReady?: (message: string) => void;
|
|
@@ -135,5 +201,5 @@ declare function resolveWorkspaceRoot(start?: string): string;
|
|
|
135
201
|
declare function assertInsideRoot(root: string, targetPath: string): string;
|
|
136
202
|
declare function resolveSubPath(root: string, relativePath: string): string;
|
|
137
203
|
|
|
138
|
-
export { DEFAULT_MAX_FILE_CHARS, DEFAULT_MAX_OUTPUT_CHARS, DEFAULT_MAX_RESULTS, DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_TIMEOUT_MS, EXPOSED_PACKAGES, MCP_SERVER_NAME, MCP_SERVER_VERSION, SKIPPED_DIR_NAMES, assertInsideRoot, createWeappViteMcpServer, formatJson, listFilesInDirectory, loadExposedCatalog, loadPackageSummary, normalizeErrorMessage, readFileContent, resolveSubPath, resolveWorkspaceRoot, runCommand, searchTextInDirectory, startStdioServer, startWeappViteMcpServer, toToolError, toToolResult };
|
|
204
|
+
export { DEFAULT_MAX_FILE_CHARS, DEFAULT_MAX_OUTPUT_CHARS, DEFAULT_MAX_RESULTS, DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_RUNTIME_REST_ENDPOINT, DEFAULT_TIMEOUT_MS, EXPOSED_PACKAGES, MCP_SERVER_NAME, MCP_SERVER_VERSION, SKIPPED_DIR_NAMES, assertInsideRoot, createWeappViteMcpServer, formatJson, listFilesInDirectory, loadExposedCatalog, loadPackageSummary, normalizeErrorMessage, readFileContent, resolveSubPath, resolveWorkspaceRoot, runCommand, searchTextInDirectory, startStdioServer, startWeappViteMcpServer, toToolError, toToolResult };
|
|
139
205
|
export type { CommandResult, CreateServerOptions, ExposedPackageId, ExposedPackageSummary, McpServerHandle, SearchMatch, StartMcpServerOptions };
|