openhands-sdk 1.7.3__py3-none-any.whl → 1.8.0__py3-none-any.whl

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 (44) hide show
  1. openhands/sdk/__init__.py +2 -0
  2. openhands/sdk/agent/agent.py +31 -1
  3. openhands/sdk/agent/base.py +111 -67
  4. openhands/sdk/agent/prompts/system_prompt.j2 +1 -1
  5. openhands/sdk/agent/utils.py +3 -0
  6. openhands/sdk/context/agent_context.py +45 -3
  7. openhands/sdk/context/condenser/__init__.py +2 -0
  8. openhands/sdk/context/condenser/base.py +59 -8
  9. openhands/sdk/context/condenser/llm_summarizing_condenser.py +38 -10
  10. openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +4 -0
  11. openhands/sdk/context/prompts/templates/system_message_suffix.j2 +9 -0
  12. openhands/sdk/context/skills/__init__.py +12 -0
  13. openhands/sdk/context/skills/skill.py +425 -228
  14. openhands/sdk/context/skills/types.py +4 -0
  15. openhands/sdk/context/skills/utils.py +442 -0
  16. openhands/sdk/context/view.py +2 -0
  17. openhands/sdk/conversation/impl/local_conversation.py +42 -14
  18. openhands/sdk/conversation/impl/remote_conversation.py +99 -55
  19. openhands/sdk/conversation/state.py +54 -18
  20. openhands/sdk/event/llm_convertible/action.py +20 -0
  21. openhands/sdk/git/utils.py +31 -6
  22. openhands/sdk/hooks/conversation_hooks.py +57 -10
  23. openhands/sdk/llm/llm.py +59 -76
  24. openhands/sdk/llm/options/chat_options.py +4 -1
  25. openhands/sdk/llm/router/base.py +12 -0
  26. openhands/sdk/llm/utils/telemetry.py +2 -2
  27. openhands/sdk/llm/utils/verified_models.py +1 -1
  28. openhands/sdk/mcp/tool.py +3 -1
  29. openhands/sdk/plugin/__init__.py +22 -0
  30. openhands/sdk/plugin/plugin.py +299 -0
  31. openhands/sdk/plugin/types.py +226 -0
  32. openhands/sdk/tool/__init__.py +7 -1
  33. openhands/sdk/tool/builtins/__init__.py +4 -0
  34. openhands/sdk/tool/schema.py +6 -3
  35. openhands/sdk/tool/tool.py +60 -9
  36. openhands/sdk/utils/models.py +198 -472
  37. openhands/sdk/workspace/base.py +22 -0
  38. openhands/sdk/workspace/local.py +16 -0
  39. openhands/sdk/workspace/remote/async_remote_workspace.py +16 -0
  40. openhands/sdk/workspace/remote/base.py +16 -0
  41. {openhands_sdk-1.7.3.dist-info → openhands_sdk-1.8.0.dist-info}/METADATA +2 -2
  42. {openhands_sdk-1.7.3.dist-info → openhands_sdk-1.8.0.dist-info}/RECORD +44 -40
  43. {openhands_sdk-1.7.3.dist-info → openhands_sdk-1.8.0.dist-info}/WHEEL +0 -0
  44. {openhands_sdk-1.7.3.dist-info → openhands_sdk-1.8.0.dist-info}/top_level.txt +0 -0
@@ -156,3 +156,25 @@ class BaseWorkspace(DiscriminatedUnionMixin, ABC):
156
156
  Raises:
157
157
  Exception: If path is not a git repository or getting diff failed
158
158
  """
159
+
160
+ def pause(self) -> None:
161
+ """Pause the workspace to conserve resources.
162
+
163
+ For local workspaces, this is a no-op.
164
+ For container-based workspaces, this pauses the container.
165
+
166
+ Raises:
167
+ NotImplementedError: If the workspace type does not support pausing.
168
+ """
169
+ raise NotImplementedError(f"{type(self).__name__} does not support pause()")
170
+
171
+ def resume(self) -> None:
172
+ """Resume a paused workspace.
173
+
174
+ For local workspaces, this is a no-op.
175
+ For container-based workspaces, this resumes the container.
176
+
177
+ Raises:
178
+ NotImplementedError: If the workspace type does not support resuming.
179
+ """
180
+ raise NotImplementedError(f"{type(self).__name__} does not support resume()")
@@ -187,3 +187,19 @@ class LocalWorkspace(BaseWorkspace):
187
187
  """
188
188
  path = Path(self.working_dir) / path
189
189
  return get_git_diff(path)
190
+
191
+ def pause(self) -> None:
192
+ """Pause the workspace (no-op for local workspaces).
193
+
194
+ Local workspaces have nothing to pause since they operate directly
195
+ on the host filesystem.
196
+ """
197
+ logger.debug("pause() called on LocalWorkspace - nothing to do")
198
+
199
+ def resume(self) -> None:
200
+ """Resume the workspace (no-op for local workspaces).
201
+
202
+ Local workspaces have nothing to resume since they operate directly
203
+ on the host filesystem.
204
+ """
205
+ logger.debug("resume() called on LocalWorkspace - nothing to do")
@@ -1,6 +1,7 @@
1
1
  from collections.abc import Generator
2
2
  from pathlib import Path
3
3
  from typing import Any
4
+ from urllib.request import urlopen
4
5
 
5
6
  import httpx
