🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

真实浏览器桥接 woniu9524/open-web-bridge

DeepSeek Harnessv1.3.0
woniu952471 天前有提交已提供中文文档扫描:含敏感能力

让任何 AI agent 驱动你的真实浏览器你的登录态 · 你的指纹 · 你正在看的那个页面

56.8/100
综合分
115
GitHub 星标
21
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add open-web-bridge
npm 源 · open-web-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 71 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包open-web-bridge @ 1.3.0
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 20:43:51

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 执行外部命令来自配置/变量
    owb-daemon/src/cli.js:380
    spawn(process.execPath, [serverPath], {
  • 执行外部命令固定命令
    owb-daemon/src/cli.js:926
    const p = spawn("npm", ["view", PKG_INFO.name, "version"], {
  • 请求外部主机registry.npmjs.org
    owb-daemon/src/cli.js:951
    const res = await fetch(`https://registry.npmjs.org/${PKG_INFO.name}/latest`, {
  • 发起网络请求
    owb-daemon/src/cli.js:951
    const res = await fetch(`https://registry.npmjs.org/${PKG_INFO.name}/latest`, {
  • 读取密钥环境变量
    owb-daemon/src/server.js:64
    export const OWB_RELAY_TOKEN = process.env.OWB_RELAY_TOKEN || "";
  • 执行外部命令来自配置/变量
    owb-daemon/src/replay.js:56
    execFile(file, args, options, (error, stdout, stderr) => {
  • 发起网络请求
    owb-extension/background.js:1349
    const res = await fetch(chrome.runtime.getURL(rel));
  • 发起网络请求
    owb-extension/background.js:1357
    const res = await fetch(chrome.runtime.getURL(FN_HOOK_TEMPLATE));
  • 发起网络请求
    owb-extension/hooks/fetch.js:77
    window.fetch = function fetch(input, init) {
  • 写入剪贴板
    owb-extension/popup.js:128
    await navigator.clipboard.writeText(v);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:registry.npmjs.org

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 驱动真实Chrome
  • 复用已登录会话
  • 命令行接入AI智能体

用任意 AI 智能体驱动你真实的 Chrome——已登录会话、真实指纹、实时标签页。基于命令行,兼容 OpenCode、Pi 或任意 Harness。

v1.2.12026-08-16
1.2.0 后续:一次独立审查复现了该版本 task_end 工作中的三个真实缺陷,为它们补写回归测试时又暴露出第四个更早的缺陷。如果你在用 1.2.0,请升级。 · 已修复 · task_end 用任务标题来证明归属,而标题并不唯一——用同一标题运行 task begin 会故意复用同一组,于是两个同名任务并发运行时,各自都能通过对方的归属检查。这道防护恰恰放行了它本该阻止的事:一个任务会清掉另一个任务的上下文、停掉它的记录器,并把它的 HAR 归档到自己目录下,还报告一切成功。现在改用任务 id 证明归属,task_begin 会把这个 id 交给扩展。 · task_id 本身也不唯一。 它是秒级时间戳加标题 slug,所以同一秒内两次同名 task_begin 调用会生成同一个 id——元数据文件相互冲突,两个任务共用一个身份。现在 id 冲突时会加上 -2、-3……后缀。 · 不带标题启动的任务永远无法结束。task_begin 存的是时间戳兜底值,而 task_end 拿空标题去比对,于是这个任务总被误判成别人的:归档为 ended_stale,扩展上下文从未清理,记录器从未停止。 · 任务标签页归属不再依赖标签组。标签组只为 --new-tab 导航创建,所以任何复用已有标签页的任务看起来都不拥有任何标签页,1.2.0 便悄悄跳过了停止和归档它的录制。现在每个任务都会跟踪自己导航过的标签页。确实不属于该任务的记录器会列在 recorders_not_archived 里,而不是被默默略过。 · WebSocket 上的 net detail 可能往调用方上下文里倾倒约 400 KB。命令行的输出裁剪器只压缩顶层字符串,所以帧对象数组绕过了它,--max-body 也不生效。现在默认返回最后 50 帧(用 --max-frames 调高),并分别报告 framesReturned / framesKept / framesSeen。 · frameCount 在 net list 里指「总共看到」,在 net detail 里却指「当前保留」;现在两者都报告 framesSeen,数字对得上了。 · 四个 WebSocket 事件处理器往捕获缓冲区写入时不检查连接是否已知,造出永远不结束的无类型记录——其中一个还可能让该标签页上的 wait --network-idle 再也无法稳定下来。现在这四个处理器都会忽略从未见过打开的连接的帧。 · owb cookie set --http-only 和 --same-site 能通过校验,但未知标志的报错信息从不提通用标志(--tab、--timeout……),让人以为它们也被拒了。
v1.2.02026-08-16
· 破坏性变更 · 命令不接受的参数现在会报用法错误(退出码 2),不再被悄悄丢弃。owb page --url 以前会退出 0 却什么都没做——它重新截取标签页当时显示的内容,这份过期结果和一次成功的导航分不出来。现在报错会指出有问题的参数并列出可用参数。owb call 例外(它的参数面无法枚举),--args 的内容也从不检查,所以这两个口子仍然什么都能传。 · 新增 · net 能看到 WebSocket 流量。连接会出现在 net list 里,带 isWebSocket: true、status: 101 和实时的 frameCount;net detail 返回帧(dir/opcode/len/data),不再返回响应体。以前只有 HAR 路径能看到 WebSocket,所以单用 net 会把推送驱动的页面报成没有流量。两个上限把话多的 socket 兜住:每个连接最多保留最近 200 帧(framesSeen 是真实总数,帧丢失后会出现 framesDropped/framesNote),每个负载最多 2000 字符——要完整会话就用 har start/har save 录制。 · 修复 · task_end 清理时不再越界动别的任务。它会先跟扩展确认该任务仍是当前活跃任务,再清任何东西,并且只停自己标签页上的录制器,而不是浏览器里所有录制器——以前结束一个任务可能停掉并吞掉同时运行的另一任务的录制,收进自己的 HAR,还会清掉那个任务的标签组。代价是:没加入任务组的标签页上的录制,task_end 不再自动归档(数据还在——自己 har save)。 · cookie set --http-only 和 --same-site 有文档但没生效:命令行把它们转成 http_only/same_site,实现却只认驼峰拼写,于是两者都被悄悄丢弃。现在两种拼写都有效。 · task_end 的结果在 group.cleared 旁边报 tabs_closed: false,而它一直只表示「任务指针已清除」——从不表示关过任何标签页。
v1.1.12026-08-16
· 已修复 · task_end 改为显式接收 --task-id(与 flow save 一致),不再总是信任守护进程里那个共享的「当前任务」指针。多个智能体共用一个浏览器时,谁最后跑 task_begin 谁就占住这个指针,于是较早的任务直接调 task_end 要么报 NO_TASK,要么更糟——返回 ok,归档的却是别人的任务。结束一个已不是当前的任务时,现在会把它归档为 ended_stale,不碰正在运行的记录器、标签组和指针;清空指针前会再检查一次,这样 task_end 自身 await 期间落进来的 task_begin,其任务不会被顺手关掉。 · frames 不再累积标签页已经导航离开的页面留下的执行上下文。注册表改在 Runtime.executionContextsCleared 时清空,而不是 Page.frameNavigated:后者属于另一个 CDP 域,与新页面的 executionContextCreated 没有顺序保证,陈旧条目因此留了下来,还可能盖住真正的上下文——eval --frame-pattern 会悄悄解析到一个已不存在的上下文,而不是报错。 · cdp 在参数为空时会自己解释原因。它是唯一不把扁平的 --foo-bar 标志折进 CDP 参数的命令,直接拿这些标志去用,只会得到 Chrome 那句含糊的 BINDINGS: mandatory field missing at position N,还挂在 INTERNAL 错误码下,让人以为该重试;现在改为 BAD_ARGS,并指明嵌套的 --args '{"method":…,"params":{…}}' 写法。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
open-web-bridge 让任何 AI agent 驱动你的真实浏览器你的登录态 · 你的指纹 · 你正在看的那个页面 English · 简体中文 为什么不用无头浏览器? agent 自己开一个干净浏览器,能看到的只有公开内容。 驱动你的浏览器,它才能读你订阅的那篇文章、看你已经登录的后台、走完那个需要你身份的流程。这正是本项目存在的理由。 npm i -g open-web-bridge # CLI + 扩展文件 + agent skill,一条命令装齐 owb setup # 引导你走完唯一需要手动做的那一步 owb # 自检 —— 两个 ✓ 就绪 然后对 agent 说一句:「打开 Hacker News,把前三条整理给我。
展开完整文档(README 剩余 1 节)
open-web-bridge

让任何 AI agent 驱动你的真实浏览器你的登录态 · 你的指纹 · 你正在看的那个页面

English · 简体中文

为什么不用无头浏览器?

agent 自己开一个干净浏览器,能看到的只有公开内容。

驱动你的浏览器,它才能读你订阅的那篇文章、看你已经登录的后台、走完那个需要你身份的流程。这正是本项目存在的理由。

npm i -g open-web-bridge # CLI + 扩展文件 + agent skill,一条命令装齐
owb setup # 引导你走完唯一需要手动做的那一步 owb # 自检 —— 两个 ✓ 就绪

然后对 agent 说一句:「打开 Hacker News,把前三条整理给我。」

工作原理

AI agent Claude Code · Codex · Kimi Code · 任何能跑 shell 的工具 │ │ owb <命令> CLI 就是全部接入面 —— 客户端零配置 ▼ 本地 daemon Node.js,127.0.0.1:43917 │ │ WebSocket ▼ MV3 扩展 装在你平时用的那个浏览器里 │ │ Chrome DevTools Protocol ▼ 你正开着的标签页 你的 cookie · 你的登录态 · 你的指纹

两种部署形态:

- 本地模式(默认)——就是上面这条链路。任何能跑 shell 的工具零配置直用,配套 skill 教 agent 典型流程。
- 中转模式(可选)——daemon 与扩展都拨出到一个公网中转(Cloudflare Workers + Durable Objects,按 token 配对),让远程 agent 经公网控制你的浏览器,不暴露本机任何端口。默认关闭,开启不影响本地模式。跳到配置 ↓

能干什么

| | 你能得到什么 |
| 🔍 语义快照 | read_page 给可交互元素打稳定的 @eN 编号,click/fill/screenshot 直接按编号引用;since_last 只返回变化的部分(长会话能不能撑住全看这一条);article 模式把正文提取成干净的 markdown |
| ⏳ 等待原语 | wait_for 等 selector / 文字 / URL / 网络空闲,不用再拿 evaluate 轮询 |
| 🖱️ 真实鼠标 + 可见光标 | mouse_click 走 CDP Input 域发真实鼠标事件(isTrusted),页面内有贝塞尔光标动画,用户在旁边看得见你在干什么 |
| 🤝 人机交接 | handoff / wait_user:撞上验证码或要扫码登录时把标签页交还给你,你弄完 agent 自动接管继续 |
| 📎 补齐尴尬的交互 | download/upload(上传走页面内 DataTransfer,不需要文件系统权限)、print_pdf、list_frames + evaluate frame_pattern 定向求值 iframe |
| 🌍 环境模拟 | emulate/emulate_reset 一次覆盖设备视口、网络节流、地理位置、时区、语言、权限和 UA |
| 📡 网络抓包 | 完整的请求与响应(含头和 body),外加 get_initiator 定位是哪段代码发出的 |
| 🎞️ 会话录制(HAR) | record_start/stop 录成标准 HAR 1.2(含 timing、WebSocket、主动收取的 body,支持 url/resource_type 过滤与多标签页合并),另附 console 归档、storage 变更流、导航截图时间线;daemon_task_end 会自动把 HAR 入档 |
| 🔁 HAR 加工 | daemon_har_to_replay(→ python/curl/node 重放脚本,动态签名头标成占位符)、daemon_har_diff(两份录制之间的漂移)、daemon_har_assert(断言校验) |
| 🧩 任务与工作流 | daemon_task_begin/end 负责归档和标签分组;daemon_workflow_save/run 把跑通的流程固化成确定性回放 |
| 🔐 站点会话库 | daemon_state_save/load <名字> 一键保存/恢复登录态(cookie + localStorage + IndexedDB) |
| 🛠️ 调试与分析 | 按需:hook 预设(xhr/fetch/crypto)、断点与调用帧读取、脚本改写、函数离线验证、TLS 指纹重放 |

安装

前提:Node.js ≥ 18 + 一个 Chromium 系浏览器(Chrome / Edge)。

让 AI 帮你装 —— 把这段整段发给你的 agent

帮我安装 open-web-bridge,按顺序做,每步做完告诉我结果:

1. 运行 npm i -g open-web-bridge
2. 运行 owb setup,把输出里「装浏览器扩展」那一步的具体做法念给我,等我装完再继续
3. 运行 owb,确认 daemon 和扩展都是 ✓;如果扩展未连接,让我点浏览器工具栏的扩展图标看状态
4. 运行 owb skill install 装上技能,然后告诉我重开一个会话

装好后你就能用 owb 命令驱动我的浏览器了,owb help 看全部命令。

手动装

npm i -g open-web-bridge # CLI + 扩展文件 + skill,一条命令装齐
owb setup # 引导:扩展安装路径、装 skill、连通性自检

owb setup 会告诉你扩展怎么装。这是唯一需要你手动做的一步——扩展必须装进你平时用的那个浏览器,因为登录态在那儿,而这正是本项目的意义所在,命令行代劳不了。

装完跑一次 owb 自检,两个 ✓ 就绪。然后 owb skill install 会把 skill 装给 检测到的每一个 agent——Claude Code、Codex CLI、Kimi CLI、Qwen Code、 iFlow CLI、Gemini CLI、OpenCode(~/.config/opencode/)、Cursor(只有项目级),以及多家共用的 ~/.agents/skills/。检测不是一张写死的名单:家目录下任何已经存在的 ~/.<工具>/skills/ 或 ~/.config/<工具>/skills/ 都算,所以本版之后才出的新 agent 也能直接装上,不用等 owb 发版。

想自己指定就 --to kimi,codex——名字随便写,owb 没听说过的会装到 ~/.<名字>/skills/;--project 只装到当前项目,--dir <path> 装到任意位置。
--link 用软链接代替复制,指向包里的 skill 源,之后 npm i -g open-web-bridge@latest 升级完,装出去的每一份都自动是新版,不用再跑一遍——建不了软链接的环境会自动退回复制。碰上压根没有 skills 目录的 agent,用 owb skill print 把 SKILL.md 打到标准输出,贴进它自己的规则文件即可。

用 npx skills 装

这个 skill 就是一个标准 Agent Skill,所以认识 75+ 个 agent 的 npx skills 可以直接从本仓库装:

npx skills add woniu9524/open-web-bridge -g -y

它只装 skill 本身;CLI 和扩展由 agent 第一次读到这个 skill 时自己引导安装(npm i -g open-web-bridge,然后 owb setup)。

之后可以用 owb update check 对比 npm 上的最新版本,有新版会打印升级步骤—— skill 也教了 agent 在任务收尾时跑一次,所以有更新你不用自己盯。

关于 skill

渐进披露结构,skill install 会把整个目录装好:

owb/SKILL.md 主干——每次触发都进上下文 owb/references/commands.md 80 条命令的参数速查 owb/references/recipes.md 按任务查的长配方 owb/references/debugging.md 抓包 / HAR / hook / 断点 / 逆向 owb/references/field-notes.md 实测怪现象,按症状索引 owb/references/relay.md 中转模式配置引导

只有 SKILL.md 常驻上下文,其余五份由 agent 按需读取。skill 正文是英文的 (模型读的东西,统一语言更稳)。其他 agent 直接把这几份 markdown 并进规则或系统提示即可,没有专有格式。

试一下

对 agent 说一句「打开 Hacker News,把前三条整理给我」,就能看到它干活。
或者你自己敲:

owb open https://example.com
owb page # 语义快照:可交互元素带 @eN 编号 owb click @e1 # 直接按编号操作 owb help # 全部命令

从源码跑(开发/尝鲜):git clone 后在仓库根 npm install,用
node owb-daemon/src/cli.js <命令> 代替 owb,或 npm link 之后照常用 owb。

目录结构

open-web-bridge/ ← npm 包根(package.json 在这里) ├── owb-daemon/src/ owb CLI(agent 接入面)+ 本地 daemon ├── owb-daemon/tests/ 测试(不进 npm 包) ├── owb-extension/ MV3 Chrome 扩展 ├── owb-relay/ 可选:Cloudflare Workers 公网中转(独立部署,不进 npm 包) └── owb-skills/owb/ 给 AI agent 装的 skill(SKILL.md + references/)

npm i -g open-web-bridge 会把 CLI、扩展文件、skill 一起装到本机——owb setup 打印的扩展路径就指向包里那份。运行时产物(任务归档、登录态、HAR)落在 work/,已 gitignore。

中转模式(远程控制,可选)

让远程 agent 经公网控制你的浏览器,不用暴露本机端口。默认关闭。

你的机器 Cloudflare agent 的机器 ┌──────────────┐ ┌──────────┐ ┌──────────────┐ │ 扩展 │ ─── wss ──▶ │ 中转 │ ◀─── wss ─── │ daemon │ └──────────────┘ └──────────┘ └──────────────┘ 按 token 配对 · 房间按 sha256(token) 寻址 · Worker 空闲即休眠

中转跑在 Cloudflare Workers + Durable Objects 上(空闲休眠,免费额度友好, TLS 内置),配对后做透明的双向转发。

1. 部署中转(约 2 分钟,一次性):

cd owb-relay
npm install
npx wrangler login # 浏览器授权一次
npx wrangler deploy # 输出 https://owb-relay2.<你的子域>.workers.dev

详见 owb-relay/README.md。

2. 扩展端配置: 点浏览器工具栏的扩展图标 → 切到「中转」页 → 填中转 URL (如 wss://owb-relay2.xxx.workers.dev)→ 点「生成」→「保存并重连」。
弹窗上方实时显示配对进度(浏览器 → 中转 → daemon 逐环点亮)。

3. daemon 端配置: 在 agent 那台机器上设同名环境变量,再启动 daemon:

export OWB_RELAY_URL="wss://owb-relay2.xxx.workers.dev"
export OWB_RELAY_TOKEN="<与扩展端完全相同的 Token>"
owb-daemon # 日志会标注「中转模式」

配对后 owb daemon-status 的 mode 变成 relay,远程 agent 就能像本地一样驱动浏览器。CLI 接入面不变(仍连本机 /ctl)。

⚠️ daemon 只在启动时读环境变量。如果已经有一个本地模式的 daemon 在跑,必须先停掉它——光设环境变量没有任何作用。

可选:TLS 指纹重放

daemon_replay 需要 curl-impersonate 二进制(仅在验证协议脚本时用):从 lexiforest/curl-impersonate releases 下载对应平台的压缩包,解压到仓库 bin/ 目录,或设环境变量 OWB_CURL_BINARY 指向它。

安全模型(用前请读)

本地模式(默认):

- daemon 只监听 127.0.0.1,并校验 WS 握手的 Host/Origin(防 DNS rebinding)
- 本地信任模型,无配对 token:同机任何进程都可以连 daemon。这是刻意的简化——连接成本为零;但不要在共享/多用户机器上跑 daemon,同机的恶意进程可以控制浏览器
- token 曾作为本机进程的防线(v0.7.0–v0.8.0 默认启用 ?token= 校验),现已移除:它防不住以同一用户身份运行的恶意进程(那种进程本来就能读文件系统),收益小于配置成本
- 同理,work/states/ 下的明文登录态,只在你信任本机进程的前提下才是安全的。
该目录已 gitignore,分享仓库前请再确认一次
- 扩展申请了 debugger + <all_urls> 权限——这是 CDP 驱动所必需的,等同于把浏览器控制权交给本机 daemon

扩展能访问什么、数据去了哪、每一项权限为什么需要,见 PRIVACY.md。
短版本:不向开发者发送任何数据,也不存在我们运营的服务器。

中转模式(可选):

- token 是线上唯一的秘密,必须走 wss(Cloudflare 边缘内置 TLS)。
能连上某个中转房间即证明持有 token(房间按 sha256(token) 寻址,哈希泄露也无法逆推出可用的 URL)
- 中转是可信 broker。 目前没有端到端加密——中转能看到全部明文流量,包括登录 cookie 和 storage。请只用你自己控制的 Cloudflare 账号部署,否则就是接受这个风险。E2EE(token 派生密钥逐帧加密)是后续硬化项
- token 在扩展端生成,手动同步到 daemon 的环境变量,不要提交入库
- 开启中转模式不改变本地 /ctl 的信任模型(CLI 仍然连本机 daemon)

测试

npm test # 全部无头套件 + 扩展侧 node --check 语法闸门
npm run test:browser # 真机端到端(需要 Chrome)
npm run test:replay # TLS 重放(需要 curl-impersonate 二进制)
npm run test:relay # 中转 Durable Object 单元测试

npm test 按目录约定收集 owb-daemon/tests/*_test.js——新增套件不用改任何脚本就会被跑到——且不会首败即停,跑完全部再按套件汇总。只有需要外部环境(真浏览器、要下载的二进制)的两个套件被排除在外。

单独跑

node owb-daemon/tests/smoke_test.js # 协议 / 守护 / 编排(自起子进程,无需停 daemon)
node owb-daemon/tests/cli_test.js # owb CLI 接入面:命令映射、转发、错误模型
node owb-daemon/tests/slug_test.js # 文件名 slug,含非 ASCII 名字
node owb-daemon/tests/docs_examples_test.js # skill 里每条 owb ... 示例都是真实存在的命令
node owb-daemon/tests/docs_run_test.js # 无副作用的 skill 示例真的能跑通
node owb-daemon/tests/harexport_test.js # HAR → 重放 / 对比 / 断言
node owb-daemon/tests/relay_test.js # 中转模式集成(mock 中转 + 真 daemon)
node owb-daemon/tests/verify_replay_test.js # 离线验证 + 重放
node owb-daemon/tests/e2e_browser_test.js # 真机端到端(headless Chromium + 真扩展)
node owb-daemon/tests/read_page_test.js # 页面表达式单测(另有若干同类文件)
node owb-daemon/tests/rolling_log_test.js # 日志轮转 / 保留窗口与审计脱敏

最后那两个文档示例测试是因为一次具体的失败才加的:测试跑的命令和文档教用户写的命令是两套东西,于是文档里的示例可以坏掉,而所有测试照样全绿。

License

MIT © woniu9524
预览分享卡片长什么样 ↓woniu9524/open-web-bridge
分享 · DeepSeek Harness Hub
woniu9524/open-web-bridge

让任何 AI agent 驱动你的真实浏览器你的登录态 · 你的指纹 · 你正在看的那个页面

回到顶部