在输入框旁加一个按钮,并提供全局快捷键(默认 mod+shift+k)浮层,把一次性的小问题交给网页版对话而不是送进 harness 上下文:草稿会从输入框取出、复制到剪贴板并打开模板 URL。内置目标站点预设(DeepSeek、Kimi、Qwen、豆包、腾讯元宝、GLM、Gemini),带本地问题历史(可重新打开、复制或回填到输入框),以及设置页(站点、URL 模板、快捷键、剪贴板、历史)。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-webask
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:DanZai233/dsh-webask
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
把「一句话就能问完」的问题甩给 DeepSeek 网页版 —— 不占上下文,不花 token。 输入框按钮 · 全局快捷键浮层 · 本地历史
DeepSeek Harness 每一轮都会重发整段对话。所以一个 20 token 的小问题 —— 那种你早就知道很短的问题 —— 真实成本并不是 20 token,而是它所搭乘的整个上下文窗口。
WebAsk 把这类问题送去免费的网页版,并且从一开始就不让它进入对话。
你得到什么
输入框旁的按钮
你已经在 DSH 输入框里打好了问题。与其发送它,不如点一下 WebAsk 按钮:这段文字会被从草稿里抽走(通过官方 input actions 清空,因此它绝不会到达模型),同时复制到剪贴板,并在新标签页中打开。
按钮只在「确实有草稿可抽」且输入框处于普通可发送状态时才可用,所以它不可能在提交流程中途误触发。
全局快捷键浮层
任意位置按 mod+shift+k 呼出居中输入框。打字,回车,完事。Shift+Enter 换行,Esc 关闭。
浮层下方是你的本地历史。每一条都可以:
- 重新打开(回到网页版继续问)
- 再次复制
- 回填到输入框 —— 闭环所在:当某个问题的答案值得在真正的会话里追问时
设置页
设置 → 插件 → WebAsk:目标站点、URL 模板、全局快捷键、是否复制到剪贴板、是否记录历史、历史上限。
关于 ?q= 的一句实话
https://chat.deepseek.com/?q=… 是社区约定,不是官网功能。chat.deepseek.com 自己并不读这个参数 —— 社区专门写了油猴脚本去「补」这个能力。假装它原生支持,只会让这个插件对没有装脚本的人静默失效。
所以 WebAsk 每次都同时做两件事:
- 总是把问题复制到剪贴板;
- 打开模板 URL。
如果你装了那类脚本,全流程自动完成;没装的话,在刚打开的标签页里按一次 ⌘V 即可。无论哪种情况,这个问题都花 0 token —— 而这正是它的全部意义。
安装
dsh plugin --profile web add dsh-webask
然后重启该 profile。安装插件会改变包图,而包清单与客户端模块元数据在进程生命周期内是有缓存的 —— 重启才会重新读取。
想先确认一下再重启也行:
dsh --profile web --dump-config | grep -A2 webask
支持的站点
以下预设都遵循同一套 ?q= 约定:
| 站点 | 模板 |
|---|---|
| DeepSeek | https://chat.deepseek.com/?q={q} |
| Kimi | https://www.kimi.com/?q={q} |
| Qwen | https://chat.qwen.ai/?q={q} |
| 豆包 | https://www.doubao.com/?q={q} |
| 腾讯元宝 | https://yuanbao.tencent.com/?q={q} |
| 智谱 GLM | https://chatglm.cn/?q={q} |
| Gemini | https://gemini.google.com/?q={q} |
模板可编辑,所以 WebAsk 从没听说过的站点也能用。用 {q} 表示问题的位置;如果一个 {q} 都没有,问题会作为 q= 查询参数追加到末尾,并保留 URL 上原有的其他参数。
隐私
除了你主动向网页版提的那个问题之外,没有任何东西离开你的机器;标签页也是你自己打开的。历史与设置只存在于本浏览器的 localStorage,不会上传。WebAsk 不向模型发送任何内容,它的 host 半只是一个空的挂载行 —— 没有 service、没有 tool、没有路由。
实现说明
WebAsk 是一个纯展示层的客户端插件。它占用三个有文档的槽位,并且只通过公开的 action face 访问输入框 —— 从不靠改 DOM 去读写你的草稿。
| 槽位 | 界面 | 用到的接口 |
|---|---|---|
conversation.input.right |
输入框按钮 | useInput 读草稿与 phase,inputActions.setDraft 抽走草稿 |
shell.overlay |
浮层 + Toast | useSessions(s => s.current) 取当前会话,配合按钮发布的桥接做回填 |
settings.plugins.tab |
配置页 | useResource / useWorkspaces 标准套件 |
给读源码的人的几点:
- 没有构建链。
build.mjs约 40 行、零依赖:把样式内联成字符串,再把src/client.js包进浏览器模块加载器要求的 CJS closure-factory。没有打包器、没有 TypeScript、没有 CSS 管线。 - 客户端工厂里
require("react")是可解析的,所以 UI 直接用React.createElement写,不需要 JSX 转换。 - 文案通过
ctx.locale注册,并内置中英回退表;即使 locale 服务不可用,界面也不会退化成 key。 - 浮层是 root scope,而草稿是按会话存的。与其按 id 去戳 input hub,不如让输入框按钮把它自己的官方 action face 发布到一个极小的共享 store —— 这样「有没有地方可以回填」就有了诚实的答案,没有时回填按钮直接禁用。
开发
npm run build # src/ -> lib/client.js
npm run verify # 37 项离线检查:槽位接线、点击路径、持久化
verify 会把构建产物放进 VM、配上假浏览器与极简 React stub 跑起来,并驱动真实的点击路径。槽位名写错或属性读错,会在这里就失败,而不是在界面上变成一个「点了没反应」的按钮。
许可
MIT © DanZai233
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8405
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8405
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 4088
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4076
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 4009
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1423
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。