diff --git a/enterprise/release-notes.mdx b/enterprise/release-notes.mdx index c6efbafe..abf0bd4e 100644 --- a/enterprise/release-notes.mdx +++ b/enterprise/release-notes.mdx @@ -4,6 +4,192 @@ description: Release notes for OpenHands Enterprise icon: clipboard-list --- +## 0.55.0 + +This release centers on **daily conversation quotas** for Enterprise Server, which add a read-only usage page with a reset countdown, org-level exemptions, and self-service quota increase requests verified by work email. Enterprise installs also gain **dedicated sandbox node scheduling**, with declared app and sandbox node roles, affinity plumbing across all pod specs, a config option to turn it on, and a preflight check that warns when it is enabled without a matching node. Issue tracker coverage expanded through an org-scoped Jira Cloud resolver with an email-match mode and through Azure DevOps resolver webhook configuration. The Agent SDK added an Agent Plugins manifest loader, structured output, a pre-flight LLM validation endpoint, and read-at-use LLM provider connections, while the Runtime API now anchors runtime reaping, database pruning, and the idle-grace period on last activity rather than creation time. The remainder of the release covers extensive billing and credit-handling fixes and hardened Keycloak identity matching that keys on the Keycloak subject rather than email. + +### Enterprise Server + +#### Features +* feat(settings): increase LLM profile limit to 50 and make it configurable by @jpelletier1 in https://github.com/OpenHands/enterprise/pull/114 +* feat: add cloud workspace file-listing endpoint (OHE-3053) by @lilagrc in https://github.com/OpenHands/enterprise/pull/135 +* feat: Expose organization creation teaser UX by @malhotra5 in https://github.com/OpenHands/enterprise/pull/151 +* feat: set SaaS default model to Kimi K3 and migrate GLM 5.2 settings by @juanmichelini in https://github.com/OpenHands/enterprise/pull/190 +* feat: org-scope the Jira Cloud resolver and add email-match mode for OHE by @hieptl in https://github.com/OpenHands/enterprise/pull/192 +* feat(frontend): add data-testid to changes refresh button by @tofarr in https://github.com/OpenHands/enterprise/pull/203 +* feat: add daily conversation quota schema foundation by @neubig in https://github.com/OpenHands/enterprise/pull/180 +* feat: add read-only quota usage page with reset countdown by @neubig in https://github.com/OpenHands/enterprise/pull/199 +* feat: add work-email quota increase requests with self-service verification by @neubig in https://github.com/OpenHands/enterprise/pull/200 +* feat: add org-level daily conversation quota exemptions by @neubig in https://github.com/OpenHands/enterprise/pull/212 +* feat: accept Jira Cloud picker mentions of the service account by @ak684 in https://github.com/OpenHands/enterprise/pull/223 +* feat(settings): auto-rotate invalid managed LLM keys on settings writes by @tofarr in https://github.com/OpenHands/enterprise/pull/231 +* feat: migrate Kimi K3 settings to DeepSeek V4 Flash by @neubig in https://github.com/OpenHands/enterprise/pull/253 + +#### Bug Fixes +* fix: resolve LLM profile keys in /users/me expose-secrets response by @hieptl in https://github.com/OpenHands/enterprise/pull/168 +* fix: handle null identity_provider for direct Keycloak logins by @tofarr in https://github.com/OpenHands/enterprise/pull/169 +* fix: URL-encode Redis password in authed URL for coredis/limits by @tofarr in https://github.com/OpenHands/enterprise/pull/177 +* fix: close dropdown menu after selection when wrapped in a label by @hieptl in https://github.com/OpenHands/enterprise/pull/176 +* fix: stop redacting the Jira DC base URL in agent output by @hieptl in https://github.com/OpenHands/enterprise/pull/182 +* fix: inject Bitbucket DC server URL, repo URL, and token context into agent prompt by @hieptl in https://github.com/OpenHands/enterprise/pull/183 +* fix(auth): make Keycloak HTTP retries configurable by @neubig in https://github.com/OpenHands/enterprise/pull/186 +* fix: OHE-3100 : use sandbox_spec.working_dir instead of hardcoded /workspace by @tofarr in https://github.com/OpenHands/enterprise/pull/188 +* fix(auth): make LiteLLM management timeout configurable by @neubig in https://github.com/OpenHands/enterprise/pull/189 +* fix: handle null runtime context values by @ak684 in https://github.com/OpenHands/enterprise/pull/112 +* fix: use agent server as conversation creation source by @malhotra5 in https://github.com/OpenHands/enterprise/pull/156 +* fix: let managed LLM profiles take the org's current key on rotation by @dylan-openhands in https://github.com/OpenHands/enterprise/pull/178 +* fix(budgets): persist maintenance updates by @saurya in https://github.com/OpenHands/enterprise/pull/204 +* fix: let free-tier (no-credit) teams run $0-cost models by @juanmichelini in https://github.com/OpenHands/enterprise/pull/143 +* fix: protect personal organization billing credits by @saurya in https://github.com/OpenHands/enterprise/pull/167 +* fix(budgets): prevent per-user allowance renewal on sync by @saurya in https://github.com/OpenHands/enterprise/pull/205 +* fix: display usage monitoring timestamps in local time by @saurya in https://github.com/OpenHands/enterprise/pull/208 +* fix: use verified repo provider in Jira Cloud conversation start request by @ak684 in https://github.com/OpenHands/enterprise/pull/216 +* fix(billing): show personal-workspace credits without a member budget row by @aivong-openhands in https://github.com/OpenHands/enterprise/pull/218 +* fix: clarify Jira email-visibility guidance with exact setting and delay by @ak684 in https://github.com/OpenHands/enterprise/pull/222 +* fix(enterprise): match provisioned user on Keycloak sub, not email by @tofarr in https://github.com/OpenHands/enterprise/pull/224 +* fix(enterprise): match on Keycloak sub in TOCTOU idempotent recovery too by @tofarr in https://github.com/OpenHands/enterprise/pull/225 +* fix(enterprise): await session.merge in billing success callback by @tofarr in https://github.com/OpenHands/enterprise/pull/226 +* fix: OHE-3127 : return null credits instead of 503 when budget is None by @tofarr in https://github.com/OpenHands/enterprise/pull/228 +* fix: return 0 credits instead of None for users without a budget by @tofarr in https://github.com/OpenHands/enterprise/pull/238 +* fix(settings): stop a member's settings save writing to the whole org by @jlav in https://github.com/OpenHands/enterprise/pull/254 + +#### Maintenance +* chore: remove dead localStorage feature-flag mechanism by @tofarr in https://github.com/OpenHands/enterprise/pull/230 +* docs: Replace with Polyform License by @jpelletier1 in https://github.com/OpenHands/enterprise/pull/240 + +--- + +### Software Agent SDK + +#### Features +* Feat: structured output by @luciobaiocchi in https://github.com/OpenHands/software-agent-sdk/pull/4207 +* agent-server: make conversation worktree root configurable by @xmrflipflop in https://github.com/OpenHands/software-agent-sdk/pull/4362 +* feat(observability): emit LLM and TOOL spans for ACP turns by @simonrosenberg in https://github.com/OpenHands/software-agent-sdk/pull/4376 +* feat: derive automation conversation tags in base RemoteWorkspace by @hieptl in https://github.com/OpenHands/software-agent-sdk/pull/4414 +* feat: emit canonical conversation telemetry from agent server by @malhotra5 in https://github.com/OpenHands/software-agent-sdk/pull/4459 +* feat(hooks): implement prompt-based evaluation by @onatozmenn in https://github.com/OpenHands/software-agent-sdk/pull/4160 +* feat(security): AST-backed shell command-name resolution (#2721 Phase 2b) by @eeee2345 in https://github.com/OpenHands/software-agent-sdk/pull/3944 +* feat: add public from_persisted() entry point to AgentSettingsBase by @mvanhorn in https://github.com/OpenHands/software-agent-sdk/pull/3503 +* feat(sdk): add cleanup LLM profile for outward agent text by @smolpaws in https://github.com/OpenHands/software-agent-sdk/pull/4344 +* feat(llm): resolve provider-specific runtime metadata for routed models by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4423 +* feat: add pre-flight LLM validation endpoint (POST /api/profiles/{name}/validate) by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4422 +* feat: carry ConversationErrorEvent on ConversationRunError for automation callbacks by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4458 +* feat(plugin): add Agent Plugins manifest loader (root plugin.json, closed schema) by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4474 +* feat(file-router): add POST /file/create_directory by @georgeglarson in https://github.com/OpenHands/software-agent-sdk/pull/4482 +* Add read-at-use LLM provider connections by @juanmichelini in https://github.com/OpenHands/software-agent-sdk/pull/4492 +* feat: Add deployment kind to agent-server telemetry by @malhotra5 in https://github.com/OpenHands/software-agent-sdk/pull/4522 +* feat(telemetry): identify automation conversations by @malhotra5 in https://github.com/OpenHands/software-agent-sdk/pull/4529 +* feat(tools): add structured task outcome preset by @malhotra5 in https://github.com/OpenHands/software-agent-sdk/pull/4479 +* feat(prompt): mention local conversation history by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4527 + +#### Bug Fixes +* fix(mcp): close reconciliation gaps left by #4367 by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4369 +* fix(acp): recover credential monitor after transient errors by @simonrosenberg in https://github.com/OpenHands/software-agent-sdk/pull/4403 +* fix(sdk): make ACP auth failures self-diagnosing by @simonrosenberg in https://github.com/OpenHands/software-agent-sdk/pull/4404 +* fix(observability): record non-executed tool results by @simonrosenberg in https://github.com/OpenHands/software-agent-sdk/pull/4415 +* fix(agent-server): compose ConversationInfo off the event loop to avoid GC wedge by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4417 +* fix(agent-server): initialize observability after deferred env by @Shimada666 in https://github.com/OpenHands/software-agent-sdk/pull/4426 +* fix(settings): inherit condenser max_tokens from LLM effective_max_input_tokens by @vnktadithya in https://github.com/OpenHands/software-agent-sdk/pull/4435 +* fix(goal): don't halt the goal loop on a STUCK run by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/4381 +* fix(llm): stop serializing calls through global config by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4473 +* fix(security-scan): improve release security scan comment by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/4397 +* fix(profiles): repair v1 skills migration by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4320 +* fix(agent-server): base_state.json as single source of truth for the agent (end meta.json duplication) by @enyst in https://github.com/OpenHands/software-agent-sdk/pull/4440 +* fix(sdk): cap condenser token limit by agent context by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4461 +* fix(agent-server): move bash event search off event loop and replace glob with scandir by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4481 +* fix: redact API key from validate_profile error responses and logs by @all-hands-bot in https://github.com/OpenHands/software-agent-sdk/pull/4506 +* fix: make dict-entry secret redaction case-insensitive by @chintan-diwakar in https://github.com/OpenHands/software-agent-sdk/pull/4508 +* fix(agent-server): propagate out-of-band run failures as ConversationErrorEvent (#16686) by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4535 +* fix(sdk): normalize Kimi K3 vision metadata by @malhotra5 in https://github.com/OpenHands/software-agent-sdk/pull/4567 +* fix(agent): keep terminal prefix aliases from doubling an existing executable by @onatozmenn in https://github.com/OpenHands/software-agent-sdk/pull/4471 +* fix(sdk): resolve workspace default from active LLM profile by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4497 + +#### Maintenance +* chore: drop the OpenHands/OpenHands bump-PR target from version-bump-prs.yml by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4400 +* refactor(plugin): extract PluginFormat strategy (prep for Agent Plugins support) by @jpshackelford in https://github.com/OpenHands/software-agent-sdk/pull/4420 +* chore(ci): collapse the auto-posted Agent Server images PR section by @smolpaws in https://github.com/OpenHands/software-agent-sdk/pull/4442 +* Add ready-for-dev issue and PR gates by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4464 +* test(terminal): stabilize Windows Ctrl-C cleanup assertion by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4290 +* perf(agent-server): cache unchanged conversation summaries by @neubig in https://github.com/OpenHands/software-agent-sdk/pull/4483 +* ci: re-run PR description check when new commits are pushed by @VascoSch92 in https://github.com/OpenHands/software-agent-sdk/pull/4486 +* Weekly test sweep: remove low-value tests + simplify by @enyst in https://github.com/OpenHands/software-agent-sdk/pull/4484 +* test(sdk): pin events_to_messages boundaries + fix responses_reasoning_item batch drop by @georgeglarson in https://github.com/OpenHands/software-agent-sdk/pull/4526 +* test(sdk): pin send_message skill-activation wiring by @georgeglarson in https://github.com/OpenHands/software-agent-sdk/pull/4536 + +--- + +### Runtime API + +#### Bug Fixes +* fix: anchor runtime reaping and DB pruning on last activity, not creation time by @hieptl in https://github.com/OpenHands/runtime-api/pull/707 +* fix: anchor the idle-grace period on last_state_change, not created_at by @hieptl in https://github.com/OpenHands/runtime-api/pull/713 +* fix: OHE-3100 : root-owned working_dir subdirs on PVC via init container by @tofarr in https://github.com/OpenHands/runtime-api/pull/714 +* fix: reorder cleanup phases and resume expired deployment list tokens by @dylan-openhands in https://github.com/OpenHands/runtime-api/pull/712 + +--- + +### Automation + +#### Features +* feat(automation): tag local automation conversations by @neubig in https://github.com/OpenHands/automation/pull/319 +* feat: sync automations to a git repository by @VascoSch92 in https://github.com/OpenHands/automation/pull/327 +* feat: accept catalog bundle automations on the raw create path by @VascoSch92 in https://github.com/OpenHands/automation/pull/346 + +#### Bug Fixes +* fix: stop marking successful automation runs as FAILED by @hieptl in https://github.com/OpenHands/automation/pull/331 + +#### Maintenance +* chore: add success logging for tarball storage writes and deletes by @jpshackelford in https://github.com/OpenHands/automation/pull/335 +* chore: remove QA changes workflow by @neubig in https://github.com/OpenHands/automation/pull/340 + +--- + +### OpenHands Cloud (Helm Chart) + +#### Features +* feat: e2e: restructure for Keycloak admin + dual GitHub user flows by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1089 +* feat: add configurable daily conversation limit to chart by @neubig in https://github.com/OpenHands/OpenHands-Cloud/pull/1100 +* feat: wire Jira Cloud email-match integration for Replicated installs by @ak684 in https://github.com/OpenHands/OpenHands-Cloud/pull/1113 +* feat: add org-management e2e suite with super-admin REST provisioning by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1122 +* feat(replicated): declare app and sandbox node roles by @jlav in https://github.com/OpenHands/OpenHands-Cloud/pull/1133 +* feat(chart): add affinity plumbing to all pod specs by @jlav in https://github.com/OpenHands/OpenHands-Cloud/pull/1134 +* feat(replicated): gate dedicated sandbox nodes behind a config option by @jlav in https://github.com/OpenHands/OpenHands-Cloud/pull/1135 +* feat(preflight): warn when dedicated sandbox nodes are enabled with no sandbox node by @jlav in https://github.com/OpenHands/OpenHands-Cloud/pull/1136 +* feat(replicated): PLTF-3461 configure duplicate email checks by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1139 +* feat(azure-devops): wire the resolver webhook secret into the chart and KOTS config by @ak684 in https://github.com/OpenHands/OpenHands-Cloud/pull/1160 + +#### Bug Fixes +* fix: Bound Laminar ClickHouse diagnostic log retention by @juanmichelini in https://github.com/OpenHands/OpenHands-Cloud/pull/1031 +* fix: wire installer SMTP config into Keycloak realm email by @hieptl in https://github.com/OpenHands/OpenHands-Cloud/pull/1090 +* fix(e2e): handle onboarding-form and 2FA auto-navigate race conditions by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1091 +* fix(e2e): enable role during static discovery by @saurya in https://github.com/OpenHands/OpenHands-Cloud/pull/1099 +* fix(e2e): replace networkidle waits and fix Promise.race short-circuit by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1108 +* fix(automation): keep events service available during node drains by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1112 +* fix: refresh changes panel when empty in VSCode integration test by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1114 +* fix(e2e): order API keys spec after billing so new-user has credits by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1118 +* fix(e2e): PLTF-3461 honor AUTH_BASE_URL for Keycloak admin URL by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1126 +* fix(chart): set the warm pool working dir to /workspace/project by @jlav in https://github.com/OpenHands/OpenHands-Cloud/pull/1140 +* fix(deploy): tolerate a restarting kotsadm in replicated_deploy.sh by @dylan-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1141 +* fix(e2e): PLTF-3461 move the credit-gated API key check into the billing suite by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1143 +* fix(ci): PLTF-3461 call the E2E trigger from each release workflow by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1144 + +#### Maintenance +* test(e2e): add Playwright release harness by @saurya in https://github.com/OpenHands/OpenHands-Cloud/pull/1048 +* test(e2e): cover organization-scoped member API keys by @saurya in https://github.com/OpenHands/OpenHands-Cloud/pull/1049 +* test(e2e): add optional ReportPortal reporting by @saurya in https://github.com/OpenHands/OpenHands-Cloud/pull/1088 +* test(e2e): make returning/new-user roles opt-in via *_GITHUB_USERNAME by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1092 +* test(e2e): migrate Stripe credit purchase into billing suite by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1094 +* test(e2e): migrate home avatar and user-menu tests by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1095 +* test(e2e): remove example.spec.ts by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1096 +* test(e2e): migrate API key creation and API access test by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1097 +* test(e2e): migrate legacy conversation control tests by @tofarr in https://github.com/OpenHands/OpenHands-Cloud/pull/1101 +* ci: auto-deploy Replicated releases to internal instances by @dylan-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1123 +* ci: PLTF-3461 run E2E after Replicated deploys by @aivong-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1129 +* ci: name the Replicated release workflows consistently for README badges by @dylan-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1131 +* ci: fix unparseable expression in deploy-replicated, lint workflows in CI by @dylan-openhands in https://github.com/OpenHands/OpenHands-Cloud/pull/1132 + +--- + ## 0.45.0 This release introduces **Canvas Extensions**, a major new capability that enables installing, managing, and refreshing extensions with manifest support and persistent storage. The Agent SDK saw significant improvements with conversation error classification, accumulated LLM cost tracking, and observability enhancements including detached traces for delegate conversations. The Automation component was modernized with the retirement of the standalone frontend, enhanced preset metadata, and LLM cost tracking. Critical stability fixes addressed S3/MinIO silent truncation issues, improved CSP compatibility for the Monaco diff viewer, and enhanced secrets handling across the platform.