Merge pull request #1005 from pikasTech/fix/issue1000-trace-refresh-latency

fix: reduce Code Agent trace refresh latency
This commit is contained in:
Lyon
2026-06-06 16:56:05 +08:00
committed by GitHub
5 changed files with 184 additions and 21 deletions
+25 -8
View File
@@ -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",
@@ -1863,9 +1864,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 });
}
@@ -1880,11 +1885,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") {
@@ -1896,6 +1896,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);