openhands-sdk 1.52.0__tar.gz → 1.53.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 (318) hide show
  1. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/PKG-INFO +1 -1
  2. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/observability/laminar.py +6 -13
  3. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/skill.py +26 -3
  4. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands_sdk.egg-info/PKG-INFO +1 -1
  5. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/pyproject.toml +1 -1
  6. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/__init__.py +0 -0
  7. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/__init__.py +0 -0
  8. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/acp_agent.py +0 -0
  9. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/acp_file_credentials.py +0 -0
  10. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/acp_models.py +0 -0
  11. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/acp_tracing.py +0 -0
  12. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/agent.py +0 -0
  13. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/base.py +0 -0
  14. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/critic_mixin.py +0 -0
  15. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/parallel_executor.py +0 -0
  16. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/response_dispatch.py +0 -0
  17. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/stream_context.py +0 -0
  18. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/agent/utils.py +0 -0
  19. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/automation/__init__.py +0 -0
  20. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/banner.py +0 -0
  21. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/__init__.py +0 -0
  22. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/agent_context.py +0 -0
  23. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/__init__.py +0 -0
  24. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/base.py +0 -0
  25. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/llm_summarizing_condenser.py +0 -0
  26. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/no_op_condenser.py +0 -0
  27. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/pipeline_condenser.py +0 -0
  28. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/prompts/summarizing_events.j2 +0 -0
  29. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/prompts/summarizing_system.j2 +0 -0
  30. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/condenser/utils.py +0 -0
  31. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/memory.py +0 -0
  32. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/__init__.py +0 -0
  33. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/presets.py +0 -0
  34. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/prompt.py +0 -0
  35. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/registry.py +0 -0
  36. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/section.py +0 -0
  37. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/sections/__init__.py +0 -0
  38. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/sections/dynamic.py +0 -0
  39. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/sections/planning.py +0 -0
  40. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/sections/static.py +0 -0
  41. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/templates/ask_agent_template.j2 +0 -0
  42. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +0 -0
  43. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/__init__.py +0 -0
  44. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/manipulation_indices.py +0 -0
  45. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/__init__.py +0 -0
  46. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/base.py +0 -0
  47. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/batch_atomicity.py +0 -0
  48. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/observation_uniqueness.py +0 -0
  49. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/tool_call_matching.py +0 -0
  50. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/properties/tool_loop_atomicity.py +0 -0
  51. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/context/view/view.py +0 -0
  52. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/__init__.py +0 -0
  53. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/base.py +0 -0
  54. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/cancellation.py +0 -0
  55. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/conversation.py +0 -0
  56. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/conversation_stats.py +0 -0
  57. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/event_store.py +0 -0
  58. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/events_list_base.py +0 -0
  59. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/exceptions.py +0 -0
  60. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/fifo_lock.py +0 -0
  61. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/goal/__init__.py +0 -0
  62. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/goal/controller.py +0 -0
  63. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/goal/judge.py +0 -0
  64. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/goal/prompts.py +0 -0
  65. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/goal/runner.py +0 -0
  66. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/impl/__init__.py +0 -0
  67. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/impl/local_conversation.py +0 -0
  68. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/impl/remote_conversation.py +0 -0
  69. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/persistence_const.py +0 -0
  70. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/request.py +0 -0
  71. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/resource_lock_manager.py +0 -0
  72. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/response_utils.py +0 -0
  73. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/secret_registry.py +0 -0
  74. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/state.py +0 -0
  75. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/stuck_detector.py +0 -0
  76. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/title_utils.py +0 -0
  77. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/types.py +0 -0
  78. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/visualizer/__init__.py +0 -0
  79. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/visualizer/base.py +0 -0
  80. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/conversation/visualizer/default.py +0 -0
  81. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/credential.py +0 -0
  82. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/__init__.py +0 -0
  83. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/base.py +0 -0
  84. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/__init__.py +0 -0
  85. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/agent_finished.py +0 -0
  86. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/api/__init__.py +0 -0
  87. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/api/chat_template.py +0 -0
  88. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/api/client.py +0 -0
  89. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/api/critic.py +0 -0
  90. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/api/taxonomy.py +0 -0
  91. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/empty_patch.py +0 -0
  92. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/impl/pass_critic.py +0 -0
  93. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/critic/result.py +0 -0
  94. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/__init__.py +0 -0
  95. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/acp_tool_call.py +0 -0
  96. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/base.py +0 -0
  97. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/condenser.py +0 -0
  98. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/conversation_error.py +0 -0
  99. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/conversation_state.py +0 -0
  100. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/error_classification.py +0 -0
  101. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/hook_execution.py +0 -0
  102. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_completion_log.py +0 -0
  103. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/__init__.py +0 -0
  104. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/action.py +0 -0
  105. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/message.py +0 -0
  106. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/observation.py +0 -0
  107. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/reasoning_utils.py +0 -0
  108. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/llm_convertible/system.py +0 -0
  109. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/resume_transcript.py +0 -0
  110. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/streaming_delta.py +0 -0
  111. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/token.py +0 -0
  112. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/types.py +0 -0
  113. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/event/user_action.py +0 -0
  114. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/__init__.py +0 -0
  115. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/fetch.py +0 -0
  116. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/__init__.py +0 -0
  117. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/info.py +0 -0
  118. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/interface.py +0 -0
  119. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/manager.py +0 -0
  120. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/metadata.py +0 -0
  121. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/extensions/installation/utils.py +0 -0
  122. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/cached_repo.py +0 -0
  123. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/exceptions.py +0 -0
  124. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/git_changes.py +0 -0
  125. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/git_commits.py +0 -0
  126. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/git_diff.py +0 -0
  127. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/models.py +0 -0
  128. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/git/utils.py +0 -0
  129. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/__init__.py +0 -0
  130. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/config.py +0 -0
  131. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/conversation_hooks.py +0 -0
  132. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/executor.py +0 -0
  133. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/manager.py +0 -0
  134. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/hooks/types.py +0 -0
  135. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/io/__init__.py +0 -0
  136. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/io/base.py +0 -0
  137. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/io/cache.py +0 -0
  138. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/io/local.py +0 -0
  139. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/io/memory.py +0 -0
  140. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/launch/__init__.py +0 -0
  141. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/launch/errors.py +0 -0
  142. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/launch/finalize.py +0 -0
  143. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/launch/preview.py +0 -0
  144. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/launch/resolve.py +0 -0
  145. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/__init__.py +0 -0
  146. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/auth/__init__.py +0 -0
  147. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/auth/credentials.py +0 -0
  148. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/auth/openai.py +0 -0
  149. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/call_context.py +0 -0
  150. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/cleanup_profile.py +0 -0
  151. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/exceptions/__init__.py +0 -0
  152. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/exceptions/classifier.py +0 -0
  153. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/exceptions/mapping.py +0 -0
  154. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/exceptions/types.py +0 -0
  155. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/fallback_strategy.py +0 -0
  156. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/llm.py +0 -0
  157. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/llm_profile_store.py +0 -0
  158. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/llm_registry.py +0 -0
  159. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/llm_response.py +0 -0
  160. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/message.py +0 -0
  161. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/meta_profile_store.py +0 -0
  162. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/mixins/fn_call_converter.py +0 -0
  163. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/mixins/fn_call_examples.py +0 -0
  164. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/mixins/non_native_fc.py +0 -0
  165. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/options/__init__.py +0 -0
  166. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/options/chat_options.py +0 -0
  167. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/options/common.py +0 -0
  168. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/options/responses_options.py +0 -0
  169. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/provider_connection_store.py +0 -0
  170. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/router/__init__.py +0 -0
  171. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/router/base.py +0 -0
  172. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/router/impl/multimodal.py +0 -0
  173. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/router/impl/random.py +0 -0
  174. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/streaming.py +0 -0
  175. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/image_inline.py +0 -0
  176. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/image_resize.py +0 -0
  177. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/litellm_provider.py +0 -0
  178. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/metrics.py +0 -0
  179. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/model_features.py +0 -0
  180. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/model_info.py +0 -0
  181. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/model_prompt_spec.py +0 -0
  182. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/openhands_provider.py +0 -0
  183. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/providers/__init__.py +0 -0
  184. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/providers/openrouter.py +0 -0
  185. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/responses_serialization.py +0 -0
  186. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/retry_mixin.py +0 -0
  187. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/runtime_metadata.py +0 -0
  188. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/telemetry.py +0 -0
  189. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/unverified_models.py +0 -0
  190. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/verified_models.py +0 -0
  191. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/llm/utils/vertex_preflight.py +0 -0
  192. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/logger/__init__.py +0 -0
  193. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/logger/logger.py +0 -0
  194. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/logger/rolling.py +0 -0
  195. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/marketplace/__init__.py +0 -0
  196. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/marketplace/registration.py +0 -0
  197. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/marketplace/registry.py +0 -0
  198. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/marketplace/types.py +0 -0
  199. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/__init__.py +0 -0
  200. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/client.py +0 -0
  201. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/config.py +0 -0
  202. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/definition.py +0 -0
  203. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/exceptions.py +0 -0
  204. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/oauth.py +0 -0
  205. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/tool.py +0 -0
  206. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/mcp/utils.py +0 -0
  207. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/observability/__init__.py +0 -0
  208. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/observability/utils.py +0 -0
  209. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/__init__.py +0 -0
  210. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/discovery.py +0 -0
  211. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/fetch.py +0 -0
  212. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/__init__.py +0 -0
  213. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/agent_plugins.py +0 -0
  214. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/agent_plugins_mcp.py +0 -0
  215. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/base.py +0 -0
  216. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/claude_code.py +0 -0
  217. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/schemas/mcp-1.0.0.schema.json +0 -0
  218. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/format/schemas/plugin-1.0.0.schema.json +0 -0
  219. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/installed.py +0 -0
  220. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/loader.py +0 -0
  221. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/plugin.py +0 -0
  222. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/source.py +0 -0
  223. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/plugin/types.py +0 -0
  224. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/__init__.py +0 -0
  225. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/agent_profile.py +0 -0
  226. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/agent_profile_store.py +0 -0
  227. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/profile_refs.py +0 -0
  228. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/resolver.py +0 -0
  229. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/profiles/seed.py +0 -0
  230. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/py.typed +0 -0
  231. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/secret/__init__.py +0 -0
  232. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/secret/secrets.py +0 -0
  233. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/__init__.py +0 -0
  234. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/_shell_ast.py +0 -0
  235. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/analyzer.py +0 -0
  236. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/confirmation_policy.py +0 -0
  237. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/defense_in_depth/__init__.py +0 -0
  238. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/defense_in_depth/pattern.py +0 -0
  239. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/defense_in_depth/policy_rails.py +0 -0
  240. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/defense_in_depth/shell_semantics.py +0 -0
  241. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/defense_in_depth/utils.py +0 -0
  242. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/ensemble.py +0 -0
  243. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/grayswan/__init__.py +0 -0
  244. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/grayswan/analyzer.py +0 -0
  245. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/grayswan/utils.py +0 -0
  246. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/llm_analyzer.py +0 -0
  247. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/risk.py +0 -0
  248. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/shell_parser.py +0 -0
  249. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/toolshield_helpers.py +0 -0
  250. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/security/toolshield_llm_analyzer.py +0 -0
  251. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/__init__.py +0 -0
  252. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/acp_install_catalog.py +0 -0
  253. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/acp_providers.py +0 -0
  254. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/api_models.py +0 -0
  255. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/metadata.py +0 -0
  256. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/settings/model.py +0 -0
  257. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/__init__.py +0 -0
  258. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/exceptions.py +0 -0
  259. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/execute.py +0 -0
  260. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/fetch.py +0 -0
  261. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/installed.py +0 -0
  262. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/trigger.py +0 -0
  263. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/types.py +0 -0
  264. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/skills/utils.py +0 -0
  265. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/subagent/__init__.py +0 -0
  266. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/subagent/load.py +0 -0
  267. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/subagent/registry.py +0 -0
  268. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/subagent/schema.py +0 -0
  269. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/subagent/scope.py +0 -0
  270. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/testing/__init__.py +0 -0
  271. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/testing/test_llm.py +0 -0
  272. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/__init__.py +0 -0
  273. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/__init__.py +0 -0
  274. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/classify_and_switch_llm.py +0 -0
  275. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/finish.py +0 -0
  276. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/invoke_skill.py +0 -0
  277. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/switch_llm.py +0 -0
  278. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/think.py +0 -0
  279. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/builtins/vision_inspect.py +0 -0
  280. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/client_tool.py +0 -0
  281. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/defaults.py +0 -0
  282. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/registry.py +0 -0
  283. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/schema.py +0 -0
  284. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/spec.py +0 -0
  285. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/tool/tool.py +0 -0
  286. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/__init__.py +0 -0
  287. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/async_executor.py +0 -0
  288. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/async_utils.py +0 -0
  289. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/cipher.py +0 -0
  290. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/command.py +0 -0
  291. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/datetime.py +0 -0
  292. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/deprecation.py +0 -0
  293. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/files.py +0 -0
  294. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/github.py +0 -0
  295. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/json.py +0 -0
  296. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/masking.py +0 -0
  297. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/models.py +0 -0
  298. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/paging.py +0 -0
  299. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/path.py +0 -0
  300. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/pydantic_secrets.py +0 -0
  301. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/redact.py +0 -0
  302. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/truncate.py +0 -0
  303. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/utils/visualize.py +0 -0
  304. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/__init__.py +0 -0
  305. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/base.py +0 -0
  306. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/local.py +0 -0
  307. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/models.py +0 -0
  308. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/remote/__init__.py +0 -0
  309. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/remote/async_remote_workspace.py +0 -0
  310. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/remote/base.py +0 -0
  311. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/remote/remote_workspace_mixin.py +0 -0
  312. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/repo.py +0 -0
  313. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands/sdk/workspace/workspace.py +0 -0
  314. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands_sdk.egg-info/SOURCES.txt +0 -0
  315. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands_sdk.egg-info/dependency_links.txt +0 -0
  316. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands_sdk.egg-info/requires.txt +0 -0
  317. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/openhands_sdk.egg-info/top_level.txt +0 -0
  318. {openhands_sdk-1.52.0 → openhands_sdk-1.53.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.52.0
3
+ Version: 1.53.0
4
4
  Summary: OpenHands SDK - Core functionality for building 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
@@ -152,18 +152,6 @@ def _get_int_env(key: str) -> int | None:
152
152
  return None
153
153
 
154
154
 
155
- def _get_bool_env(key: str) -> bool:
156
- """Read an environment variable as a boolean.
157
-
158
- Returns True if the value is 'true', '1', 'yes', 'on' (case-insensitive).
159
- Returns False otherwise.
160
- """
161
- val = get_env(key)
162
- if val is None:
163
- return False
164
- return val.lower() in ("true", "1", "yes", "on")
165
-
166
-
167
155
  def maybe_init_laminar():
168
156
  """Initialize Laminar if the environment variables are set.
169
157
 
@@ -205,7 +193,12 @@ def maybe_init_laminar():
205
193
  return
206
194
 
207
195
  base_url = get_env("LMNR_BASE_URL") or None
208
- force_http = _get_bool_env("LMNR_FORCE_HTTP")
196
+ force_http = (get_env("LMNR_FORCE_HTTP") or "").lower() in (
197
+ "true",
198
+ "1",
199
+ "yes",
200
+ "on",
201
+ )
209
202
  instruments_env = get_env("LMNR_INSTRUMENTS")
210
203
  instruments = None
211
204
  if instruments_env is not None:
@@ -850,6 +850,7 @@ def load_skills_from_dir(
850
850
  strict: bool = True,
851
851
  recursive: bool = True,
852
852
  root: Path | None = None,
853
+ exclude_dirs: set[Path] | None = None,
853
854
  ) -> tuple[dict[str, Skill], dict[str, Skill], dict[str, Skill]]:
854
855
  """Load all skills from the given directory.
855
856
 
@@ -868,6 +869,8 @@ def load_skills_from_dir(
868
869
  children of skill_dir.
869
870
  root: If given, skill paths that resolve outside it (e.g. through a
870
871
  symlink) are skipped. Plugins pass their root here.
872
+ exclude_dirs: Directories whose regular .md files are not loaded as
873
+ skills (e.g. managed installed packages inside a user skills dir).
871
874
 
872
875
  Returns:
873
876
  Tuple of (repo_skills, knowledge_skills, agent_skills) dictionaries.
@@ -889,7 +892,17 @@ def load_skills_from_dir(
889
892
  # doesn't exist.
890
893
  skill_md_files = find_skill_md_directories(skill_dir, root)
891
894
  skill_md_dirs = {skill_md.parent for skill_md in skill_md_files}
892
- regular_md_files = find_regular_md_files(skill_dir, skill_md_dirs, recursive, root)
895
+ # Rebase exclusions onto skill_dir so they still match when skill_dir is
896
+ # reached through a symlink (e.g. ~/.agents/skills -> ~/.openhands/skills).
897
+ real_skill_dir = skill_dir.resolve()
898
+ rebased_exclude_dirs = {
899
+ skill_dir / real.relative_to(real_skill_dir)
900
+ for d in exclude_dirs or ()
901
+ if (real := d.resolve()).is_relative_to(real_skill_dir)
902
+ }
903
+ regular_md_files = find_regular_md_files(
904
+ skill_dir, skill_md_dirs | rebased_exclude_dirs, recursive, root
905
+ )
893
906
 
894
907
  # Load SKILL.md files (auto-detected and validated in Skill.load)
895
908
  # Wrap each load in try/except to ensure one bad skill doesn't break all loading
@@ -956,10 +969,18 @@ def load_user_skills() -> list[Skill]:
956
969
  List of Skill objects loaded from user directories.
957
970
  Returns empty list if no skills found or loading fails.
958
971
  """
972
+ from openhands.sdk.skills.installed import get_installed_skills_dir
973
+
959
974
  all_skills: list[Skill] = []
960
975
  seen_names: set[str] = set()
961
976
 
962
- _load_and_merge_from_dirs(USER_SKILLS_DIRS, seen_names, all_skills, "user skills")
977
+ _load_and_merge_from_dirs(
978
+ USER_SKILLS_DIRS,
979
+ seen_names,
980
+ all_skills,
981
+ "user skills",
982
+ exclude_dirs={get_installed_skills_dir()},
983
+ )
963
984
 
964
985
  # Load enabled installed skills (lower precedence than user skills)
965
986
  try:
@@ -1013,6 +1034,7 @@ def _load_and_merge_from_dirs(
1013
1034
  seen_names: set[str],
1014
1035
  all_skills: list[Skill],
1015
1036
  source_label: str,
1037
+ exclude_dirs: set[Path] | None = None,
1016
1038
  ) -> None:
1017
1039
  """Load skills from multiple directories, merging with deduplication.
1018
1040
 
@@ -1025,6 +1047,7 @@ def _load_and_merge_from_dirs(
1025
1047
  seen_names: Set of already-seen skill names (mutated in place).
1026
1048
  all_skills: Accumulator list of skills (mutated in place).
1027
1049
  source_label: Human-readable label for log messages (e.g. "user skills").
1050
+ exclude_dirs: Passed through to load_skills_from_dir().
1028
1051
  """
1029
1052
  for skills_dir in dirs:
1030
1053
  if not skills_dir.exists():
@@ -1034,7 +1057,7 @@ def _load_and_merge_from_dirs(
1034
1057
  try:
1035
1058
  logger.debug(f"Loading {source_label} from {skills_dir}")
1036
1059
  repo_skills, knowledge_skills, agent_skills = load_skills_from_dir(
1037
- skills_dir
1060
+ skills_dir, exclude_dirs=exclude_dirs
1038
1061
  )
1039
1062
  _merge_loaded_skills(
1040
1063
  source_dir=skills_dir,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.52.0
3
+ Version: 1.53.0
4
4
  Summary: OpenHands SDK - Core functionality for building 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-sdk"
3
- version = "1.52.0"
3
+ version = "1.53.0"
4
4
  description = "OpenHands SDK - Core functionality for building AI agents"
5
5
 
6
6
  requires-python = ">=3.12"