dshbase

插件目录 / Developer / dsh-rich-editor

dsh-rich-editor

未验证 MarchLiu

✓ 持续维护 基于 8 个官方 DSH 包

查看 GitHub ↗ ← 返回插件目录

3Stars
0Forks
0未关闭 issue
语言
2026-08-24最近推送
跨平台平台

功能简介

Third-party dsh web plugin: a rich Markdown notebook for the composer region — tool-row toggle plus a CodeMirror editor card with Codex-style list editing

我们的评价
未验证 — 尚未实测

Third-party dsh web plugin: a rich Markdown notebook for the composer region — tool-row toggle plus a CodeMirror editor card with Codex-style list editing 尚未验证——请自行安装测试。

「未验证」表示我们的自动化 CI 尚未安装过该插件。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。

你是插件作者? 想拿到「已验证」标签——提交你自己的验证证据(截图、日志或短视频),我们审核通过后即改为「已验证」。

提交验证证据 ↗

README

@mars.liu/dsh-rich-editor

English | 中文

Markdown notebook open above the plain composer

Third-party DeepSeek Harness web plugin: a rich Markdown notebook for the composer region. Its browser half contributes two entries to the composer region that dsh-client-ui-conversation owns: a tool-row toggle (conversation.input.left) and an editor card in the composer context stack (conversation.input.dock). Both entries share one per-session store handle, so the in-progress draft survives closing and reopening the panel, surface remounts, and — because the engine scopes session stores by session id — each session keeps its own notebook.

The editor is a CodeMirror 6 instance over the Markdown language: syntax highlighting for the draft (GFM tables included), native undo/redo and selection, and Enter-key list editing in the Codex style — pressing Enter on a non-empty list item opens the next item (ordered markers increment 1.2., checkbox items reopen unchecked, indentation is preserved, and a mid-line caret splits the item), while Enter on an empty item drops the marker and returns the line to plain-text editing. Enter on a non-list line falls through to a plain newline. Mod+Enter submits.

Enter-key list editing: next item, unchecked checkbox, marker dropped

Submission rides the scope-addressed conversation service's send verb — the same path the plain composer's submit rides — so adjudication, queueing, and prompt-error reporting behave exactly like a typed prompt. A failed send surfaces on the session's composer notice channel and the panel keeps its draft.

The notebook and the native composer are two editing surfaces over one draft: opening the panel adopts whatever the native editor already holds (an empty composer instead receives the notebook's kept draft); while the panel is open, every edit on either side mirrors live to the other — notebook edits ride the session input facade's single setDraft write path, native edits flow back through a subscription on the facade's InputState store applied as a minimal-diff splice (an equality guard breaks the echo loop and preserves a caret outside the edited range); closing leaves the final text in the native editor, and a successful submit clears both surfaces.

How the pieces connect: two composer slots, one session store, one send verb

Install

dsh plugin --profile web add @mars.liu/dsh-rich-editor

The package carries its own bundle patch (cordis.patch.yml adds the ui-rich-editor row); list the bundle in the profile's dsh.profile.bundles if you compose profiles by hand. From a checkout:

pnpm install && pnpm run build && pnpm test

Requires the dsh family at >=0.0.1-rc.1 (published on npm) and a dsh web composition that mounts dsh-client-ui-conversation.

Development notes

The npm 0.0.1-rc.1 dsh snapshot ships browser loader bundles only — its node halves export almost nothing, and several pre-rename dependency names (dsh-compact, dsh-user-interaction, dsh-type-meta, dsh-client-ui-slash) were never published. This repo works around both:

  • package.json > overrides points the missing names at empty stubs under vendor/stubs/ (nothing in this plugin's surface imports them);
  • vitest.config.ts aliases @deepseek-ai/dsh-client-runtime/client and .../dsh-client-locale/client onto a local harness checkout's TypeScript sources (DSH_CHECKOUT, default ../deepseek-harness) and inlines all @deepseek-ai/dsh-client-* packages, mirroring how in-repo dsh tests reach client APIs.

Drop both workarounds when the dsh family republishes a complete, installable closure.

Known Limitations and Deferred Work

  • Ordered renumbering is deferred — continuing an ordered list increments the new item's marker, but editing or removing earlier items does not renumber the following ones.
  • No / and @ trigger integration yet — the notebook does not participate in the slash-command and file-mention pipeline; those gestures belong to the plain composer below it.
  • Draft is session-lifetime only — the store keeps the draft across remounts and tab switches, but a full page reload discards it (no persistence key).
  • No attachment intake — pasting or dropping images into the notebook is not wired to the session's image attachment path.
  • The browser bundle inlines ~268 kB gzip of CodeMirror@codemirror/lang-markdown statically depends on @codemirror/lang-html (which pulls the JavaScript and CSS parsers) even with embedded code highlighting off (codeLanguages: []), and the client bundler inlines the whole chain; a deferred trim would split the editor mount behind a dynamic import.

License

MIT

安装

🧩 让 Agent 自动装(推荐)

装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:

dsh plugin add dshbase-catalog

然后对 agent 说「帮我装 dsh-rich-editor」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包

该插件是 GitHub 源码(未发 npm)——直接从仓库装:

Web profile:

dsh plugin --profile web add github:MarchLiu/dsh-rich-editor

Headless(CLI)profile:

dsh plugin --profile headless add github:MarchLiu/dsh-rich-editor

实测报告

尚未 L3 验证——若已跑过,见下方失败备注。

状态:pending · 最近测试 2026-08-25
备注:验证: install-fail 浏览全部待验证失败 →
安全:尚未扫描——我们的每日静态扫描将很快覆盖它。

分享徽章

Developer 里更多

浏览全部 7789 个插件 →