yunti-browser-runtime 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/LICENSE +21 -0
- package/README.md +256 -0
- package/bin/yunti-browser-runtime.js +86 -0
- package/docs/EXECUTION_PLAN.md +1278 -0
- package/docs/INSTALL.md +205 -0
- package/docs/PROJECT_INTENT.md +44 -0
- package/docs/PROJECT_STATUS.md +263 -0
- package/docs/PUBLISHING_BLOCKERS.md +110 -0
- package/docs/RELEASE.md +148 -0
- package/docs/ROADMAP.md +42 -0
- package/docs/SECURITY.md +56 -0
- package/docs/TOOL_GUIDE.md +69 -0
- package/extension/background.js +55 -0
- package/extension/cdp.js +582 -0
- package/extension/content.css +9 -0
- package/extension/content.js +946 -0
- package/extension/manifest.json +35 -0
- package/extension/network-monitor.js +140 -0
- package/extension/popup.css +66 -0
- package/extension/popup.html +30 -0
- package/extension/popup.js +55 -0
- package/extension/session-manager.js +332 -0
- package/extension/settings.js +94 -0
- package/extension/tool-handlers.js +1158 -0
- package/lib/runtime-paths.js +39 -0
- package/mcp/bridge-hub.js +604 -0
- package/mcp/http-server.js +326 -0
- package/mcp/json-rpc.js +35 -0
- package/mcp/memory.js +126 -0
- package/mcp/redaction.js +94 -0
- package/mcp/server.js +269 -0
- package/mcp/tools.js +1092 -0
- package/package.json +60 -0
- package/scripts/check-package-metadata.js +131 -0
- package/scripts/check-published-package.js +113 -0
- package/scripts/doctor.js +163 -0
- package/scripts/package-extension.js +137 -0
- package/scripts/print-config.js +116 -0
- package/scripts/release-check.js +472 -0
- package/skills/yunti-browser-runtime/SKILL.md +77 -0
|
@@ -0,0 +1,1278 @@
|
|
|
1
|
+
# Execution Plan
|
|
2
|
+
|
|
3
|
+
本文档记录 Yunti Browser Runtime 从本地 MVP 走向可开源、可长期稳定使用版本的执行计划。
|
|
4
|
+
|
|
5
|
+
维护规则:
|
|
6
|
+
|
|
7
|
+
- 每完成一个阶段,都要更新本文档的状态。
|
|
8
|
+
- 每个阶段开始前先确认目标、范围、验收标准。
|
|
9
|
+
- 不把远程多用户能力混入本地单用户核心。
|
|
10
|
+
- 安全和稳定优先于功能堆叠。
|
|
11
|
+
|
|
12
|
+
## 当前总目标
|
|
13
|
+
|
|
14
|
+
把当前本地 MVP 打磨成一个:
|
|
15
|
+
|
|
16
|
+
- 安装简单;
|
|
17
|
+
- 默认安全;
|
|
18
|
+
- Agent 不容易误用;
|
|
19
|
+
- 能稳定操作真实浏览器;
|
|
20
|
+
- 可作为开源项目发布;
|
|
21
|
+
- 后续可扩展远程模式但不依赖远程模式;
|
|
22
|
+
|
|
23
|
+
的本地浏览器运行时。
|
|
24
|
+
|
|
25
|
+
## 阶段总览
|
|
26
|
+
|
|
27
|
+
| 阶段 | 状态 | 目标 |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| P0.1 | 已完成 | bridge token + CORS 收紧 |
|
|
30
|
+
| P0.2 | 已完成 | session TTL / 心跳 / 快速恢复 |
|
|
31
|
+
| P1.1 | 已完成 | doctor 增强 |
|
|
32
|
+
| P1.2 | 已完成 | MCP config printer |
|
|
33
|
+
| P1.3 | 已完成 | extension 打包脚本 |
|
|
34
|
+
| P1.4 | 已完成 | 真实浏览器 E2E smoke test |
|
|
35
|
+
| P2.1 | 已完成 | README 和文档开源化 |
|
|
36
|
+
| P2.2 | 已完成 | npm package metadata / bin |
|
|
37
|
+
| P3.1 | 已完成 | 大文件拆分与模块化 |
|
|
38
|
+
| P3.2 | 已完成 | 工具参数校验与错误提示增强 |
|
|
39
|
+
| P4.1 | 已完成 | 发布前文档与权限审查 |
|
|
40
|
+
| P4.2 | 已完成 | Agent 接入示例补全 |
|
|
41
|
+
| P4.3 | 已完成 | npm 发布 URL 最终确认 |
|
|
42
|
+
| P4.4 | 已完成 | 发布门禁脚本固化 |
|
|
43
|
+
| P4.5 | 已完成 | 发布运行手册 |
|
|
44
|
+
| P4.6 | 已完成 | package metadata 检查命令 |
|
|
45
|
+
| P4.7 | 已完成 | prepublish 发布门禁串联 |
|
|
46
|
+
| P4.8 | 已完成 | npm package 内容门禁 |
|
|
47
|
+
| P4.9 | 已完成 | extension zip 内容门禁 |
|
|
48
|
+
| P4.10 | 已完成 | package / extension 版本一致性门禁 |
|
|
49
|
+
| P4.11 | 已完成 | npm bin CLI smoke 门禁 |
|
|
50
|
+
| P4.12 | 已完成 | Agent config smoke 门禁 |
|
|
51
|
+
| P4.13 | 已完成 | doctor JSON smoke 门禁 |
|
|
52
|
+
| P4.14 | 已完成 | 公开文档相对链接门禁 |
|
|
53
|
+
| P4.15 | 已完成 | npm 官方 registry 发布脚本 |
|
|
54
|
+
| P4.16 | 已完成 | 正式发布脚本内置门禁 |
|
|
55
|
+
| P4.17 | 已完成 | npm 登录预检门禁 |
|
|
56
|
+
| P4.18 | 已完成 | npm 发布后验证命令 |
|
|
57
|
+
| P4.19 | 进行中 | npm 正式发布执行 |
|
|
58
|
+
|
|
59
|
+
## P0.1 bridge token + CORS 收紧
|
|
60
|
+
|
|
61
|
+
状态:已完成(2026-07-02)
|
|
62
|
+
|
|
63
|
+
实现摘要:
|
|
64
|
+
|
|
65
|
+
- bridge owner 模式启动时读取 `YUNTI_BROWSER_BRIDGE_TOKEN`,未设置时生成进程内 token 并打印到 stderr。
|
|
66
|
+
- 受保护 HTTP 路由统一校验 `x-yunti-browser-token`,未授权请求返回 401。
|
|
67
|
+
- `/health` 未带 token 时只返回有限状态,带 token 时返回 session 明细。
|
|
68
|
+
- CORS 默认只回显本地调试来源和浏览器扩展来源;可用
|
|
69
|
+
`YUNTI_BROWSER_BRIDGE_ALLOW_ORIGINS` 覆盖。
|
|
70
|
+
- MCP proxy、extension、doctor 都支持使用同一 token 请求 bridge。
|
|
71
|
+
- extension popup 增加 bridge URL、bridge token、页面匹配规则设置。
|
|
72
|
+
- `npm test` 增加 token 拒绝、授权 health、CORS 来源覆盖测试。
|
|
73
|
+
|
|
74
|
+
### 背景
|
|
75
|
+
|
|
76
|
+
当前 bridge 默认监听 `127.0.0.1`,方向正确,但本地 HTTP 服务仍需要更强的默认防护。
|
|
77
|
+
|
|
78
|
+
主要风险:
|
|
79
|
+
|
|
80
|
+
- 普通网页可能探测本地端口。
|
|
81
|
+
- CORS 如果过宽,可能给非扩展页面留出调用面。
|
|
82
|
+
- 后续如果用户误绑到非本地地址,风险会被放大。
|
|
83
|
+
|
|
84
|
+
### 目标
|
|
85
|
+
|
|
86
|
+
- bridge 启动时有本地访问 token。
|
|
87
|
+
- MCP、extension、doctor 使用同一 token。
|
|
88
|
+
- 非授权请求拒绝。
|
|
89
|
+
- CORS 默认只允许扩展和本地调试需要的来源。
|
|
90
|
+
- 继续保持本地安装简单。
|
|
91
|
+
|
|
92
|
+
### 设计建议
|
|
93
|
+
|
|
94
|
+
- 新增环境变量:
|
|
95
|
+
- `YUNTI_BROWSER_BRIDGE_TOKEN`
|
|
96
|
+
- `YUNTI_BROWSER_BRIDGE_ALLOW_ORIGINS`
|
|
97
|
+
- 若未设置 token:
|
|
98
|
+
- MCP owner 模式启动时生成一次进程内 token;
|
|
99
|
+
- 输出到 stderr 仅用于调试;
|
|
100
|
+
- extension 侧仍需要能通过本地配置保存 token。
|
|
101
|
+
- 请求头建议:
|
|
102
|
+
- `x-yunti-browser-token: <token>`
|
|
103
|
+
- 对以下接口强制校验 token:
|
|
104
|
+
- `/sessions`
|
|
105
|
+
- `/sessions/register`
|
|
106
|
+
- `/sessions/activate`
|
|
107
|
+
- `/extension/poll`
|
|
108
|
+
- `/extension/result`
|
|
109
|
+
- `/extension/network-event`
|
|
110
|
+
- `/extension/cdp-event`
|
|
111
|
+
- `/extension/console-event`
|
|
112
|
+
- `/mcp/request`
|
|
113
|
+
- `/mcp/local-tool`
|
|
114
|
+
- `/health` 可返回有限信息;带 token 时返回完整信息。
|
|
115
|
+
|
|
116
|
+
### 验收标准
|
|
117
|
+
|
|
118
|
+
- `npm test` 增加未带 token 被拒绝的测试。
|
|
119
|
+
- extension 注册页面时会带 token。
|
|
120
|
+
- MCP proxy/owner 请求会带 token。
|
|
121
|
+
- `npm run doctor` 可以检查 token 和 bridge 状态。
|
|
122
|
+
- README / SECURITY 更新 token 说明。
|
|
123
|
+
|
|
124
|
+
## P0.2 session TTL / 心跳 / 快速恢复
|
|
125
|
+
|
|
126
|
+
状态:已完成(2026-07-02)
|
|
127
|
+
|
|
128
|
+
实现摘要:
|
|
129
|
+
|
|
130
|
+
- session 元数据增加 `lastSeenAt`、`lastActivatedAt`、`expiresAt`、`staleReason`。
|
|
131
|
+
- extension poll/register 会刷新 session 心跳和过期时间。
|
|
132
|
+
- bridge 定时清理过期 session,并同步清理 active session 路由。
|
|
133
|
+
- 旧 `browserSessionId` 会快速失败,错误信息包含 stale/disconnected 原因和
|
|
134
|
+
`yunti_list_browser_targets` 恢复建议。
|
|
135
|
+
- `yunti_list_browser_targets` 可在同一用户注册新 session 后恢复到新路由。
|
|
136
|
+
- `npm test` 增加过期清理、旧 id 快速失败、poll 心跳、list targets 恢复路径测试。
|
|
137
|
+
|
|
138
|
+
### 背景
|
|
139
|
+
|
|
140
|
+
`browserSessionId` 是浏览器页面路由核心。当前规则文档已经要求 stale 时调用 `yunti_list_browser_targets` 恢复,但代码层还缺 TTL 和快速过期清理。
|
|
141
|
+
|
|
142
|
+
### 目标
|
|
143
|
+
|
|
144
|
+
- 关闭、刷新、扩展重载后的旧 session 快速失效。
|
|
145
|
+
- agent 第一次误用旧 `browserSessionId` 时快速失败,并给出恢复建议。
|
|
146
|
+
- `yunti_list_browser_targets` 能作为标准恢复入口。
|
|
147
|
+
|
|
148
|
+
### 设计建议
|
|
149
|
+
|
|
150
|
+
- session 元数据增加:
|
|
151
|
+
- `lastSeenAt`
|
|
152
|
+
- `lastActivatedAt`
|
|
153
|
+
- `expiresAt`
|
|
154
|
+
- `staleReason`
|
|
155
|
+
- extension poll/register 视为心跳。
|
|
156
|
+
- bridge 定期清理过期 session。
|
|
157
|
+
- 错误信息统一包含:
|
|
158
|
+
- stale/disconnected 原因;
|
|
159
|
+
- 建议调用 `yunti_list_browser_targets`;
|
|
160
|
+
- 不建议继续重试旧 id。
|
|
161
|
+
|
|
162
|
+
### 验收标准
|
|
163
|
+
|
|
164
|
+
- 测试覆盖过期 session 被清理。
|
|
165
|
+
- 测试覆盖旧 `browserSessionId` 快速失败。
|
|
166
|
+
- 测试覆盖 list targets 恢复路径。
|
|
167
|
+
- `yunti_get_tool_usage_hints` 和 skill 同步更新。
|
|
168
|
+
|
|
169
|
+
## P1.1 doctor 增强
|
|
170
|
+
|
|
171
|
+
状态:已完成(2026-07-02)
|
|
172
|
+
|
|
173
|
+
实现摘要:
|
|
174
|
+
|
|
175
|
+
- `npm run doctor` 检查 Node 版本、bridge 可达性、token 是否配置且有效、session 数、
|
|
176
|
+
active session、是否检测到 extension 注册、MCP server 文件和 skill 文件。
|
|
177
|
+
- 输出完整 JSON 到 stdout,方便 agent 读取。
|
|
178
|
+
- 同时输出人类可读摘要到 stderr,方便用户排查。
|
|
179
|
+
- 常见失败会给出下一步命令或操作建议。
|
|
180
|
+
- 新增 `npm run doctor:json`,便于只读取 JSON。
|
|
181
|
+
|
|
182
|
+
### 目标
|
|
183
|
+
|
|
184
|
+
把 `npm run doctor` 从简单 health check 升级为安装诊断工具。
|
|
185
|
+
|
|
186
|
+
### 检查项
|
|
187
|
+
|
|
188
|
+
- Node 版本。
|
|
189
|
+
- bridge 是否可访问。
|
|
190
|
+
- token 是否配置/可用。
|
|
191
|
+
- 已注册 session 数。
|
|
192
|
+
- 当前 active session。
|
|
193
|
+
- 是否检测到 extension 页面注册。
|
|
194
|
+
- MCP server 文件路径是否存在。
|
|
195
|
+
- skills 路径是否存在。
|
|
196
|
+
|
|
197
|
+
### 验收标准
|
|
198
|
+
|
|
199
|
+
- 输出 JSON,方便 agent 读取。
|
|
200
|
+
- 输出人类可读摘要,方便用户排查。
|
|
201
|
+
- 常见失败给出下一步命令。
|
|
202
|
+
|
|
203
|
+
## P1.2 MCP config printer
|
|
204
|
+
|
|
205
|
+
状态:已完成(2026-07-02)
|
|
206
|
+
|
|
207
|
+
实现摘要:
|
|
208
|
+
|
|
209
|
+
- 新增 `scripts/print-config.js` 和 `npm run print-config`。
|
|
210
|
+
- 支持 `--agent codex`、`--agent claude-code`、`--agent cursor`、`--agent cline`。
|
|
211
|
+
- 输出包含 MCP server 配置、当前项目绝对路径、`YUNTI_BROWSER_BRIDGE_PORT`、token
|
|
212
|
+
配置说明和 skill 安装路径提示。
|
|
213
|
+
- token 只输出占位说明,不把真实 secret 写入生成配置。
|
|
214
|
+
- README / INSTALL 使用该命令替代硬编码 MCP 配置。
|
|
215
|
+
|
|
216
|
+
### 目标
|
|
217
|
+
|
|
218
|
+
新增命令自动打印不同 Agent 的 MCP 配置,降低安装门槛。
|
|
219
|
+
|
|
220
|
+
### 建议命令
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npm run print-config
|
|
224
|
+
npm run print-config -- --agent codex
|
|
225
|
+
npm run print-config -- --agent claude-code
|
|
226
|
+
npm run print-config -- --agent cursor
|
|
227
|
+
npm run print-config -- --agent cline
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 输出内容
|
|
231
|
+
|
|
232
|
+
- MCP server 配置。
|
|
233
|
+
- 当前项目绝对路径。
|
|
234
|
+
- `YUNTI_BROWSER_BRIDGE_PORT`。
|
|
235
|
+
- 如启用 token,包含 token 配置说明但避免直接把敏感 token 写进公开文档。
|
|
236
|
+
- skill 安装路径提示。
|
|
237
|
+
|
|
238
|
+
### 验收标准
|
|
239
|
+
|
|
240
|
+
- README 使用该命令替代硬编码本机绝对路径。
|
|
241
|
+
- 至少支持 Codex 和 Claude Code 示例。
|
|
242
|
+
|
|
243
|
+
## P1.3 extension 打包脚本
|
|
244
|
+
|
|
245
|
+
状态:已完成(2026-07-02)
|
|
246
|
+
|
|
247
|
+
实现摘要:
|
|
248
|
+
|
|
249
|
+
- 新增 `scripts/package-extension.js` 和 `npm run package:extension`。
|
|
250
|
+
- 输出 `dist/yunti-browser-runtime-extension-<version>.zip`。
|
|
251
|
+
- zip 内只包含 `extension/` 运行所需文件,不包含 `.DS_Store`、测试、docs、node_modules。
|
|
252
|
+
- README / INSTALL 增加开发加载和 zip 打包说明。
|
|
253
|
+
|
|
254
|
+
### 目标
|
|
255
|
+
|
|
256
|
+
提供一键生成 extension zip 的能力。
|
|
257
|
+
|
|
258
|
+
### 建议命令
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
npm run package:extension
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 验收标准
|
|
265
|
+
|
|
266
|
+
- 输出 `dist/yunti-browser-runtime-extension-<version>.zip`。
|
|
267
|
+
- zip 内只包含扩展所需文件。
|
|
268
|
+
- 不包含 `.DS_Store`、测试、docs、node_modules。
|
|
269
|
+
- README 增加开发加载和 zip 安装两种说明。
|
|
270
|
+
|
|
271
|
+
## P1.4 真实浏览器 E2E smoke test
|
|
272
|
+
|
|
273
|
+
状态:已完成(2026-07-02)
|
|
274
|
+
|
|
275
|
+
实现摘要:
|
|
276
|
+
|
|
277
|
+
- 新增 `tests/e2e.test.js` 和 `npm run test:e2e`。
|
|
278
|
+
- 默认跳过,设置 `YUNTI_E2E=1` 后才启动真实浏览器,避免普通 CI / 本地检查被浏览器依赖阻塞。
|
|
279
|
+
- E2E 使用 Playwright persistent Chromium profile 加载 unpacked extension。
|
|
280
|
+
- 测试会启动本地 bridge 和本地测试页面,并验证 MCP list targets、snapshot、
|
|
281
|
+
selector click/fill、CDP `Runtime.evaluate`。
|
|
282
|
+
- 失败时输出临时 artifact 目录,包含 screenshot 和 error log。
|
|
283
|
+
- README / INSTALL 增加 E2E 运行说明和跳过策略。
|
|
284
|
+
|
|
285
|
+
### 背景
|
|
286
|
+
|
|
287
|
+
当前测试主要覆盖 bridge/MCP 逻辑,还缺真实浏览器、真实扩展消息链路。
|
|
288
|
+
|
|
289
|
+
### 目标
|
|
290
|
+
|
|
291
|
+
验证:
|
|
292
|
+
|
|
293
|
+
- Chromium 加载 extension。
|
|
294
|
+
- 页面注册到 bridge。
|
|
295
|
+
- MCP 可 list targets。
|
|
296
|
+
- MCP 可 snapshot。
|
|
297
|
+
- MCP 可 click/fill。
|
|
298
|
+
- MCP 可执行 CDP `Runtime.evaluate`。
|
|
299
|
+
|
|
300
|
+
### 技术建议
|
|
301
|
+
|
|
302
|
+
- 使用 Playwright 启动 Chromium persistent context。
|
|
303
|
+
- 加载 unpacked extension。
|
|
304
|
+
- 起一个本地测试页面。
|
|
305
|
+
- 起 bridge/MCP 测试进程。
|
|
306
|
+
|
|
307
|
+
### 验收标准
|
|
308
|
+
|
|
309
|
+
- 新增 `npm run test:e2e`。
|
|
310
|
+
- CI 或本地可跳过,但文档清楚。
|
|
311
|
+
- 失败时输出截图/日志位置。
|
|
312
|
+
|
|
313
|
+
## P2.1 README 和文档开源化
|
|
314
|
+
|
|
315
|
+
状态:已完成(2026-07-02)
|
|
316
|
+
|
|
317
|
+
实现摘要:
|
|
318
|
+
|
|
319
|
+
- README 保留中文主入口,并补充英文摘要。
|
|
320
|
+
- README 增加 FAQ,以及权限/隐私说明入口。
|
|
321
|
+
- 公开文档统一 npm 命令口径。
|
|
322
|
+
- README 命令移除本机绝对路径,可直接复制执行。
|
|
323
|
+
- 移除公开文档中的内部参考路径和内部平台名残留。
|
|
324
|
+
|
|
325
|
+
### 目标
|
|
326
|
+
|
|
327
|
+
把文档从本地开发说明变成公开项目说明。
|
|
328
|
+
|
|
329
|
+
### 清理项
|
|
330
|
+
|
|
331
|
+
- 移除本机绝对路径。
|
|
332
|
+
- 移除内部参考路径。
|
|
333
|
+
- 中文 README 保留,补英文摘要或英文 README 入口。
|
|
334
|
+
- 统一 npm / pnpm 口径。
|
|
335
|
+
- 增加常见问题 FAQ。
|
|
336
|
+
- 增加“权限说明”和“隐私说明”入口。
|
|
337
|
+
|
|
338
|
+
### 验收标准
|
|
339
|
+
|
|
340
|
+
- 公开文档残留检查不出现本机路径或内部平台词。
|
|
341
|
+
- README 中所有命令可复制执行。
|
|
342
|
+
|
|
343
|
+
## P2.2 npm package metadata / bin
|
|
344
|
+
|
|
345
|
+
状态:已完成(2026-07-02)
|
|
346
|
+
|
|
347
|
+
实现摘要:
|
|
348
|
+
|
|
349
|
+
- `package.json` 增加 `bin`、`files`、`repository`、`keywords`、`homepage`、
|
|
350
|
+
`bugs`、`packageManager`。
|
|
351
|
+
- 新增 `bin/yunti-browser-runtime.js`,支持 `mcp`、`bridge`、`doctor`、
|
|
352
|
+
`print-config`、`package-extension`。
|
|
353
|
+
- `npm pack --dry-run` 可验证发布内容。
|
|
354
|
+
- 本地 `npm link` 后可运行 `yunti-browser-runtime --help`。
|
|
355
|
+
- README / INSTALL 增加 CLI 使用说明。
|
|
356
|
+
- 当前 lockfile 策略:项目没有运行时第三方依赖,暂不提交 lockfile;引入依赖时再提交 npm lockfile。
|
|
357
|
+
|
|
358
|
+
### 目标
|
|
359
|
+
|
|
360
|
+
让项目可以以 npm 包形式安装和执行。
|
|
361
|
+
|
|
362
|
+
### 建议新增
|
|
363
|
+
|
|
364
|
+
- `bin`
|
|
365
|
+
- `files`
|
|
366
|
+
- `repository`
|
|
367
|
+
- `keywords`
|
|
368
|
+
- `homepage`
|
|
369
|
+
- `bugs`
|
|
370
|
+
- `packageManager`
|
|
371
|
+
- lockfile 策略
|
|
372
|
+
|
|
373
|
+
### 可能命令
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
yunti-browser-runtime
|
|
377
|
+
yunti-browser-runtime bridge
|
|
378
|
+
yunti-browser-runtime doctor
|
|
379
|
+
yunti-browser-runtime print-config
|
|
380
|
+
yunti-browser-runtime package-extension
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### 验收标准
|
|
384
|
+
|
|
385
|
+
- `npm pack --dry-run` 输出内容符合预期。
|
|
386
|
+
- 本地 `npm link` 后命令可运行。
|
|
387
|
+
|
|
388
|
+
## P3.1 大文件拆分与模块化
|
|
389
|
+
|
|
390
|
+
状态:已完成(2026-07-02)
|
|
391
|
+
|
|
392
|
+
阶段进展:
|
|
393
|
+
|
|
394
|
+
- 已将 MCP 工具 schema、工具分组和 `yunti_get_tool_usage_hints` 拆到
|
|
395
|
+
`mcp/tools.js`。
|
|
396
|
+
- `mcp/server.js` 重新导出 `TOOLS` 以保持现有测试和外部导入兼容。
|
|
397
|
+
- 已将 JSON-RPC 响应封装拆到 `mcp/json-rpc.js`。
|
|
398
|
+
- 已将网络/CDP/控制台复用的脱敏、截断和事件规范化逻辑拆到
|
|
399
|
+
`mcp/redaction.js`。
|
|
400
|
+
- 已将 learning memory 的本地存储、脱敏和增删查逻辑拆到 `mcp/memory.js`。
|
|
401
|
+
- 已将 MCP session hub、请求队列、network/CDP/console 事件缓存和 bridge-local
|
|
402
|
+
tool 路由拆到 `mcp/bridge-hub.js`,`mcp/server.js` 继续重新导出
|
|
403
|
+
`BridgeHub` 以保持测试和外部导入兼容。
|
|
404
|
+
- 已将 MCP HTTP bridge server、CORS/token 校验、bridge route handler 和 body
|
|
405
|
+
parser 拆到 `mcp/http-server.js`,`mcp/server.js` 继续重新导出
|
|
406
|
+
`startBridgeServer`、`DEFAULT_HOST`、`DEFAULT_PORT` 和 `BRIDGE_TOKEN_HEADER`。
|
|
407
|
+
- 已将 extension 的设置读取、bridge header 和页面匹配逻辑拆到
|
|
408
|
+
`extension/settings.js`。
|
|
409
|
+
- 已将 extension 的 webRequest 网络监听、请求体摘要和敏感字段预览脱敏拆到
|
|
410
|
+
`extension/network-monitor.js`。
|
|
411
|
+
- 已将 extension 的 CDP target 拦截、attach/detach、trace buffer 和 debugger
|
|
412
|
+
promise 封装拆到 `extension/cdp.js`。
|
|
413
|
+
- 已将 extension 的工具分发和页面操作处理器拆到
|
|
414
|
+
`extension/tool-handlers.js`。
|
|
415
|
+
- 已将 extension 的 session 注册、poll loop、popup 状态、bridge post 和 console
|
|
416
|
+
event 转发拆到 `extension/session-manager.js`。
|
|
417
|
+
- `npm run check` 已纳入 `mcp/tools.js`、`mcp/json-rpc.js`、`mcp/redaction.js`
|
|
418
|
+
和 `mcp/memory.js`、`mcp/bridge-hub.js`、`mcp/http-server.js`,以及 `extension/settings.js`、`extension/network-monitor.js`、
|
|
419
|
+
`extension/cdp.js`、`extension/tool-handlers.js` 和
|
|
420
|
+
`extension/session-manager.js` 语法检查。
|
|
421
|
+
|
|
422
|
+
### 背景
|
|
423
|
+
|
|
424
|
+
当前 `mcp/server.js` 和 `extension/background.js` 偏大,维护成本较高。
|
|
425
|
+
|
|
426
|
+
### 建议拆分
|
|
427
|
+
|
|
428
|
+
MCP:
|
|
429
|
+
|
|
430
|
+
- `mcp/server.js`
|
|
431
|
+
- `mcp/json-rpc.js`
|
|
432
|
+
- `mcp/bridge-hub.js`(已拆出)
|
|
433
|
+
- `mcp/tools.js`
|
|
434
|
+
- `mcp/memory.js`
|
|
435
|
+
- `mcp/redaction.js`
|
|
436
|
+
- `mcp/http-server.js`(已拆出)
|
|
437
|
+
|
|
438
|
+
Extension:
|
|
439
|
+
|
|
440
|
+
- `extension/background.js`
|
|
441
|
+
- `extension/settings.js`
|
|
442
|
+
- `extension/session-manager.js`(已拆出)
|
|
443
|
+
- `extension/cdp.js`(已拆出)
|
|
444
|
+
- `extension/network-monitor.js`
|
|
445
|
+
- `extension/tool-handlers.js`(已拆出)
|
|
446
|
+
|
|
447
|
+
### 验收标准
|
|
448
|
+
|
|
449
|
+
- 拆分前后测试保持通过。
|
|
450
|
+
- 不引入行为变化。
|
|
451
|
+
- 每次拆分控制范围,不做混合重构。
|
|
452
|
+
|
|
453
|
+
验收结果:
|
|
454
|
+
|
|
455
|
+
- `npm run check` 通过,覆盖新增的 `mcp/http-server.js`、`mcp/bridge-hub.js`、
|
|
456
|
+
`extension/session-manager.js`、`extension/tool-handlers.js` 等模块语法检查。
|
|
457
|
+
- `npm test` 通过:58 项测试,57 项通过,1 项真实浏览器 smoke 按配置跳过。
|
|
458
|
+
- `npm run test:e2e` 按预期跳过真实浏览器 smoke test。
|
|
459
|
+
- `npm run package:extension` 通过,zip 内包含 12 个 extension runtime 文件。
|
|
460
|
+
- `npm pack --dry-run` 通过,npm tarball 包含拆分后的 MCP 和 extension 模块。
|
|
461
|
+
|
|
462
|
+
## P3.2 工具参数校验与错误提示增强
|
|
463
|
+
|
|
464
|
+
状态:已完成(2026-07-02)
|
|
465
|
+
|
|
466
|
+
阶段进展:
|
|
467
|
+
|
|
468
|
+
- 已增强 `yunti_click` / `yunti_hover` 参数组合错误提示,错误信息会指向
|
|
469
|
+
`yunti_take_snapshot`、CSS selector 或坐标工具的正确恢复路径。
|
|
470
|
+
- 已为 `yunti_fill` 增加参数校验:要求 `value` 且必须提供 `uid` 或
|
|
471
|
+
`selector`,并明确拒绝 coordinate-only fill。
|
|
472
|
+
- 已为 `yunti_close_page` 增加 `tabId` / `targetId` 误用提示,引导 raw target
|
|
473
|
+
关闭走 `yunti_cdp_send_command` + `Target.closeTarget`。
|
|
474
|
+
- 已增强 `yunti_cdp_send_command` 的 `method` / `params` 错误提示,并为
|
|
475
|
+
`Target.closeTarget` 缺少 target 的场景给出 `yunti_list_browser_targets`
|
|
476
|
+
恢复建议。
|
|
477
|
+
- 已增强 `yunti_forget_learning_memory` 缺少 `id` 或 id 不存在时的恢复提示。
|
|
478
|
+
- 已同步 `yunti_get_tool_usage_hints`、`docs/TOOL_GUIDE.md` 和
|
|
479
|
+
`skills/yunti-browser-runtime/SKILL.md` 的常见参数错误说明。
|
|
480
|
+
- 已增加 `tests/bridge.test.js` 覆盖 P3.2 usage hints,验证 `yunti_fill`
|
|
481
|
+
和 `yunti_cdp_send_command` 的参数提示会被 MCP 返回。
|
|
482
|
+
|
|
483
|
+
### 目标
|
|
484
|
+
|
|
485
|
+
减少 Agent 猜参数、走弯路。
|
|
486
|
+
|
|
487
|
+
### 重点工具
|
|
488
|
+
|
|
489
|
+
- `yunti_click`
|
|
490
|
+
- `yunti_hover`
|
|
491
|
+
- `yunti_fill`
|
|
492
|
+
- `yunti_close_page`
|
|
493
|
+
- `yunti_cdp_send_command`
|
|
494
|
+
- `yunti_forget_learning_memory`
|
|
495
|
+
|
|
496
|
+
### 验收标准
|
|
497
|
+
|
|
498
|
+
- 参数组合错误时返回明确修复建议。
|
|
499
|
+
- schema 与实际实现一致。
|
|
500
|
+
- `yunti_get_tool_usage_hints` 覆盖所有核心工具。
|
|
501
|
+
- skill 同步更新常见错误。
|
|
502
|
+
|
|
503
|
+
验收结果:
|
|
504
|
+
|
|
505
|
+
- `npm run check` 通过,覆盖 P3.2 涉及的 `extension/tool-handlers.js`、
|
|
506
|
+
`extension/cdp.js`、`mcp/memory.js`、`mcp/tools.js` 等模块语法检查。
|
|
507
|
+
- `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器 smoke 按配置跳过。
|
|
508
|
+
- `npm run test:e2e` 按预期跳过真实浏览器 smoke test。
|
|
509
|
+
- `npm run package:extension` 通过,zip 内包含 12 个 extension runtime 文件。
|
|
510
|
+
- `unzip -l dist/yunti-browser-runtime-extension-0.1.0.zip` 确认 zip 内仅包含
|
|
511
|
+
12 个扩展运行文件。
|
|
512
|
+
- `npm pack --dry-run` 通过,npm tarball 包含 P3.2 更新后的 docs、skill、
|
|
513
|
+
MCP 和 extension 模块。
|
|
514
|
+
|
|
515
|
+
## P4.1 发布前文档与权限审查
|
|
516
|
+
|
|
517
|
+
状态:已完成(2026-07-02)
|
|
518
|
+
|
|
519
|
+
阶段进展:
|
|
520
|
+
|
|
521
|
+
- 已复查 README、INSTALL、SECURITY、extension manifest 和 package metadata。
|
|
522
|
+
- README 已补充 P3.2 后的参数规则速查,覆盖 click/hover/fill/close/CDP/memory
|
|
523
|
+
常见误用。
|
|
524
|
+
- INSTALL 的 Common Recovery 已补充参数错误恢复、`yunti_fill` 定位要求和
|
|
525
|
+
raw tab/target 关闭路径。
|
|
526
|
+
- SECURITY 已补充 `storage` 权限用途、广泛 host permissions 的当前理由和
|
|
527
|
+
发布前复审要求。
|
|
528
|
+
- package metadata 当前包含 `bin`、`files`、`repository`、`homepage`、`bugs`
|
|
529
|
+
和 keywords;公开发布前仍需按实际仓库最终确认 URL。
|
|
530
|
+
|
|
531
|
+
### 目标
|
|
532
|
+
|
|
533
|
+
把发布前用户最容易踩坑的文档入口补齐,并确认权限说明足够透明。
|
|
534
|
+
|
|
535
|
+
### 验收标准
|
|
536
|
+
|
|
537
|
+
- README / INSTALL 覆盖 P3.2 后的核心参数规则。
|
|
538
|
+
- SECURITY 解释 manifest 中每项权限和 broad host permissions 的原因。
|
|
539
|
+
- 公开文档不出现内部路径或内部平台残留。
|
|
540
|
+
- npm package dry-run 继续包含更新后的 docs、skill、MCP 和 extension 文件。
|
|
541
|
+
|
|
542
|
+
验收结果:
|
|
543
|
+
|
|
544
|
+
- 公开文档残留检查通过:
|
|
545
|
+
`rg "/U[s]ers|d[i]ngguangyi|C[o]deg|x[y]y|y[b]m100" README.md docs skills package.json`
|
|
546
|
+
无输出。
|
|
547
|
+
- `npm run check` 通过,P4.1 文档调整未影响 JS 语法检查。
|
|
548
|
+
- `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器 smoke 按配置跳过。
|
|
549
|
+
- `npm pack --dry-run` 通过,npm tarball 包含更新后的 README、docs、skill、
|
|
550
|
+
MCP 和 extension 文件,共 35 个文件。
|
|
551
|
+
|
|
552
|
+
## P4.2 Agent 接入示例补全
|
|
553
|
+
|
|
554
|
+
状态:已完成(2026-07-02)
|
|
555
|
+
|
|
556
|
+
阶段进展:
|
|
557
|
+
|
|
558
|
+
- 已在 INSTALL 增加 Codex、Claude Code、Cursor、Cline 的接入示例。
|
|
559
|
+
- README 已链接到 INSTALL 的 Agent Examples,并移除“缺少详细接入示例”的未完成项。
|
|
560
|
+
- 接入示例统一使用 `npm run print-config -- --agent ... --human`,避免在公开
|
|
561
|
+
文档中写入本机绝对路径。
|
|
562
|
+
- 接入示例补充了 skill 安装、bridge token 同步、重启/刷新和 doctor 验证提示。
|
|
563
|
+
|
|
564
|
+
### 目标
|
|
565
|
+
|
|
566
|
+
让用户能从公开文档直接完成主流 Agent 的 MCP 接入,而不需要猜配置位置或参数。
|
|
567
|
+
|
|
568
|
+
### 验收标准
|
|
569
|
+
|
|
570
|
+
- INSTALL 覆盖 Codex、Claude Code、Cursor、Cline 四类接入示例。
|
|
571
|
+
- README 指向详细接入示例,当前未完成项不再包含已完成内容。
|
|
572
|
+
- 示例不硬编码本机绝对路径或真实 token。
|
|
573
|
+
- 公开文档残留检查、语法检查、测试和 npm pack dry-run 通过。
|
|
574
|
+
|
|
575
|
+
验收结果:
|
|
576
|
+
|
|
577
|
+
- 公开文档残留检查通过:
|
|
578
|
+
`rg "/U[s]ers|d[i]ngguangyi|C[o]deg|x[y]y|y[b]m100" README.md docs skills package.json`
|
|
579
|
+
无输出。
|
|
580
|
+
- `npm run check` 通过,接入示例文档调整未影响 JS 语法检查。
|
|
581
|
+
- `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器 smoke 按配置跳过。
|
|
582
|
+
- `npm pack --dry-run` 通过,npm tarball 包含更新后的 README、INSTALL、
|
|
583
|
+
docs、skill、MCP 和 extension 文件,共 35 个文件。
|
|
584
|
+
|
|
585
|
+
## P4.3 npm 发布 URL 最终确认
|
|
586
|
+
|
|
587
|
+
状态:已完成(2026-07-02)
|
|
588
|
+
|
|
589
|
+
阶段进展:
|
|
590
|
+
|
|
591
|
+
- 已核对 `package.json` 的发布 metadata:
|
|
592
|
+
`repository=git+https://github.com/yunti-ai/yunti-browser-runtime.git`、
|
|
593
|
+
`homepage=https://github.com/yunti-ai/yunti-browser-runtime#readme`、
|
|
594
|
+
`bugs=https://github.com/yunti-ai/yunti-browser-runtime/issues`。
|
|
595
|
+
- 已检查 GitHub repository URL:
|
|
596
|
+
`curl -I -L https://github.com/yunti-ai/yunti-browser-runtime` 返回 HTTP 404。
|
|
597
|
+
- 已检查 GitHub issues URL:
|
|
598
|
+
`curl -I -L https://github.com/yunti-ai/yunti-browser-runtime/issues` 返回 HTTP 404。
|
|
599
|
+
- 已检查 npm registry:
|
|
600
|
+
`npm view yunti-browser-runtime version --json` 返回 E404,说明包名当前未发布或不可见。
|
|
601
|
+
- 已收到新的 GitHub SSH 远端:
|
|
602
|
+
`git@github.com:dingguangyi0/yunti-browser-runtime.git`。
|
|
603
|
+
- 已通过 `git ls-remote` 确认该 SSH 远端当前账号可访问。
|
|
604
|
+
- 已将 `package.json` 发布 metadata 切换到:
|
|
605
|
+
`repository=git+https://github.com/dingguangyi0/yunti-browser-runtime.git`、
|
|
606
|
+
`homepage=https://github.com/dingguangyi0/yunti-browser-runtime#readme`、
|
|
607
|
+
`bugs=https://github.com/dingguangyi0/yunti-browser-runtime/issues`。
|
|
608
|
+
- 已修正 `scripts/release-check.js` 的公开文档残留门禁:允许正式公开 GitHub
|
|
609
|
+
owner `dingguangyi0`,继续拦截本机路径和内部残留词。
|
|
610
|
+
- 已增强 `scripts/check-package-metadata.js`:repository/homepage/bugs 的 HEAD
|
|
611
|
+
请求遇到 TLS 断连或 5xx 等临时网络失败时会重试,避免 GitHub 瞬时网络抖动误挡发布。
|
|
612
|
+
- `scripts/check-package-metadata.js` 会在 homepage 去掉锚点后与 repository URL
|
|
613
|
+
相同时复用 repository 检查结果,避免对同一 GitHub 页面重复发起 HEAD 请求。
|
|
614
|
+
- 已执行 `git push -u origin main`,本地 `main` 已跟踪远端
|
|
615
|
+
`origin/main`。
|
|
616
|
+
- 已运行 `npm pkg fix`,将 `bin.yunti-browser-runtime` 规范化为
|
|
617
|
+
`bin/yunti-browser-runtime.js`,避免 npm publish dry-run 自动修正 package metadata。
|
|
618
|
+
- `npm run check:metadata` 已确认 repository、homepage、bugs URL 均返回 HTTP 200。
|
|
619
|
+
- `npm run release:prepublish` 已完整通过。
|
|
620
|
+
|
|
621
|
+
### 目标
|
|
622
|
+
|
|
623
|
+
确认 npm 发布 metadata 指向真实公开仓库,避免发布后 npm 页面出现不可访问链接。
|
|
624
|
+
|
|
625
|
+
### 验收标准
|
|
626
|
+
|
|
627
|
+
- `repository` 指向真实可访问的公开 GitHub 仓库。
|
|
628
|
+
- `homepage` 指向真实可访问的 README 页面。
|
|
629
|
+
- `bugs.url` 指向真实可访问的 issue tracker。
|
|
630
|
+
- `npm view yunti-browser-runtime` 的 E404 状态被明确接受为首次发布前状态,或根据实际包名调整。
|
|
631
|
+
|
|
632
|
+
当前结论:
|
|
633
|
+
|
|
634
|
+
- P4.3 已完成:`package.json` 的 repository/homepage/bugs metadata 指向
|
|
635
|
+
`https://github.com/dingguangyi0/yunti-browser-runtime`,且公开可达。
|
|
636
|
+
- npm 包名 `yunti-browser-runtime` 当前未发布;作为 `0.1.0` 首次发布状态已被接受。
|
|
637
|
+
- 发布前最后保留 `npm publish --dry-run` 和人工发布确认。
|
|
638
|
+
|
|
639
|
+
发布门禁结果:
|
|
640
|
+
|
|
641
|
+
- `npm run check:metadata` 通过(2026-07-02T15:47:32.161Z):
|
|
642
|
+
repository、homepage、bugs URL 均返回 HTTP 200;npm 未发布状态被识别为首次发布可接受。
|
|
643
|
+
- `npm run release:prepublish` 通过(metadata checkedAt:
|
|
644
|
+
2026-07-02T15:57:16.352Z):`npm run check:metadata` 和
|
|
645
|
+
`npm run release:check` 均通过。
|
|
646
|
+
- `npm run release:check` 覆盖公开文档残留检查、public Markdown link check
|
|
647
|
+
(11 个 Markdown 文件)、version consistency check、CLI smoke check、
|
|
648
|
+
print-config smoke check、doctor smoke check、`npm run check`、`npm test`、
|
|
649
|
+
npm package contents check 和 extension zip contents check。
|
|
650
|
+
- release gate 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
651
|
+
smoke 按配置跳过。
|
|
652
|
+
|
|
653
|
+
## P4.4 发布门禁脚本固化
|
|
654
|
+
|
|
655
|
+
状态:已完成(2026-07-02)
|
|
656
|
+
|
|
657
|
+
阶段进展:
|
|
658
|
+
|
|
659
|
+
- 新增 `scripts/release-check.js`,固化公开文档残留检查、`npm run check`、
|
|
660
|
+
`npm test` 和 `npm pack --dry-run`。
|
|
661
|
+
- 新增 `npm run release:check`。
|
|
662
|
+
- `npm run check` 已纳入 `scripts/release-check.js` 的语法检查。
|
|
663
|
+
- README 和 INSTALL 已增加 `npm run release:check` 的发布前门禁说明。
|
|
664
|
+
|
|
665
|
+
### 目标
|
|
666
|
+
|
|
667
|
+
把当前手工发布检查固化成一个可重复命令,减少发布前漏跑步骤。
|
|
668
|
+
|
|
669
|
+
### 验收标准
|
|
670
|
+
|
|
671
|
+
- `npm run release:check` 可一次性运行公开文档残留检查、语法检查、测试和
|
|
672
|
+
npm dry-run。
|
|
673
|
+
- `npm run check` 覆盖新增脚本语法检查。
|
|
674
|
+
- README / INSTALL 说明发布前门禁命令。
|
|
675
|
+
- `npm run release:check` 通过。
|
|
676
|
+
|
|
677
|
+
验收结果:
|
|
678
|
+
|
|
679
|
+
- `npm run release:check` 通过。
|
|
680
|
+
- release check 内部公开文档残留检查通过。
|
|
681
|
+
- release check 内部 `npm run check` 通过,并覆盖 `scripts/release-check.js`。
|
|
682
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
683
|
+
smoke 按配置跳过。
|
|
684
|
+
- release check 内部 `npm pack --dry-run` 通过,npm tarball 包含新增的
|
|
685
|
+
`scripts/release-check.js`,共 36 个文件。
|
|
686
|
+
|
|
687
|
+
## P4.5 发布运行手册
|
|
688
|
+
|
|
689
|
+
状态:已完成(2026-07-02)
|
|
690
|
+
|
|
691
|
+
阶段进展:
|
|
692
|
+
|
|
693
|
+
- 新增 `docs/RELEASE.md`,记录发布前外部 URL 确认、release gate、extension
|
|
694
|
+
zip 检查、可选真实浏览器 smoke test、npm publish dry-run 和发布后检查。
|
|
695
|
+
- README 文档入口已增加发布运行手册链接。
|
|
696
|
+
- 发布运行手册明确:GitHub repository / issues URL 返回 404 时不得发布。
|
|
697
|
+
|
|
698
|
+
### 目标
|
|
699
|
+
|
|
700
|
+
把发布动作整理成可执行 checklist,确保 P4.3 外部确认完成后可以直接按步骤发布。
|
|
701
|
+
|
|
702
|
+
### 验收标准
|
|
703
|
+
|
|
704
|
+
- `docs/RELEASE.md` 覆盖外部 URL 确认、`npm run release:check`、extension
|
|
705
|
+
zip 检查、可选 E2E、npm publish dry-run 和发布后验证。
|
|
706
|
+
- README 链接发布运行手册。
|
|
707
|
+
- `npm run release:check` 通过,并确认 `docs/RELEASE.md` 进入 npm tarball。
|
|
708
|
+
|
|
709
|
+
验收结果:
|
|
710
|
+
|
|
711
|
+
- `npm run release:check` 通过。
|
|
712
|
+
- release check 内部公开文档残留检查通过。
|
|
713
|
+
- release check 内部 `npm run check` 通过。
|
|
714
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
715
|
+
smoke 按配置跳过。
|
|
716
|
+
- release check 内部 `npm pack --dry-run` 通过,npm tarball 包含新增的
|
|
717
|
+
`docs/RELEASE.md`,共 37 个文件。
|
|
718
|
+
|
|
719
|
+
## P4.6 package metadata 检查命令
|
|
720
|
+
|
|
721
|
+
状态:已完成(2026-07-02)
|
|
722
|
+
|
|
723
|
+
阶段进展:
|
|
724
|
+
|
|
725
|
+
- 新增 `scripts/check-package-metadata.js`,检查 `package.json` 中
|
|
726
|
+
`repository`、`homepage`、`bugs.url` 是否公开可达。
|
|
727
|
+
- 新增 `npm run check:metadata`,输出 JSON 报告并在 GitHub URL 不可达时返回
|
|
728
|
+
非零退出码。
|
|
729
|
+
- `npm run check` 已纳入 `scripts/check-package-metadata.js` 的语法检查。
|
|
730
|
+
- `docs/RELEASE.md` 已改用 `npm run check:metadata` 作为 P4.3 外部 URL
|
|
731
|
+
复验命令。
|
|
732
|
+
- README 未完成项已补充 `npm run check:metadata` 复查提示。
|
|
733
|
+
|
|
734
|
+
### 目标
|
|
735
|
+
|
|
736
|
+
让 P4.3 的外部 URL 确认可重复执行,并在仓库公开后可以一键复验。
|
|
737
|
+
|
|
738
|
+
### 验收标准
|
|
739
|
+
|
|
740
|
+
- `npm run check:metadata` 输出 repository/homepage/bugs/npm 状态 JSON。
|
|
741
|
+
- 当前 GitHub URL 返回 404 时,`npm run check:metadata` 返回非零退出码并给出
|
|
742
|
+
下一步提示。
|
|
743
|
+
- npm 包名 E404 被报告为首次发布可接受状态,而不是阻断项。
|
|
744
|
+
- `npm run check` 和 `npm run release:check` 通过。
|
|
745
|
+
|
|
746
|
+
验收结果:
|
|
747
|
+
|
|
748
|
+
- `npm run check:metadata` 输出 JSON 报告;当前报告 `ok=false`,并给出创建/公开
|
|
749
|
+
GitHub repository 或更新 package metadata 的下一步提示。
|
|
750
|
+
- `npm run check:metadata` 对当前 GitHub URL 不可达状态返回非零退出码,符合
|
|
751
|
+
发布阻断预期。
|
|
752
|
+
- `npm run check:metadata` 将 npm E404 报告为首次发布可接受状态。
|
|
753
|
+
- `npm run release:check` 通过;内部 `npm run check` 已覆盖
|
|
754
|
+
`scripts/check-package-metadata.js` 语法检查。
|
|
755
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
756
|
+
smoke 按配置跳过。
|
|
757
|
+
- release check 内部 `npm pack --dry-run` 通过,npm tarball 包含新增的
|
|
758
|
+
`scripts/check-package-metadata.js`,共 38 个文件。
|
|
759
|
+
|
|
760
|
+
## P4.7 prepublish 发布门禁串联
|
|
761
|
+
|
|
762
|
+
状态:已完成(2026-07-02)
|
|
763
|
+
|
|
764
|
+
实现摘要:
|
|
765
|
+
|
|
766
|
+
- 新增 `npm run release:prepublish`,按顺序运行 `npm run check:metadata`
|
|
767
|
+
和 `npm run release:check`。
|
|
768
|
+
- `docs/RELEASE.md` 已补充 `release:prepublish` 的使用时机:外部 package
|
|
769
|
+
metadata 预期已公开可达时运行。
|
|
770
|
+
- README 已补充 `release:prepublish` 说明,并明确当前 GitHub URL 返回 404
|
|
771
|
+
时该命令按预期失败。
|
|
772
|
+
- 当前 P4.3 GitHub URL 未公开时,`release:prepublish` 会停在
|
|
773
|
+
`check:metadata`,避免误进入本地 release gate 和 npm 发布动作。
|
|
774
|
+
|
|
775
|
+
### 目标
|
|
776
|
+
|
|
777
|
+
把“metadata 外部确认 + 本地 release gate”串成一个真正发布前命令,减少发布前漏跑外部 URL 确认。
|
|
778
|
+
|
|
779
|
+
### 验收标准
|
|
780
|
+
|
|
781
|
+
- `package.json` 暴露 `npm run release:prepublish`。
|
|
782
|
+
- `docs/RELEASE.md` 和 README 说明该命令会在当前 P4.3 未确认状态下失败。
|
|
783
|
+
- `npm run check` 通过。
|
|
784
|
+
- `npm run release:check` 通过。
|
|
785
|
+
- `npm run release:prepublish` 当前因 P4.3 GitHub URL 不可达而失败,并输出
|
|
786
|
+
`check:metadata` 的 JSON 阻塞报告。
|
|
787
|
+
|
|
788
|
+
### 验收记录
|
|
789
|
+
|
|
790
|
+
- `npm run release:check` 通过:公开文档残留检查、`npm run check`、`npm test`
|
|
791
|
+
和 `npm pack --dry-run` 均通过。
|
|
792
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
793
|
+
smoke 按配置跳过。
|
|
794
|
+
- release check 内部 `npm pack --dry-run` 通过,npm tarball 包含
|
|
795
|
+
`scripts/check-package-metadata.js`、`scripts/release-check.js` 和
|
|
796
|
+
`docs/RELEASE.md`,共 38 个文件。
|
|
797
|
+
- `npm run release:prepublish` 返回非零退出码,符合当前 P4.3 未完成状态:
|
|
798
|
+
`check:metadata` 报告 repository 404、bugs 404、homepage URL 不可达,
|
|
799
|
+
npm E404 被识别为首次发布可接受状态。
|
|
800
|
+
- P4.3 阻塞处理步骤已新增 `docs/PUBLISHING_BLOCKERS.md` 并从 README、
|
|
801
|
+
release runbook、project status 和当前下一步链接。
|
|
802
|
+
- 新增阻塞处理文档后,`npm run release:check` 再次通过:公开文档残留检查、
|
|
803
|
+
`npm run check`、`npm test` 和 `npm pack --dry-run` 均通过;npm tarball
|
|
804
|
+
包含 `docs/PUBLISHING_BLOCKERS.md`,共 39 个文件。
|
|
805
|
+
|
|
806
|
+
## P4.8 npm package 内容门禁
|
|
807
|
+
|
|
808
|
+
状态:已完成(2026-07-02)
|
|
809
|
+
|
|
810
|
+
实现摘要:
|
|
811
|
+
|
|
812
|
+
- `scripts/release-check.js` 不再只运行普通 `npm pack --dry-run`,而是运行
|
|
813
|
+
`npm pack --json --dry-run` 并解析 tarball 文件列表。
|
|
814
|
+
- release gate 现在会校验关键运行时、扩展、skill、发布文档和发布脚本是否实际进入
|
|
815
|
+
npm 包。
|
|
816
|
+
- 必备清单覆盖 `README.md`、`LICENSE`、`package.json`、CLI 入口、MCP
|
|
817
|
+
bridge 核心模块、extension 核心模块、skill、安装/发布/阻塞文档,以及
|
|
818
|
+
metadata/release check 脚本。
|
|
819
|
+
|
|
820
|
+
### 目标
|
|
821
|
+
|
|
822
|
+
把 npm 包内容从“能打包”提升为“关键发布文件都可证明进入 tarball”,避免后续
|
|
823
|
+
`package.json.files`、文件重命名或新增发布文档时漏包。
|
|
824
|
+
|
|
825
|
+
### 验收标准
|
|
826
|
+
|
|
827
|
+
- `npm run release:check` 会解析 `npm pack --json --dry-run` 输出。
|
|
828
|
+
- release gate 在必备文件缺失时返回非零退出码并列出缺失文件。
|
|
829
|
+
- release gate 在必备文件完整时输出 package contents check passed。
|
|
830
|
+
- `npm run check` 覆盖更新后的 `scripts/release-check.js` 语法检查。
|
|
831
|
+
|
|
832
|
+
### 验收记录
|
|
833
|
+
|
|
834
|
+
- `npm run release:check` 通过:公开文档残留检查、`npm run check`、
|
|
835
|
+
`npm test` 和新增的 npm package contents check 均通过。
|
|
836
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
837
|
+
smoke 按配置跳过。
|
|
838
|
+
- release check 内部 `npm pack --json --dry-run` 解析成功,必备 npm package
|
|
839
|
+
内容检查通过,共 39 个文件。
|
|
840
|
+
|
|
841
|
+
## P4.9 extension zip 内容门禁
|
|
842
|
+
|
|
843
|
+
状态:已完成(2026-07-02)
|
|
844
|
+
|
|
845
|
+
实现摘要:
|
|
846
|
+
|
|
847
|
+
- `scripts/release-check.js` 已在 release gate 中运行 `npm run package:extension`。
|
|
848
|
+
- release gate 会解析生成的 extension zip 中央目录,不依赖系统 `unzip`。
|
|
849
|
+
- extension zip 校验要求 zip 只包含扩展运行文件:
|
|
850
|
+
`background.js`、`cdp.js`、`content.css`、`content.js`、`network-monitor.js`、
|
|
851
|
+
`manifest.json`、`popup.css`、`popup.html`、`popup.js`、
|
|
852
|
+
`session-manager.js`、`settings.js`、`tool-handlers.js`。
|
|
853
|
+
- 必备文件缺失或出现额外文件时,release gate 会返回非零退出码并列出问题文件。
|
|
854
|
+
|
|
855
|
+
### 目标
|
|
856
|
+
|
|
857
|
+
把浏览器扩展分发包从“手动 unzip 检查”升级为发布门禁自动检查,避免扩展 zip
|
|
858
|
+
遗漏运行文件或混入 docs、tests、node_modules、隐藏文件等非运行内容。
|
|
859
|
+
|
|
860
|
+
### 验收标准
|
|
861
|
+
|
|
862
|
+
- `npm run release:check` 会自动运行 `npm run package:extension`。
|
|
863
|
+
- release gate 会解析 extension zip 的实际文件列表。
|
|
864
|
+
- extension zip 在缺失必备文件或包含额外文件时返回非零退出码。
|
|
865
|
+
- extension zip 完整且只包含允许文件时输出 extension zip contents check passed。
|
|
866
|
+
|
|
867
|
+
### 验收记录
|
|
868
|
+
|
|
869
|
+
- `npm run release:check` 通过:公开文档残留检查、`npm run check`、
|
|
870
|
+
`npm test`、npm package contents check 和 extension zip contents check
|
|
871
|
+
均通过。
|
|
872
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
873
|
+
smoke 按配置跳过。
|
|
874
|
+
- release check 内部 `node scripts/package-extension.js` 成功生成扩展 zip,
|
|
875
|
+
extension zip contents check 通过,共 12 个扩展运行文件。
|
|
876
|
+
|
|
877
|
+
## P4.10 package / extension 版本一致性门禁
|
|
878
|
+
|
|
879
|
+
状态:已完成(2026-07-02)
|
|
880
|
+
|
|
881
|
+
实现摘要:
|
|
882
|
+
|
|
883
|
+
- `scripts/release-check.js` 已新增 version consistency check。
|
|
884
|
+
- release gate 会读取 `package.json` 和 `extension/manifest.json`。
|
|
885
|
+
- npm package 版本和 browser extension manifest 版本缺失或不一致时,
|
|
886
|
+
release gate 会返回非零退出码并打印两边版本。
|
|
887
|
+
- 当前 `package.json` 和 `extension/manifest.json` 版本均为 `0.1.0`。
|
|
888
|
+
|
|
889
|
+
### 目标
|
|
890
|
+
|
|
891
|
+
防止 npm 包版本和浏览器扩展版本在发布前漂移,避免用户拿到 npm runtime 与
|
|
892
|
+
extension zip 版本不一致的组合。
|
|
893
|
+
|
|
894
|
+
### 验收标准
|
|
895
|
+
|
|
896
|
+
- `npm run release:check` 会校验 `package.json.version` 与
|
|
897
|
+
`extension/manifest.json.version`。
|
|
898
|
+
- 两边版本一致时输出 version consistency check passed。
|
|
899
|
+
- 任一版本缺失或两边不一致时,release gate 返回非零退出码并列出两边版本。
|
|
900
|
+
- `npm run check` 覆盖更新后的 `scripts/release-check.js` 语法检查。
|
|
901
|
+
|
|
902
|
+
### 验收记录
|
|
903
|
+
|
|
904
|
+
- `npm run release:check` 通过:公开文档残留检查、version consistency check、
|
|
905
|
+
`npm run check`、`npm test`、npm package contents check 和 extension zip
|
|
906
|
+
contents check 均通过。
|
|
907
|
+
- version consistency check 输出 `0.1.0`,确认 `package.json` 与
|
|
908
|
+
`extension/manifest.json` 版本一致。
|
|
909
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
910
|
+
smoke 按配置跳过。
|
|
911
|
+
- 最终复查中,`npm run release:check` 继续通过:公开文档残留检查、version
|
|
912
|
+
consistency check、`npm run check`、`npm test`、npm package contents check
|
|
913
|
+
和 extension zip contents check 均通过。
|
|
914
|
+
- 最终复查中,`npm run check:metadata` 仍返回非零退出码:repository、
|
|
915
|
+
homepage、bugs URL 均返回 404;npm E404 仍被识别为首次发布可接受状态。
|
|
916
|
+
|
|
917
|
+
## P4.11 npm bin CLI smoke 门禁
|
|
918
|
+
|
|
919
|
+
状态:已完成(2026-07-02)
|
|
920
|
+
|
|
921
|
+
实现摘要:
|
|
922
|
+
|
|
923
|
+
- `scripts/release-check.js` 已新增 CLI smoke check。
|
|
924
|
+
- release gate 会校验 `package.json` 中 `bin.yunti-browser-runtime` 指向
|
|
925
|
+
`bin/yunti-browser-runtime.js`。
|
|
926
|
+
- release gate 会运行 `node bin/yunti-browser-runtime.js --help`,确认帮助输出包含
|
|
927
|
+
`Yunti Browser Runtime` 和 `package-extension` 命令。
|
|
928
|
+
- release gate 会运行 `node bin/yunti-browser-runtime.js --version`,确认输出与
|
|
929
|
+
`package.json.version` 一致。
|
|
930
|
+
|
|
931
|
+
### 目标
|
|
932
|
+
|
|
933
|
+
防止 npm 发布包的 CLI 入口、帮助命令或版本命令在发布前漂移,确保用户安装后能
|
|
934
|
+
通过 `yunti-browser-runtime --help` 和 `yunti-browser-runtime --version`
|
|
935
|
+
完成基本自检。
|
|
936
|
+
|
|
937
|
+
### 验收标准
|
|
938
|
+
|
|
939
|
+
- `npm run release:check` 会校验 `package.json` 的 npm bin 映射。
|
|
940
|
+
- CLI `--help` 返回 0,并包含主要命令入口。
|
|
941
|
+
- CLI `--version` 返回 0,并与 `package.json.version` 一致。
|
|
942
|
+
- 任一检查失败时,release gate 返回非零退出码并打印失败细节。
|
|
943
|
+
|
|
944
|
+
### 验收记录
|
|
945
|
+
|
|
946
|
+
- `npm run release:check` 通过:公开文档残留检查、version consistency check、
|
|
947
|
+
CLI smoke check、`npm run check`、`npm test`、npm package contents check
|
|
948
|
+
和 extension zip contents check 均通过。
|
|
949
|
+
- CLI smoke check 输出 `0.1.0`,确认 `bin.yunti-browser-runtime`、`--help`
|
|
950
|
+
和 `--version` 均可用。
|
|
951
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
952
|
+
smoke 按配置跳过。
|
|
953
|
+
|
|
954
|
+
## P4.12 Agent config smoke 门禁
|
|
955
|
+
|
|
956
|
+
状态:已完成(2026-07-02)
|
|
957
|
+
|
|
958
|
+
实现摘要:
|
|
959
|
+
|
|
960
|
+
- `scripts/release-check.js` 已新增 print-config smoke check。
|
|
961
|
+
- release gate 会分别运行 `scripts/print-config.js --agent <agent> --json`,
|
|
962
|
+
覆盖 Codex、Claude Code、Cursor、Cline 四种 Agent 配置输出。
|
|
963
|
+
- JSON smoke 会校验 MCP server 名称、`node` 命令、`mcp/server.js` 参数、
|
|
964
|
+
`YUNTI_BROWSER_BRIDGE_PORT`、`YUNTI_BROWSER_BRIDGE_TOKEN` 指引和 skill 路径。
|
|
965
|
+
- release gate 还会运行 `scripts/print-config.js --agent codex --human`,
|
|
966
|
+
确认人类可读输出包含配置标题、token 指引和 skill 路径。
|
|
967
|
+
|
|
968
|
+
### 目标
|
|
969
|
+
|
|
970
|
+
防止 Agent 接入配置在发布前漂移,确保公开文档推荐的 `print-config` 命令能持续
|
|
971
|
+
输出可用的 MCP 配置和 skill 安装提示。
|
|
972
|
+
|
|
973
|
+
### 验收标准
|
|
974
|
+
|
|
975
|
+
- `npm run release:check` 会校验 Codex、Claude Code、Cursor、Cline 的 JSON
|
|
976
|
+
配置输出。
|
|
977
|
+
- JSON 输出必须包含可用的 `yunti-browser-runtime` MCP server 配置。
|
|
978
|
+
- human 输出必须包含配置标题、bridge token 指引和 skill 路径。
|
|
979
|
+
- 任一 Agent 配置输出异常时,release gate 返回非零退出码并打印失败细节。
|
|
980
|
+
|
|
981
|
+
### 验收记录
|
|
982
|
+
|
|
983
|
+
- `npm run release:check` 通过:公开文档残留检查、version consistency check、
|
|
984
|
+
CLI smoke check、print-config smoke check、`npm run check`、`npm test`、
|
|
985
|
+
npm package contents check 和 extension zip contents check 均通过。
|
|
986
|
+
- print-config smoke check 覆盖 Codex、Claude Code、Cursor、Cline 四种 Agent
|
|
987
|
+
JSON 输出,并通过 Codex human 输出检查 token 和 skill 指引。
|
|
988
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
989
|
+
smoke 按配置跳过。
|
|
990
|
+
|
|
991
|
+
## P4.13 doctor JSON smoke 门禁
|
|
992
|
+
|
|
993
|
+
状态:已完成(2026-07-02)
|
|
994
|
+
|
|
995
|
+
实现摘要:
|
|
996
|
+
|
|
997
|
+
- `scripts/release-check.js` 已新增 doctor smoke check。
|
|
998
|
+
- release gate 会运行 `scripts/doctor.js` 并解析 stdout JSON。
|
|
999
|
+
- doctor smoke 校验 Node 版本检查、MCP server 文件、skill 文件、bridge
|
|
1000
|
+
token header、bridge reachability 字段和 next steps 结构。
|
|
1001
|
+
- doctor smoke 不要求本地 bridge 必须在线;bridge 未启动时只要 JSON 诊断结构正确,
|
|
1002
|
+
release gate 仍可通过。
|
|
1003
|
+
|
|
1004
|
+
### 目标
|
|
1005
|
+
|
|
1006
|
+
防止安装诊断入口在发布前失效,确保用户发布后可以通过 `npm run doctor` 或
|
|
1007
|
+
CLI doctor 命令拿到可解析的诊断 JSON 和下一步建议。
|
|
1008
|
+
|
|
1009
|
+
### 验收标准
|
|
1010
|
+
|
|
1011
|
+
- `npm run release:check` 会校验 doctor JSON 输出可解析。
|
|
1012
|
+
- doctor JSON 必须包含 Node、bridge、MCP server、skill 和 next steps 信息。
|
|
1013
|
+
- MCP server 与 skill 文件必须存在。
|
|
1014
|
+
- bridge 未启动不应阻塞 release gate,但必须在 doctor JSON 中体现 reachable 状态。
|
|
1015
|
+
|
|
1016
|
+
### 验收记录
|
|
1017
|
+
|
|
1018
|
+
- `npm run release:check` 通过:公开文档残留检查、version consistency check、
|
|
1019
|
+
CLI smoke check、print-config smoke check、doctor smoke check、`npm run check`、
|
|
1020
|
+
`npm test`、npm package contents check 和 extension zip contents check 均通过。
|
|
1021
|
+
- doctor smoke check 输出 bridge not reachable,确认 bridge 离线时仍能返回结构化
|
|
1022
|
+
JSON 诊断并通过 release gate。
|
|
1023
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
1024
|
+
smoke 按配置跳过。
|
|
1025
|
+
|
|
1026
|
+
## P4.14 公开文档相对链接门禁
|
|
1027
|
+
|
|
1028
|
+
状态:已完成(2026-07-02)
|
|
1029
|
+
|
|
1030
|
+
实现摘要:
|
|
1031
|
+
|
|
1032
|
+
- `scripts/release-check.js` 已新增 public Markdown link check。
|
|
1033
|
+
- release gate 会扫描 README、docs、skills 下的 Markdown 文件。
|
|
1034
|
+
- link check 会忽略代码块、纯锚点、外部 URL 和 mailto 链接。
|
|
1035
|
+
- 对本地相对链接,release gate 会解析相对路径并确认目标文件存在。
|
|
1036
|
+
|
|
1037
|
+
### 目标
|
|
1038
|
+
|
|
1039
|
+
防止公开文档中的相对链接在发布前断裂,确保 README、release runbook、状态文档和
|
|
1040
|
+
skill 文档里的本地跳转都能指向实际文件。
|
|
1041
|
+
|
|
1042
|
+
### 验收标准
|
|
1043
|
+
|
|
1044
|
+
- `npm run release:check` 会检查公开 Markdown 相对链接。
|
|
1045
|
+
- 相对链接目标文件缺失时,release gate 返回非零退出码并列出断链来源。
|
|
1046
|
+
- 外部 URL、邮件链接、纯页面锚点和代码块中的示例文本不会误报。
|
|
1047
|
+
|
|
1048
|
+
### 验收记录
|
|
1049
|
+
|
|
1050
|
+
- `npm run release:check` 通过:公开文档残留检查、public Markdown link check
|
|
1051
|
+
(11 个 Markdown 文件)、version consistency check、CLI smoke check、
|
|
1052
|
+
print-config smoke check、doctor smoke check、`npm run check`、`npm test`、
|
|
1053
|
+
npm package contents check 和 extension zip contents check 均通过。
|
|
1054
|
+
- release check 内部 `npm test` 通过:59 项测试,58 项通过,1 项真实浏览器
|
|
1055
|
+
smoke 按配置跳过。
|
|
1056
|
+
- npm package contents check 通过并确认 dry-run tarball 包含 39 个文件;
|
|
1057
|
+
extension zip contents check 通过并确认扩展 zip 包含 12 个运行时文件。
|
|
1058
|
+
|
|
1059
|
+
## P4.15 npm 官方 registry 发布脚本
|
|
1060
|
+
|
|
1061
|
+
状态:已完成(2026-07-02)
|
|
1062
|
+
|
|
1063
|
+
实现摘要:
|
|
1064
|
+
|
|
1065
|
+
- 新增 `npm run release:dry-run`,先执行 `npm run release:prepublish`,再执行
|
|
1066
|
+
`npm publish --dry-run --registry=https://registry.npmjs.org/`。
|
|
1067
|
+
- 新增 `npm run release:publish`,先执行 `npm run release:prepublish`,再执行
|
|
1068
|
+
`npm publish --registry=https://registry.npmjs.org/`。
|
|
1069
|
+
- README 和 `docs/RELEASE.md` 已改用这两个脚本,避免本机 npm registry mirror
|
|
1070
|
+
影响发布预览或正式发布。
|
|
1071
|
+
|
|
1072
|
+
### 目标
|
|
1073
|
+
|
|
1074
|
+
确保最终 npm 发布明确指向官方 npm registry,而不是开发机当前配置的
|
|
1075
|
+
`registry.npmmirror.com` 等镜像源。
|
|
1076
|
+
|
|
1077
|
+
### 验收标准
|
|
1078
|
+
|
|
1079
|
+
- `npm run release:dry-run` 能生成 npm 发布预览。
|
|
1080
|
+
- dry-run 输出显示发布目标为 `https://registry.npmjs.org/`。
|
|
1081
|
+
- dry-run tarball 内容仍为预期的 39 个文件。
|
|
1082
|
+
|
|
1083
|
+
### 验收记录
|
|
1084
|
+
|
|
1085
|
+
- 本机 `npm config get registry` 返回 `https://registry.npmmirror.com`,确认存在
|
|
1086
|
+
mirror registry 误发布风险。
|
|
1087
|
+
- `npm run release:dry-run` 已通过,输出显示
|
|
1088
|
+
`Publishing to https://registry.npmjs.org/`。
|
|
1089
|
+
- npm publish dry-run tarball 包含 39 个文件。
|
|
1090
|
+
|
|
1091
|
+
## P4.16 正式发布脚本内置门禁
|
|
1092
|
+
|
|
1093
|
+
状态:已完成(2026-07-03)
|
|
1094
|
+
|
|
1095
|
+
实现摘要:
|
|
1096
|
+
|
|
1097
|
+
- `release:dry-run` 已改为内置执行 `npm run release:prepublish`。
|
|
1098
|
+
- `release:publish` 已改为内置执行 `npm run release:prepublish` 和
|
|
1099
|
+
`npm run release:whoami`。
|
|
1100
|
+
- README 和 `docs/RELEASE.md` 已移除需要手动先跑 `release:prepublish` 的发布命令序列。
|
|
1101
|
+
|
|
1102
|
+
### 目标
|
|
1103
|
+
|
|
1104
|
+
避免人工执行 `release:dry-run` 或 `release:publish` 时绕过 metadata 检查、
|
|
1105
|
+
release gate、npm package 内容检查和 extension zip 内容检查。
|
|
1106
|
+
|
|
1107
|
+
### 验收标准
|
|
1108
|
+
|
|
1109
|
+
- `package.json` 中 `release:dry-run` 包含 `npm run release:prepublish`。
|
|
1110
|
+
- `package.json` 中 `release:publish` 包含 `npm run release:prepublish`。
|
|
1111
|
+
- `package.json` 中 `release:publish` 包含 `npm run release:whoami`。
|
|
1112
|
+
- `npm run release:dry-run` 会先跑完整 prepublish gate,再生成官方 npm registry
|
|
1113
|
+
dry-run 预览。
|
|
1114
|
+
|
|
1115
|
+
### 验收记录
|
|
1116
|
+
|
|
1117
|
+
- README 和 `docs/RELEASE.md` 已同步为 `npm run release:dry-run` /
|
|
1118
|
+
`npm run release:publish` 流程。
|
|
1119
|
+
- `npm run release:dry-run` 已通过,命令先进入 `npm run release:prepublish`,
|
|
1120
|
+
再执行 `npm publish --dry-run --registry=https://registry.npmjs.org/`。
|
|
1121
|
+
- 内置 prepublish gate 通过:repository、homepage、bugs 均返回 HTTP 200;
|
|
1122
|
+
release gate 覆盖公开文档残留、Markdown 链接、版本一致性、CLI smoke、
|
|
1123
|
+
print-config smoke、doctor smoke、`npm run check`、`npm test`、npm package
|
|
1124
|
+
contents 和 extension zip contents。
|
|
1125
|
+
- dry-run 输出显示 `Publishing to https://registry.npmjs.org/`,tarball 包含
|
|
1126
|
+
39 个文件。
|
|
1127
|
+
|
|
1128
|
+
## P4.17 npm 登录预检门禁
|
|
1129
|
+
|
|
1130
|
+
状态:已完成(2026-07-03)
|
|
1131
|
+
|
|
1132
|
+
实现摘要:
|
|
1133
|
+
|
|
1134
|
+
- 新增 `npm run release:whoami`,执行
|
|
1135
|
+
`npm whoami --registry=https://registry.npmjs.org/`。
|
|
1136
|
+
- `npm run release:publish` 已串联 `npm run release:whoami`,在正式发布前先确认
|
|
1137
|
+
当前机器已登录官方 npm registry。
|
|
1138
|
+
- README、`docs/RELEASE.md` 和项目状态已同步 npm 登录预检说明。
|
|
1139
|
+
|
|
1140
|
+
### 目标
|
|
1141
|
+
|
|
1142
|
+
让正式发布在缺少 npm 登录时以明确、可操作的错误提前停止,而不是进入 publish
|
|
1143
|
+
流程后才暴露认证问题。
|
|
1144
|
+
|
|
1145
|
+
### 验收标准
|
|
1146
|
+
|
|
1147
|
+
- `package.json` 中存在 `release:whoami`。
|
|
1148
|
+
- `release:publish` 在 `npm publish --registry=https://registry.npmjs.org/`
|
|
1149
|
+
前执行 `npm run release:whoami`。
|
|
1150
|
+
- 未登录 npmjs.org 时,`npm run release:whoami` 返回非零退出码并提示登录。
|
|
1151
|
+
|
|
1152
|
+
### 验收记录
|
|
1153
|
+
|
|
1154
|
+
- `npm run release:whoami` 当前返回 `ENEEDAUTH`,说明本机尚未登录
|
|
1155
|
+
`https://registry.npmjs.org/`。
|
|
1156
|
+
- `release:publish` 已内置登录预检;登录前不会进入正式 npm publish。
|
|
1157
|
+
|
|
1158
|
+
## P4.18 npm 发布后验证命令
|
|
1159
|
+
|
|
1160
|
+
状态:已完成(2026-07-03)
|
|
1161
|
+
|
|
1162
|
+
实现摘要:
|
|
1163
|
+
|
|
1164
|
+
- 新增 `scripts/check-published-package.js`,从官方 npm registry 读取
|
|
1165
|
+
`yunti-browser-runtime@0.1.0` 的发布信息。
|
|
1166
|
+
- 新增 `npm run release:verify-published`,校验已发布包的 name、version、
|
|
1167
|
+
repository、homepage、bugs 和 dist tarball URL。
|
|
1168
|
+
- `npm run check` 已纳入 `scripts/check-published-package.js` 的语法检查。
|
|
1169
|
+
- `npm run release:check` 的 npm package contents gate 已要求 tarball 包含
|
|
1170
|
+
`scripts/check-published-package.js`。
|
|
1171
|
+
- README、`docs/RELEASE.md` 和项目状态已同步发布后验证命令。
|
|
1172
|
+
|
|
1173
|
+
### 目标
|
|
1174
|
+
|
|
1175
|
+
把发布后的 `npm view` 人工检查固化为脚本,确保 npm registry 上的实际包版本和
|
|
1176
|
+
metadata 与当前 `package.json` 一致。
|
|
1177
|
+
|
|
1178
|
+
### 验收标准
|
|
1179
|
+
|
|
1180
|
+
- `npm run release:verify-published` 会读取官方 npm registry。
|
|
1181
|
+
- 已发布版本的 name、version、repository、homepage、bugs 和 tarball URL 与当前
|
|
1182
|
+
`package.json` 匹配时命令返回 0。
|
|
1183
|
+
- 当前版本未发布时,命令返回非零退出码并输出结构化 JSON 报告。
|
|
1184
|
+
- 未发布失败路径不会把 npm 本机 debug log 路径写入 JSON 报告。
|
|
1185
|
+
- `npm run release:check` 继续通过,且 npm tarball 包含发布后验证脚本。
|
|
1186
|
+
|
|
1187
|
+
### 验收记录
|
|
1188
|
+
|
|
1189
|
+
- `npm run release:verify-published` 当前返回非零退出码,报告
|
|
1190
|
+
`yunti-browser-runtime@0.1.0` 尚未发布到 `https://registry.npmjs.org/`;
|
|
1191
|
+
失败路径输出结构化 JSON,且不包含 npm 本机 debug log 路径。
|
|
1192
|
+
- `node --check scripts/check-published-package.js` 通过。
|
|
1193
|
+
- `npm run release:check` 通过:`npm run check` 已覆盖
|
|
1194
|
+
`scripts/check-published-package.js`,npm package contents check 确认 tarball
|
|
1195
|
+
包含 40 个文件。
|
|
1196
|
+
- `npm run release:dry-run` 通过:内置 prepublish gate 通过,官方 npm registry
|
|
1197
|
+
dry-run tarball 包含 40 个文件。
|
|
1198
|
+
|
|
1199
|
+
## P4.19 npm 正式发布执行
|
|
1200
|
+
|
|
1201
|
+
状态:进行中(2026-07-03,阻塞于 npm 2FA OTP 或具备 bypass 2FA 的发布 token)
|
|
1202
|
+
|
|
1203
|
+
执行摘要:
|
|
1204
|
+
|
|
1205
|
+
- `npm run release:whoami` 已确认当前官方 npm registry 登录账号为 `xuanzhu`。
|
|
1206
|
+
- 已按用户确认执行 `npm run release:publish`。
|
|
1207
|
+
- `release:publish` 已通过内置 `release:prepublish`、`release:whoami` 和全部本地
|
|
1208
|
+
发布门禁;本次测试覆盖 59 项,58 项通过,1 项真实浏览器 smoke 按配置跳过。
|
|
1209
|
+
- 本次正式发布已进入 `npm publish --registry=https://registry.npmjs.org/`,tarball
|
|
1210
|
+
包含 40 个文件。
|
|
1211
|
+
- npm registry 返回 `E403`:当前账号发布包需要双因素认证 OTP,或使用开启
|
|
1212
|
+
bypass 2FA 的 granular access token。
|
|
1213
|
+
- 已使用临时 npm token 重试 `npm run release:publish`;本地发布门禁再次通过,但
|
|
1214
|
+
npm registry 仍返回相同 `E403`,说明该 token 不能绕过发布 2FA 要求。
|
|
1215
|
+
- 已按项目根目录 `.npmrc` 方式写入实际 token 并确认 `.npmrc` 被 `.gitignore`
|
|
1216
|
+
忽略;`npm whoami --registry=https://registry.npmjs.org/` 返回 `xuanzhu`,
|
|
1217
|
+
但重新执行 `npm run release:publish` 仍在 `npm publish` 阶段返回相同 `E403`。
|
|
1218
|
+
- 已用新的 npm token 覆盖项目级 `.npmrc` 后再次确认 `npm whoami` 返回 `xuanzhu`;
|
|
1219
|
+
`npm run release:publish` 仍通过本地门禁并在 `npm publish` 阶段返回相同 `E403`。
|
|
1220
|
+
- 因 npm 2FA 阻塞,`yunti-browser-runtime@0.1.0` 尚未发布成功。
|
|
1221
|
+
|
|
1222
|
+
### 目标
|
|
1223
|
+
|
|
1224
|
+
完成 `yunti-browser-runtime@0.1.0` 首次 npm 发布,并用已发布包验证命令确认 registry
|
|
1225
|
+
上的版本和 metadata。
|
|
1226
|
+
|
|
1227
|
+
### 验收标准
|
|
1228
|
+
|
|
1229
|
+
- 使用当前有效 npm OTP 执行
|
|
1230
|
+
`npm run release:publish -- --otp=<6-digit-code>`,或使用具备 publish 权限且允许
|
|
1231
|
+
bypass 2FA 的 npm granular access token。
|
|
1232
|
+
- `npm publish` 返回成功,并显示发布到 `https://registry.npmjs.org/`。
|
|
1233
|
+
- `npm run release:verify-published` 返回 0,确认已发布包 name、version、
|
|
1234
|
+
repository、homepage、bugs 和 tarball URL 与本地 `package.json` 匹配。
|
|
1235
|
+
- 发布结果同步到 `docs/PROJECT_STATUS.md`。
|
|
1236
|
+
|
|
1237
|
+
### 当前阻塞
|
|
1238
|
+
|
|
1239
|
+
等待 npm 2FA OTP 或可绕过 2FA 的发布 token。已确认普通 token 或未开启 bypass
|
|
1240
|
+
2FA 的 token 无法完成本次发布;项目级 `.npmrc` 方式和两次 token 认证都已复验。
|
|
1241
|
+
拿到 OTP 后只需要重跑正式发布命令,不需要继续增加新的发布门禁。
|
|
1242
|
+
|
|
1243
|
+
## 每阶段完成后的固定检查
|
|
1244
|
+
|
|
1245
|
+
```bash
|
|
1246
|
+
npm run check
|
|
1247
|
+
npm test
|
|
1248
|
+
```
|
|
1249
|
+
|
|
1250
|
+
涉及真实浏览器链路时额外执行:
|
|
1251
|
+
|
|
1252
|
+
```bash
|
|
1253
|
+
npm run test:e2e
|
|
1254
|
+
```
|
|
1255
|
+
|
|
1256
|
+
涉及文档/开源化时额外检查:
|
|
1257
|
+
|
|
1258
|
+
```bash
|
|
1259
|
+
rg "/U[s]ers|C[o]deg|x[y]y|y[b]m100" README.md docs skills package.json
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
## 当前下一步
|
|
1263
|
+
|
|
1264
|
+
P4.3-P4.18 已完成,P4.19 正在执行:
|
|
1265
|
+
|
|
1266
|
+
- `npm run release:dry-run` 已通过内置发布前门禁和官方 npm registry 预览。
|
|
1267
|
+
- `npm run release:whoami` 已确认登录账号为 `xuanzhu`。
|
|
1268
|
+
- `npm run release:publish` 已通过本地发布门禁,但正式 `npm publish` 被 npm 2FA
|
|
1269
|
+
要求拦截。
|
|
1270
|
+
- 已尝试临时 npm token 发布,仍被 npm 2FA 策略以相同 `E403` 拦截。
|
|
1271
|
+
- 已创建项目级 `.npmrc` 并使用实际 token 复验,`npm whoami` 成功但 publish 仍返回
|
|
1272
|
+
相同 `E403`。
|
|
1273
|
+
- 已用新的 npm token 覆盖项目级 `.npmrc` 复验,认证仍成功但 publish 仍返回相同
|
|
1274
|
+
`E403`。
|
|
1275
|
+
- 下一步使用当前 npm OTP 执行 `npm run release:publish -- --otp=<6-digit-code>`,
|
|
1276
|
+
或改用具备 publish 权限且允许 bypass 2FA 的 granular access token。
|
|
1277
|
+
- 发布后执行 `npm run release:verify-published` 确认 npm registry 版本和 metadata。
|
|
1278
|
+
- 浏览器扩展如需上架商店,发布前还需重新审查 broad host permissions。
|