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

Tabbit 浏览器插件 Tabbit-Browser/dsh-tabbit

DeepSeek Harnessv0.4.0
Tabbit-Browser20 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 的 Tabbit 浏览器插件

59.1/100
综合分
108
GitHub 星标
553
npm 周下载
—/5
用户评分

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

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

状态速览

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

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

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

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

✓npm 包dsh-tabbit @ 0.4.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 36 条)
  • 读取本地文件
    lib/core/index.js:543
    const source = await readFile(SKILL_URL, { encoding: 'utf8', ...(signal ? { signal } : {}) });
  • 读取本地文件
    lib/core/index.js:624
    if (!existsSync(targetDir) || !existsSync(join(targetDir, PRESET_MARKER)))
  • 删除本地文件递归
    lib/core/index.js:626
    await rm(targetDir, { recursive: true, force: true });
  • 读取本地文件
    lib/core/index.js:726
    if (!existsSync(launcher)) {
  • 读取本地文件
    lib/tool-browser/index.js:399
    const info = await stat(path);
  • 读取本地文件
    lib/tool-browser/index.js:408
    const data = await readFile(path);
  • 读取本地文件
    lib/web-fetch/index.js:70
    const value = existsSync(this.tabbit.launcherPath()) && this.tabbit.instances().length > 0;
  • 发起网络请求
    lib/web-fetch/index.js:75
    async fetch(request, signal) {
  • 读取本地文件
    lib/installer/index.js:164
    const launcherReady = existsSync(launcherPath);
  • 发起网络请求
    client/client.js:109
    const response = await fetch('/tabbit/mention/tabs?session=' + encodeURIComponent(sessionId));
  • 发起网络请求
    client/client.js:247
    const response = await fetch('/tabbit/mention/extract', {
  • 发起网络请求
    client/client.js:373
    const response = await fetch('/tabbit/mention/extract', {
  • 发起网络请求
    client/client.js:400
    fetch('/tabbit/instance-hint', { method: 'POST' }).catch(() => {});
  • 读取本地文件
    lib/runtime/endpoint.js:80
    parsed = JSON.parse(readFileSync(endpointPath, 'utf8'));
  • 读取本地文件
    lib/runtime/instances.js:74
    if (existsSync(modern))
  • 读取本地文件
    lib/runtime/instances.js:77
    if (existsSync(legacy))
  • 读取本地文件
    lib/runtime/instances.js:99
    text = readFileSync(join(registryDir, `${id}.product`), 'utf8');
  • 读取本地文件
    lib/runtime/instances.js:137
    names = readdirSync(registryDir);
  • 读取本地文件
    lib/runtime/instances.js:152
    text = readFileSync(join(registryDir, name), 'utf8');
  • 读取本地文件
    lib/runtime/instances.js:166
    cliOk = statSync(cliPath).isFile();
  • 读取本地文件
    lib/update-check.js:183
    const parsed = JSON.parse(await readFile(PACKAGE_URL, 'utf8'));
  • 读取本地文件
    lib/update-check.js:193
    const parsed = JSON.parse(await readFile(cacheFile, 'utf8'));
  • 写入本地文件
    lib/update-check.js:201
    await mkdir(dirname(cacheFile), { recursive: true });
  • 写入本地文件
    lib/update-check.js:202
    await writeFile(cacheFile, `${JSON.stringify(state, null, 2)}\n`, 'utf8');
  • 读取本地文件
    lib/core/legacy-settings.js:12
    text = await readFile(join(home, name), 'utf8');
  • 读取本地文件
    lib/core/legacy-settings.js:51
    await readFile(marker);
  • 写入本地文件
    lib/core/legacy-settings.js:76
    await writeFile(marker, 'migrated\n', { flag: 'wx' }).catch((error) => {
  • 读取本地文件
    lib/runtime/peer.js:48
    const endpoint = JSON.parse(readFileSync(instance.endpointPath, 'utf8'));
  • 执行外部命令来自配置/变量
    lib/installer/detect.js:37
    const result = spawnSync(command, args, { encoding: 'utf8', windowsHide: true, maxBuffer: 16 * 1024 * 1024 });
  • 读取本地文件
    lib/installer/detect.js:139
    await access(path, mode);
  • 读取本地文件
    lib/installer/download.js:44
    await access(path, constants.F_OK);
  • 写入本地文件
    lib/installer/download.js:140
    await mkdir(outputDirectory, { recursive: true });
  • 删除本地文件
    lib/installer/download.js:181
    await rm(partial, { force: true });
  • 写入本地文件
    lib/installer/download.js:190
    await rename(partial, destination);
  • 删除本地文件
    lib/installer/download.js:193
    await rm(partial, { force: true });
  • 执行外部命令来自配置/变量
    lib/runtime/cli.js:63
    child = spawn(options.launcherPath, argv, { env, stdio: ['pipe', 'pipe', 'pipe'] });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-tools@deepseek-ai/dsh-web@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-commands@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-jobs@deepseek-ai/dsh-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v0.4.02026-10-12
· @ 菜单新增专门的「标签组」区块:标签组是一等候选,从浏览器标签清单实时汇总,也能通过成员页面的标题/URL 找到。组提及是轻量引用,不在发送时抽取——chip 携带组成员列表,发送依然即时;注入的上下文引导模型用 tabbit_browser/web_fetch(可见、需权限)按需拉取页面,而不是卡在发送时重新抓取多个页面。单页提及保持发送时抽取不变。 · 标签组主页(web.tabbit.ai/group-home/...)不再出现在「网页标签」候选里——它们只是空壳,没有可抽取的内容。 · 注入的上下文消息适配了 DSH 0.2 的消息来源约定:共享的 catch-all 插件来源类型已移除,所以注入消息现在携带插件自己的 dsh-tabbit 类型,通过模块增强注册。两代宿主都把未知类型渲染成同样的折叠注入行。
v0.3.52026-10-08
· 在 DSH 0.2+ 上恢复 dsh-tabbit:设置改用新的插件 Config 表单,旧版 DSH 仍沿用现有设置服务。旧 Tabbit 设置会迁移进新配置档,不覆盖其中已设的值。 · 修复了依赖浏览器的 web_fetch,适配当前 Tabbit 命令行参数。每次抓取现在会结束浏览器任务,关掉残留的 about:blank 标签组。旧命令行参数仍受支持。 · 修复了当前命令行下复用任务时的 --tab 获取。任务被隔离且检查点失败或不可用时,插件直接报错,不再重试可能已执行过的代码。
v0.3.42026-09-10
· 适配 Tabbit Browser 1.13.20+(这些版本移除了 Runtime Service 的 unbound tabs socket 操作和 tasks 命令行子命令,1.13.23+ 还会拒绝任何低于 60000 的 --timeout-ms,导致 list_tabs、@tab 菜单、由浏览器支撑的 web_fetch 以及 /tabbit-info 的任务列表全部失效。标签清单现在回退到同一 socket 上的命令行 tabs 命令(分页,仍不启动浏览器;新增的 claimed 状态映射为 busy),任务列表先读 diagnose,再读旧版 tasks,评估超时被限制在 60000–120000 ms,这是新旧浏览器都接受的范围。内部命令行子进程超时增至 170 秒,以覆盖新版命令行更长的等待。 · 修复 finish: true、keep_tabs: true 在 Tabbit 1.13.20+ 上无法关闭浏览器任务的问题,因为其命令行拒绝 --keep(仅当命令行返回该版本的用法错误时,插件才用不带参数、默认保留的 finish 重试一次。旧版浏览器仍会收到 --keep,关闭标签仍用 --discard。 · /tabbit-info 现在用插件版本和宿主 DSH 版本开头展示详情(plugin: dsh-tabbit 0.3.4 · host dsh 0.1.5-alpha.2),这样 bug 报告能说明实际加载的是哪一份——链接到本地检出的配置档可能悄悄继续提供旧版本。 · /tabbit-info 不再向会话日志追加自定义 tabbit/status 事件。DSH 拒绝读取含未知事件类型的会话,除非该事件标记为可忽略,而插件无法通过 Session.append 设置该标记——所以只要运行一次 /tabbit-info,整个会话在重启后就打不开(报告现在以普通命令文本传递;原本由该事件驱动的 web 客户端状态卡也一并移除。已受影响的会话可通过给每条存储的 tabbit/status 记录加上 "ignorable": true 来修复。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-tabbit — Tabbit 的 DeepSeek Harness 官方插件 Tabbit Browser for DeepSeek Harness Tabbit Browser 的 DeepSeek Harness(dsh)插件包(bundle)。dsh 可以通过此插件调用 Tabbit 完成 Agent 任务:真实页面、真实登录态、真实交互,经原生 code-first 工具驱动(不走 shell 转发)。适用于网页自动化、信息提取、QA 与评测。 能力 | 能力 | 说明 | | tabbit_browser | 用户使用真实的 Tabbit 内置的 CLI 模式执行网页读取和网页操作。 | | 浏览器代理的 web_fetch | 把 dsh 的 web_fetch 改接到 Tabbit 上(dsh 自带的直连抓取器无 JS 渲染、无登录态、不走系统代理——在 fake-ip 代理环境下所有域名都会被它拒绝)。 | | "网页标签"输入框提及 @ | 在 dsh Web UI 输入框敲 @,会列出本会话浏览器任务中打开的页面以及用户浏览器里的全部标签页,可以选中成为上下文(标签组首页这类无内容的空壳页已被屏蔽)。 | | "标签组"输入框提及 @ | @ 菜单里独立成组展示:按组名(或成员页标题/URL)搜出整个标签组。
展开完整文档(README 剩余 1 节)
dsh-tabbit — Tabbit 的 DeepSeek Harness 官方插件

Tabbit Browser for DeepSeek Harness

Tabbit Browser 的 DeepSeek Harness(dsh)插件包(bundle)。dsh 可以通过此插件调用 Tabbit 完成 Agent 任务:真实页面、真实登录态、真实交互,经原生 code-first 工具驱动(不走 shell 转发)。适用于网页自动化、信息提取、QA 与评测。

能力

| 能力 | 说明 |
| tabbit_browser | 用户使用真实的 Tabbit 内置的 CLI 模式执行网页读取和网页操作。 |
| 浏览器代理的 web_fetch | 把 dsh 的 web_fetch 改接到 Tabbit 上(dsh 自带的直连抓取器无 JS 渲染、无登录态、不走系统代理——在 fake-ip 代理环境下所有域名都会被它拒绝)。 |
| "网页标签"输入框提及 @ | 在 dsh Web UI 输入框敲 @,会列出本会话浏览器任务中打开的页面以及用户浏览器里的全部标签页,可以选中成为上下文(标签组首页这类无内容的空壳页已被屏蔽)。 |
| "标签组"输入框提及 @ | @ 菜单里独立成组展示:按组名(或成员页标题/URL)搜出整个标签组。提及是轻量【引用】——chip 携带成员页清单、发送零等待,模型在对话里按需用 tabbit_browser/web_fetch 自提相关页面(过程可见、走权限审批),而不是发送时整组重取。 |
| 独立"页面读取"权限 | 完善的权限控制。因为与用户共享 cookie,dsh 访问 Tabbit 网页时会确认权限pageAccess(默认每会话询问一次)+ intranetFetch(web_fetch 访问内网目标默认逐次审批)。 |
| tabbit_browser_install 工具 | 环境预检:检测已装稳定版 Tabbit、校验 launcher 与 Runtime Service;缺装/过旧时以 dsh 后台任务下载 Tabbit。 |
| tabbit_plugin_update 工具 | 插件更新检查:每天最多查一次 npm 上的最新发布,有合适版本会离线静默安装; |
| /tabbit-info 命令 | 在 dsh 输入框内输入 /tabbit-info 可诊断:插件与宿主 DSH 版本、launcher、实例列表(含产品名)、生效实例及来源、权限设置、任务占用。 |
| tabbit skill | 告知模型使用 Tabbit 的最佳实践。默认使用 Tabbit 自带的 ~/.agents/skills/tabbit/ 的官方 skill(随浏览器 Runtime 同步演进)。本插件内为兜底版本。 |

安装

前置条件

- 已安装稳定版 Tabbit Browser(国际版 或 国内版,≥1.9.0),且启动过(首次启动时注册 CLI launcher);
- Node ≥ 22.19、dsh ≥ 0.1.1-rc.2(dsh 安装:npm install -g @deepseek-ai/dsh)。低于 0.1.2-alpha.1 的宿主上,网页版会话里内置的 web_fetch 工具不可用(tabbit_browser 不受影响)。

安装 dsh-tabbit

dsh plugin --profile web add dsh-tabbit # npm 主路线

其他安装模式

dsh plugin --profile web add github:Tabbit-Browser/dsh-tabbit # npm 不可达时的回退
dsh plugin --profile web add link:/path/to/dsh-tabbit # 本地开发

本包取代早期的 tabbit-browser skill-only 插件;npm 上的 0.2.x 版本也由本版本接续——0.2.x 用户经每日更新检查会收到升级提示,重跑安装命令即可原地升级。

社区与交流

欢迎扫描下方二维码加入 dsh-tabbit 开发者交流群,交流使用心得、反馈问题与探讨新特性:

dsh-tabbit 开发者交流群

设置

基本配置

DSH 0.2+:在插件设置中编辑 tabbit-browser,或在 profile 的 cordis.patch.yml 中写入:

- id: tabbit-browser
config:
instance: "" # 显式指定 16 位大写 hex 实例 id;通常留空 launcherPath: "" # 留空时自动发现 tabbit-cli pageAccess: ask # ask(每会话一次)| always | never intranetFetch: ask # 内网 web_fetch:ask(每会话每 origin 一次)| always | never

DSH 0.1.x:将这四项写在 $DSH_HOME/settings.yaml 的 tabbit: 节下。升级到 0.2 后,插件会迁移旧值;已有的新配置优先。

实例解析优先级

当本机有多个 Tabbit 版本时的优先级配置

1. tabbit.instance 显式设置;
2. 正在查看 dsh-web 的 Tabbit 实例(自动检测:页面加载时 client 插件向 /tabbit/instance-hint 打点,服务端由 loopback socket 对端进程沿父链匹配实例注册表的 browserPid;仅 macOS,非 Tabbit 浏览器打开时自然不命中)——"在哪个 Tabbit 里看,就在哪个 Tabbit 里执行";
3. 继承的 TABBIT_PLAYWRIGHT_INSTANCE 环境变量(嵌入形态:Tabbit 启动打包的 dsh 时注入自己的实例 id,即为权威通道);
4. 注册表自动选择(唯一在线实例;有歧义时报错并给出实例列表作为引导。Windows 上注册表不可读时,交给原生 CLI 自行选择)。

当前生效来源可用 /tabbit-info 命令查看(execution instance: ... (via ...))。

Full access 说明:dsh 的 danger-full-access 权限预设会给会话写入审批策略 never(dsh 定义为「自动拒绝一切询问」)。本插件的权限门检测到该覆盖时自动放行,不再发出注定被拒的询问——Full access 就是完全访问(该模式下 bash 本就不受限,单拦浏览器工具没有防御价值)。例外:部署级把审批默认配成 never(非会话覆盖)时,公开 API 读不到,仍会被拒;无审批通道的组合(如某些 headless 编排)会得到拒绝信息,其中指明 tabbit.pageAccess: always 这条出路。

权限及安全

- 出于对用户数据安全和用户登录态权限的考量,设计了独立的 pageAccess 权限,它独立于文件系统/沙箱权限,默认需用户确认。
- 授权记录:某工具调用成功后,本会话后续调用不再重复询问;失败不记入(失败后重试会再次询问)。

开发

项目的开发和测试依赖本地的 deepseek-harness 环境。
@deepseek-ai/* 系列包在 npm 上的发布版本普遍滞后,不能直接作为依赖安装,因此需要先在本地构建好一份 harness 检出,再通过下方脚本把仓库内的 .dsh-harness 符号链接指向它(该路径已在 .gitignore 中忽略)。
整个流程只需配置这一处,tsconfig.json 和 package.json 均无需改动。

Deepseek Harness 代码获取及安装(如果已安装请忽略)
git clone https://github.com/deepseek-ai/deepseek-harness && cd deepseek-harness && pnpm install && pnpm build && cd ..

将本机的 Deepseek 环境路径修改并 ln 到本项目,把 /path/to/deepseek-harness 改为你的实际目录。
npm run link-harness -- /path/to/deepseek-harness # 或设置环境变量 DSH_HARNESS_PATH

安装和编译
pnpm install && pnpm build # tsc → lib/
npm test # 构建 + node --test tests/

已知限制 / 路线图

- 收藏夹/书签的提及暂不支持。
- 截图进上下文要求当前模型路由支持图像输入。
- Windows 版本回归测试有限。
预览分享卡片长什么样 ↓Tabbit-Browser/dsh-tabbit
分享 · DeepSeek Harness Hub
Tabbit-Browser/dsh-tabbit

DeepSeek Harness 的 Tabbit 浏览器插件

这是你的仓库?认领条目

回到顶部