Skip to content

Releases: Z8906/dsh-plugin-office-markdown

v1.2.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:57

发布日期:2026-10-03 | 状态:🟢 推荐使用(当前最新版本)

主题:卸载不再往 ~/.dsh 里留东西。

在 v1.2.0 及之前,每次在 DSH 里卸载本插件,都会把一份完整的卸载转录写进 ~/.dsh/dsh-plugin-office-markdown-removal.log —— 包括每一次 pip uninstall 的输出。那些日志只在没清干净的时候才有用;清干净的时候,它只是躺在那里的一坨文本。这个版本改成:成功只留一行摘要,失败才留全文。

变更

  • 卸载日志:清理成功时只留一行摘要(lib/removal-watchdog.js)。看门狗在 pip 退出码 0,以及「无需清理」(没有环境记录 / 记录里没有要负责的包)这两类结果下,把日志压成一行:

    [2026-10-03T01:12:09] 卸载完成:清理 43 个包,pip 退出码 0
    

    以下四种情况仍然保留完整转录 —— 只有「没清干净」时,这份日志才是有用的排查材料:

    • pip 退出码非 0
    • 调用 pip 失败(例如解释器不见了)
    • 环境记录里没有解释器路径
    • 等待 120 秒仍未确认插件被移除
  • install.ps1 -Uninstall 会删除卸载日志(彻底卸载的语义就是不留东西)。新增 -KeepRemovalLog 可以保留它。

  • 更正了文档里关于日志裁剪的说明:裁剪发生在看门狗启动时,而不是「写入前」;并说明成功路径会把日志压成一行,只有失败 / 超时才会累积到裁剪阈值。

修复

  • install.ps1 补回 UTF-8 BOM:脚本自己的注释一直写着「本脚本自身带 UTF-8 BOM」,但仓库里的文件其实没有 BOM。Windows PowerShell 5.1 读无 BOM 的 .ps1 会按 ANSI 解码,中文提示会全部乱码(已在本机 PowerShell 5.1.26100 实测确认)。现在按注释所说的带 BOM 保存。

升级

转换能力与 v1.2.0 完全相同,只有卸载日志行为与 install.ps1 编码这两处变化。

⚠️ 不要走 DSH 界面上的「卸载 → 重新安装」。 卸载会触发本插件的 Python 环境清理(设计如此,见卸载文档),那条路的结果是「插件升级了、Python 环境却没了」。

正确做法(任选一条,然后重启 DSH):

  1. 让 pnpm 重新解析这个 git 依赖:

    $rt = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies"
    & "$rt\node\bin\node.exe" "$rt\pnpm\bin\pnpm.mjs" update dsh-plugin-office-markdown --dir "$env:USERPROFILE\.dsh\profiles\desktop"
  2. 或在 设置 → 插件 → 安装 里再 add 一次同一条 git 地址(不碰「卸载」)。

安装

在 DSH 的 设置 → 插件 → 安装 里填:

github:Z8906/dsh-plugin-office-markdown#v1.2.1

或者下载下面的 dsh-plugin-office-markdown-1.2.1.tgz,在安装框里填它的绝对路径。装完重启 DSH。

.tgz 是 npm 包结构(顶层 package/),只含 lib/、cordis.patch.yml、README.md、package.json、LICENSE,不含 install.ps1;需要脚本请用同一页的 .zip 源码快照,或 git clone 仓库。


📚 文档 | 更新日志 | 卸载说明


本说明主要由 AI 生成(对照 CHANGELOG.md 与源码写成),发布前经维护者审阅。
如与实现有出入,请以代码为准 —— 见 README 的「关于本文档」。

v1.2.0

Choose a tag to compare

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

发布日期:2026-10-02 | 状态:🟢 推荐使用

主题:把「转换好了却读不到」「读不到还硬读」「产物越攒越多」这三类浪费一次性修掉。

