fix(cli): remove side-effect from agent:end state updater (#133) #147
@@ -52,6 +52,7 @@ export function TuiApp({
|
|||||||
const [availableModels, setAvailableModels] = useState<ModelInfo[]>([]);
|
const [availableModels, setAvailableModels] = useState<ModelInfo[]>([]);
|
||||||
|
|
||||||
const socketRef = useRef<Socket | null>(null);
|
const socketRef = useRef<Socket | null>(null);
|
||||||
|
const currentStreamTextRef = useRef('');
|
||||||
|
|
||||||
// Fetch available models on mount
|
// Fetch available models on mount
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -102,20 +103,22 @@ export function TuiApp({
|
|||||||
|
|
||||||
socket.on('agent:start', () => {
|
socket.on('agent:start', () => {
|
||||||
setIsStreaming(true);
|
setIsStreaming(true);
|
||||||
|
currentStreamTextRef.current = '';
|
||||||
setCurrentStreamText('');
|
setCurrentStreamText('');
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('agent:text', (data: { text: string }) => {
|
socket.on('agent:text', (data: { text: string }) => {
|
||||||
setCurrentStreamText((prev) => prev + data.text);
|
currentStreamTextRef.current += data.text;
|
||||||
|
setCurrentStreamText(currentStreamTextRef.current);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('agent:end', () => {
|
socket.on('agent:end', () => {
|
||||||
setCurrentStreamText((prev) => {
|
const finalText = currentStreamTextRef.current;
|
||||||
if (prev) {
|
currentStreamTextRef.current = '';
|
||||||
setMessages((msgs) => [...msgs, { role: 'assistant', content: prev }]);
|
setCurrentStreamText('');
|
||||||
}
|
if (finalText) {
|
||||||
return '';
|
setMessages((msgs) => [...msgs, { role: 'assistant', content: finalText }]);
|
||||||
});
|
}
|
||||||
setIsStreaming(false);
|
setIsStreaming(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user