@@ -342,13 +342,36 @@ async def test_extra_dirs_does_not_widen_write(self, tmp_path):
342342
343343 workspace = tmp_path / "ws"
344344 workspace .mkdir ()
345- outside = tmp_path / "outside"
346- outside .mkdir ()
345+ extra = tmp_path / "extra"
346+ extra .mkdir ()
347+
348+ tool = WriteFileTool (
349+ workspace = workspace ,
350+ allowed_dir = workspace ,
351+ extra_allowed_dirs = [extra ],
352+ )
353+ target = extra / "hack.txt"
354+ result = await tool .execute (path = str (target ), content = "pwned" )
355+ assert "Error" in result
356+ assert "outside" in result .lower ()
357+ assert not target .exists ()
358+
359+ @pytest .mark .asyncio
360+ async def test_media_dir_does_not_widen_write (self , tmp_path , monkeypatch ):
361+ from nanobot .agent .tools .filesystem import WriteFileTool
362+
363+ workspace = tmp_path / "ws"
364+ workspace .mkdir ()
365+ media_dir = tmp_path / "media"
366+ media_dir .mkdir ()
367+ monkeypatch .setattr ("nanobot.agent.tools.path_utils.get_media_dir" , lambda : media_dir )
347368
348369 tool = WriteFileTool (workspace = workspace , allowed_dir = workspace )
349- result = await tool .execute (path = str (outside / "hack.txt" ), content = "pwned" )
370+ target = media_dir / "generated.txt"
371+ result = await tool .execute (path = str (target ), content = "pwned" )
350372 assert "Error" in result
351373 assert "outside" in result .lower ()
374+ assert not target .exists ()
352375
353376 @pytest .mark .asyncio
354377 async def test_read_still_blocked_for_unrelated_dir (self , tmp_path ):
@@ -398,7 +421,11 @@ async def test_edit_blocked_in_extra_dir(self, tmp_path):
398421 skill_file .parent .mkdir ()
399422 skill_file .write_text ("# Weather\n Original content." )
400423
401- tool = EditFileTool (workspace = workspace , allowed_dir = workspace )
424+ tool = EditFileTool (
425+ workspace = workspace ,
426+ allowed_dir = workspace ,
427+ extra_allowed_dirs = [skills_dir ],
428+ )
402429 result = await tool .execute (
403430 path = str (skill_file ),
404431 old_text = "Original content." ,
0 commit comments