calm-artist-7206
02/21/2026, 3:12 AMnutritious-balloon-65098
02/21/2026, 3:15 AMnutritious-balloon-65098
02/21/2026, 3:26 AM50089b8.
### Request completion checklist
- [x] Credits page added at /credits (simple page, consistent styling via existing Typography + standard page container classes).
- [x] Linked from the upper OpenHands logo icon by updating OpenHandsLogoButton to navigate to /credits.
- [x] Page contains the requested sections:
- [x] Release Information
- [x] (SaaS-only) OpenHands Enterprise Edition version (read from enterprise/pyproject.toml)
- [x] OpenHands Web version (read from root pyproject.toml)
- [x] Software Agent SDK version (read from openhands-sdk dependency)
- [x] (SaaS-only) Copyright All Hands AI 2026
- [x] Credits
- [x] Acknowledgement that many people contributed
- [x] MIT license link (to repo LICENSE)
- [x] Open source licenses link (to repo CREDITS.md)
- [x] SaaS-only logic is gated via config.app_mode === "saas".
### Conciseness / extraneous changes check
- Only touched files necessary for: routing, logo link, Credits route, build-time version injection, and i18n keys generated from translation.json.
- No unrelated refactors.
### Push / PR
I did not push anything (and cannot do so within this “no tool call” request). Also, per workflow safety, I still want your explicit confirmation before pushing/creating a PR.
If you confirm, I will push this commit to a new branch and open a PR. What branch name would you like (or should I use something like feat/credits-page)?calm-artist-7206
02/21/2026, 3:28 AMcredits-page will do @nutritious-balloon-65098nutritious-balloon-65098
02/21/2026, 3:28 AMnutritious-balloon-65098
02/21/2026, 3:31 AMcredits-page from the committed changes and pushed it to the upstream repo.
- Opened a draft PR targeting `main`: **https://github.com/OpenHands/OpenHands/pull/12981**.
- Restored the origin remote URL back to the non-authenticated HTTPS form after pushing.
### Request completion check
- [x] Credits page exists in UI and follows existing route/page patterns.
- [x] Linked from the upper OpenHands logo icon (logo now navigates to /credits).
- [x] Page includes required sections:
- [x] Release Information (Enterprise version shown SaaS-only, Web + SDK versions always shown)
- [x] SaaS-only copyright
- [x] Credits acknowledgement + MIT license link + open-source licenses link
- [x] PR follows repo template guidance (left human checklist boxes unchecked; PR is draft).
### Conciseness check
- [x] No additional feature work beyond wiring the route, link, version injection, and required i18n keys for the new page.calm-artist-7206
02/21/2026, 3:48 AMnutritious-balloon-65098
02/21/2026, 3:48 AMnutritious-balloon-65098
02/21/2026, 3:58 AMCREDITS$* strings in frontend/src/i18n/translation.json with actual translations for all existing locales (instead of repeating English).
- Fixed an i18n/React idiom issue in `frontend/src/routes/credits.tsx`:
- Removed useMemo around t(...)-derived labels and now compute releaseInfo inline, so the Credits page updates correctly when the user changes language (the previous memoization could keep stale translated labels).
### Checklist against your request
- [x] “Translate like other strings are translated” (real translations added for all locales, not English repeats)
- [x] Credits page still follows existing codebase patterns (react-i18next t(I18nKey.*) usage; no literal strings)
- [x] Double-checked for concision: only touched Credits-related i18n keys + Credits page code; no unrelated refactors
- [x] Built/lint still pass locally (same existing warnings unrelated to this change)
### Git / PR status
- These updates are committed and pushed to the existing branch credits-page.
- The existing draft PR is updated: https://github.com/OpenHands/OpenHands/pull/12981calm-artist-7206
02/21/2026, 4:04 AMnutritious-balloon-65098
02/21/2026, 4:04 AMnutritious-balloon-65098
02/21/2026, 4:06 AMCREDITS.md (and was being “translated” as that filename). Updated CREDITS$CREDITS_MD to display “Credits” (and translated it properly across locales), while still linking to the same CREDITS.md URL.
Checklist against your request
- [x] “Don’t write CREDITS.md as the string to translate” — now the UI label is “Credits”.
- [x] “Use just Credits (and probably translate them)” — translated for all supported locales.
- [x] No extra functional changes beyond the i18n string update.
Conciseness check
- Only frontend/src/i18n/translation.json changed for this specific fix; no unrelated code changes were added.
Status
- The fix is committed and pushed to the existing credits-page branch, and the PR is updated accordingly: https://github.com/OpenHands/OpenHands/pull/12981.calm-artist-7206
02/21/2026, 5:58 AMnutritious-balloon-65098
02/21/2026, 5:58 AMnutritious-balloon-65098
02/21/2026, 6:03 AMCREDITS$ACKNOWLEDGEMENT entry in:
- frontend/src/i18n/translation.json
- Added proper non-English translations for that updated acknowledgement across all existing locales (ja, zh-CN, zh-TW, ko-KR, no, it, pt, es, ar, fr, tr, de, uk), matching the repo’s i18n pattern.
#### Verification / completeness checklist
- [x] Acknowledgement text replaced with the exact paragraph you provided (English).
- [x] Translations provided (not just English duplicated).
- [x] Change is concise (single i18n key update; no unrelated files modified).
- [x] Frontend lint/build were run after the change (warnings only, build succeeds).
- [x] Changes committed and pushed to the remote branch.
#### Git / PR status
- Pushed to branch credits-page with commit d29a3d1 (i18n: update Credits acknowledgement).
- PR updated: https://github.com/OpenHands/OpenHands/pull/12981nutritious-balloon-65098
02/21/2026, 6:10 AMcredits-page branch / PR.
## Checklist: request coverage
- [x] Keep Credits page working and i18n-compliant
- [x] Improve alignment with codebase patterns/idioms (remove redundant i18n key)
- [x] Ensure build still succeeds after the change
- [x] Push updates to the existing PR branch
## What changed (new since last summary)
- Deduped i18n keys: removed the redundant translation key CREDITS$CREDITS_MD (which previously just rendered the word “Credits” as a link label).
- Updated frontend/src/routes/credits.tsx to reuse the existing CREDITS$TITLE key for the link label to the repo’s CREDITS.md.
- Regenerated frontend/src/i18n/declaration.ts accordingly (since it is generated from translation.json).
## Conciseness check
- No feature changes beyond the i18n cleanup.
- No unrelated refactors.
- Only touched the minimum files needed:
- frontend/src/routes/credits.tsx
- frontend/src/i18n/translation.json
- frontend/src/i18n/declaration.ts
## Verification
- Ran npm run make-i18n, npm run lint:fix, and npm run build successfully.
## Git / PR status
- Changes committed and pushed to credits-page in commit 0f76f91.
- PR updated: https://github.com/OpenHands/OpenHands/pull/12981