fix: 统一 AgentRun threadId 上下文连续性

This commit is contained in:
Codex
2026-06-02 10:19:34 +08:00
parent da73598d60
commit 3c6edb73a1
12 changed files with 158 additions and 42 deletions
+33
View File
@@ -344,6 +344,7 @@ function submitCodeAgentChatTurn({ params, options, traceId }) {
runnerTrace: traceStore.snapshot(traceId),
updatedAt: new Date().toISOString()
}, params);
recordCodeAgentConversationFact(payload, executionOptions);
results.set(traceId, payload);
traceStore.append(traceId, {
type: "result",
@@ -478,6 +479,7 @@ export async function handleCodeAgentChatResultHttp(request, response, url, opti
return;
}
if (synced.result && synced.result.status !== "running") {
recordCodeAgentConversationFact(synced.result, options);
await recordCodeAgentSessionOwner({ payload: synced.result, params: synced.result, options, status: synced.result.status === "completed" ? "active" : synced.result.status });
sendJson(response, 200, compactCodeAgentChatResultPayload(synced.result, options));
return;
@@ -837,10 +839,41 @@ export async function handleCodeAgentCancelHttp(request, response, options) {
updatedAt: new Date().toISOString()
};
await recordCodeAgentSessionOwner({ payload, params: { ...params, traceId, ownerUserId: options.actor?.id, ownerRole: options.actor?.role }, options, status: "canceled" });
recordCodeAgentConversationFact(payload, options);
options.codeAgentChatResults?.set(traceId, annotateOwner(payload, { ownerUserId: options.actor?.id, ownerRole: options.actor?.role }));
sendJson(response, 200, payload);
}
function recordCodeAgentConversationFact(payload = {}, options = {}) {
const registry = options.sessionRegistry;
const conversationId = safeConversationId(payload.conversationId);
if (!conversationId || typeof registry?.recordFact !== "function") return null;
try {
return registry.recordFact(conversationId, {
kind: payload.status === "completed" ? "runner_turn" : "runner_turn_terminal",
conversationId,
sessionId: payload.sessionId,
traceId: payload.traceId,
provider: payload.provider,
backend: payload.backend,
workspace: payload.workspace,
sandbox: payload.sandbox,
session: payload.session,
sessionMode: payload.sessionMode,
sessionReuse: payload.sessionReuse,
implementationType: payload.implementationType,
runner: payload.runner,
runnerTrace: payload.runnerTrace,
partialContext: payload.partialContext ?? payload.runnerTrace?.partialContext,
capabilityLevel: payload.capabilityLevel,
toolCalls: payload.toolCalls,
skills: payload.skills
}, { now: options.now });
} catch {
return null;
}
}
async function recordCodeAgentSessionOwner({ payload = {}, params = {}, options = {}, status = "active" } = {}) {
const ownerUserId = options.actor?.id ?? params.ownerUserId;
if (!ownerUserId || !options.accessController?.recordAgentSessionOwner) return null;