openhands-tools 1.9.0__tar.gz → 1.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/PKG-INFO +1 -1
  2. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/impl.py +2 -0
  3. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/logging_fix.py +1 -1
  4. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/shell.py +8 -1
  5. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/glob/impl.py +7 -1
  6. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/grep/impl.py +13 -2
  7. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/factory.py +3 -0
  8. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/subprocess_terminal.py +2 -1
  9. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/tmux_terminal.py +4 -3
  10. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands_tools.egg-info/PKG-INFO +1 -1
  11. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/pyproject.toml +1 -1
  12. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/__init__.py +0 -0
  13. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/apply_patch/__init__.py +0 -0
  14. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/apply_patch/core.py +0 -0
  15. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/apply_patch/definition.py +0 -0
  16. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/__init__.py +0 -0
  17. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/definition.py +0 -0
  18. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/impl_windows.py +0 -0
  19. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/browser_use/server.py +0 -0
  20. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/__init__.py +0 -0
  21. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/definition.py +0 -0
  22. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/impl.py +0 -0
  23. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/registration.py +0 -0
  24. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/templates/delegate_tool_description.j2 +0 -0
  25. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/delegate/visualizer.py +0 -0
  26. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/__init__.py +0 -0
  27. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/definition.py +0 -0
  28. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/editor.py +0 -0
  29. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/exceptions.py +0 -0
  30. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/impl.py +0 -0
  31. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/__init__.py +0 -0
  32. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/config.py +0 -0
  33. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/constants.py +0 -0
  34. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/diff.py +0 -0
  35. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/encoding.py +0 -0
  36. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/file_cache.py +0 -0
  37. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/file_editor/utils/history.py +0 -0
  38. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/__init__.py +0 -0
  39. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/edit/__init__.py +0 -0
  40. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/edit/definition.py +0 -0
  41. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/edit/impl.py +0 -0
  42. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/list_directory/__init__.py +0 -0
  43. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/list_directory/definition.py +0 -0
  44. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/list_directory/impl.py +0 -0
  45. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/read_file/__init__.py +0 -0
  46. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/read_file/definition.py +0 -0
  47. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/read_file/impl.py +0 -0
  48. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/write_file/__init__.py +0 -0
  49. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/write_file/definition.py +0 -0
  50. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/gemini/write_file/impl.py +0 -0
  51. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/glob/__init__.py +0 -0
  52. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/glob/definition.py +0 -0
  53. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/grep/__init__.py +0 -0
  54. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/grep/definition.py +0 -0
  55. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/planning_file_editor/__init__.py +0 -0
  56. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/planning_file_editor/definition.py +0 -0
  57. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/planning_file_editor/impl.py +0 -0
  58. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/preset/__init__.py +0 -0
  59. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/preset/default.py +0 -0
  60. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/preset/gemini.py +0 -0
  61. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/preset/gpt5.py +0 -0
  62. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/preset/planning.py +0 -0
  63. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/py.typed +0 -0
  64. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/task_tracker/__init__.py +0 -0
  65. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/task_tracker/definition.py +0 -0
  66. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/__init__.py +0 -0
  67. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/constants.py +0 -0
  68. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/definition.py +0 -0
  69. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/impl.py +0 -0
  70. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/metadata.py +0 -0
  71. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/__init__.py +0 -0
  72. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/interface.py +0 -0
  73. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/terminal/terminal_session.py +0 -0
  74. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/terminal/utils/command.py +0 -0
  75. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/tom_consult/__init__.py +0 -0
  76. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/tom_consult/definition.py +0 -0
  77. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/tom_consult/executor.py +0 -0
  78. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/utils/__init__.py +0 -0
  79. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands/tools/utils/timeout.py +0 -0
  80. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands_tools.egg-info/SOURCES.txt +0 -0
  81. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands_tools.egg-info/dependency_links.txt +0 -0
  82. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands_tools.egg-info/requires.txt +0 -0
  83. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/openhands_tools.egg-info/top_level.txt +0 -0
  84. {openhands_tools-1.9.0 → openhands_tools-1.10.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-tools
3
- Version: 1.9.0
3
+ Version: 1.10.0
4
4
  Summary: OpenHands Tools - Runtime tools for AI agents
5
5
  Project-URL: Source, https://github.com/OpenHands/software-agent-sdk
6
6
  Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
@@ -14,6 +14,7 @@ if TYPE_CHECKING:
14
14
 
15
15
  from openhands.sdk.logger import DEBUG, get_logger
16
16
  from openhands.sdk.tool import ToolExecutor
17
+ from openhands.sdk.utils import sanitized_env
17
18
  from openhands.sdk.utils.async_executor import AsyncExecutor
18
19
  from openhands.tools.browser_use.definition import BrowserAction, BrowserObservation
19
20
  from openhands.tools.browser_use.server import CustomBrowserUseServer
@@ -43,6 +44,7 @@ def _install_chromium() -> bool:
43
44
  capture_output=True,
44
45
  text=True,
45
46
  timeout=300, # 5 minutes timeout for installation
47
+ env=sanitized_env(),
46
48
  )
