{"version":3,"sources":["../src/core/use-agent.ts","../src/core/use-streaming.ts"],"names":["useState","useRef","useCallback","error"],"mappings":"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","file":"chunk-W53EPUYH.cjs","sourcesContent":["import { useCallback, useRef, useState } from \"react\";\nimport type { AgentStep, UseAgentOptions } from \"../types\";\n\nexport interface UseAgentReturn {\n  steps: AgentStep[];\n  currentStep: AgentStep | null;\n  isRunning: boolean;\n  error: Error | null;\n  trackExecution: (executionId: string) => void;\n  cancel: () => void;\n}\n\nconst TERMINAL_STATUSES = new Set([\"completed\", \"failed\", \"cancelled\"]);\n\nexport function useAgent(options: UseAgentOptions): UseAgentReturn {\n  const { provider, onStepUpdate, onComplete, onError, pollIntervalMs = 1000 } = options;\n\n  const [steps, setSteps] = useState<AgentStep[]>([]);\n  const [isRunning, setIsRunning] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n\n  const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n  const cancelledRef = useRef(false);\n\n  const cancel = useCallback(() => {\n    cancelledRef.current = true;\n    if (intervalRef.current) {\n      clearInterval(intervalRef.current);\n      intervalRef.current = null;\n    }\n    setIsRunning(false);\n  }, []);\n\n  const trackExecution = useCallback(\n    (executionId: string) => {\n      if (!provider.getExecutionStatus) {\n        return;\n      }\n\n      cancel();\n      cancelledRef.current = false;\n      setSteps([]);\n      setError(null);\n      setIsRunning(true);\n\n      const poll = async () => {\n        if (cancelledRef.current) return;\n\n        try {\n          const result = await provider.getExecutionStatus!(executionId);\n\n          if (cancelledRef.current) return;\n\n          if (result.steps) {\n            setSteps(result.steps);\n            const latest = result.steps[result.steps.length - 1];\n            if (latest) {\n              onStepUpdate?.(latest);\n            }\n          }\n\n          // v2: a run parked at `waiting_approval` is not terminal, but polling\n          // should pause until it is approved/denied (and resumes on a fresh\n          // trackExecution call). Treat it like a stopping point here.\n          if (TERMINAL_STATUSES.has(result.status) || result.status === \"waiting_approval\") {\n            cancel();\n            if (result.steps) {\n              onComplete?.(result.steps);\n            }\n            if (result.status === \"failed\" && result.error) {\n              const err = new Error(result.error);\n              setError(err);\n              onError?.(err);\n            }\n          }\n        } catch (err) {\n          if (!cancelledRef.current) {\n            const error = err instanceof Error ? err : new Error(String(err));\n            setError(error);\n            onError?.(error);\n            cancel();\n          }\n        }\n      };\n\n      // Initial poll\n      poll();\n      intervalRef.current = setInterval(poll, pollIntervalMs);\n    },\n    [provider, pollIntervalMs, onStepUpdate, onComplete, onError, cancel],\n  );\n\n  const currentStep = steps.length > 0 ? (steps[steps.length - 1] ?? null) : null;\n\n  return {\n    steps,\n    currentStep,\n    isRunning,\n    error,\n    trackExecution,\n    cancel,\n  };\n}\n","import { useCallback, useRef, useState } from \"react\";\nimport type { StreamEvent, ToolCall, UseStreamingOptions } from \"../types\";\n\nexport interface UseStreamingReturn {\n  isStreaming: boolean;\n  content: string;\n  /**\n   * Tool calls streamed so far. Each entry starts with status \"running\" on\n   * tool_start and flips to \"complete\" on tool_end (carrying the summary\n   * from the backend as `result`).\n   */\n  toolCalls: ToolCall[];\n  /** Latest intermediate reasoning text emitted between tool rounds. */\n  thinking: string;\n  error: Error | null;\n  startStream: (generator: AsyncGenerator<StreamEvent>) => void;\n  stopStream: () => void;\n}\n\nexport function useStreaming(options: UseStreamingOptions = {}): UseStreamingReturn {\n  const { onChunk, onComplete, onError, onToolStart, onToolEnd, onThinking } = options;\n\n  const [isStreaming, setIsStreaming] = useState(false);\n  const [content, setContent] = useState(\"\");\n  const [toolCalls, setToolCalls] = useState<ToolCall[]>([]);\n  const [thinking, setThinking] = useState(\"\");\n  const [error, setError] = useState<Error | null>(null);\n\n  const abortRef = useRef<AbortController | null>(null);\n  const contentRef = useRef(\"\");\n  const toolCallsRef = useRef<ToolCall[]>([]);\n\n  const stopStream = useCallback(() => {\n    abortRef.current?.abort();\n    abortRef.current = null;\n    setIsStreaming(false);\n  }, []);\n\n  const startStream = useCallback(\n    (generator: AsyncGenerator<StreamEvent>) => {\n      // Abort any existing stream\n      abortRef.current?.abort();\n\n      const controller = new AbortController();\n      abortRef.current = controller;\n\n      setIsStreaming(true);\n      setContent(\"\");\n      setToolCalls([]);\n      setThinking(\"\");\n      setError(null);\n      contentRef.current = \"\";\n      toolCallsRef.current = [];\n\n      (async () => {\n        try {\n          for await (const event of generator) {\n            if (controller.signal.aborted) break;\n\n            if (event.type === \"content\" && event.content) {\n              contentRef.current += event.content;\n              setContent(contentRef.current);\n              onChunk?.(event.content);\n            } else if (event.type === \"thinking\" && typeof event.thinking === \"string\") {\n              setThinking(event.thinking);\n              onThinking?.(event.thinking);\n            } else if (event.type === \"tool_start\" && event.toolCallId) {\n              const tc: ToolCall = {\n                id: event.toolCallId,\n                name: event.toolName ?? \"\",\n                arguments: {},\n                status: \"running\",\n              };\n              toolCallsRef.current = [...toolCallsRef.current, tc];\n              setToolCalls(toolCallsRef.current);\n              onToolStart?.(tc);\n            } else if (event.type === \"tool_end\" && event.toolCallId) {\n              const idx = toolCallsRef.current.findIndex((t) => t.id === event.toolCallId);\n              const base: ToolCall =\n                idx >= 0\n                  ? toolCallsRef.current[idx]\n                  : {\n                      id: event.toolCallId,\n                      name: event.toolName ?? \"\",\n                      arguments: {},\n                      status: \"running\",\n                    };\n              const updated: ToolCall = {\n                ...base,\n                name: event.toolName || base.name,\n                result: event.toolSummary,\n                status: \"complete\",\n              };\n              toolCallsRef.current =\n                idx >= 0\n                  ? toolCallsRef.current.map((t, i) => (i === idx ? updated : t))\n                  : [...toolCallsRef.current, updated];\n              setToolCalls(toolCallsRef.current);\n              onToolEnd?.(updated);\n            } else if (event.type === \"error\") {\n              const err = new Error(event.error ?? \"Stream error\");\n              setError(err);\n              onError?.(err);\n              break;\n            } else if (event.type === \"done\") {\n              break;\n            }\n          }\n\n          if (!controller.signal.aborted) {\n            onComplete?.(contentRef.current);\n          }\n        } catch (err) {\n          if (!controller.signal.aborted) {\n            const error = err instanceof Error ? err : new Error(String(err));\n            setError(error);\n            onError?.(error);\n          }\n        } finally {\n          setIsStreaming(false);\n        }\n      })();\n    },\n    [onChunk, onComplete, onError, onToolStart, onToolEnd, onThinking],\n  );\n\n  return { isStreaming, content, toolCalls, thinking, error, startStream, stopStream };\n}\n"]}