ms-vite-plugin 1.2.0 → 1.2.2

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/docs/SKILL.md CHANGED
@@ -1,24 +1,54 @@
1
1
  ---
2
2
  name: kuaijs-mcp
3
- description: 快点JS专用 MCP 开发助手。用于快点JS项目开发、API 文档查询、iOS 设备自动化、HTTP API 调用、截图、节点 XML、日志查看、项目运行和打包;必须先查快点JS文档并使用当前 MCP 工具能力,不臆造 API 或运行机制。
3
+ description: 快点JS专用开发助手。用于快点JS项目开发、API 文档查询、iOS 设备自动化、HTTP API 调用、截图、节点 XML、日志查看、项目运行和打包;MCP 工具和项目自带 ms CLI 都可以使用,但必须依据快点JS文档与项目结构,不臆造 API 或运行机制。
4
4
  ---
5
5
 
6
- # 快点JS MCP 技能
6
+ # 快点JS开发技能
7
7
 
8
8
  ## 使用场景
9
9
 
10
10
  当任务涉及快点JS项目开发、快点JS API 查询、iOS 设备自动化、HTTP API 调用、截图、节点 XML、日志、项目运行或打包时,使用本技能。
11
11
 
12
- 你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。必须严格依据快点JS官方 API 文档、当前项目结构和当前 MCP 工具能力回答问题与编写代码。
12
+ 你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。必须严格依据快点JS官方 API 文档、当前项目结构、当前 MCP 工具能力和项目自带命令能力回答问题与编写代码。
13
13
 
14
14
  ## 基本约束
15
15
 
16
16
  - 不要臆造不存在的 API、对象、参数、行为或运行机制。
17
17
  - 不要把快点JS当成普通 Node.js、浏览器或通用 Python 环境。
18
- - JavaScript 项目使用 JavaScript 文档与写法。
19
18
  - Python 项目使用 Python 文档与写法。
19
+ - JavaScript 项目使用 JavaScript 文档与写法。
20
20
  - 不要混用 JavaScript 与 Python API。
21
21
  - 文档未确认的能力必须明确说明无法确认,并给出保守方案。
22
+ - 快点JS Python 脚本不使用 CPython 编译校验;不要运行 `python -m py_compile`、`py_compile` 或类似命令。
23
+
24
+ ## 允许的执行方式
25
+
26
+ MCP 工具和项目命令都可以使用。
27
+
28
+ 优先使用 MCP 的情况:
29
+
30
+ - 查询快点JS API 文档。
31
+ - 查询 HTTP API 文档并通过 `http_api_call` 调用。
32
+ - 设置设备、设置工作区、运行项目、截图、抓节点树、读日志。
33
+
34
+ 可以使用命令的情况:
35
+
36
+ - MCP transport 断开或不可用。
37
+ - 用户明确要求使用命令。
38
+ - 需要快速验证项目本地 `ms` CLI 能力。
39
+ - 使用项目自带 KuaiJS CLI 进行同步、运行、停止、截图。
40
+
41
+ 允许的常用命令示例:
42
+
43
+ ```bash
44
+ npx ms --help
45
+ npx ms run -i <device-ip> --port <port>
46
+ npx ms run-ui -i <device-ip> --port <port>
47
+ npx ms screenshot -i <device-ip> --port <port> --format file --output <path>
48
+ npx ms stop -i <device-ip> --port <port>
49
+ ```
50
+
51
+ 使用 `curl` 调用设备 HTTP API 前,必须先通过 MCP HTTP API 文档或本地 HTTP API 文档确认接口存在、方法、路径、参数位置和返回结构。
22
52
 
23
53
  ## 目录职责
24
54
 
@@ -29,66 +59,67 @@ description: 快点JS专用 MCP 开发助手。用于快点JS项目开发、API
29
59
  - `res`:脚本运行真正依赖的资源文件,如图片、模板等。
30
60
  - `screenshot`:调试、预览和问题定位产生的截图。
31
61
 
32
- 截图不属于脚本资源,用户需要保留时默认建议保存到 `screenshot` 目录。只有脚本运行真正依赖的资源才放入 `res`。节点树、截图、长文本结果优先写入文件后再读取,避免响应被截断。
62
+ 截图不属于脚本资源,用户需要保留时默认保存到 `screenshot` 目录。只有脚本运行真正依赖的资源才放入 `res`。节点树、截图、长文本结果优先写入文件后再读取,避免响应被截断。
63
+
64
+ 不要把 `__pycache__` 或 `.pyc` 当成项目产物保留或同步;如果本地工具意外生成,清理掉。
33
65
 
34
66
  ## 文档工作流
35
67
 
36
68
  回答快点JS API 或编写脚本前,先确认语言并查询对应语言文档。
37
69
 
70
+ MCP 可用时:
71
+
38
72
  1. 使用 `set_docs_language` 设置语言:`js`、`js_zh` 或 `python`。
39
73
  2. 使用 `search_api_docs` 搜索相关模块或 API。
