auto-sync: 2026-05-22 13:38:15

This commit is contained in:
cfdaily
2026-05-22 13:38:15 +08:00
parent 1456745d59
commit 95a423f03c
+10 -8
View File
@@ -452,7 +452,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
agent_id, session_id, outcome, exit_code, task_status)
if cls["release_counter"]:
self._do_on_complete(on_complete, agent_id, outcome)
await self._do_on_complete_async(on_complete, agent_id, outcome)
elif cls["should_retry"]:
# 续杯:不 release counter,直接再 spawn
await self._do_retry(
@@ -484,7 +484,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
agent_id, session_id)
self._mark_task(db_path, task_id, "failed",
{"reason": "session_stuck", "diagnostics": state})
self._do_on_complete(on_complete, agent_id, "session_stuck")
self._do_on_complete_async(on_complete, agent_id, "session_stuck")
return
# B2/B3/B4: 进程还活着
@@ -498,7 +498,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
"elapsed_seconds": monitor_timeout_count * int(self.agent_timeout),
"diagnostics": state,
})
self._do_on_complete(on_complete, agent_id, "max_monitor_timeouts")
self._do_on_complete_async(on_complete, agent_id, "max_monitor_timeouts")
return
# 未超限:继续等(不 release counter
@@ -524,7 +524,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
self._mark_task(db_path, task_id, "failed", {
"reason": f"max_{retry_field}", "count": count,
})
self._do_on_complete(on_complete, agent_id, "max_retries")
self._do_on_complete_async(on_complete, agent_id, "max_retries")
return
logger.info("Agent %s retry %s=%d/%d (session=%s)",
@@ -557,7 +557,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
)
except Exception:
logger.exception("Retry spawn failed for %s", agent_id)
self._do_on_complete(on_complete, agent_id, "retry_spawn_failed")
self._do_on_complete_async(on_complete, agent_id, "retry_spawn_failed")
# ── 辅助方法 ──
@@ -824,6 +824,7 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
outcome: str,
exit_code: Optional[int] = None,
error: Optional[str] = None,
metadata: Optional[dict] = None,
) -> None:
"""记录 task_attempt"""
if not task_id or not self.db_path:
@@ -833,20 +834,21 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
conn = get_connection(self.db_path)
try:
conn.execute("BEGIN IMMEDIATE")
# 获取 attempt_number
row = conn.execute(
"SELECT MAX(attempt_number) as max_a FROM task_attempts WHERE task_id=?",
(task_id,),
).fetchone()
attempt_number = (row["max_a"] or 0) + 1
metadata = {"error": error} if error else {}
meta = metadata or {}
if error:
meta["error"] = error
conn.execute(
"INSERT INTO task_attempts "
"(task_id, attempt_number, agent, outcome, exit_code, metadata, completed_at) "
"VALUES (?,?,?,?,?,?,datetime('now'))",
(task_id, attempt_number, agent_id, outcome,
exit_code, json.dumps(metadata)),
exit_code, json.dumps(meta)),
)
conn.execute(
"INSERT INTO events (task_id, agent, event_type, detail) VALUES (?,?,?,?)",