dsh-office-preview
Word (.docx) and Excel (.xlsx) previews for the DeepSeek Harness sidebar document pane — read-only, no Office installation, no network.
Without this plugin, opening a .docx or .xlsx in the sidebar falls through to the plain-text renderer and shows "Not a text file, preview is unavailable for now."
What it renders
| Extension | Rendered |
|---|---|
.docx .docm .dotx .dotm |
Headings, paragraphs with indentation and bullets kept, bold / italic / underline, tables including nested ones |
.xlsx .xlsm .xltx .xltm |
Sheet tabs, row and column headers, merged cells, column widths, number and date formats, cached formula results |
Legacy binary formats (.doc, .xls) are not claimed by this plugin and still fall back to plain text. .pptx is out of scope today.
How it works
- No dependencies, no services. The plugin registers two renderers on the official extension points
ctx.documentPreviewsand thesidebar.right.tab.documentslot. It patches no Harness source, calls no external service, and its only import isreact. - OOXML is parsed in the browser.
lib/client.jscontains a ZIP central-directory reader (raw-DEFLATE throughDecompressionStream) and a small XML reader; no JSZip, SheetJS or mammoth. - The host half is empty.
lib/index.jsexists only so the Cordis loader carries a client entry; all visible behaviour lives in the browser bundle.
Install
From the plugin market (recommended). In Harness: Settings → Plugin Market → Discover → search dsh-office-preview → Install → restart Harness when asked.
From the prebuilt tarball (no market, no npm).
dsh plugin --profile web add https://github.com/JohnGD/dsh-office-preview/releases/latest/download/dsh-office-preview.tgz
Manual, offline — install.ps1 on Windows, install.sh on macOS and Linux:
powershell -ExecutionPolicy Bypass -File install.ps1
The script does three things:
- copies the package to
<home>\plugins\dsh-office-preview; - links
<home>\profiles\node_modules\dsh-office-previewat it — a root the Cordis loader resolves plugin entry names through; - appends one
insertrow to the profile's own patch layer<home>\profiles\web\cordis.patch.yml, backing that file up first.
The patch layer is watched (patchReload: live), so a page refresh (Ctrl+R) usually activates the plugin; if nothing changes, restart DSH Desktop.
This package is not published to npm: npm writes the publisher's account e-mail into every published package's public metadata (maintainers[].email). Shipping a prebuilt tarball on a GitHub Release avoids that entirely.
Where it shows up
- Harness → Settings → Plugin inventory lists
dsh-office-previewas an active plugin, next to the built-in ones. - Plugin market → Installed lists it only when it is installed as a profile dependency (
dsh plugin add, or alink:dependency). There it is labelled "local development" and can be enabled, disabled or uninstalled. Theinstall.ps1form — patch layer plus fallback link — does not appear in that list; its advantage is that it touches no profile dependency, lockfile or generation projection. The two forms must not be enabled at once: mounting one entry id twice collides.
Uninstall
powershell -ExecutionPolicy Bypass -File uninstall.ps1 # keeps the copied files
powershell -ExecutionPolicy Bypass -File uninstall.ps1 -RemoveFiles # removes them as well
If the plugin was installed as a profile dependency, remove it from the market instead: Market → Installed → Uninstall.
Self-check
$node = "$env:APPDATA\dsh-desktop\harness\.desktop-bin\node.cmd" # or any Node >= 20
& $node test\parse.mjs samples\sample.xlsx samples\sample.docx # parsers
& $node test\render.mjs samples\sample.xlsx samples\sample.docx # render path, edge cases included
& $node test\plugin.mjs # client registration contract
Each script prints ALL CHECKS PASSED on success. samples/ carries a small workbook and a small document, so the checks run without any external file.
Limits
- Read-only: a preview never writes to the document.
- Images, comments, tracked changes, charts and macros are not rendered; their text is still shown.
- The per-file read cap comes from Harness's
workspaceFiles.readAll— 32 MiB by default. - Large sheets are truncated at 4000 rows × 160 columns, with a notice.
License
MIT
中文说明
dsh-office-preview —— DeepSeek Harness 右侧栏文档面板的 Word(.docx)与 Excel(.xlsx)预览插件:只读、不依赖 Office、不联网。
没有这个插件时,在右侧栏点开 .docx / .xlsx 会落到纯文本渲染器,显示「非文本文件,暂时无法预览」。
渲染能力
| 扩展名 | 渲染内容 |
|---|---|
.docx .docm .dotx .dotm |
标题层级;段落(保留缩进与项目符号);加粗 / 斜体 / 下划线;表格(含嵌套表格) |
.xlsx .xlsm .xltx .xltm |
工作表分页签;行列号表头;合并单元格;列宽;数字与日期格式;公式的缓存值 |
旧二进制格式(.doc、.xls)本插件不接管,仍走官方纯文本回退;.pptx 目前不在范围内。
实现方式
- 零依赖、无外部服务。 插件只在官方扩展点
ctx.documentPreviews与插槽sidebar.right.tab.document上注册两个渲染器;不修改 Harness 任何源码,不调用外部服务,唯一引入的模块是react。 - OOXML 在浏览器内解析。
lib/client.js内置 ZIP 中央目录读取器(用DecompressionStream解 raw-DEFLATE)与一个小型 XML 读取器,不引入 JSZip、SheetJS 或 mammoth。 - 宿主半是空的。
lib/index.js的唯一作用是让 Cordis loader 里存在这个条目,全部可见行为都在浏览器半。
安装
从插件市场安装(推荐)。 在 Harness 里:设置 → 插件市场 → 发现 → 搜索 dsh-office-preview → 安装 → 按提示重启 Harness。
用预构建包安装(不用市场、不用 npm)。
dsh plugin --profile web add https://github.com/JohnGD/dsh-office-preview/releases/latest/download/dsh-office-preview.tgz
离线手动安装 —— Windows 用 install.ps1,macOS 与 Linux 用 install.sh:
powershell -ExecutionPolicy Bypass -File install.ps1
脚本只做三件事:
- 复制包到
<home>\plugins\dsh-office-preview; - 建立
<home>\profiles\node_modules\dsh-office-preview联结指向它 —— 这是 Cordis loader 解析插件条目名所用的回退根目录; - 在 profile 自己的补丁层
<home>\profiles\web\cordis.patch.yml追加一条insert行,改前自动备份该文件。
补丁层被 live 监听(patchReload: live),通常刷新页面(Ctrl+R)即可生效;若界面无变化,重启一次 DSH Desktop。
本包不发 npm:npm 会把发布者的注册邮箱写进每个已发布包的公开元数据(maintainers[].email)。改为把预构建包挂在 GitHub Release 上,可以完全避开这一点。
它出现在哪里
- Harness → 设置 → 插件清单:会列出
dsh-office-preview处于活动状态,与内置插件并列。 - 插件市场 → 已安装:只有把它装成 profile 依赖(
dsh plugin add,或link:依赖)时才会出现,标记为「本地开发」,可在市场里启用 / 禁用 / 卸载。用install.ps1装的形式(补丁层 + 回退目录链接)不在该列表中;它的好处是完全不触碰 profile 依赖、锁文件与代际投影。两种形式不能同时启用:同一条目 id 挂两次会冲突。
卸载
powershell -ExecutionPolicy Bypass -File uninstall.ps1 # 保留已复制的文件
powershell -ExecutionPolicy Bypass -File uninstall.ps1 -RemoveFiles # 连文件一起删除
若插件是以 profile 依赖装的,请在市场 → 已安装 → 卸载里移除它。
自检
$node = "$env:APPDATA\dsh-desktop\harness\.desktop-bin\node.cmd" # 或用任意 Node >= 20
& $node test\parse.mjs samples\sample.xlsx samples\sample.docx # 解析器
& $node test\render.mjs samples\sample.xlsx samples\sample.docx # 渲染路径(含边界用例)
& $node test\plugin.mjs # 客户端注册契约
三个脚本成功时都会打印 ALL CHECKS PASSED;samples/ 里带了一个小工作簿与一个小文档,不需要外部文件就能跑。
边界
- 只读:预览不会写回文档。
- 图片、批注、修订痕迹、图表、宏不渲染,其文字内容仍会显示。
- 单文件读取上限取决于 Harness 的
workspaceFiles.readAll,默认 32 MiB。 - 大表格最多渲染 4000 行 × 160 列,超出部分给出提示。
许可
MIT
No comments yet. Be the first to write one.