DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Ipynb Preview — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
I

dsh-ipynb-preview

Ipynb Preview

在 DSH 文档预览中渲染 Jupyter .ipynb 笔记本,支持语法高亮、LaTeX 数学公式和可缩放图像,而不是显示原始 JSON

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:WuShichao/dsh-ipynb-preview#4c308d8fe7fed6c38f9f64c0fb1d129637baf48e
README兼容性版本

兼容性与来源证明

Ipynb Preview 以 dsh-ipynb-preview 发布,当前版本为 0.2.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/30

版本

0.2.0stable
2026/9/30
0.1.0stable
2026/9/30

相关插件

正在加载相关插件…

最新版
0.2.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/9/30
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板Tui@deepseek-harness-tui/dsh-tui用于 DeepSeek Harness 智能体、会话和工具的交互式终端界面。

README

dsh-ipynb-preview

A DeepSeek Harness plugin that renders Jupyter notebooks in the document preview pane: syntax-highlighted code, real LaTeX, and zoomable figures — instead of raw JSON.

Without it, opening a .ipynb in DSH shows its JSON source. With it, the file opens as a notebook.

FeatureNotes
Syntax highlightingPython, JavaScript/TypeScript, JSON, Bash, and INI, with per-language grammars
LaTeX mathVendored KaTeX, so it works offline; inline $…$ and display $$…$$, including inside tables and lists
Markdown subsetHeadings, lists, tables with column alignment, blockquotes, task lists, fenced code, links, bold and italic, code spans
Figure zoomClick any output figure to open it, then scroll or + / − to zoom continuously, drag to pan, 0 to fit
Save figuresNames each figure after the notebook, e.g. sample-notebook-cell3-out1.png
OutputsStreams, display_data, execute_result, and error tracebacks with ANSI escapes stripped

Everything is self-contained: the KaTeX engine and its web fonts are inlined into the client bundle, so no request leaves your machine.

Install

dsh plugin --profile <your-profile> add dsh-ipynb-preview

Then restart DSH. The plugin is a client-side renderer, so it needs a restart rather than a page refresh: the shell computes its client bundle revision at startup.

To install from a checkout or a git URL instead:

dsh plugin --profile <your-profile> add ./dsh-ipynb-preview
dsh plugin --profile <your-profile> add github:WuShichao/dsh-ipynb-preview

The git form makes pnpm ask for permission to run this package's prepare script, because pnpm >= 10 refuses a git dependency's install-time script until it is allowlisted. The built lib/client.js is committed, and the npm package ships it too, so neither a tarball nor a registry install asks for anything.

How it works

DSH discovers the package through the profile's bundle list, reads dsh.client from this manifest, and serves lib/client.js to the browser as part of the client roster. That bundle registers a document-preview renderer for the ipynb extension:

lib/index.js           host half; deliberately empty, the plugin is browser-only
lib/client.template.js the editable client source, with two KaTeX placeholders
lib/client.js          the generated artifact the shell serves
cordis.patch.yml       the bundle layer that inserts the plugin row
tools/build-client.mjs generates lib/client.js from the template

lib/client.js is generated, not hand-edited. Change lib/client.template.js and run npm run build.

Development

pnpm install    # installs KaTeX (build), React (tests)
pnpm run build  # regenerate lib/client.js
pnpm test       # build, then the verifier, the bundle lint, and the mount harness

The repository ships a pnpm-lock.yaml, and pnpm is what the DSH CLI itself uses to install plugins, so CI installs with pnpm install --frozen-lockfile. npm and yarn also work: every script is a plain node invocation rather than a chained npm run, so no script depends on which package manager started it.

pnpm test runs three suites, all offline:

  • tests/verify.mjs — materializes the bundle the way the shell's module loader does, then checks the manifest contract, the registrations, the highlighter, the math renderer, the Markdown subset, the zoom arithmetic, the stylesheet, and a full render of the fixture notebook. Around 170 assertions.
  • tests/lint-bundle.mjs — sweeps both the template and the built bundle for identifiers that are referenced but never declared. A free variable makes the factory throw while the shell materializes it, and the whole client roster then fails to load — a blank window that node --check cannot detect.
  • tests/mount.mjs — mounts the plugin against a DOM stub so effects and event wiring actually run, and asserts the notebook tree survives opening the lightbox.

The fixture notebook is generated by tests/make-fixture.mjs, and the assertions read their expected counts from that fixture, so the input and the expectation cannot drift apart.

Interaction testing in a real browser

React's synthetic event system does not work against a hand-written DOM stub, so the controls' click handlers are verified in a real browser instead:

node tests/make-page.mjs            # writes test-page.html at the repo root
node tests/make-page.mjs out.html   # or choose the output path

Open the page, click Open the lightbox, and press every control; each interaction, the zoom readout, and any error is written to the log at the top of the page. Append ?auto=1 to the URL and the page drives itself, which is how a headless run reads the result back:

msedge --headless=new --virtual-time-budget=15000 --dump-dom \
  "file:///path/to/test-page.html?auto=1"

That page also hit-tests every control with document.elementFromPoint, which is how a stacking-order bug was found: a fixed application header with a higher z-index than the lightbox covered the middle of the toolbar, so only its edges responded to a click.

Requirements

  • Node 18 or newer to build and test.
  • React is not a dependency: the shell supplies it from its own frozen module table. It is a dev dependency only, for the tests.

Notes for plugin authors

Two things this plugin learned the hard way, both now covered by assertions:

  • A client bundle is materialized inside the shell's module loader. If the factory throws, the row has no exports and the whole roster fails — which looks like a blank window rather than a plugin error. Keep the factory free of undeclared identifiers.
  • A full-screen overlay needs a z-index above every host layer. 9999 is not enough: application chrome is often a fixed header with its own stacking context, and it will silently swallow clicks aimed at your controls.

License

MIT — see LICENSE. KaTeX is bundled under its own MIT license; see THIRD_PARTY_NOTICES.md.

Published to npm by @nightwingng.