fix: 修复设计 Agent 慢响应超时

问题:客户端每 250ms 轮询 Run,并在 120 秒固定超时,导致服务端日志刷屏且慢响应被提前判定失败。

修复:将轮询改为 1 秒起步、最高 5 秒的指数退避,并将等待窗口调整为 10 分钟;新增 150 秒慢 Run 回归测试。
This commit is contained in:
2026-08-03 11:47:27 +08:00
parent f9b2616d14
commit 20c567fe5f
2 changed files with 59 additions and 3 deletions

View File

@@ -190,8 +190,9 @@ type TaskEventQueue = {
const AGENT_WEBSOCKET_OPEN = 1;
const AGENT_WEBSOCKET_PING_INTERVAL_MS = 20_000;
const AGENT_RUN_POLL_INTERVAL_MS = 250;
const AGENT_RUN_TIMEOUT_MS = 120_000;
const AGENT_RUN_INITIAL_POLL_INTERVAL_MS = 1_000;
const AGENT_RUN_MAX_POLL_INTERVAL_MS = 5_000;
const AGENT_RUN_TIMEOUT_MS = 10 * 60_000;
function mapBrief(brief: ServerBrief): DesignBrief {
return {
@@ -737,6 +738,7 @@ export class WorksSquareDesignWorkspace implements DesignWorkspaceModule {
private async waitForAgentRun(sessionId: string, runId: string): Promise<ServerAgentRun> {
const deadline = Date.now() + AGENT_RUN_TIMEOUT_MS;
let pollInterval = AGENT_RUN_INITIAL_POLL_INTERVAL_MS;
while (true) {
const run = await this.requestJson<ServerAgentRun>(
`/api/agents/sessions/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(runId)}`,
@@ -751,7 +753,8 @@ export class WorksSquareDesignWorkspace implements DesignWorkspaceModule {
'设计 Agent 响应超时,请稍后重试',
);
}
await new Promise<void>((resolve) => setTimeout(resolve, AGENT_RUN_POLL_INTERVAL_MS));
await new Promise<void>((resolve) => setTimeout(resolve, pollInterval));
pollInterval = Math.min(pollInterval * 2, AGENT_RUN_MAX_POLL_INTERVAL_MS);
}
}