resetChatState method

void resetChatState()

Resets all chat state when the chat is opened This ensures a fresh state each time the chat is opened

Implementation

void resetChatState() {
  _hasCompletedFirstInit = false;
  PupauEventService.instance.emitPupauEvent(
    PupauEvent(
      type: UpdateConversationType.resetConversation,
      payload: {
        "assistantId": assistantId,
        "assistantType": assistant.value?.type ?? AssistantType.assistant,
      },
    ),
  );
  // Reset conversation and messages
  conversation.value = null;
  messages.clear();
  incomingMessages.clear();
  isConversationHistoryLoaded = false;

  // Reset streaming and loading states
  isStreaming.value = false;
  assistantsReplying.value = 0;
  isLoadingConversation.value = false;
  isLoadingTitle.value = false;
  hasApiError.value = false;

  // Reset input
  inputMessageController.clear();
  inputMessage.value = "";

  // Reset tagged assistants and mentions
  clearTaggedAssistants();
  mentionValue.value = "";
  filteredAssistants.clear();

  // Reset conversation starters to avoid showing stale data when switching agents
  conversationStarters.clear();
  conversationStarters.refresh();

  // Reset loading message
  resetLoadingMessage();

  // Reset tool use states
  expandedToolUseMessages.clear();
  userToggledToolUseMessages.clear();
  hiddenUiToolMessages.clear();

  // Reset web search
  isWebSearchActive.value = false;
  currentWebSearchType.value = null;
  externalSearchVisible.value = false;

  // Reset conversation pagination
  resetConversationPagination();

  // Reset scroll
  autoScrollEnabled = true;
  isAtTop.value = true;
  isAtBottom.value = true;
  listHeight = 0.0;

  // Reset event tracking variables
  _currentMessageStartTime = null;
  _hasReceivedFirstToken = false;
  _isFirstMessage = true;

  // Reset other states
  selectedImage.value = null;
  cachedToolUseImages.clear();
  kbReferencesBackup.clear();
  toolsFabExpanded.value = false;
  forkMessageId.value = "";
  forkConversationTitle.value = "";
  forkConversationTitleController.clear();

  // Reset message notifier
  messageNotifier = MessageNotifier();

  clearToolArgsPreviewCache();

  // Ensure SSE subscriptions are stopped (otherwise the controller can
  // keep updating messages even after the UI changes).
  stopActiveStreams();

  // Clear attachments (conversation-scoped)
  if (Get.isRegistered<PupauAttachmentsController>()) {
    Get.find<PupauAttachmentsController>().clearAttachments();
  }

  // Stop TTS if running
  ttsService.stopReading();

  // Refresh observables
  messages.refresh();
  update();
}