6
7
  from pydantic import PrivateAttr
@@ -147,3 +148,18 @@ class AsyncRemoteWorkspace(RemoteWorkspaceMixin):
147
148
  generator = self._git_diff_generator(path)
148
149
  result = await self._execute(generator)
149
150
  return result
151
+
152
+ @property
153
+ def alive(self) -> bool:
154
+ """Check if the remote workspace is alive by querying the health endpoint.
155
+
156
+ Returns:
157
+ True if the health endpoint returns a successful response, False otherwise.
158
+ """
159
+ try:
160
+ health_url = f"{self.host}/health"
161
+ with urlopen(health_url, timeout=5.0) as resp:
162
+ status = getattr(resp, "status", 200)
163
+ return 200 <= status < 300
164
+ except Exception:
165
+ return False
@@ -1,6 +1,7 @@
1
1
  from collections.abc import Generator
2
2
  from pathlib import Path
3
3
  from typing import Any
4
+ from urllib.request import urlopen
4
5
 
5
6
  import httpx
6
7
  from pydantic import PrivateAttr
@@ -162,3 +163,18 @@ class RemoteWorkspace(RemoteWorkspaceMixin, BaseWorkspace):
162
163
  generator = self._git_diff_generator(path)
163
164
  result = self._execute(generator)
164
165
  return result
166
+
167
+ @property
168
+ def alive(self) -> bool:
169
+ """Check if the remote workspace is alive by querying the health endpoint.
170
+
171
+ Returns:
172
+ True if the health endpoint returns a successful response, False otherwise.
173
+ """
174
+ try:
175
+ health_url = f"{self.host}/health"
176
+ with urlopen(health_url, timeout=5.0) as resp:
177
+ status = getattr(resp, "status", 200)
178
+ return 200 <= status < 300
179
+ except Exception:
180
+ return False
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.7.3
3
+ Version: 1.8.0
4
4
  Summary: OpenHands SDK - Core functionality for building AI agents
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: deprecation>=2.1.0
7
7
  Requires-Dist: fastmcp>=2.11.3
8
8
  Requires-Dist: httpx>=0.27.0
9
9
  Requires-Dist: litellm>=1.80.10
10
- Requires-Dist: pydantic>=2.11.7
10
+ Requires-Dist: pydantic>=2.12.5
11
11
  Requires-Dist: python-frontmatter>=1.1.0
12
12
  Requires-Dist: python-json-logger>=3.3.0
13
13
  Requires-Dist: tenacity>=9.1.2
@@ -1,15 +1,15 @@
1
- openhands/sdk/__init__.py,sha256=QCJNFOXO4WsOlr3DELNxwMuIKPt_-81VZXjfbXhDw5I,2535
1
+ openhands/sdk/__init__.py,sha256=FNRcPyCbvwYGrbSCxox_UWIHK5JuyCLHCyPLPZRd5sA,2589
2
2
  openhands/sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  openhands/sdk/agent/__init__.py,sha256=yOn1ZCgTTq2VJlTzKDSzmWVPli1siBzqV89vlEHCwOg,137
4
- openhands/sdk/agent/agent.py,sha256=kLXQKIJskQ_vl5Ju4zyGfdDYN8ZPlsO3EgDxw69VDdc,25328
5
- openhands/sdk/agent/base.py,sha256=YY7j4FBrtt7krz7PH4N7brWF46HN0dsbuwhyaIsaMr4,17953
6
- openhands/sdk/agent/utils.py,sha256=TpANm_Vj4Ku-36T_SD1-u9Y9l86t1RcPU7QVaUh3qU0,8157
4
+ openhands/sdk/agent/agent.py,sha256=X00fM2FSjlZF36Y5E_-JkYS-n_x5RoEupTj2Rp6Gj_k,26361
5
+ openhands/sdk/agent/base.py,sha256=ctAB3MnbnDLLLg1xlWJw6AovK494wiQrFigT57Eo_Z0,18991
6
+ openhands/sdk/agent/utils.py,sha256=AY_7VBFaJ2iorfh0MiS-mXaK6f8ONDejNcbkde_xTGg,8274
7
7
  openhands/sdk/agent/prompts/in_context_learning_example.j2,sha256=MGB0dPUlh6pwLoR_dBK-M3e5dtETX6C6WNjPcPixZmU,5512
8
8
  openhands/sdk/agent/prompts/in_context_learning_example_suffix.j2,sha256=k3Zwnd7Iq7kL4lo307RDuu1mxWXn6pSLsEdvKEXN3BU,164
9
9
  openhands/sdk/agent/prompts/security_policy.j2,sha256=K56d2aaZ88DI-y2DsMSDaiZRTTnkkzuBLjbzXfKHGA8,993
10
10
  openhands/sdk/agent/prompts/security_risk_assessment.j2,sha256=7o1tk6MIQpVD7sAES-sBhw4ckYLGQydzYnjjNitP5iY,1196
11
11
  openhands/sdk/agent/prompts/self_documentation.j2,sha256=Q0nLryVYnGg8Qk056-3tW2WJ2rwBijC5iqJByEdGAT0,1063
