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

@stratusagent/state

v0.12.0

Published

Shared Stratus state wiring: config resolution, credential storage, the soul roster, file-backed agent memory, and provider construction — used by the CLI and the gateway alike

Downloads

1,594

Readme

@stratusagent/state

Shared Stratus state wiring — the code that knows where ~/.stratus lives and how to turn it into a running agent:

  • Config resolution: resolveRuntimeConfig with the full precedence chain (flags/selection → STRATUS_* env vars → config file → defaults), including the trust rules that keep stored credentials away from endpoints chosen by auto-discovered project configs.
  • Credentials: loadCredentials / saveCredentials for ~/.stratus/credentials.json (written 0600).
  • Soul roster: loadRosterSouls reads ~/.stratus/agents/*.md; loadSoulFile parses one soul with path-seeded identity.
  • Agent memory: createHomeMemoryStore is what every surface uses — one append-only JSONL per agent at ~/.stratus/agents/<id>/memory.jsonl (createShardedFileMemoryStore over createFileMemoryStore), with the built-in agent's inherited aliases folded in; migrateLegacyMemory folds a pre-global per-directory file into them.
  • Per-agent layout: agentStateDirPath / agentSessionDbPath / agentMemoryFilePath name what one agent owns under ~/.stratus/agents/<id>/, and fleetDbPath names what stays fleet-wide (the schedules and the session index). legacySessionDbPath / legacyMemoryFilePath exist for the migration that moves them.
  • Provider wiring: createRuntimeProvider builds the right provider (demo / OpenAI-compatible / Anthropic API / Claude Code subscription runtime / Codex harness) from a resolved config, fallback model included.
  • Versioned state: ~/.stratus/state.json stamps the home directory with a schema version and the ids of applied migrations. runStateMigrations runs the ordered, idempotent registry (STATE_MIGRATIONS) and records each as it completes; pendingStateMigrations reports what would run; assertStateCompatible / newerStateMessage refuse state stamped by a newer build than the caller. A migration whose requiresExclusive says this home needs the caller to hold it — the per-agent layout move does, wherever a shared session database or a <id>.whitelist.json is still there — is deferred by the automatic path and run by stratus serve (which holds the home claim) or stratus update (which stopped the service), with the schema stamp held back meanwhile. drainSharedMemory is deliberately not in that registry: the memory JSONL is append-only and opened by pathname per read and per write, so folding it into the agents' own files is a copy every command runs until the source stops changing — never a one-shot that records itself as done, and never a move, since the daemon still serving from the old build reads that pathname too. Retiring the source is the bracketed migration's, once that reader is gone.

Both @stratusagent/cli and @stratusagent/gateway depend on this package — the CLI depends on the gateway for stratus serve, so this layer exists to keep that dependency acyclic. Every function takes a StateEnvironment (processEnv / cwd / homeDir overrides) instead of touching process globals, so hosts and tests pin their own world.