chore: test deploy snapshot
This commit is contained in:
@@ -18,7 +18,6 @@ import {
|
||||
appendChatConversationMessage,
|
||||
appendChatConversationActivityLine,
|
||||
getChatConversationRequest,
|
||||
markChatConversationRequestManualCompletion,
|
||||
type ChatConversationRequestItem,
|
||||
type ChatConversationRequestUsageSnapshot,
|
||||
getChatConversation,
|
||||
@@ -46,6 +45,7 @@ import {
|
||||
import { extractChatMessageParts, type ChatMessagePart } from './chat-message-parts.js';
|
||||
import { resolveMainProjectRoot } from './main-project-root-service.js';
|
||||
import { isRuntimeDraining, trackWebSocketConnectionClosed, trackWebSocketConnectionOpened } from './runtime-drain-service.js';
|
||||
import { isCurrentWorkServerSlotActive } from './work-server-slot-service.js';
|
||||
import {
|
||||
findLatestPlanItem,
|
||||
findPlanItemByPreviewUrl,
|
||||
@@ -117,23 +117,6 @@ type ChatPromptContextRef = {
|
||||
parentQuestionText?: string | null;
|
||||
};
|
||||
|
||||
export function shouldAutoCompleteReplyParentVerification(options: {
|
||||
requestOrigin?: 'composer' | 'prompt' | null;
|
||||
responseMessageId?: number | null;
|
||||
responseText?: string | null;
|
||||
manualVerificationCompletedAt?: string | null;
|
||||
} | null | undefined) {
|
||||
if (!options || options.requestOrigin !== 'composer' || options.manualVerificationCompletedAt) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options.responseMessageId != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return String(options.responseText ?? '').trim().length > 0;
|
||||
}
|
||||
|
||||
type ChatInboundMessage =
|
||||
| {
|
||||
type: 'context:update';
|
||||
@@ -4428,6 +4411,21 @@ export class ChatService {
|
||||
}
|
||||
|
||||
async recoverInterruptedSessions() {
|
||||
if (!(await isCurrentWorkServerSlotActive())) {
|
||||
this.logger.info(
|
||||
{
|
||||
slot: process.env.WORK_SERVER_SLOT?.trim() || null,
|
||||
},
|
||||
'skip interrupted chat recovery on inactive work-server slot',
|
||||
);
|
||||
|
||||
return {
|
||||
sessionCount: 0,
|
||||
restartedCount: 0,
|
||||
requeuedCount: 0,
|
||||
};
|
||||
}
|
||||
|
||||
const recoverableRequests = await listRecoverableChatConversationRequests();
|
||||
|
||||
if (recoverableRequests.length === 0) {
|
||||
@@ -5748,31 +5746,6 @@ export class ChatService {
|
||||
omitPromptHistory: requestOptions?.omitPromptHistory === true,
|
||||
context: cloneChatContext(state.context),
|
||||
};
|
||||
const parentRequest = request.parentRequestId
|
||||
? await getChatConversationRequest(state.sessionId, request.parentRequestId)
|
||||
: null;
|
||||
const shouldAutoCompleteParentVerification = shouldAutoCompleteReplyParentVerification({
|
||||
requestOrigin,
|
||||
responseMessageId: parentRequest?.responseMessageId ?? null,
|
||||
responseText: parentRequest?.responseText ?? '',
|
||||
manualVerificationCompletedAt: parentRequest?.manualVerificationCompletedAt ?? null,
|
||||
});
|
||||
const completeParentVerificationIfNeeded = async () => {
|
||||
if (!request.parentRequestId || !shouldAutoCompleteParentVerification) {
|
||||
return;
|
||||
}
|
||||
|
||||
const updatedParentRequest = await markChatConversationRequestManualCompletion(
|
||||
state.sessionId,
|
||||
request.parentRequestId,
|
||||
'verification',
|
||||
);
|
||||
|
||||
if (updatedParentRequest) {
|
||||
this.broadcastRequestUpdate(state.sessionId, updatedParentRequest);
|
||||
}
|
||||
};
|
||||
|
||||
if (mode === 'queue' && (state.activeRequestCount > 0 || state.queue.length > 0)) {
|
||||
const queuedUserMessage = {
|
||||
...createMessage('user', trimmed, nextRequestId),
|
||||
@@ -5807,6 +5780,7 @@ export class ChatService {
|
||||
requestOrigin: request.requestOrigin,
|
||||
sharedResourceTokenId: request.sharedResourceTokenId,
|
||||
parentRequestId: request.parentRequestId,
|
||||
promptContextRef: request.promptContextRef,
|
||||
status: 'queued',
|
||||
statusMessage: `대기열 ${state.queue.length}건`,
|
||||
userMessageId: queuedUserMessage.id,
|
||||
@@ -5814,11 +5788,9 @@ export class ChatService {
|
||||
}).catch((error: unknown) => {
|
||||
this.logger.error(error, 'failed to persist queued chat request');
|
||||
});
|
||||
await completeParentVerificationIfNeeded();
|
||||
return nextRequestId;
|
||||
}
|
||||
|
||||
await completeParentVerificationIfNeeded();
|
||||
void this.executeRequest(state, request).catch((error: unknown) => {
|
||||
this.logger.error(error, 'direct chat reply build failed');
|
||||
this.sendToSession(state, {
|
||||
@@ -5851,6 +5823,10 @@ export class ChatService {
|
||||
const compactActivityLineMap = new Map<number, string>();
|
||||
session.activeRequestCount += 1;
|
||||
const existingRequest = await getChatConversationRequest(session.sessionId, request.requestId);
|
||||
const isRetryAttempt =
|
||||
existingRequest != null
|
||||
&& !existingRequest.hasResponse
|
||||
&& (existingRequest.status === 'failed' || existingRequest.status === 'cancelled');
|
||||
const hasStoredUserMessage = existingRequest?.userMessageId != null;
|
||||
let userMessageId = existingRequest?.userMessageId ?? null;
|
||||
|
||||
@@ -5873,7 +5849,11 @@ export class ChatService {
|
||||
requestOrigin: request.requestOrigin,
|
||||
sharedResourceTokenId: request.sharedResourceTokenId,
|
||||
parentRequestId: request.parentRequestId,
|
||||
promptContextRef: request.promptContextRef,
|
||||
status: request.mode === 'direct' ? 'accepted' : existingRequest?.status ?? 'queued',
|
||||
statusMessage: isRetryAttempt ? '재처리 요청 접수' : undefined,
|
||||
incrementRetryCount: isRetryAttempt,
|
||||
allowTerminalStatusReset: isRetryAttempt,
|
||||
userMessageId,
|
||||
userText: request.text,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user