also no idea, from monorepo

This commit is contained in:
2026-02-20 18:25:15 +00:00
parent f48093424c
commit ef1530b626
6 changed files with 473 additions and 419 deletions
@@ -1,10 +1,7 @@
import { useState, useEffect, useRef } from 'react';
import { useChatWebSocket } from 'hooks/useChatWebSocket';
import { useChatSessions } from '@/state/useChatSessions';
import type { ChatMessage, ServerMessage, TaskInfo } from 'apps/Chat';
const SAVE_DEBOUNCE_MS = 1000;
type UsePiMonoOptions = {
replaceUrl?: boolean;
taskInfo?: TaskInfo;
@@ -22,9 +19,6 @@ export const usePiMono = (initialSessionId?: string, initialModel?: string | nul
const streamingRef = useRef('');
const rafRef = useRef<number | null>(null);
const sessionIdRef = useRef<string | null>(initialSessionId ?? null);
const saveTimerRef = useRef<number | null>(null);
const { getMessages, saveMessages } = useChatSessions();
const token = localStorage.getItem('BEARER_TOKEN');
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
@@ -56,8 +50,11 @@ export const usePiMono = (initialSessionId?: string, initialModel?: string | nul
if (replaceUrl) window.history.replaceState(null, '', `/chat/${msg.sessionId}`);
break;
case 'system:prompt':
setMessages((prev) => [...prev, { role: 'system', text: msg.text }]);
case 'messages:sync':
setMessages(msg.messages);
streamingRef.current = msg.streamingText;
setStreamingText(msg.streamingText);
setIsGenerating(msg.isGenerating);
break;
case 'assistant:partial':
@@ -125,37 +122,6 @@ export const usePiMono = (initialSessionId?: string, initialModel?: string | nul
}
}, [isConnected, initialSessionId]);
// Load messages from server on mount when resuming a session
useEffect(() => {
if (!initialSessionId) return;
getMessages('pi-mono', initialSessionId)
.then((data) => {
if (Array.isArray(data) && data.length > 0) setMessages(data);
})
.catch(() => {});
}, [initialSessionId]);
// Debounced save messages to server
useEffect(() => {
if (!sessionIdRef.current || messages.length === 0) return;
if (saveTimerRef.current !== null) clearTimeout(saveTimerRef.current);
const sid = sessionIdRef.current;
const snapshot = messages;
saveTimerRef.current = window.setTimeout(() => {
saveMessages('pi-mono', sid, snapshot).catch(() => {});
saveTimerRef.current = null;
}, SAVE_DEBOUNCE_MS);
return () => {
if (saveTimerRef.current !== null) {
clearTimeout(saveTimerRef.current);
saveTimerRef.current = null;
}
};
}, [messages]);
// Clean up RAF on unmount
useEffect(() => {
return () => {
@@ -184,7 +150,7 @@ export const usePiMono = (initialSessionId?: string, initialModel?: string | nul
send({
type: 'chat',
prompt: text,
sessionId: sessionIdRef.current,
...(sessionIdRef.current ? { sessionId: sessionIdRef.current } : {}),
...(selectedModel ? { model: selectedModel } : {}),
...(cwd ? { cwd } : {}),
...(attachmentIds?.length ? { attachmentIds } : {}),