feat: refine codex live chat context flows

This commit is contained in:
2026-05-08 21:15:51 +09:00
parent 82c0d8a197
commit 442879313f
92 changed files with 14815 additions and 7314 deletions

View File

@@ -56,7 +56,7 @@ type UseConversationComposerControllerOptions = {
maxContextMessages: number;
maxContextChars: number;
};
draft: string;
getDraft: () => string;
composerAttachments: ChatComposerAttachment[];
isComposerAttachmentUploading: boolean;
selectedChatType: SelectedChatType;
@@ -74,7 +74,17 @@ type UseConversationComposerControllerOptions = {
setShowScrollToBottom: (value: boolean) => void;
setPendingContextConfirm: (value: PendingContextConfirm | null) => void;
upsertRequestItem: (request: ChatConversationRequest) => void;
syncConversationPreviewForRequest: (sessionId: string, text: string, requestedAt?: string) => void;
syncConversationPreviewForRequest: (
sessionId: string,
text: string,
requestedAt?: string,
options?: {
requestId?: string;
mode?: 'queue' | 'direct';
queueSize?: number;
jobMessage?: string | null;
},
) => void;
updatePendingMessageStatus: (requestId: string, status: 'retrying' | 'failed' | null, retryCount?: number) => void;
createLocalMessage: (text: string) => ChatMessage;
createChatMessage: (author: 'user' | 'codex' | 'system', text: string, requestId?: string | null) => ChatMessage;
@@ -97,7 +107,7 @@ type SendMessageOptions = {
export function useConversationComposerController({
activeSessionId,
appConfigChat,
draft,
getDraft,
composerAttachments,
isComposerAttachmentUploading,
selectedChatType,
@@ -268,7 +278,12 @@ export function useConversationComposerController({
answeredAt: null,
terminalAt: null,
});
syncConversationPreviewForRequest(activeSessionId, text, queuedAt);
syncConversationPreviewForRequest(activeSessionId, text, queuedAt, {
requestId,
mode: 'queue',
queueSize: 1,
jobMessage: '대기열 등록 중',
});
shouldStickToBottomRef.current = true;
setShowScrollToBottom(false);
@@ -304,6 +319,12 @@ export function useConversationComposerController({
answeredAt: null,
terminalAt: null,
});
syncConversationPreviewForRequest(activeSessionId, text, new Date().toISOString(), {
requestId,
mode: 'direct',
queueSize: 0,
jobMessage: '즉시 요청 실행 대기 중',
});
shouldStickToBottomRef.current = true;
setShowScrollToBottom(false);
@@ -374,7 +395,7 @@ export function useConversationComposerController({
return;
}
const trimmed = buildOutgoingMessageText(draftText ?? draft, composerAttachments).trim();
const trimmed = buildOutgoingMessageText(draftText ?? getDraft(), composerAttachments).trim();
if (!trimmed) {
return;
@@ -423,7 +444,7 @@ export function useConversationComposerController({
buildOutgoingMessageText,
composerAttachments,
createLocalMessage,
draft,
getDraft,
executeSendMessage,
isComposerAttachmentUploading,
messagesRef,