{"record":{"id":"94a2c5475fef38d2","repo":"iflytek/astron-agent","slug":"current-conversation-window-assistant-has-been-deleted","errorCode":null,"errorMessage":"Current conversation window assistant has been deleted","messagePattern":"Current conversation window assistant has been deleted","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"console/backend/hub/src/main/java/com/iflytek/astron/console/hub/controller/chat/ChatMessageController.java","lineNumber":166,"sourceCode":"     * @param sseId Server-sent events ID\n     * @param sseEmitter Server-sent events emitter\n     * @return Valid chat context or null\n     */\n    private ChatContext validateChatContext(Long chatId, Long requestId, String sseId, SseEmitter sseEmitter) {\n        String uid = RequestContextUtil.getUID();\n\n        ChatList chatList = chatListDataService.findByUidAndChatId(uid, chatId);\n        if (chatList == null) {\n            log.warn(\"Chat window is unavailable or illegal access, sseId: {}, uid: {}, chatId: {}\", sseId, uid, chatId);\n            SseEmitterUtil.sendError(sseEmitter, \"Current conversation window is unavailable\");\n            SseEmitterUtil.sendEndAndComplete(sseEmitter);\n            return null;\n        }\n\n        Integer botId = chatList.getBotId();\n        if (chatBotDataService.botIsDeleted(botId.longValue())) {\n            log.warn(\"Current conversation window assistant has been deleted, sseId: {}, uid: {}, chatId: {}, botId: {}\", sseId, uid, chatId, botId);\n            SseEmitterUtil.sendError(sseEmitter, \"Current conversation window assistant has been deleted\");\n            SseEmitterUtil.sendEndAndComplete(sseEmitter);\n            return null;\n        }\n\n        // Re-answering requires validating the legitimacy of question ID\n        if (requestId != null) {\n            ChatReqRecords chatReqRecord = chatDataService.findRequestById(requestId);\n            if (chatReqRecord == null) {\n                log.warn(\"Record for re-answer request does not exist, sseId: {}, requestId: {}\", sseId, requestId);\n                SseEmitterUtil.sendError(sseEmitter, \"Record for re-answer request does not exist\");\n                SseEmitterUtil.sendEndAndComplete(sseEmitter);\n                return null;\n            } else if (!chatReqRecord.getChatId().equals(chatId) || !chatReqRecord.getUid().equals(uid)) {\n                log.warn(\"Record for re-answer request does not match, sseId: {}, uid: {}, chatId: {}, requestId: {}\", sseId, uid, chatId, requestId);\n                SseEmitterUtil.sendError(sseEmitter, \"Record for re-answer request does not match\");\n                SseEmitterUtil.sendEndAndComplete(sseEmitter);\n                return null;\n            }","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/console/backend/hub/src/main/java/com/iflytek/astron/console/hub/controller/chat/ChatMessageController.java#L148-L184","documentation":"After resolving the chat window, validateChatContext checks whether the assistant (bot) bound to that chat was deleted via chatBotDataService.botIsDeleted. If it was, the controller sends 'Current conversation window assistant has been deleted' over SSE and terminates the stream, since messaging a deleted bot is meaningless.","triggerScenarios":"Sending a message in a chat whose associated botId has been deleted (botIsDeleted(botId) returns true).","commonSituations":"An assistant was deleted (or unpublished as deleted) while a user still had its conversation open; frontend kept a stale chat session after bot removal; soft-delete cleanup racing active chats.","solutions":["Detect bot deletion in the UI (e.g. via chat/bot metadata) and disable the composer with a notice","Navigate the user back to the bot list or prompt them to re-create the assistant","Filter out chats whose bots are deleted when listing conversations"],"exampleFix":"// before\nopenChat(chat); send(text);\n// after\nif (chat.botDeleted) { showNotice('Assistant deleted'); return; }\nopenChat(chat); send(text);","handlingStrategy":"fallback","validationCode":"const bots = await getBots();\nif (!bots.some(b => b.id === chat.botId && !b.deleted)) { showNotice('Assistant deleted'); return; }","typeGuard":"function botAlive(bot) { return bot != null && bot.deleted !== true; }","tryCatchPattern":"sse.onerror = (e) => { if (lastErrorFrame === 'Current conversation window assistant has been deleted') navigateBackToBotList(); };","preventionTips":["Listen for bot-deletion events and close affected chats","Show a clear 'assistant deleted' state instead of an editable composer","Re-validate the bot on chat resume"],"tags":["sse","chat","deleted-resource","state"],"backgroundTag":"resource-not-found","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}