diff --git a/run_agent.py b/run_agent.py index f76ca439cf48..1b2a3b9cf140 100644 --- a/run_agent.py +++ b/run_agent.py @@ -4791,6 +4791,7 @@ class AIAgent: visible = "\n\n".join(parts).strip() if visible: visible = self._strip_think_blocks(visible).strip() + visible = redact_sensitive_text(visible) return visible def _emit_interim_assistant_message(self, assistant_msg: Dict[str, Any]) -> None: diff --git a/tests/run_agent/test_run_agent_codex_responses.py b/tests/run_agent/test_run_agent_codex_responses.py index c13d57c5b563..ea6398142219 100644 --- a/tests/run_agent/test_run_agent_codex_responses.py +++ b/tests/run_agent/test_run_agent_codex_responses.py @@ -2145,6 +2145,35 @@ def test_interim_commentary_uses_codex_commentary_items_when_content_is_empty(mo } +def test_interim_commentary_redacts_secrets_from_codex_commentary_items(monkeypatch): + agent = _build_agent(monkeypatch) + monkeypatch.setattr("agent.redact._REDACT_ENABLED", True) + observed = [] + agent.interim_assistant_callback = ( + lambda text, *, already_streamed=False: observed.append(text) + ) + secret = "sk-" + ("A" * 32) + + agent._emit_interim_assistant_message({ + "role": "assistant", + "content": "", + "codex_message_items": [ + { + "type": "message", + "role": "assistant", + "phase": "commentary", + "content": [ + {"type": "output_text", "text": f"Using credential {secret}."} + ], + }, + ], + }) + + assert len(observed) == 1 + assert secret not in observed[0] + assert "Using credential" in observed[0] + + def test_stream_delta_strips_leaked_memory_context(monkeypatch): agent = _build_agent(monkeypatch) observed = []