Repository navigation
Release v1.52.0 - #5490
Release v1.52.0#5490
Conversation
Co-authored-by: openhands <openhands@all-hands.dev>
|
Hi! I started running the integration tests on your PR. You will receive a comment with the results shortly. |
|
🧹 PR Artifact Cleanup Queued The |
🔒 Release Security Scan🔒 Approval drift (time-of-check vs time-of-use)❌ 4 finding(s) Baseline:
Audited 14 PR(s): 10 clean, 4 flagged, 0 un-auditable. 📦 Supply-chain dependency diff✅ no findings Baseline: OSV: no known vulns across 7 new/bumped dep(s). Bumped dependencies
Internal `openhands-*` bumps
Deterministic scanners: approval-drift + supply-chain dependency diff. Read-only; no PR code executed. |
REST API breakage checks (OpenAPI) — ✅ PASSEDResult: ✅ PASSED |
|
Hi! I started running the behavior tests on your PR. You will receive a comment with the results shortly. |
🧪 Integration Tests ResultsOverall Success Rate: 98.0% 📁 Detailed Logs & ArtifactsClick the links below to access detailed agent/LLM logs showing the complete reasoning process for each model. On the GitHub Actions page, scroll down to the 'Artifacts' section to download the logs.
📊 Summary
📋 Detailed Resultslitellm_proxy_openai_gpt_5.5
litellm_proxy_gemini_3.1_pro_preview
litellm_proxy_anthropic_claude_sonnet_4_6
Failed Tests:
litellm_proxy_deepseek_deepseek_v4_flash
litellm_proxy_minimax_MiniMax_M2.7
Skipped Tests:
|
|
I've examined the security scans and these look reasonable to me |
🔄 Running Examples with
|
| Example | Status | Duration | Cost |
|---|---|---|---|
| 01_standalone_sdk/02_custom_tools.py | ❌ FAIL Exit code 1 |
9.7s | -- |
| 01_standalone_sdk/03_activate_skill.py | ❌ FAIL Exit code 1 |
8.7s | -- |
| 01_standalone_sdk/05_use_llm_registry.py | ❌ FAIL Exit code 1 |
7.6s | -- |
| 01_standalone_sdk/07_mcp_integration.py | ❌ FAIL Exit code 1 |
9.5s | -- |
| 01_standalone_sdk/09_pause_example.py | ❌ FAIL Exit code 1 |
8.3s | -- |
| 01_standalone_sdk/10_persistence.py | ❌ FAIL Exit code 1 |
8.7s | -- |
| 01_standalone_sdk/11_async.py | ❌ FAIL Exit code 1 |
7.8s | -- |
| 01_standalone_sdk/12_custom_secrets.py | ❌ FAIL Exit code 1 |
10.6s | -- |
| 01_standalone_sdk/13_get_llm_metrics.py | ❌ FAIL Exit code 1 |
6.8s | -- |
| 01_standalone_sdk/14_context_condenser.py | ❌ FAIL Exit code 1 |
8.0s | -- |
| 01_standalone_sdk/17_image_input.py | ❌ FAIL Exit code 1 |
7.0s | -- |
| 01_standalone_sdk/18_send_message_while_processing.py | ❌ FAIL Exit code 1 |
9.1s | -- |
| 01_standalone_sdk/19_llm_routing.py | ❌ FAIL Exit code 1 |
9.5s | -- |
| 01_standalone_sdk/20_stuck_detector.py | ❌ FAIL Exit code 1 |
8.3s | -- |
| 01_standalone_sdk/21_generate_extraneous_conversation_costs.py | ❌ FAIL Exit code 1 |
8.1s | -- |
| 01_standalone_sdk/22_anthropic_thinking.py | ❌ FAIL Exit code 1 |
8.1s | -- |
| 01_standalone_sdk/23_responses_reasoning.py | ❌ FAIL Exit code 1 |
11.2s | -- |
| 01_standalone_sdk/24_planning_agent_workflow.py | ❌ FAIL Exit code 1 |
47.4s | -- |
| 01_standalone_sdk/25_agent_delegation.py | ✅ PASS | 1m 2s | $0.06 |
| 01_standalone_sdk/26_custom_visualizer.py | ❌ FAIL Exit code 1 |
6.3s | -- |
| 01_standalone_sdk/28_ask_agent_example.py | ❌ FAIL Exit code 1 |
7.1s | -- |
| 01_standalone_sdk/29_llm_streaming.py | ❌ FAIL Exit code 1 |
9.4s | -- |
| 01_standalone_sdk/30_tom_agent.py | ❌ FAIL Exit code 1 |
6.1s | -- |
| 01_standalone_sdk/31_iterative_refinement.py | ❌ FAIL Exit code 1 |
5.3s | -- |
| 01_standalone_sdk/32_configurable_security_policy.py | ❌ FAIL Exit code 1 |
5.6s | -- |
| 01_standalone_sdk/33_hooks/main.py | ❌ FAIL Exit code 1 |
10.5s | -- |
| 01_standalone_sdk/34_critic_example.py | ✅ PASS | 2m 8s | $0.02 |
| 01_standalone_sdk/36_event_json_to_openai_messages.py | ❌ FAIL Exit code 1 |
6.8s | -- |
| 01_standalone_sdk/37_llm_profile_store/main.py | ✅ PASS | 7.7s | $0.00 |
| 01_standalone_sdk/38_browser_session_recording.py | ✅ PASS | 40.9s | $0.04 |
| 01_standalone_sdk/39_llm_fallback.py | ❌ FAIL Exit code 1 |
6.6s | -- |
| 01_standalone_sdk/40_acp_agent_example.py | ✅ PASS | 48.4s | $0.32 |
| 01_standalone_sdk/41_task_tool_set.py | ✅ PASS | 22.7s | $0.02 |
| 01_standalone_sdk/42_file_based_subagents.py | ✅ PASS | 37.9s | $0.04 |
| 01_standalone_sdk/44_model_switching_in_convo.py | ❌ FAIL Exit code 1 |
6.5s | -- |
| 01_standalone_sdk/45_parallel_tool_execution.py | ❌ FAIL Exit code 1 |
5.2s | -- |
| 01_standalone_sdk/46_agent_settings.py | ❌ FAIL Exit code 1 |
5.8s | -- |
| 01_standalone_sdk/47_defense_in_depth_security.py | ✅ PASS | 4.0s | $0.00 |
| 01_standalone_sdk/48_conversation_fork.py | ❌ FAIL Exit code 1 |
6.1s | -- |
| 01_standalone_sdk/49_switch_llm_tool.py | ✅ PASS | 8.6s | $0.04 |
| 01_standalone_sdk/50_async_cancellation.py | ❌ FAIL Exit code 1 |
5.4s | -- |
| 01_standalone_sdk/51_agent_hooks/main.py | ❌ FAIL Exit code 1 |
10.7s | -- |
| 01_standalone_sdk/52_dynamic_workflow.py | ✅ PASS | 1m 12s | $0.05 |
| 01_standalone_sdk/53_client_defined_tools.py | ❌ FAIL Exit code 1 |
6.5s | -- |
| 01_standalone_sdk/54_goal_completion_loop.py | ❌ FAIL Exit code 1 |
5.1s | -- |
| 01_standalone_sdk/55_persistent_memory.py | ❌ FAIL Exit code 1 |
6.1s | -- |
| 01_standalone_sdk/56_structured_output.py | ❌ FAIL Exit code 1 |
5.5s | -- |
| 01_standalone_sdk/57_prompt_hooks/main.py | ✅ PASS | 15.3s | $0.00 |
| 01_standalone_sdk/58_ask_oracle_tool/main.py | ✅ PASS | 19.0s | $0.01 |
| 01_standalone_sdk/59_route_task_to_model.py | ❌ FAIL Exit code 1 |
4.9s | -- |
| 02_remote_agent_server/01_convo_with_local_agent_server.py | ❌ FAIL Exit code 1 |
19.7s | -- |
| 02_remote_agent_server/02_convo_with_docker_sandboxed_server.py | ✅ PASS | 1m 23s | $0.04 |
| 02_remote_agent_server/03_browser_use_with_docker_sandboxed_server.py | ✅ PASS | 2m 1s | $0.10 |
| 02_remote_agent_server/04_convo_with_api_sandboxed_server.py | ✅ PASS | 1m 56s | $0.03 |
| 02_remote_agent_server/06_custom_tool/main.py | ✅ PASS | 5m 6s | $0.05 |
| 02_remote_agent_server/07_convo_with_cloud_workspace.py | ✅ PASS | 40.2s | $0.03 |
| 02_remote_agent_server/08_convo_with_apptainer_sandboxed_server.py | ✅ PASS | 3m 43s | $0.02 |
| 02_remote_agent_server/09_acp_agent_with_remote_runtime.py | ✅ PASS | 2m 1s | $0.27 |
| 02_remote_agent_server/10_cloud_workspace_share_credentials.py | ✅ PASS | 34.6s | $0.00 |
| 02_remote_agent_server/11_conversation_fork.py | ❌ FAIL Exit code 1 |
20.7s | -- |
| 02_remote_agent_server/12_settings_and_secrets_api.py | ❌ FAIL Exit code 1 |
15.9s | -- |
| 02_remote_agent_server/13_workspace_get_llm.py | ❌ FAIL Exit code 1 |
28.7s | -- |
| 02_remote_agent_server/14_client_defined_tools.py | ❌ FAIL Exit code 1 |
25.9s | -- |
| 02_remote_agent_server/15_openai_compatible_gateway.py | ❌ FAIL Exit code 1 |
13.3s | -- |
| 02_remote_agent_server/16_deferred_init.py | ✅ PASS | 18.6s | $0.00 |
| 04_llm_specific_tools/01_gpt5_apply_patch_preset.py | ❌ FAIL Exit code 1 |
10.6s | -- |
| 04_llm_specific_tools/02_gemini_file_tools.py | ❌ FAIL Exit code 1 |
7.9s | -- |
| 05_skills_and_plugins/01_loading_agentskills/main.py | ❌ FAIL Exit code 1 |
5.3s | -- |
| 05_skills_and_plugins/02_loading_plugins/main.py | ❌ FAIL Exit code 1 |
8.7s | -- |
| 05_skills_and_plugins/04_mixed_marketplace_skills/main.py | ✅ PASS | 7.1s | $0.00 |
❌ Some tests failed
Total: 70 | Passed: 22 | Failed: 48 | Total Cost: $1.17
Failed examples:
- examples/01_standalone_sdk/02_custom_tools.py: Exit code 1
- examples/01_standalone_sdk/03_activate_skill.py: Exit code 1
- examples/01_standalone_sdk/05_use_llm_registry.py: Exit code 1
- examples/01_standalone_sdk/07_mcp_integration.py: Exit code 1
- examples/01_standalone_sdk/09_pause_example.py: Exit code 1
- examples/01_standalone_sdk/10_persistence.py: Exit code 1
- examples/01_standalone_sdk/11_async.py: Exit code 1
- examples/01_standalone_sdk/12_custom_secrets.py: Exit code 1
- examples/01_standalone_sdk/13_get_llm_metrics.py: Exit code 1
- examples/01_standalone_sdk/14_context_condenser.py: Exit code 1
- examples/01_standalone_sdk/17_image_input.py: Exit code 1
- examples/01_standalone_sdk/18_send_message_while_processing.py: Exit code 1
- examples/01_standalone_sdk/19_llm_routing.py: Exit code 1
- examples/01_standalone_sdk/20_stuck_detector.py: Exit code 1
- examples/01_standalone_sdk/21_generate_extraneous_conversation_costs.py: Exit code 1
- examples/01_standalone_sdk/22_anthropic_thinking.py: Exit code 1
- examples/01_standalone_sdk/23_responses_reasoning.py: Exit code 1
- examples/01_standalone_sdk/24_planning_agent_workflow.py: Exit code 1
- examples/01_standalone_sdk/26_custom_visualizer.py: Exit code 1
- examples/01_standalone_sdk/28_ask_agent_example.py: Exit code 1
- examples/01_standalone_sdk/29_llm_streaming.py: Exit code 1
- examples/01_standalone_sdk/30_tom_agent.py: Exit code 1
- examples/01_standalone_sdk/31_iterative_refinement.py: Exit code 1
- examples/01_standalone_sdk/32_configurable_security_policy.py: Exit code 1
- examples/01_standalone_sdk/33_hooks/main.py: Exit code 1
- examples/01_standalone_sdk/36_event_json_to_openai_messages.py: Exit code 1
- examples/01_standalone_sdk/39_llm_fallback.py: Exit code 1
- examples/01_standalone_sdk/44_model_switching_in_convo.py: Exit code 1
- examples/01_standalone_sdk/45_parallel_tool_execution.py: Exit code 1
- examples/01_standalone_sdk/46_agent_settings.py: Exit code 1
- examples/01_standalone_sdk/48_conversation_fork.py: Exit code 1
- examples/01_standalone_sdk/50_async_cancellation.py: Exit code 1
- examples/01_standalone_sdk/51_agent_hooks/main.py: Exit code 1
- examples/01_standalone_sdk/53_client_defined_tools.py: Exit code 1
- examples/01_standalone_sdk/54_goal_completion_loop.py: Exit code 1
- examples/01_standalone_sdk/55_persistent_memory.py: Exit code 1
- examples/01_standalone_sdk/56_structured_output.py: Exit code 1
- examples/01_standalone_sdk/59_route_task_to_model.py: Exit code 1
- examples/02_remote_agent_server/01_convo_with_local_agent_server.py: Exit code 1
- examples/02_remote_agent_server/11_conversation_fork.py: Exit code 1
- examples/02_remote_agent_server/12_settings_and_secrets_api.py: Exit code 1
- examples/02_remote_agent_server/13_workspace_get_llm.py: Exit code 1
- examples/02_remote_agent_server/14_client_defined_tools.py: Exit code 1
- examples/02_remote_agent_server/15_openai_compatible_gateway.py: Exit code 1
- examples/04_llm_specific_tools/01_gpt5_apply_patch_preset.py: Exit code 1
- examples/04_llm_specific_tools/02_gemini_file_tools.py: Exit code 1
- examples/05_skills_and_plugins/01_loading_agentskills/main.py: Exit code 1
- examples/05_skills_and_plugins/02_loading_plugins/main.py: Exit code 1
🧪 Behavior Tests ResultsOverall Success Rate: 92.0% 📁 Detailed Logs & ArtifactsClick the links below to access detailed agent/LLM logs showing the complete reasoning process for each model. On the GitHub Actions page, scroll down to the 'Artifacts' section to download the logs.
📊 Summary
📋 Detailed Resultslitellm_proxy_openai_gpt_5.5
litellm_proxy_gemini_3.1_pro_preview
Failed Tests:
The agent was asked to reduce
POSITIVE ASPECTS:
VERDICT: The agent accomplished the core objective but violated the scope boundaries and performed unnecessary verification steps. The unrequested changes to LLM configuration and related tests represent scope creep that should have been either requested explicitly by the user or presented as a suggestion rather than implemented unilaterally. (confidence=0.68) (Cost: $0.51) litellm_proxy_anthropic_claude_sonnet_4_6
litellm_proxy_deepseek_deepseek_v4_flash
litellm_proxy_minimax_MiniMax_M2.7
|
🔄 Running Examples with
|
| Example | Status | Duration | Cost |
|---|---|---|---|
| 01_standalone_sdk/02_custom_tools.py | ✅ PASS | 32.5s | $0.03 |
| 01_standalone_sdk/03_activate_skill.py | ✅ PASS | 22.7s | $0.03 |
| 01_standalone_sdk/05_use_llm_registry.py | ✅ PASS | 11.0s | $0.01 |
| 01_standalone_sdk/07_mcp_integration.py | ✅ PASS | 37.5s | $0.03 |
| 01_standalone_sdk/09_pause_example.py | ✅ PASS | 13.3s | $0.01 |
| 01_standalone_sdk/10_persistence.py | ✅ PASS | 27.8s | $0.02 |
| 01_standalone_sdk/11_async.py | ✅ PASS | 32.7s | $0.04 |
| 01_standalone_sdk/12_custom_secrets.py | ✅ PASS | 15.7s | $0.01 |
| 01_standalone_sdk/13_get_llm_metrics.py | ✅ PASS | 38.5s | $0.05 |
| 01_standalone_sdk/14_context_condenser.py | ✅ PASS | 2m 31s | $0.16 |
| 01_standalone_sdk/17_image_input.py | ✅ PASS | 24.0s | $0.02 |
| 01_standalone_sdk/18_send_message_while_processing.py | ✅ PASS | 21.6s | $0.02 |
| 01_standalone_sdk/19_llm_routing.py | ✅ PASS | 18.7s | $0.02 |
| 01_standalone_sdk/20_stuck_detector.py | ✅ PASS | 17.6s | $0.02 |
| 01_standalone_sdk/21_generate_extraneous_conversation_costs.py | ✅ PASS | 14.5s | $0.00 |
| 01_standalone_sdk/22_anthropic_thinking.py | ✅ PASS | 24.1s | $0.01 |
| 01_standalone_sdk/23_responses_reasoning.py | ✅ PASS | 50.9s | $0.02 |
| 01_standalone_sdk/24_planning_agent_workflow.py | ✅ PASS | 5m 21s | $0.41 |
| 01_standalone_sdk/25_agent_delegation.py | ✅ PASS | 1m 4s | $0.06 |
| 01_standalone_sdk/26_custom_visualizer.py | ✅ PASS | 21.5s | $0.02 |
| 01_standalone_sdk/28_ask_agent_example.py | ✅ PASS | 32.2s | $0.04 |
| 01_standalone_sdk/29_llm_streaming.py | ✅ PASS | 32.6s | $0.02 |
| 01_standalone_sdk/30_tom_agent.py | ✅ PASS | 13.1s | $0.01 |
| 01_standalone_sdk/31_iterative_refinement.py | ✅ PASS | 1m 16s | $0.08 |
| 01_standalone_sdk/32_configurable_security_policy.py | ✅ PASS | 18.5s | $0.02 |
| 01_standalone_sdk/33_hooks/main.py | ✅ PASS | 29.9s | $0.03 |
| 01_standalone_sdk/34_critic_example.py | ✅ PASS | 33.0s | $0.02 |
| 01_standalone_sdk/36_event_json_to_openai_messages.py | ✅ PASS | 12.0s | $0.00 |
| 01_standalone_sdk/37_llm_profile_store/main.py | ✅ PASS | 7.6s | $0.00 |
| 01_standalone_sdk/38_browser_session_recording.py | ✅ PASS | 26.3s | $0.04 |
| 01_standalone_sdk/39_llm_fallback.py | ✅ PASS | 13.9s | $0.01 |
| 01_standalone_sdk/40_acp_agent_example.py | ✅ PASS | 59.0s | $0.40 |
| 01_standalone_sdk/41_task_tool_set.py | ✅ PASS | 25.3s | $0.03 |
| 01_standalone_sdk/42_file_based_subagents.py | ✅ PASS | 38.7s | $0.04 |
| 01_standalone_sdk/44_model_switching_in_convo.py | ✅ PASS | 11.9s | $0.01 |
| 01_standalone_sdk/45_parallel_tool_execution.py | ✅ PASS | 4m 21s | $0.63 |
| 01_standalone_sdk/46_agent_settings.py | ✅ PASS | 13.8s | $0.00 |
| 01_standalone_sdk/47_defense_in_depth_security.py | ✅ PASS | 5.6s | $0.00 |
| 01_standalone_sdk/48_conversation_fork.py | ✅ PASS | 22.7s | $0.01 |
| 01_standalone_sdk/49_switch_llm_tool.py | ✅ PASS | 7.7s | $0.04 |
| 01_standalone_sdk/50_async_cancellation.py | ✅ PASS | 14.2s | $0.00 |
| 01_standalone_sdk/51_agent_hooks/main.py | ✅ PASS | 40.6s | $0.06 |
| 01_standalone_sdk/52_dynamic_workflow.py | ✅ PASS | 3m 19s | $0.14 |
| 01_standalone_sdk/53_client_defined_tools.py | ✅ PASS | 15.6s | $0.01 |
| 01_standalone_sdk/54_goal_completion_loop.py | ✅ PASS | 24.5s | $0.03 |
| 01_standalone_sdk/55_persistent_memory.py | ✅ PASS | 17.7s | $0.02 |
| 01_standalone_sdk/56_structured_output.py | ✅ PASS | 44.8s | $0.06 |
| 01_standalone_sdk/57_prompt_hooks/main.py | ✅ PASS | 11.7s | $0.00 |
| 01_standalone_sdk/58_ask_oracle_tool/main.py | ✅ PASS | 16.1s | $0.01 |
| 01_standalone_sdk/59_route_task_to_model.py | ✅ PASS | 10.1s | $0.05 |
| 02_remote_agent_server/01_convo_with_local_agent_server.py | ✅ PASS | 34.2s | $0.02 |
| 02_remote_agent_server/02_convo_with_docker_sandboxed_server.py | ✅ PASS | 1m 28s | $0.04 |
| 02_remote_agent_server/03_browser_use_with_docker_sandboxed_server.py | ✅ PASS | 2m 8s | $0.11 |
| 02_remote_agent_server/04_convo_with_api_sandboxed_server.py | ✅ PASS | 1m 59s | $0.04 |
| 02_remote_agent_server/06_custom_tool/main.py | ✅ PASS | 5m 29s | $0.06 |
| 02_remote_agent_server/07_convo_with_cloud_workspace.py | ✅ PASS | 48.7s | $0.03 |
| 02_remote_agent_server/08_convo_with_apptainer_sandboxed_server.py | ✅ PASS | 4m 12s | $0.02 |
| 02_remote_agent_server/09_acp_agent_with_remote_runtime.py | ✅ PASS | 1m 59s | $0.50 |
| 02_remote_agent_server/10_cloud_workspace_share_credentials.py | ✅ PASS | 38.7s | $0.00 |
| 02_remote_agent_server/11_conversation_fork.py | ✅ PASS | 1m 15s | $0.00 |
| 02_remote_agent_server/12_settings_and_secrets_api.py | ✅ PASS | 2m 31s | $0.01 |
| 02_remote_agent_server/13_workspace_get_llm.py | ✅ PASS | 33.0s | $0.01 |
| 02_remote_agent_server/14_client_defined_tools.py | ✅ PASS | 44.6s | $0.02 |
| 02_remote_agent_server/15_openai_compatible_gateway.py | ✅ PASS | 24.5s | $0.02 |
| 02_remote_agent_server/16_deferred_init.py | ✅ PASS | 18.3s | $0.00 |
| 04_llm_specific_tools/01_gpt5_apply_patch_preset.py | ✅ PASS | 30.0s | $0.03 |
| 04_llm_specific_tools/02_gemini_file_tools.py | ✅ PASS | 32.6s | $0.08 |
| 05_skills_and_plugins/01_loading_agentskills/main.py | ✅ PASS | 14.5s | $0.02 |
| 05_skills_and_plugins/02_loading_plugins/main.py | ✅ PASS | 20.0s | $0.03 |
| 05_skills_and_plugins/04_mixed_marketplace_skills/main.py | ✅ PASS | 5.2s | $0.00 |
✅ All tests passed!
Total: 70 | Passed: 70 | Failed: 0 | Total Cost: $3.85
Release v1.52.0
This PR prepares the release for version 1.52.0.
Started by: @malhotra5
Release Checklist
integration-test)behavior-test)test-examples)security-scan)release-note-requiredPRs are accurately called out in the final release notesWhat happens on merge
When this PR is merged, the
create-release.ymlworkflow will automatically:v1.52.0and auto-generated notes, plus an explicit preamble for mergedrelease-note-requiredPRsv1.52.0version-bump-prs.ymlafter successful PyPI publication🐳 Agent Server images for this PR — GHCR package, pull/run commands, and all pushed tags (click to expand)
• GHCR package: https://github.com/OpenHands/agent-sdk/pkgs/container/agent-server
Variants & Base Images
eclipse-temurin:17-jdkpython-node-runtimepython-node-runtimepython-node-runtimegolang:1.21-bookwormPull (multi-arch manifest)
# Each variant is a multi-arch manifest supporting both amd64 and arm64 docker pull ghcr.io/openhands/agent-server:a756fd8-pythonRun
All tags pushed for this build
About Multi-Architecture Support
a756fd8-python) is a multi-arch manifest supporting both amd64 and arm64a756fd8-python-amd64) are also available if needed