Process Single task at a time

Change-Id: I2099c144e19a3e60dd5a194c56449652fb68e58d
diff --git a/server/agent/agent.go b/server/agent/agent.go
index f189794..a64ca1d 100644
--- a/server/agent/agent.go
+++ b/server/agent/agent.go
@@ -123,11 +123,14 @@
 
 	for _, task := range tasks {
 		if task.Status == tm.StatusToDo {
-			if err := a.processTask(task); err != nil {
-				a.logger.Error("Error processing task",
-					slog.String("task_id", task.ID),
-					slog.String("error", err.Error()))
+			err2 := a.processTask(task)
+			if err2 == nil {
+				return nil
 			}
+			a.logger.Error("Error processing task",
+				slog.String("task_id", task.ID),
+				slog.String("error", err2.Error()))
+
 		}
 	}
 
@@ -147,6 +150,15 @@
 	// Mark task as in progress
 	task.Status = tm.StatusInProgress
 	a.CurrentTask = &task.ID
+	defer func() {
+		if r := recover(); r != nil {
+			a.logger.Error("Task processing panicked, clearing agent state",
+				slog.String("task_id", task.ID),
+				slog.String("agent", a.Name))
+			a.CurrentTask = nil
+			panic(r)
+		}
+	}()
 
 	// Check if this task should generate subtasks (with LLM decision)
 	if a.thinker.ShouldGenerateSubtasks(task) {
@@ -157,8 +169,9 @@
 				slog.String("agent", a.Name))
 			return nil
 		}
-		a.logger.Error("Error processing subtask",
+		a.logger.Error("Subtask processing failed, cleared agent state",
 			slog.String("task_id", task.ID),
+			slog.String("agent", a.Name),
 			slog.String("error", err.Error()))
 	}