auto-sync: 2026-05-18 23:24:52

This commit is contained in:
cfdaily
2026-05-18 23:24:52 +08:00
parent 5cdedf3934
commit 41a78a8798
+66
View File
@@ -616,3 +616,69 @@ class Blackboard:
finally:
conn.close()
# ===================================================================
# Archive (v2.8)
# ===================================================================
def archive_task(self, task_id: str) -> bool:
"""归档单个任务"""
conn = self._conn()
try:
conn.execute("BEGIN IMMEDIATE")
conn.execute(
"UPDATE tasks SET archived=1, archived_at=datetime('now'), "
"updated_at=datetime('now') WHERE id=?",
(task_id,),
)
conn.execute(
"INSERT INTO events (task_id, agent, event_type, detail) VALUES (?,?,?,?)",
(task_id, "daemon", "task_archived",
json.dumps({"action": "archive"})),
)
conn.commit()
return True
finally:
conn.close()
def unarchive_task(self, task_id: str) -> bool:
"""取消归档"""
conn = self._conn()
try:
conn.execute("BEGIN IMMEDIATE")
conn.execute(
"UPDATE tasks SET archived=0, archived_at=NULL, "
"updated_at=datetime('now') WHERE id=?",
(task_id,),
)
conn.execute(
"INSERT INTO events (task_id, agent, event_type, detail) VALUES (?,?,?,?)",
(task_id, "daemon", "task_unarchived",
json.dumps({"action": "unarchive"})),
)
conn.commit()
return True
finally:
conn.close()
def archive_done_tasks(self) -> int:
"""一键归档所有 done 状态的任务"""
conn = self._conn()
try:
conn.execute("BEGIN IMMEDIATE")
cursor = conn.execute(
"UPDATE tasks SET archived=1, archived_at=datetime('now'), "
"updated_at=datetime('now') "
"WHERE status='done' AND archived=0"
)
count = cursor.rowcount
if count > 0:
conn.execute(
"INSERT INTO events (task_id, agent, event_type, detail) VALUES (?,?,?,?)",
(None, "daemon", "task_archived",
json.dumps({"action": "archive_done_batch", "count": count})),
)
conn.commit()
return count
finally:
conn.close()