Skip to content

Releases

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 12:37

主题:把 49 项配置从「一股脑平铺」改成「按类别渐进披露」(用户反馈:把所有东西都堆给用户看了)。

1. 设置页重排:8 个可折叠分组,默认只展开「常用」

分组 项数 默认
常用(模型 / API 地址 / 密钥 / OCR 引擎 / 切块边长 / 输出目录) 6 展开
接口与端点(含 5 项「高级」) 10 收起
识别策略 3 收起
切块与输出 9 收起
性能与缓存(含 2 项「高级」) 10 收起
GPU 加速(含 2 项「高级」) 4 收起
设备适配(含 2 项「高级」) 4 收起
调试与自检 3 收起
  • 分组只是展示维度,不影响配置读写:字段键、数量(仍是 49 项)、保存语义全部未变。
  • 「高级」= 需要看文档才敢改的项(image_detail / thinking_mode / max_tokens_field /
    extra_headers / extra_body / 缓存清理参数 / GPU 路径 / 设备基准),在组内另起次级区块,与主字段视觉分层。

2. 新增的界面能力

  • 搜索框:跨分组按关键词过滤(匹配字段名 / 标签 / 提示 / 选项文案),命中组自动展开、整组无命中则不占位置。
  • 组头徽标:已自定义 N 项(绿)/ 未保存 N 项(橙)—— 分组收起时也能一眼看出哪组被动过。
  • 保存按钮显示待保存条数(保存改动(3));字段改回原值会自动撤销「未保存」标记(旧版改回原值仍显示有改动)。
  • 「全部恢复默认」改为两段式点击确认 + 危险色(先上膛、再点一次才执行),防误触清空 49 项。
  • 「全部展开 / 全部收起」一键切换;改动过的字段标签变橙色高亮。

3. 修复

  • 动作栏吸底导致文字重叠:.vet-actions 原用 position: sticky; bottom: 0,而宿主插件页的滚动容器在卡片之外,
    滚动时后续分组会从按钮下方穿过去,加上卡片背景半透明 → 看上去像印刷重影(用户真机截图发现)。
    现改为回到文档流末尾 + 上分隔线收尾。
  • 「视觉 API 地址」的提示文案过长导致换行两行,已精简。

4. 工具链

  • 新增 scripts/client-preview.mjs(npm run preview:client):把 client.js 在 node:vm 里真实执行一遍,
    取渲染树导出成离线预览 HTML —— 改界面不必先同步到生产再刷新页面才能看效果。
    预览容器带滚动模拟(max-height + overflow:auto),用于照出吸底 / 绝对定位类错位。

5. 验证

  • npm test:286/286;冒烟三套(标准 facet / Cordis 入口 / 客户端设置页)全过。
  • 结构断言(scripts/client-settings-smoke.mjs)仍守「界面字段 ≡ 配置字段」双向一致(49 项)。
  • 真机确认:刷新插件页后新界面生效(分组折叠、组头徽标、搜索框均正常)。

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 17:14

主题:从「一次一张图的工具」升级为「可跑的识别流水线」,并解除对单一端点的绑定。

1. 批量/目录级识别流水线(新工具 vision_batch_recognize)

  • 一次处理一个目录:逐图跑与单图工具同一套识别链路(默认 strategy=pipeline),
    产出 report.md(人读汇总 + 失败清单)/ report-full.md(每图全文)/ report.json(机读)三件套。
  • 可续跑:进度写 index.jsonl,重复调用(同一 input_dir + batch_id)只补未完成项、自动重试失败项;
    resume=false 可强制全量重跑。
  • 失败隔离:单图失败只记 failed 并继续,不会让整批报废。
  • 可控耗时不超时:limit(默认 5 张)与 time_budget_ms(默认 4 分钟)到点即收工,返回剩余张数供继续调用。
  • 省钱:批内相同内容的图片只识别一次(报告标注"内容相同,已复用");命中结果缓存的图不再发请求。

