{"version":3,"sources":["../core/agentSlice.ts","../core/agentSupervisor.ts","../core/agentTaskManager.ts","../core/store.ts","../provider/CranberrryProvider.tsx","../hooks/useAgentDispatch.ts","../hooks/useAgentSelector.ts","../hooks/useAgentTaskManager.ts","../hooks/useAIAgent.ts","../hooks/useAgentSupervisor.ts","../hooks/useAgentController.ts","../provider/CranberrryRenderer.tsx"],"names":["updateTask","removeTask","getTask","setTaskStatus","globalEmitter","mitt","useRef","useState","useCallback","useEffect","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\nimport {\n  type CBState,\n  type CBAction,\n  type CBAgent,\n  type CBTask,\n  type CBMessageBlock,\n} from '../types';\n\nconst initialState: CBState = {\n  agents: [],\n  tasks: [],\n};\n\nexport function CBAgentReducer(\n  state: CBState = initialState,\n  action: CBAction\n): CBState {\n  switch (action.type) {\n    case 'ADD_AGENT':\n      return {\n        ...state,\n        agents: [...state.agents, action.payload],\n      };\n    case 'UPDATE_AGENT':\n      return {\n        ...state,\n        agents: state.agents.map((agent) =>\n          agent.id === action.payload.id\n            ? { ...agent, ...action.payload }\n            : agent\n        ),\n      };\n    case 'ADD_TASK':\n      return {\n        ...state,\n        tasks: [...state.tasks, action.payload],\n      };\n    case 'UPDATE_TASK':\n      return {\n        ...state,\n        tasks: state.tasks.map((task) =>\n          task.id === action.payload.id\n            ? { ...task, ...action.payload }\n            : task\n        ),\n      };\n    case 'REMOVE_TASK':\n      return {\n        ...state,\n        tasks: state.tasks.filter((task) => task.id !== action.payload.id),\n      };\n    case 'ADD_MESSAGE_BLOCK':\n      return {\n        ...state,\n        tasks: state.tasks.map((task) =>\n          task.id === action.payload.taskId\n            ? { ...task, messageBlocks: [...(task.messageBlocks || []), action.payload.block] }\n            : task\n        ),\n      };\n    default:\n      return state;\n  }\n}\n\n// Action creators (for internal use)\nexport const addAgent = (agent: CBAgent): CBAction => ({\n  type: 'ADD_AGENT',\n  payload: agent,\n});\n\nexport const updateAgent = (\n  agent: Partial<CBAgent> & { id: string }\n): CBAction => ({\n  type: 'UPDATE_AGENT',\n  payload: agent,\n});\n\nexport const addTask = (task: CBTask): CBAction => ({\n  type: 'ADD_TASK',\n  payload: task,\n});\n\nexport const updateTask = (\n  task: Partial<CBTask> & { id: string }\n): CBAction => ({\n  type: 'UPDATE_TASK',\n  payload: task,\n});\n\nexport const removeTask = (id: string): CBAction => ({\n  type: 'REMOVE_TASK',\n  payload: { id },\n});\n\nexport const addMessageBlock = (taskId: string, block: CBMessageBlock): CBAction => ({\n  type: 'ADD_MESSAGE_BLOCK',\n  payload: { taskId, block },\n});\n\n// Utility to get tasks for a specific agent\nexport const getTasksForAgent = (\n  state: CBState,\n  agentId: string\n): CBTask[] => {\n  return state.tasks.filter((task) => task.agentId === agentId);\n}; ","'use client'\nimport type { CBTaskStatus } from \"../types\";\nimport type { CBTagConfig, CBMessageBlock } from \"../types\";\nimport {nanoid} from \"nanoid\"\nimport type { Emitter } from \"mitt\";\nimport mitt from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport type CBBlockSupervisorCallbacks = {\n  onBlockFound?: (tag: string) => void;\n  onBlockProcessed?: (block: CBMessageBlock) => void;\n  onComplete?: () => void;\n  onError?: (err: string) => void;\n};\n\nexport function createAgentSupervisor({\n  callbacks,\n  tagConfigs,\n  emitter = globalEmitter,\n}: {\n  callbacks: CBBlockSupervisorCallbacks;\n  tagConfigs: CBTagConfig[];\n  emitter?: Emitter<any>;\n}) {\n  let status: CBTaskStatus = \"idle\";\n  let buffer = \"\";\n  let currentTaskId: string = \"\";\n  let openTagPositions: { tag: string; index: number }[] = [];\n\n  function getStatus() {\n    return status;\n  }\n\n  function startTask(taskId: string) {\n    status = \"ongoing\";\n    buffer = \"\";\n    openTagPositions = [];\n    currentTaskId = taskId;\n    // No-op: tagConfigs are static for this supervisor\n  }\n\n  function parseChunk(chunk: string) {\n    if (status !== \"ongoing\") return;\n    buffer += chunk;\n\n    let foundBlock = false;\n    for (const tagConfig of tagConfigs) {\n      const { tag, processor, component } = tagConfig;\n      const openingTagRegex = new RegExp(`<${tag}>`, \"g\");\n      let match: RegExpExecArray | null;\n      while ((match = openingTagRegex.exec(buffer)) !== null) {\n        if (!openTagPositions.some(t => t.tag === tag && t.index === match!.index)) {\n          openTagPositions.push({ tag, index: match.index });\n          callbacks.onBlockFound?.(tag);\n        }\n      }\n      // Process complete blocks\n      const blockRegex = new RegExp(`<${tag}>([\\\\s\\\\S]*?)<\\/${tag}>`, \"g\");\n      while ((match = blockRegex.exec(buffer)) !== null) {\n        let rawContent = match[1];\n        let content: any = rawContent;\n        if (processor === 'JSON') {\n          try {\n            content = JSON.parse(rawContent);\n          } catch {\n            content = rawContent;\n          }\n        }\n\n       \n        // Compose message block\n        const block: CBMessageBlock = {\n          id: nanoid(),\n          tag,\n          content,\n          createdAt: Date.now(),\n          component,\n          taskId: currentTaskId,\n        };\n        callbacks.onBlockProcessed?.(block);\n\n        emitter.emit('message', { taskId: currentTaskId, block });\n        buffer = buffer.slice(0, match.index) + buffer.slice(match.index + match[0].length);\n        openTagPositions = openTagPositions.filter(t => !(t.tag === tag && t.index === match!.index));\n        blockRegex.lastIndex = 0;\n        foundBlock = true;\n      }\n    }\n    // If a block was processed, recursively process the buffer for more blocks\n    if (foundBlock) {\n      parseChunk(\"\");\n    } else if (chunk === \"\" && buffer === \"\" && status === \"ongoing\") {\n      status = \"completed\";\n      callbacks.onComplete?.();\n    }\n  }\n\n  function complete() {\n    status = \"completed\";\n    callbacks.onComplete?.();\n  }\n\n  function error(err: string) {\n    status = \"failed\";\n    callbacks.onError?.(err);\n    \n  }\n\n  function reset() {\n    status = \"idle\";\n    buffer = \"\";\n    openTagPositions = [];\n    \n  }\n\n  return {\n    getStatus,\n    startTask,\n    parseChunk,\n    complete,\n    error,\n    reset,\n  };\n} ","'use client'\nimport { type CBTask, type CBTaskStatus } from \"../types\";\nimport type { CBMessageBlock } from \"../types\";\n\nexport function createTask(tasks: CBTask[], agentId: string, input: string, meta?: Record<string, any>): CBTask[] {\n  const id = Math.random().toString(36).substr(2, 9);\n  const now = Date.now();\n  return [\n    ...tasks,\n    {\n      id,\n      agentId,\n      input,\n      status: \"ongoing\",\n      createdAt: now,\n      updatedAt: now,\n      meta,\n    },\n  ];\n}\n\nexport function updateTask(tasks: CBTask[], id: string, updates: Partial<CBTask>): CBTask[] {\n  return tasks.map((task) => (task.id === id ? { ...task, ...updates } : task));\n}\n\nexport function removeTask(tasks: CBTask[], id: string): CBTask[] {\n  return tasks.filter((task) => task.id !== id);\n}\n\nexport function getTask(tasks: CBTask[], id: string): CBTask | undefined {\n  return tasks.find((task) => task.id === id);\n}\n\nexport function setTaskStatus(tasks: CBTask[], id: string, status: CBTaskStatus): CBTask[] {\n  return tasks.map((task) => (task.id === id ? { ...task, status } : task));\n}\n\nexport function addMessageBlock(tasks: CBTask[], taskId: string, block: CBMessageBlock): CBTask[] {\n  return tasks.map((task) =>\n    task.id === taskId\n      ? { ...task, messageBlocks: [...(task.messageBlocks || []), block] }\n      : task\n  );\n}\n\nexport function getMessageBlocks(tasks: CBTask[], taskId: string): CBMessageBlock[] {\n  const task = tasks.find((t) => t.id === taskId);\n  return task?.messageBlocks || [];\n} ","'use client'\nimport { type CBListener, type CBStore } from '../types';\nimport { type CBState, type CBAction } from '../types';\n\nexport function createCBStore(\n  reducer: (state: CBState, action: CBAction) => CBState,\n  preloadedState: CBState\n): CBStore {\n  let state = preloadedState;\n  let listeners: CBListener[] = [];\n\n  function getState() {\n    return state;\n  }\n\n  function dispatch(action: CBAction) {\n    state = reducer(state, action);\n    listeners.forEach((listener) => listener());\n  }\n\n  function subscribe(listener: CBListener) {\n    listeners.push(listener);\n    return () => {\n      const index = listeners.indexOf(listener);\n      if (index > -1) listeners.splice(index, 1);\n    };\n  }\n\n  return {\n    getState,\n    dispatch,\n    subscribe,\n  };\n} ","'use client'\nimport  { type ReactNode, createContext, useContext } from 'react';\nimport type { CBStore } from '../types';\n\nconst CranberrryStoreContext = createContext<CBStore | null>(null);\nCranberrryStoreContext.displayName = 'CranberrryStoreContext';\n\nexport function CranberrryProvider({\n  store,\n  children,\n}: {\n  store: CBStore;\n  children: ReactNode;\n}) {\n  return (\n    <CranberrryStoreContext.Provider value={store}>\n      {children}\n    </CranberrryStoreContext.Provider>\n  );\n}\n\nexport function useCranberrryStore() {\n  const store = useContext(CranberrryStoreContext);\n  if (!store) {\n    throw new Error('useCranberrryStore must be used within a CranberrryProvider');\n  }\n  return store;\n} ","'use client'\nimport { useCranberrryStore } from '../provider/CranberrryProvider';\n\nexport function useCBDispatch() {\n  return useCranberrryStore().dispatch;\n} ","'use client'\nimport { useEffect, useRef, useState } from 'react';\nimport { useCranberrryStore } from '../provider/CranberrryProvider';\nimport { type CBState } from '../types';\n\nexport function useCBSelector<T>(selector: (state: CBState) => T): T {\n  const store = useCranberrryStore();\n  const [selected, setSelected] = useState(() => selector(store.getState()));\n  const latestSelected = useRef(selected);\n\n  useEffect(() => {\n    function checkForUpdates() {\n      const newSelected = selector(store.getState());\n      if (newSelected !== latestSelected.current) {\n        latestSelected.current = newSelected;\n        setSelected(newSelected);\n      }\n    }\n    const unsubscribe = store.subscribe(checkForUpdates);\n    return unsubscribe;\n  }, [store, selector]);\n\n  return selected;\n}\n\nexport const useAgentSelector = useCBSelector; ","'use client'\nimport { useCallback } from \"react\";\nimport { type CBMessageBlock, type CBTask, type CBTaskStatus } from \"../types\";\nimport { useCBDispatch } from \"./useAgentDispatch\";\nimport { useCBSelector } from \"./useAgentSelector\";\nimport {\n  addTask as addTaskAction,\n  updateTask as updateTaskAction,\n  removeTask as removeTaskAction,\n  addMessageBlock as addMessageBlockAction,\n} from \"../core/agentSlice\";\n\nexport function useCBTaskManager() {\n  const dispatch = useCBDispatch();\n  const tasks = useCBSelector((state: { tasks: CBTask[] }) => state.tasks);\n  const createTask = useCallback((agentId: string, input: string, meta?: Record<string, any>) => {\n    const id = Math.random().toString(36).substr(2, 9);\n    const now = Date.now();\n    dispatch(\n      addTaskAction({\n        id,\n        agentId,\n        input,\n        status: \"ongoing\",\n        createdAt: now,\n        updatedAt: now,\n        meta,\n      })\n    );\n    return id;\n  }, [dispatch]);\n\n  const updateTask = useCallback((id: string, updates: Partial<CBTask>) => {\n    dispatch(updateTaskAction({ id, ...updates }));\n  }, [dispatch]);\n\n  const removeTask = useCallback((id: string) => {\n    dispatch(removeTaskAction(id));\n  }, [dispatch]);\n\n  const getTask = useCallback((id: string) => {\n    return tasks.find((task: CBTask) => task.id === id);\n  }, [tasks]);\n\n  const setTaskStatus = useCallback((id: string, status: CBTaskStatus) => {\n    dispatch(updateTaskAction({ id, status, updatedAt: Date.now() }));\n  }, [dispatch]);\n\n  const addMessageBlockToTask = useCallback((taskId: string, block: CBMessageBlock) => {\n    dispatch(addMessageBlockAction(taskId, block));\n  }, [dispatch]);\n\n  return {\n    tasks,\n    createTask,\n    updateTask,\n    removeTask,\n    getTask,\n    setTaskStatus,\n    addMessageBlockToTask,\n  };\n} ","'use client'\nimport { useCBSelector } from './useAgentSelector';\nimport { type CBAgent } from '../types';\n\nexport function useCBAgent() {\n  const agents = useCBSelector(state => state.agents);\n  const getAgentById = (id: string): CBAgent | undefined =>\n    agents.find(agent => agent.id === id);\n\n  return { agents, getAgentById };\n} ","'use client'\nimport { useRef, useState, useCallback } from \"react\";\nimport { createAgentSupervisor, type CBBlockSupervisorCallbacks } from \"../core/agentSupervisor\";\nimport type { CBTaskStatus } from \"../types\";\nimport type { CBTagConfig } from \"../types\";\nimport type { Emitter } from \"mitt\";\nimport mitt from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport function useCBTaskSupervisor({\n  callbacks,\n  tagConfigs,\n  emitter = globalEmitter,\n}: {\n  callbacks: CBBlockSupervisorCallbacks;\n  tagConfigs: CBTagConfig[];\n  emitter?: Emitter<any>;\n}) {\n  const supervisorRef = useRef<ReturnType<typeof createAgentSupervisor> | null>(null);\n  const [status, setStatus] = useState<CBTaskStatus>(\"idle\");\n  const [error, setError] = useState<string | null>(null);\n\n  if (!supervisorRef.current) {\n    supervisorRef.current = createAgentSupervisor({ callbacks, tagConfigs, emitter });\n  }\n\n  const startTask = useCallback((taskId: string) => {\n    supervisorRef.current?.startTask(taskId);\n    setStatus(\"ongoing\");\n    setError(null);\n  }, []);\n\n  const parseChunk = useCallback((chunk: string) => {\n    supervisorRef.current?.parseChunk(chunk);\n  }, []);\n\n  const complete = useCallback(() => {\n    supervisorRef.current?.complete();\n    setStatus(\"completed\");\n  }, []);\n\n  const errorCallback = useCallback((err: string) => {\n    supervisorRef.current?.error(err);\n    setStatus(\"failed\");\n    setError(err);\n  }, []);\n\n  const reset = useCallback(() => {\n    supervisorRef.current?.reset();\n    setStatus(\"idle\");\n    setError(null);\n  }, []);\n\n  return {\n    status,\n    startTask,\n    parseChunk,\n    complete,\n    error: error,\n    errorCallback,\n    reset,\n  };\n} ","'use client'\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useCBTaskSupervisor } from \"./useAgentSupervisor\";\nimport { useCBTaskManager } from \"./useAgentTaskManager\";\nimport { useCBDispatch } from \"./useAgentDispatch\";\nimport { updateAgent } from \"../core/agentSlice\";\nimport type { CBBlockSupervisorCallbacks } from \"../core/agentSupervisor\";\nimport type { CBTagConfig, CBMessageBlock } from \"../types\";\nimport mitt from \"mitt\";\nimport type { Emitter } from \"mitt\";\n\n// Use the same global emitter as CranberrryRenderer\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport function useCBController({\n  agentId,\n  tagConfigs,\n  callbacks,\n}: {\n  agentId: string;\n  tagConfigs: CBTagConfig[];\n  callbacks: CBBlockSupervisorCallbacks;\n}) {\n  const [prompt, setPrompt] = useState(\"\");\n  const [errorMessage, setErrorMessage] = useState<string | null>(null);\n  const [currentTaskId, setCurrentTaskId] = useState<string | null>(null);\n  const currentTaskIdRef = useRef<string | null>(null);\n  const dispatch = useCBDispatch();\n  const emitter = globalEmitter;\n\n  const {\n    tasks,\n    createTask,\n    updateTask,\n    removeTask,\n    getTask,\n    setTaskStatus,\n    addMessageBlockToTask,\n    // addMessageBlock, getMessageBlocks imported above\n  } = useCBTaskManager();\n\n  // Always keep the ref in sync with state\n  currentTaskIdRef.current = currentTaskId;\n\n  // Wrap onComplete and onError to update agent status and task status robustly\n  const wrappedCallbacks = {\n    ...callbacks,\n    onComplete: () => {\n     \n\n      if(currentTaskIdRef.current) {\n        updateTask(currentTaskIdRef.current, { status: 'completed', updatedAt: Date.now() })\n      }\n      dispatch(updateAgent({ id: agentId, isBusy: false }));\n      callbacks.onComplete?.();\n    },\n    onError: (err: string) => {\n      if(currentTaskIdRef.current) {\n        updateTask(currentTaskIdRef.current, { status: 'failed', updatedAt: Date.now() })\n      }\n      dispatch(updateAgent({ id: agentId, isBusy: false }));\n      callbacks.onError?.(err);\n    },\n  };\n\n  // Internal message management\n  const [messageBlocks, setMessageBlocks] = useState<CBMessageBlock[]>([]);\n\n  // Keep messageBlocks in sync with the store for the current task\n  // This ensures that if the store updates (e.g., from another tab or event), we always show the latest\n  useEffect(() => {\n    if (currentTaskId) {\n      setMessageBlocks(getTask(currentTaskId)?.messageBlocks || []);\n    } else {\n      setMessageBlocks([]);\n    }\n  }, [currentTaskId, tasks]);\n\n  const supervisor = useCBTaskSupervisor({\n    callbacks: {\n      ...wrappedCallbacks,\n      onBlockProcessed: (block: CBMessageBlock) => {\n        if (currentTaskIdRef.current) {\n          addMessageBlockToTask(currentTaskIdRef.current, block);\n        }\n        callbacks.onBlockProcessed?.(block);\n      },\n      onBlockFound: (tag: string) => {\n        callbacks.onBlockFound?.(tag);\n      },\n      \n    },\n    tagConfigs,\n    emitter,\n  });\n  const { status, startTask, parseChunk, complete, error: supervisorError, errorCallback, reset } = supervisor;\n\n  const isRunning = status === \"ongoing\";\n\n  const startAgentTask = useCallback(\n    (newPrompt: string, newMeta?: Record<string, any>) => {\n      if (!newPrompt) throw new Error('Prompt is required');\n      setPrompt(newPrompt);\n     \n      setErrorMessage(null);\n      const newTaskId = createTask(agentId, newPrompt, newMeta);\n     \n      setCurrentTaskId(newTaskId);\n      currentTaskIdRef.current = newTaskId;\n      dispatch(updateAgent({ id: agentId, isBusy: true }));\n      // messageBlocks will be reset by useEffect when currentTaskId changes\n      startTask(newTaskId);\n      return newTaskId;\n    },\n    [startTask, createTask, tagConfigs, agentId, dispatch]\n  );\n\n  const startExistingAgentTask = useCallback(\n    (taskId: string) => {\n      const existingTask = getTask(taskId);\n      \n      if (!existingTask) {\n        throw new Error(`Task with ID ${taskId} not found`);\n      }\n\n      if (existingTask.agentId !== agentId) {\n        throw new Error(`Task ${taskId} does not belong to agent ${agentId}`);\n      }\n\n      // Check if task is in a valid state to resume\n      if (existingTask.status === 'completed') {\n        throw new Error(`Task ${taskId} is already completed and cannot be resumed`);\n      }\n\n      if (existingTask.status === 'failed') {\n        // Reset failed task to ongoing status\n        updateTask(taskId, { status: 'ongoing', updatedAt: Date.now() });\n      }\n\n      setPrompt(existingTask.input);\n      setErrorMessage(null);\n      setCurrentTaskId(taskId);\n      currentTaskIdRef.current = taskId;\n      dispatch(updateAgent({ id: agentId, isBusy: true }));\n      \n      // Start the task in the supervisor\n      startTask(taskId);\n      \n      return taskId;\n    },\n    [getTask, agentId, updateTask, startTask, dispatch]\n  );\n\n  // Expose the error function for simulation\n  const completeWithError = useCallback((err: string) => {\n    setErrorMessage(err);\n    callbacks.onError?.(err);\n    errorCallback(err);\n  }, [callbacks, errorCallback]);\n\n  return {\n    prompt,\n    setPrompt,\n    isRunning,\n    error: errorMessage || supervisorError,\n    startAgentTask,\n    startExistingAgentTask,\n    parseChunk,\n    complete,\n    reset,\n    status,\n    tasks,\n    updateTask,\n    removeTask,\n    getTask,\n    setTaskStatus,\n    completeWithError,\n    messageBlocks,\n    emitter,\n  };\n} ","'use client'\nimport React, { useEffect, useState } from 'react';\nimport { useAgentSelector } from '../hooks/useAgentSelector';\nimport type { CBMessageBlock } from '../types';\nimport mitt from 'mitt';\nimport type { Emitter } from 'mitt';\n\n// Use the same global emitter as everywhere else\nconst globalEmitter: Emitter<any> = (typeof window !== 'undefined' ? ((window as any).__cranberrryEmitter || ((window as any).__cranberrryEmitter = mitt())) : mitt());\n\nexport interface CranberrryRendererProps {\n  taskId: string;\n}\n\nexport const CranberrryRenderer: React.FC<CranberrryRendererProps> = ({ taskId }) => {\n  // Get message blocks from the store (if available)\n  const messageBlocks = useAgentSelector(\n    (state: any) => (state.tasks.find((t: any) => t.id === taskId)?.messageBlocks || [])\n  );\n  const [liveBlocks, setLiveBlocks] = useState<CBMessageBlock[]>(messageBlocks);\n\n  useEffect(() => {\n    setLiveBlocks(messageBlocks);\n  }, [messageBlocks]);\n\n  useEffect(() => {\n    function onMessage({ taskId: incomingTaskId, block }: { taskId: string; block: CBMessageBlock }) {\n     \n      if (incomingTaskId === taskId) {\n        setLiveBlocks((prev) => [...prev, block]);\n      }\n    }\n    globalEmitter.on('message', onMessage);\n    return () => {\n      globalEmitter.off('message', onMessage);\n    };\n  }, [taskId]);\n\n  return (\n    <div className=\"cranberrry-renderer-messages space-y-2\">\n      {liveBlocks.map((block) => {\n        const BlockComponent = block.component;\n        return <BlockComponent key={block.id} ai={block.content} />;\n      })}\n    </div>\n  );\n}; "]}