Compare commits

..

1167 Commits

Author SHA1 Message Date
openhands
215e769735 fix: remove dead params from file generator, add timezone validation
- Remove unused repository and branch parameters from generate_automation_file()
- Add field_validator for timezone in CronTriggerModel using zoneinfo.ZoneInfo

Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-11 18:34:15 +00:00
openhands
03a816333b fix: align model server_default with migration (use text CURRENT_TIMESTAMP) 2026-03-11 18:22:50 +00:00
openhands
54433c5dae fix: rewrite publisher tests to use real imports, remove dead JSONB import
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-11 18:11:51 +00:00
openhands
9269d045c8 fix: migration JSONB consistency, docstring escaping edge case, add name triple-quote test
- Replace sa.dialects.postgresql.JSONB() with sa.JSON() in migration for
  consistency with model definitions
- Sanitize name in docstring by replacing double quotes with single quotes
  to prevent triple-quote breakage
- Add test_triple_quotes_in_name test case

Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-11 17:53:35 +00:00
openhands
29d8990263 fix: address review feedback on automation data foundation
- Verify migration down_revision='099' is correct (no change needed)
- Change automation_events.id to BigInteger (BIGSERIAL) in migration and models
- Change event_id FK to BigInteger in AutomationRun
- Fix ix_automation_events_new index to be on created_at instead of status
- Fix updated_at to use func.now() for timezone-aware datetime
- Replace custom cron regex with croniter.is_valid() for validation
- Fix file generator escaping bug using repr() for safe string handling
- Add triple-quote test for file generator
- Add publisher tests (test_automation_event_publisher.py)
- Update test assertions to match new croniter error message

Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-11 08:27:09 +00:00
openhands
0c9af8290f [Automations Phase 1] Task 1: Data Foundation
- Add AUTOMATION variant to ConversationTrigger enum
- Create Automation and AutomationRun SQLAlchemy models (enterprise/storage/automation.py)
- Create AutomationEvent SQLAlchemy model (enterprise/storage/automation_event.py)
- Create Alembic migration 100 for automation tables with indexes
- Create automation config extraction and Pydantic validation (enterprise/services/automation_config.py)
- Create automation file generator (enterprise/services/automation_file_generator.py)
- Create automation event publisher with pg_notify (enterprise/services/automation_event_publisher.py)
- Add comprehensive unit tests (31 tests, all passing)
- Add croniter dependency to enterprise pyproject.toml

Part of RFC: https://github.com/OpenHands/OpenHands/issues/13275

Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-10 18:39:44 +00:00
Juan Michelini
5e5950b091 Add Gemini-3.1-Pro-Preview model support to frontend (#13253)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2026-03-10 16:18:13 +00:00
John-Mason P. Shackelford
c7ff560465 Fix getGitPath to handle nested GitLab group paths (#13006)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-10 11:12:08 -05:00
Joe Laverty
3432bbbb88 fix: Remove N+1 request from Bitbucket Data Center integration (#13281) 2026-03-10 11:08:30 -05:00
Hiep Le
fc24be2627 fix(frontend): preserve login_method param to enable session re-authentication (#13310) 2026-03-10 22:52:40 +07:00
Hiep Le
bc72b38d6e fix(backend): propagate LLM settings to all org members when admin saves settings (#13326) 2026-03-10 22:52:01 +07:00
Dream
145f1266e6 feat(frontend): create a separate UI tab for monitoring tasks (#13065)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-03-10 22:31:38 +07:00
Rohit Malhotra
e12dd924ce feat(slack): implement repo selection with external_select for pagination (#13273)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-09 16:04:49 -04:00
Tim O'Farrell
598b381e3d Added fallback for sandbox spec service (#13317)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-09 12:21:52 -06:00
Ray Myers
698cfc2520 fix: sanitize file_path in git diff shell commands to prevent command injection (#13051)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-09 17:29:25 +00:00
Xingyao Wang
8356170193 Fix stale Docker image tags & add version consistency CI + update-sdk skill (#13315)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-09 17:23:30 +00:00
mamoodi
fe2e50fc7d Use tag version instead of commit for agent server image (#13312) 2026-03-09 10:46:21 -04:00
aivong-openhands
ef840b046a remove mcp version check for cve_2025_66416 (#13277) 2026-03-09 09:38:44 -05:00
Tim O'Farrell
c8fe39b176 Upgrading SDK to 1.12.0 (#13248) 2026-03-09 21:06:12 +07:00
Ray Myers
8c46df6b59 fix: asyncpg, device key timestamp without timezone, error reporting (#13301)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-08 12:56:59 -05:00
Engel Nyst
b37adbc1e6 Remove deprecated reset-settings endpoint (#13298)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-08 13:11:35 +01:00
Tim O'Farrell
3ec999e88a Fix LiteLLM key management and user migration SQL queries (#13279)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 21:48:19 -07:00
Jamie Chicago
d1c2185d99 [fix] update welcome email to new cloud sign ups (#13254)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 15:24:55 -06:00
Joe Laverty
ede203add3 feat(enterprise): Bitbucket Data Center Integration (#13228)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 10:49:20 -06:00
aivong-openhands
b0cdd0358f fix: add mcp>=1.25 constraint and CVE-2025-66416 tests (#13247)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-03-06 10:31:46 -06:00
Tim O'Farrell
6186685ebc Refactor user authorization: Replace domain blocklist with flexible whitelist/blacklist pattern matching (#13207)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 09:10:59 -07:00
jpelletier1
2d7362bf26 refactor: update skills to Agent Skills format (#13267)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 09:22:28 -05:00
Povo43
1f1fb5a954 fix(i18n): correct Japanese translation strings (#13261) 2026-03-06 14:15:27 +04:00
Chris Bagwell
41d8bd28e9 fix: preserve llm_base_url when saving MCP server config (#13225) 2026-03-06 02:39:58 +01:00
Rohit Malhotra
6c394cc415 Add rate limiting to verification emails during OAuth flow (#13255)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-05 19:10:25 -05:00
Rohit Malhotra
4c380e5a58 feat: Add timeout handling for Slack repo query (#13249)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-06 00:02:04 +00:00
Chris Bagwell
ded0363e36 fix: ensure VSCode tab popout works for V1 (#13118) 2026-03-06 00:53:15 +01:00
Juan Michelini
d8444ef626 Add Qwen3-Coder-Next model support to frontend (#13222)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-05 19:34:06 -03:00
Juan Michelini
64e96b7c3c Add Kimi-K2.5 model support to frontend (#13227)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-05 19:33:59 -03:00
aivong-openhands
dcef5ae1f1 Fix CVE-2026-0540: Override dompurify to version 3.3.2 (#13230)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-03-05 14:42:20 -06:00
aivong-openhands
cfbf29f6e8 chore: downgrade fastmcp to 2.12.4 in uv.lock (#13240)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-03-05 14:42:01 -06:00
sp.wack
59b369047f Revert "Fix dark background in chat status row hiding message content" (#13239) 2026-03-05 19:40:06 +04:00
Hiep Le
07468e39f7 feat(frontend): disable the create a plan button when users are using the planning agent (#13234) 2026-03-05 22:19:50 +07:00
Hiep Le
0b0bfdff05 feat(frontend): add the build button to the planner tab (#13235) 2026-03-05 22:19:14 +07:00
aivong-openhands
42b0a89366 Fix CVE-2026-28802: Update authlib to 1.6.7 (#13229)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-03-05 08:56:47 -06:00
layla
e78d7de0c0 Fix dark background in chat status row hiding message content (#13236) 2026-03-05 18:47:11 +04:00
Juan Michelini
6751bba939 Add GLM-5 model support to frontend (#13213)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-03-05 18:44:33 +04:00
aivong-openhands
039e966dad update mcp to 1.25.0 in uv lock (#13231) 2026-03-05 07:42:24 -06:00
Juan Michelini
a1f73bb4c6 Add Claude-Sonnet-4-6 model support to frontend (#13224)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 21:13:30 -03:00
Rohit Malhotra
bf769d1744 Handle deleted GitHub issues (410 error) gracefully (#13217)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 15:50:37 -05:00
Tim O'Farrell
15e9435b35 Remove ExperimentManager concept from codebase (#13215)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 13:41:18 -07:00
Rohit Malhotra
3e15b849a3 Downgrade solvability disabled log from warning to info (#13216)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 15:26:21 -05:00
Rohit Malhotra
c32934ed2f Improve budget exceeded error handling in V1 callback processors (#13219)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 15:25:46 -05:00
Hiep Le
518fb2ee24 fix(frontend): hide add team members button when anonymous analytics is disabled (#13209) 2026-03-05 02:03:47 +07:00
Hiep Le
eeac9f14a3 fix(backend): allow deleting an organization after recent changes (#13200) 2026-03-05 01:52:33 +07:00
Rohit Malhotra
039e208167 Fix enterprise mypy type checking to catch type mismatches (#13140)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 13:43:46 -05:00
Hiep Le
6f8bf24226 feat: hide the users, billing, and integration pages for self-hosted customers (#13199) 2026-03-05 01:24:06 +07:00
Rohit Malhotra
6e9e906946 Remove dead test code for non-existent update_common_room_signal function (#13211)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 13:20:25 -05:00
Rohit Malhotra
30245dedef Fix mypy type errors in enterprise/integrations/github/github_manager.py (#13208)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 13:19:48 -05:00
Rohit Malhotra
3bf019b045 Fix mypy type errors in enterprise/server/auth and clustered_conversation_manager (#13210)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 18:19:01 +00:00
Rohit Malhotra
ab02c73c7c Fix mypy type errors in enterprise/storage/ (#13204)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 13:17:21 -05:00
Rohit Malhotra
b8db9ecd53 Fix mypy type errors in enterprise GitLab integration (#13205)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 16:13:16 +00:00
Rohit Malhotra
b86b2f16af Fix mypy type errors in enterprise/server/routes/billing.py and api_keys.py (#13196)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 11:06:26 -05:00
Juan Michelini
a11435b061 Add GLM-4.7 model support to frontend (#13202)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 15:40:15 +00:00
Engel Nyst
f01c8dd955 V1 resolver: move PR/issue context into initial user message (#12983)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 10:21:08 -05:00
Rohit Malhotra
baae3780e5 Fix mypy type errors in enterprise/integrations/github/ (#13191)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 10:04:36 -05:00
Rohit Malhotra
1fb28604e6 Fix mypy type errors in server/services and storage/org_service (#13190)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-04 10:04:27 -05:00
Tim O'Farrell
8dac1095d7 Refactor user_store.py to use async database sessions (#13187)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 17:51:53 -07:00
Rohit Malhotra
222e8bd03d Fix linear-related mypy type errors and make Manager.start_job async (#13189)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 19:00:53 -05:00
aivong-openhands
0ae9128ed7 Fix CVE-2025-69223: Update aiohttp to 3.13.3 (#13008)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-03-03 17:43:05 -06:00
Tim O'Farrell
4fc5351ed7 Refactor openhands_pr_store.py to use async db sessions (#13186)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 16:38:41 -07:00
Rohit Malhotra
a1271dc129 Fix mypy type errors in token_manager.py and auth_token_store.py (#13179)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-03-03 23:37:38 +00:00
Tim O'Farrell
45b970c0dd Refactor RoleStore to fully async (#13184)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 16:01:20 -07:00
Rohit Malhotra
4688741324 Fix Slack integration mypy type errors (#13177)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 17:44:20 -05:00
Rohit Malhotra
79a0cee7d9 Fix mypy type errors in Jira integration (#13181)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 17:43:44 -05:00
mamoodi
d19ba0d166 Clarify upcoming-release skill (#13185) 2026-03-03 16:01:32 -06:00
mamoodi
63654c4643 Add a new upcoming-release skill (#13180) 2026-03-03 16:15:55 -05:00
Tim O'Farrell
2f11f6a39a refactor(enterprise): Convert OrgMemberStore to fully async (#13173)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 20:26:07 +00:00
Rohit Malhotra
5cad59a661 Fix UserData validation error when GitHub user has no OpenHands account (#13135)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 20:22:57 +00:00
Rohit Malhotra
6dff07ea35 Fix union-attr mypy errors in enterprise code (#13176)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 20:22:54 +00:00
mamoodi
117ea0466d Add script that outputs the PRs between two commits (#13175) 2026-03-03 15:18:55 -05:00
Rohit Malhotra
6822169594 Fix type signatures for mypy compliance + V1 GitLab Support (#13171)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 20:03:45 +00:00
dependabot[bot]
35024aeffe chore(deps): bump pypdf from 6.7.3 to 6.7.5 (#13157)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: aivong-openhands <ai.vong@openhands.dev>
2026-03-03 12:45:43 -06:00
Rohit Malhotra
a051f7d6f6 Add generic type hints to manager class declarations (#13174)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 12:19:12 -05:00
Rohit Malhotra
4fe3da498a Fix GitLab integration type errors for mypy compliance (#13172)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 12:19:05 -05:00
Rohit Malhotra
b890e53a6e Fix UserAuth vs SaasUserAuth type annotations (#13149)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 11:14:10 -05:00
aivong-openhands
8aa730105a Fix CVE-2023-36464 update openhands-aci in enterprise poetry lock to remove pypdf2 (#13170) 2026-03-03 10:01:43 -06:00
Pierrick Hymbert
e7934ea6e5 feat(bitbucket): supports cloud and server APIs (#11052)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
Co-authored-by: Chris Bagwell <chris@cnpbagwell.com>
Co-authored-by: CHANGE <joe.laverty@openhands.dev>
Co-authored-by: Joe Laverty <jlav@users.noreply.github.com>
2026-03-03 10:51:43 -05:00
aivong-openhands
a927b9dc73 Fix CVE-2023-36464 update to openhands-aci 0.3.3 to remove pypdf2 (#13142) 2026-03-03 09:19:50 -06:00
aivong-openhands
0b9fd442bd chore: update uv lock and enterprise poetry lock to replace python-jose with jwcrypto (#13105)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 09:19:30 -06:00
Tim O'Farrell
501bf64312 Make SlackTeamStore fully async (#13160)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 07:07:44 -07:00
Hiep Le
6f1a7ddadd fix(backend): resolve timezone mismatch in validate_api_key causing database error (#13158) 2026-03-03 20:54:10 +07:00
Tim O'Farrell
f3026583d7 Refactor enterprise code to use async database sessions (Round 3) (#13148)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 06:35:19 -07:00
Tim O'Farrell
4a3a42c858 refactor(enterprise): make OrgStore fully async (#13154)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-03-03 10:47:22 +00:00
Hiep Le
2d057bb7b4 fix(backend): resolve timezone mismatch in accept_tos causing database error (#13155) 2026-03-03 17:08:11 +07:00
bendarte
a7a4eb2664 fix(ui): sync pin/unpin state across conversation tabs (#12884) (#12932)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-03-03 16:33:28 +07:00
chuckbutkus
0c7ce4ad48 V1 Changes to Support Path Based Routing (#13120)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 22:37:37 -05:00
Rohit Malhotra
4dab34e7b0 fix(enterprise): fix type errors - missing returns and async interface (#13145)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 00:37:22 +00:00
Rohit Malhotra
f8bbd352a9 Fix typing: make Message a dict instead of dict | str (#13144)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-03 00:30:22 +00:00
Tim O'Farrell
17347a95f8 Make load_org_token and store_org_token async in TokenManager (#13147)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 17:08:21 -07:00
Graham Neubig
01ef87aaaa Add logging when sandbox is assigned to conversation (#13143)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 17:36:49 -05:00
Hiep Le
8059c18b57 fix(backend): update planning agent to direct users to the build button instead of asking ready to proceed (#13139) 2026-03-03 03:31:29 +07:00
Tim O'Farrell
c82ee4c7db refactor(enterprise): use async database sessions in feedback routes (#13137)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 13:17:44 -07:00
Tim O'Farrell
7fdb423f99 feat(enterprise): convert DeviceCodeStore to async (#13136)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 12:56:41 -07:00
dependabot[bot]
530065dfa7 chore(deps): bump pillow from 12.1.0 to 12.1.1 in uv lock and enterprise poetry lock (#13101)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 13:56:13 -06:00
Hiep Le
a4cd2d81a5 fix(backend): use run_coroutine_threadsafe for conversation update callbacks (#13134) 2026-03-03 02:07:32 +07:00
Tim O'Farrell
003b430e96 Refactor: Migrate remaining enterprise modules to async database sessions (#13124)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 11:52:00 -07:00
Graham Neubig
d63565186e Add Claude Opus 4.6 model support (#12767)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: neubig <neubig@users.noreply.github.com>
2026-03-02 13:12:48 -05:00
Hiep Le
5f42d03ec5 fix(backend): jira cloud integration does not work (#13123) 2026-03-02 22:05:29 +07:00
Mohammed Abdulai
62241e2e00 Fix: OSS suggested tasks empty state (#12563)
Co-authored-by: Mohammed Abdulai <nurud43@gmail.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-03-02 18:45:29 +07:00
Neha Prasad
f5197bd76a fix: prevent double scrollbar when profile avatar popover is shown (#13115)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-03-02 18:14:04 +07:00
Tim O'Farrell
e1408f7b15 Add timeout to Keycloak operations and convert OfflineTokenStore to async (#13096)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-03-02 01:48:45 -07:00
Shruti1128
d6b8d80026 Remove unused subscription-related frontend code (#12557) 2026-03-01 21:14:00 +01:00
Hiep Le
1e6a92b454 feat(backend): organizations llm settings api (org project) (#13108) 2026-03-02 00:06:37 +07:00
Hiep Le
b4a3e5db2f feat(backend): saas – organizations app settings api (#13022) 2026-03-01 23:26:39 +07:00
Chris Bagwell
f9d553d0bb Pass container port instead of host port to Docker (#12595)
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-02-28 17:45:16 +01:00
Tim O'Farrell
f6f6c1ab25 refactor: use SQL filtering and pagination in VerifiedModelStore (#13068)
Co-authored-by: bittoby <brianwhitedev1996@gmail.com>
Co-authored-by: statxc <statxc@user.noreply.github.com>
Co-authored-by: bittoby <bittoby@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-28 07:37:11 -07:00
Hiep Le
c511a89426 feat(frontend): display Bitbucket signup disabled message on login page (#13100) 2026-02-28 19:26:16 +07:00
HeyItsChloe
1f82ff04d9 feat(frontend): SaaS NUE profile questions /Onboarding flow (#13029)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-28 13:27:22 +07:00
HeyItsChloe
eec17311c7 fix(frontend): bitbucket icon color (#13106)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-28 12:12:45 +07:00
Nelson Spence
c34fdf4b37 fix(security): extend action type coverage in security check (#12870)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-02-28 05:44:29 +01:00
Engel Nyst
25076ee44c chore: mark security/ and resolver/ as Legacy V0 (#13062)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-28 04:22:47 +01:00
aivong-openhands
baaec8473a Fix CVE-2024-23342: Replace python-jose with jwcrypto (#13012)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-27 22:15:23 +00:00
dependabot[bot]
402fa47422 chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5 in /frontend in the security-all group across 1 directory (#13098)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 14:15:41 -06:00
dependabot[bot]
8dde385843 chore(deps): bump pypdf from 6.7.2 to 6.7.3 (#13099)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-27 13:32:02 -06:00
aivong-openhands
a905e35531 Fix CVE-2026-25990: Update pillow to 12.1.1 (#13024)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-27 12:37:25 -06:00
dependabot[bot]
1f185173b7 chore(deps): bump pypdf to 6.7.2 (#13072)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: aivong-openhands <ai.vong@openhands.dev>
2026-02-27 08:35:25 -06:00
dependabot[bot]
ddc7a78723 chore(deps): bump rollup from 4.57.0 to 4.59.0 in /frontend in the security-all group across 1 directory (#13078)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 08:29:19 -06:00
Dream
a29ed4d926 feat(frontend): display Agent Skills and Commands in slash menu (#12982)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-27 20:46:38 +07:00
Hiep Le
b8ab4bb44e feat(backend): allow owners to edit owners and admins to edit admins (org project) (#13095) 2026-02-27 16:01:05 +07:00
Hiep Le
ddd544f8d6 feat(backend): saas users app settings api (#13021) 2026-02-27 13:01:03 +07:00
mamoodi
3804b66e32 Remove blank issue creation (#13090) 2026-02-26 16:56:13 -05:00
John-Mason P. Shackelford
b97adf392a docs: Add plugin launch flow design document (#13084)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-02-26 14:03:40 -05:00
Saurya Velagapudi
dcb584913a Fix CVE-2026-26007: Update cryptography to 46.0.5 (#13059)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-26 09:45:54 -06:00
dependabot[bot]
d2fd54a083 chore(deps): bump the security-all group across 1 directory with 2 updates (#13069)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: aivong-openhands <ai.vong@openhands.dev>
2026-02-26 09:39:44 -06:00
Tim O'Farrell
112d863287 refactor: Remove unused Google Sheets integration from UserVerifier (#13076)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-26 08:07:38 -07:00
Hiep Le
c8680caec3 fix: db migration (#13074) 2026-02-26 21:20:08 +07:00
sp.wack
d4b9fb1d03 fix(backend): user email capture (#12902)
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-26 17:29:30 +04:00
Tim O'Farrell
409df1287d Fix api key access (#13064)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-26 06:22:23 -07:00
BitToby
a92bfe6cc0 feat: add database-backed verified models for dynamic model managemen… (#12833)
Co-authored-by: statxc <statxc@user.noreply.github.com>
Co-authored-by: bittoby <bittoby@users.noreply.github.com>
2026-02-26 06:17:18 -07:00
Hiep Le
f93e3254d3 refactor(frontend): remove feature flag (planning agent) (#12880) 2026-02-26 18:44:26 +07:00
Tim O'Farrell
0476d57451 fix: properly extract redirect URL from OAuth state in keycloak_offline_callback (#13063)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-26 03:23:40 -07:00
Hiep Le
a4cd21e155 refactor(frontend): hide microagent management ui (#13060) 2026-02-26 17:13:37 +07:00
aivong-openhands
7f3af371d1 protobuf pypdf uv lock updates (#13045) 2026-02-25 14:19:16 -06:00
aivong-openhands
1421794c1b Fix CVE-2026-26007: Update cryptography to 46.0.5 (#13009)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-25 14:18:16 -06:00
aivong-openhands
2fc689457c Fix CVE-2026-24486: Update python-multipart to 0.0.22 (#13015)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-25 10:15:58 -06:00
Tim O'Farrell
3161b365a8 Add sandbox_id field to conversation endpoints (#13044)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-25 14:29:42 +00:00
aivong-openhands
18ab56ef4e Fix CVE-2026-23490: Update pyasn1 to 0.6.2 (#13013)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-25 08:06:41 -06:00
Tim O'Farrell
a9c0df778c Make logs quieter. (#13042) 2026-02-25 05:11:13 -07:00
MkDev11
51b989b5f8 feat: Allow attaching/changing repository for existing conversations (#12671)
Co-authored-by: mkdev11 <MkDev11@users.noreply.github.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-25 18:09:12 +07:00
aivong-openhands
dc039d81d6 Fix CVE-2026-27199: Update werkzeug to 3.1.6 (#13028)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-24 18:26:28 -06:00
aivong-openhands
8e4559b14a Fix CVE-2025-61765: Update python-socketio to 5.14.0 (#13027)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-24 18:15:04 -06:00
aivong-openhands
b84f352b63 Fix CVE-2026-0994: Update protobuf to 5.29.6 (#13011)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-24 17:25:40 -06:00
aivong-openhands
a0dba6124a Fix CVE-2026-27026: Update pypdf to at least 6.7.1 (#13025)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-24 15:25:06 -06:00
aivong-openhands
951739f3eb Fix CVE-2025-53000: Update nbconvert to 7.17.0 (#13010)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
2026-02-24 14:46:31 -06:00
aivong-openhands
0f1ad46a47 Fix CVE-2025-62727: Update starlette to 0.49.1 (#13016)
Co-authored-by: OpenHands CVE Fix Bot <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2026-02-24 10:55:32 -06:00
sp.wack
5367bef43a fix: detect team/org-level budget errors in error banner (#13003) 2026-02-24 20:55:11 +04:00
Tim O'Farrell
3afeccfe7f fix: prevent token refresh deadlock with double-checked locking and timeouts (#13020)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-24 08:13:57 -07:00
Tim O'Farrell
0677c035ff Optimize get_sandbox_by_session_api_key with hash lookup (#13019)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-24 13:55:21 +00:00
Hiep Le
68165b52d9 feat(backend): add pagination and email filtering for organization members (#12999) 2026-02-24 16:02:24 +07:00
Dream
dcc8217317 feat(frontend): add mutateWithToast utility for standardized mutation toast handling (#12433)
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-24 15:06:44 +07:00
jpelletier1
d1410949ff Experiment - Add 'Add Team Members' button to Avatar menu in SaaS mode (#12647)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-23 23:06:57 +04:00
Tim O'Farrell
a6c0d80fe1 Fix: Logout on 401 error in useGitUser; downgrade provider error to warning (#12935)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-23 10:15:54 -07:00
Tim O'Farrell
0efb1db85d Bumped SDK to 1.11.5 (#13002) 2026-02-23 09:31:31 -07:00
Hiep Le
8e0f74c92c fix(backend): ensure members are removed from the corresponding litellm team when removed from an organization (#12996) 2026-02-23 18:45:31 +07:00
Hiep Le
6e1ba3d836 fix(backend): update current_org_id when removing a member from an organization (#12995) 2026-02-23 18:21:37 +07:00
Hiep Le
0ec97893d1 fix(backend): unable to delete an organization after inviting at least one member (#12993) 2026-02-23 18:21:10 +07:00
Tim O'Farrell
ddb809bc43 Add webhook endpoint authentication bypass and admin context unfiltered data access (#12956)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-23 09:28:49 +00:00
Alona
872f2b87f2 fix: add retry logic with exponential backoff to send_welcome_email (#12450)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2026-02-20 20:42:00 +00:00
Graham Neubig
ee86005a3a Align PR review workflow with software-agent-sdk (#12963)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-20 21:02:32 +01:00
Graham Neubig
d4aa30580b Migrate PR review workflow to use extensions action (#12917)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-20 18:44:02 +00:00
Tim O'Farrell
2f0e879129 Fix session_maker to accept kwargs for backward compatibility (#12960)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-20 10:56:44 -07:00
sp.wack
3bc2ef954e fix(backend): config values (#12944) 2026-02-20 17:53:35 +04:00
Ray Myers
32ab2a24c6 Remove enterprise-preview job and workflow (#12350)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-20 03:36:14 +01:00
Engel Nyst
a6e148d1e6 refactor: use consolidated pr-review action (#12801)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-20 02:08:42 +01:00
Manrique Vargas
3fc977eddd fix(mcp): skip conversation link when conversation_id is None (#12941)
Signed-off-by: machov <mv1742@nyu.edu>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2026-02-19 21:41:26 +00:00
John-Mason P. Shackelford
89a6890269 Fix URL encoding in Jira OAuth authorization URLs (#12399)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2026-02-19 21:40:29 +00:00
Hiep Le
8927ac2230 fix(backend): organization members now see correct shared credit balance (#12942) 2026-02-20 01:34:53 +07:00
Rohit Malhotra
f3429e33ca Fix Resend sync to respect deleted users (#12904)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-19 17:43:15 +00:00
Tim O'Farrell
7cd219792b Add type hints and use model objects in api_keys.py endpoints (#12939)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-19 08:40:46 -07:00
Hiep Le
2aabe2ed8c fix(backend): add organization filtering to V1 conversation queries (#12923) 2026-02-19 20:39:28 +07:00
Tim O'Farrell
731a9a813e More readable logs for local debugging (#12926) 2026-02-19 02:27:57 -07:00
Tim O'Farrell
123e556fed Added endpoint for readiness probe (#12927) 2026-02-19 02:27:35 -07:00
Chujiang
6676cae249 fix: add missing type hints and improve test logging (#12810)
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-19 00:58:39 +01:00
Clay Arnold
fede37b496 fix: add claude-opus-4-6 to temperature/top_p guard (#12874)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:33:17 +01:00
Hiep Le
3bcd6f18df fix(backend): set user email fields from user_info during create_user (#12921) 2026-02-19 02:06:20 +07:00
Rohit Malhotra
0da18440c2 Mention free MiniMax usage and drop free credits (#12918)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-18 13:54:05 -05:00
Hiep Le
ac76e10048 refactor(backend): include current_org_id in organization list response (#12915) 2026-02-18 20:35:40 +07:00
Hiep Le
b98bae8b5f refactor(backend): rename orgmemberresponse.role_name to role (#12914) 2026-02-18 20:23:07 +07:00
Tim O'Farrell
516721d1ee fix: add default uuid4 to event_callback_result primary key (#12908)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-18 05:57:13 -07:00
Hiep Le
4d6f66ca28 feat: add user invitation logic (#12883)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-18 13:24:19 +07:00
chuckbutkus
b18568da0b Feature/permission based authorization (#12906)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-18 01:17:39 -05:00
mamoodi
83dd3c169c Release 1.4.0 (#12897) 2026-02-17 13:09:29 -05:00
Tim O'Farrell
35bddb14f1 fix: preserve import order in clean_proactive_convo_table.py (#12901)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-02-17 17:52:54 +00:00
Tim O'Farrell
e8425218e2 Remove alembic errors dumped into logs by cron jobs (#12900) 2026-02-17 17:22:54 +00:00
Rohit Malhotra
0a879fa781 Grant free credits after minimum purchase (#12899)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-17 11:00:42 -05:00
Hiep Le
41e142bbab fix(backend): system prompt override (planning agent) (#12893) 2026-02-17 16:15:26 +07:00
Engel Nyst
b06b9eedac fix: wire suggested task prompts for V1 (#12787)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-16 23:57:32 +01:00
Tim O'Farrell
a9afafa991 Default model for new users is minimax (#12889) 2026-02-16 12:24:30 -07:00
mamoodi
663ace4b39 Add saas-rel* branch pattern to ghcr-build workflow (#12888)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-16 12:27:37 -05:00
Hiep Le
2d085a6e0a fix(frontend): add auto-scroll when new messages arrive in chat (#12885) 2026-02-16 23:46:14 +07:00
Hiep Le
8b7112abe8 refactor(frontend): hide planning preview component when plan content is empty (#12879) 2026-02-16 18:35:20 +07:00
Hiep Le
34547ba947 fix(backend): enable byor key export after purchasing credits (#12862) 2026-02-16 17:02:06 +07:00
Graham Neubig
5f958ab60d fix: suppress alembic INFO logs before import to prevent Datadog misclassification (#12691)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-12 14:32:39 -05:00
Hiep Le
d7656bf1c9 refactor(backend): rename user role to member across the system (#12853) 2026-02-13 00:45:47 +07:00
Tim O'Farrell
2bc107564c Support list_files and get_trajectory for nested conversation managers (#12850)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-02-12 10:39:00 -07:00
Tim O'Farrell
85eb1e1504 Check event types before making expensive API calls in GitHub webhook handler (#12819)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-12 09:33:59 -07:00
OpenHands Bot
cd235cc8c7 Bump SDK packages to v1.11.4 (#12839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-02-11 10:55:46 -07:00
Graham Neubig
40f52dfabc Use lowercase minimax-m2.5 for consistency (#12840)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-12 01:29:17 +08:00
Hiep Le
bab7bf85e8 fix(backend): prevent org deletion from setting current_org_id to NULL (#12817) 2026-02-12 00:15:21 +07:00
Hiep Le
c856537f65 refactor(backend): update the patch organization api to support organization name updates (#12834) 2026-02-12 00:08:43 +07:00
Graham Neubig
736f5b2255 Add MiniMax-M2.5 model support (#12835)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-11 16:57:22 +00:00
chuckbutkus
c1d9d11772 Log all exceptions in get_user() when authentication fails (#12836)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-02-11 11:49:13 -05:00
sp.wack
85244499fe fix(frontend): performance and loading state bugs (#12821) 2026-02-11 15:34:52 +00:00
Hiep Le
c55084e223 fix(backend): read RECAPTCHA_SITE_KEY from environment in V1 web client config (#12830) 2026-02-11 18:59:52 +07:00
Tim O'Farrell
e3bb75deb4 fix(enterprise): use poetry.lock for reproducible dependency builds (#12820)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: OpenHands Bot <contact@all-hands.dev>
2026-02-11 04:51:12 -07:00
Hiep Le
1948200762 chore: update sdk to the latest version (#12811) 2026-02-11 12:57:08 +07:00
Tim O'Farrell
affe0af361 Add debug logging for sandbox startup health checks (#12814)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-10 07:23:43 -07:00
Hiep Le
f20c956196 feat(backend): implement org member patch api (#12800) 2026-02-10 20:01:24 +07:00
Alexander Grattan
4a089a3a0d fix(docs): update Gray Swan API links and onboarding instructions in security README (#12809) 2026-02-10 10:14:49 +00:00
Hiep Le
aa0b2d0b74 feat(backend): add api for switching between orgs (#12799) 2026-02-10 14:22:52 +07:00
Hiep Le
bef9b80b9d fix(frontend): add missing border radius to conversation loading on first load (#12796) 2026-02-09 21:36:07 +07:00
Graham Neubig
c4a90b1f89 Fix Resend ValidationError by adding email validation (#12511)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-08 09:47:39 -05:00
sp.wack
0d13c57d9f feat(backend): org get me route (#12760)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-07 16:11:25 +07:00
Graham Neubig
b3422f1275 Add PR Review by OpenHands workflow (#12784)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 17:26:16 -05:00
Xingyao Wang
f139a9970b feat: add SANDBOX_STARTUP_GRACE_SECONDS env var for configurable startup timeout (#12741)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-07 06:12:29 +08:00
Jamie Chicago
54d156122c Add automated PR review workflow using OpenHands (#12698)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2026-02-06 19:02:55 +00:00
Tim O'Farrell
ac072bf686 feat(frontend): change alert banner from solid background to border style (#12783)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 18:05:29 +00:00
Hiep Le
a53812c029 feat(backend): develop delete /api/organizations/{orgid}/members/{userid} api (#12734) 2026-02-07 00:50:47 +07:00
Tim O'Farrell
1d1c0925b5 refactor: Move check_byor_export_enabled to OrgService and add tests (PR #12753 followup) (#12782)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 17:03:03 +00:00
Hiep Le
872f41e3c0 feat(backend): implement get /api/organizations/{orgId}/members api (#12735) 2026-02-06 23:47:30 +07:00
Tim O'Farrell
d43ff82534 feat: Add BYOR export flag to org for LLM key access control (#12753)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-06 09:30:12 -07:00
huangkevin-apr
8cd8c011b2 fix(a11y): Add aria-label to Sidebar component (#12728) 2026-02-06 22:32:52 +07:00
Tim O'Farrell
5c68b10983 (Frontend) Migrate to new /api/v1/web-client/config endpoint (#12479)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-02-06 08:31:40 -07:00
Graham Neubig
a97fad1976 fix: Add PostHog error tracking for V1 AgentErrorEvent and ConversationErrorEvent (#12543)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 09:51:01 -05:00
Graham Neubig
4c3542a91c fix: use appropriate log level for webhook installation results (#12493)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 09:01:37 -05:00
Tim O'Farrell
f460057f58 chore: add deprecation notices to all runtime directory files (#12772)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 05:15:02 -07:00
MkDev11
4fa2ad0f47 fix: add exponential backoff retry for env var export when bash session is busy (#12748)
Co-authored-by: mkdev11 <MkDev11@users.noreply.github.com>
2026-02-06 05:07:17 -07:00
Hiep Le
dd8be12809 feat(backend): return is_personal field in OrgResponse (#12777) 2026-02-06 19:01:06 +07:00
Tim O'Farrell
89475095d9 Preload callback processor class to prevent Pydantic Deserialization Error (#12776) 2026-02-06 04:29:28 -07:00
Tim O'Farrell
05d5f8848a Fix V1 GitHub conversations failing to clone repository (#12775)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-06 03:08:55 -07:00
Hiep Le
ee2885eb0b feat: store plan.md file in appropriate configuration folders (#12713) 2026-02-06 16:09:39 +07:00
Tim O'Farrell
545257f870 Refactor: Add LLM provider utilities and improve API base URL detection (#12766)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-05 14:22:32 -07:00
Hiep Le
b23ab33a01 chore: update sdk to the latest version (#12762) 2026-02-06 00:25:11 +07:00
sp.wack
a9ede73391 fix(backend): resolve missing email and display name for user identity tracking (#12719) 2026-02-05 16:50:33 +00:00
chuckbutkus
634c2439b4 Fix key gen again (#12752)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-05 11:45:10 -05:00
Hiep Le
a1989a40b3 refactor(frontend): remove border and border radius from ConversationLoading (#12756) 2026-02-05 21:50:07 +07:00
Saurya Velagapudi
e38f1283ea feat(recaptcha): add user_id and email to assessment log (#12749)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-04 17:58:44 -08:00
Tim O'Farrell
07eb791735 Remove flaky test_bash_session.py (#12739)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-04 11:55:22 -07:00
Saurya Velagapudi
c355c4819f feat(recaptcha): add assessment name to logging and AssessmentResult (#12744)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-04 09:30:02 -08:00
sp.wack
9d8e4c44cc fix(frontend): fix cross-domain PostHog tracking param names and persist bootstrap IDs across OAuth redirects (#12729) 2026-02-04 16:15:53 +04:00
Hiep Le
25cc55e558 chore: update sdk to the latest version (#12737) 2026-02-04 01:20:13 +07:00
chuckbutkus
0e825c38d7 APP-443: Fix key generation (#12726)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
2026-02-03 17:50:40 +00:00
Graham Neubig
ce04e70b5b fix: BYOR to OpenHands provider switch auth error (#12725)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-03 09:26:56 -07:00
Tim O'Farrell
7b0589ad40 Add GitHub and Replicated app slugs to web client config (#12724) 2026-02-02 15:53:52 -07:00
mamoodi
682465a862 Release 1.3 (#12715) 2026-02-02 16:17:01 -05:00
Tim O'Farrell
1bb4c844d4 Fix runtime status error on conversation resume (#12718)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-02 21:04:45 +00:00
Neha Prasad
d6c11fe517 fix selected repo disappearing in pen repository dropdown (#12702)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-02-02 19:07:48 +00:00
Tim O'Farrell
b088d4857e Improve batch_get_app_conversations UUID handling (#12711)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-02 07:25:07 -07:00
Tim O'Farrell
0f05898d55 Deprecate V0 endpoints now handled by agent server (#12710)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-02 07:25:00 -07:00
Hiep Le
d1f0a01a57 feat(frontend): add silent WebSocket recovery for V1 conversations (#12677) 2026-02-02 19:53:33 +07:00
Hiep Le
f5a9d28999 feat(frontend): add shine text effect to Plan Preview during streaming (planning agent) (#12676) 2026-02-02 14:31:31 +07:00
Graham Neubig
afa0417608 Remove evaluation directory and benchmarking dependencies (#12666)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-02-01 11:39:29 -08:00
chuckbutkus
e688fba761 Fix check for already migrated (#12700) 2026-01-30 19:31:46 -05:00
Tim O'Farrell
d1ec5cbdf6 Fix litellm migration max_budget issue and add logging (#12697)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-30 16:35:31 -07:00
Jamie Chicago
f42625f789 Improve issue templates with best practices and clear expectations (#12632)
Co-authored-by: jamiechicago312 <jamiechicago312@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2026-01-30 21:27:44 +01:00
Graham Neubig
fe28519677 feat(frontend): add gpt-5.2 and gpt-5.2-codex models, remove gpt-5 models (#12639)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-30 12:15:47 -05:00
Tim O'Farrell
e62ceafa4a Cleaner Logs (#12579)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-30 15:25:36 +00:00
Tim O'Farrell
0b8c69fad2 Fix for issue where stats are not updated for conversations (#12688)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-30 08:12:38 -07:00
Hiep Le
37d9b672a4 fix(frontend): prevent duplicate API calls when sub-conversation becomes ready (planning agent) (#12673) 2026-01-30 15:54:51 +07:00
Hiep Le
c8b867a634 fix(frontend): persist selected agent mode across page refresh (planning agent) (#12672) 2026-01-30 15:39:36 +07:00
Hiep Le
59834beba7 fix(frontend): prevent duplicate sub-conversation creation on page refresh (planning agent) (#12645) 2026-01-30 15:25:41 +07:00
Hiep Le
d2eced9cff feat(frontend): handle the build button for the planning agent (planning agent) (#12644) 2026-01-30 15:25:16 +07:00
Hiep Le
7836136ff8 feat(frontend): disable the build button while the agent is running (planning agent) (#12643) 2026-01-30 15:13:05 +07:00
chuckbutkus
fdb04dfe5d Add GitLab provider check to schedule_gitlab_repo_sync (#12680)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-29 23:56:36 -05:00
Tim O'Farrell
3d4cb89441 fix(frontend): Support V1 conversations in MetricsModal (#12678)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-29 15:03:06 -07:00
Tim O'Farrell
9fb9efd3d2 Refactor LiteLLM key updates to use generic user key API (#12664)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-29 09:53:01 -07:00
Engel Nyst
5511c01c2e chore: clarify draft guidance in PR template (#12670)
Co-authored-by: smolpaws <engel@enyst.org>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2026-01-29 14:17:35 +00:00
Engel Nyst
02825fb5bb Cleanup CLI directory (#12669) 2026-01-29 15:14:50 +01:00
HeyItsChloe
876e773589 chore(frontend): convo tab only renders active/selected tab (#12570)
Co-authored-by: Chloe <chloe@openhands.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-29 16:47:41 +07:00
MkDev11
9e1ae86191 fix: hide Notes from task list when notes are empty (#12668)
Co-authored-by: mkdev11 <MkDev11@users.noreply.github.com>
2026-01-29 16:13:23 +07:00
Hiep Le
df47b7b79d feat(frontend): ensure the planner tab opens when the view button is selected (#12621) 2026-01-29 13:12:09 +07:00
chuckbutkus
7d1c105b55 Move settings to dict to after openhands (#12663) 2026-01-28 23:45:01 +00:00
Tim O'Farrell
db6a9e8895 Fix broken key migration by decrypting legacy encrypted keys before LiteLLM update (#12657) 2026-01-28 15:09:50 -07:00
Hiep Le
d76ac44dc3 refactor(frontend): reduce heading text size for plan preview content (#12620) 2026-01-29 00:30:40 +07:00
MkDev11
c483c80a3c feat: add host network support for V1 DockerSandboxService (#12445)
Co-authored-by: mkdev11 <MkDev11@users.noreply.github.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-28 09:55:38 -07:00
chuckbutkus
570ab904f6 Fix UserSettings creation from Org tables (#12635)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
2026-01-28 09:35:05 -07:00
sp.wack
00a74731ae chore: refresh frontend lockfile (#12619) 2026-01-28 13:03:42 +04:00
Tim O'Farrell
102095affb Add downgrade script and methods for reverting user migration (#12629)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: chuckbutkus <chuck@all-hands.dev>
2026-01-27 14:41:34 -07:00
John-Mason P. Shackelford
b6ce45b474 feat(app_server): start conversations with remote plugins via REST API (#12338)
- Add `PluginSpec` model with plugin configuration parameters extending SDK's `PluginSource`
- Extend app-conversations API to accept plugins specification in `AppConversationStartRequest`
- Propagate plugin source, ref, and repo_path to agent server's `StartConversationRequest`
- Include plugin parameters in initial conversation message for agent context

Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-27 16:26:38 -05:00
Tim O'Farrell
11c87caba4 fix(backend): fix callback state not persisting due to dual-session conflict (#12627)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-27 10:02:48 -07:00
Abhay Mishra
b8a608c45e Fix: branch/repo dropdown reset on click (#12501)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-27 16:08:08 +07:00
Tim O'Farrell
8a446787be Migrate SDK to 1.10.0 (#12614) 2026-01-27 04:26:06 +00:00
Tim O'Farrell
353124e171 Bump SDK to 1.10.0 (#12613) 2026-01-27 03:50:30 +00:00
chuckbutkus
e9298c89bd Fix org migration (#12612)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-26 20:55:55 -05:00
Hiep Le
29b77be807 fix: revert get_user_by_id_async to use sync session_maker (#12610) 2026-01-27 04:39:07 +07:00
mamoodi
7094835ef0 Fix Pydantic UnsupportedFieldAttributeWarning in Settings model (#12600)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-26 12:30:43 -05:00
mamoodi
7ad0eec325 Change error to warning if TOS not accepted (#12605) 2026-01-26 12:30:00 -05:00
Hiep Le
31d5081163 feat(frontend): display plan preview content (#12504) 2026-01-26 23:19:57 +07:00
Abhay Mishra
250736cb7a fix(frontend): display ThinkAction thought content in V1 UI (#12597)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-26 14:03:16 +07:00
Tim O'Farrell
a9bd3a70c9 Fix V0 Integrations (#12584) 2026-01-24 16:53:16 +00:00
Hiep Le
d7436a4af4 fix(backend): asyncsession query error in userstore.get_user_by_id_async (#12586)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-24 23:47:04 +07:00
Tim O'Farrell
f327e76be7 Added explicit expired error (#12580) 2026-01-23 12:49:10 -07:00
Hiep Le
52e39e5d12 fix(backend): unable to export conversation (#12577)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-24 01:06:02 +07:00
Graham Neubig
6c5ef256fd fix: pass userId to EmailVerificationModal in login page (#12573)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-23 23:24:25 +07:00
Tim O'Farrell
373ade8554 Fix org billing (#12562) 2026-01-23 08:42:50 -07:00
Hiep Le
9d0a19cf8f fix(backend): ensure conversation events are written back to google cloud (#12571) 2026-01-23 22:13:08 +07:00
Rohit Malhotra
d60dd38d78 fix: preserve query params in returnTo during login redirect (#12567)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-22 21:31:42 -08:00
Hiep Le
d5ee799670 feat(backend): develop patch /api/organizations/{orgid} api (#12470)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
2026-01-23 01:29:35 +07:00
Hiep Le
b685fd43dd fix(backend): github proxy state compression (#12387)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2026-01-23 00:39:03 +07:00
Hiep Le
0e04f6fdbe feat(backend): develop delete /api/organizations/{orgid} api (#12471)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
2026-01-23 00:28:55 +07:00
Hiep Le
9c40929197 feat(backend): develop get /api/organizations/{orgid} api (#12274)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-01-22 23:55:29 +07:00
Hiep Le
af309e8586 feat(backend): develop get /api/organizations api (#12373)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
2026-01-22 23:32:42 +07:00
sp.wack
cc5d5c2335 test(frontend): add missing HTTP mocks for conversation history preloading (#12549) 2026-01-22 20:30:27 +04:00
Hiep Le
60e668f4a7 fix(backend): application settings are not updating as expected (#12547) 2026-01-22 21:54:52 +07:00
Hiep Le
743f6256a6 feat(backend): load skills from agent server (#12434) 2026-01-22 20:20:50 +07:00
Mohammed Abdulai
a87b4efd41 feat: preload conversation history before websocket connection (#12488)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2026-01-22 12:41:27 +00:00
Tim O'Farrell
730d9970f5 Migrate SDK to 1.9.1 (#12540) 2026-01-21 16:14:27 -07:00
Tim O'Farrell
2440593431 Simplify app conversation (#12517) 2026-01-21 13:03:28 -07:00
Tim O'Farrell
8c94ddbf1a Bump the SDK to 1.9.0 (#12535) 2026-01-21 13:02:45 -07:00
Tim O'Farrell
af60183f22 Optimize runtime build (#12531) 2026-01-21 19:35:11 +00:00
Timon
40fb69325f fix: use correct agent-server image in docker-compose.yml (#12527) 2026-01-21 12:03:01 -07:00
Rohit Malhotra
f9891a2c0d [Jira]: improve traceability and reliability fixes (#12515)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-21 13:50:41 -05:00
Hiep Le
44f1bb022b fix(frontend): sub-conversation ids are missing when navigating from the conversation panel (#12506) 2026-01-22 00:27:48 +07:00
dependabot[bot]
95c2a0285c chore(deps): bump the version-all group in /frontend with 7 updates (#12524)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 20:47:09 +04:00
Tim O'Farrell
8ea4813936 fix: remove keycloak_auth cookie requirement for webhook secrets endpoint (#12525)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-21 09:17:19 -07:00
Graham Neubig
650bf8c0c0 docs: Update docker-compose files to use V1 environment variables (#12522)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-21 10:22:50 -05:00
Mohammed Abdulai
dd4bb5d362 Improve Browser and App tab empty state guidance (#12418) 2026-01-21 21:09:38 +07:00
Graham Neubig
b3137e7ae8 fix: remove frozen=True from Field() to fix Pydantic warning (#12518)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-21 08:50:49 -05:00
dependabot[bot]
0d740925c5 chore(deps-dev): bump @tanstack/eslint-plugin-query from 5.91.2 to 5.91.3 in /frontend in the eslint group (#12497)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 16:34:44 +04:00
Hiep Le
030ff59c40 feat(backend): develop post /api/organizations api (org project) (#12263)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
2026-01-21 15:14:27 +07:00
Rohit Malhotra
3bc56740b9 [Jira]: separate signature verification from conversation orchestration (#12478)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-20 16:21:23 -05:00
Hiep Le
87a5762bf2 fix: handle invalid LiteLLM API keys during user migration (#12510) 2026-01-20 13:11:49 -07:00
Rohit Malhotra
5b149927fb [Jira]: fix match conditions for kicking off openhands (#12477)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-20 15:10:03 -05:00
Hiep Le
275bb689e4 fix(backend): sub-conversations can no longer be linked to parent conversations due to recent v1 changes (#12505) 2026-01-20 23:59:30 +07:00
Hiep Le
d595945309 fix(backend): handle existing LiteLLM users and team members during sign-in (#12508) 2026-01-20 23:35:37 +07:00
Hiep Le
e8ba741f28 fix(backend): byor key alias cleanup on 404 (#12491) 2026-01-19 13:12:04 +07:00
Graham Neubig
57929b73ee fix(frontend): show friendly message for budget/credit errors in V1 conversations (#12401)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-19 00:52:44 +00:00
Tim O'Farrell
9fd4e42438 Add CORS origins support to Docker sandbox service for remote browser access (#12489)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-18 08:02:29 -07:00
Tim O'Farrell
0176cd9669 Add LLM model to shared conversation view and remove feature flag (#12476)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-16 21:27:20 -07:00
Rohit Malhotra
2e9b29970e Extend expiration time for CLI device links (#12480) 2026-01-16 19:43:05 -05:00
chuckbutkus
a07fc1510b Add variable to disable duplicate email check (#12474) 2026-01-16 18:04:15 -05:00
dependabot[bot]
78f067acef chore(deps): bump the version-all group in /frontend with 5 updates (#12437)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 01:38:24 +04:00
Tim O'Farrell
0d5f97c8c7 Refactor enterprise database.py to use DbSessionInjector (#12446)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-16 14:38:05 -07:00
chuckbutkus
a987387353 Fix asyncio event loop conflict in get_user_by_id (#12475)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
2026-01-16 20:37:04 +00:00
Rohit Malhotra
941b6dd340 Jira: don't lock conversation to ticket (#12472)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-16 14:12:27 -05:00
Hiep Le
23251a2487 fix: cannot run code locally in SaaS mode (#12465) 2026-01-16 08:42:19 -07:00
Tim O'Farrell
6af8301996 Default value for V1 enabled should be true (#12469) 2026-01-16 15:39:22 +00:00
mamoodi
b57ec9eda1 Release 1.2.0 and 1.2.1 (#12440) 2026-01-16 09:33:41 -05:00
Tim O'Farrell
c8594a2eaa (Backend) New Config Endpoint (#12460) 2026-01-15 22:06:39 -07:00
Rohit Malhotra
102715a3c9 (Hotfix): missing provider tokens in v1 resolvers (#12453)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-15 22:22:10 -05:00
chuckbutkus
d5e66b4f3a SAAS: Introducing orgs (phase 1) (#11265)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
Co-authored-by: Hiep Le <69354317+hieptl@users.noreply.github.com>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-01-15 22:03:31 -05:00
Graham Neubig
f5315887ec Fix: Reduce log noise for optional org-level .openhands repositories (#12456)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-15 23:27:34 +00:00
Tim O'Farrell
6e4ac8e2ce [APP-373] Update legacy v0 deprecation notice with version and removal date (#12455)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-15 15:22:38 -07:00
Vedant Madane
efb54fd791 fix(frontend): dismissible & expandable error banner (#12354)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-15 21:18:37 +00:00
sp.wack
53f86955e0 fix(frontend): clear error banner on successful V1 WebSocket events (#12398) 2026-01-16 01:12:55 +04:00
MkDev11
b5a615aa67 fix: preserve HTTP protocol for self-hosted Gitea/Forgejo instances (#12439) 2026-01-15 12:20:07 -05:00
Mohammed Abdulai
3cb76f5cbb fix: clean up conversation localStorage on delete and migration (#12300)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-15 15:28:24 +00:00
Tim O'Farrell
91fb97a13f Migrate the SDK to 1.8.2 (#12438) 2026-01-15 15:18:26 +00:00
Graham Neubig
9af3ee8298 fix: Add WORKER_1 and WORKER_2 env vars to remote sandbox service (#12424)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-15 08:53:04 -05:00
Saurya Velagapudi
169ca5aae9 UV Migration Steps 1.3-1.6: Add project dependencies and generate uv.lock (#12416)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Saurya <saurya@openhands.dev>
2026-01-14 19:32:31 -07:00
Pegasus
3c6edfe14b fix(frontend): Respect HIDE_LLM_SETTINGS flag in settings modal (#12400) 2026-01-14 17:14:32 -06:00
dependabot[bot]
633552a731 chore(deps-dev): bump eslint-plugin-prettier from 5.5.4 to 5.5.5 in /frontend in the eslint group (#12408)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 01:09:36 +04:00
Saurya Velagapudi
3da24da4a0 UV Migration Step 1.1: Add PEP 621 [project] section for UV compatibility (#12414)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-14 20:59:15 +00:00
Tim O'Farrell
f28ab56cc3 fix: require reCAPTCHA token when reCAPTCHA is enabled (#12409)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-14 12:34:09 -07:00
Tim O'Farrell
6ccd42bb29 [APP-369] Fix: Allow public access to shared conversations and events (#12411)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-14 16:47:47 +00:00
Hiep Le
1146ea2274 refactor(frontend): create a feature flag for google recaptcha (#12402) 2026-01-14 19:22:38 +07:00
sp.wack
ff28e13698 hotfix(frontend): Fix auth refetch loading spinner flash (#12396) 2026-01-13 19:08:38 +00:00
Xingyao Wang
9171986dde Consolidate repo guidance into AGENTS.md (#12375)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-13 15:53:14 +00:00
Jatoth Adithya Naik
9d405243b8 Fix tab pin/unpin by aligning localStorage key per conversation- #12287 (#12292)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-13 15:25:08 +00:00
dependabot[bot]
d7218925c4 chore(deps): bump the version-all group in /frontend with 3 updates (#12390)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 19:10:17 +04:00
sp.wack
27c16d6691 chore(frontend): Cross-domain PostHog tracking (#12166) 2026-01-13 18:07:56 +04:00
dependabot[bot]
eabba5c160 chore(deps): bump the version-all group in /frontend with 10 updates (#12379)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 17:54:20 +04:00
Hiep Le
ece7e2dd39 refactor(frontend): update tooltip styling (#12371) 2026-01-13 11:59:40 +07:00
Tim O'Farrell
13762eba7c Add optional sandbox_id parameter to start_sandbox method (#12382)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-12 15:43:24 -07:00
Tim O'Farrell
9cf7d64bfe Guard User Creation with Redis based Lock (#12381)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-12 22:03:42 +00:00
Xingyao Wang
92baebc4bd Remove prod/ prefix from litellm proxy model path (#12200)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-13 04:46:09 +08:00
Hiep Le
3d0aa50450 refactor(frontend): make memory condenser max history size input styling consistent (#12365) 2026-01-12 21:43:06 +07:00
Hiep Le
0e3332d974 fix(frontend): make secrets table responsive when descriptions are long (#12363) 2026-01-12 21:40:09 +07:00
Saurya Velagapudi
3c6d2ff1d6 Add conversation API deprecation notices (#12303)
Co-authored-by: Saurya <saurya@openhands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-01-12 08:26:33 -05:00
Hiep Le
b7b76c7a30 refactor: update the pull request template to add optional demo screenshots and videos (#12367) 2026-01-12 20:20:24 +07:00
dependabot[bot]
17b1c04aa0 chore(deps): bump the version-all group in /frontend with 2 updates (#12340)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-12 15:53:33 +04:00
Hiep Le
624a241bbf refactor: Dockerfile (enterprise) (#12368) 2026-01-12 02:27:44 +07:00
Hiep Le
7862e10f03 chore: update enterprise/Dockerfile (#12355) 2026-01-10 11:00:44 -07:00
Tim O'Farrell
7380039bf6 feat(frontend): improve public share menu behavior (#12345)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2026-01-10 08:53:22 -07:00
Hiep Le
d773dd6514 feat: implement reCAPTCHA enterprise risk-based non-interactive (#12288) 2026-01-10 22:04:35 +07:00
Xingyao Wang
175117e8b5 Fix: Prevent Enter key from submitting during IME composition (#12252)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-10 11:34:25 +08:00
Tim O'Farrell
778a1cf609 Fix for critical regression where conversations will not start in OSS (#12347) 2026-01-09 19:29:56 +00:00
OpenHands Bot
c08adc87b4 Bump SDK packages to v1.8.1 (#12343)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-10 02:41:01 +08:00
Graham Neubig
434647e4e4 fix: replace deprecated Pydantic .dict() with .model_dump() (#12339)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-09 12:37:58 -05:00
Tim O'Farrell
849ae13118 Fix regression in EventService search (#12342)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-09 10:00:35 -07:00
Tim O'Farrell
180df8ea20 Remove runtime unit tests (#12331) 2026-01-09 09:06:02 -07:00
sp.wack
17791e5e62 fix: restore agenthub import for agent registration (#12341) 2026-01-09 16:00:06 +00:00
Mengxin Zhu
f3aaebdc33 fix(frontend): preserve path prefix in WebSocket URL for proxy deployments (#12284)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2026-01-09 17:39:02 +04:00
Tim O'Farrell
0e4f0c25d7 Fix merge conflict in DB migrations (#12336) 2026-01-09 05:46:43 +00:00
Hiep Le
d4cf1d4590 fix(frontend): tool titles are not displayed for v1 conversations (#12317) 2026-01-09 10:45:42 +07:00
Graham Neubig
9b50d0cb7d chore(deps): update jinja2, tornado, urllib3 (#12330)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-08 22:05:26 -05:00
Tim O'Farrell
5c411e7fc1 Fix circular import in gitlab_sync.py (#12334)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-08 22:44:18 +00:00
Saurya Velagapudi
6442f772a0 Fix: Parse SANDBOX_VOLUMES env var for agent-server volume mounts (#12327)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-08 20:31:27 +00:00
Rohit Malhotra
5fb431bcc5 feat: Implement Slack V1 integration following GitHub V1 pattern (#11825)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-01-08 13:08:11 -07:00
mamoodi
adfabe7659 docs/styles: Minor updates to some docs and some formatting (#12320) 2026-01-08 12:20:57 -05:00
mamoodi
0ddac3879e Update PR template with note on draft PRs (#12315) 2026-01-08 16:55:16 +00:00
Hiep Le
7398737b06 refactor(frontend): align conversation metrics title to the left in the modal (#12310) 2026-01-08 23:09:26 +07:00
Hiep Le
50d9cbac04 refactor(frontend): reduce gap between icon and text in chat status indicator (#12313) 2026-01-08 23:09:16 +07:00
Sarvatarshan Sankar
a40f7bda21 Fix: Prevent Search API Key from resetting when saving other settings (#12243)
Co-authored-by: Sarvatarshan Sankar <sarvatarshansankar20@Sarvatarshans-MacBook-Air.local>
2026-01-08 19:30:06 +04:00
Pranjal Gupta
39f0e6ed94 perf: eliminate slow chown operations in Docker builds (~41min → seconds) (#12256)
Co-authored-by: Pranjal Gupta <19pran@gmail.com>
2026-01-08 09:29:43 -06:00
Hiep Le
6475aa3487 refactor(frontend): remove auth modal and related tests (#12307) 2026-01-08 21:02:02 +07:00
dependabot[bot]
5dea0d22b4 chore(deps): bump the version-all group across 1 directory with 8 updates (#12298)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 16:34:30 +04:00
sp.wack
a6e8b819ad refactor(frontend): Remove dead 402 error handling code (#12305) 2026-01-08 11:56:27 +00:00
Tim O'Farrell
c97e7082f7 Making sure verify_repo_provider is_optional so log is debug not error (#12302)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-08 05:15:00 +00:00
Tim O'Farrell
cb9e6fde24 Fix Python deprecation warning: use auth=Auth.Token() instead of login_or_token (#12299)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 21:39:36 -07:00
Tim O'Farrell
828837a969 APP-319: No longer logging error when idle sandboxes are stopped (#12296) 2026-01-07 22:55:57 +00:00
Tim O'Farrell
bbdedf8641 Fix unbound variable and read_text() bugs in event services (#12297)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 22:07:23 +00:00
Graham Neubig
11d1e79506 refactor(enterprise): Remove custom Prometheus metrics app (#12253)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 14:49:50 -05:00
Tim O'Farrell
e485c93119 APP-318 Increase LiteLLM HTTP timeout from 5s to 15s (#12290)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 17:40:52 +00:00
Tim O'Farrell
cddf01b4e9 Fix AttributeError in GoogleCloudSharedEventService: use self.bucket instead of erroneous import (#12289)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 17:03:28 +00:00
Abhay Mishra
6086c0b09d feat(frontend): convert AuthModal to dedicated /login page (#12143) (#12181)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-07 16:46:24 +00:00
Jatoth Adithya Naik
15836c4d4b Replace conversation loading spinner with skeleton cards (#12230)
Co-authored-by: hieptl <hieptl.developer@gmail.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-07 15:57:10 +00:00
Tim O'Farrell
20eb9bd3c5 Use the version from the release tag rather than from main (#12286) 2026-01-07 15:50:57 +00:00
Neha Prasad
ba1770ad89 fix: remove query invalidation to prevent stale (#12238) 2026-01-07 19:20:40 +04:00
dependabot[bot]
4b7ce82f71 chore(deps): bump the version-all group in /frontend with 2 updates (#12277)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-07 13:21:46 +00:00
Hiep Le
5c20724845 fix: db migration (#12282) 2026-01-07 17:29:31 +07:00
Hiep Le
8ddb815a89 refactor(backend): enhance storage and retrieval of blocked domains (#12273) 2026-01-07 13:41:43 +07:00
Engel Nyst
08df955ba7 Clarify OpenHands naming (replace “OSS” wording in docs and backend) (#12235)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 07:24:27 +01:00
Tim O'Farrell
b816d0448b Fix GoogleCloudSharedEventServiceInjector missing bucket_name field and add tests (#12280)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-06 22:27:00 -07:00
Tim O'Farrell
fa974f8106 APP-307 Add Google Cloud Storage-based EventService implementation (#12264)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-06 15:52:07 -07:00
Xingyao Wang
af5c22700c Bump condenser defaults: max_size 120->240 (#12267)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-07 05:43:23 +08:00
Ryanakml
1907ebeaa8 feat: add chat message skeletons and improve routing stability (#12223)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-07 00:29:08 +04:00
Rohit Malhotra
9686ee02f3 V1 GitHub resolver fixes (#12199)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-06 19:33:54 +00:00
HeyItsChloe
d053a3d363 feat(frontend): adding status indicator and unit test (#12111)
Co-authored-by: Chloe <chloe@openhands.com>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2026-01-06 13:01:27 +00:00
Tim O'Farrell
acc0e893e3 Bump openhands to 1.7.4 (#12269) 2026-01-05 21:40:42 +00:00
Xingyao Wang
a8098505c2 Add litellm_extra_body metadata for V1 conversations (#12266)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-06 03:27:06 +08:00
sp.wack
9b834bf660 feat(frontend): create useAppTitle hook for dynamic document titles (#12224) 2026-01-05 23:17:53 +04:00
Xingyao Wang
5744f6602b Handle expired Keycloak session with user-friendly error message (#12168)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-05 15:04:36 +00:00
Neha Prasad
4a82768e6d feat: add empty state to Changes tab with icon and message (#12237)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2026-01-05 14:22:47 +00:00
Hiep Le
6f86e589c8 feat: allow manual reinstallation for gitlab resolver (#12184) 2026-01-05 12:05:20 +07:00
shanemort1982
5bd8695ab8 feat: Add configurable sandbox host_port and container_url_pattern for remote access (#12255)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2026-01-04 20:26:16 -07:00
Tim O'Farrell
8c73c87583 Add extra_hosts support to agent-server containers (#12236)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-03 05:41:31 +00:00
Graham Neubig
40c25cd1ce fix: use Auth.Token for PyGithub authentication (#12248)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-02 21:14:16 -05:00
Graham Neubig
2ebde2529d fix: Handle LiteLLM v1.80+ 404 response for new users (#12250)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-02 22:18:47 +00:00
Graham Neubig
cdc42130e1 fix: replace deprecated get_matching_events with search_events (#12249)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-02 21:59:17 +00:00
Graham Neubig
903c047015 Replace deprecated PyPDF2 with pypdf (#12203)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-02 21:47:52 +00:00
Graham Neubig
ee2ad16442 fix: update pythonjsonlogger.jsonlogger to pythonjsonlogger.json (#12247)
Co-authored-by: openhands <openhands@all-hands.dev>
2026-01-02 16:13:00 -05:00
dependabot[bot]
a96b47e481 chore(deps): bump posthog-js from 1.312.0 to 1.313.0 in /frontend in the version-all group (#12241)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-02 22:30:44 +04:00
Hiep Le
5a08277184 fix(backend): stabilize gitlab resolver in saas (#12231) 2026-01-03 01:25:28 +07:00
Hiep Le
63d5ceada6 feat(backend): block tld (#12240)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2026-01-03 00:42:22 +07:00
Mohammed Abdulai
1bae1fc4e6 doc: correct Slack channel to #dev-ui-ux (#12239)
Co-authored-by: Mohammed Abdulai <nurud43@gmail.com>
2026-01-02 15:28:08 +01:00
Engel Nyst
15bc78f4c1 Remove VSCode extension integration from OpenHands repo (#12234) 2026-01-01 19:28:05 +01:00
dependabot[bot]
437046f5a4 chore(deps): bump the version-all group in /frontend with 2 updates (#12232)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 19:29:41 +02:00
Cesar Garcia
714459d6eb fix: run stale issues workflow on upstream repository only (#12162)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-12-31 17:50:48 +00:00
Bharath A V
f9b316453d fix: prevent nested buttons in tooltip button (#12177)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-31 16:08:37 +00:00
Ryanakml
96d073ee5b fix(frontend): add missing onClose prop to conversation panel modals (#12219)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-31 15:29:03 +00:00
Osama Mabkhot
f7d416ac8e refactor(frontend): remove HeroUI BaseModal and migrate MetricsModal (#12174)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-31 15:18:58 +00:00
yunbae
b7d5f903cf fix(frontend): Agent Tools & Metadata not available for V1 conversations (#12180)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-31 19:08:09 +04:00
yunbae
2734a5a52d fix(frontend): show stop action button for running or starting conversations (#12215) 2025-12-31 19:07:09 +04:00
dependabot[bot]
51868ffac6 chore(deps): bump @tanstack/react-query from 5.90.15 to 5.90.16 in /frontend in the version-all group (#12225)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-31 14:44:20 +00:00
Aaron Sequeira
4c0f0a1e9b feat: Support Tau-Bench and BFCL evaluation benchmarks (#11953)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-31 03:12:50 +00:00
dependabot[bot]
82e0aa7924 chore(deps): bump ncipollo/release-action from 1.16.0 to 1.20.0 (#11851)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-31 03:02:48 +00:00
Eliot Jones
9043aa69d8 refactor: Update expected cygnal output format (#12060) 2025-12-30 22:01:36 -05:00
dependabot[bot]
23d379fa41 build(deps): bump node from 24.8-trixie-slim to 25.2-trixie-slim in /containers/app (#11756)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-30 21:18:13 -05:00
Neha Prasad
6f9c0aa3b1 fix: display conversation title in delete confirmation modal (#11818)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-30 20:59:30 -05:00
Xingyao Wang
232dcf4991 fix(ci): update PAT_TOKEN to ALLHANDS_BOT_GITHUB_PAT for enterprise preview (#12216)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-31 04:41:45 +08:00
Hiep Le
ffdd95305f fix(backend): invalid api key (#12217) 2025-12-31 02:05:43 +07:00
sp.wack
bfe8275963 hotfix(test): add top-level mock for custom-toast-handlers in conversation-panel tests (#12220) 2025-12-30 19:04:29 +00:00
OpenHands Bot
06a97fc382 Bump SDK packages to v1.7.3 (#12218)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-12-30 18:47:14 +00:00
Graham Neubig
b5758b1604 Update GithubIntegration to use auth=Auth.AppAuth() (#12204)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-30 12:59:51 -05:00
mamoodi
3ae09680d6 Release 1.1.0 (#12212) 2025-12-30 11:35:14 -05:00
sp.wack
0e5f4325be hotfix(frontend): set terminal background color for xterm.js 6.0.0 compatibility (#12213) 2025-12-30 14:58:58 +00:00
dependabot[bot]
64d4085612 chore(deps): bump the version-all group in /frontend with 2 updates (#12211)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-30 18:52:39 +04:00
sp.wack
103e3ead0a hotfix(frontend): validate git changes response is array before mapping (#12208) 2025-12-30 12:33:09 +00:00
dependabot[bot]
d5e83d0f06 chore(deps): bump peter-evans/create-or-update-comment from 4 to 5 (#12192)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-12-29 23:50:40 +00:00
dependabot[bot]
443918af3c chore(deps): bump docker/setup-qemu-action from 3.6.0 to 3.7.0 (#12193)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-30 00:25:56 +01:00
dependabot[bot]
910646d11f chore(deps): bump actions/cache from 4 to 5 (#12191)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-30 00:25:17 +01:00
Engel Nyst
d9d19043f1 chore: Mark V0 legacy files with clear headers and V1 pointers (#12165)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-12-30 00:21:29 +01:00
Graham Neubig
4dec38c7ce fix(event-webhook): Improve error logging with exception type and stack trace (#12202)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-29 18:09:20 -05:00
Graham Neubig
c3f51d9dbe fix(billing): Add error handling for LiteLLM API failures in get_credits (#12201)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-29 23:01:55 +00:00
chuckbutkus
ecbd3ae749 Fix local dev deployments (#12198) 2025-12-29 16:18:02 -05:00
Hiep Le
8ee1394e8c feat: add button to authentication modal to resend verification email (#12179) 2025-12-30 02:12:14 +07:00
Tim O'Farrell
d628e1f20a feat: Add frontend support for public conversation sharing (#12047)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-29 12:04:06 -07:00
sp.wack
1480d4acb0 fix(frontend): deduplicate events on WebSocket reconnect (#12197) 2025-12-29 19:03:48 +00:00
Hiep Le
58a70e8b0d fix(backend): preserve users custom llm settings during settings migrations (#12134)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-12-29 23:28:20 +07:00
Hiep Le
49e46a5fa1 refactor(backend): remove <sub> in slack response (#12135) 2025-12-29 23:27:48 +07:00
Hiep Le
2cf6494773 fix(backend): install_gitlab_webhooks.py is not functioning as expected (#12185) 2025-12-29 23:27:31 +07:00
Hiep Le
d3afbfa447 refactor(backend): add description field support for secrets (v1 conversations) (#12080) 2025-12-29 22:43:07 +07:00
Hiep Le
8d69b4066f fix(backend): exception occurs when running the latest code from the main branch (v1 conversations) (#12183) 2025-12-29 09:57:14 -05:00
dependabot[bot]
2261281656 chore(deps): bump @tanstack/react-query from 5.90.12 to 5.90.14 in /frontend in the version-all group (#12189)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-29 14:33:52 +00:00
sp.wack
d68b2cdd1a hotfix(frontend): fix provider type import (#12187) 2025-12-29 18:01:22 +04:00
dependabot[bot]
c70ecc8fe3 chore(deps): bump the version-all group across 1 directory with 6 updates (#12161)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-29 13:54:58 +00:00
Pedro Henrique
a3e85e2c2d test: Add MC/DC tests for loop pattern detector (stuck_detector) (#11600)
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-29 14:15:15 +01:00
Hiep Le
3bef4e6c2d refactor(frontend): update the error message for email addresses containing + during signup (#12178) 2025-12-29 19:36:28 +07:00
Engel Nyst
97654e6a5e Configurable conda/mamba channel_alias for runtime builds (#11516)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-29 00:40:57 +01:00
Tim O'Farrell
30114666ad Bump the SDK to 1.7.1 (#12182)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-28 18:57:08 +00:00
dependabot[bot]
ee50f333ba chore(deps): bump actions/upload-artifact from 4 to 5 (#11805)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-28 09:51:34 -05:00
dependabot[bot]
09d1748a14 build(deps): bump actions/setup-python from 5 to 6 (#11755)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-28 09:49:17 -05:00
dependabot[bot]
81519343c4 chore(deps): bump actions/download-artifact from 4 to 6 (#11524)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-28 09:49:02 -05:00
dependabot[bot]
f742811e81 chore(deps): bump actions/setup-node from 4 to 6 (#11442)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-12-28 08:58:26 -05:00
johba
f8e4b5562e Forgejo integration (#11111)
Co-authored-by: johba <admin@noreply.localhost>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: johba <johba@harb.eth>
Co-authored-by: enyst <engel.nyst@gmail.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: MrGeorgen <65063405+MrGeorgen@users.noreply.github.com>
Co-authored-by: MrGeorgen <moinl6162@gmail.com>
2025-12-27 15:57:31 -05:00
Tim O'Farrell
cb1d1f8a0d Fix install-hooks CronJob failing when gitlab_webhook table doesn't exist (#12167)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-26 10:53:21 -07:00
Tim O'Farrell
a829d10213 ALL-4634: implement public conversation sharing feature (#12044)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-26 10:02:01 -07:00
Tim O'Farrell
cb8c1fa263 ALL-4627 Database Fixes (#12156)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-26 09:19:51 -07:00
lif
c80f70392f fix(frontend): clean up console warnings in test suite (#12004)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-25 22:26:12 +04:00
Guy Elsmore-Paddock
94e6490a79 Use tini as Docker Runtime Init to Ensure Zombie Processes Get Reaped (#12133)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-12-25 06:16:52 +00:00
Tim O'Farrell
09af93a02a Agent server env override (#12068)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-12-25 03:55:06 +00:00
shanemort1982
5407ea55aa Fix WebSocket localhost bug by passing DOCKER_HOST_ADDR to runtime containers (#12113)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-24 14:26:45 -07:00
Tim O'Farrell
fe1026ee8a Fix for re-creating deleted conversation (#12152) 2025-12-24 12:13:29 -07:00
Tim O'Farrell
6d14ce420e Implement Export feature for V1 conversations with comprehensive unit tests (#12030)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
2025-12-24 17:50:57 +00:00
lif
36fe23aea3 fix(llm): retry LiteLLM bad gateway errors (#12117) 2025-12-24 06:37:12 -05:00
sp.wack
9049b95792 docs(frontend): React Router testing guide (#12145) 2025-12-24 14:21:55 +04:00
Hiep Le
e2b2aa52cd feat: require email verification for new signups (#12123) 2025-12-24 14:56:02 +07:00
Tim O'Farrell
dc99c7b62e Fix SQLAlchemy result handling in get_sandbox_by_session_api_key (#12148)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-24 00:11:16 +00:00
Tim O'Farrell
8bc1a47a78 Fix for error in get_sandbox_by_session_api_key (#12147) 2025-12-23 22:18:36 +00:00
Tim O'Farrell
8d0e7a92b8 ALL-4636 Resolution for connection leaks (#12144)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-23 19:02:56 +00:00
Hiep Le
f6e7628bff feat: prevent signups using email addresses with a plus sign and enforce the existing email pattern (#12124) 2025-12-24 01:48:05 +07:00
sp.wack
fae83230ee docs(frontend): Add API services guide for frontend development (#12132) 2025-12-23 12:57:55 +00:00
sp.wack
a9d2f72d72 docs(frontend): Add MSW testing guide for frontend development (#12131) 2025-12-23 16:32:27 +04:00
Tim O'Farrell
2b8f779b65 fix: Runtime pods fail to start due to missing Playwright browser path (#12130) 2025-12-22 17:04:10 +00:00
Hiep Le
10edb28729 fix(frontend): llm settings view resets to basic after saving (#12097) 2025-12-22 23:00:57 +07:00
Hiep Le
5553d3ca2e feat: support blocking specific email domains (#12115) 2025-12-21 19:49:11 +07:00
Graham Neubig
6605070d05 Fix fastmcp stateless_http deprecation warning (#12108)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-12-20 09:45:52 -05:00
Tim O'Farrell
0677cebb25 More efficiency (#12112) 2025-12-19 21:18:48 -07:00
Graham Neubig
fa2567b2a0 Fix xterm dimensions error with explicit checks instead of try-catch (#12095)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-20 01:09:09 +00:00
Graham Neubig
305396550a Fix flaky test_tool_call_validation_error_handling test (#12110)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-19 19:39:53 -05:00
Tim O'Farrell
adff39507a fix: eliminate N+1 performance bug in RemoteSandboxService with batch endpoint (#12105)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-19 23:24:40 +00:00
mamoodi
a873af307a Update CODEOWNERS (#12106) 2025-12-19 14:31:53 -05:00
Tim O'Farrell
800e861b88 Replace manual pagination loops with page_iterator utility function (#12027)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-19 19:17:49 +00:00
sp.wack
0246b1bc43 hotfix(frontend): update websocket handler test mocks to use correct event count endpoint (#12104) 2025-12-19 17:00:59 +00:00
aditya-gaharawar
f870246c3d feat: improve accessibility of served tab buttons (#12103)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-12-19 16:48:34 +00:00
Hiep Le
58340b3ef9 refactor(frontend): consolidate state stores into stores directory (#12100) 2025-12-19 21:12:38 +07:00
dependabot[bot]
107d555445 chore(deps): bump the version-all group in /frontend with 7 updates (#12082)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-19 16:07:49 +04:00
Engel Nyst
ec9daf3bcc Fix tool call validation error handling for Groq LLM provider (#10927)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-12-19 07:31:07 +01:00
chuckbutkus
88c053b23c Speed up docker build of enterprise server (#12074) 2025-12-18 22:12:01 -05:00
Xingyao Wang
d063ee599b chore: set default model to claude-opus-4-5-20251101 (#12093)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-19 02:50:49 +00:00
Xingyao Wang
c2e4172088 feat: Add sk-oh- prefix to OpenHands Cloud API keys (#12092)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-18 21:06:03 +00:00
Wang Siyuan
d90579b398 fix: make local runtime use host-writable paths and local cache defaults (#12015)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-12-18 17:31:12 +01:00
Xingyao Wang
aff9d69d41 feat(frontend): add prefer-optional-chain ESLint rule and apply fixes (#12073)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-18 22:42:52 +08:00
Hiep Le
afce58a27d refactor(frontend): move frontend/src/ui/microagent-management-service to frontend/src/api (#12017) 2025-12-18 20:27:38 +07:00
Hiep Le
43f7a6fdbd fix(frontend): resolve overlap between conversation panel and account context menu (#12079) 2025-12-18 20:17:32 +07:00
Hiep Le
2ce6c9836e fix: load settings (#12077) 2025-12-18 02:45:32 +00:00
Tim O'Farrell
28dc3be034 Fixed performance bug in remote sandbox service (#12076) 2025-12-18 00:59:57 +00:00
chuckbutkus
2ed5c6073a Add variable to disable vscode plugin (#11812)
Co-authored-by: John-Mason P. Shackelford <jpshack@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-17 11:25:52 -05:00
Hiep Le
9ef11bf930 feat: show available skills for v1 conversations (#12039) 2025-12-17 23:25:10 +07:00
Hiep Le
f98e7fbc49 fix(frontend): observation events and action events (v1 conversations) (#12066)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-17 22:34:28 +07:00
Hiep Le
0607614372 feat(frontend): add refresh button to changes tab (#12036)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-12-17 22:29:18 +07:00
dependabot[bot]
2c83e419dc chore(deps): bump the version-all group across 1 directory with 5 updates (#12071) 2025-12-17 19:16:54 +04:00
Nhan Nguyen
435e537693 fix: Prevent old instructions from being re-executed after conversation condensation (#11982) 2025-12-17 13:05:10 +01:00
Tim O'Farrell
dc14624480 Fix for frontend stall (#12069) 2025-12-17 03:35:46 +00:00
Tim O'Farrell
281ac91540 Bump sdk 1.6.0 (#12067) 2025-12-16 21:53:15 +00:00
Rohit Malhotra
7853b41add Add OAuth 2.0 Device Flow backend for CLI authentication (#11984)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-12-16 11:54:01 -05:00
Tim O'Farrell
2a98c95557 Release OpenHands v1.0.0 (#12052)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-12-16 11:03:29 -05:00
Mariam Saeed
3b7b2fd8cc fix(frontend): Separate pause state from agent loading (#12041)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-16 13:39:15 +00:00
Hiep Le
49740a463f fix(frontend): clicking think block in conversation pane breaks ui (v1 conversations) (#12057) 2025-12-16 20:14:19 +07:00
dependabot[bot]
ee97542080 chore(deps): bump the version-all group in /frontend with 7 updates (#12050)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 23:08:17 +04:00
Tim O'Farrell
9753ad3a48 Removed Legacy Conversation Manager (#12053) 2025-12-15 17:47:21 +00:00
Abhay Mishra
a12170e4c9 refactor(frontend): Extracted useQuery and useMutation from the main branch (#12031)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-15 16:37:52 +00:00
Xingyao Wang
5c377f303f Update SWEBench score in README (#12051) 2025-12-15 16:25:31 +00:00
Graham Neubig
089d9c1ee5 Add deprecation warning to evaluation README (#11997)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-16 00:21:13 +08:00
Abhay Mishra
f52d9899e2 Consolidate scattered test files into a unified frontend/__tests__/ directory (#12002) 2025-12-15 19:58:09 +04:00
Neha Prasad
47914c3576 chore: remove pnpm settings from npmrc (#12028) 2025-12-15 12:05:42 +07:00
Hiep Le
67c9b6cf86 refactor(frontend): websocket error message (v1 conversations) (#12045) 2025-12-15 01:31:12 +07:00
Hiep Le
b937d344db fix(backend): initial titles show full uuids instead of shortened uuids (v1 conversations) (#12020) 2025-12-15 00:39:32 +07:00
Hiep Le
f2def8fd7f fix(backend): organizational skills do not trigger (v1 conversations) (#12037) 2025-12-14 23:31:07 +07:00
Hiep Le
eb9a22ef7e fix(backend): unable to use custom mcp servers (v1 conversations) (#12038) 2025-12-14 23:30:49 +07:00
Tim O'Farrell
d57880f849 Agent server image from env (#12003)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-13 08:16:41 -07:00
Hiep Le
d772dd65a5 fix(frontend): fix fetching the number of events on the front end (v1 conversations) (#11987) 2025-12-12 22:10:22 +07:00
dependabot[bot]
5daada17fd chore(deps): bump the version-all group in /frontend with 8 updates (#12022)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 18:54:45 +04:00
Hiep Le
c6a8fc379b feat: support security analyzer settings for v1 conversations (#12008) 2025-12-12 21:49:15 +07:00
Abhay Mishra
5a21c59a3c refactor(frontend): Consolidate duplicate Settings type definitions (#12006) 2025-12-12 14:16:31 +00:00
Bharath A V
976d9d1ab9 Refactor(mocks): modularize MSW handlers into domain-specific files (#11974)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-12 13:21:08 +00:00
Bharath A V
6917d45d3a refactor(frontend): consolidate settings navigation items logic into shared custom hook (#11950)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-12 13:20:59 +00:00
Nhan Nguyen
8a202b945b fix(frontend): animate loading spinner for in-progress tasks (#12001)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-12 13:03:28 +00:00
Hiep Le
60491e30e8 chore: update sdk to latest version (#12013) 2025-12-12 00:08:18 +07:00
dependabot[bot]
62f594bc28 chore(deps): bump the version-all group across 1 directory with 2 updates (#12009)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-11 15:42:57 +00:00
sp.wack
94086f119a fix(frontend): Fix avatar context menu closing on diagonal mouse movement (#11994) 2025-12-11 19:17:21 +04:00
Neha Prasad
f76016aa4d chore: remove unused frontend dependencies (#11940)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-11 15:15:11 +00:00
Lee Kyeong Joon
b16845fa06 refactor(frontend): Refactor tests to use Zustand's native state setting instead of vi.mock for stores (#11980)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-11 14:53:08 +00:00
sp.wack
f4dd5384d0 fix(frontend): Fix empty state showing alongside error in RecentConversations (#11993) 2025-12-11 14:27:49 +00:00
Hiep Le
09e50b876d fix: app unawareness of custom secrets in v1 conversations (#11914) 2025-12-11 14:19:22 +07:00
Tim O'Farrell
f7c3a36745 feat: remember last selected git provider in homepage dropdown (#11979)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-10 19:22:47 -07:00
Rohit Malhotra
a593730b21 Add environment variable kill switch for V1 conversation creation (#11998)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-10 18:25:01 -05:00
Hiep Le
b308307ea2 chore: update sdk to latest version (#11999) 2025-12-11 03:35:01 +07:00
Rohit Malhotra
1d1eb6dcb0 Fix dup conversations for v1 PR comment resolver jobs (#11995) 2025-12-10 18:17:42 +00:00
HeyItsChloe
853547be82 fix(frontend): fix highlighted in terminal is missing background color (#11981)
Co-authored-by: Chloe <chloe@openhands.com>
2025-12-10 20:26:02 +04:00
Hiep Le
272a37d1b8 refactor(frontend): remove certain security analyzer options for v1 conversations (#11988) 2025-12-10 21:50:30 +07:00
sp.wack
92c91471b2 Add GitHub Actions workflow for frontend E2E tests with Playwright (#11990) 2025-12-10 14:43:34 +00:00
dependabot[bot]
7875df4be8 chore(deps): bump the version-all group in /frontend with 2 updates (#11973)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 12:39:30 +00:00
Rohit Malhotra
0aaad16d35 Fix V1 resolver custom secrets validation error (#11976)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-09 16:47:31 +00:00
Vasco Schiavo
df92923959 Refactor return statement to simplify get_supported_llm_models method (#11947) 2025-12-09 16:27:49 +00:00
sp.wack
e18168020a fix(frontend): skip flaky WebSocket broadcast tests (#11972) 2025-12-09 14:57:26 +00:00
Tim O'Farrell
a9c76d0ed4 APP-240 Fix GitHub webhook timeout issue to prevent client disconnect errors (#11965)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-09 07:29:11 -07:00
Rohit Malhotra
3743d10766 Fix: don't double count v1 conversation metadata (#11970) 2025-12-09 09:16:32 -05:00
Alona
9b57a0b14f Remove error icon from ExpandableMessage component (#11964) 2025-12-09 02:50:03 +07:00
Alona
8559efa7b2 Remove loud red x icon on agent commands (#11962) 2025-12-09 01:28:13 +07:00
Hiep Le
bf06b7e3f3 fix(frontend): hide api key input field in advanced settings when provider is openhands (#11949) 2025-12-08 23:03:59 +07:00
Hiep Le
959d610d86 fix(frontend): set v1_enable correctly when saving mcp settings (#11948) 2025-12-08 23:03:26 +07:00
Bharath A V
16125f2ae9 Refactor(frontend): move settings-service into api folder and update (#11958) 2025-12-08 14:50:51 +00:00
dependabot[bot]
d31950c061 chore(deps): bump the version-all group in /frontend with 6 updates (#11957)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-08 14:46:08 +00:00
Tim O'Farrell
db64abc580 Refactor webhook endpoints to use session API key authentication (#11926)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-08 07:40:01 -07:00
Rohit Malhotra
ed7adb335c GitHub V1 Callbacks not trigger by v1 enabled flag (#11923)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-08 03:58:45 +00:00
Cesar Garcia
584517edec docs: fix broken architecture diagram link in openhands/README.md (#11924)
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-12-07 22:15:58 +00:00
Tim O'Farrell
1a983d2978 APP-190 Add browser screenshot support for V1 conversations (#11919)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-06 14:04:01 -07:00
Hiep Le
d7b36c9579 fix: switching from own model to breaks functionality (#11916) 2025-12-06 11:21:18 +07:00
Tim O'Farrell
72c7d9c497 APP-216 Support multiple git providers in conversation secrets (#11908)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-05 11:50:45 -07:00
Hiep Le
7811a62491 refactor(frontend): remove max_budget_per_task input element for v1 (#11921) 2025-12-06 00:50:40 +07:00
dependabot[bot]
4344f5ad4e chore(deps): bump the version-all group across 1 directory with 9 updates (#11915)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-05 14:59:19 +00:00
Neha Prasad
17821f782e feat: display command in observation block (#11885)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-05 14:45:28 +00:00
Neha Prasad
e1b283886f fix: conversation tab state sync across browser tabs (#11680)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-05 14:35:10 +00:00
chuckbutkus
1d9cf72e39 JPMC Modifications (#11882) 2025-12-04 23:32:20 -05:00
Hiep Le
59ca8bd9a8 refactor: derive deterministic key id from secret itself (#11905) 2025-12-05 01:41:32 +07:00
Tim O'Farrell
3a9aa90c3a Bumped SDK to V1.4.1 (#11903) 2025-12-04 17:52:27 +00:00
sp.wack
0a98f165e2 chore(frontend): isolate MAJOR dependency bumps from #11869 (#11887)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-04 18:16:55 +04:00
Neha Prasad
6ec477dae2 fix: enable terminal scrollback to view command history (#11883) 2025-12-04 17:29:42 +07:00
Hiep Le
d0496fea8c chore: update sdk to latest version (#11897)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-12-04 01:36:19 +07:00
Tim O'Farrell
8f91db8ec4 Replace USE_V1_CONVERSATION_API feature flag with user setting (#11893)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-03 09:02:40 -07:00
sp.wack
816d8acf1f chore(frontend): isolate PATCH dependency bumps from #11869 (#11890)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-03 19:55:35 +04:00
sp.wack
97e6cb1340 chore(frontend): isolate MINOR dependency bumps from #11869 (#11888)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-03 14:29:18 +00:00
Hiep Le
cd9a3b02cf feat(frontend): display command in observation block in ui (#11884) 2025-12-03 19:55:55 +07:00
Marco Dalalba
14695a8f0e refactor/bugfix: simplify hasOpenHandsSuffix with provider lookup for gitlab/azure (#11877)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-12-03 12:34:21 +00:00
Hiep Le
eaea8b3ce1 fix(frontend): buying credits does not work on staging (#11873) 2025-12-03 10:07:01 +07:00
Tim O'Farrell
72555e0f1c APP-193: add X-Access-Token header support to get_api_key_from_header (#11872)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-02 17:01:09 -07:00
Hiep Le
fd13c91387 fix(backend): apply user-defined condenser_max_size in new v1 conversations (#11862) 2025-12-03 00:24:25 +07:00
Hiep Le
6139e39449 fix(backend): git settings not applying in v1 conversations (#11866) 2025-12-02 21:34:37 +07:00
Hiep Le
f76ac242f0 fix(backend): conversation statistics are currently not being persisted to the database (V1). (#11837) 2025-12-02 21:22:02 +07:00
Hiep Le
1f9350320f refactor(frontend): hide agent dropdown when v1 is enabled (#11860) 2025-12-02 20:22:40 +07:00
Hiep Le
1a3460ba06 fix(frontend): image attachments not working in v1 conversations (#11864) 2025-12-02 20:22:14 +07:00
Tim O'Farrell
8f361b3698 Fix git checkout error in workspace setup (#11855)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-01 23:01:30 +00:00
Tim O'Farrell
fd6e0cab3f Fix V1 MCP services (Fix tavily search) (#11840)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-01 21:19:19 +00:00
Hiep Le
33eec7cb09 feat(frontend): automatically scroll to bottom of container on plan content update (#11808)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-12-01 16:23:48 +00:00
Hiep Le
6c2862ae08 feat(frontend): add handler for 'create a plan' button click (#11806) 2025-12-01 11:08:00 -05:00
Hiep Le
6c821ab73e fix(frontend): the content of the FinishObservation event is not being rendered correctly. (#11846) 2025-12-01 09:29:18 -05:00
sp.wack
96f13b15e7 Revert "chore(backend): Add better PostHog tracking" (#11749) 2025-12-01 13:58:03 +00:00
Hiep Le
d9731b6850 feat(frontend): show plan content in the planning tab (#11807) 2025-12-01 08:42:44 -05:00
Hiep Le
e7e49c9110 fix(frontend): AppConversationStartTask timezone display in ui (#11847) 2025-12-01 08:13:54 -05:00
Ray Myers
27590497d5 chore: update posthog-js from 1.290.0 to 1.298.1 (#11830)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-12-01 17:03:44 +04:00
adshrc
991f1a242c feat(llm): added Claude Opus 4.5 model and corresponding test (#11841) 2025-12-01 11:09:33 +00:00
Marco Dalalba
6d8cca43a8 fix: add Azure GPT-5 family to stop words unsupported patterns (#11842) 2025-12-01 01:32:34 +01:00
Hiep Le
d62bb81c3b feat(backend): implement API to fetch contents of PLAN.md (#11795) 2025-11-30 13:29:13 +07:00
Hiep Le
156d0686c4 fix(frontend): the content of the BrowserObservation event is not being rendered correctly (#11832) 2025-11-28 23:16:34 +07:00
Hiep Le
d0b1d29379 fix(backend): the SaaS codebase is currently non-functional. (#11834) 2025-11-28 09:12:02 -07:00
Jeffrey Ma
974bcdfd0b SWE-fficiency benchmark implementation (#11716)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: enyst <engel.nyst@gmail.com>
2025-11-27 09:13:15 +01:00
Rohit Malhotra
ed094b6a97 Fix v1_enabled migration failures by making column nullable (#11829)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-26 21:41:03 +00:00
Rohit Malhotra
49624219ed fix(migration): add server_default to v1_enabled column migration (#11828)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-26 20:21:12 +00:00
Rohit Malhotra
9906a1d49a V1: Support v1 conversations in github resolver (#11773)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-26 13:11:05 -05:00
Hiep Le
014884333d fix(frontend): Remove azure devops integration button from cloud settings (#11826) 2025-11-27 00:41:28 +07:00
Hiep Le
865ddaabdf fix(backend): unable to start a new V0 conversation (#11824) 2025-11-26 23:49:52 +07:00
Hiep Le
3219834e35 fix(frontend): resolve issue preventing cost from displaying (V1) (#11798) 2025-11-26 19:39:07 +07:00
Hiep Le
2e295073ae fix(frontend): fileeditorobservationevent rendering issue (#11820) 2025-11-26 18:40:28 +07:00
Hiep Le
5ef45cfec2 refactor(frontend): support TerminalObservation event (#11819) 2025-11-26 17:53:47 +07:00
Tim O'Farrell
d737141efa SDK Fixes (#11813)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-26 10:44:17 +00:00
Hiep Le
b532a5e7fe fix(backend): github token not working for v1 conversations (#11814) 2025-11-26 01:04:45 +07:00
Hiep Le
c58e2157ea feat(frontend): display skill ready for v1 conversations (#11815) 2025-11-25 23:37:54 +07:00
mamoodi
9cc8687271 fix: handle None return from version_info.get('Components') in docker builder (#11816)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-25 15:35:40 +00:00
aoi127
f6e4d00df1 fix: prevent newline accumulation in XML parameter serialization (#11767)
Co-authored-by: Lai Jinyi <laijinyi@tp-link.com.cn>
2025-11-25 11:56:35 +01:00
Engel Nyst
7782f2afe9 Fix links in readme (#11802) 2025-11-24 19:58:55 +01:00
Hiep Le
639de8114f feat(frontend): add blue border to Planning Agent events (#11788) 2025-11-24 21:36:30 +07:00
Hiep Le
b830d1c513 fix(frontend): hide api key field for openhands provider and auto-populate the key (#11791) 2025-11-24 20:44:15 +07:00
Wan Arif
3504ca7752 feat: add Azure DevOps integration support (#11243)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-11-22 14:00:24 -05:00
Graham Neubig
1e513ad63f feat: Add configurable stuck/loop detection (#11799)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: chuckbutkus <chuck@all-hands.dev>
2025-11-21 22:27:38 +00:00
chuckbutkus
b9b8d27135 Add config option to check if roles are present (#11414) 2025-11-21 16:56:19 -05:00
mamoodi
da8a4b1179 remove unused workflows (#11793) 2025-11-20 16:21:37 -05:00
Hiep Le
d1d08bc490 feat(frontend): integration of events from execution and planning agents within a single conversation (#11786) 2025-11-20 21:21:46 +07:00
Tim O'Farrell
c82e183066 Fix Docker hostname issues in HTTP requests (#11787)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-20 11:59:58 +00:00
Rohit Malhotra
26e7d8060f fix(migrations): make SETTING_UP_SKILLS enum migration idempotent (#11782)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-11-20 11:21:40 +00:00
Tim O'Farrell
ba883ffeca Feat sandbox skills (#11785) 2025-11-20 10:52:13 +00:00
Rodney A.
77b565ce08 fix(frontend): fix duplicate React Aria IDs by updating @heroui/react to v2.8.5 (#11783) 2025-11-20 11:48:11 +07:00
Hiep Le
151c2895e0 feat(frontend): disable change-agent button until WebSocket connection is ready (#11781) 2025-11-20 01:28:17 +07:00
Tim O'Farrell
9538c7bd89 fix(migrations): add SETTING_UP_SKILLS to appconversationstarttaskstatus enum (#11780)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-19 18:14:24 +00:00
Boxuan Li
790b7c6e39 Add grok-code-fast-1 to FUNCTION_CALLING_PATTERNS (#11775)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-19 08:38:57 -05:00
Daniel Foguelman
4c57a98660 Remove inconsistent parameters in claude sonnet (#11719) 2025-11-19 08:38:19 -05:00
Hiep Le
28af600c16 fix(frontend): display LLM configuration errors to the user (#11776) 2025-11-19 20:15:42 +07:00
Hiep Le
36cf4e161a fix(backend): ensure microagents are loaded for V1 conversations (#11772)
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-11-19 18:54:08 +07:00
Engel Nyst
bede37fdb6 feat: Enable native tool calling for gemini-3-pro-preview (#11774) 2025-11-18 23:29:54 +01:00
Rohit Malhotra
1a33606987 Chore: move CLI code its own repo (#11724) 2025-11-18 19:59:12 +00:00
Robert Brennan
494eba094f Update fundraising amount in COMMUNITY.md (#11771) 2025-11-18 17:31:34 +00:00
Tim O'Farrell
84c62c4f23 Bumped Software Agent SDK and fixed V1 Delete (#11768) 2025-11-18 15:52:23 +00:00
Hiep Le
f5611c2188 fix(frontend): terminal output not appearing in v1 (#11769) 2025-11-18 22:03:28 +07:00
Robert Brennan
492c12693d Update README and COMMUNITY.md for v1 (#11747)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-18 09:37:30 -05:00
Graham Neubig
5345716340 Fix the favicon (#11766) 2025-11-18 07:30:46 -05:00
Hiep Le
b43f7439a7 feat(backend): enable deletion of sub-conversations when removing a parent conversation (#11757) 2025-11-18 17:53:04 +07:00
Tim O'Farrell
192a8e6de4 Fix for docker regression (#11759) 2025-11-17 18:18:40 +00:00
Hiep Le
cd87987037 feat(frontend): add functionality to fetch sub-conversation data (#11758) 2025-11-18 00:49:54 +07:00
Graham Neubig
0dbf09f954 Update OpenHands logos with new branding (#11741)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-17 12:47:36 -05:00
Tim O'Farrell
871cc932d7 APP-155 Made all version tags the same color to reduce confusion (#11753) 2025-11-17 16:05:27 +00:00
மனோஜ்குமார் பழனிச்சாமி
60c4d9a23f Add Groq models to function calling patterns (#11745) 2025-11-17 09:19:39 -05:00
Tim O'Farrell
6c121bde74 APP-159 Fix Docker container networking for agent server URLs (#11751)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-17 06:09:21 -07:00
sp.wack
6dcf27dbc0 feat(frontend): move PostHog trackers to the frontend (#11748) 2025-11-17 14:55:29 +04:00
Tim O'Farrell
1f6ef8175b Enhance Docker image pull logging with periodic progress updates (#11750)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-17 03:15:21 -07:00
Hiep Le
d6fab190bf feat(frontend): integrate with the API to create a sub-conversation for the planning agent (#11730) 2025-11-15 09:43:21 +07:00
Hiep Le
833aae1833 feat(backend): exclude sub-conversations when searching for conversations (#11733) 2025-11-15 00:21:27 +07:00
Tim O'Farrell
2841e35f24 Do not get live status updates when they are not required (#11727)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-14 07:55:43 -07:00
Tim O'Farrell
8115d82f96 feat: add created_at__gte filter to search_app_conversation_start_tasks (#11740)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-14 07:08:34 -07:00
Hiep Le
7263657937 feat(backend): include sub-conversation ids when fetching conversation details (#11734) 2025-11-14 11:34:30 +07:00
jpelletier1
34fcc50350 Update to include llms.txt (#11737) 2025-11-13 21:42:50 +00:00
jpelletier1
24a9758434 Adding an Agent Builder Skill/Microagent (#11720) 2025-11-13 16:10:00 -05:00
Tim O'Farrell
f24d2a61e6 Fix for wrong column name (#11735) 2025-11-13 17:55:23 +00:00
Hiep Le
e3d0380c2e feat(frontend): add support for the shift + tab shortcut to cycle through conversation modes (#11731) 2025-11-14 00:10:25 +07:00
Hiep Le
8c3f93ddc4 feat(frontend): set descriptive text for all options in the change agent button (#11732) 2025-11-14 00:10:15 +07:00
Hiep Le
bc86796a67 feat(backend): enable sub-conversation creation using a different agent (#11715) 2025-11-13 23:06:44 +07:00
sp.wack
d5b2d2ebc5 fix(frontend): Sync client PostHog opt-in status with server setting (#11728) 2025-11-13 13:22:05 +00:00
Rohit Malhotra
b605c96796 Hotfix: rm max condenser size override (#11713) 2025-11-12 20:13:16 -05:00
sp.wack
8192184d3e chore(backend): Add better PostHog tracking (#11655)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-12 16:47:21 +00:00
Hiep Le
8e75f25108 feat(frontend): implement new task tracker interface (#11692) 2025-11-12 22:59:45 +07:00
Neha Prasad
73fe865c7e feat: queue chat messages during runtime connection (#11687)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-11-12 13:20:09 +00:00
Rohit Malhotra
95a44f4248 CLI release 1.0.7 (#11712) 2025-11-11 16:46:30 -05:00
Rohit Malhotra
0a6b76ca2d CLI: bump agent-sdk (#11710)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-11 20:29:18 +00:00
Tim O'Farrell
8b6521de62 Fix for issue where conversation does not start (#11695) 2025-11-11 20:23:18 +00:00
mamoodi
11636edf15 Release 0.62.0 (#11706) 2025-11-11 14:57:13 -05:00
Hiep Le
915c180ba7 feat(frontend): disable change agent button while agent is running (#11691) 2025-11-12 00:46:12 +07:00
sp.wack
cdd8aace86 refactor(frontend): migrate from direct posthog imports to usePostHog hook (#11703) 2025-11-11 15:48:56 +00:00
Hiep Le
a2c312d108 feat(frontend): add plan preview component (#11676) 2025-11-11 21:59:23 +07:00
sp.wack
5ad3572810 chore(frontend): Remove user_activated PostHog capture event (#11704) 2025-11-11 14:35:04 +00:00
John Eismeier
967e9e1891 Propose fix some typos and ignore emacs backup files (#11701)
Signed-off-by: John E <jeis4wpi@outlook.com>
2025-11-11 09:20:42 -05:00
sp.wack
f8a41d3ffe fix(frontend): Properly reflect default user analytics setting (#11702) 2025-11-11 18:19:37 +04:00
John-Mason P. Shackelford
6e9e7547e5 Add Documentation link to profile context menu (#11583)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-11 09:16:32 -05:00
Hiep Le
9b4f1c365b feat(frontend): add change agent button (#11675) 2025-11-11 20:28:48 +07:00
Engel Nyst
f4dcc136d0 tests: remove Windows-only tests and clean up Windows conditionals (#11697) 2025-11-10 21:34:55 +01:00
Rohit Malhotra
36a8cbbfe4 Add GitHub CI workflow to check package versions (#11637)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-10 19:39:49 +00:00
Engel Nyst
83a3c2c5bf Add invisible AI-only guidance to Checklist: humans must fill (#11688) 2025-11-10 18:13:18 +00:00
Engel Nyst
63c9e6403f ci: remove flaky Windows Python tests workflow (#11694) 2025-11-10 12:43:48 -05:00
Hiep Le
bff734070c feat(frontend): update data-placeholder when switching to plan mode (#11674) 2025-11-10 21:30:29 +04:00
mamoodi
5db6bffaf6 Add some notes to the README for things that are not officially suppo… (#11663) 2025-11-10 20:16:41 +04:00
Engel Nyst
14807ed273 ci: remove outdated integration runner (#11653) 2025-11-10 15:51:40 +01:00
Rohit Malhotra
e0d26c1f4e CLI: custom visualizer (#11677) 2025-11-07 19:45:01 +00:00
Rohit Malhotra
27c8c330f4 CLI release 1.0.6 (#11672) 2025-11-07 14:10:04 -05:00
sp.wack
0c927b19d2 fix(frontend): agent loading condition update logic (#11673) 2025-11-07 18:04:27 +00:00
Hiep Le
a660321d55 feat(frontend): display plan content within the planner tab (#11658) 2025-11-08 00:54:15 +07:00
Tim O'Farrell
0e94833d5b Now removing V1 sandboxes in the V0 endpoint (#11671) 2025-11-07 10:51:46 -07:00
Engel Nyst
b83e2877ec CLI: align with agent-sdk renames (#11643)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
2025-11-07 11:30:37 -05:00
sp.wack
7acee16de5 fix(frontend): Consider start task job error status for loading indicators (#11670) 2025-11-07 19:24:29 +04:00
sp.wack
1e3f1de773 fix(frontend): Add translations for error status' (#11669) 2025-11-07 13:51:58 +00:00
sp.wack
bfe60d3bbf chore(frontend): Disable /feedback/conversation/{conversationId}/batch for V1 conversations (#11668) 2025-11-07 13:50:09 +00:00
sp.wack
ad75cd05d8 chore(frontend): Add better PostHog tracking (#11645) 2025-11-07 16:35:54 +04:00
Hiep Le
955f87561b feat(frontend): enable pinning and unpinning of conversation tabs (#11659) 2025-11-07 13:38:30 +07:00
Hiep Le
1e5bff82f2 feat(frontend): visually highlight chat input container in plan mode (#11647) 2025-11-07 13:14:28 +07:00
Tim O'Farrell
ddf58da995 Fix V1 callbacks (#11654)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-06 16:05:58 -07:00
Hiep Le
b678d548c2 feat(frontend): create new planner tab in the interface (#11646) 2025-11-06 23:56:35 +07:00
Hiep Le
a1d4d62f68 feat(frontend): show server status menu when hovering over the status indicator (#11635) 2025-11-06 16:23:08 +04:00
Yakshith
75e54e3552 fix(llm): remove default reasoning_effort; fix Gemini special case (#11567) 2025-11-05 23:30:46 +01:00
Yuxiao Cheng
6b211f3b29 Fix stuck after incorrect TaskTrackingAction (#11436)
Co-authored-by: jarrycyx <dzdzzd@126.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-11-05 22:09:51 +00:00
mamoodi
e208b64a95 Update free credits statement to $10 (#11651) 2025-11-05 20:57:56 +00:00
mamoodi
555444f239 Release 0.61.0 (#11618)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
2025-11-05 15:11:22 -05:00
Tim O'Farrell
d99c7827d8 More updates of agent_status to execution_status (#11642)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-05 19:19:34 +00:00
mamoodi
5a8f08b4ef Remove obsolete workflow (#11650) 2025-11-05 19:56:34 +01:00
Hiep Le
44fbd6c1b9 refactor(backend): the delete_app_conversation_info function (#11648) 2025-11-05 23:45:16 +07:00
sp.wack
7e824ca5dc fix(frontend): V1 Loading UI (#11630) 2025-11-05 14:23:10 +00:00
sp.wack
9a7002d817 fix(frontend): V1 resume conversation / agent (#11627) 2025-11-05 14:16:46 +00:00
Hiep Le
6411d4df94 feat(frontend): display text label when items are selected across all canvas views (#11636) 2025-11-05 16:47:22 +07:00
eddierichter-amd
c544ea1187 localhost base_url fixup when running in a docker container (#11474)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-11-04 17:57:25 -05:00
Graham Neubig
308d0e62ab Change error logging to info for missing config files (#11639) 2025-11-04 21:27:13 +01:00
Ray Myers
9abd1714b9 fix - Speed up runtime tests (#11570)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-04 11:17:55 -06:00
sp.wack
f1abe6c6af fix(ci): Lint Python (#11634) 2025-11-04 16:24:24 +00:00
Tim O'Farrell
30b5ad1768 Fix for issue where conversations won't start (#11633) 2025-11-04 08:51:22 -07:00
Hiep Le
4ea3e4b1fd refactor(frontend): break down conversation service into smaller services (#11594) 2025-11-04 20:52:44 +07:00
Hiep Le
7049a3e918 chore(frontend): add feature flag for planning agent (#11616) 2025-11-04 20:32:45 +07:00
Hiep Le
fa431fb956 refactor(backend): update get_microagent_management_conversations API to support V1 (#11313)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-11-04 17:44:44 +07:00
Tim O'Farrell
2fc8ab2601 Bumped Software Agent SDK (#11626) 2025-11-03 14:53:12 -07:00
mamoodi
8e119c68ab Create CNAME 2025-11-03 15:43:34 -05:00
Hiep Le
8893f9364d refactor: update delete_app_conversation to accept ID instead of object (#11486)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-11-03 13:26:33 -07:00
Tim O'Farrell
727520f6ce V1 CORS Fix (#11586)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-03 12:14:02 -07:00
Tim O'Farrell
898c3501dd Update initial from $20 to $10 (#11624) 2025-11-03 19:11:18 +00:00
Jessica Kerr
4c81965c61 build(devcontainer): add uvx installation (#11610) 2025-11-03 19:37:54 +01:00
Hiep Le
0f054c740c fix(frontend): the width of the branch dropdown appears inconsistent on medium-sized screens. (#11620) 2025-11-04 01:30:11 +07:00
Yuxiao Cheng
9bcf80dba5 Adding error logging when config file is not found. (#11419)
Co-authored-by: jarrycyx <dzdzzd@126.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-11-03 13:19:48 -05:00
மனோஜ்குமார் பழனிச்சாமி
2a98cd9338 Fix import order for Windows PowerShell support (#11557) 2025-11-03 13:14:23 -05:00
Rohit Malhotra
b31dbfc21a CLI: make sure MCP server doesn't persist even after removal (#11602)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-03 12:45:47 -05:00
Tim O'Farrell
5d711d5576 Exclude V1 conversations from V0 (#11595) 2025-11-03 09:57:34 -07:00
Rohit Malhotra
3eb73de924 CLI: lazy load conversation for /new command (#11601)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-03 16:30:08 +00:00
Rohit Malhotra
2e49f07451 CLI: Rm loading context (#11603)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-03 16:15:47 +00:00
Hiep Le
e51685dab4 fix(frontend): there is insufficient padding below the code block. (#11615) 2025-11-03 21:34:01 +07:00
Aphix
b85cc0c716 fix: Autodetect pwsh.exe & DLL path (Win/non-WSL) (#11044) 2025-11-03 08:27:30 -05:00
Hiep Le
7ef1720b5d fix(frontend): correct handling of OBSERVATION_MESSAGE messages for task events (#11613) 2025-11-03 18:57:11 +07:00
Hiep Le
a6385b4059 fix(frontend): agent status shows “Disconnected” when starting a new conversation until sandbox initializes (#11612) 2025-11-03 18:56:52 +07:00
sp.wack
7cfe667a3f fix(frontend): V1 event rendering to display thought + action, then thought + observation (#11596) 2025-11-03 14:07:35 +04:00
Engel Nyst
6e8be827b8 Fix deprecated links (#11605) 2025-11-01 12:37:32 -04:00
Tim O'Farrell
2ccc611e7c Regenerated poetry lock to update dependencies (#11593) 2025-10-31 20:25:01 +00:00
Rohit Malhotra
1f7dec4d94 CLI: patch release 1.0.5 (#11598) 2025-10-31 19:57:39 +00:00
sp.wack
966e4ae990 APP-125: Reset V1 terminal state when switching conversations by forcing remount (#11592)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-31 18:41:19 +00:00
Rohit Malhotra
231019974c CLI: fix binary build (#11591) 2025-10-31 18:01:29 +00:00
Rohit Malhotra
d246ab1a21 Hotfix(CLI): make settings page available even when conversation hasn't been created (#11588)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-31 17:19:53 +00:00
jpelletier1
15c207c401 Disables Copilot icon by default (#11589) 2025-10-31 17:06:15 +00:00
Rohit Malhotra
cf21cfed6c Hotfix(CLI): make sure to update condenser credentials (#11587)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-31 16:37:59 +00:00
Rohit Malhotra
12d57df6ac CLI Patch release 1.0.4 (#11585) 2025-10-31 14:59:39 +00:00
Rohit Malhotra
3239eb4027 Hotfix(CLI): Update README to use V1 CLI for serve command and point to new docker image artifacts (#11584) 2025-10-31 09:34:19 -04:00
Rohit Malhotra
9be673d553 CLI: Create conversation last minute (#11576)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-10-30 23:04:41 +00:00
Tim O'Farrell
7272eae758 Fix remote sandbox permissions (#11582) 2025-10-30 22:13:02 +00:00
mamoodi
ec670cd130 Rename LLM API Key to OpenHands LLM Key in settings (#11577)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-30 16:52:31 -04:00
Hiep Le
31702bf46b fix(frontend): delays in updating conversation titles before they are reflected in the user interface. (#11558)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-10-30 18:06:18 +00:00
Tim O'Farrell
5894d2675e V1 IDs without hyphens (#11564) 2025-10-30 16:33:16 +00:00
Hiep Le
59a992c0fb feat(frontend): allow all users to access the LLM page and disable Pro subscription functionality (#11573) 2025-10-30 22:01:30 +07:00
Rohit Malhotra
1939bd0fda CLI Release 1.0.3 (#11574) 2025-10-30 14:39:42 +00:00
Ray Myers
58e690ef75 Fix flaky test_condenser_metrics_included by creating new action objects (#11555)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-30 09:20:06 -05:00
Rohit Malhotra
97403dfbdb CLI: rename deprecated args (#11568) 2025-10-30 09:20:27 -04:00
sp.wack
2fc31e96d0 chore(frontend): Add V1 git service API with unified hooks for git changes and diffs (#11565) 2025-10-30 13:03:25 +00:00
Rohit Malhotra
6558b4f97d CLI: bump agent-sdk version (#11566)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-30 03:38:36 +00:00
Kevin Musgrave
12d6da8130 feat(evaluation): Filter task ids by difficulty for SWE Gym rollouts (#11490)
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-30 02:30:19 +00:00
mamoodi
38f2728cfa Release 0.60.0 (#11544)
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
2025-10-29 16:17:46 -04:00
sp.wack
fab48fe864 chore(frontend): Remove Jupyter tab and features (#11563) 2025-10-29 17:57:48 +00:00
sp.wack
a196881ab0 chore(frontend): Make terminal read-only by removing user input handlers (#11546) 2025-10-29 21:30:10 +04:00
Rohit Malhotra
ca2c9546ad CLI: add unit test for default agent (#11562)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-29 13:11:06 -04:00
sp.wack
704fc6dd69 chore(frontend): Add history loading state for V1 conversations (#11536) 2025-10-29 16:11:25 +00:00
Hiep Le
6630d5dc4e fix(frontend): display error content when FileEditorAction encounters an error (#11560) 2025-10-29 20:03:25 +04:00
Hiep Le
0e7fefca7e fix(frontend): displaying observation result statuses (#11559) 2025-10-29 20:02:32 +04:00
sp.wack
4020448d64 chore(frontend): Add unified hooks for V1 sandbox URLs (VSCode and served hosts) (#11511)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-29 14:52:31 +00:00
Hiep Le
2fdd4d084a feat(frontend): display “waiting for user confirmation” when agent status is “awaiting_user_confirmation” (#11539) 2025-10-29 17:31:05 +04:00
Hiep Le
aba5d54a86 feat(frontend): V1 confirmation's call the right API (#11542) 2025-10-29 17:29:27 +04:00
sp.wack
6710a39621 hotfix(frontend): add unified conversation config hook with V1 support (#11547) 2025-10-29 17:26:37 +04:00
Tim O'Farrell
fccc6f3196 Fix permissions issue in docker Sandbox (#11549) 2025-10-28 20:24:54 +00:00
Tim O'Farrell
7447cfdb3d Removed the pyright tool setting because it degrades VSCode developer experience (#11545) 2025-10-28 18:31:07 +00:00
Rohit Malhotra
297af05d53 Remove V0 CLI (#11538) 2025-10-28 13:16:07 -04:00
Hiep Le
b8f387df94 fix(frontend): chat suggestions disappear when “Push” is pressed before V1 conversation starts (#11494) 2025-10-29 00:04:30 +07:00
sp.wack
fc67f39b74 feat(frontend): implement V1 conversation pause/resume functionality (#11541) 2025-10-28 19:45:40 +04:00
Ray Myers
bc8922d3f9 chore - Remove trixie image build (#11533) 2025-10-28 15:32:48 +00:00
Hiep Le
37d58bba4d fix(frontend): the microagent management page is currently broken as a result of recent V1 changes. (#11522) 2025-10-28 22:10:13 +07:00
sp.wack
037a2dca8f fix(frontend): render terminal input commands and skip empty outputs (#11537) 2025-10-28 14:32:19 +00:00
Hiep Le
b5920eece6 fix(frontend): unable to create a new conversation through the Microagent Management page when the feature flag is enabled. (#11523) 2025-10-28 16:25:56 +04:00
sp.wack
a81bef8cdf chore: Bump agent server (#11520)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-28 16:21:19 +04:00
Ray Myers
450aa3b527 fix(llm): support draft editor retries by adding correct_num to LLMConfig (#11530)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Justin Coffi <jcoffi+github@gmail.com>
2025-10-28 01:02:50 +00:00
Ray Myers
4decd8b3e9 Provide httpx default context for OS-provided certs (#11505)
Co-authored-by: Pierrick Hymbert <pierrick.hymbert@gmail.com>
2025-10-27 17:54:20 -05:00
Zacharias Fisches
818f743dc7 Bugfix: respect config.tom system_prompt_filename when running swe-bench (#11091)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-10-27 21:55:05 +00:00
Evelyn Colon
f402371b27 Contribution to Ignoring SSL Errors (#11230)
Co-authored-by: Evelyn Colon <evelyncolon13579@gmail.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-27 21:29:55 +00:00
Nick Ludwig
92b1fca719 feat: Add option to pass custom kwargs to litellm.completion (#11423)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-27 21:07:31 +00:00
Yakshith
8de13457c3 fix(docker): mark /app as safe git directory to resolve pre-commit er… (#10988)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-27 20:26:34 +00:00
Alex42006
8f94b68ea1 Fix red X when Tavily MCP does not return error (#11227)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-10-27 21:36:08 +04:00
Rohit Malhotra
eb616dfae4 Refactor: rename user secrets table to custom secrets (#11525)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-27 16:58:07 +00:00
John-Mason P. Shackelford
26c636d63e OpenHands Enterprise Telemetry Service M1 (#11468)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-27 13:01:56 +00:00
sp.wack
3ec8d70d04 fix(frontend): Optimistically cache individual conversations from paginated results (#11510) 2025-10-27 16:24:46 +04:00
John-Mason P. Shackelford
694ac74bb9 chore: repo.md now has instructions for enterprise directory (#11478)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-27 07:45:04 -04:00
Cesar Garcia
7ee20067a8 Fix broken DOC_STYLE_GUIDE.md link in Development.md (#11368)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-10-26 14:25:42 -04:00
Tim O'Farrell
054c5b666f Moved event search to background thread (#11487) 2025-10-26 09:39:27 -06:00
PiteXChen
0ff7329424 Optimize the condense conditions of the condenser (#11332)
Signed-off-by: CLFutureX <chenyongqyl@163.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-10-26 11:23:22 -04:00
Wolf Noble
86c590cdc3 feat: Expose session_id to sandbox/runtime container (#10863) 2025-10-26 11:21:38 -04:00
mamoodi
319677e629 Fix README docker image (#11515) 2025-10-26 11:16:24 -04:00
Robert Brennan
f8b566b858 Fix broken docker links (#11514) 2025-10-26 11:05:44 -04:00
Hiep Le
f9694858fb fix(frontend): frontend connects to WebSocket too early (#11493) 2025-10-26 12:35:55 +04:00
Hiep Le
7880c39ede fix(frontend): loading spinner shown while waiting for start task to complete (#11492) 2025-10-26 12:29:21 +04:00
Robert Brennan
b5e00f577c Replace All-Hands-AI references with OpenHands (#11287)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-10-26 01:52:45 +02:00
Rohit Malhotra
2631294e79 Fix: incorrect attribute in convo info service (#11503) 2025-10-24 16:33:36 -06:00
Ray Myers
47776ae2ad chore - Reference new org in python deps (#11504) 2025-10-24 20:56:56 +00:00
Graham Neubig
0ad411e162 Fix: Change default DOCKER_ORG from all-hands-ai to openhands (#11489)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-24 15:06:48 -04:00
Alona
7bc56e0d74 feat: add 'git' as trigger word for bitbucket microagent (#11499) 2025-10-24 18:49:50 +00:00
Samuel Akerele
e450a3a603 fix(llm): Support nested paths in litellm_proxy/ model names (#11430)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-24 17:41:25 +00:00
softpudding
17e32af6fe Enhance dead-loop recovery by pausing agent and reprompting (#11439)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-24 11:25:14 +00:00
Tim O'Farrell
4b303ec9b4 Fixes to unblock frontend (#11488)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-10-23 14:43:45 -06:00
Ray Myers
eb954164a5 chore - update ghcr enterprise build to new org 2025-10-23 12:53:01 -05:00
Tim O'Farrell
0c1c2163b1 The AsyncRemoteWorkspace class was moved to the SDK (#11471) 2025-10-23 09:39:56 -06:00
Hiep Le
dd2a62c992 refactor(frontend): disable some agent server API until implemented in the server source code (#11476) 2025-10-23 19:38:18 +04:00
Rohit Malhotra
f3d9faef34 SAAS: dedup fetching user settings from keycloak id (#11480)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-23 09:56:55 -04:00
Hiep Le
134c122026 fix: disable pro subscription upgrade on LLM page for self-hosted installs (#11479) 2025-10-23 01:11:04 +07:00
Rohit Malhotra
523b40dbfc SAAS: drop deprecated table (#11469)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-22 10:52:10 -04:00
sp.wack
6a5b915088 Add unified file upload support for V0 and V1 conversations (#11457) 2025-10-22 17:44:38 +04:00
sp.wack
a5c5133961 Remove queries from cache and do not refetch them after starting a conversation (#11453) 2025-10-22 13:42:09 +00:00
sp.wack
eea1e7f4e1 Prevent calling V1 "start tasks” API if feature flag is disabled + always set “start tasks” query cache to stale (#11454) 2025-10-22 20:38:32 +07:00
Hiep Le
e2d990f3a0 feat(backend): implement get_remote_runtime_config support for V1 conversations (#11466) 2025-10-22 15:38:25 +07:00
Hiep Le
f258eafa37 feat(backend): add support for updating the title in V1 conversations (#11446) 2025-10-22 13:36:56 +07:00
Hiep Le
19634f364e fix(backend): repository pill does not display the selected repository when a conversation is initiated via slack (#11225) 2025-10-22 13:12:32 +07:00
Alona
aa6446038c fix: remove accidentally committed Docker image tags from config.sh (#11470) 2025-10-22 04:48:17 +00:00
Tim O'Farrell
dbddc1868e Fixes for VSCode code completion (#11449) 2025-10-21 21:39:50 +00:00
Rohit Malhotra
cd967ef4bc SAAS: add local development helper scripts (#11459) 2025-10-21 21:26:23 +00:00
Tim O'Farrell
e34c13ea3c Set dump mode to json to convert UUIDs to strings (#11467) 2025-10-21 19:20:56 +00:00
Hiep Le
1f35a73cc4 fix(frontend): display repository information after creating a V1 conversation (#11463) 2025-10-21 18:24:26 +00:00
Alona
267528fa82 fix: refresh provider tokens proactively and update git URLs on resume (#11296) 2025-10-22 01:19:08 +07:00
sp.wack
49f360d021 Fix toast dismissal to target specific toast IDs instead of all toasts (#11455) 2025-10-21 17:43:14 +00:00
sp.wack
9520da668c Prevent WebSocket provider remount by defaulting to V1 (#11458) 2025-10-21 17:11:15 +00:00
Rohit Malhotra
9d19292619 V1: Experiment manager (#11388)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-21 16:04:48 +00:00
sp.wack
fc9a87550d Fix zero state not showing for V1 conversations (#11452) 2025-10-21 20:04:01 +04:00
sp.wack
490d3dba10 Remove toast notifications for starting/resuming conversation sandbox (#11456) 2025-10-21 20:03:45 +04:00
Rohit Malhotra
5ed1dde2e9 CLI Patch Release 1.0.2 (#11448) 2025-10-21 15:32:00 +00:00
sp.wack
a68576b876 Clear conversation state when switching between V1 conversations (#11447) 2025-10-21 20:21:58 +07:00
mamoodi
722124ae83 Move Search API Key and Confirmation Mode to Advanced settings (#11390)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-21 08:51:21 -04:00
Tim O'Farrell
44578664ed Add Concurrency Limits to SandboxService (#11399)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-20 20:22:12 +00:00
Rohit Malhotra
9efe6eb776 Simplify security analyzer confirmation: replace two reject options with single 'Reject' option (#11443)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-10-20 19:45:42 +00:00
Tim O'Farrell
6d137e883f Add VSCode URL support and worker ports to sandbox services (#11426)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-20 18:43:08 +00:00
Xingyao Wang
2889f736d9 Use PyPI version of Agent-SDK (#11411) 2025-10-20 17:25:54 +00:00
sp.wack
531683abae feat(frontend): V1 conversation API (PARTIAL) (#11336)
Co-authored-by: Hiep Le <69354317+hieptl@users.noreply.github.com>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-10-20 20:57:40 +04:00
Ryan H. Tran
fab64a51b7 Add support for claude-haiku-4-5 (#11434) 2025-10-20 19:56:40 +07:00
Rohit Malhotra
cc18a18874 [Hotfix, V1 CLI]: Include missing condenser prompt template in binary executable (#11428)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-19 18:18:23 +00:00
Graham Neubig
7525a95af0 Fix excessive error logging for missing org-level microagents (#11425)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-19 13:41:28 -04:00
Rohit Malhotra
640f50d525 Fix: exception handling for get convo metadata (#11421) 2025-10-17 18:12:18 +00:00
mamoodi
6f2f85073d Update PR template (#11420) 2025-10-17 13:57:42 -04:00
jpelletier1
9f3b2425ec Experimental first-time user onboarding microagent (#11413) 2025-10-17 12:35:24 -04:00
Tim O'Farrell
1ebc3ab04e Fix FastMCP authentication API breaking change (#11416)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-17 16:32:36 +00:00
Graham Neubig
9bd0566e4e fix(logging): Prevent LiteLLM logs from leaking through root logger (#11356)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-17 11:19:22 -04:00
Engel Nyst
d82972e126 FE: Replace AllHands logo with OpenHands logo (#11417)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-17 11:44:56 +02:00
Boxuan Li
e1b94732a8 Implement graceful shutdown for headless mode (#11401)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-16 23:09:31 -07:00
olyashok
5219f85bfa feat: make websocket client wait timeout configurable (#11405)
Co-authored-by: Alex <alex@cellect.ai>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-10-16 16:49:50 +00:00
Kevin Musgrave
a237b578c0 feat(evaluation): Add multi-swe-bench dependency and fix rollout script (#11326)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-10-16 14:35:19 +00:00
mogith-pn
f42a4f75cb feat: Clarifai Integration as LLM Provider (#11324) 2025-10-16 18:23:00 +04:00
Engel Nyst
3e645f8649 fix(integration-tests): accept --eval-num-workers and --eval-note in integration test runner (#11387) 2025-10-16 09:50:24 -04:00
Ryan H. Tran
5182388323 Extend context truncation cases (#11393) 2025-10-16 17:55:57 +07:00
juanmichelini
471d272c7c Mint security eval fix (#11273)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-10-16 01:42:05 +00:00
Tim O'Farrell
0522734875 Add ProcessSandboxService implementation for process-based sandboxes (#11394)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-15 17:53:50 -06:00
Tim O'Farrell
f4fd8ea907 Added flag to disable the V1 endpoints inside nested V0 runtimes (#11391) 2025-10-15 15:33:52 -06:00
Engel Nyst
e9413aaded Update header logo branding to OpenHands (#11383)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-15 21:28:22 +02:00
sp.wack
ef004962cc hotfix(backend): Update route parameters from 'id' to 'sandbox_id' (#11389) 2025-10-15 16:40:10 +00:00
Hiep Le
58d67a2480 fix(backend): repository search is not working in the production environment (#11386) 2025-10-15 23:24:27 +07:00
Tim O'Farrell
72179f45d3 Fir for broken V1 db connection (#11382) 2025-10-15 08:07:43 -04:00
Ray Myers
15e7709ff6 chore - Add README notice of coming org rename (#11381) 2025-10-14 23:39:12 -05:00
Christopher Pereira
bb563d6dd1 Fix typos (#11162) 2025-10-14 14:01:51 -04:00
Hiep Le
d991b9880d fix(frontend): reo tracker should be available only in the SaaS environment, not in self-hosted instances (#11367) 2025-10-14 22:16:45 +07:00
Rohit Malhotra
fe82cfd277 Hotfix(CLI VI): unable to launch via default entrypoint (#11354) 2025-10-14 10:39:49 -04:00
Cesar Garcia
16fa8ea7be Fix broken logo in README.md (#11366) 2025-10-14 14:29:27 +00:00
Tim O'Farrell
f292f3a84d V1 Integration (#11183)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-10-14 02:16:44 +00:00
Rohit Malhotra
5076f21e86 CLI(V1): Patch release (#11349) 2025-10-13 22:11:59 +00:00
Rohit Malhotra
2640d43159 Fix API key disappearing bug when updating CLI settings (#11351)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-13 21:02:58 +00:00
Rohit Malhotra
609fefc1b6 Fix CLI binary GLIBC compatibility for older Linux systems (#11337)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-13 18:52:52 +00:00
Rohit Malhotra
5db0d495d4 RM CLI version on opening page (#11347) 2025-10-13 18:33:57 +00:00
Rohit Malhotra
60fa7b3d01 [Hotfix, CLI(V1)]: Prevent crashing cli when confirmation mode disabled (#11343) 2025-10-13 17:43:22 +00:00
Rohit Malhotra
cca2a55166 Fix openhands CLI executable entry point in pyproject.toml (#11338)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-13 15:04:46 +00:00
Ryan H. Tran
c5e58572d5 fix(cli): escape action content before passing to HTML (#11333) 2025-10-13 22:02:26 +07:00
Alona
baaa41ed99 feat: Add Bitbucket Resolver templates (#10880) 2025-10-13 10:23:24 -04:00
Kevin Musgrave
19bae5ac0f feat(evaluation): Add placeholders to swe_gpt4.j2 (#11228)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-10-13 22:15:05 +08:00
rstar327
93e1cd44c6 fix: (frontend) clean up unsed error variable in try/catch block (#11325) 2025-10-13 14:13:11 +00:00
llamantino
c0ce78c64a fix: remove the hardcoded 5-minute timeout from the docker pull command (#11322) 2025-10-13 10:00:10 -04:00
Bogdan Petković
399bf92ed1 Fix: Correct rename detection in apply_patch to check per-diff instead of full patch (#10913)
Signed-off-by: Bogdan Petkovic <bogdan@fatdragon.dev>
Co-authored-by: Bogdan Petkovic <bogdan@fatdragon.dev>
2025-10-13 09:47:01 -04:00
Ray Myers
2bbe15a329 chore - CI check migrations are in sync and warn (#10946) 2025-10-10 15:19:00 -05:00
mamoodi
6f22092d07 Release 0.59.0 (#11319) 2025-10-10 15:31:38 -04:00
Rohit Malhotra
c034cc5dfb Refactor: move helper function to avoid circular imports (#11310)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-10 12:40:03 -04:00
Hiep Le
9bd02440b0 fix(frontend): some user interface elements are overlapping with the Create API Key modal (#11301) 2025-10-10 22:54:10 +07:00
Rohit Malhotra
c9d8782566 V1(CLI): Release (#11317) 2025-10-10 15:25:19 +00:00
sp.wack
ef49994700 feat(frontend): V1 WebSocket handler (#11221)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-10 16:29:27 +04:00
Rohit Malhotra
0f92bdc9a8 V1(CLI): Use built-in token for release (#11307)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-10 04:27:11 +00:00
Rohit Malhotra
22f67d309c CLI(V1): Multi platform build + release support (#11244)
Co-authored-by: Yakshith <yakshith.kommineni@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-09 19:02:02 +00:00
Rohit Malhotra
9fe4e9715a CLI(V1): Fix confirmation mode breaking on weaker models (#11274)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-09 17:31:09 +00:00
Hiep Le
4285c49edd refactor(frontend): revise the scrollbar styling on the settings page (#11297) 2025-10-09 23:47:58 +07:00
Hiep Le
6c8bef60f6 refactor(frontend): resolve scrollbar styling issues (repo selection form) (#11298) 2025-10-09 23:47:53 +07:00
Hiep Le
7f0b9e6ac2 fix(frontend): resolve layout and interaction issues with the conversation UI on touch devices (#11299) 2025-10-09 23:47:35 +07:00
Hiep Le
9db558fd87 fix(frontend): implement a pointer cursor on applicable UI elements when hovered over on the settings page (#11300) 2025-10-09 23:47:23 +07:00
Hiep Le
18f6484ef3 fix(frontend): resolve the issue with the ellipsis button functionality on the conversation card within the conversation panel (#11302) 2025-10-09 23:47:03 +07:00
Rohit Malhotra
7de32b2579 CLI(V1): expose advanced settings setup for first time users (#11288)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-09 11:12:37 -04:00
Hiep Le
36b174bfb4 fix(frontend): inconsistent most recent repository list after page refresh (#11283) 2025-10-09 16:04:18 +07:00
Hiep Le
f54a930081 fix(frontend): incorrect file drop placeholder display when chat input is expanded (#11285) 2025-10-09 16:03:54 +07:00
Hiep Le
3abebef26f fix(frontend): incorrect active state behavior in chat actions (#11286) 2025-10-09 16:02:04 +07:00
eddierichter-amd
a97e1471bb Lemonade Provider Integration (#11181) 2025-10-09 05:35:02 +00:00
Graham Neubig
843cc00e79 feat(logging): JSON log config for Uvicorn when LOG_JSON=1 (#11264)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-08 11:26:45 -04:00
Xingyao Wang
f3c6fd2122 Remove docs/ folder - migrated to separate repository (#11261)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-08 08:22:39 -04:00
Rohit Malhotra
c0221e5468 CLI(V1): Fix /status command (#11272)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-07 19:15:50 +00:00
Rohit Malhotra
997bf8efae CLI(V1): start new conversations without exiting CLI using /new command (#11262)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-07 11:28:16 -04:00
Rohit Malhotra
23d325cb16 CLI(V1): GUI Launcher (#11257)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-07 11:23:58 -04:00
dependabot[bot]
80dc2efaab chore(deps-dev): bump @tanstack/eslint-plugin-query from 5.90.1 to 5.91.0 in /frontend in the eslint group (#11190)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-07 15:05:01 +00:00
Graham Neubig
d1f8877600 Fix: Consolidate multi-line error logs into single-line JSON format (#11249)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-06 13:16:58 -04:00
Alona
08118d742b increase remote_runtime_api_timeout and handle duplicate secrets (#11239) 2025-10-06 22:40:45 +07:00
Hiep Le
c62a6616db feat(frontend): integrate with Reo.dev (#11251) 2025-10-06 21:37:25 +07:00
Xingyao Wang
fbf0429434 Filter all warnings in CLI when DEBUG is disabled (#11246)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-06 21:26:04 +08:00
Atharv Patil
0e2edb63f5 fix(frontend): Fixed prompt box resizing behavior (fixes #11025) (#11035) 2025-10-06 19:29:45 +07:00
Graham Neubig
50b38e9081 fix: migrate to PostHog v6.x API (#11241)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-05 21:38:37 -04:00
Yakshith
e9c3335656 fix: correct file ownership on mounted volumes (#11231) 2025-10-05 01:09:33 +00:00
Rohit Malhotra
3bf038ed7c CLI(V1) (#11220)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-10-04 17:14:36 -04:00
caocao-sys
408f8aa50f fix: RollingLogger move_back method ignoring amount parameter (#10874) (#10875)
Co-authored-by: shikaixuan <shikaixuan@baidu.com>
2025-10-03 22:49:33 +02:00
mamoodi
025ac7672f Update docs (#11224) 2025-10-03 14:29:24 -04:00
Yakshith
aab6f4127c fix(frontend): improve chat input status indicator responsiveness (#11202)
Co-authored-by: Hiep Le <69354317+hieptl@users.noreply.github.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: chuckbutkus <chuck@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Jamie Chicago <87397251+jamiechicago312@users.noreply.github.com>
2025-10-03 01:36:38 +07:00
Hiep Le
c932cd0815 fix(frontend): org level microagents not appearing (microagent management) (#11218) 2025-10-02 22:19:02 +07:00
Hiep Le
d3395172f8 fix(frontend): search repos (microagent management) (#11217) 2025-10-02 22:18:43 +07:00
sp.wack
1e8851b244 feat: V1 client types (#11216)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-02 15:02:37 +00:00
Jamie Chicago
167fb3f429 Replace dub.sh/openhands links with all-hands.dev/joinslack (#11209)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-01 20:00:00 +00:00
Robert Brennan
df4d30addf Add POST /api/conversations/{id}/message endpoint (#11177)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-01 15:35:29 -04:00
chuckbutkus
37daf068c5 Allow custom user (#11013)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-10-01 17:48:25 +00:00
mamoodi
5452abe513 Release 0.58.0 (#11168) 2025-10-01 13:18:20 -04:00
Hiep Le
a8b6406dac fix: searching repositories (#11203) 2025-10-01 22:21:20 +07:00
Hiep Le
509d4a9513 fix(frontend): the horizontal scrollbar is not displayed for the markdown content (#11200) 2025-10-01 12:31:56 +07:00
Alona
d099c21f5d fix: add provider tokens to resume conversation endpoint (#11155) 2025-10-01 05:20:48 +07:00
Hiep Le
4c89b5ad91 fix: showing unrelated files in the changes tab (#11185)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-10-01 01:44:36 +07:00
sp.wack
729c181313 Revert "fix(backend): Add validation for LLM settings to prevent non-pro user bypass" (#11192) 2025-09-30 17:54:33 +00:00
Hiep Le
2eb3a9e6ad refactor(frontend): migration of use-ws-error-message.ts to zustand (#11147) 2025-09-30 22:51:17 +07:00
Hiep Le
2382baacc2 feat(frontend): persist recent repos (#11171) 2025-09-30 22:15:36 +07:00
dependabot[bot]
98ce55e2fc chore(deps): bump the version-all group across 1 directory with 12 updates (#11174)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-30 13:18:09 +00:00
Ray Myers
c929447624 Tag enterprise-server image with PR Head (#11182) 2025-09-30 08:58:20 -04:00
Hiep Le
2cc77fb034 refactor(frontend): migration of use-optimistic-user-message.ts to zustand (#11148) 2025-09-30 19:56:07 +07:00
Hiep Le
d57462e8ca refactor(frontend): update the not found message displayed when no repositories match the search query (#11187) 2025-09-30 19:55:52 +07:00
Hiep Le
1e23017bb1 fix(frontend): pause agent button (chat interface) (#11172) 2025-09-30 19:55:25 +07:00
Hiep Le
3493348fac refactor(frontend): align chat message action buttons (#11173) 2025-09-30 19:55:09 +07:00
Web3 Outlaw
e63d981192 Upgrade Volta Node to 22.x (#11166) 2025-09-30 16:47:33 +04:00
Xingyao Wang
e19b3dd1f0 Add claude-sonnet-4-5 model support (#11179)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-30 03:27:19 +00:00
Ray Myers
c3da6c20bd chore - Upgrade to Debian Trixie in app image and runtime image option (#11114) 2025-09-29 21:08:48 +00:00
mamoodi
a022f505a8 Remove legacy README_CN.md and README_JA.md translation files (#11169)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-29 22:08:59 +02:00
Hiep Le
04196f8d53 fix(frontend): duplicate LLM navigation items in settings sidebar (#11176) 2025-09-29 15:34:04 -04:00
mamoodi
dcf00c34fa remove broken screenshot (#11167) 2025-09-29 09:35:57 -04:00
Robert Brennan
d4e94b32e1 Remove missing user message check for REMOTE_API_KEY (#11164) 2025-09-29 08:57:04 +08:00
Engel Nyst
a1b81fe923 Enable native tool calling for Anthropic Claude 3.5 Sonnet (dot-notation) models (#11156)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-28 00:38:37 +02:00
mamoodi
e6d799c51a Remove discord links as it winds down and some small doc updates (#11145) 2025-09-27 08:00:03 -04:00
sp.wack
fb6f688049 refactor(frontend): convert settings to vertical sidebar layout (#10971)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-26 13:57:37 +00:00
sp.wack
ef12adc107 fix(backend): Add validation for LLM settings to prevent non-pro user bypass (#11113) 2025-09-26 16:10:09 +04:00
Hiep Le
8a7a5cce5e refactor(frontend): remove store.ts file (#11119)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-09-26 10:03:18 +07:00
mamoodi
b883fe37e6 fix MCP links (#11137) 2025-09-25 23:32:19 +00:00
mamoodi
182b7adcab Clean up MCP docs and move it to settings (#11133) 2025-09-25 18:28:29 -04:00
mamoodi
63829d0f45 Fix help links for OpenHands Provider (#11128)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-25 19:04:48 +00:00
jpelletier1
830a9e027f docs: Add Pro Subscription documentation page (#11115)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-25 13:07:30 -04:00
mamoodi
120a5d6ebd Add new settings folder for better organization (#11118) 2025-09-25 12:06:10 -04:00
mamoodi
6b1d1869f3 Run pypi workflow on tags (#11112) 2025-09-25 14:03:01 +00:00
Hiep Le
e376c2bfd1 refactor(frontend): migration of agent-slice.ts to zustand (#11102) 2025-09-25 12:44:21 +07:00
mamoodi
f8f74858da Update parts of the OpenHands Cloud docs (#11107) 2025-09-24 16:27:52 -04:00
Ray Myers
848a884b04 chore - Track Python test coverage (#11072) 2025-09-24 15:27:34 -05:00
Hiep Le
88a58a1748 refactor(frontend): migration of jupyter-slice.ts to zustand (#11019) 2025-09-25 00:56:55 +07:00
Hiep Le
f59ea69b70 refactor(frontend): migration of microagent-management-slice.ts to zustand (#11033) 2025-09-24 23:58:17 +07:00
dependabot[bot]
8f004a1f6d chore(deps-dev): bump @tanstack/eslint-plugin-query from 5.86.0 to 5.90.1 in /frontend in the eslint group (#11101)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-24 20:53:20 +04:00
sp.wack
15b4690ebf feat(frontend): Animate conversation panels (#11099) 2025-09-24 16:41:19 +00:00
Hiep Le
df1c5bbf85 refactor(frontend): migration of event-message-slice.ts to zustand (#11080) 2025-09-24 22:53:45 +07:00
Hiep Le
8adbb76bd7 refactor(frontend): migration of browser-slice.ts to zustand (#11081) 2025-09-24 22:52:48 +07:00
Hiep Le
0095672439 feat(frontend): keyboard shortcuts for file copy and paste (#11096) 2025-09-24 22:52:03 +07:00
Hiep Le
6a5d09660d fix(frontend): upgrade banner covers conversation panel in settings (#11094) 2025-09-24 21:40:16 +07:00
Hiep Le
a94906e15c refactor(frontend): migration of security-analyzer-slice.ts to zustand (#11082) 2025-09-24 21:32:25 +07:00
Hiep Le
12dc256b5a refactor(frontend): git actions should be enabled at all times (#11063) 2025-09-24 21:31:51 +07:00
Hiep Le
11edf33b97 refactor(frontend): remove file-state-slice.ts file (#11061) 2025-09-24 21:31:11 +07:00
Hiep Le
fce66e94e7 refactor(frontend): event message (#11001) 2025-09-24 21:30:55 +07:00
Hiep Le
5457392eae refactor(frontend): migration of conversation-slice.ts to zustand (#11032) 2025-09-24 21:30:37 +07:00
Ray Myers
1e7024b60a fix - Set claude sonnet output limit (#11098) 2025-09-24 13:31:20 +00:00
Hiep Le
3977d4fdd7 fix(frontend): insufficient spacing between last message and chat input (#11055) 2025-09-24 20:13:21 +07:00
Tejas Goyal
16004426a2 feat: Add configurable timeouts for MCP tool invocations (Good first issues: #10684) (#11029)
Co-authored-by: Tejas Goyal <tejas@Tejass-MacBook-Pro.local>
2025-09-24 16:43:54 +04:00
dependabot[bot]
73eb53a379 chore(deps): bump the version-all group across 1 directory with 21 updates (#11078)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-24 16:24:27 +04:00
BenYao21
d3d70fcc60 issue #9388, this will fix the issue (#10450)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-09-22 16:56:53 -04:00
Xinyi He
7906eab6b1 Add inference generation of SWE-Perf Benchmark (#10246)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-22 20:35:30 +00:00
juanmichelini
547e1049f1 Multi swe gym (#10605)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-22 15:56:26 -04:00
mamoodi
818cc60b52 New label for not going stale (#11069) 2025-09-22 11:53:47 -04:00
Robert Brennan
431d2c1f43 security: upgrade setuptools to >=78.1.1 to address CVE-2025-47273 and CVE-2024-6345 (#11038)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: enyst <engel.nyst@gmail.com>
2025-09-22 04:05:45 +00:00
Engel Nyst
07f23641a3 build(deps): pin litellm to avoid build failure (#11054)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-22 03:54:37 +02:00
Hiep Le
de84af5586 feat(frontend): display lock icon when confirmation mode is enabled (#11030) 2025-09-20 10:55:19 +07:00
Hiep Le
b7765ba3f7 refactor(frontend): fix typecheck (#11037) 2025-09-19 13:43:00 -04:00
Hiep Le
b89f2e51e4 refactor(frontend): migration of metrics-slice.ts to zustand (#11018) 2025-09-19 23:52:21 +07:00
mamoodi
e09f93aa75 Release 0.57.0 (#10981)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-09-19 12:40:56 -04:00
Hiep Le
9f529b105a refactor(frontend): migration of command-slice.ts to zustand (#11003) 2025-09-19 23:33:59 +07:00
Graham Neubig
89e3d2a867 Improve OpenHands provider pricing documentation (#10974)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-20 00:22:44 +08:00
Hiep Le
a7b9a4f291 refactor(frontend): migration of status-slice.ts to zustand (#11017) 2025-09-19 22:27:55 +07:00
Hiep Le
88cd16ae21 refactor(frontend): migration of initial-query-slice.ts to zustand (#11020) 2025-09-19 22:27:20 +07:00
Hiep Le
a8a3e9e604 refactor(frontend): remove the code-slice.ts file (#11021) 2025-09-19 21:22:29 +07:00
Hiep Le
0061bcc0b0 refactor(frontend): custom chat input (#10984) 2025-09-19 21:06:18 +07:00
Hiep Le
9c9fa780b0 refactor(frontend): task tracking observation content (#11002) 2025-09-19 20:03:05 +07:00
Alona
569ac16163 Improve token refresh error logging (#11026) 2025-09-19 14:18:38 +07:00
Robert Brennan
46f7738f41 Update Python packages to latest versions (#11023)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-18 19:52:46 +00:00
Rohit Malhotra
3f3669dd34 Hotfix: rm model choice override (#11022) 2025-09-18 14:40:06 -04:00
sp.wack
cd65645eea Hide Tavily search API key help text in SaaS mode (#11014)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-18 16:40:29 +00:00
Robert Brennan
8e88a7a277 fix: resolve critical and high CVEs in enterprise Docker image (#10987)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-18 11:25:33 -04:00
Hiep Le
b393d52439 refactor(frontend): conversation main (#10985) 2025-09-18 20:23:13 +07:00
Hiep Le
faeec48365 refactor(frontend): conversation card (#10986) 2025-09-18 20:22:59 +07:00
sp.wack
774caf0607 feat: refactor status indicators (#10983)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-17 22:32:55 +04:00
sp.wack
7222730df0 Fix SaaS callback URLs and pro pill positioning (#10998)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-17 16:56:02 +00:00
Hiep Le
910177fc57 refactor(frontend): system message modal (#10969) 2025-09-17 21:56:14 +07:00
Hiep Le
ac9badbd20 refactor(frontend): metrics modal (#10968) 2025-09-17 21:55:25 +07:00
Ray Myers
02c299d88f Fix Slack resolver failing on AWAITING_USER_INPUT state (#10992)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-17 09:20:12 -05:00
mamoodi
f65fbef649 Remove runtime settings (#10996) 2025-09-17 13:59:29 +00:00
Hiep Le
3c2acad28d refactor(frontend): microagents modal (#10970) 2025-09-16 22:32:23 +07:00
Boxuan Li
0f1780728e Update str_replace_editor tool to use dynamic workspace path from SANDBOX_VOLUMES (#10965)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-15 17:46:54 -07:00
sp.wack
d3f3378a4c feat: Upgrade banner for unsubscribed SaaS users (#10890)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-15 23:04:44 +00:00
Engel Nyst
65f4164749 [Docs] Add environment variables reference table (#10926)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-15 18:31:44 +00:00
Hiep Le
3f984d878b refactor(frontend): move conversation APIs to a dedicated service handler (#10957) 2025-09-16 00:57:15 +07:00
Eliot Jones
10b871f4ab feat: Add Cygnal integration (#10898) 2025-09-15 09:57:03 -04:00
Hiep Le
d664f516db refactor(frontend): conversation tab content component (#10956) 2025-09-15 20:56:38 +07:00
Hiep Le
e74bbd81d1 fix(frontend): suppressing event display in the absence of user messages (#10955) 2025-09-15 20:56:16 +07:00
Hiep Le
ab893f93f0 refactor(frontend): use-auto-resize hook (#10959) 2025-09-15 20:49:15 +07:00
Hiep Le
5aba498e77 refactor(frontend): move billing APIs to a dedicated service handler (#10958) 2025-09-15 20:37:07 +07:00
Hiep Le
1523555eea refactor(frontend): remove dead code (#10839) 2025-09-15 20:35:56 +07:00
Kaushik Ashodiya
30604c40fc fix: improve CLI help and version command performance (#10908)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-12 14:23:01 -04:00
Hiep Le
8dc46b7206 refactor(frontend): optimize pre-commit lint script (#10870)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-09-12 15:23:29 +00:00
Hiep Le
69498bebb4 refactor(frontend): new conversation component (#10937)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-09-12 22:15:26 +07:00
tksrmz
77ee9e25d9 fix(frontend): highlight preceding stars on hover in LikertScale (#10948) 2025-09-12 18:01:40 +04:00
Hiep Le
74753036bb refactor(frontend): move user APIs to a dedicated service handler (#10943) 2025-09-12 09:08:15 +07:00
Hiep Le
95d7c10608 refactor(frontend): move option APIs to a dedicated service handler (#10933) 2025-09-12 00:43:15 +07:00
Hiep Le
c142cc27ff refactor(frontend): home header component (#10930) 2025-09-12 00:10:58 +07:00
Hiep Le
0e20fc206b refactor(frontend): move settings APIs to a dedicated service handler (#10941) 2025-09-11 23:39:23 +07:00
Hiep Le
e21475a88e feat(frontend): persist drawer open/close state on page refresh (#10935)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-09-11 15:58:00 +00:00
Hiep Le
921fec0019 refactor(frontend): expand repository pill to full available width (#10936) 2025-09-11 22:37:44 +07:00
Hiep Le
049f839a62 refactor(frontend): move auth APIs to a dedicated service handler (#10932) 2025-09-11 22:31:41 +07:00
Hiep Le
0dde758e13 refactor(frontend): move microagent management API to a dedicated service handler (#10934) 2025-09-11 22:27:56 +07:00
Tim O'Farrell
8257ae70cc Additional logs to debug container working directories (#10902)
Co-authored-by: Chuck Butkus <chuck@all-hands.dev>
2025-09-11 11:06:19 -04:00
Ray Myers
4513bcc622 chore - MyPy check Enterprise with OpenHands (#10858)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-09-11 11:05:50 -04:00
Hiep Le
b5b9a3f40b refactor(frontend): create waiting for runtime component (#10931) 2025-09-11 21:30:05 +07:00
Xingyao Wang
8ea1259943 Add GitHub workflow for MDX format checking and fix parsing error (#10924)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-10 23:04:54 +00:00
Ray Myers
ddb2794adf fix - Tag enterprise with the same SHA as app image. (#10921) 2025-09-10 16:47:31 -05:00
sp.wack
79fdcad7ef Fix status indicator and chat input synchronization issue (#10914)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-10 20:39:14 +00:00
chuckbutkus
1de70b8ce4 Fix runtime init (#10909) 2025-09-10 19:28:12 +00:00
sp.wack
3baeecb27c meta(frontend): Improve UX (#9845)
Co-authored-by: Mislav Lukach <mislavlukach@gmail.com>
Co-authored-by: Hiep Le <69354317+hieptl@users.noreply.github.com>
Co-authored-by: hieptl <hieptl.developer@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-10 18:12:52 +00:00
Tim O'Farrell
b08238c841 Fix for issue where some attributes in pr_data are defined but are null or undefined (#10827) 2025-09-09 21:28:40 +00:00
sp.wack
831084df4c Remove git authentication requirement for secrets in SaaS mode (#10903)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-09 19:50:13 +00:00
sp.wack
eb4dacb577 Fix ruff formatting in enterprise token_manager.py (#10901) 2025-09-09 18:45:45 +00:00
jrobles98
8e71459601 Fix typo (#10702) 2025-09-09 12:39:58 -04:00
Tim O'Farrell
fc29815aa0 Value logged as error should be info (#10831) 2025-09-09 08:48:29 -06:00
mamoodi
a809d74b7d Release 0.56.0 (#10876) 2025-09-09 10:30:43 -04:00
Ryan H. Tran
b090d097ed Fix Docker build error 'groupadd: GID 1000 already exists' (#10888) 2025-09-09 21:50:23 +08:00
Graham Neubig
79f32a34a0 Fix SANDBOX_VOLUMES format in headless mode documentation (#10887)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-08 14:17:20 -04:00
Ashwin Kumar B V
805bc5608e Update deprecated dependencies: google-genai and yanked ddtrace (#10866)
Co-authored-by: enyst <engel.nyst@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-08 10:04:16 -05:00
Ray Myers
61e1957cee chore - Make enterprise preview work when labeled after the fact (#10862) 2025-09-08 09:54:51 -05:00
Joe Axe
a25826a5f9 fix: resolve empty API keys to None and add Bedrock model support (#10573) 2025-09-08 14:45:10 +02:00
Ryan H. Tran
df9320f8ab Implement model routing support (#9738)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-08 16:19:34 +07:00
Boxuan Li
af0ab5a9f2 Fix working_dir bug in local runtime (#10801)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-07 23:44:55 -07:00
Ruilin Zhou
9960d11d08 feat(runtime): upgrade E2B runtime to v2.0 with full implementation (#10832) 2025-09-08 06:32:08 +02:00
mamoodi
d5d5e265f8 Fix issue #10729: Add x-ai/grok-code-fast-1 to MODELS_WITHOUT_STOP_WORDS (#10867)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-09-08 05:30:45 +02:00
Xingyao Wang
989a4e662b feat: integrate with unified docs repository (#10830)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-06 16:10:21 +02:00
骆艺轩
ecfbae2285 refactor: Tweak labels prompt (#10523) (#10757) 2025-09-06 03:17:44 +02:00
Tim O'Farrell
c9cf351697 Added type hints for experiment manager (#10851)
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-09-05 12:14:16 -06:00
Tim O'Farrell
aca568cfbe More Type Safety (#10848) 2025-09-05 11:34:43 -06:00
dependabot[bot]
3366ad9de7 chore(deps): bump the version-all group in /frontend with 7 updates (#10844)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-05 19:10:32 +04:00
Ankit Kumar Yadav
f442e07b33 docs: replaced slack invite links with dub.sh link (fixes #10768) (#10779) 2025-09-05 08:57:49 -04:00
Ray Myers
fdf8b21b84 Update enterprise readme (#10826) 2025-09-04 17:20:06 -05:00
Engel Nyst
93e843a06b Revert "feat(agent): add security-related items in system prompt to defense against data exfiltration" (#10822) 2025-09-05 05:07:30 +08:00
Ray Myers
e37f7b0e0f Enterprise code and docker build (#10770) 2025-09-04 15:44:54 -04:00
Haowei Lin
bd8b1bfa25 Add a new benchmark: AlgoTune (#10724)
Co-authored-by: linhaowei <linhaowei@wizardquant.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-09-04 18:08:50 +00:00
dependabot[bot]
a4f11006f6 chore(deps-dev): bump @tanstack/eslint-plugin-query from 5.83.1 to 5.86.0 in /frontend in the eslint group (#10817)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 15:51:28 +00:00
sp.wack
c6950946bb Add refetchInterval to useActiveHost hook for automatic host status updates (#10815)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-04 14:59:16 +00:00
Engel Nyst
81d6341f9d chore(server): rename Session to WebSession (#10565) 2025-09-04 16:49:54 +02:00
dependabot[bot]
55a6bbd9a4 chore(deps): bump the version-all group across 1 directory with 8 updates (#10799)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 17:08:42 +04:00
Zacharias Fisches
20e5c40969 Fix swe-bench run_infer.py config parsing from config.toml (#10792) 2025-09-04 20:10:08 +08:00
Xingyao Wang
3e8dc41bdf Add microagent for fixing E501 line too long errors (#10796)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-04 19:48:08 +08:00
Hiep Le
49d37119a9 chore(frontend): remove feature flag (microagent management) (#10769) 2025-09-02 19:46:09 +00:00
Jamie Chicago
cfd416c29f feat: update welcome-good-first-issue.yml (#10766) 2025-09-02 19:41:58 +00:00
Ray Myers
c052dd7da5 chore - Update license for enterprise folder (#10761) 2025-09-02 18:48:45 +00:00
Ryan H. Tran
3f77b8229a Add support for AGENTS.md files in microagent system (#10528)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-03 02:18:38 +08:00
Tim O'Farrell
8d13c9f328 UI for determining if llm options are enabled (#10665)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-09-02 12:09:55 -06:00
mamoodi
f46b112f17 Add more troubleshooting for linux (#10704) 2025-09-02 14:02:16 -04:00
mamoodi
44dc7f9e9b Release 0.55.0 (#10657) 2025-09-02 13:49:02 -04:00
Hiep Le
00eaa7a6e1 refactor(frontend): remove the branch dropdown from the learn this repo modal (microagent management) (#10755) 2025-09-02 22:34:00 +07:00
Hiep Le
9f1d6963b8 feat(frontend): support pagination when loading repositories (microagent management) (#10708) 2025-09-02 17:03:58 +04:00
Rohit Malhotra
f61fa93596 Fix fragile URL parsing in Bitbucket service search_repositories method (#10733)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-01 02:59:24 -04:00
Rohit Malhotra
3e87c08631 refactor: introduce HTTPClient protocol for git service integrations (#10731)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-09-01 01:44:31 -04:00
Rohit Malhotra
21f3ef540f refactor: Apply GitHub mixins pattern to BitBucket service (#10728)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-31 16:09:41 -04:00
Rohit Malhotra
61a93d010c Refactor GitLab service into modular mixins pattern (#10727)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-31 19:10:40 +00:00
Rohit Malhotra
9d6afa09b6 Fix GraphQL URL configuration for GitHub Enterprise Server (#10725)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-30 18:06:00 -04:00
Rohit Malhotra
c648b6f74f Refactor: Modularize GitHubService into feature mixins (#10492)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-29 23:45:15 -04:00
sp.wack
c0fa41da65 fix: auto-load repositories when insufficient content in dropdown (#10697)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-08-29 21:17:27 +00:00
Rohit Malhotra
6eb32e9ae4 Fix: Add method to merge conversation stats (#10667)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-29 20:15:44 +00:00
Rohit Malhotra
6a544d4274 (Hotfix): Branch pagination for GitLab (#10710)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-29 20:15:15 +00:00
Calvin Smith
4aada82b75 fix: Linking condensation and task tracking prompts (#10656)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-08-29 09:18:31 -06:00
Ryan H. Tran
ab2da611f5 fix: validate task_list schema for task tracker (#10624) 2025-08-29 10:57:50 +00:00
Rohit Malhotra
e47bcf31e4 [Bug, GitLab]: fix missing context in cloud resolver (#10509)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-29 02:38:03 -04:00
mamoodi
83b9262379 Add troubleshooting guide for linux timeout issue (#10685) 2025-08-29 05:52:36 +02:00
Rohit Malhotra
edc95141f7 Implement branch pagination for repository selection and improve UI async dropdown behaviour (#10588)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-08-29 03:38:42 +00:00
Hiep Le
5b35203253 refactor: remove branch dropdown, update title, fix pr_number issue (microagent management) (#10691) 2025-08-29 00:24:48 +04:00
Rohit Malhotra
7e3eabe777 (Hotfix): ConversationStats metrics loss for unregistered services (#10676)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-28 14:15:20 -04:00
dependabot[bot]
23713bfe8c chore(deps): bump the version-all group in /frontend with 5 updates (#10686)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-28 14:53:14 +00:00
Ryan H. Tran
81829289ab Add support for passing list of Message into LLM completion (#10671) 2025-08-28 21:22:28 +08:00
Ray Myers
9709431874 fix: cli dedupe TaskTrackingAction thoughts by using display_thought_if_new (#10660)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-28 21:20:39 +08:00
dependabot[bot]
0e9906f41e chore(deps): bump posthog-js from 1.260.3 to 1.261.0 in /frontend in the version-all group (#10658)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-28 16:15:31 +04:00
chuckbutkus
9ac9a47207 Missed a place for the group change (#10659) 2025-08-27 21:47:20 +00:00
Hiep Le
75653e805a refactor(frontend): enhance the launch microagent modal (memory UI). (#10651) 2025-08-28 01:41:58 +07:00
mamoodi
9630b536cd Revert "Add support for passing list of Message into LLM completion" (#10653) 2025-08-27 17:51:17 +00:00
Engel Nyst
6f5c8186b8 Fix(settings): enforce condenser max history size >= 20 and improve messaging (#10638) 2025-08-27 18:37:41 +02:00
Rohit Malhotra
36e0d8d3da [Fix]: token refresh for nested runtimes (#10637)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-27 12:20:34 -04:00
Ryan H. Tran
e68abf8d75 Add support for passing list of Message into LLM completion (#10650) 2025-08-27 22:39:26 +07:00
Ryan H. Tran
93ef1b0cda Remove image content filtering in ConversationMemory (#10645) 2025-08-27 22:28:09 +07:00
Web3 Outlaw
77b5c6b161 Fix Typos in Comment and Docs (#10644) 2025-08-27 14:06:39 +00:00
Hiep Le
57aa7d5c12 feat: hide conversations after PR closure or merge (microagent management) (#10600) 2025-08-27 16:32:04 +07:00
Hiep Le
50391ecdf3 feat(frontend): update learning repo flow (microagent management) (#10597)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-27 16:02:48 +07:00
dependabot[bot]
672650d3d9 chore(deps): bump the version-all group in /frontend with 7 updates (#10643)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-27 12:10:48 +04:00
Rohit Malhotra
9afedea170 [Bug, GitHub]: fix missing context in cloud resolver (#10517)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-27 07:07:09 +00:00
chuckbutkus
c0bb84dfa2 Non root user (#10155)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-27 02:23:39 -04:00
Hiep Le
18b5139237 fix(backend): show name of created branch in conversation list. (#10208) 2025-08-27 11:41:12 +07:00
Rohit Malhotra
4849369ede frontend(chat): render conversation_instructions from RecallObservation (#10639)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 23:32:18 -04:00
Xingyao Wang
b082ccc0fb feat(llm): add support for deepseek and gpt-5-mini, util for token count (#10626)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-27 11:03:35 +08:00
mamoodi
b0007076c0 Remove duplicated command in CLI (#10634) 2025-08-26 16:01:16 -04:00
Tim O'Farrell
4a4f213f57 Remove unused translation keys from translation.json (#10631)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 11:59:48 -06:00
Tim O'Farrell
f9099fe6db Refactor conversation status (#10590)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 08:06:26 -06:00
Xingyao Wang
8f46a0a7a3 Add gpt-5-mini-2025-08-07 as verified model & supported in OpenHands provider (#10628)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 13:15:16 +00:00
dependabot[bot]
55d204ae1b chore(deps): bump the version-all group in /frontend with 21 updates (#10614)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 06:09:20 +00:00
baii
4d7cd228da Fix(backend): correctly forward AWS Bedrock aws_access_key_id / aws_secret_access_key / aws_region_name to litellm (#9663)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-08-25 22:07:28 +00:00
Tim O'Farrell
a3f92df4b3 Fix for issue where exceptions are swallowed (#10602) 2025-08-25 15:50:15 -06:00
Engel Nyst
e41f8f5215 feat(settings): configurable condenser max history size (FE+BE) (#10591) 2025-08-25 22:50:52 +02:00
Jamie Chicago
6448f5a681 docs: Add Ubuntu installation steps for Windows WSL setup (#10485)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-25 20:43:04 +00:00
Graham Neubig
5fcc648d5f Add E2E test for multi-conversation resume functionality (Issue #10384) (#10390)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-25 15:15:54 -04:00
danieljbruntz
c9d96038c1 feat: Add OPENHANDS_FORCE_VISION env var to override vision capability detection (#10255)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-08-25 19:05:58 +00:00
Calvin Smith
408af4e012 fix: Extend cases where truncation triggers (#10607)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-08-25 12:59:41 -06:00
mamoodi
d9ac2faff6 Add backlog label to exemption (#10598) 2025-08-25 14:57:35 -04:00
Rohit Malhotra
64383a66e2 docs: Update Project Management integration docs (#10161)
Co-authored-by: OpenHands <openhands@all-hands.dev>
2025-08-25 14:51:06 -04:00
chuckbutkus
7fbcb29499 Allow for path based runtimes in the SAAS environment (#10518)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-25 14:31:07 -04:00
hereisok
e7aae1495c perf: remove the sleep before runtime initialization (#10033)
Signed-off-by: hereisok <hereisok@angai.wk@gmail.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-08-25 13:56:57 -04:00
Hiep Le
d33f27d141 refactor(frontend): separate the microagents and conversations (microagent management) (#10596)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 00:50:25 +07:00
Hiep Le
d08851859b refactor(frontend): update helper text (microagent management) (#10595)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-26 00:49:11 +07:00
Hiep Le
7f4d311294 fix: subscription logic by polling for available runtime (microagent management, memory UI) (#10519)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-25 20:44:00 +04:00
dependabot[bot]
049f058ed1 chore(deps-dev): bump eslint-plugin-unused-imports from 4.1.4 to 4.2.0 in /frontend in the eslint group (#10511)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-25 18:03:22 +04:00
Tim O'Farrell
bb6cf5a816 Refactor authentication error handling with global FastAPI exception handler (#10403)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-25 07:54:30 -06:00
Engel Nyst
d9bc5824a0 docs: add shell guidance to avoid set -e variants in this environment (#10579)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-24 13:39:37 +08:00
Xingyao Wang
fd5b5075d6 Simplify CLI markdown rendering; remove python-markdown deps; update tests (#10538)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-24 01:23:06 +08:00
Hiep Le
f5cd7b256d feat(frontend): Implement LLM risk analyzer UI (#10569)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: llamantino <213239228+llamantino@users.noreply.github.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ryan H. Tran <descience.thh10@gmail.com>
Co-authored-by: Neeraj Panwar <49247372+npneeraj@users.noreply.github.com>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Insop <1240382+insop@users.noreply.github.com>
Co-authored-by: test <test@test.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Zhonghao Jiang <zhonghao.J@outlook.com>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-08-23 02:08:45 +07:00
Neeraj Panwar
df86fd275d Fixes bug 9682 (#9692)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-08-22 16:51:53 +00:00
Xingyao Wang
d22a2e39e7 feat(agent): add security-related items in system prompt to defense against data exfiltration (#10477)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-22 15:53:13 +00:00
Xingyao Wang
ca424ec15d [agent] Add LLM risk analyzer (#9349)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: llamantino <213239228+llamantino@users.noreply.github.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
Co-authored-by: Hiep Le <69354317+hieptl@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ryan H. Tran <descience.thh10@gmail.com>
Co-authored-by: Neeraj Panwar <49247372+npneeraj@users.noreply.github.com>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Insop <1240382+insop@users.noreply.github.com>
Co-authored-by: test <test@test.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Zhonghao Jiang <zhonghao.J@outlook.com>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-08-22 14:02:36 +00:00
Xingyao Wang
4507a25b85 Evaluation: redirect sessions to repo-local .eval_sessions via helper; apply across entrypoints; add tests (#10540)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-08-22 13:34:02 +00:00
2593 changed files with 269177 additions and 116119 deletions

View File

@@ -0,0 +1,37 @@
---
name: upcoming-release
description: This skill should be used when the user asks to "generate release notes", "list upcoming release PRs", "summarize upcoming release", "/upcoming-release", or needs to know what changes are part of an upcoming release.
---
# Upcoming Release Summary
Generate a concise summary of PRs included in the upcoming release.
## Prerequisites
Two commit SHAs are required:
- **First SHA**: The older commit (current release)
- **Second SHA**: The newer commit (what's being released)
If the user does not provide both SHAs, ask for them before proceeding.
## Workflow
1. Run the script from the repository root with the `--json` flag:
```bash
.github/scripts/find_prs_between_commits.py <older-sha> <newer-sha> --json
```
2. Filter out PRs that are:
- Chores
- Dependency updates
- Adding logs
- Refactors
3. Categorize the remaining PRs:
- **Features** - New functionality
- **Bug fixes** - Corrections to existing behavior
- **Security/CVE fixes** - Security-related changes
- **Other** - Everything else
4. Format the output with PRs listed under their category, including the PR number and a brief description.

View File

@@ -0,0 +1,123 @@
---
name: update-sdk
description: This skill should be used when the user asks to "update SDK", "bump SDK version", "pin SDK to a commit", "test unreleased SDK", "update agent-server image", "bump the version", "prepare a release", "what files change for a release", or needs to know how SDK packages are managed in the OpenHands repository. For detailed reference material, see references/docker-image-locations.md and references/sdk-pinning-examples.md in this skill directory.
---
# Update SDK
Bump SDK packages (`openhands-sdk`, `openhands-agent-server`, `openhands-tools`), pin them to unreleased commits for testing, and cut an OpenHands release.
## Quick Summary — How Many Files Change?
| Activity | Manual edits | Auto-regenerated | Total |
|----------|:------------:|:----------------:|:-----:|
| **SDK bump** (released PyPI version) | 2 | 3 | **5** |
| **SDK pin** (unreleased git commit) | 3 | 3 | **6** |
| **Release commit** (version bump) | 3 | 0 | **3** |
The 3 auto-regenerated files are always: `poetry.lock`, `uv.lock`, `enterprise/poetry.lock`.
## SDK Package Bump — 2 Files + 3 Lock Files
Land as a separate PR before the release. Examples: `929dcc3` (SDK 1.11.5), `cd235cc` (SDK 1.11.4).
| File | What to change |
|------|----------------|
| `pyproject.toml` | `openhands-sdk`, `openhands-agent-server`, `openhands-tools` in **two** sections: the `dependencies` array (PEP 508) **and** `[tool.poetry.dependencies]` |
| `openhands/app_server/sandbox/sandbox_spec_service.py` | `AGENT_SERVER_IMAGE` constant — set to `ghcr.io/openhands/agent-server:<version>-python` |
Then regenerate lock files:
```bash
poetry lock && uv lock && cd enterprise && poetry lock && cd ..
```
## Docker Image Locations — All Hardcoded References
For the complete inventory of every file containing a hardcoded Docker image tag or repository, see `references/docker-image-locations.md`. Key files that must stay in sync during an SDK bump:
| File | Image reference | Updated during SDK bump? |
|------|----------------|:------------------------:|
| `openhands/app_server/sandbox/sandbox_spec_service.py` | `AGENT_SERVER_IMAGE = 'ghcr.io/openhands/agent-server:<tag>-python'` | ✅ Yes |
| `docker-compose.yml` | `AGENT_SERVER_IMAGE_TAG` default | ✅ Should be |
| `containers/dev/compose.yml` | `AGENT_SERVER_IMAGE_REPOSITORY` + `_TAG` defaults | ✅ Should be |
> **CI enforcement:** `.github/workflows/check-version-consistency.yml` validates version consistency and compose file image references on every PR and push to main.
### ⚠️ Docker Image Tag Gotcha (merge-commit SHA)
The SDK CI in `software-agent-sdk` repo tags Docker images with the **GitHub Actions merge-commit SHA**, NOT the PR head-commit SHA. When pinning to an SDK PR branch:
1. Check the SDK PR description for the actual image tag (look for the `AGENT_SERVER_IMAGES` section)
2. Or query the CI logs: the "Consolidate Build Information" job prints `"short_sha": "<tag>"`
3. The merge-commit SHA differs from the head SHA shown in the PR
For released SDK versions, images use a version tag (e.g., `1.12.0-python`) — no merge-commit ambiguity.
## Cutting a Release — 3 Files
A release commit updates the version string across 3 files. Gold-standard examples: 1.3.0 (`d063c8c`), 1.4.0 (`495f48b`).
| File | What to change |
|------|----------------|
| `pyproject.toml` | `version = "X.Y.Z"` under `[tool.poetry]` |
| `frontend/package.json` | `"version": "X.Y.Z"` |
| `frontend/package-lock.json` | `"version": "X.Y.Z"` in **two** places (root object and `packages[""]`) |
> **Note:** `openhands/version.py` reads the version from `pyproject.toml` at runtime — no manual edit needed there.
### Compose Files (2 files)
Both compose files should use `ghcr.io/openhands/agent-server` with the current SDK version tag.
| File | What to verify |
|------|----------------|
| `docker-compose.yml` | `AGENT_SERVER_IMAGE_REPOSITORY` defaults to agent-server, `AGENT_SERVER_IMAGE_TAG` is current |
| `containers/dev/compose.yml` | Same — must use agent-server, not runtime |
### Release Workflow
#### Step 1: Verify the SDK bump has landed
```bash
grep -n "openhands-sdk\|openhands-agent-server\|openhands-tools" pyproject.toml
grep -n "AGENT_SERVER_IMAGE" openhands/app_server/sandbox/sandbox_spec_service.py
grep "AGENT_SERVER_IMAGE_TAG" docker-compose.yml containers/dev/compose.yml
```
#### Step 2: Bump version numbers
```bash
# Edit pyproject.toml, frontend/package.json, frontend/package-lock.json
git add pyproject.toml frontend/package.json frontend/package-lock.json
git commit -m "Release X.Y.Z"
git tag X.Y.Z
```
Create a `saas-rel-X.Y.Z` branch from the tagged commit for the SaaS deployment pipeline.
#### Step 3: CI builds Docker images automatically
The `ghcr-build.yml` workflow triggers on tag pushes and produces:
- `ghcr.io/openhands/openhands:X.Y.Z`, `X.Y`, `X`, `latest`
- `ghcr.io/openhands/runtime:X.Y.Z-nikolaik`, `X.Y-nikolaik`
The tagging logic lives in `containers/build.sh` — when `GITHUB_REF_NAME` matches a semver pattern (`^[0-9]+\.[0-9]+\.[0-9]+$`), it auto-generates major, major.minor, and `latest` tags.
## Development: Pin SDK to an Unreleased Commit
For detailed examples of all pinning formats (commit, branch, uv-only), see `references/sdk-pinning-examples.md`.
### Files to change (3 manual + 3 lock files)
| File | What to change |
|------|----------------|
| `pyproject.toml` | Pin all 3 SDK packages in **both** `dependencies` and `[tool.poetry.dependencies]` |
| `openhands/app_server/sandbox/sandbox_spec_service.py` | `AGENT_SERVER_IMAGE` — use the merge-commit SHA tag, NOT the head-commit SHA |
| `docker-compose.yml` | `AGENT_SERVER_IMAGE_TAG` default (for local development) |
| `poetry.lock` | Auto-regenerated via `poetry lock` |
| `uv.lock` | Auto-regenerated via `uv lock` |
| `enterprise/poetry.lock` | Auto-regenerated via `cd enterprise && poetry lock` |
### CI guard
The `check-package-versions.yml` workflow blocks merging to `main` if `[tool.poetry.dependencies]` contains any `rev` fields. This ensures unreleased SDK pins do not accidentally ship in a release.

View File

@@ -0,0 +1,84 @@
# Docker Image Locations — Complete Inventory
Every file in the OpenHands repository containing a hardcoded Docker image tag, repository, or version-pinned image reference. Organized by update cadence.
## Updated During SDK Bump (must change)
These files contain image tags that **must** be updated whenever the SDK version or pinned commit changes.
### `openhands/app_server/sandbox/sandbox_spec_service.py`
- **Line:** `AGENT_SERVER_IMAGE = 'ghcr.io/openhands/agent-server:<tag>-python'`
- **Format:** `<sdk-version>-python` for releases (e.g., `1.12.0-python`), `<7-char-commit-hash>-python` for dev pins
- **Source of truth** for which agent-server image the app server pulls at runtime
- **⚠️ Gotcha:** When pinning to an SDK PR, the image tag is the **merge-commit SHA** from GitHub Actions, not the PR head-commit SHA. Check the SDK PR description or CI logs for the correct tag.
### `docker-compose.yml`
- **Lines:**
```yaml
- AGENT_SERVER_IMAGE_REPOSITORY=${AGENT_SERVER_IMAGE_REPOSITORY:-ghcr.io/openhands/agent-server}
- AGENT_SERVER_IMAGE_TAG=${AGENT_SERVER_IMAGE_TAG:-<tag>-python}
```
- Used by `docker compose up` for local development
### `containers/dev/compose.yml`
- **Lines:**
```yaml
- AGENT_SERVER_IMAGE_REPOSITORY=${AGENT_SERVER_IMAGE_REPOSITORY:-ghcr.io/openhands/agent-server}
- AGENT_SERVER_IMAGE_TAG=${AGENT_SERVER_IMAGE_TAG:-<tag>-python}
```
- Used by the dev container setup
- **Known issue:** On main as of 1.4.0, this file still points to `ghcr.io/openhands/runtime` instead of `agent-server`, and the tag is `1.2-nikolaik` (stale from the V0 era). The `check-version-consistency.yml` CI workflow catches this.
## Updated During Release Commit (version string only)
### `pyproject.toml`
- **Line:** `version = "X.Y.Z"` under `[tool.poetry]`
- The Python version is derived from this at runtime via `openhands/version.py`
### `frontend/package.json`
- **Line:** `"version": "X.Y.Z"`
### `frontend/package-lock.json`
- **Two places:** root `"version": "X.Y.Z"` and `packages[""].version`
## Dynamic References (auto-derived, no manual update)
### `openhands/version.py`
- Reads version from `pyproject.toml` at runtime → `openhands.__version__`
### `openhands/resolver/issue_resolver.py`
- Builds `ghcr.io/openhands/runtime:{openhands.__version__}-nikolaik` dynamically
### `openhands/runtime/utils/runtime_build.py`
- Base repo URL `ghcr.io/openhands/runtime` is a constant; version comes from elsewhere
### `.github/scripts/update_pr_description.sh`
- Uses `${SHORT_SHA}` variable at CI runtime, not hardcoded
### `enterprise/Dockerfile`
- `ARG BASE="ghcr.io/openhands/openhands"` — base image, version supplied at build time
## V0 Legacy Files (separate update cadence)
These reference the V0 runtime image (`ghcr.io/openhands/runtime:X.Y-nikolaik`) for local Docker/Kubernetes paths. They are **not** updated as part of a V1 release but may be updated independently.
### `Development.md`
- `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/openhands/runtime:X.Y-nikolaik`
### `openhands/runtime/impl/kubernetes/README.md`
- `runtime_container_image = "docker.openhands.dev/openhands/runtime:X.Y-nikolaik"`
### `enterprise/enterprise_local/README.md`
- Uses `ghcr.io/openhands/runtime:main-nikolaik` (points to `main`, not versioned)
### `third_party/runtime/impl/daytona/README.md`
- Uses `${OPENHANDS_VERSION}` variable, not hardcoded
## Image Registries
| Registry | Usage |
|----------|-------|
| `ghcr.io/openhands/agent-server` | V1 agent-server (sandbox) — built by SDK repo CI |
| `ghcr.io/openhands/openhands` | Main app image — built by `ghcr-build.yml` |
| `ghcr.io/openhands/runtime` | V0 runtime sandbox — built by `ghcr-build.yml` |
| `docker.openhands.dev/openhands/*` | Mirror/CDN for the above images |

View File

@@ -0,0 +1,103 @@
# SDK Pinning Examples
Examples from real commits showing how to pin SDK packages to unreleased commits, branches, or released versions.
## Pin to a Specific Commit
Example from commit `169fb76` (pinning all 3 packages to SDK commit `100e9af`):
### `dependencies` array (PEP 508 format)
```toml
"openhands-agent-server @ git+https://github.com/OpenHands/software-agent-sdk.git@100e9af#subdirectory=openhands-agent-server",
"openhands-sdk @ git+https://github.com/OpenHands/software-agent-sdk.git@100e9af#subdirectory=openhands-sdk",
"openhands-tools @ git+https://github.com/OpenHands/software-agent-sdk.git@100e9af#subdirectory=openhands-tools",
```
### `[tool.poetry.dependencies]` (Poetry format)
```toml
openhands-sdk = { git = "https://github.com/OpenHands/software-agent-sdk.git", rev = "100e9af", subdirectory = "openhands-sdk" }
openhands-agent-server = { git = "https://github.com/OpenHands/software-agent-sdk.git", rev = "100e9af", subdirectory = "openhands-agent-server" }
openhands-tools = { git = "https://github.com/OpenHands/software-agent-sdk.git", rev = "100e9af", subdirectory = "openhands-tools" }
```
### `openhands/app_server/sandbox/sandbox_spec_service.py`
```python
AGENT_SERVER_IMAGE = 'ghcr.io/openhands/agent-server:<merge-commit-sha>-python'
```
**⚠️ Important:** The image tag is the **merge-commit SHA** from the SDK CI, not the commit hash used in `pyproject.toml`. Look up the correct tag from the SDK PR description or CI logs.
## Pin to a Branch
Example from commit `430ee1c` (pinning to branch `openhands/issue-2228-sdk-settings-schema`):
### `[tool.poetry.dependencies]`
```toml
openhands-sdk = { git = "https://github.com/OpenHands/software-agent-sdk.git", branch = "openhands/issue-2228-sdk-settings-schema", subdirectory = "openhands-sdk" }
openhands-agent-server = { git = "https://github.com/OpenHands/software-agent-sdk.git", branch = "openhands/issue-2228-sdk-settings-schema", subdirectory = "openhands-agent-server" }
openhands-tools = { git = "https://github.com/OpenHands/software-agent-sdk.git", branch = "openhands/issue-2228-sdk-settings-schema", subdirectory = "openhands-tools" }
```
## Using `[tool.uv.sources]` Override
When only `uv` needs the override (keep PyPI versions in the main arrays), add a `[tool.uv.sources]` section. Example from commit `1daca49`:
```toml
[tool.uv.sources]
openhands-sdk = { git = "https://github.com/OpenHands/software-agent-sdk.git", subdirectory = "openhands-sdk", rev = "4170cca" }
openhands-agent-server = { git = "https://github.com/OpenHands/software-agent-sdk.git", subdirectory = "openhands-agent-server", rev = "4170cca" }
openhands-tools = { git = "https://github.com/OpenHands/software-agent-sdk.git", subdirectory = "openhands-tools", rev = "4170cca" }
```
## Released PyPI Version (standard release)
Example from commit `929dcc3` (SDK 1.11.5):
### `dependencies` array
```toml
"openhands-agent-server==1.11.5",
"openhands-sdk==1.11.5",
"openhands-tools==1.11.5",
```
### `[tool.poetry.dependencies]`
```toml
openhands-sdk = "1.11.5"
openhands-agent-server = "1.11.5"
openhands-tools = "1.11.5"
```
### `openhands/app_server/sandbox/sandbox_spec_service.py`
For released versions, the image tag uses the version number:
```python
AGENT_SERVER_IMAGE = 'ghcr.io/openhands/agent-server:1.11.5-python'
```
However, **some releases use a commit-hash tag** even for the released version. Check which tag format exists on GHCR. Example from `929dcc3`:
```python
AGENT_SERVER_IMAGE = 'ghcr.io/openhands/agent-server:010e847-python'
```
## Regenerate Lock Files
After any change to `pyproject.toml`, always regenerate:
```bash
poetry lock
uv lock
cd enterprise && poetry lock && cd ..
```
## CI Guards
- **`check-package-versions.yml`**: Blocks merge to `main` if `[tool.poetry.dependencies]` contains `rev` fields (prevents shipping unreleased SDK pins)
- **`check-version-consistency.yml`**: Validates version strings match across `pyproject.toml`, `package.json`, `package-lock.json`, and verifies compose files use `agent-server` images

1
.devcontainer/README.md Normal file
View File

@@ -0,0 +1 @@
This way of running OpenHands is not officially supported. It is maintained by the community.

View File

@@ -7,5 +7,8 @@ git config --global --add safe.directory "$(realpath .)"
# Install `nc`
sudo apt update && sudo apt install netcat -y
# Install `uv` and `uvx`
wget -qO- https://astral.sh/uv/install.sh | sh
# Do common setup tasks
source .openhands/setup.sh

12
.github/CODEOWNERS vendored
View File

@@ -1,12 +1,8 @@
# CODEOWNERS file for OpenHands repository
# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# Frontend code owners
/frontend/ @amanape
/openhands-ui/ @amanape
# Evaluation code owners
/frontend/ @amanape @hieptl
/openhands-ui/ @amanape @hieptl
/openhands/ @tofarr @malhotra5 @hieptl
/enterprise/ @chuckbutkus @tofarr @malhotra5
/evaluation/ @xingyaoww @neubig
# Documentation code owners
/docs/ @mamoodi

View File

@@ -5,52 +5,113 @@ labels: ['bug']
body:
- type: markdown
attributes:
value: Thank you for taking the time to fill out this bug report. Please provide as much information as possible
to help us understand and address the issue effectively.
value: |
## Thank you for reporting a bug! 🐛
**Please fill out all required fields.** Issues missing critical information (version, installation method, reproduction steps, etc.) will be delayed or closed until complete details are provided.
Clear, detailed reports help us resolve issues faster.
- type: checkboxes
attributes:
label: Is there an existing issue for the same bug? (If one exists, thumbs up or comment on the issue instead).
description: Please check if an issue already exists for the bug you encountered.
label: Is there an existing issue for the same bug?
description: Please search existing issues before creating a new one. If found, react or comment to the duplicate issue instead of making a new one.
options:
- label: I have checked the existing issues.
- label: I have searched existing issues and this is not a duplicate.
required: true
- type: textarea
id: bug-description
attributes:
label: Describe the bug and reproduction steps
description: Provide a description of the issue along with any reproduction steps.
label: Bug Description
description: Clearly describe what went wrong. Be specific and concise.
placeholder: Example - "When I run a Python task, OpenHands crashes after 30 seconds with a connection timeout error."
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected Behavior
description: What did you expect to happen?
placeholder: Example - "OpenHands should execute the Python script and return results."
validations:
required: false
- type: textarea
id: actual-behavior
attributes:
label: Actual Behavior
description: What actually happened?
placeholder: Example - "Connection timed out after 30 seconds, task failed with error code 500."
validations:
required: false
- type: textarea
id: reproduction-steps
attributes:
label: Steps to Reproduce
description: Provide clear, step-by-step instructions to reproduce the bug.
placeholder: |
1. Install OpenHands using Docker
2. Configure with Claude 3.5 Sonnet
3. Run command: `openhands run "write a python script"`
4. Wait 30 seconds
5. Error appears
validations:
required: false
- type: dropdown
id: installation
attributes:
label: OpenHands Installation
label: OpenHands Installation Method
description: How are you running OpenHands?
options:
- Docker command in README
- GitHub resolver
- CLI (uv tool install)
- CLI (executable binary)
- CLI (Docker)
- Local GUI (Docker web interface)
- OpenHands Cloud (app.all-hands.dev)
- SDK (Python library)
- Development workflow
- CLI
- app.all-hands.dev
- Other
default: 0
validations:
required: false
- type: input
id: installation-other
attributes:
label: If you selected "Other", please specify
description: Describe your installation method
placeholder: ex. Custom Kubernetes deployment, pip install from source, etc.
- type: input
id: openhands-version
attributes:
label: OpenHands Version
description: What version of OpenHands are you using?
placeholder: ex. 0.9.8, main, etc.
description: What version are you using? Find this in settings or by running `openhands --version`
placeholder: ex. 0.9.8, main, commit hash, etc.
validations:
required: false
- type: checkboxes
id: version-confirmation
attributes:
label: Version Confirmation
description: Bugs on older versions may already be fixed. Please upgrade before submitting.
options:
- label: "I have confirmed this bug exists on the LATEST version of OpenHands"
required: false
- type: input
id: model-name
attributes:
label: Model Name
description: What model are you using?
placeholder: ex. gpt-4o, claude-3-5-sonnet, openrouter/deepseek-r1, etc.
description: Which LLM model are you using?
placeholder: ex. gpt-4o, claude-3-5-sonnet-20241022, openrouter/deepseek-r1, etc.
validations:
required: false
- type: dropdown
id: os
@@ -60,12 +121,46 @@ body:
- MacOS
- Linux
- WSL on Windows
- Windows (Docker Desktop)
- Other
validations:
required: false
- type: input
id: browser
attributes:
label: Browser (if using web UI)
description: |
If applicable, which browser and version?
placeholder: ex. Chrome 131, Firefox 133, Safari 17.2
- type: textarea
id: logs
attributes:
label: Logs and Error Messages
description: |
**Paste relevant logs, error messages, or stack traces.** Use code blocks (```) for formatting.
LLM logs are in `logs/llm/default/`. Include timestamps if errors occurred at a specific time.
placeholder: |
```
Paste error logs here
```
- type: textarea
id: additional-context
attributes:
label: Logs, Errors, Screenshots, and Additional Context
description: Please provide any additional information you think might help. If you want to share the chat history
you can click the thumbs-down (👎) button above the input field and you will get a shareable link
(you can also click thumbs up when things are going well of course!). LLM logs will be stored in the
`logs/llm/default` folder. Please add any additional context about the problem here.
label: Screenshots and Additional Context
description: |
Add screenshots, videos, runtime environment, or other context that helps explain the issue.
💡 **Share conversation history:** In the OpenHands chat UI, click the 👎 or 👍 button (above the message input) to generate a shareable link to your conversation.
placeholder: Drag and drop screenshots here, paste links, or add additional context.
- type: markdown
attributes:
value: |
---
**Note:** Issues with incomplete information may be closed or deprioritized. Maintainers and community members have limited bandwidth and prioritize well-documented bugs that are easier to reproduce and fix. Thank you for your understanding!

2
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
# disable blank issue creation
blank_issues_enabled: false

View File

@@ -1,17 +0,0 @@
---
name: Feature Request or Enhancement
about: Suggest an idea for an OpenHands feature or enhancement
title: ''
labels: 'enhancement'
assignees: ''
---
**What problem or use case are you trying to solve?**
**Describe the UX or technical implementation you have in mind**
**Additional context**
### If you find this feature request or enhancement useful, make sure to add a 👍 to the issue

View File

@@ -0,0 +1,105 @@
name: Feature Request or Enhancement
description: Suggest a new feature or improvement for OpenHands
title: '[Feature]: '
labels: ['enhancement']
body:
- type: markdown
attributes:
value: |
## Thank you for suggesting a feature! 💡
**Please provide detailed information.** Vague or low-effort requests may be closed. Well-documented feature requests with strong community support are more likely to be added to the roadmap.
- type: checkboxes
attributes:
label: Is there an existing feature request for this?
description: Please search existing issues and feature requests before creating a new one. If found, react or comment to the duplicate issue instead of making a new one.
options:
- label: I have searched existing issues and feature requests, and this is not a duplicate.
required: true
- type: textarea
id: problem-statement
attributes:
label: Problem or Use Case
description: What problem are you trying to solve? What use case would this feature enable?
placeholder: |
Example - "As a developer working on large codebases, I need to search across multiple files simultaneously. Currently, I have to search file-by-file which is time-consuming and inefficient."
validations:
required: true
- type: textarea
id: proposed-solution
attributes:
label: Proposed Solution
description: Describe your ideal solution. What should this feature do? How should it work?
placeholder: |
Example - "Add a global search feature that allows searching across all files in the workspace. Results should show file name, line number, and context around matches. Include regex support and filtering options."
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives Considered
description: Have you considered any alternative solutions or workarounds? What are their limitations?
placeholder: Example - "I tried using grep in the terminal, but it's not integrated with the UI and doesn't provide click-to-navigate functionality."
- type: dropdown
id: priority
attributes:
label: Priority / Severity
description: How important is this feature to your workflow?
options:
- "Critical - Blocking my work, no workaround available"
- "High - Significant impact on productivity"
- "Medium - Would improve experience"
- "Low - Nice to have"
default: 2
validations:
required: true
- type: dropdown
id: scope
attributes:
label: Estimated Scope
description: To the best of your knowledge, how complex do you think this feature would be to implement?
options:
- "Small - UI tweak, config option, or minor change"
- "Medium - New feature with moderate complexity"
- "Large - Significant feature requiring architecture changes"
- "Unknown - Not sure about the technical complexity"
default: 3
- type: dropdown
id: feature-area
attributes:
label: Feature Area
description: Which part of OpenHands does this feature relate to? If you select "Other", please specify the area in the Additional Context section below.
options:
- "Agent / AI behavior"
- "User Interface / UX"
- "CLI / Command-line interface"
- "File system / Workspace management"
- "Configuration / Settings"
- "Integrations (GitHub, GitLab, etc.)"
- "Performance / Optimization"
- "Documentation"
- "Other"
validations:
required: true
- type: textarea
id: technical-details
attributes:
label: Technical Implementation Ideas (Optional)
description: If you have technical expertise, share implementation ideas, API suggestions, or relevant technical details.
placeholder: |
Example - "Could use ripgrep library for fast search. Expose results via /api/search endpoint. Frontend can use virtualized list for rendering large result sets."
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context, screenshots, mockups, or examples that help illustrate this feature request.
placeholder: Drag and drop screenshots, mockups, or links here.

View File

@@ -1,12 +1,38 @@
- [ ] This change is worth documenting at https://docs.all-hands.dev/
- [ ] Include this change in the Release Notes. If checked, you **must** provide an **end-user friendly** description for your change below
<!-- If you are still working on the PR, please mark it as draft. Maintainers will review PRs marked ready for review, which leads to lost time if your PR is actually not ready yet. Keep the PR marked as draft until it is finally ready for review -->
**End-user friendly description of the problem this fixes or functionality this introduces.**
## Summary of PR
<!-- Summarize what the PR does -->
---
**Summarize what the PR does, explaining any non-trivial design decisions.**
## Demo Screenshots/Videos
<!-- AI/LLM AGENTS: This section is intended for a human author to add screenshots or videos demonstrating the PR in action (optional). While many pull requests may be generated by AI/LLM agents, we are fine with this as long as a human author has reviewed and tested the changes to ensure accuracy and functionality. -->
---
**Link of any specific issues this addresses:**
## Change Type
<!-- Choose the types that apply to your PR -->
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Refactor
- [ ] Other (dependency update, docs, typo fixes, etc.)
## Checklist
<!-- AI/LLM AGENTS: This checklist is for a human author to complete. Do NOT check either of the two boxes below. Leave them unchecked until a human has personally reviewed and tested the changes. -->
- [ ] I have read and reviewed the code and I understand what the code is doing.
- [ ] I have tested the code to the best of my ability and ensured it works as expected.
## Fixes
<!-- If this resolves an issue, link it here so it will close automatically upon merge. -->
Resolves #(issue)
## Release Notes
<!-- Check the box if this change is worth adding to the release notes. If checked, you must provide an
end-user friendly description for your change below the checkbox. -->
- [ ] Include this change in the Release Notes.

View File

@@ -1,73 +0,0 @@
#!/usr/bin/env python3
import os
import re
import sys
def find_version_references(directory: str) -> tuple[set[str], set[str]]:
openhands_versions = set()
runtime_versions = set()
version_pattern_openhands = re.compile(r'openhands:(\d{1})\.(\d{2})')
version_pattern_runtime = re.compile(r'runtime:(\d{1})\.(\d{2})')
for root, _, files in os.walk(directory):
# Skip .git directory and docs/build directory
if '.git' in root or 'docs/build' in root:
continue
for file in files:
if file.endswith(
('.md', '.yml', '.yaml', '.txt', '.html', '.py', '.js', '.ts')
):
file_path = os.path.join(root, file)
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# Find all openhands version references
matches = version_pattern_openhands.findall(content)
if matches:
print(f'Found openhands version {matches} in {file_path}')
openhands_versions.update(matches)
# Find all runtime version references
matches = version_pattern_runtime.findall(content)
if matches:
print(f'Found runtime version {matches} in {file_path}')
runtime_versions.update(matches)
except Exception as e:
print(f'Error reading {file_path}: {e}', file=sys.stderr)
return openhands_versions, runtime_versions
def main():
repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
print(f'Checking version consistency in {repo_root}')
openhands_versions, runtime_versions = find_version_references(repo_root)
print(f'Found openhands versions: {sorted(openhands_versions)}')
print(f'Found runtime versions: {sorted(runtime_versions)}')
exit_code = 0
if len(openhands_versions) > 1:
print('Error: Multiple openhands versions found:', file=sys.stderr)
print('Found versions:', sorted(openhands_versions), file=sys.stderr)
exit_code = 1
elif len(openhands_versions) == 0:
print('Warning: No openhands version references found', file=sys.stderr)
if len(runtime_versions) > 1:
print('Error: Multiple runtime versions found:', file=sys.stderr)
print('Found versions:', sorted(runtime_versions), file=sys.stderr)
exit_code = 1
elif len(runtime_versions) == 0:
print('Warning: No runtime version references found', file=sys.stderr)
sys.exit(exit_code)
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,330 @@
#!/usr/bin/env python3
"""
Find all PRs that went in between two commits in the OpenHands/OpenHands repository.
Handles cherry-picks and different merge strategies.
This script is designed to run from within the OpenHands repository under .github/scripts:
.github/scripts/find_prs_between_commits.py
Usage: find_prs_between_commits <older_commit> <newer_commit> [--repo <path>]
"""
import json
import os
import re
import subprocess
import sys
from collections import defaultdict
from pathlib import Path
from typing import Optional
def find_openhands_repo() -> Optional[Path]:
"""
Find the OpenHands repository.
Since this script is designed to live in .github/scripts/, it assumes
the repository root is two levels up from the script location.
Tries:
1. Repository root (../../ from script location)
2. Current directory
3. Environment variable OPENHANDS_REPO
"""
# Check repository root (assuming script is in .github/scripts/)
script_dir = Path(__file__).parent.absolute()
repo_root = (
script_dir.parent.parent
) # Go up two levels: scripts -> .github -> repo root
if (repo_root / '.git').exists():
return repo_root
# Check current directory
if (Path.cwd() / '.git').exists():
return Path.cwd()
# Check environment variable
if 'OPENHANDS_REPO' in os.environ:
repo_path = Path(os.environ['OPENHANDS_REPO'])
if (repo_path / '.git').exists():
return repo_path
return None
def run_git_command(cmd: list[str], repo_path: Path) -> str:
"""Run a git command in the repository directory and return its output."""
try:
result = subprocess.run(
cmd, capture_output=True, text=True, check=True, cwd=str(repo_path)
)
return result.stdout.strip()
except subprocess.CalledProcessError as e:
print(f'Error running git command: {" ".join(cmd)}', file=sys.stderr)
print(f'Error: {e.stderr}', file=sys.stderr)
sys.exit(1)
def extract_pr_numbers_from_message(message: str) -> set[int]:
"""Extract PR numbers from commit message in any common format."""
# Match #12345 anywhere, including in patterns like (#12345) or "Merge pull request #12345"
matches = re.findall(r'#(\d+)', message)
return set(int(m) for m in matches)
def get_commit_info(commit_hash: str, repo_path: Path) -> tuple[str, str, str]:
"""Get commit subject, body, and author from a commit hash."""
subject = run_git_command(
['git', 'log', '-1', '--format=%s', commit_hash], repo_path
)
body = run_git_command(['git', 'log', '-1', '--format=%b', commit_hash], repo_path)
author = run_git_command(
['git', 'log', '-1', '--format=%an <%ae>', commit_hash], repo_path
)
return subject, body, author
def get_commits_between(
older_commit: str, newer_commit: str, repo_path: Path
) -> list[str]:
"""Get all commit hashes between two commits."""
commits_output = run_git_command(
['git', 'rev-list', f'{older_commit}..{newer_commit}'], repo_path
)
if not commits_output:
return []
return commits_output.split('\n')
def get_pr_info_from_github(pr_number: int, repo_path: Path) -> Optional[dict]:
"""Get PR information from GitHub API if GITHUB_TOKEN is available."""
try:
# Set up environment with GitHub token
env = os.environ.copy()
if 'GITHUB_TOKEN' in env:
env['GH_TOKEN'] = env['GITHUB_TOKEN']
result = subprocess.run(
[
'gh',
'pr',
'view',
str(pr_number),
'--json',
'number,title,author,mergedAt,baseRefName,headRefName,url',
],
capture_output=True,
text=True,
check=True,
env=env,
cwd=str(repo_path),
)
return json.loads(result.stdout)
except (subprocess.CalledProcessError, FileNotFoundError, json.JSONDecodeError):
return None
def find_prs_between_commits(
older_commit: str, newer_commit: str, repo_path: Path
) -> dict[int, dict]:
"""
Find all PRs that went in between two commits.
Returns a dictionary mapping PR numbers to their information.
"""
print(f'Repository: {repo_path}', file=sys.stderr)
print('Finding PRs between commits:', file=sys.stderr)
print(f' Older: {older_commit}', file=sys.stderr)
print(f' Newer: {newer_commit}', file=sys.stderr)
print(file=sys.stderr)
# Verify commits exist
try:
run_git_command(['git', 'rev-parse', '--verify', older_commit], repo_path)
run_git_command(['git', 'rev-parse', '--verify', newer_commit], repo_path)
except SystemExit:
print('Error: One or both commits not found in repository', file=sys.stderr)
sys.exit(1)
# Extract PRs from the older commit itself (to exclude from results)
# These PRs are already included at or before the older commit
older_subject, older_body, _ = get_commit_info(older_commit, repo_path)
older_message = f'{older_subject}\n{older_body}'
excluded_prs = extract_pr_numbers_from_message(older_message)
if excluded_prs:
print(
f'Excluding PRs already in older commit: {", ".join(f"#{pr}" for pr in sorted(excluded_prs))}',
file=sys.stderr,
)
print(file=sys.stderr)
# Get all commits between the two
commits = get_commits_between(older_commit, newer_commit, repo_path)
print(f'Found {len(commits)} commits to analyze', file=sys.stderr)
print(file=sys.stderr)
# Extract PR numbers from all commits
pr_info: dict[int, dict] = {}
commits_by_pr: dict[int, list[str]] = defaultdict(list)
for commit_hash in commits:
subject, body, author = get_commit_info(commit_hash, repo_path)
full_message = f'{subject}\n{body}'
pr_numbers = extract_pr_numbers_from_message(full_message)
for pr_num in pr_numbers:
# Skip PRs that are already in the older commit
if pr_num in excluded_prs:
continue
commits_by_pr[pr_num].append(commit_hash)
if pr_num not in pr_info:
pr_info[pr_num] = {
'number': pr_num,
'first_commit': commit_hash[:8],
'first_commit_subject': subject,
'commits': [],
'github_info': None,
}
pr_info[pr_num]['commits'].append(
{'hash': commit_hash[:8], 'subject': subject, 'author': author}
)
# Try to get additional info from GitHub API
print('Fetching additional info from GitHub API...', file=sys.stderr)
for pr_num in pr_info.keys():
github_info = get_pr_info_from_github(pr_num, repo_path)
if github_info:
pr_info[pr_num]['github_info'] = github_info
print(file=sys.stderr)
return pr_info
def print_results(pr_info: dict[int, dict]):
"""Print the results in a readable format."""
sorted_prs = sorted(pr_info.items(), key=lambda x: x[0])
print(f'{"=" * 80}')
print(f'Found {len(sorted_prs)} PRs')
print(f'{"=" * 80}')
print()
for pr_num, info in sorted_prs:
print(f'PR #{pr_num}')
if info['github_info']:
gh = info['github_info']
print(f' Title: {gh["title"]}')
print(f' Author: {gh["author"]["login"]}')
print(f' URL: {gh["url"]}')
if gh.get('mergedAt'):
print(f' Merged: {gh["mergedAt"]}')
if gh.get('baseRefName'):
print(f' Base: {gh["baseRefName"]}{gh["headRefName"]}')
else:
print(f' Subject: {info["first_commit_subject"]}')
# Show if this PR has multiple commits (cherry-picked or multiple commits)
commit_count = len(info['commits'])
if commit_count > 1:
print(
f' ⚠️ Found {commit_count} commits (possible cherry-pick or multi-commit PR):'
)
for commit in info['commits'][:3]: # Show first 3
print(f' {commit["hash"]}: {commit["subject"][:60]}')
if commit_count > 3:
print(f' ... and {commit_count - 3} more')
else:
print(f' Commit: {info["first_commit"]}')
print()
def main():
if len(sys.argv) < 3:
print('Usage: find_prs_between_commits <older_commit> <newer_commit> [options]')
print()
print('Arguments:')
print(' <older_commit> The older commit hash (or ref)')
print(' <newer_commit> The newer commit hash (or ref)')
print()
print('Options:')
print(' --json Output results in JSON format')
print(' --repo <path> Path to OpenHands repository (default: auto-detect)')
print()
print('Example:')
print(
' find_prs_between_commits c79e0cd3c7a2501a719c9296828d7a31e4030585 35bddb14f15124a3dc448a74651a6592911d99e9'
)
print()
print('Repository Detection:')
print(' The script will try to find the OpenHands repository in this order:')
print(' 1. --repo argument')
print(' 2. Repository root (../../ from script location)')
print(' 3. Current directory')
print(' 4. OPENHANDS_REPO environment variable')
print()
print('Environment variables:')
print(
' GITHUB_TOKEN Optional. If set, will fetch additional PR info from GitHub API'
)
print(' OPENHANDS_REPO Optional. Path to OpenHands repository')
sys.exit(1)
older_commit = sys.argv[1]
newer_commit = sys.argv[2]
json_output = '--json' in sys.argv
# Check for --repo argument
repo_path = None
if '--repo' in sys.argv:
repo_idx = sys.argv.index('--repo')
if repo_idx + 1 < len(sys.argv):
repo_path = Path(sys.argv[repo_idx + 1])
if not (repo_path / '.git').exists():
print(f'Error: {repo_path} is not a git repository', file=sys.stderr)
sys.exit(1)
# Auto-detect repository if not specified
if repo_path is None:
repo_path = find_openhands_repo()
if repo_path is None:
print('Error: Could not find OpenHands repository', file=sys.stderr)
print('Please either:', file=sys.stderr)
print(
' 1. Place this script in .github/scripts/ within the OpenHands repository',
file=sys.stderr,
)
print(' 2. Run from the OpenHands repository directory', file=sys.stderr)
print(
' 3. Use --repo <path> to specify the repository location',
file=sys.stderr,
)
print(' 4. Set OPENHANDS_REPO environment variable', file=sys.stderr)
sys.exit(1)
# Find PRs
pr_info = find_prs_between_commits(older_commit, newer_commit, repo_path)
if json_output:
# Output as JSON
print(json.dumps(pr_info, indent=2))
else:
# Print results in human-readable format
print_results(pr_info)
# Also print a simple list for easy copying
print(f'{"=" * 80}')
print('PR Numbers (for easy copying):')
print(f'{"=" * 80}')
sorted_pr_nums = sorted(pr_info.keys())
print(', '.join(f'#{pr}' for pr in sorted_pr_nums))
if __name__ == '__main__':
main()

View File

@@ -13,12 +13,9 @@ DOCKER_RUN_COMMAND="docker run -it --rm \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
--add-host host.docker.internal:host-gateway \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:${SHORT_SHA}-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.openhands.dev/openhands/runtime:${SHORT_SHA}-nikolaik \
--name openhands-app-${SHORT_SHA} \
docker.all-hands.dev/all-hands-ai/openhands:${SHORT_SHA}"
# Define the uvx command
UVX_RUN_COMMAND="uvx --python 3.12 --from git+https://github.com/All-Hands-AI/OpenHands@${BRANCH_NAME} openhands"
docker.openhands.dev/openhands/openhands:${SHORT_SHA}"
# Get the current PR body
PR_BODY=$(gh pr view "$PR_NUMBER" --json body --jq .body)
@@ -37,11 +34,6 @@ GUI with Docker:
\`\`\`
${DOCKER_RUN_COMMAND}
\`\`\`
CLI with uvx:
\`\`\`
${UVX_RUN_COMMAND}
\`\`\`
EOF
)
else
@@ -57,11 +49,6 @@ GUI with Docker:
\`\`\`
${DOCKER_RUN_COMMAND}
\`\`\`
CLI with uvx:
\`\`\`
${UVX_RUN_COMMAND}
\`\`\`
EOF
)
fi

View File

@@ -0,0 +1,65 @@
name: Check Package Versions
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
check-package-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Check for any 'rev' fields in pyproject.toml
run: |
python - <<'PY'
import sys, tomllib, pathlib
path = pathlib.Path("pyproject.toml")
if not path.exists():
print("❌ ERROR: pyproject.toml not found")
sys.exit(1)
try:
data = tomllib.loads(path.read_text(encoding="utf-8"))
except Exception as e:
print(f"❌ ERROR: Failed to parse pyproject.toml: {e}")
sys.exit(1)
poetry = data.get("tool", {}).get("poetry", {})
sections = {
"dependencies": poetry.get("dependencies", {}),
}
errors = []
print("🔍 Checking for any dependencies with 'rev' fields...\n")
for section_name, deps in sections.items():
if not isinstance(deps, dict):
continue
for pkg_name, cfg in deps.items():
if isinstance(cfg, dict) and "rev" in cfg:
msg = f" ✖ {pkg_name} in [{section_name}] uses rev='{cfg['rev']}' (NOT ALLOWED)"
print(msg)
errors.append(msg)
else:
print(f" • {pkg_name}: OK")
if errors:
print("\n❌ FAILED: Found dependencies using 'rev' fields:\n" + "\n".join(errors))
print("\nPlease use versioned releases instead, e.g.:")
print(' my-package = "1.0.0"')
sys.exit(1)
print("\n✅ SUCCESS: No 'rev' fields found. All dependencies are using proper versioned releases.")
PY

View File

@@ -0,0 +1,122 @@
name: Check Version Consistency
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
check-version-consistency:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Check version and Docker image tag consistency
run: |
python - <<'PY'
import json
import re
import sys
import tomllib
errors = []
warnings = []
# ── 1. Extract the canonical version from pyproject.toml ──────────
with open("pyproject.toml", "rb") as f:
pyproject = tomllib.load(f)
version = pyproject["tool"]["poetry"]["version"]
major_minor = ".".join(version.split(".")[:2])
print(f"📦 pyproject.toml version: {version} (major.minor: {major_minor})")
# ── 2. Check frontend/package.json ────────────────────────────────
with open("frontend/package.json") as f:
pkg = json.load(f)
if pkg["version"] != version:
errors.append(
f"frontend/package.json version is '{pkg['version']}', expected '{version}'"
)
else:
print(f" ✔ frontend/package.json: {pkg['version']}")
# ── 3. Check frontend/package-lock.json (2 places) ───────────────
with open("frontend/package-lock.json") as f:
lock = json.load(f)
for key, val in [
("root.version", lock.get("version")),
('packages[""].version', lock.get("packages", {}).get("", {}).get("version")),
]:
if val != version:
errors.append(
f"frontend/package-lock.json {key} is '{val}', expected '{version}'"
)
else:
print(f" ✔ frontend/package-lock.json {key}: {val}")
# ── 4. Check compose files use agent-server images ─────────────────
# Both compose files should use ghcr.io/.../agent-server (not runtime).
# Agent-server tags use SDK version (e.g. "1.12.0-python") or commit
# hashes (e.g. "31536c8-python") — both are acceptable.
repo_pattern = re.compile(r"AGENT_SERVER_IMAGE_REPOSITORY[^}]*:-([^}]+)")
tag_pattern = re.compile(r"AGENT_SERVER_IMAGE_TAG:-([^}]+)")
for filepath in ["docker-compose.yml", "containers/dev/compose.yml"]:
try:
with open(filepath) as f:
content = f.read()
except FileNotFoundError:
warnings.append(f"{filepath}: file not found")
continue
repos = repo_pattern.findall(content)
tags = tag_pattern.findall(content)
if not repos:
warnings.append(f"{filepath}: no AGENT_SERVER_IMAGE_REPOSITORY default found")
else:
repo = repos[0]
if "agent-server" not in repo:
errors.append(
f"{filepath}: AGENT_SERVER_IMAGE_REPOSITORY defaults to '{repo}', "
f"expected an agent-server image (not runtime)"
)
else:
print(f" ✔ {filepath} image repository: {repo}")
if not tags:
warnings.append(f"{filepath}: no AGENT_SERVER_IMAGE_TAG default found")
else:
tag = tags[0]
if not tag:
errors.append(f"{filepath}: AGENT_SERVER_IMAGE_TAG default is empty")
else:
print(f" ✔ {filepath} image tag: {tag}")
# ── 5. Report ─────────────────────────────────────────────────────
print()
if warnings:
print("⚠ Warnings:")
for w in warnings:
print(f" {w}")
print()
if errors:
print("❌ FAILED: Version inconsistencies found:\n")
for e in errors:
print(f" ✖ {e}")
print(
"\nAll version numbers and Docker image tags must be consistent."
"\nSee .agents/skills/update-sdk/SKILL.md for the full checklist."
)
sys.exit(1)
else:
print("✅ All version numbers and Docker image tags are consistent.")
PY

View File

@@ -1,69 +0,0 @@
# Workflow that cleans up outdated and old workflows to prevent out of disk issues
name: Delete old workflow runs
# This workflow is currently only triggered manually
on:
workflow_dispatch:
inputs:
days:
description: 'Days-worth of runs to keep for each workflow'
required: true
default: '30'
minimum_runs:
description: 'Minimum runs to keep for each workflow'
required: true
default: '10'
delete_workflow_pattern:
description: 'Name or filename of the workflow (if not set, all workflows are targeted)'
required: false
delete_workflow_by_state_pattern:
description: 'Filter workflows by state: active, deleted, disabled_fork, disabled_inactivity, disabled_manually'
required: true
default: "ALL"
type: choice
options:
- "ALL"
- active
- deleted
- disabled_inactivity
- disabled_manually
delete_run_by_conclusion_pattern:
description: 'Remove runs based on conclusion: action_required, cancelled, failure, skipped, success'
required: true
default: 'ALL'
type: choice
options:
- 'ALL'
- 'Unsuccessful: action_required,cancelled,failure,skipped'
- action_required
- cancelled
- failure
- skipped
- success
dry_run:
description: 'Logs simulated changes, no deletions are performed'
required: false
jobs:
del_runs:
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
actions: write
contents: read
steps:
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@v2
with:
token: ${{ github.token }}
repository: ${{ github.repository }}
retain_days: ${{ github.event.inputs.days }}
keep_minimum_runs: ${{ github.event.inputs.minimum_runs }}
delete_workflow_pattern: ${{ github.event.inputs.delete_workflow_pattern }}
delete_workflow_by_state_pattern: ${{ github.event.inputs.delete_workflow_by_state_pattern }}
delete_run_by_conclusion_pattern: >-
${{
startsWith(github.event.inputs.delete_run_by_conclusion_pattern, 'Unsuccessful:')
&& 'action_required,cancelled,failure,skipped'
|| github.event.inputs.delete_run_by_conclusion_pattern
}}
dry_run: ${{ github.event.inputs.dry_run }}

View File

@@ -27,7 +27,7 @@ jobs:
poetry-version: 2.1.3
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: 'poetry'
@@ -38,7 +38,7 @@ jobs:
sudo apt-get install -y libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xauth xvfb libgbm1 libasound2t64 netcat-openbsd
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
@@ -187,11 +187,12 @@ jobs:
test_settings.py::test_github_token_configuration \
test_conversation.py::test_conversation_start \
test_browsing_catchphrase.py::test_browsing_catchphrase \
test_multi_conversation_resume.py::test_multi_conversation_resume \
-v --no-header --capture=no --timeout=900
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: playwright-report
path: tests/e2e/test-results/
@@ -199,7 +200,7 @@ jobs:
- name: Upload OpenHands logs
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: openhands-logs
path: |

View File

@@ -0,0 +1,52 @@
name: Enterprise Check Migrations
on:
pull_request:
paths:
- 'enterprise/migrations/**'
jobs:
check-sync:
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Fetch base branch
run: git fetch origin ${{ github.event.pull_request.base.ref }}
- name: Check if base branch is ancestor of PR
id: check_up_to_date
shell: bash
run: |
BASE="origin/${{ github.event.pull_request.base.ref }}"
HEAD="${{ github.event.pull_request.head.sha }}"
if git merge-base --is-ancestor "$BASE" "$HEAD"; then
echo "We're up to date with base $BASE"
exit 0
else
echo "NOT up to date with base $BASE"
exit 1
fi
- name: Find Comment
uses: peter-evans/find-comment@v3
id: find-comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: |
⚠️ This PR contains **migrations**
- name: Comment warning on PR
uses: peter-evans/create-or-update-comment@v5
with:
issue-number: ${{ github.event.pull_request.number }}
comment-id: ${{ steps.find-comment.outputs.comment-id }}
edit-mode: replace
body: |
⚠️ This PR contains **migrations**. Please synchronize before merging to prevent conflicts.

47
.github/workflows/fe-e2e-tests.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
# Workflow that runs frontend e2e tests with Playwright
name: Run Frontend E2E Tests
on:
push:
branches:
- main
pull_request:
paths:
- "frontend/**"
- ".github/workflows/fe-e2e-tests.yml"
concurrency:
group: ${{ github.workflow }}-${{ (github.head_ref && github.ref) || github.run_id }}
cancel-in-progress: true
jobs:
fe-e2e-test:
name: FE E2E Tests
runs-on: blacksmith-4vcpu-ubuntu-2204
strategy:
matrix:
node-version: [22]
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
working-directory: ./frontend
run: npm ci
- name: Install Playwright browsers
working-directory: ./frontend
run: npx playwright install --with-deps chromium
- name: Run Playwright tests
working-directory: ./frontend
run: npx playwright test --project=chromium
- name: Upload Playwright report
uses: actions/upload-artifact@v6
if: always()
with:
name: playwright-report
path: frontend/playwright-report/
retention-days: 30

View File

@@ -9,15 +9,16 @@ on:
push:
branches:
- main
- "saas-rel-*"
tags:
- '*'
- "*"
pull_request:
workflow_dispatch:
inputs:
reason:
description: 'Reason for manual trigger'
description: "Reason for manual trigger"
required: true
default: ''
default: ""
# If triggered by a PR, it will be in the same group. However, each commit on main will be in its own unique group
concurrency:
@@ -37,11 +38,9 @@ jobs:
shell: bash
id: define-base-images
run: |
# Only build nikolaik on PRs, otherwise build both nikolaik and ubuntu.
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
json=$(jq -n -c '[
{ image: "nikolaik/python-nodejs:python3.12-nodejs22", tag: "nikolaik" },
{ image: "ubuntu:24.04", tag: "ubuntu" }
{ image: "nikolaik/python-nodejs:python3.12-nodejs22", tag: "nikolaik" }
]')
else
json=$(jq -n -c '[
@@ -65,7 +64,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.6.0
uses: docker/setup-qemu-action@v3.7.0
with:
image: tonistiigi/binfmt:latest
- name: Login to GHCR
@@ -87,7 +86,7 @@ jobs:
# Builds the runtime Docker images
ghcr_build_runtime:
name: Build Image
name: Build Runtime Image
runs-on: blacksmith-8vcpu-ubuntu-2204
if: "!(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/ext-v'))"
permissions:
@@ -103,7 +102,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.6.0
uses: docker/setup-qemu-action@v3.7.0
with:
image: tonistiigi/binfmt:latest
- name: Login to GHCR
@@ -120,12 +119,12 @@ jobs:
- name: Set up Python
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
python-version: "3.12"
cache: poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies POETRY_GROUP=main INSTALL_PLAYWRIGHT=0
- name: Create source distribution and Dockerfile
run: poetry run python3 openhands/runtime/utils/runtime_build.py --base_image ${{ matrix.base_image.image }} --build_folder containers/runtime --force_rebuild
run: poetry run python3 -m openhands.runtime.utils.runtime_build --base_image ${{ matrix.base_image.image }} --build_folder containers/runtime --force_rebuild
- name: Lowercase Repository Owner
run: |
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
@@ -136,6 +135,7 @@ jobs:
if: github.event.pull_request.head.repo.fork != true
shell: bash
run: |
./containers/build.sh -i runtime -o ${{ env.REPO_OWNER }} -t ${{ matrix.base_image.tag }} --dry
DOCKER_BUILD_JSON=$(jq -c . < docker-build-dry.json)
@@ -149,6 +149,9 @@ jobs:
push: true
tags: ${{ env.DOCKER_TAGS }}
platforms: ${{ env.DOCKER_PLATFORM }}
# Caching directives to boost performance
cache-from: type=registry,ref=ghcr.io/${{ env.REPO_OWNER }}/runtime:buildcache-${{ matrix.base_image.tag }}
cache-to: type=registry,ref=ghcr.io/${{ env.REPO_OWNER }}/runtime:buildcache-${{ matrix.base_image.tag }},mode=max
build-args: ${{ env.DOCKER_BUILD_ARGS }}
context: containers/runtime
provenance: false
@@ -161,156 +164,91 @@ jobs:
context: containers/runtime
- name: Upload runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
# Run unit tests with the Docker runtime Docker images as root
test_runtime_root:
name: RT Unit Tests (Root)
needs: [ghcr_build_runtime, define-matrix]
ghcr_build_enterprise:
name: Push Enterprise Image
runs-on: blacksmith-8vcpu-ubuntu-2204
strategy:
fail-fast: false
matrix:
base_image: ${{ fromJson(needs.define-matrix.outputs.base_image) }}
permissions:
contents: read
packages: write
needs: [define-matrix, ghcr_build_app]
# Do not build enterprise in forks
if: github.event.pull_request.head.repo.fork != true
steps:
- uses: actions/checkout@v4
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
# Set up Docker Buildx for better performance
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Download runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/download-artifact@v4
with:
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
- name: Lowercase Repository Owner
run: |
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
# Forked repos can't push to GHCR, so we need to rebuild using cache
- name: Build runtime image ${{ matrix.base_image.image }} for fork
if: github.event.pull_request.head.repo.fork
uses: useblacksmith/build-push-action@v1
driver-opts: network=host
- name: Login to GHCR
uses: docker/login-action@v3
with:
load: true
tags: ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
context: containers/runtime
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: useblacksmith/setup-python@v6
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
python-version: '3.12'
cache: poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies INSTALL_PLAYWRIGHT=0
- name: Run docker runtime tests
images: ghcr.io/openhands/enterprise-server
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha
type=sha,format=long
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
flavor: |
latest=auto
prefix=
suffix=
env:
DOCKER_METADATA_PR_HEAD_SHA: true
- name: Determine app image tag
shell: bash
run: |
# We install pytest-xdist in order to run tests across CPUs
poetry run pip install pytest-xdist
# Install to be able to retry on failures for flaky tests
poetry run pip install pytest-rerunfailures
image_name=ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
# Setting RUN_AS_OPENHANDS to false means use root.
# That should mean SANDBOX_USER_ID is ignored but some tests do not check for RUN_AS_OPENHANDS.
TEST_RUNTIME=docker \
SANDBOX_USER_ID=$(id -u) \
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
TEST_IN_CI=true \
RUN_AS_OPENHANDS=false \
poetry run pytest -n 7 -raRs --reruns 2 --reruns-delay 5 -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py --durations=10
env:
DEBUG: "1"
# Run unit tests with the Docker runtime Docker images as openhands user
test_runtime_oh:
name: RT Unit Tests (openhands)
runs-on: blacksmith-8vcpu-ubuntu-2204
needs: [ghcr_build_runtime, define-matrix]
strategy:
matrix:
base_image: ${{ fromJson(needs.define-matrix.outputs.base_image) }}
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Download runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/download-artifact@v4
with:
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
- name: Lowercase Repository Owner
run: |
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
# Forked repos can't push to GHCR, so we need to rebuild using cache
- name: Build runtime image ${{ matrix.base_image.image }} for fork
if: github.event.pull_request.head.repo.fork
# Duplicated with build.sh
sanitized_ref_name=$(echo "$GITHUB_REF_NAME" | sed 's/[^a-zA-Z0-9.-]\+/-/g')
OPENHANDS_BUILD_VERSION=$sanitized_ref_name
sanitized_ref_name=$(echo "$sanitized_ref_name" | tr '[:upper:]' '[:lower:]') # lower case is required in tagging
echo "OPENHANDS_DOCKER_TAG=${sanitized_ref_name}" >> $GITHUB_ENV
- name: Build and push Docker image
uses: useblacksmith/build-push-action@v1
with:
load: true
tags: ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
context: containers/runtime
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
cache: poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies POETRY_GROUP=main,test,runtime INSTALL_PLAYWRIGHT=0
- name: Run runtime tests
shell: bash
run: |
# We install pytest-xdist in order to run tests across CPUs
poetry run pip install pytest-xdist
context: .
file: enterprise/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
OPENHANDS_VERSION=${{ env.OPENHANDS_DOCKER_TAG }}
platforms: linux/amd64
# Add build provenance
provenance: true
# Add build attestations for better security
sbom: true
# Install to be able to retry on failures for flaky tests
poetry run pip install pytest-rerunfailures
image_name=ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
TEST_RUNTIME=docker \
SANDBOX_USER_ID=$(id -u) \
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
TEST_IN_CI=true \
RUN_AS_OPENHANDS=true \
poetry run pytest -n 7 -raRs --reruns 2 --reruns-delay 5 -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py --durations=10
env:
DEBUG: "1"
# The two following jobs (named identically) are to check whether all the runtime tests have passed as the
# "All Runtime Tests Passed" is a required job for PRs to merge
# Due to this bug: https://github.com/actions/runner/issues/2566, we want to create a job that runs when the
# prerequisites have been cancelled or failed so merging is disallowed, otherwise Github considers "skipped" as "success"
# We can remove this once the config changes
runtime_tests_check_success:
name: All Runtime Tests Passed
if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: [test_runtime_root, test_runtime_oh]
steps:
- name: All tests passed
run: echo "All runtime tests have passed successfully!"
runtime_tests_check_fail:
name: All Runtime Tests Passed
if: ${{ cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: [test_runtime_root, test_runtime_oh]
steps:
- name: Some tests failed
run: |
echo "Some runtime tests failed or were cancelled"
exit 1
update_pr_description:
name: Update PR Description
if: github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]'

View File

@@ -1,199 +0,0 @@
name: Run Integration Tests
on:
pull_request:
types: [labeled]
workflow_dispatch:
inputs:
reason:
description: 'Reason for manual trigger'
required: true
default: ''
schedule:
- cron: '30 22 * * *' # Runs at 10:30pm UTC every day
env:
N_PROCESSES: 10 # Global configuration for number of parallel processes for evaluation
jobs:
run-integration-tests:
if: github.event.label.name == 'integration-test' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: "read"
id-token: "write"
pull-requests: "write"
issues: "write"
strategy:
matrix:
python-version: ["3.12"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: useblacksmith/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: "poetry"
- name: Setup Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: '22.x'
- name: Comment on PR if 'integration-test' label is present
if: github.event_name == 'pull_request' && github.event.label.name == 'integration-test'
uses: KeisukeYamashita/create-comment@v1
with:
unique: false
comment: |
Hi! I started running the integration tests on your PR. You will receive a comment with the results shortly.
- name: Install Python dependencies using Poetry
run: poetry install --with dev,test,runtime,evaluation
- name: Configure config.toml for testing with Haiku
env:
LLM_MODEL: "litellm_proxy/claude-3-5-haiku-20241022"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 10
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
echo "temperature = 0.0" >> config.toml
- name: Build environment
run: make build
- name: Run integration test evaluation for Haiku
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' 10 $N_PROCESSES '' 'haiku_run'
# get integration tests report
REPORT_FILE_HAIKU=$(find evaluation/evaluation_outputs/outputs/integration_tests/CodeActAgent/*haiku*_maxiter_10_N* -name "report.md" -type f | head -n 1)
echo "REPORT_FILE: $REPORT_FILE_HAIKU"
echo "INTEGRATION_TEST_REPORT_HAIKU<<EOF" >> $GITHUB_ENV
cat $REPORT_FILE_HAIKU >> $GITHUB_ENV
echo >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Wait a little bit
run: sleep 10
- name: Configure config.toml for testing with DeepSeek
env:
LLM_MODEL: "litellm_proxy/deepseek-chat"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 10
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
echo "temperature = 0.0" >> config.toml
- name: Run integration test evaluation for DeepSeek
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' 10 $N_PROCESSES '' 'deepseek_run'
# get integration tests report
REPORT_FILE_DEEPSEEK=$(find evaluation/evaluation_outputs/outputs/integration_tests/CodeActAgent/deepseek*_maxiter_10_N* -name "report.md" -type f | head -n 1)
echo "REPORT_FILE: $REPORT_FILE_DEEPSEEK"
echo "INTEGRATION_TEST_REPORT_DEEPSEEK<<EOF" >> $GITHUB_ENV
cat $REPORT_FILE_DEEPSEEK >> $GITHUB_ENV
echo >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
# -------------------------------------------------------------
# Run VisualBrowsingAgent tests for DeepSeek, limited to t05 and t06
- name: Wait a little bit (again)
run: sleep 5
- name: Configure config.toml for testing VisualBrowsingAgent (DeepSeek)
env:
LLM_MODEL: "litellm_proxy/deepseek-chat"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 15
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
echo "temperature = 0.0" >> config.toml
- name: Run integration test evaluation for VisualBrowsingAgent (DeepSeek)
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD VisualBrowsingAgent '' 15 $N_PROCESSES "t05_simple_browsing,t06_github_pr_browsing.py" 'visualbrowsing_deepseek_run'
# Find and export the visual browsing agent test results
REPORT_FILE_VISUALBROWSING_DEEPSEEK=$(find evaluation/evaluation_outputs/outputs/integration_tests/VisualBrowsingAgent/deepseek*_maxiter_15_N* -name "report.md" -type f | head -n 1)
echo "REPORT_FILE_VISUALBROWSING_DEEPSEEK: $REPORT_FILE_VISUALBROWSING_DEEPSEEK"
echo "INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK<<EOF" >> $GITHUB_ENV
cat $REPORT_FILE_VISUALBROWSING_DEEPSEEK >> $GITHUB_ENV
echo >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create archive of evaluation outputs
run: |
TIMESTAMP=$(date +'%y-%m-%d-%H-%M')
cd evaluation/evaluation_outputs/outputs # Change to the outputs directory
tar -czvf ../../../integration_tests_${TIMESTAMP}.tar.gz integration_tests/CodeActAgent/* integration_tests/VisualBrowsingAgent/* # Only include the actual result directories
- name: Upload evaluation results as artifact
uses: actions/upload-artifact@v4
id: upload_results_artifact
with:
name: integration-test-outputs-${{ github.run_id }}-${{ github.run_attempt }}
path: integration_tests_*.tar.gz
- name: Get artifact URLs
run: |
echo "ARTIFACT_URL=${{ steps.upload_results_artifact.outputs.artifact-url }}" >> $GITHUB_ENV
- name: Set timestamp and trigger reason
run: |
echo "TIMESTAMP=$(date +'%Y-%m-%d-%H-%M')" >> $GITHUB_ENV
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "TRIGGER_REASON=pr-${{ github.event.pull_request.number }}" >> $GITHUB_ENV
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "TRIGGER_REASON=manual-${{ github.event.inputs.reason }}" >> $GITHUB_ENV
else
echo "TRIGGER_REASON=nightly-scheduled" >> $GITHUB_ENV
fi
- name: Comment with results and artifact link
id: create_comment
uses: KeisukeYamashita/create-comment@v1
with:
# if triggered by PR, use PR number, otherwise use 9745 as fallback issue number for manual triggers
number: ${{ github.event_name == 'pull_request' && github.event.pull_request.number || 9745 }}
unique: false
comment: |
Trigger by: ${{ github.event_name == 'pull_request' && format('Pull Request (integration-test label on PR #{0})', github.event.pull_request.number) || (github.event_name == 'workflow_dispatch' && format('Manual Trigger: {0}', github.event.inputs.reason)) || 'Nightly Scheduled Run' }}
Commit: ${{ github.sha }}
**Integration Tests Report (Haiku)**
Haiku LLM Test Results:
${{ env.INTEGRATION_TEST_REPORT_HAIKU }}
---
**Integration Tests Report (DeepSeek)**
DeepSeek LLM Test Results:
${{ env.INTEGRATION_TEST_REPORT_DEEPSEEK }}
---
**Integration Tests Report VisualBrowsing (DeepSeek)**
${{ env.INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK }}
---
Download testing outputs (includes both Haiku and DeepSeek results): [Download](${{ steps.upload_results_artifact.outputs.artifact-url }})

View File

@@ -55,15 +55,20 @@ jobs:
- name: Run pre-commit hooks
run: pre-commit run --all-files --show-diff-on-failure --config ./dev_config/python/.pre-commit-config.yaml
# Check version consistency across documentation
check-version-consistency:
name: Check version consistency
lint-enterprise-python:
name: Lint enterprise python
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python
uses: useblacksmith/setup-python@v6
with:
python-version: 3.12
- name: Run version consistency check
run: .github/scripts/check_version_consistency.py
cache: "pip"
- name: Install pre-commit
run: pip install pre-commit==4.2.0
- name: Run pre-commit hooks
working-directory: ./enterprise
run: pre-commit run --all-files --show-diff-on-failure --config ./dev_config/python/.pre-commit-config.yaml

View File

@@ -89,7 +89,7 @@ jobs:
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Upgrade pip
@@ -118,7 +118,7 @@ jobs:
contains(github.event.review.body, '@openhands-agent-exp')
)
)
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ${{ env.pythonLocation }}/lib/python3.12/site-packages/*
key: ${{ runner.os }}-pip-openhands-resolver-${{ hashFiles('/tmp/requirements.txt') }}
@@ -201,7 +201,7 @@ jobs:
issue_number: ${{ env.ISSUE_NUMBER }},
owner: context.repo.owner,
repo: context.repo.repo,
body: `[OpenHands](https://github.com/All-Hands-AI/OpenHands) started fixing the ${issueType}! You can monitor the progress [here](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}).`
body: `[OpenHands](https://github.com/OpenHands/OpenHands) started fixing the ${issueType}! You can monitor the progress [here](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}).`
});
- name: Install OpenHands
@@ -233,7 +233,7 @@ jobs:
if (isExperimentalLabel || isIssueCommentExperimental || isReviewCommentExperimental) {
console.log("Installing experimental OpenHands...");
await exec.exec("pip install git+https://github.com/all-hands-ai/openhands.git");
await exec.exec("pip install git+https://github.com/openhands/openhands.git");
} else {
console.log("Installing from requirements.txt...");
@@ -269,7 +269,7 @@ jobs:
fi
- name: Upload output.jsonl as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
if: always() # Upload even if the previous steps fail
with:
name: resolver-output

View File

@@ -0,0 +1,48 @@
---
name: PR Review by OpenHands
on:
# TEMPORARY MITIGATION (Clinejection hardening)
#
# We temporarily avoid `pull_request_target` here. We'll restore it after the PR review
# workflow is fully hardened for untrusted execution.
pull_request:
types: [opened, ready_for_review, labeled, review_requested]
permissions:
contents: read
pull-requests: write
issues: write
jobs:
pr-review:
# Note: fork PRs will not have access to repository secrets under `pull_request`.
# Skip forks to avoid noisy failures until we restore a hardened `pull_request_target` flow.
if: |
github.event.pull_request.head.repo.full_name == github.repository &&
(
(github.event.action == 'opened' && github.event.pull_request.draft == false) ||
github.event.action == 'ready_for_review' ||
(github.event.action == 'labeled' && github.event.label.name == 'review-this') ||
(
github.event.action == 'review_requested' &&
(
github.event.requested_reviewer.login == 'openhands-agent' ||
github.event.requested_reviewer.login == 'all-hands-bot'
)
)
)
concurrency:
group: pr-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
runs-on: ubuntu-24.04
steps:
- name: Run PR Review
uses: OpenHands/extensions/plugins/pr-review@main
with:
llm-model: litellm_proxy/claude-sonnet-4-5-20250929
llm-base-url: https://llm-proxy.app.all-hands.dev
review-style: roasted
llm-api-key: ${{ secrets.LLM_API_KEY }}
github-token: ${{ secrets.ALLHANDS_BOT_GITHUB_PAT }}
lmnr-api-key: ${{ secrets.LMNR_SKILLS_API_KEY }}

View File

@@ -0,0 +1,85 @@
---
name: PR Review Evaluation
# This workflow evaluates how well PR review comments were addressed.
# It runs when a PR is closed to assess review effectiveness.
#
# Security note: pull_request_target is safe here because:
# 1. Only triggers on PR close (not on code changes)
# 2. Does not checkout PR code - only downloads artifacts from trusted workflow runs
# 3. Runs evaluation scripts from the extensions repo, not from the PR
on:
pull_request_target:
types: [closed]
permissions:
contents: read
pull-requests: read
jobs:
evaluate:
runs-on: ubuntu-24.04
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO_NAME: ${{ github.repository }}
PR_MERGED: ${{ github.event.pull_request.merged }}
steps:
- name: Download review trace artifact
id: download-trace
uses: dawidd6/action-download-artifact@v6
continue-on-error: true
with:
workflow: pr-review-by-openhands.yml
name: pr-review-trace-${{ github.event.pull_request.number }}
path: trace-info
search_artifacts: true
if_no_artifact_found: warn
- name: Check if trace file exists
id: check-trace
run: |
if [ -f "trace-info/laminar_trace_info.json" ]; then
echo "trace_exists=true" >> $GITHUB_OUTPUT
echo "Found trace file for PR #$PR_NUMBER"
else
echo "trace_exists=false" >> $GITHUB_OUTPUT
echo "No trace file found for PR #$PR_NUMBER - skipping evaluation"
fi
# Always checkout main branch for security - cannot test script changes in PRs
- name: Checkout extensions repository
if: steps.check-trace.outputs.trace_exists == 'true'
uses: actions/checkout@v5
with:
repository: OpenHands/extensions
path: extensions
- name: Set up Python
if: steps.check-trace.outputs.trace_exists == 'true'
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Install dependencies
if: steps.check-trace.outputs.trace_exists == 'true'
run: pip install lmnr
- name: Run evaluation
if: steps.check-trace.outputs.trace_exists == 'true'
env:
# Script expects LMNR_PROJECT_API_KEY; org secret is named LMNR_SKILLS_API_KEY
LMNR_PROJECT_API_KEY: ${{ secrets.LMNR_SKILLS_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python extensions/plugins/pr-review/scripts/evaluate_review.py \
--trace-file trace-info/laminar_trace_info.json
- name: Upload evaluation logs
uses: actions/upload-artifact@v5
if: always() && steps.check-trace.outputs.trace_exists == 'true'
with:
name: pr-review-evaluation-${{ github.event.pull_request.number }}
path: '*.log'
retention-days: 30

View File

@@ -19,12 +19,16 @@ jobs:
# Run python tests on Linux
test-on-linux:
name: Python Tests on Linux
runs-on: blacksmith-4vcpu-ubuntu-2204
runs-on: blacksmith-4vcpu-ubuntu-2404
env:
INSTALL_DOCKER: '0' # Set to '0' to skip Docker installation
INSTALL_DOCKER: "0" # Set to '0' to skip Docker installation
strategy:
matrix:
python-version: ['3.12']
python-version: ["3.12"]
permissions:
# For coverage comment and python-coverage-comment-action branch
pull-requests: write
contents: write
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
@@ -35,51 +39,89 @@ jobs:
- name: Setup Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: '22.x'
node-version: "22.x"
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: useblacksmith/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
cache: "poetry"
- name: Install Python dependencies using Poetry
run: poetry install --with dev,test,runtime
run: |
poetry install --with dev,test,runtime
poetry run pip install pytest-xdist
poetry run pip install pytest-rerunfailures
- name: Build Environment
run: make build
- name: Run Unit Tests
run: PYTHONPATH=".:$PYTHONPATH" poetry run pytest --forked -n auto -svv ./tests/unit
run: PYTHONPATH=".:$PYTHONPATH" poetry run pytest --forked -n auto -s ./tests/unit --cov=openhands --cov-branch
env:
COVERAGE_FILE: ".coverage.${{ matrix.python_version }}"
- name: Run Runtime Tests with CLIRuntime
run: PYTHONPATH=".:$PYTHONPATH" TEST_RUNTIME=cli poetry run pytest -svv tests/runtime/test_bash.py
run: PYTHONPATH=".:$PYTHONPATH" TEST_RUNTIME=cli poetry run pytest -n 5 --reruns 2 --reruns-delay 3 -s tests/runtime/test_bash.py --cov=openhands --cov-branch
env:
COVERAGE_FILE: ".coverage.runtime.${{ matrix.python_version }}"
- name: Store coverage file
uses: actions/upload-artifact@v6
with:
name: coverage-openhands
path: |
.coverage.${{ matrix.python_version }}
.coverage.runtime.${{ matrix.python_version }}
include-hidden-files: true
# Run specific Windows python tests
test-on-windows:
name: Python Tests on Windows
runs-on: windows-latest
test-enterprise:
name: Enterprise Python Unit Tests
runs-on: blacksmith-4vcpu-ubuntu-2404
strategy:
matrix:
python-version: ['3.12']
python-version: ["3.12"]
steps:
- uses: actions/checkout@v4
- name: Install pipx
run: pip install pipx
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
cache: "poetry"
- name: Install Python dependencies using Poetry
run: poetry install --with dev,test,runtime
- name: Run Windows unit tests
run: poetry run pytest -svv tests/unit/runtime/utils/test_windows_bash.py
working-directory: ./enterprise
run: poetry install --with dev,test
- name: Run Unit Tests
# Use base working directory for coverage paths to line up.
run: PYTHONPATH=".:$PYTHONPATH" poetry run --project=enterprise pytest --forked -n auto -s -p no:ddtrace -p no:ddtrace.pytest_bdd -p no:ddtrace.pytest_benchmark ./enterprise/tests/unit --cov=enterprise --cov-branch
env:
PYTHONPATH: ".;$env:PYTHONPATH"
DEBUG: "1"
- name: Run Windows runtime tests with LocalRuntime
run: $env:TEST_RUNTIME="local"; poetry run pytest -svv tests/runtime/test_bash.py
env:
PYTHONPATH: ".;$env:PYTHONPATH"
TEST_RUNTIME: local
DEBUG: "1"
COVERAGE_FILE: ".coverage.enterprise.${{ matrix.python_version }}"
- name: Store coverage file
uses: actions/upload-artifact@v6
with:
name: coverage-enterprise
path: ".coverage.enterprise.${{ matrix.python_version }}"
include-hidden-files: true
coverage-comment:
name: Coverage Comment
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
needs: [test-on-linux, test-enterprise]
permissions:
pull-requests: write
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v6
id: download
with:
pattern: coverage-*
merge-multiple: true
- name: Coverage comment
id: coverage_comment
uses: py-cov-action/python-coverage-comment-action@v3
with:
GITHUB_TOKEN: ${{ github.token }}
MERGE_COVERAGE_FILES: true

View File

@@ -1,18 +1,27 @@
# Publishes the OpenHands PyPi package
name: Publish PyPi Package
# Triggered manually
on:
workflow_dispatch:
inputs:
reason:
description: 'Reason for manual trigger'
description: "What are you publishing?"
required: true
default: ''
type: choice
options:
- app server
default: app server
push:
tags:
- "*"
jobs:
release:
runs-on: blacksmith-4vcpu-ubuntu-2204
# Run when manually dispatched for "app server" OR for tag pushes that don't contain '-cli'
if: |
(github.event_name == 'workflow_dispatch' && github.event.inputs.reason == 'app server')
|| (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && !contains(github.ref, '-cli'))
steps:
- uses: actions/checkout@v4
- uses: useblacksmith/setup-python@v6

View File

@@ -1,135 +0,0 @@
# Run evaluation on a PR, after releases, or manually
name: Run Eval
# Runs when a PR is labeled with one of the "run-eval-" labels, after releases, or manually triggered
on:
pull_request:
types: [labeled]
release:
types: [published]
workflow_dispatch:
inputs:
branch:
description: 'Branch to evaluate'
required: true
default: 'main'
eval_instances:
description: 'Number of evaluation instances'
required: true
default: '50'
type: choice
options:
- '1'
- '2'
- '50'
- '100'
reason:
description: 'Reason for manual trigger'
required: false
default: ''
env:
# Environment variable for the master GitHub issue number where all evaluation results will be commented
# This should be set to the issue number where you want all evaluation results to be posted
MASTER_EVAL_ISSUE_NUMBER: ${{ vars.MASTER_EVAL_ISSUE_NUMBER || '0' }}
jobs:
trigger-job:
name: Trigger remote eval job
if: ${{ (github.event_name == 'pull_request' && (github.event.label.name == 'run-eval-1' || github.event.label.name == 'run-eval-2' || github.event.label.name == 'run-eval-50' || github.event.label.name == 'run-eval-100')) || github.event_name == 'release' || github.event_name == 'workflow_dispatch' }}
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- name: Checkout branch
uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'pull_request' && github.head_ref || (github.event_name == 'workflow_dispatch' && github.event.inputs.branch) || github.ref }}
- name: Set evaluation parameters
id: eval_params
run: |
REPO_URL="https://github.com/${{ github.repository }}"
echo "Repository URL: $REPO_URL"
# Determine branch based on trigger type
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
EVAL_BRANCH="${{ github.head_ref }}"
echo "PR Branch: $EVAL_BRANCH"
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
EVAL_BRANCH="${{ github.event.inputs.branch }}"
echo "Manual Branch: $EVAL_BRANCH"
else
# For release events, use the tag name or main branch
EVAL_BRANCH="${{ github.ref_name }}"
echo "Release Branch/Tag: $EVAL_BRANCH"
fi
# Determine evaluation instances based on trigger type
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
if [[ "${{ github.event.label.name }}" == "run-eval-1" ]]; then
EVAL_INSTANCES="1"
elif [[ "${{ github.event.label.name }}" == "run-eval-2" ]]; then
EVAL_INSTANCES="2"
elif [[ "${{ github.event.label.name }}" == "run-eval-50" ]]; then
EVAL_INSTANCES="50"
elif [[ "${{ github.event.label.name }}" == "run-eval-100" ]]; then
EVAL_INSTANCES="100"
fi
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
EVAL_INSTANCES="${{ github.event.inputs.eval_instances }}"
else
# For release events, default to 50 instances
EVAL_INSTANCES="50"
fi
echo "Evaluation instances: $EVAL_INSTANCES"
echo "repo_url=$REPO_URL" >> $GITHUB_OUTPUT
echo "eval_branch=$EVAL_BRANCH" >> $GITHUB_OUTPUT
echo "eval_instances=$EVAL_INSTANCES" >> $GITHUB_OUTPUT
- name: Trigger remote job
run: |
# Determine PR number for the remote evaluation system
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
PR_NUMBER="${{ github.event.pull_request.number }}"
else
# For non-PR triggers, use the master issue number as PR number
PR_NUMBER="${{ env.MASTER_EVAL_ISSUE_NUMBER }}"
fi
curl -X POST \
-H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
-d "{\"ref\": \"main\", \"inputs\": {\"github-repo\": \"${{ steps.eval_params.outputs.repo_url }}\", \"github-branch\": \"${{ steps.eval_params.outputs.eval_branch }}\", \"pr-number\": \"${PR_NUMBER}\", \"eval-instances\": \"${{ steps.eval_params.outputs.eval_instances }}\"}}" \
https://api.github.com/repos/All-Hands-AI/evaluation/actions/workflows/create-branch.yml/dispatches
# Send Slack message
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
TRIGGER_URL="https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
slack_text="PR $TRIGGER_URL has triggered evaluation on ${{ steps.eval_params.outputs.eval_instances }} instances..."
elif [[ "${{ github.event_name }}" == "release" ]]; then
TRIGGER_URL="https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"
slack_text="Release $TRIGGER_URL has triggered evaluation on ${{ steps.eval_params.outputs.eval_instances }} instances..."
else
TRIGGER_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
slack_text="Manual trigger (${{ github.event.inputs.reason || 'No reason provided' }}) has triggered evaluation on ${{ steps.eval_params.outputs.eval_instances }} instances for branch ${{ steps.eval_params.outputs.eval_branch }}..."
fi
curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$slack_text"'"}' \
https://hooks.slack.com/services/${{ secrets.SLACK_TOKEN }}
- name: Comment on issue/PR
uses: KeisukeYamashita/create-comment@v1
with:
# For PR triggers, comment on the PR. For other triggers, comment on the master issue
number: ${{ github.event_name == 'pull_request' && github.event.pull_request.number || env.MASTER_EVAL_ISSUE_NUMBER }}
unique: false
comment: |
**Evaluation Triggered**
**Trigger:** ${{ github.event_name == 'pull_request' && format('Pull Request #{0}', github.event.pull_request.number) || (github.event_name == 'release' && 'Release') || format('Manual Trigger: {0}', github.event.inputs.reason || 'No reason provided') }}
**Branch:** ${{ steps.eval_params.outputs.eval_branch }}
**Instances:** ${{ steps.eval_params.outputs.eval_instances }}
**Commit:** ${{ github.sha }}
Running evaluation on the specified branch. Once eval is done, the results will be posted here.

View File

@@ -9,14 +9,15 @@ on:
jobs:
stale:
runs-on: blacksmith-4vcpu-ubuntu-2204
if: github.repository == 'OpenHands/OpenHands'
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open for 40 days with no activity. Remove the stale label or leave a comment, otherwise it will be closed in 10 days.'
stale-pr-message: 'This PR is stale because it has been open for 40 days with no activity. Remove the stale label or leave a comment, otherwise it will be closed in 10 days.'
days-before-stale: 40
exempt-issue-labels: 'roadmap'
exempt-issue-labels: roadmap,backlog,app-team
close-issue-message: 'This issue was automatically closed due to 50 days of inactivity. We do this to help keep the issues somewhat manageable and focus on active issues.'
close-pr-message: 'This PR was closed because it had no activity for 50 days. If you feel this was closed in error, and you would like to continue the PR, please resubmit or let us know.'
days-before-close: 10
operations-per-run: 150
operations-per-run: 300

View File

@@ -1,156 +0,0 @@
# Workflow that validates the VSCode extension builds correctly
name: VSCode Extension CI
# * Always run on "main"
# * Run on PRs that have changes in the VSCode extension folder or this workflow
# * Run on tags that start with "ext-v"
on:
push:
branches:
- main
tags:
- 'ext-v*'
pull_request:
paths:
- 'openhands/integrations/vscode/**'
- 'build_vscode.py'
- '.github/workflows/vscode-extension-build.yml'
# If triggered by a PR, it will be in the same group. However, each commit on main will be in its own unique group
concurrency:
group: ${{ github.workflow }}-${{ (github.head_ref && github.ref) || github.run_id }}
cancel-in-progress: true
jobs:
# Validate VSCode extension builds correctly
validate-vscode-extension:
name: Validate VSCode Extension Build
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: '22'
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install VSCode extension dependencies
working-directory: ./openhands/integrations/vscode
run: npm ci
- name: Build VSCode extension via build_vscode.py
run: python build_vscode.py
env:
# Ensure we don't skip the build
SKIP_VSCODE_BUILD: ""
- name: Validate .vsix file
run: |
# Verify the .vsix was created and is valid
if [ -f "openhands/integrations/vscode/openhands-vscode-0.0.1.vsix" ]; then
echo "✅ VSCode extension built successfully"
ls -la openhands/integrations/vscode/openhands-vscode-0.0.1.vsix
# Basic validation that the .vsix is a valid zip file
echo "🔍 Validating .vsix structure..."
file openhands/integrations/vscode/openhands-vscode-0.0.1.vsix
unzip -t openhands/integrations/vscode/openhands-vscode-0.0.1.vsix
echo "✅ VSCode extension validation passed"
else
echo "❌ VSCode extension build failed - .vsix not found"
exit 1
fi
- name: Upload VSCode extension artifact
uses: actions/upload-artifact@v4
with:
name: vscode-extension
path: openhands/integrations/vscode/openhands-vscode-0.0.1.vsix
retention-days: 7
- name: Comment on PR with artifact link
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const path = require('path');
// Get file size for display
const vsixPath = 'openhands/integrations/vscode/openhands-vscode-0.0.1.vsix';
const stats = fs.statSync(vsixPath);
const fileSizeKB = Math.round(stats.size / 1024);
const comment = `## 🔧 VSCode Extension Built Successfully!
The VSCode extension has been built and is ready for testing.
**📦 Download**: [openhands-vscode-0.0.1.vsix](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) (${fileSizeKB} KB)
**🚀 To install**:
1. Download the artifact from the workflow run above
2. In VSCode: \`Ctrl+Shift+P\` → "Extensions: Install from VSIX..."
3. Select the downloaded \`.vsix\` file
**✅ Tested with**: Node.js 22
**🔍 Validation**: File structure and integrity verified
---
*Built from commit ${{ github.sha }}*`;
// Check if we already commented on this PR and delete it
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment =>
comment.user.login === 'github-actions[bot]' &&
comment.body.includes('VSCode Extension Built Successfully')
);
if (botComment) {
await github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
});
}
// Create a new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: comment
});
release:
name: Create GitHub Release
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: validate-vscode-extension
if: startsWith(github.ref, 'refs/tags/ext-v')
steps:
- name: Download .vsix artifact
uses: actions/download-artifact@v4
with:
name: vscode-extension
path: ./
- name: Create Release
uses: ncipollo/release-action@v1.16.0
with:
artifacts: "*.vsix"
token: ${{ secrets.GITHUB_TOKEN }}
draft: true
allowUpdates: true

View File

@@ -45,6 +45,7 @@ jobs:
"This issue has been labeled as **good first issue**, which means it's a great place to get started with the OpenHands project.\n\n" +
"If you're interested in working on it, feel free to! No need to ask for permission.\n\n" +
"Be sure to check out our [development setup guide](" + repoUrl + "/blob/main/Development.md) to get your environment set up, and follow our [contribution guidelines](" + repoUrl + "/blob/main/CONTRIBUTING.md) when you're ready to submit a fix.\n\n" +
"Feel free to join our developer community on [Slack](https://openhands.dev/joinslack). You can ask for [help](https://openhands-ai.slack.com/archives/C078L0FUGUX), [feedback](https://openhands-ai.slack.com/archives/C086ARSNMGA), and even ask for a [PR review](https://openhands-ai.slack.com/archives/C08D8FJ5771).\n\n" +
"🙌 Happy hacking! 🙌\n\n" +
"<!-- auto-comment:good-first-issue -->"
});

5
.gitignore vendored
View File

@@ -185,6 +185,9 @@ cython_debug/
.repomix
repomix-output.txt
# Emacs backup
*~
# evaluation
evaluation/evaluation_outputs
evaluation/outputs
@@ -257,3 +260,5 @@ containers/runtime/code
# test results
test-results
.sessions
.eval_sessions

View File

@@ -13,7 +13,6 @@ STAGED_FILES=$(git diff --cached --name-only)
# Check if any files match specific patterns
has_frontend_changes=false
has_backend_changes=false
has_vscode_changes=false
# Check each file individually to avoid issues with grep
for file in $STAGED_FILES; do
@@ -21,17 +20,12 @@ for file in $STAGED_FILES; do
has_frontend_changes=true
elif [[ $file == openhands/* || $file == evaluation/* || $file == tests/* ]]; then
has_backend_changes=true
# Check for VSCode extension changes (subset of backend changes)
if [[ $file == openhands/integrations/vscode/* ]]; then
has_vscode_changes=true
fi
fi
done
echo "Analyzing changes..."
echo "- Frontend changes: $has_frontend_changes"
echo "- Backend changes: $has_backend_changes"
echo "- VSCode extension changes: $has_vscode_changes"
# Run frontend linting if needed
if [ "$has_frontend_changes" = true ]; then
@@ -92,51 +86,6 @@ else
echo "Skipping backend checks (no backend changes detected)."
fi
# Run VSCode extension checks if needed
if [ "$has_vscode_changes" = true ]; then
# Check if we're in a CI environment
if [ -n "$CI" ]; then
echo "Skipping VSCode extension checks (CI environment detected)."
echo "WARNING: VSCode extension files have changed but checks are being skipped."
echo "Please run VSCode extension checks manually before submitting your PR."
else
echo "Running VSCode extension checks..."
if [ -d "openhands/integrations/vscode" ]; then
cd openhands/integrations/vscode || exit 1
echo "Running npm lint:fix..."
npm run lint:fix
if [ $? -ne 0 ]; then
echo "VSCode extension linting failed. Please fix the issues before committing."
EXIT_CODE=1
else
echo "VSCode extension linting passed!"
fi
echo "Running npm typecheck..."
npm run typecheck
if [ $? -ne 0 ]; then
echo "VSCode extension type checking failed. Please fix the issues before committing."
EXIT_CODE=1
else
echo "VSCode extension type checking passed!"
fi
echo "Running npm compile..."
npm run compile
if [ $? -ne 0 ]; then
echo "VSCode extension compilation failed. Please fix the issues before committing."
EXIT_CODE=1
else
echo "VSCode extension compilation passed!"
fi
cd ../../..
fi
fi
else
echo "Skipping VSCode extension checks (no VSCode extension changes detected)."
fi
# If no specific code changes detected, run basic checks
if [ "$has_frontend_changes" = false ] && [ "$has_backend_changes" = false ]; then

16
.vscode/settings.json vendored
View File

@@ -3,4 +3,20 @@
"files.eol": "\n",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"python.defaultInterpreterPath": "./.venv/bin/python",
"python.terminal.activateEnvironment": true,
"python.analysis.autoImportCompletions": true,
"python.analysis.autoSearchPaths": true,
"python.analysis.extraPaths": [
"./.venv/lib/python3.12/site-packages"
],
"python.analysis.packageIndexDepths": [
{
"name": "openhands",
"depth": 10,
"includeAllSymbols": true
}
],
"python.analysis.stubPath": "./.venv/lib/python3.12/site-packages",
}

View File

@@ -63,7 +63,7 @@ Frontend:
- We use TanStack Query (fka React Query) for data fetching and cache management
- Data Access Layer: API client methods are located in `frontend/src/api` and should never be called directly from UI components - they must always be wrapped with TanStack Query
- Custom hooks are located in `frontend/src/hooks/query/` and `frontend/src/hooks/mutation/`
- Query hooks should follow the pattern use[Resource] (e.g., `useConversationMicroagents`)
- Query hooks should follow the pattern use[Resource] (e.g., `useConversationSkills`)
- Mutation hooks should follow the pattern use[Action] (e.g., `useDeleteConversation`)
- Architecture rule: UI components → TanStack Query hooks → Data Access Layer (`frontend/src/api`) → API endpoints
@@ -83,12 +83,120 @@ VSCode Extension:
- Use `vscode.window.createOutputChannel()` for debug logging instead of `showErrorMessage()` popups
- Pre-commit process runs both frontend and backend checks when committing extension changes
## Enterprise Directory
The `enterprise/` directory contains additional functionality that extends the open-source OpenHands codebase. This includes:
- Authentication and user management (Keycloak integration)
- Database migrations (Alembic)
- Integration services (GitHub, GitLab, Jira, Linear, Slack)
- Billing and subscription management (Stripe)
- Telemetry and analytics (PostHog, custom metrics framework)
### Enterprise Development Setup
**Prerequisites:**
- Python 3.12
- Poetry (for dependency management)
- Node.js 22.x (for frontend)
- Docker (optional)
**Setup Steps:**
1. First, build the main OpenHands project: `make build`
2. Then install enterprise dependencies: `cd enterprise && poetry install --with dev,test` (This can take a very long time. Be patient.)
3. Set up enterprise pre-commit hooks: `poetry run pre-commit install --config ./dev_config/python/.pre-commit-config.yaml`
**Running Enterprise Tests:**
```bash
# Enterprise unit tests (full suite)
PYTHONPATH=".:$PYTHONPATH" poetry run --project=enterprise pytest --forked -n auto -s -p no:ddtrace -p no:ddtrace.pytest_bdd -p no:ddtrace.pytest_benchmark ./enterprise/tests/unit --cov=enterprise --cov-branch
# Test specific modules (faster for development)
cd enterprise
PYTHONPATH=".:$PYTHONPATH" poetry run pytest tests/unit/telemetry/ --confcutdir=tests/unit/telemetry
# Enterprise linting (IMPORTANT: use --show-diff-on-failure to match GitHub CI)
poetry run pre-commit run --all-files --show-diff-on-failure --config ./dev_config/python/.pre-commit-config.yaml
```
**Running Enterprise Server:**
```bash
cd enterprise
make start-backend # Development mode with hot reload
# or
make run # Full application (backend + frontend)
```
**Key Configuration Files:**
- `enterprise/pyproject.toml` - Enterprise-specific dependencies
- `enterprise/Makefile` - Enterprise build and run commands
- `enterprise/dev_config/python/` - Linting and type checking configuration
- `enterprise/migrations/` - Database migration files
**Database Migrations:**
Enterprise uses Alembic for database migrations. When making schema changes:
1. Create migration files in `enterprise/migrations/versions/`
2. Test migrations thoroughly
3. The CI will check for migration conflicts on PRs
**Integration Development:**
The enterprise codebase includes integrations for:
- **GitHub** - PR management, webhooks, app installations
- **GitLab** - Similar to GitHub but for GitLab instances
- **Jira** - Issue tracking and project management
- **Linear** - Modern issue tracking
- **Slack** - Team communication and notifications
Each integration follows a consistent pattern with service classes, storage models, and API endpoints.
**Important Notes:**
- Enterprise code is licensed under Polyform Free Trial License (30-day limit)
- The enterprise server extends the OpenHands server through dynamic imports
- Database changes require careful migration planning in `enterprise/migrations/`
- Always test changes in both OpenHands and enterprise contexts
- Use the enterprise-specific Makefile commands for development
**Enterprise Testing Best Practices:**
**Database Testing:**
- Use SQLite in-memory databases (`sqlite:///:memory:`) for unit tests instead of real PostgreSQL
- Create module-specific `conftest.py` files with database fixtures
- Mock external database connections in unit tests to avoid dependency on running services
- Use real database connections only for integration tests
**Import Patterns:**
- Use relative imports without `enterprise.` prefix in enterprise code
- Example: `from storage.database import a_session_maker` not `from enterprise.storage.database import a_session_maker`
- This ensures code works in both OpenHands and enterprise contexts
**Test Structure:**
- Place tests in `enterprise/tests/unit/` following the same structure as the source code
- Use `--confcutdir=tests/unit/[module]` when testing specific modules
- Create comprehensive fixtures for complex objects (databases, external services)
- Write platform-agnostic tests (avoid hardcoded OS-specific assertions)
**Mocking Strategy:**
- Use `AsyncMock` for async operations and `MagicMock` for complex objects
- Mock all external dependencies (databases, APIs, file systems) in unit tests
- Use `patch` with correct import paths (e.g., `telemetry.registry.logger` not `enterprise.telemetry.registry.logger`)
- Test both success and failure scenarios with proper error handling
**Coverage Goals:**
- Aim for 90%+ test coverage on new enterprise modules
- Focus on critical business logic and error handling paths
- Use `--cov-report=term-missing` to identify uncovered lines
**Troubleshooting:**
- If tests fail, ensure all dependencies are installed: `poetry install --with dev,test`
- For database issues, check migration status and run migrations if needed
- For frontend issues, ensure the main OpenHands frontend is built: `make build`
- Check logs in the `logs/` directory for runtime issues
- If tests fail with import errors, verify `PYTHONPATH=".:$PYTHONPATH"` is set
- **If GitHub CI fails but local linting passes**: Always use `--show-diff-on-failure` flag to match CI behavior exactly
## Template for Github Pull Request
If you are starting a pull request (PR), please follow the template in `.github/pull_request_template.md`.
If you need to add labels when opening a PR, check the existing labels defined on that repository and select from existing ones. Do not invent your own labels.
## Implementation Details
These details may or may not be useful for your current task.

1
CNAME Normal file
View File

@@ -0,0 +1 @@
docs.all-hands.dev

View File

@@ -61,7 +61,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
contact@all-hands.dev.
contact@openhands.dev.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
@@ -113,19 +113,24 @@ individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
### Slack and Discord Etiquettes
### Slack Etiquettes
These Slack and Discord etiquette guidelines are designed to foster an inclusive, respectful, and productive environment for all community members. By following these best practices, we ensure effective communication and collaboration while minimizing disruptions. Lets work together to build a supportive and welcoming community!
These Slack etiquette guidelines are designed to foster an inclusive, respectful, and productive environment for all
community members. By following these best practices, we ensure effective communication and collaboration while
minimizing disruptions. Lets work together to build a supportive and welcoming community!
- Communicate respectfully and professionally, avoiding sarcasm or harsh language, and remember that tone can be difficult to interpret in text.
- Use threads for specific discussions to keep channels organized and easier to follow.
- Tag others only when their input is critical or urgent, and use @here, @channel or @everyone sparingly to minimize disruptions.
- Be patient, as open-source contributors and maintainers often have other commitments and may need time to respond.
- Post questions or discussions in the most relevant channel (e.g., for [slack - #general](https://openhands-ai.slack.com/archives/C06P5NCGSFP) for general topics, [slack - #questions](https://openhands-ai.slack.com/archives/C06U8UTKSAD) for queries/questions, [discord - #general](https://discord.com/channels/1222935860639563850/1222935861386018885)).
- Post questions or discussions in the most relevant channel (e.g., for [slack - #general](https://openhands-ai.slack.com/archives/C06P5NCGSFP) for general topics, [slack - #questions](https://openhands-ai.slack.com/archives/C06U8UTKSAD) for queries/questions.
- When asking for help or raising issues, include necessary details like links, screenshots, or clear explanations to provide context.
- Keep discussions in public channels whenever possible to allow others to benefit from the conversation, unless the matter is sensitive or private.
- Always adhere to [our standards](https://github.com/All-Hands-AI/OpenHands/blob/main/CODE_OF_CONDUCT.md#our-standards) to ensure a welcoming and collaborative environment.
- If you choose to mute a channel, consider setting up alerts for topics that still interest you to stay engaged. For Slack, Go to Settings → Notifications → My Keywords to add specific keywords that will notify you when mentioned. For example, if you're here for discussions about LLMs, mute the channel if its too busy, but set notifications to alert you only when “LLMs” appears in messages. Also for Discord, go to the channel notifications and choose the option that best describes your need.
- Always adhere to [our standards](https://github.com/OpenHands/OpenHands/blob/main/CODE_OF_CONDUCT.md#our-standards) to ensure a welcoming and collaborative environment.
- If you choose to mute a channel, consider setting up alerts for topics that still interest you to stay engaged.
For Slack, Go to Settings → Notifications → My Keywords to add specific keywords that will notify you when mentioned.
For example, if you're here for discussions about LLMs, mute the channel if its too busy, but set notifications to
alert you only when “LLMs” appears in messages.
## Attribution

View File

@@ -1,43 +1,58 @@
# 🙌 The OpenHands Community
# The OpenHands Community
The OpenHands community is built around the belief that (1) AI and AI agents are going to fundamentally change the way
we build software, and (2) if this is true, we should do everything we can to make sure that the benefits provided by
such powerful technology are accessible to everyone.
OpenHands is a community of engineers, academics, and enthusiasts reimagining software development for an AI-powered
world.
If this resonates with you, we'd love to have you join us in our quest!
## Mission
## 🤝 How to Join
Its very clear that AI is changing software development. We want the developer community to drive that change
organically, through open source.
Check out our [How to Join the Community section.](https://github.com/All-Hands-AI/OpenHands?tab=readme-ov-file#-how-to-join-the-community)
So were not just building friendly interfaces for AI-driven development. Were publishing _building blocks_ that
empower developers to create new experiences, tailored to your own habits, needs, and imagination.
## 💪 Becoming a Contributor
## Ethos
We welcome contributions from everyone! Whether you're a developer, a researcher, or simply enthusiastic about advancing
the field of software engineering with AI, there are many ways to get involved:
We have two core values: **high openness** and **high agency**. While we dont expect everyone in the community to
embody these values, we want to establish them as norms.
- **Code Contributions:** Help us develop new core functionality, improve our agents, improve the frontend and other
interfaces, or anything else that would help make OpenHands better.
- **Research and Evaluation:** Contribute to our understanding of LLMs in software engineering, participate in
evaluating the models, or suggest improvements.
- **Feedback and Testing:** Use the OpenHands toolset, report bugs, suggest features, or provide feedback on usability.
### High Openness
For details, please check [CONTRIBUTING.md](./CONTRIBUTING.md).
We welcome anyone and everyone into our community by default. You dont have to be a software developer to help us
build. You dont have to be pro-AI to help us learn.
## Code of Conduct
Our plans, our work, our successes, and our failures are all public record. We want the world to see not just the
fruits of our work, but the whole process of growing it.
We have a [Code of Conduct](./CODE_OF_CONDUCT.md) that we expect all contributors to adhere to.
Long story short, we are aiming for an open, welcoming, diverse, inclusive, and healthy community.
All contributors are expected to contribute to building this sort of community.
We welcome thoughtful criticism, whether its a comment on a PR or feedback on the community as a whole.
## 🛠️ Becoming a Maintainer
### High Agency
For contributors who have made significant and sustained contributions to the project, there is a possibility of joining
the maintainer team. The process for this is as follows:
Everyone should feel empowered to contribute to OpenHands. Whether its by making a PR, hosting an event, sharing
feedback, or just asking a question, dont hold back!
1. Any contributor who has made sustained and high-quality contributions to the codebase can be nominated by any
maintainer. If you feel that you may qualify you can reach out to any of the maintainers that have reviewed your PRs and ask if you can be nominated.
2. Once a maintainer nominates a new maintainer, there will be a discussion period among the maintainers for at least 3 days.
3. If no concerns are raised the nomination will be accepted by acclamation, and if concerns are raised there will be a discussion and possible vote.
OpenHands gives everyone the building blocks to create state-of-the-art developer experiences. We experiment constantly
and love building new things.
Note that just making many PRs does not immediately imply that you will become a maintainer. We will be looking
at sustained high-quality contributions over a period of time, as well as good teamwork and adherence to our [Code of Conduct](./CODE_OF_CONDUCT.md).
Coding, development practices, and communities are changing rapidly. We wont hesitate to change direction and make big bets.
## Relationship to All Hands
OpenHands is supported by the for-profit organization [All Hands AI, Inc](https://www.openhands.dev/).
All Hands was founded by three of the first major contributors to OpenHands:
- Xingyao Wang, a UIUC PhD candidate who got OpenHands to the top of the SWE-bench leaderboards
- Graham Neubig, a CMU Professor who rallied the academic community around OpenHands
- Robert Brennan, a software engineer who architected the user-facing features of OpenHands
All Hands is an important part of the OpenHands ecosystem. Weve raised over $20M--mainly to hire developers and
researchers who can work on OpenHands full-time, and to provide them with expensive infrastructure. ([Join us!](https://allhandsai.applytojob.com/apply/))
But we see OpenHands as much larger, and ultimately more important, than All Hands. When our financial responsibility
to investors is at odds with our social responsibility to the community—as it inevitably will be, from time to time—we
promise to navigate that conflict thoughtfully and transparently.
At some point, we may transfer custody of OpenHands to an open source foundation. But for now,
the [Benevolent Dictator approach](http://www.catb.org/~esr/writings/cathedral-bazaar/homesteading/ar01s16.html) helps us move forward with speed and intention. If we ever forget the
“benevolent” part, please: fork us.

View File

@@ -6,36 +6,41 @@ Thanks for your interest in contributing to OpenHands! We welcome and appreciate
To understand the codebase, please refer to the README in each module:
- [frontend](./frontend/README.md)
- [evaluation](./evaluation/README.md)
- [openhands](./openhands/README.md)
- [agenthub](./openhands/agenthub/README.md)
- [server](./openhands/server/README.md)
For benchmarks and evaluation, see the [OpenHands/benchmarks](https://github.com/OpenHands/benchmarks) repository.
## Setting up Your Development Environment
We have a separate doc [Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md) that tells you how to set up a development workflow.
We have a separate doc [Development.md](https://github.com/OpenHands/OpenHands/blob/main/Development.md) that tells
you how to set up a development workflow.
## How Can I Contribute?
There are many ways that you can contribute:
1. **Download and use** OpenHands, and send [issues](https://github.com/All-Hands-AI/OpenHands/issues) when you encounter something that isn't working or a feature that you'd like to see.
2. **Send feedback** after each session by [clicking the thumbs-up thumbs-down buttons](https://docs.all-hands.dev/usage/feedback), so we can see where things are working and failing, and also build an open dataset for training code agents.
3. **Improve the Codebase** by sending [PRs](#sending-pull-requests-to-openhands) (see details below). In particular, we have some [good first issues](https://github.com/All-Hands-AI/OpenHands/labels/good%20first%20issue) that may be ones to start on.
1. **Download and use** OpenHands, and send [issues](https://github.com/OpenHands/OpenHands/issues) when you encounter something that isn't working or a feature that you'd like to see.
2. **Send feedback** after each session by [clicking the thumbs-up thumbs-down buttons](https://docs.openhands.dev/usage/feedback), so we can see where things are working and failing, and also build an open dataset for training code agents.
3. **Improve the Codebase** by sending [PRs](#sending-pull-requests-to-openhands) (see details below). In particular, we have some [good first issues](https://github.com/OpenHands/OpenHands/labels/good%20first%20issue) that may be ones to start on.
## What Can I Build?
Here are a few ways you can help improve the codebase.
#### UI/UX
We're always looking to improve the look and feel of the application. If you've got a small fix
for something that's bugging you, feel free to open up a PR that changes the [`./frontend`](./frontend) directory.
If you're looking to make a bigger change, add a new UI element, or significantly alter the style
of the application, please open an issue first, or better, join the #eng-ui-ux channel in our Slack
of the application, please open an issue first, or better, join the #dev-ui-ux channel in our Slack
to gather consensus from our design team first.
#### Improving the agent
Our main agent is the CodeAct agent. You can [see its prompts here](https://github.com/All-Hands-AI/OpenHands/tree/main/openhands/agenthub/codeact_agent).
Our main agent is the CodeAct agent. You can [see its prompts here](https://github.com/OpenHands/OpenHands/tree/main/openhands/agenthub/codeact_agent).
Changes to these prompts, and to the underlying behavior in Python, can have a huge impact on user experience.
You can try modifying the prompts to see how they change the behavior of the agent as you use the app
@@ -46,19 +51,24 @@ We use the [SWE-bench](https://www.swebench.com/) benchmark to test our agent. Y
channel in Slack to learn more.
#### Adding a new agent
You may want to experiment with building new types of agents. You can add an agent to [`openhands/agenthub`](./openhands/agenthub)
to help expand the capabilities of OpenHands.
#### Adding a new runtime
The agent needs a place to run code and commands. When you run OpenHands on your laptop, it uses a Docker container
to do this by default. But there are other ways of creating a sandbox for the agent.
If you work for a company that provides a cloud-based runtime, you could help us add support for that runtime
by implementing the [interface specified here](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/base.py).
by implementing the [interface specified here](https://github.com/OpenHands/OpenHands/blob/main/openhands/runtime/base.py).
#### Testing
When you write code, it is also good to write tests. Please navigate to the [`./tests`](./tests) folder to see existing test suites.
At the moment, we have two kinds of tests: [`unit`](./tests/unit) and [`integration`](./evaluation/integration_tests). Please refer to the README for each test suite. These tests also run on GitHub's continuous integration to ensure quality of the project.
When you write code, it is also good to write tests. Please navigate to the [`./tests`](./tests) folder to see existing
test suites. At the moment, we have these kinds of tests: [`unit`](./tests/unit), [`runtime`](./tests/runtime), and [`end-to-end (e2e)`](./tests/e2e).
Please refer to the README for each test suite. These tests also run on GitHub's continuous integration to ensure
quality of the project.
## Sending Pull Requests to OpenHands
@@ -66,7 +76,8 @@ You'll need to fork our repository to send us a Pull Request. You can learn more
about how to fork a GitHub repo and open a PR with your changes in [this article](https://medium.com/swlh/forks-and-pull-requests-how-to-contribute-to-github-repos-8843fac34ce8).
### Pull Request title
As described [here](https://github.com/commitizen/conventional-commit-types/blob/master/index.json), a valid PR title should begin with one of the following prefixes:
As described [here](https://github.com/commitizen/conventional-commit-types/blob/master/index.json), ideally a valid PR title should begin with one of the following prefixes:
- `feat`: A new feature
- `fix`: A bug fix
@@ -84,9 +95,10 @@ For example, a PR title could be:
- `refactor: modify package path`
- `feat(frontend): xxxx`, where `(frontend)` means that this PR mainly focuses on the frontend component.
You may also check out previous PRs in the [PR list](https://github.com/All-Hands-AI/OpenHands/pulls).
You may also check out previous PRs in the [PR list](https://github.com/OpenHands/OpenHands/pulls).
### Pull Request description
- If your PR is small (such as a typo fix), you can go brief.
- If it contains a lot of changes, it's better to write more details.
@@ -97,7 +109,9 @@ please include a short message that we can add to our changelog.
### Opening Issues
If you notice any bugs or have any feature requests please open them via the [issues page](https://github.com/All-Hands-AI/OpenHands/issues). We will triage based on how critical the bug is or how potentially useful the improvement is, discuss, and implement the ones that the community has interest/effort for.
If you notice any bugs or have any feature requests please open them via the [issues page](https://github.com/OpenHands/OpenHands/issues). We will triage
based on how critical the bug is or how potentially useful the improvement is, discuss, and implement the ones that
the community has interest/effort for.
Further, if you see an issue you like, please leave a "thumbs-up" or a comment, which will help us prioritize.
@@ -108,11 +122,13 @@ We're generally happy to consider all pull requests with the evaluation process
#### For Small Improvements
Small improvements with few downsides are typically reviewed and approved quickly.
One thing to check when making changes is to ensure that all continuous integration tests pass, which you can check before getting a review.
One thing to check when making changes is to ensure that all continuous integration tests pass, which you can check
before getting a review.
#### For Core Agent Changes
We need to be more careful with changes to the core agent, as it is imperative to maintain high quality. These PRs are evaluated based on three key metrics:
We need to be more careful with changes to the core agent, as it is imperative to maintain high quality. These PRs are
evaluated based on three key metrics:
1. **Accuracy**
2. **Efficiency**

View File

@@ -2,11 +2,13 @@
## Contributors
We would like to thank all the [contributors](https://github.com/All-Hands-AI/OpenHands/graphs/contributors) who have helped make OpenHands possible. We greatly appreciate your dedication and hard work.
We would like to thank all the [contributors](https://github.com/OpenHands/OpenHands/graphs/contributors) who have
helped make OpenHands possible. We greatly appreciate your dedication and hard work.
## Open Source Projects
OpenHands includes and adapts the following open source projects. We are grateful for their contributions to the open source community:
OpenHands includes and adapts the following open source projects. We are grateful for their contributions to the
open source community:
#### [SWE Agent](https://github.com/princeton-nlp/swe-agent)
- License: MIT License
@@ -14,14 +16,14 @@ OpenHands includes and adapts the following open source projects. We are gratefu
#### [Aider](https://github.com/paul-gauthier/aider)
- License: Apache License 2.0
- Description: AI pair programming tool. OpenHands has adapted and integrated its linter module for code-related tasks in [`agentskills utilities`](https://github.com/All-Hands-AI/OpenHands/tree/main/openhands/runtime/plugins/agent_skills/utils/aider)
- Description: AI pair programming tool. OpenHands has adapted and integrated its linter module for code-related tasks in [`agentskills utilities`](https://github.com/OpenHands/OpenHands/tree/main/openhands/runtime/plugins/agent_skills/utils/aider)
#### [BrowserGym](https://github.com/ServiceNow/BrowserGym)
- License: Apache License 2.0
- Description: Adapted in implementing the browsing agent
### Reference Implementations for Evaluation Benchmarks
OpenHands integrates code of the reference implementations for the following agent evaluation benchmarks:
#### [HumanEval](https://github.com/openai/human-eval)
@@ -52,28 +54,44 @@ OpenHands integrates code of the reference implementations for the following age
#### [ProntoQA](https://github.com/asaparov/prontoqa)
- License: Apache License 2.0
## Open Source licenses
### MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
### BSD 3-Clause License
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
### Apache License 2.0
@@ -268,8 +286,6 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Copyright [yyyy] [name of copyright owner]
### Non-Open Source Reference Implementations:
#### [MultiPL-E](https://github.com/nuprl/MultiPL-E)

View File

@@ -2,7 +2,7 @@
This guide is for people working on OpenHands and editing the source code.
If you wish to contribute your changes, check out the
[CONTRIBUTING.md](https://github.com/All-Hands-AI/OpenHands/blob/main/CONTRIBUTING.md)
[CONTRIBUTING.md](https://github.com/OpenHands/OpenHands/blob/main/CONTRIBUTING.md)
on how to clone and setup the project initially before moving on. Otherwise,
you can clone the OpenHands project directly.
@@ -76,7 +76,7 @@ variables in your terminal. The final configurations are set from highest to low
Environment variables > config.toml variables > default variables
**Note on Alternative Models:**
See [our documentation](https://docs.all-hands.dev/usage/llms) for recommended models.
See [our documentation](https://docs.openhands.dev/usage/llms) for recommended models.
### 4. Running the application
@@ -91,14 +91,14 @@ make run
#### Option B: Individual Server Startup
- **Start the Backend Server:** If you prefer, you can start the backend server independently to focus on
backend-related tasks or configurations.
backend-related tasks or configurations.
```bash
make start-backend
```
- **Start the Frontend Server:** Similarly, you can start the frontend server on its own to work on frontend-related
components or interface enhancements.
components or interface enhancements.
```bash
make start-frontend
```
@@ -110,6 +110,7 @@ You can use OpenHands to develop and improve OpenHands itself! This is a powerfu
#### Quick Start
1. **Build and run OpenHands:**
```bash
export INSTALL_DOCKER=0
export RUNTIME=local
@@ -117,6 +118,7 @@ You can use OpenHands to develop and improve OpenHands itself! This is a powerfu
```
2. **Access the interface:**
- Local development: http://localhost:3001
- Remote/cloud environments: Use the appropriate external URL
@@ -159,7 +161,7 @@ poetry run pytest ./tests/unit/test_*.py
To reduce build time (e.g., if no changes were made to the client-runtime component), you can use an existing Docker
container image by setting the SANDBOX_RUNTIME_CONTAINER_IMAGE environment variable to the desired Docker image.
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.54-nikolaik`
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/openhands/runtime:1.2-nikolaik`
## Develop inside Docker container
@@ -193,12 +195,12 @@ Here's a guide to the important documentation files in the repository:
- [/README.md](./README.md): Main project overview, features, and basic setup instructions
- [/Development.md](./Development.md) (this file): Comprehensive guide for developers working on OpenHands
- [/CONTRIBUTING.md](./CONTRIBUTING.md): Guidelines for contributing to the project, including code style and PR process
- [/docs/DOC_STYLE_GUIDE.md](./docs/DOC_STYLE_GUIDE.md): Standards for writing and maintaining project documentation
- [DOC_STYLE_GUIDE.md](https://github.com/OpenHands/docs/blob/main/openhands/DOC_STYLE_GUIDE.md): Standards for writing and maintaining project documentation
- [/openhands/README.md](./openhands/README.md): Details about the backend Python implementation
- [/frontend/README.md](./frontend/README.md): Frontend React application setup and development guide
- [/containers/README.md](./containers/README.md): Information about Docker containers and deployment
- [/tests/unit/README.md](./tests/unit/README.md): Guide to writing and running unit tests
- [/evaluation/README.md](./evaluation/README.md): Documentation for the evaluation framework and benchmarks
- [/microagents/README.md](./microagents/README.md): Information about the microagents architecture and implementation
- [OpenHands/benchmarks](https://github.com/OpenHands/benchmarks): Documentation for the evaluation framework and benchmarks
- [/skills/README.md](./skills/README.md): Information about the skills architecture and implementation
- [/openhands/server/README.md](./openhands/server/README.md): Server implementation details and API documentation
- [/openhands/runtime/README.md](./openhands/runtime/README.md): Documentation for the runtime environment and execution model

View File

@@ -3,14 +3,14 @@ These are the procedures and guidelines on how issues are triaged in this repo b
## General
* All issues must be tagged with **enhancement**, **bug** or **troubleshooting/help**.
* Issues may be tagged with what it relates to (**agent quality**, **resolver**, **CLI**, etc.).
* Issues may be tagged with what it relates to (**llm**, **app tab**, **UI/UX**, etc.).
## Severity
* **High**: High visibility issues or affecting many users.
* **Critical**: Affecting all users or potential security issues.
## Difficulty
* Issues with low implementation difficulty may be tagged with **good first issue**.
* Issues good for newcomers may be tagged with **good first issue**.
## Not Enough Information
* User is asked to provide more information (logs, how to reproduce, etc.) when the issue is not clear.
@@ -22,6 +22,6 @@ the issue may be closed as **not planned** (Usually after a week).
* Issues may be broken down into multiple issues if required.
## Stale and Auto Closures
* In order to keep a maintainable backlog, issues that have no activity within 30 days are automatically marked as **Stale**.
* If issues marked as **Stale** continue to have no activity for 7 more days, they will automatically be closed as not planned.
* In order to keep a maintainable backlog, issues that have no activity within 40 days are automatically marked as **Stale**.
* If issues marked as **Stale** continue to have no activity for 10 more days, they will automatically be closed as not planned.
* Issues may be reopened by maintainers if deemed important.

View File

@@ -1,7 +1,12 @@
The MIT License (MIT)
Portions of this software are licensed as follows:
* All content that resides under the enterprise/ directory is licensed under the license defined in "enterprise/LICENSE".
* Content outside of the above mentioned directories or restrictions above is available under the MIT license as defined below.
=====================
Copyright © 2023
The MIT License (MIT)
Copyright © 2025
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation

201
README.md
View File

@@ -1,183 +1,86 @@
<a name="readme-top"></a>
<div align="center">
<img src="./docs/static/img/logo.png" alt="Logo" width="200">
<h1 align="center">OpenHands: Code Less, Make More</h1>
<img src="https://raw.githubusercontent.com/OpenHands/docs/main/openhands/static/img/logo.png" alt="Logo" width="200">
<h1 align="center" style="border-bottom: none">OpenHands: AI-Driven Development</h1>
</div>
<div align="center">
<a href="https://github.com/All-Hands-AI/OpenHands/graphs/contributors"><img src="https://img.shields.io/github/contributors/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Contributors"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/stargazers"><img src="https://img.shields.io/github/stars/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Stargazers"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE"><img src="https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="MIT License"></a>
<a href="https://github.com/OpenHands/OpenHands/blob/main/LICENSE"><img src="https://img.shields.io/badge/LICENSE-MIT-20B2AA?style=for-the-badge" alt="MIT License"></a>
<a href="https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=811504672#gid=811504672"><img src="https://img.shields.io/badge/SWEBench-77.6-00cc00?logoColor=FFE165&style=for-the-badge" alt="Benchmark Score"></a>
<br/>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA"><img src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge" alt="Join our Slack community"></a>
<a href="https://discord.gg/ESHStjSjD4"><img src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge" alt="Join our Discord community"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/CREDITS.md"><img src="https://img.shields.io/badge/Project-Credits-blue?style=for-the-badge&color=FFE165&logo=github&logoColor=white" alt="Credits"></a>
<br/>
<a href="https://docs.all-hands.dev/usage/getting-started"><img src="https://img.shields.io/badge/Documentation-000?logo=googledocs&logoColor=FFE165&style=for-the-badge" alt="Check out the documentation"></a>
<a href="https://arxiv.org/abs/2407.16741"><img src="https://img.shields.io/badge/Paper%20on%20Arxiv-000?logoColor=FFE165&logo=arxiv&style=for-the-badge" alt="Paper on Arxiv"></a>
<a href="https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=0#gid=0"><img src="https://img.shields.io/badge/Benchmark%20score-000?logoColor=FFE165&logo=huggingface&style=for-the-badge" alt="Evaluation Benchmark Score"></a>
<a href="https://docs.openhands.dev/sdk"><img src="https://img.shields.io/badge/Documentation-000?logo=googledocs&logoColor=FFE165&style=for-the-badge" alt="Check out the documentation"></a>
<a href="https://arxiv.org/abs/2511.03690"><img src="https://img.shields.io/badge/Paper-000?logoColor=FFE165&logo=arxiv&style=for-the-badge" alt="Tech Report"></a>
<!-- Keep these links. Translations will automatically update with the README. -->
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=de">Deutsch</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=es">Español</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=fr">français</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=ja">日本語</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=ko">한국어</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=pt">Português</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=ru">Русский</a> |
<a href="https://www.readme-i18n.com/All-Hands-AI/OpenHands?lang=zh">中文</a>
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=de">Deutsch</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=es">Español</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=fr">français</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=ja">日本語</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=ko">한국어</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=pt">Português</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=ru">Русский</a> |
<a href="https://www.readme-i18n.com/OpenHands/OpenHands?lang=zh">中文</a>
<hr>
</div>
Welcome to OpenHands (formerly OpenDevin), a platform for software development agents powered by AI.
<hr>
OpenHands agents can do anything a human developer can: modify code, run commands, browse the web,
call APIs, and yes—even copy code snippets from StackOverflow.
🙌 Welcome to OpenHands, a [community](COMMUNITY.md) focused on AI-driven development. Wed love for you to [join us on Slack](https://dub.sh/openhands).
Learn more at [docs.all-hands.dev](https://docs.all-hands.dev), or [sign up for OpenHands Cloud](https://app.all-hands.dev) to get started.
There are a few ways to work with OpenHands:
> [!IMPORTANT]
> Using OpenHands for work? We'd love to chat! Fill out
> [this short form](https://docs.google.com/forms/d/e/1FAIpQLSet3VbGaz8z32gW9Wm-Grl4jpt5WgMXPgJ4EDPVmCETCBpJtQ/viewform)
> to join our Design Partner program, where you'll get early access to commercial features and the opportunity to provide input on our product roadmap.
### OpenHands Software Agent SDK
The SDK is a composable Python library that contains all of our agentic tech. It's the engine that powers everything else below.
![App screenshot](./docs/static/img/screenshot.png)
Define agents in code, then run them locally, or scale to 1000s of agents in the cloud.
## ☁️ OpenHands Cloud
The easiest way to get started with OpenHands is on [OpenHands Cloud](https://app.all-hands.dev),
which comes with $20 in free credits for new users.
[Check out the docs](https://docs.openhands.dev/sdk) or [view the source](https://github.com/OpenHands/software-agent-sdk/)
## 💻 Running OpenHands Locally
### OpenHands CLI
The CLI is the easiest way to start using OpenHands. The experience will be familiar to anyone who has worked
with e.g. Claude Code or Codex. You can power it with Claude, GPT, or any other LLM.
### Option 1: CLI Launcher (Recommended)
[Check out the docs](https://docs.openhands.dev/openhands/usage/run-openhands/cli-mode) or [view the source](https://github.com/OpenHands/OpenHands-CLI)
The easiest way to run OpenHands locally is using the CLI launcher with [uv](https://docs.astral.sh/uv/). This provides better isolation from your current project's virtual environment and is required for OpenHands' default MCP servers.
### OpenHands Local GUI
Use the Local GUI for running agents on your laptop. It comes with a REST API and a single-page React application.
The experience will be familiar to anyone who has used Devin or Jules.
**Install uv** (if you haven't already):
[Check out the docs](https://docs.openhands.dev/openhands/usage/run-openhands/local-setup) or view the source in this repo.
See the [uv installation guide](https://docs.astral.sh/uv/getting-started/installation/) for the latest installation instructions for your platform.
### OpenHands Cloud
This is a deployment of OpenHands GUI, running on hosted infrastructure.
**Launch OpenHands**:
```bash
# Launch the GUI server
uvx --python 3.12 --from openhands-ai openhands serve
You can try it for free using the Minimax model by [signing in with your GitHub or GitLab account](https://app.all-hands.dev).
# Or launch the CLI
uvx --python 3.12 --from openhands-ai openhands
```
OpenHands Cloud comes with source-available features and integrations:
- Integrations with Slack, Jira, and Linear
- Multi-user support
- RBAC and permissions
- Collaboration features (e.g., conversation sharing)
You'll find OpenHands running at [http://localhost:3000](http://localhost:3000) (for GUI mode)!
### OpenHands Enterprise
Large enterprises can work with us to self-host OpenHands Cloud in their own VPC, via Kubernetes.
OpenHands Enterprise can also work with the CLI and SDK above.
### Option 2: Docker
OpenHands Enterprise is source-available--you can see all the source code here in the enterprise/ directory,
but you'll need to purchase a license if you want to run it for more than one month.
<details>
<summary>Click to expand Docker command</summary>
Enterprise contracts also come with extended support and access to our research team.
You can also run OpenHands directly with Docker:
Learn more at [openhands.dev/enterprise](https://openhands.dev/enterprise)
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik
### Everything Else
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/.openhands \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.54
```
Check out our [Product Roadmap](https://github.com/orgs/openhands/projects/1), and feel free to
[open up an issue](https://github.com/OpenHands/OpenHands/issues) if there's something you'd like to see!
</details>
You might also be interested in our [evaluation infrastructure](https://github.com/OpenHands/benchmarks), our [chrome extension](https://github.com/OpenHands/openhands-chrome-extension/), or our [Theory-of-Mind module](https://github.com/OpenHands/ToM-SWE).
> **Note**: If you used OpenHands before version 0.44, you may want to run `mv ~/.openhands-state ~/.openhands` to migrate your conversation history to the new location.
All our work is available under the MIT license, except for the `enterprise/` directory in this repository (see the [enterprise license](enterprise/LICENSE) for details).
The core `openhands` and `agent-server` Docker images are fully MIT-licensed as well.
> [!WARNING]
> On a public network? See our [Hardened Docker Installation Guide](https://docs.all-hands.dev/usage/runtimes/docker#hardened-docker-installation)
> to secure your deployment by restricting network binding and implementing additional security measures.
### Getting Started
When you open the application, you'll be asked to choose an LLM provider and add an API key.
[Anthropic's Claude Sonnet 4](https://www.anthropic.com/api) (`anthropic/claude-sonnet-4-20250514`)
works best, but you have [many options](https://docs.all-hands.dev/usage/llms).
See the [Running OpenHands](https://docs.all-hands.dev/usage/installation) guide for
system requirements and more information.
## 💡 Other ways to run OpenHands
> [!WARNING]
> OpenHands is meant to be run by a single user on their local workstation.
> It is not appropriate for multi-tenant deployments where multiple users share the same instance. There is no built-in authentication, isolation, or scalability.
>
> If you're interested in running OpenHands in a multi-tenant environment, check out the source-available, commercially-licensed
> [OpenHands Cloud Helm Chart](https://github.com/all-Hands-AI/OpenHands-cloud)
You can [connect OpenHands to your local filesystem](https://docs.all-hands.dev/usage/runtimes/docker#connecting-to-your-filesystem),
interact with it via a [friendly CLI](https://docs.all-hands.dev/usage/how-to/cli-mode),
run OpenHands in a scriptable [headless mode](https://docs.all-hands.dev/usage/how-to/headless-mode),
or run it on tagged issues with [a github action](https://docs.all-hands.dev/usage/how-to/github-action).
Visit [Running OpenHands](https://docs.all-hands.dev/usage/installation) for more information and setup instructions.
If you want to modify the OpenHands source code, check out [Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md).
Having issues? The [Troubleshooting Guide](https://docs.all-hands.dev/usage/troubleshooting) can help.
## 📖 Documentation
<a href="https://deepwiki.com/All-Hands-AI/OpenHands"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki" title="Autogenerated Documentation by DeepWiki"></a>
To learn more about the project, and for tips on using OpenHands,
check out our [documentation](https://docs.all-hands.dev/usage/getting-started).
There you'll find resources on how to use different LLM providers,
troubleshooting resources, and advanced configuration options.
## 🤝 How to Join the Community
OpenHands is a community-driven project, and we welcome contributions from everyone. We do most of our communication
through Slack, so this is the best place to start, but we also are happy to have you contact us on Discord or Github:
- [Join our Slack workspace](https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA) - Here we talk about research, architecture, and future development.
- [Join our Discord server](https://discord.gg/ESHStjSjD4) - This is a community-run server for general discussion, questions, and feedback.
- [Read or post Github Issues](https://github.com/All-Hands-AI/OpenHands/issues) - Check out the issues we're working on, or add your own ideas.
See more about the community in [COMMUNITY.md](./COMMUNITY.md) or find details on contributing in [CONTRIBUTING.md](./CONTRIBUTING.md).
## 📈 Progress
See the monthly OpenHands roadmap [here](https://github.com/orgs/All-Hands-AI/projects/1) (updated at the maintainer's meeting at the end of each month).
<p align="center">
<a href="https://star-history.com/#All-Hands-AI/OpenHands&Date">
<img src="https://api.star-history.com/svg?repos=All-Hands-AI/OpenHands&type=Date" width="500" alt="Star History Chart">
</a>
</p>
## 📜 License
Distributed under the MIT License. See [`LICENSE`](./LICENSE) for more information.
## 🙏 Acknowledgements
OpenHands is built by a large number of contributors, and every contribution is greatly appreciated! We also build upon other open source projects, and we are deeply thankful for their work.
For a list of open source projects and licenses used in OpenHands, please see our [CREDITS.md](./CREDITS.md) file.
## 📚 Cite
```
@inproceedings{
wang2025openhands,
title={OpenHands: An Open Platform for {AI} Software Developers as Generalist Agents},
author={Xingyao Wang and Boxuan Li and Yufan Song and Frank F. Xu and Xiangru Tang and Mingchen Zhuge and Jiayi Pan and Yueqi Song and Bowen Li and Jaskirat Singh and Hoang H. Tran and Fuqiang Li and Ren Ma and Mingzhang Zheng and Bill Qian and Yanjun Shao and Niklas Muennighoff and Yizhe Zhang and Binyuan Hui and Junyang Lin and Robert Brennan and Hao Peng and Heng Ji and Graham Neubig},
booktitle={The Thirteenth International Conference on Learning Representations},
year={2025},
url={https://openreview.net/forum?id=OJd3ayDDoF}
}
```
If you need help with anything, or just want to chat, [come find us on Slack](https://dub.sh/openhands).

View File

@@ -1,148 +0,0 @@
<a name="readme-top"></a>
<div align="center">
<img src="./docs/static/img/logo.png" alt="Logo" width="200">
<h1 align="center">OpenHands: 少写代码,多做事</h1>
</div>
<div align="center">
<a href="https://github.com/All-Hands-AI/OpenHands/graphs/contributors"><img src="https://img.shields.io/github/contributors/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Contributors"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/stargazers"><img src="https://img.shields.io/github/stars/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Stargazers"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE"><img src="https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="MIT License"></a>
<br/>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA"><img src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge" alt="加入我们的Slack社区"></a>
<a href="https://discord.gg/ESHStjSjD4"><img src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge" alt="加入我们的Discord社区"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/CREDITS.md"><img src="https://img.shields.io/badge/Project-Credits-blue?style=for-the-badge&color=FFE165&logo=github&logoColor=white" alt="致谢"></a>
<br/>
<a href="https://docs.all-hands.dev/usage/getting-started"><img src="https://img.shields.io/badge/Documentation-000?logo=googledocs&logoColor=FFE165&style=for-the-badge" alt="查看文档"></a>
<a href="https://arxiv.org/abs/2407.16741"><img src="https://img.shields.io/badge/Paper%20on%20Arxiv-000?logoColor=FFE165&logo=arxiv&style=for-the-badge" alt="Arxiv论文"></a>
<a href="https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=0#gid=0"><img src="https://img.shields.io/badge/Benchmark%20score-000?logoColor=FFE165&logo=huggingface&style=for-the-badge" alt="评估基准分数"></a>
<hr>
</div>
欢迎使用OpenHands前身为OpenDevin这是一个由AI驱动的软件开发代理平台。
OpenHands代理可以完成人类开发者能做的任何事情修改代码、运行命令、浏览网页、调用API甚至从StackOverflow复制代码片段。
在[docs.all-hands.dev](https://docs.all-hands.dev)了解更多信息,或[注册OpenHands Cloud](https://app.all-hands.dev)开始使用。
> [!IMPORTANT]
> 在工作中使用OpenHands我们很想与您交流填写
> [这份简短表格](https://docs.google.com/forms/d/e/1FAIpQLSet3VbGaz8z32gW9Wm-Grl4jpt5WgMXPgJ4EDPVmCETCBpJtQ/viewform)
> 加入我们的设计合作伙伴计划,您将获得商业功能的早期访问权限,并有机会对我们的产品路线图提供意见。
![应用截图](./docs/static/img/screenshot.png)
## ☁️ OpenHands Cloud
开始使用OpenHands的最简单方式是在[OpenHands Cloud](https://app.all-hands.dev)上,
新用户可获得$50的免费额度。
## 💻 在本地运行OpenHands
OpenHands也可以使用Docker在本地系统上运行。
查看[运行OpenHands](https://docs.all-hands.dev/usage/installation)指南了解
系统要求和更多信息。
> [!WARNING]
> 在公共网络上?请参阅我们的[强化Docker安装指南](https://docs.all-hands.dev/usage/runtimes/docker#hardened-docker-installation)
> 通过限制网络绑定和实施其他安全措施来保护您的部署。
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/.openhands \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.54
```
> **注意**: 如果您在0.44版本之前使用过OpenHands您可能需要运行 `mv ~/.openhands-state ~/.openhands` 来将对话历史迁移到新位置。
您将在[http://localhost:3000](http://localhost:3000)找到运行中的OpenHands
打开应用程序时您将被要求选择一个LLM提供商并添加API密钥。
[Anthropic的Claude Sonnet 4](https://www.anthropic.com/api)`anthropic/claude-sonnet-4-20250514`
效果最佳,但您还有[许多选择](https://docs.all-hands.dev/usage/llms)。
## 💡 运行OpenHands的其他方式
> [!CAUTION]
> OpenHands旨在由单个用户在其本地工作站上运行。
> 它不适合多租户部署,即多个用户共享同一实例。没有内置的身份验证、隔离或可扩展性。
>
> 如果您有兴趣在多租户环境中运行OpenHands
> [与我们联系](https://docs.google.com/forms/d/e/1FAIpQLSet3VbGaz8z32gW9Wm-Grl4jpt5WgMXPgJ4EDPVmCETCBpJtQ/viewform)
> 了解高级部署选项。
您还可以[将OpenHands连接到本地文件系统](https://docs.all-hands.dev/usage/runtimes/docker#connecting-to-your-filesystem)
以可编程的[无头模式](https://docs.all-hands.dev/usage/how-to/headless-mode)运行OpenHands
通过[友好的CLI](https://docs.all-hands.dev/usage/how-to/cli-mode)与其交互,
或使用[GitHub Action](https://docs.all-hands.dev/usage/how-to/github-action)在标记的问题上运行它。
访问[运行OpenHands](https://docs.all-hands.dev/usage/installation)获取更多信息和设置说明。
如果您想修改OpenHands源代码请查看[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)。
遇到问题?[故障排除指南](https://docs.all-hands.dev/usage/troubleshooting)可以提供帮助。
## 📖 文档
<a href="https://deepwiki.com/All-Hands-AI/OpenHands"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki" title="DeepWiki自动生成文档"></a>
要了解有关项目的更多信息以及使用OpenHands的技巧
请查看我们的[文档](https://docs.all-hands.dev/usage/getting-started)。
在那里您将找到有关如何使用不同LLM提供商、
故障排除资源和高级配置选项的资源。
## 🤝 如何加入社区
OpenHands是一个社区驱动的项目我们欢迎每个人的贡献。我们大部分沟通
通过Slack进行因此这是开始的最佳场所但我们也很乐意您通过Discord或Github与我们联系
- [加入我们的Slack工作空间](https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA) - 这里我们讨论研究、架构和未来发展。
- [加入我们的Discord服务器](https://discord.gg/ESHStjSjD4) - 这是一个社区运营的服务器,用于一般讨论、问题和反馈。
- [阅读或发布Github问题](https://github.com/All-Hands-AI/OpenHands/issues) - 查看我们正在处理的问题,或添加您自己的想法。
在[COMMUNITY.md](./COMMUNITY.md)中了解更多关于社区的信息,或在[CONTRIBUTING.md](./CONTRIBUTING.md)中找到有关贡献的详细信息。
## 📈 进展
在[这里](https://github.com/orgs/All-Hands-AI/projects/1)查看OpenHands月度路线图每月月底在维护者会议上更新
<p align="center">
<a href="https://star-history.com/#All-Hands-AI/OpenHands&Date">
<img src="https://api.star-history.com/svg?repos=All-Hands-AI/OpenHands&type=Date" width="500" alt="Star History Chart">
</a>
</p>
## 📜 许可证
根据MIT许可证分发。有关更多信息请参阅[`LICENSE`](./LICENSE)。
## 🙏 致谢
OpenHands由大量贡献者构建每一份贡献都备受感谢我们还借鉴了其他开源项目对他们的工作深表感谢。
有关OpenHands中使用的开源项目和许可证列表请参阅我们的[CREDITS.md](./CREDITS.md)文件。
## 📚 引用
```
@misc{openhands,
title={{OpenHands: An Open Platform for AI Software Developers as Generalist Agents}},
author={Xingyao Wang and Boxuan Li and Yufan Song and Frank F. Xu and Xiangru Tang and Mingchen Zhuge and Jiayi Pan and Yueqi Song and Bowen Li and Jaskirat Singh and Hoang H. Tran and Fuqiang Li and Ren Ma and Mingzhang Zheng and Bill Qian and Yanjun Shao and Niklas Muennighoff and Yizhe Zhang and Binyuan Hui and Junyang Lin and Robert Brennan and Hao Peng and Heng Ji and Graham Neubig},
year={2024},
eprint={2407.16741},
archivePrefix={arXiv},
primaryClass={cs.SE},
url={https://arxiv.org/abs/2407.16741},
}
```

View File

@@ -1,60 +0,0 @@
<a name="readme-top"></a>
<div align="center">
<img src="./docs/static/img/logo.png" alt="Logo" width="200">
<h1 align="center">OpenHands: コードを減らして、もっと作ろう</h1>
</div>
<div align="center">
<a href="https://github.com/All-Hands-AI/OpenHands/graphs/contributors"><img src="https://img.shields.io/github/contributors/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Contributors"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/stargazers"><img src="https://img.shields.io/github/stars/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="Stargazers"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE"><img src="https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="MIT License"></a>
<br/>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA"><img src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge" alt="Slackコミュニティに参加"></a>
<a href="https://discord.gg/ESHStjSjD4"><img src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge" alt="Discordコミュニティに参加"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/CREDITS.md"><img src="https://img.shields.io/badge/Project-Credits-blue?style=for-the-badge&color=FFE165&logo=github&logoColor=white" alt="クレジット"></a>
<br/>
<a href="https://docs.all-hands.dev/usage/getting-started"><img src="https://img.shields.io/badge/Documentation-000?logo=googledocs&logoColor=FFE165&style=for-the-badge" alt="ドキュメントを見る"></a>
<a href="https://arxiv.org/abs/2407.16741"><img src="https://img.shields.io/badge/Paper%20on%20Arxiv-000?logoColor=FFE165&logo=arxiv&style=for-the-badge" alt="Arxiv論文"></a>
<a href="https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=0#gid=0"><img src="https://img.shields.io/badge/Benchmark%20score-000?logoColor=FFE165&logo=huggingface&style=for-the-badge" alt="評価ベンチマークスコア"></a>
<hr>
</div>
OpenHands旧OpenDevinへようこそ。これはAIが駆動するソフトウェア開発エージェントのプラットフォームです。
OpenHandsのエージェントは人間の開発者ができることは何でもこなします。コードを修正し、コマンドを実行し、ウェブを閲覧し、APIを呼び出し、StackOverflowからコードスニペットをコピーすることさえできます。
詳細は[docs.all-hands.dev](https://docs.all-hands.dev)をご覧いただくか、[OpenHands Cloud](https://app.all-hands.dev)に登録して始めましょう。
> [!IMPORTANT]
> 仕事でOpenHandsを使っていますかぜひお話を聞かせてください。[こちらの短いフォーム](https://docs.google.com/forms/d/e/1FAIpQLSet3VbGaz8z32gW9Wm-Grl4jpt5WgMXPgJ4EDPVmCETCBpJtQ/viewform)にご記入いただき、Design Partnerプログラムにご参加ください。商用機能の早期アクセスや製品ロードマップへのフィードバックの機会を提供します。
![アプリのスクリーンショット](./docs/static/img/screenshot.png)
## ☁️ OpenHands Cloud
OpenHandsを始める最も簡単な方法は[OpenHands Cloud](https://app.all-hands.dev)を利用することです。新規ユーザーには50ドル分の無料クレジットが付与されます。
## 💻 OpenHandsをローカルで実行する
OpenHandsはDockerを利用してローカル環境でも実行できます。システム要件や詳細については[Running OpenHands](https://docs.all-hands.dev/usage/installation)ガイドをご覧ください。
> [!WARNING]
> 公共ネットワークで実行していますか?[Hardened Docker Installation Guide](https://docs.all-hands.dev/usage/runtimes/docker#hardened-docker-installation)を参照して、ネットワークバインディングの制限や追加のセキュリティ対策を実施してください。
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/.openhands \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.54
```
**注**: バージョン0.44以前のOpenHandsを使用していた場合は、会話履歴を移行するために `mv ~/.openhands-state ~/.openhands` を実行してください。
OpenHandsは[http://localhost:3000](http://localhost:3000)で起動します!

View File

@@ -1,113 +0,0 @@
import os
import pathlib
import subprocess
# This script is intended to be run by Poetry during the build process.
# Define the expected name of the .vsix file based on the extension's package.json
# This should match the name and version in openhands-vscode/package.json
EXTENSION_NAME = 'openhands-vscode'
EXTENSION_VERSION = '0.0.1'
VSIX_FILENAME = f'{EXTENSION_NAME}-{EXTENSION_VERSION}.vsix'
# Paths
ROOT_DIR = pathlib.Path(__file__).parent.resolve()
VSCODE_EXTENSION_DIR = ROOT_DIR / 'openhands' / 'integrations' / 'vscode'
def check_node_version():
"""Check if Node.js version is sufficient for building the extension."""
try:
result = subprocess.run(
['node', '--version'], capture_output=True, text=True, check=True
)
version_str = result.stdout.strip()
# Extract major version number (e.g., "v12.22.9" -> 12)
major_version = int(version_str.lstrip('v').split('.')[0])
return major_version >= 18 # Align with frontend actual usage (18.20.1)
except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
return False
def build_vscode_extension():
"""Builds the VS Code extension."""
vsix_path = VSCODE_EXTENSION_DIR / VSIX_FILENAME
# Check if VSCode extension build is disabled via environment variable
if os.environ.get('SKIP_VSCODE_BUILD', '').lower() in ('1', 'true', 'yes'):
print('--- Skipping VS Code extension build (SKIP_VSCODE_BUILD is set) ---')
if vsix_path.exists():
print(f'--- Using existing VS Code extension: {vsix_path} ---')
else:
print('--- No pre-built VS Code extension found ---')
return
# Check Node.js version - if insufficient, use pre-built extension as fallback
if not check_node_version():
print('--- Warning: Node.js version < 18 detected or Node.js not found ---')
print('--- Skipping VS Code extension build (requires Node.js >= 18) ---')
print('--- Using pre-built extension if available ---')
if not vsix_path.exists():
print('--- Warning: No pre-built VS Code extension found ---')
print('--- VS Code extension will not be available ---')
else:
print(f'--- Using pre-built VS Code extension: {vsix_path} ---')
return
print(f'--- Building VS Code extension in {VSCODE_EXTENSION_DIR} ---')
try:
# Ensure npm dependencies are installed
print('--- Running npm install for VS Code extension ---')
subprocess.run(
['npm', 'install'],
cwd=VSCODE_EXTENSION_DIR,
check=True,
shell=os.name == 'nt',
)
# Package the extension
print(f'--- Packaging VS Code extension ({VSIX_FILENAME}) ---')
subprocess.run(
['npm', 'run', 'package-vsix'],
cwd=VSCODE_EXTENSION_DIR,
check=True,
shell=os.name == 'nt',
)
# Verify the generated .vsix file exists
if not vsix_path.exists():
raise FileNotFoundError(
f'VS Code extension package not found after build: {vsix_path}'
)
print(f'--- VS Code extension built successfully: {vsix_path} ---')
except subprocess.CalledProcessError as e:
print(f'--- Warning: Failed to build VS Code extension: {e} ---')
print('--- Continuing without building extension ---')
if not vsix_path.exists():
print('--- Warning: No pre-built VS Code extension found ---')
print('--- VS Code extension will not be available ---')
def build(setup_kwargs):
"""This function is called by Poetry during the build process.
`setup_kwargs` is a dictionary that will be passed to `setuptools.setup()`.
"""
print('--- Running custom Poetry build script (build_vscode.py) ---')
# Build the VS Code extension and place the .vsix file
build_vscode_extension()
# Poetry will handle including files based on pyproject.toml `include` patterns.
# Ensure openhands/integrations/vscode/*.vsix is included there.
print('--- Custom Poetry build script (build_vscode.py) finished ---')
if __name__ == '__main__':
print('Running build_vscode.py directly for testing VS Code extension packaging...')
build_vscode_extension()
print('Direct execution of build_vscode.py finished.')

View File

@@ -189,7 +189,7 @@ model = "gpt-4o"
# Whether to use native tool calling if supported by the model. Can be true, false, or None by default, which chooses the model's default behavior based on the evaluation.
# ATTENTION: Based on evaluation, enabling native function calling may lead to worse results
# in some scenarios. Use with caution and consider testing with your specific use case.
# https://github.com/All-Hands-AI/OpenHands/pull/4711
# https://github.com/OpenHands/OpenHands/pull/4711
#native_tool_calling = None
@@ -219,6 +219,14 @@ correct_num = 5
api_key = ""
model = "gpt-4o"
# Example routing LLM configuration for multimodal model routing
# Uncomment and configure to enable model routing with a secondary model
#[llm.secondary_model]
#model = "kimi-k2"
#api_key = ""
#for_routing = true
#max_input_tokens = 128000
#################################### Agent ###################################
# Configuration for agents (group name starts with 'agent')
@@ -363,10 +371,11 @@ classpath = "my_package.my_module.MyCustomAgent"
#confirmation_mode = false
# The security analyzer to use (For Headless / CLI only - In Web this is overridden by Session Init)
#security_analyzer = ""
# Available options: 'llm' (default), 'invariant'
#security_analyzer = "llm"
# Whether to enable security analyzer
#enable_security_analyzer = false
#enable_security_analyzer = true
#################################### Condenser #################################
# Condensers control how conversation history is managed and compressed when
@@ -431,12 +440,6 @@ type = "noop"
#temperature = 0.1
#max_input_tokens = 1024
#################################### Eval ####################################
# Configuration for the evaluation, please refer to the specific evaluation
# plugin for the available options
##############################################################################
########################### Kubernetes #######################################
# Kubernetes configuration when using the Kubernetes runtime
##############################################################################
@@ -479,3 +482,55 @@ type = "noop"
# Run the runtime sandbox container in privileged mode for use with docker-in-docker
#privileged = false
#################################### MCP #####################################
# Configuration for Model Context Protocol (MCP) servers
# MCP allows OpenHands to communicate with external tool servers
##############################################################################
[mcp]
# SSE servers - Server-Sent Events transport (legacy)
#sse_servers = [
# # Basic SSE server with just a URL
# "http://localhost:8080/mcp/sse",
#
# # SSE server with authentication
# {url = "https://api.example.com/mcp/sse", api_key = "your-api-key"}
#]
# SHTTP servers - Streamable HTTP transport (recommended)
#shttp_servers = [
# # Basic SHTTP server with default 60s timeout
# "https://api.example.com/mcp/shttp",
#
# # SHTTP server with custom timeout for long-running tools
# {
# url = "https://api.example.com/mcp/shttp",
# api_key = "your-api-key",
# timeout = 180 # 3 minutes for processing-heavy tools (1-3600 seconds)
# }
#]
# Stdio servers - Direct process communication (development only)
#stdio_servers = [
# # Basic stdio server
# {name = "filesystem", command = "npx", args = ["@modelcontextprotocol/server-filesystem", "/"]},
#
# # Stdio server with environment variables
# {
# name = "fetch",
# command = "uvx",
# args = ["mcp-server-fetch"],
# env = {DEBUG = "true"}
# }
#]
#################################### Model Routing ############################
# Configuration for experimental model routing feature
# Enables intelligent switching between different LLM models for specific purposes
##############################################################################
[model_routing]
# Router to use for model selection
# Available options:
# - "noop_router" (default): No routing, always uses primary LLM
# - "multimodal_router": A router that switches between primary and secondary models, depending on whether the input is multimodal or not
#router_name = "noop_router"

View File

@@ -1,5 +1,5 @@
ARG OPENHANDS_BUILD_VERSION=dev
FROM node:24.3.0-bookworm-slim AS frontend-builder
FROM node:25.2-trixie-slim AS frontend-builder
WORKDIR /app
@@ -9,7 +9,7 @@ RUN npm ci
COPY frontend ./
RUN npm run build
FROM python:3.12.10-slim AS base
FROM python:3.13.7-slim-trixie AS base
FROM base AS backend-builder
WORKDIR /app
@@ -58,34 +58,34 @@ RUN sed -i 's/^UID_MIN.*/UID_MIN 499/' /etc/login.defs
# Default is 60000, but we've seen up to 200000
RUN sed -i 's/^UID_MAX.*/UID_MAX 1000000/' /etc/login.defs
RUN groupadd --gid $OPENHANDS_USER_ID app
RUN groupadd --gid $OPENHANDS_USER_ID openhands
RUN useradd -l -m -u $OPENHANDS_USER_ID --gid $OPENHANDS_USER_ID -s /bin/bash openhands && \
usermod -aG app openhands && \
usermod -aG openhands openhands && \
usermod -aG sudo openhands && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN chown -R openhands:app /app && chmod -R 770 /app
RUN sudo chown -R openhands:app $WORKSPACE_BASE && sudo chmod -R 770 $WORKSPACE_BASE
RUN chown -R openhands:openhands /app && chmod -R 770 /app
RUN sudo chown -R openhands:openhands $WORKSPACE_BASE && sudo chmod -R 770 $WORKSPACE_BASE
USER openhands
ENV VIRTUAL_ENV=/app/.venv \
PATH="/app/.venv/bin:$PATH" \
PYTHONPATH='/app'
COPY --chown=openhands:app --chmod=770 --from=backend-builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
COPY --chown=openhands:openhands --chmod=770 --from=backend-builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
COPY --chown=openhands:app --chmod=770 ./microagents ./microagents
COPY --chown=openhands:app --chmod=770 ./openhands ./openhands
COPY --chown=openhands:app --chmod=777 ./openhands/runtime/plugins ./openhands/runtime/plugins
COPY --chown=openhands:app pyproject.toml poetry.lock README.md MANIFEST.in LICENSE ./
COPY --chown=openhands:openhands --chmod=770 ./skills ./skills
COPY --chown=openhands:openhands --chmod=770 ./openhands ./openhands
COPY --chown=openhands:openhands --chmod=777 ./openhands/runtime/plugins ./openhands/runtime/plugins
COPY --chown=openhands:openhands pyproject.toml poetry.lock README.md MANIFEST.in LICENSE ./
# This is run as "openhands" user, and will create __pycache__ with openhands:openhands ownership
RUN python openhands/core/download.py # No-op to download assets
# Add this line to set group ownership of all files/directories not already in "app" group
# openhands:openhands -> openhands:app
RUN find /app \! -group app -exec chgrp app {} +
# openhands:openhands -> openhands:openhands
RUN find /app \! -group openhands -exec chgrp openhands {} +
COPY --chown=openhands:app --chmod=770 --from=frontend-builder /app/build ./frontend/build
COPY --chown=openhands:app --chmod=770 ./containers/app/entrypoint.sh /app/entrypoint.sh
COPY --chown=openhands:openhands --chmod=770 --from=frontend-builder /app/build ./frontend/build
COPY --chown=openhands:openhands --chmod=770 ./containers/app/entrypoint.sh /app/entrypoint.sh
USER root

View File

@@ -1,4 +1,4 @@
DOCKER_REGISTRY=ghcr.io
DOCKER_ORG=all-hands-ai
DOCKER_ORG=openhands
DOCKER_IMAGE=openhands
DOCKER_BASE_DIR="."

View File

@@ -54,7 +54,7 @@ else
fi
fi
fi
usermod -aG app enduser
usermod -aG openhands enduser
# get the user group of /var/run/docker.sock and set openhands to that group
DOCKER_SOCKET_GID=$(stat -c '%g' /var/run/docker.sock)
echo "Docker socket group id: $DOCKER_SOCKET_GID"

View File

@@ -104,6 +104,9 @@ RUN apt-get update && apt-get install -y \
&& apt-get clean \
&& apt-get autoremove -y
# mark /app as safe git directory to avoid pre-commit errors
RUN git config --system --add safe.directory /app
WORKDIR /app
# cache build dependencies

View File

@@ -1,7 +1,7 @@
# Develop in Docker
> [!WARNING]
> This is not officially supported and may not work.
> This way of running OpenHands is not officially supported. It is maintained by the community and may not work.
Install [Docker](https://docs.docker.com/engine/install/) on your host machine and run:

View File

@@ -12,7 +12,8 @@ services:
- SANDBOX_API_HOSTNAME=host.docker.internal
- DOCKER_HOST_ADDR=host.docker.internal
#
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.54-nikolaik}
- AGENT_SERVER_IMAGE_REPOSITORY=${AGENT_SERVER_IMAGE_REPOSITORY:-ghcr.io/openhands/agent-server}
- AGENT_SERVER_IMAGE_TAG=${AGENT_SERVER_IMAGE_TAG:-1.12.0-python}
- SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234}
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
ports:

View File

@@ -6,7 +6,7 @@ that depends on the `base_image` **AND** a [Python source distribution](https://
The following command will generate a `Dockerfile` file for `nikolaik/python-nodejs:python3.12-nodejs22` (the default base image), an updated `config.sh` and the runtime source distribution files/folders into `containers/runtime`:
```bash
poetry run python3 openhands/runtime/utils/runtime_build.py \
poetry run python3 -m openhands.runtime.utils.runtime_build \
--base_image nikolaik/python-nodejs:python3.12-nodejs22 \
--build_folder containers/runtime
```

View File

@@ -1,5 +1,5 @@
DOCKER_REGISTRY=ghcr.io
DOCKER_ORG=all-hands-ai
DOCKER_ORG=openhands
DOCKER_BASE_DIR="./containers/runtime"
DOCKER_IMAGE=runtime
# These variables will be appended by the runtime_build.py script

View File

@@ -3,13 +3,22 @@ repos:
rev: v5.0.0
hooks:
- id: trailing-whitespace
exclude: ^(docs/|modules/|python/|openhands-ui/|third_party/)
exclude: ^(docs/|modules/|python/|openhands-ui/|third_party/|enterprise/)
- id: end-of-file-fixer
exclude: ^(docs/|modules/|python/|openhands-ui/|third_party/)
exclude: ^(docs/|modules/|python/|openhands-ui/|third_party/|enterprise/)
- id: check-yaml
args: ["--allow-multiple-documents"]
- id: debug-statements
- repo: local
hooks:
- id: warn-appmode-oss
name: "Warn on AppMode.OSS in backend (use AppMode.OPENHANDS)"
language: system
entry: bash -lc 'if rg -n "\\bAppMode\\.OSS\\b" openhands tests/unit; then echo "Found AppMode.OSS usage. Prefer AppMode.OPENHANDS."; exit 1; fi'
pass_filenames: false
- repo: https://github.com/tox-dev/pyproject-fmt
rev: v2.5.1
hooks:
@@ -28,19 +37,28 @@ repos:
entry: ruff check --config dev_config/python/ruff.toml
types_or: [python, pyi, jupyter]
args: [--fix, --unsafe-fixes]
exclude: third_party/
exclude: ^(third_party/|enterprise/)
# Run the formatter.
- id: ruff-format
entry: ruff format --config dev_config/python/ruff.toml
types_or: [python, pyi, jupyter]
exclude: third_party/
exclude: ^(third_party/|enterprise/)
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0
hooks:
- id: mypy
additional_dependencies:
[types-requests, types-setuptools, types-pyyaml, types-toml, types-docker, types-Markdown, pydantic, lxml]
[
types-requests,
types-setuptools,
types-pyyaml,
types-toml,
types-docker,
types-Markdown,
pydantic,
lxml,
]
# To see gaps add `--html-report mypy-report/`
entry: mypy --config-file dev_config/python/mypy.ini openhands/
always_run: true

View File

@@ -7,9 +7,10 @@ warn_unreachable = True
warn_redundant_casts = True
no_implicit_optional = True
strict_optional = True
disable_error_code = type-abstract
# Exclude third-party runtime directory from type checking
exclude = third_party/
exclude = (third_party/|enterprise/)
[mypy-openhands.memory.condenser.impl.*]
disable_error_code = override

View File

@@ -1,5 +1,5 @@
# Exclude third-party runtime directory from linting
exclude = ["third_party/"]
exclude = ["third_party/", "enterprise/"]
[lint]
select = [

View File

@@ -7,7 +7,8 @@ services:
image: openhands:latest
container_name: openhands-app-${DATE:-}
environment:
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-docker.all-hands.dev/all-hands-ai/runtime:0.54-nikolaik}
- AGENT_SERVER_IMAGE_REPOSITORY=${AGENT_SERVER_IMAGE_REPOSITORY:-ghcr.io/openhands/agent-server}
- AGENT_SERVER_IMAGE_TAG=${AGENT_SERVER_IMAGE_TAG:-1.12.0-python}
#- SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234} # enable this only if you want a specific non-root sandbox user but you will have to manually adjust permissions of ~/.openhands for this user
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
ports:

View File

@@ -1,67 +0,0 @@
# Documentation Style Guide
## General Writing Principles
- **Clarity & Conciseness**: Always prioritize clarity and brevity. Avoid unnecessary jargon or overly complex explanations.
Keep sentences short and to the point.
- **Gradual Complexity**: Start with the simplest, most basic setup, and then gradually introduce more advanced
concepts and configurations.
## Formatting Guidelines
### Headers
Use **Title Case** for the first and second level headers.
Example:
- **Basic Usage**
- **Advanced Configuration Options**
### Lists
When listing items or options, use bullet points to enhance readability.
Example:
- Option A
- Option B
- Option C
### Procedures
For instructions or processes that need to be followed in a specific order, use numbered steps.
Example:
1. Step one: Do this.
- First this sub step.
- Then this sub step.
2. Step two: Complete this action.
3. Step three: Verify the result.
### Code Blocks
* Use code blocks for multi-line inputs, outputs, commands and code samples.
Example:
```bash
docker run -it \
-e THIS=this \
-e THAT=that
...
```
### Use of Note and Warning
When adding a note or warning, use the built-in note and warning syntax.
Example:
<Note>
This section is for advanced users only.
</Note>
### Referring to UI Elements
When referencing UI elements, use ``.
Example:
1. Toggle the `Advanced` option
2. Enter your model in the `Custom Model` textbox.

View File

@@ -1,17 +0,0 @@
# Setup
```
npm install -g mint
```
or
```
yarn global add mint
```
# Preview
```
mint dev
```

View File

@@ -1,17 +0,0 @@
# セットアップ
```
npm install -g mint
```
または
```
yarn global add mint
```
# プレビュー
```
mint dev
```

View File

@@ -1,230 +0,0 @@
{
"$schema": "https://mintlify.com/docs.json",
"theme": "mint",
"name": "All Hands Docs",
"colors": {
"primary": "#99873c",
"light": "#ffe165",
"dark": "#ffe165"
},
"background": {
"color": {
"light": "#f7f3ee",
"dark": "#0B0D0E"
}
},
"appearance": {
"default": "light"
},
"favicon": "/logo-square.png",
"navigation": {
"tabs": [
{
"tab": "Docs",
"pages": [
"index",
"usage/installation",
"usage/getting-started",
"usage/key-features",
"usage/faqs",
{
"group": "OpenHands Cloud",
"pages": [
"usage/cloud/openhands-cloud",
{
"group": "Integrations",
"pages": [
"usage/cloud/bitbucket-installation",
"usage/cloud/github-installation",
"usage/cloud/gitlab-installation",
"usage/cloud/slack-installation",
{
"group": "Project Management Tools",
"pages": [
"usage/cloud/project-management/overview",
"usage/cloud/project-management/jira-integration",
"usage/cloud/project-management/jira-dc-integration",
"usage/cloud/project-management/linear-integration"
]
}
]
},
"usage/cloud/cloud-ui",
"usage/cloud/cloud-api"
]
},
{
"group": "Run OpenHands on Your Own",
"pages": [
"usage/local-setup",
"usage/how-to/gui-mode",
"usage/how-to/cli-mode",
"usage/how-to/headless-mode",
"usage/how-to/github-action",
{
"group": "Advanced Configuration",
"pages": [
{
"group": "LLM Configuration",
"pages": [
"usage/llms/llms",
{
"group": "Providers",
"pages": [
"usage/llms/openhands-llms",
"usage/llms/azure-llms",
"usage/llms/google-llms",
"usage/llms/groq",
"usage/llms/local-llms",
"usage/llms/litellm-proxy",
"usage/llms/moonshot",
"usage/llms/openai-llms",
"usage/llms/openrouter"
]
}
]
},
{
"group": "Runtime Configuration",
"pages": [
"usage/runtimes/overview",
{
"group": "Providers",
"pages": [
"usage/runtimes/docker",
"usage/runtimes/remote",
"usage/runtimes/local",
{
"group": "Third-Party Providers",
"pages": [
"usage/runtimes/modal",
"usage/runtimes/daytona",
"usage/runtimes/runloop",
"usage/runtimes/e2b"
]
}
]
}
]
},
"usage/configuration-options",
"usage/how-to/custom-sandbox-guide",
"usage/search-engine-setup",
"usage/mcp"
]
}
]
},
{
"group": "Customizations & Settings",
"pages": [
"usage/common-settings",
"usage/prompting/repository",
{
"group": "Microagents",
"pages": [
"usage/prompting/microagents-overview",
"usage/prompting/microagents-repo",
"usage/prompting/microagents-keyword",
"usage/prompting/microagents-org",
"usage/prompting/microagents-public"
]
}
]
},
{
"group": "Tips and Tricks",
"pages": [
"usage/prompting/prompting-best-practices"
]
},
{
"group": "Troubleshooting & Feedback",
"pages": [
"usage/troubleshooting/troubleshooting",
"usage/feedback"
]
},
{
"group": "OpenHands Developers",
"pages": [
"usage/how-to/development-overview",
{
"group": "Architecture",
"pages": [
"usage/architecture/backend",
"usage/architecture/runtime"
]
},
"usage/how-to/debugging",
"usage/how-to/evaluation-harness",
"usage/how-to/websocket-connection"
]
}
]
},
{
"tab": "Success Stories",
"pages": [
"success-stories/index"
]
},
{
"tab": "API Reference",
"openapi": "/openapi.json"
}
],
"global": {
"anchors": [
{
"anchor": "Company",
"href": "https://www.all-hands.dev/",
"icon": "house"
},
{
"anchor": "Blog",
"href": "https://www.all-hands.dev/blog",
"icon": "newspaper"
},
{
"anchor": "OpenHands Cloud",
"href": "https://app.all-hands.dev",
"icon": "cloud"
}
]
}
},
"logo": {
"light": "/logo/light.svg",
"dark": "/logo/dark.svg"
},
"navbar": {
"links": [
],
"primary": {
"type": "github",
"href": "https://github.com/All-Hands-AI/OpenHands"
}
},
"footer": {
"socials": {
"slack": "https://join.slack.com/t/openhands-ai/shared_invite/zt-3847of6xi-xuYJIPa6YIPg4ElbDWbtSA",
"github": "https://github.com/All-Hands-AI/OpenHands",
"discord": "https://discord.gg/ESHStjSjD4"
}
},
"contextual": {
"options": [
"copy",
"view",
"chatgpt",
"claude"
]
},
"redirects": [
{
"source": "/modules/:slug*",
"destination": "/:slug*"
}
]
}

View File

@@ -1,19 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.06145 23.1079C5.26816 22.3769 -3.39077 20.6274 1.4173 5.06384C9.6344 6.09939 16.9728 14.0644 9.06145 23.1079Z" fill="url(#paint0_linear_17557_2021)"/>
<path d="M8.91928 23.0939C5.27642 21.2223 0.78371 4.20891 17.0071 0C20.7569 7.19341 19.6212 16.5452 8.91928 23.0939Z" fill="url(#paint1_linear_17557_2021)"/>
<path d="M8.91388 23.0788C8.73534 19.8817 10.1585 9.08525 23.5699 13.1107C23.1812 20.1229 18.984 26.4182 8.91388 23.0788Z" fill="url(#paint2_linear_17557_2021)"/>
<defs>
<linearGradient id="paint0_linear_17557_2021" x1="3.77557" y1="5.91571" x2="5.23185" y2="21.5589" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299"/>
<stop offset="1" stop-color="#15803D"/>
</linearGradient>
<linearGradient id="paint1_linear_17557_2021" x1="12.1711" y1="-0.718425" x2="10.1897" y2="22.9832" gradientUnits="userSpaceOnUse">
<stop stop-color="#16A34A"/>
<stop offset="1" stop-color="#4ADE80"/>
</linearGradient>
<linearGradient id="paint2_linear_17557_2021" x1="23.1327" y1="15.353" x2="9.33841" y2="18.5196" gradientUnits="userSpaceOnUse">
<stop stop-color="#4ADE80"/>
<stop offset="1" stop-color="#0D9373"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,16 +0,0 @@
---
title: Introduction
description: OpenHands - Code Less, Make More
icon: book-open
mode: wide
---
Use AI to tackle the toil in your backlog. Our agents have all the same tools as a human developer: they can modify code, run commands, browse the web, call APIs, and yes-even copy code snippets from StackOverflow.
<iframe
className="w-full aspect-video"
src="https://www.youtube.com/embed/oB4JR98KRAA"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
></iframe>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -1,29 +0,0 @@
<svg width="1305" height="196" viewBox="0 0 1305 196" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_14027_2415)">
<g clip-path="url(#clip1_14027_2415)">
<path d="M282.419 58.7848C273.03 53.1628 266.757 61.779 267.526 73.4779L267.448 73.5663C267.474 61.3495 265.779 47.8566 260.145 36.9411C258.15 33.0751 254.107 26.7204 246.113 29.7146C242.605 31.0285 239.423 34.9828 241.066 45.1909C241.066 45.1909 242.892 55.9043 242.552 69.3719V69.5614C240.27 32.4182 231.663 21.0857 219.352 21.8185C215.414 22.5007 210.028 24.1557 211.841 35.5766C211.841 35.5766 213.81 47.4902 214.449 56.9782L214.488 57.4583H214.449C208.659 36.979 200.86 36.701 195.213 37.4969C190.088 38.2171 184.493 43.3969 187.323 53.605C196.204 85.6315 194.47 124.202 193.805 129.723C191.992 125.946 191.431 122.952 188.914 118.808C178.794 102.169 173.982 100.944 168.074 100.691C162.206 100.438 155.868 103.963 156.285 110.672C156.716 117.38 160.224 118.492 165.205 127.841C169.092 135.118 170.2 144.656 178.025 161.99C184.506 176.342 201.447 192.084 232.302 190.214C257.302 189.405 294.639 180.89 288.144 124.973C286.527 115.258 287.74 107.122 288.588 98.7833C289.905 85.8463 291.835 64.4068 282.432 58.7722L282.419 58.7848Z" fill="#FFE165"/>
<path d="M126.317 101.083C120.409 101.449 115.636 102.75 105.829 119.566C103.391 123.748 102.895 126.754 101.148 130.557C100.378 125.049 97.9134 86.516 106.181 54.3378C108.816 44.0918 103.13 39.0131 97.9916 38.3814C92.3318 37.6865 84.5201 38.1034 79.1211 58.7849H79.0559L79.1341 58.1911C79.5906 48.6905 81.3381 36.7516 81.3381 36.7516C82.9161 25.2928 77.517 23.7389 73.5655 23.1198C61.2808 22.6145 52.9083 33.9975 51.2912 70.8122H51.2652C50.7044 57.4836 52.3084 46.8713 52.3084 46.8713C53.756 36.6253 50.4957 32.7341 46.9616 31.4833C38.9152 28.6281 34.9898 35.0587 33.0727 38.9625C27.6476 49.9792 26.2 63.4973 26.4609 75.7141L26.3826 75.6257C26.9173 63.9142 20.488 55.4117 11.2027 61.1979C1.9174 66.9968 4.25176 88.3984 5.8167 101.31C6.83391 109.636 8.19019 117.747 6.75567 127.487C1.33054 183.505 38.8239 191.351 63.8368 191.717C94.7183 193.044 111.359 176.986 117.566 162.521C125.052 145.061 125.991 135.497 129.734 128.157C134.533 118.719 138.028 117.544 138.328 110.836C138.628 104.127 132.225 100.716 126.356 101.07L126.317 101.083Z" fill="#FFE165"/>
<path d="M138.679 101.171C135.549 98.2021 130.842 96.6228 126.056 96.9008C118.387 97.3682 112.949 100.084 104.59 113.35C104.368 98.1768 105.242 75.3981 110.38 55.361C112.31 47.8313 110.367 42.9168 108.385 40.1247C106.076 36.8652 102.49 34.7175 98.5256 34.2374C94.9132 33.7952 90.1923 33.7699 85.5888 37.4337C85.5888 37.3832 85.6018 37.32 85.6018 37.32C87.0885 26.5561 83.2544 20.3908 74.2169 19.0011L73.7213 18.9505C68.1527 18.7105 63.3797 20.4792 59.5325 24.1935C57.472 26.177 55.6854 28.7417 54.1335 31.9128C52.399 29.4492 50.169 28.1984 48.4084 27.5668C37.6495 23.7387 31.7027 31.938 29.1205 37.1684C26.1211 43.2579 24.2562 50.0801 23.2129 57.0413C22.9912 56.9023 22.7825 56.7634 22.5608 56.637C20.1873 55.3105 15.2447 53.6934 8.82849 57.6983C-2.04784 64.4952 -0.665478 84.027 1.49935 101.815C1.61673 102.763 1.7341 103.698 1.85147 104.645C2.77739 111.935 3.65115 118.82 2.45136 126.919L2.42528 127.121C0.247403 149.596 4.61619 166.892 15.4143 178.553C25.795 189.771 42.0574 195.608 63.6144 195.924C65.1924 195.987 66.7312 196.013 68.231 196C105.059 195.671 118.27 171.73 121.517 164.15C125.716 154.346 127.894 147.032 129.629 141.144C130.972 136.596 132.041 133.008 133.554 130.026C135.276 126.641 136.788 124.442 138.119 122.497C140.388 119.187 142.344 116.331 142.579 111.025C142.748 107.185 141.392 103.774 138.64 101.171H138.679ZM65.6488 30.1314C67.7224 28.1353 70.1089 27.2509 73.1345 27.3141C75.7557 27.731 78.1292 28.3501 77.0468 36.183C76.9686 36.6757 75.2732 48.4377 74.8168 58.0141C74.8168 58.0773 74.8168 58.1404 74.8168 58.2036C72.4302 67.5526 70.4349 81.0202 69.3656 100.704C64.7359 100.981 60.1194 101.462 55.6332 102.093C54.1856 62.158 57.5372 37.9391 65.6358 30.1314H65.6488ZM36.9452 40.7817C40.1925 34.2121 42.9181 34.5406 45.4481 35.4376C48.9561 36.6883 48.4084 43.4727 48.0041 46.29C47.9389 46.7448 46.374 57.3192 46.9217 70.7742C46.5174 80.2116 46.5696 91.0893 47.0521 103.534C42.7616 104.355 38.6927 105.302 34.976 106.326C33.2155 100.59 25.4299 64.1541 36.9452 40.7943V40.7817ZM130.946 117.86C129.537 119.907 127.79 122.459 125.821 126.325C123.956 129.976 122.808 133.892 121.335 138.832C119.652 144.505 117.553 151.567 113.549 160.929C110.706 167.549 98.7603 189.051 63.8752 187.535C44.4309 187.257 30.6855 182.482 21.8566 172.943C12.7539 163.114 9.11539 147.979 11.0324 127.98C12.3626 118.833 11.3846 111.088 10.4326 103.609C10.3152 102.674 10.1978 101.752 10.0804 100.817C9.03715 92.1884 6.24634 69.2581 13.5103 64.7226C15.4664 63.4972 17.0705 63.2192 18.2572 63.8762C20.2786 65.0006 22.313 69.0939 22.0261 75.436C22.0131 75.7772 22.0522 76.1056 22.1174 76.4341C22.4826 91.2156 25.2082 104.077 26.7601 108.903C24.2171 109.825 21.974 110.785 20.0961 111.745C17.9834 112.832 17.1879 115.359 18.3094 117.405C19.0919 118.833 20.6047 119.642 22.1696 119.629C22.8347 119.629 23.5128 119.465 24.1519 119.136C34.7022 113.716 59.7281 108.208 81.7807 108.802C84.1803 108.84 86.1495 107.046 86.2147 104.734C86.28 102.422 84.402 100.501 82.0155 100.438C80.6983 100.4 79.3681 100.4 78.0379 100.4C80.2419 60.7051 86.306 47.7555 91.0269 43.9275C92.9831 42.3483 94.848 42.2219 97.4301 42.5378C98.1474 42.6262 99.9471 43.0305 101.238 44.8497C102.634 46.8332 102.894 49.7643 101.982 53.327C94.0003 84.4186 95.8 120.981 96.7129 129.85C96.5564 130.153 96.4129 130.456 96.2434 130.772C94.3785 134.17 90.9096 137.708 86.7755 137.468C84.4151 137.354 82.3415 139.098 82.1981 141.397C82.0546 143.709 83.8673 145.692 86.2539 145.831C93.2439 146.236 99.8297 142.079 103.872 134.714C104.303 133.93 104.668 133.185 104.994 132.465C105.02 132.414 105.046 132.351 105.072 132.301C105.829 130.658 106.376 129.155 106.859 127.803C107.615 125.706 108.267 123.886 109.571 121.638C118.831 105.744 122.587 105.517 126.564 105.277C128.898 105.138 131.22 105.858 132.589 107.172C133.567 108.094 133.998 109.244 133.932 110.684C133.802 113.653 132.954 114.891 130.907 117.873L130.946 117.86Z" fill="black"/>
<path d="M292.383 124.316C291.04 116.243 291.783 109.345 292.566 102.043C292.67 101.095 292.774 100.16 292.866 99.2129C294.691 81.3993 295.709 61.8296 284.689 55.2348C278.194 51.3436 273.278 53.0492 270.93 54.4136C270.709 54.54 270.5 54.6916 270.278 54.8305C269.091 47.8946 267.109 41.1103 263.992 35.0713C261.319 29.8915 255.229 21.7933 244.535 25.8108C242.787 26.4678 240.597 27.7564 238.901 30.2579C237.284 27.1121 235.445 24.5853 233.346 22.6397C229.433 19.0012 224.621 17.3083 219.066 17.6494L218.57 17.6999C209.559 19.2539 205.842 25.4823 207.537 36.2463C207.537 36.2463 207.537 36.2968 207.55 36.3347C202.882 32.7467 198.161 32.8604 194.561 33.3658C190.61 33.9217 187.063 36.1326 184.82 39.43C182.902 42.2599 181.038 47.1997 183.111 54.6916C188.641 74.6403 189.945 97.4063 190.01 112.579C181.403 99.4656 175.912 96.8504 168.244 96.5219C163.471 96.3198 158.763 98.0001 155.699 101.02C152.999 103.673 151.708 107.109 151.956 110.937C152.295 116.231 154.303 119.061 156.638 122.32C158.007 124.24 159.559 126.413 161.345 129.761C162.923 132.718 164.058 136.28 165.493 140.803C167.344 146.653 169.653 153.93 174.048 163.658C177.438 171.175 191.105 194.888 227.829 194.547C229.316 194.535 230.855 194.484 232.42 194.383C254.094 193.688 270.239 187.548 280.411 176.152C290.975 164.302 295.017 146.931 292.422 124.493L292.396 124.291L292.383 124.316ZM245.317 44.5593C244.861 41.7041 244.17 34.9324 247.665 33.6311C250.169 32.6836 252.907 32.3172 256.272 38.8236C268.231 61.9812 261.149 98.5559 259.493 104.317C255.75 103.357 251.668 102.485 247.365 101.74C247.6 89.2954 247.443 78.4051 246.869 68.9803C247.156 55.5254 245.396 44.9762 245.317 44.5593ZM219.822 26.0003C222.861 25.874 225.26 26.7204 227.36 28.6913C235.602 36.36 239.423 60.5031 238.732 100.464C234.232 99.9078 229.616 99.5161 224.973 99.314C223.539 79.6432 221.283 66.2262 218.714 56.9151C218.714 56.8519 218.714 56.7888 218.714 56.7256C218.074 47.1492 216.144 35.4251 216.066 34.9703C214.827 27.1247 217.188 26.4678 219.809 26.0003H219.822ZM283.841 125.554C286.136 145.516 282.785 160.714 273.878 170.707C265.231 180.397 251.577 185.426 232.015 186.057C197.326 188.18 184.937 166.905 181.977 160.335C177.777 151.037 175.547 144.025 173.761 138.378C172.196 133.45 170.97 129.572 169.04 125.946C167.005 122.118 165.206 119.604 163.758 117.582C161.658 114.639 160.785 113.413 160.589 110.444C160.498 109.004 160.915 107.842 161.867 106.907C163.223 105.568 165.519 104.797 167.866 104.911C171.844 105.088 175.599 105.239 185.172 120.968C186.528 123.192 187.206 124.998 188.002 127.083C188.523 128.435 189.097 129.938 189.893 131.568C189.919 131.618 189.932 131.669 189.958 131.707C190.31 132.427 190.688 133.16 191.131 133.943C195.318 141.233 201.982 145.276 208.959 144.745C211.332 144.568 213.119 142.547 212.936 140.247C212.754 137.948 210.68 136.242 208.294 136.394C204.16 136.697 200.625 133.223 198.695 129.862C198.513 129.547 198.369 129.256 198.213 128.953C198.956 120.084 200.065 83.4839 191.484 52.5438C190.492 48.9937 190.701 46.0627 192.057 44.0539C193.322 42.2094 195.109 41.7672 195.826 41.6662C198.395 41.2998 200.273 41.4009 202.256 42.9422C207.055 46.6944 213.367 59.5303 216.314 99.175C214.984 99.1876 213.654 99.2255 212.349 99.2887C209.963 99.3898 208.124 101.348 208.228 103.66C208.333 105.972 210.315 107.715 212.741 107.652C234.767 106.667 259.911 111.72 270.552 116.963C271.191 117.279 271.869 117.418 272.547 117.418C274.112 117.406 275.612 116.572 276.368 115.119C277.451 113.06 276.603 110.533 274.464 109.484C272.573 108.549 270.304 107.64 267.748 106.755C269.209 101.904 271.7 88.9922 271.778 74.2107C271.843 73.8822 271.869 73.5537 271.843 73.2126C271.426 66.8831 273.395 62.7519 275.39 61.5896C276.564 60.9074 278.168 61.16 280.15 62.3476C287.506 66.7568 285.158 89.725 284.271 98.3791C284.18 99.314 284.076 100.236 283.971 101.171C283.163 108.676 282.328 116.42 283.841 125.554Z" fill="black"/>
<path d="M162.923 44.774C162.232 44.774 161.527 44.6477 160.862 44.3445C158.424 43.258 157.354 40.4659 158.476 38.1034C162.101 30.4347 167.409 23.3598 173.812 17.6494C175.781 15.8933 178.859 16.007 180.672 17.9273C182.485 19.835 182.367 22.8166 180.385 24.5727C174.921 29.4493 170.395 35.4882 167.292 42.0325C166.483 43.7381 164.749 44.7614 162.923 44.774Z" fill="black"/>
<path d="M146.57 42.0578C144.053 42.083 141.901 40.2132 141.692 37.737C140.766 26.6572 140.727 15.4258 141.601 4.34602C141.809 1.7561 144.144 -0.176866 146.804 0.0126405C149.478 0.214781 151.473 2.46359 151.277 5.05351C150.443 15.6406 150.482 26.3793 151.369 36.9664C151.59 39.5563 149.595 41.8304 146.922 42.0325C146.804 42.0325 146.687 42.0451 146.57 42.0451V42.0578Z" fill="black"/>
<path d="M129.851 44.9762C127.673 45.0015 125.665 43.5739 125.104 41.4388C123.043 33.6058 119.144 26.1645 113.836 19.9361C112.128 17.9273 112.428 14.971 114.488 13.316C116.562 11.661 119.614 11.9516 121.322 13.9477C127.53 21.25 132.094 29.9547 134.494 39.1141C135.159 41.6283 133.581 44.1929 130.985 44.8372C130.594 44.9383 130.216 44.9762 129.825 44.9888L129.851 44.9762Z" fill="black"/>
</g>
</g>
<path d="M379.045 147.144L419.52 55.0319C423.451 46.2048 424.882 39.0196 425.244 34.35C425.349 32.9943 426.419 31.9097 427.775 31.7892L440.789 30.5691C441.979 30.4637 443.109 31.1114 443.606 32.211L492.788 141.571C500.244 158.005 502.94 165.566 513.153 168.715C514.313 169.076 515.127 170.161 515.127 171.381V173.655C515.127 175.207 513.876 176.457 512.325 176.457H455.822C454.271 176.457 453.021 175.207 453.021 173.655V171.321C453.021 170.01 453.955 168.88 455.235 168.594C466.954 166.003 466.728 160.068 462.556 150.413L459.528 143.438C456.741 136.931 451.62 135.997 445.805 135.997H407.665C401.384 135.997 396.97 137.157 394.409 143.212L391.849 149.027C387.224 159.827 391.999 166.033 405.195 168.639C406.505 168.895 407.439 170.055 407.439 171.381V173.685C407.439 175.237 406.189 176.487 404.637 176.487H358.589C357.037 176.487 355.787 175.237 355.787 173.685V171.245C355.787 169.98 356.631 168.88 357.851 168.549C369.344 165.476 373.984 158.622 379.045 147.174V147.144ZM407.665 125.98H445.579C448.14 125.98 450.46 123.886 448.833 120.166L428.603 75.051C426.75 71.0894 425.816 71.0894 424.19 75.051L404.185 120.874C402.785 124.127 405.345 125.995 407.68 125.995L407.665 125.98Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M527.675 156.227V50.1663C527.675 40.5107 524.075 37.3023 515.685 37.4378C514.103 37.468 512.777 36.2328 512.777 34.6361V32.708C512.777 31.3523 513.741 30.2074 515.067 29.9514L545.344 24.3328C552.093 23.1729 555.572 26.2006 555.572 32.4669V156.212C555.572 162.825 558.329 166.184 563.179 165.883C564.836 165.777 566.267 166.997 566.267 168.669V168.745C566.267 169.227 566.162 169.709 565.921 170.115C562.682 175.689 555.316 177.843 548.598 177.843C536.502 177.843 527.66 171.094 527.66 156.212L527.675 156.227Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M581.748 156.227V50.1663C581.748 40.5107 578.148 37.3023 569.758 37.4378C568.176 37.468 566.851 36.2328 566.851 34.6361V32.708C566.851 31.3523 567.815 30.2074 569.14 29.9514L599.417 24.3328C606.166 23.1729 609.645 26.2006 609.645 32.4669V156.212C609.645 162.825 612.402 166.184 617.252 165.883C618.909 165.777 620.34 166.997 620.34 168.669V168.745C620.34 169.227 620.235 169.709 619.994 170.115C616.755 175.689 609.389 177.843 602.671 177.843C590.575 177.843 581.733 171.094 581.733 156.212L581.748 156.227Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M688.158 155.052V53.4201C688.158 45.2558 683.383 41.4599 674.405 39.818C673.079 39.577 672.115 38.4171 672.115 37.0765V34.817C672.115 33.2655 673.365 32.0152 674.917 32.0152H733.046C734.598 32.0152 735.848 33.2655 735.848 34.817V37.0765C735.848 38.4171 734.884 39.577 733.558 39.818C724.566 41.4448 719.806 45.2408 719.806 53.4201V92.9613C719.806 98.3087 723.993 100.644 729.808 100.644H770.283C776.097 100.644 780.285 98.3238 780.285 92.9613V53.4201C780.285 45.2558 775.51 41.4599 766.532 39.818C765.206 39.577 764.242 38.4171 764.242 37.0765V34.817C764.242 33.2655 765.493 32.0152 767.044 32.0152H825.173C826.725 32.0152 827.975 33.2655 827.975 34.817V37.0765C827.975 38.4171 827.011 39.577 825.686 39.818C816.708 41.4448 811.933 45.2408 811.933 53.4201V155.067C811.933 163.232 816.708 167.027 825.686 168.669C827.011 168.91 827.975 170.07 827.975 171.411V173.67C827.975 175.222 826.725 176.472 825.173 176.472H767.044C765.493 176.472 764.242 175.222 764.242 173.67V171.411C764.242 170.07 765.206 168.91 766.532 168.669C775.525 167.043 780.285 163.247 780.285 155.067V117.62C780.285 112.272 776.097 109.938 770.524 109.938H729.582C723.993 109.938 719.821 112.257 719.821 117.62V155.067C719.821 163.232 724.596 167.027 733.573 168.669C734.899 168.91 735.863 170.07 735.863 171.411V173.67C735.863 175.222 734.613 176.472 733.061 176.472H674.932C673.381 176.472 672.13 175.222 672.13 173.67V171.411C672.13 170.07 673.094 168.91 674.42 168.669C683.398 167.043 688.173 163.247 688.173 155.067L688.158 155.052Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M834.929 152.265C834.929 133.421 850.745 122.033 896.101 115.511C902.608 114.577 904.476 112.95 904.476 106.909V103.189C904.476 86.4384 899.128 77.8373 885.873 77.8373C859.361 77.8373 879.591 108.777 855.4 108.777C846.091 108.777 841.677 102.963 841.677 95.5216C841.677 77.6114 867.029 69.4772 892.621 69.4772C920.066 69.4772 932.388 79.4792 932.388 111.805V156.227C932.388 162.855 934.346 166.379 938.941 165.973C940.553 165.837 941.923 167.148 941.923 168.759C941.923 169.226 941.818 169.708 941.577 170.115C938.414 175.688 931.891 177.843 924.947 177.843C911.917 177.843 905.877 170.16 904.943 161.8C904.717 159.013 902.849 158.546 900.755 161.107C894.248 169.241 882.152 177.858 865.402 177.858C849.585 177.858 834.929 170.416 834.929 152.28V152.265ZM879.817 162.267C894.007 162.267 904.476 151.331 904.476 136.675V130.634C904.476 125.287 902.623 122.952 895.167 123.66C869.348 125.98 863.534 137.608 863.534 146.692C863.534 155.067 868.414 162.282 879.817 162.282V162.267Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1038.21 156.227V114.125C1038.21 98.0829 1030.3 85.746 1015.89 85.746C1001.47 85.746 992.856 98.0678 992.856 114.125V154.359C992.856 164.211 996.2 167.751 1005.07 168.971C1006.46 169.167 1007.51 170.341 1007.51 171.742V173.655C1007.51 175.207 1006.26 176.457 1004.71 176.457H952.863C951.311 176.457 950.061 175.207 950.061 173.655V171.757C950.061 170.357 951.115 169.182 952.501 168.986C961.584 167.766 964.944 164.226 964.944 154.359V95.7481C964.944 86.0925 961.343 82.884 952.953 83.0196C951.372 83.0497 950.046 81.8145 950.046 80.2178V78.2897C950.046 76.934 951.01 75.7892 952.336 75.5331L982.613 69.9145C989.361 68.7546 992.841 71.7824 992.841 77.1298C992.841 85.505 996.561 87.5988 999.589 84.1041C1004.47 78.2897 1013.31 68.9806 1031.69 68.9806C1048.91 68.9806 1066.11 77.3558 1066.11 108.748V156.197C1066.11 162.81 1068.87 166.169 1073.72 165.868C1075.37 165.762 1076.8 166.982 1076.8 168.654V168.73C1076.8 169.212 1076.7 169.694 1076.46 170.1C1073.22 175.674 1065.85 177.828 1059.13 177.828C1047.04 177.828 1038.2 171.08 1038.2 156.197L1038.21 156.227Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1082.63 125.061C1082.63 88.7735 1107.52 69.4775 1133.11 69.4775C1157.06 69.4775 1165.21 86.6948 1165.21 67.6096V50.1663C1165.21 40.5107 1161.61 37.3023 1153.22 37.4378C1151.64 37.468 1150.31 36.2328 1150.31 34.6361V32.708C1150.31 31.3523 1151.27 30.2074 1152.6 29.9514L1182.88 24.3328C1189.63 23.1729 1193.1 26.2006 1193.1 32.4669V156.212C1193.1 162.825 1195.86 166.184 1200.71 165.883C1202.37 165.777 1203.8 166.997 1203.8 168.669V168.745C1203.8 169.227 1203.69 169.709 1203.45 170.115C1200.21 175.689 1192.86 177.843 1186.36 177.843C1178.67 177.843 1170.77 174.815 1168.22 167.841C1166.82 164.12 1164.73 162.493 1162.18 162.493C1156.59 162.493 1148.46 177.843 1127.29 177.843C1104.04 177.843 1082.63 158.532 1082.63 125.046V125.061ZM1142.64 161.574C1152.64 161.574 1165.21 155.534 1165.21 135.289V117.62C1165.21 89.2405 1148.92 78.0786 1135.89 78.0786C1120.77 78.0786 1111.94 93.4281 1111.94 114.592C1111.94 139.718 1124.27 161.574 1142.64 161.574Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1219.29 167.826C1218.9 167.539 1218.6 167.163 1218.39 166.726C1212.86 154.781 1212.35 141.103 1221.02 141.103C1224.28 141.103 1226.37 142.73 1227.53 146.225C1233.12 162.975 1242.88 169.483 1256.6 169.483C1272.19 169.483 1276.61 161.574 1276.61 154.133C1276.61 143.905 1267.07 140.636 1252.41 136.223C1233.57 130.408 1215.66 121.34 1215.66 101.095C1215.66 80.8501 1234.5 69.4623 1258.45 69.4623C1272.06 69.4623 1284.77 73.213 1292.72 78.7865C1293.13 79.0727 1293.46 79.4643 1293.67 79.9162C1299.19 91.8463 1299.68 105.268 1291.02 105.268C1287.77 105.268 1285.67 103.641 1284.51 100.146C1278.93 83.3958 1268.92 77.3554 1257.07 77.3554C1245.91 77.3554 1240.79 82.9439 1240.79 91.3041C1240.79 101.773 1249.63 106.895 1260.79 110.374C1277.54 115.496 1302.65 121.777 1302.65 145.035C1302.65 166.666 1280.33 177.828 1254.98 177.828C1240 177.828 1227.23 173.625 1219.28 167.795L1219.29 167.826Z" fill="#fff" stroke="#fff" stroke-width="0.393644" stroke-miterlimit="10"/>
<defs>
<clipPath id="clip0_14027_2415">
<rect width="294" height="196" fill="white"/>
</clipPath>
<clipPath id="clip1_14027_2415">
<rect width="294" height="196" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1,29 +0,0 @@
<svg width="1305" height="196" viewBox="0 0 1305 196" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_14027_2415)">
<g clip-path="url(#clip1_14027_2415)">
<path d="M282.419 58.7848C273.03 53.1628 266.757 61.779 267.526 73.4779L267.448 73.5663C267.474 61.3495 265.779 47.8566 260.145 36.9411C258.15 33.0751 254.107 26.7204 246.113 29.7146C242.605 31.0285 239.423 34.9828 241.066 45.1909C241.066 45.1909 242.892 55.9043 242.552 69.3719V69.5614C240.27 32.4182 231.663 21.0857 219.352 21.8185C215.414 22.5007 210.028 24.1557 211.841 35.5766C211.841 35.5766 213.81 47.4902 214.449 56.9782L214.488 57.4583H214.449C208.659 36.979 200.86 36.701 195.213 37.4969C190.088 38.2171 184.493 43.3969 187.323 53.605C196.204 85.6315 194.47 124.202 193.805 129.723C191.992 125.946 191.431 122.952 188.914 118.808C178.794 102.169 173.982 100.944 168.074 100.691C162.206 100.438 155.868 103.963 156.285 110.672C156.716 117.38 160.224 118.492 165.205 127.841C169.092 135.118 170.2 144.656 178.025 161.99C184.506 176.342 201.447 192.084 232.302 190.214C257.302 189.405 294.639 180.89 288.144 124.973C286.527 115.258 287.74 107.122 288.588 98.7833C289.905 85.8463 291.835 64.4068 282.432 58.7722L282.419 58.7848Z" fill="#FFE165"/>
<path d="M126.317 101.083C120.409 101.449 115.636 102.75 105.829 119.566C103.391 123.748 102.895 126.754 101.148 130.557C100.378 125.049 97.9134 86.516 106.181 54.3378C108.816 44.0918 103.13 39.0131 97.9916 38.3814C92.3318 37.6865 84.5201 38.1034 79.1211 58.7849H79.0559L79.1341 58.1911C79.5906 48.6905 81.3381 36.7516 81.3381 36.7516C82.9161 25.2928 77.517 23.7389 73.5655 23.1198C61.2808 22.6145 52.9083 33.9975 51.2912 70.8122H51.2652C50.7044 57.4836 52.3084 46.8713 52.3084 46.8713C53.756 36.6253 50.4957 32.7341 46.9616 31.4833C38.9152 28.6281 34.9898 35.0587 33.0727 38.9625C27.6476 49.9792 26.2 63.4973 26.4609 75.7141L26.3826 75.6257C26.9173 63.9142 20.488 55.4117 11.2027 61.1979C1.9174 66.9968 4.25176 88.3984 5.8167 101.31C6.83391 109.636 8.19019 117.747 6.75567 127.487C1.33054 183.505 38.8239 191.351 63.8368 191.717C94.7183 193.044 111.359 176.986 117.566 162.521C125.052 145.061 125.991 135.497 129.734 128.157C134.533 118.719 138.028 117.544 138.328 110.836C138.628 104.127 132.225 100.716 126.356 101.07L126.317 101.083Z" fill="#FFE165"/>
<path d="M138.679 101.171C135.549 98.2021 130.842 96.6228 126.056 96.9008C118.387 97.3682 112.949 100.084 104.59 113.35C104.368 98.1768 105.242 75.3981 110.38 55.361C112.31 47.8313 110.367 42.9168 108.385 40.1247C106.076 36.8652 102.49 34.7175 98.5256 34.2374C94.9132 33.7952 90.1923 33.7699 85.5888 37.4337C85.5888 37.3832 85.6018 37.32 85.6018 37.32C87.0885 26.5561 83.2544 20.3908 74.2169 19.0011L73.7213 18.9505C68.1527 18.7105 63.3797 20.4792 59.5325 24.1935C57.472 26.177 55.6854 28.7417 54.1335 31.9128C52.399 29.4492 50.169 28.1984 48.4084 27.5668C37.6495 23.7387 31.7027 31.938 29.1205 37.1684C26.1211 43.2579 24.2562 50.0801 23.2129 57.0413C22.9912 56.9023 22.7825 56.7634 22.5608 56.637C20.1873 55.3105 15.2447 53.6934 8.82849 57.6983C-2.04784 64.4952 -0.665478 84.027 1.49935 101.815C1.61673 102.763 1.7341 103.698 1.85147 104.645C2.77739 111.935 3.65115 118.82 2.45136 126.919L2.42528 127.121C0.247403 149.596 4.61619 166.892 15.4143 178.553C25.795 189.771 42.0574 195.608 63.6144 195.924C65.1924 195.987 66.7312 196.013 68.231 196C105.059 195.671 118.27 171.73 121.517 164.15C125.716 154.346 127.894 147.032 129.629 141.144C130.972 136.596 132.041 133.008 133.554 130.026C135.276 126.641 136.788 124.442 138.119 122.497C140.388 119.187 142.344 116.331 142.579 111.025C142.748 107.185 141.392 103.774 138.64 101.171H138.679ZM65.6488 30.1314C67.7224 28.1353 70.1089 27.2509 73.1345 27.3141C75.7557 27.731 78.1292 28.3501 77.0468 36.183C76.9686 36.6757 75.2732 48.4377 74.8168 58.0141C74.8168 58.0773 74.8168 58.1404 74.8168 58.2036C72.4302 67.5526 70.4349 81.0202 69.3656 100.704C64.7359 100.981 60.1194 101.462 55.6332 102.093C54.1856 62.158 57.5372 37.9391 65.6358 30.1314H65.6488ZM36.9452 40.7817C40.1925 34.2121 42.9181 34.5406 45.4481 35.4376C48.9561 36.6883 48.4084 43.4727 48.0041 46.29C47.9389 46.7448 46.374 57.3192 46.9217 70.7742C46.5174 80.2116 46.5696 91.0893 47.0521 103.534C42.7616 104.355 38.6927 105.302 34.976 106.326C33.2155 100.59 25.4299 64.1541 36.9452 40.7943V40.7817ZM130.946 117.86C129.537 119.907 127.79 122.459 125.821 126.325C123.956 129.976 122.808 133.892 121.335 138.832C119.652 144.505 117.553 151.567 113.549 160.929C110.706 167.549 98.7603 189.051 63.8752 187.535C44.4309 187.257 30.6855 182.482 21.8566 172.943C12.7539 163.114 9.11539 147.979 11.0324 127.98C12.3626 118.833 11.3846 111.088 10.4326 103.609C10.3152 102.674 10.1978 101.752 10.0804 100.817C9.03715 92.1884 6.24634 69.2581 13.5103 64.7226C15.4664 63.4972 17.0705 63.2192 18.2572 63.8762C20.2786 65.0006 22.313 69.0939 22.0261 75.436C22.0131 75.7772 22.0522 76.1056 22.1174 76.4341C22.4826 91.2156 25.2082 104.077 26.7601 108.903C24.2171 109.825 21.974 110.785 20.0961 111.745C17.9834 112.832 17.1879 115.359 18.3094 117.405C19.0919 118.833 20.6047 119.642 22.1696 119.629C22.8347 119.629 23.5128 119.465 24.1519 119.136C34.7022 113.716 59.7281 108.208 81.7807 108.802C84.1803 108.84 86.1495 107.046 86.2147 104.734C86.28 102.422 84.402 100.501 82.0155 100.438C80.6983 100.4 79.3681 100.4 78.0379 100.4C80.2419 60.7051 86.306 47.7555 91.0269 43.9275C92.9831 42.3483 94.848 42.2219 97.4301 42.5378C98.1474 42.6262 99.9471 43.0305 101.238 44.8497C102.634 46.8332 102.894 49.7643 101.982 53.327C94.0003 84.4186 95.8 120.981 96.7129 129.85C96.5564 130.153 96.4129 130.456 96.2434 130.772C94.3785 134.17 90.9096 137.708 86.7755 137.468C84.4151 137.354 82.3415 139.098 82.1981 141.397C82.0546 143.709 83.8673 145.692 86.2539 145.831C93.2439 146.236 99.8297 142.079 103.872 134.714C104.303 133.93 104.668 133.185 104.994 132.465C105.02 132.414 105.046 132.351 105.072 132.301C105.829 130.658 106.376 129.155 106.859 127.803C107.615 125.706 108.267 123.886 109.571 121.638C118.831 105.744 122.587 105.517 126.564 105.277C128.898 105.138 131.22 105.858 132.589 107.172C133.567 108.094 133.998 109.244 133.932 110.684C133.802 113.653 132.954 114.891 130.907 117.873L130.946 117.86Z" fill="black"/>
<path d="M292.383 124.316C291.04 116.243 291.783 109.345 292.566 102.043C292.67 101.095 292.774 100.16 292.866 99.2129C294.691 81.3993 295.709 61.8296 284.689 55.2348C278.194 51.3436 273.278 53.0492 270.93 54.4136C270.709 54.54 270.5 54.6916 270.278 54.8305C269.091 47.8946 267.109 41.1103 263.992 35.0713C261.319 29.8915 255.229 21.7933 244.535 25.8108C242.787 26.4678 240.597 27.7564 238.901 30.2579C237.284 27.1121 235.445 24.5853 233.346 22.6397C229.433 19.0012 224.621 17.3083 219.066 17.6494L218.57 17.6999C209.559 19.2539 205.842 25.4823 207.537 36.2463C207.537 36.2463 207.537 36.2968 207.55 36.3347C202.882 32.7467 198.161 32.8604 194.561 33.3658C190.61 33.9217 187.063 36.1326 184.82 39.43C182.902 42.2599 181.038 47.1997 183.111 54.6916C188.641 74.6403 189.945 97.4063 190.01 112.579C181.403 99.4656 175.912 96.8504 168.244 96.5219C163.471 96.3198 158.763 98.0001 155.699 101.02C152.999 103.673 151.708 107.109 151.956 110.937C152.295 116.231 154.303 119.061 156.638 122.32C158.007 124.24 159.559 126.413 161.345 129.761C162.923 132.718 164.058 136.28 165.493 140.803C167.344 146.653 169.653 153.93 174.048 163.658C177.438 171.175 191.105 194.888 227.829 194.547C229.316 194.535 230.855 194.484 232.42 194.383C254.094 193.688 270.239 187.548 280.411 176.152C290.975 164.302 295.017 146.931 292.422 124.493L292.396 124.291L292.383 124.316ZM245.317 44.5593C244.861 41.7041 244.17 34.9324 247.665 33.6311C250.169 32.6836 252.907 32.3172 256.272 38.8236C268.231 61.9812 261.149 98.5559 259.493 104.317C255.75 103.357 251.668 102.485 247.365 101.74C247.6 89.2954 247.443 78.4051 246.869 68.9803C247.156 55.5254 245.396 44.9762 245.317 44.5593ZM219.822 26.0003C222.861 25.874 225.26 26.7204 227.36 28.6913C235.602 36.36 239.423 60.5031 238.732 100.464C234.232 99.9078 229.616 99.5161 224.973 99.314C223.539 79.6432 221.283 66.2262 218.714 56.9151C218.714 56.8519 218.714 56.7888 218.714 56.7256C218.074 47.1492 216.144 35.4251 216.066 34.9703C214.827 27.1247 217.188 26.4678 219.809 26.0003H219.822ZM283.841 125.554C286.136 145.516 282.785 160.714 273.878 170.707C265.231 180.397 251.577 185.426 232.015 186.057C197.326 188.18 184.937 166.905 181.977 160.335C177.777 151.037 175.547 144.025 173.761 138.378C172.196 133.45 170.97 129.572 169.04 125.946C167.005 122.118 165.206 119.604 163.758 117.582C161.658 114.639 160.785 113.413 160.589 110.444C160.498 109.004 160.915 107.842 161.867 106.907C163.223 105.568 165.519 104.797 167.866 104.911C171.844 105.088 175.599 105.239 185.172 120.968C186.528 123.192 187.206 124.998 188.002 127.083C188.523 128.435 189.097 129.938 189.893 131.568C189.919 131.618 189.932 131.669 189.958 131.707C190.31 132.427 190.688 133.16 191.131 133.943C195.318 141.233 201.982 145.276 208.959 144.745C211.332 144.568 213.119 142.547 212.936 140.247C212.754 137.948 210.68 136.242 208.294 136.394C204.16 136.697 200.625 133.223 198.695 129.862C198.513 129.547 198.369 129.256 198.213 128.953C198.956 120.084 200.065 83.4839 191.484 52.5438C190.492 48.9937 190.701 46.0627 192.057 44.0539C193.322 42.2094 195.109 41.7672 195.826 41.6662C198.395 41.2998 200.273 41.4009 202.256 42.9422C207.055 46.6944 213.367 59.5303 216.314 99.175C214.984 99.1876 213.654 99.2255 212.349 99.2887C209.963 99.3898 208.124 101.348 208.228 103.66C208.333 105.972 210.315 107.715 212.741 107.652C234.767 106.667 259.911 111.72 270.552 116.963C271.191 117.279 271.869 117.418 272.547 117.418C274.112 117.406 275.612 116.572 276.368 115.119C277.451 113.06 276.603 110.533 274.464 109.484C272.573 108.549 270.304 107.64 267.748 106.755C269.209 101.904 271.7 88.9922 271.778 74.2107C271.843 73.8822 271.869 73.5537 271.843 73.2126C271.426 66.8831 273.395 62.7519 275.39 61.5896C276.564 60.9074 278.168 61.16 280.15 62.3476C287.506 66.7568 285.158 89.725 284.271 98.3791C284.18 99.314 284.076 100.236 283.971 101.171C283.163 108.676 282.328 116.42 283.841 125.554Z" fill="black"/>
<path d="M162.923 44.774C162.232 44.774 161.527 44.6477 160.862 44.3445C158.424 43.258 157.354 40.4659 158.476 38.1034C162.101 30.4347 167.409 23.3598 173.812 17.6494C175.781 15.8933 178.859 16.007 180.672 17.9273C182.485 19.835 182.367 22.8166 180.385 24.5727C174.921 29.4493 170.395 35.4882 167.292 42.0325C166.483 43.7381 164.749 44.7614 162.923 44.774Z" fill="black"/>
<path d="M146.57 42.0578C144.053 42.083 141.901 40.2132 141.692 37.737C140.766 26.6572 140.727 15.4258 141.601 4.34602C141.809 1.7561 144.144 -0.176866 146.804 0.0126405C149.478 0.214781 151.473 2.46359 151.277 5.05351C150.443 15.6406 150.482 26.3793 151.369 36.9664C151.59 39.5563 149.595 41.8304 146.922 42.0325C146.804 42.0325 146.687 42.0451 146.57 42.0451V42.0578Z" fill="black"/>
<path d="M129.851 44.9762C127.673 45.0015 125.665 43.5739 125.104 41.4388C123.043 33.6058 119.144 26.1645 113.836 19.9361C112.128 17.9273 112.428 14.971 114.488 13.316C116.562 11.661 119.614 11.9516 121.322 13.9477C127.53 21.25 132.094 29.9547 134.494 39.1141C135.159 41.6283 133.581 44.1929 130.985 44.8372C130.594 44.9383 130.216 44.9762 129.825 44.9888L129.851 44.9762Z" fill="black"/>
</g>
</g>
<path d="M379.045 147.144L419.52 55.0319C423.451 46.2048 424.882 39.0196 425.244 34.35C425.349 32.9943 426.419 31.9097 427.775 31.7892L440.789 30.5691C441.979 30.4637 443.109 31.1114 443.606 32.211L492.788 141.571C500.244 158.005 502.94 165.566 513.153 168.715C514.313 169.076 515.127 170.161 515.127 171.381V173.655C515.127 175.207 513.876 176.457 512.325 176.457H455.822C454.271 176.457 453.021 175.207 453.021 173.655V171.321C453.021 170.01 453.955 168.88 455.235 168.594C466.954 166.003 466.728 160.068 462.556 150.413L459.528 143.438C456.741 136.931 451.62 135.997 445.805 135.997H407.665C401.384 135.997 396.97 137.157 394.409 143.212L391.849 149.027C387.224 159.827 391.999 166.033 405.195 168.639C406.505 168.895 407.439 170.055 407.439 171.381V173.685C407.439 175.237 406.189 176.487 404.637 176.487H358.589C357.037 176.487 355.787 175.237 355.787 173.685V171.245C355.787 169.98 356.631 168.88 357.851 168.549C369.344 165.476 373.984 158.622 379.045 147.174V147.144ZM407.665 125.98H445.579C448.14 125.98 450.46 123.886 448.833 120.166L428.603 75.051C426.75 71.0894 425.816 71.0894 424.19 75.051L404.185 120.874C402.785 124.127 405.345 125.995 407.68 125.995L407.665 125.98Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M527.675 156.227V50.1663C527.675 40.5107 524.075 37.3023 515.685 37.4378C514.103 37.468 512.777 36.2328 512.777 34.6361V32.708C512.777 31.3523 513.741 30.2074 515.067 29.9514L545.344 24.3328C552.093 23.1729 555.572 26.2006 555.572 32.4669V156.212C555.572 162.825 558.329 166.184 563.179 165.883C564.836 165.777 566.267 166.997 566.267 168.669V168.745C566.267 169.227 566.162 169.709 565.921 170.115C562.682 175.689 555.316 177.843 548.598 177.843C536.502 177.843 527.66 171.094 527.66 156.212L527.675 156.227Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M581.748 156.227V50.1663C581.748 40.5107 578.148 37.3023 569.758 37.4378C568.176 37.468 566.851 36.2328 566.851 34.6361V32.708C566.851 31.3523 567.815 30.2074 569.14 29.9514L599.417 24.3328C606.166 23.1729 609.645 26.2006 609.645 32.4669V156.212C609.645 162.825 612.402 166.184 617.252 165.883C618.909 165.777 620.34 166.997 620.34 168.669V168.745C620.34 169.227 620.235 169.709 619.994 170.115C616.755 175.689 609.389 177.843 602.671 177.843C590.575 177.843 581.733 171.094 581.733 156.212L581.748 156.227Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M688.158 155.052V53.4201C688.158 45.2558 683.383 41.4599 674.405 39.818C673.079 39.577 672.115 38.4171 672.115 37.0765V34.817C672.115 33.2655 673.365 32.0152 674.917 32.0152H733.046C734.598 32.0152 735.848 33.2655 735.848 34.817V37.0765C735.848 38.4171 734.884 39.577 733.558 39.818C724.566 41.4448 719.806 45.2408 719.806 53.4201V92.9613C719.806 98.3087 723.993 100.644 729.808 100.644H770.283C776.097 100.644 780.285 98.3238 780.285 92.9613V53.4201C780.285 45.2558 775.51 41.4599 766.532 39.818C765.206 39.577 764.242 38.4171 764.242 37.0765V34.817C764.242 33.2655 765.493 32.0152 767.044 32.0152H825.173C826.725 32.0152 827.975 33.2655 827.975 34.817V37.0765C827.975 38.4171 827.011 39.577 825.686 39.818C816.708 41.4448 811.933 45.2408 811.933 53.4201V155.067C811.933 163.232 816.708 167.027 825.686 168.669C827.011 168.91 827.975 170.07 827.975 171.411V173.67C827.975 175.222 826.725 176.472 825.173 176.472H767.044C765.493 176.472 764.242 175.222 764.242 173.67V171.411C764.242 170.07 765.206 168.91 766.532 168.669C775.525 167.043 780.285 163.247 780.285 155.067V117.62C780.285 112.272 776.097 109.938 770.524 109.938H729.582C723.993 109.938 719.821 112.257 719.821 117.62V155.067C719.821 163.232 724.596 167.027 733.573 168.669C734.899 168.91 735.863 170.07 735.863 171.411V173.67C735.863 175.222 734.613 176.472 733.061 176.472H674.932C673.381 176.472 672.13 175.222 672.13 173.67V171.411C672.13 170.07 673.094 168.91 674.42 168.669C683.398 167.043 688.173 163.247 688.173 155.067L688.158 155.052Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M834.929 152.265C834.929 133.421 850.745 122.033 896.101 115.511C902.608 114.577 904.476 112.95 904.476 106.909V103.189C904.476 86.4384 899.128 77.8373 885.873 77.8373C859.361 77.8373 879.591 108.777 855.4 108.777C846.091 108.777 841.677 102.963 841.677 95.5216C841.677 77.6114 867.029 69.4772 892.621 69.4772C920.066 69.4772 932.388 79.4792 932.388 111.805V156.227C932.388 162.855 934.346 166.379 938.941 165.973C940.553 165.837 941.923 167.148 941.923 168.759C941.923 169.226 941.818 169.708 941.577 170.115C938.414 175.688 931.891 177.843 924.947 177.843C911.917 177.843 905.877 170.16 904.943 161.8C904.717 159.013 902.849 158.546 900.755 161.107C894.248 169.241 882.152 177.858 865.402 177.858C849.585 177.858 834.929 170.416 834.929 152.28V152.265ZM879.817 162.267C894.007 162.267 904.476 151.331 904.476 136.675V130.634C904.476 125.287 902.623 122.952 895.167 123.66C869.348 125.98 863.534 137.608 863.534 146.692C863.534 155.067 868.414 162.282 879.817 162.282V162.267Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1038.21 156.227V114.125C1038.21 98.0829 1030.3 85.746 1015.89 85.746C1001.47 85.746 992.856 98.0678 992.856 114.125V154.359C992.856 164.211 996.2 167.751 1005.07 168.971C1006.46 169.167 1007.51 170.341 1007.51 171.742V173.655C1007.51 175.207 1006.26 176.457 1004.71 176.457H952.863C951.311 176.457 950.061 175.207 950.061 173.655V171.757C950.061 170.357 951.115 169.182 952.501 168.986C961.584 167.766 964.944 164.226 964.944 154.359V95.7481C964.944 86.0925 961.343 82.884 952.953 83.0196C951.372 83.0497 950.046 81.8145 950.046 80.2178V78.2897C950.046 76.934 951.01 75.7892 952.336 75.5331L982.613 69.9145C989.361 68.7546 992.841 71.7824 992.841 77.1298C992.841 85.505 996.561 87.5988 999.589 84.1041C1004.47 78.2897 1013.31 68.9806 1031.69 68.9806C1048.91 68.9806 1066.11 77.3558 1066.11 108.748V156.197C1066.11 162.81 1068.87 166.169 1073.72 165.868C1075.37 165.762 1076.8 166.982 1076.8 168.654V168.73C1076.8 169.212 1076.7 169.694 1076.46 170.1C1073.22 175.674 1065.85 177.828 1059.13 177.828C1047.04 177.828 1038.2 171.08 1038.2 156.197L1038.21 156.227Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1082.63 125.061C1082.63 88.7735 1107.52 69.4775 1133.11 69.4775C1157.06 69.4775 1165.21 86.6948 1165.21 67.6096V50.1663C1165.21 40.5107 1161.61 37.3023 1153.22 37.4378C1151.64 37.468 1150.31 36.2328 1150.31 34.6361V32.708C1150.31 31.3523 1151.27 30.2074 1152.6 29.9514L1182.88 24.3328C1189.63 23.1729 1193.1 26.2006 1193.1 32.4669V156.212C1193.1 162.825 1195.86 166.184 1200.71 165.883C1202.37 165.777 1203.8 166.997 1203.8 168.669V168.745C1203.8 169.227 1203.69 169.709 1203.45 170.115C1200.21 175.689 1192.86 177.843 1186.36 177.843C1178.67 177.843 1170.77 174.815 1168.22 167.841C1166.82 164.12 1164.73 162.493 1162.18 162.493C1156.59 162.493 1148.46 177.843 1127.29 177.843C1104.04 177.843 1082.63 158.532 1082.63 125.046V125.061ZM1142.64 161.574C1152.64 161.574 1165.21 155.534 1165.21 135.289V117.62C1165.21 89.2405 1148.92 78.0786 1135.89 78.0786C1120.77 78.0786 1111.94 93.4281 1111.94 114.592C1111.94 139.718 1124.27 161.574 1142.64 161.574Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<path d="M1219.29 167.826C1218.9 167.539 1218.6 167.163 1218.39 166.726C1212.86 154.781 1212.35 141.103 1221.02 141.103C1224.28 141.103 1226.37 142.73 1227.53 146.225C1233.12 162.975 1242.88 169.483 1256.6 169.483C1272.19 169.483 1276.61 161.574 1276.61 154.133C1276.61 143.905 1267.07 140.636 1252.41 136.223C1233.57 130.408 1215.66 121.34 1215.66 101.095C1215.66 80.8501 1234.5 69.4623 1258.45 69.4623C1272.06 69.4623 1284.77 73.213 1292.72 78.7865C1293.13 79.0727 1293.46 79.4643 1293.67 79.9162C1299.19 91.8463 1299.68 105.268 1291.02 105.268C1287.77 105.268 1285.67 103.641 1284.51 100.146C1278.93 83.3958 1268.92 77.3554 1257.07 77.3554C1245.91 77.3554 1240.79 82.9439 1240.79 91.3041C1240.79 101.773 1249.63 106.895 1260.79 110.374C1277.54 115.496 1302.65 121.777 1302.65 145.035C1302.65 166.666 1280.33 177.828 1254.98 177.828C1240 177.828 1227.23 173.625 1219.28 167.795L1219.29 167.826Z" fill="black" stroke="black" stroke-width="0.393644" stroke-miterlimit="10"/>
<defs>
<clipPath id="clip0_14027_2415">
<rect width="294" height="196" fill="white"/>
</clipPath>
<clipPath id="clip1_14027_2415">
<rect width="294" height="196" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

View File

@@ -1,201 +0,0 @@
@startuml openhands
!pragma useIntermediatePackages false
class openhands.action.agent.AgentEchoAction {
content: str
runnable: bool
action: str
}
class openhands.action.agent.AgentFinishAction {
runnable: bool
action: str
}
class openhands.observation.AgentMessageObservation {
role: str
observation: str
}
class openhands.action.agent.AgentSummarizeAction {
summary: str
action: str
}
class openhands.action.agent.AgentThinkAction {
thought: str
runnable: bool
action: str
}
class openhands.action.base.ExecutableAction {
}
class openhands.action.base.NotExecutableAction {
}
class openhands.observation.Observation {
content: str
}
class openhands.action.base.Action {
}
class openhands.action.base.NullAction {
action: str
}
class openhands.action.bash.CmdRunAction {
command: str
action: str
}
class openhands.action.browse.BrowseURLAction {
url: str
action: str
}
class openhands.observation.BrowserOutputObservation {
url: str
status_code: int
error: bool
observation: str
}
class openhands.action.fileop.FileReadAction {
path: str
action: str
}
class openhands.observation.FileReadObservation {
path: str
observation: str
}
class openhands.action.fileop.FileWriteAction {
path: str
contents: str
action: str
}
class openhands.observation.FileWriteObservation {
path: str
observation: str
}
class openhands.action.tasks.AddTaskAction {
parent: str
goal: str
subtasks: list
action: str
}
class openhands.action.tasks.ModifyTaskAction {
id: str
state: str
action: str
}
abstract class openhands.agent.Agent {
_registry: Dict[str, Type[Agent]] {static}
llm: LLM
_complete: None
}
class openhands.llm.llm.LLM {
model: None
api_key: None
base_url: None
_debug_dir: None
_debug_idx: None
_debug_id: None
_completion: None
}
class openhands.controller.agent_controller.AgentController {
agent: Agent
max_iterations: int
workdir: str
command_manager: CommandManager
state: State
plan: Plan
callbacks: List[Callable]
}
class openhands.observation.AgentErrorObservation {
observation: str
}
class openhands.controller.command_manager.CommandManager {
directory: None
shell: None
}
class openhands.observation.NullObservation {
observation: str
}
class openhands.plan.Plan {
main_goal: str {static}
task: Task {static}
main_goal: str
task: None
}
class openhands.state.State {
plan: Plan
iteration: int
history: List[Tuple[Action, Observation]]
updated_info: List[Tuple[Action, Observation]]
}
class openhands.observation.CmdOutputObservation {
command: str
exit_code: int
observation: str
}
class openhands.sandbox.sandbox.DockerInteractive {
instance_id: None
instance_id: None
workspace_dir: None
workspace_dir: None
workspace_dir: None
timeout: int
base_container_image: None
container_name: None
}
class openhands.observation.UserMessageObservation {
role: str
observation: str
}
class openhands.plan.Task {
id: str {static}
goal: str {static}
parent: Task | None {static}
subtasks: List[Task] {static}
id: None
id: None
parent: None
goal: str
subtasks: None
}
class openhands.server.session.Session {
websocket: None
controller: Optional[AgentController]
agent: Optional[Agent]
agent_task: None
}
openhands.action.base.ExecutableAction <|-- openhands.action.agent.AgentEchoAction
openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentFinishAction
openhands.observation.Observation <|-- openhands.observation.AgentMessageObservation
openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentSummarizeAction
openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentThinkAction
openhands.action.base.Action <|-- openhands.action.base.ExecutableAction
openhands.action.base.Action <|-- openhands.action.base.NotExecutableAction
openhands.action.base.NotExecutableAction <|-- openhands.action.base.NullAction
openhands.action.base.ExecutableAction <|-- openhands.action.bash.CmdRunAction
openhands.action.base.ExecutableAction <|-- openhands.action.browse.BrowseURLAction
openhands.observation.Observation <|-- openhands.observation.BrowserOutputObservation
openhands.action.base.ExecutableAction <|-- openhands.action.fileop.FileReadAction
openhands.observation.Observation <|-- openhands.observation.FileReadObservation
openhands.action.base.ExecutableAction <|-- openhands.action.fileop.FileWriteAction
openhands.observation.Observation <|-- openhands.observation.FileWriteObservation
openhands.action.base.NotExecutableAction <|-- openhands.action.tasks.AddTaskAction
openhands.action.base.NotExecutableAction <|-- openhands.action.tasks.ModifyTaskAction
openhands.agent.Agent *-- openhands.agent.Agent
openhands.agent.Agent *-- openhands.llm.llm.LLM
openhands.controller.agent_controller.AgentController *-- openhands.agent.Agent
openhands.observation.Observation <|-- openhands.observation.AgentErrorObservation
openhands.observation.Observation <|-- openhands.observation.NullObservation
openhands.plan.Plan *-- openhands.plan.Task
openhands.state.State *-- openhands.plan.Plan
openhands.state.State *-- openhands.observation.CmdOutputObservation
openhands.state.State *-- openhands.action.base.Action
openhands.state.State *-- openhands.observation.Observation
openhands.observation.Observation <|-- openhands.observation.CmdOutputObservation
openhands.observation.Observation <|-- openhands.observation.UserMessageObservation
openhands.plan.Task *-- openhands.plan.Task
openhands.server.session.Session *-- openhands.controller.agent_controller.AgentController
openhands.server.session.Session *-- openhands.agent.Agent
openhands.controller.agent_controller.AgentController -> openhands.state.State
openhands.controller.agent_controller.AgentController -> openhands.plan.Plan
openhands.controller.agent_controller.AgentController -> openhands.controller.command_manager.CommandManager
openhands.controller.command_manager.CommandManager -> openhands.sandbox.sandbox.DockerInteractive
footer Based on f3fda42; Generated by //py2puml//
@enduml

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 663 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

Some files were not shown because too many files have changed in this diff Show More