在侧栏直接查看编辑 Office 文档并保存回原文件
29/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dake6767/dsh-onlyoffice该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 22 处,展示前 19 条)
- 读取本地文件lib/index.js:69
const manifest = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')) - 写入本地文件lib/index.js:613
await pipeline(Readable.fromWeb(response.body), createWriteStream(tmp)) - 读取本地文件lib/index.js:694
const stream = createReadStream(target) - 发起网络请求lib/index.js:834
return (...args) => globalThis.fetch(...args) - 发起网络请求lib/client.js:1846
response = await fetch(message.url, init); - 发起网络请求lib/client.js:2961
const response = await fetch(url.href); - 发起网络请求lib/client.js:3496
loader = (url2) => fetch(url2).then((res) => res.arrayBuffer()) - 发起网络请求lib/client.js:7612
const response = await fetch(url, { credentials: "same-origin" }); - 发起网络请求lib/client.js:7671
response = await fetch(url, { - 发起网络请求lib/client.js:7780
response = await fetch(url.href, { - 写入本地文件build/build-host.mjs:20
await mkdir(to, { recursive: true }) - 读取本地文件build/build-host.mjs:21
const entries = await readdir(from, { withFileTypes: true }) - 写入本地文件build/build-host.mjs:25
await copyFile(resolve(from, entry.name), resolve(to, entry.name)) - 写入本地文件build/build-host.mjs:31
await copyFile(resolve(from, 'index.js'), resolve(to, 'index.js')) - 发起网络请求build/generated/x2t.worker.iife.js:3627
const response = await fetch(url); - 发起网络请求src/client/sdk.js:141
const response = await fetch(url, { credentials: 'same-origin' }); - 发起网络请求src/client/sdk.js:222
response = await fetch(url, { - 发起网络请求src/client/sdk.js:392
response = await fetch(url.href, { - 发起网络请求src/client/sdk.js:458
response = await fetch(url.href, { credentials: 'same-origin', signal });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的 OnlyOffice 文档查看/编辑插件:从侧边栏打开 docx/xlsx/pptx,编辑后保存回去(客户端静态 SDK,不需要 Document Server)。
README
由 DeepSeek 最新模型翻译生成dsh-onlyoffice
一个 DeepSeek Harness 插件:在 DSH 侧栏的文件管理里打开 .docx / .xlsx / .pptx,用内嵌的 OnlyOffice 编辑器查看和编辑。纯前端静态 SDK,不需要 Document Server,也不需要后端转换服务。文档始终留在本机,唯一的外网流量是首次打开时下载 OnlyOffice 引擎资源(之后走本机磁盘缓存)。
| 包名 | @dake6767/dsh-onlyoffice |
| Host 半部 | lib/index.js — /dsh-onlyoffice/ 路由(SDK 代理 + 缓存、读/写、诊断) |
| Client 半部 | lib/client.js — 一个 module-loader bundle(约 570 KiB),内含引擎 |
| 编辑器引擎 | onlyoffice-web-comp 的源码(放在 vendor/onlyoffice-web-comp,有 9 处补丁,见 vendor/PATCHES.md) |
| 许可证 | AGPL-3.0(见 LICENSE、THIRD_PARTY_NOTICES.md) |
功能
- 两条集成路径,一个引擎
展开完整文档(README 剩余 1 节)
dsh-onlyoffice
一个 DeepSeek Harness 插件:在 DSH 侧栏的文件管理里打开 .docx / .xlsx / .pptx,用内嵌的 OnlyOffice 编辑器查看和编辑。纯前端静态 SDK,不需要 Document Server,也不需要后端转换服务。文档始终留在本机,唯一的外网流量是首次打开时下载 OnlyOffice 引擎资源(之后走本机磁盘缓存)。
| 包名 | @dake6767/dsh-onlyoffice |
| Host 半部 | lib/index.js — /dsh-onlyoffice/ 路由(SDK 代理 + 缓存、读/写、诊断) |
| Client 半部 | lib/client.js — 一个 module-loader bundle(约 570 KiB),内含引擎 |
| 编辑器引擎 | onlyoffice-web-comp 的源码(放在 vendor/onlyoffice-web-comp,有 9 处补丁,见 vendor/PATCHES.md) |
| 许可证 | AGPL-3.0(见 LICENSE、THIRD_PARTY_NOTICES.md) |
功能
- 两条集成路径,一个引擎
- DSH 内置文档预览(主路径,无第三方依赖):通过 ctx.documentPreviews + sidebar.right.tab.document 槽注册实现(loading: 'renderer')。
- dsh-better-sidebar(可选):通过 ctx.betterSidebar.registerFileViewer 注册三个文件查看器;对服务做了「先取 → 可选注入 → 有上限轮询」的等待,两个插件无论谁先加载都能组合成功。
- 编辑后写回原文件
- 编辑器里按 ⌘S / Ctrl+S(把 vendored 引擎的快捷键拦截器转接到本插件),以及编辑器自带的保存入口(onSave → ONSAVE)都会写回原文件;
- 自动保存:每次文档变更会触发 1.8 秒防抖的静默写回;手动保存会立即冲刷并给出提示。
- 外部修改不会悄悄覆盖你的编辑器:预览 watcher 发现文件版本变化时,预览顶部出现 “文件已在磁盘上更新。[重新加载]”,由你决定何时载入。
- 导出下载、只读/编辑切换、编辑器界面明暗主题跟随 DSH。
- 自诊断:打开失败时错误界面会列出捕获到的控制台/iframe 错误和环境快照,并上报到 POST /dsh-onlyoffice/diagnostic(写入 <cacheDir>/.requests.log)。
环境要求
- DSH 版本需要提供 documentPreviews + slots 客户端服务(即自带 @deepseek-ai/dsh-client-ui-sidebar-documentpreview);可选路径需要 dsh-better-sidebar。
- 首次打开文档需要能访问下文的 SDK 镜像之一。
安装
支持反向代理子路径部署:插件所有路由都按页面目录解析,因此 https://host/app/<id>/ 与 http://127.0.0.1:53803/、桌面壳 dsh-app://app/ 表现一致。
方式一:本地目录链接(开发/自用,当前方式)
在 DSH 里用 plugin_manager: action: install_bundle target: /Users/wuliqi/projects/dsh-onlyoffice
会向 profile 添加依赖并启用 bundle 行。客户端改动刷新页面(⌘R)即可;Host 半部改动需要完整重启 DSH(目录链接安装下 Host 模块的 HMR 不可靠)。
方式二:npm 包
npm i @dake6767/dsh-onlyoffice
或用 DSH 的插件管理器安装该包
构建与测试
node build/build-client.mjs # vendor + src/client -> lib/client.js(约 570 KiB)
node build/build-host.mjs # host/.js -> lib/.js
node --test "test//.test.mjs" # 87 个测试
OnlyOffice 静态 SDK 从哪来
插件不打包 SDK(完整目录约 1.96 万个文件 / 1.1 GB)。Host 按需代理单个文件并缓存:
GET /dsh-onlyoffice/sdk/onlyoffice/<version>/<rest>
命中缓存 -> <cacheDir>/<version>/<rest> 未命中 -> <mirror>/onlyoffice/<version>/<rest>(按顺序取第一个可用的镜像)
默认镜像(网络错误 / 超时 / 404 / 5xx 时自动切换):
1. https://onlyoffice-web-comp.vercel.app/packages
2. https://cdn.jsdelivr.net/gh/electroluxcode/onlyoffice-web-comp@main/public/packages
3. https://raw.githubusercontent.com/electroluxcode/onlyoffice-web-comp/main/public/packages
明确 404 的资源(例如所有镜像都没有的 dictionaries/en_US/ 拼写词典)会被记住 10 分钟,避免每次渲染都重走一遍镜像链。
配置(cordis.patch.yml 的 onlyoffice 行)
- id: onlyoffice
name: '@dake6767/dsh-onlyoffice'
config:
version: '9.4.0-develop' # SDK 目录版本(客户端从 /status 读取,不写死) upstreamBase: 'https://onlyoffice-web-comp.vercel.app/packages'
upstreamFallbacks: [] # [] = 只用单一源;省略则用上面的默认镜像链
cacheDir: '~/.dsh/onlyoffice-sdk'
fetchTimeoutMs: 300000 # 单个资源的上游超时 saveEnabled: true # false 关闭写回路由 autoSave: false # true 才启用防抖自动保存手动 ⌘S / Ctrl+S、编辑器保存按钮始终可用 maxSaveBytes: 268435456 # 写回大小上限(256 MiB)
离线/内网:把同样目录结构的文件预先放进 cacheDir,或把 upstreamBase 指向自建静态站点。
多用户宿主(共享 SDK 缓存)
默认每个 profile 会把 SDK 下载到自己 $DSH_HOME/onlyoffice-sdk(首次冷启动约 100 MB)。
多用户部署建议指向同一个共享目录:
0.1.4+:给所有 Host 进程设置环境变量
export DSH_ONLYOFFICE_CACHE_DIR=/var/lib/dsh-phalanx/data/onlyoffice-sdk
或在插件行 config 里设置 cacheDir。优先级:显式 config > 环境变量 > 默认路径。
无法设置环境变量的宿主,也可以把每个用户的 ~/.dsh/onlyoffice-sdk 软链到共享目录。
HTTP 路由(全部经过 connection fence,与 /sidebar/ 一致)
| 路由 | 作用 |
| GET /status | {version, sdkBaseUrl, upstreams, cacheDir, files, bytes, lastError} |
| GET /sdk/onlyoffice/<ver>/<rest> | SDK 代理 + 磁盘缓存(immutable 响应头) |
| GET /read?sessionId&path[&cwd] | 读取文档字节,返回 x-dsh-file-version(renderer 模式) |
| POST /save?sessionId&path[&cwd][&mtimeMs] | 原始文档字节原子写回 |
| POST /diagnostic | 浏览器诊断(限长),追加到 .requests.log |
写回安全(本插件唯一的写路径):
- 目标必须已存在且是常规文件,并且位于会话工作区内(优先 fs.contains,回退 realpath 包含判断);
- 扩展名只允许 docx / xlsx / pptx(引擎原生输出格式;把 docx 字节写回 .odt/.doc/.csv 会损坏文件,这些格式只读 + 导出);
- 可选 mtimeMs 作为乐观锁:磁盘文件已变化时返回 409 conflict,而不是覆盖;
- 同目录临时文件 + rename 原子替换,保留原文件权限位。
使用说明
1. 右侧栏「文件」→ 点开 docx/xlsx/pptx → 自动用 OnlyOffice 打开(预览右上角可看到「OnlyOffice 文档」实现);
2. 编辑后 ⌘S / Ctrl+S 保存;不按也行,停手约 2 秒会自动保存(静默);
3. 点 OnlyOffice 自带软盘同样会写回;
4. 文件被外部修改(比如 Agent 写的)→ 顶部提示条 →「重新加载」查看最新内容;
5. 「导出下载」把当前文档导出为本地文件;「编辑/只读」切换编辑权限。
注意:编辑器内部的“所有更改已保存”只代表它自己的内存服务状态;真正的落盘由本插件负责(⌘S、软盘、自动保存三条路径都走同一个写回逻辑)。
已知限制
排查:space 页面提示「宿主端 SDK 路由不可达」
DSH 的 space 工作区可能挂在 /app/<spaceId>/ 下。这种页面里插件路由只有在该前缀下才可达;同一路由放到 origin 根会被 connection fence 直接拒绝(403 Forbidden)。客户端启动时会依次探测「页面目录 → origin → 根相对」,并复用第一个能用 JSON 回应 GET …/status 的 base。
在页面控制台执行下面这行,可以看到每个 base 的真实响应:
await window.__dshooProbe()
它会分别对 /status 和 SDK api.js 返回 HTTP 状态、content-type、耗时和响应体前缀,因此能一眼区分 403 / text/plain(fence 拒绝)、200 / text/html(SPA 回退)和超时。
支持的格式
| 分类 | 格式 |
| 用 OnlyOffice 打开(内置预览 & better-sidebar) | docx doc odt rtf · xlsx xls ods csv · pptx ppt odp |
| 可写回原文件 | 仅 docx xlsx pptx(引擎原生输出;把 docx 字节写进 .odt/.doc/.csv 会损坏文件) |
| 其它格式(仍由 DSH 自带查看器处理) | 文本、Markdown、代码、图片、PDF、HTML… |
| 引擎能解析、但这份 SDK 导出用不了 | pdf/pdfa/djvu/xps(需要 pdfeditor 应用)、Visio vsdx/vssx/vstx/...(需要 visioeditor)——当前静态 SDK 只有 documenteditor/spreadsheeteditor/presentationeditor,而 api.js 把 documentType: 'pdf' 映射到 pdfeditor,所以会 404 |
| 引擎支持但本插件未注册 | txt html mht epub fb2 mobi docm dotx dotm fodt ott oform docxf xlsm xltx xltm xlsb fods ots ppsx pptm ppsm potx potm fodp otp —— 想启用就加进 NATIVE_EXTENSIONS / VIEWER_EXTS 并补 MIME,但不要开放写回 |
扩展名必须与文件真实内容一致(x2t 按扩展名选择解析器)。
PDF 有意保留给 DSH 原生查看器:它直接渲染 PDF 内嵌字形;交给 OnlyOffice 需要额外的 pdfeditor 应用并多一次转换,纯前端静态 SDK 不适合。
- 没有实时协同/字符级热更新:静态 SDK 没有协同通道,真正的共同编辑需要 Document Server / WOPI 后端。外部修改是“提示 → 你点击 → 整篇重载”;
- 写回只支持原生 OOXML(docx/xlsx/pptx),其余格式只读 + 导出;
- dsh-resource://file/absolute/... 这类地址没有会话信息,可查看但无法写回;
- x2t 转换是页面级单例,已用锁串行化;首次打开需要下载对应 SDK 片段;
- 侧栏的刷新控件属于内置预览;本插件额外提供的唯一重载入口是“外部更新”提示条。
排错
| 现象 | 排查 |
| 首次打开很久 / 一直显示「加载引擎」 | 冷启动在下载 SDK;观察 <cacheDir> 的体积是否增长 |
| 「编辑器渲染超时」 | 错误详情里有控制台错误 + iframe 状态快照 |
| dictionaries/en_US/ 404 | 无语义影响(上游没有拼写词典),已做负缓存 |
| 保存报 conflict | 文件在磁盘上变了——先重新加载再保存 |
| 保存报 method not allowed | 运行中的 Host 还是旧代码——完整重启 DSH |
| 插件更新后侧栏空白 | 客户端 bundle 崩溃;错误界面会显示 [console-],同时看 .requests.log |
<cacheDir>/.requests.log 记录每次 SDK/读/写/诊断请求的状态码与耗时(2 MiB 轮转),是定位“浏览器到底发了什么请求”的最快入口。
目录结构
host/ Host 半部(只依赖 node:* 内置模块) index.js 路由注册、SDK 代理、状态、诊断、日志 save.js /read 与 /save:工作区校验、原子写、乐观锁 sdk-cache.js 纯函数助手(路径映射、内容类型、镜像链、缓存统计) src/client/ Client 半部(esbuild 打成单文件 bundle) index.jsx 注册两条集成路径;装载样式/诊断/快捷键 native.jsx 内置预览的 documentPreviews 实现 + resource 地址解析 office-view.jsx OnlyOffice 视图:加载/编辑/保存/自动保存/外部更新提示 sdk.js /status、/read、/save 客户端调用;SDK 资源基址注册 autosave.js 防抖自动保存 diagnostics.js 页面/iframe/console 捕获 + 环境快照 build/ esbuild 构建(处理 x2t worker 内联) vendor/onlyoffice-web-comp/ vendored 引擎(补丁见 vendor/PATCHES.md) test/ node:test:Host 路由/缓存/读写 + Client bundle/渲染 smoke fixtures/ 演示文档(docx/xlsx/pptx + live-sync 演示)
许可证与第三方
- 本包:AGPL-3.0(LICENSE),源码中带 SPDX-License-Identifier: AGPL-3.0-only;
- vendored 引擎:上游同样 AGPL-3.0,其许可文本保留在 vendor/onlyoffice-web-comp/LICENSE,修改记录见 vendor/PATCHES.md;
- OnlyOffice SDK 资产不在包内,运行时从镜像下载;其许可情况(社区版 AGPL、Developer Edition 商业版、x2t WASM 许可不明确)见 THIRD_PARTY_NOTICES.md;
- 内置 brotli 解码器保留 Apache-2.0 头;
- OnlyOffice 是 Ascensio System SIA 的商标,本项目是独立集成,与其无隶属或背书关系。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dake6767/dsh-onlyoffice
在侧栏直接查看编辑 Office 文档并保存回原文件
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目