🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

截图提问 KamiYA7/dsh-shot-ask

DeepSeek Harness
KamiYA732 天前有提交已提供中文文档扫描:含敏感能力

按热键框选屏幕,就地提问并连图送入会话

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add KamiYA7/dsh-shot-ask
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · vision
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/11/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 17 条)
  • 执行外部命令固定命令
    dsh-shot-ask/lib/index.js:61
    const child = spawn('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', '-'], { windowsHide: true })
  • 发起网络请求
    dsh-shot-ask/lib/index.js:122
    const response = await fetch(config.healthUrl, { signal: AbortSignal.timeout(5000) })
  • 读取本地文件
    dsh-shot-ball/main.js:79
    return JSON.parse(fs.readFileSync(prefsFile(), 'utf8'))
  • 写入本地文件
    dsh-shot-ball/main.js:88
    fs.mkdirSync(path.dirname(prefsFile()), { recursive: true })
  • 写入本地文件
    dsh-shot-ball/main.js:89
    fs.writeFileSync(prefsFile(), JSON.stringify(next, null, 2))
  • 执行外部命令来自配置/变量
    dsh-shot-ball/main.js:193
    const child = spawn(exe, args, { windowsHide: true })
  • 读取本地文件
    dsh-shot-ball/main.js:211
    if (fs.existsSync(candidate)) return candidate
  • 读取本地文件
    dsh-shot-ball/main.js:222
    const compiled = fs.existsSync(CAPTURE_EXE)
  • 读取本地文件
    dsh-shot-ball/main.js:223
    const stale = compiled && fs.existsSync(CAPTURE_CS)
  • 读取本地文件
    dsh-shot-ball/main.js:224
    && fs.statSync(CAPTURE_CS).mtimeMs > fs.statSync(CAPTURE_EXE).mtimeMs
  • 读取本地文件
    dsh-shot-ball/main.js:226
    if (!fs.existsSync(CAPTURE_CS)) return compiled
  • 写入本地文件
    dsh-shot-ball/main.js:324
    fs.mkdirSync(CAPTURE_DIR, { recursive: true })
  • 写入本地文件
    dsh-shot-ball/main.js:397
    fs.writeFileSync(file, png)
  • 写入本地文件
    dsh-shot-ball/main.js:414
    fs.writeFileSync(file, bytes)
  • 写入本地文件
    dsh-shot-ball/main.js:577
    try { fs.appendFileSync(LOG_FILE, line) } catch { }
  • 发起网络请求
    dsh-shot-ball/main.js:630
    const response = await fetch(url, {
  • 执行外部命令来自配置/变量
    dsh-shot-bridge/lib/index.js:104
    const child = spawn(BALL_CMD, [], {
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 全局热键抓屏
  • 框选区域提问
  • 图文送入会话

README

由 DeepSeek 最新模型翻译生成
dsh-shot-ask · 抓屏即提问 给 DSH / DeepSeek Harness 的截图提问套件。 在任何应用里按一个热键(或在 DSH 页面里点一下悬浮球)→ 框选屏幕任意区域 → 就地写下问题 → 图片和问题一起进当前会话。 不用存文件、不用切窗口、不用复制粘贴。 English · 安装 · 用法 · 架构 · 排查 它解决什么问题 看到一段报错、一张图表、一个界面不对——想直接问模型,但标准流程是: 截图 → 存文件 → 切到 DSH → 找输入框 → 拖图进去 → 打字 → 回车 七步。这个套件把它压成两步: 按热键 → 框选 + 打字(在同一个浮层里完成) 而且抓屏免选屏授权:不弹系统选择器、不需要录屏权限,框完就把那一小块送进会话。 两条入口,覆盖两种姿势 | 姿势 | 入口 | 适合 | | 你正在别的应用里(浏览器、IDE、播放器…) | 全局热键 Ctrl+Alt+S | 桌面上那个常驻小球。抓到的是你按热键那一刻的屏幕 | | 你就在 DSH 窗口里 | 页面悬浮球 | 可拖动、位置记在 localStorage、角上有 × 可关 | 两条入口最终走同一条流水线,行为一致。 三个组成部分 | 包 | 形态 | 它做什么 | | dsh-shot-ball | 独立 Electron 程序 | 常驻桌面、置顶。
展开完整文档(README 剩余 1 节)
dsh-shot-ask · 抓屏即提问

给 DSH / DeepSeek Harness 的截图提问套件。
在任何应用里按一个热键(或在 DSH 页面里点一下悬浮球)→ 框选屏幕任意区域 → 就地写下问题 → 图片和问题一起进当前会话。
不用存文件、不用切窗口、不用复制粘贴。

English · 安装 · 用法 · 架构 · 排查

它解决什么问题

看到一段报错、一张图表、一个界面不对——想直接问模型,但标准流程是:

截图 → 存文件 → 切到 DSH → 找输入框 → 拖图进去 → 打字 → 回车

七步。这个套件把它压成两步:

按热键 → 框选 + 打字(在同一个浮层里完成)

而且抓屏免选屏授权:不弹系统选择器、不需要录屏权限,框完就把那一小块送进会话。

两条入口,覆盖两种姿势

| 姿势 | 入口 | 适合 |
| 你正在别的应用里(浏览器、IDE、播放器…) | 全局热键 Ctrl+Alt+S | 桌面上那个常驻小球。抓到的是你按热键那一刻的屏幕 |
| 你就在 DSH 窗口里 | 页面悬浮球 | 可拖动、位置记在 localStorage、角上有 × 可关 |

两条入口最终走同一条流水线,行为一致。

三个组成部分

| 包 | 形态 | 它做什么 |
| dsh-shot-ball | 独立 Electron 程序 | 常驻桌面、置顶。承载全局热键、框选遮罩、提问框;把「图片 + 问题」POST 给桥接 |
| dsh-shot-bridge | DSH 宿主插件 | 回环 HTTP 路由 /dsh-shot-bridge/{submit,health}(token 鉴权);经官方 admitPromptContent 把图提升为持久附件并注入会话;并在 DSH 启动时把球拉起来 |
| dsh-shot-ask | DSH 客户端插件 + 宿主路由 | 页面悬浮球 + 设置行;宿主侧原生抓屏路由 /dsh-shot-ask/capture.png |

为什么不是一个大包? 因为三者的宿主不同:球运行在你的桌面上(Electron),桥接运行在 DSH 进程里(Cordis 插件),悬浮球运行在 DSH 页面里(浏览器)。三边各有自己的生命周期与权限,混在一起反而装不上。

架构:为什么是三个包

① 热键必须由一个置顶窗口承载

热键是在别的应用里按下的,那一刻 DSH 窗口在后台。框选遮罩如果画在 DSH 页面里,你根本看不见它。所以「热键 + 遮罩」只能落在常驻置顶的独立程序上——也就是那个 Electron 小球。

② 图必须经宿主的 admitPromptContent 进会话

桌面程序在 DSH 外面。把图片投进会话的三条"看起来可行"的路全是断的:HTTP 接口只认浏览器签名 cookie、草稿附件 id 是 browser-owned、宿主转发事件白名单硬编码。唯一被支持的入口是从宿主内部提交——所以必须有一个跑在 DSH 进程里的宿主插件(dsh-shot-bridge)来接收并 admitPromptContent。

图片以 base64 走回环 HTTP,不经过任何中间文件;落盘只是顺带存档。

③ 桌面壳关死了 getDisplayMedia

DSH Desktop 在会话初始化时这样写:

setPermissionRequestHandler((_c, _p, cb) => cb(false)) // 所有权限一律拒绝
setPermissionCheckHandler(() => false)
setDevicePermissionHandler(() => false)
setDisplayMediaRequestHandler((_req, cb) => cb({})) // 空授权 = 不给任何源

所以桌面窗口里的 getDisplayMedia() 永远拿不到画面。页面悬浮球因此改为请求宿主路由 /dsh-shot-ask/capture.png——由宿主用 PowerShell CopyFromScreen 原生抓取光标所在那块屏(多显示器也对),免授权、免选屏。纯浏览器里没有这条路由,会自动退回 getDisplayMedia 的系统选择器。

安装

前置:Windows + DSH。把三个包放在一个固定目录(以后不要挪)。

① 两个 DSH 插件装进你在用的 profile(web / desktop)
dsh plugin --profile desktop add <路径>\dsh-shot-ask
dsh plugin --profile desktop add <路径>\dsh-shot-bridge

② 桌面球的依赖
cd <路径>\dsh-shot-ball
pnpm install

③ 重启 DSH

desktop profile 由官方 Desktop 应用独占,只有它自带的 CLI 能管理(普通 CLI 会报 profile "desktop" is managed exclusively by the Electron application)。用 web 版就把 --profile desktop 换成 --profile web。

.npmrc 不入库(它按机器写死了 pnpm 的 store-dir)。需要时在 dsh-shot-ball/ 里自行建一个,常见两条:

node-linker=hoisted
confirmModulesPurge=false

装好之后 DSH 启动时会自动拉起桌面球,不需要开机自启项。不想自动拉起就设 DSH_SHOT_BALL_AUTOSTART=0。

用法

全局热键(推荐)

1. 在任意应用里按 Ctrl+Alt+S;
2. 所有屏幕出现半透明遮罩,拖动鼠标框选(Esc / 右键取消);
3. 松开 → 弹出提问框(左边缩略图,下面输入框);
4. 输入问题,Enter 提交(Shift+Enter 换行;留空就只发图片);
5. 图片 + 问题出现在 DSH 会话里,模型开始回答。

页面悬浮球

在 DSH 窗口里点右下角的球,之后流程完全一样。球可拖动、位置记住、角上 × 关闭;设置行在 设置 → 通用 → 「悬浮截图提问」(可复制截图目录、可一键桥接自检)。

配置

| 名称 | 作用 |
| DSH_HOME | 决定球提交回哪个 DSH 实例。网页版与桌面版各写一份 dsh-shot-bridge.json(端口 + token 都不同),球按这个变量找坐标 |
| DSH_SHOT_BALL_AUTOSTART=0 | 不让 DSH 拉起球 |
| DSH_SHOT_BALL_DIR | 球所在目录(默认 G:\ZM\DSH\zmdsh\dsh-shot-ball) |
| DSH_SHOT_BALL_CAPTURES | 截图归档目录(默认 图片\dsh-shot-ball) |
| dsh-shot-ball/.userdata/preferences.json | {"captureHotkey":"Control+Shift+Q"} 改键;{"captureHotkeyEnabled":false} 关掉热键 |

故障排查

| 症状 | 原因与处理 |
| 页面悬浮球点了没画面 | 桌面壳禁用了 getDisplayMedia;确认宿主路由在位(GET /dsh-shot-ask/capture.png 返回 image/png) |
| 图进了另一个 DSH 实例 | 球的 DSH_HOME 指错了(网页版 3080 / 桌面版 19387,坐标文件各一份) |
| 热键没反应 | 球没在跑,或组合键被别的应用占用——球的日志里会写 capture hotkey NOT registered: another application owns … |
| 提交返回 401 | token 失效。token 每次 DSH 启动重新生成,球在每次提交前重读坐标文件;重启 DSH 即可 |
| 图片被拒收 | 当前路由的模型必须声明 image 模态 |
| 发送没自动按下 | 发送按钮靠 aria-label 定位,DSH 改版可能改文案;此时图片已安全躺在输入框里,手动回车即可 |

日志位置:dsh-shot-ball/.cache/dsh-shot-ball.log。

已知边界

- 热键宿主是球:球不在跑,热键就不存在(DSH 启动会自动拉起它;DSH_SHOT_BALL_AUTOSTART=0 可关掉自启)。
- 球的生死跟着 DSH:球由 DSH 启动、留在它的进程树里,所以 DSH 退出时球一起结束。点了球上的 × 只是隐藏窗口——进程和热键都还在,下次启动 DSH 时球会重新出现。
- 默认目标是「你最后发过消息的那个会话」:桥接只把 user/* 事件记进排序表,所以后台还在跑的会话(子代理、任务看板、定时任务)不会抢走截图;如果没有任何会话出现过用户消息,退回按「最新活跃事件」排序。想固定目标可在提交里带 session 参数,或用 DSH_SHOT_TARGET_SESSION 钉住。
- 多个提问框可以同时开着:每个提问框独立登记,提交/取消只作用于你操作的那一个。
- 选区坐标按比例换算:naturalWidth / innerWidth,多显示器缩放下按被抓那块屏等比映射。
- 纯浏览器路径仍需选屏:getDisplayMedia 必须由系统选择器授权;桌面壳下走原生抓屏,无此限制。

许可

MIT © 2026 KamiYA7

A screenshot-to-question kit for DSH / DeepSeek Harness.
Press a global hotkey (Ctrl+Alt+S) in any application, drag a rectangle over anything on screen, type your question in the same overlay, and the cropped image plus your question land in the current DSH session — no files on disk, no window switching, no screen-picker permission prompt.

Three packages, because each half runs in a different host:

- dsh-shot-ball — a resident, always-on-top Electron program. It owns the global hotkey, the selection overlay and the question box, and POSTs the capture to the bridge.
- dsh-shot-bridge — a DSH host plugin. It exposes a token-guarded loopback route, promotes the image through the official admitPromptContent path (the only supported way into a session from outside the browser), and starts the ball together with DSH.
- dsh-shot-ask —— DSH 客户端插件加宿主路由。页面内的悬浮球,外加一条原生截图路由(/dsh-shot-ask/capture.png),因为 Desktop 外壳对 getDisplayMedia 返回空授权,并且拒绝所有权限请求。

dsh plugin --profile <web|desktop> add <path>\dsh-shot-ask
dsh plugin --profile <web|desktop> add <path>\dsh-shot-bridge
cd <path>\dsh-shot-ball; pnpm install
restart DSH — the ball starts with it

需要 Windows。基于 MIT 协议开源。
预览分享卡片长什么样 ↓KamiYA7/dsh-shot-ask
分享 · DeepSeek Harness Hub
KamiYA7/dsh-shot-ask

按热键框选屏幕,就地提问并连图送入会话

这是你的仓库?认领条目

回到顶部