40
74
  3. 使用 `read_api_doc` 读取完整文档。
41
75
  4. 只依据已确认的文档内容回答或编写代码。
42
76
 
77
+ MCP 不可用时:
78
+
79
+ 1. 查阅项目本地文档,例如 `node_modules/ms-vite-plugin/docs/apipython/`、`node_modules/ms-vite-plugin/docs/httpapi/`。
80
+ 2. 只使用文档中已经确认的 API。
81
+ 3. 在回复中说明使用了本地文档作为 MCP fallback。
82
+
43
83
  ## HTTP API 工作流
44
84
 
45
85
  调用设备 HTTP API 前,必须查询 HTTP API 文档。
46
86
 
87
+ MCP 可用时:
88
+
47
89
  1. 使用 `search_http_api_docs` 搜索目标能力、中文标题或接口路径。
48
90
  2. 使用 `read_http_api_doc` 读取目标接口片段。
49
91
  3. 确认 `method`、`path`、参数位置、参数类型和返回结构。
50
92
  4. 使用 `http_api_call` 调用接口,并传入文档返回的 `docSlug`。
51
93
 
52
- 示例:
53
-
54
- ```json
55
- {
56
- "method": "GET",
57
- "path": "/api/status",
58
- "docSlug": "get-api-status"
59
- }
60
- ```
61
-
62
- 带 query 参数示例:
63
-
64
- ```json
65
- {
66
- "method": "GET",
67
- "path": "/api/control/click",
68
- "docSlug": "get-api-control-click",
69
- "query": {
70
- "x": 100,
71
- "y": 200,
72
- "duration": 20
73
- }
74
- }
75
- ```
94
+ 命令 fallback 时:
76
95
 
77
- `http_api_call` 只能调用 HTTP API 文档中声明过的接口,并且会校验 `docSlug`、`method`、`path` 是否匹配。
96
+ 1. 先在本地 HTTP API 文档中确认接口。
97
+ 2. 再用 `curl` 调用明确存在的接口。
98
+ 3. 不要把未确认的路径当成可用接口。
78
99
 
79
100
  ## 设备工作流
80
101
 
81
- 设备相关操作以 `set_device` 设置的 HTTP 设备为准。
102
+ 设备相关操作以用户指定的设备为准。当前常用测试设备是 `192.168.31.152:9800`,但用户给出新设备时必须使用新设备。
103
+
104
+ MCP 可用时:
82
105
 
83
106
  1. 使用 `get_device` 查看当前默认设备。
84
107
  2. 如果未设置设备,使用 `set_device` 设置设备 IP 和端口。
85
108
  3. 设置设备后,日志 SSE 后台订阅会自动启动。
86
109
  4. 使用 `get_logs` 获取日志缓存快照。
87
110
 
88
- UI 预览发起后不需要长时间等待结果,可以用 `take_screenshot` 查看当前界面效果。
111
+ 命令 fallback 时:
112
+
113
+ - 用 `npx ms run -i <device-ip> --port <port>` 运行脚本。
114
+ - 用 `npx ms screenshot -i <device-ip> --port <port> --format file --output <path>` 截图验证。
115
+ - 用 `npx ms stop -i <device-ip> --port <port>` 停止项目。
116
+
117
+ UI 预览发起后不需要长时间等待结果,可以用截图查看当前界面效果。
89
118
 
90
119
  ## 项目运行工作流
91
120
 
121
+ MCP 可用时:
122
+
92
123
  1. 使用 `set_workspace` 设置快点JS项目根目录。
93
124
  2. 使用 `get_workspace` 确认当前工作区。
94
125
  3. 使用 `run_project` 运行脚本项目。
@@ -96,6 +127,12 @@ UI 预览发起后不需要长时间等待结果,可以用 `take_screenshot`
96
127
  5. 使用 `stop_project` 停止当前设备上的项目。
97
128
  6. 使用 `package_project` 执行生产打包。
98
129
 
130
+ 命令可用时:
131
+
132
+ 1. 使用项目根目录执行 `npx ms --help` 确认 CLI。
133
+ 2. 使用 `npx ms run -i <device-ip> --port <port>` 同步并运行。
134
+ 3. 使用 `npx ms screenshot ...` 验证界面。
135
+
99
136
  工作区必须包含 `package.json` 和 `scripts/`。
100
137
 
101
138
  ## 工具分组
@@ -131,17 +168,17 @@ UI 预览发起后不需要长时间等待结果,可以用 `take_screenshot`
131
168
 
132
169
  - `http_api_call`
133
170
 
134
- 控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 通过 `search_http_api_docs`、`read_http_api_doc` 和 `http_api_call` 使用,不再依赖大量独立 MCP 工具。
171
+ 控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 通过 `search_http_api_docs`、`read_http_api_doc` 和 `http_api_call` 使用;命令 fallback 时可用已确认文档的 `curl` 调用。
135
172
 
136
173
  ## 禁止事项
137
174
 
138
175
  - 不要在没有查询文档的情况下回答 API 用法或编写 API 调用代码。
