@evan_zhong/browser-attach 0.23.3 → 0.23.4
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/CONTRIBUTING.md +3 -1
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/TEST-REPORT.md +9 -1
- package/docs/USAGE.md +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +4 -2
- package/scripts/check-package.mjs +7 -1
- package/server.json +28 -0
- package/src/config.mjs +1 -1
package/CONTRIBUTING.md
CHANGED
|
@@ -15,7 +15,9 @@ npm pack --dry-run
|
|
|
15
15
|
|
|
16
16
|
浏览器交互改动还应按 [README](README.md#本地开发) 运行真实浏览器 fixture 测试。测试必须使用可丢弃的页面和配置,不应修改真实账号数据。
|
|
17
17
|
|
|
18
|
-
修改版本时同步 `package.json`、`package-lock.json`、`src/config.mjs`、`extension/manifest.json`、MCP 配置及安装示例。扩展和 Hub 必须保持版本一致。
|
|
18
|
+
修改版本时同步 `package.json`、`package-lock.json`、`src/config.mjs`、`extension/manifest.json`、`server.json`、MCP 配置及安装示例。扩展和 Hub 必须保持版本一致。
|
|
19
|
+
|
|
20
|
+
`server.json` 用于发布 MCP 官方 Registry 元数据;其中 `name` 与 `package.json.mcpName` 必须完全一致,`packages[0].identifier` 与 npm 包名一致,包版本填写准确版本。先发布包含 `mcpName` 的 npm 包,再执行 `mcp-publisher login github` 和 `mcp-publisher publish`。`npm run test:package` 会检查名称、版本和发布文件的一致性。
|
|
19
21
|
|
|
20
22
|
## 提交内容
|
|
21
23
|
|
package/docs/ARCHITECTURE.md
CHANGED
package/docs/TEST-REPORT.md
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
# 验证报告
|
|
2
2
|
|
|
3
|
-
当前版本 **0.23.
|
|
3
|
+
当前版本 **0.23.4**(2026-10-25)。浏览器验证使用本地 fixture 和临时 profile;测试链路在各项下说明。
|
|
4
4
|
|
|
5
5
|
## 当前版本
|
|
6
6
|
|
|
7
|
+
- 补充 npm 包的 `mcpName` 和根目录 `server.json`,包含 Registry 名称、展示名称、描述、源码/文档链接及 npm stdio 启动信息;元数据通过官方 2025-12-11 JSON Schema 校验。
|
|
8
|
+
- `npm test`:282 项通过。仅调整发布元数据、版本与打包检查,未修改页面操作实现,未重复运行真实浏览器 fixture 测试。
|
|
9
|
+
- `npm run test:package`:包外安装与 stdio MCP 通过,23 个工具、62 个发布文件,无配对密钥。`server.json` 已纳入发布包;打包检查覆盖 Registry 名称、npm 包名及版本一致性。
|
|
10
|
+
- 本机部署:协调升级因现有 MCP 连接占用拒绝后,通过 stop/start 重启;Hub 为 0.23.4 / ready,Chrome、Edge 扩展均为 0.23.4。稳定扩展副本的 43 个文件已核对:manifest 版本/身份一致,其余非生成文件 SHA-256 一致。现有客户端需重连并重新发现、接管。
|
|
11
|
+
- 尚未执行 npm 或 MCP Registry 发布;正式注册需先发布包含 `mcpName` 的 npm 0.23.4,再以对应 GitHub 命名空间登录并发布 Registry 元数据。
|
|
12
|
+
|
|
13
|
+
## 0.23.3 验证
|
|
14
|
+
|
|
7
15
|
- `npm test`:282 项通过。DOM contenteditable 与 native 共用同位置普通空格 → NBSP 的单向容差;补充首尾/连续空格、混合空格、显式 NBSP 保留与丢失、空格数量及位置变化的回归。input/textarea 的精确 value 比较保持原状。
|
|
8
16
|
- Chromium 156、Edge 155 headless 完整 stdio MCP `live-smoke`:各 385 次调用、35 项检查通过。页面同步将普通空格改成 NBSP 时 DOM fill 成功;CSS 折叠空格或页面丢失显式 NBSP 时仍返回 value_not_retained、未知结果,每次仅派发 1 次 input,不重放。
|
|
9
17
|
- `npm run test:package`:包外安装与 stdio MCP 通过,23 个工具、61 个发布文件,无配对密钥。未增加工具、参数、依赖或权限,按比较修复递增至 0.23.3。
|
package/docs/USAGE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# BrowserAttach 使用指南
|
|
2
2
|
|
|
3
|
-
适用于 **0.23.
|
|
3
|
+
适用于 **0.23.4**:Node.js 22+、Chrome / Edge 125+、23 个 MCP 工具。安装、配对与升级见 [README](../README.md),宿主配置见 [Agent 集成](AGENT-INTEGRATION.md),内部机制见 [架构说明](ARCHITECTURE.md)。
|
|
4
4
|
|
|
5
5
|
本文供按需查阅,不会自动通过 MCP 发送给 agent。MCP 初始化 `instructions` 提供通用规则,工具 description 与参数 schema 提供调用说明;宿主应把 instructions 纳入模型上下文。
|
|
6
6
|
|
package/extension/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evan_zhong/browser-attach",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.4",
|
|
4
|
+
"mcpName": "io.github.EvannZhongg/browser-attach",
|
|
4
5
|
"description": "MCP for existing signed-in Chrome and Edge tabs through a locally paired extension",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"license": "MIT",
|
|
@@ -25,7 +26,8 @@
|
|
|
25
26
|
"README.md",
|
|
26
27
|
"CONTRIBUTING.md",
|
|
27
28
|
"docs/",
|
|
28
|
-
"mcp-config.json"
|
|
29
|
+
"mcp-config.json",
|
|
30
|
+
"server.json"
|
|
29
31
|
],
|
|
30
32
|
"scripts": {
|
|
31
33
|
"test": "node --test tests/*.test.mjs",
|
|
@@ -2,15 +2,21 @@ import { execFileSync } from 'node:child_process';
|
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import { ROOT, VERSION } from '../src/config.mjs';
|
|
4
4
|
|
|
5
|
-
for (const path of ['package.json', 'extension/manifest.json']) {
|
|
5
|
+
for (const path of ['package.json', 'extension/manifest.json', 'server.json']) {
|
|
6
6
|
if (JSON.parse(await readFile(new URL(`../${path}`, import.meta.url), 'utf8')).version !== VERSION) throw new Error(`Version mismatch: ${path}`);
|
|
7
7
|
}
|
|
8
|
+
const packageJson = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'));
|
|
9
|
+
const serverJson = JSON.parse(await readFile(new URL('../server.json', import.meta.url), 'utf8'));
|
|
10
|
+
if (!packageJson.mcpName || packageJson.mcpName !== serverJson.name) throw new Error('MCP Registry name mismatch');
|
|
11
|
+
if (serverJson.packages[0].identifier !== packageJson.name || serverJson.packages[0].version !== VERSION)
|
|
12
|
+
throw new Error('MCP Registry package mismatch');
|
|
8
13
|
|
|
9
14
|
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
10
15
|
const result = JSON.parse(execFileSync(npm, ['pack', '--dry-run', '--ignore-scripts', '--json'], {
|
|
11
16
|
cwd: ROOT, encoding: 'utf8', shell: process.platform === 'win32', stdio: ['ignore', 'pipe', 'pipe'],
|
|
12
17
|
}))[0];
|
|
13
18
|
const names = result.files.map(file => file.path);
|
|
19
|
+
if (!names.includes('server.json')) throw new Error('Package is missing server.json');
|
|
14
20
|
for (const path of names) {
|
|
15
21
|
if (/config\.generated\.js|(^|\/)(\.local|\.venv|test-results|node_modules)\//.test(path)) throw new Error(`Private file included in package: ${path}`);
|
|
16
22
|
}
|
package/server.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.EvannZhongg/browser-attach",
|
|
4
|
+
"title": "BrowserAttach",
|
|
5
|
+
"description": "Control existing signed-in Chrome and Edge tabs through a locally paired extension.",
|
|
6
|
+
"version": "0.23.4",
|
|
7
|
+
"repository": {
|
|
8
|
+
"url": "https://github.com/EvannZhongg/BrowserAttach",
|
|
9
|
+
"source": "github"
|
|
10
|
+
},
|
|
11
|
+
"websiteUrl": "https://github.com/EvannZhongg/BrowserAttach#readme",
|
|
12
|
+
"packages": [
|
|
13
|
+
{
|
|
14
|
+
"registryType": "npm",
|
|
15
|
+
"identifier": "@evan_zhong/browser-attach",
|
|
16
|
+
"version": "0.23.4",
|
|
17
|
+
"transport": {
|
|
18
|
+
"type": "stdio"
|
|
19
|
+
},
|
|
20
|
+
"packageArguments": [
|
|
21
|
+
{
|
|
22
|
+
"type": "positional",
|
|
23
|
+
"value": "mcp"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
package/src/config.mjs
CHANGED
|
@@ -15,7 +15,7 @@ export const DATA_DIR = configuredHome
|
|
|
15
15
|
: process.platform === 'win32' ? join(homedir(), '.browser-attach')
|
|
16
16
|
: join(process.env.XDG_DATA_HOME || join(homedir(), '.local', 'share'), 'browser-attach');
|
|
17
17
|
export const DEFAULT_CONFIG = join(DATA_DIR, 'config.json');
|
|
18
|
-
export const VERSION = '0.23.
|
|
18
|
+
export const VERSION = '0.23.4';
|
|
19
19
|
|
|
20
20
|
export async function loadConfig(path = DEFAULT_CONFIG) {
|
|
21
21
|
let config;
|