diff --git a/gadget-code/frontend/src/lib/api.ts b/gadget-code/frontend/src/lib/api.ts
index 5eea22c..9720604 100644
--- a/gadget-code/frontend/src/lib/api.ts
+++ b/gadget-code/frontend/src/lib/api.ts
@@ -408,7 +408,7 @@ export interface ChatTurn {
provider: string | AiProvider;
llm: string;
mode: ChatSessionMode;
- status: "processing" | "finished" | "error";
+ status: "processing" | "finished" | "aborted" | "error";
prompts: ChatTurnPrompts;
blocks: ChatTurnBlock[];
errorMessage?: string;
diff --git a/gadget-code/frontend/src/lib/socket.ts b/gadget-code/frontend/src/lib/socket.ts
index 5fa3cd4..444b7d3 100644
--- a/gadget-code/frontend/src/lib/socket.ts
+++ b/gadget-code/frontend/src/lib/socket.ts
@@ -42,6 +42,7 @@ export interface ServerToClientEvents {
export interface ClientToServerEvents {
submitPrompt: (content: string) => void;
+ abortWorkOrder: (cb: (success: boolean, message?: string) => void) => void;
requestSessionLock: (
registration: any,
project: any,
@@ -353,6 +354,16 @@ class SocketClient {
}
}
+ abortWorkOrder(cb?: (success: boolean, message?: string) => void): void {
+ if (this._socket?.connected) {
+ this._socket.emit('abortWorkOrder', (success: boolean, message?: string) => {
+ cb?.(success, message);
+ });
+ } else {
+ cb?.(false, 'Socket not connected');
+ }
+ }
+
requestSessionLock(
registration: any,
project: any,
diff --git a/gadget-code/frontend/src/pages/ChatSessionView.tsx b/gadget-code/frontend/src/pages/ChatSessionView.tsx
index 4765db4..608f1de 100644
--- a/gadget-code/frontend/src/pages/ChatSessionView.tsx
+++ b/gadget-code/frontend/src/pages/ChatSessionView.tsx
@@ -50,6 +50,7 @@ export default function ChatSessionView() {
const [turns, setTurns] = useState
([]);
const [promptInput, setPromptInput] = useState('');
const [isProcessing, setIsProcessing] = useState(false);
+ const [isAborting, setIsAborting] = useState(false);
const [loading, setLoading] = useState(true);
const [error, setError] = useState('');
const [sessionLocked, setSessionLocked] = useState(true);
@@ -81,6 +82,8 @@ export default function ChatSessionView() {
const updateRafRef = useRef(null);
const currentTurnIdRef = useRef(null);
const streamingStateRef = useRef