Releases: OpenHands/software-agent-sdk
Releases · OpenHands/software-agent-sdk
v1.8.2
What's Changed
- Release v1.8.1 by @all-hands-bot in #1670
- feat: auto-trigger PR review on new ready-for-review PRs + fix duplicate comments by @xingyaoww in #1669
- Add --no-pager instruction for git commands in system prompt by @xingyaoww in #1673
- fix: mask LLM_API_KEY and GITHUB_TOKEN secrets in PR review agent by @xingyaoww in #1675
- Add per-test timeout to prevent hanging example scripts by @xingyaoww in #1666
- Fix PR review agent multi-line suggestion alignment by @xingyaoww in #1677
- Add visualize() for ConversationErrorEvent by @enyst in #1686
- Fix useless logging in sockets.py by @neubig in #1679
- Fix conversation restore failing due to secret serialization/deserialization mismatch by @tofarr in #1672
- fix(critic): Accept MessageEvent as valid finish signal in AgentFinishedCritic by @neubig in #1695
- fix: add file-based locking to EventLog.append() by @ixchio in #1614
- feat(pr-review): Add priority labels to review comments by @xingyaoww in #1696
- feat: support custom volumes mounting for DockerWorkspace by @Co1lin in #1618
- Add AGENTS.md and link repo.md by @enyst in #1690
- Condenser integration tests by @csmith49 in #1652
- Fix: Disable streaming for sub-agents in delegate tool by @malhotra5 in #1705
- Fix deepseek-v3.2-reasoner model name to use valid API identifier by @neubig in #1707
- fix(condenser): Forgetting range calculation interprets
keep_firstcorrectly by @csmith49 in #1708 - llm: log failed Responses calls with request context by @enyst in #1684
- Fix verify method to include builtin tools in event check by @malhotra5 in #1710
- Optimize docker-like behaviour in apptainer with better code quality by @adityasoni9998 in #1711
- Remove .openhands/skills/repo.md symlink by @enyst in #1709
- Add crash diagnostics logging to agent server by @neubig in #1689
- Fix PR review bot to diff against current base commit by @enyst in #1685
- Add ARG USERNAME to base-image stage for podman by @cbagwell in #1691
- Revert "fix(critic): Accept MessageEvent as valid finish signal in AgentFinishedCritic" by @xingyaoww in #1715
- Add configurable startup wait for APIRemoteWorkspace by @simonrosenberg in #1713
- Add user tracking to evaluation workflow by @juanmichelini in #1716
- fix: route qwen-3-coder through Fireworks provider by @neubig in #1720
New Contributors
Full Changelog: v1.8.1...v1.8.2
v1.8.1
Fix the failed PyPI release on v1.8.0
What's Changed
- Release v1.8.0 by @all-hands-bot in #1663
- fix: make publish workflow idempotent for re-runs by @xingyaoww in #1667
- feat: Add inline review comments for PR review workflow by @xingyaoww in #1654
- fix(tests): Enable accurate coverage reporting with pytest-xdist by @jpshackelford in #1658
Full Changelog: v1.8.0...v1.8.1
v1.8.0
Major Feature
- Support for AgentSkills standard
What's Changed
- Add push_to_index dispatch flag by @simonrosenberg in #1588
- feat: support .mcp.json for MCP server configuration by @neubig in #1481
- Release v1.7.4 by @all-hands-bot in #1595
- feat: support resource directories (scripts/, references/, assets/) by @neubig in #1482
- Fix stats being reset when resuming a conversation by @xingyaoww in #1591
- Add dynamic run name title to Run Eval workflow by @juanmichelini in #1612
- refactor: remove reconciliation methods, use runtime agent directly by @enyst in #1542
- fix(git): skip remote check for repos with no commits by @neubig in #1606
- Add code review microagent based on xingyaoww's review history by @xingyaoww in #1150
- feat(sdk): complete hooks implementation with additional context and stop hook by @ak684 in #1547
- feat: Add Plugin data model and basic loading from directories by @neubig in #1611
- feat: Add plugin loading example demonstrating skills, hooks, and MCP by @neubig in #1616
- Expose runtime_resource_factor in run-eval by @simonrosenberg in #1605
- feat: add skill validation improvements by @neubig in #1597
- Add skills support to PR review example with /codereview and /codereview-roasted by @xingyaoww in #1617
- feat: add to_prompt() for XML skill prompt generation by @neubig in #1483
- Fix poetry lock command for Poetry 2.x compatibility by @xingyaoww in #1622
- feat: Add skills example and include skill location in agent prompt by @neubig in #1599
- Multi-step integration tests by @csmith49 in #1613
- Add action summary feature for tool calls by @xingyaoww in #1339
- Add expected index models to resolve_model_config.py by @juanmichelini in #1497
- Revert "Expose runtime_resource_factor in run-eval" by @simonrosenberg in #1627
- fix: resolve UnsupportedFieldAttributeWarning for secret_registry field by @neubig in #1625
- Fix context window displaying as 0 when resuming conversation by @xingyaoww in #1590
- fix: Update PR review workflow to use correct repository name by @xingyaoww in #1623
- Fix AGENTS.md not being loaded when skills directories don't exist by @xingyaoww in #1624
- fix: Pass agent_context at Agent initialization in PR review script by @xingyaoww in #1632
- Allow over-riding system-level configurations from apptainer.conf in apptainer workspace by @adityasoni9998 in #1628
- feat(llm): Set default LLM timeout to 5 minutes (300s) by @neubig in #1638
- feat(pr_review): send complete git diff to agent in first message by @xingyaoww in #1639
- fix: Auto-add skills to_prompt() output to system prompt by @neubig in #1642
- feat: Add include_default_tools option to control built-in tools by @xingyaoww in #1594
- fix: remove duplicate example numbers in 02_remote_agent_server by @xingyaoww in #1637
- Use AGENTS.md instead of repo.md in SDK examples/system prompt by @enyst in #1648
- feat: Add public sandbox_id field to OpenHandsCloudWorkspace for resuming existing sandboxes by @malhotra5 in #1603
- docs: Update environment configuration for secret encryption in Agent Server by @jagzmz in #1465
- feat: add utility to convert legacy OpenHands skills to AgentSkills format by @xingyaoww in #1643
- feat: Implement AgentSkills progressive disclosure for SKILL.md files by @xingyaoww in #1644
- Add alive property to RemoteWorkspace by @malhotra5 in #1655
- Expose max_retries input and dispatch to eval by @simonrosenberg in #1641
New Contributors
Full Changelog: v1.7.4...v1.8.0
v1.7.4
What's Changed
- Release v1.7.3 by @all-hands-bot in #1551
- Update OpenHands version bump workflow to include all required steps by @malhotra5 in #1553
- fix: Wait for PyPI propagation and add Slack notification to release workflow by @xingyaoww in #1552
- feat: support SKILL.md file convention and name validation by @neubig in #1480
- feat: add pause() and resume() methods to workspace classes by @ixchio in #1539
- build(deps): Bump libtmux to >=0.53.0 for v0.51.0 hard deprecations by @tony in #1561
- feat: add DeepSeek v3.2 model support by @ixchio in #1564
- refactor: consolidate duplicated blocking wait logic in RemoteConversation.run() + remove defensive if else by @simonrosenberg in #1569
- Fix DiscriminatedUnionMixin issues with Pydantic C bindings by @tofarr in #1555
- Add test to verify working_dir standardization (closes #211) by @xingyaoww in #1576
- Re-add discriminator field to discriminated union JSON schema by @tofarr in #1578
- fix: Cap thinking budget below
max_tokensby @csmith49 in #1580 - Relax needs-triage duration by @enyst in #1567
- Fix RemoteConversation polling on terminal errors by @simonrosenberg in #1572
- More test fixes by @tofarr in #1581
- remove custom_llm_provider from LLM config by @enyst in #1583
- Update cryptography to 46.0.3 by @enyst in #1585
- feat: relax tool matching on resume by @ixchio in #1538
- Set initial execution status to error if it was running by @tofarr in #1554
- More efficient websocket based implementation for async bash execution by @tofarr in #1587
- feat: Create conversation when provided ID doesn't exist by @malhotra5 in #1579
- fix(condenser): Retry on empty condensation by @csmith49 in #1577
- Bump pydantic by @tofarr in #1593
New Contributors
Full Changelog: v1.7.3...v1.7.4
v1.7.3
What's Changed
- feat: Add support for custom tools with remote agent server by @xingyaoww in #1383
- Release v1.7.2 by @all-hands-bot in #1530
- Add ApptainerWorkspace implementation for rootless container support by @neubig in #892
- Add GPT-5 preset using ApplyPatchTool (opt-in) by @enyst in #1462
- feat: add openrouter/minimax-m2 to SEND_REASONING_CONTENT_PATTERNS by @neubig in #1152
- Add forward_env support to APIRemoteWorkspace by @simonrosenberg in #1540
- Raise ValueError when condensing 0 events by @xingyaoww in #1541
- Propagate remote conversation errors by @simonrosenberg in #1546
- Fix save_meta() not being called on conversation creation by @tofarr in #1548
- Fix ValueError from tool execution causing conversation to fail by @xingyaoww in #1550
Full Changelog: v1.7.2...v1.7.3
v1.7.2
What's Changed
- Release v1.7.1 by @all-hands-bot in #1513
- Load model-specific repo instructions (CLAUDE.md for Claude only, GEMINI.md for Gemini only) by @enyst in #1328
- Fix max iterations reached: Set ERROR status with clear message by @simonrosenberg in #1511
- Save screenshots from browser tool by @hamiltop in #1443
- Use ALLHANDS_BOT_GITHUB_PAT for bot-like workflows by @xingyaoww in #1519
- Fix TmuxTerminal.close() to handle dead session exceptions by @xingyaoww in #1517
- ci(integration): update integration LLM matrix to gpt-5.2-codex by @enyst in #1503
- Add automated version bump PRs for downstream repos by @xingyaoww in #1520
- feat: add early stopping/pruner for behavior tests cost optimization by @ixchio in #1433
- Fix condensation for 0 events by adjusting default parameters by @xingyaoww in #1523
- Add pull request template by @neubig in #1528
- Revert "ci(integration): update integration LLM matrix to gpt-5.2-codex" by @xingyaoww in #1524
New Contributors
- @all-hands-bot made their first contribution in #1513
- @hamiltop made their first contribution in #1443
- @ixchio made their first contribution in #1433
Full Changelog: v1.7.1...v1.7.2
v1.7.1
What's Changed
- feat: add AgentSkills standard fields to Skill model by @neubig in #1479
- Release v1.7.0 by @xingyaoww in #1486
- Fix SDK_SHA reference in run-eval.yml Comment on PR step by @simonrosenberg in #1498
- Add optional parallelization parameters to run-eval workflow by @simonrosenberg in #1499
- Add compatibility fixes for Nemotron and similar models by @pankajarm in #1470
- feat(condenser): Token-aware condensation in LLMSummarizingCondenser by @csmith49 in #1380
- fix(condenser): Tool-call aware condensation by @csmith49 in #1412
- feat(localFileStore): Add Cache Layer to LocalFileStore to Avoid I/O Overhead from Read Operations by @CLFutureX in #1274
- feat: Add hooks system for event interception by @ak684 in #1467
- fix: handle union types in py_type for mcp schema conversion by @hieptl in #1509
- Remove tool preambles from gpt-5-codex by @enyst in #1512
- fix(condenser): Tool-loop aware condensation by @csmith49 in #1508
New Contributors
- @pankajarm made their first contribution in #1470
Full Changelog: v1.7.0...v1.7.1
v1.7.0
What's Changed
- Release 1.6.0 by @xingyaoww in #1404
- Make thinking signatures optional by @cbagwell in #1394
- Make
integration-testlabel run integration tests only by @ryanhoangt in #1416 - make eval_limit param optional by @simonrosenberg in #1419
- Exclude '*mini' models from prompt_cache_retention by @enyst in #1345
- Add load_project_skills helper function by @xingyaoww in #1420
- feat(AsyncExecutor): AsyncExecutor allows adding tasks after shutdown, which may cause unpredictable exceptions. by @CLFutureX in #1092
- fix end span in local conversation run by @Rainhunter13 in #1432
- Add iterative refinement example for COBOL to Java refactoring by @neubig in #1415
- Make cronjob run integration test only by @ryanhoangt in #1430
- Add commit0 to CI evaluation workflow by @simonrosenberg in #1429
- delete image when docker workspace closes by @madhur-tandon in #1424
- Include persistence_dir in ConversationRunError for better debugging by @xingyaoww in #1437
- Fix JSON encoding to preserve non-ASCII characters in model_dump_json by @LuneZ99 in #1431
- refactor: add support for description field in sdk secrets by @hieptl in #1428
- include j2 templates in tools package by @madhur-tandon in #1426
- Fix: throw error when viewing PDF files instead of crashing by @xingyaoww in #1423
- Update litellm to 1.80.10 and add tests for Gemini 2.5 thinking blocks by @xingyaoww in #1413
- Suppress LiteLLM INFO logs to clean up output by @xingyaoww in #1369
- Make stuck detection thresholds configurable by @neubig in #763
- feat: Add OpenHandsCloudWorkspace for OpenHands Cloud API by @xingyaoww in #1442
- Add PostHog Debugging Example by @neubig in #1202
- Public APIs return OpenHands types not LiteLLM types - Part 2: SystemPromptEvent by @jpshackelford in #495
- refactor: Add LookupSecret tests for AgentContext.get_secret_infos() by @hieptl in #1456
- Add nova-2-lite to model_features by @BalasubramanyamEvani in #1455
- fix: disable scheduled workflows from running in forks by @Chesars in #1447
- Add skill for writing behavior tests by @ryanhoangt in #1459
- feat: Add configurable security policy support to Agent by @neubig in #427
- Fix batch atomicity when condensation forgets ObservationEvents by @xingyaoww in #1450
- fix: add openrouter/minimax to FORCE_STRING_SERIALIZER_MODELS by @neubig in #1448
- Fix verified_models by @enyst in #1458
- fix: deepseek reasoner model not part of send_reasoning_content_support models (Closes #1343) by @BalasubramanyamEvani in #1464
- Implement gemini-style file editing tools by @neubig in #1199
- terminal: populate TerminalObservation.exit_code (fixes #1468) by @enyst in #1469
- Fix RemoteConversation.run() timeout issues with async polling by @xingyaoww in #1444
- Add accumulated token usage to integration tests output and GitHub CI comments by @xingyaoww in #1471
- Fix prepare-release workflow to use ALLHANDS_BOT_GITHUB_PAT by @xingyaoww in #1485
- Fix prepare-release workflow to use correct label names by @xingyaoww in #1487
New Contributors
- @cbagwell made their first contribution in #1394
- @Rainhunter13 made their first contribution in #1432
- @madhur-tandon made their first contribution in #1424
- @BalasubramanyamEvani made their first contribution in #1455
Full Changelog: v1.6.0...v1.7.0
v1.6.0
What's Changed
- Release 1.5.2 by @xingyaoww in #1382
- feat: allow xhigh reasoning_effort by @enyst in #1388
- Add page_iterator utility and refactor resend_all functionality by @tofarr in #1386
- ALL-4485 Added deleting state for conversations for use in webhook. by @tofarr in #1391
- fix: use simple delay for shell init instead of PTY-based detection by @ak684 in #1387
- Add instance id input to run-eval dispatch by @simonrosenberg in #1389
- Update lmnr from 0.7.20 to 0.7.24 by @xingyaoww in #1398
- Add self-documentation lookup capability to system prompt by @xingyaoww in #1396
- ALL-4516 Fix selfish coroutines in event service state lock operations by @tofarr in #1400
- docs(readme): update Slack link to openhands.dev domain by @enyst in #1397
- ALL-4518 Fix agent deep copy to preserve secrets using expose_secrets by @tofarr in #1403
- Add MEMORY section to system prompt for skills by @xingyaoww in #600
- Support model-family and model-variant system prompts by @ryanhoangt in #1348
- Add automated release workflows by @xingyaoww in #1405
Full Changelog: v1.5.2...v1.6.0
v1.5.2
What's Changed
- Release 1.5.1 by @xingyaoww in #1379
- ALL-4426 Optimize agent tool initialization with parallel execution by @tofarr in #1374
- ALL-4426 Parallelize service startup and shutdown in api_lifespan by @tofarr in #1375
- ALL-4426 Fix: Run conversation webhook notifications in background with error logging by @tofarr in #1373
- fix: update respond_to_confirmation API to Invoke reject_pending_actions on rejection by @hieptl in #1377
Full Changelog: v1.5.1...v1.5.2