npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

paper-review

v2.1.0

Published

A paper-review panel for the DeepSeek Harness: converts PDF papers into structured, selectable text with figure and display-equation rendering, a floating ask-about-the-selection dialog, and per-project paper stores under a Paper workspace.

Downloads

448

Readme

paper-review (DeepSeek Harness plugin)

All PDF conversion lives in the separate paper-parser package; this package contains the Harness host/client halves only.

A paper-review panel for the DeepSeek Harness: upload a PDF paper and read it as structured, selectable text beside the conversation, with figures and display equations rendered visually.

Features

  • PDF → structured text (runs on the Harness host, via poppler):
    • two-column layout reconstruction (gutter detection + full-width line reassembly)
    • headings (size + all-caps normalization) and run-in heading splitting
    • tables (geometric column detection, wrapped-cell continuation)
    • sub/superscripts, dot-leader table of contents
    • scanned-PDF fallback to page images
  • Figures and display equations rendered as images (pdftoppm crops + pdfimages raster extraction), with equation text kept as hidden spans so it stays searchable.
  • Right-side reader panel: real third column when space allows (the harness details column), auto sidebar-collapse to make room, floating fallback for narrow windows, slim tab when collapsed.
  • Ask dialog: select text → a small dialog appears → type a question ("explain this", "how does this relate to…") → the question plus the selection, its surrounding context, and the abstract are sent to the model.
  • Projects: Create project materializes the paper (paper.pdf, paper.md, paper.html, figures, README with title/abstract) into a Paper workspace, opens a session there, and asks the agent to load the paper — each project keeps its own paper, so multiple papers coexist.

Requirements

  • DeepSeek Harness (dsh) installed.
  • poppler CLI tools on PATH: pdftotext, pdftoppm, pdfimages.
    • macOS: brew install poppler
    • Debian/Ubuntu: sudo apt-get install poppler-utils

Install

From npm (recommended)

dsh plugin --profile readPaper add @deepseek-ai/dsh-web-app paper-review
# then start the harness:
dsh --profile readPaper

dsh plugin installs the packages, then reconciles dsh.profile.bundles — packages that declare dsh.bundle join the profile's layer stack automatically.

Why @deepseek-ai/dsh-web-app is included: a profile created on a machine that has never used it before is seeded with only @deepseek-ai/dsh-base (the web surface bundle is not a default for unknown profile names). Adding @deepseek-ai/dsh-web-app explicitly is what gives the profile the browser GUI this plugin's panel renders into. On a machine where a readPaper profile already exists with the web app, plain dsh plugin --profile readPaper add paper-review is enough.

Prerequisites

  • poppler CLI tools on PATH (pdftotext, pdftoppm, pdfimages) — see Requirements.
  • pnpm for the dsh plugin command (it forwards to pnpm). If pnpm is missing: corepack enable pnpm or npm i -g pnpm.

Manual install (no npm)

  1. Copy this directory into ~/.dsh/profiles/readPaper/packages/paper-review.
  2. Make it resolvable (no pnpm needed):
    mkdir -p ~/.dsh/profiles/readPaper/node_modules
    ln -s ../packages/paper-review ~/.dsh/profiles/readPaper/node_modules/paper-review
  3. Add "paper-review" to dsh.profile.bundles in ~/.dsh/profiles/readPaper/package.json.
  4. dsh --profile readPaper

Usage

  • Paper tab on the right edge opens the reader column.
  • Load PDF… uploads (drag-and-drop onto the reader also works).
  • Select text → the ask dialog appears → type a question, press Enter.
  • Create project writes the paper into the Paper workspace and opens a session with the paper loaded as context.
  • The converted documents are stored under ~/.dsh/paper-review/ and survive restarts.

How it works

  • lib/index.js (host half): HTTP routes (/paper-review/…) for upload, conversion, documents, figures, projects, and per-session stores. The converter extracts word geometry with pdftotext -bbox, rebuilds columns and lines, classifies blocks (headings, tables, ToC, math), and rasterizes figure/equation regions with pdftoppm.
  • lib/client.js (client half): the panel, tab, ask dialog, and project flow. Ships as a hand-written __ModuleLoader__ CJS bundle — no build step.
  • cordis.patch.yml: the bundle patch that inserts the plugin row.

Development

  • npm run check — syntax checks.
  • npm run eval — downloads 10 recent astro-ph papers with their arXiv HTML versions, converts them, and scores text coverage against the references (PAPERS=2 npm run eval for a quick run). The corpus lands in eval/run/ (gitignored).

Limitations

  • Conversion fidelity depends on the PDF's text layer (scanned papers render as page images).
  • Display equations are images (their text is preserved as hidden spans); inline math is reconstructed as sub/superscript text.
  • Content that exists only as PDF annotations (e.g., giant author lists in some journals) cannot be extracted.
  • The plugin's HTTP routes follow the harness's localhost trust model.