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

二维码工具 yuehancn/dsh-tool-qrcode

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

先算清版本与纠错再生成二维码,也能读码回文本

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · tool
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 7 处,展示前 7 条)
  • 执行外部命令来自配置/变量
    lib/index.js:820
    child = spawn(command, args, { windowsHide: true, shell: false });
  • 写入本地文件
    lib/index.js:991
    await mkdir(outputDir, { recursive: true });
  • 写入本地文件
    lib/index.js:1206
    await writeFile(destination, svg, "utf8");
  • 读取本地文件
    lib/index.js:1207
    const info = await stat(destination).catch(() => undefined);
  • 读取本地文件
    lib/index.js:1236
    const info = await stat(destination).catch(() => undefined);
  • 读取本地文件
    lib/index.js:1293
    info = await stat(source);
  • 读取本地文件
    lib/index.js:1302
    const head = await readFile(source);
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 生成二维码
  • 读取二维码回文本
  • 计算版本与纠错

README

由 DeepSeek 最新模型翻译生成
dsh-tool-qrcode 在 dsh 里直接把二维码生成出来 —— 先算清楚这串字要多大一个码、什么纠错等级、打印到几厘米才能扫得动,再出图;也能把拿到的二维码图读回文本。 给 DeepSeek Harness 用的自建工具插件:内置一个从零实现的 QR 编码器,不装任何东西就能出 SVG。 Compatibility: built and tested against dsh 0.2.0-rc.2 (preview). The apply(ctx) plugin spec is stable; verify against your own dsh version if newer. 一行安装 dsh plugin --profile desktop add github:yuehancn/dsh-tool-qrcode 支持的 profile:desktop(桌面版)/ web(Web 版)。装完重启 dsh 即可用。 为什么需要它 「帮我生成一个二维码」听起来是一句话的事,但真正会出问题的地方在出图之前: - 这串 URL 到底要塞进版本几的码?版本 1 是 21×21,版本 40 是 177×177 —— 差 70 倍。 - 纠错等级选 L 还是 H?选 H 更抗污损,但同样的字会撑大整整一个版本。 - 印出来多大才能扫得动?
展开完整文档(README 剩余 1 节)
dsh-tool-qrcode

在 dsh 里直接把二维码生成出来 —— 先算清楚这串字要多大一个码、什么纠错等级、打印到几厘米才能扫得动,再出图;也能把拿到的二维码图读回文本。

给 DeepSeek Harness 用的自建工具插件:内置一个从零实现的 QR 编码器,不装任何东西就能出 SVG。

Compatibility: built and tested against dsh 0.2.0-rc.2 (preview).
The apply(ctx) plugin spec is stable; verify against your own dsh version if newer.

一行安装

dsh plugin --profile desktop add github:yuehancn/dsh-tool-qrcode

支持的 profile:desktop(桌面版)/ web(Web 版)。装完重启 dsh 即可用。

为什么需要它

「帮我生成一个二维码」听起来是一句话的事,但真正会出问题的地方在出图之前:

- 这串 URL 到底要塞进版本几的码?版本 1 是 21×21,版本 40 是 177×177 —— 差 70 倍。
- 纠错等级选 L 还是 H?选 H 更抗污损,但同样的字会撑大整整一个版本。
- 印出来多大才能扫得动?21 个模块印成 2 厘米,手机根本对不上焦。

这个插件把「出图」和「算清楚」分开:

qrcode_plan(text="https://...") → byte 模式 / 版本 3 / 纠错 L / 还剩 12 bit 余量
qrcode_make(text="https://...") → 29×29 的 SVG,无外部依赖

关键设计:qrcode_plan 是独立的工具,不是 qrcode_make 的一个参数。
因为「能不能放下」「要不要降级」「印多大」是决策,而生成是执行 ——先看清楚再动手,比生成失败再回头猜要省事得多。

四个工具

qrcode_status

报这里有哪些能力:内置 SVG 编码器永远可用(不依赖任何外部程序);另外告诉你有没有配外部编码器(出 PNG 用)和解码器(读码用)。
长任务前先问一句,避免等到出错才发现没配 qrencode。

qrcode_plan(text, level?)

只算不画。返回:自动判定的编码模式(numeric / alphanumeric / byte / kanji)、放得下的最小版本、纠错等级、容量余量,以及「如果不行该怎么办」的补救建议。

模式是自动挑的,而且这个选择会显著影响体积:纯数字 36 位能塞进版本 1,同样的字节模式只能塞 17 位。所以它会把判定结果明确告诉你。

qrcode_make(text, level?, ...)

出图。默认 SVG,内置编码器,零依赖。

| 参数 | 说明 |
| level | l / m / q / h,默认 l。放不下会自动降级并在 notes 里说明 |
| outputName | 文件名,默认按内容生成 |
| scale | 每个模块几像素,默认 8 |
| quietZone | 静区模块数,默认 4(标准要求,别改小) |
| lightColor / darkColor | 前后景色,默认 #ffffff / #000000 |
| margin | 是否留白 |

要 PNG/JPEG 就得配外部编码器 —— 插件会明确报错并告诉你怎么配,而不是默默给你一个改名的 SVG。

qrcode_read(path, format?)

把二维码图读回文本。需要配解码器(zbarimg、zxing 之类)。

读不到的时候不会只丢一句「失败」—— 它会列出可能的原因:静区被裁掉了、图太小或糊了、颜色反了(浅色码深色底)。因为模型看不到图,这些提示才是它下次能改对的前提。

配置

~/.dsh/profiles/<profile>/cordis.patch.yml
- id: tool-qrcode
config:
outputDir: C:/Users/you/Pictures/qrcode-output
encodeCommand: qrencode # 可选:要出 PNG 才需要
encodeArgs: ["-o", "{output}", "-t", "PNG", "-l", "{level}", "{text}"]
decodeCommand: zbarimg # 可选:要读码才需要
decodeArgs: ["--raw", "-q", "{input}"]

| 字段 | 默认 | 说明 |
| outputDir | qrcode-output | 产物目录 |
| encodeCommand | "" | 外部编码器,空 = 只出 SVG |
| encodeArgs | qrencode 的模板 | 支持 {output} {text} {level} {input} 占位符 |
| decodeCommand | "" | 外部解码器,空 = qrcode_read 不可用 |
| decodeArgs | ["--raw", "-q", "{input}"] | 支持 {input} 占位符 |
| scale | 8 | 默认每模块像素 |
| quietZone | 4 | 默认静区模块数 |
| timeoutMs | 60000 | 单次调用预算 |
| lightColor / darkColor | #ffffff / #000000 | 默认配色 |
| status/plan/make/read | true | 按需关掉某个工具 |

注意编码器不是可执行文件的情况:encodeCommand 支持写成解释器 + 脚本,比如 encodeCommand: node + encodeArgs: ["C:/path/qr.mjs", "encode", "{output}", "{level}", "{text}"]。
qrcode_status 的探测会穿过解释器去问脚本本身的版本,而不是报 Node 的版本号。

安全说明

- 只用 spawn(command, argsArray) 调用 —— 不拼 shell 字符串,路径里有空格、引号、中文都不会出事。
- 内置编码器不出网、不写盘以外的地方,SVG 就是一个纯文本文件。
- 覆盖已存在的产物会被拒绝,除非文件名不冲突。
- 不会主动上传任何内容,也不联网。

实现说明:为什么敢说它是标准实现

QR 码是 ISO/IEC 18004 标准,一个 bit 都不能错 —— 写错的话产出的图「看起来像个二维码」但扫不出来。所以这里没有走捷径,四个最难的坑都踩过:

1. 格式信息里的纠错等级编码顺序反直觉。容量表是按 L/M/Q/H 排的,但格式信息那 2 bit 是 M=00, L=01, H=10, Q=11 —— 不是同一个顺序。
一开始按容量表的顺序写,8 个符号全部扫不出来。

2. 定位图形必须在定时图形之前画。定位校正图形的跳过判断会看它自己的中心格,而定时图形正好穿过那些中心,先画定时就会把定位中心标记成「已占用」,定位图形被静默跳过。

3. 版本 ≥ 7 要写版本信息块,且两个副本的坐标方向是转置关系。
只保留位置不填内容的话,小版本一切正常、大版本全错。

4. 掩码要按 4 条罚分规则选,选错的话图能看但扫不稳。

验证方式:_test/verify-qr.py 用两条独立路径校验 —— OpenCV 的 QRCodeDetector 解码,以及用 Python qrcode 库强制成同一个掩码后逐模块 diff。掩码无关的对比是错的:两个都正确的编码器可能合法地选到不同掩码。

当前结果:8/8 符号与参考实现逐模块完全一致,8/8 被 OpenCV 成功解码 (覆盖版本 1、2、3、5、10、17,含中文多字节 payload)。

跑测试

mkdir -p node_modules/@deepseek-ai
cp -r "$HOME/.dsh/profiles/desktop/node_modules/@deepseek-ai/." node_modules/@deepseek-ai/
node _test/run-all.mjs

三个套件,268 条断言全绿(对着真实 @deepseek-ai/dsh-tools 跑,不 mock):

| 套件 | 断言 | 内容 |
| test-logic.mjs | 70 | 编码模式判定、容量边界(36 位数字刚好塞满版本 1,37 位溢出)、纠错等级选择、Reed-Solomon、位流组装、打印尺寸、Config 默认值与覆盖 |
| test-integration.mjs | 53 | 引擎探测(含解释器 + 脚本形态)、外部编解码往返、静默/失败引擎、解码失败提示、格式嗅探、颜色与缩放渲染 |
| test-e2e.mjs | 145 | 8 个真实 payload 出图 → SVG 结构校验 → 从 path 反推模块网格 → 三个定位图形位置核对 → 跨缩放一致性 → 超长 payload 拒绝 → 等级不可达时降级并说明 |

再跑一次独立校验(需要 Python + qrcode + opencv-python):

python _test/verify-qr.py _test/samples

test-e2e.mjs 会把样本写到 _test/samples/,正是给这个脚本消费的 ——所以 e2e 是「自己验自己」,而这个脚本是「别人验自己」。

许可

MIT
预览分享卡片长什么样 ↓yuehancn/dsh-tool-qrcode
分享 · DeepSeek Harness Hub
yuehancn/dsh-tool-qrcode

先算清版本与纠错再生成二维码,也能读码回文本

回到顶部