fix(agent): harden multimodal tool result flow

Keep multimodal tool outputs on the native content-block path while
restoring redirect SSRF checks for web_fetch image responses. Also share
image block construction, simplify persisted history sanitization, and
add regression tests for image reads and blocked private redirects.

Made-with: Cursor
This commit is contained in:
Xubin Ren
2026-03-21 05:34:56 +00:00
parent 834f1e3a9f
commit 445a96ab55
8 changed files with 133 additions and 46 deletions
+14
View File
@@ -1,5 +1,6 @@
"""Utility functions for nanobot."""
import base64
import json
import re
import time
@@ -23,6 +24,19 @@ def detect_image_mime(data: bytes) -> str | None:
return None
def build_image_content_blocks(raw: bytes, mime: str, path: str, label: str) -> list[dict[str, Any]]:
"""Build native image blocks plus a short text label."""
b64 = base64.b64encode(raw).decode()
return [
{
"type": "image_url",
"image_url": {"url": f"data:{mime};base64,{b64}"},
"_meta": {"path": path},
},
{"type": "text", "text": label},
]
def ensure_dir(path: Path) -> Path:
"""Ensure directory exists, return it."""
path.mkdir(parents=True, exist_ok=True)