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

@olaink/pi-plugin

v0.1.2

Published

Receive encrypted Ola Ink Supernote notes in Pi

Readme

Ola Ink Pi plugin

Receives complete .note files sent from a paired Supernote through the Ola Ink encrypted relay. Pi decrypts locally, converts the note with supernote-typescript, saves a searchable PDF, and sends rendered page images into the conversation for the agent to inspect.

Install

Install the Pi package, then start or restart Pi:

pi install npm:@olaink/pi-plugin

Pi installs the plugin's runtime dependencies and loads its /olaink command automatically. Only install packages you trust: a Pi plugin runs with the same permissions as Pi.

Develop from this repository

After npm install at the repository root, install the local package:

pi install ./packages/pi-plugin

For a one-off development run, you can instead use pi --extension ./packages/pi-plugin/index.ts.

Pair

  1. In the authenticated Ola Ink dashboard, choose Pair a device and create a pairing code. The code is single-use and expires after 10 minutes.

  2. In Pi, run:

    /olaink pair 1234-5678

    For a non-production service, pass its origin as the second argument:

    /olaink pair 1234-5678 https://relay.example.test
  3. On Supernote, select Pi's device from the recipient directory when sending the note. In Pi, run /olaink poll to fetch it and add page images to the current conversation.

Other commands: /olaink status reports the pairing and current allowlist.

Restrict senders (/olaink allow)

Anyone who knows your Ola Ink username can address a note to this device by default — the same as an email address. If you only expect notes from your own Supernote (or a short list of trusted accounts), restrict who this device will accept from:

/olaink allow add yourusername
  • /olaink allow or /olaink allow list — show the current restriction.
  • /olaink allow add USERNAME — add one sender to the allowlist.
  • /olaink allow remove USERNAME — remove one sender.
  • /olaink allow USERNAME [USERNAME...] — replace the allowlist wholesale.
  • /olaink allow clear — remove the restriction (accept from anyone again).

Usernames are resolved to the sender's stable account ID at the time you run /olaink allow, using the same directory lookup a sender uses to address a note; the resolved ID, not the username string, is what is actually checked (Ola Ink usernames are never reused once retired, so this stays correct even if you rename your own account later). Once configured, an empty allowlist blocks every sender — removing your only trusted username does not reopen the inbox to everyone. /olaink allow clear is the explicit way back to accepting from anyone.

Filtering happens on /olaink poll, before decryption: fromUserId is authenticated by the relay itself (it only accepts a send whose fromUserId matches the sending device's own account), so a disallowed record is dropped without ever being decrypted or parsed. Blocked records are still consumed (acknowledged) so a disallowed sender cannot pile up an inbox this device will never surface, and each poll reports how many notes were blocked.

Local security and behavior

  • Device identity, session capability, and the sender allowlist are written to ~/.pi/agent/olaink/device.json with mode 0600. The PKCS#8 private key is kept locally; the relay receives only its public key and opaque encrypted records. Treat the session token and state file as credentials.
  • Polling occurs only on command. A record is acknowledged only after decryption, PDF conversion, and saving succeed (rejected/allowlist-blocked records are acknowledged immediately instead). A conversion failure leaves delivery available for retry.
  • PDFs are saved in ~/.pi/agent/olaink/ and page PNGs are sent to the model as user-message image content. The extension currently limits notes to 16 MiB and 20 pages to bound memory and model input.
  • The PDF and images are plaintext local outputs. Protect and delete them according to your normal local data-handling policy. Pairing another device does not expose private keys to Ola Ink.

Publishing a release

The npm package is published from a signed GitHub Actions run. Configure npm trusted publishing for @olaink/pi-plugin to trust the publish-pi-plugin.yml workflow in philips/olaink, then bump the package version and push a matching pi-plugin-v<version> tag. The workflow runs the repository checks, verifies the package tarball, and publishes with npm provenance.