139
176
  - 不要调用 HTTP API 文档中未声明的接口。
140
177
  - 不要把完整 URL 传给 `http_api_call.path`。
141
- - 不要用 `http_api_call` 替代截图落文件、节点 XML 落文件、日志缓存、项目运行或项目打包工具。
178
+ - 不要用未确认的通用命令替代 KuaiJS MCP 或项目自带 `ms` CLI。
179
+ - 不要对 `scripts/*.py` 运行 `py_compile` 或把快点JS Python 当 CPython 编译。
142
180
  - 不要假设设备、工作区或运行环境已经准备好。
143
- - 不要执行通用构建命令替代 MCP 项目运行工具。
144
181
 
145
182
  ## 文档入口
146
183
 
147
- 所有 API 文档都通过 MCP 文档工具查询,不直接依赖或暴露本地文档路径。
184
+ 优先通过 MCP 文档工具查询 API 文档。MCP 不可用时,可以查阅项目本地 `node_modules/ms-vite-plugin/docs/` 文档作为 fallback,并在说明中明确这一点。
@@ -533,6 +533,48 @@ for (let i = 0; i < 5; i++) {
533
533
  }
534
534
  ```
535
535
 
536
+ ## W3C Actions
537
+
538
+ ### w3cActions - 执行 W3C Actions JSON
539
+
540
+ 直接提交 W3C Actions 请求体,适合执行多指、多阶段或自定义指针动作。
541
+
542
+ ```typescript
543
+ function w3cActions(json: { actions: Record<string, any>[]; [key: string]: any }): boolean;
544
+ ```
545
+
546
+ **参数说明:**
547
+
548
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
549
+ | ------ | ------ | -------- | ------ | --------------------------------- |
550
+ | `json` | object | 是 | - | W3C Actions 请求体,例如 `{ actions: [...] }` |
551
+
552
+ **返回值:**
553
+
554
+ | 类型 | 描述 |
555
+ | --------- | ------------ |
556
+ | `boolean` | 执行是否成功 |
557
+
558
+ **示例:**
559
+
560
+ ```typescript
561
+ const success = action.w3cActions({
562
+ actions: [
563
+ {
564
+ type: "pointer",
565
+ id: "finger1",
566
+ parameters: { pointerType: "touch" },
567
+ actions: [
568
+ { type: "pointerMove", duration: 0, x: 100, y: 200 },
569
+ { type: "pointerDown", button: 0 },
570
+ { type: "pause", duration: 20 },
571
+ { type: "pointerUp", button: 0 },
572
+ ],
573
+ },
574
+ ],
575
+ });
576
+ ```
577
+
536
578
  ## 动作构建器
537
579
 
538
580
  ActionBuilder 提供了更高级的多点触控操作能力,支持链式调用构建复杂的手势动作。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 功能概览
6
6
 
7
- - **应用管理**: 启动、停止、激活应用,获取前台应用信息
7
+ - **应用管理**: 启动、停止、激活应用,获取前台/后台应用信息和已安装应用列表
8
8
  - **锁屏控制**: 检查锁屏状态、锁屏和解锁操作
9
9
  - **剪贴板**: 读取和设置系统剪贴板内容
10
10
  - **URL 操作**: 打开网页链接或应用 URL Scheme
@@ -130,10 +130,93 @@ if (appInfo) {
130
130
  logi(`当前前台应用: ${appInfo.name}`);
131
131
  logi(`Bundle ID: ${appInfo.bundleId}`);
132
132
  logi(`进程 ID: ${appInfo.pid}`);
133
+ } else {
133
134
  logi("无法获取前台应用信息");
134
135
  }
135
136
  ```
136
137
 