12
- openhands/sdk/agent/prompts/system_prompt.j2,sha256=4sIK8BvwBZI9D_WN3O2TQEDBGa_c1Tlgmj6XMuW2_dA,9071
12
+ openhands/sdk/agent/prompts/system_prompt.j2,sha256=KTBEZuez91aqLPX926kEzpRKoVHfXj8XVVUcxZjODhw,9055
13
13
  openhands/sdk/agent/prompts/system_prompt_interactive.j2,sha256=AW3rGuqu82BqbS1XMXVO4Fp-Apa8DPYZV3_nQYkzVtM,1388
14
14
  openhands/sdk/agent/prompts/system_prompt_long_horizon.j2,sha256=_oOHRIer_FSuRrBOSOPpe5Ueo9KgSTba5SPoHHpghCI,2995
15
15
  openhands/sdk/agent/prompts/system_prompt_planning.j2,sha256=wh01KX7yzeUSn5PtG3Ij0keRM6vmQuZZM6I0Fod4DK4,2934
@@ -19,11 +19,11 @@ openhands/sdk/agent/prompts/model_specific/google_gemini.j2,sha256=DvGy_9yuqeyKJ
19
19
  openhands/sdk/agent/prompts/model_specific/openai_gpt/gpt-5-codex.j2,sha256=5iJvfBq3okP0yBVmQe9unB4gZx22_C3Yp_GyWtfColU,312
20
20
  openhands/sdk/agent/prompts/model_specific/openai_gpt/gpt-5.j2,sha256=iMnSKjg2nrFoRUCkNMlGLoMmNWv_9bzK7D82dkJZCbQ,466
21
21
  openhands/sdk/context/__init__.py,sha256=r2YtpZMVFIIaKYVh2yjicTXYPURGhIUUdbliaLYbnnA,609
22
- openhands/sdk/context/agent_context.py,sha256=BlnGNpzQ3urWTmxDV_E5I-m8ZmRlolFgTint0T96QSU,10662
23
- openhands/sdk/context/view.py,sha256=kHhEqyLfUEcXGfG9vOSPRImQGzqkDvtjsgL5BwmcGsU,20487
24
- openhands/sdk/context/condenser/__init__.py,sha256=o3O5wEOUak7mzJ3EzY4s6pjUwA_Q5EzLvgNSFM46d50,490
25
- openhands/sdk/context/condenser/base.py,sha256=lA1OAwSVIXU1GCfvD5_NE5U6hNCYJGuE3G5BaqIPnFM,4007
26
- openhands/sdk/context/condenser/llm_summarizing_condenser.py,sha256=lyvW39Xzne7zBE9qSAFPkbiTxfocTxcw8dK7gha95mM,9550
22
+ openhands/sdk/context/agent_context.py,sha256=TUQB-RBmkKvnwMLKvG9eOc5TVlRnDtBOSeoXRA28JoA,12425
23
+ openhands/sdk/context/view.py,sha256=Qi0H8vsCv2RDBpKBEurlknU2F37WvkI5xofvHAfd_v4,20489
24
+ openhands/sdk/context/condenser/__init__.py,sha256=peHKPk51AujZhXvR2H0j1vBUJsCc8D6-OMHZ4Vk-pxU,568
25
+ openhands/sdk/context/condenser/base.py,sha256=4_heKNni0BW3Lib3WMVRpzm8G03opW6VcHH9M_mV-j0,5869
26
+ openhands/sdk/context/condenser/llm_summarizing_condenser.py,sha256=LjILEVsg5XB49Z5tig2c4QyRRPK4KzPM0b8-MKuIOVE,10688
27
27
  openhands/sdk/context/condenser/no_op_condenser.py,sha256=T87bTtJw4dqlOIZZZ4R_JFPXeSymDqlbsZtH6ng7N1E,474
28
28
  openhands/sdk/context/condenser/pipeline_condenser.py,sha256=wkbEA6R8u8u3Wi1AQmx1AKF9hQ25dLSeKuvB56N1Ohc,2145
29
29
  openhands/sdk/context/condenser/utils.py,sha256=kI4oechGeozHRTFPcq6UVbGgLL-6msR3D2-4fPssFVU,5599
@@ -31,13 +31,14 @@ openhands/sdk/context/condenser/prompts/summarizing_prompt.j2,sha256=J7uwQAsrrZd
31
31
  openhands/sdk/context/prompts/__init__.py,sha256=wC1Qiak4RHY3YS0TuZRmhFGAJ7Vc6CLwvQ4KQJB5o84,104
32
32
  openhands/sdk/context/prompts/prompt.py,sha256=8ZV9C0lg9Lnw7lF5zLnLTF9nL6gTnW5vGIw1YxtRQBU,3724
33
33
  openhands/sdk/context/prompts/templates/ask_agent_template.j2,sha256=VRKWdF2VTJ_Tyway_Wexp8_KlNgAkME94eZelbbsEZI,212
34
- openhands/sdk/context/prompts/templates/skill_knowledge_info.j2,sha256=3yNxEEbScAU1w60ix7Ph91wr6p8mjwT-3EGkkZkWT9Q,261
35
- openhands/sdk/context/prompts/templates/system_message_suffix.j2,sha256=_UYK1BZrZaO5BQKO99b_nbs_cyEhO9RdZcGaBqYwmc0,2180
36
- openhands/sdk/context/skills/__init__.py,sha256=yGLI8A3JHIvipjdZ7ClcbU5Q-vqWQHsZWxNQeoSTW8g,645
34
+ openhands/sdk/context/prompts/templates/skill_knowledge_info.j2,sha256=boqEsAIszJ2Cy7Zc7UfFLbwSXgFybZ4mU8YCCW-zXYc,423
35
+ openhands/sdk/context/prompts/templates/system_message_suffix.j2,sha256=4OWDu6YAXLQwmFLiIRJ7gEaR8z_RXYlvasmn1zeFP2g,2608
36
+ openhands/sdk/context/skills/__init__.py,sha256=dS6XJYLHlm_wboD-C42bRw4HCFu-o9dzCiFRpoyR1h0,938
37
37
  openhands/sdk/context/skills/exceptions.py,sha256=tVBSbXTXG32nb1TebVAuzbNNHvn8GScpSM1bHCnQzvY,305
