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()))
}
diff --git a/server/agent/manager.go b/server/agent/manager.go
index 016f5ac..3cc578e 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -163,10 +163,9 @@
return fmt.Errorf("agent %s not found for task %s", task.Assignee, taskID)
}
- // Reset the agent's current task and running state
+ // Reset the agent's current task only - keep agent running
agent.CurrentTask = nil
- agent.IsRunning = false
- m.isRunning[agent.Name] = false
+ // Note: Do NOT set agent.IsRunning = false - agent should continue processing new tasks
m.logger.Info("Completed task for agent",
slog.String("task_id", taskID),