/** * React Hook for Claude Code Streaming * * Provides real-time streaming of Claude Code agent execution. */ import type { ClaudeCodeEvent, ClaudeCodeResult } from "../types.js"; import { type ClaudeCodeAllToolCall, type ClaudeCodeEventState } from "./event-state-reducer.js"; /** * State for Claude Code streaming */ export interface UseClaudeCodeStreamState extends ClaudeCodeEventState { /** Whether currently connected to stream */ isConnected: boolean; /** All tool calls across all iterations */ allToolCalls: ClaudeCodeAllToolCall[]; /** Raw events (for debugging) */ events: ClaudeCodeEvent[]; } /** * Options for useClaudeCodeStream hook */ export interface UseClaudeCodeStreamOptions { /** SSE endpoint URL */ url: string; /** Run ID to stream */ runId: string; /** Auto-connect on mount */ autoConnect?: boolean; /** Reconnect on disconnect */ autoReconnect?: boolean; /** Max reconnect attempts */ maxReconnectAttempts?: number; /** Reconnect delay (ms) */ reconnectDelay?: number; /** Keep event history */ keepEventHistory?: boolean; /** Max events to keep in history */ maxEventHistory?: number; /** Callbacks */ onEvent?: (event: ClaudeCodeEvent) => void; onConnect?: () => void; onDisconnect?: () => void; onError?: (error: Error) => void; onComplete?: (result: ClaudeCodeResult) => void; } /** * React hook for streaming Claude Code execution * * @example * ```tsx * function AgentViewer({ runId }: { runId: string }) { * const { * isRunning, * text, * currentTool, * toolCalls, * result, * error, * } = useClaudeCodeStream({ * url: '/api/workflows/stream', * runId, * }); * * return ( *
{text}
* {currentTool && (
*