Events & Plugins API
Event system and plugin management.
EventEmitter
typescript
import { EventEmitter } from 'agentforge';
const events = new EventEmitter();Methods
on()
Subscribe to an event:
typescript
on<E extends EventName>(event: E, listener: EventListener<E>): () => voidReturns an unsubscribe function.
once()
Subscribe once:
typescript
once<E extends EventName>(event: E, listener: EventListener<E>): () => voidoff()
Unsubscribe:
typescript
off<E extends EventName>(event: E, listener: EventListener<E>): voidemit()
Emit an event:
typescript
async emit<E extends EventName>(event: E, payload: EventPayload<E>): Promise<void>removeAllListeners()
Remove all listeners:
typescript
removeAllListeners(event?: EventName): voidlistenerCount()
Get listener count:
typescript
listenerCount(event: EventName): numbereventNames()
Get all events with listeners:
typescript
eventNames(): EventName[]Event Types
typescript
interface AgentEvents {
'request:start': { messages: Message[]; timestamp: number };
'request:end': { response: CompletionResponse; durationMs: number; timestamp: number };
'request:error': { error: Error; timestamp: number };
'tool:start': { toolCall: ToolCall; timestamp: number };
'tool:end': { toolCall: ToolCall; result: ToolResult; durationMs: number; timestamp: number };
'tool:error': { toolCall: ToolCall; error: Error; timestamp: number };
'stream:chunk': { content: string; timestamp: number };
'stream:end': { fullContent: string; timestamp: number };
'memory:trim': { before: number; after: number; strategy: string; timestamp: number };
'agent:start': { input: string | Message[]; timestamp: number };
'agent:end': { iterations: number; durationMs: number; timestamp: number };
'plugin:event': { pluginName: string; eventName: string; data: unknown; timestamp: number };
}globalEventBus
Shared global event bus:
typescript
import { globalEventBus } from 'agentforge';
globalEventBus.on('request:end', handler);waitForEvent()
Wait for an event:
typescript
import { waitForEvent } from 'agentforge';
const payload = await waitForEvent(emitter, 'request:end', timeoutMs?);eventIterator()
Create async iterator from events:
typescript
import { eventIterator } from 'agentforge';
for await (const event of eventIterator(emitter, 'tool:start')) {
// Handle each event
}PluginManager
typescript
import { PluginManager, EventEmitter, Agent } from 'agentforge';
const manager = new PluginManager(agent: Agent, events: EventEmitter);Methods
register()
typescript
async register(plugin: Plugin): Promise<void>unregister()
typescript
async unregister(name: string): Promise<void>get()
typescript
get(name: string): Plugin | undefinedhas()
typescript
has(name: string): booleangetAll()
typescript
getAll(): Plugin[]getContext()
typescript
getContext(name: string): PluginContext | undefinedPlugin Interface
typescript
interface Plugin {
metadata: PluginMetadata;
onRegister?: (context: PluginContext) => void | Promise<void>;
onUnregister?: (context: PluginContext) => void | Promise<void>;
tools?: Tool[];
middleware?: Middleware[];
events?: PluginEventHandlers;
}
interface PluginMetadata {
name: string;
version: string;
description?: string;
author?: string;
dependencies?: string[];
}
interface PluginContext {
agent: Agent;
events: EventEmitter;
storage: Map<string, unknown>;
logger: PluginLogger;
}definePlugin()
typescript
import { definePlugin } from 'agentforge';
const myPlugin = definePlugin({
metadata: { name: 'my-plugin', version: '1.0.0' },
onRegister: (ctx) => {},
tools: [],
events: {},
});Built-in Plugins
analyticsPlugin
typescript
import { analyticsPlugin } from 'agentforge';telemetryPlugin
typescript
import { telemetryPlugin } from 'agentforge';