fix: 统一 AgentRun threadId 上下文连续性
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user