Releases: OpenHands/software-agent-sdk
Releases · OpenHands/software-agent-sdk
v1.22.1
What's Changed
- Add SWE-Bench Pro to run-eval workflow by @neubig in #2959
- perf: bound InMemoryFileStore with LRU eviction by @csmith49 in #3163
- feat(agent-server): base conversation worktrees on origin default branch by @rbren in #3215
- chore(agent-server): drop variable-sized payloads from info logs by @rbren in #3216
- chore(sdk): drop variable-sized payloads from info logs by @rbren in #3217
- docs(codereview): add Logging Hygiene rule against object dumps in info logs by @rbren in #3218
- perf: change Condensation.forgotten_event_ids from list to set by @csmith49 in #3156
- perf: dispatch PubSub notifications concurrently by @csmith49 in #3162
- fix: always close tool executors on conversation close by @csmith49 in #3157
- fix: eliminate TOCTOU race in EventService.send_message by @csmith49 in #3160
- fix(acp): inject system suffix once instead of every turn (#3221) by @simonrosenberg in #3226
- fix(sdk): map typed LiteLLM 401/403 exceptions to LLMAuthenticationError by @VascoSch92 in #3222
- fix(agent-server): ignore redundant WebSocket auth control frames by @VascoSch92 in #3224
- ci(release-binaries): release window binaries by @VascoSch92 in #3228
- fix(agent-server): bundle rich submodules for unicode width data by @VascoSch92 in #3229
- Primary-surface-first extraction ordering to prevent truncation-based bypass by @Fieldnote-Echo in #2709
- feat(agent-server): unify ACP conversation endpoint by @neubig in #3227
- perf(agent-server): make event search O(limit) instead of O(total) by @rbren in #3197
- perf: dedicated thread pool for conversation execution by @csmith49 in #3169
- Fix/laminar/remove litellm callback by @dinmukhamedm in #3008
- fix: cap per-conversation WebSocket subscriber count by @csmith49 in #3166
- perf: batch ConversationState autosaves inside context manager by @csmith49 in #3165
- perf: centralize lease renewal into one background task by @csmith49 in #3168
- test(agent-server): cover persisted settings migrations by @neubig in #3232
- ci: also relock enterprise/poetry.lock in version-bump PR workflow by @aivong-openhands in #3244
- refactor: optimize caching for public skills loading by @hieptl in #3253
- Prepare AgentSettings removal helpers by @neubig in #3208
- Separate configured and effective LLM token limits by @neubig in #3255
- feat: add --extra-python-path / OH_EXTRA_PYTHON_PATH for custom tool imports in binary builds by @xingyaoww in #3240
- examples: standardize directory entrypoints by @xingyaoww in #3259
- fix(llm): stop bleeding LLM credentials through os.environ (#3138) by @csmith49 in #3258
- fix(sdk): unregister atexit handler in LocalConversation.close() by @csmith49 in #3245
- fix: guard litellm modify_params context by @he-yufeng in #3248
- Release v1.22.1 by @all-hands-bot in #3261
New Contributors
- @he-yufeng made their first contribution in #3248
Full Changelog: v1.22.0...v1.22.1
v1.22.0
What's Changed
- Improve SDK version bump workflow by @xingyaoww in #3111
- fix: replace deprecated authlib.jose with joserfc by @xingyaoww in #3132
- feat(profiles): LLM profile management API by @VascoSch92 in #3129
- feat(sdk): make security_risk tool parameter optional, default to UNKNOWN by @VascoSch92 in #3126
- refactor(sdk/llm/message): reduce complexity of Message.to_responses_dict by @VascoSch92 in #2940
- refactor(sdk/llm): reduce complexity of function call converter functions by @VascoSch92 in #2939
- fix(hooks): allow prompt-based hooks in HookDefinition by @VascoSch92 in #2752
- fix(tools): Add browser crash detection and automatic session recovery by @VascoSch92 in #2738
- fix: treat ref=HEAD on empty repo as empty tree by @hieptl in #3158
- set semver tags by @rbren in #3159
- chore(deps): bump pip from 26.0.1 to 26.1 by @dependabot[bot] in #3125
- chore(deps): bump gitpython from 3.1.47 to 3.1.49 by @dependabot[bot] in #3124
- chore(deps): bump python-multipart from 0.0.26 to 0.0.27 by @dependabot[bot] in #3123
- chore(deps): bump slackapi/slack-github-action from 3.0.2 to 3.0.3 by @dependabot[bot] in #3096
- chore(deps): bump mako from 1.3.10 to 1.3.12 by @dependabot[bot] in #3048
- chore(deps): bump authlib from 1.6.9 to 1.6.11 by @dependabot[bot] in #3049
- ci: publish multi-arch agent-server binaries + docker smoke test by @VascoSch92 in #3082
- feat(profiles): Add cipher encryption for LLM profile secrets by @VascoSch92 in #3161
- Use native Python zipfile for trajectory downloads by @neubig in #3170
- fix(agent-server): decrypt cipher-encrypted profiles on conversation switch by @VascoSch92 in #3167
- feat(profiles): add active_profile tracking to profiles API by @malhotra5 in #3173
- test: add agent-server stress suite and known-bug xfail markers by @VascoSch92 in #3101
- fix for versions by @rbren in #3178
- fix(agent-server): suppress noisy traceback when sending events to a … by @rbren in #3182
- fix(agent-server): take over conversation leases left by crashed owners by @rbren in #3184
- handle lookup secrets that are local by @rbren in #3181
- feat(agent-server): add conversation worktree option by @rbren in #3180
- Fix Laminar root span exception handling by @neubig in #3189
- fix(git): treat ref=HEAD with unresolved HEAD as empty tree by @rbren in #3177
- feat(agent-server): serve conversation workspaces as static webserver by @rbren in #3192
- fix(settings): store MCP env/headers on disk instead of writing '' by @rbren in #3187
- feat(agent-server): cookie auth for workspace static server (cross-domain friendly) by @rbren in #3194
- chore(logging): demote noisy per-conversation startup logs to debug by @rbren in #3195
- fix(agent-server): don't dump tracebacks for raised HTTPExceptions by @rbren in #3196
- fix(agent-server): mark workspace-session cookie Secure on HTTPS and loopback by @rbren in #3198
- fix(sdk): enforce disabled skill model invocation by @Zheng-Lu in #3114
- feat: return dynamic favorites + roots from /api/file/home by @hieptl in #3202
- Add LLM profile switch tool by @neubig in #3188
- feat(sdk): gate switch llm default tool by @neubig in #3190
- Fix Windows terminal Ctrl-C process cleanup by @neubig in #3171
- fix(agent-server): bound initial-state push in subscribe_to_events by @VascoSch92 in #3201
- fix(agent-server): bound WebhookSubscriber queue under failed retries by @VascoSch92 in #3199
- fix(agent-server): run bash cleanup traps on timeout via process-group SIGTERM by @VascoSch92 in #3175
- feat(settings): encrypt MCP env / headers with cipher at rest by @rbren in #3193
- fix(agent-server): offload upload writes to thread to keep event loop responsive by @VascoSch92 in #3174
- fix(agent-server): propagate subscriber init errors by @VascoSch92 in #3200
- fix(release): dispatch server.yml to build versioned Docker images on release by @simonrosenberg in #3209
- fix(release): remaining Docker image fixes — merge-manifests gate, v-prefix stripping, release-binaries dispatch by @xingyaoww in #3210
- Release v1.22.0 by @all-hands-bot in #3204
Full Changelog: v1.21.1...v1.22.0
v1.21.1
What's Changed
- Fix release workflow dispatch token by @xingyaoww in #3106
- feat(workspace): Add completion callback support to RemoteWorkspace by @malhotra5 in #3110
- fix(sdk): mark iterative refinement as critical setting by @xingyaoww in #3115
- Add optional ref query param to /api/git/{changes,diff} by @rbren in #3116
- Add tini init to Dockerfile to reap zombie processes by @neubig in #3043
- Fix unhandled GitRepositoryError on GET /api/git/changes by @neubig in #3041
- Fix orphaned Laminar traces from cross-async-context conversations by @neubig in #3113
- Release v1.21.1 by @all-hands-bot in #3130
Full Changelog: v1.21.0...v1.21.1
v1.21.0
What's Changed
- Remove VERIFIED_TRINITY_MODELS; keep trinity-large-thinking as OpenHands-only by @juanmichelini in #3072
- feat: add /api/file/list_subdirs and /api/file/home endpoints by @hieptl in #3067
- Revert Kimi K2.6 to public moonshot endpoint by @juanmichelini in #3081
- fix(agent-server): close MCP clients reliably on conversation teardown by @VascoSch92 in #3083
- Add get_llm(), get_secrets(), and get_mcp_config() methods to RemoteWorkspace by @malhotra5 in #3077
- refactor(acp): centralize provider metadata and agent contracts by @simonrosenberg in #3022
- feat(acp): suppress conflicting env vars when CLAUDE_CONFIG_DIR is active by @simonrosenberg in #3092
- Add clone_repos, load_skills_from_agent_server, and get_repos_context to RemoteWorkspace by @malhotra5 in #3095
- fix(settings): redact remaining secret-bearing fields during serialization by @VascoSch92 in #3074
- docs(hooks): clarify exit-code semantics (only exit 2 blocks) by @neubig in #3097
- Standardize health check response format by @neubig in #2883
- settings: move critic refinement ownership into SDK by @neubig in #2620
- ci: dispatch version bump after PyPI publish by @xingyaoww in #3079
- Enable Gemini prompt cache markers by @mindbomber in #3090
- ci: replace kimi-k2-thinking with kimi-k2.6 in integration test defaults by @xingyaoww in #3102
- Add DeepSeek-V4-Pro model configuration by @juanmichelini in #2978
- feat: add /api/cloud-proxy for cross-origin saas forwarding by @hieptl in #3100
- Release v1.21.0 by @all-hands-bot in #3103
New Contributors
- @mindbomber made their first contribution in #3090
Full Changelog: v1.20.1...v1.21.0
v1.20.1
What's Changed
- fix(sdk): update default critic route by @xingyaoww in #3055
- fix: prevent O(n²) memory growth in ACP tool call streaming by @simonrosenberg in #3033
- chore(deps): update litellm to 1.83.14 by @aivong-openhands in #3056
- fix(view): prevent KeyError on duplicate observation-like events by @VascoSch92 in #3051
- fix(visualizer): cap cache hit rate at 100% for ACP token usage by @VascoSch92 in #3065
- fix(test): move tests in the correct directory by @VascoSch92 in #3064
- fix(agent-server): skip restart-recovery error when observation already exists by @VascoSch92 in #3063
- fix(sdk): resize Anthropic many-image inputs by @Zheng-Lu in #2552
- ci: dispatch PyPI release after creating GitHub release by @xingyaoww in #3068
- fix: handle non-repo workspaces in /api/git/changes by @hieptl in #3062
- fix(sdk): add v1->v2 settings migration that canonicalizes agent_kind by @neubig in #3069
- chore(deps): bump slackapi/slack-github-action from 3.0.1 to 3.0.2 by @dependabot[bot] in #3016
- chore(deps): bump dawidd6/action-download-artifact from 20 to 21 by @dependabot[bot] in #3014
- chore(deps): bump actions/github-script from 7 to 9 by @dependabot[bot] in #3015
- Add 'kimi-k2.6' and 'trinity-large-thinking' to verified models list by @juanmichelini in #3059
- fix(acp): redact acp_env values during serialization by @VascoSch92 in #3066
- feat: encrypted secrets in transit for settings API by @malhotra5 in #3060
- Release v1.20.1 by @all-hands-bot in #3070
New Contributors
Full Changelog: v1.20.0...v1.20.1
v1.20.0
What's Changed
- Release v1.19.1 by @all-hands-bot in #3019
- fix(sdk): preserve critic api key serialization by @xingyaoww in #3021
- Add DeepSeek-V4-Flash model by @juanmichelini in #2979
- Add usable_tools to server_info by @neubig in #3028
- lazy load Laminar by @dinmukhamedm in #3007
- Update Kimi K2.6 to AMD endpoint & teach review bot to accept eval monitor proof by @juanmichelini in #3013
- Recover terminal pool after tmux server exit by @neubig in #3037
- Add gpt-5.5 to verified models by @juanmichelini in #3039
- Fix critic conversation info secret serialization by @xingyaoww in #3024
- chore(deps): bump gitpython from 3.1.45 to 3.1.47 by @dependabot[bot] in #3032
- feat: add --import-modules CLI flag for preloading custom modules by @09473ZH in #2771
- Fix ACPAgent dropping image content from user messages by @sjathin in #3027
- ci: auto-create GitHub release when release PR is merged by @xingyaoww in #3023
- chore: point qa-changes workflows to extensions main branch by @xingyaoww in #2924
- Release v1.20.0 by @all-hands-bot in #3038
New Contributors
Full Changelog: v1.19.1...v1.20.0
v1.19.1
What's Changed
- chore(deps): bump pypdf from 6.9.2 to 6.10.2 by @dependabot[bot] in #2960
- Append AgentContext prompt extensions for ACP agents by @xingyaoww in #2946
- Support LMNR_BASE_URL when set by @juanmichelini in #2951
- feat: add LMNR_USE_HTTP option to force HTTP transport for Laminar by @juanmichelini in #2992
- fix(conversation): prevent fork(agent=...) from clobbering source prompt_cache_key by @VascoSch92 in #2923
- feat: Extension installation module by @csmith49 in #2811
- feat(settings): add api_key_env_var property to ACPAgentSettings by @simonrosenberg in #2997
- fix: fix version-bump-prs workflow PyPI propagation delay by @xingyaoww in #2998
- feat(acp): secrets in agent_context — prompt awareness + subprocess injection by @simonrosenberg in #2984
- Add missing models from openhands-index-results benchmark by @juanmichelini in #2985
- fix(llm): preserve telemetry callbacks across LLM re-validation by @VascoSch92 in #2999
- fix(agent-server): isolate tmux temp dirs per server instance by @neubig in #2970
- Add Windows test support by @neubig in #2983
- fix(sdk): make grep fallback portable across shells by @neubig in #2990
- test: share symlink capability helper by @neubig in #2991
- refactor(settings): rename 'llm' discriminator to 'openhands' and LLMAgentSettings to OpenHandsAgentSettings by @simonrosenberg in #2996
- feat(windows): add PowerShell terminal backend by @neubig in #2993
- test(agent-server): cover split-brain conversation resume by @neubig in #2943
- fix(acp): drop redundant MessageEvent from step() end-of-turn emission by @simonrosenberg in #3001
- fix: Handle OpenAI base_url without /v1 suffix by @juanmichelini in #3009
- feat(sdk): allow Conversation.switch_profile to accept an inline LLM by @VascoSch92 in #3018
- Add conversation_id to automation completion callback by @malhotra5 in #3012
Full Changelog: v1.19.0...v1.19.1
v1.19.0
What's Changed
- Enable ACPAgent on RemoteRuntime API by @simonrosenberg in #2190
- Make API breakage workflows fail loudly by @enyst in #2432
- Clarify REST contract deprecation policy by @enyst in #2433
- Highlight API breakage check comments more clearly by @enyst in #2434
- Enforce REST deprecation deadlines by @enyst in #2435
- Remove stale Python API workflow env by @enyst in #2442
- Run API breakage checks on push to main by @enyst in #2443
- Add rich package version 14.3.3 to dependency constraints by @yitao-li in #2414
- Export TokenUsage, page_iterator, and AsyncRemoteWorkspace as public SDK APIs by @enyst in #2445
- Fix apptainer workspace cleanup: kill zombie child processes. by @adityasoni9998 in #2450
- chore(deps): bump pyjwt from 2.11.0 to 2.12.0 by @dependabot[bot] in #2448
- Add docstring guidelines and fix key docstrings for MDX compatibility by @rbren in #2452
- ci: guard package version bumps outside release PRs by @enyst in #2457
- Fix: Add tags to root endpoint for OpenAPI spec by @rbren in #2458
- Fix Python selection in version-bump PR workflow by @neubig in #2430
- Revert PR #2190: Enable ACPAgent on RemoteRuntime API by @enyst in #2451
- test(sdk): reproduce delegate resume compatibility regression by @neubig in #2382
- Enforce REST API deprecation runway in breakage checks by @enyst in #2464
- Use version tag for agent server image in version bump prs by @aivong-openhands in #2427
- Enable ACPAgent on RemoteRuntime API via ACP conversation endpoints by @simonrosenberg in #2465
- Refine temperature/top_p handling for reasoning models by @mayeco in #2277
- chore(deps): bump authlib from 1.6.7 to 1.6.9 by @dependabot[bot] in #2475
- feat(prompt): add AI disclosure policy for external service communications by @xingyaoww in #2476
- feat(build): add OPENHANDS_BUILDKIT_CACHE_MODE env var to control cache export by @simonrosenberg in #2479
- fix: preflight check now validates reasoning_content for thinking models by @juanmichelini in #2420
- Migrate PR review plugin to extensions repository by @juanmichelini in #2324
- Remove multiswebench from CI eval workflow options by @juanmichelini in #2483
- chore(deps): bump pyasn1 from 0.6.2 to 0.6.3 by @dependabot[bot] in #2484
- Add GPT-5.4 to verified models by @juanmichelini in #2487
- fix: synchronize ACP telemetry and refresh remote final state by @simonrosenberg in #2460
- refactor(sdk/subagent): showing tools each subagent has by @VascoSch92 in #2480
- feat: workspace.get_llm() and get_secrets() for OpenHandsCloudWorkspace credential inheritance by @xingyaoww in #2409
- fix: cherry-pick cache_export_seconds telemetry fix to main by @simonrosenberg in #2493
- Add MiniMax-M2.7 to resolve_model_config.py by @juanmichelini in #2500
- chore(deps): bump pypdf from 6.8.0 to 6.9.1 by @dependabot[bot] in #2497
- fix(workflow): remove unused DATASET/SPLIT env vars from run-eval workflow by @VascoSch92 in #2504
- fix(ci): ignore Field deprecated metadata in API breakage check by @enyst in #2508
- chore: add Dependabot configuration for GitHub Actions updates by @aivong-openhands in #2501
- chore(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in #2520
- chore(deps): bump actions/download-artifact from 6 to 8 by @dependabot[bot] in #2517
- chore(deps): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #2519
- chore(deps): bump actions/github-script from 7 to 8 by @dependabot[bot] in #2521
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #2518
- fix(examples): make the LLM profile store example directory-based by @enyst in #2507
- refactor(llm): use litellm params for reasoning support by @enyst in #1990
- Expose terminalbench in run-eval workflow by @neubig in #2360
- fix(tools): return browser timeout as observation by @neubig in #2455
- Add Google Gemini 3.1 verify models by @mayeco in #2276
- feat(workflow): Expected instance_ids format (no spaces) by @VascoSch92 in #2502
- feat(sdk/agent): Parallel Tool Call Execution by @VascoSch92 in #2390
- fix(ci): ignore added Field metadata in SDK API breakage check by @enyst in #2524
- fix(workflow): Normalize instance_ids by stripping spaces instead of failing by @simonrosenberg in #2529
- feat(websocket): add after_timestamp filter for bi-directional event loading by @jpshackelford in #1880
- build: move SDK SHA args after expensive layers for cache reuse by @simonrosenberg in #2522
- Fix Qwen3.5-Flash low submission rate: improve JSON arg parsing and add corrective feedback by @juanmichelini in #2512
- feat(docker): make ACP npm package installation optional via build arg by @simonrosenberg in #2535
- feat(docker): make boto3 installation optional via build arg by @simonrosenberg in #2536
- feat(docker): add extra_build_args to BuildOptions by @simonrosenberg in #2541
- feat(plugin): Add entry_command field to PluginManifest by @jpshackelford in #2230
- Add
urlfield to PluginAuthor to match Claude Code schema by @jpshackelford in #2546 - feat(sdk): Add browser tool usage guidelines to system prompt by @VascoSch92 in #2547
- fix: use asyncio.Event() for thread-safe initialization state by @ixchio in #2383
- fix(sdk): stop sending reasoning_effort to Kimi thinking by @enyst in #2549
- fix: add diagnostics for preflight proxy failures by @simonrosenberg in #2557
- Fix run-eval to use locked LiteLLM dependency by @simonrosenberg in #2559
- fix(sdk): pin LiteLLM version exactly by @rbren in #2558
- fix(ci): rename PAT secret to PAT_TOKEN by @simonrosenberg in #2561
- fix(ci): use /v1/models for proxy health check instead of /health by @simonrosenberg in #2563
- feat: support pre-built base images for faster rebuilds by @simonrosenberg in #2542
- fix(ci): handle dict-valued json_schema_extra in API breakage checker by @enyst in #2568
- feat(sdk/subagent): Resolve ${VAR} env variables in all MCP server config fields by @VascoSch92 in #2492
- feat(sdk): allow acp_model for codex-acp by @simonrosenberg in #2562
- fix(ci): allow additive response oneOf expansion in oasdiff checker by @enyst in #2572
- refactor(tools): remove max_run by @VascoSch92 in htt...
v1.18.1
What's Changed
- feat(agent-server): add token-level streaming support to agent server WebSocket by @VascoSch92 in #2751
- fix(skills): Load installed skills in load_user_skills() by @sjathin in #2884
- chore(deps): bump python-multipart from 0.0.22 to 0.0.26 by @dependabot[bot] in #2878
- Add encryption support for mcp_config field in AgentBase by @tofarr in #2900
- Release v1.18.0 by @all-hands-bot in #2908
- fix(tools): Gracefully handle missing PS1 metadata instead of crashing by @VascoSch92 in #2742
- fix(llm): pin prompt_cache_key to conversation id by @VascoSch92 in #2907
- fix(llm): preserve Responses function_call.id for byte-identical repl… by @VascoSch92 in #2916
- fix(conversation): repin prompt_cache_key on switch_profile by @VascoSch92 in #2920
- Add cancel-eval workflow to kill evaluation jobs by @juanmichelini in #2914
- feat: add repository cloning and skill loading methods to OpenHandsCloudWorkspace by @malhotra5 in #2912
- fix(sdk): add security_risk to prompt-based tool calling example by @VascoSch92 in #2746
- feat: Add secrets support for MCP config variable expansion by @jpshackelford in #2873
- Fix CVE-2026-34444: Update lupa to 2.8 by @aivong-openhands in #2925
- fix: pin ACP npm package versions in agent-server Dockerfile by @simonrosenberg in #2927
- fix(security): first-message WebSocket auth to prevent token leakage by @simonrosenberg in #2790
Full Changelog: v1.18.0...v1.18.1
v1.18.0
What's Changed
- feat: Extensions module by @csmith49 in #2801
- fix: redact sensitive credentials from command logs by @simonrosenberg in #2815
- Release v1.17.0 by @all-hands-bot in #2812
- fix: override exclude-newer in version-bump-prs workflow by @xingyaoww in #2817
- fix: normalize Anthropic-style tool calls in the SDK agent path by @juanmichelini in #2685
- feat(observability): add init_laminar_for_external helper for webhook integrations by @juanmichelini in #2820
- test(agent-server): add regression test for tags forwarding on conversation create by @xingyaoww in #2822
- feat(agent-server): expose model switching (switch_profile) in agent-server REST API by @VascoSch92 in #2795
- feat(sdk): accept inline
system_promptkwarg on Agent by @xingyaoww in #2826 - Enforce test directory allowlist and fix orphaned tests by @xingyaoww in #2836
- chore(deps): bump pillow from 12.1.1 to 12.2.0 by @dependabot[bot] in #2832
- chore(deps): bump cryptography from 46.0.6 to 46.0.7 by @dependabot[bot] in #2833
- Integrate GraySwan security changes by @MadhaviSG in #2787
- chore(ci): bump poetry version to 2.3.3 in version-bump-prs workflow by @aivong-openhands in #2831
- fix: strip deployment prefixes from LiteLLM proxy model names by @jpshackelford in #2693
- fix(sdk): preserve security policy filename contract by @enyst in #2838
- chore(deps): bump dawidd6/action-download-artifact from 19 to 20 by @dependabot[bot] in #2764
- feat(pr-review): enable sub-agent delegation for file-level reviews by @xingyaoww in #2839
- chore(ci): use GITHUB_TOKEN for label and stale workflows by @simonrosenberg in #2844
- chore(deps-dev): bump pytest from 9.0.2 to 9.0.3 by @dependabot[bot] in #2834
- Add claude-opus-4-7 model support by @juanmichelini in #2852
- feat(terminal): standardize send_keys special key support across backends by @sjathin in #2807
- Persist ACP session id across agent-server restarts by @simonrosenberg in #2869
- feat(sdk/tools): add explicit invoke_skill tool for progressive-disclosure skills by @VascoSch92 in #2835
- reduce noise in laminar observability by @dinmukhamedm in #2871
- feat(sdk): split AgentSettings into LLM/ACP discriminated union by @simonrosenberg in #2861
- feat(acp): stream ACPToolCallEvents live from session_update by @simonrosenberg in #2868
- Make confirmation mode critical in conversation schema by @neubig in #2870
- chore(deps): bump lewagon/wait-on-check-action from 1.6.0 to 1.7.0 by @dependabot[bot] in #2842
- chore(deps): bump actions/github-script from 8 to 9 by @dependabot[bot] in #2843
- refactor(sdk): extract LLM response classification and dispatch from Agent.step() by @VascoSch92 in #2743
- feat: add title_llm_profile support for auto-titling by @simonrosenberg in #2515
- fix(acp): show the real model in logs and serialized state by @simonrosenberg in #2881
- feat: add Conversation.fork() as a first-class SDK primitive by @xingyaoww in #2841
- fix(sdk): reorder schema properties so security_risk precedes content fields by @VascoSch92 in #2745
- feat(workspace): make health_check_timeout configurable on DockerWorkspace and ApptainerWorkspace by @ixchio in #2688
- ci: use MAINTAINERS as reviewer assignment fallback by @enyst in #2875
- fix(ci): pass extensions-version so sub-agent review script is used by @xingyaoww in #2890
- Add kimi-k2.6 model to resolve_model_config.py by @juanmichelini in #2894
- fix(sdk/llm): Codex subscription mode: empty responses, rejected params, and reasoning item 404s by @VascoSch92 in #2798
- chore: use OPENHANDS_BOT_GITHUB_PAT_EVAL_DISPATCH for eval dispatch by @simonrosenberg in #2895
- chore: use OPENHANDS_BOT_GITHUB_PAT_PUBLIC in public-repo workflows by @simonrosenberg in #2898
- Change llm.base_url prominence from CRITICAL to MAJOR by @neubig in #2899
- fix(llm): pass stream_options to preserve cache token metrics in streaming mode by @xingyaoww in #2897
- test: use default agent preset for integration tests by @xingyaoww in #1996
New Contributors
- @MadhaviSG made their first contribution in #2787
Full Changelog: v1.17.0...v1.18.0