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

@vendoai/actions

v0.52.1

Published

Every API becomes agent tools, executed as the signed-in user: sync-as-build-step extraction (OpenAPI + route-scan), .vendo tool formats, connectors, and the ActionsRegistry runtime.

Readme

@vendoai/actions

Turns host APIs into agent tools that execute as the signed-in user. It owns deterministic OpenAPI and route extraction, .vendo tool metadata, connectors, and the runtime action registry.

Read Connect API tools and Tools and safety.

Design notes

  • Furnished pin capture is bounded and source-owned. Sync discovers <Remixable> wrappers in host source, resolves the single wrapped child through its static import, and captures under the child's exported identifier (<Remixable review> writes review: true into the baseline). It follows JavaScript/TypeScript imports from the captured component for two local-import hops, applies the primary capture's realpath/in-root check to every file, and emits a named warning for unresolved, refused, or beyond-depth imports.
  • The style snapshot is deliberately narrow. Sync captures direct local .css imports from canonical app roots only: app/layout.*, app/root.*, pages/_app.*, and their src/ variants. It does not follow CSS @import, package CSS, or component-local stylesheet imports; the latter are named in sync warnings so rehearsal gaps stay visible.
  • Static pin misses are loud, never silent. Sync resolves default, named/aliased, and namespace imports through named barrel re-export chains, confined to the realpathed host root plus any configured extra source roots. A wrapped child that is not a single statically-importable component is a hard error: the report carries a remixableErrors entry naming the file and line, and the CLI exits non-zero. A wrapper whose Remixable cannot be traced to @vendoai/ui is reported instead as pins.unattributed — naming the file, line, specifier, and both fixes — and holds baseline pruning for that run. .vendo/overrides.json remix.ignoreSlots skips capture for a resolvable slot; remix.sources adds source roots outside the project root.
  • A host's own re-export shim is followed, not name-matched. Remixable imported from one of the host's own modules is traced through its exports (export … from, export *, import then export, aliases, namespaces, tsconfig paths) back to @vendoai/ui. A chain that never reaches it is never captured, so a same-named component from elsewhere stays out.