2. 多模态端点泛化(不再写死 DeepSeek)

  • 新增端点画像层 src/api-profile.js:路径 / 认证头 / detail / thinking / token 字段名 / 附加头与 body
    全部由画像描述,vision-client 只按画像发请求。
  • 可接任意 OpenAI 兼容端点:本地 vLLM / Ollama / LM Studio(允许无 API key)、以及各厂商兼容端点;
    配置示范见 README「接入其他视觉端点」。
  • 默认只发最小通用集合(model/messages/max_tokens/stream:false),
    thinking/detail/reasoning_effort 等专有字段按画像显式开启(已确证多家端点"发了就 400")。
  • 三类自动回退:404/405 切一次 /v1 前缀(用户显式给路径则不猜);400 提示 max_completion_tokens 时自动换字段重试;
    端点不认识某专有字段时剔除该字段重试。
  • 不把 HTTP 200 当成功:响应解析会识别 base_resp.status_code 类业务错误,并区分空正文的五种成因
    (撞 token 上限 / 只有思维链 / 内容安全拦截 / 结构化内容为空 / 原因未判定)。
  • 新增配置:provider、api_key、api_path、extra_headers、extra_body、image_detail、thinking_mode、max_tokens_field。

3. 性能改造(并发 + 缓存 + 算力预算)

  • 分层聚合组间并发:原先 3 组串行 → 现按算力预算并发(api_concurrency,0=自动),结果保持组序,聚合不受影响。
  • 视觉结果缓存(src/result-cache.js):键 = 图片内容哈希 + 参数指纹(模型 / 端点 / 提示词版本 / 提问…),
    落盘 ~/.vision-exp-tile-result-cache,支持 TTL 与体积上限自动清理。只缓存成功结果(错误与空正文不缓存,避免把错误固化)。
  • 全局 API 闸门:并发额度跨调用共享,防止「批量图级并发 × 图内并发」叠乘把端点打成 429。
  • 算力预算表(src/concurrency.js):按性能档位与逻辑核数给出 API / 图级 / OCR 池并发基线,显式配置优先、带上限保护。
  • 新增配置:api_concurrency、result_cache、result_cache_ttl_hours、result_cache_max_mb。

4. 其它修复与改进

  • 修复静默错数据:批量链路拿不到图片尺寸而传 width:0,会让「相对坐标→像素坐标」全部钳成 0;
    现由 pipeline 自行探测尺寸(probeImageSize),并在 stages 里记录尺寸来源。
  • 修复自动回退的双 URL:404 切 /v1 时曾把完整 URL 当路径二次拼接,现统一为「换 baseURL」。
  • 修复 api_key 泄露面:设置页直填的 key 不再写入 process.env(消费侧直接读配置对象)。
  • 设置页字段由 37 项扩至 49 项(新增 12 项全部可在 Web 设置页编辑)。
  • 工具总数由 3 个增至 4 个;dsh-plugin.json 的 x-tools 声明同步。
  • 代码精简:删 6 处零引用导出(其中 toSettingsBase() 内引用了未导入的符号,一旦调用即 ReferenceError);
    清理 7 处未使用 import / 死变量;4 份过程文档(123KB)合并为 1 份;历史版本、旧回滚备份、历史发布快照
    与项目外的适配目录移出/删除,项目目录由 ~830MB 降到 ~48MB。

5. 验证

  • npm test:286/286;冒烟三套(标准 facet / Cordis 入口 / 客户端设置页)全过。
  • 新增测试:端点画像 15 项、端点接线 8 项、批量编排 10 项、批量端到端 3 项、批量报告 17 项、
    并发与闸门 19 项、结果缓存 15 项、缓存接线 5 项、尺寸探测回归 3 项。
  • 顺带把两处历史漏登记的测试文件纳入 npm test(smart.test.js、pipeline-size.test.js)——
    Node 20 不支持 glob,漏登记 = 从来没跑过。
  • 真机实测(DSH 0.2.0-rc.2,2026-10-02 01:04):
    • 新增的第 4 个工具 vision_batch_recognize 在册可调用(能调用即证明宿主加载的是新代码);
    • 批量端到端:2 张真图全成功(5 秒;报告头显示「并发:图级 2 · API 3」,说明算力预算生效),
      产出 index.jsonl + report.md/report-full.md/report.json + 每图 answer.md/
      precheck.json/result.json/区域 PNG;
    • 续跑:同批次再次调用 → 本次处理 0 张 / 0 秒,历史结果完整保留在重建的报告里;
    • 结果缓存:相同参数强制重跑 → 0 秒(首次 4.8s / 3.6s),缓存目录 16 条;
      换成不同 question 则结果不同 ⇒ 缓存键确实包含提问,不会串答案;
    • 旧工具回归:vision_tile_split(3200×2000 → 3×4=12 块 + overview)正常;
    • 真机还暴露并修复了一个可观测性缺口(pipeline 丢弃缓存命中标记 → 报告恒显示「缓存命中 0 张」,
      且 0 命中时的括号文案误导),已补断言锁住。

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:49

