返回目录

dsh-file-viewer

精选清单收录已归档

liguobao/dsh-file-viewer

DeepSeek Harness 通用只读文件预览插件,支持图片、PDF、CSV、Markdown、JSON、YAML、源码及大文件。

该仓库已归档——只读且不再维护,安装前请仔细审查代码。

前往 GitHub项目主页
$ dsh plugin add dsh-file-viewer

安装

dsh 没有统一的安装命令——把该插件 README 中的配置行加入你的 profile/patch 配置,然后重启即可。

了解安装方式

5

星标

0

Fork

TypeScript

语言

MIT

许可证

2026-08-19

创建于

2026-09-22

最近推送

README

DSH File Viewer

English | 中文

⚠️ Archived — this project is no longer maintained.

Development has stopped: no further releases, bug fixes, or compatibility updates will be published. It was verified against DeepSeek Harness through dsh-v0.1.5-rc.1, so later Harness versions may break it — in particular the workspace "…" menu patch (scripts/patch-workspace-menu.mjs). Issues and pull requests will not be reviewed. The source stays available under the MIT license; please fork it if you want to carry the work forward.

Online: dsh.r2049.cn

A universal, read-only file preview layer for DeepSeek Harness: open and inspect files right inside the web UI — no external application needed.

Preview ≠ Execute. The viewer is strictly read-only: previewing a file never runs shell commands, scripts, macros, or HTML. SVG is rendered through <img>, and Markdown is sanitized before display.

Supported file types

Type Renderer
PNG / JPG / GIF / WEBP / SVG / BMP Image (fit, zoom, pan, dimensions)
PDF PDF.js (page nav, page input, zoom, fit width/page)
CSV / TSV Data table (delimiter auto-detect, sticky header, row numbers, search, sort, column resize, windowed rows, chunked loading)
TXT / LOG / OUT / INI / CONF Text (line numbers, wrap, search, font size, chunk navigation)
JS / TS / Python / Go / Rust / Java / C/C++ / C# / Shell / HTML / CSS / SQL / … Code (highlight.js, read-only)
Markdown Preview (sanitized) + Source
JSON / JSONL Tree (expand/collapse, copy value/path) + Source
YAML Source + parsed Tree
anything else Fallback (metadata + Open externally / Reveal / Copy path / optional Open as text)

How it works

  • Host half (dist/index.js) registers the /fileviewer authenticated RPC channel and exposes both a fileViewerContent provider registry and a fileViewerHost bounded service for trusted transport plugins. The viewer does not assume content lives in a local folder: other host plugins can register readers for locators such as artifact://run/report.json, object storage, generated output, or remote APIs. A boundary-checked ctx.fs provider is installed only when that service is available; on the DSH v0.1.2+ package graph it discovers workspace roots from ctx.workspaceRegistry, live session cwd values from ctx.sessions, and native open support from ctx.sessionController.
  • Client half (dist/client.js) provides the fileViewer service (ctx.get('fileViewer') → openFile(path, { line, renderer })) and renders the viewer as a conversation.view tab beside Chat and Trajectory. It opens from:
    • produced-file chips in the conversation (conversation.chat.turnTail, priority -1 — clicking an agent-generated file previews it in-app), or
    • the "浏览文件 / Browse files" entry added to each workspace row's "…" menu (see the compatibility patch below).
  • Workspace "…" menu patch (scripts/patch-workspace-menu.mjs): the workspace browser renders its row menu from a hardcoded list with no slot hook, so this script applies guarded, idempotent edits either to a deepseek-harness source checkout (verified through dsh-v0.1.5-rc.1) or to an installed @deepseek-ai/dsh-client-ui-workspace client bundle. It adds a browseFiles menu item (zh/en labels), an onSelect branch calling window.__dsfvBrowseWorkspace(workspaceId), and the dictionary keys. It aborts loudly on version drift and can be re-run safely after Harness updates (DSH_HARNESS_SOURCE=/path/to/deepseek-harness node scripts/patch-workspace-menu.mjs).
  • Large-file strategy: < 5 MB whole-file, 5–50 MB chunked streaming, > 50 MB head-only with explicit "Load more / Go to end" navigation. Range reads are capped (8 MiB per call) and text/CSV rows are windowed, so a 500 MB log never lands in browser memory.
  • Theming: styles use --dsw-alias-* tokens and match Harness's details panel proportions, so light/dark follow the Harness theme automatically.

Compatibility

dsh-file-viewer v0.3.4 and later support DSH v0.1.1-rc.2 plus the breaking v0.1.2+ package graph, verified through dsh-v0.1.5-rc.1. On rc2 the host RPC channel is registered with an explicit loopback authority and workspace discovery uses the legacy apiProxy fallback. On v0.1.2+ the viewer additionally uses ctx.workspaceRegistry, ctx.sessions, and ctx.sessionController. The client metadata depends only on packages shared by the supported graphs; their transitive dependencies provide the generation-specific runtime services. On v0.1.2+ the viewer also accepts the conversation.view focus request and treats its opaque focus value as a file locator.

DSH and React packages are host-provided optional peer dependencies for this plugin. This is required by v0.1.2+ profiles, which keep peer auto-install disabled (autoInstallPeers: false): installing the plugin must not add or require a second copy of the in-box platform packages. Because npm semver does not match later prereleases such as 0.1.5-rc.1 through >=0.1.2-alpha.1 <0.2.0, the peer ranges explicitly include >=0.1.5-rc.1 <0.2.0.

The Workspace row Browse entry remains a compatibility patch because upstream @deepseek-ai/dsh-client-ui-workspace has no third-party menu slot. Re-run scripts/patch-workspace-menu.mjs after updating Harness; the script is idempotent and aborts on version drift.

Public API

// client side, any web plugin:
const fileViewer = ctx.get('fileViewer')
fileViewer.openFile('/workspace/output/report.csv')
fileViewer.openFile('artifact://run-42/report.csv')
fileViewer.openFile('/workspace/src/main.ts', { line: 125 })
fileViewer.openFile('/workspace/data.bin', { renderer: 'text' }) // force a renderer

Provide content from another host plugin

在 GitHub 阅读完整 README →

DSH Plugins 是独立的 DeepSeek Harness 插件目录,与 DeepSeek 官方无关,也不代表官方背书。第三方插件未经安全审计,安装前请审查源码。

每周获取最新的 DeepSeek Harness 插件,绝不滥发。