diff --git a/nanobot/agent/loop.py b/nanobot/agent/loop.py index 7f129a2..ca9a06e 100644 --- a/nanobot/agent/loop.py +++ b/nanobot/agent/loop.py @@ -202,18 +202,9 @@ class AgentLoop: if response.has_tool_calls: if on_progress: - thoughts = [ - self._strip_think(response.content), - response.reasoning_content, - *( - f"Thinking [{b.get('signature', '...')}]:\n{b.get('thought', '...')}" - for b in (response.thinking_blocks or []) - if isinstance(b, dict) and "signature" in b - ), - ] - combined_thoughts = "\n\n".join(filter(None, thoughts)) - if combined_thoughts: - await on_progress(combined_thoughts) + thought = self._strip_think(response.content) + if thought: + await on_progress(thought) await on_progress(self._tool_hint(response.tool_calls), tool_hint=True) tool_call_dicts = [ diff --git a/tests/test_message_tool_suppress.py b/tests/test_message_tool_suppress.py index 26b8a16..f5e65c9 100644 --- a/tests/test_message_tool_suppress.py +++ b/tests/test_message_tool_suppress.py @@ -86,6 +86,36 @@ class TestMessageToolSuppressLogic: assert result is not None assert "Hello" in result.content + @pytest.mark.asyncio + async def test_progress_hides_internal_reasoning(self, tmp_path: Path) -> None: + loop = _make_loop(tmp_path) + tool_call = ToolCallRequest(id="call1", name="read_file", arguments={"path": "foo.txt"}) + calls = iter([ + LLMResponse( + content="Visiblehidden", + tool_calls=[tool_call], + reasoning_content="secret reasoning", + thinking_blocks=[{"signature": "sig", "thought": "secret thought"}], + ), + LLMResponse(content="Done", tool_calls=[]), + ]) + loop.provider.chat = AsyncMock(side_effect=lambda *a, **kw: next(calls)) + loop.tools.get_definitions = MagicMock(return_value=[]) + loop.tools.execute = AsyncMock(return_value="ok") + + progress: list[tuple[str, bool]] = [] + + async def on_progress(content: str, *, tool_hint: bool = False) -> None: + progress.append((content, tool_hint)) + + final_content, _, _ = await loop._run_agent_loop([], on_progress=on_progress) + + assert final_content == "Done" + assert progress == [ + ("Visible", False), + ('read_file("foo.txt")', True), + ] + class TestMessageToolTurnTracking: