/** * @fileoverview Centralized Map size limits for memory management. * * These constants define maximum sizes for Maps that track ephemeral data. * Without limits, long-running sessions can accumulate unbounded entries * leading to memory leaks. * * Memory Budget Rationale: * - Assuming average entry size of ~1KB * - MAX_TRACKED_AGENTS=500 × 1KB = ~500KB for agent tracking * - Activity/results per agent × agents = bounded by these limits * - Total Map overhead: <50MB even under heavy load * * @module config/map-limits */ // ============================================================================ // Session Tracking Limits // ============================================================================ /** * Maximum concurrent sessions allowed. * Each session consumes significant resources (PTY, buffers, watchers). */ export const MAX_CONCURRENT_SESSIONS = 50; // ============================================================================ // SSE Client Limits // ============================================================================ /** * Maximum concurrent SSE client connections. * Each connection holds an open HTTP response and receives all broadcast events. */ export const MAX_SSE_CLIENTS = 100; // ============================================================================ // Todo Item Limits (Ralph Tracker) // ============================================================================ /** * Maximum todo items to track per session. */ export const MAX_TODOS_PER_SESSION = 500; // ============================================================================ // Pending Tool Calls Limits // ============================================================================ // ============================================================================ // Agent Tracking Limits // ============================================================================ /** * Maximum agents to track across all sessions (LRU eviction when exceeded). */ export const MAX_TRACKED_AGENTS = 500; /** * Maximum pending tool calls to track per subagent. * Entries should be cleaned up on tool_result, but this prevents leaks. */ export const MAX_PENDING_TOOL_CALLS = 100; /** * TTL for orphaned pending tool calls (5 minutes). * If no tool_result received, entry is cleaned up. */ export const PENDING_TOOL_CALL_TTL_MS = 5 * 60 * 1000;