openhands-sdk 1.7.2__tar.gz → 1.7.3__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.
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/PKG-INFO +1 -1
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/agent.py +22 -9
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/llm_summarizing_condenser.py +10 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/impl/remote_conversation.py +37 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/model_features.py +1 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/registry.py +23 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands_sdk.egg-info/PKG-INFO +1 -1
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/pyproject.toml +1 -1
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/in_context_learning_example.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/in_context_learning_example_suffix.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/model_specific/anthropic_claude.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/model_specific/google_gemini.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/model_specific/openai_gpt/gpt-5-codex.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/model_specific/openai_gpt/gpt-5.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/security_policy.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/security_risk_assessment.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/self_documentation.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_interactive.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_long_horizon.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_planning.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_tech_philosophy.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/agent_context.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/no_op_condenser.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/pipeline_condenser.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/prompts/summarizing_prompt.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/prompts/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/prompts/prompt.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/prompts/templates/ask_agent_template.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/prompts/templates/skill_knowledge_info.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/prompts/templates/system_message_suffix.j2 +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/skills/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/skills/exceptions.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/skills/skill.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/skills/trigger.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/skills/types.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/view.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/conversation.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/conversation_stats.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/event_store.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/events_list_base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/exceptions.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/fifo_lock.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/impl/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/impl/local_conversation.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/persistence_const.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/response_utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/secret_registry.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/serialization_diff.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/state.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/stuck_detector.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/title_utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/types.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/visualizer/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/visualizer/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/visualizer/default.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/impl/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/impl/agent_finished.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/impl/empty_patch.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/critic/impl/pass_critic.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/condenser.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/conversation_error.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/conversation_state.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_completion_log.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/action.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/message.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/observation.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/system.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/token.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/types.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/user_action.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/git/exceptions.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/git/git_changes.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/git/git_diff.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/git/models.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/git/utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/config.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/conversation_hooks.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/executor.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/manager.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/hooks/types.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/io/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/io/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/io/cache.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/io/local.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/io/memory.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/exceptions/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/exceptions/classifier.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/exceptions/mapping.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/exceptions/types.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/llm.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/llm_registry.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/llm_response.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/message.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/mixins/fn_call_converter.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/mixins/non_native_fc.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/options/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/options/chat_options.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/options/common.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/options/responses_options.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/router/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/router/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/router/impl/multimodal.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/router/impl/random.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/streaming.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/metrics.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/model_info.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/model_prompt_spec.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/retry_mixin.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/telemetry.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/unverified_models.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/llm/utils/verified_models.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/logger/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/logger/logger.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/logger/rolling.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/client.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/definition.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/exceptions.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/tool.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/mcp/utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/observability/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/observability/laminar.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/observability/utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/py.typed +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/secret/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/secret/secrets.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/security/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/security/analyzer.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/security/confirmation_policy.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/security/llm_analyzer.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/security/risk.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/builtins/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/builtins/finish.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/builtins/think.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/schema.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/spec.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/tool/tool.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/async_executor.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/async_utils.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/cipher.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/command.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/deprecation.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/github.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/json.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/models.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/paging.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/pydantic_diff.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/pydantic_secrets.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/truncate.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/utils/visualize.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/local.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/models.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/__init__.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/async_remote_workspace.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/base.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/remote_workspace_mixin.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/workspace.py +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands_sdk.egg-info/SOURCES.txt +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands_sdk.egg-info/dependency_links.txt +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands_sdk.egg-info/requires.txt +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands_sdk.egg-info/top_level.txt +0 -0
- {openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/setup.cfg +0 -0
|
@@ -502,16 +502,29 @@ class Agent(AgentBase):
|
|
|
502
502
|
)
|
|
503
503
|
|
|
504
504
|
# Execute actions!
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
505
|
+
try:
|
|
506
|
+
if should_enable_observability():
|
|
507
|
+
tool_name = extract_action_name(action_event)
|
|
508
|
+
observation: Observation = observe(name=tool_name, span_type="TOOL")(
|
|
509
|
+
tool
|
|
510
|
+
)(action_event.action, conversation)
|
|
511
|
+
else:
|
|
512
|
+
observation = tool(action_event.action, conversation)
|
|
513
|
+
assert isinstance(observation, Observation), (
|
|
514
|
+
f"Tool '{tool.name}' executor must return an Observation"
|
|
509
515
|
)
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
f"
|
|
514
|
-
|
|
516
|
+
except ValueError as e:
|
|
517
|
+
# Tool execution raised a ValueError (e.g., invalid argument combination)
|
|
518
|
+
# Convert to AgentErrorEvent so the agent can correct itself
|
|
519
|
+
err = f"Error executing tool '{tool.name}': {e}"
|
|
520
|
+
logger.warning(err)
|
|
521
|
+
error_event = AgentErrorEvent(
|
|
522
|
+
error=err,
|
|
523
|
+
tool_name=tool.name,
|
|
524
|
+
tool_call_id=action_event.tool_call.id,
|
|
525
|
+
)
|
|
526
|
+
on_event(error_event)
|
|
527
|
+
return error_event
|
|
515
528
|
|
|
516
529
|
obs_event = ObservationEvent(
|
|
517
530
|
observation=observation,
|
|
@@ -120,7 +120,17 @@ class LLMSummarizingCondenser(RollingCondenser):
|
|
|
120
120
|
|
|
121
121
|
Returns:
|
|
122
122
|
Condensation: The generated condensation object.
|
|
123
|
+
|
|
124
|
+
Raises:
|
|
125
|
+
ValueError: If forgotten_events is empty (0 events to condense).
|
|
123
126
|
"""
|
|
127
|
+
if len(forgotten_events) == 0:
|
|
128
|
+
raise ValueError(
|
|
129
|
+
"Cannot condense 0 events. This typically occurs when a tool loop "
|
|
130
|
+
"spans almost the entire view, leaving no valid range for forgetting "
|
|
131
|
+
"events. Consider adjusting keep_first or max_size parameters."
|
|
132
|
+
)
|
|
133
|
+
|
|
124
134
|
# Convert events to strings for the template
|
|
125
135
|
event_strings = [str(forgotten_event) for forgotten_event in forgotten_events]
|
|
126
136
|
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/impl/remote_conversation.py
RENAMED
|
@@ -28,6 +28,7 @@ from openhands.sdk.conversation.visualizer import (
|
|
|
28
28
|
DefaultConversationVisualizer,
|
|
29
29
|
)
|
|
30
30
|
from openhands.sdk.event.base import Event
|
|
31
|
+
from openhands.sdk.event.conversation_error import ConversationErrorEvent
|
|
31
32
|
from openhands.sdk.event.conversation_state import (
|
|
32
33
|
FULL_STATE_KEY,
|
|
33
34
|
ConversationStateUpdateEvent,
|
|
@@ -489,6 +490,11 @@ class RemoteConversation(BaseConversation):
|
|
|
489
490
|
self._cleanup_initiated = False
|
|
490
491
|
|
|
491
492
|
if conversation_id is None:
|
|
493
|
+
# Import here to avoid circular imports
|
|
494
|
+
from openhands.sdk.tool.registry import get_tool_module_qualnames
|
|
495
|
+
|
|
496
|
+
tool_qualnames = get_tool_module_qualnames()
|
|
497
|
+
logger.debug(f"Sending tool_module_qualnames to server: {tool_qualnames}")
|
|
492
498
|
payload = {
|
|
493
499
|
"agent": agent.model_dump(
|
|
494
500
|
mode="json", context={"expose_secrets": True}
|
|
@@ -500,6 +506,8 @@ class RemoteConversation(BaseConversation):
|
|
|
500
506
|
"workspace": LocalWorkspace(
|
|
501
507
|
working_dir=self.workspace.working_dir
|
|
502
508
|
).model_dump(),
|
|
509
|
+
# Include tool module qualnames for dynamic registration on server
|
|
510
|
+
"tool_module_qualnames": tool_qualnames,
|
|
503
511
|
}
|
|
504
512
|
if stuck_detection_thresholds is not None:
|
|
505
513
|
# Convert to StuckDetectionThresholds if dict, then serialize
|
|
@@ -759,6 +767,19 @@ class RemoteConversation(BaseConversation):
|
|
|
759
767
|
status = info.get("execution_status")
|
|
760
768
|
|
|
761
769
|
if status != ConversationExecutionStatus.RUNNING.value:
|
|
770
|
+
if status == ConversationExecutionStatus.ERROR.value:
|
|
771
|
+
detail = self._get_last_error_detail()
|
|
772
|
+
raise ConversationRunError(
|
|
773
|
+
self._id,
|
|
774
|
+
RuntimeError(
|
|
775
|
+
detail or "Remote conversation ended with error"
|
|
776
|
+
),
|
|
777
|
+
)
|
|
778
|
+
if status == ConversationExecutionStatus.STUCK.value:
|
|
779
|
+
raise ConversationRunError(
|
|
780
|
+
self._id,
|
|
781
|
+
RuntimeError("Remote conversation got stuck"),
|
|
782
|
+
)
|
|
762
783
|
logger.info(
|
|
763
784
|
f"Run completed with status: {status} (elapsed: {elapsed:.1f}s)"
|
|
764
785
|
)
|
|
@@ -771,6 +792,22 @@ class RemoteConversation(BaseConversation):
|
|
|
771
792
|
|
|
772
793
|
time.sleep(poll_interval)
|
|
773
794
|
|
|
795
|
+
def _get_last_error_detail(self) -> str | None:
|
|
796
|
+
"""Return the most recent ConversationErrorEvent detail, if available."""
|
|
797
|
+
try:
|
|
798
|
+
events = self._state.events
|
|
799
|
+
for idx in range(len(events) - 1, -1, -1):
|
|
800
|
+
event = events[idx]
|
|
801
|
+
if isinstance(event, ConversationErrorEvent):
|
|
802
|
+
detail = event.detail.strip()
|
|
803
|
+
code = event.code.strip()
|
|
804
|
+
if detail and code:
|
|
805
|
+
return f"{code}: {detail}"
|
|
806
|
+
return detail or code or None
|
|
807
|
+
except Exception as exc:
|
|
808
|
+
logger.debug("Failed to read conversation error detail: %s", exc)
|
|
809
|
+
return None
|
|
810
|
+
|
|
774
811
|
def set_confirmation_policy(self, policy: ConfirmationPolicyBase) -> None:
|
|
775
812
|
payload = {"policy": policy.model_dump()}
|
|
776
813
|
_send_request(
|
|
@@ -152,6 +152,7 @@ FORCE_STRING_SERIALIZER_MODELS: list[str] = [
|
|
|
152
152
|
# in the message input
|
|
153
153
|
SEND_REASONING_CONTENT_MODELS: list[str] = [
|
|
154
154
|
"kimi-k2-thinking",
|
|
155
|
+
"openrouter/minimax-m2", # MiniMax-M2 via OpenRouter (interleaved thinking)
|
|
155
156
|
"deepseek/deepseek-reasoner",
|
|
156
157
|
]
|
|
157
158
|
|
|
@@ -29,6 +29,7 @@ Returns: A sequence of ToolDefinition instances. Most of the time this will be a
|
|
|
29
29
|
|
|
30
30
|
_LOCK = RLock()
|
|
31
31
|
_REG: dict[str, Resolver] = {}
|
|
32
|
+
_MODULE_QUALNAMES: dict[str, str] = {} # Maps tool name to module qualname
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
def _resolver_from_instance(name: str, tool: ToolDefinition) -> Resolver:
|
|
@@ -137,11 +138,22 @@ def register_tool(
|
|
|
137
138
|
"(3) a callable factory returning a Sequence[ToolDefinition]"
|
|
138
139
|
)
|
|
139
140
|
|
|
141
|
+
# Track the module qualname for this tool
|
|
142
|
+
module_qualname = None
|
|
143
|
+
if isinstance(factory, type):
|
|
144
|
+
module_qualname = factory.__module__
|
|
145
|
+
elif callable(factory):
|
|
146
|
+
module_qualname = getattr(factory, "__module__", None)
|
|
147
|
+
elif isinstance(factory, ToolDefinition):
|
|
148
|
+
module_qualname = factory.__class__.__module__
|
|
149
|
+
|
|
140
150
|
with _LOCK:
|
|
141
151
|
# TODO: throw exception when registering duplicate name tools
|
|
142
152
|
if name in _REG:
|
|
143
153
|
logger.warning(f"Duplicate tool name registerd {name}")
|
|
144
154
|
_REG[name] = resolver
|
|
155
|
+
if module_qualname:
|
|
156
|
+
_MODULE_QUALNAMES[name] = module_qualname
|
|
145
157
|
|
|
146
158
|
|
|
147
159
|
def resolve_tool(
|
|
@@ -159,3 +171,14 @@ def resolve_tool(
|
|
|
159
171
|
def list_registered_tools() -> list[str]:
|
|
160
172
|
with _LOCK:
|
|
161
173
|
return list(_REG.keys())
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def get_tool_module_qualnames() -> dict[str, str]:
|
|
177
|
+
"""Get a mapping of tool names to their module qualnames.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
A dictionary mapping tool names to module qualnames (e.g.,
|
|
181
|
+
{"glob": "openhands.tools.glob.definition"}).
|
|
182
|
+
"""
|
|
183
|
+
with _LOCK:
|
|
184
|
+
return dict(_MODULE_QUALNAMES)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/security_risk_assessment.j2
RENAMED
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/self_documentation.j2
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_interactive.j2
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/agent/prompts/system_prompt_planning.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/no_op_condenser.py
RENAMED
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/context/condenser/pipeline_condenser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/conversation_stats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/impl/local_conversation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/serialization_diff.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/visualizer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/conversation/visualizer/default.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/event/llm_convertible/observation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/async_remote_workspace.py
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_sdk-1.7.2 → openhands_sdk-1.7.3}/openhands/sdk/workspace/remote/remote_workspace_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|