38
- openhands/sdk/context/skills/skill.py,sha256=MjPRYEiGyXVgO1cfhM4UkVgfR9VmJv-Y1BDgN6sXS98,25976
38
+ openhands/sdk/context/skills/skill.py,sha256=TVpfxbDYE0NSmD1lfaEh_hO0iMSvV42b5Sph30QSD5c,34603
39
39
  openhands/sdk/context/skills/trigger.py,sha256=ZGaDmMpJghnAEuTTYX6UepsA5nX1CSz83zK1Ox46vMk,756
40
- openhands/sdk/context/skills/types.py,sha256=qdakWgfs_88I_cnmVhO5bl3C3s11GvCydq7Q-V53kCI,1662
40
+ openhands/sdk/context/skills/types.py,sha256=LvyCveHBSt2-g9Lbpr_eQMvOd4eEBjJb3irAWL-OzE0,1813
41
+ openhands/sdk/context/skills/utils.py,sha256=Wp7oMEXczAmgNWc2KXTZuCLUtlxPbElqcoS3oETTKJg,13760
41
42
  openhands/sdk/conversation/__init__.py,sha256=1-xh49S2KJhtAjkHDaDHU28UWhfQLl3CeFlo179gr00,1402
42
43
  openhands/sdk/conversation/base.py,sha256=sVpfqtyTVi7_d8rzI_gemZGHusVrNy9S_yNJmTGMEq8,8964
43
44
  openhands/sdk/conversation/conversation.py,sha256=KN4mqYqrzc5LWksliDmRV-wNg1FdF0IVyaopOKeajas,6079
@@ -50,13 +51,13 @@ openhands/sdk/conversation/persistence_const.py,sha256=om3pOQa5sGK8t_NUYb3Tz-7sK
50
51
  openhands/sdk/conversation/response_utils.py,sha256=rPlC3cDSmoQte6NZ0kK6h6-9ho5cbF8jEw-DiyEhgIM,1548
51
52
  openhands/sdk/conversation/secret_registry.py,sha256=6fY1zRxb55rC4uIMFcR0lDssIyyjaPh9pCWGqDikrek,4446
52
53
  openhands/sdk/conversation/serialization_diff.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- openhands/sdk/conversation/state.py,sha256=vq9t8mu9eTmFm77K0fPZvrhhGmj6eaTmSQD6xu_3d3U,14760
54
+ openhands/sdk/conversation/state.py,sha256=1TsOYXfXSKQ4odsZH8yFJ_d_zGZKPseOGvDVUaf1MzQ,16235
54
55
  openhands/sdk/conversation/stuck_detector.py,sha256=4UNU7Bh9M2yrw3RavMzZeFGQ5RutqavkckW3exFPqQw,11673
55
56
  openhands/sdk/conversation/title_utils.py,sha256=j40-dP-Oes-mhU2xUC7fCC8cB0wkMdbbDJU7WLHiVIo,7063
56
57
  openhands/sdk/conversation/types.py,sha256=q_yc3VNc8r3cdmvPXzpj7HvdLeDqv-37hCgOWMU65a4,1507
57
58
  openhands/sdk/conversation/impl/__init__.py,sha256=DmDFyNR4RU8eiMocKf2j9eBQomipP-rrJgU1LoVWTDA,220
58
- openhands/sdk/conversation/impl/local_conversation.py,sha256=YZUwl0-uRa0aR29qJWon7nt4Ul2M1V0R_1mtJUBSfyE,27599
59
- openhands/sdk/conversation/impl/remote_conversation.py,sha256=Dd53dTrsRb38SLuMG3n1b0I7AZwDSMb3P7BhqR0wQgg,36302
59
+ openhands/sdk/conversation/impl/local_conversation.py,sha256=-3ZfsxWgmC0lSf78rbylHJZlGXUdLorAADq-PJhX4ds,29163
60
+ openhands/sdk/conversation/impl/remote_conversation.py,sha256=G8Asgg99gBxmQa2wsp-S6u8nEqJOq9DYjpzVNAi6AEI,38011
60
61
  openhands/sdk/conversation/visualizer/__init__.py,sha256=0LXpKlt2eJcrqP1z6jQP_nLx23V8ErnQkKYSxvUp0_A,275
61
62
  openhands/sdk/conversation/visualizer/base.py,sha256=77DdRdHAPSESxRCYyRRSOK7ROBlljscxogkFFr4YgM0,2323
62
63
  openhands/sdk/conversation/visualizer/default.py,sha256=k-3-l1j8H_EOEn_pfzsUczcc4JDhQni7AUQZgZ2TpB4,11885
