openhands 1.0.0__tar.gz → 1.0.1__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.

Potentially problematic release.


This version of openhands might be problematic. Click here for more details.

Files changed (59) hide show
  1. {openhands-1.0.0 → openhands-1.0.1}/PKG-INFO +1 -1
  2. {openhands-1.0.0 → openhands-1.0.1}/build.py +1 -1
  3. openhands-1.0.1/openhands_cli/__init__.py +8 -0
  4. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/agent_chat.py +1 -0
  5. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/gui_launcher.py +1 -10
  6. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/tui.py +0 -2
  7. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/agent_action.py +2 -1
  8. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/settings_action.py +7 -1
  9. {openhands-1.0.0 → openhands-1.0.1}/pyproject.toml +4 -5
  10. openhands-1.0.1/tests/settings/test_api_key_preservation.py +56 -0
  11. {openhands-1.0.0 → openhands-1.0.1}/tests/test_gui_launcher.py +0 -2
  12. {openhands-1.0.0 → openhands-1.0.1}/uv.lock +34 -23
  13. openhands-1.0.0/openhands_cli/__init__.py +0 -3
  14. {openhands-1.0.0 → openhands-1.0.1}/.gitignore +0 -0
  15. {openhands-1.0.0 → openhands-1.0.1}/Makefile +0 -0
  16. {openhands-1.0.0 → openhands-1.0.1}/README.md +0 -0
  17. {openhands-1.0.0 → openhands-1.0.1}/build.sh +0 -0
  18. {openhands-1.0.0 → openhands-1.0.1}/hooks/rthook_profile_imports.py +0 -0
  19. {openhands-1.0.0 → openhands-1.0.1}/openhands.spec +0 -0
  20. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/argparsers/main_parser.py +0 -0
  21. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/argparsers/serve_parser.py +0 -0
  22. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/listeners/__init__.py +0 -0
  23. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/listeners/loading_listener.py +0 -0
  24. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/listeners/pause_listener.py +0 -0
  25. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/llm_utils.py +0 -0
  26. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/locations.py +0 -0
  27. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/pt_style.py +0 -0
  28. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/runner.py +0 -0
  29. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/setup.py +0 -0
  30. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/simple_main.py +0 -0
  31. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/__init__.py +0 -0
  32. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/settings/mcp_screen.py +0 -0
  33. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/settings/settings_screen.py +0 -0
  34. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/settings/store.py +0 -0
  35. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/status.py +0 -0
  36. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/tui/utils.py +0 -0
  37. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/__init__.py +0 -0
  38. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/exit_session.py +0 -0
  39. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/types.py +0 -0
  40. {openhands-1.0.0 → openhands-1.0.1}/openhands_cli/user_actions/utils.py +0 -0
  41. {openhands-1.0.0 → openhands-1.0.1}/tests/__init__.py +0 -0
  42. {openhands-1.0.0 → openhands-1.0.1}/tests/commands/test_confirm_command.py +0 -0
  43. {openhands-1.0.0 → openhands-1.0.1}/tests/commands/test_new_command.py +0 -0
  44. {openhands-1.0.0 → openhands-1.0.1}/tests/commands/test_status_command.py +0 -0
  45. {openhands-1.0.0 → openhands-1.0.1}/tests/conftest.py +0 -0
  46. {openhands-1.0.0 → openhands-1.0.1}/tests/settings/test_first_time_user_settings.py +0 -0
  47. {openhands-1.0.0 → openhands-1.0.1}/tests/settings/test_settings_input.py +0 -0
  48. {openhands-1.0.0 → openhands-1.0.1}/tests/settings/test_settings_workflow.py +0 -0
  49. {openhands-1.0.0 → openhands-1.0.1}/tests/test_confirmation_mode.py +0 -0
  50. {openhands-1.0.0 → openhands-1.0.1}/tests/test_conversation_runner.py +0 -0
  51. {openhands-1.0.0 → openhands-1.0.1}/tests/test_directory_separation.py +0 -0
  52. {openhands-1.0.0 → openhands-1.0.1}/tests/test_exit_session_confirmation.py +0 -0
  53. {openhands-1.0.0 → openhands-1.0.1}/tests/test_loading.py +0 -0
  54. {openhands-1.0.0 → openhands-1.0.1}/tests/test_main.py +0 -0
  55. {openhands-1.0.0 → openhands-1.0.1}/tests/test_mcp_config_validation.py +0 -0
  56. {openhands-1.0.0 → openhands-1.0.1}/tests/test_pause_listener.py +0 -0
  57. {openhands-1.0.0 → openhands-1.0.1}/tests/test_session_prompter.py +0 -0
  58. {openhands-1.0.0 → openhands-1.0.1}/tests/test_tui.py +0 -0
  59. {openhands-1.0.0 → openhands-1.0.1}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: OpenHands CLI - Terminal User Interface for OpenHands AI Agent
