From f42625f789ac9139c11b71ebe7120871209bb14b Mon Sep 17 00:00:00 2001 From: Jamie Chicago <87397251+jamiechicago312@users.noreply.github.com> Date: Fri, 30 Jan 2026 14:27:44 -0600 Subject: [PATCH] Improve issue templates with best practices and clear expectations (#12632) Co-authored-by: jamiechicago312 Co-authored-by: openhands Co-authored-by: Engel Nyst --- .github/ISSUE_TEMPLATE/bug_template.yml | 137 +++++++++++++++++---- .github/ISSUE_TEMPLATE/feature_request.md | 17 --- .github/ISSUE_TEMPLATE/feature_request.yml | 105 ++++++++++++++++ enterprise/server/middleware.py | 2 +- 4 files changed, 222 insertions(+), 39 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml diff --git a/.github/ISSUE_TEMPLATE/bug_template.yml b/.github/ISSUE_TEMPLATE/bug_template.yml index 1889e7306e..f354db7065 100644 --- a/.github/ISSUE_TEMPLATE/bug_template.yml +++ b/.github/ISSUE_TEMPLATE/bug_template.yml @@ -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! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 430d6ce8dc..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -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 diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..b93e732435 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -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. diff --git a/enterprise/server/middleware.py b/enterprise/server/middleware.py index 5747458dfc..651cd45512 100644 --- a/enterprise/server/middleware.py +++ b/enterprise/server/middleware.py @@ -103,7 +103,7 @@ class SetAuthCookieMiddleware: keycloak_auth_cookie = request.cookies.get('keycloak_auth') auth_header = request.headers.get('Authorization') mcp_auth_header = request.headers.get('X-Session-API-Key') - accepted_tos = False + accepted_tos: bool | None = False if ( keycloak_auth_cookie is None and (auth_header is None or not auth_header.startswith('Bearer '))