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

@holostaff/sdk

v0.13.0

Published

The Holostaff runtime for your app: the autopilot offer, the handover loop, and the safety envelope, in the user's own session.

Readme

@holostaff/sdk

The Holostaff runtime for your app: the autopilot offer, the handover loop, and the safety envelope, in the user's own session. A workflow autopilot is a computer-use agent that lives inside your product; this SDK is the part that lives in the page. It also carries lifetime identity, stage detection, and custom signal probes.

Install

npm install @holostaff/sdk

Usage

import { holostaff } from '@holostaff/sdk'

// Once at app startup — the deploy PR adds this for you.
holostaff.init({
  sourceId: 'cli-source-abc',
  tenantId: 'your-tenant-id',
})

// At journey-stage boundaries (placed by the deploy PR's agent).
holostaff.markStageEntry('adoption')

// On sign-in completion.
holostaff.identify(user.id)

// On logout.
holostaff.clearIdentity()

// On host-app events the scan detected as worth observing.
holostaff.emitSignal('first_resource_created', { kind: 'project' })

Calls made before init() queue and replay once it runs, so import order is not load-bearing. All methods are fail-soft — they never throw into your code. Errors route to the optional onError callback you pass to init().

The autopilot layer

When a workflow is enabled and certified, the SDK renders everything the user sees of its autopilot:

  • The offer card on the workflow, carrying the task's name (or the display name your team set). Nothing happens unless the user accepts: handover is always the user's explicit act.
  • The intent overlay: the few specifics the task needs, collected at handover.
  • The run itself: one small action at a time, in the user's own session and tab, with every target highlighted before anything happens.
  • Questions anchored beside the field they concern, never a modal over the form.
  • The Allow pill on consequential clicks (pay, delete, submit, send, sign). No answer means no.
  • The progress panel with an always-visible Stop.

The safety envelope

Enforced in the executor and the server, never only in a prompt:

  • The autopilot runs with the user's own auth and permissions, same origin only. No credentials ever pass through Holostaff.
  • Password, payment, and code fields are hard-refused: the autopilot points, the user types.
  • Any keystroke from the user pauses the run. Per-workflow step budgets cap every run.

What this SDK also does

  • Mint and persist a lifetime device id (localStorage + first-party cookie).
  • Open / close a session bound to page lifecycle.
  • POST identity / stage / signal / outcome events to the Holostaff runtime.
  • Track the current SPA route and last-user-activity time, and forward them to the runtime on route changes plus a low-frequency heartbeat.
  • Record the page structure and visible text so the autopilot can act from what is on screen, and batch it to the runtime. Password / email / tel inputs are always masked; mark rendered PII with the holostaff-mask (text) or holostaff-block (region) CSS classes; opt out entirely with init({ observe: { enabled: false } }). Data handling: holostaff.ai/security.

What it does on the page

  • Nothing is sent before the first interaction. init() only mints ids and attaches listeners. The session opens, the command channel connects, the route signal and heartbeat start, and the autopilot catalog is fetched on the first trusted click, key press, scroll or touch. Bots and bounces that never interact send nothing, and no session is closed that never opened.
  • The recorder loads on that first interaction, not at page load. It ships as a separate lazy chunk; the main import stays small. Calls to markStageEntry, emitSignal, identify and reportOutcome made before then queue and replay in order.
  • Voice and the Theater are off by default. Enable them with init({ voice: { enabled: true }, theater: { enabled: true } }); their code loads lazily only when enabled, after the first interaction.
  • Evaluation runs (window.__HS_EVAL__) open the gate immediately, since a synthetic driver never produces trusted input.

Changelog

0.13.0

  • Default import is the lean core: presence chip, note, autopilot, route signals. Entry chunk about half the size of 0.12.
  • Nothing is sent to Holostaff before the first trusted user interaction. Pre-interaction API calls queue and replay in order.
  • The session recorder loads lazily on that first interaction (record-only build, about half the bytes it used to pull).
  • Breaking: voice.enabled and theater.enabled now default to false. Hosts that relied on the defaults must opt in explicitly.

References