fix: dynamic col names + no-duplicate assistant/result event handling

This commit is contained in:
Zac Gaetano 2026-04-05 12:09:39 -04:00
parent cbc420d22a
commit 048072b4f3

View file

@ -488,16 +488,13 @@ async def _run_scheduled_task(task_id: str):
c = conn.cursor() c = conn.cursor()
c.execute("SELECT * FROM tasks WHERE id=?", (task_id,)) c.execute("SELECT * FROM tasks WHERE id=?", (task_id,))
row = c.fetchone() row = c.fetchone()
cols = [d[0] for d in c.description]
conn.close() conn.close()
if not row: if not row:
logger.error(f"Scheduled task {task_id} not found") logger.error(f"Scheduled task {task_id} not found")
return return
cols = ["id", "name", "description", "prompt", "schedule_type", "schedule_value",
"enabled", "created_at", "last_run", "next_run", "status",
"agent_tools", "agent_system_prompt", "agent_max_turns",
"agent_permission_mode", "agent_timeout"]
task_data = dict(zip(cols, row)) task_data = dict(zip(cols, row))
task = Task(**{k: v for k, v in task_data.items() if k in Task.model_fields}) task = Task(**{k: v for k, v in task_data.items() if k in Task.model_fields})
@ -789,11 +786,8 @@ async def list_tasks():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
c = conn.cursor() c = conn.cursor()
c.execute("SELECT * FROM tasks ORDER BY created_at DESC") c.execute("SELECT * FROM tasks ORDER BY created_at DESC")
cols = [d[0] for d in c.description]
rows = c.fetchall() rows = c.fetchall()
cols = ["id", "name", "description", "prompt", "schedule_type", "schedule_value",
"enabled", "created_at", "last_run", "next_run", "status",
"agent_tools", "agent_system_prompt", "agent_max_turns",
"agent_permission_mode", "agent_timeout"]
conn.close() conn.close()
return [dict(zip(cols, r)) for r in rows] return [dict(zip(cols, r)) for r in rows]
@ -840,13 +834,10 @@ async def get_task(task_id: str):
c = conn.cursor() c = conn.cursor()
c.execute("SELECT * FROM tasks WHERE id=?", (task_id,)) c.execute("SELECT * FROM tasks WHERE id=?", (task_id,))
row = c.fetchone() row = c.fetchone()
cols = [d[0] for d in c.description]
conn.close() conn.close()
if not row: if not row:
raise HTTPException(404, "Task not found") raise HTTPException(404, "Task not found")
cols = ["id", "name", "description", "prompt", "schedule_type", "schedule_value",
"enabled", "created_at", "last_run", "next_run", "status",
"agent_tools", "agent_system_prompt", "agent_max_turns",
"agent_permission_mode", "agent_timeout"]
return dict(zip(cols, row)) return dict(zip(cols, row))
@ -907,14 +898,11 @@ async def run_task_now(task_id: str, background_tasks: BackgroundTasks):
c = conn.cursor() c = conn.cursor()
c.execute("SELECT * FROM tasks WHERE id=?", (task_id,)) c.execute("SELECT * FROM tasks WHERE id=?", (task_id,))
row = c.fetchone() row = c.fetchone()
cols = [d[0] for d in c.description]
conn.close() conn.close()
if not row: if not row:
raise HTTPException(404, "Task not found") raise HTTPException(404, "Task not found")
cols = ["id", "name", "description", "prompt", "schedule_type", "schedule_value",
"enabled", "created_at", "last_run", "next_run", "status",
"agent_tools", "agent_system_prompt", "agent_max_turns",
"agent_permission_mode", "agent_timeout"]
task_data = dict(zip(cols, row)) task_data = dict(zip(cols, row))
task = Task(**{k: v for k, v in task_data.items() if k in Task.model_fields}) task = Task(**{k: v for k, v in task_data.items() if k in Task.model_fields})