本版汇总 v0.5.0-rc.1 ~ rc.4 的全部内容(各 rc 的详细记录见下方历史段落)。

主题:适配 DSH 0.2.0 · 设置界面回归 · 完全独立运行

  1. 适配 DSH 0.2.0(插件装载):0.2.0 的插件机制为 Cordis bundle——按 dsh.profile.bundles[] 顺序叠加各 bundle 包 dsh.bundle.patch 指向的 patch 文件。本版恢复 dsh.bundle.patch(→ cordis.patch.yml)并把 main/exports["."] 指回 src/index.js(导出 apply/name/inject/Config),插件可在 0.2.0 上被识别与装载;同时保留 dsh-std 标准形态(dsh-plugin.json + std-facet.js,子导出 ./std-facet)以备 DSH 主线将来内置该装载器。
  2. Web 设置页回归:0.2.0 移除了旧的 settingsScope 客户端接口(旧设置页因此失效),本版按新机制重写——服务端导出 Config(37 个 .volatile() 字段),客户端以 ctx.configForms.get('vision-exp-tile') 读写、把卡片注册进插件页 plugins.item slot,控件全部自绘(官方劝阻第三方插件 require 宿主 UI 包)。设置页覆盖全部 37 项配置,按六组呈现:识别与接口 / 切块与输出 / 性能与 OCR 池 / GPU 加速 / 设备适配 / 调试与测试;保存后即时热生效,支持「放弃改动」与「全部恢复默认」。
  3. 配置来源三级(留空即回落):设置页 > 配置文件 ~/.dsh/vision-exp-tile.json > 环境变量 > 内置默认。
  4. 设置文件化:设置从宿主 settings.yaml 迁移到 ~/.dsh/vision-exp-tile.json(首次自动迁移旧分区、读取热生效、原子写回)。
  5. 取消 picturereader 适配:移除共存探测、工具描述分工引导、其配置继承(vlm_base/vlm_model)与 venv 复用(经实证 own≡peer 为死逻辑),插件完全独立运行。
  6. 其它:相对 out_dir 基准改为「源图所在目录」;清理历史模块;inject = ['tools'] 服务声明修复(缺失会导致插件启用失败)。

验证:npm test 176/176;冒烟三套全过(标准 facet 入口 15 / Cordis 入口 20 / 设置页 19,含「界面字段 ↔ 配置字段双向一致性」防漂移断言)。真机实测(DSH 0.2.0-rc.2):三个工具装载可用;vision_tile_split(509×953 → 2 块落盘 + overview)、vision_region_crop(落盘 255×286)、vision_tile_recognize(pipeline:预检→本地 OCR→像素网格→4 区域识别→汇总,14 块/14 请求)端到端通过;设置页可编辑保存并持久化到 profile 的 cordis.patch.yml。

发布资产:vision-exp-tile-v0.5.0.zip(完整版)与 vision-exp-tile-v0.5.0-nopython.zip(零配置版,剔除 src/ocr-worker.py,自动降级 Windows OCR);两包均不含 node_modules。


安装(两种包)

  • 完整版 vision-exp-tile-v0.5.0.zip:含本地 Python OCR 引擎支持(paddle/rapid venv 可选,未装则自动降级 Windows OCR)。
  • 零配置版 vision-exp-tile-v0.5.0-nopython.zip:不含 src/ocr-worker.py,本地识别直接用系统 Windows OCR,零依赖开箱可用。

挂载:解压到 ~/.dsh/plugins/vision-exp-tile(或任意目录),在目标 profile 的 package.json 里加:

{
  "dependencies": { "vision-exp-tile": "link:C:/Users/<你>/.dsh/plugins/vision-exp-tile" },
  "dsh": { "profile": { "bundles": [ "...现有项...", "vision-exp-tile" ] } }
}

然后在该 profile 目录执行 pnpm install,重启 DSH。工具出现在工具目录、设置页出现在 Web 侧栏「插件」页即为成功。

校验值(SHA256 · Release 资产)

d4227e7882b8a579cdba94a5195518c7d0f0d7749078a4613979be3eeb8c6091  vision-exp-tile-v0.5.0.zip
6239a957b8dd19cfe4829060a9892d6cf83fc469cdaa477318ead23080f14eb2  vision-exp-tile-v0.5.0-nopython.zip

核对方法:下载附件后在本机算一次 SHA256 与上面比对(PowerShell:Get-FileHash .\vision-exp-tile-v0.5.0.zip -Algorithm SHA256)。

