UNPKG

@copilotkit/react-core

Version:

<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />

126 lines (124 loc) 4.02 kB
import { useStateRenderRegistry } from "./chunk-QXZTCGF4.mjs"; import { useCoAgentStateRenders } from "./chunk-IHMMKEFG.mjs"; import { __spreadProps, __spreadValues } from "./chunk-SKC7AJIV.mjs"; // src/hooks/use-coagent-state-render-bridge.tsx import { useAgent } from "@copilotkitnext/react"; import { useCallback, useEffect, useMemo, useState } from "react"; import { parseJson } from "@copilotkit/shared"; function useCoagentStateRenderBridge(agentId, props) { var _a; const { stateSnapshot, message } = props; const { coAgentStateRenders, claimsRef } = useCoAgentStateRenders(); const { agent } = useAgent({ agentId }); const [nodeName, setNodeName] = useState(void 0); const [, forceUpdate] = useState(0); useEffect(() => { if (!agent) return; const subscriber = { onStateChanged: () => { forceUpdate((value) => value + 1); }, onStepStartedEvent: ({ event }) => { if (event.stepName !== nodeName) { setNodeName(event.stepName); } }, onStepFinishedEvent: ({ event }) => { if (event.stepName === nodeName) { setNodeName(void 0); } } }; const { unsubscribe } = agent.subscribe(subscriber); return () => { unsubscribe(); }; }, [agentId, nodeName]); const getStateRender = useCallback( (messageId) => { return Object.entries(coAgentStateRenders).find( ([stateRenderId2, stateRender2]) => { if (claimsRef.current[messageId]) { return stateRenderId2 === claimsRef.current[messageId].stateRenderId; } const matchingAgentName = stateRender2.name === agentId; const matchesNodeContext = stateRender2.nodeName ? stateRender2.nodeName === nodeName : true; return matchingAgentName && matchesNodeContext; } ); }, [coAgentStateRenders, nodeName, agentId] ); const stateRenderEntry = useMemo( () => getStateRender(message.id), [getStateRender, message.id] ); const stateRenderId = stateRenderEntry == null ? void 0 : stateRenderEntry[0]; const stateRender = stateRenderEntry == null ? void 0 : stateRenderEntry[1]; const registryMessage = __spreadProps(__spreadValues({}, message), { runId: (_a = props.runId) != null ? _a : message.runId }); const { canRender } = useStateRenderRegistry({ agentId, stateRenderId, message: registryMessage, messageIndex: props.messageIndex, stateSnapshot, agentState: agent == null ? void 0 : agent.state, agentMessages: agent == null ? void 0 : agent.messages, claimsRef }); return useMemo(() => { var _a2, _b; if (!stateRender || !stateRenderId) { return null; } if (!canRender) { return null; } if (stateRender.handler) { stateRender.handler({ state: stateSnapshot ? parseJson(stateSnapshot, stateSnapshot) : (_a2 = agent == null ? void 0 : agent.state) != null ? _a2 : {}, nodeName: nodeName != null ? nodeName : "" }); } if (stateRender.render) { const status = (agent == null ? void 0 : agent.isRunning) ? "inProgress" /* InProgress */ : "complete" /* Complete */; if (typeof stateRender.render === "string") return stateRender.render; return stateRender.render({ status, // Always use state from claim, to make sure the state does not seem "wiped" for a fraction of a second state: (_b = claimsRef.current[message.id].stateSnapshot) != null ? _b : {}, nodeName: nodeName != null ? nodeName : "" }); } }, [ stateRender, stateRenderId, agent == null ? void 0 : agent.state, agent == null ? void 0 : agent.isRunning, nodeName, message.id, stateSnapshot, canRender ]); } function CoAgentStateRenderBridge(props) { return useCoagentStateRenderBridge(props.agentId, props); } export { useCoagentStateRenderBridge, CoAgentStateRenderBridge }; //# sourceMappingURL=chunk-G7SUZGGB.mjs.map