tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_no_media_passthrough tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_media_tag_stripped tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_media_tag_with_space tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_media_tag_with_quotes tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_audio_as_voice_stripped tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_multiple_media_tags tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_excessive_newlines_collapsed tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_media_only_response tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_media_mid_sentence tests/gateway/test_stream_consumer.py::TestCleanForDisplay::test_preserves_non_media_colons tests/gateway/test_stream_consumer.py::TestFinalizeCapabilityGate::test_identical_text_skip_respects_adapter_flag tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.telegram-TelegramAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[plugins.platforms.discord.adapter-DiscordAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.slack-SlackAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.matrix-MatrixAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[plugins.platforms.mattermost.adapter-MattermostAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.feishu-FeishuAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.whatsapp-WhatsAppAdapter] tests/gateway/test_stream_consumer.py::TestEditMessageFinalizeSignature::test_edit_message_accepts_finalize[gateway.platforms.dingtalk-DingTalkAdapter] tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_first_send_strips_media tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_edit_strips_media tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_media_only_skips_send tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_cursor_only_update_skips_send tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_short_text_with_cursor_skips_new_message tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_longer_text_with_cursor_sends_new_message tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_short_text_without_cursor_sends_normally tests/gateway/test_stream_consumer.py::TestSendOrEditMediaStripping::test_short_text_cursor_edit_existing_message_allowed tests/gateway/test_stream_consumer.py::TestStreamRunMediaStripping::test_stream_with_media_tag tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_segment_break_creates_new_message tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_segment_break_no_text_before tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_segment_break_removes_cursor tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_multiple_segment_breaks tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_already_sent_stays_true_after_segment tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_edit_failure_sends_only_unsent_tail_at_finish tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_segment_break_clears_failed_edit_fallback_state tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_segment_break_after_mid_stream_edit_failure_preserves_tail tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_no_message_id_enters_fallback_mode tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_no_message_id_single_delta_marks_already_sent tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_no_message_id_segment_breaks_do_not_resend tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_splits_long_continuation_without_dropping_text tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_sends_full_text_at_tool_boundary tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_deletes_partial_after_full_resend tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_keeps_partial_after_tail_only_send tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_does_not_delete_when_no_chunks_reach_user tests/gateway/test_stream_consumer.py::TestSegmentBreakOnToolBoundary::test_fallback_final_skips_delete_when_adapter_lacks_method tests/gateway/test_stream_consumer.py::TestFinalResponseDeliveryGuard::test_split_overflow_failed_send_does_not_mark_final_sent tests/gateway/test_stream_consumer.py::TestFinalResponseDeliveryGuard::test_split_overflow_partial_send_marks_final_sent tests/gateway/test_stream_consumer.py::TestFinalContentDeliveredGuard::test_mid_stream_edit_success_does_not_mark_content_delivered tests/gateway/test_stream_consumer.py::TestFinalContentDeliveredGuard::test_final_edit_success_does_mark_content_delivered tests/gateway/test_stream_consumer.py::TestFinalContentDeliveredGuard::test_fallback_partial_send_does_not_mark_final_sent tests/gateway/test_stream_consumer.py::TestEditOverflowSplitAndDeliver::test_consumer_advances_message_id_on_split_and_deliver tests/gateway/test_stream_consumer.py::TestInterimCommentaryMessages::test_commentary_message_stays_separate_from_final_stream tests/gateway/test_stream_consumer.py::TestInterimCommentaryMessages::test_failed_final_send_does_not_mark_final_response_sent tests/gateway/test_stream_consumer.py::TestInterimCommentaryMessages::test_success_without_message_id_marks_visible_and_sends_only_tail tests/gateway/test_stream_consumer.py::TestCancelledConsumerSetsFlags::test_cancelled_with_already_sent_marks_final_response_sent tests/gateway/test_stream_consumer.py::TestCancelledConsumerSetsFlags::test_cancelled_without_any_sends_does_not_mark_final tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_plain_text_passes_through tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_complete_think_block_stripped tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_think_block_in_middle tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_think_block_split_across_deltas tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_opening_tag_split_across_deltas tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_closing_tag_split_across_deltas tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_multiple_think_blocks tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_multiple_think_blocks_with_text_between tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_thinking_tag_variant tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_thought_tag_variant tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_reasoning_scratchpad_variant tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_case_insensitive_THINKING tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_prose_mention_not_stripped tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_prose_mention_after_text tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_think_at_line_start_is_stripped tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_think_with_only_whitespace_before tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_flush_think_buffer_on_non_tag tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_flush_think_buffer_when_inside_block tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_unclosed_think_block_suppresses tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_multiline_think_block tests/gateway/test_stream_consumer.py::TestFilterAndAccumulate::test_segment_reset_preserves_think_state tests/gateway/test_stream_consumer.py::TestFilterAndAccumulateIntegration::test_think_block_not_sent_to_platform tests/gateway/test_stream_consumer.py::TestBufferOnlyMode::test_suppresses_intermediate_edits tests/gateway/test_stream_consumer.py::TestBufferOnlyMode::test_flushes_on_segment_break tests/gateway/test_stream_consumer.py::TestBufferOnlyMode::test_flushes_on_commentary tests/gateway/test_stream_consumer.py::TestBufferOnlyMode::test_default_mode_still_triggers_intermediate_edits tests/gateway/test_stream_consumer.py::TestCursorStrippingOnFallback::test_cursor_stripped_when_continuation_empty tests/gateway/test_stream_consumer.py::TestCursorStrippingOnFallback::test_cursor_not_stripped_when_no_cursor_configured tests/gateway/test_stream_consumer.py::TestCursorStrippingOnFallback::test_cursor_strip_edit_failure_handled tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_callback_fires_on_first_send tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_callback_fires_once_per_segment tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_callback_not_fired_on_edit tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_callback_fires_on_commentary tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_callback_error_swallowed tests/gateway/test_stream_consumer.py::TestOnNewMessageCallback::test_no_callback_when_none tests/gateway/test_stream_consumer.py::TestUtf16OverflowDetection::test_emoji_text_exceeding_utf16_limit_triggers_overflow_split tests/gateway/test_stream_consumer.py::TestUtf16OverflowDetection::test_codepoint_only_adapter_falls_back_to_len