WIP: Large refactor checkpoint

- Refactored daemon client and RPC layer
- Added new client package structure in server
- Removed legacy hooks (use-daemon-request, use-session-rpc, use-websocket)
- Added use-daemon-client hook
- Added e2e test infrastructure with Playwright
- Updated agent providers and session handling
- Removed codex-sdk patches
This commit is contained in:
Mohamed Boudra
2026-01-12 13:30:20 +07:00
parent 7c2e959c19
commit 868f9fb571
64 changed files with 5773 additions and 4741 deletions
@@ -1,6 +1,5 @@
import { useQuery } from "@tanstack/react-query";
import { useSessionStore } from "@/stores/session-store";
import { sendRpcRequest } from "@/lib/send-rpc-request";
const COMMANDS_STALE_TIME = 60_000; // Commands rarely change, cache for 1 minute
@@ -25,26 +24,23 @@ export function useAgentCommandsQuery({
agentId,
enabled = true,
}: UseAgentCommandsQueryOptions) {
const ws = useSessionStore((state) => state.sessions[serverId]?.ws);
// Use getConnectionState for more reliable connection check
const isConnected = ws?.getConnectionState
? ws.getConnectionState().isConnected
: ws?.isConnected ?? false;
const client = useSessionStore(
(state) => state.sessions[serverId]?.client ?? null
);
const isConnected = useSessionStore(
(state) => state.sessions[serverId]?.connection.isConnected ?? false
);
const query = useQuery({
queryKey: commandsQueryKey(serverId, agentId),
queryFn: async () => {
if (!ws) {
throw new Error("WebSocket not available");
if (!client) {
throw new Error("Daemon client not available");
}
const response = await sendRpcRequest(ws, {
type: "list_commands_request",
agentId,
});
const response = await client.listCommands(agentId);
return response.commands as AgentSlashCommand[];
},
enabled: enabled && !!ws && isConnected && !!agentId,
enabled: enabled && !!client && isConnected && !!agentId,
staleTime: COMMANDS_STALE_TIME,
retry: 3,
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 5000),