| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | import {  useCallback,  useRef,  useState,} from 'react'import { useBoolean } from 'ahooks'import type {  AgentLogItemWithChildren,  IterationDurationMap,  LoopDurationMap,  NodeTracing,} from '@/types/workflow'export const useLogs = () => {  const [showRetryDetail, {    setTrue: setShowRetryDetailTrue,    setFalse: setShowRetryDetailFalse,  }] = useBoolean(false)  const [retryResultList, setRetryResultList] = useState<NodeTracing[]>([])  const handleShowRetryResultList = useCallback((detail: NodeTracing[]) => {    setShowRetryDetailTrue()    setRetryResultList(detail)  }, [setShowRetryDetailTrue, setRetryResultList])  const [showIteratingDetail, {    setTrue: setShowIteratingDetailTrue,    setFalse: setShowIteratingDetailFalse,  }] = useBoolean(false)  const [iterationResultList, setIterationResultList] = useState<NodeTracing[][]>([])  const [iterationResultDurationMap, setIterationResultDurationMap] = useState<IterationDurationMap>({})  const handleShowIterationResultList = useCallback((detail: NodeTracing[][], iterDurationMap: IterationDurationMap) => {    setShowIteratingDetailTrue()    setIterationResultList(detail)    setIterationResultDurationMap(iterDurationMap)  }, [setShowIteratingDetailTrue, setIterationResultList, setIterationResultDurationMap])  const [showLoopingDetail, {    setTrue: setShowLoopingDetailTrue,    setFalse: setShowLoopingDetailFalse,  }] = useBoolean(false)  const [loopResultList, setLoopResultList] = useState<NodeTracing[][]>([])  const [loopResultDurationMap, setLoopResultDurationMap] = useState<LoopDurationMap>({})  const handleShowLoopResultList = useCallback((detail: NodeTracing[][], loopDurationMap: LoopDurationMap) => {    setShowLoopingDetailTrue()    setLoopResultList(detail)    setLoopResultDurationMap(loopDurationMap)  }, [setShowLoopingDetailTrue, setLoopResultList, setLoopResultDurationMap])  const [agentOrToolLogItemStack, setAgentOrToolLogItemStack] = useState<AgentLogItemWithChildren[]>([])  const agentOrToolLogItemStackRef = useRef(agentOrToolLogItemStack)  const [agentOrToolLogListMap, setAgentOrToolLogListMap] = useState<Record<string, AgentLogItemWithChildren[]>>({})  const agentOrToolLogListMapRef = useRef(agentOrToolLogListMap)  const handleShowAgentOrToolLog = useCallback((detail?: AgentLogItemWithChildren) => {    if (!detail) {      setAgentOrToolLogItemStack([])      agentOrToolLogItemStackRef.current = []      return    }    const { id, children } = detail    let currentAgentOrToolLogItemStack = agentOrToolLogItemStackRef.current.slice()    const index = currentAgentOrToolLogItemStack.findIndex(logItem => logItem.id === id)    if (index > -1)      currentAgentOrToolLogItemStack = currentAgentOrToolLogItemStack.slice(0, index + 1)    else      currentAgentOrToolLogItemStack = [...currentAgentOrToolLogItemStack.slice(), detail]    setAgentOrToolLogItemStack(currentAgentOrToolLogItemStack)    agentOrToolLogItemStackRef.current = currentAgentOrToolLogItemStack    if (children) {      setAgentOrToolLogListMap({        ...agentOrToolLogListMapRef.current,        [id]: children,      })    }  }, [setAgentOrToolLogItemStack, setAgentOrToolLogListMap])  return {    showSpecialResultPanel: showRetryDetail || showIteratingDetail || showLoopingDetail || !!agentOrToolLogItemStack.length,    showRetryDetail,    setShowRetryDetailTrue,    setShowRetryDetailFalse,    retryResultList,    setRetryResultList,    handleShowRetryResultList,    showIteratingDetail,    setShowIteratingDetailTrue,    setShowIteratingDetailFalse,    iterationResultList,    setIterationResultList,    iterationResultDurationMap,    setIterationResultDurationMap,    handleShowIterationResultList,    showLoopingDetail,    setShowLoopingDetailTrue,    setShowLoopingDetailFalse,    loopResultList,    setLoopResultList,    loopResultDurationMap,    setLoopResultDurationMap,    handleShowLoopResultList,    agentOrToolLogItemStack,    agentOrToolLogListMap,    handleShowAgentOrToolLog,  }}
 |