├── .devcontainer ├── devcontainer.json └── setup.sh ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_template.yml │ └── feature_request.md ├── dependabot.yml ├── pull_request_template.md ├── scripts │ └── check_version_consistency.py └── workflows │ ├── clean-up.yml │ ├── deploy-docs.yml │ ├── fe-unit-tests.yml │ ├── ghcr-build.yml │ ├── integration-runner.yml │ ├── lint-fix.yml │ ├── lint.yml │ ├── openhands-resolver.yml │ ├── py-unit-tests.yml │ ├── pypi-release.yml │ ├── run-eval.yml │ └── stale.yml ├── .gitignore ├── .nvmrc ├── .openhands ├── microagents │ ├── documentation.md │ ├── glossary.md │ └── repo.md ├── pre-commit.sh └── setup.sh ├── .vscode └── settings.json ├── CITATION.cff ├── CODE_OF_CONDUCT.md ├── COMMUNITY.md ├── CONTRIBUTING.md ├── CREDITS.md ├── Development.md ├── ISSUE_TRIAGE.md ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.md ├── README_CN.md ├── build.sh ├── config.template.toml ├── containers ├── README.md ├── app │ ├── Dockerfile │ ├── config.sh │ └── entrypoint.sh ├── build.sh ├── dev │ ├── Dockerfile │ ├── README.md │ ├── compose.yml │ └── dev.sh ├── e2b-sandbox │ ├── Dockerfile │ ├── README.md │ └── e2b.toml └── runtime │ ├── README.md │ └── config.sh ├── dev_config └── python │ ├── .pre-commit-config.yaml │ ├── mypy.ini │ └── ruff.toml ├── docker-compose.yml ├── docs ├── .gitignore ├── DOC_STYLE_GUIDE.md ├── README.md ├── babel.config.js ├── docusaurus.config.ts ├── generate-swagger-ui.js ├── i18n │ ├── fr │ │ ├── code.json │ │ ├── docusaurus-plugin-content-blog │ │ │ └── options.json │ │ ├── docusaurus-plugin-content-docs │ │ │ ├── current.json │ │ │ └── current │ │ │ │ ├── python │ │ │ │ ├── python.md │ │ │ │ └── sidebar.json │ │ │ │ └── usage │ │ │ │ ├── about.md │ │ │ │ ├── agents.md │ │ │ │ ├── architecture.mdx │ │ │ │ ├── architecture │ │ │ │ ├── backend.mdx │ │ │ │ └── runtime.md │ │ │ │ ├── cloud │ │ │ │ ├── cloud-api.md │ │ │ │ ├── cloud-issue-resolver.md │ │ │ │ ├── cloud-ui.md │ │ │ │ ├── github-installation.md │ │ │ │ ├── gitlab-installation.md │ │ │ │ └── openhands-cloud.md │ │ │ │ ├── configuration-options.md │ │ │ │ ├── custom_sandbox_guide.md │ │ │ │ ├── customization │ │ │ │ └── repository.md │ │ │ │ ├── feedback.md │ │ │ │ ├── getting-started.mdx │ │ │ │ ├── how-to │ │ │ │ ├── cli-mode.md │ │ │ │ ├── custom-sandbox-guide.md │ │ │ │ ├── debugging.md │ │ │ │ ├── development-overview.md │ │ │ │ ├── evaluation-harness.md │ │ │ │ ├── github-action.md │ │ │ │ ├── gui-mode.md │ │ │ │ ├── headless-mode.md │ │ │ │ └── persist-session-data.md │ │ │ │ ├── installation.mdx │ │ │ │ ├── intro.mdx │ │ │ │ ├── key-features.md │ │ │ │ ├── llms │ │ │ │ ├── azure-llms.md │ │ │ │ ├── azureLLMs.md │ │ │ │ ├── custom-llm-configs.md │ │ │ │ ├── google-llms.md │ │ │ │ ├── googleLLMs.md │ │ │ │ ├── groq.md │ │ │ │ ├── litellm-proxy.md │ │ │ │ ├── llms.md │ │ │ │ ├── local-llms.md │ │ │ │ ├── localLLMs.md │ │ │ │ ├── openai-llms.md │ │ │ │ └── openrouter.md │ │ │ │ ├── mcp.md │ │ │ │ ├── prompting-best-practices.md │ │ │ │ ├── prompting │ │ │ │ ├── customization.md │ │ │ │ ├── microagents-keyword.md │ │ │ │ ├── microagents-overview.md │ │ │ │ ├── microagents-public.md │ │ │ │ ├── microagents-repo.md │ │ │ │ ├── microagents.md │ │ │ │ └── prompting-best-practices.md │ │ │ │ ├── runtimes-index.md │ │ │ │ ├── runtimes.md │ │ │ │ ├── runtimes │ │ │ │ ├── daytona.md │ │ │ │ ├── docker.md │ │ │ │ ├── local.md │ │ │ │ ├── modal.md │ │ │ │ └── remote.md │ │ │ │ ├── troubleshooting │ │ │ │ └── troubleshooting.md │ │ │ │ └── upgrade-guide.md │ │ └── docusaurus-theme-classic │ │ │ └── navbar.json │ ├── ja │ │ ├── code.json │ │ ├── docusaurus-plugin-content-blog │ │ │ └── options.json │ │ ├── docusaurus-plugin-content-docs │ │ │ ├── current.json │ │ │ └── current │ │ │ │ ├── python │ │ │ │ ├── python.md │ │ │ │ └── sidebar.json │ │ │ │ └── usage │ │ │ │ ├── about.md │ │ │ │ ├── agents.md │ │ │ │ ├── architecture.mdx │ │ │ │ ├── architecture │ │ │ │ ├── backend.mdx │ │ │ │ └── runtime.md │ │ │ │ ├── cloud │ │ │ │ ├── cloud-api.md │ │ │ │ ├── cloud-issue-resolver.md │ │ │ │ ├── cloud-ui.md │ │ │ │ ├── github-installation.md │ │ │ │ ├── gitlab-installation.md │ │ │ │ └── openhands-cloud.md │ │ │ │ ├── configuration-options.md │ │ │ │ ├── custom_sandbox_guide.md │ │ │ │ ├── customization │ │ │ │ └── repository.md │ │ │ │ ├── feedback.md │ │ │ │ ├── getting-started.mdx │ │ │ │ ├── how-to │ │ │ │ ├── cli-mode.md │ │ │ │ ├── custom-sandbox-guide.md │ │ │ │ ├── debugging.md │ │ │ │ ├── development-overview.md │ │ │ │ ├── evaluation-harness.md │ │ │ │ ├── github-action.md │ │ │ │ ├── gui-mode.md │ │ │ │ ├── headless-mode.md │ │ │ │ └── persist-session-data.md │ │ │ │ ├── installation.mdx │ │ │ │ ├── intro.mdx │ │ │ │ ├── key-features.md │ │ │ │ ├── llms.md │ │ │ │ ├── llms │ │ │ │ ├── azure-llms.md │ │ │ │ ├── azureLLMs.md │ │ │ │ ├── custom-llm-configs.md │ │ │ │ ├── google-llms.md │ │ │ │ ├── googleLLMs.md │ │ │ │ ├── groq.md │ │ │ │ ├── litellm-proxy.md │ │ │ │ ├── llms.md │ │ │ │ ├── local-llms.md │ │ │ │ ├── localLLMs.md │ │ │ │ ├── openai-llms.md │ │ │ │ └── openrouter.md │ │ │ │ ├── mcp.md │ │ │ │ ├── prompting-best-practices.md │ │ │ │ ├── prompting │ │ │ │ ├── customization.md │ │ │ │ ├── microagents-keyword.md │ │ │ │ ├── microagents-overview.md │ │ │ │ ├── microagents-public.md │ │ │ │ ├── microagents-repo.md │ │ │ │ ├── microagents.md │ │ │ │ └── prompting-best-practices.md │ │ │ │ ├── runtimes-index.md │ │ │ │ ├── runtimes.md │ │ │ │ ├── runtimes │ │ │ │ ├── daytona.md │ │ │ │ ├── docker.md │ │ │ │ ├── local.md │ │ │ │ ├── modal.md │ │ │ │ └── remote.md │ │ │ │ ├── troubleshooting │ │ │ │ └── troubleshooting.md │ │ │ │ └── upgrade-guide.md │ │ └── docusaurus-theme-classic │ │ │ └── navbar.json │ ├── pt-BR │ │ ├── code.json │ │ ├── docusaurus-plugin-content-blog │ │ │ └── options.json │ │ └── docusaurus-plugin-content-docs │ │ │ ├── current.json │ │ │ └── current │ │ │ ├── python │ │ │ ├── python.md │ │ │ └── sidebar.json │ │ │ └── usage │ │ │ ├── about.md │ │ │ ├── agents.md │ │ │ ├── architecture │ │ │ ├── backend.mdx │ │ │ └── runtime.md │ │ │ ├── cloud │ │ │ ├── cloud-api.md │ │ │ ├── cloud-issue-resolver.md │ │ │ ├── cloud-ui.md │ │ │ ├── github-installation.md │ │ │ ├── gitlab-installation.md │ │ │ └── openhands-cloud.md │ │ │ ├── configuration-options.md │ │ │ ├── customization │ │ │ └── repository.md │ │ │ ├── feedback.md │ │ │ ├── getting-started.mdx │ │ │ ├── how-to │ │ │ ├── cli-mode.md │ │ │ ├── custom-sandbox-guide.md │ │ │ ├── debugging.md │ │ │ ├── development-overview.md │ │ │ ├── evaluation-harness.md │ │ │ ├── github-action.md │ │ │ ├── gui-mode.md │ │ │ └── headless-mode.md │ │ │ ├── installation.mdx │ │ │ ├── key-features.md │ │ │ ├── llms │ │ │ ├── azure-llms.md │ │ │ ├── custom-llm-configs.md │ │ │ ├── google-llms.md │ │ │ ├── groq.md │ │ │ ├── litellm-proxy.md │ │ │ ├── llms.md │ │ │ ├── local-llms.md │ │ │ ├── openai-llms.md │ │ │ └── openrouter.md │ │ │ ├── mcp.md │ │ │ ├── prompting │ │ │ ├── microagents-keyword.md │ │ │ ├── microagents-overview.md │ │ │ ├── microagents-public.md │ │ │ ├── microagents-repo.md │ │ │ └── prompting-best-practices.md │ │ │ ├── runtimes-index.md │ │ │ ├── runtimes.md │ │ │ ├── runtimes │ │ │ ├── daytona.md │ │ │ ├── docker.md │ │ │ ├── local.md │ │ │ ├── modal.md │ │ │ └── remote.md │ │ │ └── troubleshooting │ │ │ └── troubleshooting.md │ └── zh-Hans │ │ ├── code.json │ │ ├── docusaurus-plugin-content-blog │ │ └── options.json │ │ ├── docusaurus-plugin-content-docs │ │ ├── current.json │ │ └── current │ │ │ ├── python │ │ │ ├── python.md │ │ │ └── sidebar.json │ │ │ └── usage │ │ │ ├── about.md │ │ │ ├── agents.md │ │ │ ├── architecture.mdx │ │ │ ├── architecture │ │ │ ├── backend.mdx │ │ │ └── runtime.md │ │ │ ├── cloud │ │ │ ├── cloud-api.md │ │ │ ├── cloud-issue-resolver.md │ │ │ ├── cloud-ui.md │ │ │ ├── github-installation.md │ │ │ ├── gitlab-installation.md │ │ │ └── openhands-cloud.md │ │ │ ├── configuration-options.md │ │ │ ├── custom_sandbox_guide.md │ │ │ ├── customization │ │ │ └── repository.md │ │ │ ├── feedback.md │ │ │ ├── getting-started.mdx │ │ │ ├── how-to │ │ │ ├── cli-mode.md │ │ │ ├── custom-sandbox-guide.md │ │ │ ├── debugging.md │ │ │ ├── development-overview.md │ │ │ ├── evaluation-harness.md │ │ │ ├── github-action.md │ │ │ ├── gui-mode.md │ │ │ ├── headless-mode.md │ │ │ └── persist-session-data.md │ │ │ ├── installation.mdx │ │ │ ├── intro.mdx │ │ │ ├── key-features.md │ │ │ ├── llms │ │ │ ├── azure-llms.md │ │ │ ├── azureLLMs.md │ │ │ ├── custom-llm-configs.md │ │ │ ├── google-llms.md │ │ │ ├── googleLLMs.md │ │ │ ├── groq.md │ │ │ ├── litellm-proxy.md │ │ │ ├── llms.md │ │ │ ├── local-llms.md │ │ │ ├── localLLMs.md │ │ │ ├── openai-llms.md │ │ │ └── openrouter.md │ │ │ ├── mcp.md │ │ │ ├── prompting-best-practices.md │ │ │ ├── prompting │ │ │ ├── customization.md │ │ │ ├── microagents-keyword.md │ │ │ ├── microagents-overview.md │ │ │ ├── microagents-public.md │ │ │ ├── microagents-repo.md │ │ │ ├── microagents.md │ │ │ └── prompting-best-practices.md │ │ │ ├── runtimes-index.md │ │ │ ├── runtimes.md │ │ │ ├── runtimes │ │ │ ├── daytona.md │ │ │ ├── docker.md │ │ │ ├── local.md │ │ │ ├── modal.md │ │ │ └── remote.md │ │ │ ├── troubleshooting │ │ │ └── troubleshooting.md │ │ │ └── upgrade-guide.md │ │ └── docusaurus-theme-classic │ │ └── navbar.json ├── modules │ ├── python │ │ ├── python.md │ │ └── sidebar.json │ └── usage │ │ ├── about.md │ │ ├── agents.md │ │ ├── architecture │ │ ├── backend.mdx │ │ └── runtime.md │ │ ├── cloud │ │ ├── cloud-api.md │ │ ├── cloud-issue-resolver.md │ │ ├── cloud-ui.md │ │ ├── github-installation.md │ │ ├── gitlab-installation.md │ │ ├── openhands-cloud.md │ │ └── openhands-cloud.mdx │ │ ├── configuration-options.md │ │ ├── customization │ │ └── repository.md │ │ ├── feedback.md │ │ ├── getting-started.mdx │ │ ├── how-to │ │ ├── cli-mode.md │ │ ├── custom-sandbox-guide.md │ │ ├── debugging.md │ │ ├── development-overview.md │ │ ├── evaluation-harness.md │ │ ├── github-action.md │ │ ├── gui-mode.md │ │ ├── headless-mode.md │ │ └── websocket-connection.md │ │ ├── installation.mdx │ │ ├── key-features.md │ │ ├── llms │ │ ├── azure-llms.md │ │ ├── custom-llm-configs.md │ │ ├── google-llms.md │ │ ├── groq.md │ │ ├── litellm-proxy.md │ │ ├── llms.md │ │ ├── local-llms.md │ │ ├── openai-llms.md │ │ ├── openrouter.md │ │ └── screenshots │ │ │ ├── 1_select_power_user.png │ │ │ ├── 2_select_model.png │ │ │ ├── 3_select_devstral.png │ │ │ ├── 4_set_context_window.png │ │ │ ├── 5_copy_url.png │ │ │ └── 6_copy_to_get_model_name.png │ │ ├── mcp.md │ │ ├── prompting │ │ ├── microagents-keyword.md │ │ ├── microagents-org.md │ │ ├── microagents-overview.md │ │ ├── microagents-public.md │ │ ├── microagents-repo.md │ │ └── prompting-best-practices.md │ │ ├── runtimes-index.md │ │ ├── runtimes.md │ │ ├── runtimes │ │ ├── daytona.md │ │ ├── docker.md │ │ ├── local.md │ │ ├── modal.md │ │ └── remote.md │ │ ├── troubleshooting │ │ └── troubleshooting.md │ │ └── windows-without-wsl.md ├── package-lock.json ├── package.json ├── plugins │ └── tailwind-config.cjs ├── sidebars.ts ├── src │ ├── components │ │ ├── CustomFooter.tsx │ │ ├── Demo │ │ │ ├── Demo.tsx │ │ │ └── index.module.css │ │ └── HomepageHeader │ │ │ └── HomepageHeader.tsx │ ├── css │ │ ├── custom.css │ │ ├── footer.css │ │ └── homepageHeader.css │ ├── pages │ │ ├── _footer.tsx │ │ └── index.tsx │ └── theme │ │ └── Layout │ │ └── index.tsx ├── static │ ├── .nojekyll │ ├── README.md │ ├── img │ │ ├── backend_architecture.png │ │ ├── backend_architecture.puml │ │ ├── backend_architecture.svg │ │ ├── cloud │ │ │ ├── add-repo.png │ │ │ └── issue-resolver.png │ │ ├── docs │ │ │ └── api-key-generation.png │ │ ├── logo-square.png │ │ ├── logo.png │ │ ├── oh-features.png │ │ ├── results.png │ │ ├── screenshot.png │ │ ├── system_architecture.png │ │ ├── system_architecture.puml │ │ ├── system_architecture.svg │ │ ├── system_architecture_overview.png │ │ └── teaser.mp4 │ └── openapi.json ├── translation_cache.json ├── translation_updater.py └── tsconfig.json ├── evaluation ├── README.md ├── __init__.py ├── benchmarks │ ├── EDA │ │ ├── README.md │ │ ├── game.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── agent_bench │ │ ├── README.md │ │ ├── __init__.py │ │ ├── helper.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── run_infer.sh │ │ │ └── summarise_results.py │ ├── aider_bench │ │ ├── README.md │ │ ├── create_dataset.py │ │ ├── helper.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── run_infer.sh │ │ │ └── summarize_results.py │ ├── biocoder │ │ ├── README.md │ │ ├── run_infer.py │ │ ├── scripts │ │ │ ├── run_infer.sh │ │ │ └── setup │ │ │ │ ├── copy_changed_code.py │ │ │ │ └── remove_code.py │ │ └── utils.py │ ├── bird │ │ ├── README.md │ │ ├── __init__.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── browsing_delegation │ │ ├── README.md │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── commit0 │ │ ├── README.md │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── discoverybench │ │ ├── README.md │ │ ├── eval_utils │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── eval_w_subhypo_gen.py │ │ │ ├── lm_utils.py │ │ │ ├── openai_helpers.py │ │ │ ├── openai_semantic_gen_prompts.py │ │ │ └── response_parser.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── gaia │ │ ├── README.md │ │ ├── get_score.py │ │ ├── run_infer.py │ │ ├── scorer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── gorilla │ │ ├── README.md │ │ ├── ast_eval_hf.py │ │ ├── ast_eval_tf.py │ │ ├── ast_eval_th.py │ │ ├── run_infer.py │ │ ├── scripts │ │ │ └── run_infer.sh │ │ └── utils.py │ ├── gpqa │ │ ├── README.md │ │ ├── __init__.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── humanevalfix │ │ ├── README.md │ │ ├── __init__.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── lca_ci_build_repair │ │ ├── .gitignore │ │ ├── README.MD │ │ ├── config_template.yaml │ │ ├── eval_infer.py │ │ ├── run_infer.py │ │ ├── scripts │ │ │ ├── eval_infer.sh │ │ │ └── run_infer.sh │ │ └── setup.py │ ├── logic_reasoning │ │ ├── .cache_program │ │ │ ├── facts.kfb │ │ │ └── rules.krb │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── __init__.py │ │ ├── instruction.txt │ │ ├── logic_inference.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── miniwob │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── get_avg_reward.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── mint │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── config_variables.py │ │ ├── datatypes.py │ │ ├── env.py │ │ ├── prompts │ │ │ ├── __init__.py │ │ │ └── template_with_tool.txt │ │ ├── requirements.txt │ │ ├── run_infer.py │ │ ├── scripts │ │ │ └── run_infer.sh │ │ ├── tasks │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── codegen.py │ │ │ ├── in_context_examples │ │ │ │ ├── humaneval │ │ │ │ │ └── with_tool.txt │ │ │ │ ├── mbpp │ │ │ │ │ └── with_tool.txt │ │ │ │ └── reasoning │ │ │ │ │ └── with_tool.txt │ │ │ └── reasoning.py │ │ └── utils.py │ ├── ml_bench │ │ ├── README.md │ │ ├── __init__.py │ │ ├── run_analysis.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── cleanup.sh │ │ │ ├── run_analysis.sh │ │ │ ├── run_infer.sh │ │ │ └── summarise_results.py │ ├── multi_swe_bench │ │ ├── README.md │ │ ├── __init__.py │ │ ├── eval_infer.py │ │ ├── examples │ │ │ ├── config.json │ │ │ ├── output.jsonl │ │ │ └── patch.jsonl │ │ ├── infer.sh │ │ ├── resource │ │ │ └── mapping.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── data │ │ │ └── data_change.py │ │ │ ├── eval │ │ │ └── convert.py │ │ │ ├── run_infer.sh │ │ │ └── setup │ │ │ ├── compare_patch_filename.py │ │ │ ├── instance_swe_entry.sh │ │ │ ├── prepare_swe_utils.sh │ │ │ └── swe_entry.sh │ ├── scienceagentbench │ │ ├── Dockerfile │ │ ├── Dockerfile.evaluator │ │ ├── README.md │ │ ├── post_proc.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ ├── swe_bench │ │ ├── README.md │ │ ├── SWE-Gym.md │ │ ├── SWE-Interact.md │ │ ├── __init__.py │ │ ├── binary_patch_utils.py │ │ ├── eval_infer.py │ │ ├── examples │ │ │ ├── example_agent_output.jsonl │ │ │ └── example_model_output.json │ │ ├── loc_prompt.py │ │ ├── resource │ │ │ ├── SWE-Gym__SWE-Gym-train.json │ │ │ ├── mapping.py │ │ │ └── swt_bench_constants.py │ │ ├── run_infer.py │ │ ├── run_infer_interact.py │ │ ├── run_localize.py │ │ ├── scripts │ │ │ ├── docker │ │ │ │ ├── all-swebench-full-instance-images.txt │ │ │ │ ├── all-swebench-lite-instance-images.txt │ │ │ │ ├── all-swebench-verified-instance-images.txt │ │ │ │ ├── get_docker_image_names.py │ │ │ │ ├── pull_all_eval_docker.sh │ │ │ │ ├── push_docker_instance_images.py │ │ │ │ └── push_eval_docker.sh │ │ │ ├── eval │ │ │ │ ├── combine_final_completions.py │ │ │ │ ├── compare_outputs.py │ │ │ │ ├── convert_oh_folder_to_swebench_submission.sh │ │ │ │ ├── convert_oh_output_to_md.py │ │ │ │ ├── convert_oh_output_to_swe_json.py │ │ │ │ ├── download_gold_patch.py │ │ │ │ ├── summarize_outputs.py │ │ │ │ ├── update_output_with_eval.py │ │ │ │ └── verify_costs.py │ │ │ ├── eval_infer.sh │ │ │ ├── eval_infer_remote.sh │ │ │ ├── rollout_swegym.sh │ │ │ ├── run_infer.sh │ │ │ ├── run_infer_interact.sh │ │ │ ├── run_localize.sh │ │ │ ├── setup │ │ │ │ ├── compare_patch_filename.py │ │ │ │ ├── instance_swe_entry.sh │ │ │ │ ├── prepare_swe_utils.sh │ │ │ │ └── swe_entry.sh │ │ │ ├── swegym │ │ │ │ └── convert_data.ipynb │ │ │ └── swtbench │ │ │ │ └── convert.py │ │ └── split │ │ │ └── swegym_verified_instances.json │ ├── testgeneval │ │ ├── NOTES.md │ │ ├── README.md │ │ ├── __init__.py │ │ ├── compute_readability.py │ │ ├── constants.py │ │ ├── eval_infer.py │ │ ├── log_parsers.py │ │ ├── metrics.py │ │ ├── prompt.py │ │ ├── pygments_utils.py │ │ ├── report_utils.py │ │ ├── run_infer.py │ │ ├── scripts │ │ │ ├── docker │ │ │ │ ├── add_testing_dependencies.py │ │ │ │ ├── all-swebench-full-instance-images.txt │ │ │ │ ├── all-swebench-lite-instance-images.txt │ │ │ │ ├── compare_txt_files.py │ │ │ │ ├── delete_all_images.sh │ │ │ │ └── hf_to_image_list.py │ │ │ ├── eval │ │ │ │ ├── build_outputs_ablation.py │ │ │ │ ├── compare_outputs.py │ │ │ │ ├── convert_oh_folder_to_swebench_submission.sh │ │ │ │ ├── convert_oh_output_to_md.py │ │ │ │ ├── convert_oh_output_to_swe_json.py │ │ │ │ ├── download_gold_test_suites.py │ │ │ │ └── summarize_outputs.py │ │ │ ├── eval_infer.sh │ │ │ ├── run_infer.sh │ │ │ └── setup │ │ │ │ ├── instance_swe_entry.sh │ │ │ │ ├── prepare_swe_utils.sh │ │ │ │ └── swe_entry.sh │ │ ├── test_filter.py │ │ ├── test_spec.py │ │ └── utils.py │ ├── the_agent_company │ │ ├── README.md │ │ ├── browsing.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── run_infer.sh │ │ │ └── summarise_results.py │ ├── toolqa │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── run_infer.py │ │ ├── scripts │ │ │ └── run_infer.sh │ │ └── utils.py │ ├── visual_swe_bench │ │ ├── README.md │ │ ├── __init__.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ ├── docker │ │ │ ├── all-visualswebench-full-instance-images.txt │ │ │ └── pull_all_eval_docker.sh │ │ │ ├── eval_infer.sh │ │ │ ├── run_infer.sh │ │ │ └── setup │ │ │ └── instance_swe_entry.sh │ ├── visualwebarena │ │ ├── README.md │ │ ├── __init__.py │ │ ├── get_success_rate.py │ │ ├── run_infer.py │ │ └── scripts │ │ │ └── run_infer.sh │ └── webarena │ │ ├── README.md │ │ ├── __init__.py │ │ ├── get_success_rate.py │ │ ├── run_infer.py │ │ └── scripts │ │ └── run_infer.sh ├── integration_tests │ ├── README.md │ ├── __init__.py │ ├── run_infer.py │ ├── scripts │ │ └── run_infer.sh │ └── tests │ │ ├── __init__.py │ │ ├── base.py │ │ ├── t01_fix_simple_typo.py │ │ ├── t02_add_bash_hello.py │ │ ├── t03_jupyter_write_file.py │ │ ├── t04_git_staging.py │ │ ├── t05_simple_browsing.py │ │ ├── t06_github_pr_browsing.py │ │ └── t07_interactive_commands.py ├── regression │ ├── .gitignore │ ├── README.md │ ├── cases │ │ ├── client-server │ │ │ └── task.txt │ │ ├── express │ │ │ └── task.txt │ │ ├── hello-name │ │ │ ├── start │ │ │ │ └── hello_world.sh │ │ │ └── task.txt │ │ ├── hello-world │ │ │ ├── task.txt │ │ │ └── test_hello_world.py │ │ ├── node-cli-rewrite │ │ │ ├── start │ │ │ │ ├── commands │ │ │ │ │ ├── length.py │ │ │ │ │ ├── lowercase.py │ │ │ │ │ ├── reverse.py │ │ │ │ │ ├── scramble.py │ │ │ │ │ ├── spongebob.py │ │ │ │ │ └── uppercase.py │ │ │ │ └── string_cli.py │ │ │ └── task.txt │ │ ├── python-cli-help │ │ │ ├── start │ │ │ │ ├── commands │ │ │ │ │ ├── length.py │ │ │ │ │ ├── lowercase.py │ │ │ │ │ ├── reverse.py │ │ │ │ │ ├── scramble.py │ │ │ │ │ ├── spongebob.py │ │ │ │ │ └── uppercase.py │ │ │ │ └── string_cli.py │ │ │ └── task.txt │ │ ├── python-cli │ │ │ └── task.txt │ │ ├── react-todo │ │ │ └── task.txt │ │ └── server-test │ │ │ ├── start │ │ │ └── server.py │ │ │ └── task.txt │ ├── conftest.py │ └── run_tests.py ├── static │ └── example_task_1.png └── utils │ ├── scripts │ └── cleanup_remote_runtime.sh │ ├── shared.py │ └── version_control.sh ├── frontend ├── .env.sample ├── .eslintrc ├── .gitignore ├── .husky │ └── pre-commit ├── .npmrc ├── .prettierrc.json ├── README.md ├── __tests__ │ ├── api │ │ └── file-service │ │ │ └── file-service.api.test.ts │ ├── components │ │ ├── browser.test.tsx │ │ ├── buttons │ │ │ └── copy-to-clipboard.test.tsx │ │ ├── chat-message.test.tsx │ │ ├── chat │ │ │ ├── action-suggestions.test.tsx │ │ │ ├── chat-input.test.tsx │ │ │ ├── chat-interface.test.tsx │ │ │ └── expandable-message.test.tsx │ │ ├── context-menu │ │ │ ├── account-settings-context-menu.test.tsx │ │ │ └── context-menu-list-item.test.tsx │ │ ├── features │ │ │ ├── analytics │ │ │ │ └── analytics-consent-form-modal.test.tsx │ │ │ ├── auth-modal.test.tsx │ │ │ ├── chat │ │ │ │ └── path-component.test.tsx │ │ │ ├── conversation-panel │ │ │ │ ├── conversation-card.test.tsx │ │ │ │ ├── conversation-panel.test.tsx │ │ │ │ └── utils.ts │ │ │ ├── home │ │ │ │ ├── home-header.test.tsx │ │ │ │ ├── repo-connector.test.tsx │ │ │ │ ├── repo-selection-form.test.tsx │ │ │ │ ├── task-card.test.tsx │ │ │ │ └── task-suggestions.test.tsx │ │ │ ├── payment │ │ │ │ └── payment-form.test.tsx │ │ │ ├── settings │ │ │ │ └── api-keys-manager.test.tsx │ │ │ └── sidebar │ │ │ │ └── sidebar.test.tsx │ │ ├── feedback-actions.test.tsx │ │ ├── feedback-form.test.tsx │ │ ├── file-operations.test.tsx │ │ ├── image-preview.test.tsx │ │ ├── interactive-chat-box.test.tsx │ │ ├── jupyter │ │ │ └── jupyter.test.tsx │ │ ├── landing-translations.test.tsx │ │ ├── modals │ │ │ ├── base-modal │ │ │ │ └── base-modal.test.tsx │ │ │ └── settings │ │ │ │ └── model-selector.test.tsx │ │ ├── settings │ │ │ ├── settings-input.test.tsx │ │ │ └── settings-switch.test.tsx │ │ ├── shared │ │ │ ├── brand-button.test.tsx │ │ │ └── modals │ │ │ │ └── settings │ │ │ │ └── settings-form.test.tsx │ │ ├── suggestion-item.test.tsx │ │ ├── suggestions.test.tsx │ │ ├── terminal │ │ │ └── terminal.test.tsx │ │ ├── upload-image-input.test.tsx │ │ ├── user-actions.test.tsx │ │ └── user-avatar.test.tsx │ ├── context │ │ └── ws-client-provider.test.tsx │ ├── hooks │ │ ├── mutation │ │ │ └── use-save-settings.test.tsx │ │ ├── use-click-outside-element.test.tsx │ │ ├── use-rate.test.ts │ │ └── use-terminal.test.tsx │ ├── i18n │ │ ├── duplicate-keys.test.ts │ │ └── translations.test.tsx │ ├── initial-query.test.tsx │ ├── routes │ │ ├── _oh.test.tsx │ │ ├── accept-tos.test.tsx │ │ ├── app-settings.test.tsx │ │ ├── git-settings.test.tsx │ │ ├── home-screen.test.tsx │ │ ├── llm-settings.test.tsx │ │ ├── secrets-settings.test.tsx │ │ ├── settings-with-payment.test.tsx │ │ └── settings.test.tsx │ ├── services │ │ └── observations.test.tsx │ └── utils │ │ ├── amount-is-valid.test.ts │ │ ├── check-hardcoded-strings.test.tsx │ │ ├── check-home-hardcoded-strings.test.tsx │ │ ├── convert-raw-providers-to-list.test.ts │ │ ├── error-handler.test.ts │ │ ├── extract-model-and-provider.test.ts │ │ ├── extract-next-page-from-link.test.ts │ │ ├── format-ms.test.ts │ │ ├── format-time-delta.test.ts │ │ ├── group-suggested-tasks.test.ts │ │ ├── handle-capture-consent.test.ts │ │ ├── has-advanced-settings-set.test.ts │ │ ├── i18n-test-utils.tsx │ │ ├── is-custom-model.test.ts │ │ ├── is-number.test.ts │ │ ├── map-provider.test.ts │ │ ├── organize-models-and-providers.test.ts │ │ ├── parse-github-url.test.ts │ │ ├── parse-terminal-output.test.ts │ │ └── utils.test.ts ├── global.d.ts ├── index.html ├── package-lock.json ├── package.json ├── playwright.config.ts ├── postcss.config.js ├── public │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── beep.wav │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mockServiceWorker.js │ ├── mstile-150x150.png │ ├── robots.txt │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── react-router.config.ts ├── scripts │ ├── check-translation-completeness.cjs │ ├── check-unlocalized-strings.cjs │ ├── detect-node-version.js │ └── make-i18n-translations.cjs ├── src │ ├── api │ │ ├── api-keys.ts │ │ ├── conversation.utils.ts │ │ ├── file-service │ │ │ ├── file-service.api.ts │ │ │ └── file-service.types.ts │ │ ├── invariant-service.ts │ │ ├── open-hands-axios.ts │ │ ├── open-hands.ts │ │ ├── open-hands.types.ts │ │ ├── secrets-service.ts │ │ ├── secrets-service.types.ts │ │ └── suggestions-service │ │ │ └── suggestions-service.api.ts │ ├── assets │ │ ├── arrow.tsx │ │ ├── branding │ │ │ ├── all-hands-logo-spark.svg │ │ │ ├── all-hands-logo.svg │ │ │ ├── github-logo.svg │ │ │ └── gitlab-logo.svg │ │ ├── calendar.tsx │ │ ├── chevron-left.tsx │ │ ├── chevron-right.tsx │ │ ├── cog-tooth.tsx │ │ ├── confirm.tsx │ │ ├── earth.tsx │ │ ├── logo.png │ │ ├── notification.mp3 │ │ ├── pause.tsx │ │ ├── pencil.tsx │ │ ├── play.tsx │ │ ├── reject.tsx │ │ ├── stop.tsx │ │ └── vscode-alt.svg │ ├── components │ │ ├── agent-status-map.constant.ts │ │ ├── extension-icon-map.constant.tsx │ │ ├── features │ │ │ ├── analytics │ │ │ │ └── analytics-consent-form-modal.tsx │ │ │ ├── browser │ │ │ │ ├── browser-snapshot.tsx │ │ │ │ ├── browser.tsx │ │ │ │ └── empty-browser-message.tsx │ │ │ ├── chat │ │ │ │ ├── action-suggestions.tsx │ │ │ │ ├── chat-input.tsx │ │ │ │ ├── chat-interface.tsx │ │ │ │ ├── chat-message.tsx │ │ │ │ ├── chat-suggestions.tsx │ │ │ │ ├── error-message-banner.tsx │ │ │ │ ├── error-message.tsx │ │ │ │ ├── event-content-helpers │ │ │ │ │ ├── get-action-content.ts │ │ │ │ │ ├── get-event-content.tsx │ │ │ │ │ ├── get-observation-content.ts │ │ │ │ │ ├── get-observation-result.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ └── should-render-event.ts │ │ │ │ ├── event-message.tsx │ │ │ │ ├── expandable-message.tsx │ │ │ │ ├── generic-event-message.tsx │ │ │ │ ├── interactive-chat-box.tsx │ │ │ │ ├── mcp-observation-content.tsx │ │ │ │ ├── messages.tsx │ │ │ │ ├── mono-component.tsx │ │ │ │ ├── path-component.tsx │ │ │ │ ├── success-indicator.tsx │ │ │ │ └── typing-indicator.tsx │ │ │ ├── context-menu │ │ │ │ ├── account-settings-context-menu.tsx │ │ │ │ ├── context-menu-list-item.tsx │ │ │ │ ├── context-menu-separator.tsx │ │ │ │ └── context-menu.tsx │ │ │ ├── controls │ │ │ │ ├── agent-control-bar.tsx │ │ │ │ ├── agent-status-bar.tsx │ │ │ │ ├── controls.tsx │ │ │ │ └── security-lock.tsx │ │ │ ├── conversation-panel │ │ │ │ ├── confirm-delete-modal.tsx │ │ │ │ ├── conversation-card-context-menu.tsx │ │ │ │ ├── conversation-card.tsx │ │ │ │ ├── conversation-panel-wrapper.tsx │ │ │ │ ├── conversation-panel.tsx │ │ │ │ ├── conversation-repo-link.tsx │ │ │ │ ├── conversation-state-indicator.tsx │ │ │ │ ├── ellipsis-button.tsx │ │ │ │ ├── exit-conversation-modal.tsx │ │ │ │ ├── state-indicators │ │ │ │ │ ├── cold.svg │ │ │ │ │ ├── cooling.svg │ │ │ │ │ ├── finished.svg │ │ │ │ │ ├── running.svg │ │ │ │ │ ├── waiting.svg │ │ │ │ │ └── warm.svg │ │ │ │ └── system-message-modal.tsx │ │ │ ├── diff-viewer │ │ │ │ └── file-diff-viewer.tsx │ │ │ ├── feedback │ │ │ │ ├── feedback-form.tsx │ │ │ │ └── feedback-modal.tsx │ │ │ ├── home │ │ │ │ ├── connect-to-provider-message.tsx │ │ │ │ ├── home-header.tsx │ │ │ │ ├── repo-connector.tsx │ │ │ │ ├── repo-provider-links.tsx │ │ │ │ ├── repo-selection-form.test.tsx │ │ │ │ ├── repo-selection-form.tsx │ │ │ │ ├── repository-selection │ │ │ │ │ ├── branch-dropdown.tsx │ │ │ │ │ ├── branch-error-state.tsx │ │ │ │ │ ├── branch-loading-state.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── repository-dropdown.tsx │ │ │ │ │ ├── repository-error-state.tsx │ │ │ │ │ └── repository-loading-state.tsx │ │ │ │ └── tasks │ │ │ │ │ ├── task-card.tsx │ │ │ │ │ ├── task-group.tsx │ │ │ │ │ ├── task-issue-number.tsx │ │ │ │ │ ├── task-item-title.tsx │ │ │ │ │ ├── task-suggestions-skeleton.tsx │ │ │ │ │ ├── task-suggestions.tsx │ │ │ │ │ └── task.types.ts │ │ │ ├── images │ │ │ │ ├── attach-image-label.tsx │ │ │ │ ├── image-carousel.tsx │ │ │ │ ├── image-preview.tsx │ │ │ │ ├── thumbnail.tsx │ │ │ │ └── upload-image-input.tsx │ │ │ ├── jupyter │ │ │ │ ├── jupyter-cell-input.tsx │ │ │ │ ├── jupyter-cell-output.tsx │ │ │ │ ├── jupyter-cell.tsx │ │ │ │ └── jupyter.tsx │ │ │ ├── markdown │ │ │ │ ├── anchor.tsx │ │ │ │ ├── code.tsx │ │ │ │ ├── list.tsx │ │ │ │ └── paragraph.tsx │ │ │ ├── payment │ │ │ │ ├── payment-form.tsx │ │ │ │ └── setup-payment-modal.tsx │ │ │ ├── served-host │ │ │ │ └── path-form.tsx │ │ │ ├── settings │ │ │ │ ├── api-key-modal-base.tsx │ │ │ │ ├── api-keys-manager.tsx │ │ │ │ ├── app-settings │ │ │ │ │ ├── app-settings-inputs-skeleton.tsx │ │ │ │ │ └── language-input.tsx │ │ │ │ ├── brand-button.tsx │ │ │ │ ├── create-api-key-modal.tsx │ │ │ │ ├── delete-api-key-modal.tsx │ │ │ │ ├── git-settings │ │ │ │ │ ├── configure-github-repositories-anchor.tsx │ │ │ │ │ ├── github-settings-inputs-skeleton.tsx │ │ │ │ │ ├── github-token-help-anchor.tsx │ │ │ │ │ ├── github-token-input.tsx │ │ │ │ │ ├── gitlab-token-help-anchor.tsx │ │ │ │ │ └── gitlab-token-input.tsx │ │ │ │ ├── help-link.tsx │ │ │ │ ├── input-skeleton.tsx │ │ │ │ ├── key-status-icon.tsx │ │ │ │ ├── llm-settings │ │ │ │ │ ├── llm-settings-inputs-skeleton.tsx │ │ │ │ │ └── reset-settings-modal.tsx │ │ │ │ ├── mcp-settings │ │ │ │ │ ├── mcp-config-editor.tsx │ │ │ │ │ ├── mcp-config-viewer.tsx │ │ │ │ │ ├── mcp-json-editor.tsx │ │ │ │ │ ├── mcp-sse-servers.tsx │ │ │ │ │ └── mcp-stdio-servers.tsx │ │ │ │ ├── new-api-key-modal.tsx │ │ │ │ ├── optional-tag.tsx │ │ │ │ ├── secrets-settings │ │ │ │ │ ├── secret-form.tsx │ │ │ │ │ └── secret-list-item.tsx │ │ │ │ ├── settings-dropdown-input.tsx │ │ │ │ ├── settings-input.tsx │ │ │ │ ├── settings-switch.tsx │ │ │ │ ├── styled-switch-component.tsx │ │ │ │ ├── subtext-skeleton.tsx │ │ │ │ └── switch-skeleton.tsx │ │ │ ├── sidebar │ │ │ │ ├── avatar.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── user-actions.tsx │ │ │ │ └── user-avatar.tsx │ │ │ ├── suggestions │ │ │ │ ├── replay-suggestion-box.tsx │ │ │ │ ├── suggestion-box.tsx │ │ │ │ ├── suggestion-bubble.tsx │ │ │ │ ├── suggestion-item.tsx │ │ │ │ └── suggestions.tsx │ │ │ ├── terminal │ │ │ │ └── terminal.tsx │ │ │ ├── tips │ │ │ │ └── random-tip.tsx │ │ │ ├── trajectory │ │ │ │ └── trajectory-actions.tsx │ │ │ └── waitlist │ │ │ │ ├── auth-modal.tsx │ │ │ │ ├── reauth-modal.tsx │ │ │ │ └── tos-checkbox.tsx │ │ ├── layout │ │ │ ├── beta-badge.tsx │ │ │ ├── container.tsx │ │ │ ├── count-badge.tsx │ │ │ ├── nav-tab.tsx │ │ │ ├── resizable-panel.tsx │ │ │ ├── served-app-label.tsx │ │ │ └── tab-content.tsx │ │ └── shared │ │ │ ├── action-tooltip.tsx │ │ │ ├── buttons │ │ │ ├── action-button.tsx │ │ │ ├── all-hands-logo-button.tsx │ │ │ ├── confirmation-buttons.tsx │ │ │ ├── conversation-panel-button.tsx │ │ │ ├── copy-to-clipboard-button.tsx │ │ │ ├── docs-button.tsx │ │ │ ├── editor-action-button.tsx │ │ │ ├── icon-button.tsx │ │ │ ├── modal-button.tsx │ │ │ ├── new-project-button.tsx │ │ │ ├── refresh-button.tsx │ │ │ ├── refresh-icon-button.tsx │ │ │ ├── remove-button.tsx │ │ │ ├── scroll-to-bottom-button.tsx │ │ │ ├── settings-button.tsx │ │ │ ├── stop-button.tsx │ │ │ ├── submit-button.tsx │ │ │ ├── tooltip-button.tsx │ │ │ └── trajectory-action-button.tsx │ │ │ ├── custom-input.tsx │ │ │ ├── error-toast.tsx │ │ │ ├── hero-heading.tsx │ │ │ ├── inputs │ │ │ ├── advanced-option-switch.tsx │ │ │ ├── api-key-input.tsx │ │ │ ├── base-url-input.tsx │ │ │ ├── confirmation-mode-switch.tsx │ │ │ └── custom-model-input.tsx │ │ │ ├── loading-spinner.tsx │ │ │ ├── modals │ │ │ ├── base-modal │ │ │ │ ├── base-modal.tsx │ │ │ │ ├── footer-content.tsx │ │ │ │ └── header-content.tsx │ │ │ ├── confirmation-modal.tsx │ │ │ ├── confirmation-modals │ │ │ │ ├── base-modal.tsx │ │ │ │ └── danger-modal.tsx │ │ │ ├── modal-backdrop.tsx │ │ │ ├── modal-body.tsx │ │ │ ├── security │ │ │ │ ├── invariant │ │ │ │ │ ├── assets │ │ │ │ │ │ └── logo.tsx │ │ │ │ │ └── invariant.tsx │ │ │ │ └── security.tsx │ │ │ └── settings │ │ │ │ ├── model-selector.tsx │ │ │ │ ├── settings-form.tsx │ │ │ │ └── settings-modal.tsx │ │ │ └── task-form.tsx │ ├── context │ │ └── ws-client-provider.tsx │ ├── entry.client.tsx │ ├── hooks │ │ ├── mutation │ │ │ ├── stripe │ │ │ │ └── use-create-stripe-checkout-session.ts │ │ │ ├── use-add-git-providers.ts │ │ │ ├── use-create-api-key.ts │ │ │ ├── use-create-conversation.ts │ │ │ ├── use-create-secret.ts │ │ │ ├── use-delete-api-key.ts │ │ │ ├── use-delete-conversation.ts │ │ │ ├── use-delete-secret.ts │ │ │ ├── use-get-trajectory.ts │ │ │ ├── use-logout.ts │ │ │ ├── use-save-settings.ts │ │ │ ├── use-submit-feedback.ts │ │ │ └── use-update-secret.ts │ │ ├── query │ │ │ ├── use-active-conversation.ts │ │ │ ├── use-active-host.ts │ │ │ ├── use-ai-config-options.ts │ │ │ ├── use-api-keys.ts │ │ │ ├── use-balance.ts │ │ │ ├── use-config.ts │ │ │ ├── use-conversation-config.ts │ │ │ ├── use-get-diff.ts │ │ │ ├── use-get-git-changes.ts │ │ │ ├── use-get-policy.ts │ │ │ ├── use-get-risk-severity.ts │ │ │ ├── use-get-secrets.ts │ │ │ ├── use-get-traces.ts │ │ │ ├── use-git-user.ts │ │ │ ├── use-is-authed.ts │ │ │ ├── use-repository-branches.ts │ │ │ ├── use-search-repositories.ts │ │ │ ├── use-settings.ts │ │ │ ├── use-suggested-tasks.ts │ │ │ ├── use-user-conversation.ts │ │ │ ├── use-user-conversations.ts │ │ │ ├── use-user-repositories.ts │ │ │ └── use-vscode-url.ts │ │ ├── use-auth-callback.ts │ │ ├── use-auth-url.ts │ │ ├── use-auto-login.ts │ │ ├── use-click-outside-element.ts │ │ ├── use-conversation-id.ts │ │ ├── use-debounce.ts │ │ ├── use-document-title-from-state.ts │ │ ├── use-effect-once.ts │ │ ├── use-github-auth-url.ts │ │ ├── use-handle-runtime-active.ts │ │ ├── use-handle-ws-events.ts │ │ ├── use-is-creating-conversation.ts │ │ ├── use-is-on-tos-page.ts │ │ ├── use-migrate-user-consent.ts │ │ ├── use-optimistic-user-message.ts │ │ ├── use-rate.ts │ │ ├── use-runtime-is-ready.ts │ │ ├── use-scroll-to-bottom.ts │ │ ├── use-terminal.ts │ │ ├── use-user-providers.ts │ │ ├── use-ws-error-message.ts │ │ └── useNotification.ts │ ├── i18n │ │ ├── declaration.ts │ │ ├── index.ts │ │ └── translation.json │ ├── icons │ │ ├── academy.svg │ │ ├── angle-down-solid.svg │ │ ├── angle-up-solid.svg │ │ ├── arrow-send.svg │ │ ├── build-it.svg │ │ ├── check-circle-solid.svg │ │ ├── checkmark.svg │ │ ├── chevron-double-right.svg │ │ ├── chveron-up.svg │ │ ├── clip.svg │ │ ├── clipboard.svg │ │ ├── close.svg │ │ ├── cloud-connection.svg │ │ ├── code.svg │ │ ├── copy.svg │ │ ├── default-user.svg │ │ ├── docs.svg │ │ ├── ellipsis-h.svg │ │ ├── export.svg │ │ ├── external-link.svg │ │ ├── folder.svg │ │ ├── globe.svg │ │ ├── hands.svg │ │ ├── jupyter.svg │ │ ├── lightbulb.svg │ │ ├── list-type-number.svg │ │ ├── loading-outer.svg │ │ ├── message.svg │ │ ├── money.svg │ │ ├── new-project.svg │ │ ├── play.svg │ │ ├── plus.svg │ │ ├── profile.svg │ │ ├── refresh.svg │ │ ├── send.svg │ │ ├── settings.svg │ │ ├── success.svg │ │ ├── terminal.svg │ │ ├── thumbs-down.svg │ │ ├── thumbs-up.svg │ │ ├── warning.svg │ │ └── x-circle-solid.svg │ ├── ignore-task-state-map.constant.ts │ ├── index.css │ ├── message.d.ts │ ├── mocks │ │ ├── billing-handlers.ts │ │ ├── browser.ts │ │ ├── file-service-handlers.ts │ │ ├── handlers.ts │ │ ├── handlers.ws.ts │ │ ├── mock-ws-helpers.ts │ │ ├── node.ts │ │ ├── secrets-handlers.ts │ │ ├── session-history.mock.ts │ │ └── task-suggestions-handlers.ts │ ├── query-client-config.ts │ ├── react-app-env.d.ts │ ├── root.tsx │ ├── routes.ts │ ├── routes │ │ ├── accept-tos.tsx │ │ ├── api-keys.tsx │ │ ├── app-settings.tsx │ │ ├── billing.tsx │ │ ├── browser-tab.tsx │ │ ├── changes-tab.tsx │ │ ├── conversation.tsx │ │ ├── git-settings.tsx │ │ ├── home.tsx │ │ ├── jupyter-tab.tsx │ │ ├── llm-settings.tsx │ │ ├── mcp-settings.tsx │ │ ├── root-layout.tsx │ │ ├── secrets-settings.tsx │ │ ├── served-tab.tsx │ │ ├── settings.tsx │ │ ├── terminal-tab.tsx │ │ └── vscode-tab.tsx │ ├── services │ │ ├── __tests__ │ │ │ └── actions.test.ts │ │ ├── actions.ts │ │ ├── agent-state-service.ts │ │ ├── chat-service.ts │ │ ├── observations.ts │ │ ├── settings.ts │ │ └── terminal-service.ts │ ├── state │ │ ├── agent-slice.tsx │ │ ├── browser-slice.ts │ │ ├── code-slice.ts │ │ ├── command-slice.ts │ │ ├── file-state-slice.ts │ │ ├── initial-query-slice.ts │ │ ├── jupyter-slice.ts │ │ ├── metrics-slice.ts │ │ ├── security-analyzer-slice.ts │ │ └── status-slice.ts │ ├── store.ts │ ├── tailwind.css │ ├── types │ │ ├── action-type.tsx │ │ ├── agent-state.tsx │ │ ├── config-type.tsx │ │ ├── core │ │ │ ├── actions.ts │ │ │ ├── base.ts │ │ │ ├── guards.ts │ │ │ ├── index.ts │ │ │ ├── observations.ts │ │ │ └── variances.ts │ │ ├── file-system.d.ts │ │ ├── git.d.ts │ │ ├── message.tsx │ │ ├── observation-type.tsx │ │ ├── react-query.d.ts │ │ ├── response-type.tsx │ │ ├── settings.ts │ │ └── tab-option.tsx │ ├── utils │ │ ├── __tests__ │ │ │ └── vscode-url-helper.test.ts │ │ ├── amount-is-valid.ts │ │ ├── base64-to-blob.ts │ │ ├── beep.tsx │ │ ├── browser-tab.ts │ │ ├── constants.ts │ │ ├── convert-file-to-text.ts │ │ ├── convert-image-to-base-64.ts │ │ ├── convert-raw-providers-to-list.ts │ │ ├── custom-toast-handlers.tsx │ │ ├── download-json.ts │ │ ├── download-trajectory.ts │ │ ├── error-handler.ts │ │ ├── event-logger.ts │ │ ├── extract-model-and-provider.ts │ │ ├── extract-next-page-from-link.ts │ │ ├── feature-flags.ts │ │ ├── format-ms.ts │ │ ├── format-time-delta.ts │ │ ├── generate-auth-url.ts │ │ ├── get-language-from-path.ts │ │ ├── get-random-key.ts │ │ ├── gget-formatted-datetime.ts │ │ ├── group-suggested-tasks.ts │ │ ├── handle-capture-consent.ts │ │ ├── has-advanced-settings-set.ts │ │ ├── is-custom-model.ts │ │ ├── is-number.ts │ │ ├── is-on-tos-page.ts │ │ ├── local-storage.ts │ │ ├── map-provider.ts │ │ ├── organize-models-and-providers.ts │ │ ├── parse-cell-content.ts │ │ ├── parse-github-url.ts │ │ ├── parse-terminal-output.ts │ │ ├── retrieve-axios-error-message.ts │ │ ├── sanitize-query.ts │ │ ├── settings-utils.ts │ │ ├── suggestions │ │ │ ├── index.ts │ │ │ ├── non-repo-suggestions.ts │ │ │ └── repo-suggestions.ts │ │ ├── tips.ts │ │ ├── toast.tsx │ │ ├── type-guards.ts │ │ ├── utils.ts │ │ ├── verified-models.ts │ │ └── vscode-url-helper.ts │ └── wrapper │ │ └── event-handler.tsx ├── tailwind.config.js ├── test-utils.tsx ├── tests │ ├── conversation-panel.test.ts │ ├── fixtures │ │ └── project.zip │ ├── helpers │ │ └── confirm-settings.ts │ ├── redirect.spec.ts │ ├── repo-selection-form.test.tsx │ └── settings.spec.ts ├── tsconfig.json ├── vite-env.d.ts ├── vite.config.ts └── vitest.setup.ts ├── microagents ├── README.md ├── add_agent.md ├── agent_memory.md ├── default-tools.md ├── docker.md ├── flarglebargle.md ├── github.md ├── gitlab.md ├── kubernetes.md ├── npm.md ├── pdflatex.md ├── security.md ├── ssh.md └── swift-linux.md ├── openhands ├── README.md ├── __init__.py ├── agenthub │ ├── README.md │ ├── __init__.py │ ├── browsing_agent │ │ ├── README.md │ │ ├── __init__.py │ │ ├── browsing_agent.py │ │ ├── response_parser.py │ │ └── utils.py │ ├── codeact_agent │ │ ├── README.md │ │ ├── __init__.py │ │ ├── codeact_agent.py │ │ ├── function_calling.py │ │ ├── prompts │ │ │ ├── additional_info.j2 │ │ │ ├── in_context_learning_example.j2 │ │ │ ├── in_context_learning_example_suffix.j2 │ │ │ ├── microagent_info.j2 │ │ │ ├── system_prompt.j2 │ │ │ └── user_prompt.j2 │ │ └── tools │ │ │ ├── __init__.py │ │ │ ├── bash.py │ │ │ ├── browser.py │ │ │ ├── finish.py │ │ │ ├── ipython.py │ │ │ ├── llm_based_edit.py │ │ │ ├── str_replace_editor.py │ │ │ └── think.py │ ├── dummy_agent │ │ ├── __init__.py │ │ └── agent.py │ ├── loc_agent │ │ ├── README.md │ │ ├── __init__.py │ │ ├── function_calling.py │ │ ├── loc_agent.py │ │ └── tools │ │ │ ├── __init__.py │ │ │ ├── explore_structure.py │ │ │ └── search_content.py │ ├── readonly_agent │ │ ├── __init__.py │ │ ├── function_calling.py │ │ ├── prompts │ │ │ ├── additional_info.j2 │ │ │ ├── in_context_learning_example.j2 │ │ │ ├── in_context_learning_example_suffix.j2 │ │ │ ├── microagent_info.j2 │ │ │ ├── system_prompt.j2 │ │ │ └── user_prompt.j2 │ │ ├── readonly_agent.py │ │ └── tools │ │ │ ├── __init__.py │ │ │ ├── glob.py │ │ │ ├── grep.py │ │ │ └── view.py │ └── visualbrowsing_agent │ │ ├── README.md │ │ ├── __init__.py │ │ └── visualbrowsing_agent.py ├── cli │ ├── commands.py │ ├── main.py │ ├── settings.py │ ├── tui.py │ └── utils.py ├── controller │ ├── __init__.py │ ├── action_parser.py │ ├── agent.py │ ├── agent_controller.py │ ├── replay.py │ ├── state │ │ └── state.py │ └── stuck.py ├── core │ ├── config │ │ ├── README.md │ │ ├── __init__.py │ │ ├── agent_config.py │ │ ├── condenser_config.py │ │ ├── config_utils.py │ │ ├── extended_config.py │ │ ├── llm_config.py │ │ ├── mcp_config.py │ │ ├── openhands_config.py │ │ ├── sandbox_config.py │ │ ├── security_config.py │ │ └── utils.py │ ├── const │ │ └── guide_url.py │ ├── download.py │ ├── exceptions.py │ ├── logger.py │ ├── loop.py │ ├── main.py │ ├── message.py │ ├── message_format.md │ ├── message_utils.py │ ├── schema │ │ ├── __init__.py │ │ ├── action.py │ │ ├── agent.py │ │ └── observation.py │ └── setup.py ├── critic │ ├── __init__.py │ ├── base.py │ └── finish_critic.py ├── events │ ├── __init__.py │ ├── action │ │ ├── __init__.py │ │ ├── action.py │ │ ├── agent.py │ │ ├── browse.py │ │ ├── commands.py │ │ ├── empty.py │ │ ├── files.py │ │ ├── mcp.py │ │ └── message.py │ ├── async_event_store_wrapper.py │ ├── event.py │ ├── event_filter.py │ ├── event_store.py │ ├── event_store_abc.py │ ├── nested_event_store.py │ ├── observation │ │ ├── __init__.py │ │ ├── agent.py │ │ ├── browse.py │ │ ├── commands.py │ │ ├── delegate.py │ │ ├── empty.py │ │ ├── error.py │ │ ├── files.py │ │ ├── mcp.py │ │ ├── observation.py │ │ ├── reject.py │ │ └── success.py │ ├── serialization │ │ ├── __init__.py │ │ ├── action.py │ │ ├── event.py │ │ ├── observation.py │ │ └── utils.py │ ├── stream.py │ ├── tool.py │ └── utils.py ├── integrations │ ├── github │ │ ├── github_service.py │ │ └── queries.py │ ├── gitlab │ │ └── gitlab_service.py │ ├── provider.py │ ├── service_types.py │ ├── templates │ │ ├── resolver │ │ │ ├── github │ │ │ │ ├── issue_comment_conversation_instructions.j2 │ │ │ │ ├── issue_comment_prompt.j2 │ │ │ │ ├── issue_labeled_conversation_instructions.j2 │ │ │ │ ├── issue_labeled_prompt.j2 │ │ │ │ ├── pr_update_conversation_instructions.j2 │ │ │ │ └── pr_update_prompt.j2 │ │ │ ├── gitlab │ │ │ │ ├── issue_comment_conversation_instructions.j2 │ │ │ │ ├── issue_comment_prompt.j2 │ │ │ │ ├── issue_labeled_conversation_instructions.j2 │ │ │ │ ├── issue_labeled_prompt.j2 │ │ │ │ ├── mr_update_conversation_instructions.j2 │ │ │ │ └── mr_update_prompt.j2 │ │ │ ├── slack │ │ │ │ └── user_message_conversation_instructions.j2 │ │ │ └── summary_prompt.j2 │ │ └── suggested_task │ │ │ ├── failing_checks_prompt.j2 │ │ │ ├── merge_conflict_prompt.j2 │ │ │ ├── open_issue_prompt.j2 │ │ │ └── unresolved_comments_prompt.j2 │ └── utils.py ├── io │ ├── __init__.py │ ├── io.py │ └── json.py ├── linter │ └── __init__.py ├── llm │ ├── __init__.py │ ├── async_llm.py │ ├── bedrock.py │ ├── debug_mixin.py │ ├── fn_call_converter.py │ ├── llm.py │ ├── llm_utils.py │ ├── metrics.py │ ├── retry_mixin.py │ ├── streaming_llm.py │ └── tool_names.py ├── mcp │ ├── __init__.py │ ├── client.py │ ├── tool.py │ └── utils.py ├── memory │ ├── README.md │ ├── __init__.py │ ├── condenser │ │ ├── __init__.py │ │ ├── condenser.py │ │ └── impl │ │ │ ├── __init__.py │ │ │ ├── amortized_forgetting_condenser.py │ │ │ ├── browser_output_condenser.py │ │ │ ├── llm_attention_condenser.py │ │ │ ├── llm_summarizing_condenser.py │ │ │ ├── no_op_condenser.py │ │ │ ├── observation_masking_condenser.py │ │ │ ├── pipeline.py │ │ │ ├── recent_events_condenser.py │ │ │ └── structured_summary_condenser.py │ ├── conversation_memory.py │ ├── memory.py │ └── view.py ├── microagent │ ├── __init__.py │ ├── microagent.py │ └── types.py ├── py.typed ├── resolver │ ├── README.md │ ├── __init__.py │ ├── examples │ │ └── openhands-resolver.yml │ ├── interfaces │ │ ├── github.py │ │ ├── gitlab.py │ │ ├── issue.py │ │ └── issue_definitions.py │ ├── io_utils.py │ ├── issue_handler_factory.py │ ├── issue_resolver.py │ ├── patching │ │ ├── README.md │ │ ├── __init__.py │ │ ├── apply.py │ │ ├── exceptions.py │ │ ├── patch.py │ │ └── snippets.py │ ├── prompts │ │ ├── guess_success │ │ │ ├── issue-success-check.jinja │ │ │ ├── pr-feedback-check.jinja │ │ │ ├── pr-review-check.jinja │ │ │ └── pr-thread-check.jinja │ │ ├── repo_instructions │ │ │ ├── all-hands-ai___openhands-resolver.txt │ │ │ ├── all-hands-ai___openhands.txt │ │ │ └── rbren___rss-parser.txt │ │ └── resolve │ │ │ ├── basic-conversation-instructions.jinja │ │ │ ├── basic-followup-conversation-instructions.jinja │ │ │ ├── basic-followup.jinja │ │ │ ├── basic-with-tests-conversation-instructions.jinja │ │ │ ├── basic-with-tests.jinja │ │ │ ├── basic.jinja │ │ │ └── pr-changes-summary.jinja │ ├── resolve_issue.py │ ├── resolver_output.py │ ├── send_pull_request.py │ ├── utils.py │ └── visualize_resolver_output.py ├── runtime │ ├── README.md │ ├── __init__.py │ ├── action_execution_server.py │ ├── base.py │ ├── browser │ │ ├── __init__.py │ │ ├── base64.py │ │ ├── browser_env.py │ │ └── utils.py │ ├── builder │ │ ├── __init__.py │ │ ├── base.py │ │ ├── docker.py │ │ └── remote.py │ ├── file_viewer_server.py │ ├── impl │ │ ├── __init__.py │ │ ├── action_execution │ │ │ └── action_execution_client.py │ │ ├── cli │ │ │ ├── __init__.py │ │ │ └── cli_runtime.py │ │ ├── daytona │ │ │ ├── README.md │ │ │ └── daytona_runtime.py │ │ ├── docker │ │ │ ├── containers.py │ │ │ └── docker_runtime.py │ │ ├── e2b │ │ │ ├── README.md │ │ │ ├── e2b_runtime.py │ │ │ ├── filestore.py │ │ │ └── sandbox.py │ │ ├── local │ │ │ ├── __init__.py │ │ │ └── local_runtime.py │ │ ├── modal │ │ │ └── modal_runtime.py │ │ ├── remote │ │ │ └── remote_runtime.py │ │ └── runloop │ │ │ ├── README.md │ │ │ └── runloop_runtime.py │ ├── mcp │ │ └── config.json │ ├── plugins │ │ ├── __init__.py │ │ ├── agent_skills │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── agentskills.py │ │ │ ├── file_editor │ │ │ │ ├── README.md │ │ │ │ └── __init__.py │ │ │ ├── file_ops │ │ │ │ ├── __init__.py │ │ │ │ └── file_ops.py │ │ │ ├── file_reader │ │ │ │ ├── __init__.py │ │ │ │ └── file_readers.py │ │ │ ├── repo_ops │ │ │ │ ├── __init__.py │ │ │ │ └── repo_ops.py │ │ │ └── utils │ │ │ │ ├── config.py │ │ │ │ └── dependency.py │ │ ├── jupyter │ │ │ ├── __init__.py │ │ │ └── execute_server.py │ │ ├── requirement.py │ │ └── vscode │ │ │ ├── __init__.py │ │ │ └── settings.json │ └── utils │ │ ├── __init__.py │ │ ├── async_bash.py │ │ ├── bash.py │ │ ├── command.py │ │ ├── edit.py │ │ ├── file_viewer.py │ │ ├── files.py │ │ ├── git_handler.py │ │ ├── log_capture.py │ │ ├── log_streamer.py │ │ ├── memory_monitor.py │ │ ├── request.py │ │ ├── runtime_build.py │ │ ├── runtime_init.py │ │ ├── runtime_templates │ │ └── Dockerfile.j2 │ │ ├── singleton.py │ │ ├── system.py │ │ ├── system_stats.py │ │ ├── tenacity_stop.py │ │ ├── vscode-extensions │ │ ├── hello-world │ │ │ ├── extension.js │ │ │ └── package.json │ │ └── memory-monitor │ │ │ ├── README.md │ │ │ ├── extension.js │ │ │ ├── memory_monitor.js │ │ │ ├── package.json │ │ │ └── process_monitor.js │ │ └── windows_bash.py ├── security │ ├── README.md │ ├── __init__.py │ ├── analyzer.py │ ├── invariant │ │ ├── __init__.py │ │ ├── analyzer.py │ │ ├── client.py │ │ ├── nodes.py │ │ ├── parser.py │ │ └── policies.py │ └── options.py ├── server │ ├── README.md │ ├── __init__.py │ ├── __main__.py │ ├── app.py │ ├── config │ │ └── server_config.py │ ├── conversation_manager │ │ ├── conversation_manager.py │ │ ├── docker_nested_conversation_manager.py │ │ └── standalone_conversation_manager.py │ ├── data_models │ │ ├── agent_loop_info.py │ │ ├── conversation_info.py │ │ ├── conversation_info_result_set.py │ │ └── feedback.py │ ├── dependencies.py │ ├── file_config.py │ ├── listen.py │ ├── listen_socket.py │ ├── middleware.py │ ├── mock │ │ ├── README.md │ │ └── listen.py │ ├── monitoring.py │ ├── routes │ │ ├── conversation.py │ │ ├── feedback.py │ │ ├── files.py │ │ ├── git.py │ │ ├── health.py │ │ ├── manage_conversations.py │ │ ├── mcp.py │ │ ├── public.py │ │ ├── secrets.py │ │ ├── security.py │ │ ├── settings.py │ │ └── trajectory.py │ ├── services │ │ └── conversation_service.py │ ├── session │ │ ├── README.md │ │ ├── __init__.py │ │ ├── agent_session.py │ │ ├── conversation.py │ │ ├── conversation_init_data.py │ │ └── session.py │ ├── settings.py │ ├── shared.py │ ├── static.py │ ├── types.py │ ├── user_auth │ │ ├── __init__.py │ │ ├── default_user_auth.py │ │ └── user_auth.py │ └── utils.py ├── storage │ ├── README.md │ ├── __init__.py │ ├── conversation │ │ ├── conversation_store.py │ │ ├── conversation_validator.py │ │ └── file_conversation_store.py │ ├── data_models │ │ ├── conversation_metadata.py │ │ ├── conversation_metadata_result_set.py │ │ ├── conversation_status.py │ │ ├── settings.py │ │ └── user_secrets.py │ ├── files.py │ ├── google_cloud.py │ ├── local.py │ ├── locations.py │ ├── memory.py │ ├── s3.py │ ├── secrets │ │ ├── file_secrets_store.py │ │ └── secrets_store.py │ ├── settings │ │ ├── file_settings_store.py │ │ └── settings_store.py │ └── web_hook.py └── utils │ ├── async_utils.py │ ├── chunk_localizer.py │ ├── conversation_summary.py │ ├── ensure_httpx_close.py │ ├── http_session.py │ ├── import_utils.py │ ├── llm.py │ ├── prompt.py │ ├── search_utils.py │ ├── shutdown_listener.py │ ├── tenacity_stop.py │ └── term_color.py ├── poetry.lock ├── pydoc-markdown.yml ├── pyproject.toml ├── pytest.ini └── tests ├── runtime ├── README.md ├── conftest.py ├── test_aci_edit.py ├── test_bash.py ├── test_browsergym_envs.py ├── test_browsing.py ├── test_docker_images.py ├── test_env_vars.py ├── test_glob_and_grep.py ├── test_ipython.py ├── test_llm_based_edit.py ├── test_mcp_action.py ├── test_microagent.py ├── test_replay.py ├── test_runtime_resource.py ├── test_setup.py ├── test_stress_remote_runtime.py ├── trajs │ ├── basic.json │ ├── basic_gui_mode.json │ ├── basic_interactions.json │ └── wrong_initial_state.json └── utils │ └── test_system_stats.py ├── test_fileops.py └── unit ├── README.md ├── core └── config │ └── test_config_utils.py ├── frontend └── test_translation_completeness.py ├── resolver ├── github │ ├── test_guess_success.py │ ├── test_issue_handler.py │ ├── test_issue_handler_error_handling.py │ ├── test_pr_handler_guess_success.py │ ├── test_pr_title_escaping.py │ ├── test_resolve_issues.py │ └── test_send_pull_request.py ├── gitlab │ ├── test_gitlab_guess_success.py │ ├── test_gitlab_issue_handler.py │ ├── test_gitlab_issue_handler_error_handling.py │ ├── test_gitlab_pr_handler_guess_success.py │ ├── test_gitlab_pr_title_escaping.py │ ├── test_gitlab_resolve_issues.py │ └── test_gitlab_send_pull_request.py ├── mock_output │ ├── output.jsonl │ └── repo │ │ └── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── PullRequestViewer.test.tsx │ │ └── PullRequestViewer.tsx ├── test_issue_handler_factory.py ├── test_issue_references.py ├── test_patch_apply.py └── test_resolve_issue.py ├── test_acompletion.py ├── test_action_serialization.py ├── test_agent_controller.py ├── test_agent_delegation.py ├── test_agent_history.py ├── test_agent_session.py ├── test_agent_skill.py ├── test_agents.py ├── test_arg_parser.py ├── test_async_utils.py ├── test_auto_generate_title.py ├── test_bash_parsing.py ├── test_bash_ps1_metadata.py ├── test_bash_session.py ├── test_browsing_agent_parser.py ├── test_chunk_localizer.py ├── test_cli.py ├── test_cli_commands.py ├── test_cli_pause_resume.py ├── test_cli_settings.py ├── test_cli_tui.py ├── test_cli_utils.py ├── test_cli_workspace.py ├── test_command_success.py ├── test_condenser.py ├── test_config.py ├── test_config_dict_casting.py ├── test_config_extended.py ├── test_conversation.py ├── test_conversation_memory.py ├── test_conversation_summary.py ├── test_docker_runtime.py ├── test_ensure_httpx_close.py ├── test_event_serialization.py ├── test_event_stream.py ├── test_file_conversation_store.py ├── test_file_edit_observation.py ├── test_file_settings_store.py ├── test_function_calling.py ├── test_git_handler.py ├── test_git_handler_real.py ├── test_git_hooks.py ├── test_github_service.py ├── test_import_utils.py ├── test_io.py ├── test_is_stuck.py ├── test_iteration_limit.py ├── test_json.py ├── test_json_encoder.py ├── test_listen.py ├── test_llm.py ├── test_llm_config.py ├── test_llm_draft_config.py ├── test_llm_fncall_converter.py ├── test_log_streamer.py ├── test_logger.py ├── test_logger_litellm.py ├── test_logging.py ├── test_mcp_action_observation.py ├── test_mcp_client_timeout.py ├── test_mcp_config.py ├── test_mcp_create_clients_timeout.py ├── test_mcp_timeout.py ├── test_mcp_utils.py ├── test_memory.py ├── test_message_serialization.py ├── test_message_utils.py ├── test_microagent_no_header.py ├── test_microagent_utils.py ├── test_middleware.py ├── test_observation_serialization.py ├── test_openapi_schema_generation.py ├── test_patch_whitespace.py ├── test_prompt_caching.py ├── test_prompt_manager.py ├── test_provider_immutability.py ├── test_runtime_build.py ├── test_runtime_git_tokens.py ├── test_runtime_reboot.py ├── test_search_utils.py ├── test_secret_store.py ├── test_secrets_api.py ├── test_security.py ├── test_session.py ├── test_settings.py ├── test_settings_api.py ├── test_settings_store_functions.py ├── test_shutdown_listener.py ├── test_socket_events.py ├── test_standalone_conversation_manager.py ├── test_state.py ├── test_storage.py ├── test_suggested_tasks.py ├── test_traffic_control.py └── test_windows_bash.py /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see: https://aka.ms/devcontainer.json 2 | { 3 | "name": "Python 3", 4 | // Documentation for this image: 5 | // - https://github.com/devcontainers/templates/tree/main/src/python 6 | // - https://github.com/microsoft/vscode-remote-try-python 7 | // - https://hub.docker.com/r/microsoft/devcontainers-python 8 | "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", 9 | "features": { 10 | "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}, 11 | "ghcr.io/devcontainers-extra/features/poetry:2": {}, 12 | "ghcr.io/devcontainers/features/node:1": {}, 13 | }, 14 | "postCreateCommand": ".devcontainer/setup.sh", 15 | } 16 | -------------------------------------------------------------------------------- /.devcontainer/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Install `nc` 4 | sudo apt update && sudo apt install netcat -y 5 | 6 | # Do common setup tasks 7 | source .openhands/setup.sh 8 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | frontend/node_modules 2 | config.toml 3 | .envrc 4 | .env 5 | .git 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | # force *nix line endings so files don't look modified in container run from Windows clone 3 | end_of_line = lf 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ipynb linguist-vendored 2 | 3 | # force *nix line endings so files don't look modified in container run from Windows clone 4 | * text eol=lf 5 | # Git incorrectly thinks some media is text 6 | *.png -text 7 | *.mp4 -text 8 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # CODEOWNERS file for OpenHands repository 2 | # See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners 3 | 4 | # Frontend code owners 5 | /frontend/ @rbren @amanape 6 | 7 | # Evaluation code owners 8 | /evaluation/ @xingyaoww @neubig 9 | 10 | # Documentation code owners 11 | /docs/ @mamoodi 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request or Enhancement 3 | about: Suggest an idea for an OpenHands feature or enhancement 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **What problem or use case are you trying to solve?** 11 | 12 | **Describe the UX or technical implementation you have in mind** 13 | 14 | **Additional context** 15 | 16 | 17 | ### If you find this feature request or enhancement useful, make sure to add a 👍 to the issue 18 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | - [ ] This change is worth documenting at https://docs.all-hands.dev/ 2 | - [ ] Include this change in the Release Notes. If checked, you **must** provide an **end-user friendly** description for your change below 3 | 4 | **End-user friendly description of the problem this fixes or functionality this introduces.** 5 | 6 | 7 | --- 8 | **Summarize what the PR does, explaining any non-trivial design decisions.** 9 | 10 | 11 | --- 12 | **Link of any specific issues this addresses:** 13 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22 2 | -------------------------------------------------------------------------------- /.openhands/setup.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | echo "Setting up the environment..." 4 | 5 | # Install pre-commit package 6 | python -m pip install pre-commit 7 | 8 | # Install pre-commit hooks if .git directory exists 9 | if [ -d ".git" ]; then 10 | echo "Installing pre-commit hooks..." 11 | pre-commit install 12 | make install-pre-commit-hooks 13 | fi 14 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // force *nix line endings so files don't look modified in container run from Windows clone 3 | "files.eol": "\n", 4 | "files.trimTrailingWhitespace": true, 5 | "files.insertFinalNewline": true, 6 | } 7 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | # Exclude all Python bytecode files 2 | global-exclude *.pyc 3 | 4 | # Exclude Python cache directories 5 | global-exclude __pycache__ 6 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | poetry build -v 5 | -------------------------------------------------------------------------------- /containers/README.md: -------------------------------------------------------------------------------- 1 | # Docker Containers 2 | 3 | Each folder here contains a Dockerfile, and a config.sh describing how to build 4 | the images and where to push them. These images are built and pushed in GitHub Actions 5 | by the `ghcr.yml` workflow. 6 | 7 | ## Building Manually 8 | 9 | ```bash 10 | docker build -f containers/app/Dockerfile -t openhands . 11 | docker build -f containers/sandbox/Dockerfile -t sandbox . 12 | ``` 13 | -------------------------------------------------------------------------------- /containers/app/config.sh: -------------------------------------------------------------------------------- 1 | DOCKER_REGISTRY=ghcr.io 2 | DOCKER_ORG=all-hands-ai 3 | DOCKER_IMAGE=openhands 4 | DOCKER_BASE_DIR="." 5 | -------------------------------------------------------------------------------- /containers/e2b-sandbox/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:22.04 2 | 3 | # install basic packages 4 | RUN apt-get update && apt-get install -y \ 5 | curl \ 6 | wget \ 7 | git \ 8 | vim \ 9 | nano \ 10 | unzip \ 11 | zip \ 12 | python3 \ 13 | python3-pip \ 14 | python3-venv \ 15 | python3-dev \ 16 | build-essential \ 17 | openssh-server \ 18 | sudo \ 19 | && rm -rf /var/lib/apt/lists/* 20 | -------------------------------------------------------------------------------- /containers/e2b-sandbox/README.md: -------------------------------------------------------------------------------- 1 | # How to build custom E2B sandbox for OpenHands 2 | 3 | [E2B](https://e2b.dev) is an [open-source](https://github.com/e2b-dev/e2b) secure cloud environment (sandbox) made for running AI-generated code and agents. E2B offers [Python](https://pypi.org/project/e2b/) and [JS/TS](https://www.npmjs.com/package/e2b) SDK to spawn and control these sandboxes. 4 | 5 | 6 | 1. Install the CLI with NPM. 7 | ```sh 8 | npm install -g @e2b/cli@latest 9 | ``` 10 | Full CLI API is [here](https://e2b.dev/docs/cli/installation). 11 | 12 | 1. Build the sandbox 13 | ```sh 14 | e2b template build --dockerfile ./Dockerfile --name "openhands" 15 | ``` 16 | -------------------------------------------------------------------------------- /containers/e2b-sandbox/e2b.toml: -------------------------------------------------------------------------------- 1 | # This is a config for E2B sandbox template. 2 | # You can use 'template_id' (785n69crgahmz0lkdw9h) or 'template_name (openhands) from this config to spawn a sandbox: 3 | 4 | # Python SDK 5 | # from e2b import Sandbox 6 | # sandbox = Sandbox(template='openhands') 7 | 8 | # JS SDK 9 | # import { Sandbox } from 'e2b' 10 | # const sandbox = await Sandbox.create({ template: 'openhands' }) 11 | 12 | dockerfile = "Dockerfile" 13 | template_name = "openhands" 14 | template_id = "785n69crgahmz0lkdw9h" 15 | -------------------------------------------------------------------------------- /containers/runtime/config.sh: -------------------------------------------------------------------------------- 1 | DOCKER_REGISTRY=ghcr.io 2 | DOCKER_ORG=all-hands-ai 3 | DOCKER_BASE_DIR="./containers/runtime" 4 | DOCKER_IMAGE=runtime 5 | # These variables will be appended by the runtime_build.py script 6 | # DOCKER_IMAGE_TAG= 7 | # DOCKER_IMAGE_SOURCE_TAG= 8 | -------------------------------------------------------------------------------- /dev_config/python/mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | warn_unused_configs = True 3 | ignore_missing_imports = True 4 | check_untyped_defs = True 5 | explicit_package_bases = True 6 | warn_unreachable = True 7 | warn_redundant_casts = True 8 | no_implicit_optional = True 9 | strict_optional = True 10 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | /static/swagger-ui 7 | 8 | # Generated files 9 | .docusaurus 10 | .cache-loader 11 | 12 | # Misc 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | -------------------------------------------------------------------------------- /docs/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-blog/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "message": "Blog", 4 | "description": "The title for the blog used in SEO" 5 | }, 6 | "description": { 7 | "message": "Blog", 8 | "description": "The description for the blog used in SEO" 9 | }, 10 | "sidebar.title": { 11 | "message": "Articles récents", 12 | "description": "The label for the left sidebar" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-docs/current/python/python.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Documentation Python 4 | 5 | La documentation apparaîtra ici après le déploiement. 6 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-docs/current/python/sidebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": ["python/python"], 3 | "label": "Backend", 4 | "type": "categorie" 5 | } 6 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/how-to/persist-session-data.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Persistance des données de session 4 | 5 | Avec l'installation standard, les données de session sont stockées en mémoire. Actuellement, si le service OpenHands est redémarré, 6 | les sessions précédentes deviennent invalides (un nouveau secret est généré) et ne sont donc pas récupérables. 7 | 8 | ## Comment persister les données de session 9 | 10 | ### Workflow de développement 11 | Dans le fichier `config.toml`, spécifiez ce qui suit : 12 | ``` 13 | [core] 14 | ... 15 | file_store="local" 16 | file_store_path="/absolute/path/to/openhands/cache/directory" 17 | jwt_secret="secretpass" 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: /usage/runtimes 3 | title: Runtime Configuration 4 | --- 5 | 6 | import { Redirect } from '@docusaurus/router'; 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/runtimes/modal.md: -------------------------------------------------------------------------------- 1 | # Runtime Modal 2 | 3 | Nos partenaires chez [Modal](https://modal.com/) ont fourni un runtime pour OpenHands. 4 | 5 | Pour utiliser le Runtime Modal, créez un compte, puis [créez une clé API.](https://modal.com/settings) 6 | 7 | Vous devrez ensuite définir les variables d'environnement suivantes lors du démarrage d'OpenHands : 8 | ```bash 9 | docker run # ... 10 | -e RUNTIME=modal \ 11 | -e MODAL_API_TOKEN_ID="your-id" \ 12 | -e MODAL_API_TOKEN_SECRET="modal-api-key" \ 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-blog/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "message": "ブログ", 4 | "description": "The title for the blog used in SEO" 5 | }, 6 | "description": { 7 | "message": "OpenHands ブログ", 8 | "description": "The description for the blog used in SEO" 9 | }, 10 | "sidebar.title": { 11 | "message": "最近の投稿", 12 | "description": "The label for the left sidebar" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/python/sidebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": ["python/python"], 3 | "label": "バックエンド", 4 | "type": "categorie" 5 | } 6 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/customization/repository.md: -------------------------------------------------------------------------------- 1 | # リポジトリのカスタマイズ 2 | 3 | リポジトリのルートレベルに `.openhands` ディレクトリを作成することで、OpenHandsがあなたのリポジトリとどのように連携するかをカスタマイズできます。 4 | 5 | ## マイクロエージェント 6 | 7 | マイクロエージェントを使用すると、OpenHandsのプロンプトをプロジェクト固有の情報で拡張し、OpenHandsがどのように機能するかを定義できます。詳細については[マイクロエージェントの概要](../prompting/microagents-overview)をご覧ください。 8 | 9 | 10 | ## セットアップスクリプト 11 | `.openhands/setup.sh` ファイルを追加すると、OpenHandsがあなたのリポジトリで作業を開始するたびに実行されます。 12 | これは依存関係のインストール、環境変数の設定、その他のセットアップタスクを実行するための理想的な場所です。 13 | 14 | 例えば: 15 | ```bash 16 | #!/bin/bash 17 | export MY_ENV_VAR="my value" 18 | sudo apt-get update 19 | sudo apt-get install -y lsof 20 | cd frontend && npm install ; cd .. 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/how-to/persist-session-data.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Persistance des données de session 4 | 5 | Avec l'installation standard, les données de session sont stockées en mémoire. Actuellement, si le service OpenHands est redémarré, 6 | les sessions précédentes deviennent invalides (un nouveau secret est généré) et ne sont donc pas récupérables. 7 | 8 | ## Comment persister les données de session 9 | 10 | ### Workflow de développement 11 | Dans le fichier `config.toml`, spécifiez ce qui suit : 12 | ``` 13 | [core] 14 | ... 15 | file_store="local" 16 | file_store_path="/absolute/path/to/openhands/cache/directory" 17 | jwt_secret="secretpass" 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/key-features.md: -------------------------------------------------------------------------------- 1 | # OpenHands 機能概要 2 | 3 | ![概要](/img/oh-features.png) 4 | 5 | ### チャットパネル 6 | - ユーザーとOpenHands間の会話を表示します。 7 | - OpenHandsはこのパネルで自身の行動を説明します。 8 | 9 | ### 変更 10 | - OpenHandsによって実行されたファイル変更を表示します。 11 | 12 | ### VS Code 13 | - ファイルの閲覧や修正のための組み込みVS Code。 14 | - ファイルのアップロードやダウンロードにも使用できます。 15 | 16 | ### ターミナル 17 | - OpenHandsとユーザーがターミナルコマンドを実行するためのスペース。 18 | 19 | ### Jupyter 20 | - OpenHandsによって実行されたすべてのPythonコマンドを表示します。 21 | - データ可視化タスクにOpenHandsを使用する際に特に便利です。 22 | 23 | ### アプリ 24 | - OpenHandsがアプリケーションを実行する際にウェブサーバーを表示します。 25 | - ユーザーは実行中のアプリケーションと対話できます。 26 | 27 | ### ブラウザ 28 | - OpenHandsがウェブサイトを閲覧するために使用します。 29 | - ブラウザは非対話式です。 30 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/llms/openrouter.md: -------------------------------------------------------------------------------- 1 | # OpenRouter 2 | 3 | OpenHandsはLiteLLMを使用してOpenRouter上のチャットモデルを呼び出します。OpenRouterをプロバイダーとして使用する方法に関するドキュメントは[こちら](https://docs.litellm.ai/docs/providers/openrouter)で確認できます。 4 | 5 | ## 設定 6 | 7 | OpenHandsを実行する際、設定画面から以下の項目を設定する必要があります: 8 | * `LLM Provider`を`OpenRouter`に設定 9 | * `LLM Model`を使用するモデルに設定 10 | [OpenRouterモデルの完全なリストはこちらで確認できます](https://openrouter.ai/models)。 11 | モデルがリストにない場合は、`Advanced`オプションを切り替えて、`Custom Model`に入力してください(例:openrouter/<model-name> のように `openrouter/anthropic/claude-3.5-sonnet`)。 12 | * `API Key`にOpenRouterのAPIキーを設定 13 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/runtimes.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: /usage/runtimes 3 | title: Runtime Configuration 4 | --- 5 | 6 | import { Redirect } from '@docusaurus/router'; 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/runtimes/modal.md: -------------------------------------------------------------------------------- 1 | # Modal ランタイム 2 | 3 | [Modal](https://modal.com/)のパートナーがOpenHands用のランタイムを提供しています。 4 | 5 | Modal ランタイムを使用するには、アカウントを作成し、[APIキーを作成してください。](https://modal.com/settings) 6 | 7 | その後、OpenHandsを起動する際に以下の環境変数を設定する必要があります: 8 | ```bash 9 | docker run # ... 10 | -e RUNTIME=modal \ 11 | -e MODAL_API_TOKEN_ID="your-id" \ 12 | -e MODAL_API_TOKEN_SECRET="modal-api-key" \ 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/i18n/ja/docusaurus-plugin-content-docs/current/usage/runtimes/remote.md: -------------------------------------------------------------------------------- 1 | # OpenHands リモートランタイム 2 | 3 | :::note 4 | このランタイムは、[OpenHands 評価ハーネス](https://github.com/All-Hands-AI/OpenHands/tree/main/evaluation)を通じたエージェント評価目的のみのために特別に設計されています。OpenHands アプリケーションの本番環境での起動には使用しないでください。 5 | ::: 6 | 7 | OpenHands リモートランタイムは現在ベータ版です(詳細は[こちら](https://runtime.all-hands.dev/)を参照)。これにより、クラウド上で並行してランタイムを起動することができます。試してみたい場合は、[このフォーム](https://docs.google.com/forms/d/e/1FAIpQLSckVz_JFwg2_mOxNZjCtr7aoBFI2Mwdan3f75J_TrdMS1JV2g/viewform)に記入して申し込んでください! 8 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-blog/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "message": "Blog", 4 | "description": "O título do blog usado para SEO" 5 | }, 6 | "description": { 7 | "message": "Blog", 8 | "description": "A descrição do blog usada para SEO" 9 | }, 10 | "sidebar.title": { 11 | "message": "Artigos recentes", 12 | "description": "A descrição para a barra lateral esquerda" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-docs/current/python/python.md: -------------------------------------------------------------------------------- 1 | # Python Docs 2 | 3 | Docs will appear here after deployment. 4 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-docs/current/python/sidebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": ["python/python"], 3 | "label": "Backend", 4 | "type": "category" 5 | } 6 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-docs/current/usage/runtimes.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: /usage/runtimes 3 | title: Runtime Configuration 4 | --- 5 | 6 | import { Redirect } from '@docusaurus/router'; 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-docs/current/usage/runtimes/modal.md: -------------------------------------------------------------------------------- 1 | # Modal Runtime 2 | 3 | Nossos parceiros da [Modal](https://modal.com/) forneceram um runtime para OpenHands. 4 | 5 | Para usar o Modal Runtime, crie uma conta e, em seguida, [crie uma chave API.](https://modal.com/settings) 6 | 7 | Você precisará definir as seguintes variáveis de ambiente ao iniciar o OpenHands: 8 | ```bash 9 | docker run # ... 10 | -e RUNTIME=modal \ 11 | -e MODAL_API_TOKEN_ID="seu-id" \ 12 | -e MODAL_API_TOKEN_SECRET="sua-chave-api-modal" \ 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/i18n/pt-BR/docusaurus-plugin-content-docs/current/usage/runtimes/remote.md: -------------------------------------------------------------------------------- 1 | # OpenHands Remote Runtime 2 | 3 | :::note 4 | Este runtime é especificamente projetado apenas para fins de avaliação de agentes através do 5 | [OpenHands evaluation harness](https://github.com/All-Hands-AI/OpenHands/tree/main/evaluation). Não deve ser usado para lançar aplicações OpenHands em produção. 6 | ::: 7 | 8 | O OpenHands Remote Runtime está atualmente em beta (leia [aqui](https://runtime.all-hands.dev/) para mais detalhes), ele permite que você execute runtimes 9 | em paralelo na nuvem. Preencha [este formulário](https://docs.google.com/forms/d/e/1FAIpQLSckVz_JFwg2_mOxNZjCtr7aoBFI2Mwdan3f75J_TrdMS1JV2g/viewform) para se candidatar se quiser experimentar! 10 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-blog/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "message": "博客", 4 | "description": "The title for the blog used in SEO" 5 | }, 6 | "description": { 7 | "message": "博客", 8 | "description": "The description for the blog used in SEO" 9 | }, 10 | "sidebar.title": { 11 | "message": "最近文章", 12 | "description": "The label for the left sidebar" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/python/python.md: -------------------------------------------------------------------------------- 1 | # Python 文档 2 | 3 | 部署后文档将显示在此处。 4 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/python/sidebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": ["python/python"], 3 | "label": "后端", 4 | "type": "category" 5 | } 6 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/cloud/cloud-ui.md: -------------------------------------------------------------------------------- 1 | # 云界面 2 | 3 | 云界面为与OpenHands AI交互提供了网页界面。本页面说明如何访问和使用OpenHands云界面。 4 | 5 | ## 访问界面 6 | 7 | OpenHands云界面可以在[app.all-hands.dev](https://app.all-hands.dev)访问。您需要使用GitHub或GitLab账户登录才能访问界面。 8 | 9 | 10 | 11 | 12 | ## 主要功能 13 | 14 | 有关OpenHands云界面中可用功能的详细信息,请参阅文档的[主要功能](../key-features.md)部分。 15 | 16 | ## 设置 17 | 18 | 设置页面允许您: 19 | 20 | 1. 配置您的账户偏好 21 | 2. 管理仓库访问权限 22 | 3. 生成用于程序化访问的API密钥 23 | 4. 自定义您的OpenHands体验 24 | 25 | ## 下一步 26 | 27 | - [使用云问题解决器](./cloud-issue-resolver.md)自动修复代码并获取帮助 28 | - [了解云API](./cloud-api.md)进行程序化访问 29 | - [返回入门指南](./openhands-cloud.md) 30 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/customization/repository.md: -------------------------------------------------------------------------------- 1 | # 仓库自定义 2 | 3 | 您可以通过在根目录创建一个 `.openhands` 目录来自定义 OpenHands 与您的仓库的交互方式。 4 | 5 | ## 微代理 6 | 7 | 微代理允许您使用特定于项目的信息扩展 OpenHands 提示,并定义 OpenHands 应该如何运行。有关更多信息,请参阅[微代理概述](../prompting/microagents-overview)。 8 | 9 | 10 | ## 设置脚本 11 | 您可以添加一个 `.openhands/setup.sh` 文件,该文件将在 OpenHands 每次开始处理您的仓库时运行。 12 | 这是安装依赖项、设置环境变量和执行其他设置任务的理想位置。 13 | 14 | 例如: 15 | ```bash 16 | #!/bin/bash 17 | export MY_ENV_VAR="my value" 18 | sudo apt-get update 19 | sudo apt-get install -y lsof 20 | cd frontend && npm install ; cd .. 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/how-to/persist-session-data.md: -------------------------------------------------------------------------------- 1 | 以下是翻译后的内容: 2 | 3 | # 持久化会话数据 4 | 5 | 使用标准安装,会话数据存储在内存中。目前,如果 OpenHands 服务重新启动,之前的会话将失效(生成新的密钥),因此无法恢复。 6 | 7 | ## 如何持久化会话数据 8 | 9 | ### 开发工作流 10 | 在 `config.toml` 文件中,指定以下内容: 11 | ``` 12 | [core] 13 | ... 14 | file_store="local" 15 | file_store_path="/absolute/path/to/openhands/cache/directory" 16 | jwt_secret="secretpass" 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/key-features.md: -------------------------------------------------------------------------------- 1 | # OpenHands 功能概览 2 | 3 | ![概览](/img/oh-features.png) 4 | 5 | ### 聊天面板 6 | - 显示用户与 OpenHands 之间的对话。 7 | - OpenHands 在此面板中解释其操作。 8 | 9 | ### 变更 10 | - 显示 OpenHands 执行的文件变更。 11 | 12 | ### VS Code 13 | - 嵌入式 VS Code,用于浏览和修改文件。 14 | - 也可用于上传和下载文件。 15 | 16 | ### 终端 17 | - 供 OpenHands 和用户运行终端命令的空间。 18 | 19 | ### Jupyter 20 | - 显示 OpenHands 执行的所有 Python 命令。 21 | - 在使用 OpenHands 执行数据可视化任务时特别有用。 22 | 23 | ### 应用 24 | - 当 OpenHands 运行应用程序时显示网络服务器。 25 | - 用户可以与正在运行的应用程序交互。 26 | 27 | ### 浏览器 28 | - 由 OpenHands 用于浏览网站。 29 | - 浏览器是非交互式的。 30 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/llms/openrouter.md: -------------------------------------------------------------------------------- 1 | # OpenRouter 2 | 3 | OpenHands 使用 LiteLLM 来调用 OpenRouter 上的聊天模型。您可以在[这里](https://docs.litellm.ai/docs/providers/openrouter)找到关于使用 OpenRouter 作为提供商的文档。 4 | 5 | ## 配置 6 | 7 | 运行 OpenHands 时,您需要在 OpenHands UI 的设置中设置以下内容: 8 | * 将 `LLM Provider` 设置为 `OpenRouter` 9 | * 将 `LLM Model` 设置为您将使用的模型。 10 | [访问此处查看 OpenRouter 模型的完整列表](https://openrouter.ai/models)。 11 | 如果模型不在列表中,切换到 `Advanced` 选项,并在 `Custom Model` 中输入(例如 openrouter/<model-name> 如 `openrouter/anthropic/claude-3.5-sonnet`)。 12 | * 将 `API Key` 设置为您的 OpenRouter API 密钥。 13 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: /usage/runtimes 3 | title: Runtime Configuration 4 | --- 5 | 6 | import { Redirect } from '@docusaurus/router'; 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes/modal.md: -------------------------------------------------------------------------------- 1 | # Modal 运行时 2 | 3 | 我们在 [Modal](https://modal.com/) 的合作伙伴为 OpenHands 提供了一个运行时。 4 | 5 | 要使用 Modal 运行时,请创建一个账户,然后[创建一个 API 密钥。](https://modal.com/settings) 6 | 7 | 然后,在启动 OpenHands 时,您需要设置以下环境变量: 8 | ```bash 9 | docker run # ... 10 | -e RUNTIME=modal \ 11 | -e MODAL_API_TOKEN_ID="your-id" \ 12 | -e MODAL_API_TOKEN_SECRET="modal-api-key" \ 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/runtimes/remote.md: -------------------------------------------------------------------------------- 1 | # OpenHands 远程运行时 2 | 3 | :::note 4 | 此运行时专为通过 [OpenHands 评估框架](https://github.com/All-Hands-AI/OpenHands/tree/main/evaluation) 进行代理评估而设计。它不应用于启动生产环境的 OpenHands 应用程序。 5 | ::: 6 | 7 | OpenHands 远程运行时目前处于测试阶段(详情请阅读[此处](https://runtime.all-hands.dev/)),它允许您在云端并行启动运行时。如果您想尝试使用,请填写[此表单](https://docs.google.com/forms/d/e/1FAIpQLSckVz_JFwg2_mOxNZjCtr7aoBFI2Mwdan3f75J_TrdMS1JV2g/viewform)申请! 8 | -------------------------------------------------------------------------------- /docs/modules/python/python.md: -------------------------------------------------------------------------------- 1 | # Python Docs 2 | 3 | Docs will appear here after deployment. 4 | -------------------------------------------------------------------------------- /docs/modules/python/sidebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": ["python/python"], 3 | "label": "Backend", 4 | "type": "category" 5 | } 6 | -------------------------------------------------------------------------------- /docs/modules/usage/cloud/gitlab-installation.md: -------------------------------------------------------------------------------- 1 | # GitLab Installation 2 | 3 | This guide walks you through the process of installing and configuring OpenHands Cloud for your GitLab repositories. 4 | 5 | ## Prerequisites 6 | 7 | - A GitLab account 8 | - Access to OpenHands Cloud 9 | 10 | ## Installation Steps 11 | 12 | 1. Log in to [OpenHands Cloud](https://app.all-hands.dev) 13 | 2. If you haven't connected your GitLab account yet: 14 | - Click on `Log in with GitLab` 15 | - Authorize the OpenHands application 16 | 17 | 18 | 19 | ## Next Steps 20 | 21 | - [Access the Cloud UI](./cloud-ui.md) to interact with the web interface 22 | - [Use the Cloud API](./cloud-api.md) to programmatically interact with OpenHands 23 | -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/1_select_power_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/1_select_power_user.png -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/2_select_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/2_select_model.png -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/3_select_devstral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/3_select_devstral.png -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/4_set_context_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/4_set_context_window.png -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/5_copy_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/5_copy_url.png -------------------------------------------------------------------------------- /docs/modules/usage/llms/screenshots/6_copy_to_get_model_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/All-Hands-AI/OpenHands/4221ce856626199b409715f7f5d4752111a9fa25/docs/modules/usage/llms/screenshots/6_copy_to_get_model_name.png -------------------------------------------------------------------------------- /docs/modules/usage/runtimes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Runtime Configuration 3 | slug: /usage/runtimes 4 | --- 5 | 6 | import { Redirect } from '@docusaurus/router'; 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/modules/usage/runtimes/modal.md: -------------------------------------------------------------------------------- 1 | # Modal Runtime 2 | 3 | Our partners at [Modal](https://modal.com/) have provided a runtime for OpenHands. 4 | 5 | To use the Modal Runtime, create an account, and then [create an API key.](https://modal.com/settings) 6 | 7 | You'll then need to set the following environment variables when starting OpenHands: 8 | ```bash 9 | docker run # ... 10 | -e RUNTIME=modal \ 11 | -e MODAL_API_TOKEN_ID="your-id" \ 12 | -e MODAL_API_TOKEN_SECRET="modal-api-key" \ 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/modules/usage/runtimes/remote.md: -------------------------------------------------------------------------------- 1 | # OpenHands Remote Runtime 2 | 3 | :::note 4 | This runtime is specifically designed for agent evaluation purposes only through the 5 | [OpenHands evaluation harness](https://github.com/All-Hands-AI/OpenHands/tree/main/evaluation). It should not be used to launch production OpenHands applications. 6 | ::: 7 | 8 | OpenHands Remote Runtime is currently in beta (read [here](https://runtime.all-hands.dev/) for more details), it allows you to launch runtimes 9 | in parallel in the cloud. Fill out [this form](https://docs.google.com/forms/d/e/1FAIpQLSckVz_JFwg2_mOxNZjCtr7aoBFI2Mwdan3f75J_TrdMS1JV2g/viewform) to apply if you want to try this out! 10 | -------------------------------------------------------------------------------- /docs/plugins/tailwind-config.cjs: -------------------------------------------------------------------------------- 1 | export default function tailwindPlugin(context, options) { 2 | return { 3 | name: 'tailwind-plugin', 4 | configurePostCss(postcssOptions) { 5 | postcssOptions.plugins = [ 6 | require('postcss-import'), 7 | require('tailwindcss'), 8 | require('autoprefixer'), 9 | ]; 10 | return postcssOptions; 11 | }, 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /docs/src/components/Demo/Demo.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styles from "./index.module.css"; 3 | 4 | export function Demo() { 5 | const videoRef = React.useRef(null); 6 | 7 | return ( 8 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /docs/src/components/Demo/index.module.css: -------------------------------------------------------------------------------- 1 | .demo { 2 | width: 100%; 3 | max-width: 800px; 4 | text-align: center; 5 | border-radius: 40px; 6 | } 7 | -------------------------------------------------------------------------------- /docs/src/pages/_footer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import CustomFooter from '../components/CustomFooter'; 3 | 4 | export default function Footer() { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /docs/src/theme/Layout/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import OriginalLayout from '@theme-original/Layout'; 3 | import Footer from '@site/src/pages/_footer'; 4 | 5 | export default function Layout(props) { 6 | return ( 7 | <> 8 | 9 |