feat: make Kafka projector the Workbench realtime authority

This commit is contained in:
root
2026-07-10 05:23:03 +02:00
parent a685be0b78
commit ce83ffdf49
74 changed files with 7746 additions and 9863 deletions
+5 -12
View File
@@ -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}`);