feat: make Kafka projector the Workbench realtime authority
This commit is contained in:
@@ -228,12 +228,12 @@ export function createCodeAgentTraceStore(options = {}) {
|
||||
|
||||
export const defaultCodeAgentTraceStore = createCodeAgentTraceStore();
|
||||
|
||||
export function createDurableCodeAgentTraceStore({ traceStore = defaultCodeAgentTraceStore, traceEventStore = null, workbenchEventWriter = null } = {}) {
|
||||
export function createDurableCodeAgentTraceStore({ traceStore = defaultCodeAgentTraceStore, traceEventStore = null } = {}) {
|
||||
if (!traceEventStore || typeof traceEventStore.writeAgentTraceEvent !== "function") return traceStore;
|
||||
|
||||
function append(traceId, event = {}, meta = {}) {
|
||||
const normalized = traceStore.append(traceId, event, meta);
|
||||
if (normalized?.traceId) persistTraceEvent(traceEventStore, normalized, meta, workbenchEventWriter);
|
||||
if (normalized?.traceId) persistTraceEvent(traceEventStore, normalized, meta);
|
||||
return normalized;
|
||||
}
|
||||
|
||||
@@ -247,11 +247,11 @@ export function createDurableCodeAgentTraceStore({ traceStore = defaultCodeAgent
|
||||
};
|
||||
}
|
||||
|
||||
function persistTraceEvent(traceEventStore, event, meta = {}, workbenchEventWriter = null) {
|
||||
void persistTraceEventAsync(traceEventStore, event, meta, workbenchEventWriter);
|
||||
function persistTraceEvent(traceEventStore, event, meta = {}) {
|
||||
void persistTraceEventAsync(traceEventStore, event, meta);
|
||||
}
|
||||
|
||||
async function persistTraceEventAsync(traceEventStore, event, meta = {}, workbenchEventWriter = null) {
|
||||
async function persistTraceEventAsync(traceEventStore, event, meta = {}) {
|
||||
try {
|
||||
const resolvedAgentSessionId = event.agentSessionId ?? event.sessionId ?? meta.agentSessionId ?? meta.sessionId;
|
||||
const resolvedSessionId = event.sessionId ?? meta.sessionId ?? resolvedAgentSessionId;
|
||||
@@ -265,13 +265,6 @@ async function persistTraceEventAsync(traceEventStore, event, meta = {}, workben
|
||||
} catch (error) {
|
||||
console.error(`[workbench-projection] durable trace event write failed: traceId=${event.traceId} sourceEventId=${event.sourceEventId ?? "none"} error=${error?.message ?? error}`);
|
||||
}
|
||||
if (typeof workbenchEventWriter === "function") {
|
||||
try {
|
||||
await workbenchEventWriter(event, projectionContext);
|
||||
} catch (error) {
|
||||
console.error(`[workbench-projection] workbench event writer failed: traceId=${event.traceId} error=${error?.message ?? error}`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// Trace capture must not fail the user turn, but projection write errors must be visible for diagnostics.
|
||||
console.error(`[workbench-projection] persistTraceEvent sync error: traceId=${event.traceId} error=${error?.message ?? error}`);
|
||||
|
||||
Reference in New Issue
Block a user