@@ -76,7 +77,7 @@ openhands/sdk/event/token.py,sha256=QlEbBrfZaHe9tp8-Ot4vTd0T-_Vj7lpUqKfVJcVHOeI,
76
77
  openhands/sdk/event/types.py,sha256=3hyFDBNtYTGEwLV6muodJO7iDMoZTC4D0Dd4vYeF2dE,271
77
78
  openhands/sdk/event/user_action.py,sha256=JnU5LDYY1aMgSSEPkSz5wrQ6XScHKcdsFi_tnjcWO9U,661
78
79
  openhands/sdk/event/llm_convertible/__init__.py,sha256=04kTm2F3M8oGpkBbePb35R1jpd5ZpA-XYWHMYyJ46sQ,553
79
- openhands/sdk/event/llm_convertible/action.py,sha256=EY55De2QFtsHN9a5vDYmIY3jZGucjj6LuJj5BjIvXKo,5485
80
+ openhands/sdk/event/llm_convertible/action.py,sha256=QbYQYSIDStsFR8R8dfrY00aVpcHOKtqqawD40rijVl8,6316
80
81
  openhands/sdk/event/llm_convertible/message.py,sha256=yeEI2zy3IuOu2fAyCkr8fhdn6qwiLcgR4MYAot4CGpw,5048
81
82
  openhands/sdk/event/llm_convertible/observation.py,sha256=LF09On5eI9Cadb_yK4bhh_-pvnf5onsr-MzayL0r0h0,5045
82
83
  openhands/sdk/event/llm_convertible/system.py,sha256=iGyizThTd8lxekgHK7E-4Z5xTF_Zb7_y7J9zAitL7lI,2332
@@ -84,10 +85,10 @@ openhands/sdk/git/exceptions.py,sha256=T3_jdOzilK39y1_ilMQ3Z3RSkxHJZafUoZTzOiuGj
84
85
  openhands/sdk/git/git_changes.py,sha256=RQwva8j5mq09WoTrmNcZMBHrGUzn0CPYilW6k1kJCD0,8339
85
86
  openhands/sdk/git/git_diff.py,sha256=osaSys05wp9i-_KqfcYEHhNFzzU0B2qCn9vChfRPL0g,3820
86
87
  openhands/sdk/git/models.py,sha256=himUK-g49iQHMBfJlVr4tTUOXQhudJUR-vcntTeFkPM,349
87
- openhands/sdk/git/utils.py,sha256=Ep0DEFGs3hon9cX166RxtJCLQqbA-JXcKo2kNGGHhoA,6338
88
+ openhands/sdk/git/utils.py,sha256=5vSxC8p_6Yu-LEZ_qEJL5oSHHlAZtg0cax1Z7Z1vWLw,7262
88
89
  openhands/sdk/hooks/__init__.py,sha256=J2ZO0Ajnw6IDbrDuA1BtXlzoGkSIZ3VcF0Haihgd8pE,854
89
90
  openhands/sdk/hooks/config.py,sha256=QeUA2joRglX-fXazoSXpZLrKpQO9jwW7htNQ_D5WtFU,5964
90
- openhands/sdk/hooks/conversation_hooks.py,sha256=j8Ok16kuHn-0EVP9IKOBfReirBZ8ZDlmI1G5lC_KZxA,8741
91
+ openhands/sdk/hooks/conversation_hooks.py,sha256=I62p4wrS2Jz3GatlNghUYY-57CnRrcxlvQawWFXU1-0,10629
91
92
  openhands/sdk/hooks/executor.py,sha256=K-nE92r_6dsNV_ISEhoqIyxGvYzD9wgwSyHFM456NX4,5016
92
93
  openhands/sdk/hooks/manager.py,sha256=woce5tBGaygQvKL_p3K77Xq9K8QMwsbZYjEmDCGHoIY,5864
93
94
  openhands/sdk/hooks/types.py,sha256=ZQp2_HVvOWI9YQPZInFJ0QdhpKo4UxGmq4YLYz9zfOY,1066
@@ -97,7 +98,7 @@ openhands/sdk/io/cache.py,sha256=TZD9Px-WK303WGjm5nin9n3TCKGiAJ-PIqrM5MFeg5c,290
97
98
  openhands/sdk/io/local.py,sha256=IhU4OLP3-S8UCCWTm_xqw7XDYgeYms77b6I_FhZq0iU,4232
98
99
  openhands/sdk/io/memory.py,sha256=XIsdXsSyF-PzoYVmvJuO7Vtz-k3D5jMOFoZ5gHw8tbA,1712
99
100
  openhands/sdk/llm/__init__.py,sha256=k8UneyfoDUMe0lSP4GSlYzrL2Fe3MkDUKpSg2OIDi_I,1206
100
- openhands/sdk/llm/llm.py,sha256=bvUoK9e0qH6yhT3JmB1TjeH-aYJWunVL4t9EoPMoJnY,44706
101
+ openhands/sdk/llm/llm.py,sha256=TqnqMd-i2EEF74y_3oOuOEbei912QY66JRFjG8REJt4,44139
101
102
  openhands/sdk/llm/llm_registry.py,sha256=DL9yqSbAM7OBkzdIChLuxG2qk_oElW2tC2xem6mq0F8,3530
102
103
  openhands/sdk/llm/llm_response.py,sha256=DaBVBkij4Sz-RsYhRb3UUcvJCTzCBcOYQ9IhFwN4ukI,1988
