diff --git a/pycodeloop/tools/env.py b/pycodeloop/tools/env.py index 0a34de3..ee29a86 100644 --- a/pycodeloop/tools/env.py +++ b/pycodeloop/tools/env.py @@ -55,6 +55,14 @@ class EnvTool(Tool): "name": {"type": "string"}, }, } + dangerous = True + + def preview(self, name: str = "", **_) -> str: + return ( + f"$ env {name}" + if name + else "$ env (list all variable names and masked values)" + ) def run(self, name: str = "") -> ToolResult: if name: diff --git a/tests/tools/test_env.py b/tests/tools/test_env.py index 947a6ca..78f4068 100644 --- a/tests/tools/test_env.py +++ b/tests/tools/test_env.py @@ -61,6 +61,19 @@ def test_masks_pass_variants_and_auth(self): self.assertIn("SESSION_ID=***", result.output) self.assertIn("HOME=/tmp", result.output) + def test_is_dangerous_and_requires_confirmation(self): + self.assertTrue(EnvTool().dangerous) + + def test_preview_names_the_single_variable_being_read(self): + self.assertEqual( + EnvTool().preview(name="MY_API_KEY"), "$ env MY_API_KEY" + ) + + def test_preview_warns_about_listing_every_variable(self): + preview = EnvTool().preview() + + self.assertIn("all variable names and masked values", preview) + if __name__ == "__main__": unittest.main()