dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
A persistent DSH Web UI plugin that adds a full-page multi-format reader to the sidebar and an AI explanation rail for selected text. It also includes a separate paper library with paragraph/whole-paper translation and bilingual comparison.
dsh-epub-reader-2.4.4.tgz from the
latest release.Chinese step-by-step guide: INSTALL-zh.md. Publishing and npm instructions: PUBLISHING.md.
D:\BookLib on this deployment), plus any extra
libraryDirs, for supported book files.archiveDir first. Identical files are reused;
a name collision gets a (2) suffix rather than overwriting anything.lang=zh), Chinese Wikisource, Chinese Wikibooks,
and Standard Ebooks, then saves the chosen book (EPUB, or an HTML book for
the Wikimedia sources) into the archive shelf. Simplified Chinese queries are
also tried as traditional Chinese for the Chinese catalogs. Results stream
into the page one source at a time; slower sources keep searching while the
first results are already usable. The search store lives outside the Library
component, so opening a book or switching Harness pages does not abort the
stream; returning restores the query and results, and the Host keeps result
ids downloadable for 30 minutes. Only
public-domain / openly licensed catalogs are used; DRM and unauthorized book
sources are not supported. Choose which catalogs to query with Choose
sources; the selected source homepages are shown as small links. A custom
OPDS search URL can be added, but only entries that declare an
open-access EPUB acquisition link are accepted. Several custom OPDS sources
can be added with the + button. The built-in Chinese catalogs cover
traditional Chinese Gutenberg titles and Wikisource; other catalogs are
mostly English..epub-reader/trash) from the book-card context menu. Papers can be deleted
from their card context menu (two-step confirmation); a source paper also
removes its Chinese translation paper and moves the PDF/translation file to
the paper trash. Paper copies live in
.epub-reader/papers, separate from the book shelf. The compare toggle sits
in the paper reader header and can be hidden again; each
translation box is resizable from its bottom edge, auto-fits its text on
first open, remembers its height/collapsed state, and can be collapsed
individually or all at once. Translation text supports AI explanation.Ctrl/Cmd+F opens a full-book search across every
chapter, including PDF/HTML/DOCX books. Results show chapter, occurrence and
a text snippet; clicking one jumps to the chapter and highlights every match.
The reader toolbar shows the shortcut next to the search button. Simplified
Chinese queries also match traditional text (陈文龙 finds 陳文龍).Ctrl/Cmd+Shift+E explains the current selection,
Alt+← / Alt+→ move between chapters, Esc closes search/rail.| Format | Support |
|---|---|
.epub | Full spine, chapters, TOC, images, cover |
.pdf | Text-layer extraction, 8 pages per chapter; scanned PDFs need OCR first |
.txt / .text | Plain text, automatically chunked |
.md / .markdown | Headings, paragraphs, lists, quotes, code blocks |
.html / .htm / .xhtml | Sanitized HTML body |
.fb2 | FictionBook XML |
.docx | Word paragraphs and Heading 1–3 chapters |
.mobi / .azw3 / .azw | Convert to EPUB or PDF first (for example with Calibre) |
PDF extraction uses a vendored PDF.js runtime under vendor/pdfjs/; the package
has no npm runtime dependency for it.
Edit the installed row's config in the profile patch (or the plugin's
cordis.patch.yml before installing):
- id: epub-reader
name: '@local/dsh-epub-reader'
config:
# Where outside books are copied and what the shelf scans by default.
# Empty = the first registered workspace (D:\BookLib here), then cwd.
archiveDir: D:\BookLib
# Extra folders to scan, if any. Absolute paths are allowed.
libraryDirs:
- D:\Books
# Optional; otherwise the Host's default model is used.
# Example: explainProvider: deepseek-account
# explainModel: deepseek-flash
explainProvider: deepseek-account
explainModel: deepseek-flash
# Off by default: the API answers only loopback browser requests.
allowRemote: false
The Host routes are mounted under /api/epub-reader. They accept only
same-origin browser requests, expose only .epub files found under a configured
shelf root, copy external files into the archive before parsing, and stream
explanations over SSE.
localStorage.PDF_NO_TEXT
instead of showing blank pages. Run OCR or convert it to a text PDF first.llm Host service; no API key is read by the
plugin itself.<archiveDir>/.epub-reader/annotations.json
and keyed by the EPUB content fingerprint, so the same book keeps its records
even at a different path. Copy that folder with the EPUB when moving a shelf
to another machine if the annotations should travel with it.SEARCH_EXPIRED and the UI asks you to search again.open-access; it is not a generic downloader.gutenberg.org / standardebooks.org hosts. Large books can take a while.Plugin code is released under the MIT License. The bundled PDF.js
runtime keeps its own Apache-2.0 license under vendor/pdfjs/LICENSE; bundled
fonts keep the licenses in vendor/pdfjs/standard_fonts/.