新增

  • 产物保真度标记:每个 .md 的第一行会写入 <!-- dsh-office-markdown converter=<转换器> fidelity=<high|limited> at=<时间> srcbytes=<字节数> srchash=<内容哈希> -->。命中缓存时从产物本身读回真实的转换器与保真度,而不是无条件写「保真度高」。由 1.1.x 生成的旧产物没有这个标记,会如实报告为「保真度未知」,并提示可以用 force: true 重转。
  • action: "outline":只返回已转换产物的标题 / 工作表 / 幻灯片索引(含大致行号),绝不触发转换;转换结果里的返回值也带上同一份索引,并新增 lineCount。
  • action: "clean":默认 dryRun: true,只报告会删掉哪些陈旧产物;范围严格限制在同一个目录、文件名匹配 <原名>-<8位十六进制>.md 的普通文件,绝不递归、绝不删除当前缓存键指向的那一份,也绝不会碰到你自己写的 .md。
  • 配置 pruneStaleArtifacts(默认 false):开启后每次成功转换会顺手清掉同一源文件的旧产物。
  • 批量:paths: ["a.xlsx", "b.docx"],或直接把目录交给 path(默认不递归,recursive: true 才进子目录;一次最多 200 个文件,超出会提示)。逐文件串行转换以避免同时拉起一堆解释器,结果按「一行一个文件」汇总;并说明目录展开到底做了什么 —— 是否递归、扫到几个文件、挑出几个 Office / PDF、跳过几个非 Office 文件、有哪些子目录没进去。即使只挑出 1 个文件也会说明,免得「只处理了 1 个文件」被误读成「这个文件夹只有 1 个文件」。
  • 设置页「试转一个文件」:不进模型、不走缓存,直接在本机跑一遍完整转换链,返回转换器、保真度、体积、行数、tokens、耗时与 500 字预览;试转产物固定叫 <文件名>-test.md,放在源文件旁边(配了 tmpDir 就放那里),每次覆盖、不会堆积,也不会被工具误当成缓存结果。
  • 环境探测并发化:每个解释器另有独立的超时预算,卡死的会被标成「⏱ 未响应」而不是拖住整个设置页;探测结果按 probeTtlMs 缓存(默认 10 分钟),页面上多了一个「重新检查」可强制重探;安装 / 卸载任务结束后缓存会自动失效。

改进 / 修复

  • 内容没变就不再重复转换:修改时间变了但内容没变(git checkout、复制、从备份还原)时,用记录在产物里的源文件指纹比对内容哈希,确认没变就复用已有 .md 并把它重新挂到当前缓存键上,不再写第二份一模一样的文件。
  • 兜底产物会自动升级:缓存里是内置兜底转换的结果、而这台机器现在已经有 MarkItDown 时,不再默默复用低保真产物,而是重新转换一次并说明原因。
  • 体积与读取策略:返回值给出明确的读取建议「先读前 200 行看结构,再用 grep 在同一个 .md 里定位,不要整份读入」;产物本身永远不被裁剪 —— 彻底交给模型的是一个完整的 Markdown 文件。
  • preview: 0 不再把整份 Markdown 读进内存:体积、行数、token 估算改为流式统计;action: "read" 的预览上限改为遵循配置里的 maxPreviewChars(原先硬编码 4000)。
  • read 守卫在产物已经存在时,直接给出那个 .md 的路径,而不是让模型「先去转换一遍」;源文件此后有改动时会说明这是较早的产物。拦截提示也说明了「换成别的路径去读同一个文件并不能绕过守卫」。
  • 每次转换成功 / 失败各记一行日志,内容只有路径、大小、耗时与转换器 ID,不记录文件正文,也不记录完整解释器路径。
  • package.json 补齐 repository / homepage / bugs / author;新增 CI(语法检查、tag 与版本号一致性、.tgz 打包结构校验)与发布工作流(推 v* tag 自动创建 Release 并上传 .tgz)。

升级

DSH 没有升级按钮。已装旧版的话,按 安装文档的升级一节 做,然后重启 DSH。

⚠️ 从 v1.2.0 起本插件在真正被卸载时会清理自己登记的 Python 环境,所以不要用「卸载 → 重装」来升级。

由 1.1.x 生成的旧产物没有标记行,会被如实报告为「保真度未知」,传 force: true 重转一次即可补上。

安装

在 DSH 的 设置 → 插件 → 安装 里填:

github:Z8906/dsh-plugin-office-markdown#v1.2.0

或者下载下面的 dsh-plugin-office-markdown-1.2.0.tgz,在安装框里填它的绝对路径。装完重启 DSH。

.tgz 只含 lib/、cordis.patch.yml、README.md、package.json、LICENSE,不含 install.ps1;需要脚本请用 .zip 源码快照或 git clone。


📚 文档 | 更新日志 | 配置项


本说明主要由 AI 生成(对照 CHANGELOG.md 与源码写成),发布前经维护者审阅。
如与实现有出入,请以代码为准 —— 见 README 的「关于本文档」。

v1.1.1

Choose a tag to compare

@Z8906 Z8906 released this 01 Oct 13:07

发布日期:2026-10-01 | 状态:🟡 过渡版本,已被 v1.2.0 取代

相对 v1.1.0 没有新的转换能力,这个版本只补安装体验。

新增

  • install.ps1 新增 -RegisterBundle:把源码打成 tarball 放进 <DSH 数据目录>\local-packages\,在 profile package.json 里同时登记 dsh.profile.bundles 与 dependencies 的 file: 指向,再用 DSH 自带的 pnpm 跑一次 install —— 装完插件会出现在「设置 → 插件」页面里,并且能一键卸载。该模式下不再写 cordis.patch.yml 受管块(bundle 自带一份),若检测到旧的受管块会被移除,避免同一插件被加载两次。
  • 脚本内补充说明:pnpm 对 file: tarball 是按「路径 + 版本号」缓存的,改完 lib\*.js 之后必须先升 package.json 的 version,否则装上去的还是旧内容。

