diff --git a/scripts/release.py b/scripts/release.py index 83b8648fd9a..bd40b25117d 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -45,6 +45,7 @@ ACP_REGISTRY_MANIFEST = REPO_ROOT / "acp_registry" / "agent.json" # Auto-extracted from noreply emails + manual overrides AUTHOR_MAP = { + "barronlroth@gmail.com": "barronlroth", "ondrej.drapalik@gmail.com": "OndrejDrapalik", "tomasz.panek@gmail.com": "tomekpanek", "philipadsouza@gmail.com": "PhilipAD", diff --git a/tests/gateway/test_voice_command.py b/tests/gateway/test_voice_command.py index d285e31fe3a..4d52591a230 100644 --- a/tests/gateway/test_voice_command.py +++ b/tests/gateway/test_voice_command.py @@ -415,14 +415,17 @@ class TestSendVoiceReply: @pytest.mark.asyncio async def test_calls_tts_and_send_voice(self, runner): + from gateway.config import Platform + mock_adapter = AsyncMock() mock_adapter.send_voice = AsyncMock() event = _make_event() + event.source.platform = Platform.TELEGRAM runner.adapters[event.source.platform] = mock_adapter tts_result = json.dumps({"success": True, "file_path": "/tmp/test.ogg"}) - with patch("tools.tts_tool.text_to_speech_tool", return_value=tts_result), \ + with patch("tools.tts_tool.text_to_speech_tool", return_value=tts_result) as mock_tts, \ patch("tools.tts_tool._strip_markdown_for_tts", side_effect=lambda t: t), \ patch("os.path.isfile", return_value=True), \ patch("os.unlink"), \ @@ -430,9 +433,32 @@ class TestSendVoiceReply: await runner._send_voice_reply(event, "Hello world") mock_adapter.send_voice.assert_called_once() + assert mock_tts.call_args.kwargs["output_path"].endswith(".ogg") call_args = mock_adapter.send_voice.call_args assert call_args.kwargs.get("chat_id") == "123" + @pytest.mark.asyncio + async def test_non_telegram_auto_voice_reply_uses_mp3(self, runner): + from gateway.config import Platform + + mock_adapter = AsyncMock() + mock_adapter.send_voice = AsyncMock() + event = _make_event() + event.source.platform = Platform.SLACK + runner.adapters[event.source.platform] = mock_adapter + + tts_result = json.dumps({"success": True, "file_path": "/tmp/test.mp3"}) + + with patch("tools.tts_tool.text_to_speech_tool", return_value=tts_result) as mock_tts, \ + patch("tools.tts_tool._strip_markdown_for_tts", side_effect=lambda t: t), \ + patch("os.path.isfile", return_value=True), \ + patch("os.unlink"), \ + patch("os.makedirs"): + await runner._send_voice_reply(event, "Hello world") + + mock_adapter.send_voice.assert_called_once() + assert mock_tts.call_args.kwargs["output_path"].endswith(".mp3") + @pytest.mark.asyncio async def test_auto_voice_reply_uses_thread_metadata_helper(self, runner): from gateway.config import Platform diff --git a/tests/tools/test_tts_max_text_length.py b/tests/tools/test_tts_max_text_length.py index 2ea9348bcde..49ae5ca2f4b 100644 --- a/tests/tools/test_tts_max_text_length.py +++ b/tests/tools/test_tts_max_text_length.py @@ -31,8 +31,8 @@ class TestResolveMaxTextLength: def test_mistral_default(self): assert _resolve_max_text_length("mistral", {}) == PROVIDER_MAX_TEXT_LENGTH["mistral"] - def test_gemini_default_is_32000(self): - assert _resolve_max_text_length("gemini", {}) == 32000 + def test_gemini_default(self): + assert _resolve_max_text_length("gemini", {}) == PROVIDER_MAX_TEXT_LENGTH["gemini"] def test_unknown_provider_falls_back(self): assert _resolve_max_text_length("does-not-exist", {}) == FALLBACK_MAX_TEXT_LENGTH