Skip to content

DevTools

The devtools() middleware records all stream events with timestamps and state snapshots, providing an inspection API for debugging.

Setup

typescript
import { createAIStore, devtools } from '@store-ai/core';

const { middleware, inspector } = devtools({
  maxEvents: 500, // default: 1000
  name: 'main-chat', // label for multi-store debugging
});

const store = createAIStore({
  middleware: [middleware],
});

Inspector API

After a stream completes:

typescript
// All events with timestamps
inspector.getEvents();
// → [{ index: 0, timestamp: '...', event: { type: 'text-delta', ... }, stateAfter: {...}, elapsed: 42 }]

// Filter by type
inspector.getEventsByType('text-delta');

// Single event
inspector.getEvent(5);

// Metrics
inspector.getEventCount(); // number of events
inspector.getDuration(); // stream duration in ms
inspector.getEventsPerSecond(); // throughput

// Export for sharing
const json = inspector.export(); // JSON string

// Clear the log
inspector.clear();

DevToolsEvent Shape

typescript
interface DevToolsEvent {
  index: number; // auto-incrementing
  timestamp: string; // ISO
  event: StreamEvent; // the stream event
  stateAfter: Readonly<AIState>; // state snapshot after this event
  elapsed: number; // ms since stream start
}

Global Exposure

For external tooling (browser extensions, custom panels):

typescript
const { middleware, inspector } = devtools({
  exposeGlobal: true,
  name: 'chat',
});

// Accessible from console:
// window.__STORE_AI_DEVTOOLS__.getEvents()
// window.__STORE_AI_DEVTOOLS__.getEventCount()

Multiple stores register as an array:

typescript
// window.__STORE_AI_DEVTOOLS__ → [inspector1, inspector2]

Options

OptionDefaultDescription
maxEvents1000Maximum events to retain. Oldest dropped when exceeded.
exposeGlobalfalseExpose inspector on window.__STORE_AI_DEVTOOLS__
nameundefinedLabel for identifying this store instance

Tips

  • Use in development only. The state snapshots add memory overhead.
  • Combine with logging() for console output + devtools inspection.
  • export() serializes Error objects to { name, message, stack } for portability.

Released under the MIT License.