v0.4.3 — 仓库元数据修复 / 计费表述诚实化 / 隐私与数据说明 / 过期临时产物清理

Choose a tag to compare

@Nicholaskin Nicholaskin released this 10 Sep 13:15

vision-exp-tile v0.4.3

仓库迁移说明:本仓库由原账号 Nicholas023(已被 GitHub 停用)迁移至 Nicholaskin 重新发布。
v0.4.3 是迁移后发布的第一个版本,包内 package.json / README 的仓库地址已指向新账号,开箱可用。

本次更新完全由 DeepSeek Harness 自主完成。

背景与目标

v0.4.2 之后进入「仅本地同步、暂不发布」收尾:把工作区已新增/修正的代码与文档同步到 v0.4.3 版本号,完成 README/CHANGELOG 更新块对齐。内容包括:修正 package.json 仓库元数据、统一计费表述(避免「不统计」等易误读措辞)、补充「隐私与数据说明」、为 pipeline/region_crop 增加过期临时产物清理。

新功能与改动

  1. 仓库元数据修复:package.json 的 repository / homepage / bugs 由占位作者/仓库地址改为实际仓库地址;随仓库迁移至 Nicholaskin/vision-exp-tile。
  2. 计费表述诚实化:README、工具描述、脚本注释统一为「不代为统计/不显示 token 与费用,实际以 DeepSeek 官方 API 平台账单为准」,替换旧的「不统计 token / 不计算费用」表述。
  3. 新增「隐私与数据说明」:图片以 base64 直连 DeepSeek 官方视觉 API、按官方账单计费;pipeline/smart 过程明细落盘系统临时目录(可用 out_dir 指定);插件默认清理超过 24 小时的旧临时目录/区域图(仅插件自身前缀,不触碰用户指定 out_dir)。
  4. 过期清理模块:新增 src/temp-cleanup.js(cleanupOldTempArtifacts:扫描系统临时目录,按 mtime 清理 >24h 的 vision-tile-pipeline-* 目录与 region-*.png / vision-tile-ocr-*.png 文件;支持注入 now/ttlMs/tmpRoot/excludePaths;异常静默容错),并在 src/pipeline.js / src/index.js(region_crop 路径)结束时调用。
  5. 测试:新增 tests/temp-cleanup.test.js(5 项:默认不删新鲜文件、过期前缀清理且非前缀保留、注入 now/ttlMs 可控、excludePaths 保护、异常路径不抛),并加入 package.json 的 test 显式列表。

验证

  • npm test:168/168 全绿(原 163 + temp-cleanup.test.js 5 项);
  • 打包:完整版 vision-exp-tile-v0.4.3.zip + 零配置版 vision-exp-tile-v0.4.3-nopython.zip(附件已附在本 Release)。

安装

  1. 下载附件 vision-exp-tile-v0.4.3.zip(或零配置版 -nopython.zip),解压到任意目录;
  2. 在该目录执行 npm install(零配置版同样需要,仅少了本地 Python OCR 引擎);
  3. 按 README 的「安装与挂载」章节把插件挂到 DSH profile;
  4. 需要本地 OCR 时可再装 rapid/paddle venv;不装也行——本地识别自动降级为 Windows OCR 常驻池,识别仍可走视觉 API。

本插件不代为统计、不显示 token 与费用;实际计费以 DeepSeek 官方 API 平台账单为准。

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:17

本次更新完全由 DeepSeek Harness 自主完成。

背景与目标

vision-exp-tile 与上游 picturereader(github.com/jing-hy/picturereader)常同挂载于同一 DSH 实例。二者都做图像识别,若不分工会让模型被两套近似工具搞晕、多空转轮数。本版做"picturereader 适应性优化":两插件共存/协作的工具调度适配,并复用其已配视觉端点与已建 OCR venv,顺带省模型空转。