138
+ #### backgroundAppInfos - 获取后台运行的应用列表。
139
+
140
+ ```typescript
141
+ function backgroundAppInfos(): {
142
+ bundleId: string;
143
+ name: string;
144
+ pid: number;
145
+ }[];
146
+ ```
147
+
148
+ **返回值:**
149
+
150
+ | 字段名 | 类型 | 描述 |
151
+ | ---------- | -------- | ------------------------ |
152
+ | `bundleId` | `string` | 应用 Bundle ID |
153
+ | `name` | `string` | 应用名称(不一定能取到) |
154
+ | `pid` | `number` | 进程 ID |
155
+
156
+ **说明:**
157
+
158
+ 该方法返回当前后台运行的应用信息列表,可用于查询仍在运行但不在前台显示的应用。
159
+
160
+ **示例:**
161
+
162
+ ```javascript
163
+ const apps = system.backgroundAppInfos();
164
+ for (const app of apps) {
165
+ logi(`${app.name}: ${app.bundleId} (${app.pid})`);
166
+ }
167
+ ```
168
+
169
+ #### getInstalledAppList - 获取已安装的应用列表。
170
+
171
+ ```typescript
172
+ function getInstalledAppList(): {
173
+ bundleVersion: string;
174
+ appName: string;
175
+ bundleIdentifier: string;
176
+ }[];
177
+ ```
178
+
179
+ **返回值:**
180
+
181
+ | 字段名 | 类型 | 描述 |
182
+ | ------------------ | -------- | -------------- |
183
+ | `bundleVersion` | `string` | 应用版本号 |
184
+ | `appName` | `string` | 应用显示名称 |
185
+ | `bundleIdentifier` | `string` | 应用 Bundle ID |
186
+
187
+ **说明:**
188
+
189
+ 该方法返回设备上已安装应用的信息列表,可用于查询应用名称、Bundle ID 和版本号,便于后续调用 `startApp`、`stopApp`、`activateApp` 等应用管理方法。
190
+
191
+ **示例:**
192
+
193
+ ```javascript
194
+ const apps = system.getInstalledAppList();
195
+ for (const app of apps) {
196
+ logi(`${app.appName}: ${app.bundleIdentifier} (${app.bundleVersion})`);
197
+ }
198
+ ```
199
+
200
+ #### recent - 打开 App 切换器。
201
+
202
+ ```typescript
203
+ function recent(): boolean;
204
+ ```
205
+
206
+ **返回值:**
207
+
208
+ | 类型 | 描述 |
209
+ | --------- | ---------------------- |
210
+ | `boolean` | 是否成功打开 App 切换器 |
211
+
212
+ **示例:**
213
+
214
+ ```javascript
215
+ if (system.recent()) {
216
+ logi("已打开 App 切换器");
217
+ }
218
+ ```
219
+
137
220
  ### 锁屏控制
138
221
 
139
222
  **注意事项:**
@@ -527,6 +527,48 @@ for (let i = 0; i < 5; i++) {
527
527
  }
528
528
  ```
529
529
 
530
+ ## W3C Actions
531
+
532
+ ### 执行W3C动作 - 执行 W3C Actions JSON
533
+
534
+ 直接提交 W3C Actions 请求体,适合执行多指、多阶段或自定义指针动作。
535
+
536
+ ```typescript
537
+ function 执行W3C动作(json: { actions: 字典<任意类型>[]; [key: 字符串]: 任意类型 }): 布尔值;
538
+ ```
539
+
540
+ **参数说明:**
541
+
542
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
543
+ | ------ | ---- | -------- | ------ | --------------------------------- |
544
+ | `json` | 对象 | 是 | - | W3C Actions 请求体,例如 `{ actions: [...] }` |
545
+
546
+ **返回值:**
547
+
548
+ | 类型 | 描述 |
549
+ | -------- | ------------ |
550
+ | `布尔值` | 执行是否成功 |
551
+
552
+ **示例:**
553
+
554
+ ```typescript
555
+ const 是否成功 = $动作.执行W3C动作({
556
+ actions: [
557
+ {
558
+ type: "pointer",
559
+ id: "finger1",
560
+ parameters: { pointerType: "touch" },
561
+ actions: [
562
+ { type: "pointerMove", duration: 0, x: 100, y: 200 },
563
+ { type: "pointerDown", button: 0 },
564
+ { type: "pause", duration: 20 },
565
+ { type: "pointerUp", button: 0 },
566
+ ],
567
+ },
568
+ ],
569
+ });
570
+ ```
571
+
530
572
  ## 动作构建器
531
573
 
532
574
  动作构建器 提供了更高级的多点触控操作能力,支持链式调用构建复杂的手势动作。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 功能概览
6
6
 
7
- - **应用管理**: 启动、停止、激活应用,获取前台应用信息
7
+ - **应用管理**: 启动、停止、激活应用,获取前台/后台应用信息和已安装应用列表
8
8
  - **锁屏控制**: 检查锁屏状态、锁屏和解锁操作
9
9
  - **剪贴板**: 读取和设置系统剪贴板内容
10
10
  - **URL 操作**: 打开网页链接或应用 URL Scheme
@@ -135,6 +135,88 @@ if (appInfo) {
135
135
  }
136
136
  ```
137
137
 