103
104
  openhands/sdk/llm/message.py,sha256=Tw7sIw5A-rZqIH8dPI0UnoXf0KuPB8tURcJMQyv9JZg,25507
@@ -109,11 +110,11 @@ openhands/sdk/llm/exceptions/types.py,sha256=IfyRtfH5eJrsLOlp6Fz76CiCKjx1ukmXciI
109
110
  openhands/sdk/llm/mixins/fn_call_converter.py,sha256=xlYywDHYMhVQyd_CiTuoY1JHaqpEIEjsZknCJN_hFFE,48528
110
111
  openhands/sdk/llm/mixins/non_native_fc.py,sha256=KL2-rCh9uNz5WDskP7rc2uv1xOzZWgvffWqPaGbYvtw,3408
111
112
  openhands/sdk/llm/options/__init__.py,sha256=EntvOWC5kwDoTMXXMkYuoWMQ13hD8YtC9CEMCtnKj7o,54
112
- openhands/sdk/llm/options/chat_options.py,sha256=YrQrMKUj9Sb0ZdzJMoB11PwD7hzdLBDGrOMWfgZQ10s,3452
113
+ openhands/sdk/llm/options/chat_options.py,sha256=rXFEXL8YFWRtMaAln0AI--dclA7HTBFaUQwzwNthzZQ,3690
113
114
  openhands/sdk/llm/options/common.py,sha256=qFcPuZF_c4rmH1bgGG8Qp6TJ4YWpv9IFzfLZRRiik9M,580
114
115
  openhands/sdk/llm/options/responses_options.py,sha256=1ff_06XcORneDQUjwrEM6tel9HLI9_veMcoKHYAKLG8,2302
115
116
  openhands/sdk/llm/router/__init__.py,sha256=N8qldpGdLLCWZzn5Rz2y8AheSoCTQLGkLOBDCFNMJRA,261
116
- openhands/sdk/llm/router/base.py,sha256=9mUUpv-zgT6HVKmJ87Q5e5VncoKi8hHd9aP8j9cJI_g,4139
117
+ openhands/sdk/llm/router/base.py,sha256=izGHV17UctI70t2OjhuLgVAV7gGZ51vbZ4WpWJxblJA,4678
117
118
  openhands/sdk/llm/router/impl/multimodal.py,sha256=uKFVm7b3Jr0xCC1lvP-cVn-fIkTv24-pK3xKlOJahz4,3034
118
119
  openhands/sdk/llm/router/impl/random.py,sha256=oBHoFTBMa9OeDyg-rV4siLCkN6rKYL0uDlZMEseB3ro,656
119
120
  openhands/sdk/llm/utils/metrics.py,sha256=4zD0Hkc9Oc4qcDcVZUX13RyggyObshUbz4Ik9W1uIw4,11592
@@ -121,9 +122,9 @@ openhands/sdk/llm/utils/model_features.py,sha256=vAsRbD0dTIVM7SZUjO3Vwyd2CfDYxcR
121
122
  openhands/sdk/llm/utils/model_info.py,sha256=1mFYA7OcEyUB6k1doao8_w1XT7UMM_DAm57HcTpKkLw,2628
122
123
  openhands/sdk/llm/utils/model_prompt_spec.py,sha256=onw9-y7x0aJS8IOjNzeqhdvcFNwK1l_s0XgurWlnj5o,2587
123
124
  openhands/sdk/llm/utils/retry_mixin.py,sha256=M-hXp8EwP1FjNN6tgHiv133BtUQgRr9Kz_ZWxeAJLGA,4765
124
- openhands/sdk/llm/utils/telemetry.py,sha256=_csSRWg80djE27QN9Mg3palVTP-LJ7BbttOaHQYykZU,13970
125
+ openhands/sdk/llm/utils/telemetry.py,sha256=_9QedIEgHy_y-iadaofzDYU1_nQBjvbMR-H-KO6C3ss,13982
125
126
  openhands/sdk/llm/utils/unverified_models.py,sha256=SmYrX_WxXOJBanTviztqy1xPjOcLY4i3qvwNBEga_Dk,4797
126
- openhands/sdk/llm/utils/verified_models.py,sha256=4rUtUdRaVx0ZR6V1WsaWAMlgO7SkDdG4yoVgXHj689U,1462
127
+ openhands/sdk/llm/utils/verified_models.py,sha256=_ioY2NHay8MQmfeiWRkT_53pA7DFhldopfQotTwORbk,1462
127
128
  openhands/sdk/logger/__init__.py,sha256=vZvFDYfW01Y8Act3tveMs3XxTysJlt4HeT-n6X_ujYk,330
128
129
  openhands/sdk/logger/logger.py,sha256=en8SHzFC2baohQmqbgE8t0mvV_xMZQrILEycOzdAZL0,6511
129
130
  openhands/sdk/logger/rolling.py,sha256=E6oy0asgmOhZHoWlSCw0QK1PKnS6kvtxjoWLAsqlGvs,3440
@@ -131,11 +132,14 @@ openhands/sdk/mcp/__init__.py,sha256=-wQbZ405PjVRCBtSfirp4jsiRohd7IJAyAdicZ-M8Ok
131
132
  openhands/sdk/mcp/client.py,sha256=CLkFImydorlT_RBTE5UxvRNGMlc-uO3wvupoDzB5E20,2420
