# flake8: noqa: E501 # IMPORTANT: LEGACY V0 CODE - Deprecated since version 1.0.0, scheduled for removal April 1, 2026 # This file is part of the legacy (V0) implementation of OpenHands and will be removed soon as we complete the migration to V1. # OpenHands V1 uses the Software Agent SDK for the agentic core and runs a new application server. Please refer to: # - V1 agentic core (SDK): https://github.com/OpenHands/software-agent-sdk # - V1 application server (in this repo): openhands/app_server/ # Unless you are working on deprecation, please avoid extending this legacy file and consult the V1 codepaths above. # Tag: Legacy-V0 import asyncio from openhands.resolver.issue_resolver import IssueResolver def main() -> None: import argparse def int_or_none(value: str) -> int | None: if value.lower() == 'none': return None else: return int(value) parser = argparse.ArgumentParser(description='Resolve a single issue.') parser.add_argument( '--selected-repo', type=str, required=True, help='repository to resolve issues in form of `owner/repo`.', ) parser.add_argument( '--token', type=str, default=None, help='token to access the repository.', ) parser.add_argument( '--username', type=str, default=None, help='username to access the repository.', ) parser.add_argument( '--base-container-image', type=str, default=None, help='base container image to use.', ) parser.add_argument( '--runtime-container-image', type=str, default=None, help='Container image to use.', ) parser.add_argument( '--runtime', type=str, default=None, help='Runtime environment to use (default: docker).', ) parser.add_argument( '--max-iterations', type=int, default=50, help='Maximum number of iterations to run.', ) parser.add_argument( '--issue-number', type=int, required=True, help='Issue number to resolve.', ) parser.add_argument( '--comment-id', type=int_or_none, required=False, default=None, help='Resolve a specific comment', ) parser.add_argument( '--output-dir', type=str, default='output', help='Output directory to write the results.', ) parser.add_argument( '--llm-model', type=str, default=None, help='LLM model to use.', ) parser.add_argument( '--llm-api-key', type=str, default=None, help='LLM API key to use.', ) parser.add_argument( '--llm-base-url', type=str, default=None, help='LLM base URL to use.', ) parser.add_argument( '--prompt-file', type=str, default=None, help='Path to the prompt template file in Jinja format.', ) parser.add_argument( '--repo-instruction-file', type=str, default=None, help='Path to the repository instruction file in text format.', ) parser.add_argument( '--issue-type', type=str, default='issue', choices=['issue', 'pr'], help='Type of issue to resolve, either open issue or pr comments.', ) parser.add_argument( '--is-experimental', type=lambda x: x.lower() == 'true', help='Whether to run in experimental mode.', ) parser.add_argument( '--base-domain', type=str, default=None, help='Base domain for the git server (defaults to "github.com" for GitHub, "gitlab.com" for GitLab, "bitbucket.org" for Bitbucket, and "dev.azure.com" for Azure DevOps)', ) my_args = parser.parse_args() issue_resolver = IssueResolver(my_args) asyncio.run(issue_resolver.resolve_issue()) if __name__ == '__main__': main()