47
49
 
48
50
  if result.returncode == 0:
@@ -15,7 +15,7 @@ from openhands.sdk.utils.deprecation import warn_cleanup
15
15
 
16
16
  warn_cleanup(
17
17
  "Monkey patching to prevent browser_use logging interference",
18
- cleanup_by="1.10.0",
18
+ cleanup_by="1.15.0",
19
19
  details=(
20
20
  "This workaround should be removed once browser_use PR #3717 "
21
21
  "(https://github.com/browser-use/browser-use/pull/3717) is merged "
@@ -2,6 +2,7 @@ import os
2
2
  import subprocess
3
3
  import time
4
4
 
5
+ from openhands.sdk.utils import sanitized_env
5
6
  from openhands.sdk.utils.truncate import maybe_truncate
6
7
  from openhands.tools.file_editor.utils.constants import (
7
8
  CONTENT_TRUNCATED_NOTICE,
@@ -32,7 +33,12 @@ def run_shell_cmd(
32
33
  process: subprocess.Popen[str] | None = None
33
34
  try:
34
35
  process = subprocess.Popen(
35
- cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
36
+ cmd,
37
+ shell=True,
38
+ stdout=subprocess.PIPE,
39
+ stderr=subprocess.PIPE,
40
+ text=True,
41
+ env=sanitized_env(),
36
42
  )
37
43
 
38
44
  stdout, stderr = process.communicate(timeout=timeout)
@@ -65,6 +71,7 @@ def check_tool_installed(tool_name: str) -> bool:
65
71
  check=True,
66
72
  cwd=os.getcwd(),
67
73
  capture_output=True,
74
+ env=sanitized_env(),
68
75
  )
69
76
  return True
70
77
  except (subprocess.CalledProcessError, FileNotFoundError):
@@ -8,6 +8,7 @@ from pathlib import Path
8
8
  from typing import TYPE_CHECKING
9
9
 
10
10
  from openhands.sdk.tool import ToolExecutor
11
+ from openhands.sdk.utils import sanitized_env
11
12
 
12
13
 
13
14
  if TYPE_CHECKING:
@@ -149,7 +150,12 @@ class GlobExecutor(ToolExecutor[GlobAction, GlobObservation]):
149
150
 
150
151
  # Execute ripgrep
151
152
  result = subprocess.run(
152
- cmd, capture_output=True, text=True, timeout=30, check=False
153
+ cmd,
154
+ capture_output=True,
155
+ text=True,
156
+ timeout=30,
157
+ check=False,
158
+ env=sanitized_env(),
153
159
  )
154
160
 
155
161
  # Parse output into file paths
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import TYPE_CHECKING
7
7
 
8
8
  from openhands.sdk.tool import ToolExecutor
9
+ from openhands.sdk.utils import sanitized_env
9
10
 
10
11
 
11
12
  if TYPE_CHECKING:
@@ -154,7 +155,12 @@ class GrepExecutor(ToolExecutor[GrepAction, GrepObservation]):
154
155
 
155
156
  # Execute ripgrep
156
157
  result = subprocess.run(
157
- cmd, capture_output=True, text=True, timeout=30, check=False
158
+ cmd,
159
+ capture_output=True,
160
+ text=True,
161
+ timeout=30,
162
+ check=False,
163
+ env=sanitized_env(),
158
164
  )
159
165
 
160
166
  # Parse output into file paths
@@ -209,7 +215,12 @@ class GrepExecutor(ToolExecutor[GrepAction, GrepObservation]):
209
215
 
210
216
  # Execute grep
211
217
  result = subprocess.run(
212
- cmd, capture_output=True, text=True, timeout=30, check=False
218
+ cmd,
219
+ capture_output=True,
220
+ text=True,
221
+ timeout=30,
222
+ check=False,
223
+ env=sanitized_env(),
213
224
  )
214
225
 
215
226
  # Parse output into file paths
@@ -5,6 +5,7 @@ import subprocess
5
5
  from typing import Literal
6
6
 
7
7
  from openhands.sdk.logger import get_logger
8
+ from openhands.sdk.utils import sanitized_env
8
9
  from openhands.tools.terminal.terminal.terminal_session import TerminalSession
9
10
 
10
11
 
@@ -19,6 +20,7 @@ def _is_tmux_available() -> bool:
19
20
  capture_output=True,
20
21
  text=True,
21
22
  timeout=5.0,
23
+ env=sanitized_env(),
22
24
  )
23
25
  return result.returncode == 0
24
26
  except (subprocess.TimeoutExpired, FileNotFoundError):
@@ -40,6 +42,7 @@ def _is_powershell_available() -> bool:
40
42
  capture_output=True,
41
43
  text=True,
42
44
  timeout=5.0,
45
+ env=sanitized_env(),
43
46
  )
44
47
  return result.returncode == 0
45
48
  except (subprocess.TimeoutExpired, FileNotFoundError):
@@ -13,6 +13,7 @@ import time
13
13
  from collections import deque
14
14
 
15
15
  from openhands.sdk.logger import get_logger
16
+ from openhands.sdk.utils import sanitized_env
16
17
  from openhands.tools.terminal.constants import (
17
18
  CMD_OUTPUT_PS1_BEGIN,
18
19
  CMD_OUTPUT_PS1_END,
@@ -106,7 +107,7 @@ class SubprocessTerminal(TerminalInterface):
106
107
  logger.info(f"Using shell: {resolved_shell_path}")
107
108
 
108
109
  # Inherit environment variables from the parent process
109
- env = os.environ.copy()
110
+ env = sanitized_env()
110
111
  env["PS1"] = self.PS1
111
112
  env["PS2"] = ""
112
113
  env["TERM"] = "xterm-256color"
@@ -1,12 +1,12 @@
1
1
  """Tmux-based terminal backend implementation."""
2
2
 
3
- import os
4
3
  import time
5
4
  import uuid
6
5
 
7
6
  import libtmux
8
7
 
9
8
  from openhands.sdk.logger import get_logger
9
+ from openhands.sdk.utils import sanitized_env
10
10
  from openhands.tools.terminal.constants import HISTORY_LIMIT
11
11
  from openhands.tools.terminal.metadata import CmdOutputMetadata
12
12
  from openhands.tools.terminal.terminal import TerminalInterface
@@ -41,7 +41,8 @@ class TmuxTerminal(TerminalInterface):
41
41
  if self._initialized:
42
42
  return
43
43
 
44
- self.server = libtmux.Server()
44
+ env = sanitized_env()
45
+ self.server = libtmux.Server(environment=env)
45
46
  _shell_command = "/bin/bash"
46
47
  if self.username in ["root", "openhands"]:
47
48
  # This starts a non-login (new) shell for the given user
@@ -58,7 +59,7 @@ class TmuxTerminal(TerminalInterface):
58
59
  x=1000,
59
60
  y=1000,
60
61
  )
61
- for k, v in os.environ.items():
62
+ for k, v in env.items():
62
63
  self.session.set_environment(k, v)
63
64
 
64
65
  # Set history limit to a large number to avoid losing history
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-tools
3
- Version: 1.9.0
3
+ Version: 1.10.0
4
4
  Summary: OpenHands Tools - Runtime tools for AI agents
5
5
  Project-URL: Source, https://github.com/OpenHands/software-agent-sdk
6
6
  Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openhands-tools"
3
- version = "1.9.0"
3
+ version = "1.10.0"
4
4
  description = "OpenHands Tools - Runtime tools for AI agents"
5
5
 
6
6
  requires-python = ">=3.12"