新功能

  1. 共存探测 + 工具分工引导(A):新增 src/picturereader-detector.js——isPicturereaderPresent(双通道:dsh-tools 注册表 ctx.tools.get('image_scan') / 插件目录 <DSH_HOME>/plugins/picturereader 存在性;全部 try/catch,异常=不在场)、collabGuideText(在场返回 ≤220 字中文分工引导)、withCollabIfPresent。src/index.js 注册三个工具时按探测结果在 description 末尾追加分工段(大图切块/批量/区域→本插件;小图/像素级/整页文档→picturereader 的 image_scan/image_ocr/image_batch/document_to_image);首个 apply 探测 + setTimeout 500/1500ms 复查(防插件注册顺序竞态,结果变化才 dispose+重注册一次)。picturereader 不在场时工具描述与 v0.4.1 逐字节一致(零回归);不在工具结果尾部加任何文本。
  2. peer 配置复用(B):新增 src/peer-config.js——readPeerSettings 读 settings.yaml 的 picturereader: 分区(文本行匹配,去引号/去注释;文件/分区缺失=null);applyPeerDefaults 在本插件 baseURL/model 等于默认(未显式)时以 vlm_base/vlm_model 覆盖(用户显式 > peer > 默认);apiKeyEnv 仍用本插件自身 DEEPSEEK_API_KEY 链(不读 vlm_key 密钥)。
  3. peer venv 复用(C):src/ocr-local.js 的 rapidPython/paddlePython 增加 peer venv 候选——优先级:本插件显式 env(DSH_RAPID_PYTHON/DSH_PADDLE_PYTHON)> 本插件默认 venv(存在)> picturereader 已建 venv($HOME/<venv>/Scripts/python.exe)> 本插件默认(兜底失败安全回退);resolveVenvPython 为纯函数(可注入 exists 便于单测)。venv 路径常量经实证:picturereader/src/core.js 用 join(homedir(),'<venv>','Scripts','python.exe')。
  4. 测试:新增 tests/peer.test.js(16 项):探测双通道/异常、分工引导在场/不在场、三个真实工具描述回归(不在场不含分工段)、peer 配置读取(临时 YAML:正常/缺键/畸形/无分区)、applyPeerDefaults 优先级、resolveVenvPython 优先级、rapid/paddle venv 集成(临时目录 mock 路径存在性)。
  5. 无新增依赖、不改动 picturereader:全部用 Node 内置 + 现有依赖;不写 picturereader 任何文件。

验证

  • npm test:163/163 全绿(原 147 + peer.test.js 16 项);
  • VISION_TEST_TIMEOUT_FACTOR=8 npm test:163/163 仍全绿;
  • VISION_TEST_SKIP_TIMING=1 npm test:162 通过 + 1 跳过(超时/时序敏感用例),0 失败;
  • node scripts/probe-device.mjs:输出合法 JSON(不受本版影响)。

致谢与兼容性说明

本版与 picturereader(MIT,作者 @jing-hy)做了共存协作适配——感谢上游作者与社区。两个插件都装时,模型会自动按分工选工具(大图/批量走 vision-exp-tile,小图/像素级/整页文档走 picturereader);视觉端点与 OCR 环境可共享复用。不安装 picturereader 也完全不影响使用:本插件保持完全独立,所有协作探测失败自动回退,双方互不修改。


v0.4.1

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:17

本次更新完全由 DeepSeek Harness 自主完成。

背景与目标

解决"较差机型全量测试时 OCR 池超时导致测试不通过":慢机(核少/内存小)跑 OCR 池单测时,因时序抖动偶发超时失败。按用户三条建议实现——① 设置项可调超时判定;② 测试前先问用户是否测试;③ 安装时自动识别设备、较差机型特别处理。

