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

dsh-slides

v0.2.0

Published

Turn a structured outline into a presentation for DeepSeek Harness (dsh): a self-contained HTML deck that presents offline with speaker notes and prints to PDF, plus optional editable .pptx export. Five committed themes.

Readme

Slides for DeepSeek Harness

English | 中文

npm CI dsh-plugin license

Give the agent a make_slides tool and it writes a talk to one self-contained HTML file — opens in any browser, presents fullscreen, keeps your speaker notes off the screen, and prints to PDF with Ctrl+P. Ask for formats: ["html", "pptx"] and it writes an editable PowerPoint file alongside it, speaker notes included.

The file loads nothing at presentation time. No CDN, no webfont, no image host. A deck that needs the network is a deck that can fail in the room you are presenting in.

A slide rendered in the ink theme

Install

dsh plugin --profile web add dsh-slides
dsh web

Then just ask: "turn these results into a 10-minute talk".

What the agent gets

One tool, make_slides, taking a deck as structured data rather than markdown the user has to convert:

| Layout | Holds | |---|---| | title | Deck title, subtitle, presenter. Generated for you from the deck fields — do not write one | | section | A divider between parts of the talk | | bullets | A claim as the heading, points beneath it, optionally a figure alongside | | image | A figure with a caption, filling the slide | | quote | A pulled quote with an attribution |

Omit layout and it is inferred from the fields you filled in.

Every slide takes notes — the speaker notes. They never appear on the slide; the presenter reveals them with S during the talk. This is the point of the tool: the claim goes on the slide, the talking goes in the notes, and the agent is told so in its guidance.

Bullets support **bold**, *italic* and `code`. Everything is escaped before formatting is applied, so content can never inject markup into the deck.

Formats

formats defaults to ["html"]. Add "pptx" when the deck has to be edited by a co-author or uploaded to a conference system:

| | HTML | PPTX | |---|---|---| | Presents offline | Yes, nothing is fetched | Yes | | Speaker notes | S during the talk | In PowerPoint's notes pane | | Prints to PDF | Ctrl+P, one slide per page | Through PowerPoint | | Editable by a co-author | Not really | Yes | | Images | Embed as data: URIs to stay self-contained | data: URIs are embedded; URLs stay links |

Both come from the same deck and the same inline-markup parse, so they cannot drift apart.

Presenting

| Key | | |---|---| | Space | Next / previous slide | | S | Show and hide speaker notes | | F | Fullscreen | | Home End | First / last slide | | Ctrl+P | Print — one slide per page, chrome hidden, straight to PDF |

Clicking works too: the left third goes back, the rest goes forward. The URL carries the slide number, so a link can point at a specific slide.

Themes

Five finished looks rather than a knob per property. Pick one; do not assemble one.

| Theme | | |---|---| | plain | White ground, sans-serif, thin accent rules. The default; disappears behind the content | | ink | Warm paper ground with a serif face. Reads like a printed paper; suits a seminar or a defense | | midnight | Deep blue ground, light type. Holds up in a bright room where a white deck washes out | | slate | Neutral greys, no colour accent. For decks whose figures carry all the colour | | sunrise | Off-white ground with a warm accent. A lighter register for a talk meant to persuade |

Font stacks name system faces only, for the same reason the deck loads nothing else.

Configuration

The bundle inserts one row (id: slides). Override it from your profile's cordis.patch.yml (a patch replaces the whole config, so restate every key you keep):

- id: slides
  config:
    outputDir: slides/       # where decks are written, relative to the workspace
    defaultTheme: plain      # plain | ink | midnight | slate | sunrise
    promptGuidance: true     # register the deck-writing guidance
    promptOrder: 150

Notes

  • Decks are written through ctx.fs, so a sandboxing filesystem backend fences the write like any other tool. The tool is therefore registered only where a filesystem provider is composed — with none, neither the tool nor its guidance appears, instead of offering a call that always fails.
  • ctx.fs exposes text writes only, and a sandboxing backend fences exactly those. So the pptx write asks for the path through the sanctioned writeText first: the backend applies its real policy and refuses with FS_SANDBOX_DENIED before any bytes exist, and only a path it allowed is then filled in. Resolving a path and writing to it directly would go around the fence, because resolve is not one of the fenced operations.
  • Images are yours to supply. A data: URI keeps the deck self-contained; an https URL works but makes the deck depend on that host at presentation time.
  • This package renders decks and knows nothing about where the content came from. Packages that do — dsh-paper-slides for academic talks — compose beside it and drive make_slides.

Known limitations

  • No incremental reveal. A slide appears whole. Builds and transitions are the kind of thing that reads as generated when an agent picks them.
  • The pptx is a clean deck, not a designed one. It carries your content, theme colours, fonts, bullets and notes into PowerPoint; it does not reproduce the HTML deck pixel for pixel, and it uses no master slides or animations.

License

MIT