fix(chat): 阻止同会话并发 Agent Run 导致消息错乱
前端 submit 改用 chatStateRef 同步拦截连发;后端 createRun 检测同 session 活跃任务并返回 409,避免多条回复交错落库。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -340,6 +340,23 @@ export function createAgentRunGateway({
|
||||
return projectRun(existing);
|
||||
}
|
||||
|
||||
// Prevent multiple concurrent agent runs on the same Goose session, which would
|
||||
// cause replies to arrive out of order and appear garbled in the chat UI.
|
||||
if (sessionId && !isDirectChatSessionId(sessionId)) {
|
||||
const [activeRows] = await pool.query(
|
||||
`SELECT id FROM h5_agent_runs
|
||||
WHERE agent_session_id = ? AND status NOT IN ('succeeded', 'failed')
|
||||
LIMIT 1`,
|
||||
[sessionId],
|
||||
);
|
||||
if (activeRows.length > 0) {
|
||||
const conflict = new Error('该会话有正在处理的任务,请等待完成后再发送');
|
||||
conflict.code = 'SESSION_RUN_CONFLICT';
|
||||
conflict.status = 409;
|
||||
throw conflict;
|
||||
}
|
||||
}
|
||||
|
||||
const runId = crypto.randomUUID();
|
||||
const createdAt = nowMs();
|
||||
const runMessage = withRunMetadata(userMessage, {
|
||||
|
||||
Reference in New Issue
Block a user