138
+ #### 获取后台运行的应用列表
139
+
140
+ ```typescript
141
+ function 获取后台运行的应用列表(): {
142
+ bundleId: 字符串;
143
+ name: 字符串;
144
+ pid: 数字;
145
+ }[];
146
+ ```
147
+
148
+ **返回值:**
149
+
150
+ | 字段名 | 类型 | 描述 |
151
+ | ---------- | ------ | ------------------------ |
152
+ | `bundleId` | 字符串 | 应用 Bundle ID |
153
+ | `name` | 字符串 | 应用名称(不一定能取到) |
154
+ | `pid` | 数字 | 进程 ID |
155
+
156
+ **说明:**
157
+
158
+ 该方法返回当前后台运行的应用信息列表,可用于查询仍在运行但不在前台显示的应用。
159
+
160
+ **示例:**
161
+
162
+ ```javascript
163
+ const apps = $系统.获取后台运行的应用列表();
164
+ for (const app of apps) {
165
+ $打印信息日志(`${app.name}: ${app.bundleId} (${app.pid})`);
166
+ }
167
+ ```
168
+
169
+ #### 获取安装的应用列表
170
+
171
+ ```typescript
172
+ function 获取安装的应用列表(): {
173
+ bundleVersion: 字符串;
174
+ appName: 字符串;
175
+ bundleIdentifier: 字符串;
176
+ }[];
177
+ ```
178
+
179
+ **返回值:**
180
+
181
+ | 字段名 | 类型 | 描述 |
182
+ | ------------------ | ------ | -------------- |
183
+ | `bundleVersion` | 字符串 | 应用版本号 |
184
+ | `appName` | 字符串 | 应用显示名称 |
185
+ | `bundleIdentifier` | 字符串 | 应用 Bundle ID |
186
+
187
+ **说明:**
188
+
189
+ 该方法返回设备上已安装应用的信息列表,可用于查询应用名称、Bundle ID 和版本号,便于后续调用 `启动应用`、`停止应用`、`把应用切入前台` 等应用管理方法。
190
+
191
+ **示例:**
192
+
193
+ ```javascript
194
+ const apps = $系统.获取安装的应用列表();
195
+ for (const app of apps) {
196
+ $打印信息日志(`${app.appName}: ${app.bundleIdentifier} (${app.bundleVersion})`);
197
+ }
198
+ ```
199
+
200
+ #### 最近应用 - 打开 App 切换器。
201
+
202
+ ```typescript
203
+ function 最近应用(): 布尔值;
204
+ ```
205
+
206
+ **返回值:**
207
+
208
+ | 类型 | 描述 |
209
+ | -------- | ---------------------- |
210
+ | `布尔值` | 是否成功打开 App 切换器 |
211
+
212
+ **示例:**
213
+
214
+ ```javascript
215
+ if ($系统.最近应用()) {
216
+ $打印信息日志("已打开 App 切换器");
217
+ }
218
+ ```
219
+
138
220
  ### 锁屏控制
139
221
 
140
222
  **注意事项:**
@@ -10,11 +10,14 @@
10
10
  ## 类型定义
11
11
 
12
12
  ```python
13
- from typing import TypedDict, List, Literal, Optional
13
+ from typing import Any, Dict, TypedDict, List, Literal, Optional
14
14
 
15
15
  class TapPoint(TypedDict):
16
16
  x: int
17
17
  y: int
18
+
19
+ class W3CActionsJson(TypedDict):
20
+ actions: List[Dict[str, Any]]
18
21
  ```
19
22
 
20
23
  ## 抖动值
@@ -500,6 +503,50 @@ for i in range(5):
500
503
  action.pressButton("volumeup")
501
504
  ```
502
505
 
506
+ ## W3C Actions
507
+
508
+ ### w3cActions - 执行 W3C Actions JSON
509
+
510
+ 直接提交 W3C Actions 请求体,适合执行多指、多阶段或自定义指针动作。
511
+
512
+ ```python
513
+ def w3cActions(json: dict) -> bool
514
+ ```
515
+
516
+ **参数说明:**
517
+
518
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
519
+ | ------ | ---- | -------- | ------ | --------------------------------- |
520
+ | `json` | dict | 是 | - | W3C Actions 请求体,例如 `{ "actions": [...] }` |
521
+
522
+ **返回值:**
523
+
524
+ | 类型 | 描述 |
525
+ | ------ | ------------ |
526
+ | `bool` | 执行是否成功 |
527
+
528
+ **示例:**
529
+
530
+ ```python
531
+ from kuaijs import action
532
+
533
+ success = action.w3cActions({
534
+ "actions": [
535
+ {
536
+ "type": "pointer",
537
+ "id": "finger1",
538
+ "parameters": { "pointerType": "touch" },
539
+ "actions": [
540
+ { "type": "pointerMove", "duration": 0, "x": 100, "y": 200 },
541
+ { "type": "pointerDown", "button": 0 },
542
+ { "type": "pause", "duration": 20 },
543
+ { "type": "pointerUp", "button": 0 },
544
+ ],
545
+ },
546
+ ],
547
+ })
548
+ ```
549
+
503
550
  ## 动作构建器
504
551
 
505
552
  ActionBuilder 提供了更高级的多点触控操作能力,支持链式调用构建复杂的手势动作。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 功能概览
6
6
 
7
- - **应用管理**: 启动、停止、激活应用,获取前台应用信息
7
+ - **应用管理**: 启动、停止、激活应用,获取前台/后台应用信息和已安装应用列表
8
8
  - **锁屏控制**: 检查锁屏状态、锁屏和解锁操作
9
9
  - **剪贴板**: 读取和设置系统剪贴板内容
10
10
  - **URL 操作**: 打开网页链接或应用 URL Scheme
@@ -25,6 +25,17 @@ class ActivateAppInfo(TypedDict):
25
25
  pid: int
26
26
  ```
27
27
 
28
+ ### InstalledAppInfo
29
+
30
+ 已安装应用信息结构。
31
+
32
+ ```python
33
+ class InstalledAppInfo(TypedDict):
34
+ bundleVersion: str
35
+ appName: str
36
+ bundleIdentifier: str
37
+ ```
38
+
28
39
  ### MemoryInfo
29
40
 
30
41
  内存信息结构。
@@ -142,6 +153,83 @@ if info:
142
153
  print(info.name, info.bundleId, info.pid)
143
154
  ```
144
155
 
156
+ #### backgroundAppInfos - 获取后台运行的应用列表。
157
+
158
+ ```python
159
+ def backgroundAppInfos() -> List[ActivateAppInfo]
160
+ ```
161
+
162
+ **返回值:**
163
+
164
+ | 字段名 | 类型 | 描述 |
165
+ | ---------- | ---- | ------------------------ |
166
+ | `bundleId` | str | 应用 Bundle ID |
167
+ | `name` | str | 应用名称(不一定能取到) |
168
+ | `pid` | int | 进程 ID |
169
+
170
+ **说明:**
171
+
172
+ 该方法返回当前后台运行的应用信息列表,可用于查询仍在运行但不在前台显示的应用。
173
+
174
+ **示例:**
175
+
176
+ ```python
177
+ from kuaijs import system
178
+
179
+ apps = system.backgroundAppInfos()
180
+ for app in apps:
181
+ print(app.name, app.bundleId, app.pid)
182
+ ```
183
+
184
+ #### getInstalledAppList - 获取已安装的应用列表。
185
+
186
+ ```python
187
+ def getInstalledAppList() -> List[InstalledAppInfo]
188
+ ```
189
+
190
+ **返回值:**
191
+
192
+ | 字段名 | 类型 | 描述 |
193
+ | ------------------ | ---- | -------------- |
194
+ | `bundleVersion` | str | 应用版本号 |
195
+ | `appName` | str | 应用显示名称 |
196
+ | `bundleIdentifier` | str | 应用 Bundle ID |
197
+
198
+ **说明:**
199
+
200
+ 该方法返回设备上已安装应用的信息列表,可用于查询应用名称、Bundle ID 和版本号,便于后续调用 `startApp`、`stopApp`、`activateApp` 等应用管理方法。
201
+
202
+ **示例:**
203
+
204
+ ```python
205
+ from kuaijs import system
206
+
207
+ apps = system.getInstalledAppList()
208
+ for app in apps:
209
+ print(f"{app['appName']}: {app['bundleIdentifier']} ({app['bundleVersion']})")
210
+ ```
211
+
212
+ #### recent - 打开 App 切换器。
213
+
214
+ ```python
215
+ def recent() -> bool
216
+ ```
217
+
218
+ **返回值:**
219
+
220
+ | 类型 | 描述 |
221
+ | ------ | ---------------------- |
222
+ | `bool` | 是否成功打开 App 切换器 |
223
+
224
+ **示例:**
225
+
226
+ ```python
227
+ from kuaijs import system
228
+
229
+ if system.recent():
230
+ print("已打开 App 切换器")
231
+ ```
232
+
145
233
  ### 锁屏控制
146
234
 
147
235
  **注意事项:**
@@ -2,22 +2,59 @@
2
2
 
3
3
  ## 身份
4
4
 
5
- 你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。你必须严格依据快点JS官方 API 文档、当前项目结构和当前 MCP 工具能力回答问题与编写代码,不要臆造不存在的 API、对象、参数、行为或运行机制。
5
+ 你是快点JS专用开发助手,只服务于快点JS这一特定执行环境。你必须严格依据快点JS官方 API 文档、当前项目结构、当前 MCP 工具能力和项目自带命令能力回答问题与编写代码,不要臆造不存在的 API、对象、参数、行为或运行机制。
6
6
 
7
7
  始终把快点JS当成特定 iOS 自动化环境,而不是普通 Node.js、浏览器或通用 Python 环境。遇到文档未确认、工具未提供或当前项目未实现的能力,必须明确说明限制,并给出保守方案。
8
8
 
9
- ## 文档优先
10
-
11
- 回答或写代码前,优先查询当前语言对应的快点JS文档。
9
+ ## 基本原则
12
10
 
13
11
  - JavaScript 项目使用 JavaScript 文档与写法。
14
12
  - Python 项目使用 Python 文档与写法。
15
13
  - 不要混用 JavaScript 与 Python API。
14
+ - 不要把快点JS Python 脚本当成普通 CPython 脚本。
15
+ - 不要对快点JS Python 脚本运行 `python -m py_compile`、`py_compile` 或类似 CPython 编译校验。
16
+ - 不要创建、保留或同步 `__pycache__`、`.pyc` 作为项目改动。
16
17
  - 文档未确认的能力必须明确说明无法确认,不要凭经验补全。
17
18
 
19
+ ## 允许的执行方式
20
+
21
+ MCP 工具和项目自带命令都可以使用。
22
+
23
+ 优先使用 MCP 的情况:
24
+
25
+ - 查询快点JS语言 API 文档。
26
+ - 查询 HTTP API 文档并通过 `http_api_call` 调用。
27
+ - 设置设备、设置工作区、运行项目、预览 UI、截图、抓节点树、读日志、打包。
28
+
29
+ 可以使用命令的情况:
30
+
31
+ - MCP transport 断开或不可用。
32
+ - 用户明确要求使用命令。
33
+ - 需要快速确认项目本地 `ms` CLI 能力。
34
+ - 需要使用项目自带 KuaiJS CLI 进行同步、运行、停止或截图。
35
+
36
+ 允许的常用项目命令:
37
+
38
+ ```bash
39
+ npx ms --help
40
+ npx ms run -i <device-ip> --port <port>
41
+ npx ms run-ui -i <device-ip> --port <port>
42
+ npx ms screenshot -i <device-ip> --port <port> --format file --output <path>
43
+ npx ms stop -i <device-ip> --port <port>
44
+ npx ms package
45
+ ```
46
+
47
+ 命令必须在快点JS项目根目录运行,项目根目录通常包含 `package.json` 和 `scripts/`。不要用未确认的通用 Node.js、浏览器或 Python 命令替代 MCP 或项目自带 `ms` CLI。
48
+
49
+ ## 文档优先
50
+
51
+ 回答或写代码前,优先查询当前语言对应的快点JS文档。
52
+
18
53
  语言 API 文档工具:
19
54
 
20
55
  - `set_docs_language`
56
+ - `get_docs_language`
57
+ - `list_api_docs`
21
58
  - `search_api_docs`
22
59
  - `read_api_doc`
23
60
 
@@ -26,8 +63,56 @@ HTTP API 文档工具:
26
63
  - `search_http_api_docs`
27
64
  - `read_http_api_doc`
28
65
 
66
+ MCP 可用时,按以下流程使用语言 API:
67
+
68
+ 1. 使用 `set_docs_language` 设置语言:`js`、`js_zh` 或 `python`。
69
+ 2. 使用 `search_api_docs` 搜索相关模块或 API。
70
+ 3. 使用 `read_api_doc` 读取完整文档。
71
+ 4. 只依据已确认的文档内容回答或编写代码。
72
+
73
+ MCP 不可用时,可以查阅项目本地文档作为 fallback,例如:
74
+
75
+ - `node_modules/ms-vite-plugin/docs/api/`
76
+ - `node_modules/ms-vite-plugin/docs/apicn/`
77
+ - `node_modules/ms-vite-plugin/docs/apipython/`
78
+ - `node_modules/ms-vite-plugin/docs/httpapi/`
79
+
80
+ 使用本地文档 fallback 时,要在回复中说明依据来自本地文档。
81
+
82
+ ## HTTP API 工作流
83
+
29
84
  调用设备 HTTP API 前,必须先查询 HTTP API 文档中的对应接口说明。不要猜测接口路径、请求方法或参数名称。
30
85
 
86
+ MCP 可用时:
87
+
88
+ 1. 使用 `search_http_api_docs` 搜索目标能力、中文标题或接口路径。
89
+ 2. 使用 `read_http_api_doc` 读取目标接口片段。
90
+ 3. 确认 `method`、`path`、参数位置、参数类型和返回结构。
91
+ 4. 使用 `http_api_call` 传入文档返回的 `docSlug`、`method`、`path`、`query` 或 `body`。
92
+
93
+ 示例:
94
+
95
+ ```json
96
+ {
97
+ "method": "GET",
98
+ "path": "/api/control/click",
99
+ "docSlug": "get-api-control-click",
100
+ "query": {
101
+ "x": 100,
102
+ "y": 200,
103
+ "duration": 20
104
+ }
105
+ }
106
+ ```
107
+
108
+ `http_api_call` 会拒绝 HTTP API 文档中未声明的接口,也会拒绝 `docSlug`、`method`、`path` 不匹配的调用。
109
+
110
+ 命令 fallback 时:
111
+
112
+ 1. 先在本地 HTTP API 文档中确认接口存在。
113
+ 2. 再用 `curl` 调用明确存在的接口。
114
+ 3. 不要把未确认的路径当成可用接口。
115
+
31
116
  ## 项目目录职责
32
117
 
33
118
  严格遵守当前项目目录职责:
@@ -43,8 +128,8 @@ HTTP API 文档工具:
43
128
 
44
129
  当前 MCP 设备模型以 `set_device` 设置的 HTTP 设备为准,其余设备工具统一复用该设备配置。
45
130
 
46
- - 使用 `set_device` 设置设备 IP 和端口。
47
131
  - 使用 `get_device` 查看当前默认设备。
132
+ - 使用 `set_device` 设置设备 IP 和端口。
48
133
  - 设备设置后会自动启动日志 SSE 后台订阅。
49
134
  - 使用 `get_logs` 查看日志缓存快照。
50
135
 
@@ -83,42 +168,31 @@ UI 预览发起后不需要长时间等待结果,可以通过 `take_screenshot
83
168
 
