auto-sync: 2026-06-02 15:02:08

This commit is contained in:
cfdaily
2026-06-02 15:02:08 +08:00
parent 70a330c7fb
commit 752b701893
+26
View File
@@ -1249,6 +1249,32 @@ curl -X POST http://{api_host}:{api_port}/api/projects/{project_id}/tasks/{task_
pass
return result
async def _probe_gateway(self, timeout: float = 3.0) -> bool:
"""TCP + WebSocket Upgrade 握手探测 Gateway 存活
#08: Phase -1 — 在 spawn 前探测 Gateway 进程是否可达。
不可达 → AgentBusyError(reason="gateway_down") → 任务留 pending → ticker 30s 后重试。
"""
try:
reader, writer = await asyncio.wait_for(
asyncio.open_connection(self.gateway_host, self.gateway_port),
timeout=timeout,
)
writer.write(
b'GET /ws HTTP/1.1\r\n'
b'Host: 127.0.0.1:%d\r\n'
b'Upgrade: websocket\r\n'
b'Connection: Upgrade\r\n'
b'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n'
b'Sec-WebSocket-Version: 13\r\n\r\n' % self.gateway_port
)
await writer.drain()
resp = await asyncio.wait_for(reader.read(256), timeout=timeout)
writer.close()
return b'101' in resp
except Exception:
return False
@staticmethod
def _classify_outcome(exit_code: int, json_result: dict, stderr_text: str,
task_status: Optional[str], stdout_text: str = "") -> dict: