openhands-sdk 1.58.0__tar.gz → 1.58.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.
Files changed (328) hide show
  1. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/PKG-INFO +2 -1
  2. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/call_context.py +14 -0
  3. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/options/chat_options.py +2 -0
  4. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/options/common.py +12 -0
  5. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/options/responses_options.py +2 -0
  6. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands_sdk.egg-info/PKG-INFO +2 -1
  7. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands_sdk.egg-info/requires.txt +1 -0
  8. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/pyproject.toml +2 -1
  9. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/__init__.py +0 -0
  10. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/__init__.py +0 -0
  11. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_agent.py +0 -0
  12. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_contracts.py +0 -0
  13. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_file_credentials.py +0 -0
  14. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_model_discovery.py +0 -0
  15. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_models.py +0 -0
  16. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/acp_tracing.py +0 -0
  17. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/agent.py +0 -0
  18. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/base.py +0 -0
  19. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/critic_mixin.py +0 -0
  20. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/parallel_executor.py +0 -0
  21. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/response_dispatch.py +0 -0
  22. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/stream_context.py +0 -0
  23. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/agent/utils.py +0 -0
  24. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/automation/__init__.py +0 -0
  25. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/banner.py +0 -0
  26. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/__init__.py +0 -0
  27. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/agent_context.py +0 -0
  28. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/__init__.py +0 -0
  29. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/base.py +0 -0
  30. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/llm_summarizing_condenser.py +0 -0
  31. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/no_op_condenser.py +0 -0
  32. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/pipeline_condenser.py +0 -0
  33. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/prompts/summarizing_events.j2 +0 -0
  34. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/prompts/summarizing_system.j2 +0 -0
  35. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/condenser/utils.py +0 -0
  36. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/memory.py +0 -0
  37. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/__init__.py +0 -0
  38. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/presets.py +0 -0
  39. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/prompt.py +0 -0
  40. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/registry.py +0 -0
  41. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/section.py +0 -0
  42. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/sections/__init__.py +0 -0
  43. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/sections/dynamic.py +0 -0
  44. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/sections/planning.py +0 -0
  45. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/sections/static.py +0 -0
  46. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/templates/ask_agent_template.j2 +0 -0
  47. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +0 -0
  48. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/__init__.py +0 -0
  49. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/manipulation_indices.py +0 -0
  50. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/__init__.py +0 -0
  51. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/base.py +0 -0
  52. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/batch_atomicity.py +0 -0
  53. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/observation_uniqueness.py +0 -0
  54. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/tool_call_matching.py +0 -0
  55. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/properties/tool_loop_atomicity.py +0 -0
  56. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/context/view/view.py +0 -0
  57. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/__init__.py +0 -0
  58. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/base.py +0 -0
  59. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/cancellation.py +0 -0
  60. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/conversation.py +0 -0
  61. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/conversation_stats.py +0 -0
  62. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/event_store.py +0 -0
  63. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/events_list_base.py +0 -0
  64. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/exceptions.py +0 -0
  65. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/fifo_lock.py +0 -0
  66. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/goal/__init__.py +0 -0
  67. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/goal/controller.py +0 -0
  68. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/goal/judge.py +0 -0
  69. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/goal/prompts.py +0 -0
  70. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/goal/runner.py +0 -0
  71. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/impl/__init__.py +0 -0
  72. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/impl/local_conversation.py +0 -0
  73. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/impl/remote_conversation.py +0 -0
  74. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/message_request.py +0 -0
  75. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/persistence_const.py +0 -0
  76. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/request.py +0 -0
  77. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/resource_lock_manager.py +0 -0
  78. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/response_utils.py +0 -0
  79. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/secret_registry.py +0 -0
  80. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/state.py +0 -0
  81. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/stuck_detector.py +0 -0
  82. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/title_utils.py +0 -0
  83. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/types.py +0 -0
  84. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/visualizer/__init__.py +0 -0
  85. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/visualizer/base.py +0 -0
  86. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/conversation/visualizer/default.py +0 -0
  87. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/credential.py +0 -0
  88. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/__init__.py +0 -0
  89. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/base.py +0 -0
  90. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/__init__.py +0 -0
  91. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/agent_finished.py +0 -0
  92. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/api/__init__.py +0 -0
  93. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/api/chat_template.py +0 -0
  94. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/api/client.py +0 -0
  95. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/api/critic.py +0 -0
  96. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/api/taxonomy.py +0 -0
  97. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/empty_patch.py +0 -0
  98. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/impl/pass_critic.py +0 -0
  99. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/critic/result.py +0 -0
  100. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/__init__.py +0 -0
  101. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/acp_tool_call.py +0 -0
  102. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/base.py +0 -0
  103. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/condenser.py +0 -0
  104. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/conversation_error.py +0 -0
  105. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/conversation_state.py +0 -0
  106. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/error_classification.py +0 -0
  107. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/hook_execution.py +0 -0
  108. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_completion_log.py +0 -0
  109. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/__init__.py +0 -0
  110. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/action.py +0 -0
  111. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/message.py +0 -0
  112. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/observation.py +0 -0
  113. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/reasoning_utils.py +0 -0
  114. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/llm_convertible/system.py +0 -0
  115. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/resume_transcript.py +0 -0
  116. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/security.py +0 -0
  117. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/streaming_delta.py +0 -0
  118. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/token.py +0 -0
  119. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/types.py +0 -0
  120. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/event/user_action.py +0 -0
  121. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/__init__.py +0 -0
  122. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/fetch.py +0 -0
  123. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/__init__.py +0 -0
  124. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/info.py +0 -0
  125. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/interface.py +0 -0
  126. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/manager.py +0 -0
  127. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/metadata.py +0 -0
  128. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/extensions/installation/utils.py +0 -0
  129. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/cached_repo.py +0 -0
  130. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/exceptions.py +0 -0
  131. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/git_changes.py +0 -0
  132. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/git_commits.py +0 -0
  133. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/git_diff.py +0 -0
  134. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/models.py +0 -0
  135. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/git/utils.py +0 -0
  136. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/__init__.py +0 -0
  137. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/config.py +0 -0
  138. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/conversation_hooks.py +0 -0
  139. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/executor.py +0 -0
  140. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/manager.py +0 -0
  141. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/hooks/types.py +0 -0
  142. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/io/__init__.py +0 -0
  143. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/io/base.py +0 -0
  144. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/io/cache.py +0 -0
  145. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/io/local.py +0 -0
  146. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/io/memory.py +0 -0
  147. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/launch/__init__.py +0 -0
  148. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/launch/errors.py +0 -0
  149. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/launch/finalize.py +0 -0
  150. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/launch/preview.py +0 -0
  151. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/launch/resolve.py +0 -0
  152. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/__init__.py +0 -0
  153. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/_message_normalization.py +0 -0
  154. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/_response_stream.py +0 -0
  155. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/_tokenizer.py +0 -0
  156. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/auth/__init__.py +0 -0
  157. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/auth/credentials.py +0 -0
  158. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/auth/openai.py +0 -0
  159. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/cleanup_profile.py +0 -0
  160. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/exceptions/__init__.py +0 -0
  161. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/exceptions/classifier.py +0 -0
  162. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/exceptions/mapping.py +0 -0
  163. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/exceptions/types.py +0 -0
  164. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/fallback_strategy.py +0 -0
  165. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/llm.py +0 -0
  166. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/llm_profile_store.py +0 -0
  167. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/llm_registry.py +0 -0
  168. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/llm_response.py +0 -0
  169. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/message.py +0 -0
  170. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/meta_profile_store.py +0 -0
  171. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/mixins/fn_call_converter.py +0 -0
  172. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/mixins/fn_call_examples.py +0 -0
  173. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/mixins/non_native_fc.py +0 -0
  174. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/options/__init__.py +0 -0
  175. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/provider_connection_store.py +0 -0
  176. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/router/__init__.py +0 -0
  177. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/router/base.py +0 -0
  178. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/router/impl/multimodal.py +0 -0
  179. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/router/impl/random.py +0 -0
  180. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/streaming.py +0 -0
  181. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/image_inline.py +0 -0
  182. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/image_resize.py +0 -0
  183. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/litellm_provider.py +0 -0
  184. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/metrics.py +0 -0
  185. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/model_features.py +0 -0
  186. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/model_info.py +0 -0
  187. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/model_prompt_spec.py +0 -0
  188. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/openhands_provider.py +0 -0
  189. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/providers/__init__.py +0 -0
  190. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/providers/openrouter.py +0 -0
  191. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/responses_serialization.py +0 -0
  192. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/retry_mixin.py +0 -0
  193. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/runtime_metadata.py +0 -0
  194. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/telemetry.py +0 -0
  195. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/unverified_models.py +0 -0
  196. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/verified_models.py +0 -0
  197. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/llm/utils/vertex_preflight.py +0 -0
  198. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/logger/__init__.py +0 -0
  199. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/logger/_rich_handler.py +0 -0
  200. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/logger/logger.py +0 -0
  201. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/logger/rolling.py +0 -0
  202. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/marketplace/__init__.py +0 -0
  203. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/marketplace/registration.py +0 -0
  204. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/marketplace/registry.py +0 -0
  205. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/marketplace/types.py +0 -0
  206. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/__init__.py +0 -0
  207. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/client.py +0 -0
  208. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/config.py +0 -0
  209. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/definition.py +0 -0
  210. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/exceptions.py +0 -0
  211. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/oauth.py +0 -0
  212. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/tool.py +0 -0
  213. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/mcp/utils.py +0 -0
  214. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/observability/__init__.py +0 -0
  215. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/observability/laminar.py +0 -0
  216. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/observability/utils.py +0 -0
  217. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/__init__.py +0 -0
  218. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/discovery.py +0 -0
  219. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/fetch.py +0 -0
  220. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/__init__.py +0 -0
  221. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/agent_plugins.py +0 -0
  222. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/agent_plugins_mcp.py +0 -0
  223. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/base.py +0 -0
  224. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/claude_code.py +0 -0
  225. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/schemas/mcp-1.0.0.schema.json +0 -0
  226. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/format/schemas/plugin-1.0.0.schema.json +0 -0
  227. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/installed.py +0 -0
  228. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/loader.py +0 -0
  229. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/paths.py +0 -0
  230. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/plugin.py +0 -0
  231. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/source.py +0 -0
  232. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/strict_fetch.py +0 -0
  233. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/plugin/types.py +0 -0
  234. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/__init__.py +0 -0
  235. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/agent_profile.py +0 -0
  236. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/agent_profile_store.py +0 -0
  237. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/profile_refs.py +0 -0
  238. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/resolver.py +0 -0
  239. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/profiles/seed.py +0 -0
  240. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/py.typed +0 -0
  241. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/secret/__init__.py +0 -0
  242. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/secret/secrets.py +0 -0
  243. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/__init__.py +0 -0
  244. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/_shell_ast.py +0 -0
  245. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/analyzer.py +0 -0
  246. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/confirmation_policy.py +0 -0
  247. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/defense_in_depth/__init__.py +0 -0
  248. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/defense_in_depth/pattern.py +0 -0
  249. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/defense_in_depth/policy_rails.py +0 -0
  250. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/defense_in_depth/shell_semantics.py +0 -0
  251. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/defense_in_depth/utils.py +0 -0
  252. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/ensemble.py +0 -0
  253. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/grayswan/__init__.py +0 -0
  254. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/grayswan/analyzer.py +0 -0
  255. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/grayswan/utils.py +0 -0
  256. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/llm_analyzer.py +0 -0
  257. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/risk.py +0 -0
  258. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/shell_parser.py +0 -0
  259. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/toolshield_helpers.py +0 -0
  260. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/security/toolshield_llm_analyzer.py +0 -0
  261. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/__init__.py +0 -0
  262. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/acp_install_catalog.py +0 -0
  263. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/acp_providers.py +0 -0
  264. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/api_models.py +0 -0
  265. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/metadata.py +0 -0
  266. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/settings/model.py +0 -0
  267. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/__init__.py +0 -0
  268. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/exceptions.py +0 -0
  269. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/execute.py +0 -0
  270. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/fetch.py +0 -0
  271. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/installed.py +0 -0
  272. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/skill.py +0 -0
  273. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/trigger.py +0 -0
  274. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/types.py +0 -0
  275. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/skills/utils.py +0 -0
  276. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/subagent/__init__.py +0 -0
  277. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/subagent/load.py +0 -0
  278. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/subagent/registry.py +0 -0
  279. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/subagent/schema.py +0 -0
  280. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/subagent/scope.py +0 -0
  281. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/testing/__init__.py +0 -0
  282. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/testing/test_llm.py +0 -0
  283. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/__init__.py +0 -0
  284. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/__init__.py +0 -0
  285. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/classify_and_switch_llm.py +0 -0
  286. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/finish.py +0 -0
  287. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/invoke_skill.py +0 -0
  288. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/switch_llm.py +0 -0
  289. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/think.py +0 -0
  290. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/builtins/vision_inspect.py +0 -0
  291. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/client_tool.py +0 -0
  292. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/defaults.py +0 -0
  293. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/registry.py +0 -0
  294. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/schema.py +0 -0
  295. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/spec.py +0 -0
  296. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/tool/tool.py +0 -0
  297. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/__init__.py +0 -0
  298. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/async_executor.py +0 -0
  299. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/async_utils.py +0 -0
  300. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/cipher.py +0 -0
  301. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/command.py +0 -0
  302. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/datetime.py +0 -0
  303. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/deprecation.py +0 -0
  304. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/files.py +0 -0
  305. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/github.py +0 -0
  306. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/json.py +0 -0
  307. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/masking.py +0 -0
  308. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/models.py +0 -0
  309. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/paging.py +0 -0
  310. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/path.py +0 -0
  311. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/pydantic_secrets.py +0 -0
  312. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/redact.py +0 -0
  313. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/truncate.py +0 -0
  314. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/utils/visualize.py +0 -0
  315. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/__init__.py +0 -0
  316. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/base.py +0 -0
  317. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/local.py +0 -0
  318. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/models.py +0 -0
  319. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/remote/__init__.py +0 -0
  320. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/remote/async_remote_workspace.py +0 -0
  321. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/remote/base.py +0 -0
  322. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/remote/remote_workspace_mixin.py +0 -0
  323. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/repo.py +0 -0
  324. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands/sdk/workspace/workspace.py +0 -0
  325. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands_sdk.egg-info/SOURCES.txt +0 -0
  326. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands_sdk.egg-info/dependency_links.txt +0 -0
  327. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/openhands_sdk.egg-info/top_level.txt +0 -0
  328. {openhands_sdk-1.58.0 → openhands_sdk-1.58.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.58.0
3
+ Version: 1.58.1
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
@@ -8,6 +8,7 @@ Project-URL: Documentation, https://docs.openhands.dev/sdk
8
8
  Project-URL: Bug Tracker, https://github.com/OpenHands/software-agent-sdk/issues
9
9
  Requires-Python: >=3.12
10
10
  Requires-Dist: agent-client-protocol<0.13.0,>=0.12.1
11
+ Requires-Dist: certifi>=2026.10.19
11
12
  Requires-Dist: deprecation>=2.1.0
12
13
  Requires-Dist: fakeredis[lua]>=2.32.1
13
14
  Requires-Dist: fastmcp<4,>=3.2.0
@@ -69,12 +69,19 @@ def apply_llm_call_context(
69
69
  context: LLMCallContext,
70
70
  *,
71
71
  supports_prompt_cache_key: bool = False,
72
+ openrouter: bool = False,
72
73
  ) -> None:
73
74
  """Apply SDK-owned call context to provider request options in one place.
74
75
 
75
76
  ``prompt_cache_key`` is only sent to providers that accept it as an OpenAI
76
77
  param (OpenAI Responses/Chat). Anthropic and Gemini reject it with a 400
77
78
  ``UnsupportedParamsError`` when litellm validates non-default params.
79
+
80
+ ``openrouter`` selects OpenRouter's own affinity parameter: OpenRouter keys
81
+ sticky routing off ``session_id``, so later turns of a conversation return
82
+ to the endpoint holding the warm prompt cache. Without it OpenRouter derives
83
+ the routing key by hashing the opening messages, which agent conversations
84
+ rewrite as they compact, so affinity is lost mid-run.
78
85
  """
79
86
  if context.prompt_cache_key and supports_prompt_cache_key:
80
87
  options["prompt_cache_key"] = context.prompt_cache_key
@@ -84,3 +91,10 @@ def apply_llm_call_context(
84
91
  **existing,
85
92
  "x-litellm-session-id": context.session_id,
86
93
  }
94
+ if openrouter:
95
+ # Merge rather than replace: extra_body may already carry caller
96
+ # routing (e.g. provider.only) that must survive. An explicit
97
+ # session_id from the caller wins over the conversation id.
98
+ extra_body = dict(options.get("extra_body") or {})
99
+ extra_body.setdefault("session_id", context.session_id)
100
+ options["extra_body"] = extra_body
@@ -10,6 +10,7 @@ from openhands.sdk.llm.options.common import (
10
10
  apply_defaults_if_absent,
11
11
  apply_extra_body,
12
12
  apply_extra_headers,
13
+ is_openrouter,
13
14
  )
14
15
 
15
16
 
@@ -96,6 +97,7 @@ def select_chat_options(
96
97
  out,
97
98
  context,
98
99
  supports_prompt_cache_key=model_features.supports_prompt_cache_key,
100
+ openrouter=is_openrouter(llm),
99
101
  )
100
102
 
101
103
  return out
@@ -55,3 +55,15 @@ def apply_extra_body(user_kwargs: dict[str, Any], llm: LLM) -> dict[str, Any]:
55
55
  if llm.litellm_extra_body:
56
56
  out["extra_body"] = llm.litellm_extra_body
57
57
  return out
58
+
59
+
60
+ def is_openrouter(llm: LLM) -> bool:
61
+ """Return whether this LLM routes through OpenRouter.
62
+
63
+ Matches the ``openrouter/`` model prefix and the ``openrouter.ai`` base URL
64
+ that the OpenRouter runtime-metadata resolver also keys off, so the two
65
+ agree on what counts as OpenRouter.
66
+ """
67
+ model = llm.model or ""
68
+ base_url = llm.base_url or ""
69
+ return model.startswith("openrouter/") or "openrouter.ai" in base_url
@@ -10,6 +10,7 @@ from openhands.sdk.llm.options.common import (
10
10
  apply_defaults_if_absent,
11
11
  apply_extra_body,
12
12
  apply_extra_headers,
13
+ is_openrouter,
13
14
  )
14
15
 
15
16
 
@@ -90,6 +91,7 @@ def select_responses_options(
90
91
  out,
91
92
  context,
92
93
  supports_prompt_cache_key=model_features.supports_prompt_cache_key,
94
+ openrouter=is_openrouter(llm),
93
95
  )
94
96
 
95
97
  return out
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openhands-sdk
3
- Version: 1.58.0
3
+ Version: 1.58.1
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
@@ -8,6 +8,7 @@ Project-URL: Documentation, https://docs.openhands.dev/sdk
8
8
  Project-URL: Bug Tracker, https://github.com/OpenHands/software-agent-sdk/issues
9
9
  Requires-Python: >=3.12
10
10
  Requires-Dist: agent-client-protocol<0.13.0,>=0.12.1
11
+ Requires-Dist: certifi>=2026.10.19
11
12
  Requires-Dist: deprecation>=2.1.0
12
13
  Requires-Dist: fakeredis[lua]>=2.32.1
13
14
  Requires-Dist: fastmcp<4,>=3.2.0
@@ -1,4 +1,5 @@
1
1
  agent-client-protocol<0.13.0,>=0.12.1
2
+ certifi>=2026.10.19
2
3
  deprecation>=2.1.0
3
4
  fakeredis[lua]>=2.32.1
4
5
  fastmcp<4,>=3.2.0
@@ -1,11 +1,12 @@
1
1
  [project]
2
2
  name = "openhands-sdk"
3
- version = "1.58.0"
3
+ version = "1.58.1"
4
4
  description = "OpenHands SDK - Core functionality for building AI agents"
5
5
 
6
6
  requires-python = ">=3.12"
7
7
  dependencies = [
8
8
  "agent-client-protocol>=0.12.1,<0.13.0", # 0.11.0 reordered prompt() args, broke the client (#4830)
9
+ "certifi>=2026.10.19", # eMudhra CA distrust: GHSA-6q48-6c7w-9gw2
9
10
  "deprecation>=2.1.0",
10
11
  "fakeredis[lua]>=2.32.1", # Explicit dependency for docket/fastmcp background tasks
11
12
  # 3.2.0 reads back the stored absolute OAuth token expiry; 4.x requires