132
133
  openhands/sdk/mcp/definition.py,sha256=vFLQeLW99fBzPGR7X7_1GzTmIHlSVAbmsg3elhhkp5U,3424
133
134
  openhands/sdk/mcp/exceptions.py,sha256=N4g7Wju420TQJ7hmck1e5UblWbC_7Torb-UTFj1GN70,448
134
- openhands/sdk/mcp/tool.py,sha256=GJElHJ7gVLSfAacmaHm2PHHiV9Gb1_siu1PQrDJo7_U,10187
135
+ openhands/sdk/mcp/tool.py,sha256=j4rN6vQMrVBYa46StLbEMdvRn-XaN1RE0RYFR49zYQU,10269
135
136
  openhands/sdk/mcp/utils.py,sha256=AazuWwhEwHBs1JKXfNVJDArkgQfmuj4MrPQwxDo52ds,2919
136
137
  openhands/sdk/observability/__init__.py,sha256=JKHDWoj01igaCUChdXgKmstESiMmbAK9CN5XzT2H7fo,122
137
138
  openhands/sdk/observability/laminar.py,sha256=U2AbSWpPcUYdrzx__-BEg4LPW13f1l-Hk-V4qeBmE3k,5053
138
139
  openhands/sdk/observability/utils.py,sha256=N0p8ACs2WKS1PyFPjiU-PPng6WsAe15ZpFViFAw1gO0,576
140
+ openhands/sdk/plugin/__init__.py,sha256=NCzotHxOH7FfNVcJFy0ttNHOXf3xesHbDQ5sBa1twAI,474
141
+ openhands/sdk/plugin/plugin.py,sha256=WiY_3n69kDYDPwY2srurYWbOLYO5ZiPtwJ0yOHc45jU,9970
142
+ openhands/sdk/plugin/types.py,sha256=kYrlSKNnxZJiIB2XaJ2j4iKnG9jTXT8DIz54IzU6qyE,8122
139
143
  openhands/sdk/secret/__init__.py,sha256=Y-M2WPfYLfVYZSFZGTf6MDOnjsL5SayETtA4t9X0gjw,348
140
144
  openhands/sdk/secret/secrets.py,sha256=1PkD9oXJJlPgsN4D3brv3_HjIc2IQGy5BbcqZKJ_8Ew,2737
141
145
  openhands/sdk/security/__init__.py,sha256=x2-a0fsImxSM2msHl7gV0fENWyZbpY7-HW_CBwNrPZY,89
@@ -143,12 +147,12 @@ openhands/sdk/security/analyzer.py,sha256=V6Fowh83sfEr1SdwK3UW1PNQHahHxwHfla0Knd
143
147
  openhands/sdk/security/confirmation_policy.py,sha256=bsrIOfo3QOXNyKrmUVzQz070F3xbJ7uZp9WTr4RMdl8,2145
144
148
  openhands/sdk/security/llm_analyzer.py,sha256=wb7VNJjzlKkimh1mR2wpn6LSqBdo3GZJqhWQp8qyky4,1108
145
149
  openhands/sdk/security/risk.py,sha256=4I1zPCQa-PLlez7so8IYqY8bSvqHrxu-hzbix7GrxIE,3497
146
- openhands/sdk/tool/__init__.py,sha256=Fpcy_I5CYC8lDf2KNLj7LJg9YpoDObbacMFOvM9fI5g,692
150
+ openhands/sdk/tool/__init__.py,sha256=gqqpPGHr06uGZOyFitOqZCjK76pDNrT0HmufmaR1d9A,765
147
151
  openhands/sdk/tool/registry.py,sha256=vA7DpN9RfKFRS3PibjEf_Z4coCcMbhOcgUUXcnTYFC8,6272
148
- openhands/sdk/tool/schema.py,sha256=w8J3UQtdE3vgh_8jRVXLzGYPOhmPn9n-YHBAnxt79Y0,9500
152
+ openhands/sdk/tool/schema.py,sha256=nQqOAIFrVgp2T5En4HjTLWA6yXYTaip9A3isMpliYcw,9649
149
153
  openhands/sdk/tool/spec.py,sha256=EbtWasVhwjLKNJywHubbwfYqfgXnZbU4QE6XUOLhsdk,1221
150
- openhands/sdk/tool/tool.py,sha256=UrsUiBmywGXtCKlGCxSF650wSx9kX76RpaTs6U3Jb5w,17796
151
- openhands/sdk/tool/builtins/__init__.py,sha256=30MfENomH9JBPwKs03Xwgny09dDUOt3FSIQ3egRJKhM,729
154
+ openhands/sdk/tool/tool.py,sha256=9VV2aJtGeBmRn09oovRMtGafBC6UcAMWNSF1Uo2g6G0,19656
155
+ openhands/sdk/tool/builtins/__init__.py,sha256=3F2NYhSkWOebKlNwRlwpoQD_rkxoT-pEx4AvAkMmJTs,911
152
156
  openhands/sdk/tool/builtins/finish.py,sha256=pPv_bKDOQE4sUK9lNh1H1lDaxavHozjOwLCIuYrb424,3136
153
157
  openhands/sdk/tool/builtins/think.py,sha256=Jp8CBHJZwrtNuVCLrxKlVwb9HeQ1lZB56PCYMxW3wWk,4050
154
158
  openhands/sdk/utils/__init__.py,sha256=81qUukQiVDos57kbtZfFGZ3i0zX-t1eSI0J8UZN4fP4,448
