隐私与数据处理

TextDuet 隐私政策

说明 TextDuet 处理哪些数据、数据保留在何处,以及何时会发送给你选择的服务商。

更新日期:2026-08-28 适用于 TextDuet 0.2.0 候选版本,以及发布后对应的 Chrome Web Store、GitHub Release 和源码构建包。

TextDuet 是一款本地优先的 Chrome 双语网页阅读扩展。你选择模型服务商并提供自己的 API Key。TextDuet 不运营翻译中转服务、账号服务、遥测服务、云同步或自动上传问题的服务。

简要说明

你主动启动翻译后,符合规则的可见网页文本会从 Chrome 直接发送到 TextDuet 中配置的模型服务商。TextDuet 运营的服务器或项目维护者不会接收或转发这些文本。服务商可能按自身条款留存、处理请求并收取费用。翻译机密、个人或受监管内容前,请先阅读服务商条款。

TextDuet 处理的数据

网页内容

用户操作后,Translator Script 会在当前 HTTP 或 HTTPS 页面识别可见且符合规则的阅读文本。请求可能包含原文、源语言、目标语言和翻译指令。为判断可读性,请求还可能包含标准化原文字色、有效背景色和用户本地颜色偏好。这些数据随模型请求直接发送给所选服务商,不会发送到 TextDuet 服务器。

翻译运行期间,新加载且符合规则的内容可能在后续批次发送,直到用户停止、离开页面或页面会话结束。表单、可编辑字段、隐藏内容、代码和 TextDuet 自己插入的节点会被提取规则排除。

Provider 配置与 API Key

服务商 Origin、模型名称、语言偏好、显示设置、价格和预算偏好保存在扩展本地存储中。已保存的原始 API Key 只由 Service Worker 读取。可信扩展页面只会在用户正在输入时短暂持有 Key,并通过经过校验的消息提交;它不会获得已保存的 Key。Key 不会出现在公共设置、网页或 Translator Script 中。

TextDuet 支持两种密钥生命周期:

  • 仅当前会话: Key 保存在受限的 storage.session 中,浏览器会话结束时清除。
  • 本地保险箱: 用户明确选择持久化时,Key 保存在版本化的 AES-GCM 加密保险箱中。密码本身不会保存;只有派生的解锁材料在当前浏览器会话中保存在受限会话存储里。浏览器重启后保险箱会锁定,需要再次解锁。

Options 提供锁定、删除和清空保险箱的操作。旧版明文 Key 槽位和按 Origin 的 Key 映射会在能够加密时执行一次迁移;无法安全迁移的数据会被删除,并要求用户重新输入。即使启用保险箱,浏览器扩展存储也不等同于操作系统密码管理器。

本地译文缓存

可选的持久译文缓存由 Service Worker 管理。在 0.2.0 版本线中,缓存使用同一保险箱加密,只有保险箱解锁时可用。缓存保存内容寻址记录、译文、语言/服务商/模型上下文和时间戳,不保存 API Key 或 URL。默认保留 30 天、上限 50 MiB,并执行过期和最近最少使用淘汰。用户可在 Options 清空缓存。

保险箱锁定时,持久缓存读取和写入都会停用。当前页面仍可在本次运行中复用仅存在内存里的译文。缓存命中不会发起服务商请求,也不会新增用量账本记录。

用量账本与诊断

本地用量账本记录本地日期、服务商、模型、服务商返回的输入/输出 Token、币种和预算提醒所需字段。账本按文档规定的滚动历史(当前为 60 个本地日)保留,不包含网页正文、URL、API Key 或请求体。预算金额是本地估算,不是服务商账单。

Options 可以在本地生成兼容性诊断预览。默认只包含脱敏主机名、扩展/Chrome 版本、标准化状态码和计数。页面路径默认排除,只有用户单独勾选同意后才加入,并会去除查询参数和片段。诊断由用户预览和下载,不会自动上传;公开提交前应再次检查。

TextDuet 不收集的数据

TextDuet 当前不包含:

  • 账号注册、广告、分析 SDK、遥测或云同步;
  • 项目运营的翻译后端或自动上传浏览历史;
  • 自动上传 Issue、截图、诊断包或网页内容;
  • 项目方获取用户 API Key、服务商账号、网页历史、表单值,或直接服务商请求之后的网页译文。

Chrome 和所选服务商可能依照各自政策处理数据。卸载 TextDuet 后,Chrome 会按其行为移除扩展存储;服务商已经收到的数据由服务商政策约束。

第三方服务商处理

所选服务商会接收生成译文所需的文本和请求元数据。TextDuet 无法控制服务商的留存、训练、地域处理、可用性或计费政策。

部分辅助请求只有在用户主动操作时才会发生:

  • OpenRouter 模型价格: TextDuet 可能通过 Service Worker 请求公开的 https://openrouter.ai/api/v1/models 目录。请求不包含用户 API Key、模型名、网页正文或本地用量;匹配在本机完成。
  • DeepSeek 余额: 用户配置官方 DeepSeek Origin 并点击余额操作后,已保存的 DeepSeek API Key 会发送到官方 /user/balance 接口。充值余额和赠送余额只显示在当前 Options 页面,不写入存储,也不会换算为 Token 用量。自定义端点不能使用此操作。

这些调用不是 TextDuet 的账号或账单服务。服务商条款、凭据、限额和费用由用户自行负责。

用户控制

用户决定何时开始或停止翻译、使用哪个服务商和模型,以及是否授予配置的 HTTPS Origin 权限。Options 提供以下控制:

  • 选择会话级 Key,或使用密码解锁的本地保险箱;
  • 锁定、删除或清空保险箱及其中的加密持久记录;
  • 清空持久译文缓存和本地用量账本;
  • 在 Chrome 扩展设置中撤销服务商 Origin 权限。

切换显示方式、锁定保险箱或清理本地数据,不会要求服务商删除已接收的数据。服务商侧删除和账单问题请联系对应服务商。

安全边界

Service Worker 是唯一读取密钥和构造服务商请求的业务上下文。Translator 只接收经过校验的块 ID、原文、语言设置和译文,不访问 Chrome Storage。运行时消息和模型响应经过 Schema 校验,译文使用纯文本插入,不作为 HTML 或可执行代码处理。

任何软件都无法保证绝对安全。请勿在 Issue 或 Discussion 中公开 Key、密码、认证头、私密 URL、私密正文或敏感截图。疑似漏洞请通过 GitHub Private Vulnerability Reportingfrealcat@gmail.com 私密报告。

Chrome Web Store 披露

即使数据只在本地处理或直接发送给用户选择的服务商,网页内容、翻译相关浏览活动和认证信息仍属于 Chrome Web Store 要求准确说明的用户数据类别。商店 Listing 与本政策会在发布前一起复核。

公开政策固定链接:

数据处理发生实质变化时,受影响的构建发布前会同步更新本政策和商店披露。隐私与安全联系邮箱为 frealcat@gmail.com