{"version":3,"sources":["../src/core/use-approval.ts","../src/core/message-store.ts","../src/core/use-chat.ts"],"names":["useState","useCallback","useReducer","useRef","generateId"],"mappings":"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","file":"chunk-CFEGYXQK.cjs","sourcesContent":["import { useCallback, useState } from \"react\";\nimport type { ApprovalRequest, UseApprovalOptions } from \"../types\";\n\nexport interface UseApprovalReturn {\n  pendingApprovals: ApprovalRequest[];\n  approve: (id: string, reason?: string) => Promise<void>;\n  reject: (id: string, reason?: string) => Promise<void>;\n  isDeciding: boolean;\n  addApproval: (request: ApprovalRequest) => void;\n  /**\n   * Reload the pending-approval inbox from the provider. In API v2 this is the\n   * set of executions parked at `waiting_approval`\n   * (`provider.listApprovals`). No-op if the provider does not support it.\n   */\n  refresh: () => Promise<void>;\n}\n\nexport function useApproval(options: UseApprovalOptions): UseApprovalReturn {\n  const { provider, onApprovalRequired, onApprovalDecided } = options;\n\n  const [pendingApprovals, setPendingApprovals] = useState<ApprovalRequest[]>([]);\n  const [isDeciding, setIsDeciding] = useState(false);\n\n  const addApproval = useCallback(\n    (request: ApprovalRequest) => {\n      setPendingApprovals((prev) => [...prev, request]);\n      onApprovalRequired?.(request);\n    },\n    [onApprovalRequired],\n  );\n\n  const refresh = useCallback(async () => {\n    if (!provider.listApprovals) return;\n    const inbox = await provider.listApprovals();\n    setPendingApprovals(inbox);\n    for (const request of inbox) {\n      onApprovalRequired?.(request);\n    }\n  }, [provider, onApprovalRequired]);\n\n  const approve = useCallback(\n    async (id: string, reason?: string) => {\n      if (!provider.decideApproval) return;\n\n      setIsDeciding(true);\n      try {\n        const result = await provider.decideApproval(id, \"approved\", reason);\n        setPendingApprovals((prev) => prev.filter((a) => a.id !== id));\n        onApprovalDecided?.(result);\n      } finally {\n        setIsDeciding(false);\n      }\n    },\n    [provider, onApprovalDecided],\n  );\n\n  const reject = useCallback(\n    async (id: string, reason?: string) => {\n      if (!provider.decideApproval) return;\n\n      setIsDeciding(true);\n      try {\n        const result = await provider.decideApproval(id, \"rejected\", reason);\n        setPendingApprovals((prev) => prev.filter((a) => a.id !== id));\n        onApprovalDecided?.(result);\n      } finally {\n        setIsDeciding(false);\n      }\n    },\n    [provider, onApprovalDecided],\n  );\n\n  return {\n    pendingApprovals,\n    approve,\n    reject,\n    isDeciding,\n    addApproval,\n    refresh,\n  };\n}\n","import type { Message } from \"../types\";\n\nexport interface MessagesState {\n  messages: Message[];\n  isLoading: boolean;\n  error: Error | null;\n}\n\nexport type MessagesAction =\n  | { type: \"ADD_MESSAGE\"; message: Message }\n  | { type: \"UPDATE_MESSAGE\"; id: string; updates: Partial<Message> }\n  | { type: \"APPEND_CONTENT\"; id: string; content: string }\n  | { type: \"SET_STATUS\"; id: string; status: Message[\"status\"] }\n  | { type: \"REMOVE_MESSAGE\"; id: string }\n  | { type: \"SET_LOADING\"; isLoading: boolean }\n  | { type: \"SET_ERROR\"; error: Error | null }\n  | { type: \"SET_MESSAGES\"; messages: Message[] }\n  | { type: \"CLEAR\" };\n\nexport const initialState: MessagesState = {\n  messages: [],\n  isLoading: false,\n  error: null,\n};\n\nexport function messagesReducer(state: MessagesState, action: MessagesAction): MessagesState {\n  switch (action.type) {\n    case \"ADD_MESSAGE\":\n      return {\n        ...state,\n        messages: [...state.messages, action.message],\n      };\n\n    case \"UPDATE_MESSAGE\":\n      return {\n        ...state,\n        messages: state.messages.map((msg) =>\n          msg.id === action.id ? { ...msg, ...action.updates } : msg,\n        ),\n      };\n\n    case \"APPEND_CONTENT\":\n      return {\n        ...state,\n        messages: state.messages.map((msg) =>\n          msg.id === action.id\n            ? {\n                ...msg,\n                content: msg.content + action.content,\n                status: \"streaming\",\n              }\n            : msg,\n        ),\n      };\n\n    case \"SET_STATUS\":\n      return {\n        ...state,\n        messages: state.messages.map((msg) =>\n          msg.id === action.id ? { ...msg, status: action.status } : msg,\n        ),\n      };\n\n    case \"REMOVE_MESSAGE\":\n      return {\n        ...state,\n        messages: state.messages.filter((msg) => msg.id !== action.id),\n      };\n\n    case \"SET_LOADING\":\n      return { ...state, isLoading: action.isLoading };\n\n    case \"SET_ERROR\":\n      return { ...state, error: action.error };\n\n    case \"SET_MESSAGES\":\n      return { ...state, messages: action.messages };\n\n    case \"CLEAR\":\n      return { ...initialState };\n\n    default:\n      return state;\n  }\n}\n","import { type FormEvent, useCallback, useReducer, useRef, useState } from \"react\";\nimport type { Message, ToolCall, UseChatOptions } from \"../types\";\nimport { initialState, messagesReducer } from \"./message-store\";\nimport { generateId } from \"./utils\";\n\nexport interface UseChatReturn {\n  messages: Message[];\n  isLoading: boolean;\n  error: Error | null;\n  sendMessage: (content: string) => Promise<void>;\n  retry: (messageId: string) => Promise<void>;\n  clearMessages: () => void;\n  setMessages: (messages: Message[]) => void;\n  input: string;\n  setInput: (input: string) => void;\n  handleSubmit: (e?: FormEvent) => void;\n}\n\nexport function useChat(options: UseChatOptions): UseChatReturn {\n  const { provider, initialMessages, sessionId, onError, onFinish, stream = true } = options;\n\n  const [state, dispatch] = useReducer(messagesReducer, {\n    ...initialState,\n    messages: initialMessages ?? [],\n  });\n\n  const [input, setInput] = useState(\"\");\n  const abortRef = useRef<AbortController | null>(null);\n\n  const sendMessage = useCallback(\n    async (content: string) => {\n      if (!content.trim()) return;\n\n      // Abort previous request\n      abortRef.current?.abort();\n      const controller = new AbortController();\n      abortRef.current = controller;\n\n      const userMessage: Message = {\n        id: generateId(),\n        role: \"user\",\n        content,\n        status: \"complete\",\n        createdAt: new Date(),\n      };\n\n      const assistantMessage: Message = {\n        id: generateId(),\n        role: \"assistant\",\n        content: \"\",\n        status: \"pending\",\n        createdAt: new Date(),\n      };\n\n      dispatch({ type: \"ADD_MESSAGE\", message: userMessage });\n      dispatch({ type: \"ADD_MESSAGE\", message: assistantMessage });\n      dispatch({ type: \"SET_LOADING\", isLoading: true });\n      dispatch({ type: \"SET_ERROR\", error: null });\n\n      try {\n        if (stream) {\n          // Streaming path — aggregates content deltas and tool calls into\n          // the assistant message as events arrive.\n          let accumulatedContent = \"\";\n          let toolCalls: ToolCall[] = [];\n          let executionId: string | undefined;\n          let finished = false;\n\n          // Mark the message as streaming for UI indicators.\n          dispatch({\n            type: \"UPDATE_MESSAGE\",\n            id: assistantMessage.id,\n            updates: { status: \"streaming\" },\n          });\n\n          const generator = provider.sendMessageStream({ content, sessionId }, controller.signal);\n\n          try {\n            for await (const event of generator) {\n              if (controller.signal.aborted) break;\n\n              if (event.type === \"content\" && event.content) {\n                accumulatedContent += event.content;\n                dispatch({\n                  type: \"UPDATE_MESSAGE\",\n                  id: assistantMessage.id,\n                  updates: { content: accumulatedContent },\n                });\n              } else if (event.type === \"tool_start\" && event.toolCallId) {\n                toolCalls = [\n                  ...toolCalls,\n                  {\n                    id: event.toolCallId,\n                    name: event.toolName ?? \"\",\n                    arguments: {},\n                    status: \"running\",\n                  },\n                ];\n                dispatch({\n                  type: \"UPDATE_MESSAGE\",\n                  id: assistantMessage.id,\n                  updates: { toolCalls },\n                });\n              } else if (event.type === \"tool_end\" && event.toolCallId) {\n                const idx = toolCalls.findIndex((t) => t.id === event.toolCallId);\n                const base: ToolCall =\n                  idx >= 0\n                    ? toolCalls[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                toolCalls =\n                  idx >= 0\n                    ? toolCalls.map((t, i) => (i === idx ? updated : t))\n                    : [...toolCalls, updated];\n                dispatch({\n                  type: \"UPDATE_MESSAGE\",\n                  id: assistantMessage.id,\n                  updates: { toolCalls },\n                });\n              } else if (event.type === \"execution\" && event.executionId) {\n                executionId = event.executionId;\n              } else if (event.type === \"error\") {\n                throw new Error(event.error ?? \"Stream error\");\n              } else if (event.type === \"done\") {\n                // Non-tool executions emit the full response only on done\n                // (no progressive content deltas). Fall back to the final\n                // output payload so those messages still render.\n                if (!accumulatedContent && event.output) {\n                  const out = event.output as { content?: unknown };\n                  if (typeof out.content === \"string\") {\n                    accumulatedContent = out.content;\n                    dispatch({\n                      type: \"UPDATE_MESSAGE\",\n                      id: assistantMessage.id,\n                      updates: { content: accumulatedContent },\n                    });\n                  }\n                }\n                finished = true;\n                break;\n              }\n            }\n          } catch (streamErr) {\n            if (!controller.signal.aborted) {\n              throw streamErr;\n            }\n          }\n\n          if (!controller.signal.aborted) {\n            const finalMessage: Message = {\n              ...assistantMessage,\n              content: accumulatedContent,\n              status: finished ? \"complete\" : \"error\",\n              toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\n              executionId,\n            };\n            dispatch({\n              type: \"UPDATE_MESSAGE\",\n              id: assistantMessage.id,\n              updates: {\n                status: finalMessage.status,\n                executionId,\n              },\n            });\n            onFinish?.(finalMessage);\n          }\n        } else {\n          const result = await provider.sendMessage({ content, sessionId });\n\n          if (!controller.signal.aborted) {\n            dispatch({\n              type: \"UPDATE_MESSAGE\",\n              id: assistantMessage.id,\n              updates: {\n                content: result.message.content,\n                status: \"complete\",\n                executionId: result.executionId,\n              },\n            });\n\n            onFinish?.(result.message);\n          }\n        }\n      } catch (err) {\n        if (!controller.signal.aborted) {\n          const error = err instanceof Error ? err : new Error(String(err));\n          dispatch({\n            type: \"SET_STATUS\",\n            id: assistantMessage.id,\n            status: \"error\",\n          });\n          dispatch({\n            type: \"UPDATE_MESSAGE\",\n            id: assistantMessage.id,\n            updates: {\n              metadata: { error: error.message },\n            },\n          });\n          dispatch({ type: \"SET_ERROR\", error });\n          onError?.(error);\n        }\n      } finally {\n        dispatch({ type: \"SET_LOADING\", isLoading: false });\n      }\n    },\n    [provider, sessionId, onError, onFinish, stream, state.messages],\n  );\n\n  const retry = useCallback(\n    async (messageId: string) => {\n      const messageIndex = state.messages.findIndex((m) => m.id === messageId);\n      if (messageIndex < 0) return;\n\n      // Find the preceding user message\n      let userContent = \"\";\n      for (let i = messageIndex; i >= 0; i--) {\n        if (state.messages[i].role === \"user\") {\n          userContent = state.messages[i].content;\n          break;\n        }\n      }\n\n      if (!userContent) return;\n\n      // Remove the failed assistant message\n      dispatch({ type: \"REMOVE_MESSAGE\", id: messageId });\n\n      // Re-send\n      await sendMessage(userContent);\n    },\n    [state.messages, sendMessage],\n  );\n\n  const clearMessages = useCallback(() => {\n    abortRef.current?.abort();\n    dispatch({ type: \"CLEAR\" });\n  }, []);\n\n  const setMessages = useCallback((messages: Message[]) => {\n    dispatch({ type: \"SET_MESSAGES\", messages });\n  }, []);\n\n  const handleSubmit = useCallback(\n    (e?: FormEvent) => {\n      e?.preventDefault();\n      if (input.trim()) {\n        const content = input;\n        setInput(\"\");\n        sendMessage(content);\n      }\n    },\n    [input, sendMessage],\n  );\n\n  return {\n    messages: state.messages,\n    isLoading: state.isLoading,\n    error: state.error,\n    sendMessage,\n    retry,\n    clearMessages,\n    setMessages,\n    input,\n    setInput,\n    handleSubmit,\n  };\n}\n"]}