| name | sessions |
| description | Session management, conversation history, and checkpoints |
| emoji | 💬 |
Sessions - Complete API Reference
Manage conversation sessions, history, checkpoints, and resets across channels.
Chat Commands
Session Control
/new Start new conversation
/reset Reset current session
/session View session info
/session list List active sessions
Checkpoints
/checkpoint save "before refactor" Save checkpoint
/checkpoint list List checkpoints
/checkpoint restore <id> Restore checkpoint
/checkpoint delete <id> Delete checkpoint
History
/history View conversation history
/history export Export as markdown
/history clear Clear history (keeps session)
Settings
/session scope main Use main session
/session scope channel Per-channel sessions
/session scope peer Per-user sessions
/session reset-time 00:00 Set daily reset time
/session idle-reset 30 Reset after 30 min idle
TypeScript API Reference
Create Session Manager
import { createSessionManager } from 'clodds/sessions';
const sessions = createSessionManager({
scope: 'per-channel-peer',
dailyResetHour: 0,
idleResetMinutes: 30,
storage: 'sqlite',
dbPath: './sessions.db',
encryptTranscripts: true,
encryptionKey: process.env.SESSION_KEY,
});
Get or Create Session
const session = await sessions.getOrCreateSession({
userId: 'user-123',
channelId: 'telegram-456',
peerId: 'peer-789',
});
console.log(`Session ID: ${session.id}`);
console.log(`Created: ${session.createdAt}`);
console.log(`Messages: ${session.messageCount}`);
console.log(`Last activity: ${session.lastActivityAt}`);
Add Message to History
await sessions.addMessage({
sessionId: session.id,
role: 'user',
content: 'What is my portfolio value?',
});
await sessions.addMessage({
sessionId: session.id,
role: 'assistant',
content: 'Your portfolio is worth $10,234.56',
usage: {
inputTokens: 500,
outputTokens: 200,
},
});
Get History
const history = await sessions.getHistory(session.id, {
limit: 50,
format: 'messages',
});
for (const msg of history) {
console.log(`[${msg.role}] ${msg.content}`);
}
Clear History
await sessions.clearHistory(session.id);
Reset Session
await sessions.reset({
userId: 'user-123',
channelId: 'telegram-456',
});
Checkpoints
const checkpoint = await sessions.saveCheckpoint({
sessionId: session.id,
name: 'Before major change',
description: 'Saving state before refactoring trading strategy',
});
console.log(`Checkpoint ID: ${checkpoint.id}`);
console.log(`Messages saved: ${checkpoint.messageCount}`);
const checkpoints = await sessions.listCheckpoints(session.id);
for (const cp of checkpoints) {
console.log(`${cp.id}: ${cp.name} (${cp.messageCount} messages)`);
}
await sessions.restoreCheckpoint(checkpoint.id);
await sessions.deleteCheckpoint(checkpoint.id);
Export Session
const markdown = await sessions.export(session.id, {
format: 'markdown',
includeMetadata: true,
});
const json = await sessions.export(session.id, {
format: 'json',
});
Session Cleanup
await sessions.cleanup({
olderThan: '30d',
keepCheckpoints: true,
});
Session Scopes
| Scope | Description | Use Case |
|---|
main | Single global session | Personal use |
per-peer | Session per user | Multi-user, shared channels |
per-channel-peer | Session per user per channel | Full isolation |
Auto-Reset Behavior
| Trigger | Behavior |
|---|
| Daily reset | New session at configured hour |
| Idle reset | New session after inactivity |
| Manual reset | User runs /new or /reset |
Encryption
When encryptTranscripts: true:
- All messages encrypted with AES-256-GCM
- Per-session encryption keys
- Secure key derivation from master key
Context Window Management
const context = await sessions.getContextHistory({
sessionId: session.id,
maxTokens: 100000,
strategy: 'smart',
});
Best Practices
- Choose appropriate scope — Per-channel-peer for multi-user
- Use checkpoints — Before major changes or experiments
- Export regularly — Keep backups of important conversations
- Set idle reset — Prevents stale context
- Enable encryption — For sensitive conversations