变化

  • README.md 调整安装章节;package.json 更新。

已知问题

  • 转换能力与 v1.1.0 相同:不具备 v1.2.0 的产物保真度标记、结构索引、批量与目录展开、action: "clean" / pruneStaleArtifacts、内容未变复用、试转入口;环境探测是串行且可能卡住设置页。
  • 升级时不要走「卸载 → 重装」 —— 卸载会触发 Python 环境清理(v1.1.0 引入的行为)。

升级建议

直接用 v1.2.0(或更新的 v1.2.1)。

安装

在 DSH 的 设置 → 插件 → 安装 里填 github:Z8906/dsh-plugin-office-markdown#v1.1.1;或者下载下面的 dsh-plugin-office-markdown-1.1.1.tgz,在安装框里填它的绝对路径。装完重启 DSH。


📚 文档 | 更新日志


本说明主要由 AI 生成(对照 CHANGELOG.md 与源码写成),发布前经维护者审阅。
如与实现有出入,请以代码为准 —— 见 README 的「关于本文档」。

v1.1.0

Choose a tag to compare

@Z8906 Z8906 released this 01 Oct 13:07

发布日期:2026-10-01 | 状态:🟠 可用但功能不全,不推荐新装

新增

  • lib/paths.js:不再把 ~/.dsh 写死在代码里,改为三级回退「profile 目录反推 → 环境变量 DSH_HOME → ~/.dsh」。换数据目录、或用非默认 profile,都不会再找错环境记录与日志。
  • lib/removal-watchdog.js:卸载插件时派发一个脱离宿主的看门狗进程。DSH 的卸载流程是「先销毁插件、几秒后才删目录」,宿主里的定时器一旦遇到重启就全没了;看门狗自己轮询,确认插件真的被移除后才执行 pip uninstall。它带单实例锁与 120 秒寿命上限,平时关闭 / 重启 DSH 不会启动任何常驻进程。

变化

  • lib/convert.js、lib/env.js、lib/index.js 更新;install.ps1 整体重写;README.md、package.json 更新。

已知问题

  • 不具备 v1.2.0 的能力:无产物保真度标记、无 lineCount / outline、无批量与目录展开、无 action: "clean" / pruneStaleArtifacts、无「内容没变就复用」、无试转入口;环境探测是串行且可能卡住设置页。
  • 升级时不要走「卸载 → 重装」 —— 本版本引入的卸载清理会在那时把 Python 环境清掉。

升级建议

直接用 v1.2.0(或更新的 v1.2.1)。

安装

在 DSH 的 设置 → 插件 → 安装 里填 github:Z8906/dsh-plugin-office-markdown#v1.1.0;或者下载下面的 dsh-plugin-office-markdown-1.1.0.tgz,在安装框里填它的绝对路径。装完重启 DSH。


📚 文档 | 更新日志


本说明主要由 AI 生成(对照 CHANGELOG.md 与源码写成),发布前经维护者审阅。
如与实现有出入,请以代码为准 —— 见 README 的「关于本文档」。

v1.0.0

Choose a tag to compare

@Z8906 Z8906 released this 01 Oct 13:07

发布日期:2026-10-01 | 状态:🔴 无法正常使用,已被取代

首个版本尝试打通「先转成 Markdown 再读取」的链路:包含 read_office_as_markdown 工具、内置 Python / Node 兜底转换器、设置页「Office 转换」,以及在卸载插件时清理登记的 Python 包。

该版本无法正常使用

  • 这个版本无法正常使用,已被 v1.1.0 及之后的版本取代。请勿安装,直接使用 v1.2.0(或更新的 v1.2.1)。
  • DSH 数据目录被写死为 ~/.dsh:profile 或数据目录不在默认位置时,环境记录与日志会找错地方,卸载时该清的包清不掉。
  • 卸载清理不可靠:没有独立的看门狗进程。DSH 卸载是「先销毁插件、几秒后才删目录」,中途重启一次 DSH,宿主里的定时器就全没了,Python 环境会永远残留。
  • 缺少后续版本的产物管理能力:没有结构索引(outline)、不返回行数、不能批量处理目录、没有试转入口、没有陈旧产物清理。

升级建议

请直接安装 v1.2.0(或更新的 v1.2.1)。

安装(仅用于复现问题)

在 DSH 的 设置 → 插件 → 安装 里填:

github:Z8906/dsh-plugin-office-markdown#v1.0.0

或者下载下面的 dsh-plugin-office-markdown-1.0.0.tgz,在安装框里填它的绝对路径。装完重启 DSH。

.tgz 不含 install.ps1;需要脚本请 git clone 仓库。


📚 文档 | 更新日志


本说明主要由 AI 生成(对照 CHANGELOG.md 与源码写成),发布前经维护者审阅。
如与实现有出入,请以代码为准 —— 见 README 的「关于本文档」。