fix: keep workbench submit available during SSE replay

This commit is contained in:
root
2026-07-20 15:38:21 +02:00
parent 3faa6567f1
commit ca92b4fda4
2 changed files with 3 additions and 6 deletions
@@ -65,13 +65,13 @@ test("composer treats failed message with terminal body as sealed terminal turn"
assert.equal(composer.targetTraceId, null);
});
test("composer blocks turn submission until the live session stream is connected", () => {
test("composer keeps turn submission available while Kafka replay connects", () => {
const sessionId = "ses_realtime_connecting";
const connecting = resolveComposerState({ messages: [], activeSessionId: sessionId, chatPending: false, realtimeReady: false });
const connected = resolveComposerState({ messages: [], activeSessionId: sessionId, chatPending: false, realtimeReady: true });
assert.equal(connecting.disabled, true);
assert.equal(connecting.disabledReason, "realtime_connecting");
assert.equal(connecting.disabled, false);
assert.equal(connecting.disabledReason, null);
assert.equal(connecting.sessionId, sessionId);
assert.equal(connected.disabled, false);
});
@@ -95,9 +95,6 @@ export function resolveComposerState(input: { messages: ChatMessage[]; sessions?
const effectiveSessionId = firstNonEmptyString(turn?.sessionId, currentRequest?.sessionId, active?.sessionId, sessionId);
const threadId = firstNonEmptyString(turn?.threadId, currentRequest?.threadId, active?.threadId);
const canSteer = Boolean(effectiveSessionId && activeTraceId && activeByStatus && !terminal);
if (effectiveSessionId && input.realtimeReady === false) {
return { disabled: true, disabledReason: "realtime_connecting", submitMode: canSteer ? "steer" : "turn", route: canSteer ? "/v1/agent/chat/steer" : "/v1/agent/chat", targetTraceId: canSteer ? activeTraceId : null, sessionId: effectiveSessionId, threadId };
}
if (canSteer) return { disabled: false, disabledReason: null, submitMode: "steer", route: "/v1/agent/chat/steer", targetTraceId: activeTraceId, sessionId: effectiveSessionId, threadId };
if (!effectiveSessionId) return { disabled: true, disabledReason: "session_required", submitMode: "turn", route: "/v1/agent/chat", targetTraceId: null, sessionId: null, threadId };
return { disabled: false, disabledReason: null, submitMode: "turn", route: "/v1/agent/chat", targetTraceId: null, sessionId: effectiveSessionId, threadId };