fix: ignore stale workbench active trace
This commit is contained in:
@@ -902,7 +902,17 @@ async function claimWorkbenchWorkspaceTurn({ params = {}, options = {}, traceId,
|
||||
}
|
||||
const activeTraceId = safeTraceId(workspace.activeTraceId);
|
||||
const activeResult = activeTraceId ? await resolveWorkbenchActiveTraceResult(activeTraceId, options) : null;
|
||||
if (activeTraceId && (!activeResult || activeResult.status === "running")) {
|
||||
const selectedConversationId = safeConversationId(workspace.selectedConversationId);
|
||||
const shouldInspectSelectedConversation = Boolean(
|
||||
activeTraceId && !activeResult && selectedConversationId && options.accessController?.visibleConversationForActor
|
||||
);
|
||||
const selectedConversation = shouldInspectSelectedConversation
|
||||
? await options.accessController.visibleConversationForActor(options.actor, selectedConversationId, workspace.projectId)
|
||||
: null;
|
||||
const activeTraceBlocksTurn = Boolean(
|
||||
activeTraceId && (activeResult?.status === "running" || (!activeResult && isActiveWorkbenchConversation(selectedConversation)))
|
||||
);
|
||||
if (activeTraceBlocksTurn) {
|
||||
sendJson(response, 409, {
|
||||
ok: false,
|
||||
status: "workspace_agent_busy",
|
||||
@@ -941,6 +951,15 @@ async function claimWorkbenchWorkspaceTurn({ params = {}, options = {}, traceId,
|
||||
return { workspace: updated ?? workspace };
|
||||
}
|
||||
|
||||
function isActiveWorkbenchConversation(conversation = null) {
|
||||
if (!conversation) return false;
|
||||
const values = [conversation.status, conversation.session?.status, conversation.snapshot?.sessionStatus];
|
||||
for (const message of Array.isArray(conversation.messages) ? conversation.messages.slice(-5) : []) {
|
||||
values.push(message?.status, message?.runnerTrace?.sessionStatus, message?.sessionStatus);
|
||||
}
|
||||
return values.some((value) => ["running", "busy", "pending", "active", "queued"].includes(textValue(value).toLowerCase()));
|
||||
}
|
||||
|
||||
async function resolveWorkbenchActiveTraceResult(traceId, options = {}) {
|
||||
if (!safeTraceId(traceId)) return null;
|
||||
const cached = options.codeAgentChatResults?.get?.(traceId) ?? null;
|
||||
|
||||
Reference in New Issue
Block a user