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-fish/hub

v0.4.2

Published

Search dsh.fish and install any harness artifact from inside your agent, authenticated with your hub account.

Readme

@dsh-fish/hub

Search dsh.fish and install any harness artifact from inside your agent.

Install

dsh plugin --profile <profile> add @dsh-fish/hub

<profile> is whichever profile the harness boots — web for the stock launcher, local-dsh for Local DSH, whose bundled launcher is the one to run:

dsh plugin --profile local-dsh add @dsh-fish/hub

The published package ships lib/ already built, so this install runs no build script and needs no allowBuilds entry.

@deepseek-ai/cordis and @deepseek-ai/dsh-tools are supplied by the harness at runtime. They are optional peers so pnpm does not warn when the profile tree cannot see the host copies — a WARN about missing peers is not a failed install.

A git install is a development fallback and must name the subdirectory — the repository root is a private workspace, not this plugin:

dsh plugin --profile <profile> add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub

That checkout has no lib/, so it builds on install: pnpm ≥10 asks you to allow the build script, which is permission to execute this package's code on your machine outside the agent's sandbox.

Migrating from dsh-hub

Earlier versions installed from the repository root under the name dsh-hub:

dsh plugin --profile <profile> remove dsh-hub
dsh plugin --profile <profile> add @dsh-fish/hub

Installs already recorded in $DSH_HOME/.dsh-fish-lock.json survive the rename.

Tools

| Tool | What it does | |---|---| | hub_search | Search the registry by text and artifact kind. | | hub_show | One artifact in detail, including exactly what installing it would do. | | hub_install | Apply the install plan on this machine. | | hub_list | Artifacts this machine already installed through the hub. | | hub_remove | Reverse a recorded install (files, patch rows, packages). | | hub_update | Re-apply the current plan for an installed artifact. | | hub_account | Sign in via the OAuth device flow, check status, or sign out. | | hub_reviews | Community ratings: the site's 1–5 scale, average, distribution, comments. | | hub_rate | Rate an installed artifact 1–5 stars, optionally with a public comment. |

Settings section

In a harness that serves a browser client, this bundle also adds a dsh.fish section to Settings, with Browse, Installed and Account. It is a second surface over the same installer, not a second installer: the browser half calls same-origin routes under /api/dsh-fish, and those call the very PlanInstaller the tools use, writing the same $DSH_HOME/.dsh-fish-lock.json. So Installed lists exactly what hub_list reports, and an artifact removed there disappears from the tools.

Browse cards install in place: the button runs /install immediately and shows a spinner until the lockfile updates. An already-installed artifact shows Uninstall instead. Catalog search and the README modal send the host locale so hub i18n matches the harness. Clicking a card opens that README.

Account signs in with the same device flow: the section shows the user code and the verification URL as an ordinary external link. Once signed in, it shows the account avatar and a tooltip from /me. The device code and the resulting token never reach the browser, and a desktop shell can hand that https link to the system browser rather than navigating its own WebView.

The heading and the Account tab both offer Check for updates. That hits npm for the latest @dsh-fish/hub and, when a newer version exists, runs dsh plugin add @dsh-fish/hub on this profile so the next restart loads it.

A profile that serves no client still loads the tools — the HTTP surface is registered only when the composition has a web server.

Ratings and reviews

The site runs a 1–5 star scale (1 = broken or misleading, 5 = excellent) that the artifact pages render read-only. hub_reviews reads it anonymously; hub_rate writes it and needs sign-in. A rating always speaks for the signed-in account, and rating again overwrites the earlier one.

The tools carry their own rules in their descriptions, which the agent reads: rate only what this machine actually installed and used, from firsthand evidence, never fabricate experience, and tell the user when a rating is left. After an install or usage that clearly worked or failed, the agent is expected to offer a rating — the decision and the stars stay the user's call.

Signing in

Reading the catalog needs no account. Signing in attributes installs to you and is required for anything account-shaped later.

hub_account with action: "login" starts an RFC 8628 device grant: the plugin requests a code, shows you a URL, and polls until you approve in a browser. The token is written to $DSH_HOME/.dsh-fish-token.json with mode 0600 and is never logged.

A device token is deliberately weaker than a browser session — it can read the catalog, resolve install plans and rate artifacts as you, but it cannot submit or claim artifacts.

Safety

hub_install refuses any plan whose package step needs a build allowance unless the caller passes allowBuildScripts: true. That step runs the package's own code at install time, outside the agent sandbox, so the agent must not grant it on your behalf — it has to come back and ask.

File-writing steps are fenced to the resolved $DSH_HOME; a plan that tries to escape it is refused.

Successful installs are recorded in $DSH_HOME/.dsh-fish-lock.json, which is what hub_list, hub_remove and hub_update (and the matching CLI commands) read. The same lockfile is shared with @dsh-fish/cli.

Configuration

- id: hub
  name: '@dsh-fish/hub'
  config:
    baseUrl: https://dsh.fish   # a self-hosted deployment only changes this
    targetProfile: current      # $DSH_PROFILE, else --profile, else web

License

MIT