@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:
resolveRuntimeConfigwith 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/saveCredentialsfor~/.stratus/credentials.json(written 0600). - Soul roster:
loadRosterSoulsreads~/.stratus/agents/*.md;loadSoulFileparses one soul with path-seeded identity. - Agent memory:
createHomeMemoryStoreis what every surface uses — one append-only JSONL per agent at~/.stratus/agents/<id>/memory.jsonl(createShardedFileMemoryStoreovercreateFileMemoryStore), with the built-in agent's inherited aliases folded in;migrateLegacyMemoryfolds a pre-global per-directory file into them. - Per-agent layout:
agentStateDirPath/agentSessionDbPath/agentMemoryFilePathname what one agent owns under~/.stratus/agents/<id>/, andfleetDbPathnames what stays fleet-wide (the schedules and the session index).legacySessionDbPath/legacyMemoryFilePathexist for the migration that moves them. - Provider wiring:
createRuntimeProviderbuilds 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.jsonstamps the home directory with a schema version and the ids of applied migrations.runStateMigrationsruns the ordered, idempotent registry (STATE_MIGRATIONS) and records each as it completes;pendingStateMigrationsreports what would run;assertStateCompatible/newerStateMessagerefuse state stamped by a newer build than the caller. A migration whoserequiresExclusivesays this home needs the caller to hold it — the per-agent layout move does, wherever a shared session database or a<id>.whitelist.jsonis still there — is deferred by the automatic path and run bystratus serve(which holds the home claim) orstratus update(which stopped the service), with the schema stamp held back meanwhile.drainSharedMemoryis 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.
