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()))
}