import { useCallback, useState } from "react"; import { cancelCodeAgentTurn, steerCodeAgentTurn, submitCodeAgentTurn } from "../services/api/codeAgent.ts"; export function useCodeAgentSubmit({ workspace, activeConversationId, activeSessionId }) { const [pending, setPending] = useState(false); const [lastError, setLastError] = useState(null); const [lastTraceId, setLastTraceId] = useState(null); const submit = useCallback( async ({ message, mode = "turn" }) => { setLastError(null); setPending(true); const payload = { message, conversationId: activeConversationId, sessionId: activeSessionId, workspaceId: workspace?.workspaceId ?? null, workspaceRevision: workspace?.revision ?? null, threadId: workspace?.threadId ?? null, }; const action = mode === "steer" ? steerCodeAgentTurn : submitCodeAgentTurn; const result = await action(payload); setPending(false); if (!result.ok) { setLastError(`submit failed: ${result.status}`); return { ok: false }; } const traceId = result.data?.traceId ?? result.data?.targetTraceId ?? null; if (traceId) setLastTraceId(traceId); return { ok: true, traceId, data: result.data }; }, [activeConversationId, activeSessionId, workspace] ); const cancel = useCallback(async () => { if (!lastTraceId) return { ok: false, error: "no active trace" }; setPending(true); const result = await cancelCodeAgentTurn({ traceId: lastTraceId }); setPending(false); return { ok: result.ok, data: result.data }; }, [lastTraceId]); return { submit, cancel, pending, lastError, lastTraceId }; }