概览
dsh-browser-service
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
1. **一个 root 一个守护进程**(单例)。多个 profile 想共用内核要显式给同一个 `--root`;否则各自拉起一个。 2. **只监听回环**,同 uid 的其它进程读得到 `service.json` 里的 token(文档权限 0600,但同 uid 可读)。这是本机隔离,不是跨用户隔离。 3. **`--no-sandbox` 是必需项**(容器里 Chromium 沙箱起不来)⇒ 只访问可信站点;需要更强隔离就把浏览器放进独立容器。 4. **改插件代码或 profile patch 后必须重启 DSH**:完整 web profile 上 `patchReload: live` 会静默回滚(实测:探针条目 `applied` 后 6–7 ms 被 `disposed`,插件的 `apply` 根本没被调用;最小 profile 里热重载正常)。 5. **插件与 `browsersvc` 必须同版本升级**:v0.3.0 起公开端口要 Bearer token,旧插件 + 新守护进程会 401(F19 修的是冷启动重读 token)。 6. **工具面取决于依赖版本**:33 个 `browser_*` 来自 `dsh-builtin-browser`,上游增删工具时本包跟着变(本包只保证转出口形状一致、并把它写进验收)。 7. **守护进程会空闲自杀**(守护进程自身默认 15 分钟;本包自启默认 5 分钟,见配置表 `idleMs`;`--idle-ms` 允许 `1000..86400000`,即最长 24 小时)。**只有代理端口上没有任何连接时才会空闲**:所以 0.5.0 起插件在最后一个会话关闭后会**主动断开** CDP 连接——否则那条约 600 MB 的常驻浏览器永远不回收(P1)。DSH 侧下一次调用会自动把它拉回(F25),所以这是省内存的设计而不是故障;连「被下次调用拉起」也不想要,就 `dsh plugin remove` 卸载本包。 8. **`browser_execute` 传的是表达式语境**:传函数体会被当表达式求值并报 `page.evaluate: SyntaxError: Illegal return statement`,请传 `(...) => {...}` 或纯表达式。 9. **`browser_fill` 的 `fields[].selector` 是作用域不是定位器**:定位某个控件请用 `browser_click` / `browser_set_value` / `browser_check` 的 `target`。 10. **macOS / Windows 未测试**;仅 Linux(Debian 12 容器)实测。 11. **截图/下载默认只能写进系统 Downloads 目录**(`XDG_DOWNLOAD_DIR` → 家目录下存在的 `Downloads`/`下载`/`下載` → `~/Downloads`,对齐内置 provider)。要写进工作区或别处,就在 profile patch 的 `browser-cdp` 行 `config` 里显式配 `downloadDir`(patch **整行替换** `config`,覆盖时该行其它键要重述)。 12. **单个会话默认最多 5 个标签页**(配置 `maxTabs`,夹 `1..50`)。每个标签页是独立渲染进程,实测约 +93 MB;超限时 `browser_open {newTab:true}` 报 `BROWSER_TAB_LIMIT`,文案会列出当前标签,用 `browser_close_tab` 关掉不用的、或 `browser_reset_session` 清空本会话(P1)。
