{"version":3,"sources":["../src/lib/event-bus.ts"],"names":[],"mappings":"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","file":"chunk-E3INOH6I.cjs","sourcesContent":["/**\n * Unified event bus — aggregates runtime events (tasks, scheduler, telegram,\n * webhooks, tool calls) into a single rolling log for context injection and\n * the ContextHUD.\n *\n * Pattern mirrors devduck's event_bus: any module fires a custom event with\n * a standard shape, the bus captures it into a ring buffer, and consumers\n * (system prompt builder, HUD, replay) read from it.\n */\nexport interface BusEvent {\n  id: string\n  timestamp: number\n  source: string          // 'task' | 'scheduler' | 'telegram' | 'webhook' | 'tool' | string\n  kind: 'started' | 'completed' | 'error' | 'received' | 'sent' | 'fired' | 'info' | 'spawned' | 'killed' | 'updated'\n  summary: string         // short human-readable\n  data?: any              // optional structured payload\n}\n\nconst MAX_EVENTS = 200\nconst STORAGE_KEY = 'careless-event-bus'\n\nclass EventBus {\n  private events: BusEvent[] = []\n  private listeners: Set<(evs: BusEvent[]) => void> = new Set()\n  private inited = false\n\n  init() {\n    if (this.inited) return\n    this.inited = true\n    // Hydrate from sessionStorage\n    try {\n      const raw = sessionStorage.getItem(STORAGE_KEY)\n      if (raw) this.events = JSON.parse(raw).slice(-MAX_EVENTS)\n    } catch {}\n    // Global listener for careless:bus events\n    window.addEventListener('careless:bus', (e: any) => {\n      const payload = e.detail\n      if (payload && payload.summary) this.push(payload)\n    })\n  }\n\n  push(ev: Omit<BusEvent, 'id' | 'timestamp'> & Partial<Pick<BusEvent, 'id' | 'timestamp'>>) {\n    const full: BusEvent = {\n      id: ev.id || `be-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,\n      timestamp: ev.timestamp || Date.now(),\n      source: ev.source,\n      kind: ev.kind,\n      summary: ev.summary,\n      data: ev.data,\n    }\n    this.events.push(full)\n    if (this.events.length > MAX_EVENTS) this.events = this.events.slice(-MAX_EVENTS)\n    try { sessionStorage.setItem(STORAGE_KEY, JSON.stringify(this.events)) } catch {}\n    this.listeners.forEach(fn => fn(this.events))\n  }\n\n  recent(limit = 20, maxAgeMs = 5 * 60 * 1000): BusEvent[] {\n    const cutoff = Date.now() - maxAgeMs\n    return this.events.filter(e => e.timestamp >= cutoff).slice(-limit)\n  }\n\n  all(): BusEvent[] { return [...this.events] }\n\n  clear() {\n    this.events = []\n    try { sessionStorage.removeItem(STORAGE_KEY) } catch {}\n    this.listeners.forEach(fn => fn(this.events))\n  }\n\n  subscribe(fn: (evs: BusEvent[]) => void): () => void {\n    this.listeners.add(fn)\n    return () => this.listeners.delete(fn)\n  }\n\n  /** Format recent events as system-prompt context string. */\n  contextString(limit = 15, maxAgeMs = 5 * 60 * 1000): string {\n    const recent = this.recent(limit, maxAgeMs)\n    if (!recent.length) return ''\n    const lines = ['### 🔔 Recent Events']\n    const icons: Record<string, string> = {\n      task: '📋', scheduler: '⏰', telegram: '📱', webhook: '🪝',\n      tool: '🔧', ambient: '🌙', mesh: '🔗', error: '⚠️',\n    }\n    const kindIcons: Partial<Record<BusEvent['kind'], string>> = {\n      started: '▶', completed: '✅', error: '❌', received: '←',\n      sent: '→', fired: '🔥', info: 'ℹ',\n    }\n    for (const e of recent) {\n      const t = new Date(e.timestamp).toLocaleTimeString()\n      const si = icons[e.source] || '•'\n      const ki = kindIcons[e.kind] || ''\n      lines.push(`- [${t}] ${si}${ki} **${e.source}**: ${e.summary.slice(0, 140)}`)\n    }\n    // Summary counts\n    const counts: Record<string, number> = {}\n    recent.forEach(e => { counts[e.source] = (counts[e.source] || 0) + 1 })\n    const summary = Object.entries(counts).map(([k, v]) => `${k}:${v}`).join(', ')\n    if (summary) lines.push(`*Event summary: ${summary}*`)\n    return lines.join('\\n')\n  }\n}\n\nexport const eventBus = new EventBus()\n\n/** Convenience: fire a bus event from anywhere. */\nexport function fireBusEvent(ev: Omit<BusEvent, 'id' | 'timestamp'>) {\n  window.dispatchEvent(new CustomEvent('careless:bus', { detail: ev }))\n}\n"]}