Tabbit 网关 xianshengl487-star/dsh-connect-tabbit
DeepSeek Harness把 Tabbit 模型额度接入本地,直接对话与调用工具
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xianshengl487-star/dsh-connect-tabbit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · model
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 45 处,展示前 41 条)
- 读取本地文件lib/index.js:364
if (!existsSync(this.path)) return - 读取本地文件lib/index.js:366
const parsed = JSON.parse(readFileSync(this.path, 'utf8')) - 写入本地文件lib/index.js:378
mkdirSync(join(this.path, '..'), { recursive: true }) - 写入本地文件lib/index.js:379
writeFileSync( - 发起网络请求lib/client.js:344
const response = await fetch(path, { - 发起网络请求lib/client.js:356
const response = await fetch(path, { - 发起网络请求lib/gateway.js:128
response = await fetch(this.url(path), { - 发起网络请求lib/gateway.js:161
const response = await this.request('/health', { timeoutMs: 5000 }) - 发起网络请求lib/gateway.js:167
const response = await this.request('/v1/models', { - 发起网络请求lib/gateway.js:211
const response = await this.request('/api/admin/login', { - 发起网络请求lib/gateway.js:235
const response = await this.request(path, { - 发起网络请求lib/gateway.js:249
const retried = await this.request(path, { - 读取本地文件lib/accounts.js:77
if (!existsSync(this.path)) return - 读取本地文件lib/accounts.js:79
const parsed = JSON.parse(readFileSync(this.path, 'utf8')) - 写入本地文件lib/accounts.js:92
mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 }) - 写入本地文件lib/accounts.js:93
writeFileSync( - 写入本地文件lib/accounts.js:98
renameSync(temporary, this.path) - 写入本地文件lib/accounts.js:99
chmodSync(this.path, 0o600) - 删除本地文件lib/accounts.js:101
rmSync(temporary, { force: true }) - 发起网络请求lib/tabbit.js:159
response = await fetch(`${origin}${path}`, { - 执行外部命令固定命令lib/local-accounts.js:12
const child = spawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], { windowsHide: true, stdio: ['pipe', 'pipe', 'ignore'] }) - 读取本地文件lib/local-accounts.js:53
if (!existsSync(join(root, 'Local State'))) continue - 读取本地文件lib/local-accounts.js:54
const state = JSON.parse(readFileSync(join(root, 'Local State'), 'utf8')) - 读取本地文件lib/local-accounts.js:55
const profiles = readdirSync(root, { withFileTypes: true }).filter(entry => entry.isDirectory() && /^(Default|Profile +)$/.test(entry.name)) - 读取本地文件lib/local-accounts.js:59
if (!existsSync(file)) continue - 读取本地文件lib/local-accounts.js:73
const prefs = existsSync(prefsPath) ? JSON.parse(readFileSync(prefsPath, 'utf8')) : {} - 读取本地文件lib/local-accounts.js:73
const prefs = existsSync(prefsPath) ? JSON.parse(readFileSync(prefsPath, 'utf8')) : {} - 读取本地文件lib/login.js:23
const binary = candidates.find(file => existsSync(file)) - 写入本地文件lib/login.js:85
mkdirSync(root, { recursive: true, mode: 0o700 }) - 执行外部命令来自配置/变量lib/login.js:87
const child = spawn(binary, [ - 删除本地文件递归lib/login.js:99
try { rmSync(directory, { recursive: true, force: true, maxRetries: 2, retryDelay: 100 }) } - 发起网络请求lib/embedded/upstream.js:111
res = await this.fetch(`${this.origin}${path}`, { - 发起网络请求lib/embedded/upstream.js:125
const response = await this.request(path, init) - 发起网络请求lib/embedded/upstream.js:158
const presigned = await this.request('/proxy/v0/cos/presigned-upload-url', { - 发起网络请求lib/embedded/upstream.js:172
const put = await this.fetch(url, { method: 'PUT', headers: { 'content-type': 'text/plain' }, body, - 发起网络请求lib/embedded/upstream.js:180
const complete = await this.request('/api/v0/cos/complete-upload', { method: 'POST', session, signal, - 发起网络请求lib/embedded/upstream.js:240
run = await this.request(`/api/v3/chat/rooms/${session}/runs`, { - 读取本地文件lib/embedded/usage.js:52
const saved = JSON.parse(readFileSync(path, 'utf8')) - 写入本地文件lib/embedded/usage.js:69
mkdirSync(dirname(this.path), { recursive: true }) - 写入本地文件lib/embedded/usage.js:71
writeFileSync(temporary, JSON.stringify(this.snapshot()), { mode: 0o600 }) - 写入本地文件lib/embedded/usage.js:72
renameSync(temporary, this.path)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-settings@deepseek-ai/dsh-home-paths@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 第三方 Tabbit 插件:内置网关接入 Tabbit 国内版/国际版账号池、周期额度、模型用量倍率、每日签到与工具调用
README
由 DeepSeek 最新模型翻译生成DSH Connect Tabbit
把 Tabbit 浏览器的模型额度变成 DeepSeek Harness 的免费本地模型网关——国内版 + 国际版、20+ 模型、零配置。
把 Tabbit 浏览器的模型额度变成 DeepSeek Harness 的内置网关:国内版 + 国际版、20+ 模型、Token 统计、每日签到、长任务续接。
intro video
快速开始(三步)
1. 安装:在 DSH 桌面版的插件市场或 dsh plugin --profile desktop add 安装本插件(或从本仓库 clone 后链接)。
2. 登录 / 导入:DSH → 设置 → 插件配置 → dsh-connect-tabbit → 登录 Tabbit(选国内版 / 国际版),或导入本机浏览器登录态。国际版三步指南见 docs/global-edition-setup.md。
3. 选模型开聊:模型选择器里选 tabbit-cn(23 模型)或 tabbit-global(34 模型)区域的任意模型,直接对话与工具调用。
无需 Python / Docker / 独立常驻网关:内置网关随插件启停,只监听本机回环随机端口,账号保存在 ~/.dsh/plugins/dsh-connect-tabbit/accounts.json(0600 / 用户 ACL)。
展开完整文档(README 剩余 1 节)
DSH Connect Tabbit 把 Tabbit 浏览器的模型额度变成 DeepSeek Harness 的免费本地模型网关——国内版 + 国际版、20+ 模型、零配置。 把 Tabbit 浏览器的模型额度变成 DeepSeek Harness 的内置网关:国内版 + 国际版、20+ 模型、Token 统计、每日签到、长任务续接。 intro video 快速开始(三步) 1. 安装:在 DSH 桌面版的插件市场或 dsh plugin --profile desktop add 安装本插件(或从本仓库 clone 后链接)。 2. 登录 / 导入:DSH → 设置 → 插件配置 → dsh-connect-tabbit → 登录 Tabbit(选国内版 / 国际版),或导入本机浏览器登录态。国际版三步指南见 docs/global-edition-setup.md。 3. 选模型开聊:模型选择器里选 tabbit-cn(23 模型)或 tabbit-global(34 模型)区域的任意模型,直接对话与工具调用。 无需 Python / Docker / 独立常驻网关:内置网关随插件启停,只监听本机回环随机端口,账号保存在 ~/.dsh/plugins/dsh-connect-tabbit/accounts.json(0600 / 用户 ACL)。 目录 | 章节 | 内容 | | 登录与账号池 | 隔离登录窗口、Cookie / JWT 导入、多账号池 | | 对话与工具 | 工具调用协议、CDATA 信封、四道防线 | | 长任务 | 流保活、事件续接、有界修正 | | 额度与消耗 | 官方计数 vs 本地估算、模型倍率、每日签到 | | 架构与兼容 | 进程内网关、外部模式、安全边界 | | 国际版上手 | 浏览器安装、双登录路径、验证记录 | | 接口证据 | 真实账号验证记录 | 2026-10-24 实测记录:76/76 单元测试通过;国内版全链路真实补全通过(网关→shim→DSH 适配器,23 模型 / 1 账号);国际版全链路真实补全通过(34 模型 / 1 账号,浏览器登录态导入→账号池→网关→shim→适配器);真实工具调用往返双版本一次通过(glm-5-3-flashx 含引号代码参数保真,未触发修正循环);每日签到真实领取成功并二次确认(详见 国际版上手)。 插件内置网关,随 DSH 自动启动、随插件关闭,无需安装 Python / Docker,也不需要手动运行 8800 / 8801 服务。国内版与国际版使用独立的账号池、随机本机端口和随机密钥。国际版需要独立的国际版账号,国内版登录态不能通用。 登录与账号池 - 登录 Tabbit:在隔离的官方登录窗口中完成登录,插件自动保存账号,支持取消和超时处理。 - 导入本机已登录账号:Windows 下读取对应版本 Tabbit 浏览器的登录 Cookie。文件被浏览器占用时,可退出 Tabbit 后导入或使用登录按钮。 - 导入账号 / 文件:支持 JWT、jwt|nextauth|device_id、Cookie、浏览器 Cookie 数组和账号 JSON。先校验整批,再原子保存;重新导入同一账号时更新登录态并保留已有启用和签到状态。 账号持久保存在 ~/.dsh/plugins/dsh-connect-tabbit/accounts.json。内置网关只在内存中保留执行副本,重启后从本地账号池恢复。POSIX 文件权限为 0600,Windows 使用当前用户目录的 ACL。 对话与工具 原样保留 DSH 消息角色、用户标签、工具定义、调用 ID 和执行结果。模型生成的工具请求通过白名单校验后转为 OpenAI tool_calls,交给 DSH 执行。网关本身不打开浏览器,也不会把模型的文字当作已执行成功。 Tabbit 官方输入框限制单次文本为 20,000 字符。旧外部网关把历史和全部工具拼成一条消息,约 30 万字符的请求会触发上游 492,并返回“欢迎使用 Tabbit 浏览器”。 内置网关对超过 18,000 字符的请求自动使用官方文档附件流程:完整上下文作为文本附件发送给同一个 Tabbit 账号,正文保留当前用户请求、最近工具结果及协议说明。不会为避开限制删掉用户消息或工具定义。附件会作为该账号在 Tabbit 中的会话资料保留,和网页上传文件的行为相同。 工具调用属于网页模型的文本协议兼容,仍受模型能力和 Tabbit 服务限制影响。上游拒绝、无正文、无完成事件或无效工具调用会明确报错;492 与工具格式问题不会使有效账号进入冷却。 0.4.0 增加代码专用的多行字符串协议:代码内容原样置于 CDATA 中,参数名称、必填项和字符串类型仍按工具定义校验,避免 Python / PowerShell / Windows 路径反复嵌套 JSON 转义。普通 JSON 调用继续兼容。Windows 上优先写源码文件再运行,不将多行程序塞进 python -c。 官方返回的 thinking.reasoning_content 实时转发到 DSH 推理过程;模型另外用简短 dsh_progress 更新当前步骤,正文中的进度不再等到整段工具参数生成完成才显示。没有返回的推理不会编造或由网关推算。 继续任务时会回溯实际用户目标;时间、技能清单、梁神模式的 [Working Context: ...] 都作为环境信息。压缩检查点只在原始请求已经离开可见历史时用于恢复背景,压缩后重新投射的进行中待办仍用于判断是否需要继续。 长任务 0.4.2 修复内置网关把所有模型上下文写死为 100K 的问题。优先读取官方明确的上下文字段,其次读取模型说明中的明确长度;没有声明时保守使用 100K。当前国内版目录明确声明 1M 的包括 Kimi-K3、DeepSeek-V4.1-Flash、MiMo-V2.6-Pro / Flash、LongCat-2.0。设置中的每个模型显示长度,悬浮说明区分官方标称、保守默认和外部网关声明。 上下文长度用于 DSH 判断何时压缩历史,不会被误传为最大输出长度。官方未公布长度的 GLM-5.3-FlashX 等模型不按其他厂商版本猜测容量。模型标称长度、网页单条输入限制、附件处理能力是不同限制;上传完整文件不代表服务端一定会将全部内容放入模型上下文,也不能突破模型本身的容量。自动压缩及任务检查点仍用于跨窗口的长任务。 - 单次生成不再使用固定 3 分钟连接总超时。当前为 45 秒建连、90 秒无网络数据后续接、单次生成最多 20 分钟;多轮工具任务可以跨越多个生成轮次。DSH 语义流看门狗为 25 分钟,避免在工具 JSON 缓冲期间提前打断。 - 内置网关每 10 秒发送 SSE 保活;v3 短暂断流按最近 event_id 续接同一个任务,最多续接 6 次并退避、去重。提交回执丢失时只加入原房间确认,不盲目重复创建生成任务。 - 上游不提供事件编号、事件已重置或重试预算耗尽时明确失败,不将不完整结果标为完成。用户取消时关闭流并尽力发送官方取消命令。 - 强调当前请求、最近结果与未完成步骤;缓冲的工具参数出错时在限定预算内修正格式,通过校验后才交给主机执行。 - DSH 的 purpose: compaction 请求关闭本轮工具定义,摘要中的历史调用标签只作为文字,避免压缩误触工具协议。其他工具会话保留原有工具。 - 用户只说“继续”时恢复前一个真实目标,长任务预览同时保留开头与交付要求的结尾。根据当前目标下已成功写入的 todo_write / update_plan 检查未完成项,避免将“环境已就绪,下一步写代码”当成最终完成。纯状态问题、新任务以及明确需要用户输入的阻塞状态仍可正常结束。 - 工具格式最多修正两次,未完成状态最多续接两次,单个请求总预算仍为 20 分钟。达到上限会明确报错,不无限自循环,也不将未完成任务显示为成功。 0.4.1 根据真实会话中“只说接下来写文件却正常结束”的记录修复:即使压缩后没有待办投射,明确的下一步执行承诺或只有进度标签也会进入有界续接。已经验证的结果报告、状态问题和可选后续建议仍可正常结束。不能仅靠此判断保证所有模型完成任意任务。 历史回复中的推理字段不再重新拼进 Tabbit 请求附件;用户消息、公开回复、工具调用 ID、完整参数与执行结果保持不变,DSH 已展示和保存的原始推理也不修改。摘要调用通过系统标记传递 purpose: compaction,使用独立的仅摘要提示,不再混入继续执行原任务的指令。 网关日志和最近用量记录增加请求用途、结束类型、工具调用数、任务状态、未完成数和修正次数,便于排查停止位置;不记录消息、推理正文、代码或凭据。 这些措施不能消除账号过期、额度耗尽或 Tabbit 停服。错误不会因普通断流或格式问题把有效账号误判为失效。 额度与消耗 显示官方会员等级、周期已用 / 剩余百分比、重置周期、各模型 display_multiplier。倍率描述相对额度消耗,不是人民币单价。 设置卡片单独显示输入 / 输出 / 累计 Token、官方计数与本地估算、最近请求、进行中和续接次数。卡片展开时每 5 秒刷新本机统计,不重复请求官方额度。计数记录在 ~/.dsh/plugins/dsh-connect-tabbit/token-usage-tabbit-cn.json(国际版另存)并在重启后保留,只记录计数和模型等元数据,不保存正文或凭据。 只有实际收到官方 usage 才写入标准 OpenAI 用量字段;暂无官方计数时按中日韩字符与其他文本长度估算,明确标记 estimated。估算包含完整附件文本、实际回传的推理与正文、重试和失败请求,不包含未回传的隐藏推理、图片或服务端附加 Token,不能代表真实扣费。网关另用 dsh_usage 字段提供本轮统计来源;估算不注入 DSH 的货币费用账本。 每日签到使用官方 desktop_pet 活动与服务端日期,并确认服务端签到结果。 架构与兼容 DSH 模型适配器 → 私有本机 shim → 插件内置 OpenAI 网关(同一个 DSH 进程) → Tabbit 官方会话、v3 任务流、文档附件 本地账号池 → 内存执行副本设置卡片 → 官方额度、模型倍率、签到 服务只绑定 127.0.0.1 随机端口,账号与代理接口需要进程内随机密钥;关闭插件会中止请求并释放监听。安装包包含服务实现,不下载运行时或代码,不启动额外常驻进程。 默认 gatewayMode: auto 自动运行内置网关。已有非默认自定义 URL 的旧配置在 auto 模式保留外部模式;embedded 可强制使用内置服务。希望继续使用独立 tabbit2api 时,在对应版本配置中显式指定: cn: enabled: true gatewayMode: external gatewayUrl: http://127.0.0.1:8800 adminPassword: admin 外部模式仍将账号同步到该服务,服务按自己的配置持久保存执行副本。连接模式更改后需要重新加载插件或重启 DSH。两种模式均支持官方地址覆盖 tabbitUrl,通常保持默认即可。 安装与验证 将插件安装到 DSH 后重启,在账号卡片登录。支持 Node 22.19+ 或 24+ 的 DSH 运行环境;模型适配器使用 DSH 提供的 peer dependencies。 npm test 使用模拟服务验证登录、原子导入、额度、界面、工具协议、区域隔离、附件上传与停止清理,不需要真实账号。 真实账号验证记录见 接口证据。当前已验证国内版默认模型与 GLM-5.3-FlashX 工具往返,包含 95 个合成工具与超长历史;工具执行结果为模拟值。国际版已于 2026-10-24 完成真实账号全链路验证(浏览器登录导入→账号池→网关→shim→DSH 适配器,34 模型,见 国际版上手)。 补充真实界面回归:在 DSH 的「Tabbit插件回归测试」会话中,由 GLM 实际调用 computer_observe 打开 B 站,再通过 pwsh 启动本机 Edge、记事本和计算器,并从真实工具结果核验窗口标题。此次不是模拟工具。0.2.1 另修复 Agent Loop 预备调用入口绕过未知用量过滤的问题。 协议参考:tabbit2api。内置服务由本插件的 lib/embedded/ 实现,不依赖该 Python 服务。 本机稳定性修复(2026-10-24) - 原任务识别排除 DSH 的 [Circuit Breaker] 运行时提示,防止防循环消息覆盖用户目标;该提示仍完整传给模型,防循环和用户取消机制不变。 - 超长附件的最近对话预览跳过技能目录、工具目录等环境消息,让最近的工具结果能够直接呈现;完整请求附件不删除这些消息。 - 串流按任务编号过滤后再去重,避免其他任务的事件污染当前任务游标;事件编号 0 也可以正常续接。 - 自动格式修正和续接仍有上限。账号过期、额度不足、上游停服不能承诺永不中断,也不会伪造成功。 - 修复验证和真实模型工具测试记录位于 E:/op2025/output/tabbit-stability-20261024/。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xianshengl487-star/dsh-connect-tabbit
把 Tabbit 模型额度接入本地,直接对话与调用工具
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1