新功能

  1. 设备档案模块(新增 src/device.js):probeDevice(CPU 核数/内存/GPU 名,GPU 用 nvidia-smi 1.5s 超时、失败返回 null,可 mock)、classifyTier(slow/normal/fast)、applyTierRecommendations(slow 放宽池超时到 240s、池并发降到 2、关 GPU、测试倍率×4;性能较好机器 ×2 不足以体现慢机差异,×4 给慢机留足余量,可手动到最保守的 ×8;normal/fast 保持默认)、deviceProfileText。
  2. 设置项新增 4 字段 + 1 只读:
    • ocr_pool_timeout_ms(20000..1200000,默认 120000,env DSH_OCR_POOL_TIMEOUT)——OCR 池单请求超时,可调;
    • performance_tier(auto/fast/normal/slow,默认 auto,env DSH_OCR_PERF_TIER)——auto=自动探测,非 auto=用户强制;
    • test_timeout_factor(1..8,默认 1,推荐 4=slow 档默认,手动最保守 8,env VISION_TEST_TIMEOUT_FACTOR)——测试超时判定倍率;
    • test_skip_timing(boolean,默认 false,env VISION_TEST_SKIP_TIMING)——跳过时序敏感断言;
    • device_profile(text,只读)——运行时设备画像摘要,自动填充。
    • 设置/运行时 4 层全链同步(settings-schema / config / runtime / client.js 双语 label),并保持"用户显式值 > 档位推荐 > 默认"。
  3. 慢机测试自适应:
    • 新增 tests/helpers/suite-env.mjs(poolTimeoutMs / timingFactor / skipTiming);
    • tests/ocr-pool.test.js 默认超时与超时用例改按倍率放大,时序敏感用例用 { skip: skipTiming() } 声明跳过(跳过时打印原因与建议);
    • 新增 tests/device.test.js(档位/推荐/注入/auto 应用)与 tests/suite-env.test.js(边界:非法回退/clamp/布尔解析),并加入 package.json 的 test 显式列表。
  4. 交互式自检入口(新增 scripts/self-check.mjs,npm run selfcheck):调 probeDevice+档位打印设备画像与推荐;交互询问"是否运行全量测试?(Y/T/N)"(仅 TTY;参数 --yes/--skip-timing/--no 无人值守);以子进程跑 node --test(读 package.json 显式列表),注入 DSH_OCR_POOL_TIMEOUT/VISION_TEST_TIMEOUT_FACTOR/VISION_TEST_SKIP_TIMING,汇总退出码并给出慢机改善建议。
  5. 安装即优化(scripts/install-to-web-profile.ps1):安装/更新流程末尾自动探测设备(调用 node scripts/probe-device.mjs,输出 JSON),slow 档把调优键(ocr_pool_timeout_ms/ocr_pool/gpu_provider/test_timeout_factor)写入 ~/.dsh/settings.yaml 的 vision-exp-tile 分区——仅未显式设置的键(幂等)、写入前备份到同目录 .bak-时间戳、参数 -NoDeviceTune 跳过;无论与否都打印设备画像与推荐。找不到分区则提示不创建(不越权改其他文件)。
  6. 超时收敛:ocr-local.js 的 gpuPoolTimeoutMs 改读 DSH_OCR_POOL_TIMEOUT(并导出 ocrPoolTimeoutMs,兼容旧 DSH_OCR_GPU_POOL_TIMEOUT);pipeline.js 两处写死 120000 改由 ocrPoolTimeoutMs() 提供;index.js 注册设置后异步设备探测,完成后重应用 env(auto+slow 无感简化)并回写只读画像。
  7. 设备微基准算力评级(A):src/device.js 新增 cpuWorkload/runCpuBenchmark(纯 JS 轻量基准,预算 ~0.4s,归一化 0..2、1.0=参考机);probe 增加 benchScore/benchOpsPerSec;classifyTier 用基准修正档位(<0.5 不判 fast、<0.3 且无 GPU 判 slow、基准不可用不影响原规则)。设置项 device_benchmark(默认 true)可关。校准依据:本机 16 核 normal 基准约 3e8 ops/s(参考分 ~1.0),弱阈值 0.5/0.3 按经验分档。
  8. 电池/低功耗探测(B):新增 detectPowerState(win32 CIM 一次性查询 BatteryStatus / linux sysfs / mac pmset,1s 超时);probe 增加 onBattery;放电中且档位 fast/normal 自动应用省电推荐(池并发 2、测试倍率×2、gpuProvider off;slow 推荐不变),经 computeRecommendations 合并。设置项 device_power_probe(默认 true)可关。
  9. ARM/WSL/容器降级(C):新增 detectPlatformInfo(os.arch + /proc/version 判 WSL + /.dockerenv|cgroup 判容器)与 isPlatformDegraded;受限环境自动应用保守默认(块格式 jpeg、池并发 2、gpuProvider off),经 normalizeFromSettings 落地 cfg.format。设置项 platform_fallback(auto/on/off,默认 auto)。
  10. 慢网适配(D):slow 档自动把兴趣点并发降到 1(DSH_INTEREST_CONCURRENCY)、视觉 API 单请求超时放大到 600s(normalizeFromSettings 落地 cfg.timeoutMs,默认 300s×2);仅未显式设置时生效(用户显式 > 推荐 > 默认)。设置项 slow_net_adapt(默认 true)可关。
  11. 新设置字段汇总:device_benchmark(bool)、device_power_probe(bool)、platform_fallback(enum auto/on/off)、slow_net_adapt(bool),设置/运行时/设置页双语全链同步;probe-device.mjs 输出新增 onBattery/platformInfo/benchScore/detectMs 字段,self-check.mjs 设备画像行新增 电池/平台/基准 三段。

