# Tabbit 接口证据与修复记录(2026-10-20~21) ## 0.4.1 真实提前结束与修复(2026-10-21) 原 DSH 会话的第 13、14 轮均出现:最后只有“现在写入 / 先读取再修复”的未来执行说明,没有后续工具调用,宿主却写入 completed。压缩后原 todo 调用与 Working Context 投射都可能不可见,旧 guard 因没有未完成 todo 而放行 stop。新逻辑独立识别进度式动作停顿,并保持两次续接上限。 原始两次结束文本在本机重新输入新判断,均得到 progress_only。四项针对性回归先失败后通过,新增用途标记兼容和长附件摘要路径覆盖,合计 58 项 node:test 与原有冒烟全部通过。 真实 DSH 新会话使用相同 GLM-5.3-FlashX、梁神模式和 95 个宿主工具:一次用户消息中,read → write → read → write → read 连续完成,跨两次自动压缩后给出最终报告。事件用时 331 秒;数据排序 `[2,4,4,9,13]`,总和 32,个数 5,两个输出文件均回读,原输入未改动。首轮无效 JSON 经一次有界格式修正恢复,没有人工追加“继续”。此验证是文件任务,未代表原知识视频已完成。 历史推理字段现在只从发往 Tabbit 的对话重放中排除,不改变 DSH 已存储与显示的推理;本次实际请求最多排除了 69,613 字符的重复历史推理,公开对话和工具证据仍保留。摘要请求用途已从真实宿主入口传到附件正文,日志明确显示 compaction。 本机证据位于 `output/tabbit-stop-investigation-20261021/`,只保存结束状态、事件和校验计数。已恢复普通启动并关闭临时调试入口;两区域内置网关均 healthy。国际版仍无真实账号调用验证。 使用用户指定的 [leanrea](https://github.com/aicodeking/leanrea/blob/main/leanrea/SKILL.md) 方法:保留原文件、先建立脚本清单,再搜索目标字符串并读取局部代码;将静态代码与真实请求结果分别记录。仅使用本机已导入的国内版账号,凭据不写入研究输出。 ## 已观察到(seen) | 事项 | 静态来源 / 真实证据 | 修复 | | --- | --- | --- | | 周期额度 | 官方 `8136-00c88a16073e70e9.js`,`/quota/v1/usage`;认证请求 200,返回 `usage_percentage`、会员与周期 | 使用真实额度接口,保留 `0.00%`,显示已用/剩余百分比 | | 聊天目录 | 官方 `30923-35d23d10abd3183a.js` 的 `getSupportedModels`;`a=0&scene=chat` 真实返回 23 个模型 | 不再以 `generate_image` 获取聊天目录,按各版本源站请求 | | 模型消耗 | 上述目录返回 `display_multiplier`;当前默认 0、LongCat-2.0 0.1、Kimi-K3 1.5 | 展示官方相对用量倍率,与金额、每轮固定积分区分 | | 每日签到 | 官方 `90347-ffbd` 开头的脚本;`desktop_pet` 状态 200;缺 `request_no` 时 422,UUID 请求成功返回 `already_signed` | 先读服务器状态,携带必需参数,领取后确认,按服务端活动日期记录 | | 全账号冷却 | 创建 session 成功后,旧 RSC GET 307 到新的同会话缓存参数;网关误报失败并累计 3 次冷却 300 秒 | 改为正常认证页面导航,只允许同源同会话重定向 | | 真实消息丢失 | 原网关仅选择最后一个 user 行;故障日志中实际发给模型的是时间、技能说明或 model changed 通知 | 保留完整系统、用户、助手与工具历史,取消短截取及 XML 内容删除 | | 工具无法执行 | 旧网关工具配置默认关闭且响应转换未接线;消息类型丢弃 `tool_calls` / `tool_call_id` | 请求带工具即启用桥接,转换为 OpenAI `tool_calls` / `finish_reason: tool_calls` | | 上游内置工具 | 合成 B 站请求在 v1/v3 均出现 `browser_task_tool`,本机无该执行器时结果空;普通文字流未包含主机调用 | 明确外部 DSH 协议生成任务,用独立 `dsh_function_call` 标记;上游空回复明确失败 | | v3 事件 | 当前会话页面 `85234-25883c3b3f7aa6a7.js`,真实 `/api/v3/chat/rooms/.../runs` 与 join;`event_message_chunk`、`run_completed`、`room_reset_required` | 正确读取 `message_chunk` 文本及结束/失败事件,不加入无关忙碌任务 | ## 已验证的运行链路 - 本机国内版账号的真实周期额度、聊天目录和签到状态均可读取。签到领取接口的真实响应为“已签到”,不宣称在未知的新签到奖励枚举上做过实测。 - DSH 原装 `PiAiAdapter` → 插件随机密钥回环服务 → 实际国内版网关 → 官方 Tabbit:免费默认模型实际回复 `OK`。 - 默认模型与 LongCat-2.0 的真实模型测试:用户“打开 Edge 的 B 站”后追加时间和模型切换上下文,仍发出 `open_page`、正确 URL 和 `edge` 参数;DSH 收到可执行工具块。将模拟成功结果作为 tool 消息回传后,两种模型均继续汇报、未重复调用。 - 上述工具测试只验证模型与 DSH 协议,执行结果为模拟;不代表真实 Edge 页面已打开。 - 插件 `npm test` 通过:原有三组冒烟、25 项登录/额度/工具协议测试、界面交互与额度展示测试。网关隔离回归覆盖重定向、完整消息、流式/非流式工具往返、上游失败、HTML 转义和 v3 事件。 ## 推断(inferred) - 官方用 `100 - usage_percentage` 表示剩余周期百分比;插件依此显示剩余值。显示倍率反映相对额度消耗,不能仅凭倍率计算单次请求固定扣减。 - 网页接口接受单个文本内容,完整 OpenAI 历史通过保留角色的文本协议投影,并非官方提供的 OpenAI 原生消息 API。 - 工具桥接依赖指定模型遵守外部协议;即使同一模型通过测试,上游仍可能拒绝或改变路由。未知工具、缺参数或空回复不会被当成已执行。 ## 尚未知(unknown)及边界 - 官方终止事件未观察到 token 用量或人民币账单。0.3.0 起另提供明确标记的本地文本 Token 估算,不作为官方用量或账单;不把 SDK 补出的全零计数当成真实免费账单。周期额度、模型倍率是已核验的官方消耗展示口径。 - 国际版网关健康检查已通过;本机没有有效启用的国际版账号,未验证国际版认证聊天、额度和签到。 - 新签到的奖励内容和结果枚举尚未实测,通过随后读取官方状态确认是否成功。 - 模型目录会变化,23 是本次观察值,不作为测试固定要求。官方倍率与会员额度以刷新时结果为准。 ## 本机研究产物 工作区 `output/tabbit-interfaces-20261020/` 保存公开脚本及清单、脱敏响应、原网关与插件备份、验证脚本及安装文件哈希。账号凭据仅留在原有本机账号池及网关执行副本,不进入证据文件。 源站:国内版 `https://web.tabbit.com`,国际版 `https://web.tabbit.ai`;上游网关 [hoinata/tabbit2api](https://github.com/hoinata/tabbit2api)。 ## 0.3.1 长任务、续接和 Token(2026-10-21) 已观察到:官方前端 `85234-25883c3b3f7aa6a7.js` 的房间流使用 `last_event_id` 续接,并按 `event_id` 去重;`room_reset_required` 不等同于正文完整。取消通过 `/runs/{run_id}/commands` 的 `command_type: cancel` 发出。 真实国内版默认模型测试:在收到首个内容后故意断开一次本地流,随后以游标加入原房间;只提交一次生成任务,1–30 完整无重复输出。另用合成的长历史与实际 DSH SDK 完成连续三步工具往返。 这些真实响应的终止事件仍未返回官方 Token 用量。0.3.1 接入已知用量信封字段,并将未上报部分作为明确标记的本地文本估算保存与展示;估算不是官方 tokenizer 或结算值,不进入标准金额账本。 实际 DSH 中,95 个工具与旧会话的 GLM-5.3-FlashX 任务在 3 分 8 秒完成软件窗口检查、计算器启动、写入与回读文件。随后 `/compact` 成功压缩 55 条历史;模型从摘要找回路径,再次实际读取文件并完成核验。单次输出延迟 190 秒的本机 SSE 测试也通过,该测试没有使用真实账号。 设置卡片持续刷新发现用量区与模型区复用 sibling key,现已分开;真实界面连续自动刷新后区域数量保持稳定。Token 记录在重启后保留,截图明确标注“本地估算 / 官方暂无回传”。 ## 0.2.0 内置网关与 492(2026-10-21) 已观察到:实际失败模型为 `glm-5-3-flashx`,两次失败请求分别是 44 / 47 条消息、95 个工具、300,593 / 305,116 字符;原始 SSE `error` 的代码为 492,说明为“欢迎使用 Tabbit 浏览器”。同一账号与模型的短请求成功回复 OK,纯合成长请求复现 492。v3 返回 HTTP 429 时,正文仍含 492,不能直接当成账号限流。 静态证据:`page-0f72bae065ccbffb.js` 的模块 22959 定义 `2e4` 上限,发送前检查 `plainText.length` 并报告 `too-long`。相同脚本模块 1635 / 1786 展示官方附件流程: 1. `POST /proxy/v0/cos/presigned-upload-url`,`file_category: document`、文件名、MIME 与字节数。 2. 向返回的 COS 预签名地址 PUT 文件,使用文件 MIME,不发送 Tabbit Cookie。 3. `POST /api/v0/cos/complete-upload`,传入 `file_id` 和当前会话 ID。 4. 聊天引用 `{type: file, metadata: {file_id}}`,正文低于输入框上限。 真实验证:官方预签名接口返回 200;COS 上传、登记与 v3 引用可用。44,261 字符的纯合成附件被模型完整识别。只将指令放在附件中时,模型可能只分析文件而不继续用户任务,因此正文另行保留当前用户请求和外部工具协议;完整消息和工具定义仍全部保存在附件,未进行历史裁剪。 DSH 原装 SDK → shim → **插件内置 Node 网关** → 官方 Tabbit 已验证默认模型,以及 GLM-5.3-FlashX 的 95 工具 / 超长合成上下文工具往返。工具调用 `open_page`,浏览器 `edge`,URL 为 B 站;收到模拟成功结果后继续回答,未重复调用,账号 active / errors 0。仅测试协议,不代表真实浏览器执行。 内置实现随 npm 包的 `lib/embedded/` 一起发布,没有 Python、临时目录源码、用户绝对路径或外部进程依赖。默认随机回环端口与进程内密钥;关闭时中止请求、清理服务与内存账号副本。单元测试覆盖鉴权、区域隔离、停止清理、完整上下文上传、COS 不携带 Cookie、错误不生成假成功以及 492 不冷却账号。国际版服务启动可验证,但当前没有有效国际版账号,不声称认证模型调用成功。 ## 0.2.1 真实 DSH 界面回归 使用 Electron 的本机 CDP 连接控制真实 DSH 窗口,在界面新建“Tabbit插件回归测试”会话,模型 GLM-5.3-FlashX,未通过脚本替模型启动测试软件。 - 当前用户消息:实际回复“收到,当前消息已收到”。 - 浏览器调用:`computer_observe` 真实返回 B 站网页目标、URL 与标题。此路径遵循本机浏览器技能的隔离浏览器优先规则,不能当成本机 Edge 已打开。 - 系统调用:DSH 实际运行 `pwsh`,以 `Start-Process` 启动记事本、计算器和本机 Edge。首次进程检查因旧程序名与截断未确认全部窗口,模型随后按真实结果修正检查:Notepad 窗口存在,msedge 窗口标题包含 B 站,CalculatorApp 存在且 ApplicationFrameHost 窗口标题为“计算器”。 - 设置卡片:两个内置服务正常,国内账号 1/1,9 次请求成功率 100%,官方周期额度与模型倍率可读,国际版正确提示空账号池。上述计数和额度仅为当时的观察值。 - 实际缺陷:Agent Loop 使用 `prepareCall().stream()`,绕过了插件直接 `stream()` 上的未知用量过滤。0.2.1 两个入口共用过滤,回归测试覆盖 Agent Loop 的真实入口。 界面轨迹、软件窗口证据和测试报告保存于 `output/tabbit-normal-use-20261021/`。本机 `dsh-browser-workflow` 的目标选择规则也单独调整为尊重明确指定的已安装浏览器;系统启动与图形交互分别检查能力,保留默认隔离浏览器策略。