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

@devicerail/yaml-adapter

v0.3.8

Published

Optional bounded YAML plan adapter for DeviceRail public RPC calls

Readme

@devicerail/yaml-adapter

Optional DR-045 compatibility adapter. It parses a deliberately bounded, JSON-shaped YAML plan and compiles it into sequential calls on an already owned, already-negotiated @devicerail/client instance.

The adapter is not a workflow engine. It has no Driver, daemon, Rust, AI, prompt, retry, branching, interpolation, or filesystem authority. YAML never enters the DeviceRail kernel.

version: devicerail/v1
steps:
  - id: select
    method: device.select
    params:
      deviceId: android-emulator-5554
  - id: connect
    method: device.connect
    params: {}
  - id: tap
    method: device.execute
    params:
      id: 11111111-1111-4111-8111-111111111111
      name: tap
      arguments: {x: 20, y: 40}

device.execute requires a caller-supplied, device-aware action-protection classifier and a fixed selected device (from device.select or initialDeviceId). Unknown and protected actions are rejected at compile time. Immediately before execution the adapter re-selects that device, verifies the connection-local route through devices.list, and re-reads device.capabilities; a missing or newly protected action fails before its arguments are sent. The verified device.execute call is started in the same JavaScript continuation as that final capability check. A client used for YAML execution must not be shared with non-adapter calls that can race device.select. The caller remains responsible for device and Session lifecycle.

Within the YAML adapter's closed method allowlist, timeoutMs is accepted only for these five request-controlled methods: device.capabilities, device.connect, device.disconnect, device.execute, and device.observe. An execution AbortSignal is passed only to those methods; for all other methods it is observed between sequential steps, matching the public client's cancellation contract.

Parsing uses the js-yaml JSON schema and then applies independent byte, depth, node, collection, key, number, duplicate-ID, method, and timeout bounds. Custom tags, object aliases/cycles, prototype keys, duplicate YAML keys, unknown plan fields, system.hello, events.subscribe, and direct request.cancel calls fail closed. Execution also requires the opaque, immutable plan returned by compileYamlPlan rather than accepting a manually constructed lookalike. Trust is tracked in a module-private WeakSet, so copying symbols or inheriting from a valid plan does not authorize a new plan.