验证

  • npm test:147/147 全绿(原 111 + device.test.js 32 项(本轮从 13 扩展,含档位/推荐/基准/省电/平台/慢网等)+ suite-env.test.js 4 项 + client-bundle 清单补 performance_tier/platform_fallback);
  • VISION_TEST_TIMEOUT_FACTOR=2 npm test:147/147 仍全绿(倍率放宽窗口);
  • VISION_TEST_TIMEOUT_FACTOR=8 npm test:147/147 仍全绿(模拟最保守慢机 ×8,性能较好的本机也无超时误报);
  • VISION_TEST_SKIP_TIMING=1 npm test:146 通过 + 1 跳过(超时/时序敏感用例),0 失败;
  • node scripts/self-check.mjs --yes:设备画像(本机 16 核/15.6GB/RTX 3050 Ti → normal,电池 交流 / 平台 x64 / 基准 0.96)→ 注入 120000/×1 → 147/147 通过;
  • node scripts/probe-device.mjs:输出合法 JSON(含 onBattery/platformInfo/benchScore/detectMs);本机 tier=normal、onBattery=false、platformInfo={x64,WSL否,容器否}、benchScore≈0.96,detectMs 总耗时 440ms(≤2s)、微基准 402ms、GPU 439ms、电源 416ms、平台 0ms;
  • install-to-web-profile.ps1 的 slow 合并逻辑经临时 settings.yaml 验证:首次写入 4 调优键、已有键不覆盖、二次幂等、备份生成。

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:18

本次更新完全由 DeepSeek Harness 自主完成。

新功能

  1. GPU 多设备加速(可选能力):
    • 新增 DSH_OCR_ENGINE=gpu/auto 引擎模式;新增设置项 gpu_provider(auto/cuda/dml/openvino/off)、gpu_python、gpu_device、gpu_fallback(设置页「图像识别」分区同步 4 新字段 + ocr_engine 枚举加 Gpu);
    • DirectML 一个引擎覆盖 NVIDIA/AMD/Intel 全厂商(Windows);CUDA(NVIDIA 极致)/OpenVINO(Intel)可选;auto 自动探测 → 不可用自动回退 CPU(gpu_fallback 可关);
    • 独立 GPU venv(rapid_gpu_venv,onnxruntime-directml 1.24.4 + rapidocr 1.4.4),不污染原 rapid_venv;
    • 性能口径(务必如实):单进程实测 DML ~208ms vs CPU ~329ms(约 1.5×);但在插件 4 并发进程池模式下 DML 反慢于 CPU(端到端 DML 2604ms vs CPU 1307ms/张)→ 定位为"可选加速能力(默认不启用)",文档表述为"按需开启;多厂商显卡兼容;自动回退保底",禁止宣称"GPU 总体提速 X 倍";
  2. 引擎选择增强:resolveEngine 支持 gpu/auto(默认 rapid 行为不变,向后兼容;设置页引擎下拉新增 Gpu/Auto)。
  3. 其余:ocr-pool 支持按引擎区分超时(GPU 冷启动放宽);runtime env 映射 4 个 DSH_OCR_GPU_* 键;worker 响应带 provider/gpu_device 调试信息。

验证

单测 111/111 全绿(原 96 + 新增 gpu.test.js 15 项);E2E:离线真实 OCR(DSH_OCR_CACHE=0)4/4;真机 4 轮(含 pipeline/region_crop/preview 真 API,API 14/20)4/4;GPU 冒烟四路径(dml/自动回退/off/auto)全过。


v0.3.1

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:19

本次更新完全由 DeepSeek Harness 自主完成。 补丁:修复 DSH 0.1.1-rc.2 兼容。

修复

  1. 设置分区内容空白(DSH 0.1.1-rc.2 兼容):升级 DSH 到 0.1.1-rc.2 后,客户端 settingsScope 不再提供 load() 方法;client.js 原无条件调用导致分区渲染异常。修复:if (typeof scope.load === "function") scope.load()(与 picturereader 3.0.6 同款防御),rc.7/rc.2 双兼容。
  2. 发布资产修正:release workflow 打包清单补上 client.js(v0.3.0 的 zip 曾漏打包设置界面文件);v0.3.0 资产补正(zip 已含 client.js)。

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:19

本次更新完全由 DeepSeek Harness 自主完成。