84
169
  - `http_api_call`
85
170
 
86
- 控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 不再作为大量独立 MCP 工具暴露。必须通过下面流程调用:
171
+ 控制、HID、IME、镜像、配置、当前应用、运行脚本等普通设备 HTTP API 不再作为大量独立 MCP 工具暴露。MCP 可用时必须通过 `search_http_api_docs`、`read_http_api_doc` 和 `http_api_call` 使用;命令 fallback 时可以用已确认文档的 `curl` 调用。
87
172
 
88
- 1. 使用 `search_http_api_docs` 搜索能力。
89
- 2. 使用 `read_http_api_doc` 读取目标接口片段。
90
- 3. 确认 `method`、`path`、参数位置、参数类型和返回结构。
91
- 4. 使用 `http_api_call` 传入文档返回的 `docSlug`、`method`、`path`、`query` 或 `body`。
173
+ ## 工具选择规则
92
174
 
93
- 示例:
175
+ - 写快点JS脚本代码:先设置或确认文档语言,再查语言 API 文档。
176
+ - 调设备 HTTP API:先查 HTTP API 文档,再调用 `http_api_call` 或已确认接口的 `curl` fallback。
177
+ - 获取截图:优先使用 `take_screenshot`;命令 fallback 可用 `npx ms screenshot`。
178
+ - 获取节点 XML:优先使用 `get_node_source`。
179
+ - 查看日志:优先使用 `get_logs`。
180
+ - 运行项目:优先使用 `run_project` 或 `run_ui_project`;命令 fallback 可用 `npx ms run` 或 `npx ms run-ui`。
181
+ - 停止项目:优先使用 `stop_project`;命令 fallback 可用 `npx ms stop`。
182
+ - 打包项目:优先使用 `package_project`;命令 fallback 可用 `npx ms package`。
94
183
 
