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

@robota-sdk/agent-sessions

v3.0.0-beta.53

Published

Session and chat management for Robota SDK - multi-session support with independent workspaces

Downloads

5,491

Readme

@robota-sdk/agent-sessions

Session lifecycle management for the Robota SDK. Wraps a Robota agent instance with permission-gated tool execution, hook-based lifecycle events, context window tracking, conversation compaction, and optional persistence.

Installation

npm install @robota-sdk/agent-sessions @robota-sdk/agent-core

Quick Start

import { Session } from '@robota-sdk/agent-sessions';

const session = new Session({
  tools,
  provider,
  systemMessage: 'You are a helpful assistant.',
  terminal,
  permissions: { allow: ['Read(*)'], deny: [] },
});

const response = await session.run('Hello!');

// Context tracking
const state = session.getContextState();
console.log(`${state.usedPercentage.toFixed(1)}% context used`);

// Manual compaction
await session.compact('Focus on the API changes');

Features

| Feature | Description | | -------------------------- | ------------------------------------------------------------------------------------------------------ | | Permission enforcement | Tool calls gated by 3-step policy (deny list, allow list, mode policy) | | Hook execution | PreToolUse, PostToolUse, PreCompact, PostCompact, SessionStart, Stop | | Context tracking | Token usage from provider metadata, auto-compact at ~83.5% | | Compaction | LLM-generated conversation summary to free context space | | Persistence | SessionStore for JSON file-based session save/load | | Abort | Cancel via session.abort() — propagates AbortSignal to robota.run(), throws AbortError to caller | | Session logging | FileSessionLogger writes JSONL event logs |

Key Methods

| Method | Description | | ------------------------------------------------- | -------------------------------------------------------- | | constructor(options) (with sessionId) | Accepts optional sessionId for deterministic IDs | | run(message) | Send a message, returns AI response | | injectMessage(message) | Inject a message into history without running the agent | | compact(instructions?) | Compress conversation via LLM summary | | getContextState() | Token usage: { usedTokens, maxTokens, usedPercentage } | | getPermissionMode() / setPermissionMode(mode) | Read/change permission mode | | getHistory() / clearHistory() | Access or clear conversation history | | abort() | Cancel running execution | | isRunning() | Returns true if a run() call is in progress | | getSessionId() | Returns the stable session identifier | | getMessageCount() | Returns the number of completed run() calls | | getSessionAllowedTools() | Tools approved for this session | | clearSessionAllowedTools() | Clears all session-scoped allow rules |

Public API Surface

| Export | Kind | Description | | ------------------------ | --------- | ------------------------------------------------------------ | | Session | Class | Wraps Robota with permissions, hooks, streaming, persistence | | PermissionEnforcer | Class | Tool permission checking, hook execution, output truncation | | ContextWindowTracker | Class | Token usage tracking and auto-compact threshold | | CompactionOrchestrator | Class | Conversation compaction via LLM summary | | SessionStore | Class | JSON file persistence for session records | | FileSessionLogger | Class | JSONL file-based session event logger | | SilentSessionLogger | Class | No-op session logger | | ISessionOptions | Interface | Constructor options for Session | | TPermissionHandler | Type | Custom permission approval callback | | TPermissionResult | Type | Permission decision result (boolean \| 'allow-session') | | ITerminalOutput | Interface | Terminal I/O abstraction (write, prompt, select, spinner) | | ISpinner | Interface | Spinner handle | | ISessionLogger | Interface | Pluggable session event logger interface | | TSessionLogData | Type | Structured log event data | | ISessionRecord | Interface | Persisted session record shape (includes history field) | | IContextWindowState | Type | Context window usage state (re-exported from agent-core) |

Note: IPermissionEnforcerOptions is an internal type and is not exported from the public API.

Sub-Components

| Component | Purpose | | ------------------------ | ------------------------------------------------------------------- | | PermissionEnforcer | Tool wrapping, permission checks, hook execution, output truncation | | ContextWindowTracker | Token usage tracking, auto-compact threshold | | CompactionOrchestrator | Conversation summarization via LLM |

Session vs Robota

  • Robota (agent-core): Raw agent — conversation + tools + plugins. No permissions, no hooks.
  • Session (this package): Wraps Robota with permissions, hooks, compaction, and persistence. Used by the CLI and SDK.

ISessionRecord

ISessionRecord includes a required history field (IHistoryEntry[]) that stores the full conversation timeline for session persistence, resume, and fork operations. When a session is resumed, history entries are replayed via Session.injectMessage().

A migration script is available for upgrading session records from older formats. See the package source for details.

Assembly

Most users should use createSession() from @robota-sdk/agent-sdk instead of constructing Session directly. The SDK factory wires tools, provider, and system prompt automatically from config and context.

Dependencies

  • @robota-sdk/agent-core (production) — Robota agent, permission system, hook system, core types

License

MIT