{"version":3,"sources":["../src/hooks/useAgents.ts"],"names":["get","set","useState","useRef","useMemo","useCallback","buildSystemPrompt","useEffect","createModel","Agent","fireBusEvent","del"],"mappings":"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","file":"chunk-LVU6LUCK.cjs","sourcesContent":["/**\n * useAgents — multi-agent registry hook.\n *\n * Holds N agent slots, each with its own config + Agent SDK instance.\n * Each slot can stream independently; streams are tracked per-agent.\n *\n * This is the careless equivalent of agi.html's `state.agents` Map,\n * but typed, reactive, and persistent.\n *\n * Each slot is saved to IDB:\n *   - careless-agents-meta: [{ id, provider, model, systemPrompt, color, createdAt }]\n *   - careless-agent-{id}: MessageData[]  (reuses per-agent message store)\n */\nimport { useState, useCallback, useEffect, useRef, useMemo } from 'react'\nimport { Agent } from '@strands-agents/sdk'\nimport type { MessageData, Tool } from '@strands-agents/sdk'\nimport { get, set, del } from 'idb-keyval'\nimport type { Settings, AgentStatus } from '../types/index'\nimport { createModel } from '../providers/factory'\nimport { fireBusEvent } from '../lib/event-bus'\nimport { buildSystemPrompt, type DynamicContext } from '../lib/system-prompt'\n\nconst META_KEY = 'careless-agents-meta'\nconst MSG_KEY_PREFIX = 'careless-agent-'\n\n/** Serialize all mutations to avoid stale-closure races on parallel calls. */\nlet writeLock: Promise<void> = Promise.resolve()\nfunction serialize<T>(fn: () => Promise<T>): Promise<T> {\n  const next = writeLock.then(fn, fn)\n  writeLock = next.then(() => undefined, () => undefined)\n  return next\n}\n\nconst AGENT_COLORS = [\n  '#00ff88', '#00aaff', '#ff88ff', '#ffaa00',\n  '#ff6666', '#88ffff', '#ff8888', '#88ff88',\n]\n\nexport interface AgentConfig {\n  id: string\n  provider: Settings['provider']\n  model?: string\n  apiKey?: string\n  systemPrompt: string\n  maxTokens?: number\n  color: string\n  createdAt: number\n  lastUsedAt?: number\n  /** Optional list of tool names. If set, only these tools (from the parent's tool set) are exposed to this sub-agent. If omitted → inherit ALL parent tools. */\n  tool_filter?: string[]\n  /** How the slot's systemPrompt composes with the parent's base prompt:\n   *   - 'append' (default): use buildSystemPrompt(settings, ctx) as base, then append this slot's systemPrompt as \"## Role/Specialization\".\n   *   - 'replace': use ONLY this slot's systemPrompt verbatim (no base prompt, no dynamic context). Use for strict/minimal personas.\n   */\n  prompt_mode?: 'append' | 'replace'\n}\n\nexport interface AgentSlot extends AgentConfig {\n  status: AgentStatus\n  messages: MessageData[]\n  error?: string\n}\n\ninterface SpawnInput {\n  id: string\n  provider: Settings['provider']\n  model?: string\n  apiKey?: string\n  systemPrompt?: string\n  maxTokens?: number\n  tool_filter?: string[]\n  prompt_mode?: 'append' | 'replace'\n}\n\nasync function loadMeta(): Promise<AgentConfig[]> {\n  try {\n    const m = await get<AgentConfig[]>(META_KEY)\n    return Array.isArray(m) ? m : []\n  } catch { return [] }\n}\n\nasync function saveMeta(configs: AgentConfig[]): Promise<void> {\n  await set(META_KEY, configs)\n}\n\nasync function loadAgentMessages(id: string): Promise<MessageData[]> {\n  try {\n    const m = await get<MessageData[]>(MSG_KEY_PREFIX + id)\n    return Array.isArray(m) ? m : []\n  } catch { return [] }\n}\n\nasync function saveAgentMessages(id: string, msgs: MessageData[]): Promise<void> {\n  await set(MSG_KEY_PREFIX + id, msgs)\n}\n\n/** Per-agent runtime state — SDK Agent instance + abort controller */\ninterface AgentRuntime {\n  agent: Agent\n  abort: AbortController | null\n}\n\n/**\n * useAgents — parent agent's tools and dynamic context propagate into every\n * sub-agent by default. Each slot can further restrict its tools via\n * config.tool_filter (string[] of tool names).\n *\n * @param parentSettings  parent's Settings — model, provider, api keys, flags\n * @param parentTools     parent's tool array (from buildTools(settings)) —\n *                        sub-agents INHERIT these unless tool_filter is set\n * @param dynamicCtx      optional parent dynamic context — injected into the\n *                        base system prompt via buildSystemPrompt(). Pass the\n *                        same ctx useAgent uses so sub-agents see mesh peers,\n *                        time, active tasks, etc.\n */\nexport function useAgents(\n  parentSettings: Settings,\n  parentTools: Tool[] = [],\n  dynamicCtx?: DynamicContext,\n) {\n  const [slots, setSlots] = useState<Map<string, AgentSlot>>(new Map())\n  const [activeId, setActiveId] = useState<string | null>(null)\n  const [loaded, setLoaded] = useState(false)\n  const runtimes = useRef<Map<string, AgentRuntime>>(new Map())\n  const colorIndexRef = useRef(0)\n\n  /** Tool-name → Tool lookup so tool_filter can resolve quickly */\n  const toolsByName = useMemo(() => {\n    const m = new Map<string, Tool>()\n    for (const t of parentTools) {\n      const name = (t as Tool & { name?: string; config?: { name?: string } })?.name\n        ?? (t as Tool & { config?: { name?: string } })?.config?.name\n      if (name) m.set(name, t)\n    }\n    return m\n  }, [parentTools])\n\n  /** Resolve a slot's effective tool set: filtered subset, or inherit all */\n  const resolveTools = useCallback((slot: AgentSlot | AgentConfig): Tool[] => {\n    const filter = slot.tool_filter\n    if (!filter || filter.length === 0) return parentTools\n    const out: Tool[] = []\n    for (const name of filter) {\n      const t = toolsByName.get(name)\n      if (t) out.push(t)\n    }\n    return out\n  }, [parentTools, toolsByName])\n\n  /** Resolve a slot's effective system prompt. Append-mode composes with base. */\n  const resolveSystemPrompt = useCallback((slot: AgentSlot | AgentConfig): string => {\n    if (slot.prompt_mode === 'replace') return slot.systemPrompt\n    // 'append' (default): base prompt + live context + slot's specialization\n    const base = buildSystemPrompt(parentSettings, dynamicCtx)\n    if (!slot.systemPrompt?.trim()) return base\n    return `${base}\\n\\n## Sub-agent role — ${slot.id}\\n${slot.systemPrompt.trim()}`\n  }, [parentSettings, dynamicCtx])\n\n  /** When parent tools or settings change, invalidate all runtime caches so\n   *  the next send() rebuilds each sub-agent with fresh tools/prompt. */\n  useEffect(() => {\n    runtimes.current.clear()\n  }, [parentTools, parentSettings.enableTools, parentSettings.enableVision,\n      parentSettings.enableMesh, parentSettings.enableMemory,\n      parentSettings.disabledTools])\n\n  // Hydrate on mount\n  useEffect(() => {\n    let cancelled = false\n    ;(async () => {\n      const configs = await loadMeta()\n      if (cancelled) return\n      const m = new Map<string, AgentSlot>()\n      for (const cfg of configs) {\n        const messages = await loadAgentMessages(cfg.id)\n        m.set(cfg.id, { ...cfg, status: 'idle', messages })\n      }\n      setSlots(m)\n      if (m.size > 0) setActiveId(m.keys().next().value!)\n      setLoaded(true)\n    })()\n    return () => { cancelled = true }\n  }, [])\n\n  /** Build or rebuild an agent's SDK instance with parent tools + resolved prompt */\n  const buildAgent = useCallback(async (slot: AgentSlot): Promise<Agent> => {\n    const modelSettings: Settings = {\n      ...parentSettings,\n      provider: slot.provider,\n      model: slot.model || parentSettings.model,\n      apiKey: slot.apiKey || parentSettings.apiKey,\n      maxTokens: slot.maxTokens ?? parentSettings.maxTokens,\n    }\n    const model = await createModel(modelSettings)\n    const tools = resolveTools(slot)\n    const systemPrompt = resolveSystemPrompt(slot)\n    const agent = new Agent({\n      model,\n      tools,                // ← now inherits parent's tools (optionally filtered)\n      systemPrompt,         // ← base prompt + dynamic ctx + slot specialization\n    })\n    agent.messages = slot.messages as any\n    return agent\n  }, [parentSettings, resolveTools, resolveSystemPrompt])\n\n  const spawn = useCallback(async (input: SpawnInput): Promise<AgentSlot> => {\n    return serialize(async () => {\n      // Read fresh state inside the lock to avoid stale-closure races on parallel spawns.\n      const configs = await loadMeta()\n      if (configs.some(c => c.id === input.id)) {\n        throw new Error(`agent '${input.id}' already exists`)\n      }\n      const color = AGENT_COLORS[colorIndexRef.current++ % AGENT_COLORS.length]\n      const slot: AgentSlot = {\n        id: input.id,\n        provider: input.provider,\n        model: input.model,\n        apiKey: input.apiKey,\n        systemPrompt: input.systemPrompt || '',\n        maxTokens: input.maxTokens,\n        tool_filter: input.tool_filter,\n        prompt_mode: input.prompt_mode ?? 'append',\n        color,\n        createdAt: Date.now(),\n        status: 'idle',\n        messages: [],\n      }\n      // Persist new meta (fresh list + this new slot)\n      const newConfigs: AgentConfig[] = [...configs, {\n        id: slot.id, provider: slot.provider, model: slot.model, apiKey: slot.apiKey,\n        systemPrompt: slot.systemPrompt, maxTokens: slot.maxTokens,\n        tool_filter: slot.tool_filter, prompt_mode: slot.prompt_mode,\n        color: slot.color, createdAt: slot.createdAt,\n      }]\n      await saveMeta(newConfigs)\n\n      // Functional setState so concurrent adds don't clobber each other\n      setSlots(prev => {\n        if (prev.has(slot.id)) return prev\n        const next = new Map(prev)\n        next.set(slot.id, slot)\n        return next\n      })\n      setActiveId(prev => prev ?? slot.id)\n      fireBusEvent({ source: 'agents', kind: 'spawned', summary: `agent '${slot.id}' (${slot.provider})` })\n      return slot\n    })\n  }, [])\n\n  const kill = useCallback(async (id: string): Promise<void> => {\n    return serialize(async () => {\n      // Abort any in-flight stream\n      const rt = runtimes.current.get(id)\n      if (rt?.abort) rt.abort.abort()\n      runtimes.current.delete(id)\n\n      // Persist fresh list minus this id\n      const configs = await loadMeta()\n      const nextConfigs = configs.filter(c => c.id !== id)\n      if (nextConfigs.length === configs.length) return  // wasn't there\n      await saveMeta(nextConfigs)\n      await del(MSG_KEY_PREFIX + id)\n\n      setSlots(prev => {\n        if (!prev.has(id)) return prev\n        const next = new Map(prev)\n        next.delete(id)\n        return next\n      })\n      setActiveId(prev => prev === id\n        ? (nextConfigs.length > 0 ? nextConfigs[0].id : null)\n        : prev)\n      fireBusEvent({ source: 'agents', kind: 'killed', summary: `agent '${id}'` })\n    })\n  }, [])\n\n  const update = useCallback(async (id: string, patch: Partial<SpawnInput>): Promise<void> => {\n    return serialize(async () => {\n      const configs = await loadMeta()\n      const idx = configs.findIndex(c => c.id === id)\n      if (idx < 0) return\n      const next = [...configs]\n      next[idx] = { ...next[idx], ...patch } as AgentConfig\n      await saveMeta(next)\n      // Rebuild runtime so new tools / prompt_mode / model take effect.\n      runtimes.current.delete(id)\n\n      setSlots(prev => {\n        const existing = prev.get(id)\n        if (!existing) return prev\n        const n = new Map(prev)\n        n.set(id, { ...existing, ...patch })\n        return n\n      })\n      fireBusEvent({ source: 'agents', kind: 'updated', summary: `agent '${id}'` })\n    })\n  }, [])\n\n  /** Send a message to one agent, stream response, persist. */\n  const send = useCallback(async (\n    id: string,\n    text: string,\n    opts?: { abort?: AbortSignal },\n  ): Promise<string> => {\n    const slot = slots.get(id)\n    if (!slot) throw new Error(`agent '${id}' not found`)\n\n    // Ensure runtime\n    let rt = runtimes.current.get(id)\n    if (!rt) {\n      const agent = await buildAgent(slot)\n      rt = { agent, abort: null }\n      runtimes.current.set(id, rt)\n    }\n\n    // Mark running\n    setSlots(prev => {\n      const next = new Map(prev)\n      const s = next.get(id)\n      if (s) next.set(id, { ...s, status: 'streaming' })\n      return next\n    })\n\n    const abort = new AbortController()\n    rt.abort = abort\n    if (opts?.abort) opts.abort.addEventListener('abort', () => abort.abort())\n\n    let resultText = ''\n    try {\n      for await (const event of rt.agent.stream(text, { cancelSignal: abort.signal } as any)) {\n        if (abort.signal.aborted) break\n        const ev = event as any\n\n        // Match useAgent's event handling — SDK wraps text deltas in modelStreamUpdateEvent.event.delta.text\n        if (ev?.type === 'modelStreamUpdateEvent') {\n          const inner = ev.event\n          if (inner?.type === 'modelContentBlockDeltaEvent' && inner.delta?.type === 'textDelta') {\n            resultText += inner.delta.text || ''\n            // Live-update status to reflect streaming text count (optional — keeps slot.messages fresh during stream)\n          }\n        }\n\n        // Agent SDK also emits messageAddedEvent / contentBlockEvent — these signal message list changes.\n        // We'll read rt.agent.messages at the end for the final state.\n\n        // Capture metrics if available (parity with useAgent.ts)\n        if (ev?.type === 'agentResultEvent') {\n          // noop — metrics not surfaced per-agent yet (future)\n        }\n      }\n\n      // Persist messages from SDK\n      const finalMessages = [...(rt.agent.messages as any as MessageData[])]\n      await saveAgentMessages(id, finalMessages)\n      // Bump lastUsedAt (sort order in UI)\n      try {\n        const configs = await loadMeta()\n        const idx = configs.findIndex(c => c.id === id)\n        if (idx >= 0) {\n          configs[idx].lastUsedAt = Date.now()\n          await saveMeta(configs)\n        }\n      } catch {}\n\n      setSlots(prev => {\n        const next = new Map(prev)\n        const s = next.get(id)\n        if (s) next.set(id, { ...s, status: 'idle', messages: finalMessages })\n        return next\n      })\n\n      fireBusEvent({ source: 'agents', kind: 'sent', summary: `${id} ← \"${text.slice(0, 40)}\"` })\n      return resultText\n    } catch (err: any) {\n      setSlots(prev => {\n        const next = new Map(prev)\n        const s = next.get(id)\n        if (s) next.set(id, { ...s, status: 'error', error: err?.message })\n        return next\n      })\n      throw err\n    } finally {\n      rt.abort = null\n    }\n  }, [slots, buildAgent])\n\n  /** Broadcast to all agents in parallel. Returns map of id → response. */\n  const broadcast = useCallback(async (\n    text: string,\n    excludeId?: string,\n  ): Promise<Map<string, string | Error>> => {\n    const results = new Map<string, string | Error>()\n    const targets = [...slots.keys()].filter(id => id !== excludeId)\n    await Promise.all(targets.map(async (id) => {\n      try {\n        const r = await send(id, text)\n        results.set(id, r)\n      } catch (e: any) {\n        results.set(id, e instanceof Error ? e : new Error(String(e)))\n      }\n    }))\n    return results\n  }, [slots, send])\n\n  const cancel = useCallback((id: string) => {\n    const rt = runtimes.current.get(id)\n    if (rt?.abort) rt.abort.abort()\n  }, [])\n\n  const clear = useCallback(async (id: string) => {\n    const slot = slots.get(id)\n    if (!slot) return\n    const rt = runtimes.current.get(id)\n    if (rt) rt.agent.messages = [] as any\n    await del(MSG_KEY_PREFIX + id)\n    setSlots(prev => {\n      const next = new Map(prev)\n      const s = next.get(id)\n      if (s) next.set(id, { ...s, messages: [] })\n      return next\n    })\n  }, [slots])\n\n  return {\n    slots,\n    activeId,\n    setActiveId,\n    loaded,\n    spawn,\n    kill,\n    update,\n    send,\n    broadcast,\n    cancel,\n    clear,\n  }\n}\n\nexport type UseAgentsReturn = ReturnType<typeof useAgents>\n"]}