fix: reduce Code Agent trace refresh latency
This commit is contained in:
@@ -33,6 +33,7 @@ import {
|
||||
const DEFAULT_CODE_AGENT_RESULT_TRACE_EVENT_LIMIT = 120;
|
||||
const DEFAULT_CODE_AGENT_PROJECT_ID = "prj_hwpod_workbench";
|
||||
const DEFAULT_CODE_AGENT_PROVIDER_PROFILE = "deepseek";
|
||||
const CODE_AGENT_TERMINAL_STATUSES = new Set(["completed", "failed", "blocked", "timeout", "cancelled", "canceled"]);
|
||||
const CODE_AGENT_PROVIDER_PROFILE_IDS = Object.freeze(["deepseek", "codex-api", "minimax-m3", "runtime-default"]);
|
||||
const CODE_AGENT_PROVIDER_PROFILE_LABELS = Object.freeze({
|
||||
"deepseek": "DeepSeek",
|
||||
@@ -1861,9 +1862,13 @@ export async function handleCodeAgentTraceHttp(request, response, url, options)
|
||||
}
|
||||
if (agentRunResult?.agentRun) {
|
||||
try {
|
||||
const synced = await syncAgentRunChatResult({ traceId, currentResult: agentRunResult, options, traceStore, appendResultEvent: false });
|
||||
agentRunResult = synced.result ?? agentRunResult;
|
||||
if (agentRunResult?.status && agentRunResult.status !== "running") {
|
||||
const snapshot = await refreshAgentRunTrace({ traceId, result: agentRunResult, options, traceStore });
|
||||
agentRunResult = options.codeAgentChatResults?.get?.(traceId) ?? agentRunResult;
|
||||
if (traceNeedsCommandResultSync(agentRunResult, snapshot)) {
|
||||
const synced = await syncAgentRunChatResult({ traceId, currentResult: agentRunResult, options, traceStore, appendResultEvent: false, refreshEvents: false });
|
||||
agentRunResult = synced.result ?? agentRunResult;
|
||||
}
|
||||
if (isTraceCommandTerminalStatus(agentRunResult?.status)) {
|
||||
recordCodeAgentConversationFact(agentRunResult, options);
|
||||
await recordCodeAgentSessionOwner({ payload: agentRunResult, params: agentRunResult, options, status: codeAgentOwnerStatusForResult(agentRunResult), preserveLastTraceId: true });
|
||||
}
|
||||
@@ -1878,11 +1883,6 @@ export async function handleCodeAgentTraceHttp(request, response, url, options)
|
||||
});
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await refreshAgentRunTrace({ traceId, result: agentRunResult, options, traceStore });
|
||||
} catch (error) {
|
||||
refreshError = error;
|
||||
}
|
||||
}
|
||||
|
||||
if (parts[5] === "stream") {
|
||||
@@ -1894,6 +1894,23 @@ export async function handleCodeAgentTraceHttp(request, response, url, options)
|
||||
sendJson(response, 200, traceSnapshotWithTerminalEvidence(snapshot, agentRunResult, traceId, refreshError));
|
||||
}
|
||||
|
||||
function traceNeedsCommandResultSync(result, snapshot) {
|
||||
if (!result?.agentRun) return false;
|
||||
const status = String(result.status ?? result.agentRun.status ?? result.agentRun.commandState ?? result.agentRun.terminalStatus ?? "running");
|
||||
if (isTraceCommandTerminalStatus(status)) return true;
|
||||
if (snapshotHasTerminalEvent(snapshot)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function isTraceCommandTerminalStatus(status) {
|
||||
return CODE_AGENT_TERMINAL_STATUSES.has(String(status ?? "").trim().toLowerCase().replace(/_/gu, "-"));
|
||||
}
|
||||
|
||||
function snapshotHasTerminalEvent(snapshot) {
|
||||
const events = Array.isArray(snapshot?.events) ? snapshot.events : [];
|
||||
return events.some((event) => event?.terminal === true || (event?.type === "result" && isTraceCommandTerminalStatus(event?.status)));
|
||||
}
|
||||
|
||||
function traceSnapshotWithTerminalEvidence(snapshot, result, traceId, refreshError = null) {
|
||||
const evidence = agentRunTerminalTraceEvidence(result, traceId);
|
||||
if (snapshot?.status !== "missing") return traceSnapshotWithAttachedTerminalEvidence(snapshot, evidence, refreshError);
|
||||
|
||||
Reference in New Issue
Block a user