@@ -159,22 +163,22 @@ openhands/sdk/utils/command.py,sha256=iqTdFL9tPQ0gyq5w_HOMXSSHg1nowtrWwJBeDL87lZ
159
163
  openhands/sdk/utils/deprecation.py,sha256=7XwepMKTwBLaqS-4rdJupKxNZkepV0Mrru3uTQukS0k,5114
160
164
  openhands/sdk/utils/github.py,sha256=l-_LQKw820dA_U8NmDdmaReAPhgMAWqfH1oRMi1q5OA,1638
161
165
  openhands/sdk/utils/json.py,sha256=hHAA7i7NCJrQhb5WWSsoT0nvmJUi0koyBdbviFrfdcM,1384
162
- openhands/sdk/utils/models.py,sha256=kQn1-pLBv44tMBAdMSicV7hb5AKpmMQp7NTim1N_Au4,20696
166
+ openhands/sdk/utils/models.py,sha256=M1nYODrAdaXwcy0eketRBDaSdBdEYgH34ask_Ij2FOI,10698
163
167
  openhands/sdk/utils/paging.py,sha256=pgSQTe8_pArNjW8jwIyB3XKK04cf4knRHZbgrJrCm8Y,1962
164
168
  openhands/sdk/utils/pydantic_diff.py,sha256=vOy4M1XKKDkCzp7RXBvnibvPYWL8fNEDtWNUn_-N1yg,2732
165
169
  openhands/sdk/utils/pydantic_secrets.py,sha256=B9njRdijnqO4g-GDCWRsWd-TZc5GTjMncDEPMFP_aUE,2186
166
170
  openhands/sdk/utils/truncate.py,sha256=LYRA45CBR7daSC03gs80nu7PYdROh943_niOpaoquKU,4390
167
171
  openhands/sdk/utils/visualize.py,sha256=4x32eU-OiSZTKpXWIche7QppMS1vxcZjP-kASqE99X4,2004
168
172
  openhands/sdk/workspace/__init__.py,sha256=09huA83IZJZU8XZSVzSgZwfUv-slzYwofnUjLgqt7B8,401
169
- openhands/sdk/workspace/base.py,sha256=4_oBXbjspa2Oh2wpgbcQMyrshi7prhmOL1LY97NowgQ,4590
170
- openhands/sdk/workspace/local.py,sha256=N_cW_E5BfctIpgwU-OcRQIqKLn4ibxNwjL4c8iYjU6E,6253
173
+ openhands/sdk/workspace/base.py,sha256=yXJhaRfq0Zm3-ltYwMOpvNqaaRvMEtDB11SMhJSoV68,5366
174
+ openhands/sdk/workspace/local.py,sha256=_kW7UxEr9KoKKM7ybSmDzDQWBxUNmBOgdyz5oIG9DKE,6825
171
175
  openhands/sdk/workspace/models.py,sha256=ORFn70kXvD0urjeq59d_XqXBYSHbDYkBMg9KYQKRa5I,1304
172
176
  openhands/sdk/workspace/workspace.py,sha256=Of1r2z3W_pXSgV8u10sUQ87ChtaA5khD6HJ_PtJz6aY,1296
173
177
  openhands/sdk/workspace/remote/__init__.py,sha256=eKkj6NOESMUBGDVC6_L2Wfuc4K6G-mpnJDNHKBkSeUI,114
174
- openhands/sdk/workspace/remote/async_remote_workspace.py,sha256=ftv1Vdx4mmM3AjygJpemMJGvhaQel7ORxdQVk12z4ZE,5061
175
- openhands/sdk/workspace/remote/base.py,sha256=72C9MZV7ch5n6oHNvFMo6irW7b6Le8n4gk3yFuc0798,5605
178
+ openhands/sdk/workspace/remote/async_remote_workspace.py,sha256=MfnYoXvx_tZ7MKDGJCofnkYAJxfBKqNtM2Qprx3QQRk,5608
179
+ openhands/sdk/workspace/remote/base.py,sha256=t-qbouLxkAsPKvVblXWWHKixHsLFz4bw3l9LW_n9_6o,6152
176
180
  openhands/sdk/workspace/remote/remote_workspace_mixin.py,sha256=CzHfnLUIra5sgPkP9kcggb1vHGOPpYQzLsHvGO2rRt0,10963
177
- openhands_sdk-1.7.3.dist-info/METADATA,sha256=wXaM1ijOMJnps6Kpyj_S73I-GbHH6boWth5EpYU9ljc,546
178
- openhands_sdk-1.7.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
179
- openhands_sdk-1.7.3.dist-info/top_level.txt,sha256=jHgVu9I0Blam8BXFgedoGKfglPF8XvW1TsJFIjcgP4E,10
180
- openhands_sdk-1.7.3.dist-info/RECORD,,
181
+ openhands_sdk-1.8.0.dist-info/METADATA,sha256=68ZzLd0ZlmPxzrKdl3KCDw95hKX54wxBmSSFT1ka-1c,546
182
+ openhands_sdk-1.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
183
+ openhands_sdk-1.8.0.dist-info/top_level.txt,sha256=jHgVu9I0Blam8BXFgedoGKfglPF8XvW1TsJFIjcgP4E,10
184
+ openhands_sdk-1.8.0.dist-info/RECORD,,