新功能

  1. DSH Web 设置页「图像识别」分区(client.js,浏览器半侧手写 ModuleLoader bundle):可编辑插件全部配置,按「基础 + 高级折叠」分组展示;枚举用 select、布尔用 checkbox、数值用 number、文本用 text;保存=全部写入设置命名空间(数值转 number、布尔保留、空串 unset 走默认),重置=全部 unset 恢复默认。
  2. 设置命名空间 + schemastery schema(src/settings-schema.js):SETTINGS_NS='vision-exp-tile',SettingsSchema 用 z.object 描述全部 25 个字段(枚举、布尔、数值带 min/max/default、中文 description);SETTINGS_FIELDS 为 client 与测试复用的扁平字段清单(key/type/labelKey/advanced/options/configKey/envKey)。
  3. 运行时快照 + 热生效(src/runtime.js):setRuntimeSource / getRuntimeConfig(惰性重读实现改设置即生效);normalizeFromSettings 把 snake_case 映射为 camelCase(base_url→baseURL 等)并经 normalizeConfig 归一化;优先级 = 工具参数(显式) > 设置页 > 默认值。
  4. env 映射:OCR 引擎/池/缓存/前处理/手写路由/升级/兴趣点并发等以 envFromSettings + applySettingsEnv 写入 DSH_* 环境变量;仅在用户未显式设置时回退写入(用户 env 优先),设置改回默认时自动清理残留;池参数在下次工具调用生效。
  5. 设置分区自动暴露:dsh(dsh-host-apiproxy >=0.1.0-rc.7)已改用 settings.describe() 枚举注册的命名空间、无硬编码 WEB_SETTINGS_NAMESPACES 白名单,故只需 register() 成功注册、设置客户端即可枚举到「图像识别」分区,无需任何额外暴露文件。
  6. 入口接入(src/index.js):注册命名空间(base 用 toSettingsBase(configRaw) 保证 configRaw 与设置页正确分层);工具执行时经 getRuntimeConfig() 读最新配置(Proxy 转发);新增 debug 调试日志钩子。

设计要点

  • 新的设置命名空间独立于旧 configRaw(DEFAULT_CONFIG);toSettingsBase 把 configRaw 的 camelCase 键转为 snake_case 作为第 2 层 base,避免 schema 默认值遮蔽用户显式写入的配置。
  • 工具执行时经 getRuntimeConfig() 惰性读取,参数覆盖 cfg(显式参数优先语义不变)。

验证

单测 93/93 全绿(原 73 + 新增 20:settings.test.js 12 项 + client-bundle.test.js 5 项 + 第 93 项为既有套件累计);覆盖设置 schema 键一致性、snake→camel 键映射、env 映射与热生效、运行时快照、client bundle 冒烟断言。


v0.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 13:20

本次更新完全由 DeepSeek Harness 自主完成。

新功能

  1. OCR 前处理管线(src/preprocess.js,纯 pngjs 零新依赖):深底白字图自动反色、低对比图 Otsu 二值化、手写/小字 ≤2× 放大、百分位对比度拉伸;纯色/高对比印刷体自动跳过(零副作用),任何异常返原图;
  2. 手写判别分流增强:前处理 + Paddle 高精度模型 DSH_OCR_MODEL=server(PP-OCRv4_server_rec,下载失败自动回退)+ 手写/低置信/深底失败区域自动升级视觉 API 转录(DSH_OCR_UPGRADE=full|low|off);
  3. 新工具参数 preprocess(auto/off)与 upgrade(full/low/off),向后兼容;
  4. 手写判别分流(分类分流):每个文字区先判别是否手写——预检视觉标记(模型预检输出 isHandwrite)+ 本地启发式判别器(src/handwrite.js,笔画连通域密度/行投影起伏/笔画占比)smart 互验(分歧时视觉优先);手写区直接视觉 API 转录(逐行,看不清用(?)标注);非手写区高效本地 OCR 且不放大(省 ~60% 耗时);DSH_OCR_HANDWRITE=smart|visual|local|off。判别器 15 样本(5 手写+10 印刷)校准 100% 分离(手写 0.62-0.82 / 印刷 0.37-0.49,阈值 0.55);端到端验证:手写页文字区引擎=handwrite-api(逐行转录)。

性能权衡

默认前处理使本地 OCR 单张 ~0.45s → ~1.0-1.27s(换取深底/手写增益;DSH_OCR_PREPROC=0 关闭)。

验证

深底图 0→4 行;手写 5 张 47→58 行(×1.23);印刷体漏检 0/10;判别器 15 样本校准 100% 分离(阈值 0.55);单测 73/73;真机 4 轮 API 14/20。