auto-sync: 2026-05-29 08:31:09
This commit is contained in:
@@ -935,3 +935,85 @@ class Blackboard:
|
||||
return row["round_count"] if row else 0
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
# ===================================================================
|
||||
# Mention Queue (v2.9 #01)
|
||||
# ===================================================================
|
||||
|
||||
def record_mentions(self, comment_id: int, task_id: str,
|
||||
mentioned_agents: List[str]) -> int:
|
||||
"""写入 mention_queue 记录(comment 创建时调用)"""
|
||||
if not mentioned_agents:
|
||||
return 0
|
||||
conn = self._conn()
|
||||
try:
|
||||
conn.execute("BEGIN IMMEDIATE")
|
||||
count = 0
|
||||
for agent_id in mentioned_agents:
|
||||
exists = conn.execute(
|
||||
"SELECT id FROM mention_queue WHERE comment_id=? AND mentioned_agent=?",
|
||||
(comment_id, agent_id)
|
||||
).fetchone()
|
||||
if not exists:
|
||||
conn.execute(
|
||||
"INSERT INTO mention_queue (comment_id, task_id, mentioned_agent, status) "
|
||||
"VALUES (?,?,?,'pending')",
|
||||
(comment_id, task_id, agent_id)
|
||||
)
|
||||
count += 1
|
||||
conn.commit()
|
||||
return count
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def get_pending_mentions(self, max_retries: int = 5) -> List[Dict[str, Any]]:
|
||||
"""获取所有 pending 且未超过重试上限的 mentions"""
|
||||
conn = self._conn()
|
||||
try:
|
||||
rows = conn.execute(
|
||||
"""SELECT mq.*, c.body as comment_body, c.author as comment_author
|
||||
FROM mention_queue mq
|
||||
JOIN comments c ON mq.comment_id = c.id
|
||||
WHERE mq.status = 'pending' AND mq.retry_count < ?
|
||||
ORDER BY mq.created_at ASC""",
|
||||
(max_retries,)
|
||||
).fetchall()
|
||||
return [dict(r) for r in rows]
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def mark_mention_notified(self, mention_id: int) -> bool:
|
||||
"""标记 mention 为已通知"""
|
||||
conn = self._conn()
|
||||
try:
|
||||
conn.execute("BEGIN IMMEDIATE")
|
||||
conn.execute(
|
||||
"UPDATE mention_queue SET status='notified', notified_at=datetime('now') WHERE id=?",
|
||||
(mention_id,)
|
||||
)
|
||||
conn.commit()
|
||||
return True
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def mark_mention_retry(self, mention_id: int) -> bool:
|
||||
"""递增 mention 重试计数"""
|
||||
conn = self._conn()
|
||||
try:
|
||||
conn.execute("BEGIN IMMEDIATE")
|
||||
conn.execute("UPDATE mention_queue SET retry_count=retry_count+1 WHERE id=?", (mention_id,))
|
||||
conn.commit()
|
||||
return True
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def mark_mention_failed(self, mention_id: int) -> bool:
|
||||
"""标记 mention 为失败(超过重试上限)"""
|
||||
conn = self._conn()
|
||||
try:
|
||||
conn.execute("BEGIN IMMEDIATE")
|
||||
conn.execute("UPDATE mention_queue SET status='failed' WHERE id=?", (mention_id,))
|
||||
conn.commit()
|
||||
return True
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
Reference in New Issue
Block a user