95
- ```json
96
- {
97
- "method": "GET",
98
- "path": "/api/control/click",
99
- "docSlug": "get-api-control-click",
100
- "query": {
101
- "x": 100,
102
- "y": 200,
103
- "duration": 20
104
- }
105
- }
106
- ```
184
+ 对设备操作优先使用 MCP 工具。MCP 不可用或用户明确要求时,可以使用项目自带 `ms` CLI;不要改写成未确认的通用构建命令,也不要假设存在浏览器、Node.js 或通用 Python 运行时能力。
107
185
 
108
- `http_api_call` 会拒绝 HTTP API 文档中未声明的接口,也会拒绝 `docSlug`、`method`、`path` 不匹配的调用。
186
+ ## 验证要求
109
187
 
110
- ## 工具选择规则
188
+ 设备行为改动通常需要真实设备验证:
111
189
 
112
- - 写快点JS脚本代码:先设置或确认文档语言,再查语言 API 文档。
113
- - 调设备 HTTP API:先查 HTTP API 文档,再调用 `http_api_call`。
114
- - 获取截图:使用 `take_screenshot`。
115
- - 获取节点 XML:使用 `get_node_source`。
116
- - 查看日志:使用 `get_logs`。
117
- - 运行项目:使用 `run_project` 或 `run_ui_project`。
118
- - 停止项目:使用 `stop_project`。
119
- - 打包项目:使用 `package_project`。
190
+ 1. 使用 MCP `run_project` 或命令 `npx ms run -i <device-ip> --port <port>` 同步并运行项目。
191
+ 2. 使用 MCP `take_screenshot` 或命令 `npx ms screenshot ...` 获取截图。
192
+ 3. 必要时使用 `get_logs` 或日志 HTTP API 查看运行日志。
193
+ 4. 在回复中说明截图或日志是否确认了预期行为。
120
194
 
121
- 对设备操作优先使用 MCP 工具,不要改写成通用构建命令,也不要假设存在浏览器、Node.js 或通用 Python 运行时能力。
195
+ 如果设备、MCP CLI 不可用,必须明确说明无法验证的原因,以及可用后应运行的命令。
122
196
 
123
197
  ## 禁止事项
124
198
 
@@ -126,7 +200,8 @@ UI 预览发起后不需要长时间等待结果,可以通过 `take_screenshot
126
200
  - 不要臆造快点JS API、对象、参数、返回值或运行机制。
127
201
  - 不要混用 JavaScript 与 Python API。
128
202
  - 不要把快点JS当成普通 Node.js、浏览器或通用 Python 环境。
129
- - 不要在没有查询 HTTP API 文档的情况下调用 `http_api_call`。
203
+ - 不要对快点JS Python 脚本运行 `py_compile` 或其他 CPython 编译校验。
204
+ - 不要在没有查询 HTTP API 文档的情况下调用 `http_api_call` 或 `curl`。
130
205
  - 不要把完整 URL 传给 `http_api_call.path`,只能传 `/api/...`、`/logger/...`、`/mirror/...` 这类相对路径。
131
206
  - 不要调用 HTTP API 文档中未声明的接口。
132
207
  - 不要用 `http_api_call` 替代截图落文件、节点 XML 落文件、日志缓存、项目打包和项目运行等专用工具。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ms-vite-plugin",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "type": "commonjs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {