dsh-deepseek-web-login

modeltested: passnpmApache-2.0

Adds a deepseek-web provider that uses chat.deepseek.com web models in DSH, with browser login capture, PoW request signing, SSE streaming, and prompting-based tool calls.

下载量 / Downloads
7,414
依赖体积 / node_modules
2.36 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-deepseek-web-login

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

<div align="center">

<img src="docs/assets/banner-dsh-deepseek-web-login.jpg" alt="dsh-deepseek-web-login — 用 chat.deepseek.com 网页版登录态驱动 DSH agent" width="900">

[中文](README.md) · [English](README.en.md)

<!-- badges -->

![License](LICENSE)

![DSH Plugin](https://github.com/deepseek-ai/deepseek-harness)

![Provider](#模型档位)

![Tests](#测试与验证)

![CI](https://github.com/cv-superding/dsh-deepseek-web-login/actions/workflows/ci.yml)

![Release](https://github.com/cv-superding/dsh-deepseek-web-login/releases)

![Status](#免责声明)

![PRs](#贡献)

![Node](#开发)

把 chat.deepseek.com 网页版接进 DSH:用浏览器登录态(不是 API Key)驱动 agent 的工具调用、思考流与图片理解。

</div>


这是什么

DSH(DeepSeek Harness)通过 ctx.llm 的 provider 适配器接入模型。本项目实现了 deepseek-web

这个 provider —— 它不调用官方 API,而是复用你已登录的网页版:PoW 挑战、会话、SSE 流式、

文件上传,全部走网页端私有接口。

于是:在模型选择器里选 DeepSeek 网页 · 快速模式,就能用网页版免费额度跑 DSH 的 agent。

DSH agent loop ──▶ ctx.llm ──▶ [deepseek-web 适配器] ──▶ chat.deepseek.com
                                     │  ├─ PoW(SHA3 WASM,**在浏览器页面里**求解)
                                     │  ├─ chat_session(**按 DSH 会话复用,跨重启续上**)
                                     │  ├─ chat/completion(SSE patch 流,链式只发增量)
                                     │  └─ file/upload_file(图片输入)
                                     └─ 提示词工具协议 ⇄ tool-call 块
⚠️ 0.7.0 起:必须能启动 Edge / Chrome。
PoW 挑战改为在真实页面上下文里求解(原因见下方「为什么这样更不容易被限流」)。
找不到浏览器时会明确报错,不会退回 Node 侧求解 —— 这是刻意的:
Node 侧解 PoW 是被公开列为的封号触发条件,退回去等于这个改动没做。
已经用 DSH_NO_BROWSER_TRANSPORT=1 显式关掉浏览器传输的环境需要撤销该设置。

<img src="docs/assets/architecture.svg" alt="架构与数据流" width="1000">

它是怎么工作的(以及为什么不是「反代」)

被问得最多的两个问题:你们是操作 DOM,还是截获页面的请求?是不是个反代?

答案都是不是 —— 它自己构造请求、直接发给网页端私有接口。准确的说法是

「网页端私有接口的非官方客户端」。逐步拆开:

阶段 · 做什么 · 用什么

① 登录捕获(只做一次) · 开一个独立 profile 的浏览器窗口让你登录,把页面自己发出的请求头读一份存下来:Authorization: Bearer、域 cookie、反爬头 x-hif-dliq / x-hif-leim、一批 x-client-* · Electron 的 webRequest.onBeforeSendHeaders

② 请求构造(每次调用) · 自己拼 POST /api/v0/chat/completion;PoW 自己解:先要 create_pow_challenge,再用 SHA3 WASM 算出答案塞进 x-ds-pow-response · 插件自己的 HTTP 客户端

③ 发送 · 默认交给系统 Edge / Chrome 的网络栈发出(CDP 驱动真实页面),TLS / HTTP2 指纹与真实浏览器一致;也可切回 Node · 见下方「传输层」

④ 解析与对接 · 自己解 response/fragments 的 SSE 帧、分思考与正文通道;工具调用走提示词协议(网页端没有原生 function calling;主形态是行首 DO:{...}) · 自研解析器

唯一沾到"截获"的只有第 ① 步,而且那一步是「读一份 + 清掉自己的痕迹」:同一个回调顺手把请求头里的

Electron 品牌(UA 与 UA-CH)删掉,否则网页端会判「使用环境异常」。它不改写业务请求、也不转发任何东西,

而且只在登录那一次生效 —— 登录完之后页面关掉,插件照样跑。

为什么不是「反代」

反代(反向代理)的关键是中间人:客户端以为自己在跟原服务器说话,实际请求被转发了一层。

这里没有中间人 —— 插件自己就是那个客户端,以网页端的身份直连 DeepSeek。

中间没有转发层,也不需要额外跑一个本地服务。

和另外两条常见路线的区别

· DOM 自动化(如 cuckoo-code) · 请求 hook(浏览器扩展,如 deepseek-pp) · 本插件

请求由谁发出 · 页面 · 页面 · 插件自己

登录态来源 · 人在窗口里手动登 · 你日常浏览器里的登录态 · 开窗捕获一次、存在本机

网页改版会怎样 · 选择器一改就坏 · 只依赖接口路径 · 只依赖接口,完全不碰 DOM

浏览器要一直开着吗 · 是 · 是 · 否

前两条路线的共同点是「请求是浏览器发的」,只有本插件是发送方。代价是接口变了要跟着改;

换来的是不依赖 DOM、可以后台无人值守地跑。

为什么这样更不容易被限流

网页端会拦自动化调用,而且公开的同类项目文档里已经列出了触发条件。0.7.0 按其中最可识别的那几条

做了调整:

原本的做法 · 问题 · 现在

在 Node 里 WebAssembly.instantiate 求PoW 挑战 · 被明确列为「自动解挑战」的封号触发条件 · 在真实页面里用官方自己的 wasm 求

每次调用临时建会话、用完即删 · 真人不会这样建删对话(实测曾一天建 182 个会话) · 按 DSH 会话复用,跨重启续上(resume-state.json)

每轮全量重发 · 请求体量与节奏都不像真人 · 链式投喂:只发增量,parent_message_id 挂在上一条回答下面

固定请求间隔 · 真人打字不是等距的 · 见设置页的请求间隔(可配随机区间)

代价(也是 0.7.0 的破坏性变更):必须有可用的 Edge / Chrome。

找不到浏览器时会明确报错—— 不会静默退回 Node 侧解PoW,因为那样等于这个改动没做,

只是给了「已经改好了」的错觉。

⚠️ 需要说清的边界:这些调整降低被识别为自动化的概率,不构成"不会被封"的保证。

逆向网页端本身违反服务条款,风险是"判罚多严"而不是"会不会被抓到"。

稳定性优先请用官方 API,或用已有的付费订阅走 OAuth。

界面预览

设置页按用途分成 7 个标签(一次只显示一页)—— 账号(登录状态 / 当前账号 / 账号库 / 手动 Token)·

模型(可用模型 / 连通性测试)· Token 统计(用量与台账扫读)·

防风控(请求节流 / 会话清理及其三个区间 / 调用台账)·

传输层(指纹 + 一键测试)· 上下文(每轮全量 / 链式投喂)· 关于(版本与更新 / 数据位置 / 风险说明)。

操作反馈条常驻在标签栏之上,切到哪一页都看得见。

设置页(真实截图,拍于拆页之前):当前账号 / 登录状态(适配器注册、凭证来源、PoW WASM、服务端校验)/ 三种登录方式(Microsoft Edge · 我的默认浏览器 · 从已登录窗口恢复)/ 手动粘贴 token。

<img src="docs/assets/screenshot-settings.png" alt="DSH 设置面板 · DeepSeek 网页登录(真实截图)" width="820">

DSH「使用统计」里看到的调用量 —— 免费网页通道,当日 1042.8 万 tokens / 164 次调用:

<img src="docs/assets/screenshot-usage-stats.png" alt="DSH 使用统计 · deepseek-web 免费通道调用量" width="820">

设置页示意图(标注各区块用途):登录状态 / 当前账号(退出当前账号 · 退出并登录其它账号) / 浏览器窗口登录 / 从已登录窗口恢复 / 手动 token / 连通性测试 / 模型列表。

<img src="docs/assets/panel-preview.svg" alt="DSH 设置面板 · DeepSeek 网页登录" width="820">

核心能力

能力 · 说明

🔐 网页登录(无 API Key) · Electron 独立分区窗口里正常登录,插件旁路捕获真实 Authorization、cookie、x-hif-* 指纹头与客户端版本头

🧩 PoW 求解 · create_pow_challenge + DeepSeek 自家 sha3_wasm_bg.*.wasm 的 wasm_solve,在浏览器页面上下文里执行(0.7.0 起,见下方「为什么这样更不容易被限流」);WASM 地址自动发现(哈希随部署变化),失败自动回退

🌊 流式 · 同时兼容 response/fragments(THINK/RESPONSE 片段)与直连 thinking_content/content 两套 SSE 格式,含 {o:"APPEND"} 与裸 {v} 续段;按逻辑流去重,快照重放不重复吐字

🛠 工具调用 · 网页端没有原生 function calling → 提示词 JSON 协议 + 流式过滤器(跨包标记、围栏、多调用、假阳性回退)→ 合成 tool-call 块并

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::75,最后更新 2026-11-04

Links

GitHub · Homepage · npm

Same category