Showing the last saved plugin snapshot.
vecnode/dsh-pdf
“PDF as a surface of the pack (row `dsh-pdf`, tab kind `pdf` plus the `pdfs` index page).”
PDF as a surface of the pack (row `dsh-pdf`, tab kind `pdf` plus the `pdfs` index page): the agent can actually READ and understand PDFs, SCAN the ones that are pictures of text, and you can read them properly in the right bar. FIVE tools - pdf_info, pdf_read, pdf_find, pdf_render, pdf_scan - are backed by a VENDORED pdf.js 6.3.289 (the same engine and version the shipped preview already uses) with its cMaps, standard fonts AND wasm image decoders, run in a CHILD process with `isEvalSupported:false`, a heap cap and a kill, so a corrupt or hostile document is a reported failure and never a wedged host. Extraction is cached per page under `$DSH_HOME/dsh-pdf/artifacts/<sha256>`, so reading, searching and re-reading a document costs one parse. `pdf_read` offers plain reading order AND a geometric layout reconstruction (lines grouped by baseline, columns and label/value gaps kept), which is what makes an invoice, a statement or a two-column paper legible. `pdf_scan` finds the pages that carry no text layer at all - where recognition is the only way to read them - draws them with the host's own rasterizer (poppler pdftoppm, mutool or Ghostscript) and recognizes them with tesseract, caching each result under every input that can change it (page, language, resolution, segmentation mode). It refuses to OCR a page that already has real text unless asked, and with no engine installed it says which one to install in as many words. The tab type replaces the shipped bare PDF renderer for `*.pdf`: fit-width continuous pages, page navigation, a zoom ladder, a selectable text layer and in-document search; a page that has not been drawn yet reserves the document's OWN page box at the current scale - never a viewport unit, since this reader is one pane of a dock - so the page column can never grow wider than the pane and the fit stays centred while the panel is resized; a THUMBNAIL RAIL and the document's own BOOKMARK OUTLINE in a side panel; every page that has no text layer announces it and offers a one-click scan whose recognized text appears under the page, labelled as a transcription. A second page type (`pdfs`, its own Start-page entry) lists every PDF in the workspace. Read-only: nothing this plugin writes can reach a PDF. No core patches, no fork, no npm dependencies, no network. Alpha.
