dsh-web-ask
在 DSH 里划选一段话,用你自己的 DeepSeek 网页版账号回答,结果显示在右侧栏。
一条提问发出去的内容是三部分:
| 部分 | 作用 |
|---|---|
| 划选的原文 | 告诉模型问什么 |
当前会话的完整记录(.md 附件) |
告诉模型为什么问 |
| 被引用消息里的图片 | 告诉模型长什么样 |
打开面板就是账号的网页会话列表——不是本机的 localStorage 记录。列表来自
GET /api/v0/chat_session/fetch_page,点任意一条可以整段预览,也能接着聊。
回复按 Markdown 渲染,用的是 DSH 自己的渲染器
(@deepseek-ai/dsh-client-ui-primitives 的 MarkdownText),所以代码块、表格、
脚注、复制按钮的行为与 DSH 其他位置一致。深度思考默认折叠,点标题展开;推理过程
是当前唯一内容时会自动展开,不会出现空白。
为什么需要 Host 半边
浏览器不能直接调 chat.deepseek.com:实测该站点对第三方 origin 不返回
access-control-allow-origin,预检请求直接 429。所以页面里 fetch 连响应都读不到。
因此本插件分两层:
浏览器(划选 / 面板) ──/web-ask/api──▶ Host(本机 node) ──▶ chat.deepseek.com
token 只存在于 Host 侧,永远不回传浏览器。
安装
需要 DSH >= 0.2.1-rc.2 与 Node >= 20。
dsh plugin --profile desktop add D:\\path\\to\\dsh-web-ask
发布到 npm 之后也可以按名字装:dsh plugin --profile desktop add dsh-web-ask。
**桌面版必须先完全退出应用(含托盘)**再执行上一条命令。装好后重启。只刷新页面不会加载 Host 半边。
配置 token
插件出厂没有任何凭据,第一次用它必须自己粘贴一次。
开发者工具 → Console → 执行:
JSON.parse(localStorage.getItem('userToken')).value复制输出的字符串(是长串,不是 JSON)
在 DSH 右侧栏打开「网页版提问」,粘贴进输入框,点「保存」
面板顶部始终有「填写 token / 更换 token」按钮,存过也能再点开;下面还有 「清除已保存的 token」。token 会在账号在别处登出后失效,那时面板会提示, 换一枚即可。
保存前插件会先拿它验证一次;验证不过不会落盘。token 存在
$DSH_HOME/.credentials.yaml 的 WEB_ASK_TOKEN 下(明文,和 DSH 其他凭据一样)。
复用已有凭据
如果你已经给别的插件配过同一枚 token(例如 @xueray/dsh-web-bridge 的
DEEPSEEK_WEB_TOKEN),在插件设置里改成:
tokenSource: dsh-credential
credentialRef: DEEPSEEK_WEB_TOKEN
插件就会直接读那一枚,不必重填。
使用
- 在对话里划选助手或你自己说过的一段话
- 选区上方出现「提问」
- 点它 —— 右侧栏打开面板,引用已经在里面
- 输入问题,发送
面板里可以继续追问:追问沿用同一条网页会话,不重新上传上下文。
上下文里放什么
每次提问都会把当前 DSH 会话导出成 .md 附件发过去。文件里只有你的提问和模型的回答正文——
不含系统提示词、工具列表、工具描述、技能目录。
面板上有一个开关:上下文包含工具调用(默认关)。
| 开关 | 附件内容 |
|---|---|
| 关(默认) | 只含正文。助手某一轮只在调工具、没写字的,记一句「本轮没有文字回复,只执行了操作」 |
| 开 | 额外附上每次工具调用的名字、入参和返回(单条入参截到 800 字、返回截到 1200 字,总量 40K 字封顶) |
无论开关如何,附件总是会发;预算默认 100K tokens,超出按「引用那一轮优先、邻近次之、 最近 10 轮再次之」裁剪,裁剪会在文件里写明省略了多少轮。超过单文件 20 MiB 会直接报错。
隐私
每次提问都会把当前 DSH 会话的完整记录导出成 .md 附件,发给 chat.deepseek.com。
首次使用会要求确认一次,之后面板底部一直显示这条状态。不想发就别用这个插件 —— 它存在的意义就是把这个上下文交给网页版模型。
已知限制
- 非官方客户端。用的是
chat.deepseek.com的私有接口,DeepSeek 改协议这个插件就会坏。 - 网页版没有工具调用,所以本插件不注册 LLM provider,它不会出现在模型选择器里。
- 一次划选 = 一条新的网页会话;想在已有网页会话里续聊,用面板内的追问。
- 附件合计上限 10 个(网页版服务端硬限),其中上下文占 1 个,所以图片最多 9 张。
- 单文件上限 20 MiB。
与其它插件共存
本插件用到的名字都与 @xueray/dsh-web-bridge、dsh-sidebar-qa 不同,三者可以同时装:
| 本插件 | |
|---|---|
| cordis entry id | web-ask |
| 侧栏 tab kind | web-ask |
| 侧栏 tab id | dsh-web-ask:panel |
| 路由前缀 | /web-ask/api |
| 浮层属性 | data-dsh-web-ask |
| 凭据引用 | WEB_ASK_TOKEN |
| localStorage | dsh-web-ask:* |
结构
lib/pow.js 工作量证明(Keccak-f[1600] 变体,跳过第 0 轮) lib/transport.js chat.deepseek.com 的 HTTP 客户端 lib/completion-stream.js SSE 状态树解析(SET / APPEND / BATCH) lib/context-export.js 会话 → Markdown 附件 lib/http.js 请求围栏、信封、ndjson lib/index.js Host 入口与路由 lib/client.js 浏览器半边(手写成宿主认的模块形态)
本仓库只发布插件本体。测试与测试用的会话切片留在作者本机,不在仓库里。
`lib/client.js` 必须手写:本机没有可用的打包器,且宿主要求
`window.__ModuleLoader__.load({id, factory})` 形态,`id` 必须等于包名,`factory` 是惰性 CJS。
它只能 `require` 平台 seed(`react`、`react-dom/client` 等),不能 `require` 同包的文件。
## 许可
MIT。见 [LICENSE](LICENSE) 与 [NOTICE](NOTICE)。
No comments yet. Be the first to write one.