OpenHands/openhands/resolver/resolve_issue.py
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

136 lines
3.3 KiB
Python

# flake8: noqa: E501
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()