openhands-sdk 1.5.1__tar.gz → 1.5.2__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 (169) hide show
  1. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/PKG-INFO +1 -1
  2. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/base.py +19 -6
  3. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/tool.py +2 -2
  4. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands_sdk.egg-info/PKG-INFO +1 -1
  5. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/pyproject.toml +1 -1
  6. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/__init__.py +0 -0
  7. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/__init__.py +0 -0
  8. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/agent.py +0 -0
  9. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/in_context_learning_example.j2 +0 -0
  10. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/in_context_learning_example_suffix.j2 +0 -0
  11. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/security_policy.j2 +0 -0
  12. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/security_risk_assessment.j2 +0 -0
  13. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/system_prompt.j2 +0 -0
  14. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/system_prompt_interactive.j2 +0 -0
  15. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/system_prompt_long_horizon.j2 +0 -0
  16. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/system_prompt_planning.j2 +0 -0
  17. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/prompts/system_prompt_tech_philosophy.j2 +0 -0
  18. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/agent/utils.py +0 -0
  19. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/__init__.py +0 -0
  20. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/agent_context.py +0 -0
  21. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/__init__.py +0 -0
  22. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/base.py +0 -0
  23. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/llm_summarizing_condenser.py +0 -0
  24. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/no_op_condenser.py +0 -0
  25. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/pipeline_condenser.py +0 -0
  26. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/condenser/prompts/summarizing_prompt.j2 +0 -0
  27. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/prompts/__init__.py +0 -0
  28. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/prompts/prompt.py +0 -0
  29. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/prompts/templates/ask_agent_template.j2 +0 -0
  30. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +0 -0
  31. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/prompts/templates/system_message_suffix.j2 +0 -0
  32. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/skills/__init__.py +0 -0
  33. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/skills/exceptions.py +0 -0
  34. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/skills/skill.py +0 -0
  35. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/skills/trigger.py +0 -0
  36. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/skills/types.py +0 -0
  37. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/context/view.py +0 -0
  38. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/__init__.py +0 -0
  39. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/base.py +0 -0
  40. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/conversation.py +0 -0
  41. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/conversation_stats.py +0 -0
  42. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/event_store.py +0 -0
  43. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/events_list_base.py +0 -0
  44. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/exceptions.py +0 -0
  45. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/fifo_lock.py +0 -0
  46. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/impl/__init__.py +0 -0
  47. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/impl/local_conversation.py +0 -0
  48. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/impl/remote_conversation.py +0 -0
  49. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/persistence_const.py +0 -0
  50. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/response_utils.py +0 -0
  51. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/secret_registry.py +0 -0
  52. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/serialization_diff.py +0 -0
  53. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/state.py +0 -0
  54. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/stuck_detector.py +0 -0
  55. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/title_utils.py +0 -0
  56. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/types.py +0 -0
  57. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/visualizer/__init__.py +0 -0
  58. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/visualizer/base.py +0 -0
  59. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/conversation/visualizer/default.py +0 -0
  60. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/__init__.py +0 -0
  61. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/base.py +0 -0
  62. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/impl/__init__.py +0 -0
  63. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/impl/agent_finished.py +0 -0
  64. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/impl/empty_patch.py +0 -0
  65. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/critic/impl/pass_critic.py +0 -0
  66. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/__init__.py +0 -0
  67. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/base.py +0 -0
  68. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/condenser.py +0 -0
  69. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/conversation_error.py +0 -0
  70. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/conversation_state.py +0 -0
  71. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_completion_log.py +0 -0
  72. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_convertible/__init__.py +0 -0
  73. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_convertible/action.py +0 -0
  74. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_convertible/message.py +0 -0
  75. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_convertible/observation.py +0 -0
  76. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/llm_convertible/system.py +0 -0
  77. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/token.py +0 -0
  78. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/types.py +0 -0
  79. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/event/user_action.py +0 -0
  80. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/git/exceptions.py +0 -0
  81. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/git/git_changes.py +0 -0
  82. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/git/git_diff.py +0 -0
  83. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/git/models.py +0 -0
  84. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/git/utils.py +0 -0
  85. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/io/__init__.py +0 -0
  86. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/io/base.py +0 -0
  87. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/io/local.py +0 -0
  88. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/io/memory.py +0 -0
  89. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/__init__.py +0 -0
  90. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/exceptions/__init__.py +0 -0
  91. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/exceptions/classifier.py +0 -0
  92. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/exceptions/mapping.py +0 -0
  93. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/exceptions/types.py +0 -0
  94. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/llm.py +0 -0
  95. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/llm_registry.py +0 -0
  96. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/llm_response.py +0 -0
  97. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/message.py +0 -0
  98. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/mixins/fn_call_converter.py +0 -0
  99. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/mixins/non_native_fc.py +0 -0
  100. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/options/__init__.py +0 -0
  101. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/options/chat_options.py +0 -0
  102. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/options/common.py +0 -0
  103. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/options/responses_options.py +0 -0
  104. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/router/__init__.py +0 -0
  105. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/router/base.py +0 -0
  106. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/router/impl/multimodal.py +0 -0
  107. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/router/impl/random.py +0 -0
  108. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/streaming.py +0 -0
  109. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/metrics.py +0 -0
  110. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/model_features.py +0 -0
  111. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/model_info.py +0 -0
  112. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/retry_mixin.py +0 -0
  113. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/telemetry.py +0 -0
  114. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/unverified_models.py +0 -0
  115. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/llm/utils/verified_models.py +0 -0
  116. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/logger/__init__.py +0 -0
  117. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/logger/logger.py +0 -0
  118. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/logger/rolling.py +0 -0
  119. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/__init__.py +0 -0
  120. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/client.py +0 -0
  121. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/definition.py +0 -0
  122. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/exceptions.py +0 -0
  123. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/tool.py +0 -0
  124. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/mcp/utils.py +0 -0
  125. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/observability/__init__.py +0 -0
  126. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/observability/laminar.py +0 -0
  127. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/observability/utils.py +0 -0
  128. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/py.typed +0 -0
  129. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/secret/__init__.py +0 -0
  130. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/secret/secrets.py +0 -0
  131. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/security/__init__.py +0 -0
  132. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/security/analyzer.py +0 -0
  133. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/security/confirmation_policy.py +0 -0
  134. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/security/llm_analyzer.py +0 -0
  135. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/security/risk.py +0 -0
  136. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/__init__.py +0 -0
  137. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/builtins/__init__.py +0 -0
  138. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/builtins/finish.py +0 -0
  139. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/builtins/think.py +0 -0
  140. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/registry.py +0 -0
  141. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/schema.py +0 -0
  142. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/tool/spec.py +0 -0
  143. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/__init__.py +0 -0
  144. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/async_executor.py +0 -0
  145. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/async_utils.py +0 -0
  146. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/cipher.py +0 -0
  147. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/command.py +0 -0
  148. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/deprecation.py +0 -0
  149. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/github.py +0 -0
  150. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/json.py +0 -0
  151. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/models.py +0 -0
  152. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/pydantic_diff.py +0 -0
  153. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/pydantic_secrets.py +0 -0
  154. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/truncate.py +0 -0
  155. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/utils/visualize.py +0 -0
  156. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/__init__.py +0 -0
  157. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/base.py +0 -0
  158. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/local.py +0 -0
  159. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/models.py +0 -0
  160. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/remote/__init__.py +0 -0
  161. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/remote/async_remote_workspace.py +0 -0
  162. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/remote/base.py +0 -0
  163. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/remote/remote_workspace_mixin.py +0 -0
  164. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands/sdk/workspace/workspace.py +0 -0
  165. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands_sdk.egg-info/SOURCES.txt +0 -0
  166. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands_sdk.egg-info/dependency_links.txt +0 -0
  167. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands_sdk.egg-info/requires.txt +0 -0
  168. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/openhands_sdk.egg-info/top_level.txt +0 -0
  169. {openhands_sdk-1.5.1 → openhands_sdk-1.5.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.5.1
3
+ Version: 1.5.2
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
@@ -3,6 +3,7 @@ import re
3
3
  import sys
4
4
  from abc import ABC, abstractmethod
5
5
  from collections.abc import Generator, Iterable
6
+ from concurrent.futures import ThreadPoolExecutor
6
7
  from typing import TYPE_CHECKING, Any
7
8
 
8
9
  from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
@@ -196,13 +197,25 @@ class AgentBase(DiscriminatedUnionMixin, ABC):
196
197
  return
197
198
 
198
199
  tools: list[ToolDefinition] = []
199
- for tool_spec in self.tools:
200
- tools.extend(resolve_tool(tool_spec, state))
201
200
 
202
- # Add MCP tools if configured
203
- if self.mcp_config:
204
- mcp_tools = create_mcp_tools(self.mcp_config, timeout=30)
205
- tools.extend(mcp_tools)
201
+ # Use ThreadPoolExecutor to parallelize tool resolution
202
+ with ThreadPoolExecutor(max_workers=4) as executor:
203
+ futures = []
204
+
205
+ # Submit tool resolution tasks
206
+ for tool_spec in self.tools:
207
+ future = executor.submit(resolve_tool, tool_spec, state)
208
+ futures.append(future)
209
+
210
+ # Submit MCP tools creation if configured
211
+ if self.mcp_config:
212
+ future = executor.submit(create_mcp_tools, self.mcp_config, 30)
213
+ futures.append(future)
214
+
215
+ # Collect results as they complete
216
+ for future in futures:
217
+ result = future.result()
218
+ tools.extend(result)
206
219
 
207
220
  logger.info(
208
221
  f"Loaded {len(tools)} tools from spec: {[tool.name for tool in tools]}"
@@ -364,7 +364,7 @@ class ToolDefinition[ActionT, ObservationT](DiscriminatedUnionMixin, ABC):
364
364
  action_type: type[Schema] | None = None,
365
365
  ) -> dict[str, Any]:
366
366
  action_type = action_type or self.action_type
367
- action_type_with_risk = _create_action_type_with_risk(action_type)
367
+ action_type_with_risk = create_action_type_with_risk(action_type)
368
368
 
369
369
  add_security_risk_prediction = add_security_risk_prediction and (
370
370
  self.annotations is None or (not self.annotations.readOnlyHint)
@@ -460,7 +460,7 @@ class ToolDefinition[ActionT, ObservationT](DiscriminatedUnionMixin, ABC):
460
460
  raise ValueError(error_msg)
461
461
 
462
462
 
463
- def _create_action_type_with_risk(action_type: type[Schema]) -> type[Schema]:
463
+ def create_action_type_with_risk(action_type: type[Schema]) -> type[Schema]:
464
464
  action_type_with_risk = _action_types_with_risk.get(action_type)
465
465
  if action_type_with_risk:
466
466
  return action_type_with_risk
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.5.1
3
+ Version: 1.5.2
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openhands-sdk"
3
- version = "1.5.1"
3
+ version = "1.5.2"
4
4
  description = "OpenHands SDK - Core functionality for building AI agents"
5
5
 
6
6
  requires-python = ">=3.12"
File without changes