5
5
  Author-email: OpenHands Team <contact@all-hands.dev>
6
6
  License: MIT
@@ -164,7 +164,7 @@ def test_executable() -> bool:
164
164
  )
165
165
 
166
166
  # --- Wait for welcome ---
167
- deadline = boot_start + 30
167
+ deadline = boot_start + 60
168
168
  saw_welcome = False
169
169
  captured = []
170
170
 
@@ -0,0 +1,8 @@
1
+ """OpenHands package."""
2
+
3
+ from importlib.metadata import version, PackageNotFoundError
4
+
5
+ try:
6
+ __version__ = version("openhands")
7
+ except PackageNotFoundError:
8
+ __version__ = "0.0.0"
@@ -54,6 +54,7 @@ def _print_exit_hint(conversation_id: str) -> None:
54
54
  )
55
55
 
56
56
 
57
+
57
58
  def run_cli_entry(resume_conversation_id: str | None = None) -> None:
58
59
  """Run the agent chat session using the agent SDK.
59
60
 
@@ -113,21 +113,12 @@ def launch_gui_server(mount_cwd: bool = False, gpu: bool = False) -> None:
113
113
  pull_cmd = ['docker', 'pull', runtime_image]
114
114
  print_formatted_text(HTML(_format_docker_command_for_logging(pull_cmd)))
115
115
  try:
116
- subprocess.run(
117
- pull_cmd,
118
- check=True,
119
- timeout=300, # 5 minutes timeout
120
- )
116
+ subprocess.run(pull_cmd, check=True)
121
117
  except subprocess.CalledProcessError:
122
118
  print_formatted_text(
123
119
  HTML('<ansired>❌ Failed to pull runtime image.</ansired>')
124
120
  )
125
121
  sys.exit(1)
126
- except subprocess.TimeoutExpired:
127
- print_formatted_text(
128
- HTML('<ansired>❌ Timeout while pulling runtime image.</ansired>')
129
- )
130
- sys.exit(1)
131
122
 
132
123
  print_formatted_text('')
133
124
  print_formatted_text(
@@ -57,8 +57,6 @@ def display_banner(conversation_id: str, resume: bool = False) -> None:
57
57
  style=DEFAULT_STYLE,
58
58
  )
59
59
 
60
- print_formatted_text(HTML(f'<grey>OpenHands CLI v{__version__}</grey>'))
61
-
62
60
  print_formatted_text('')
63
61
  if not resume:
64
62
  print_formatted_text(
@@ -1,3 +1,4 @@
1
+ import html
1
2
  from prompt_toolkit import HTML, print_formatted_text
2
3
 
3
4
  from openhands.sdk.security.confirmation_policy import (
@@ -37,7 +38,7 @@ def ask_user_confirmation(
37
38
  or '[unknown action]'
38
39
  )
39
40
  print_formatted_text(
40
- HTML(f'<grey> {i}. {tool_name}: {action_content}...</grey>')
41
+ HTML(f'<grey> {i}. {tool_name}: {html.escape(action_content)}...</grey>')
41
42
  )
42
43
 
43
44
  question = 'Choose an option:'
@@ -123,9 +123,15 @@ def prompt_api_key(
123
123
  validator = NonEmptyValueValidator()
124
124
 
125
125
  question = helper_text + step_counter.next_step(question)
126
- return cli_text_input(
126
+ user_input = cli_text_input(
127
127
  question, escapable=escapable, validator=validator, is_password=True
128
128
  )
129
+
130
+ # If user pressed ENTER with existing key (empty input), return the existing key
131
+ if existing_api_key and not user_input.strip():
132
+ return existing_api_key.get_secret_value()
133
+
134
+ return user_input
129
135
 
130
136
 
131
137
  # Advanced settings functions
@@ -4,7 +4,7 @@ requires = [ "hatchling>=1.25" ]
4
4
 
5
5
  [project]
6
6
  name = "openhands"
7
- version = "1.0.0"
7
+ version = "1.0.1"
8
8
  description = "OpenHands CLI - Terminal User Interface for OpenHands AI Agent"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -22,8 +22,7 @@ dependencies = [
22
22
  "typer>=0.17.4",
23
23
  ]
24
24
 
25
- # Dev-only tools with uv groups: `uv sync --group dev`
26
- scripts.openhands = "openhands_cli.simple_main:main"
25
+ scripts = { openhands = "openhands_cli.simple_main:main" }
27
26
 
28
27
  [dependency-groups]
29
28
  # Hatchling wheel target: include the package directory
@@ -96,5 +95,5 @@ disallow_untyped_defs = true
96
95
  ignore_missing_imports = true
97
96
 
98
97
  [tool.uv.sources]
99
- openhands-sdk = { git = "https://github.com/All-Hands-AI/agent-sdk.git", subdirectory = "openhands/sdk", rev = "189979a5013751aa86852ab41afe9a79555e62ac" }
100
- openhands-tools = { git = "https://github.com/All-Hands-AI/agent-sdk.git", subdirectory = "openhands/tools", rev = "189979a5013751aa86852ab41afe9a79555e62ac" }
98
+ openhands-sdk = { git = "https://github.com/All-Hands-AI/agent-sdk.git", subdirectory = "openhands/sdk", rev = "50b094a92817e448ec4352d2950df4f19edd5a9f" }
99
+ openhands-tools = { git = "https://github.com/All-Hands-AI/agent-sdk.git", subdirectory = "openhands/tools", rev = "50b094a92817e448ec4352d2950df4f19edd5a9f" }
@@ -0,0 +1,56 @@
1
+ """Test for API key preservation bug when updating settings."""
2
+
3
+ from unittest.mock import patch
4
+ import pytest
5
+ from pydantic import SecretStr
6
+
7
+ from openhands_cli.user_actions.settings_action import prompt_api_key
8
+ from openhands_cli.tui.utils import StepCounter
9
+
10
+
11
+ def test_api_key_preservation_when_user_presses_enter():
12
+ """Test that API key is preserved when user presses ENTER to keep current key.
13
+
14
+ This test replicates the bug where API keys disappear when updating settings.
15
+ When a user presses ENTER to keep the current API key, the function should
16
+ return the existing API key, not an empty string.
17
+ """
18
+ step_counter = StepCounter(1)
19
+ existing_api_key = SecretStr("sk-existing-key-123")
20
+
21
+ # Mock cli_text_input to return empty string (simulating user pressing ENTER)
22
+ with patch('openhands_cli.user_actions.settings_action.cli_text_input', return_value=''):
23
+ result = prompt_api_key(
24
+ step_counter=step_counter,
25
+ provider='openai',
26
+ existing_api_key=existing_api_key,
27
+ escapable=True
28
+ )
29
+
30
+ # The bug: result is empty string instead of the existing key
31
+ # This test will fail initially, demonstrating the bug
32
+ assert result == existing_api_key.get_secret_value(), (
33
+ f"Expected existing API key '{existing_api_key.get_secret_value()}' "
34
+ f"but got '{result}'. API key should be preserved when user presses ENTER."
35
+ )
36
+
37
+
38
+ def test_api_key_update_when_user_enters_new_key():
39
+ """Test that API key is updated when user enters a new key."""
40
+ step_counter = StepCounter(1)
41
+ existing_api_key = SecretStr("sk-existing-key-123")
42
+ new_api_key = "sk-new-key-456"
43
+
44
+ # Mock cli_text_input to return new API key
45
+ with patch('openhands_cli.user_actions.settings_action.cli_text_input', return_value=new_api_key):
46
+ result = prompt_api_key(
47
+ step_counter=step_counter,
48
+ provider='openai',
49
+ existing_api_key=existing_api_key,
50
+ escapable=True
51
+ )
52
+
53
+ # Should return the new API key
54
+ assert result == new_api_key
55
+
56
+
@@ -111,8 +111,6 @@ class TestLaunchGuiServer:
111
111
  [
112
112
  # Docker pull failure
113
113
  (subprocess.CalledProcessError(1, 'docker pull'), None, 1, False, False),
114
- # Docker pull timeout
115
- (subprocess.TimeoutExpired('docker pull', 300), None, 1, False, False),
116
114
  # Docker run failure
117
115
  (MagicMock(returncode=0), subprocess.CalledProcessError(1, 'docker run'), 1, False, False),
118
116
  # KeyboardInterrupt during run
@@ -660,18 +660,32 @@ wheels = [
660
660
 
661
661
  [[package]]
662
662
  name = "fastuuid"
663
- version = "0.12.0"
664
- source = { registry = "https://pypi.org/simple" }
665
- sdist = { url = "https://files.pythonhosted.org/packages/19/17/13146a1e916bd2971d0a58db5e0a4ad23efdd49f78f33ac871c161f8007b/fastuuid-0.12.0.tar.gz", hash = "sha256:d0bd4e5b35aad2826403f4411937c89e7c88857b1513fe10f696544c03e9bd8e", size = 19180, upload-time = "2025-01-27T18:04:14.387Z" }
666
- wheels = [
667
- { url = "https://files.pythonhosted.org/packages/f6/28/442e79d6219b90208cb243ac01db05d89cc4fdf8ecd563fb89476baf7122/fastuuid-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:328694a573fe9dce556b0b70c9d03776786801e028d82f0b6d9db1cb0521b4d1", size = 247372, upload-time = "2025-01-27T18:03:40.967Z" },
668
- { url = "https://files.pythonhosted.org/packages/40/eb/e0fd56890970ca7a9ec0d116844580988b692b1a749ac38e0c39e1dbdf23/fastuuid-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02acaea2c955bb2035a7d8e7b3fba8bd623b03746ae278e5fa932ef54c702f9f", size = 258200, upload-time = "2025-01-27T18:04:12.138Z" },
669
- { url = "https://files.pythonhosted.org/packages/f5/3c/4b30e376e65597a51a3dc929461a0dec77c8aec5d41d930f482b8f43e781/fastuuid-0.12.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:ed9f449cba8cf16cced252521aee06e633d50ec48c807683f21cc1d89e193eb0", size = 278446, upload-time = "2025-01-27T18:04:15.877Z" },
670
- { url = "https://files.pythonhosted.org/packages/fe/96/cc5975fd23d2197b3e29f650a7a9beddce8993eaf934fa4ac595b77bb71f/fastuuid-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:0df2ea4c9db96fd8f4fa38d0e88e309b3e56f8fd03675a2f6958a5b082a0c1e4", size = 157185, upload-time = "2025-01-27T18:06:19.21Z" },
671
- { url = "https://files.pythonhosted.org/packages/a9/e8/d2bb4f19e5ee15f6f8e3192a54a897678314151aa17d0fb766d2c2cbc03d/fastuuid-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7fe2407316a04ee8f06d3dbc7eae396d0a86591d92bafe2ca32fce23b1145786", size = 247512, upload-time = "2025-01-27T18:04:08.115Z" },
672
- { url = "https://files.pythonhosted.org/packages/bc/53/25e811d92fd60f5c65e098c3b68bd8f1a35e4abb6b77a153025115b680de/fastuuid-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9b31dd488d0778c36f8279b306dc92a42f16904cba54acca71e107d65b60b0c", size = 258257, upload-time = "2025-01-27T18:03:56.408Z" },
673
- { url = "https://files.pythonhosted.org/packages/10/23/73618e7793ea0b619caae2accd9e93e60da38dd78dd425002d319152ef2f/fastuuid-0.12.0-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:b19361ee649365eefc717ec08005972d3d1eb9ee39908022d98e3bfa9da59e37", size = 278559, upload-time = "2025-01-27T18:03:58.661Z" },
674
- { url = "https://files.pythonhosted.org/packages/e4/41/6317ecfc4757d5f2a604e5d3993f353ba7aee85fa75ad8b86fce6fc2fa40/fastuuid-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:8fc66b11423e6f3e1937385f655bedd67aebe56a3dcec0cb835351cfe7d358c9", size = 157276, upload-time = "2025-01-27T18:06:39.245Z" },
663
+ version = "0.13.5"
664
+ source = { registry = "https://pypi.org/simple" }
665
+ sdist = { url = "https://files.pythonhosted.org/packages/15/80/3c16a1edad2e6cd82fbd15ac998cc1b881f478bf1f80ca717d941c441874/fastuuid-0.13.5.tar.gz", hash = "sha256:d4976821ab424d41542e1ea39bc828a9d454c3f8a04067c06fca123c5b95a1a1", size = 18255, upload-time = "2025-09-26T09:05:38.281Z" }
666
+ wheels = [
667
+ { url = "https://files.pythonhosted.org/packages/21/36/434f137c5970cac19e57834e1f7680e85301619d49891618c00666700c61/fastuuid-0.13.5-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:35fe8045e866bc6846f8de6fa05acb1de0c32478048484a995e96d31e21dff2a", size = 494638, upload-time = "2025-09-26T09:14:58.695Z" },
668
+ { url = "https://files.pythonhosted.org/packages/ca/3c/083de2ac007b2b305523b9c006dba5051e5afd87a626ef1a39f76e2c6b82/fastuuid-0.13.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:02a460333f52d731a006d18a52ef6fcb2d295a1f5b1a5938d30744191b2f77b7", size = 253138, upload-time = "2025-09-26T09:13:33.283Z" },
669
+ { url = "https://files.pythonhosted.org/packages/73/5e/630cffa1c8775db526e39e9e4c5c7db0c27be0786bb21ba82c912ae19f63/fastuuid-0.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:74b0e4f8c307b9f477a5d7284db4431ce53a3c1e3f4173db7a97db18564a6202", size = 244521, upload-time = "2025-09-26T09:14:40.682Z" },
670
+ { url = "https://files.pythonhosted.org/packages/4d/51/55d78705f4fbdadf88fb40f382f508d6c7a4941ceddd7825fafebb4cc778/fastuuid-0.13.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6955a99ef455c2986f3851f4e0ccc35dec56ac1a7720f2b92e88a75d6684512e", size = 271557, upload-time = "2025-09-26T09:15:09.75Z" },
671
+ { url = "https://files.pythonhosted.org/packages/6a/2b/1b89e90a8635e5587ccdbbeb169c590672ce7637880f2c047482a0359950/fastuuid-0.13.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10c77b826738c1a27dcdaa92ea4dc1ec9d869748a99e1fde54f1379553d4854", size = 272334, upload-time = "2025-09-26T09:07:48.865Z" },
672
+ { url = "https://files.pythonhosted.org/packages/0c/06/4c8207894eeb30414999e5c3f66ac039bc4003437eb4060d8a1bceb4cc6f/fastuuid-0.13.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb25dccbeb249d16d5e664f65f17ebec05136821d5ef462c4110e3f76b86fb86", size = 290594, upload-time = "2025-09-26T09:12:54.124Z" },
673
+ { url = "https://files.pythonhosted.org/packages/50/69/96d221931a31d77a47cc2487bdfacfb3091edfc2e7a04b1795df1aec05df/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5becc646a3eeafb76ce0a6783ba190cd182e3790a8b2c78ca9db2b5e87af952", size = 452835, upload-time = "2025-09-26T09:14:00.994Z" },
674
+ { url = "https://files.pythonhosted.org/packages/25/ef/bf045f0a47dcec96247497ef3f7a31d86ebc074330e2dccc34b8dbc0468a/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:69b34363752d06e9bb0dbdf02ae391ec56ac948c6f2eb00be90dad68e80774b9", size = 468225, upload-time = "2025-09-26T09:13:38.585Z" },
675
+ { url = "https://files.pythonhosted.org/packages/30/46/4817ab5a3778927155a4bde92540d4c4fa996161ec8b8e080c8928b0984e/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57d0768afcad0eab8770c9b8cf904716bd3c547e8b9a4e755ee8a673b060a3a3", size = 444907, upload-time = "2025-09-26T09:14:30.163Z" },
676
+ { url = "https://files.pythonhosted.org/packages/80/27/ab284117ce4dc9b356a7196bdbf220510285f201d27f1f078592cdc8187b/fastuuid-0.13.5-cp312-cp312-win32.whl", hash = "sha256:8ac6c6f5129d52eaa6ef9ea4b6e2f7c69468a053f3ab8e439661186b9c06bb85", size = 145415, upload-time = "2025-09-26T09:08:59.494Z" },
677
+ { url = "https://files.pythonhosted.org/packages/f4/0c/f970a4222773b248931819f8940800b760283216ca3dda173ed027e94bdd/fastuuid-0.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:ad630e97715beefef07ec37c9c162336e500400774e2c1cbe1a0df6f80d15b9a", size = 150840, upload-time = "2025-09-26T09:13:46.115Z" },
678
+ { url = "https://files.pythonhosted.org/packages/4f/62/74fc53f6e04a4dc5b36c34e4e679f85a4c14eec800dcdb0f2c14b5442217/fastuuid-0.13.5-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ea17dfd35e0e91920a35d91e65e5f9c9d1985db55ac4ff2f1667a0f61189cefa", size = 494678, upload-time = "2025-09-26T09:14:30.908Z" },
679
+ { url = "https://files.pythonhosted.org/packages/09/ba/f28b9b7045738a8bfccfb9cd6aff4b91fce2669e6b383a48b0694ee9b3ff/fastuuid-0.13.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:be6ad91e5fefbcc2a4b478858a2715e386d405834ea3ae337c3b6b95cc0e47d6", size = 253162, upload-time = "2025-09-26T09:13:35.879Z" },
680
+ { url = "https://files.pythonhosted.org/packages/b1/18/13fac89cb4c9f0cd7e81a9154a77ecebcc95d2b03477aa91d4d50f7227ee/fastuuid-0.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ea6df13a306aab3e0439d58c312ff1e6f4f07f09f667579679239b4a6121f64a", size = 244546, upload-time = "2025-09-26T09:14:58.13Z" },
681
+ { url = "https://files.pythonhosted.org/packages/04/bf/9691167804d59411cc4269841df949f6dd5e76452ab10dcfcd1dbe04c5bc/fastuuid-0.13.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2354c1996d3cf12dc2ba3752e2c4d6edc46e1a38c63893146777b1939f3062d4", size = 271528, upload-time = "2025-09-26T09:14:48.996Z" },
682
+ { url = "https://files.pythonhosted.org/packages/a9/b5/7a75a03d1c7aa0b6d573032fcca39391f0aef7f2caabeeb45a672bc0bd3c/fastuuid-0.13.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6cf9b7469fc26d1f9b1c43ac4b192e219e85b88fdf81d71aa755a6c08c8a817", size = 272292, upload-time = "2025-09-26T09:14:42.82Z" },
683
+ { url = "https://files.pythonhosted.org/packages/c0/db/fa0f16cbf76e6880599533af4ef01bb586949c5320612e9d884eff13e603/fastuuid-0.13.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92ba539170097b9047551375f1ca09d8d2b4aefcc79eeae3e1c43fe49b42072e", size = 290466, upload-time = "2025-09-26T09:08:33.161Z" },
684
+ { url = "https://files.pythonhosted.org/packages/1e/02/6b8c45bfbc8500994dd94edba7f59555f9683c4d8c9a164ae1d25d03c7c7/fastuuid-0.13.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:dbb81d05617bc2970765c1ad82db7e8716f6a2b7a361a14b83de5b9240ade448", size = 452838, upload-time = "2025-09-26T09:13:44.747Z" },
685
+ { url = "https://files.pythonhosted.org/packages/27/12/85d95a84f265b888e8eb9f9e2b5aaf331e8be60c0a7060146364b3544b6a/fastuuid-0.13.5-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:d973bd6bf9d754d3cca874714ac0a6b22a47f239fb3d3c8687569db05aac3471", size = 468149, upload-time = "2025-09-26T09:13:18.712Z" },
686
+ { url = "https://files.pythonhosted.org/packages/ad/da/dd9a137e9ea707e883c92470113a432233482ec9ad3e9b99c4defc4904e6/fastuuid-0.13.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e725ceef79486423f05ee657634d4b4c1ca5fb2c8a94e0708f5d6356a83f2a83", size = 444933, upload-time = "2025-09-26T09:14:09.494Z" },
687
+ { url = "https://files.pythonhosted.org/packages/12/f4/ab363d7f4ac3989691e2dc5ae2d8391cfb0b4169e52ef7fa0ac363e936f0/fastuuid-0.13.5-cp313-cp313-win32.whl", hash = "sha256:a1c430a332ead0b2674f1ef71b17f43b8139ec5a4201182766a21f131a31e021", size = 145462, upload-time = "2025-09-26T09:14:15.105Z" },
688
+ { url = "https://files.pythonhosted.org/packages/aa/8a/52eb77d9c294a54caa0d2d8cc9f906207aa6d916a22de963687ab6db8b86/fastuuid-0.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:241fdd362fd96e6b337db62a65dd7cb3dfac20adf854573247a47510e192db6f", size = 150923, upload-time = "2025-09-26T09:13:03.923Z" },
675
689
  ]
676
690
 
677
691
  [[package]]
@@ -1266,8 +1280,8 @@ wheels = [
1266
1280
 
1267
1281
  [[package]]
1268
1282
  name = "litellm"
1269
- version = "1.76.2"
1270
- source = { registry = "https://pypi.org/simple" }
1283
+ version = "1.77.7"
1284
+ source = { git = "https://github.com/BerriAI/litellm.git?rev=v1.77.7.dev9#763d2f8ccdd8412dbe6d4ac0e136d9ac34dcd4c0" }
1271
1285
  dependencies = [
1272
1286
  { name = "aiohttp" },
1273
1287
  { name = "click" },
@@ -1282,10 +1296,6 @@ dependencies = [
1282
1296
  { name = "tiktoken" },
1283
1297
  { name = "tokenizers" },
1284
1298
  ]
1285
- sdist = { url = "https://files.pythonhosted.org/packages/75/a3/f7c00c660972eed1ba5ed53771ac9b4235e7fb1dc410e91d35aff2778ae7/litellm-1.76.2.tar.gz", hash = "sha256:fc7af111fa0f06943d8dbebed73f88000f9902f0d0ee0882c57d0bd5c1a37ecb", size = 10189238, upload-time = "2025-09-04T00:25:09.472Z" }
1286
- wheels = [
1287
- { url = "https://files.pythonhosted.org/packages/79/f4/980cc81c21424026dcb48a541654fd6f4286891825a3d0dd51f02b65cbc3/litellm-1.76.2-py3-none-any.whl", hash = "sha256:a9a2ef64a598b5b4ae245f1de6afc400856477cd6f708ff633d95e2275605a45", size = 8973847, upload-time = "2025-09-04T00:25:05.353Z" },
1288
- ]
1289
1299
 
1290
1300
  [[package]]
1291
1301
  name = "macholib"
@@ -1615,7 +1625,7 @@ wheels = [
1615
1625
 
1616
1626
  [[package]]
1617
1627
  name = "openhands"
1618
- version = "0.1.0"
1628
+ version = "1.0.1"
1619
1629
  source = { editable = "." }
1620
1630
  dependencies = [
1621
1631
  { name = "openhands-sdk" },
@@ -1642,8 +1652,8 @@ dev = [
1642
1652
 
1643
1653
  [package.metadata]
1644
1654
  requires-dist = [
1645
- { name = "openhands-sdk", git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Fsdk&rev=189979a5013751aa86852ab41afe9a79555e62ac" },
1646
- { name = "openhands-tools", git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Ftools&rev=189979a5013751aa86852ab41afe9a79555e62ac" },
1655
+ { name = "openhands-sdk", git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Fsdk&rev=50b094a92817e448ec4352d2950df4f19edd5a9f" },
1656
+ { name = "openhands-tools", git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Ftools&rev=50b094a92817e448ec4352d2950df4f19edd5a9f" },
1647
1657
  { name = "prompt-toolkit", specifier = ">=3" },
1648
1658
  { name = "typer", specifier = ">=0.17.4" },
1649
1659
  ]
@@ -1667,9 +1677,10 @@ dev = [
1667
1677
  [[package]]
1668
1678
  name = "openhands-sdk"
1669
1679
  version = "1.0.0"
1670
- source = { git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Fsdk&rev=189979a5013751aa86852ab41afe9a79555e62ac#189979a5013751aa86852ab41afe9a79555e62ac" }
1680
+ source = { git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Fsdk&rev=50b094a92817e448ec4352d2950df4f19edd5a9f#50b094a92817e448ec4352d2950df4f19edd5a9f" }
1671
1681
  dependencies = [
1672
1682
  { name = "fastmcp" },
1683
+ { name = "httpx" },
1673
1684
  { name = "litellm" },
1674
1685
  { name = "pydantic" },
1675
1686
  { name = "python-frontmatter" },
@@ -1681,7 +1692,7 @@ dependencies = [
1681
1692
  [[package]]
1682
1693
  name = "openhands-tools"
1683
1694
  version = "1.0.0"
1684
- source = { git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Ftools&rev=189979a5013751aa86852ab41afe9a79555e62ac#189979a5013751aa86852ab41afe9a79555e62ac" }
1695
+ source = { git = "https://github.com/All-Hands-AI/agent-sdk.git?subdirectory=openhands%2Ftools&rev=50b094a92817e448ec4352d2950df4f19edd5a9f#50b094a92817e448ec4352d2950df4f19edd5a9f" }
1685
1696
  dependencies = [
1686
1697
  { name = "bashlex" },
1687
1698
  { name = "binaryornot" },
@@ -1,3 +0,0 @@
1
- """OpenHands CLI package."""
2
-
3
- __version__ = '0.1.0'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes