dsh-AuthInOne
English | 简体中文

dsh-AuthInOne 是 DeepSeek Harness 的 Provider 与用量插件,把账号登录、API 与自定义 OpenAI-compatible Provider、模型切换、仅面向纯文本主模型的可选视觉兜底、Token 用量和费用统计放进 DSH 原生的「模型」与「用量」设置页。
模型越接越多,登录方式和账单也越攒越乱,dsh-AuthInOne 把这些麻烦收进 DSH 的「模型」和「用量」两页里,让蓝色大肥鱼安心开饭,也让你看清每一次调用花了多少。
OpenAI Codex 使用带 state、S256 PKCE 与 loopback callback 的浏览器 OAuth。Kimi Code 打开 Provider 返回的完整授权链接,底层仍是 RFC 8628 device flow;短码已在链接内,用户通常只需登录并确认授权。xAI Grok、Anthropic、GitHub Copilot、Command Code、Cursor、Google Antigravity 与 Kiro 均明确标为实验性兼容。本机安装后的 Host 已逐项到达相应授权边界并停在用户确认之前;mock/fixture 测试覆盖换取凭据或轮询、refresh token 轮换、拒绝、超时、取消、登出、模型路由和凭据脱敏。
> Alpha v0.2.0-alpha.4 · 精确兼容目标为官方 DSH 47f9438 · 自包含引导程序内部调用官方 DSH 插件命令,并让 Web 回到原端口 · [Release notes](docs/releases/v0.2.0-alpha.4.md) · MIT · 社区维护,不代表 DeepSeek 或 OpenAI。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 install --profile web这条命令由本包自己提供。它会先核验正在运行的标准 DSH Host,再调用官方 dsh plugin 安装路径,最后让 Host 在同一个 URL 上完成替换。无需修改 DSH 核心、手改 profile、另开第二个 Web 实例或使用临时端口。源码 checkout 和非默认端口写法见[安装、升级与卸载](#30-秒安装升级与卸载)。
如果 AuthInOne 对你有帮助,欢迎在 GitHub 仓库点一个 Star,支持项目继续完善。
启动后进入设置 → 模型或设置 → 用量。浏览器只接收聚合用量、脱敏状态、授权链接和流程需要的用户码。OAuth verifier、授权码、device code、access token 与 refresh token 只留在 Host;插件不会导入 ~/.codex/auth.json、OpenCodex 状态、Cookie、浏览器存储、OTP 或其他产品的凭据。
给 Agent 的指令 把文档里的 pnpm dlx … install --profile web 当成一个完整操作执行,不要拆成手工 dsh plugin add 加自创重启。AuthInOne 引导程序必须完成监听进程核验、官方安装、原 URL 恢复,并报告 ready 后再验收 UI。不得另开第二个 Web 实例、改临时端口、修改 DSH、手改 profile YAML 或读取凭据。如果引导程序拒绝未知启动方式或 DSH owner 指纹,停止并展示原错误,不要猜。
适合这些场景
- 想在 DSH 内使用 OpenAI Codex 或 Kimi Code 登录,或明确选择带风险标识的兼容登录。
- 需要继续使用 DSH 原生模型页管理 API Key 或自定义 OpenAI-compatible Provider。
- 想切换未来会话的默认模型,又不替换 DSH 的单会话模型选择器。
- 希望只在当前主模型明确声明为纯文本输入时,用独立配置的视觉模型描述图片。
- 需要可重建的 Provider/模型/工具 Token 用量与可审计费用。


其他真实 DSH 截图包括 [Auth 登录弹窗](docs/assets/auth-login-dark.png)、[模型页操作区](docs/assets/models-auth-actions-dark.png)、[深色用量页](docs/assets/usage-dark-desktop.png)、[浅色窄屏](docs/assets/usage-light-narrow.png)、[深色窄屏](docs/assets/usage-dark-narrow.png)与[秒级时间范围](docs/assets/usage-time-range-light.png)。
已验证能力
| 能力 | 状态 | 验证方式 | 最低 DSH 环境 |
|---|---|---|---|
| OpenAI Codex 浏览器账号授权 | 已验证到用户确认边界 | 真实导航到 auth.openai.com;本地 mock issuer 覆盖 callback、state/PKCE、换取凭据、刷新、拒绝、过期、取消、登出、撤销与脱敏 | 官方 DSH 47f9438 加包内 compat owner |
| Kimi Code 授权连接 | 实验性,已验证到用户确认边界 | 安装后的 Host 返回 Kimi 完整授权链接,不会把 Host 内的 device code 交给浏览器;短码已在链接中时,界面不再要求用户重复输入 | 官方 DSH 47f9438 加包内 compat owner |
| 七种账号兼容流程 | 实验性,已验证到用户确认边界 | xAI、Anthropic、GitHub Copilot、Command Code、Cursor、Antigravity 与 Kiro 分别到达预期授权边界;mock 完成后会注册并在登出时释放对应模型路由 | 官方 DSH 47f9438 加包内 compat owner |
| Provider 套餐额度 | 上游可取时 best effort | Codex、Kimi、xAI、Anthropic、Cursor 与 Antigravity 只向 Remote 投影无凭据用量;上游无返回、字段不完整、不支持或无法可靠算出百分比时,模型页不渲染额度区域 | 官方 DSH 47f9438 加包内 compat owner |
| 套餐/API 预设 | 可用,并显示厂商限制 | OpenAI、xAI、Gemini、Anthropic、Kimi Code、GLM Coding Plan 与 ModelStudio/Qwen 预设通过 DSH 写入凭据;GLM 与 Qwen 的使用范围提示仍在页面显示 | 官方 DSH 47f9438 加包内 compat owner |
| DeepSeek API Key 与真实模型调用 | 仅 API Key | 原生 Provider 保持连接;真实 DeepSeek 调用进入用量页,浏览器未接触密钥 | DSH 0.1.0-rc.6 |
| 自定义 OpenAI-compatible Base URL、请求头与模型映射 | DSH 原生能力 | 插件保留原生模型卡片,只读取公开 Provider 投影 | DSH 0.1.0-rc.6 |
| 未来会话默认模型与连接测试 | 已验证 | 安装后的模型页 contribution 与 Host/Remote 链路完成实测 | 官方 DSH 47f9438 加包内 compat owner |
| 纯文本主模型的视觉兜底 | 已验证 | PNG/JPEG/WebP/GIF 沿用 DSH ImageBlock 引用;多图、原生多模态直通、关闭兜底、失败、恢复与分叉均有无密钥覆盖 | 官方 DSH 47f9438 加包内 compat owner |
| 跨会话用量与费用 | 已验证 | 真实 DSH session log 重建出 26,383 Token 的 KPI、热力图、模型、Provider、Token 桶与费用 | DSH 0.1.0-rc.6 |
| 用量页导航图标 | 已验证 | 包内通用 owner 投影 keyed icon seat;插件注入 currentColor 16 px 三竖线,未知 section 仍使用原生回退 | 官方 DSH 47f9438 加包内 compat owner |
账号登录支持矩阵
| Provider | 流程 | 稳定性 | 已验证授权边界 | 刷新/登出/模型路由 | 套餐额度 |
|---|---|---|---|---|---|
| OpenAI Codex | 浏览器 OAuth,state + S256 PKCE + loopback | Stable | auth.openai.com | 有/有/有 | primary 与 secondary window,best effort |
| Kimi Code | 基于 RFC 8628 的完整授权链接 | Experimental | www.kimi.com | 有/本地登出/有 | best effort |
| xAI Grok | 设备登录 | Experimental | accounts.x.ai | 有/有/有 | 周或月窗口,best effort |
| Anthropic | 浏览器/手动输入兼容登录 | Experimental compatibility | claude.ai | 有/本地登出/有 | best effort |
| GitHub Copilot | 设备登录 | Experimental compatibility | github.com | 有/本地登出/有 | 未提供 |
| Command Code | 浏览器 loopback 兼容登录 | Experimental compatibility | commandcode.ai | 按返回的账号凭据刷新/本地登出/有 | 未提供 |
| Cursor | 浏览器 PKCE 兼容登录 | Experimental compatibility | cursor.com | 有/本地登出/有 | best effort |
| Google Antigravity | 浏览器 PKCE 兼容登录 | Experimental compatibility | accounts.google.com | 有/本地登出/有 | best effort |
| Kiro | Builder ID 设备登录 | Experimental compatibility | view.awsapps.com | 有/本地登出/有 | 未提供 |
| Qwen 账号 OAuth | 已停止 | Unsupported | 不提供启动操作 | 无 | 无 |
“本地登出”表示当前核验到的兼容协议没有可用 revoke endpoint,插件会先删除自己的 DSH credential 并注销模型路由。浏览器不会拿到保存的凭据。稳定性标签描述实现风险,不代表厂商赞助、认证或合作。
30 秒安装、升级与卸载
使用包内引导程序安装或升级不可变 tag。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 install --profile web引导程序会发现 http://127.0.0.1:3080/ 的唯一监听进程,确认它是标准 DSH Host,校验精确支持的 DSH owner 产物,通过官方 DSH 插件命令完成 add,再安排一个脱离当前 Host 的同端口替换进程。安装命令会在旧 Host 停止前返回;浏览器可能短暂断开,但必须由原 URL 恢复。
当前 DSH 使用非默认 loopback 端口时,传入准确 URL。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 install --profile web --url http://127.0.0.1:3090/DSH 从源码 checkout 启动时,引导程序通常会从监听进程的工作目录自动识别;运维人员也可以显式传入。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 install --profile web --source-root /path/to/deepseek-harness原 URL 恢复后可读取脱离进程的状态。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 status --profile web卸载也走同一条自包含路径。
pnpm dlx github:Stormycry-cryp/dsh-AuthInOne#v0.2.0-alpha.4 uninstall --profile web引导程序只接受不含凭据的 loopback HTTP origin,以及标准 DSH 启动方式:已安装的 dsh 可执行文件,或显式/自动识别的 DSH 源码根目录。自动监听核验目前支持 macOS 与 Linux,并要求系统提供 lsof。端口存在多个监听进程、监听进程不是 DSH、owner 产物未知或启动来源无法核实时,会在停止 Host 前明确失败;不会换到另一个端口。脱离进程的状态文件只写在所选 profile 下,不序列化环境变量或凭据。
profile dependency 与 Bundle row 仍由官方 DSH CLI 维护。不要复制 lib/、创建 workspace link、手改 profile YAML 或手动应用 patch。卸载会释放页面、模型页 contribution、Remote namespace、Host service、样式与监听器。DSH session、插件 settings 与 credential reference 会保留,删除数据必须另行明确执行。完整生命周期和失败规则见[自包含安装与同端口重启设计](docs/design/self-contained-installer.md)。
模型页与官方 Auth
API Key Provider 的新增、编辑与删除仍在 DSH 原生卡片完成。自定义 Base URL、请求头、协议、模型映射和端点模型发现也归原生页面。AuthInOne 补充紧凑的连接与默认路由区域,并在两个原生新增 Provider 按钮上方放置全宽的添加 Auth 登录和添加套餐/API Key。单会话切换仍使用 DSH 会话模型选择器。
模型摘要只显示已经配置的 API/套餐/自定义 Provider 与已持久化的 Auth 账号。Auth 目录只留在「添加 Auth 登录」弹窗;取消、失败、过期或从未开始的条目不会生成占位卡。账号连接后摘要会立即刷新,Auth 实例使用自身模型 adapter 与退出流程,不会误走通用 Base URL 测试。
每个 Auth 入口共用一套 Host 登录事务,覆盖开始、脱敏状态、取消、可选一次性输入、刷新、登出与 dispose。浏览器/loopback 流程把 state 与 PKCE verifier 留在 Host。设备流程把 device code 留在 Host,只展示验证链接和 user code。凭据先写入 DSH credentials,随后才注册模型 adapter;终止性刷新失败或登出会注销路由。取消若撞上凭据写入,会补偿删除。远端撤销在本地删除以后 best effort 执行,并受超时限制。
OpenAI Codex 的协议值对照其公开 login server、auth manager和 PKCE helper。Kimi 设备轮询遵循 RFC 8628 的 pending 与 slow_down 语义。其余兼容流程沿用经过核验的 Provider/公开客户端行为,并保持 Experimental 标识。
套餐/API 入口包含 OpenAI API、xAI API、Google Gemini API、Anthropic API、Kimi Code 套餐 Key、GLM Coding Plan 与 ModelStudio/Qwen Coding Plan。GLM 与 Qwen 预设保留厂商的支持工具或交互用途限制。API Key 是独立连接方式,永远不会算作账号 Auth。
连接测试由 Host 请求已配置 OpenAI-compatible 端点的 /models。带凭据请求会拒绝重定向,响应正文按流式字节上限读取。Client 只收到成功状态、延迟、模型 id 或经过归类的失败信息,不会收到请求头、上游响应正文或凭据。
视觉兜底
视觉兜底默认关闭,入口位于设置 → 模型。用户只能选择已经激活、且 DSH 适配器明确声明支持 image 输入的 Provider 与模型。仅当主模型明确不包含图片能力时兜底才运行;主模型声明支持图片时原请求保持直通,能力未知也不会被插件擅自判成纯文本。
面对纯文本主模型,插件把原始 DSH 附件引用、兜底路由、提示版本、返回描述与 Provider 实报 usage 记录为带插件来源的普通 DSH 持久消息;真正发往主模型的请求只把图片块替换成已经记录的文字描述。恢复与分叉复用该描述;切换兜底模型只影响之后的新图片,不重跑已有历史。
本期输入范围与 DSH 第一版图片附件完全一致:PNG、JPEG、WebP 与 GIF。不支持音频、视频、PDF、图片生成、浏览器 object URL、Host 路径或插件自有 base64 存储。图片字节由 DSH 附件存储持有和校验,Provider 适配器通过 DSH Host credentials 解析凭据;视觉设置 RPC 不接收凭据。
视觉辅助调用在用量页单独显示为“视觉辅助调用”和“视觉辅助 Token”,同时保留真实 Provider/模型归属。Provider 没有返回可靠 usage 时保持未知,没有价格时保持未定价。无凭据或上游失败时不会继续把不可用图片请求交给纯文本主模型,而是返回可恢复的 VISION_FALLBACK_FAILED,且不把上游响应细节写入会话日志。
用量筛选与统计口径
- 时间、Provider 与输出价格共享同一查询上下文,驱动 KPI、热力图、模型 Token 消耗、榜单、Token 桶和费用。
- 时间采用界面所示 IANA 时区内的
YYYY-MM-DD HH:mm:ss闭区间。Host 转成确定的 UTC[start, endExclusive)查询。近 7 天、近 15 天与近 30 天只填充范围,仍由用户点击应用。 - 输出价格只读取 USD/1M output Token 目录桶。区间为
[0,1)、[1,5)、[5,15)、[15,+∞)与未定价,互不重叠。缺价或非 USD 都归入未定价,不做静默换汇。 - 刷新保留全部筛选。失败会留在页面上,不会用空结果覆盖最后一次成功数据。
- 每日 Token 活动固定以最近 365 个日期组成七行日历;没有匹配调用的日期仍保留空格,每周与累计模式沿用既有聚合语义。
- 模型调用按实际事件时间统计;工具调用是另一个维度。当前 DSH 并不为每条工具事件记录权威 owner plugin,页面只显示持久工具名,不猜插件归属。
- 总 Token 等于 uncached input、output、cache read 与 cache write 之和。reasoning 单独显示,避免 Provider 已把它计入 output 时重复计算。缺失桶保持未知。
- 低于 1M 的 Token 使用 locale 千分位,1M 到 1B 使用
M,1B 以上使用B,完整数值仍保留在 title 与无障碍标签中。
内置 deepseek-usd-2026-08-14 目录只包含 2026-08-14 从 DeepSeek 官方价格页核验的 DeepSeek-V4-Flash 与 DeepSeek-V4-Pro 美元记录。每行都有来源 URL、核验/更新时间、生效日期、币种和明确 Token 桶费率。拿不到可靠价格时显示未知或部分费用,不伪造 0,也不会借用另一个 Provider 的价格。
安全与数据边界
AuthInOne 不创建独立数据库。统计(含视觉辅助来源与 Provider 实报 usage)从 DSH session 重建,非敏感覆盖项写入插件自己的 DSH settings namespace,OAuth 与 API 凭据继续归 DSH credentials。图片字节留在 DSH 附件存储,不会复制进插件 settings。插件不扫描用户目录、浏览器存储、Keychain、Codex/OpenCodex 文件、.env 或无关数据库。
授权 URL 与 device user code 是当前登录事务的公开操作指引。Remote DTO 没有 verifier、authorization code、device code、access token、refresh token、原始身份、上游正文或 credential value。自动测试会检查这些字段不会进入 Remote 或日志。仓库截图不包含授权 URL、账号、token、user code 或 API Key。
Provider 响应同时受请求超时和流式字节上限约束。带凭据的连接测试拒绝重定向。alpha.2 安全 diff scan 完整检查 74 个新增或修改项,发现两项中危网络边界问题,并在发布前用 Node 24 复现与定向测试确认修复。
兼容性
| DSH 环境 | Host/用量页 | 模型状态与默认路由 | 添加 Auth 登录 | 用量图标 |
|---|---|---|---|---|
官方 DSH 47f9438,标准添加一次 AuthInOne | 可用 | 可用 | 可用 | 三竖线插件图标 |
| 未知/新版 DSH owner artifact | 安装明确失败 | 不挂载 | 不挂载 | 不挂载 |
| 卸载插件后 | 消失 | 仅原生页面 | 消失 | 消失 |
官方 DSH 47f9438 没有暴露模型页与设置导航所需的三项通用组合 seat。本包因此携带官方 Settings General 与 Models 两个 runtime owner 的精确 47f 衍生版本。Bundle patch 只禁用这两个官方 row,并从同一个 AuthInOne 包挂载兼容 owner;新增内容仅为 settings.models.insights、settings.models.actions 与 keyed settings.section.icon 投影。Auth、Provider、用量与视觉业务仍由独立的 AuthInOne registration 持有。
Host 会在创建插件状态前核对官方 owner 的版本和 client SHA-256,Client 也会拒绝已经存在的 seam。Owner 变化或 DSH 已有原生 seam 时会明确报 AUTH_IN_ONE_COMPAT_UNSUPPORTED_DSH,不会静默覆盖或重复注册。卸载后,Bundle 覆盖层与兼容 row 一起消失,官方 owner 自动恢复。全程不 patch DOM、不使用 --patch、不手改 profile,也不修改 DSH checkout。DeepSeek MIT 声明与精确来源见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
[架构与插件边界不变量](docs/architecture.md)记录了插件自持内容、core 唯一允许的通用 seam、dispose、降级与自动门禁。
本插件没有声称什么
- 它不是 DeepSeek、OpenAI 或任何模型厂商的官方产品,也不代表厂商背书。
- 它没有声称每种兼容登录都稳定或得到厂商背书。七个入口明确标为 Experimental,Qwen 账号 OAuth 已停止且不可用。
- 它不替换 Models 业务、附件管线、session log 或会话模型选择器;仅在精确 DSH
47f9438上用源码衍生 compat owner 替换两个 Settings owner row,从同一 Bundle 保留原生行为并增加通用 seat。 - 当适配器没有提供模态元数据时,它不推断模型支持或不支持视觉。
- 它不把图片理解范围扩展到音频、视频、PDF 或图片生成。
- 它不会伪造缺失 Token、价格、币种换算、工具归属或登录成功。
本地开发
使用 Node ^22.19 或 >=24 与锁定的 pnpm 项目。
pnpm install --frozen-lockfile
pnpm typecheck
pnpm test
DSH_SOURCE_ROOT=/path/to/deepseek-harness pnpm verify:boundaries
pnpm build
pnpm pack --dry-run仓库提交 lib/,因为 GitHub 安装不会运行构建。本包没有 prepare,安装时不需要 lifecycle script 权限。
来源与许可证审计
AuthInOne 业务逻辑、credential representation、settings 字段、测试、README 文案与产品交互文案均为本仓库独立编写。兼容 owner runtime 是官方 DSH 47f9438 Settings General/Models 源码的明确归因 MIT 衍生版本,见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。本机 OpenCodex 源码只用于职责与失败状态对照,详情见 [clean-room 对照](docs/design/opencodex-auth-comparison.md)与 [alpha.2 来源审计](docs/provenance.md)。
以下仓库只用于能力碰撞与公开 seam 研究 usage-report、openai-codex-auth、codex-provider、polyglot、usage-meter、cost-ledger与 dsh-web-ui。没有复制或 vendoring 它们的源码、README、CSS、组件结构、schema 或测试。
运行时依赖为 Zod(MIT)。构建期 Provider transport 依赖为 @earendil-works/pi-ai 0.82.1(MIT),它被打入已提交的 Host artifact,不会进入 DSH profile 的运行时依赖。Cursor 兼容流程使用 @cursor/sdk 1.0.24,遵循 Cursor SDK License 与 Terms of Service;它被打入 Host artifact,并保持 Experimental。开发工具还包括 React、tsdown、Vitest 与 Testing Library(MIT)、TypeScript(Apache-2.0)和 Lightning CSS(MPL-2.0)。本仓库使用 [MIT](LICENSE)。
DeepSeek、OpenAI、Codex 与其他 Provider 名称和商标归各自权利人所有。页面中的名称只说明兼容性,不代表赞助、认证或背书。